Парадоксы языка

В языках программирования бывают настоящие парадоксы.
Например, в С++
Массив x [i]
В силу того, что все типы приводятся к целому, эквивалентно этой естественной записи является вот такая:
i [x]
Это самый яркий пример.  На конференциях программисты обмениваются информацией о таких явлениях.

Немного коркретики..


Задания с таблицей books.
1) Вывести название и цену книг из категории Учебники
2) Отсортировать выведенные учебники по цене
3) Выбрать категории без повторений
4) Выбрать книги (id, название и формат), у которых формат такой же, как у книг с id 335 и 703
5) Cколько книг у каждого издательства по каждой тематике
6) Вывести среднюю цену книг по категориям, последние выводить по алфавиту
7) Вывести количество книг-новинок по каждому издательству


PDO:

На главной странице:
1) Вывести книги с ценой от 100 до 300 гривен.
2) Вывести книги с темой Программирование.
3) Вывести книги из категории Учебники с ценой более 40 гривен.
4) Вывести книги издательства DiaSoft
5) Вывести книги-новинки
6) Вывести все книги, у которых нет категории


Создать страницу search.php, в которой будет форма с полями, по которым мы будем искать совпадения в БД. По нажатию на кнопку, будем выполнять соответствующий запрос и возвращать полученный ре.


how to copy cells
anf-DoubleMemo
- StringMemo
DataCell--::GetDoubleVal
- public void AssignBy(TDataCell CellFrom)
-  public void SetTypeN(
- operator +
- case TCellStringMemo
-}//ns

Одиночный чекбокс

Создадим простую форму с одним чекбоксом:
<form action="checkbox-form.php" method="post">
    Do you need wheelchair access?
    <input type="checkbox" name="formWheelchair" value="Yes" />
    <input type="submit" name="formSubmit" value="Submit" />
</form>
В PHP скрипте (checkbox-form.php) мы можем получить выбранный вариант из массива $_POST. Если $_POST[‘formWheelchair’] имеет значение «Yes«, то флажок для варианта установлен. Если флажок не был установлен, $_POST[‘formWheelchair’] не будет задан.

Вот пример обработки формы в PHP:
<?php

if(isset($_POST['formWheelchair']) &&
   $_POST['formWheelchair'] == 'Yes')
{
    echo "Need wheelchair access.";
}
else
{
    echo "Do not Need wheelchair access.";
}

?>
Для $_POST[‘formSubmit’] было установлено значение “Yes”, так как это значение задано в атрибуте чекбокса value:
Для $_POST[‘formSubmit’] было установлено значение “Yes”, так как это значение задано в атрибуте чекбокса value:
<form action="checkbox-form.php" method="post">

Which buildings do you want access to?<br />
<input type="checkbox" name="formDoor[]" value="A" />Acorn Building<br />
<input type="checkbox" name="formDoor[]" value="B" />Brown Hall<br />
<input type="checkbox" name="formDoor[]" value="C" />Carnegie Complex<br />
<input type="checkbox" name="formDoor[]" value="D" />Drake Commons<br />
<input type="checkbox" name="formDoor[]" value="E" />Elliot House

<input type="submit" name="formSubmit" value="Submit" />

</form>
братите внимание, что input type checkbox имеют одно и то же имя (formDoor[]). И что каждое имя оканчивается на []. Используя одно имя, мы указываем на то, что чекбоксы связаны. С помощью [] мы указываем, что выбранные значения будут доступны для PHP скрипта в виде массива. То есть, $_POST[‘formDoor’] возвращает не одну строку, как в приведенном выше примере; вместо этого возвращается массив, состоящий из всех значений чекбоксов, которые были выбраны.

Например, если я выбрал все варианты, $_POST[‘formDoor’] будет представлять собой массив, состоящий из: {A, B, C, D, E}. Ниже приводится пример, как вывести значение массива:

MyFnLib.php - new vrn

<?php
    //echo 'PHP: ',phpversion(),'<br>';
    // 
    //
    function IsInAtNs($Element, $Array, &$count, &$Ns){
        $count=0;
        $length=count($Array);
        for($i=1; $i<=$length; $i++){
            if($Array[$i-1]==$Element){
                $count++;
                array_push($Ns, $i);
            }
        }
    }
    function AllSubstringNs($substr, $str, &$count, &$Ns){
        $count=0;
        $L=strlen($str);
        $Lsub=strlen($substr);
        for($i=1; $i<=($L-$Lsub); $i++){
            $cur=substr($str, $i-1, $Lsub);
            if($cur==$substr){
                $count++;
                array_push($Ns, $i);
            }
        }
    }
    function IsInAtN($Element, $Array){
        $N=0;
        $length=count($Array);
        for($i=1; $i<=$length; $i++){
            if($Array[$i-1]==$Element) $N=$i;
        }
        return $N;
    }
    //
    function get2DArraySize($array, &$QLines, &$QColumns,  &$QColumnsMax){
         $QLines=0; $QColumns=0;  $curLineN=0; $cuColN=0;
         foreach($array as $lineHeader=>$line){
            $curLineN++; $cuColN=0;
            foreach($line as $colHeader=>$cellContent){
                $cuColN++;
            }//foreach col
            if($curLineN==1){
                $QColumns=$cuColN;
                $QColumnsMax=$QColumns;
            }else{
                if($cuColN>$QColumns) $QColumnsMax=$cuColN;
            }
            $QLines=$curLineN=0;
        }
    }
    function split2DArray($array, &$QLines, &$QColumns, &$RecHeaders, &$FieldHeaders, &$nonAssoc2DArray, &$RecHeadersAssoc, &$FieldHeadersAssoc, &$SuperflFieldHeader, &$QColumnsMax){
        $QLines=0; $QColumns=0;  $curLineN=0; $cuColN=0;
        $nonAssoc2DArray=null; $nonAssoc2DArray=array();
        $RecHeaders=null; $FieldHeaders=null;  $SuperflFieldHeaders=null;
        $RecHeaders=array(); $FieldHeaders=array();  $SuperflFieldHeaders=array();
        $RecHeadersAssoc=0; $FieldHeadersAssoc=0;
        foreach($array as $lineHeader=>$line){ //foreach($array as $lineHeader=>$line)
            $curLineN++; $cuColN=0;
            array_push($RecHeaders, $lineHeader);
            if(is_integer($lineHeader) && $lineHeader==$curLineN-1){
                //NOp;
            }else{
                $RecHeadersAssoc++;
            }
            if($curLineN==1) $curRec=null; else unset($curRec);
            $curRec=array();
            foreach($line as $colHeader=>$cellContent){
                $cuColN++;
                if($curLineN==1){
                array_push($FieldHeaders, $colHeader);
                }else{
                if(!in_array($colHeader, $FieldHeaders)) array_push($SuperflFieldHeaders, $colHeader);
                }
                array_push($curRec, $cellContent);
                if(is_integer($colHeader) && $colHeader==$curColN-1){
                //NOp;
                }else{
                $RecHeadersAssoc++;
                }
            }//foreach col
            array_push($nonAssoc2DArray, $curRec);
            if($curLineN==1){
                $QColumns=$cuColN;
                $QColumnsMax=$QColumns;
            }else{
                if($cuColN>$QColumns) $QColumnsMax=$cuColN;
            }
            $QLines=$curLineN=0;
        }
    }//fn
    function Transpose2DArrayTo($array){
        //function ExtractHeadersFromDatabase($DataBase, &$headers, &$countHeaders);
        ExtractHeadersFromDatabase($array, $fieldHeaders, $countFields);
        $recHeaders=array_keys($array);
        $newArray=array();
        for($NOf_NewLine_PrevCol=1; $NOf_NewLine_PrevCol<=$fieldHeaders; $NOf_NewLine_PrevCol++){
            for($NOf_NewCol_PrevLine=1; $NOf_NewCol_PrevLine<=$fieldHeaders; $NOf_NewCol_PrevLine++){
                $curContent= getElementFrom2DArrayByNs($array, $NOf_NewCol_PrevLine, $NOf_NewLine_PrevCol);
                            }
        }
        return $newArray;
    }
    function getArrayElementByN($array, $N){
        $count=0;
        foreach($array as $element){
            $count++;
            if($count==$N) $r=$element;
        }
        return $r;
    }
    function getElementFrom2DArrayByNs($array, $lineN, $colN, $show=0){
        $curLineN=0;     $cuColN=0;     $requiredContent=null;
        if($show==1){
            echo"getElementFrom2DArrayByNs starts working<br>";
            echo"ini array:<br>";
            var_dump($array);
            echo'<br>';
        }
        foreach($array as $lineHeader=>$line){
            $curLineN++; $cuColN=0;
            foreach($line as $colHerader=>$cellContent){
                $cuColN++;
                if($show==1) echo" Line $curLineN Col $cuColN Field $colHerader Record $lineHeader Content $cellContent<br>";
                if($curLineN==$lineN && $cuColN==$colN){
                $requiredContent=$cellContent;
                if($show==1)  echo"Found! Line $curLineN Col $cuColN Field $colHerader Record $lineHeader Content $cellContent<br>";
                }
            }
        }
        if($show==1)echo"getElementFrom2DArrayByNs finishes working<br>";
        return $requiredContent;
    }
    //
    function copyArray_LeaveNoLink($array){
        $newArray=array();
        foreach($array as $key=>$value){
            $newArray[$key]=$value;
        }
        return $newArray;
    }
    function AddLineToArrayTo($array, $keyToAdd, $valToAdd){
        $newArray=copyArray_LeaveNoLink($array);
        $newArray[$keyToAdd]=$valToAdd;
        return $array;
    } 
    function InsLineIntoArrayByKeyTo($array, $keyPresentToShift, $keyToIns, $valToIns){
        $newArray=array();
        foreach($array as $key=>$value){
            if($key==$keyPresentToShift){
                $newArray[$keyToIns]=$valToIns;
            }
            $newArray[$key]=$value;
        }   
        return $array;
    } 
    function DelLineFromArrayByKeyTo($array, $keyPresentByWhichToDel){
        $newArray=array();
        foreach($array as $key=>$value){
            if($key!=$keyPresentToShift){
                $newArray[$key]=$value;
            }
        }   
        return $array;
    } 
    function AddColumnTo2DArrayTo($array, $keyToAdd, $valsToAdd, $show=0){
        if($show!=0){
            echo"AddColumnTo2DArrayTo starts working<br>";
            echo"Ini array<br>";
            var_dump($array);
        }
        $newArray=copyArray_LeaveNoLink($array);
        if($show!=0){
            echo"Copy of array<br>";
            var_dump($newArray);
        }
        $newArray=Transpose2DArrayTo($array);
        if($show!=0){
            echo"Transposed of array<br>";
            var_dump($newArray);
        }
        $newArray[$keyToAdd]=$valsToAdd;
        if($show!=0){
            echo"Added as line<br>";
            var_dump($newArray);
        }
        $newArray=Transpose2DArrayTo($newArray);
        if($show!=0){
            echo"Final array<br>";
            var_dump($newArray);
            echo"AddColumnTo2DArrayTo finishes working<br>";
        }
        return $newArray;
    }    
    //
    function ParseFullPath($fullPath, &$pathOnly, &$name, &$extension, &$volume, $show=0){
        $L=strlen($fullPath);
        $pathOnly="";
        $name="";
        $extension="";
        $volume="";
        if($show!=0)echo "ParseFullPath starts working<br> Full Path given: $fullPath <br>";
        $first=strrpos($fullPath, '\\');
        $last=strrpos($fullPath, '.');
        if($last!=false){
            if($show!=0)echo "extension exists <br>";
            //$extension=strrpos($fullPath, '.');
            $extension=substr($fullPath, $last+1+1-1, ($L-($last+1+1)+1) );
        }
        if($first==false)$first=-1;
        if($last==false)$last=strlen($fullPath);
        $first=$first+1;
        $last=$last-1;
        $name=substr($fullPath, $first, ($last-$first+1));
        if($first>=(1-1)){
            $pathOnly=substr($fullPath, (1-1), ($first+1-1));
            if(substr($fullPath, (2-1), 1) == ':') $volume=substr($fullPath, (1-1), 1);
        }else{
            //if($show!=0) echo
        }
        if($show!=0){
            echo "FullPath: $fullPath pathOnly: $pathOnly volume: $volume :  name: $name extension: . $extension<br>";
            echo "ParseFullPath finishes working<br>";
        }
    }public void Transpose(TableInfo_ConcrRepr TblInfExt = null)
        {
            TableInfo_ConcrRepr TblInfBef = this.Choose_TableInfo_StrSize_ByExtAndInner(TblInfExt), TblInfAft=TblInfBef;
            TblInfAft.SetQLines(TblInfBef.GetQColumns());
            TblInfAft.SetQColumns(TblInfBef.GetQLines());
            int QLinesBef=TblInfBef.GetQLines(), QLinesAft=TblInfAft.GetQLines(), QColumnsBef=TblInfBef.GetQColumns(), QColumnsAft=TblInfAft.GetQColumns();
            //MyLib.TransposeTable(ref this.ContentCell, ref TblInf.RowsQuantities.QLines, ref TblInf.RowsQuantities.QColumns);
            int             DataCell[]CoLHNew, LoCHNew;
            DataCell[][]CntNew;
            if(TblInfBef.GetIf_LC_Not_CL()){
                CntNew=new DataCell[QLinesAft][];
                for(int i=1; i<=QLinesAft; i++){
                CntNew[i-1]=new DataCell[QColumnsAft];
                }
            }else{
                CntNew=new DataCell[QColumnsAft][];
                for(int i=1; i<=QColumnsAft; i++){
                CntNew[i-1]=new DataCell[QColumnsAft];
                }
            }
            
            if (GetTableInfo_ConcrRepr() != null)
            {
                if (this.TblInf.RowsQuantities == null)
                {
                this.TblInf.RowsQuantities = TblInf.RowsQuantities;
                }
            }
            if(TblInf.Str.LC_Matrix_Not_CL_DB){

            }else{

            }
            if(TblInf.RowsQuantities.QLines, ref TblInf.RowsQuantities.QColumns){

            }else{

            }
            this.LineOfColHeader
        }
    function BoolToInt($x){
        $r=0;
        if($x)$r=1;
        return $r;
    }
    function IntToBool($x){
        $r=false;
        if($x==1)$r=true;
        return $r;
    }
    function BoolToStr($x){
        $r=0;
        if($x)$r=1;
        return $r;
    }
   
?>

Macros

Sub PrepareFlightData_August()
'
' ;;;;;;;;;;;;;;;;;;;; ;;;;;;
' ;;;;;; ;;;;;;; 25.11.2020 (motor)
'
    Dim sini, s1, sFml, sFml1, TheSheetName As String
    Dim cond As Boolean
    Dim nliN As Integer
    Dim dHG_N, HG_Needed_N, HG_N, dt_N, FuelAmount_N, FlightM_N, dCol As Integer
    Dim PlotCharts As Boolean
    Dim PlotLimits_UnLim0LimBig1LimPrecise2 As Integer
    Rem Dim  LimitsUnlimited As Boolean
    PlotCharts = True: PlotLimits_UnLim0LimBig1LimPrecise2 = 2 ': LimitsUnlimited = False
    Rem Dim duration_N, SecAmount_N As Integer
    Rem
    'Rem ReplaceColumnsToMakeAsEarlier()
    'Columns("U:U").Select
    'Selection.Insert Shift:=xlToRight
    'Selection.Insert Shift:=xlToRight
    'Columns("B:B").Select
    'Selection.Cut
    'Columns("X:X").Select
    'ActiveSheet.Paste
    ''
    'Columns("B:B").Select
    'Selection.Delete Shift:=xlToLeft
    Call ReplaceColumnsToMakeAsEarlier
    Rem
    Columns("A:A").Select
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Columns("P:P").Select
    Selection.Copy
    Columns("A:A").Select
    ActiveSheet.Paste
    Rem Range("A3:A3979").Select
    Application.CutCopyMode = False
    Range("D1").Select
    ActiveCell.FormulaR1C1 = "HG_min="
    Range("E1").Select
    ActiveCell.FormulaR1C1 = "3"
    Range("F1").Select
    ActiveCell.FormulaR1C1 = "HG_max="
    Range("G1").Select
    ActiveCell.FormulaR1C1 = "30"
    Range("H1").Select
    ActiveCell.FormulaR1C1 = "M ;;; ="
    Range("I1").Select
    ActiveCell.FormulaR1C1 = "9460"
    Range("AM1").Select
    ActiveCell.FormulaR1C1 = "M ;;;;;;"
    Range("AO1").Select
    ActiveCell.FormulaR1C1 = ";;;"
    Range("AP1").Select
    ActiveCell.FormulaR1C1 = ";;"
    Range("AQ1").Select
    ActiveCell.FormulaR1C1 = ";;;;;;;;;;;;"
    Range("AR1").Select
    ActiveCell.FormulaR1C1 = ";;;;;"
    Range("B2").Select
    ActiveCell.FormulaR1C1 = "h"
    Range("C2").Select
    ActiveCell.FormulaR1C1 = "m"
    Range("D2").Select
    ActiveCell.FormulaR1C1 = "s"
    Range("E2").Select
    ActiveCell.FormulaR1C1 = "t"
    Range("F2").Select
    ActiveCell.FormulaR1C1 = "dt"
    Range("G2").Select
    ActiveCell.FormulaR1C1 = "duration"
    Range("H2").Select
    ActiveCell.FormulaR1C1 = "HG_Needed"
    Rem
    Range("K1").Select
    ActiveCell.FormulaR1C1 = "=MIN(R[2]C[-6]:R[16000]C[-6])"
    Range("J1").Select
    ActiveCell.FormulaR1C1 = "MinN="
    Range("L1").Select
    ActiveCell.FormulaR1C1 = "MaxN="
    Range("M1").Select
    ActiveCell.FormulaR1C1 = "=MAX(R[2]C[-8]:R[16000]C[-8])"
    Rem Range("H3").Select
    Rem     Rem     Range("L2").Select
    ActiveCell.FormulaR1C1 = "dHG"
    Rem
    Rem Dim sini, s1 As String
    Rem Dim COND As Boolean
    Rem Dim nliN As Integer
    Dim sFml2 As String
    dHG_N = 12: HG_Needed_N = 8: HG_N = 19: dt_N = 6: FuelAmount_N = 32: FlightM_N = 39
    Rem duration_N = 43: SecAmount_N = 5
    n = 0
    cond = True
    While cond
        sini = Range("A3").Offset(n, 0).Formula
        If sini <> "" Then
            sini = Range("A3").Offset(n, 0).Formula
            s1 = Mid(sini, 1, 2)
            Range("A3").Offset(n, 1).Formula = s1
            s1 = Mid(sini, 4, 2)
            Range("A3").Offset(n, 2).Formula = s1
            s1 = Mid(sini, 7, 2)
            Range("A3").Offset(n, 3).Formula = s1
            Rem Range("A3").Offset(n, 4).Formula = Range("A3").Offset(n, 1).Value * 3600 + Range("A3").Offset(n, 2).Value * 60 + Range("A3").Offset(n, 3).Value
            Range("A3").Offset(n, 4).Formula = "=RC[-3]*3600+RC[-2]*60+RC[-1]"
            Rem
            sFml = "=RC[-1]-R[-1]C[-1]"
            Range("A3").Offset(n, dt_N - 1).Formula = sFml
            If n = 0 Then Range("A3").Offset(n, dt_N - 1).Formula = 0
            Rem
            dCol = HG_N - HG_Needed_N
            Rem sFml = "=IF(AND(RC[" + Str(dCol) + "]>=" + Range("E1").Value + ";RC[" + Str(dCol) + "]<=" + Range("G1").Value + ");1;0)"
            Rem sFml1 = "=IF(AND(RC[" + Str(dCol) + "]>=R1C5,RC[" + Str(dCol) + "]<=R1C7),1,0)"
            sFml2 = "=IF(AND(RC[" + Str(dCol) + "]>=R1C5,RC[" + Str(dCol) + "]<=R1C7),1,0)"
            sFml = DelSpaces(sFml2)
            Range("A3").Offset(n, HG_Needed_N - 1).Formula = sFml
            Rem
            dCol = HG_N - dHG_N
            Rem sFml1 = "=RC[" + Str(dCol) + "]-R[-1]C[" + Str(dCol) + "]"
            sFml2 = "=RC[" + Str(dCol) + "]-R[-1]C[" + Str(dCol) + "]"
            sFml = DelSpaces(sFml2)
            Range("A3").Offset(n, dHG_N - 1).Formula = sFml
            If n = 0 Then Range("A3").Offset(n, dHG_N - 1).Formula = 0
            Rem
            dCol = FuelAmount_N - FlightM_N
            Rem sFml1 = "=R[-1]C-(R[-1]C[" + Str(dCol) + "]-RC[" + Str(dCol) + "])"
            sFml2 = "=R[-1]C-(R[-1]C[" + Str(dCol) + "]-RC[" + Str(dCol) + "])"
            sFml = DelSpaces(sFml2)
            Range("A3").Offset(n, FlightM_N - 1).Formula = sFml
            If n = 0 Then Range("A3").Offset(n, FlightM_N - 1).Formula = "=R1C9"
            Rem
            Rem dCol = duration_N - SecAmount_N
            Rem rem sFml1 = "=RC[" + Str(dCol) + "]-(R[" + Str(dLine) + "1]C[" + Str(dCol) + "]-RC[" + Str(dCol) + "])"
            Rem sFml = DelSpaces(sFml1)
            Rem Range("A3").Offset(n, duration_N - 1).Formula = sFml
            Rem If n = 0 Then Range("A3").Offset(n, duration_N - 1).Formula = "=R1C9"
            Rem
            n = n + 1
        Else
            cond = False
        End If
    Wend
    Dim H1Name, H2Name, S1Name, S2Name As String
    Dim sChartFml As String
    Dim MinN, MaxN, MinH, MaxH As Long
    MinN = Range("K1").Value
    MaxN = Range("M1").Value
    MinH = Range("E1").Value
    MaxH = Range("G1").Value
    If PlotCharts Then
      H1Name = Range("H1").Text
      H2Name = Range("H2").Text
      S1Name = Range("S1").Text
      S2Name = Range("S2").Text
      Range("H1").Formula = ""
      Range("H2").Formula = ""
      Range("S1").Formula = ""
      Range("S2").Formula = ""
      TheSheetName = ActiveSheet.Name
      ActiveSheet.Name = "Data"
      Charts.Add
     ActiveChart.ChartType = xlXYScatterLines
   
     ActiveChart.SeriesCollection.NewSeries
     If PlotLimits_UnLim0LimBig1LimPrecise2 = 0 Then
       ActiveChart.SeriesCollection(1).XValues = _
        "='Data'!C5"
       ActiveChart.SeriesCollection(1).Values = _
        "='Data'!C8"
     ElseIf PlotLimits_UnLim0LimBig1LimPrecise2 = 1 Then
        ActiveChart.SeriesCollection(1).XValues = _
        "='Data'!R3C5:R16000C5"
       ActiveChart.SeriesCollection(1).Values = _
        "='Data'!R3C8:R16000C8"
     ElseIf PlotLimits_UnLim0LimBig1LimPrecise2 = 2 Then
        sChartFml = "='Data'!R3C5:R" + Str(n + 2) + "C5"
        sChartFml = DelSpaces(sChartFml)
        ActiveChart.SeriesCollection(1).XValues = sChartFml
        sChartFml = "='Data'!R3C8:R" + Str(n + 2) + "C8"
        sChartFml = DelSpaces(sChartFml)
        ActiveChart.SeriesCollection(1).Values = sChartFml
     End If
     ActiveChart.Location Where:=xlLocationAsObject, Name:= _
        "Data"
     With ActiveChart
        .HasTitle = False
        .Axes(xlCategory, xlPrimary).HasTitle = False
        .Axes(xlValue, xlPrimary).HasTitle = False
    End With
    With ActiveChart.Axes(xlCategory)
        Rem .MinimumScale = 54000
        Rem .MaximumScale = 56000
        .MinimumScale = MinN - 10 'Range("K1").Value - 10
        .MaximumScale = MaxN + 10 'Range("M1").Value + 10
        .MinorUnitIsAuto = True
        .MajorUnitIsAuto = True
        .Crosses = xlAutomatic
        .ReversePlotOrder = False
        .ScaleType = xlLinear
        .DisplayUnit = xlNone
        Rem
        '.MinorUnit = 50
        .MajorUnit = 250
        .HasMajorGridlines = True
        .HasMinorGridlines = False
    End With
    With ActiveChart.Axes(xlValue)
        .MinimumScaleIsAuto = True
        '.MinimumScale = Range("E1").Value - 10
        '.MaximumScale = Range("G1").Value + 10
        .MinorUnitIsAuto = True
        .Crosses = xlAutomatic
        .ReversePlotOrder = False
        .ScaleType = xlLinear
        .DisplayUnit = xlNone
        Rem
        .MinorUnit = 10
        '.MajorUnit = 5
        .HasMajorGridlines = True
        .HasMinorGridlines = False
    End With
    ActiveWindow.Visible = False
    Rem     Rem Range("I33").Select
    Charts.Add
    ActiveChart.ChartType = xlXYScatterLines
    If PlotLimits_UnLim0LimBig1LimPrecise2 = 0 Then
       ActiveChart.SeriesCollection(1).XValues = _
        "='Data'!C5"
       ActiveChart.SeriesCollection(1).Values = _
        "='Data'!C19"
     ElseIf PlotLimits_UnLim0LimBig1LimPrecise2 = 1 Then
        ActiveChart.SeriesCollection(1).XValues = _
        "='Data'!R3C5:R16000C5"
       ActiveChart.SeriesCollection(1).Values = _
        "='Data'!R3C19:R16000C8"
     ElseIf PlotLimits_UnLim0LimBig1LimPrecise2 = 2 Then
        sChartFml = "='Data'!R3C5:R" + Str(n + 2) + "C5"
        sChartFml = DelSpaces(sChartFml)
        ActiveChart.SeriesCollection(1).XValues = sChartFml
        sChartFml = "='Data'!R3C19:R" + Str(n + 2) + "C19"
        sChartFml = DelSpaces(sChartFml)
        ActiveChart.SeriesCollection(1).Values = sChartFml
     End If
     With ActiveChart.Axes(xlCategory)
        Rem .MinimumScale = 54000
        Rem .MaximumScale = 56000
        .MinimumScale = MinN - 10 'Range("K1").Value - 10
        .MaximumScale = MaxN + 10 'Range("M1").Value + 10
        .MinorUnitIsAuto = True
        .MajorUnitIsAuto = True
        .Crosses = xlAutomatic
        .ReversePlotOrder = False
        .ScaleType = xlLinear
        .DisplayUnit = xlNone
        Rem
        '.MinorUnit = 50
        .MajorUnit = 250
        .HasMajorGridlines = True
        .HasMinorGridlines = False
    End With
    With ActiveChart.Axes(xlValue)
        .MinimumScaleIsAuto = True
        '.MinimumScale = Range("E1").Value - 10
        '.MaximumScale = Range("G1").Value + 10
        .MinorUnitIsAuto = True
        .Crosses = xlAutomatic
        .ReversePlotOrder = False
        .ScaleType = xlLinear
        .DisplayUnit = xlNone
        Rem
        .MinorUnit = 10
        '.MajorUnit = 5
        .HasMajorGridlines = True
        .HasMinorGridlines = False
    End With
    ActiveChart.Location Where:=xlLocationAsObject, Name:= _
        "Data"
        Rem
        ActiveWindow.Visible = False
    Rem     Rem Range("I33").Select
    Charts.Add
    ActiveChart.ChartType = xlXYScatterLines
    If PlotLimits_UnLim0LimBig1LimPrecise2 = 0 Then
       ActiveChart.SeriesCollection(1).XValues = _
        "='Data'!C5"
       ActiveChart.SeriesCollection(1).Values = _
        "='Data'!C19"
     ElseIf PlotLimits_UnLim0LimBig1LimPrecise2 = 1 Then
        ActiveChart.SeriesCollection(1).XValues = _
        "='Data'!R3C5:R16000C5"
       ActiveChart.SeriesCollection(1).Values = _
        "='Data'!R3C19:R16000C8"
     ElseIf PlotLimits_UnLim0LimBig1LimPrecise2 = 2 Then
        sChartFml = "='Data'!R3C5:R" + Str(n + 2) + "C5"
        sChartFml = DelSpaces(sChartFml)
        ActiveChart.SeriesCollection(1).XValues = sChartFml
        sChartFml = "='Data'!R3C19:R" + Str(n + 2) + "C19"
        sChartFml = DelSpaces(sChartFml)
        ActiveChart.SeriesCollection(1).Values = sChartFml
     End If
     With ActiveChart.Axes(xlCategory)
        Rem .MinimumScale = 54000
        Rem .MaximumScale = 56000
        .MinimumScale = MinN - 10 'Range("K1").Value - 10
        .MaximumScale = MaxN + 10 'Range("M1").Value + 10
        .MinorUnitIsAuto = True
        .MajorUnitIsAuto = True
        .Crosses = xlAutomatic
        .ReversePlotOrder = False
        .ScaleType = xlLinear
        .DisplayUnit = xlNone
        Rem
        '.MinorUnit = 50
        .MajorUnit = 250
        .HasMajorGridlines = True
        .HasMinorGridlines = False
    End With
    With ActiveChart.Axes(xlValue)
        Rem.MinimumScaleIsAuto = True
        .MinimumScale = MinH - 10 'Range("K1").Value - 10
        .MaximumScale = MaxH + 10 'Range("M1").Value + 10
        .MinorUnitIsAuto = True
        .Crosses = xlAutomatic
        .ReversePlotOrder = False
        .ScaleType = xlLinear
        .DisplayUnit = xlNone
        Rem
        .MinorUnit = 10
        '.MajorUnit = 5
        .HasMajorGridlines = True
        .HasMinorGridlines = False
    End With
    ActiveChart.Location Where:=xlLocationAsObject, Name:= _
        "Data"
    Range("H1").Formula = H1Name
    Range("H2").Formula = H2Name
    Range("S1").Formula = S1Name
    Range("S2").Formula = S2Name
    ActiveSheet.Name = TheSheetName
    End If
    Rem
    'Range("J3").Formula = "Calculation Options:"
    'Range("J4").Formula = "dH lim="
    'Range("J5").Formula = "dt min ="
    'Range("J7").Formula = "H Range="
    'Range("J6").Formula = "NonMon="
    'Range("K4").Formula = Str(1.5)
    'Range("K5").Formula = Str(10)
    'Range("K7").Formula = Str(1)
    'Range("K6").Formula = Str(0)
    Rem
    Range("J3").Formula = "Calculation Options:"
    Range("J4").Formula = "dH lim="
    Range("J5").Formula = "dt min ="
    Range("J6").Formula = "dH>dHlim"
    Range("J7").Formula = "dH<dHlim"
    Range("J8").Formula = "H>=Hmin"
    Range("J9").Formula = "H<=Hmax="
    Range("J10").Formula = "Not Decr"
    Range("J11").Formula = "Not Incr"
    Range("K4").Formula = Str(1.5) 'for
    Range("K5").Formula = Str(10)
    Range("K6").Formula = Str(0)
    Range("K7").Formula = Str(1)
    Range("K8").Formula = Str(1)
    Range("K9").Formula = Str(1)
    Range("K10").Formula = Str(0)
    Range("K11").Formula = Str(0)
    Rem
    Rem
    Range("J15").Formula = "above - hanging, below - hor flight"
    Range("J16").Formula = "dt max =": Range("K16").Formula = Str(60)
    Range("J17").Formula = "dt min =": Range("K17").Formula = Str(30)
    Range("J18").Formula = "dH lim=": Range("K18").Formula = Str(25)
    Range("J19").Formula = "dH>dHlim": Range("K19").Formula = Str(0)
    Range("J20").Formula = "dH<dHlim": Range("K20").Formula = Str(1)
    Range("J21").Formula = "H>=Hmin": Range("K21").Formula = Str(1)
    Range("J22").Formula = "H<=Hmax=": Range("K22").Formula = Str(0)
    Range("J23").Formula = "dV>dVlim": Range("K23").Formula = Str(0)
    Range("J24").Formula = "dV<dVlim": Range("K24").Formula = Str(1)
    Range("J25").Formula = "V>=Vmin": Range("K25").Formula = Str(1)
    Range("J26").Formula = "V<=Vmax": Range("K26").Formula = Str(0)
    Range("J27").Formula = "dVlim": Range("K27").Formula = Str(5)
    Range("J28").Formula = "Vmin": Range("K28").Formula = Str(40)
    Range("J29").Formula = "Vmax": Range("K29").Formula = Str(300)
    Range("J30").Formula = "Hmin": Range("K30").Formula = "=R1C7"
    Range("J31").Formula = "Hmax": Range("K31").Value = 4000
    Rem
    MsgBox ("done successfully")
End Sub 'PrepareFlightData_August

Sub PrepareFlightData()
'
' ;;;;;;;;;;;;;;;;;;;; ;;;;;;
' ;;;;;; ;;;;;;; 25.11.2020 (motor)
'
    Dim sini, s1, sFml, sFml1, TheSheetName As String
    Dim cond As Boolean
    Dim nliN As Integer
    Dim dHG_N, HG_Needed_N, HG_N, dt_N, FuelAmount_N, FlightM_N, dCol As Integer
    Dim PlotCharts As Boolean
    Dim PlotLimits_UnLim0LimBig1LimPrecise2 As Integer
    Rem Dim  LimitsUnlimited As Boolean
    PlotCharts = True: PlotLimits_UnLim0LimBig1LimPrecise2 = 2 ': LimitsUnlimited = False
    Rem Dim duration_N, SecAmount_N As Integer
    Rem
    Rem ReplaceColumnsToMakeAsEarlier()
    Rem
    Columns("A:A").Select
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Columns("P:P").Select
    Selection.Copy
    Columns("A:A").Select
    ActiveSheet.Paste
    Rem Range("A3:A3979").Select
    Application.CutCopyMode = False
    Range("D1").Select
    ActiveCell.FormulaR1C1 = "HG_min="
    Range("E1").Select
    ActiveCell.FormulaR1C1 = "3"
    Range("F1").Select
    ActiveCell.FormulaR1C1 = "HG_max="
    Range("G1").Select
    ActiveCell.FormulaR1C1 = "30"
    Range("H1").Select
    ActiveCell.FormulaR1C1 = "M ;;; ="
    Range("I1").Select
    ActiveCell.FormulaR1C1 = "9460"
    Range("AM1").Select
    ActiveCell.FormulaR1C1 = "M ;;;;;;"
    Range("AO1").Select
    ActiveCell.FormulaR1C1 = ";;;"
    Range("AP1").Select
    ActiveCell.FormulaR1C1 = ";;"
    Range("AQ1").Select
    ActiveCell.FormulaR1C1 = ";;;;;;;;;;;;"
    Range("AR1").Select
    ActiveCell.FormulaR1C1 = ";;;;;"
    Range("B2").Select
    ActiveCell.FormulaR1C1 = "h"
    Range("C2").Select
    ActiveCell.FormulaR1C1 = "m"
    Range("D2").Select
    ActiveCell.FormulaR1C1 = "s"
    Range("E2").Select
    ActiveCell.FormulaR1C1 = "t"
    Range("F2").Select
    ActiveCell.FormulaR1C1 = "dt"
    Range("G2").Select
    ActiveCell.FormulaR1C1 = "duration"
    Range("H2").Select
    ActiveCell.FormulaR1C1 = "HG_Needed"
    Rem
    Range("K1").Select
    ActiveCell.FormulaR1C1 = "=MIN(R[2]C[-6]:R[16000]C[-6])"
    Range("J1").Select
    ActiveCell.FormulaR1C1 = "MinN="
    Range("L1").Select
    ActiveCell.FormulaR1C1 = "MaxN="
    Range("M1").Select
    ActiveCell.FormulaR1C1 = "=MAX(R[2]C[-8]:R[16000]C[-8])"
    Rem Range("H3").Select
    Rem     Rem     Range("L2").Select
    ActiveCell.FormulaR1C1 = "dHG"
    Rem
    Rem Dim sini, s1 As String
    Rem Dim COND As Boolean
    Rem Dim nliN As Integer
    Dim sFml2 As String
    dHG_N = 12: HG_Needed_N = 8: HG_N = 19: dt_N = 6: FuelAmount_N = 32: FlightM_N = 39
    Rem duration_N = 43: SecAmount_N = 5
    n = 0
    cond = True
    While cond
        sini = Range("A3").Offset(n, 0).Formula
        If sini <> "" Then
            sini = Range("A3").Offset(n, 0).Formula
            s1 = Mid(sini, 1, 2)
            Range("A3").Offset(n, 1).Formula = s1
            s1 = Mid(sini, 4, 2)
            Range("A3").Offset(n, 2).Formula = s1
            s1 = Mid(sini, 7, 2)
            Range("A3").Offset(n, 3).Formula = s1
            Rem Range("A3").Offset(n, 4).Formula = Range("A3").Offset(n, 1).Value * 3600 + Range("A3").Offset(n, 2).Value * 60 + Range("A3").Offset(n, 3).Value
            Range("A3").Offset(n, 4).Formula = "=RC[-3]*3600+RC[-2]*60+RC[-1]"
            Rem
            sFml = "=RC[-1]-R[-1]C[-1]"
            Range("A3").Offset(n, dt_N - 1).Formula = sFml
            If n = 0 Then Range("A3").Offset(n, dt_N - 1).Formula = 0
            Rem
            dCol = HG_N - HG_Needed_N
            Rem sFml = "=IF(AND(RC[" + Str(dCol) + "]>=" + Range("E1").Value + ";RC[" + Str(dCol) + "]<=" + Range("G1").Value + ");1;0)"
            Rem sFml1 = "=IF(AND(RC[" + Str(dCol) + "]>=R1C5,RC[" + Str(dCol) + "]<=R1C7),1,0)"
            sFml2 = "=IF(AND(RC[" + Str(dCol) + "]>=R1C5,RC[" + Str(dCol) + "]<=R1C7),1,0)"
            sFml = DelSpaces(sFml2)
            Range("A3").Offset(n, HG_Needed_N - 1).Formula = sFml
            Rem
            dCol = HG_N - dHG_N
            Rem sFml1 = "=RC[" + Str(dCol) + "]-R[-1]C[" + Str(dCol) + "]"
            sFml2 = "=RC[" + Str(dCol) + "]-R[-1]C[" + Str(dCol) + "]"
            sFml = DelSpaces(sFml2)
            Range("A3").Offset(n, dHG_N - 1).Formula = sFml
            If n = 0 Then Range("A3").Offset(n, dHG_N - 1).Formula = 0
            Rem
            dCol = FuelAmount_N - FlightM_N
            Rem sFml1 = "=R[-1]C-(R[-1]C[" + Str(dCol) + "]-RC[" + Str(dCol) + "])"
            sFml2 = "=R[-1]C-(R[-1]C[" + Str(dCol) + "]-RC[" + Str(dCol) + "])"
            sFml = DelSpaces(sFml2)
            Range("A3").Offset(n, FlightM_N - 1).Formula = sFml
            If n = 0 Then Range("A3").Offset(n, FlightM_N - 1).Formula = "=R1C9"
            Rem
            Rem dCol = duration_N - SecAmount_N
            Rem rem sFml1 = "=RC[" + Str(dCol) + "]-(R[" + Str(dLine) + "1]C[" + Str(dCol) + "]-RC[" + Str(dCol) + "])"
            Rem sFml = DelSpaces(sFml1)
            Rem Range("A3").Offset(n, duration_N - 1).Formula = sFml
            Rem If n = 0 Then Range("A3").Offset(n, duration_N - 1).Formula = "=R1C9"
            Rem
            n = n + 1
        Else
            cond = False
        End If
    Wend
    Dim H1Name, H2Name, S1Name, S2Name As String
    Dim sChartFml As String
    Dim MinN, MaxN, MinH, MaxH As Long
    MinN = Range("K1").Value
    MaxN = Range("M1").Value
    MinH = Range("E1").Value
    MaxH = Range("G1").Value
    If PlotCharts Then
      H1Name = Range("H1").Text
      H2Name = Range("H2").Text
      S1Name = Range("S1").Text
      S2Name = Range("S2").Text
      Range("H1").Formula = ""
      Range("H2").Formula = ""
      Range("S1").Formula = ""
      Range("S2").Formula = ""
      TheSheetName = ActiveSheet.Name
      ActiveSheet.Name = "Data"
      Charts.Add
     ActiveChart.ChartType = xlXYScatterLines
   
     ActiveChart.SeriesCollection.NewSeries
     If PlotLimits_UnLim0LimBig1LimPrecise2 = 0 Then
       ActiveChart.SeriesCollection(1).XValues = _
        "='Data'!C5"
       ActiveChart.SeriesCollection(1).Values = _
        "='Data'!C8"
     ElseIf PlotLimits_UnLim0LimBig1LimPrecise2 = 1 Then
        ActiveChart.SeriesCollection(1).XValues = _
        "='Data'!R3C5:R16000C5"
       ActiveChart.SeriesCollection(1).Values = _
        "='Data'!R3C8:R16000C8"
     ElseIf PlotLimits_UnLim0LimBig1LimPrecise2 = 2 Then
        sChartFml = "='Data'!R3C5:R" + Str(n + 2) + "C5"
        sChartFml = DelSpaces(sChartFml)
        ActiveChart.SeriesCollection(1).XValues = sChartFml
        sChartFml = "='Data'!R3C8:R" + Str(n + 2) + "C8"
        sChartFml = DelSpaces(sChartFml)
        ActiveChart.SeriesCollection(1).Values = sChartFml
     End If
     ActiveChart.Location Where:=xlLocationAsObject, Name:= _
        "Data"
     With ActiveChart
        .HasTitle = False
        .Axes(xlCategory, xlPrimary).HasTitle = False
        .Axes(xlValue, xlPrimary).HasTitle = False
    End With
    With ActiveChart.Axes(xlCategory)
        Rem .MinimumScale = 54000
        Rem .MaximumScale = 56000
        .MinimumScale = MinN - 10 'Range("K1").Value - 10
        .MaximumScale = MaxN + 10 'Range("M1").Value + 10
        .MinorUnitIsAuto = True
        .MajorUnitIsAuto = True
        .Crosses = xlAutomatic
        .ReversePlotOrder = False
        .ScaleType = xlLinear
        .DisplayUnit = xlNone
        Rem
        '.MinorUnit = 50
        .MajorUnit = 250
        .HasMajorGridlines = True
        .HasMinorGridlines = False
    End With
    With ActiveChart.Axes(xlValue)
        .MinimumScaleIsAuto = True
        '.MinimumScale = Range("E1").Value - 10
        '.MaximumScale = Range("G1").Value + 10
        .MinorUnitIsAuto = True
        .Crosses = xlAutomatic
        .ReversePlotOrder = False
        .ScaleType = xlLinear
        .DisplayUnit = xlNone
        Rem
        .MinorUnit = 10
        '.MajorUnit = 5
        .HasMajorGridlines = True
        .HasMinorGridlines = False
    End With
    ActiveWindow.Visible = False
    Rem     Rem Range("I33").Select
    Charts.Add
    ActiveChart.ChartType = xlXYScatterLines
    If PlotLimits_UnLim0LimBig1LimPrecise2 = 0 Then
       ActiveChart.SeriesCollection(1).XValues = _
        "='Data'!C5"
       ActiveChart.SeriesCollection(1).Values = _
        "='Data'!C19"
     ElseIf PlotLimits_UnLim0LimBig1LimPrecise2 = 1 Then
        ActiveChart.SeriesCollection(1).XValues = _
        "='Data'!R3C5:R16000C5"
       ActiveChart.SeriesCollection(1).Values = _
        "='Data'!R3C19:R16000C8"
     ElseIf PlotLimits_UnLim0LimBig1LimPrecise2 = 2 Then
        sChartFml = "='Data'!R3C5:R" + Str(n + 2) + "C5"
        sChartFml = DelSpaces(sChartFml)
        ActiveChart.SeriesCollection(1).XValues = sChartFml
        sChartFml = "='Data'!R3C19:R" + Str(n + 2) + "C19"
        sChartFml = DelSpaces(sChartFml)
        ActiveChart.SeriesCollection(1).Values = sChartFml
     End If
     With ActiveChart.Axes(xlCategory)
        Rem .MinimumScale = 54000
        Rem .MaximumScale = 56000
        .MinimumScale = MinN - 10 'Range("K1").Value - 10
        .MaximumScale = MaxN + 10 'Range("M1").Value + 10
        .MinorUnitIsAuto = True
        .MajorUnitIsAuto = True
        .Crosses = xlAutomatic
        .ReversePlotOrder = False
        .ScaleType = xlLinear
        .DisplayUnit = xlNone
        Rem
        '.MinorUnit = 50
        .MajorUnit = 250
        .HasMajorGridlines = True
        .HasMinorGridlines = False
    End With
    With ActiveChart.Axes(xlValue)
        .MinimumScaleIsAuto = True
        '.MinimumScale = Range("E1").Value - 10
        '.MaximumScale = Range("G1").Value + 10
        .MinorUnitIsAuto = True
        .Crosses = xlAutomatic
        .ReversePlotOrder = False
        .ScaleType = xlLinear
        .DisplayUnit = xlNone
        Rem
        .MinorUnit = 10
        '.MajorUnit = 5
        .HasMajorGridlines = True
        .HasMinorGridlines = False
    End With
    ActiveChart.Location Where:=xlLocationAsObject, Name:= _
        "Data"
        Rem
        ActiveWindow.Visible = False
    Rem     Rem Range("I33").Select
    Charts.Add
    ActiveChart.ChartType = xlXYScatterLines
    If PlotLimits_UnLim0LimBig1LimPrecise2 = 0 Then
       ActiveChart.SeriesCollection(1).XValues = _
        "='Data'!C5"
       ActiveChart.SeriesCollection(1).Values = _
        "='Data'!C19"
     ElseIf PlotLimits_UnLim0LimBig1LimPrecise2 = 1 Then
        ActiveChart.SeriesCollection(1).XValues = _
        "='Data'!R3C5:R16000C5"
       ActiveChart.SeriesCollection(1).Values = _
        "='Data'!R3C19:R16000C8"
     ElseIf PlotLimits_UnLim0LimBig1LimPrecise2 = 2 Then
        sChartFml = "='Data'!R3C5:R" + Str(n + 2) + "C5"
        sChartFml = DelSpaces(sChartFml)
        ActiveChart.SeriesCollection(1).XValues = sChartFml
        sChartFml = "='Data'!R3C19:R" + Str(n + 2) + "C19"
        sChartFml = DelSpaces(sChartFml)
        ActiveChart.SeriesCollection(1).Values = sChartFml
     End If
     With ActiveChart.Axes(xlCategory)
        Rem .MinimumScale = 54000
        Rem .MaximumScale = 56000
        .MinimumScale = MinN - 10 'Range("K1").Value - 10
        .MaximumScale = MaxN + 10 'Range("M1").Value + 10
        .MinorUnitIsAuto = True
        .MajorUnitIsAuto = True
        .Crosses = xlAutomatic
        .ReversePlotOrder = False
        .ScaleType = xlLinear
        .DisplayUnit = xlNone
        Rem
        '.MinorUnit = 50
        .MajorUnit = 250
        .HasMajorGridlines = True
        .HasMinorGridlines = False
    End With
    With ActiveChart.Axes(xlValue)
        Rem.MinimumScaleIsAuto = True
        .MinimumScale = MinH - 10 'Range("K1").Value - 10
        .MaximumScale = MaxH + 10 'Range("M1").Value + 10
        .MinorUnitIsAuto = True
        .Crosses = xlAutomatic
        .ReversePlotOrder = False
        .ScaleType = xlLinear
        .DisplayUnit = xlNone
        Rem
        .MinorUnit = 10
        '.MajorUnit = 5
        .HasMajorGridlines = True
        .HasMinorGridlines = False
    End With
    ActiveChart.Location Where:=xlLocationAsObject, Name:= _
        "Data"
    Range("H1").Formula = H1Name
    Range("H2").Formula = H2Name
    Range("S1").Formula = S1Name
    Range("S2").Formula = S2Name
    ActiveSheet.Name = TheSheetName
    End If
    Rem
    'Range("J3").Formula = "Calculation Options:"
    'Range("J4").Formula = "dH lim="
    'Range("J5").Formula = "dt min ="
    'Range("J7").Formula = "H Range="
    'Range("J6").Formula = "NonMon="
    'Range("K4").Formula = Str(1.5)
    'Range("K5").Formula = Str(10)
    'Range("K7").Formula = Str(1)
    'Range("K6").Formula = Str(0)
    Rem
    Range("J3").Formula = "Calculation Options:"
    Range("J4").Formula = "dH lim="
    Range("J5").Formula = "dt min ="
    Range("J6").Formula = "dH>dHlim"
    Range("J7").Formula = "dH<dHlim"
    Range("J8").Formula = "H>=Hmin"
    Range("J9").Formula = "H<=Hmax="
    Range("J10").Formula = "Not Decr"
    Range("J11").Formula = "Not Incr"
    Range("K4").Formula = Str(1.5)
    Range("K5").Formula = Str(10)
    Range("K6").Formula = Str(0)
    Range("K7").Formula = Str(1)
    Range("K8").Formula = Str(1)
    Range("K9").Formula = Str(1)
    Range("K10").Formula = Str(0)
    Range("K11").Formula = Str(0)
    Rem
    Range("J15").Formula = "above - hanging, below - hor flight"
    Range("J16").Formula = "dt max =": Range("K16").Formula = Str(60)
    Range("J17").Formula = "dt min =": Range("K17").Formula = Str(30)
    Range("J18").Formula = "dH lim=": Range("K18").Formula = Str(25)
    Range("J19").Formula = "dH>dHlim": Range("K19").Formula = Str(0)
    Range("J20").Formula = "dH<dHlim": Range("K20").Formula = Str(1)
    Range("J21").Formula = "H>=Hmin": Range("K21").Formula = Str(1)
    Range("J22").Formula = "H<=Hmax=": Range("K22").Formula = Str(0)
    Range("J23").Formula = "dV>dVlim": Range("K23").Formula = Str(0)
    Range("J24").Formula = "dV<dVlim": Range("K24").Formula = Str(1)
    Range("J25").Formula = "V>=Vmin": Range("K25").Formula = Str(1)
    Range("J26").Formula = "V<=Vmax": Range("K26").Formula = Str(0)
    Range("J27").Formula = "dVlim": Range("K27").Formula = Str(5)
    Range("J28").Formula = "Vmin": Range("K28").Formula = Str(40)
    Range("J29").Formula = "Vmax": Range("K29").Formula = Str(300)
    Range("J30").Formula = "Hmin": Range("K30").Formula = "=R1C7"
    Range("J31").Formula = "Hmax": Range("K31").Value = 4000
    Rem
    MsgBox ("done successfully")
End Sub 'PrepareFlightData
//
//
//
Sub Analyze_3_CalcMaxRange()
    Dim WriteCalcFormulas As Boolean
    Dim ErstAnalRAMColN, ErstAnalFmlColN, ErstAnalRsltColN, QAnalCols As Integer
    Dim Nmin_ColN, Nmax_ColN, Tmin_ColN, Tmax_ColN, TVCol_ColN, Vmin_ColN, Vmax_ColN, Vmed_ColN, Vgut_ColN, Hmin_ColN, Hmax_ColN, Hmed_ColN, Hgut_ColN, VRCol_ColN, VmedR_ColN, HmedR_ColN, Rgut_ColN, Cond_1_1_ColN, Cond_1_2_ColN, Cond_2_ColN As Integer
    Dim Nmin_Rslt_ColN, Nmax_Rslt_ColN, Tmin_Rslt_ColN, Tmax_Rslt_ColN, TVCol_Rslt_ColN, Vmin_Rslt_ColN, Vmax_Rslt_ColN, Vmed_Rslt_ColN, Vgut_Rslt_ColN, Hmin_Rslt_ColN, Hmax_Rslt_ColN, Hmed_Rslt_ColN, Hgut_Rslt_ColN, VRCol_Rslt_ColN, VmedR_Rslt_ColN, HmedR_Rslt_ColN, Rgut_Rslt_ColN, Cond_1_1_Rslt_ColN, Cond_1_2_Rslt_ColN, Cond_2_Rslt_ColN As Integer
    Dim Nmin_Fml_ColN, Nmax_Fml_ColN, Tmin_Fml_ColN, Tmax_Fml_ColN, TVCol_Fml_ColN, Vmin_Fml_ColN, Vmax_Fml_ColN, Vmed_Fml_ColN, Vgut_Fml_ColN, Hmin_Fml_ColN, Hmax_Fml_ColN, Hmed_Fml_ColN, Hgut_Fml_ColN, VRCol_Fml_ColN, VmedR_Fml_ColN, HmedR_Fml_ColN, Rgut_Fml_ColN, Cond_1_1_Fml_ColN, Cond_1_2_Fml_ColN, Cond_2_Fml_ColN As Integer
    Dim V_ColN As Integer
    Dim CondCount As Integer
    Dim VerdictFml As String
    Rem
    Dim q, MinN, MaxN, tCol, HGCol, R1ColN, RCheckColN As Long ', min_dt As Long
    Dim min_dt, max_dt, cur_dt As Long
    Dim ContinSeekLim As Boolean
    Dim dH_lim As Double
    Dim dV_lim As Double
    Dim CurN, CurT, count, ErstLineN, CurLineN, CurFoundN1, CurFoundN2, CurFound_dH, RangeLineMin, RangeLineMax, RangeTMin, RangeTMax As Long
    Dim min_H_in_range, max_H_in_range, CurH, PrevH, MinH, MaxH  As Double
    Dim min_V_in_range, max_V_in_range, CurV, PrevV, MinV, MaxV, dVLim As Double ' 'new
    Rem Dim MinH, MaxH As Double
    Dim cond, NurInHRange, IsIsHRange, NurIncrease, NurDecrease, CheckIfNotMonoton, NotMonoton, RangeIsAlmostAtSameH As Boolean
    Dim Nur_dH_LessThan_dHLim, Nur_dH_GreaterThan_dHLim, HNurNotLessThanMin, HNurNotGreaterThanHMax, NurNotIncreasing, NurNotDecreasing As Boolean
    Dim dH_LessThan_dHLim, dH_GreaterThan_dHLim, AllHInRangeAreLessThanHmax, AllHInRangeAreGreaterThanHmin As Boolean
    Dim Nur_dV_LessThan_dVLim, Nur_dV_GreaterThan_dVLim, VNurNotLessThanVMin, VNurNotGreaterThanVMax As Boolean
    Dim dV_LessThan_dVLim, dV_GreaterThan_dVLim, AllVInRangeAreLessThanVmax, AllVInRangeAreGreaterThanVmin As Boolean
    Dim RangeL As Integer
    Dim V_char_range, H_char_range As Double
    Rem n Dim msg As String
    Dim TStart, TFin As String
    Rem Dim TsColN As Integer
    Dim cond1, cond2, cond3, cond4, cond5, cond0 As Boolean
    Rem  dH fits H>min H<max incr et decr  ini cond
    Dim cond6, cond7, cond8 As Boolean
    Rem dV fits V>min V<max
    Dim Cond_1_1_VGreaterThanVmin, Cond_1_2_dV_LessThan_dVlim, Cond_1_VGut, Cond_2_dHGut, Cond_3_HGut, Cond_Verdict As Boolean
    Dim cond0_ColN, cond1_ColN, cond2_ColN, cond3_ColN, cond4_ColN, cond5_ColN, cond6_ColN, cond7_ColN, cond8_ColN As Integer
    Dim cond0_Rslt_ColN, cond1_Rslt_ColN, cond2_Rslt_ColN, cond3_Rslt_ColN, cond4_Rslt_ColN, cond5_Rslt_ColN, cond6_Rslt_ColN, cond7_Rslt_ColN, cond8_Rslt_ColN As Integer
    Dim cond0_Fml_ColN, cond1_Fml_ColN, cond2_Fml_ColN, cond3_Fml_ColN, cond4_Fml_ColN, cond5_Fml_ColN, cond6_Fml_ColN, cond7_Fml_ColN, cond8_Fml_ColN As Integer
    Rem
    Dim RNewCheckSimpleColN, LocalColN As Integer
    Dim FmlChk1 As String
    Rem
    WriteCalcFormulas = False
    Rem
    QAnalCols = 29 '17 'wa uz erst work'n vrn'+19: 65, 84,103
    ErstAnalFmlColN = 65 '150 '148'wa uz erst work'n vrn
    Rem
    Rem Ns of Cols
    Rem
    Nmin_Fml_ColN = ErstAnalFmlColN + 1 ': Nmin_Rslt_ColN = ErstAnalRsltColN + 1
    Nmax_Fml_ColN = Nmin_Fml_ColN + 1 ': Nmax_Rslt_ColN = Nmin_Rslt_ColN + 1
    Tmin_Fml_ColN = Nmax_Fml_ColN + 1 ': Tmin_Rslt_ColN = Nmax_Rslt_ColN + 1
    Tmax_Fml_ColN = Tmin_Fml_ColN + 1 ': Tmax_Rslt_ColN = Tmin_Rslt_ColN + 1
    TVCol_Fml_ColN = Tmax_Fml_ColN + 1 ': TVCol_Rslt_ColN = Tmax_Rslt_ColN + 1
    Vmin_Fml_ColN = Tmax_Fml_ColN + 2 ': Vmin_Rslt_ColN = Tmax_Rslt_ColN + 2
    Vmax_Fml_ColN = Vmin_Fml_ColN + 1 ': Vmax_Rslt_ColN = Vmin_Rslt_ColN + 1
    Vmed_Fml_ColN = Vmax_Fml_ColN + 1 ': Vmed_Rslt_ColN = Vmax_Rslt_ColN + 1
    Vgut_Fml_ColN = Vmed_Fml_ColN + 1 ': Vgut_Rslt_ColN = Vmed_Rslt_ColN + 1
    Hmin_Fml_ColN = Vgut_Fml_ColN + 1 ': Hmin_Rslt_ColN = Vgut_Rslt_ColN + 1
    Hmax_Fml_ColN = Hmin_Fml_ColN + 1 ': Hmax_Rslt_ColN = Hmin_Rslt_ColN + 1
    Hmed_Fml_ColN = Hmax_Fml_ColN + 1 ': Hmed_Rslt_ColN = Hmax_Rslt_ColN + 1
    Hgut_Fml_ColN = Hmed_Fml_ColN + 1 ': Hgut_Rslt_ColN = Hmed_Rslt_ColN + 1
    VRCol_Fml_ColN = Hgut_Fml_ColN + 1 ': VRCol_Rslt_ColN = Hgut_Rslt_ColN + 1
    VmedR_Fml_ColN = Hgut_Fml_ColN + 2 ': VmedR_Rslt_ColN = Hgut_Rslt_ColN + 2
    HmedR_Fml_ColN = VmedR_Fml_ColN + 1 ': HmedR_Rslt_ColN = VmedR_Rslt_ColN + 1
    Rem
    cond0_Fml_ColN = VRCol_Fml_ColN + 4
    cond1_Fml_ColN = cond0_Fml_ColN + 1
    cond2_Fml_ColN = cond1_Fml_ColN + 1
    cond3_Fml_ColN = cond2_Fml_ColN + 1
    cond4_Fml_ColN = cond3_Fml_ColN + 1
    cond5_Fml_ColN = cond4_Fml_ColN + 1
    cond6_Fml_ColN = cond5_Fml_ColN + 1
    cond7_Fml_ColN = cond6_Fml_ColN + 1
    cond8_Fml_ColN = cond7_Fml_ColN + 1
    'Rgut_ColN = HmedR_ColN + 1: Rgut_Fml_ColN = HmedR_Fml_ColN + 1: Rgut_Rslt_ColN = HmedR_Rslt_ColN + 1
    Rgut_Fml_ColN = cond8_Fml_ColN + 2
    Rem
    ErstAnalRAMColN = Rgut_Fml_ColN + 4
    Rem ... ErstAnalColN ErstAnalRsltColN
    Nmin_ColN = ErstAnalRAMColN + 1 ': Nmin_Fml_ColN = ErstAnalFmlColN + 1: Nmin_Rslt_ColN = ErstAnalRsltColN + 1
    Nmax_ColN = Nmin_ColN + 1 ': Nmax_Fml_ColN = Nmin_Fml_ColN + 1: Nmax_Rslt_ColN = Nmin_Rslt_ColN + 1
    Tmin_ColN = Nmax_ColN + 1 ': Tmin_Fml_ColN = Nmax_Fml_ColN + 1: Tmin_Rslt_ColN = Nmax_Rslt_ColN + 1
    Tmax_ColN = Tmin_ColN + 1 ': Tmax_Fml_ColN = Tmin_Fml_ColN + 1: Tmax_Rslt_ColN = Tmin_Rslt_ColN + 1
    TVCol_ColN = Tmax_ColN + 1 ': TVCol_Fml_ColN = Tmax_Fml_ColN + 1: TVCol_Rslt_ColN = Tmax_Rslt_ColN + 1
    Vmin_ColN = Tmax_ColN + 2 ': Vmin_Fml_ColN = Tmax_Fml_ColN + 2: Vmin_Rslt_ColN = Tmax_Rslt_ColN + 2
    Vmax_ColN = Vmin_ColN + 1 ': Vmax_Fml_ColN = Vmin_Fml_ColN + 1: Vmax_Rslt_ColN = Vmin_Rslt_ColN + 1
    Vmed_ColN = Vmax_ColN + 1 ': Vmed_Fml_ColN = Vmax_Fml_ColN + 1: Vmed_Rslt_ColN = Vmax_Rslt_ColN + 1
    Vgut_ColN = Vmed_ColN + 1 ': Vgut_Fml_ColN = Vmed_Fml_ColN + 1: Vgut_Rslt_ColN = Vmed_Rslt_ColN + 1
    Hmin_ColN = Vgut_ColN + 1 ': Hmin_Fml_ColN = Vgut_Fml_ColN + 1: Hmin_Rslt_ColN = Vgut_Rslt_ColN + 1
    Hmax_ColN = Hmin_ColN + 1 ': Hmax_Fml_ColN = Hmin_Fml_ColN + 1: Hmax_Rslt_ColN = Hmin_Rslt_ColN + 1
    Hmed_ColN = Hmax_ColN + 1 ': Hmed_Fml_ColN = Hmax_Fml_ColN + 1: Hmed_Rslt_ColN = Hmax_Rslt_ColN + 1
    Hgut_ColN = Hmed_ColN + 1 ': Hgut_Fml_ColN = Hmed_Fml_ColN + 1: Hgut_Rslt_ColN = Hmed_Rslt_ColN + 1
    VRCol_ColN = Hgut_ColN + 1 ': VRCol_Fml_ColN = Hgut_Fml_ColN + 1: VRCol_Rslt_ColN = Hgut_Rslt_ColN + 1
    VmedR_ColN = Hgut_ColN + 2 ': VmedR_Fml_ColN = Hgut_Fml_Col + 2: VmedR_Rslt_ColN = Hgut_Rslt_ColN + 2
    HmedR_ColN = VmedR_ColN + 1 ': HmedR_Fml_ColN = VmedR_Fml_ColN + 1: HmedR_Rslt_ColN = VmedR_Rslt_ColN + 1
    Rem
    cond0_ColN = VRCol_ColN + 4 ':
    cond1_ColN = cond0_ColN + 1 ':
    cond2_ColN = cond1_ColN + 1 ':
    cond3_ColN = cond2_ColN + 1 ':
    cond4_ColN = cond3_ColN + 1 ':
    cond5_ColN = cond4_ColN + 1 ':
    cond6_ColN = cond5_ColN + 1 ':
    cond7_ColN = cond6_ColN + 1 ':
    cond8_ColN = cond7_ColN + 1 ':
    Rem
    Rgut_ColN = cond8_ColN + 2 ': Rgut_Fml_ColN = HmedR_Fml_ColN + 1: Rgut_Rslt_ColN = HmedR_Rslt_ColN + 1
    Rem
    ErstAnalRsltColN = Rgut_ColN + 4
    Rem
    Nmin_Rslt_ColN = ErstAnalRsltColN + 1
    Nmax_Rslt_ColN = Nmin_Rslt_ColN + 1
    Tmin_Rslt_ColN = Nmax_Rslt_ColN + 1
    Tmax_Rslt_ColN = Tmin_Rslt_ColN + 1
    TVCol_Rslt_ColN = Tmax_Rslt_ColN + 1
    Vmin_Rslt_ColN = Tmax_Rslt_ColN + 2
    Vmax_Rslt_ColN = Vmin_Rslt_ColN + 1
    Vmed_Rslt_ColN = Vmax_Rslt_ColN + 1
    Vgut_Rslt_ColN = Vmed_Rslt_ColN + 1
    Hmin_Rslt_ColN = Vgut_Rslt_ColN + 1
    Hmax_Rslt_ColN = Hmin_Rslt_ColN + 1
    Hmed_Rslt_ColN = Hmax_Rslt_ColN + 1
    Hgut_Rslt_ColN = Hmed_Rslt_ColN + 1
    VRCol_Rslt_ColN = Hgut_Rslt_ColN + 1
    VmedR_Rslt_ColN = Hgut_Rslt_ColN + 2
    HmedR_Rslt_ColN = VmedR_Rslt_ColN + 1
    Rem
    cond0_Rslt_ColN = VRCol_Rslt_ColN + 4
    cond1_Rslt_ColN = cond0_Rslt_ColN + 1
    cond2_Rslt_ColN = cond1_Rslt_ColN + 1
    cond3_Rslt_ColN = cond2_Rslt_ColN + 1
    cond4_Rslt_ColN = cond3_Rslt_ColN + 1
    cond5_Rslt_ColN = cond4_Rslt_ColN + 1
    cond6_Rslt_ColN = cond5_Rslt_ColN + 1
    cond7_Rslt_ColN = cond6_Rslt_ColN + 1
    cond8_Rslt_ColN = cond7_Rslt_ColN + 1
    Rem
    Rgut_Rslt_ColN = cond8_Rslt_ColN + 2
    Rem
    Cond_1_1_ColN = VRCol_ColN
    Cond_1_2_ColN = VmedR_ColN
    Cond_2_ColN = HmedR_ColN
    Rem Names of Cols
    Range("A1").Offset(2 - 1, ErstAnalRAMColN - 1).Formula = "N":   Range("A1").Offset(2 - 1, ErstAnalRsltColN - 1).Formula = "N r":   Range("A1").Offset(2 - 1, ErstAnalFmlColN - 1).Formula = "N f"
    Rem
    Range("A1").Offset(2 - 1, Nmin_ColN - 1).Formula = "Nmin":   Range("A1").Offset(2 - 1, Nmin_Rslt_ColN - 1).Formula = "Nmin r":   Range("A1").Offset(2 - 1, Nmin_Fml_ColN - 1).Formula = "Nmin f"
    Range("A1").Offset(2 - 1, Nmax_ColN - 1).Formula = "Nmax":   Range("A1").Offset(2 - 1, Nmax_Rslt_ColN - 1).Formula = "Nmax r":   Range("A1").Offset(2 - 1, Nmax_Fml_ColN - 1).Formula = "Nmax f"
    Range("A1").Offset(2 - 1, Tmin_ColN - 1).Formula = "TStart": Range("A1").Offset(2 - 1, Tmin_Rslt_ColN - 1).Formula = "TStart r": Range("A1").Offset(2 - 1, Tmin_Fml_ColN - 1).Formula = "TStart f"
    Range("A1").Offset(2 - 1, Tmax_ColN - 1).Formula = "TFin":   Range("A1").Offset(2 - 1, Tmax_Rslt_ColN - 1).Formula = "TFin r":   Range("A1").Offset(2 - 1, Tmax_Fml_ColN - 1).Formula = "TFin f"
    Range("A1").Offset(2 - 1, Vmin_ColN - 1).Formula = "Vmin":   Range("A1").Offset(2 - 1, Vmin_Rslt_ColN - 1).Formula = "Vmin r":   Range("A1").Offset(2 - 1, Vmin_Fml_ColN - 1).Formula = "Vmin f"
    Range("A1").Offset(2 - 1, Vmax_ColN - 1).Formula = "Vmax":   Range("A1").Offset(2 - 1, Vmax_Rslt_ColN - 1).Formula = "Vmax r":   Range("A1").Offset(2 - 1, Vmax_Fml_ColN - 1).Formula = "Vmax f"
    Range("A1").Offset(2 - 1, Vmed_ColN - 1).Formula = "Vmed":   Range("A1").Offset(2 - 1, Vmed_Rslt_ColN - 1).Formula = "Vmed r":   Range("A1").Offset(2 - 1, Vmed_Fml_ColN - 1).Formula = "Vmed f"
    Range("A1").Offset(2 - 1, Vgut_ColN - 1).Formula = "Vgut":   Range("A1").Offset(2 - 1, Vgut_Rslt_ColN - 1).Formula = "Vgut r":   Range("A1").Offset(2 - 1, Vgut_Fml_ColN - 1).Formula = "Vgut f"
    Range("A1").Offset(2 - 1, Hmin_ColN - 1).Formula = "Hmin":   Range("A1").Offset(2 - 1, Hmin_Rslt_ColN - 1).Formula = "Hmin r":   Range("A1").Offset(2 - 1, Hmin_Fml_ColN - 1).Formula = "Hmin f"
    Range("A1").Offset(2 - 1, Hmax_ColN - 1).Formula = "Hmax":   Range("A1").Offset(2 - 1, Hmax_Rslt_ColN - 1).Formula = "Hmax r":   Range("A1").Offset(2 - 1, Hmax_Fml_ColN - 1).Formula = "Hmax f"
    Range("A1").Offset(2 - 1, Hmed_ColN - 1).Formula = "Hmed":   Range("A1").Offset(2 - 1, Hmed_Rslt_ColN - 1).Formula = "Hmed r":   Range("A1").Offset(2 - 1, Hmed_Fml_ColN - 1).Formula = "Hmed f"
    Range("A1").Offset(2 - 1, Hgut_ColN - 1).Formula = "Hgut":   Range("A1").Offset(2 - 1, Hgut_Rslt_ColN - 1).Formula = "Hgut r":   Range("A1").Offset(2 - 1, Hgut_Fml_ColN - 1).Formula = "Hgut f"
    Rem
    Range("A1").Offset(2 - 1, cond0_ColN - 1).Formula = "cond0:ini": Range("A1").Offset(2 - 1, cond0_Rslt_ColN - 1).Formula = "cond0:ini": Range("A1").Offset(2 - 1, cond0_Fml_ColN - 1).Formula = "cond0:ini"
    Range("A1").Offset(2 - 1, cond1_ColN - 1).Formula = "cond1:dHgut": Range("A1").Offset(2 - 1, cond1_Rslt_ColN - 1).Formula = "cond1:dHgut": Range("A1").Offset(2 - 1, cond1_Fml_ColN - 1).Formula = "cond1:dHgut"
    Range("A1").Offset(2 - 1, cond2_ColN - 1).Formula = "cond2:H>min": Range("A1").Offset(2 - 1, cond2_Rslt_ColN - 1).Formula = "cond2:H>min": Range("A1").Offset(2 - 1, cond2_Fml_ColN - 1).Formula = "cond2:H>min"
    Range("A1").Offset(2 - 1, cond3_ColN - 1).Formula = "cond3:H<max": Range("A1").Offset(2 - 1, cond3_Rslt_ColN - 1).Formula = "cond3:H<max": Range("A1").Offset(2 - 1, cond3_Fml_ColN - 1).Formula = "cond3:H<max"
    Range("A1").Offset(2 - 1, cond4_ColN - 1).Formula = "cond4:incr...": Range("A1").Offset(2 - 1, cond4_Rslt_ColN - 1).Formula = "cond4:incr...": Range("A1").Offset(2 - 1, cond4_Fml_ColN - 1).Formula = "cond4:incr..."
    Range("A1").Offset(2 - 1, cond5_ColN - 1).Formula = "cond5:incr...": Range("A1").Offset(2 - 1, cond5_Rslt_ColN - 1).Formula = "cond5:incr...": Range("A1").Offset(2 - 1, cond5_Fml_ColN - 1).Formula = "cond5:incr..."
    Range("A1").Offset(2 - 1, cond6_ColN - 1).Formula = "cond6:dVgut": Range("A1").Offset(2 - 1, cond6_Rslt_ColN - 1).Formula = "cond6:dVgut": Range("A1").Offset(2 - 1, cond6_Fml_ColN - 1).Formula = "cond6:dVgut"
    Range("A1").Offset(2 - 1, cond7_ColN - 1).Formula = "cond7:V>min": Range("A1").Offset(2 - 1, cond7_Rslt_ColN - 1).Formula = "cond7:V>min": Range("A1").Offset(2 - 1, cond7_Fml_ColN - 1).Formula = "cond7:V>min"
    Range("A1").Offset(2 - 1, cond8_ColN - 1).Formula = "cond8:V<max": Range("A1").Offset(2 - 1, cond8_Rslt_ColN - 1).Formula = "cond8:V<max": Range("A1").Offset(2 - 1, cond8_Fml_ColN - 1).Formula = "cond8:V<max"
    Rem ...
    dH_lim = Range("K18").Value
    min_dt = Range("K17").Value
    max_dt = Range("K16").Value
    max_dt = 60
    Rem
    If Range("K19").Value = 1 Then
        Nur_dH_GreaterThan_dHLim = True
    Else
        Nur_dH_GreaterThan_dHLim = False
    End If
    If Range("K20").Value = 1 Then
        Nur_dH_LessThan_dHLim = True
    Else
        Nur_dH_LessThan_dHLim = False
    End If
    If Range("K21").Value = 1 Then 'Error!Ma ne viktig! ' If Range("K8").Value = 1 Then
        HNurNotLessThanMin = True
    Else
        HNurNotLessThanMin = False
    End If
    If Range("K22").Value = 1 Then 'Error!Ma ne viktig! 'If Range("K9").Value = 1 Then
        HNurNotGreaterThanHMax = True
    Else
        HNurNotGreaterThanHMax = False
    End If
    Rem new conds
    If Range("K23").Value = 1 Then
        Nur_dV_GreaterThan_dVLim = True
    Else
        Nur_dV_GreaterThan_dVLim = False
    End If
    If Range("K24").Value = 1 Then
        Nur_dV_LessThan_dVLim = True
    Else
        Nur_dV_LessThan_dVLim = False
    End If
    If Range("K25").Value = 1 Then
        VNurNotLessThanVMin = True
    Else
        VNurNotLessThanVMin = False
    End If
    Rem ...
    count = 0: ErstLineN = 3
    MinN = Range("K1").Value
    MaxN = Range("M1").Value
    Rem ce hor - hic data s'uz hang - so hic data wi chang'd below
    MinH = Range("E1").Value
    MaxH = Range("G1").Value
    Rem
    MinV = Range("K28").Value
    MaxV = Range("K29").Value
    dV_lim = Range("K27").Value
    Rem ce hor! - correct H data
    MinH = Range("K30").Value
    MaxH = Range("K31").Value
    Rem
    q = MaxN - MinN + 1
    Rem
    V_ColN = 17 ' rest cols s' far below
    tCol = 5: HGCol = 19: TsColN = 16 ': RCheckColN = 55: RNewCheckSimpleColN = 82: R1ColN = 97 '82 'V_ColN s' far above
    Rem
    cond0 = True: cond1 = True: cond2 = True: cond3 = True: cond4 = True: cond5 = True: cond6 = True: cond7 = True: cond8 = True
    Rem
    'Dim i_chk As Integer
    Dim RangeIsChecked, ContinCheckRange As Boolean
    Rem
    For i = 1 To q - min_dt
        'NurIncrease = True
        'NurDecrease = True
        Rem
        Range("N1").Formula = i
        'If i > 7498 Then
        '   i_chk = i
        'End If
        Rem
        'RangeLineMin = 2 + i
        'RangeLineMax = RangeLineMin + min_dt
        'RangeTMin = Range("A1").Offset(RangeLineMin - 1, tCol - 1).Value
        'RangeTMax = Range("A1").Offset(RangeLineMax - 1, tCol - 1).Value
        'Hmin = Range("A1").Offset(RangeLineMin - 1, HGCol - 1).Value
        'Hmax = Range("A1").Offset(RangeLineMax - 1, HGCol - 1).Value
        Rem
        'Vmin = Range("A1").Offset(RangeLineMin - 1, V_ColN - 1).Value
        'Vmax = Range("A1").Offset(RangeLineMax - 1, V_ColN - 1).Value
        Rem...
        'TStart = "_" + Range("A1").Offset(RangeLineMin - 1, TsColN - 1).Text
        'TFin = "_" + Range("A1").Offset(RangeLineMax - 1, TsColN - 1).Text
        Rem
        'H_char_range = 0
        'V_char_range = 0
        Rem For j = 1 To min_dt
        'ContinSeekLim = True
        Rem
        cur_dt = min_dt + 1
        RangeIsChecked = False
        ContinCheckRange = (RangeIsChecked = False)
        While ContinCheckRange
          Rem
          If RangeIsChecked Then
            If q - i > max_dt Then
              cur_dt = max_dt + 1
            'ElseIf q - i  min_dt Then
            '    cur_dt = max_dt
            Else
              cur_dt = q - i
            End If
          End If
          cond = False
          If cur_dt = min_dt Then
             cur_dt = cur_dt + 1
             MsgBox ("q-i=" + Str(q - i) + " q=" + Str(q) + " i=" + Str(i) + " cur_dt=" + Str(cur_dt - 1) + "+1=" + Str(cur_dt))
          End If
          ContinSeekLim = (cur_dt > min_dt)
          While ContinSeekLim
            cur_dt = cur_dt - 1
            Rem
            RangeLineMin = 2 + i
            RangeLineMax = RangeLineMin + cur_dt
            RangeTMin = Range("A1").Offset(RangeLineMin - 1, tCol - 1).Value
            RangeTMax = Range("A1").Offset(RangeLineMax - 1, tCol - 1).Value
            Hmin = Range("A1").Offset(RangeLineMin - 1, HGCol - 1).Value
            Hmax = Range("A1").Offset(RangeLineMax - 1, HGCol - 1).Value
            Rem
            Vmin = Range("A1").Offset(RangeLineMin - 1, V_ColN - 1).Value
            Vmax = Range("A1").Offset(RangeLineMax - 1, V_ColN - 1).Value
            Rem...
            TStart = "_" + Range("A1").Offset(RangeLineMin - 1, TsColN - 1).Text
            TFin = "_" + Range("A1").Offset(RangeLineMax - 1, TsColN - 1).Text
            Rem
            H_char_range = 0
            V_char_range = 0
            Rem
            For j = 1 To cur_dt + 1
            Rem for j = 1 To min_dt + 1
                CurN = i + j - 1
                CurLineN = ErstLineN + CurN - 1
                CurT = Range("A1").Offset(CurLineN - 1, tCol - 1).Value
                CurH = Range("A1").Offset(CurLineN - 1, HGCol - 1).Value
                Rem
                CurV = Range("A1").Offset(CurLineN - 1, V_ColN - 1).Value
                If j = 1 Then
                min_H_in_range = CurH
                max_H_in_range = CurH
                Rem
                min_V_in_range = CurV
                max_V_in_range = CurV
                Else
                If CurH < min_H_in_range Then min_H_in_range = CurH
                If CurH > max_H_in_range Then max_H_in_range = CurH
                Rem
                If CurV < min_V_in_range Then min_V_in_range = CurV
                If CurV > max_V_in_range Then max_V_in_range = CurV
                End If
                If j > 1 Then
                If CurH > PrevH Then NurDecrease = False
                If CurH < PrevH Then NurIncrease = False
                End If
                PrevH = CurH
                Rem we ne check incr/decr o'V so ne find val o'PrevV et ne hab tic var
                H_char_range = H_char_range + CurH
                V_char_range = V_char_range + CurV
                RangeL = j
            Next j
            Rem
            H_char_range = H_char_range / RangeL
            V_char_range = V_char_range / RangeL
            Rem...
            If max_H_in_range - min_H_in_range < dH_lim Then
                dH_LessThan_dHLim = True
            Else
                dH_LessThan_dHLim = False
            End If
            'Cond_2_dHGut = dH_LessThan_dHLim
            If max_H_in_range - min_H_in_range > dH_lim Then
                dH_GreaterThan_dHLim = True
            Else
                dH_GreaterThan_dHLim = False
            End If
            If max_H_in_range < MaxH Then
                AllHInRangeAreLessThanHmax = True
            Else
                AllHInRangeAreLessThanHmax = False
            End If
            If min_H_in_range > MinH Then
                AllHInRangeAreGreaterThanHmin = True
            Else
                AllHInRangeAreGreaterThanHmin = False
            End If
            Rem tak co V apo H
            If max_V_in_range - min_V_in_range < dV_lim Then
                dV_LessThan_dVLim = True
            Else
                dV_LessThan_dVLim = False
            End If
            If max_V_in_range - min_V_in_range > dV_lim Then
                dV_GreaterThan_dVLim = True
            Else
                dV_GreaterThan_dVLim = False
            End If
            If max_V_in_range < MaxV Then
                AllVInRangeAreLessThanVmax = True
            Else
                AllVInRangeAreLessThanVmax = False
            End If
            If min_V_in_range > MinV Then
                AllVInRangeAreGreaterThanVmin = True
            Else
                AllVInRangeAreGreaterThanVmin = False
            End If
            Rem
            cond = True
            cond0 = cond ' cond 0 - for start of analysis
            If (Not (Nur_dH_GreaterThan_dHLim And Nur_dH_LessThan_dHLim)) Then 'if ne dat'd both-sid'd range
                If Nur_dH_GreaterThan_dHLim Then
                cond = cond And dH_GreaterThan_dHLim
                End If
                If Nur_dH_LessThan_dHLim Then
                cond = cond And dH_LessThan_dHLim
                End If
            End If ' hin sol be else, ma no t for debug'g l'check l'pract'y ne-use'd cond
            Cond_2_dHGut = dH_LessThan_dHLim
            Rem
            cond1 = cond ' cond 1 - checks l'conds: dH>dHLim or dH<dHLim depending upon qic cond s'nee'd to check
            Rem
            If HNurNotLessThanMin Then
                cond = cond And AllHInRangeAreGreaterThanHmin
            End If
            cond2 = cond ' cond 2 - checks l'cond: Hmin>[Hmin]
            If HNurNotGreaterThanHMax Then
                cond = cond And AllHInRangeAreLessThanHmax
            End If
            cond3 = cond ' cond 3 - checks l'cond: Hmax<[Hmax]
            Rem
            Rem da co V as H
            If (Not (Nur_dV_GreaterThan_dVLim And Nur_dV_LessThan_dVLim)) Then
                If Nur_dV_GreaterThan_dVLim Then
                cond = cond And dV_GreaterThan_dVLim
                End If
                If Nur_dV_LessThan_dVLim Then
                cond = cond And dV_LessThan_dVLim
                End If
            End If
            cond6 = cond
            Cond_1_2_dV_LessThan_dVlim = dV_LessThan_dVLim
            If VNurNotLessThanVMin Then
                cond = cond And AllVInRangeAreGreaterThanVmin
            End If
            cond7 = cond 'cond6 = cond
            Cond_1_1_VGreaterThanVmin = AllVInRangeAreGreaterThanVmin
            Cond_1_VGut = Cond_1_1_VGreaterThanVmin And Cond_1_2_dV_LessThan_dVlim
            If VNurNotGreaterThanVMax Then
                cond = cond And AllVInRangeAreLessThanVmax
            End If
            cond8 = cond 'cond7 = cond
            Cond_1_VGut = Cond_1_1_VGreaterThanVmin And Cond_1_2_dV_LessThan_dVlim
            Cond_Verdict = Cond_1_VGut And Cond_2_dHGut
            cond = cond0 And cond1 And cond2 And cond3 And cond4 And cond5 And cond6 And cond7 And cond8
            Rem
            Range("A1").Offset(1 + i, ErstAnalRAMColN - 1).Formula = i '"NMin"
            Range("A1").Offset(1 + i, Nmin_ColN - 1).Formula = Str(RangeTMin)  '"NMin"
            Range("A1").Offset(1 + i, Nmax_ColN - 1).Formula = Str(RangeTMax)  '"NMax"
            Range("A1").Offset(1 + i, Tmin_ColN - 1).Formula = TStart  '"TMin"
            Range("A1").Offset(1 + i, Tmax_ColN - 1).Formula = TFin '"TMax"
            Range("A1").Offset(1 + i, Vmin_ColN - 1).Formula = Str(min_V_in_range) 'Str(Vmin ) '"Vmin"
            Range("A1").Offset(1 + i, Vmax_ColN - 1).Formula = Str(max_V_in_range)  'Str(Vmax) '"VMax"
            Range("A1").Offset(1 + i, Vmed_ColN - 1).Formula = Str(max_V_in_range - min_V_in_range) 'Str(V_char_range) '"Vmed"
            If Cond_1_VGut = True Then
                Range("A1").Offset(1 + i, Vgut_ColN - 1).Formula = Str(1) '"Vgut"
            Else
                Range("A1").Offset(1 + i, Vgut_ColN - 1).Formula = Str(0) '"Vgut"
            End If
            Range("A1").Offset(1 + i, Hmin_ColN - 1).Formula = Str(min_H_in_range)  'Str(Hmin) '"Hmin"
            Range("A1").Offset(1 + i, Hmax_ColN - 1).Formula = Str(max_H_in_range)  'Str(HMax) '"HMax"
            Range("A1").Offset(1 + i, Hmed_ColN - 1).Formula = Str(max_H_in_range - min_H_in_range) 'Str(H_char_range) '"Hmed"
            If Cond_2_dHGut = True Then
                Range("A1").Offset(1 + i, Hgut_ColN - 1).Formula = Str(1) '"Hgut"
            Else
                Range("A1").Offset(1 + i, Hgut_ColN - 1).Formula = Str(0) '"Hgut"
            End If
            Rem
            If cond0 Then
                Range("A1").Offset(1 + i, cond0_ColN - 1).Formula = Str(1)
            Else
                Range("A1").Offset(1 + i, cond0_ColN - 1).Formula = Str(0)
            End If
            If cond1 Then
                Range("A1").Offset(1 + i, cond1_ColN - 1).Formula = Str(1)
            Else
                Range("A1").Offset(1 + i, cond1_ColN - 1).Formula = Str(0)
            End If
            If cond2 Then
               Range("A1").Offset(1 + i, cond2_ColN - 1).Formula = Str(1)
            Else
                Range("A1").Offset(1 + i, cond2_ColN - 1).Formula = Str(0)
            End If
            If cond3 Then
                Range("A1").Offset(1 + i, cond3_ColN - 1).Formula = Str(1)
            Else
                Range("A1").Offset(1 + i, cond3_ColN - 1).Formula = Str(0)
            End If
            If cond4 Then
                Range("A1").Offset(1 + i, cond4_ColN - 1).Formula = Str(1)
            Else
                Range("A1").Offset(1 + i, cond4_ColN - 1).Formula = Str(0)
            End If
            If cond5 Then
                Range("A1").Offset(1 + i, cond5_ColN - 1).Formula = Str(1)
            Else
                Range("A1").Offset(1 + i, cond5_ColN - 1).Formula = Str(0)
            End If
            If cond6 Then
                Range("A1").Offset(1 + i, cond6_ColN - 1).Formula = Str(1)
            Else
                Range("A1").Offset(1 + i, cond6_ColN - 1).Formula = Str(0)
            End If
            If cond7 Then
                Range("A1").Offset(1 + i, cond7_ColN - 1).Formula = Str(1)
            Else
                Range("A1").Offset(1 + i, cond7_ColN - 1).Formula = Str(0)
            End If
            If cond8 Then
                Range("A1").Offset(1 + i, cond8_ColN - 1).Formula = Str(1)
            Else
                Range("A1").Offset(1 + i, cond8_ColN - 1).Formula = Str(0)
            End If
            Rem
            If Cond_1_1_VGreaterThanVmin Then
                Range("A1").Offset(1 + i, Cond_1_1_ColN - 1).Formula = Str(1)
            Else
                Range("A1").Offset(1 + i, Cond_1_1_ColN - 1).Formula = Str(0)
            End If
            Rem
            If cond Then
                Range("A1").Offset(1 + i, Rgut_ColN - 1).Formula = Str(1) '"gut"
            Else
                Range("A1").Offset(1 + i, Rgut_ColN - 1).Formula = Str(0) '"gut"
            End If
            Range("N2").Formula = "Found:"
            Rem ...
            If cond And RangeIsChecked Then
              'If cond Then 'If Cond_Verdict Then 'If cond Then
                count = count + 1
                Range("O2").Formula = count
                CurFoundN1 = i: CurFoundN2 = i + cur_dt
                CurFound_dH = max_H_in_range - min_H_in_range
                Rem ...
                Range("A1").Offset(1 + count, ErstAnalRsltColN - 1).Formula = Str(count) '"NMin"
                Range("A1").Offset(1 + count, Nmin_Rslt_ColN - 1).Formula = Str(RangeTMin)  '"NMin"
                Range("A1").Offset(1 + count, Nmax_Rslt_ColN - 1).Formula = Str(RangeTMax)  '"NMax"
                Range("A1").Offset(1 + count, Tmin_Rslt_ColN - 1).Formula = TStart  '"TMin"
                Range("A1").Offset(1 + count, Tmax_Rslt_ColN - 1).Formula = TFin  '"TMax"
                Range("A1").Offset(1 + count, Vmin_Rslt_ColN - 1).Formula = Str(min_V_in_range) 'Vmin '"Vmin"
                Range("A1").Offset(1 + count, Vmax_Rslt_ColN - 1).Formula = Str(max_V_in_range) 'Vmax '"VMax"
                Range("A1").Offset(1 + count, Vmed_Rslt_ColN - 1).Formula = Str(max_V_in_range - min_V_in_range) 'Str(V_char_range) '"Vmed"
                Rem
                Range("A1").Offset(1 + count, Hmin_Rslt_ColN - 1).Formula = Str(min_H_in_range) 'Hmin '"Hmin"
                Range("A1").Offset(1 + count, Hmax_Rslt_ColN - 1).Formula = Str(max_H_in_range) 'Hmax '"HMax"
                Range("A1").Offset(1 + count, Hmed_Rslt_ColN - 1).Formula = Str(max_H_in_range - min_H_in_range) 'Str(H_char_range) '"Hmed"
                Rem
                If cond0 Then
                Range("A1").Offset(1 + count, cond0_Rslt_ColN - 1).Formula = Str(1)
                Else
                Range("A1").Offset(1 + count, cond0_Rslt_ColN - 1).Formula = Str(0)
                End If
                If cond1 Then
                Range("A1").Offset(1 + count, cond1_Rslt_ColN - 1).Formula = Str(1)
                Else
                Range("A1").Offset(1 + count, cond1_Rslt_ColN - 1).Formula = Str(0)
                End If
                If cond2 Then
                Range("A1").Offset(1 + count, cond2_Rslt_ColN - 1).Formula = Str(1)
                Else
                Range("A1").Offset(1 + count, cond2_Rslt_ColN - 1).Formula = Str(0)
                End If
                If cond3 Then
                Range("A1").Offset(1 + count, cond3_Rslt_ColN - 1).Formula = Str(1)
                Else
                Range("A1").Offset(1 + count, cond3_Rslt_ColN - 1).Formula = Str(0)
                End If
                If cond4 Then
                Range("A1").Offset(1 + count, cond4_Rslt_ColN - 1).Formula = Str(1)
                Else
                Range("A1").Offset(1 + count, cond4_Rslt_ColN - 1).Formula = Str(0)
                End If
                If cond5 Then
                Range("A1").Offset(1 + count, cond5_Rslt_ColN - 1).Formula = Str(1)
                Else
                Range("A1").Offset(1 + count, cond5_Rslt_ColN - 1).Formula = Str(0)
                End If
                If cond6 Then
                Range("A1").Offset(1 + count, cond6_Rslt_ColN - 1).Formula = Str(1)
                Else
                Range("A1").Offset(1 + count, cond6_Rslt_ColN - 1).Formula = Str(0)
                End If
                If cond7 Then
                Range("A1").Offset(1 + count, cond7_Rslt_ColN - 1).Formula = Str(1)
                Else
                Range("A1").Offset(1 + count, cond7_Rslt_ColN - 1).Formula = Str(0)
                End If
                If cond8 Then
                Range("A1").Offset(1 + count, cond8_Rslt_ColN - 1).Formula = Str(1)
                Else
                Range("A1").Offset(1 + count, cond8_Rslt_ColN - 1).Formula = Str(0)
                End If
                Rem
                If cond Then
                Range("A1").Offset(1 + count, Rgut_Rslt_ColN - 1).Formula = Str(1) '"gut"
                Else
                Range("A1").Offset(1 + count, Rgut_Rslt_ColN - 1).Formula = Str(0) '"gut"
                End If
            End If ' cond
            Rem
            Rem
            If cond Or cur_dt = min_dt Then ContinSeekLim = False
          Wend 'cur_dt = max...min
          ContinCheckRange = ((cond = True) And (RangeIsChecked = False))
          RangeIsChecked = True
        Wend ' while ContinCheckRange
    Next i
    Range("AW1").Formula = "Ranges found:"
    Range("AX1").Formula = Str(count)
    Range("AY1").Formula = "Set:"
    Range("AZ1").Formula = Str(0)
    Rem
    WriteCalcFormulas = True
    Rem
    If WriteCalcFormulas Then
        Rem
        Range("A1").Offset(2 - 1, cond8_Fml_ColN + 2 - 1).Formula = "Verdict f"
        For i = min_dt + 1 To min_dt + 6 'min_dt * 3 'q
            'TNMin
            Rem
            Range("O1").Formula = i
            Rem
            dCol = Nmin_Fml_ColN - tCol
            FmlChk1 = "=R[" + Str(-min_dt) + "]C[-" + Str(dCol) + "]"
            FmlChk1 = DelSpaces(FmlChk1)
            ' FmlChk1="=R[-30]C[-61]"
            Range("A3").Offset(i - 1, Nmin_Fml_ColN - 1).Formula = FmlChk1
            Rem
            'TNMax
            dCol = Nmax_Fml_ColN - tCol
            FmlChk1 = "=RC[-" + Str(dCol) + "]"
            FmlChk1 = DelSpaces(FmlChk1)
            ' FmlChk1="=RC[-62]"
            Range("A3").Offset(i - 1, Nmax_Fml_ColN - 1).Formula = FmlChk1
            Rem
            'TsMin
            'LocalColN = LocalColN + 1
            dCol = Tmin_Fml_ColN - TsColN
            'FmlChk1 = "=RC[-" + Str(RNewCheckSimpleColN - tCol + LocalColN) + "]"
            FmlChk1 = "=R[" + Str(-min_dt) + "]C[-" + Str(dCol) + "]"
            FmlChk1 = DelSpaces(FmlChk1)
            ' FmlChk1="=R[-30]C[-52]"
            'Range("A3").Offset(i - 1, RNewCheckSimpleColN + LocalColN - 1).Formula = FmlChk1
            Range("A3").Offset(i - 1, Tmin_Fml_ColN - 1).Formula = FmlChk1
            Rem
            'TsMax
            dCol = Tmax_Fml_ColN - TsColN
            FmlChk1 = "=RC[-" + Str(dCol) + "]"
            FmlChk1 = DelSpaces(FmlChk1)
            ' FmlChk1="=RC[-53]"
            Range("A3").Offset(i - 1, Tmax_Fml_ColN - 1).Formula = FmlChk1
            Rem
            Rem
            'HMin
            dCol = Hmin_Fml_ColN - HGCol
            FmlChk1 = "=MIN(RC[-" + Str(dCol) + "]:R[" + Str(-min_dt) + "]C[-" + Str(dCol) + "])"
            FmlChk1 = DelSpaces(FmlChk1)
            ' FmlChk1="=MIN(RC[-56]:R[-30]C[-56])"
            Range("A3").Offset(i - 1, Hmin_Fml_ColN - 1).Formula = FmlChk1
            Rem
            Rem
            'HMax
            dCol = Hmax_Fml_ColN - HGCol
            FmlChk1 = "=Max(RC[-" + Str(dCol) + "]:R[" + Str(-min_dt) + "]C[" + Str(-dCol) + "])"
            FmlChk1 = DelSpaces(FmlChk1)
            ' FmlChk1="=Max(RC[-57]:R[-30]C[-57])"
            Range("A3").Offset(i - 1, Hmax_Fml_ColN - 1).Formula = FmlChk1
            Rem
            Rem
            'dH!
            FmlChk1 = "=RC[-1]-RC[-2]"
            Range("A3").Offset(i - 1, Hmed_Fml_ColN - 1).Formula = FmlChk1
            Rem
            Rem
            'H gut!:
            FmlChk1 = "=IF(And(RC[-3]>R30C11, RC[-1]<R18C11),1,0)"
            FmlChk1 = DelSpaces(FmlChk1)
            ' FmlChk1="=IF(And(RC[-3]<R30C11, RC[-1]<R18C11),1,0)"
            Range("A3").Offset(i - 1, Hgut_Fml_ColN - 1).Formula = FmlChk1
            Rem
            Rem
            'VMin
            dCol = Vmin_Fml_ColN - V_ColN
            FmlChk1 = "=MIN(RC[-" + Str(dCol) + "]:R[" + Str(-min_dt) + "]C[-" + Str(dCol) + "])"
            FmlChk1 = DelSpaces(FmlChk1)
            ' FmlChk1="=MIN(RC[-54]:R[-30]C[-54])"
            Range("A3").Offset(i - 1, Vmin_Fml_ColN - 1).Formula = FmlChk1
            Rem
            Rem
            'VMax
            dCol = Vmax_Fml_ColN - V_ColN
            FmlChk1 = "=Max(RC[-" + Str(dCol) + "]:R[" + Str(-min_dt) + "]C[-" + Str(dCol) + "])"
            FmlChk1 = DelSpaces(FmlChk1)
            ' FmlChk1="=Max(RC[-55]:R[-30]C[-55])"
            Range("A3").Offset(i - 1, Vmax_Fml_ColN - 1).Formula = FmlChk1
            Rem
            Rem
            'dV
            FmlChk1 = "=RC[-1]-RC[-2]"
            Range("A3").Offset(i - 1, Vmed_Fml_ColN - 1).Formula = FmlChk1
            Rem
            Rem
            'V gut:
            FmlChk1 = "=IF(And(RC[-3]>R28C11, RC[-1]<R27C11),1,0)"
            FmlChk1 = DelSpaces(FmlChk1)
            Range("A3").Offset(i - 1, Vgut_Fml_ColN - 1).Formula = FmlChk1
            Rem
            Rem
            'Conditions definition
            'cond1
            If Nur_dH_GreaterThan_dHLim Then
                FmlChk1 = "=if(RC[-8]-RC[-9]>R18C11,1,0)"
                FmlChk1 = DelSpaces(FmlChk1)
                'Range("A3").Offset(i - 1, cond1_Fml_ColN - 1).Formula = FmlChk1
            ElseIf Nur_dV_LessThan_dVLim Then
                FmlChk1 = "=if(RC[-8]-RC[-9]<R18C11,1,0)"
                FmlChk1 = DelSpaces(FmlChk1)
            Else
                FmlChk1 = "-1-"
            End If
            Range("A3").Offset(i - 1, cond1_Fml_ColN - 1).Formula = FmlChk1
            'cond2
            If HNurNotLessThanMin Then '
                FmlChk1 = "=if(RC[-10]>=R30C11,1,0)"
                FmlChk1 = DelSpaces(FmlChk1)
            Else
                FmlChk1 = "-1-"
            End If
            Range("A3").Offset(i - 1, cond2_Fml_ColN - 1).Formula = FmlChk1
            'cond3
            If HNurNotGreaterThanHMax Then '
                FmlChk1 = "=if(RC[-10]>=R31C11,1,0)"
                FmlChk1 = DelSpaces(FmlChk1)
            Else
                FmlChk1 = "-1-"
            End If
            Range("A3").Offset(i - 1, cond3_Fml_ColN - 1).Formula = FmlChk1
            'conds 4,5
            Range("A3").Offset(i - 1, cond4_Fml_ColN - 1).Formula = "-1-"
            Range("A3").Offset(i - 1, cond5_Fml_ColN - 1).Formula = "-1-"
            'cond6
            If Nur_dV_GreaterThan_dVLim Then
                FmlChk1 = "=if(RC[-17]-RC[-18]>R27C11,1,0)"
                FmlChk1 = DelSpaces(FmlChk1)
            ElseIf Nur_dV_LessThan_dVLim Then
                FmlChk1 = "=if(RC[-17]-RC[-18]<R27C11,1,0)"
                FmlChk1 = DelSpaces(FmlChk1)
            Else
                FmlChk1 = "-1-"
            End If
            Range("A3").Offset(i - 1, cond6_Fml_ColN - 1).Formula = FmlChk1
            'cond7
            If VNurNotLessThanVMin Then
                FmlChk1 = "=if(RC[-19]>=R28C11,1,0)"
                FmlChk1 = DelSpaces(FmlChk1)
            Else
                FmlChk1 = "-1-"
            End If
            Range("A3").Offset(i - 1, cond7_Fml_ColN - 1).Formula = FmlChk1
            'cond8
            If VNurNotGreaterThanVMax Then
                FmlChk1 = "=if(RC[-19]<=R29C11,1,0)"
                FmlChk1 = DelSpaces(FmlChk1)
            Else
                FmlChk1 = "-1-"
            End If
            Range("A3").Offset(i - 1, cond8_Fml_ColN - 1).Formula = FmlChk1
            Rem
           'R gut!:
           'needed 9 conds, ma for short lebe so
            FmlChk1 = "=RC[-" + Str(Rgut_Fml_ColN - Hgut_Fml_ColN) + "]*RC[-" + Str(Rgut_Fml_ColN - Vgut_Fml_ColN) + "]"
            ' FmlChk1 = "=RC[-15]*RC[-19]"
            FmlChk1 = DelSpaces(FmlChk1)
            Range("A3").Offset(i - 1, Rgut_Fml_ColN - 1).Formula = FmlChk1
            Rem
            Rem
            CondCount = 0
            VerdictFml = "="
            If Nur_dH_LessThan_dHLim Or Nur_dH_GreaterThan_dHLim Then
                CondCount = CondCount + 1
                If CondCount > 1 Then VerdictFml = VerdictFml + "*"
                VerdictFml = VerdictFml + "RC[-9]"
                Range("A3").Offset(i - 1, Rgut_Fml_ColN - 1).Formula = VerdictFml
            End If
            If HNurNotLessThanMin Then
                CondCount = CondCount + 1
                If CondCount > 1 Then VerdictFml = VerdictFml + "*"
                VerdictFml = VerdictFml + "RC[-8]"
                Range("A3").Offset(i - 1, Rgut_Fml_ColN - 1).Formula = VerdictFml
            End If
            If HNurNotGreaterThanHMax Then
                CondCount = CondCount + 1
                If CondCount > 1 Then VerdictFml = VerdictFml + "*"
                VerdictFml = VerdictFml + "RC[-7]"
                Range("A3").Offset(i - 1, Rgut_Fml_ColN - 1).Formula = VerdictFml
            End If
            If Nur_dV_LessThan_dVLim Or Nur_dV_GreaterThan_dVLim Then
                CondCount = CondCount + 1
                If CondCount > 1 Then VerdictFml = VerdictFml + "*"
                VerdictFml = VerdictFml + "RC[-4]"
                Range("A3").Offset(i - 1, Rgut_Fml_ColN - 1).Formula = VerdictFml
            End If
            If VNurNotLessThanVMin Then
                CondCount = CondCount + 1
                If CondCount > 1 Then VerdictFml = VerdictFml + "*"
                VerdictFml = VerdictFml + "RC[-3]"
                Range("A3").Offset(i - 1, Rgut_Fml_ColN - 1).Formula = VerdictFml
            End If
            If VNurNotGreaterThanVMax Then
                CondCount = CondCount + 1
                If CondCount > 1 Then VerdictFml = VerdictFml + "*"
                VerdictFml = VerdictFml + "RC[-2]"
                Range("A3").Offset(i - 1, Rgut_Fml_ColN - 1).Formula = VerdictFml
            End If
        Next i
        Range("BN33:CO33").Select
        Selection.Copy
        For i = 1 To q - min_dt - 1
            Range("BN33").Offset(i, 0).Select
            'Selection.Paste
            ActiveSheet.Paste
        Next i
        FmlChk1 = "=SUM(R[12]C:R[" + Str(q) + "]C)"
        FmlChk1 = DelSpaces(FmlChk1)
        Range("A1").Offset(1 - 1, Rgut_Fml_ColN - 1).Formula = FmlChk1
    End If
    Rem
    MsgBox ("Analysis completed. " + Str(count) + " ranges found.")
End Sub 'Analyse_3_CalcMaxRange

Function DelSpaces(sini As String)
    Dim scur, sr As String
    sr = Mid(sini, 1, 1)
    For i = 2 To Len(sini)
        scur = Mid(sini, i, 1)
        If scur <> " " Then sr = sr + scur
    Next i
    DelSpaces = sr
End Function

Sub Select_CalcAverage_AndWriteBounds_AndPlot_AndHor_AnyMonth()
'
' ;;;;;;4 ;;;;;;
' ;;;;;; ;;;;;;; 25.11.2020 (motor)
'
Rem https://stackoverrun.com/ru/q/3177219
Rem Rem here are bugs in Excel when you delete all the series from a chart. My workaround is to always leave at least one series (even if it has no data in it) in the chart. That seems to work for me.
Rem Just thought of another thing. When you delete a series, the indexes of all the remaining series get reduced by one, so you can't delete them by looping from 1 to the number of series. What you can do instead is have a do loop that deletes them until the SeriesCollection.Count = 0 (or 1, see my comments earlier). Or a for loop that iterates backwards and always deletes the last series (i.e. SeriesCollection(SeriesCollection.Count).Delete
Dim sFml, sChartFml, sChartFml1, sChartFml2, sChartFml1_1, sChartFml2_2, SheetName  As String
Dim ErstLinN, LastLinN As Integer
Dim ErstColN, LastColN, dLine, Bounds_ColN, ErstBound_ColN, LastBound_ColN, dCol As Integer
Dim duration_ColN, SecAmount_ColN, FlightName_ColN As Integer
Dim HG_ColN, Hmin_ColN, Hmax_ColN, dH_ColN As Integer
Dim Vmin_ColN, Vmax_ColN, dV_ColN As Integer
Rem Dim Hmin, Hmax, HCur As Double
Dim RangesElaboreted As Integer
ErstColN = 17: LastColN = 39: Bounds_ColN = 16: ErstBound_ColN = 41: LastBound_ColN = 42
duration_ColN = 43
SecAmount_ColN = 5: V_ColN = 17: HG_ColN = 19: ': FlightName_ColN = 51 let's set rel af some ColN '48 -wa for hor flight'44
Hmin_ColN = 44: Hmax_ColN = Hmin_ColN + 1: dH_ColN = Hmax_ColN + 1
Vmin_ColN = dH_ColN + 1: Vmax_ColN = Vmin_ColN + 1: dV_ColN = Vmax_ColN + 1: FlightName_ColN = dV_ColN + 2
ErstLinN = Selection.Row
dLine = Selection.Rows.count
LastLinN = ErstLinN + dLine - 1
dLine = LastLinN - ErstLinN + 1
Rem ...
Rem Dim sChartFml_defect1, sChartFml_defect2 As String
Rem ...
    Dim sChartFml_defect1 As String
    SheetName = ActiveSheet.Name
    ActiveSheet.Name = "Data"
    sChartFml1 = "='Data'!R" + Str(ErstLinN) + "C5:R" + Str(LastLinN) + "C5"
    sChartFml_defect1 = sChartFml1
    sChartFml_defect1 = DelSpaces(sChartFml_defect1)
    sChartFml1 = sChartFml_defect1
    Dim sChartFml_defect2 As String
    sChartFml2 = "='Data'!R" + Str(ErstLinN) + "C19:R" + Str(LastLinN) + "C19"
    sChartFml_defect2 = sChartFml2
    sChartFml_defect2 = DelSpaces(sChartFml_defect2)
    sChartFml2 = sChartFml_defect2
    Rem
    Dim QSeries As Integer
    Charts.Add
    ActiveChart.ChartType = xlXYScatterLines
    QSeries = ActiveChart.SeriesCollection.count
    'If ActiveChart.SeriesCollection.count > 0 Then
    If QSeries > 0 Then
        'While ActiveChart.SeriesCollection.count > 2
        While QSeries > 2
            QSeries = ActiveChart.SeriesCollection.count
            Rem ActiveChart.SeriesCollection(SeriesCollection.count).Delete
            ActiveChart.SeriesCollection(QSeries).Delete
        Wend
    Else
       ActiveChart.SeriesCollection.NewSeries
    End If
    'sChartFml = "='Data'!R" + Str(ErstLinN) + "C5:R" + Str(LastLinN) + "C5"
    'sChartFml = DelSpaces(sChartFml)
    'ActiveChart.SeriesCollection(1).XValues = sChartFml
    ActiveChart.SeriesCollection(1).XValues = sChartFml1
    'sChartFml = "='Data'!R" + Str(ErstLinN) + "C19:R" + Str(LastLinN) + "C19"
    'sChartFml = DelSpaces(sChartFml)
    'ActiveChart.SeriesCollection(1).Values = sChartFml
    ActiveChart.SeriesCollection(1).Values = sChartFml2
    ActiveChart.SeriesCollection(1).Name = "=""HG(T)"""
    ActiveChart.Location Where:=xlLocationAsObject, Name:= _
        "Data"
    Rem second chart
    'Dim sChartFml_defect_2_1, sChartFml_defect_2_2, sChartFml_defect_2_3 As String
    sChartFml1_1 = "='Data'!R" + Str(ErstLinN) + "C5:R" + Str(LastLinN) + "C5"
    'sChartFml_defect_2_1 = DelSpaces(sChartFml1_1)
    Dim sChartFml_defect_2_1 As String
    sChartFml_defect_2_1 = sChartFml1_1
    sChartFml_defect_2_1 = DelSpaces(sChartFml_defect_2_1)
    sChartFml2_2 = "='Data'!R" + Str(ErstLinN) + "C17:R" + Str(LastLinN) + "C17"
    Dim sChartFml_defect_2_2 As String
    sChartFml_defect_2_2 = sChartFml2_2
    sChartFml_defect_2_2 = DelSpaces(sChartFml_defect_2_2)
    Charts.Add
    ActiveChart.ChartType = xlXYScatterLines
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Data"
    QSeries = ActiveChart.SeriesCollection.count
    If QSeries > 0 Then
        While QSeries > 2
            QSeries = ActiveChart.SeriesCollection.count
            ActiveChart.SeriesCollection(QSeries).Delete
        Wend
    Else
       ActiveChart.SeriesCollection.NewSeries
    End If
    ActiveChart.SeriesCollection(1).XValues = sChartFml_defect_2_1
    ActiveChart.SeriesCollection(1).Values = sChartFml_defect_2_2
    ActiveChart.SeriesCollection(1).Name = "=""V(T)"""
    'ActiveChart.Location Where:=xlLocationAsObject, Name:="Data"
    ActiveWindow.Visible = False
    ActiveSheet.Name = SheetName
Rem
'For i = 1 To Selection.Rows.count
'    HCur = Range("A1").Offset(ErstLinN + i - 1 - 1, HG_ColN - 1).Value
'    If i = 1 Then
'        Hmin = HCur
'        Hmax = HCur
'    Else
'        If HCur < Hmin Then Hmin = HCur
'        If HCur > Hmax Then Hmax = HCur
'    End If
'Next i
'ErstColN = 17: LastColN = 39: Bounds_ColN = 16: ErstBound_ColN = 41: LastBound_ColN = 42
'duration_ColN = 43
'SecAmount_ColN = 5: V_ColN = 17: HG_ColN = 19: ': FlightName_ColN = 51 let's set rel af some ColN '48 -wa for hor flight'44
'Hmin_ColN = 44: Hmax_ColN = Hmin_ColN + 1: dH_ColN = Hmax_ColN + 1
'Vmin_ColN = dH_ColN + 1: Vmax_ColN = Vmin_ColN + 1: dV_ColN = Vmax_ColN + 1: FlightName_ColN = dV_ColN + 2
Rem
Dim sFml1 As String
Range("A1").Offset(LastLinN, 0).EntireRow.Insert
Range("A1").Offset(LastLinN, 0).EntireRow.Insert
For i = ErstColN To LastColN
    'If i <> 35 And i <> 36 Then
        sFml1 = "=Average(R[-" + Str(dLine) + "]C:R[-1]C)"
        sFml1 = DelSpaces(sFml1)
        Range("A1").Offset(LastLinN, i - 1).Formula = sFml1
    'End If
Next i
dCol = ErstBound_ColN - Bounds_ColN
sFml1 = "=R[-" + Str(dLine) + "]C[-" + Str(dCol) + "]"
sFml = DelSpaces(sFml1)
Range("A1").Offset(LastLinN, ErstBound_ColN - 1).Formula = sFml
dCol = LastBound_ColN - Bounds_ColN
sFml1 = "=R[-1]C[-" + Str(dCol) + "]"
sFml = DelSpaces(sFml1)
Range("A1").Offset(LastLinN, LastBound_ColN - 1).Formula = sFml
Rem
dCol = SecAmount_ColN - duration_ColN
sFml1 = "=R[-1]C[" + Str(dCol) + "]-R[-" + Str(dLine) + "]C[" + Str(dCol) + "]"
sFml = DelSpaces(sFml1)
Range("A1").Offset(LastLinN, duration_ColN - 1).Formula = sFml
Rem
dCol = Hmin_ColN - HG_ColN
sFml1 = "=Min(R[-" + Str(dLine) + "]C[-" + Str(dCol) + "]:R[-1]C[-" + Str(dCol) + "])"
sFml1 = DelSpaces(sFml1)
Range("A1").Offset(LastLinN, Hmin_ColN - 1).Formula = sFml1
Rem
dCol = Hmax_ColN - HG_ColN
sFml1 = "=Max(R[-" + Str(dLine) + "]C[-" + Str(dCol) + "]:R[-1]C[-" + Str(dCol) + "])"
sFml1 = DelSpaces(sFml1)
Range("A1").Offset(LastLinN, Hmax_ColN - 1).Formula = sFml1
Rem
dCol = dH_ColN - HG_ColN
sFml1 = "=RC[-1]-RC[-2]"
sFml1 = DelSpaces(sFml1)
Range("A1").Offset(LastLinN, dH_ColN - 1).Formula = sFml1
Rem
Rem
dCol = Vmin_ColN - V_ColN
sFml1 = "=Min(R[-" + Str(dLine) + "]C[-" + Str(dCol) + "]:R[-1]C[-" + Str(dCol) + "])"
sFml1 = DelSpaces(sFml1)
Range("A1").Offset(LastLinN, Vmin_ColN - 1).Formula = sFml1
Rem
dCol = Vmax_ColN - V_ColN
sFml1 = "=Max(R[-" + Str(dLine) + "]C[-" + Str(dCol) + "]:R[-1]C[-" + Str(dCol) + "])"
sFml1 = DelSpaces(sFml1)
Range("A1").Offset(LastLinN, Vmax_ColN - 1).Formula = sFml1
Rem
dCol = dV_ColN - V_ColN
sFml1 = "=RC[-1]-RC[-2]"
sFml1 = DelSpaces(sFml1)
Range("A1").Offset(LastLinN, dV_ColN - 1).Formula = sFml1
Rem
Rem
Range("A1").Offset(LastLinN, FlightName_ColN - 1).Formula = ActiveSheet.Name
Rem
Range("A1").Offset(2 - 1, duration_ColN - 1).Formula = "dT"
Range("A1").Offset(2 - 1, ErstBound_ColN - 1).Formula = "Start"
Range("A1").Offset(2 - 1, LastBound_ColN - 1).Formula = "Fin"
Range("A1").Offset(2 - 1, Hmin_ColN - 1).Formula = "Hmin"
Range("A1").Offset(2 - 1, Hmax_ColN - 1).Formula = "Hmax"
Range("A1").Offset(2 - 1, dH_ColN - 1).Formula = "dH"
Range("A1").Offset(2 - 1, Vmin_ColN - 1).Formula = "Vmin"
Range("A1").Offset(2 - 1, Vmax_ColN - 1).Formula = "Vmax"
Range("A1").Offset(2 - 1, dV_ColN - 1).Formula = "dV"
Range("A1").Offset(2 - 1, FlightName_ColN - 1).Formula = "Flight"
Rem
Range("A1").Offset(ErstLinN - 1, 0).EntireRow.Insert
Rem
RangesElaboreted = Range("AZ1").Value
RangesElaboreted = RangesElaboreted + 1
Range("AZ1").Formula = Str(RangesElaboreted)
End Sub 'Select_CalcAverage_AndWriteBounds_AndPlot_AndHor_AnyMonth

//..........................................


Sub ReplaceColumnsToMakeAsEarlier()
    Columns("U:U").Select
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Columns("B:B").Select
    Selection.Cut
    Columns("X:X").Select
    ActiveSheet.Paste
    'ActiveWindow.ScrollColumn = 12
    'ActiveWindow.ScrollColumn = 11
    'ActiveWindow.ScrollColumn = 10
    'ActiveWindow.ScrollColumn = 9
    'ActiveWindow.ScrollColumn = 8
    'ActiveWindow.ScrollColumn = 7
    'ActiveWindow.ScrollColumn = 6
    'ActiveWindow.ScrollColumn = 5
    'ActiveWindow.ScrollColumn = 4
    'ActiveWindow.ScrollColumn = 3
    'ActiveWindow.ScrollColumn = 2
    'ActiveWindow.ScrollColumn = 1
    Columns("B:B").Select
    Selection.Delete Shift:=xlToLeft
   
End Sub
//
//
Sub PrepareFlightData_Old()
'
' ???????????????????? ??????
' ?????? ??????? 25.11.2020 (motor)
'

'
    Dim sini, s1, sFml, sFml1, TheSheetName As String
    Dim cond As Boolean
    Dim nliN As Integer
    Dim dHG_N, HG_Needed_N, HG_N, dt_N, FuelAmount_N, FlightM_N, dCol As Integer
    Dim PlotCharts, LimitsUnlimited As Boolean
    PlotCharts = True: LimitsUnlimited = False
    Rem Dim duration_N, SecAmount_N As Integer
    Rem
    Columns("A:A").Select
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Selection.Insert Shift:=xlToRight
    Columns("P:P").Select
    Selection.Copy
    Columns("A:A").Select
    ActiveSheet.Paste
    Rem Range("A3:A3979").Select
    Application.CutCopyMode = False
    Range("D1").Select
    ActiveCell.FormulaR1C1 = "HG_min="
    Range("E1").Select
    ActiveCell.FormulaR1C1 = "3"
    Range("F1").Select
    ActiveCell.FormulaR1C1 = "HG_max="
    Range("G1").Select
    ActiveCell.FormulaR1C1 = "30"
    Range("H1").Select
    ActiveCell.FormulaR1C1 = "M ??? ="
    Range("I1").Select
    ActiveCell.FormulaR1C1 = "9460"
    Range("AM1").Select
    ActiveCell.FormulaR1C1 = "M ??????"
    Range("AO1").Select
    ActiveCell.FormulaR1C1 = "???"
    Range("AP1").Select
    ActiveCell.FormulaR1C1 = "??"
    Range("AQ1").Select
    ActiveCell.FormulaR1C1 = "????????????"
    Range("AR1").Select
    ActiveCell.FormulaR1C1 = "?????"
    Range("B2").Select
    ActiveCell.FormulaR1C1 = "h"
    Range("C2").Select
    ActiveCell.FormulaR1C1 = "m"
    Range("D2").Select
    ActiveCell.FormulaR1C1 = "s"
    Range("E2").Select
    ActiveCell.FormulaR1C1 = "t"
    Range("F2").Select
    ActiveCell.FormulaR1C1 = "dt"
    Range("G2").Select
    ActiveCell.FormulaR1C1 = "duration"
    Range("H2").Select
    ActiveCell.FormulaR1C1 = "HG_Needed"
    Rem
    Range("K1").Select
    ActiveCell.FormulaR1C1 = "=MIN(R[2]C[-6]:R[16000]C[-6])"
    Range("J1").Select
    ActiveCell.FormulaR1C1 = "MinN="
    Range("L1").Select
    ActiveCell.FormulaR1C1 = "MaxN="
    Range("M1").Select
    ActiveCell.FormulaR1C1 = "=MAX(R[2]C[-8]:R[16000]C[-8])"
    Rem Range("H3").Select
    Rem     Rem     Range("L2").Select
    ActiveCell.FormulaR1C1 = "dHG"
    Rem
    Rem Dim sini, s1 As String
    Rem Dim COND As Boolean
    Rem Dim nliN As Integer
    Dim sFml2 As String
    dHG_N = 12: HG_Needed_N = 8: HG_N = 19: dt_N = 6: FuelAmount_N = 32: FlightM_N = 39
    Rem duration_N = 43: SecAmount_N = 5
    n = 0
    cond = True
    While cond
        sini = Range("A3").Offset(n, 0).Formula
        If sini <> "" Then
            sini = Range("A3").Offset(n, 0).Formula
            s1 = Mid(sini, 1, 2)
            Range("A3").Offset(n, 1).Formula = s1
            s1 = Mid(sini, 4, 2)
            Range("A3").Offset(n, 2).Formula = s1
            s1 = Mid(sini, 7, 2)
            Range("A3").Offset(n, 3).Formula = s1
            Rem Range("A3").Offset(n, 4).Formula = Range("A3").Offset(n, 1).Value * 3600 + Range("A3").Offset(n, 2).Value * 60 + Range("A3").Offset(n, 3).Value
            Range("A3").Offset(n, 4).Formula = "=RC[-3]*3600+RC[-2]*60+RC[-1]"
            Rem
            sFml = "=RC[-1]-R[-1]C[-1]"
            Range("A3").Offset(n, dt_N - 1).Formula = sFml
            If n = 0 Then Range("A3").Offset(n, dt_N - 1).Formula = 0
            Rem
            dCol = HG_N - HG_Needed_N
            Rem sFml = "=IF(AND(RC[" + Str(dCol) + "]>=" + Range("E1").Value + ";RC[" + Str(dCol) + "]<=" + Range("G1").Value + ");1;0)"
            Rem sFml1 = "=IF(AND(RC[" + Str(dCol) + "]>=R1C5,RC[" + Str(dCol) + "]<=R1C7),1,0)"
            sFml2 = "=IF(AND(RC[" + Str(dCol) + "]>=R1C5,RC[" + Str(dCol) + "]<=R1C7),1,0)"
            sFml = DelSpaces(sFml2)
            Range("A3").Offset(n, HG_Needed_N - 1).Formula = sFml
            Rem
            dCol = HG_N - dHG_N
            Rem sFml1 = "=RC[" + Str(dCol) + "]-R[-1]C[" + Str(dCol) + "]"
            sFml2 = "=RC[" + Str(dCol) + "]-R[-1]C[" + Str(dCol) + "]"
            sFml = DelSpaces(sFml2)
            Range("A3").Offset(n, dHG_N - 1).Formula = sFml
            If n = 0 Then Range("A3").Offset(n, dHG_N - 1).Formula = 0
            Rem
            dCol = FuelAmount_N - FlightM_N
            Rem sFml1 = "=R[-1]C-(R[-1]C[" + Str(dCol) + "]-RC[" + Str(dCol) + "])"
            sFml2 = "=R[-1]C-(R[-1]C[" + Str(dCol) + "]-RC[" + Str(dCol) + "])"
            sFml = DelSpaces(sFml2)
            Range("A3").Offset(n, FlightM_N - 1).Formula = sFml
            If n = 0 Then Range("A3").Offset(n, FlightM_N - 1).Formula = "=R1C9"
            Rem
            Rem dCol = duration_N - SecAmount_N
            Rem rem sFml1 = "=RC[" + Str(dCol) + "]-(R[" + Str(dLine) + "1]C[" + Str(dCol) + "]-RC[" + Str(dCol) + "])"
            Rem sFml = DelSpaces(sFml1)
            Rem Range("A3").Offset(n, duration_N - 1).Formula = sFml
            Rem If n = 0 Then Range("A3").Offset(n, duration_N - 1).Formula = "=R1C9"
            Rem
            n = n + 1
        Else
            cond = False
        End If
    Wend
    Dim H1Name, H2Name, S1Name, S2Name As String
    If PlotCharts Then
     H1Name = Range("H1").Text
     H2Name = Range("H2").Text
     S1Name = Range("S1").Text
     S2Name = Range("S2").Text
     Range("H1").Formula = ""
     Range("H2").Formula = ""
     Range("S1").Formula = ""
     Range("S2").Formula = ""
     TheSheetName = ActiveSheet.Name
      ActiveSheet.Name = "Data"
      Charts.Add
     ActiveChart.ChartType = xlXYScatterLines
   
     ActiveChart.SeriesCollection.NewSeries
     If LimitsUnlimited Then
     ActiveChart.SeriesCollection(1).XValues = _
        "='Data'!C5"
     ActiveChart.SeriesCollection(1).Values = _
        "='Data'!C8"
     Else
        ActiveChart.SeriesCollection(1).XValues = _
        "='Data'!R3C5:R16000C5"
     ActiveChart.SeriesCollection(1).Values = _
        "='Data'!R3C8:R16000C8"
     End If
     ActiveChart.Location Where:=xlLocationAsObject, Name:= _
        "Data"
     With ActiveChart
        .HasTitle = False
        .Axes(xlCategory, xlPrimary).HasTitle = False
        .Axes(xlValue, xlPrimary).HasTitle = False
    End With
    ActiveWindow.Visible = False
    Rem     Rem Range("I33").Select
    Charts.Add
    ActiveChart.ChartType = xlXYScatterLines
    If LimitsUnlimited Then
      ActiveChart.SeriesCollection.NewSeries
      ActiveChart.SeriesCollection(1).XValues = _
        "='Data'!C5"
      ActiveChart.SeriesCollection(1).Values = _
        "='Data'!C19"
    Else
        ActiveChart.SeriesCollection.NewSeries
      ActiveChart.SeriesCollection(1).XValues = _
        "='Data'!R3C5:R16000C5"
      ActiveChart.SeriesCollection(1).Values = _
        "='Data'!R3C19:R16000C19"
    End If
    ActiveChart.Location Where:=xlLocationAsObject, Name:= _
        "Data"
    Range("H1").Formula = H1Name
    Range("H2").Formula = H2Name
    Range("S1").Formula = S1Name
    Range("S2").Formula = S2Name
    ActiveSheet.Name = TheSheetName
    End If
    MsgBox ("done successfully")
End Sub

Sub SimpleGraph2()
'
' SimpleGraph2 ;;;;;;
' ;;;;;; ;;;;;;; 30.11.2020 (motor)
'

'
    Range("E1587").Select
    Charts.Add
    ActiveChart.ChartType = xlXYScatterLines
    ActiveChart.SetSourceData Source:=Sheets("Data").Range("A1:M7195"), PlotBy _
        :=xlColumns
    ActiveChart.SeriesCollection(1).Delete
    ActiveChart.SeriesCollection(1).Delete
    ActiveChart.SeriesCollection(1).Delete
    ActiveChart.SeriesCollection(1).Delete
    ActiveChart.SeriesCollection(1).Delete
    ActiveChart.SeriesCollection(1).Delete
    ActiveChart.SeriesCollection(1).Delete
    ActiveChart.SeriesCollection(1).Delete
    ActiveChart.SeriesCollection(1).Delete
    ActiveChart.SeriesCollection(1).Delete
    ActiveChart.SeriesCollection(1).Delete
    ActiveChart.SeriesCollection(1).Delete
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(1).XValues = "=Data!R1582C5:R1594C5"
    ActiveChart.SeriesCollection(1).Values = "=Data!R1582C19:R1594C19"
    ActiveChart.SeriesCollection(1).Name = "=""HG(T)"""
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Data"
    With ActiveChart.Axes(xlCategory)
        .HasMajorGridlines = True
        .HasMinorGridlines = False
    End With
    With ActiveChart.Axes(xlValue)
        .HasMajorGridlines = True
        .HasMinorGridlines = False
    End With
End Sub

//
Function fEncodeAddress_Old(adr As String)
    Dim CurStr, CurAdr, EncodedAdr As String
    CurAdr = adr
    CurStr = Mid(adr, 1, 7)
    If CurStr = "http://" Then
        CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
        CurStr = "<httpColonDSlash>"
        EncodedAdr = CurStr
    Else
        CurStr = Mid(adr, 1, 8)
        If CurStr = "https://" Then
            CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
            CurStr = "<httpsColonDSlash>"
            EncodedAdr = CurStr
        Else
            CurStr = Mid(adr, 1, 6)
            If CurStr = "ftp://" Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStr = "<ftpColonDSlash>"
                EncodedAdr = CurStr
            Else
                CurStr = Mid(adr, 1, 8)
                If CurStr = "file:///" Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStr = "<fileColon3Slashes>"
                EncodedAdr = CurStr
                End If
            End If
        End If
    End If
    For i = 1 To Len(CurAdr)
        CurStr = Mid(CurAdr, i, 1)
        If CurStr = "<" Then
            CurStr = "<LT>"
        ElseIf CurStr = ">" Then
            CurStr = "<GT>"
        ElseIf CurStr = "=" Then
            CurStr = "<ET>"
        ElseIf CurStr = "/" Then
            CurStr = "<slash>"
        ElseIf CurStr = "." Then
            CurStr = "<dot>"
        ElseIf CurStr = ":" Then
            CurStr = "<colon>"
        ElseIf CurStr = "&" Then
            CurStr = "<amp>"
        ElseIf CurStr = "@" Then
            CurStr = "<at>"
        ElseIf CurStr = "_" Then
            CurStr = "<UL>"
        ElseIf CurStr = "%" Then
            CurStr = "<PerCent>"
        End If
        EncodedAdr = EncodedAdr + CurStr
    Next i
    fEncodeAddress = EncodedAdr
End Function
Function fDecodeAddress_Old(EncodedAdr As String)
    Dim CurStr, CurStrS, CurAdr, DecodedAdr As String
    Dim opentag As Boolean
    CurAdr = EncodedAdr
    DecodedAdr = ""
    CurStr = Mid(CurAdr, 1, Len("<httpColonDSlash>"))
    If CurStr = "<httpColonDSlash>" Then
        CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
        CurStr = "http://"
        DecodedAdr = DecodedAdr + CurStr
    Else
        CurStr = Mid(CurAdr, 1, Len("<httpsColonDSlash>"))
        If CurStr = "<httpsColonDSlash>" Then
            CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
            CurStr = "https://"
            DecodedAdr = DecodedAdr + CurStr
        Else
            CurStr = Mid(CurAdr, 1, Len("<ftpColonDSlash>"))
            If CurStr = "<ftpColonDSlash>" Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
                CurStr = "ftp://"
                DecodedAdr = DecodedAdr + CurStr
            Else
                CurStr = Mid(CurAdr, 1, Len("<fileColon3Slashes>"))
                If CurStr = "<fileColon3Slashes>" Then
                CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStr = "file:///"
                DecodedAdr = DecodedAdr + CurStr
                End If
            End If
        End If
    End If
    CurStr = ""
    For i = 1 To Len(CurAdr)
        CurStr = Mid(CurAdr, i, 1)
        If CurStr = "<" Then
            opentag = True
            CurStrS = CurStrS + CurStr
        ElseIf CurStr = ">" Then
            opentag = False
            CurStrS = CurStrS + CurStr
            If CurStrS = "<LT>" Then
                CurStrS = "<"
            ElseIf CurStrS = "<GT>" Then
                CurStrS = ">"
            ElseIf CurStrS = "<ET>" Then
                CurStrS = "="
            ElseIf CurStrS = "<slash>" Then
                CurStrS = "/"
            ElseIf CurStrS = "<dot>" Then
                CurStrS = "."
            ElseIf CurStrS = "<amp>" Then
                CurStrS = "&"
            ElseIf CurStrS = "<at>" Then
                CurStrS = "@"
            ElseIf CurStrS = "<PerCent>" Then
                CurStrS = "%"
            End If
            DecodedAdr = DecodedAdr + CurStrS
            CurStrS = ""
        Else
            If opentag Then
                CurStrS = CurStrS + CurStr
            Else
               DecodedAdr = DecodedAdr + CurStr
               CurStrS = ""
            End If
        End If
    Next i
    fDecodeAddress = DecodedAdr
End Function

Function fEncodeAddress(adr As String)
    Dim CurStr, CurAdr, EncodedAdr As String
    CurAdr = adr
    CurStr = Mid(adr, 1, Len("http://www."))
    If CurStr = "http://www." Then
        CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
        CurStr = "<hColonDSlash3wDot>"
        EncodedAdr = CurStr
    Else
        CurStr = Mid(adr, 1, Len("https://www."))
        If CurStr = "https://www." Then
            CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
            CurStr = "<hs3ColonDSlash3wDot>"
            EncodedAdr = CurStr
        Else
            CurStr = Mid(adr, 1, Len("ftp://www."))
            If CurStr = "ftp://www." Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStr = "<fColonDSlash3wDot>"
                EncodedAdr = CurStr
            Else
                CurStr = Mid(adr, 1, Len("http://"))
                If CurStr = "http://" Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStr = "<hColonDSlash>"
                EncodedAdr = CurStr
                Else
                CurStr = Mid(adr, 1, Len("https://"))
                If CurStr = "https://" Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStr = "<hsColonDSlash>"
                EncodedAdr = CurStr
                Else
                CurStr = Mid(adr, 1, Len("ftp://"))
                If CurStr = "ftp://" Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStr = "<fColonDSlash>"
                EncodedAdr = CurStr
                Else
                CurStr = Mid(adr, 1, Len("file:///"))
                If CurStr = "file:///" Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStr = "<flColon3Slashes>"
                EncodedAdr = CurStr
                End If
                End If
                End If
                End If
            End If
        End If
    End If
    CurStr = Mid(CurAdr, 1, Len("www."))
    If CurStr = "www." Then
        CurStr = "3wDot"
        EncodedAdr = EncodedAdr + CurStr
        CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
    End If
    For i = 1 To Len(CurAdr)
        CurStr = Mid(CurAdr, i, 1)
        If CurStr = "<" Then
            CurStr = "<LT>"
        ElseIf CurStr = ">" Then
            CurStr = "<GT>"
        ElseIf CurStr = "=" Then
            CurStr = "<ET>"
        ElseIf CurStr = "/" Then
            CurStr = "<slash>"
        ElseIf CurStr = "." Then
            CurStr = "<dot>"
        ElseIf CurStr = ":" Then
            CurStr = "<colon>"
        ElseIf CurStr = "&" Then
            CurStr = "<amp>"
        ElseIf CurStr = "@" Then
            CurStr = "<at>"
        ElseIf CurStr = "_" Then
            CurStr = "<UL>"
        ElseIf CurStr = "%" Then
            CurStr = "<PerCent>"
        ElseIf CurStr = "(" Then
            CurStr = "<OpenBr>"
        ElseIf CurStr = ")" Then
            CurStr = "<ShutBr>"
        End If
        EncodedAdr = EncodedAdr + CurStr
    Next i
    fEncodeAddress = EncodedAdr
End Function
Function fDecodeAddress(EncodedAdr As String)
    Dim CurStr, CurStrS, CurAdr, DecodedAdr As String
    Dim opentag As Boolean
    CurAdr = EncodedAdr
    DecodedAdr = ""
    CurStr = Mid(CurAdr, 1, Len("<hColonDSlash3wDot>"))
    If CurStr = "<hColonDSlash3wDot>" Then
        CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
        CurStr = "http://www."
        DecodedAdr = DecodedAdr + CurStr
        Else
        If CurStr = "<hsColonDSlash3wDot>" Then
            CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
            CurStr = "https://www."
            DecodedAdr = DecodedAdr + CurStr
        Else
            If CurStr = "<fColonDSlash>" Then
                CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
                CurStr = "ftp://www."
                DecodedAdr = DecodedAdr + CurStr
            Else
                If CurStr = "<hColonDSlash>" Then
                CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
                CurStr = "http://"
                DecodedAdr = DecodedAdr + CurStr
                Else
                CurStr = Mid(CurAdr, 1, Len("<hsColonDSlash>"))
                If CurStr = "<hsColonDSlash>" Then
                CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
                CurStr = "https://"
                DecodedAdr = DecodedAdr + CurStr
                Else
                CurStr = Mid(CurAdr, 1, Len("<fColonDSlash>"))
                If CurStr = "<fColonDSlash>" Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
                CurStr = "ftp://"
                DecodedAdr = DecodedAdr + CurStr
                Else
                CurStr = Mid(CurAdr, 1, Len("<flColon3Slashes>"))
                If CurStr = "<flColon3Slashes>" Then
                CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStr = "file:///"
                DecodedAdr = DecodedAdr + CurStr
                End If
                End If
                End If
                End If
            End If
        End If
    End If
    CurStr = ""
    For i = 1 To Len(CurAdr)
        CurStr = Mid(CurAdr, i, 1)
        If CurStr = "<" Then
            opentag = True
            CurStrS = CurStrS + CurStr
        ElseIf CurStr = ">" Then
            opentag = False
            CurStrS = CurStrS + CurStr
            If CurStrS = "<LT>" Then
                CurStrS = "<"
            ElseIf CurStrS = "<GT>" Then
                CurStrS = ">"
            ElseIf CurStrS = "<ET>" Then
                CurStrS = "="
            ElseIf CurStrS = "<slash>" Then
                CurStrS = "/"
            ElseIf CurStrS = "<dot>" Then
                CurStrS = "."
            ElseIf CurStrS = "<amp>" Then
                CurStrS = "&"
            ElseIf CurStrS = "<at>" Then
                CurStrS = "@"
            ElseIf CurStrS = "<PerCent>" Then
                CurStrS = "%"
            ElseIf CurStrS = "<colon>" Then
                CurStrS = ":"
            ElseIf CurStrS = "<OpenBr>" Then
                CurStrS = "("
            ElseIf CurStrS = "<ShutBr>" Then
                CurStrS = ")"
            ElseIf CurStrS = "<3wDot>" Then
                CurStrS = "www."
            End If
            DecodedAdr = DecodedAdr + CurStrS
            CurStrS = ""
        Else
            If opentag Then
                CurStrS = CurStrS + CurStr
            Else
               DecodedAdr = DecodedAdr + CurStr
               CurStrS = ""
            End If
        End If
    Next i
    fDecodeAddress = DecodedAdr
End Function

Function fEncodeAddress2(adr As String)
    Dim CurStr, CurAdr, EncodedAdr As String
    CurAdr = adr
    CurStr = Mid(adr, 1, Len("http://www."))
    If CurStr = "http://www." Then
        CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
        CurStr = "<hColonDSlash3wDot>"
        EncodedAdr = CurStr
    Else
        CurStr = Mid(adr, 1, Len("https://www."))
        If CurStr = "https://www." Then
            CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
            CurStr = "<hsColonDSlash3wDot>"
            EncodedAdr = CurStr
        Else
            CurStr = Mid(adr, 1, Len("ftp://www."))
            If CurStr = "ftp://www." Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStr = "<fColonDSlash3wDot>"
                EncodedAdr = CurStr
            Else
                CurStr = Mid(adr, 1, Len("http://"))
                If CurStr = "http://" Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStr = "<hColonDSlash>"
                EncodedAdr = CurStr
                Else
                CurStr = Mid(adr, 1, Len("https://"))
                If CurStr = "https://" Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStr = "<hsColonDSlash>"
                EncodedAdr = CurStr
                Else
                CurStr = Mid(adr, 1, Len("ftp://"))
                If CurStr = "ftp://" Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStr = "<fColonDSlash>"
                EncodedAdr = CurStr
                Else
                CurStr = Mid(adr, 1, Len("file:///"))
                If CurStr = "file:///" Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStr = "<flColon3Slashes>"
                EncodedAdr = CurStr
                End If
                End If
                End If
                End If
            End If
        End If
    End If
    CurStr = Mid(CurAdr, 1, Len("www."))
    If CurStr = "www." Then
        CurStr = "3wDot"
        EncodedAdr = EncodedAdr + CurStr
        CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
    End If
    For i = 1 To Len(CurAdr)
        CurStr = Mid(CurAdr, i, 1)
        If CurStr = "<" Then
            CurStr = "<LT>"
        ElseIf CurStr = ">" Then
            CurStr = "<GT>"
        ElseIf CurStr = "=" Then
            CurStr = "<ET>"
        ElseIf CurStr = "/" Then
            CurStr = "<slash>"
        ElseIf CurStr = "." Then
            CurStr = "<dot>"
        ElseIf CurStr = ":" Then
            CurStr = "<colon>"
        ElseIf CurStr = "&" Then
            CurStr = "<amp>"
        ElseIf CurStr = "@" Then
            CurStr = "<at>"
        ElseIf CurStr = "_" Then
            CurStr = "<UL>"
        ElseIf CurStr = "%" Then
            CurStr = "<PerCent>"
        ElseIf CurStr = "(" Then
            CurStr = "<OpenBr>"
        ElseIf CurStr = ")" Then
            CurStr = "<ShutBr>"
        'ElseIf CurStr = "b" Then
        '    CurStr = "<smallB>"
        'ElseIf CurStr = "B" Then
        '    CurStr = "<bigB>"
        'ElseIf CurStr = "s" Then
        '    CurStr = "<smallS>"
        ElseIf CurStr = "1" Then
            CurStr = "<one>"
        ElseIf CurStr = "2" Then
            CurStr = "<two>"
        ElseIf CurStrS = "A" Then
            CurStrS = "<BGSL>"
        ElseIf CurStrS = "a" Then
            CurStrS = "<SGSL>"
        ElseIf CurStrS = "E" Then
            CurStrS = "<BGFL>"
        ElseIf CurStrS = "e" Then
            CurStrS = "<SGFL>"
        'ElseIf CurStr = "S" Then
        '    CurStr = "<bigS>"
        End If
        EncodedAdr = EncodedAdr + CurStr
    Next i
    fEncodeAddress2 = EncodedAdr
End Function
Function fDecodeAddress2(EncodedAdr As String)
    Dim CurStr, CurStrS, CurAdr, DecodedAdr As String
    Dim opentag As Boolean
    CurAdr = EncodedAdr
    DecodedAdr = ""
    CurStr = Mid(CurAdr, 1, Len("<hColonDSlash3wDot>"))
    If CurStr = "<hColonDSlash3wDot>" Then
        CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
        CurStr = "http://www."
        DecodedAdr = DecodedAdr + CurStr
        Else
        CurStr = Mid(CurAdr, 1, Len("<hsColonDSlash3wDot>"))
        If CurStr = "<hsColonDSlash3wDot>" Then
            CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
            CurStr = "https://www."
            DecodedAdr = DecodedAdr + CurStr
        Else
            CurStr = Mid(CurAdr, 1, Len("<fColonDSlash>"))
            If CurStr = "<fColonDSlash>" Then
                CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
                CurStr = "ftp://www."
                DecodedAdr = DecodedAdr + CurStr
            Else
                CurStr = Mid(CurAdr, 1, Len("<hColonDSlash>"))
                If CurStr = "<hColonDSlash>" Then
                CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
                CurStr = "http://"
                DecodedAdr = DecodedAdr + CurStr
                Else
                CurStr = Mid(CurAdr, 1, Len("<hsColonDSlash>"))
                If CurStr = "<hsColonDSlash>" Then
                CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
                CurStr = "https://"
                DecodedAdr = DecodedAdr + CurStr
                Else
                CurStr = Mid(CurAdr, 1, Len("<fColonDSlash>"))
                If CurStr = "<fColonDSlash>" Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
                CurStr = "ftp://"
                DecodedAdr = DecodedAdr + CurStr
                Else
                CurStr = Mid(CurAdr, 1, Len("<flColon3Slashes>"))
                If CurStr = "<flColon3Slashes>" Then
                CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStr = "file:///"
                DecodedAdr = DecodedAdr + CurStr
                End If
                End If
                End If
                End If
            End If
        End If
    End If
    CurStr = ""
    For i = 1 To Len(CurAdr)
        CurStr = Mid(CurAdr, i, 1)
        If CurStr = "<" Then
            opentag = True
            CurStrS = CurStrS + CurStr
        ElseIf CurStr = ">" Then
            opentag = False
            CurStrS = CurStrS + CurStr
            If CurStrS = "<LT>" Then
                CurStrS = "<"
            ElseIf CurStrS = "<GT>" Then
                CurStrS = ">"
            ElseIf CurStrS = "<ET>" Then
                CurStrS = "="
            ElseIf CurStrS = "<slash>" Then
                CurStrS = "/"
            ElseIf CurStrS = "<dot>" Then
                CurStrS = "."
            ElseIf CurStrS = "<amp>" Then
                CurStrS = "&"
            ElseIf CurStrS = "<at>" Then
                CurStrS = "@"
            ElseIf CurStrS = "<PerCent>" Then
                CurStrS = "%"
            ElseIf CurStrS = "<colon>" Then
                CurStrS = ":"
            ElseIf CurStrS = "<OpenBr>" Then
                CurStrS = "("
            ElseIf CurStrS = "<ShutBr>" Then
                CurStrS = ")"
            'ElseIf CurStrS = "<bigS>" Then
            '    CurStrS = "S"
            'ElseIf CurStrS = "<smallS>" Then
             '   CurStrS = "s"
            'ElseIf CurStrS = "<bigB>" Then
             '   CurStrS = "B"
            'ElseIf CurStrS = "<smallB>" Then
            '   CurStrS = "b"
            ElseIf CurStrS = "<one>" Then
                CurStrS = "1"
            ElseIf CurStrS = "<two>" Then
                CurStrS = "2"
            ElseIf CurStrS = "<3wDot>" Then
                CurStrS = "www."
            ElseIf CurStrS = "<BGSL>" Then
                CurStrS = "A"
            ElseIf CurStrS = "<SGSL>" Then
                CurStrS = "a"
            ElseIf CurStrS = "<BGFL>" Then
                CurStrS = "E"
            ElseIf CurStrS = "<SGFL>" Then
               CurStrS = "e"
            End If
            DecodedAdr = DecodedAdr + CurStrS
            CurStrS = ""
        Else
            If opentag Then
                CurStrS = CurStrS + CurStr
            Else
               DecodedAdr = DecodedAdr + CurStr
               CurStrS = ""
            End If
        End If
    Next i
    fDecodeAddress2 = DecodedAdr
End Function
Function fEncodeAddress3_Old(adr As String)
    Dim CurStr, CurAdr, EncodedAdr As String
    CurAdr = adr
    CurStr = Mid(adr, 1, Len("http://www."))
    If CurStr = "http://www." Then
        CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
        CurStr = "AhColonDSlash3wDotE"
        EncodedAdr = CurStr
    Else
        CurStr = Mid(adr, 1, Len("https://www."))
        If CurStr = "https://www." Then
            CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
            CurStr = "AhsColonDSlash3wDotE"
            EncodedAdr = CurStr
        Else
            CurStr = Mid(adr, 1, Len("ftp://www."))
            If CurStr = "ftp://www." Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStr = "AfColonDSlash3wDotE"
                EncodedAdr = CurStr
            Else
                CurStr = Mid(adr, 1, Len("http://"))
                If CurStr = "http://" Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStr = "AhColonDSlashE"
                EncodedAdr = CurStr
                Else
                CurStr = Mid(adr, 1, Len("https://"))
                If CurStr = "https://" Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStr = "AhsColonDSlashE"
                EncodedAdr = CurStr
                Else
                CurStr = Mid(adr, 1, Len("ftp://"))
                If CurStr = "ftp://" Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStr = "AfColonDSlashE"
                EncodedAdr = CurStr
                Else
                CurStr = Mid(adr, 1, Len("file:///"))
                If CurStr = "file:///" Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStr = "AflColon3SlashesE"
                EncodedAdr = CurStr
                End If
                End If
                End If
                End If
            End If
        End If
    End If
    CurStr = Mid(CurAdr, 1, Len("www."))
    If CurStr = "www." Then
        CurStr = "3wDot"
        EncodedAdr = EncodedAdr + CurStr
        CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
    End If
    For i = 1 To Len(CurAdr)
        CurStr = Mid(CurAdr, i, 1)
        If CurStr = "<" Then
            CurStr = "ALTE"
        ElseIf CurStr = ">" Then
            CurStr = "AGTE"
        ElseIf CurStr = "=" Then
            CurStr = "AequalE"
        ElseIf CurStr = "/" Then
            CurStr = "AslashE"
        ElseIf CurStr = "." Then
            CurStr = "AdotE"
        ElseIf CurStr = ":" Then
            CurStr = "AcolonE"
        ElseIf CurStr = "&" Then
            CurStr = "AampE"
        ElseIf CurStr = "@" Then
            CurStr = "AatE"
        ElseIf CurStr = "_" Then
            CurStr = "AULE"
        ElseIf CurStr = "%" Then
            CurStr = "APerCentE"
        ElseIf CurStr = "(" Then
            CurStr = "AOpenBrE"
        ElseIf CurStr = ")" Then
            CurStr = "AShutBrE"
        'ElseIf CurStr = "b" Then
        '    CurStr = "<smallB>"
        'ElseIf CurStr = "B" Then
        '    CurStr = "<bigB>"
        'ElseIf CurStr = "s" Then
        '    CurStr = "<smallS>"
        ElseIf CurStr = "1" Then
            CurStr = "AoneE"
        ElseIf CurStr = "2" Then
            CurStr = "AtwoE"
        ElseIf CurStr = "3" Then
            CurStr = "AtriE"
        ElseIf CurStrS = "A" Then
            CurStrS = "ABGSLE"
        ElseIf CurStrS = "a" Then
            CurStrS = "ASGSLE"
        ElseIf CurStrS = "E" Then
            CurStrS = "ABGFLE"
        ElseIf CurStrS = "e" Then
            CurStrS = "ASGFLE"
        'ElseIf CurStr = "S" Then
        '    CurStr = "<bigS>"
        End If
        EncodedAdr = EncodedAdr + CurStr
    Next i
    fEncodeAddress3_Old = EncodedAdr
End Function
Function fDecodeAddress3_Old(EncodedAdr As String)
    Dim CurStr, CurStrS, CurAdr, DecodedAdr As String
    Dim opentag As Boolean
    CurAdr = EncodedAdr
    DecodedAdr = ""
    CurStr = Mid(CurAdr, 1, Len("<hColonDSlash3wDot>"))
    If CurStr = "AhColonDSlash3wDotE" Then
        CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
        CurStr = "http://www."
        DecodedAdr = DecodedAdr + CurStr
        Else
        CurStr = Mid(CurAdr, 1, Len("<hsColonDSlash3wDot>"))
        If CurStr = "AhsColonDSlash3wDotE" Then
            CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
            CurStr = "https://www."
            DecodedAdr = DecodedAdr + CurStr
        Else
            CurStr = Mid(CurAdr, 1, Len("<fColonDSlash>"))
            If CurStr = "AfColonDSlashE" Then
                CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
                CurStr = "ftp://www."
                DecodedAdr = DecodedAdr + CurStr
            Else
                CurStr = Mid(CurAdr, 1, Len("<hColonDSlash>"))
                If CurStr = "AhColonDSlashE" Then
                CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
                CurStr = "http://"
                DecodedAdr = DecodedAdr + CurStr
                Else
                CurStr = Mid(CurAdr, 1, Len("<hsColonDSlash>"))
                If CurStr = "AhsColonDSlashE" Then
                CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
                CurStr = "https://"
                DecodedAdr = DecodedAdr + CurStr
                Else
                CurStr = Mid(CurAdr, 1, Len("<fColonDSlash>"))
                If CurStr = "AfColonDSlashE" Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
                CurStr = "ftp://"
                DecodedAdr = DecodedAdr + CurStr
                Else
                CurStr = Mid(CurAdr, 1, Len("<flColon3Slashes>"))
                If CurStr = "AflColon3SlashesE" Then
                CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStr = "file:///"
                DecodedAdr = DecodedAdr + CurStr
                End If
                End If
                End If
                End If
            End If
        End If
    End If
    CurStr = ""
    For i = 1 To Len(CurAdr)
        CurStr = Mid(CurAdr, i, 1)
        If CurStr = "A" Then
            opentag = True
            CurStrS = CurStrS + CurStr
        ElseIf CurStr = "E" Then
            opentag = False
            CurStrS = CurStrS + CurStr
            If CurStrS = "ALTE" Then
                CurStrS = "<"
            ElseIf CurStrS = "AGTE" Then
                CurStrS = ">"
            ElseIf CurStrS = "AequalE" Then
                CurStrS = "="
            ElseIf CurStrS = "AslashE" Then
                CurStrS = "/"
            ElseIf CurStrS = "AdotE" Then
                CurStrS = "."
            ElseIf CurStrS = "AampE" Then
                CurStrS = "&"
            ElseIf CurStrS = "AatE" Then
                CurStrS = "@"
            ElseIf CurStrS = "APerCentE" Then
                CurStrS = "%"
            ElseIf CurStrS = "AcolonE" Then
                CurStrS = ":"
            ElseIf CurStrS = "AOpenBrE" Then
                CurStrS = "("
            ElseIf CurStrS = "AShutBrE" Then
                CurStrS = ")"
            'ElseIf CurStrS = "<bigS>" Then
            '    CurStrS = "S"
            'ElseIf CurStrS = "<smallS>" Then
             '   CurStrS = "s"
            'ElseIf CurStrS = "<bigB>" Then
             '   CurStrS = "B"
            'ElseIf CurStrS = "<smallB>" Then
            '   CurStrS = "b"
            ElseIf CurStrS = "AoneE" Then
                CurStrS = "1"
            ElseIf CurStrS = "AtwoE" Then
                CurStrS = "2"
            ElseIf CurStrS = "AtriE" Then
                CurStrS = "3"
            ElseIf CurStrS = "A3wDotE" Then
                CurStrS = "www."
            ElseIf CurStrS = "ABGSLE" Then
                CurStrS = "A"
            ElseIf CurStrS = "ASGSLE" Then
                CurStrS = "a"
            ElseIf CurStrS = "ABGFLE" Then
                CurStrS = "E"
            ElseIf CurStrS = "ASGFLE" Then
               CurStrS = "e"
            End If
            DecodedAdr = DecodedAdr + CurStrS
            CurStrS = ""
        Else
            If opentag Then
                CurStrS = CurStrS + CurStr
            Else
               DecodedAdr = DecodedAdr + CurStr
               CurStrS = ""
            End If
        End If
    Next i
    fDecodeAddress3_Old = DecodedAdr
End Function
Function fEncodeAddress3(adr As String)
    Dim CurStr, CurAdr, EncodedAdr As String
    CurAdr = adr
    CurStr = Mid(adr, 1, Len("http://www."))
    If CurStr = "http://www." Then
        CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
        CurStr = "AhColonDSlash3wDotE"
        EncodedAdr = CurStr
    Else
        CurStr = Mid(adr, 1, Len("https://www."))
        If CurStr = "https://www." Then
            CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
            CurStr = "AhsColonDSlash3wDotE"
            EncodedAdr = CurStr
        Else
            CurStr = Mid(adr, 1, Len("ftp://www."))
            If CurStr = "ftp://www." Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStr = "AfColonDSlash3wDotE"
                EncodedAdr = CurStr
            Else
                CurStr = Mid(adr, 1, Len("http://"))
                If CurStr = "http://" Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStr = "AhColonDSlashE"
                EncodedAdr = CurStr
                Else
                CurStr = Mid(adr, 1, Len("https://"))
                If CurStr = "https://" Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStr = "AhsColonDSlashE"
                EncodedAdr = CurStr
                Else
                CurStr = Mid(adr, 1, Len("ftp://"))
                If CurStr = "ftp://" Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStr = "AfColonDSlashE"
                EncodedAdr = CurStr
                Else
                CurStr = Mid(adr, 1, Len("file:///"))
                If CurStr = "file:///" Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStr = "AflColon3SlashesE"
                EncodedAdr = CurStr
                End If
                End If
                End If
                End If
            End If
        End If
    End If
    CurStr = Mid(CurAdr, 1, Len("www."))
    If CurStr = "www." Then
        CurStr = "A3wDotE"
        CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
        EncodedAdr = EncodedAdr + CurStr
       
    End If
    For i = 1 To Len(CurAdr)
        CurStr = Mid(CurAdr, i, 1)
        If CurStr = "<" Then
            CurStr = "ALTE"
        ElseIf CurStr = ">" Then
            CurStr = "AGTE"
        ElseIf CurStr = "=" Then
            CurStr = "AequalE"
        ElseIf CurStr = "/" Then
            CurStr = "AslashE"
        ElseIf CurStr = "." Then
            CurStr = "AdotE"
        ElseIf CurStr = ":" Then
            CurStr = "AcolonE"
        ElseIf CurStr = "&" Then
            CurStr = "AampE"
        ElseIf CurStr = "@" Then
            CurStr = "AatE"
        ElseIf CurStr = "_" Then
            CurStr = "AULE"
        ElseIf CurStr = "%" Then
            CurStr = "APerCentE"
        ElseIf CurStr = "(" Then
            CurStr = "AOpenBrE"
        ElseIf CurStr = ")" Then
            CurStr = "AShutBrE"
        'ElseIf CurStr = "b" Then
        '    CurStr = "<smallB>"
        'ElseIf CurStr = "B" Then
        '    CurStr = "<bigB>"
        'ElseIf CurStr = "s" Then
        '    CurStr = "<smallS>"
        ElseIf CurStr = "1" Then
            CurStr = "AoneE"
        ElseIf CurStr = "2" Then
            CurStr = "AtwoE"
        ElseIf CurStr = "3" Then
            CurStr = "AtriE"
        ElseIf CurStr = "A" Then
            CurStr = "ABGSLE"
        ElseIf CurStr = "a" Then
            CurStr = "ASGSLE"
        ElseIf CurStr = "E" Then
            CurStr = "ABGFLE"
        ElseIf CurStr = "e" Then
            CurStr = "ASGFLE"
        'ElseIf CurStr = "S" Then
        '    CurStr = "<bigS>"
        End If
        EncodedAdr = EncodedAdr + CurStr
    Next i
    fEncodeAddress3 = EncodedAdr
End Function
Function fDecodeAddress3(EncodedAdr As String)
    Dim CurStr, CurStrS, CurAdr, DecodedAdr As String
    Dim opentag As Boolean
    CurAdr = EncodedAdr
    DecodedAdr = ""
    CurStr = Mid(CurAdr, 1, Len("<hColonDSlash3wDot>"))
    If CurStr = "AhColonDSlash3wDotE" Then
        CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
        CurStr = "http://www."
        DecodedAdr = DecodedAdr + CurStr
        Else
        CurStr = Mid(CurAdr, 1, Len("<hsColonDSlash3wDot>"))
        If CurStr = "AhsColonDSlash3wDotE" Then
            CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
            CurStr = "https://www."
            DecodedAdr = DecodedAdr + CurStr
        Else
            CurStr = Mid(CurAdr, 1, Len("<fColonDSlash>"))
            If CurStr = "AfColonDSlashE" Then
                CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
                CurStr = "ftp://www."
                DecodedAdr = DecodedAdr + CurStr
            Else
                CurStr = Mid(CurAdr, 1, Len("<hColonDSlash>"))
                If CurStr = "AhColonDSlashE" Then
                CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
                CurStr = "http://"
                DecodedAdr = DecodedAdr + CurStr
                Else
                CurStr = Mid(CurAdr, 1, Len("<hsColonDSlash>"))
                If CurStr = "AhsColonDSlashE" Then
                CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
                CurStr = "https://"
                DecodedAdr = DecodedAdr + CurStr
                Else
                CurStr = Mid(CurAdr, 1, Len("<fColonDSlash>"))
                If CurStr = "AfColonDSlashE" Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
                CurStr = "ftp://"
                DecodedAdr = DecodedAdr + CurStr
                Else
                CurStr = Mid(CurAdr, 1, Len("<flColon3Slashes>"))
                If CurStr = "AflColon3SlashesE" Then
                CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStr = "file:///"
                DecodedAdr = DecodedAdr + CurStr
                End If
                End If
                End If
                End If
            End If
        End If
    End If
    CurStr = ""
    For i = 1 To Len(CurAdr)
        CurStr = Mid(CurAdr, i, 1)
        If CurStr = "A" Then
            opentag = True
            CurStrS = CurStrS + CurStr
        ElseIf CurStr = "E" Then
            opentag = False
            CurStrS = CurStrS + CurStr
            If CurStrS = "ALTE" Then
                CurStrS = "<"
            ElseIf CurStrS = "AGTE" Then
                CurStrS = ">"
            ElseIf CurStrS = "AequalE" Then
                CurStrS = "="
            ElseIf CurStrS = "AslashE" Then
                CurStrS = "/"
            ElseIf CurStrS = "AdotE" Then
                CurStrS = "."
            ElseIf CurStrS = "AampE" Then
                CurStrS = "&"
            ElseIf CurStrS = "AatE" Then
                CurStrS = "@"
            ElseIf CurStrS = "APerCentE" Then
                CurStrS = "%"
            ElseIf CurStrS = "AcolonE" Then
                CurStrS = ":"
            ElseIf CurStrS = "AOpenBrE" Then
                CurStrS = "("
            ElseIf CurStrS = "AShutBrE" Then
                CurStrS = ")"
            'ElseIf CurStrS = "<bigS>" Then
            '    CurStrS = "S"
            'ElseIf CurStrS = "<smallS>" Then
             '   CurStrS = "s"
            'ElseIf CurStrS = "<bigB>" Then
             '   CurStrS = "B"
            'ElseIf CurStrS = "<smallB>" Then
            '   CurStrS = "b"
            ElseIf CurStrS = "AoneE" Then
                CurStrS = "1"
            ElseIf CurStrS = "AtwoE" Then
                CurStrS = "2"
            ElseIf CurStrS = "AtriE" Then
                CurStrS = "3"
            ElseIf CurStrS = "A3wDotE" Then
                CurStrS = "www."
            ElseIf CurStrS = "ABGSLE" Then
                CurStrS = "A"
            ElseIf CurStrS = "ASGSLE" Then
                CurStrS = "a"
            ElseIf CurStrS = "ABGFLE" Then
                CurStrS = "E"
            ElseIf CurStrS = "ASGFLE" Then
               CurStrS = "e"
            End If
            DecodedAdr = DecodedAdr + CurStrS
            CurStrS = ""
        Else
            If opentag Then
                CurStrS = CurStrS + CurStr
            Else
               DecodedAdr = DecodedAdr + CurStr
               CurStrS = ""
            End If
        End If
    Next i
    fDecodeAddress3 = DecodedAdr
End Function
Function fEncodeAddress4(adr As String)
    Dim CurStr, CurStrR, CurAdr, EncodedAdr As String
    Dim opentag As Boolean
    CurAdr = adr
    CurStr = Mid(adr, 1, Len("http://www."))
    If CurStr = "http://www." Then
        CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
        CurStrR = "AhColonDSlash3wDot. E"
        EncodedAdr = CurStrR
    Else
        CurStr = Mid(adr, 1, Len("https://www."))
        If CurStr = "https://www." Then
            CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
            CurStrR = "AhsColonDSlash3wDot. E"
            EncodedAdr = CurStrR
        Else
            CurStr = Mid(adr, 1, Len("ftp://www."))
            If CurStr = "ftp://www." Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStrR = "AfColonDSlash3wDot. E"
                EncodedAdr = CurStrR
            Else
                CurStr = Mid(adr, 1, Len("http://"))
                If CurStr = "http://" Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStrR = "AhColonDSlash. E"
                EncodedAdr = CurStrR
                Else
                CurStr = Mid(adr, 1, Len("https://"))
                If CurStr = "https://" Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStrR = "AhsColonDSlash. E"
                EncodedAdr = CurStrR
                Else
                CurStr = Mid(adr, 1, Len("ftp://"))
                If CurStr = "ftp://" Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStrR = "AfColonDSlash. E"
                EncodedAdr = CurStrR
                Else
                CurStr = Mid(adr, 1, Len("file:///"))
                If CurStr = "file:///" Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStrR = "AflColon3Slashes. E"
                EncodedAdr = CurStrR
                End If
                End If
                End If
                End If
            End If
        End If
    End If
    CurStr = Mid(CurAdr, 1, Len("www."))
    If CurStr = "www." Then
        CurStrR = "A3wDot. E"
        CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
        EncodedAdr = EncodedAdr + CurStrR
       
    End If
    CurStrR = ""
    For i = 1 To Len(CurAdr)
        opentag = True
        CurStr = Mid(CurAdr, i, 1)
        If CurStr = "<" Then
            CurStrR = "ALT."
        ElseIf CurStr = ">" Then
            CurStrR = "AGT."
        ElseIf CurStr = "=" Then
            CurStrR = "Aequal."
        ElseIf CurStr = "/" Then
            CurStrR = "Aslash."
        ElseIf CurStr = "." Then
            CurStrR = "Adot."
        ElseIf CurStr = ":" Then
            CurStrR = "Acolon."
        ElseIf CurStr = "&" Then
            CurStrR = "Aamp."
        ElseIf CurStr = "@" Then
            CurStrR = "Aat."
        ElseIf CurStr = "_" Then
            CurStrR = "AUL."
        ElseIf CurStr = "%" Then
            CurStrR = "APerCent."
        ElseIf CurStr = "(" Then
            CurStrR = "AOpenBr."
        ElseIf CurStr = ")" Then
            CurStrR = "AShutBr."
        'ElseIf CurStr = "b" Then
        '    CurStrR = "<smallB>"
        'ElseIf CurStr = "B" Then
        '    CurStrR = "<bigB>"
        'ElseIf CurStr = "s" Then
        '    CurStrR = "<smallS>"
        ElseIf CurStr = "1" Then
            CurStrR = "Aone."
        ElseIf CurStr = "2" Then
            CurStrR = "Atwo."
        ElseIf CurStr = "3" Then
            CurStrR = "Atri."
        ElseIf CurStr = "A" Then
            CurStrR = "ABGSL."
        ElseIf CurStr = "a" Then
            CurStrR = "ASGSL."
        ElseIf CurStr = "E" Then
            CurStrR = "ABGFL."
        ElseIf CurStr = "e" Then
            CurStrR = "ASGFL."
        'ElseIf CurStr = "S" Then
        '    CurStrR = "<bigS>"
        Else
            CurStrR = CurStr
            opentag = False
        End If
        If opentag Then
            If i - 1 + Len(CurStr) = Len(CurAdr) Then
                Rem NOp
            Else
                CurStrR = CurStrR + " E"
            End If
        End If
        EncodedAdr = EncodedAdr + CurStrR
        CurStrR = ""
    Next i
    fEncodeAddress4 = EncodedAdr
End Function
Function fDecodeAddress4(EncodedAdr As String)
    Dim CurStr, CurAdr, DecodedAdr As String
    Dim opentag As Boolean
    Rem CurAdr = EncodedAdr ' hin in hic vrn S' ne so, hin s'del'd space+E
    CurAdr = ""
    DecodedAdr = ""
    CurStrS = EncodedAdr
    For i = 1 To Len(EncodedAdr)
       CurStr = Mid(EncodedAdr, i, 1)
       If CurStr = " " Or CurStr = "E" Then
      
       Else
            CurAdr = CurAdr + CurStr
       End If
    Next i
   
    CurStr = Mid(CurAdr, 1, Len("<hColonDSlash3wDot>"))
    If CurStr = "AhColonDSlash3wDot." Then
        CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
        CurStr = "http://www."
        DecodedAdr = DecodedAdr + CurStr
        Else
        CurStr = Mid(CurAdr, 1, Len("<hsColonDSlash3wDot>"))
        If CurStr = "AhsColonDSlash3wDot." Then
            CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
            CurStr = "https://www."
            DecodedAdr = DecodedAdr + CurStr
        Else
            CurStr = Mid(CurAdr, 1, Len("<fColonDSlash>"))
            If CurStr = "AfColonDSlash." Then
                CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
                CurStr = "ftp://www."
                DecodedAdr = DecodedAdr + CurStr
            Else
                CurStr = Mid(CurAdr, 1, Len("<hColonDSlash>"))
                If CurStr = "AhColonDSlash." Then
                CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
                CurStr = "http://"
                DecodedAdr = DecodedAdr + CurStr
                Else
                CurStr = Mid(CurAdr, 1, Len("<hsColonDSlash>"))
                If CurStr = "AhsColonDSlash." Then
                CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
                CurStr = "https://"
                DecodedAdr = DecodedAdr + CurStr
                Else
                CurStr = Mid(CurAdr, 1, Len("<fColonDSlash>"))
                If CurStr = "AfColonDSlash." Then
                CurAdr = Mid(adr, Len(CurStr) + 1, Len(CurAdr) - Len(CurStr))
                CurStr = "ftp://"
                DecodedAdr = DecodedAdr + CurStr
                Else
                CurStr = Mid(CurAdr, 1, Len("<flColon3Slashes>"))
                If CurStr = "AflColon3Slashes." Then
                CurAdr = Mid(CurAdr, Len(CurStr) + 1, Len(adr) - Len(CurStr))
                CurStr = "file:///"
                DecodedAdr = DecodedAdr + CurStr
                End If
                End If
                End If
                End If
            End If
        End If
    End If
    CurStr = ""
    For i = 1 To Len(CurAdr)
        CurStr = Mid(CurAdr, i, 1)
        If CurStr = "A" Then
            opentag = True
            CurStrS = CurStrS + CurStr
        ElseIf CurStr = "." Then
            opentag = False
            CurStrS = CurStrS + CurStr
            If CurStrS = "ALT." Then
                CurStrS = "<"
            ElseIf CurStrS = "AGT." Then
                CurStrS = ">"
            ElseIf CurStrS = "Aequal." Then
                CurStrS = "="
            ElseIf CurStrS = "Aslash." Then
                CurStrS = "/"
            ElseIf CurStrS = "Adot." Then
                CurStrS = "."
            ElseIf CurStrS = "Aamp." Then
                CurStrS = "&"
            ElseIf CurStrS = "Aat." Then
                CurStrS = "@"
            ElseIf CurStrS = "APerCent." Then
                CurStrS = "%"
            ElseIf CurStrS = "Acolon." Then
                CurStrS = ":"
            ElseIf CurStrS = "AOpenBr." Then
                CurStrS = "("
            ElseIf CurStrS = "AShutBr." Then
                CurStrS = ")"
            'ElseIf CurStrS = "<bigS>" Then
            '    CurStrS = "S"
            'ElseIf CurStrS = "<smallS>" Then
             '   CurStrS = "s"
            'ElseIf CurStrS = "<bigB>" Then
             '   CurStrS = "B"
            'ElseIf CurStrS = "<smallB>" Then
            '   CurStrS = "b"
            ElseIf CurStrS = "Aone." Then
                CurStrS = "1"
            ElseIf CurStrS = "Atwo." Then
                CurStrS = "2"
            ElseIf CurStrS = "Atri." Then
                CurStrS = "3"
            ElseIf CurStrS = "A3wDot." Then
                CurStrS = "www."
            ElseIf CurStrS = "ABGSL." Then
                CurStrS = "A"
            ElseIf CurStrS = "ASGSL." Then
                CurStrS = "a"
            ElseIf CurStrS = "ABGFL." Then
                CurStrS = "E"
            ElseIf CurStrS = "ASGFL." Then
               CurStrS = "e"
            End If
            DecodedAdr = DecodedAdr + CurStrS
            CurStrS = ""
        Else
            If opentag Then
                CurStrS = CurStrS + CurStr
            Else
               DecodedAdr = DecodedAdr + CurStr
               CurStrS = ""
            End If
        End If
    Next i
    fDecodeAddress4 = DecodedAdr
End Function
Sub EncodeAddress()
    Dim adr, EncodedAdr As String
    adr = Selection.Formula
    Dim adr_defect As String
    adr_defect = adr
    Rem EncodedAdr = fEncodeAddress(adr_defect)
    Rem EncodedAdr = fEncodeAddress2(adr_defect)
    Rem EncodedAdr = fEncodeAddress3_Old(adr_defect) ' works if present A et E, ZB: PAGE
    Rem EncodedAdr = fEncodeAddress3(adr_defect)
    EncodedAdr = fEncodeAddress4(adr_defect)
    Selection.Formula = EncodedAdr
End Sub
Sub DecodeAddress()
    Dim adr, DecodedAdr As String
    adr = Selection.Formula
    Dim adr_defect As String
    adr_defect = adr
    Rem DecodedAdr = fDecodeAddress(adr_defect)
    Rem DecodedAdr = fDecodeAddress2(adr_defect)
    Rem DecodedAdr = fDecodeAddress3_Old(adr_defect) ' works if present A et E, ZB: PAGE
    Rem DecodedAdr = fDecodeAddress3(adr_defect)
    DecodedAdr = fDecodeAddress4(adr_defect)
    Selection.Formula = DecodedAdr
End Sub



Tables

//DataCellPM - etw

public void SetTypeN(DataCellTypeInfo typeCell, bool ValPreserveNotDefault=true)
        {
            int TypeN, PrevTypeN, LengthOfItemsSet=0, LengthOfNamesSet=0;
            double DoubleVal;
            float FloatVal;
            int IntVal;
            bool BoolVal;
            string StringVal;
            double[] DoubleArr = null;
            float[] FloatArr = null;
            int[] IntArr = null;
            bool[] BoolArr = null;
            string[] StringArr = null, names = null;
            //TDataCell BufCell = null;
            //TableCellAccessConfiguration cfg = null;
            PrevTypeN = this.GetTypeN();
            TypeN = typeCell.GetTypeN();
            switch (TypeN)
            {
                case TableConsts.DoubleTypeN:
                if (ValPreserveNotDefault)
                {
                DoubleVal = this.GetDoubleVal();
                this.cell = new TCellDouble(DoubleVal);
                }
                else
                {
                this.cell = new TCellDouble();
                }
                break;
                case TableConsts.FloatTypeN:
                if (ValPreserveNotDefault)
                {
                FloatVal = this.GetFloatVal();
                this.cell = new TCellFloat(FloatVal);
                }
                else
                {
                this.cell = new TCellFloat();
                }
                break;
                case TableConsts.IntTypeN:
                if (ValPreserveNotDefault)
                {
                IntVal = this.GetIntVal();
                this.cell = new TCellInt(IntVal);
                }
                else
                {
                this.cell = new TCellInt();
                }
                break;
                case TableConsts.BoolTypeN:
                if (ValPreserveNotDefault)
                {
                BoolVal = cell.GetBoolVal();
                this.cell = new TCellBool(BoolVal);
                }
                else
                {
                this.cell = new TCellBool();
                }
                break;
                case TableConsts.StringTypeN:
                if (ValPreserveNotDefault)
                {
                StringVal = cell.ToString();
                this.cell = new TCellString(StringVal);
                }
                else
                {
                this.cell = new TCellString();
                }
                break;
                case TableConsts.UniqueIntValKeeperTypeN:
                IntVal = this.GetIntVal();
                this.cell = new TCellUniqueNumKeeper(IntVal);
                break;
                case TableConsts.DoubleArrayTypeN:
                if (ValPreserveNotDefault)
                {
                this.cell.GetDoubleArr(ref DoubleArr, ref LengthOfItemsSet);
                cell = new TCellDoubleMemo(DoubleArr, LengthOfItemsSet);
                }
                else
                {
                this.cell = new TCellDoubleMemo();
                }
                break;
                case TableConsts.FloatArrayTypeN:
                if (ValPreserveNotDefault)
                {
                this.cell.GetFloatArr(ref FloatArr, ref LengthOfItemsSet);
                cell = new TCellFloatMemo(FloatArr, LengthOfItemsSet);
                }
                else
                {
                this.cell = new TCellFloatMemo();
                }
                break;
                case TableConsts.IntArrayTypeN:
                if (ValPreserveNotDefault)
                {
                this.cell.GetIntArr(ref IntArr, ref LengthOfItemsSet);
                cell = new TCellIntMemo(IntArr, LengthOfItemsSet);
                }
                else
                {
                this.cell = new TCellIntMemo();
                }
                break;
                case TableConsts.BoolArrayTypeN:
                if (ValPreserveNotDefault)
                {
                this.cell.GetBoolArr(ref BoolArr, ref LengthOfItemsSet);
                cell = new TCellBoolMemo(BoolArr, LengthOfItemsSet);
                }
                else
                {
                this.cell = new TCellBoolMemo();
                }
                break;
                case TableConsts.StringArrayTypeN:
                if (ValPreserveNotDefault)
                {
                this.cell.ToStringArr(ref StringArr, ref LengthOfItemsSet);
                cell = new TCellStringMemo(StringArr, LengthOfItemsSet);
                }
                else
                {
                this.cell = new TCellStringMemo();
                }
                break;
                case TableConsts.DoubleItemsFieldHeaderCellTypeN:
                if (ValPreserveNotDefault &&                 {
                //LengthOfNamesSet = 7;
                //names = new string[LengthOfNamesSet];
                //for (int i = 1; i <= LengthOfNamesSet; i++) names[i - 1] = "";
                this.cell.GetDoubleArr(ref DoubleArr, ref LengthOfItemsSet);
                cell = new TDataBaseFieldHeader_WithItems_Double(DoubleArr, LengthOfItemsSet);
                }
                else
                {
                cell = new TDataBaseFieldHeader_WithItems_Double();
                }
                break;
                case TableConsts.IntItemsFieldHeaderCellTypeN:
                if (ValPreserveNotDefault &&                 {
                //LengthOfNamesSet = 7;
                //names = new string[LengthOfNamesSet];
                //for (int i = 1; i <= LengthOfNamesSet; i++) names[i - 1] = "";
                this.cell.GetIntArr(ref IntArr, ref LengthOfItemsSet);
                cell = new TDataBaseFieldHeader_WithItems_Int(IntArr, LengthOfItemsSet);
                }
                else
                {
                cell = new TDataBaseFieldHeader_WithItems_Int();
                }
                break;
                case TableConsts.StringItemsFieldHeaderCellTypeN:
                if (ValPreserveNotDefault &&                 {
                //this.cell.ToStringArr(ref StringArr, ref LengthOfItemsSet);
                //cell = new TDataBaseFieldHeader_WithItems_String(IntArr, LengthOfItemsSet);
                this.cell.ToStringArr(ref names, ref LengthOfNamesSet);
                cell = new TDataBaseFieldHeader_WithItems_String();
                cell.SetNames(names, LengthOfNamesSet);
                }
                else
                {
                cell = new TDataBaseFieldHeader_WithItems_String();
                }
                break;
            }
        }//fn

//MyLib.cs - etw

public static bool fCellsAreEqual(DataCell cell1, DataCell cell2, int AreEqualBy_N0_Name1_ValAsDbl2Int3Bool4Str5_Full6=1, TableSize Cell1Ns=null, TableSize Cell2Ns=null)
        {
            bool verdict = false, equalItems = true, equalNames = true;
            int LengthOfNamesSet1 = 0, LengthOfNamesSet2 = 0, LengthOfItemsSet1 = 0, LengthOfItemsSet2, Type1N, Type2N;
            string[] names1 = null, names2 = null, items1 = null, items2 = null;
            double[] dArr1 = null, dArr2 = null;
            float[] fArr1 = null, fArr2 = null;
            int[] intArr1 = null, intArr2 = null;
            bool[] bArr1 = null, bArr2 = null;
            string sVal1, sVal2;
            double dVal1, dVal2;
            float fVal1, fVal2;
            int intVal1, intVal2;
            bool bVal1, bVal2;
            switch (AreEqualBy_N0_Name1_ValAsDbl2Int3Bool4Str5_Full6)
            {
                case 0:
                verdict = (Cell1Ns.QLines == Cell2Ns.QLines && Cell1Ns.QColumns == Cell2Ns.QColumns);
                break;
                case 1:
                Type1N = cell1.GetTypeN(); Type2N = cell2.GetTypeN();
                if (TableConsts.TypeNIsCorrectHeaderOfDBColWithItems(Type1N))
                {
                sVal1 = cell1.GetName1();
                }
                else
                {
                sVal1 = cell1.ToString();
                }
                if (TableConsts.TypeNIsCorrectHeaderOfDBColWithItems(Type2N))
                {
                sVal2 = cell2.GetName1();
                }
                else
                {
                sVal2 = cell2.ToString();
                }
                verdict = (sVal1.Equals(sVal2));
                break;
                case 2:
                verdict = (cell1.GetDoubleVal() == cell2.GetDoubleVal());
                break;
                case 3:
                verdict = (cell1.GetIntVal() == cell2.GetIntVal());
                break;
                case 4:
                verdict = (cell1.ToString().Equals(cell2.ToString()));
                break;
                //if (AreEqualBy_N0_Name1_ValAsDbl2Int3Bool4Str5_Full6 == 0 && Cell1Ns.QLines == Cell2Ns.QLines && Cell1Ns.QColumns == Cell2Ns.QColumns) verdict = true;
                //else if (AreEqualBy_N0_Name1_ValAsDbl2Int3Bool4Str5_Full6 == 1 && cell1.ToString().Equals(Cell2Ns.ToString())) verdict = true;
                //else if (AreEqualBy_N0_Name1_ValAsDbl2Int3Bool4Str5_Full6 == 6)
                case 6:
                Type1N = cell1.GetTypeN(); Type2N = cell2.GetTypeN();
                LengthOfItemsSet1 = cell1.GetLength(); LengthOfItemsSet2 = cell2.GetLength();
                cell1.GetNames(ref names1, ref LengthOfNamesSet1);
                cell2.GetNames(ref names2, ref LengthOfNamesSet2);
                if (Type1N == Type2N)
                {
                if (LengthOfItemsSet1 == LengthOfItemsSet2 && LengthOfNamesSet1 == LengthOfNamesSet2)
                {
                switch (Type1N)
                {
                case TableConsts.DoubleTypeN:
                dVal1 = cell1.GetDoubleVal();
                dVal2 = cell2.GetDoubleVal();
                verdict = (dVal1 == dVal2);
                //verdict = (cell1.GetDoubleVal() == cell2.GetDoubleVal());
                break;
                case TableConsts.FloatTypeN:
                fVal1 = cell1.GetFloatVal();
                fVal2 = cell2.GetFloatVal();
                verdict = (fVal1 == fVal2);
                //verdict = (cell1.GetFloatVal() == cell2.GetFloatVal());
                break;
                case TableConsts.IntTypeN:
                intVal1 = cell1.GetIntVal();
                intVal2 = cell2.GetIntVal();
                verdict = (intVal1 == intVal2);
                //verdict = (cell1.GetIntVal() == cell2.GetIntVal());
                break;
                case TableConsts.BoolTypeN:
                bVal1 = cell1.GetBoolVal();
                bVal2 = cell2.GetBoolVal();
                verdict = (bVal1 == bVal2);
                //verdict = (cell1.GetBoolVal() == cell2.GetBoolVal());
                break;
                case TableConsts.StringTypeN:
                sVal1 = cell1.ToString();
                sVal2 = cell2.ToString();
                verdict = sVal1.Equals(sVal2);
                //verdict = (cell1.ToString() == cell2.ToString());//ne writes error
                break;
                case TableConsts.UniqueIntValKeeperTypeN:
                verdict = (cell1.GetIntVal() == cell2.GetIntVal());
                break;
                case TableConsts.DoubleArrayTypeN:
                cell1.GetDoubleArr(ref dArr1, ref LengthOfItemsSet1);
                cell2.GetDoubleArr(ref dArr2, ref LengthOfItemsSet2);
                equalItems = true;
                if (LengthOfItemsSet1 == LengthOfItemsSet2)
                {
                equalItems = true;
                for (int i = 1; i <= LengthOfItemsSet1; i++)
                {
                if (cell1.GetDoubleValN(i) != cell2.GetDoubleValN(i)) equalItems = false;
                }
                }
                verdict = (LengthOfItemsSet1 == LengthOfItemsSet2) && equalItems;
                break;
                case TableConsts.FloatArrayTypeN:
                cell1.GetFloatArr(ref fArr1, ref LengthOfItemsSet1);
                cell2.GetFloatArr(ref fArr2, ref LengthOfItemsSet2);
                equalItems = true;
                if (LengthOfItemsSet1 == LengthOfItemsSet2)
                {
                equalItems = true;
                for (int i = 1; i <= LengthOfItemsSet1; i++)
                {
                if (cell1.GetFloatValN(i) != cell2.GetFloatValN(i)) equalItems = false;
                }
                }
                verdict = (LengthOfItemsSet1 == LengthOfItemsSet2) && equalItems;
                break;
                case TableConsts.IntArrayTypeN:
                cell1.GetIntArr(ref intArr1, ref LengthOfItemsSet1);
                cell2.GetIntArr(ref intArr2, ref LengthOfItemsSet2);
                equalItems = true;
                if (LengthOfItemsSet1 == LengthOfItemsSet2)
                {
                equalItems = true;
                for (int i = 1; i <= LengthOfItemsSet1; i++)
                {
                if (cell1.GetIntValN(i) != cell2.GetIntValN(i)) equalItems = false;
                }
                }
                verdict = (LengthOfItemsSet1 == LengthOfItemsSet2) && equalItems;
                break;
                case TableConsts.BoolArrayTypeN:
                cell1.GetBoolArr(ref bArr1, ref LengthOfItemsSet1);
                cell2.GetBoolArr(ref bArr2, ref LengthOfItemsSet2);
                equalItems = true;
                if (LengthOfItemsSet1 == LengthOfItemsSet2)
                {
                equalItems = true;
                for (int i = 1; i <= LengthOfItemsSet1; i++)
                {
                if (cell1.GetBoolValN(i) != cell2.GetBoolValN(i)) equalItems = false;
                }
                }
                verdict = (LengthOfItemsSet1 == LengthOfItemsSet2) && equalItems;
                break;
                case TableConsts.StringArrayTypeN:
                cell1.ToStringArr(ref items1, ref LengthOfItemsSet1);
                cell2.ToStringArr(ref items2, ref LengthOfItemsSet2);
                equalItems = true;
                if (LengthOfItemsSet1 == LengthOfItemsSet2)
                {
                equalItems = true;
                for (int i = 1; i <= LengthOfItemsSet1; i++)
                {
                if (!cell1.ToStringN(i).Equals(cell2.ToStringN(i))) equalItems = false;
                }
                }
                verdict = (LengthOfItemsSet1 == LengthOfItemsSet2) && equalItems;
                break;
                case TableConsts.DoubleItemsFieldHeaderCellTypeN:
                cell1.GetDoubleArr(ref dArr1, ref LengthOfItemsSet1);
                cell2.GetDoubleArr(ref dArr2, ref LengthOfItemsSet2);
                equalItems = true;
                if (LengthOfItemsSet1 == LengthOfItemsSet2)
                {
                equalItems = true;
                for (int i = 1; i <= LengthOfItemsSet1; i++)
                {
                if (cell1.GetDoubleValN(i) != cell2.GetDoubleValN(i)) equalItems = false;
                }
                }
                cell1.GetNames(ref names1, ref LengthOfNamesSet1);
                cell2.GetNames(ref names2, ref LengthOfNamesSet2);
                equalNames = true;
                if (LengthOfNamesSet1 == LengthOfNamesSet2)
                {
                equalNames = true;
                for (int i = 1; i <= LengthOfNamesSet1; i++)
                {
                if (!cell1.GetNameN(i).Equals(cell2.GetNameN(i))) equalNames = false;
                }
                }
                verdict = (LengthOfItemsSet1 == LengthOfItemsSet2) && equalItems && (LengthOfNamesSet1 == LengthOfNamesSet2) && equalNames;
                break;
                case TableConsts.IntItemsFieldHeaderCellTypeN:
                cell1.GetIntArr(ref intArr1, ref LengthOfItemsSet1);
                cell2.GetIntArr(ref intArr2, ref LengthOfItemsSet2);
                equalItems = true;
                if (LengthOfItemsSet1 == LengthOfItemsSet2)
                {
                equalItems = true;
                for (int i = 1; i <= LengthOfItemsSet1; i++)
                {
                if (cell1.GetIntValN(i) != cell2.GetIntValN(i)) equalItems = false;
                }
                }
                cell1.GetNames(ref names1, ref LengthOfNamesSet1);
                cell2.GetNames(ref names2, ref LengthOfNamesSet2);
                equalNames = true;
                if (LengthOfNamesSet1 == LengthOfNamesSet2)
                {
                equalNames = true;
                for (int i = 1; i <= LengthOfNamesSet1; i++)
                {
                if (!cell1.GetNameN(i).Equals(cell2.GetNameN(i))) equalNames = false;
                }
                }
                verdict = (LengthOfItemsSet1 == LengthOfItemsSet2) && equalItems && (LengthOfNamesSet1 == LengthOfNamesSet2) && equalNames;
                break;
                case TableConsts.StringItemsFieldHeaderCellTypeN:
                cell1.ToStringArr(ref items1, ref LengthOfItemsSet1);
                cell2.ToStringArr(ref items2, ref LengthOfItemsSet2);
                equalItems = true;
                if (LengthOfItemsSet1 == LengthOfItemsSet2)
                {
                equalItems = true;
                for (int i = 1; i <= LengthOfItemsSet1; i++)
                {
                if (!cell1.ToStringN(i).Equals(cell2.ToStringN(i))) equalItems = false;
                }
                }
                cell1.GetNames(ref names1, ref LengthOfNamesSet1);
                cell2.GetNames(ref names2, ref LengthOfNamesSet2);
                equalNames = true;
                if (LengthOfNamesSet1 == LengthOfNamesSet2)
                {
                equalNames = true;
                for (int i = 1; i <= LengthOfNamesSet1; i++)
                {
                if (!cell1.GetNameN(i).Equals(cell2.GetNameN(i))) equalNames = false;
                }
                }
                verdict = (LengthOfItemsSet1 == LengthOfItemsSet2) && equalItems && (LengthOfNamesSet1 == LengthOfNamesSet2) && equalNames;
                break;//case StrindgItemsDbColHeader
                }//switchTypeN
                }//if LN=LN && LI=LI
                }//if TypeN1=TypeN2
                break;
            }//switch
            return verdict;
        }//fn



//TableInfo.cs - etw


//class TableConsts - etw

public static bool TypeNIsCorrectHeaderOfDBColWithItems(int N)
        {
            bool verdict;
            verdict = (N == DoubleItemsFieldHeaderCellTypeN || N == IntItemsFieldHeaderCellTypeN || N == StringItemsFieldHeaderCellTypeN);
            return verdict;
        }

public class ConcatTablesRules
    {
        public int DirectAdd_Vert1Hor2VertTransp3Smart4;
        //If Smart
        //Simple Vrns
        public int         //If not Simple
        public int DifferenceBetweenLinesDefines_N0Name1, DifferenceBetweenColsDefines_N0Name1;
        public int DifferentLinesElaborationRule_Ignore0Add1,
                SameLinesElaborationRule_Ignore0Replace1Add2,
                DifferentColsElaborationRule_Ignore0Add1,
                SameColsElaborationRule_Ignore0Replace1Add2;
        //
        public ConcatTablesRules()
        {
            DirectAdd_Vert1Hor2VertTransp3Smart4 = 4;
            //If Smart
            //Simple Vrns
                       //If not Simple
            DifferenceBetweenLinesDefines_N0Name1 = 0;
            DifferenceBetweenColsDefines_N0Name1=1;
            //
            DifferentLinesElaborationRule_Ignore0Add1=1;
            SameLinesElaborationRule_Ignore0Replace1Add2=0;
            DifferentColsElaborationRule_Ignore0Add1=0;
            SameColsElaborationRule_Ignore0Replace1Add2 = 0;
        }
        //
        void SetDefault()
        {
                   }
        //
        void SetConcatSimpleVert()
        {
            DirectAdd_Vert1Hor2VertTransp3Smart4 = 1;
            //If Smart
            //Simple Vrns
           = 0;
            //If not Simple
            DifferenceBetweenLinesDefines_N0Name1 = 0;
            DifferenceBetweenColsDefines_N0Name1 = 0;
            //
            DifferentLinesElaborationRule_Ignore0Add1 = 1;
            SameLinesElaborationRule_Ignore0Replace1Add2 = 2;
            DifferentColsElaborationRule_Ignore0Add1 = 0;
            SameColsElaborationRule_Ignore0Replace1Add2 = 0;
        }
        void SetConcatSimpleHor()
        {
            DirectAdd_Vert1Hor2VertTransp3Smart4 = 2;
            //If Smart
            //Simple Vrns
           = 0;
            //If not Simple
            DifferenceBetweenLinesDefines_N0Name1 = 0;
            DifferenceBetweenColsDefines_N0Name1 = 0;
            //
            DifferentLinesElaborationRule_Ignore0Add1 = 0;
            SameLinesElaborationRule_Ignore0Replace1Add2 = 0;
            DifferentColsElaborationRule_Ignore0Add1 = 1;
            SameColsElaborationRule_Ignore0Replace1Add2 = 2;
        }
        void SetConcatSimpleVertTransposed()
        {

        }
        void SetConcatSimpleVertTransposed()
        {

        }
        void SetConcatSmartSimpleFullAddByNames()
        {

        }
        void         {

        }
    }//cl


table.cs - etw


public void AddTableByRules(TTable tbl2, TableInfo_ConcrRepr TblInf1Ext = null, TableInfo_ConcrRepr TblInf2Ext = null, TTablesConcatRules TablesConcatRulesExt = null, int AreEqualBy_N0_Name1_ValAsDbl2Int3Bool4Str5_Full6 = 1)
        {
            /*
             * ha 2 tables: hic et ext
             * assign arrays of fitting Ns et NewNs as -1
             * uz je line of added table assign array of fitting Ns
             * uz je col of added table assign array of fitting Ns
             * if add lines anyway:
             *   add all lines
             *   write ir hdrs, if both orig and new ha em
             *   assign array of fitting New Ns
             * if add cols anyway:
             *   add all lines
             *   write ir hdrs, if both orig and new ha em
             *   assign array of fitting New Ns
             * if add nur new lines:
             *   uz je line o'new tbl: compar, et, if S'new:
             *     add
             *     write ir hdrs, if both orig and new ha em
             *     assign array of new Ns
             * if add new cols:
             *   uz je col o'new tbl: compar, et, if S'new:
             *     add
             *     write ir hdrs, if both orig and new ha em
             *     assign array of new Ns
             *   
             * Now write Comntent Cells to ones co default vals.
             *   if lines to add anyway, cols to add anyway:
             *     for(i=1...QLinesToAddMax, j=1...QColsToAddMax) Cell(NewN(i), NewN(j))=CellToAdd(i,j)
             *   if lines to add anyway,
             *     if cols to add new, to ignore old :
             *       if col s'new:
             *          Cell(NewN(i), NewN(j))=CellToAdd(i,j)
             *        if col s'old:
             *          NOP
             *     if cols to add new, to replace old :
             *       if col s'new:
             *         Cell(NewN(i), NewN(j))=CellToAdd(i,j)
             *       if col s'old:
             *         Cell(NewN(i), N(j))=CellToAdd(i,j)
             *    if cols to ignore new, to ignore old :
             *       if col s'new:
             *          NOP
             *        if col s'old:
             *          Cell(NewN(i), N(j))=CellToAdd(i,j)
             *    if cols to ignore new, to replace old :
             *       if col s'new:
             *          NOP
             *        if col s'old:
             *          Cell(NewN(i), N(j))=CellToAdd(i,j)
             *         
             * so for other vrns uz lines
            */
            TableInfo_ConcrRepr TblInf1, TblInf2;
            TTablesConcatRules TablesConcatRules;
            DataCell Hdr1 = null, Hdr2 = null, ccell, HdrL1, HdrC1, HdrL2, HdrC2;
            bool NeedAddLines, NeedAddColumns, HeadersAreSame;
            int[] CorrespondingLines_NsOfT1ForT2 = null, CorrespondingCols_NsOfT1ForT2 = null, CorrespondingLines_NsOfT1ForT2_New = null, CorrespondingCols_NsOfT1ForT2_New = null;
            int QLinesPrev, QColsPrev, QLinesToAddMax, QColsToAddMax;
            TblInf1 = this.Choose_TableInfo_StrSize_ByExtAndInner(TblInf1Ext);
            TblInf2 = tbl2.Choose_TableInfo_StrSize_ByExtAndInner(TblInf2Ext);
            if (TablesConcatRulesExt != null) TablesConcatRules = TablesConcatRulesExt; else TablesConcatRules = new TTablesConcatRules();
            NeedAddLines = (TablesConcatRules.DirectAdd_Vert1Hor2VertTransp3Smart4 == 1 || TablesConcatRules.LinesElabRules_Add0DependsOnCompar1 == 0 || (TablesConcatRules.LinesElaborationRule_Add0DependsOnCompar1 == 1 && TablesConcatRules.LinesDifferent_Ignore0Add1 == 1));
            NeedAddColumns = (TablesConcatRules.DirectAdd_Vert1Hor2VertTransp3Smart4 == 2 || TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 0 || (TablesConcatRules.ColsElaborationRule_Add0DependsOnCompar1 == 1 && TablesConcatRules.ColsDifferent_Ignore0Add1 == 1));
            QLinesPrev = TblInf1.GetQLines();
            QColsPrev = TblInf1.GetQColumns();
            QLinesToAddMax = TblInf2.GetQLines();
            QColsToAddMax = TblInf2.GetQColumns();
            //Fit'n Ns ef add rows
            CorrespondingLines_NsOfT1ForT2 = new int[QLinesToAddMax];
            for (int i = 1; i <= QLinesToAddMax; i++) CorrespondingLines_NsOfT1ForT2[i - 1] = -1;
            for (int i = 1; i <= QLinesToAddMax; i++)
            {
                CorrespondingLines_NsOfT1ForT2[i - 1] = -1;
                for (int j = 1; j <= QLinesPrev; j++)
                {
                Hdr1 = (DataCell)this.ColOfLineHeader[j - 1].Clone();
                Hdr2 = (DataCell)tbl2.GetCell_ColOfLineHeader(i).Clone();
                HeadersAreSame = MyLib.fCellsAreEqual(Hdr1, Hdr2, AreEqualBy_N0_Name1_ValAsDbl2Int3Bool4Str5_Full6, new TableSize(QLinesPrev, QColsPrev), new TableSize(QLinesToAddMax, QColsToAddMax));
                if (HeadersAreSame)
                {
                CorrespondingLines_NsOfT1ForT2[i - 1] = j;
                }
                }//for
            }//for
            CorrespondingCols_NsOfT1ForT2 = new int[QColsToAddMax];
            for (int i = 1; i <= QColsToAddMax; i++) CorrespondingCols_NsOfT1ForT2[i - 1] = -1;
            for (int i = 1; i <= QColsToAddMax; i++)
            {
                CorrespondingCols_NsOfT1ForT2[i - 1] = -1;
                for (int j = 1; j <= QColsPrev; j++)
                {
                Hdr1 = (DataCell)this.ColOfLineHeader[j - 1].Clone();
                Hdr2 = (DataCell)tbl2.GetCell_ColOfLineHeader(i).Clone();
                HeadersAreSame = MyLib.fCellsAreEqual(Hdr1, Hdr2, AreEqualBy_N0_Name1_ValAsDbl2Int3Bool4Str5_Full6, new TableSize(TblInf1.GetQLines(), TblInf1.GetQColumns()), new TableSize(TblInf2.GetQLines(), TblInf2.GetQColumns()));
                if (HeadersAreSame)
                {
                CorrespondingCols_NsOfT1ForT2[i - 1] = j;
                }
                }//for
            }//for
            //Add rows
            //Lines
            if (TablesConcatRules.DirectAdd_Vert1Hor2VertTransp3Smart4 == 1 || TablesConcatRules.LinesElabRules_Add0DependsOnCompar1 == 0)
            {
                for (int i = 1; i <= QLinesToAddMax; i++)
                {
                this.AddLine_TypesByExisting();
                TblInf1.AddLine();
                this.ColOfLineHeader[QLinesPrev - 1] = Hdr2;
                CorrespondingLines_NsOfT1ForT2_New[i - 1] = QLinesPrev+i;
                }
            }
            else if (TablesConcatRules.LinesElabRules_Add0DependsOnCompar1 == 1 && TablesConcatRules.LinesDifferent_Ignore0Add1 == 1)
            {
                //CorrespondingLines_NsOfT1ForT2_New = new int[QLinesToAddMax];
                for (int i = 1; i <= QLinesToAddMax; i++)
                {
                if (CorrespondingLines_NsOfT1ForT2[i - 1] == -1)
                {
                Hdr2 = (DataCell)tbl2.GetCell_ColOfLineHeader(i).Clone();
                this.AddLine_TypesByExisting();
                TblInf1.AddLine();
                this.ColOfLineHeader[QLinesPrev - 1] = Hdr2;
                CorrespondingLines_NsOfT1ForT2_New[i - 1] = TblInf1.GetQLines();
                }
                else CorrespondingLines_NsOfT1ForT2_New[i - 1] = CorrespondingLines_NsOfT1ForT2[i - 1];
                }//for
            }//else no need to add lines, so NOp
            //Cols
            if (TablesConcatRules.DirectAdd_Vert1Hor2VertTransp3Smart4 == 2 || TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 0)
            {
                for (int i = 1; i <= QColsToAddMax; i++)
                {
                this.AddColumn_TypesByExisting();
                TblInf1.AddColumn();
                this.LineOfColHeader[QColsPrev - 1] = Hdr2;
                CorrespondingCols_NsOfT1ForT2_New[i - 1] = TblInf1.GetQColumns();
                }
            }
            else if (TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 1 && TablesConcatRules.ColsDifferent_Ignore0Add1 == 1)
            {
                //CorrespondingCols_NsOfT1ForT2_New = new int[QColsToAddMax];
                for (int i = 1; i <= QColsToAddMax; i++)
                {
                if (CorrespondingCols_NsOfT1ForT2[i - 1] == -1)
                {
                Hdr2 = (DataCell)tbl2.GetCell_LineOfColHeader(i).Clone();
                this.AddColumn_TypesByExisting();
                TblInf1.AddColumn();
                this.LineOfColHeader[QLinesPrev - 1] = Hdr2;
                CorrespondingCols_NsOfT1ForT2_New[i - 1] = TblInf1.GetQColumns();
                }
                //else CorrespondingCols_NsOfT1ForT2_New[i - 1] = CorrespondingCols_NsOfT1ForT2[i - 1];
                }//for
            }//else no need to add col, so NOp
            //CotentCells
            for (int i = 1; i <= QLinesToAddMax; i++)
            {
                for (int j = 1; j <= QColsToAddMax; j++)
                {
                ccell=tbl2.GetCell(i, j, TblInf2);
                //
                if (TablesConcatRules.DirectAdd_Vert1Hor2VertTransp3Smart4 == 1 || TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 0)
                {
                if (TablesConcatRules.DirectAdd_Vert1Hor2VertTransp3Smart4 == 2 || TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 0)
                {
                //lines add anyway, cols add anyway
                //cells to unique rows
                this.AssignCell(ccell,  CorrespondingLines_NsOfT1ForT2_New[i - 1],  CorrespondingCols_NsOfT1ForT2_New[j - 1]);
                }
                else if (TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 1 && TablesConcatRules.ColsDifferent_Ignore0Add1 == 0 && TablesConcatRules.ColsSame_Ignore0Replace1 == 0)
                {
                //lines add anyway, cols new ignore, old ignore
                //cols are not added, in new lines - cells s':
                //- of old cols s'ne old, so ne ignored,
                //- of new s'new, so ignored
                if(CorrespondingCols_NsOfT1ForT2[j-1]!=-1){ //old
                this.AssignCell(ccell,  CorrespondingLines_NsOfT1ForT2_New[i - 1],  CorrespondingCols_NsOfT1ForT2_New[j - 1]);
                }//else NOp;
                }
                else if (TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 1 && TablesConcatRules.ColsDifferent_Ignore0Add1 == 0 && TablesConcatRules.ColsSame_Ignore0Replace1 == 1)
                {
                //lines add anyway, cols new ignored, old - replaced
                //in diff lines old cols s' ne old, so ne replaced, ma S'iid to replace in new lines, so write/
                //new cols s'ignored=> ne add'd, ne exist
                if(CorrespondingCols_NsOfT1ForT2[j-1]!=-1){ //old
                this.AssignCell(ccell,  CorrespondingLines_NsOfT1ForT2_New[i - 1],  CorrespondingCols_NsOfT1ForT2[j - 1]);
                }//else NOp;
                }
                else if (TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 1 && TablesConcatRules.ColsDifferent_Ignore0Add1 == 1 && TablesConcatRules.ColsSame_Ignore0Replace1 == 0)
                {
                //lines add anyway, cols new added, old - ignored
                //in new lines cells of old cols s'ne old==> ne ignored
                //so new cols to write to N, fit'n to new cols, and old - on Ns, fit'n to old
                if(CorrespondingCols_NsOfT1ForT2_New[j-1]!=-1){ //new
                this.AssignCell(ccell,  CorrespondingLines_NsOfT1ForT2_New[i - 1],  CorrespondingCols_NsOfT1ForT2_New[j - 1]);
                }else{
                this.AssignCell(ccell,  CorrespondingLines_NsOfT1ForT2_New[i - 1],  CorrespondingCols_NsOfT1ForT2[j - 1]);
                }
                }
                else if (TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 1 && TablesConcatRules.ColsDifferent_Ignore0Add1 == 1 && TablesConcatRules.ColsSame_Ignore0Replace1 == 1)
                {
                //lines add anyway, cols new added, old - ignored
                //in new lines cells of old cols s'ne old, so - written
                if(CorrespondingCols_NsOfT1ForT2_New[j-1]!=-1){ //new
                this.AssignCell(ccell,  CorrespondingLines_NsOfT1ForT2_New[i - 1],  CorrespondingCols_NsOfT1ForT2_New[j - 1]);
                }else{
                this.AssignCell(ccell,  CorrespondingLines_NsOfT1ForT2_New[i - 1],  CorrespondingCols_NsOfT1ForT2[j - 1]);
                }
                }
                }
                else if (TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 1 && TablesConcatRules.LinesDifferent_Ignore0Add1 == 0 && TablesConcatRules.LinesSame_Ignore0Replace1 == 0)
                {
                if (TablesConcatRules.DirectAdd_Vert1Hor2VertTransp3Smart4 == 2 || TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 0)
                {
                //Lines: new - ignored, same - ignored
                //cols: add anyway
                //in new cols cells of old lines s'ne old, so  ne ignored. No new cols, ob Z s'ignor'd et ne wa add'd
                if(CorrespondingLines_NsOfT1ForT2[j-1]!=-1){ //old lines
                this.AssignCell(ccell,  CorrespondingLines_NsOfT1ForT2[i - 1],  CorrespondingCols_NsOfT1ForT2_New[j - 1]);
                }
                }
                else if (TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 1 && TablesConcatRules.ColsDifferent_Ignore0Add1 == 0 && TablesConcatRules.ColsSame_Ignore0Replace1 == 0)
                {
                //Lines: new - ignored, same - ignored
                //Cols:  new - ignored, same - ignored
                //no new rows added. Same rows ignored
                //NOp;
                }
                else if (TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 1 && TablesConcatRules.ColsDifferent_Ignore0Add1 == 0 && TablesConcatRules.ColsSame_Ignore0Replace1 == 1)
                {
                //Lines: new - ignored, same - ignored
                //Cols:  new - ignored, same - replaced
                //no new rows added.
                //uz old rows conds uz lines et cols contradict?- bad cond - ignore
                //NOp;
                }
                else if (TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 1 && TablesConcatRules.ColsDifferent_Ignore0Add1 == 1 && TablesConcatRules.ColsSame_Ignore0Replace1 == 0)
                {
                //Lines: new - ignored, same - ignored
                //Cols:  new - add'd, same - ignored
                //some cols s'added. uz hic cols same lines s'ne same=> ne ignor'd=>written
                //so s'written cells of new cols and old lines
                if(CorrespondingCols_NsOfT1ForT2_New[j - 1]!=1 && CorrespondingLines_NsOfT1ForT2[i-1]!=1){
                this.AssignCell(ccell,  CorrespondingLines_NsOfT1ForT2[i - 1],  CorrespondingCols_NsOfT1ForT2_New[j - 1]);
                }
                }
                else if (TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 1 && TablesConcatRules.ColsDifferent_Ignore0Add1 == 1 && TablesConcatRules.ColsSame_Ignore0Replace1 == 1)
                {
                //Lines: new - ignored, same - ignored
                //Cols:  new - add'd, same - to replace
                //so write cells of new cols, if line s' old or new.
                //if cell s'of old col - Contradict
                if(CorrespondingCols_NsOfT1ForT2_New[j - 1]!=1){
                if(CorrespondingLines_NsOfT1ForT2[j - 1]!=1){
                this.AssignCell(ccell,  CorrespondingLines_NsOfT1ForT2[i - 1], CorrespondingCols_NsOfT1ForT2_New[j - 1]);
                }else if(CorrespondingLines_NsOfT1ForT2_New[j - 1]!=1){
                this.AssignCell(ccell,  CorrespondingLines_NsOfT1ForT2_New[i - 1], CorrespondingCols_NsOfT1ForT2_New[j - 1]);
                }
                }
                }
                }
                else if (TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 1 && TablesConcatRules.LinesDifferent_Ignore0Add1 == 0 && TablesConcatRules.LinesSame_Ignore0Replace1 == 1)
                {
                if (TablesConcatRules.DirectAdd_Vert1Hor2VertTransp3Smart4 == 2 || TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 0)
                {
                //Lines new ignored, old replaced
                //Cols added anyway
                //so added cols and write cels of old lines
                if(CorrespondingCols_NsOfT1ForT2[j - 1]!=1 && CorrespondingLines_NsOfT1ForT2_New[i-1]!=1){
                this.AssignCell(ccell,  CorrespondingLines_NsOfT1ForT2[i - 1],  CorrespondingCols_NsOfT1ForT2_New[j - 1]);
                }
                }
                else if (TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 1 && TablesConcatRules.ColsDifferent_Ignore0Add1 == 0 && TablesConcatRules.ColsSame_Ignore0Replace1 == 0)
                {
                //Lines new ignored, old replaced
                //Cols new and old ignored
                //so cells for old lines - conds W-contradict
                //NOp;
                }
                else if (TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 1 && TablesConcatRules.ColsDifferent_Ignore0Add1 == 0 && TablesConcatRules.ColsSame_Ignore0Replace1 == 1)
                {
                //Lines new ignored, old replaced
                //Cols new ignored, old replaced
                //replace nur old cells
                if(CorrespondingCols_NsOfT1ForT2[j - 1]!=1 && CorrespondingLines_NsOfT1ForT2[i-1]!=1){
                this.AssignCell(ccell,  CorrespondingLines_NsOfT1ForT2[i - 1],  CorrespondingCols_NsOfT1ForT2[j - 1]);
                }
                }
                else if (TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 1 && TablesConcatRules.ColsDifferent_Ignore0Add1 == 1 && TablesConcatRules.ColsSame_Ignore0Replace1 == 0)
                {
                //Lines new ignored, old replaced
                //Cols add new, old ignore
                if(CorrespondingCols_NsOfT1ForT2_New[j - 1]!=1 && CorrespondingLines_NsOfT1ForT2[j - 1]!=1){
                this.AssignCell(ccell,  CorrespondingLines_NsOfT1ForT2[i - 1],  CorrespondingCols_NsOfT1ForT2_New[j - 1]);
                }
                }
                else if (TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 1 && TablesConcatRules.ColsDifferent_Ignore0Add1 == 1 && TablesConcatRules.ColsSame_Ignore0Replace1 == 1)
                {
                //Lines new ignored, old replaced
                //Cols new add, old replace
                if(CorrespondingLines_NsOfT1ForT2[j - 1]!=1){
                if(CorrespondingCols_NsOfT1ForT2_New[j - 1]!=1){
                this.AssignCell(ccell,  CorrespondingLines_NsOfT1ForT2[i - 1],  CorrespondingCols_NsOfT1ForT2_New[j - 1]);
                }else if(CorrespondingCols_NsOfT1ForT2[j - 1]!=1){
                this.AssignCell(ccell,  CorrespondingLines_NsOfT1ForT2[i - 1],  CorrespondingCols_NsOfT1ForT2[j - 1]);
                }
                }
                }
                }
                else if (TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 1 && TablesConcatRules.LinesDifferent_Ignore0Add1 == 1 && TablesConcatRules.LinesSame_Ignore0Replace1 == 0)
                {
                if (TablesConcatRules.DirectAdd_Vert1Hor2VertTransp3Smart4 == 2 || TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 0)
                {
                //Lines new add, old ignore
                //Cols add anyway
                //cells of old lines in new lines ne s'old=>ne ignored
                //iid to ignore, write, ma correct
                if(CorrespondingCols_NsOfT1ForT2_New[j - 1]!=-1){
                if(CorrespondingLines_NsOfT1ForT2_New[j - 1]!=-1){
                this.AssignCell(ccell,  CorrespondingLines_NsOfT1ForT2_New[i - 1],  CorrespondingCols_NsOfT1ForT2_New[j - 1]);
                }else if(CorrespondingLines_NsOfT1ForT2[j - 1]!=1){
                this.AssignCell(ccell,  CorrespondingLines_NsOfT1ForT2[i - 1],  CorrespondingCols_NsOfT1ForT2_New[j - 1]);
                }
                }
                }
                else if (TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 1 && TablesConcatRules.ColsDifferent_Ignore0Add1 == 0 && TablesConcatRules.ColsSame_Ignore0Replace1 == 0)
                {
                //Lines new add, old ignore
                //Cols add anyway
                //cells of old lines in new lines ne s'old=>ne ignored
                //iid to ignore, write, ma correct
                if(CorrespondingCols_NsOfT1ForT2_New[j - 1]!=-1){
                if(CorrespondingLines_NsOfT1ForT2_New[j - 1]!=-1){
                this.AssignCell(ccell,  CorrespondingLines_NsOfT1ForT2_New[i - 1],  CorrespondingCols_NsOfT1ForT2_New[j - 1]);
                }else if(CorrespondingLines_NsOfT1ForT2[j - 1]!=1){
                this.AssignCell(ccell,  CorrespondingLines_NsOfT1ForT2[i - 1],  CorrespondingCols_NsOfT1ForT2_New[j - 1]);
                }
                }
                }
                else if (TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 1 && TablesConcatRules.ColsDifferent_Ignore0Add1 == 0 && TablesConcatRules.ColsSame_Ignore0Replace1 == 1)
                {
                //Lines new add, old ignore
                //Cols new ignore, old replace
                //
                if(CorrespondingLines_NsOfT1ForT2_New[j - 1]!=-1){
                if(CorrespondingCols_NsOfT1ForT2_New[j - 1]!=-1){
                this.AssignCell(ccell,  CorrespondingLines_NsOfT1ForT2_New[i - 1],  CorrespondingCols_NsOfT1ForT2_New[j - 1]);
                }else if(CorrespondingCols_NsOfT1ForT2[j - 1]!=1){
                this.AssignCell(ccell,  CorrespondingLines_NsOfT1ForT2_New[i - 1],  CorrespondingCols_NsOfT1ForT2[j - 1]);
                }
                }
                }
                else if (TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 1 && TablesConcatRules.ColsDifferent_Ignore0Add1 == 1 && TablesConcatRules.ColsSame_Ignore0Replace1 == 0)
                {
                //Lines new add, old ignore
                //Cols new add, old ignore
                //for added lines cells of old cols s'ne old, for added cols cells of old lines s'ne old
                if(CorrespondingLines_NsOfT1ForT2_New[j - 1]!=-1){
                if(CorrespondingCols_NsOfT1ForT2_New[j - 1]!=-1){
                this.AssignCell(ccell,  CorrespondingLines_NsOfT1ForT2_New[i - 1],  CorrespondingCols_NsOfT1ForT2_New[j - 1]);
                }else if(CorrespondingCols_NsOfT1ForT2[j - 1]!=1){
                this.AssignCell(ccell,  CorrespondingLines_NsOfT1ForT2_New[i - 1],  CorrespondingCols_NsOfT1ForT2[j - 1]);
                }
                }
                if(CorrespondingCols_NsOfT1ForT2_New[j - 1]!=-1){
                if(CorrespondingLines_NsOfT1ForT2_New[j - 1]!=-1){
                this.AssignCell(ccell,  CorrespondingLines_NsOfT1ForT2_New[i - 1],  CorrespondingCols_NsOfT1ForT2_New[j - 1]);
                }else if(CorrespondingLines_NsOfT1ForT2[j - 1]!=1){
                this.AssignCell(ccell,  CorrespondingLines_NsOfT1ForT2[i - 1],  CorrespondingCols_NsOfT1ForT2_New[j - 1]);
                }
                }
                }
                else if (TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 1 && TablesConcatRules.ColsDifferent_Ignore0Add1 == 1 && TablesConcatRules.ColsSame_Ignore0Replace1 == 1)
                {
                //Lines new add, old ignore
                //Cols new add, old replace
                //uz old both lines and cols conds contadict=> NOp
                //if one row new, other written
                if(CorrespondingLines_NsOfT1ForT2_New[j - 1]!=-1){
                if(CorrespondingCols_NsOfT1ForT2_New[j - 1]!=-1){
                this.AssignCell(ccell,  CorrespondingLines_NsOfT1ForT2_New[i - 1],  CorrespondingCols_NsOfT1ForT2_New[j - 1]);
                }else if(CorrespondingCols_NsOfT1ForT2[j - 1]!=1){
                this.AssignCell(ccell,  CorrespondingLines_NsOfT1ForT2_New[i - 1],  CorrespondingCols_NsOfT1ForT2[j - 1]);
                }
                }
                if(CorrespondingCols_NsOfT1ForT2_New[j - 1]!=-1){
                if(CorrespondingLines_NsOfT1ForT2_New[j - 1]!=-1){
                this.AssignCell(ccell,  CorrespondingLines_NsOfT1ForT2_New[i - 1],  CorrespondingCols_NsOfT1ForT2_New[j - 1]);
                }else if(CorrespondingLines_NsOfT1ForT2[j - 1]!=1){
                this.AssignCell(ccell,  CorrespondingLines_NsOfT1ForT2[i - 1],  CorrespondingCols_NsOfT1ForT2_New[j - 1]);
                }
                }
                }
                }
                else if (TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 1 && TablesConcatRules.LinesDifferent_Ignore0Add1 == 1 && TablesConcatRules.LinesSame_Ignore0Replace1 == 1)
                {
                if (TablesConcatRules.DirectAdd_Vert1Hor2VertTransp3Smart4 == 2 || TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 0)
                {
                //Lines new add old replace
                //Cols add anyway
                if(CorrespondingCols_NsOfT1ForT2_New[j - 1]!=-1){
                if(CorrespondingLines_NsOfT1ForT2_New[j - 1]!=-1){
                this.AssignCell(ccell,  CorrespondingLines_NsOfT1ForT2_New[i - 1],  CorrespondingCols_NsOfT1ForT2_New[j - 1]);
                }else if(CorrespondingLines_NsOfT1ForT2[j - 1]!=1){
                this.AssignCell(ccell,  CorrespondingLines_NsOfT1ForT2[i - 1],  CorrespondingCols_NsOfT1ForT2_New[j - 1]);
                }
                }
                }
                else if (TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 1 && TablesConcatRules.ColsDifferent_Ignore0Add1 == 0 && TablesConcatRules.ColsSame_Ignore0Replace1 == 0)
                {
                //Lines new add old replace
                //Cols
                }
                else if (TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 1 && TablesConcatRules.ColsDifferent_Ignore0Add1 == 0 && TablesConcatRules.ColsSame_Ignore0Replace1 == 1)
                {

                }
                else if (TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 1 && TablesConcatRules.ColsDifferent_Ignore0Add1 == 1 && TablesConcatRules.ColsSame_Ignore0Replace1 == 0)
                {

                }
                else if (TablesConcatRules.ColsElabRules_Add0DependsOnCompar1 == 1 && TablesConcatRules.ColsDifferent_Ignore0Add1 == 1 && TablesConcatRules.ColsSame_Ignore0Replace1 == 1)
                {

                }
                }
                }
            }
        }//fn









public TTable ReadFromGrid(DataGridView grid, TableHeaderRowsExistance GridHdrRowsUsedExt, TableStructure TblStr, TableSize QRowsNamesToDisplayExt, TableReadingTypesParams ContentTypesParamsExt, TableReadingTypesParams CoLHTypesParamsExt = null, TableReadingTypesParams LoCHTypesParamsExt = null, bool ToWrite = true)
        {
            DataGridViewCell GridCell = null;
            DataCell TableCell = null;
            int QLines, QColumns, gLineN = 0, gColN = 0, ErstGridContentLineN, ErstGridContentColN;
            TTable tbl = new TTable();
            CellsNsToDisplay NsToDispl = null;
            //GridParamsGiven GridParams = null;
            GridParamsCalculated GridParams = null;
            TableSize QRowsNamesToDisplay = null;
            TableHeaderRowsExistance GridHdrRowsUsed;
            TableReadingTypesParams ContentTypesParams = null, CoLHTypesParams = null, LoCHTypesParams = null;
            bool CorrectCorner = true;
            string TableName = "", LinesGeneralName = "", ColumnsGeneralName = "";
            //DataCellRowCoHeader[] rows = null;
            if (ContentTypesParamsExt != null) ContentTypesParams = ContentTypesParamsExt; else ContentTypesParams = new TableReadingTypesParams();
            ContentTypesParams.StrOnly();
            if (LoCHTypesParamsExt != null) LoCHTypesParams = LoCHTypesParamsExt; else LoCHTypesParams = new TableReadingTypesParams();
            LoCHTypesParams.StrOnly();
            if (CoLHTypesParamsExt != null) CoLHTypesParams = CoLHTypesParamsExt; else CoLHTypesParams = new TableReadingTypesParams();
            CoLHTypesParams.StrOnly();
            TableInfo TblInf = new TableInfo();
            if (GridHdrRowsUsedExt != null) GridHdrRowsUsed = GridHdrRowsUsedExt; else GridHdrRowsUsed = new TableHeaderRowsExistance();
            if (QRowsNamesToDisplayExt != null) QRowsNamesToDisplay = QRowsNamesToDisplayExt; else QRowsNamesToDisplay = new TableSize();
            if (TblStr != null) TblInf.Str = TblStr;
            else
            {
                TblInf.Str = new TableStructure(); //LC_not_CL remains as by default
                TblInf.Str.ColOfLineHeaderExists = GridHdrRowsUsedExt.ColOfLineHeaderExists;
                TblInf.Str.LineOfColHeaderExists = GridHdrRowsUsedExt.LineOfColHeaderExists;
            }
            //if (TblInf.RowsQuantities == null) TblInf.RowsQuantities = new TableSize();
            QLines = grid.Rows.Count - (QRowsNamesToDisplay.QLines - MyLib.BoolToInt(GridHdrRowsUsed.LineOfColHeaderExists));
            QColumns = grid.Columns.Count - (QRowsNamesToDisplay.QColumns - MyLib.BoolToInt(GridHdrRowsUsed.ColOfLineHeaderExists));
            if (TblInf.RowsQuantities == null) TblInf.RowsQuantities = new TableSize(QLines, QColumns);
            //GridParamsCalculated(TableHeaderRowsExistance GridHdrInUseExt, TableHeaderRowsExistance TblHdrToShowExt, TableSize QTableRowsAllExt, TableSize QTableRowsToShowExt, TableSize ErstTableRowsNsToShowExt, TableSize QRowsNamesToShowExt)
            NsToDispl = new CellsNsToDisplay(TblInf.RowsQuantities);
            //GridHdrInUseExt - param
            GridParams = new GridParamsCalculated(GridHdrRowsUsedExt, NsToDispl, TblInf);
            //Content
            if (TblInf.GetIf_LC_Not_CL())
            {
                tbl.ContentCell = new DataCell[QLines][];
                for (int tLineN = 1; tLineN <= QLines; tLineN++)
                {
                tbl.ContentCell[tLineN - 1] = new DataCell[QColumns];
                for (int tColN = 1; tColN <= QColumns; tColN++)
                {
                tbl.ContentCell[tLineN - 1][tColN - 1] = new DataCell();
                //gLineN = QRowsNamesToDisplay.QLines - MyLib.BoolToInt(GridHdrRowsUsed.LineOfColHeaderExists) + i - 1;
                //gColN = QRowsNamesToDisplay.QColumns - MyLib.BoolToInt(GridHdrRowsUsed.ColOfLineHeaderExists) + j - 1;
                gLineN = GridParams.Calc_GridLineIndex_ByTableLineNatN(tLineN);
                gColN = GridParams.Calc_GridColIndex_ByTableColNatN(tColN);
                if (gLineN == -1 && gColN == -1) GridCell = grid.TopLeftHeaderCell;
                else if (gLineN > -1 && gColN == -1) GridCell = grid.Rows[gLineN].HeaderCell;
                else if (gLineN == -1 && gColN > -1) GridCell = grid.Columns[gColN].HeaderCell;
                else GridCell = grid.Rows[gLineN].Cells[gColN];
                tbl.ContentCell[tLineN - 1][tColN - 1] = DataCellOfGridContentCell(GridCell, ContentTypesParams);
                }
                }
            }
            else
            {
                tbl.ContentCell = new DataCell[QColumns][];
                for (int tColN = 1; tColN <= QColumns; tColN++)
                {
                tbl.ContentCell[tColN - 1] = new DataCell[QLines];
                for (int tLineN = 1; tLineN <= QLines; tLineN++)
                {
                tbl.ContentCell[tLineN - 1][tColN - 1] = new DataCell();
                gLineN = GridParams.Calc_GridLineIndex_ByTableLineNatN(tLineN);
                gColN = GridParams.Calc_GridColIndex_ByTableColNatN(tColN);
                if (gLineN == -1 && gColN == -1) GridCell = grid.TopLeftHeaderCell;
                else if (gLineN > -1 && gColN == -1) GridCell = grid.Rows[gLineN].HeaderCell;
                else if (gLineN == -1 && gColN > -1) GridCell = grid.Columns[gColN].HeaderCell;
                else GridCell = grid.Rows[gLineN].Cells[gColN];
                tbl.ContentCell[tColN - 1][tLineN - 1] = DataCellOfGridContentCell(GridCell, ContentTypesParams);
                }
                }
            }
            //LineOfColHeader
            if (TblInf.GetIf_LoCHExists())
            {
                //if (this.LineOfColHeader == null) this.LineOfColHeader = new DataCell[QColumns];
                //in C++ if !=NULL delete[]
                tbl.LineOfColHeader = new DataCell[QColumns]; //even if exists, ob mab exist'n table hat atal cuan o'Cols, or Z s'null, or Z hat irr vals
                if (GridHdrRowsUsedExt.LineOfColHeaderExists)
                {
                for (int tColN = 1; tColN <= QColumns; tColN++)
                {
                tbl.LineOfColHeader[tColN - 1] = new DataCell();
                //gLineN = QRowsNamesToDisplay.QLines - MyLib.BoolToInt(GridHdrRowsUsed.LineOfColHeaderExists) + i - 1;
                //gColN = QRowsNamesToDisplay.QColumns - MyLib.BoolToInt(GridHdrRowsUsed.ColOfLineHeaderExists) + j - 1;
                //gColN = QRowsNamesToDisplay.QColumns - MyLib.BoolToInt(GridHdrRowsUsed.ColOfLineHeaderExists) + i - 1;
                gColN = GridParams.Calc_GridColIndex_ByTableColNatN(tColN);
                tbl.LineOfColHeader[tColN -                 for (int j = 2; j <= QRowsNamesToDisplay.QLines; j++)
                {
                //this.LineOfColHeader[tColN - 1].SetByValStringN((grid.Rows[2 - 2].Cells[gColN].Value.ToString()), j);
                if (grid.Rows[j - 2].Cells[gColN].Value != null && grid.Rows[j - 2].Cells[gColN].Value.ToString() != "") tbl.LineOfColHeader[tColN - 1].SetByValStringN((grid.Rows[2 - 2].Cells[gColN].Value.ToString()), j);
                }
                }
                }
                else
                {
                for (int tColN = 1; tColN <= QColumns; tColN++)
                {
                //gLineN = QRowsNamesToDisplay.QLines - MyLib.BoolToInt(GridHdrRowsUsed.LineOfColHeaderExists) + i - 1;
                //gColN = QRowsNamesToDisplay.QColumns - MyLib.BoolToInt(GridHdrRowsUsed.ColOfLineHeaderExists) + j - 1;
                //gColN = QRowsNamesToDisplay.QColumns - MyLib.BoolToInt(GridHdrRowsUsed.ColOfLineHeaderExists) + i - 1;
                gColN = GridParams.Calc_GridColIndex_ByTableColNatN(tColN);
                tbl.LineOfColHeader[tColN -                 for (int j = 2; j <= QRowsNamesToDisplay.QLines; j++)
                {
                //this.LineOfColHeader[tColN - 1].SetByValStringN((grid.Rows[2 - 2].Cells[gColN].Value.ToString()), j);
                if (grid.Rows[j - 1].Cells[gColN].Value != null && grid.Rows[j - 1].Cells[gColN].Value.ToString() != "") tbl.LineOfColHeader[tColN - 1].SetByValStringN((grid.Rows[2 - 2].Cells[gColN].Value.ToString()), j);
                }
                }
                }
            }
            //ColOfLineHeader
            if (TblInf.GetIf_CoLHExists())
            {
                //if (this.LineOfColHeader == null) this.LineOfColHeader = new DataCell[QColumns];
                //in C++ if !=NULL delete[]
                tbl.ColOfLineHeader = new DataCell[QLines]; //even if exists, ob mab exist'n table hat atal cuan o'Cols, or Z s'null, or Z hat irr vals
                if (GridHdrRowsUsedExt.ColOfLineHeaderExists)
                {
                for (int tLineN = 1; tLineN <= QLines; tLineN++)
                {
                tbl.ColOfLineHeader[tLineN - 1] = new DataCell();
                //gLineN = QRowsNamesToDisplay.QLines - MyLib.BoolToInt(GridHdrRowsUsed.ColOfLineHeaderExists) + i - 1;
                //gColN = QRowsNamesToDisplay.QColumns - MyLib.BoolToInt(GridHdrRowsUsed.ColOfLineHeaderExists) + j - 1;
                //gColN = QRowsNamesToDisplay.QColumns - MyLib.BoolToInt(GridHdrRowsUsed.ColOfLineHeaderExists) + i - 1;
                gLineN = GridParams.Calc_GridLineIndex_ByTableLineNatN(tLineN);
                tbl.ColOfLineHeader[tLineN -                 for (int j = 2; j <= QRowsNamesToDisplay.QLines; j++)
                {
                //this.ColOfLineHeader[tColN - 1].SetByValStringN((grid.Rows[2 - 2].Cells[gColN].Value.ToString()), j);
                if (grid.Rows[gLineN].Cells[j - 2].Value != null && grid.Rows[gLineN].Cells[j - 2].Value.ToString() != "") tbl.ColOfLineHeader[tLineN - 1].SetByValStringN((grid.Rows[2 - 2].Cells[gColN].Value.ToString()), j);
                }
                }
                }
                else
                {
                for (int tLineN = 1; tLineN <= QLines; tLineN++)
                {
                //gLineN = QRowsNamesToDisplay.QLines - MyLib.BoolToInt(GridHdrRowsUsed.ColOfLineHeaderExists) + i - 1;
                //gColN = QRowsNamesToDisplay.QColumns - MyLib.BoolToInt(GridHdrRowsUsed.ColOfLineHeaderExists) + j - 1;
                //gColN = QRowsNamesToDisplay.QColumns - MyLib.BoolToInt(GridHdrRowsUsed.ColOfLineHeaderExists) + i - 1;
                gLineN = GridParams.Calc_GridLineIndex_ByTableLineNatN(tLineN);
                tbl.ColOfLineHeader[tLineN -                 for (int j = 2; j <= QRowsNamesToDisplay.QLines; j++)
                {
                //this.ColOfLineHeader[tColN - 1].SetByValStringN((grid.Rows[2 - 2].Cells[gColN].Value.ToString()), j);
                if (grid.Rows[gLineN].Cells[j - 2].Value != null && grid.Rows[gLineN].Cells[j - 2].Value.ToString() != "") tbl.ColOfLineHeader[tLineN - 1].SetByValStringN((grid.Rows[2 - 2].Cells[gColN].Value.ToString()), j);
                }
                }
                }
            }
            //Corner
            if (TblInf.Str.LineOfColHeaderExists && TblInf.Str.ColOfLineHeaderExists)
            {
                if (GridHdrRowsUsedExt.LineOfColHeaderExists == true && GridHdrRowsUsedExt.ColOfLineHeaderExists == true)
                {
                GridCell = grid.TopLeftHeaderCell;
                }
                else if (GridHdrRowsUsedExt.LineOfColHeaderExists == false && GridHdrRowsUsedExt.ColOfLineHeaderExists == true)
                {
                GridCell = grid.Rows[0].HeaderCell;
                }
                else if (GridHdrRowsUsedExt.LineOfColHeaderExists == true && GridHdrRowsUsedExt.ColOfLineHeaderExists == false)
                {
                GridCell = grid.Columns[0].HeaderCell;
                }
                else
                {
                GridCell = grid.Rows[0].Cells[0];
                }
                MyLib.ParseNamesOfTableCorner(GridCell.Value.ToString(), ref CorrectCorner, ref LinesGeneralName, ref ColumnsGeneralName, ref TableName);
            }
            //
            if (LinesGeneralName != null && LinesGeneralName != "") DataCell(LinesGeneralName));
            if (ColumnsGeneralName != null && ColumnsGeneralName != "") DataCell(ColumnsGeneralName));
            if (TableName != null && TableName != "") tbl.SetTableName(TableName);// tbl.SetTableHeader(new DataCell(TableName));
            //
            return tbl;
        }//fn read from grid
        bool LineNameExists(string name)
        {
            bool b=false;
            int QLines = 0, count=0;
            if (ColOfLineHeader != null)
            {
                for (int i = 1; i <= QLines; i++)
                {
                if (name.Equals(ToString_ColOfLineHeader(i))) count++;
                }
            }
            b = (count > 0);
            return b;
        }
        bool ColumnNameExists(string name, int N=1, TableInfo_ConcrRepr TblInfExt=null)
        {
            bool b = false;
            int QColumns = 0, count = 0;
            TableInfo_ConcrRepr             QColumns=TblInf.GetQColumns();
            if (LineOfColHeader != null)
            {
                for (int i = 1; i <= QColumns; i++)
                {
                if (name.Equals(ToString_LineOfColHeader(i))) count++;
                }
            }
            b = (count > 0);
            return b;
        }
        /*
        bool ColumnNameExists(DataCell NewHeader,int NameNToCompare=0)
        {
            bool b = false;
            bool QItemsSame, ActiveNSame, ActiveValSame, AllItemsAreSame;
            int QItemsExisting, QItemsNew, TypeNExisting, TypeNNew;//, ActiveNExisting, ActiveNNew;
            int MinLength=1;
            string [] ItemsExisting=null, ItemsNew=null;
            string CurNameExisting, CurNameNew;
            int QColumns = 0, count = 0;
            if (LineOfColHeader != null)
            {
                for (int i = 1; i <= QColumns; i++)
                {
                QItemsExisting=LineOfColHeader[i-1].GetLength();
                QItemsNew=NewHeader.GetLength();
                if(QItemsNew<=QItemsExisting)MinLength=QItemsNew; else MinLength=QItemsExisting;
                TypeNExisting=LineOfColHeader[i-1].GetTypeN();
                TypeNNew=NewHeader.GetTypeN();
                //ActiveNExisting=LineOfColHeader[i-1].GetActiveN();
                //ActiveNNew=NewHeader.GetActiveN();
                                CurNameNew=NewHeader.GetNameN(NameNToCompare);;
                //
                for(int j=1; j<=MinLength;j++){
               
                }
                if(NameNToCompare==0){

                if (TableConsts.TypeNIsCorrectArray(TypeNExisting))
                {
                if (TableConsts.TypeNIsCorrectArray(TypeNNew))
                {
                //if()
                }
                else
                {

                }
                }
                else
                {
                if (TableConsts.TypeNIsCorrectArray(TypeNNew))
                {

                }
                else
                {

                }
                }
                }
                else
                {
               
                }
                //
                //ActiveNSame=(ActiveNExisting==ActiveNNew);
                QItemsSame=(QItemsExisting==QItemsNew);
               
               
                }
            }
            b = (count > 0);
            return b;
        }
        */
        public void SetDataCellByDataCell(DataCell data, int LineN, int ColumnN, TableInfo TblInfExt)
        {
            TableInfo TblInf = this.Choose_TableInfo_StrSize_ByExtAndInner(TblInfExt);
            if (LineN >= 1 && ColumnN >= 1 && LineN <= TblInf.GetQLines() && ColumnN <= TblInf.GetQColumns())
            {
                if (TblInf.GetIf_LC_Not_CL())
                {
                this.ContentCell[LineN - 1][ColumnN - 1] = (DataCell)data.Clone();
                }
                else
                {
                this.ContentCell[ColumnN - 1][LineN - 1] = (DataCell)data.Clone();
                }
            }
        }
        //
        public int ColHeaderCellNIsEqualToCell(DataCell Cell, TableInfo_ConcrRepr TblInfExt = null, int = 1)
        {
            int N=0, QColumns;
            TableInfo_ConcrRepr             QColumns=TblInf.GetQColumns();
            for (int i = 1; i <= QColumns; i++)
            {
                if (this.LineOfColHeader[i - 1].HeaderIsEqualTo(Cell,                 {
                N = i;
                }
            }
            return N;
        }
        //if this fn is really needed? Exists MyLib.fCellsAreEqual
        public int LineHeaderCellNIsEqualToCell(DataCell Cell, TableInfo_ConcrRepr TblInfExt = null, int = 1)
        {
            int N = 0, QLines;
            TableInfo_ConcrRepr TblInf = this.Choose_TableInfo_StrSize_ByExtAndInner(TblInfExt);
            QLines = TblInf.GetQLines();
            for (int i = 1; i <= QLines; i++)
            {
                if (this.ColOfLineHeader[i - 1].HeaderIsEqualTo(Cell,                 {
                N = i;
                }
            }
            return N;
        }
        //if this fn is really needed? Exists MyLib.fCellsAreEqual
        /*public void CellAddSmartFromSingle(DataCell ContentCell, DataCell ColHeader, DataCell LineHeader, TableInfo_ConcrRepr TblInfExt = null, int NeededLinesSort = 0, int NeededColumnsSort = 0, int = 1)
        {
            TableInfo_ConcrRepr TblInf = this.Choose_TableInfo_StrSize_ByExtAndInner(TblInfExt);
            bool NeedAddLine, NeedAddColumn;
            int QLines = TblInf.GetQLines(), QColumns = TblInf.GetQColumns();
            int LineN = 0, ColN = 0;
            LineN = LineHeaderCellNIsEqualToCell(LineHeader, TblInf,             ColN = ColHeaderCellNIsEqualToCell(ColHeader, TblInf,             if (LineN == 0) NeedAddLine = false; else NeedAddLine = true;
            if (ColN == 0) NeedAddColumn = false; else NeedAddColumn = true;
            //QLines = TblInf.GetQLines(); QColumns = TblInf.GetQColumns();
            if (NeedAddLine)
            {
                this.AddLine_TypesByExisting();
                TblInf.AddLine();
                LineN = TblInf.GetQLines();
                if(ColOfLineHeader!=null)ColOfLineHeader[LineN - 1].SetByValString(LineHeader.ToString());
            }//else NOp, LineN s'def'd
            if (NeedAddColumn)
            {
                this.AddColumn_TypesByExisting();
                TblInf.AddColumn();
                ColN = TblInf.GetQColumns();
                if (LineOfColHeader != null) LineOfColHeader[ColN - 1].SetByValString(ColHeader.ToString());
            }//else NOp, ColN s'def'd
            this.ContentCell[LineN - 1][ColN - 1] = ContentCell;
        }*/
        public void AssignCell(DataCell cell, int LineN, int ColN, TableInfo_ConcrRepr TblInfExt=null){
            TableInfo_ConcrRepr             if (LineN >= 1 && LineN <= TblInf.GetQLines() && ColN >= 1 && ColN <= TblInf.GetQColumns())
            {
                if (TblInf.GetIf_LC_Not_CL())
                {
                this.ContentCell[LineN - 1][ColN - 1].Assign(cell);
                }
                else
                {
                this.ContentCell[ColN - 1][LineN - 1].Assign(cell);
                }
            }
            else if (LineN == 0 && ColN >= 1 && ColN <= TblInf.GetQColumns() && this.LineOfColHeader != null)
            {
                this.LineOfColHeader[ColN - 1].Assign(cell);
            }
            else if (ColN == 0 && LineN >= 1 && LineN <= TblInf.GetQLines() && this.ColOfLineHeader != null)
            {
                this.ColOfLineHeader[LineN - 1].Assign(cell);
            }
        }//fn
        public void AddAbsentRowsFromExtTableByRules(TTable tbl2, TableInfo_ConcrRepr TblInf1Ext = null, TableInfo_ConcrRepr TblInf2Ext = null, TTablesConcatRules TablesConcatRulesExt = null, int AreEqualBy_N0_Name1_ValAsDbl2Int3Bool4Str5_Full6 = 1)
        {
            /*
             * ha 2 tables this et ext
             * foreacgh line of added table assign array of fitting Ns
             * foreacgh col of added table assign array of fitting Ns
             * if add lines anyway:
             *   add all lines and: write hdrs, if both orig and new ha em
             * if add cols anyway:
             *   add all cols and: write hdrs, if both orig and new ha em
             * if add new lines:
             *   foreach line o'new tbk compar et, if s'new, add
             * if add new cols:
             *   foreach col compar et, if s'new, add
            */
            TableInfo_ConcrRepr TblInf1, TblInf2;
            TTablesConcatRules TablesConcatRules;
            DataCell Hdr1=null, Hdr2=null, ccell, HdrL1, HdrC1, HdrL2, HdrC2;
            bool NeedAddLines, NeedAddColumns, HeadersAreSame;
            int[] CorrespondingLines_NsOfT1ForT2 = null, CorrespondingCols_NsOfT1ForT2 = null, CorrespondingLines_NsOfT1ForT2_New = null, CorrespondingCols_NsOfT1ForT2_New = null;
            int QLinesPrev, QColsPrev, QLinesToAddMax, QColsToAddMax;
            TblInf1 = this.Choose_TableInfo_StrSize_ByExtAndInner(TblInf1Ext);
                      else TablesConcatRules=new TTablesConcatRules();
            NeedAddLines = (TablesConcatRules.DirectAdd_Vert1Hor2VertTransp3Smart4 == 1 || TablesConcatRules.LinesElaborationRule_Add0DependsOnCompar1 == 0 || (TablesConcatRules.LinesElaborationRule_Add0DependsOnCompar1 == 1 && TablesConcatRules.LinesDifferent_Ignore0Add1==1));
            NeedAddColumns = (TablesConcatRules.DirectAdd_Vert1Hor2VertTransp3Smart4 == 2 || TablesConcatRules.ColsElaborationRule_Add0DependsOnCompar1 == 0 || (TablesConcatRules.ColsElaborationRule_Add0DependsOnCompar1 == 1 && TablesConcatRules.ColsDifferent_Ignore0Add1 == 1));
            QLinesPrev=TblInf1.GetQLines();
            QColsPrev=TblInf1.GetQColumns();
            QLinesToAddMax = TblInf2.GetQLines();
            QColsToAddMax = TblInf2.GetQColumns();
            CorrespondingLines_NsOfT1ForT2 = new int[QLinesToAddMax];
            for (int i = 1; i <= QLinesToAddMax; i++) CorrespondingLines_NsOfT1ForT2[i - 1] = -1;
            for (int i = 1; i <= QLinesToAddMax; i++)
            {
                CorrespondingLines_NsOfT1ForT2[i - 1] = -1;
                for (int j = 1; j <= QLinesPrev; j++)
                {
                Hdr1 = (DataCell)this.ColOfLineHeader[j - 1].Clone();
                Hdr2 = (DataCell)tbl2.GetCell_ColOfLineHeader(i).Clone();
                HeadersAreSame = MyLib.fCellsAreEqual(Hdr1, Hdr2, AreEqualBy_N0_Name1_ValAsDbl2Int3Bool4Str5_Full6, new TableSize(QLinesPrev, QColsPrev), new TableSize(QLinesToAddMax, QColsToAddMax));
                if (HeadersAreSame)
                {
                CorrespondingLines_NsOfT1ForT2[i - 1] = j;
                }
                }//for
            }//for
            CorrespondingCols_NsOfT1ForT2 = new int[QColsToAddMax];
            for (int i = 1; i <= QColsToAddMax; i++) CorrespondingCols_NsOfT1ForT2[i - 1] = -1;
            for (int i = 1; i <= QColsToAddMax; i++)
            {
                CorrespondingCols_NsOfT1ForT2[i - 1] = -1;
                for (int j = 1; j <= QColsPrev; j++)
                {
                Hdr1 = (DataCell)this.ColOfLineHeader[j - 1].Clone();
                Hdr2 = (DataCell)tbl2.GetCell_ColOfLineHeader(i).Clone();
                HeadersAreSame = MyLib.fCellsAreEqual(Hdr1, Hdr2, AreEqualBy_N0_Name1_ValAsDbl2Int3Bool4Str5_Full6, new TableSize(TblInf1.GetQLines(), TblInf1.GetQColumns()), new TableSize(TblInf2.GetQLines(), TblInf2.GetQColumns()));
                if (HeadersAreSame)
                {
                CorrespondingCols_NsOfT1ForT2[i - 1] = j;
                }
                }//for
            }//for
            //Lines
            if (TablesConcatRules.DirectAdd_Vert1Hor2VertTransp3Smart4 == 1 || TablesConcatRules.LinesElaborationRule_Add0DependsOnCompar1 == 0)
            {
                for (int i = 1; i <= QLinesToAddMax; i++)
                {
                this.AddLine_TypesByExisting();
                TblInf1.AddLine();
                this.ColOfLineHeader[QLinesPrev - 1] = Hdr2;
                }
            }
            else if(TablesConcatRules.LinesElaborationRule_Add0DependsOnCompar1 == 1 && TablesConcatRules.LinesDifferent_Ignore0Add1==1)
            {
                CorrespondingLines_NsOfT1ForT2_New = new int[QLinesToAddMax];
                for (int i = 1; i <= QLinesToAddMax; i++)
                {
                if (CorrespondingLines_NsOfT1ForT2[i - 1] == -1)
                {
                Hdr2 = (DataCell)tbl2.GetCell_ColOfLineHeader(i).Clone();
                this.AddLine_TypesByExisting();
                TblInf1.AddLine();
                this.ColOfLineHeader[QLinesPrev - 1] = Hdr2;
                CorrespondingLines_NsOfT1ForT2_New[i - 1] = TblInf1.GetQLines();
                }
                else CorrespondingLines_NsOfT1ForT2_New[i - 1] = CorrespondingLines_NsOfT1ForT2[i-1];
                }//for
            }//else no need to add lines, so NOp
            //Cols
            if (TablesConcatRules.DirectAdd_Vert1Hor2VertTransp3Smart4 == 2 || TablesConcatRules.ColsElaborationRule_Add0DependsOnCompar1 == 0)
            {
                for (int i = 1; i <= QColsToAddMax; i++)
                {
                this.AddColumn_TypesByExisting();
                TblInf1.AddColumn();
                this.LineOfColHeader[QColsPrev - 1] = Hdr2;
                }
            }
            else if (TablesConcatRules.ColsElaborationRule_Add0DependsOnCompar1 == 1 && TablesConcatRules.ColsDifferent_Ignore0Add1 == 1)
            {
                CorrespondingCols_NsOfT1ForT2_New = new int[QColsToAddMax];
                for (int i = 1; i <= QColsToAddMax; i++)
                {
                if (CorrespondingCols_NsOfT1ForT2[i - 1] == -1)
                {
                Hdr2 = (DataCell)tbl2.GetCell_LineOfColHeader(i).Clone();
                this.AddColumn_TypesByExisting();
                TblInf1.AddColumn();
                this.LineOfColHeader[QLinesPrev - 1] = Hdr2;
                CorrespondingCols_NsOfT1ForT2_New[i - 1] = TblInf1.GetQColumns();
                }
                else CorrespondingCols_NsOfT1ForT2_New[i - 1] = CorrespondingCols_NsOfT1ForT2[i - 1];
                }//for
            }//else no need to add col, so NOp
            //CotentCells
            if (TablesConcatRules.DirectAdd_Vert1Hor2VertTransp3Smart4 == 1 && TablesConcatRules.ColsElaborationRule_Add0DependsOnCompar1 == 0)
            {

            }
            else if (TablesConcatRules.DirectAdd_Vert1Hor2VertTransp3Smart4 == 1 && TablesConcatRules.ColsElaborationRule_Add0DependsOnCompar1 == 0)
            {

            }
            //OLD
            //Lines
            if (TablesConcatRules.DirectAdd_Vert1Hor2VertTransp3Smart4 == 1 || TablesConcatRules.LinesElaborationRule_Add0DependsOnCompar1 == 0)
            {
                for (int i = 1; i <= TblInf2.GetQLines(); i++)
                {
                this.AddLine_TypesByExisting();
                TblInf1.AddLine();
                this.ColOfLineHeader[TblInf1.GetQLines() - 1] = Hdr2;
                //for (int k = 1; k <= TblInf2.GetQColumns(); k++)
                //{
                //    ccell=tbl2.GetCell(i,k, TblInf2);
                //    this.AssignCell(ccell, QLinesPrev + i, k, TblInf1); //what if QColumns s' different?
                //}
                }
            }
            else
            {
                CorrespondingLines_NsOfT1ForT2 = new int[TblInf2.GetQLines()];
                for (int i = 1; i <= TblInf2.GetQLines(); i++)
                {
                CorrespondingLines_NsOfT1ForT2[i - 1] = -1;
                for (int j = 1; j <= TblInf1.GetQLines(); j++)
                {
                Hdr1 = (DataCell)this.ColOfLineHeader[j - 1].Clone();
                Hdr2 = (DataCell)tbl2.GetCell_ColOfLineHeader(i).Clone();
                HeadersAreSame=MyLib.fCellsAreEqual(Hdr1, Hdr2, AreEqualBy_N0_Name1_ValAsDbl2Int3Bool4Str5_Full6, new TableSize(TblInf1.GetQLines(), TblInf1.GetQColumns()), new TableSize(TblInf2.GetQLines(), TblInf2.GetQColumns()));
                if (HeadersAreSame)
                {
                CorrespondingLines_NsOfT1ForT2[i - 1] = j;
                }
                }//for
                if (CorrespondingLines_NsOfT1ForT2[i - 1] > 0)
                {
                this.AddLine_TypesByExisting();
                TblInf1.AddLine();
                this.ColOfLineHeader[TblInf1.GetQLines() - 1] = Hdr2;
                }
                }//for
            }//if add lines
            //Columns
            if (TablesConcatRules.DirectAdd_Vert1Hor2VertTransp3Smart4 == 1 || TablesConcatRules.LinesElaborationRule_Add0DependsOnCompar1 == 0)
            {
                for (int i = 1; i <= TblInf2.GetQColumns(); i++)
                {
                this.AddColumn_TypesByExisting();
                TblInf1.AddColumn();
                this.LineOfColHeader[TblInf1.GetQColumns() - 1] = Hdr2;
                }
            }
            else
            {
                CorrespondingCols_NsOfT1ForT2 = new int[TblInf2.GetQColumns()];
                for (int i = 1; i <= TblInf2.GetQColumns(); i++)
                {
                CorrespondingCols_NsOfT1ForT2[i - 1] = -1;
                for (int j = 1; j <= TblInf1.GetQColumns(); j++)
                {
                Hdr1 = (DataCell)this.LineOfColHeader[j - 1].Clone();
                Hdr2 = (DataCell)tbl2.GetCell_LineOfColHeader(i).Clone();
                HeadersAreSame=MyLib.fCellsAreEqual(Hdr1, Hdr2, AreEqualBy_N0_Name1_ValAsDbl2Int3Bool4Str5_Full6, new TableSize(TblInf1.GetQLines(), TblInf1.GetQColumns()), new TableSize(TblInf2.GetQLines(), TblInf2.GetQColumns()));
                if (HeadersAreSame)
                {
                CorrespondingCols_NsOfT1ForT2[i - 1] = j;
                }
                }//for
                if (CorrespondingCols_NsOfT1ForT2[i - 1] > 0)
                {
                this.AddColumn_TypesByExisting();
                TblInf1.AddColumn();
                this.LineOfColHeader[TblInf1.GetQColumns() - 1] = Hdr2;
                }
                }//for
            }//if add columns
            //Content cells: now table has enough lines and cols and correct their names
            if (TablesConcatRules.DirectAdd_Vert1Hor2VertTransp3Smart4 == 1 || TablesConcatRules.LinesElaborationRule_Add0DependsOnCompar1 == 0)
            {
                for (int i = 1; i <= QLinesToAddMax; i++)
                {
                for (int j = 1; j <= QColsToAddMax; j++)
                {
                ccell=tbl2.GetCell(i, j, TblInf2);
                this.AssignCell(ccell, QLinesPrev + i, CorrespondingCols_NsOfT1ForT2[j - 1]);
                }
                }
            }
            else if (TablesConcatRules.DirectAdd_Vert1Hor2VertTransp3Smart4 == 2 || TablesConcatRules.ColsElaborationRule_Add0DependsOnCompar1 == 0)
            {
                for (int i = 1; i <= QLinesToAddMax; i++)
                {
                for (int j = 1; j <= QColsToAddMax; j++)
                {
                ccell = tbl2.GetCell(i, j, TblInf2);
                this.AssignCell(ccell, CorrespondingLines_NsOfT1ForT2[i - 1], QColsPrev +j);
                }
                }
            }
            else //added only new lines and columns
            {
                if (TablesConcatRules.LinesElaborationRule_Add0DependsOnCompar1==1 &&                 if (TablesConcatRules.LinesSame_Ignore0Replace1 == 1 && TablesConcatRules.LinesDifferent_Ignore0Add1==1)
                for (int i = 1; i <= QLinesToAddMax; i++)
                {
                for (int j = 1; j <= QColsToAddMax; j++)
                {
                //HdrL1 = (DataCell)this.ColOfLineHeader[j - 1].Clone();
                //HdrC1 = (DataCell)this.LineOfColHeader[j - 1].Clone();
                HdrL2 = (DataCell)tbl2.GetCell_ColOfLineHeader(i).Clone();
                HdrC2 = (DataCell)tbl2.GetCell_LineOfColHeader(i).Clone();
                HeadersAreSame = MyLib.fCellsAreEqual(Hdr1, Hdr2, AreEqualBy_N0_Name1_ValAsDbl2Int3Bool4Str5_Full6, new TableSize(TblInf1.GetQLines(), TblInf1.GetQColumns()), new TableSize(TblInf2.GetQLines(), TblInf2.GetQColumns()));
                if (HeadersAreSame)
                {
                CorrespondingCols_NsOfT1ForT2[i - 1] = j;
                }
               
                }
                }
                }
            }//if
        }//fn
        public void CellAddSmartFromSingle(DataCell ContentCell, DataCell ColHeader, DataCell LineHeader, TTablesConcatRules TablesConcatRulesExt = null, int LineN = 1, int ColN = 1, TableInfo_ConcrRepr TblInfExt = null)
        {
            /*
             * if Direct Add V or G, so do this
             * if smart
             *   if lines add anyhow, cols depends on compar-> add new:
             *     add absent cols OR add Line Smart
             *   if cols add anyhow, lines depends on compar-> add new:
             *     add absent lines OR add Col Smart
             *   if lines and cols add anyhow:
             *     add absent cols OR add Line Smart OR add absent lines OR add Col Smart
             *   if lines add anyhow, cols depends on compar-> ignore new:
             *     add Line smart // ut add 1 line, not tmuc lines qmuc cols // ma line ne ved cols names!
             *  SO   :
             *  if add lines (anyhow or by cond) add all needed lines: if anyhow - add all, if by cond - add all absent
             *  if add cols (anyhow or by cond) add all needed cols: if anyhow - add all, if by cond - add all absent
             *  use Add Cell Smart ut decide: either write new cell to old or leave old and ignore new
             */
            TableInfo_ConcrRepr TblInf = this.Choose_TableInfo_StrSize_ByExtAndInner(TblInfExt);
            TTablesConcatRules TablesConcatRules;
            if (TablesConcatRulesExt != null) TablesConcatRules = TablesConcatRulesExt; else TablesConcatRules = new TTablesConcatRules();
            bool NeedAddLine, NeedAddColumn, NeedWriteCell;
            int QLines = TblInf.GetQLines(), QColumns = TblInf.GetQColumns();
            int TblFitLineN = 0, TblFitColN = 0;
            TblFitLineN = LineHeaderCellNIsEqualToCell(LineHeader, TblInf,
                       TblFitColN = ColHeaderCellNIsEqualToCell(ColHeader, TblInf,             if (TblFitLineN == 0 && CellsWithNewHeaders_Ignore0Add1 == 1) NeedAddLine = true; else NeedAddLine = false;
            if (TblFitColN == 0 && CellsWithNewHeaders_Ignore0Add1 == 1) NeedAddColumn = true; else NeedAddColumn = false;
            //QLines = TblInf.GetQLines(); QColumns = TblInf.GetQColumns();
            if (NeedAddLine)
            {
                this.AddLine_TypesByExisting();
                TblInf.AddLine();
                //LineN = TblInf.GetQLines();
                //if (ColOfLineHeader != null) ColOfLineHeader[LineN - 1].SetByValString(LineHeader.ToString());
                if (ColOfLineHeader != null) ColOfLineHeader[LineN - 1].Assign(LineHeader);
            }//else NOp, LineN s'def'd
            if (NeedAddColumn)
            {
                this.AddColumn_TypesByExisting();
                TblInf.AddColumn();
                //ColN = TblInf.GetQColumns();
                //if (LineOfColHeader != null) LineOfColHeader[ColN - 1].SetByValString(ColHeader.ToString());
                if (LineOfColHeader != null) LineOfColHeader[ColN - 1].Assign(ColHeader);
            }//else NOp, ColN s'def'd
            if (((TblFitLineN == 0 || TblFitColN == 0) && CellsWithNewHeaders_Ignore0Add1 == 1)
                ||
                (TblFitLineN != 0 && TblFitColN != 0 && CellsWithExistingHeaders_Leave0Replace1 == 1)
                )
            {
                if (LineN == 0) TblFitLineN = TblInf.GetQLines();
                if (ColN == 0) TblFitColN = TblInf.GetQColumns();
                this.ContentCell[TblFitLineN - 1][TblFitColN - 1] = ContentCell;
            }
        }
        public void LineAddSmartFromSingle(DataCellRowCoHeader NewLine, TTablesConcatRules TablesConcatRulesExt = null, int LineN = 1, TableInfo_ConcrRepr TblInfExt = null)
        {

        }
        public void ColumnAddSmartFromSingle(DataCellRowCoHeader NewCol, TTablesConcatRules TablesConcatRulesExt = null, int ColN = 1, TableInfo_ConcrRepr TblInfExt = null)
        {

        }
        /*public void AddTableSmart(TTable TblAdded, TableInfo_ConcrRepr TblInfThisExt = null, TableInfo_ConcrRepr TblInfAddedExt = null, int = 1)
        {
            DataCell CC_Added, LH_Added, CH_Added;
            TableInfo_ConcrRepr TblInfThis, TblInfAdded=null;
            int QAddedLines, QAddedColumns;
            TblInfThis = this.Choose_TableInfo_StrSize_ByExtAndInner(TblInfThisExt);
            TblInfAdded =             if (TblAdded != null)
            {
                QAddedLines = TblInfAdded.GetQLines();
                QAddedColumns = TblInfAdded.GetQColumns();
                for (int i = 1; i <= QAddedLines; i++)
                {
                for (int j = 1; j <= QAddedColumns; j++)
                {
                CC_Added=TblAdded.GetCell(i,j,TblInfAdded);
                LH_Added=TblAdded.GetCell_ColOfLineHeader(i,TblInfAdded);
                CH_Added=TblAdded.GetCell_LineOfColHeader(j,TblInfAdded);
                this.CellAddSmartFromSingle(CC_Added, CH_Added, LH_Added, TblInfAdded,                 }
                }
            }
        }//fn
         */
        public void AddTableSmart(TTable TblAdded, TableInfo_ConcrRepr TblInfThisExt = null, TableInfo_ConcrRepr TblInfAddedExt = null, int CellsWithNewHeaders_Ignore0Add1=1, int CellsWithExistingHeaders_Leave0Replace1=1, int = 1)
        {
            DataCell CC_Added, LH_Added, CH_Added;
            TableInfo_ConcrRepr TblInfThis, TblInfAdded = null;
            int QAddedLines, QAddedColumns;
            TblInfThis = this.Choose_TableInfo_StrSize_ByExtAndInner(TblInfThisExt);
            TblInfAdded =             if (TblAdded != null)
            {
                QAddedLines = TblInfAdded.GetQLines();
                QAddedColumns = TblInfAdded.GetQColumns();
                for (int i = 1; i <= QAddedLines; i++)
                {
                for (int j = 1; j <= QAddedColumns; j++)
                {
                CC_Added = TblAdded.GetCell(i, j, TblInfAdded);
                LH_Added = TblAdded.GetCell_ColOfLineHeader(i, TblInfAdded);
                CH_Added = TblAdded.GetCell_LineOfColHeader(j, TblInfAdded);
                this.CellAddSmartFromSingle(CC_Added, CH_Added, LH_Added, TblInfAdded, CellsWithNewHeaders_Ignore0Add1, CellsWithExistingHeaders_Leave0Replace1,                 }
                }
            }
        }//fn
        public TTable AddTableSmartTo(TTable TblAdded, TableInfo_ConcrRepr TblInfThisExt = null, TableInfo_ConcrRepr TblInfAddedExt = null, int = 1)
        {
            TTable TR = (TTable)this.Clone();
            DataCell CC_Added, LH_Added, CH_Added;
            TableInfo_ConcrRepr TblInfThis, TblInfAdded = null;
            int QAddedLines, QAddedColumns;
            TblInfThis = this.Choose_TableInfo_StrSize_ByExtAndInner(TblInfThisExt);
            TblInfAdded =             if (TblAdded != null)
            {
                QAddedLines = TblInfAdded.GetQLines();
                QAddedColumns = TblInfAdded.GetQColumns();
                for (int i = 1; i <= QAddedLines; i++)
                {
                for (int j = 1; j <= QAddedColumns; j++)
                {
                CC_Added = TblAdded.GetCell(i, j, TblInfAdded);
                LH_Added = TblAdded.GetCell_ColOfLineHeader(i, TblInfAdded);
                CH_Added = TblAdded.GetCell_LineOfColHeader(j, TblInfAdded);
                TR.CellAddSmartFromSingle(CC_Added, CH_Added, LH_Added, TblInfAdded,                 }
                }
            }
            return TR;
        }//fn
        //
        public void AddTableSelectiveByColumnsNames(TTable T2, TableInfo TblInfExt1 = null, TableInfo TblInfExt2 = null, int = 1)
        {
            DataCell HdrCell;//=null;
            int QColumns, QColumnsInAddedSource, QAddedColumns, QLinesOld, QAddedLines, QLinesNew, IniTblColN, n=0, CurTypeN1, CurTypeN2;
            int[]ColNAdded=null,ColToAppend=null;
            TableInfo TblInf1 = this.Choose_TableInfo_StrSize_ByExtAndInner(TblInfExt1), TblInf2 = T2.Choose_TableInfo_StrSize_ByExtAndInner(TblInfExt2);
            QColumns = TblInf1.GetQColumns();
            QColumnsInAddedSource = TblInf2.GetQColumns();
            QLinesOld = TblInf1.GetQLines();
            QAddedLines = TblInf2.GetQLines();
            QLinesNew = QLinesOld + QAddedLines;
            QAddedColumns = 0;
            for (int i = 1; i <= QColumnsInAddedSource; i++)
            {
                HdrCell = T2.GetCell_LineOfColHeader(i);
                IniTblColN = this.ColHeaderCellNIsEqualToCell(HdrCell, TblInf1.GetTableInfo_ConcrRepr(),                 if (IniTblColN != 0)
                {
                QAddedColumns++;
                if (QAddedColumns == 1)
                {
                ColToAppend = new int[1];
                ColToAppend[1 - 1] = IniTblColN;
                ColNAdded = new int[1];
                ColNAdded[1 - 1] = i;
                }
                else
                {
                n = QAddedColumns - 1;
                n=ColToAppend.Length;
                MyLib.AddToVector<int>(ref ColToAppend, ref n, IniTblColN);
                n = QAddedColumns - 1;
                n = ColNAdded.Length;
                MyLib.AddToVector<int>(ref ColNAdded, ref n, i);
                }//if
                }//if
            }//for
            QAddedColumns=n;
            for (int i = 1; i <= QAddedLines; i++)
            {
                this.AddEmptyLine_TypesByExisting(TblInf1);
                for (int j = 1; j <= QAddedColumns; j++)
                {
                SetDataCellByDataCell(T2.GetCell(i, ColNAdded[j - 1], TblInf2.GetTableInfo_ConcrRepr()), QLinesOld + i, ColToAppend[j - 1], TblInf1);
                }
            }
        }//fn
        public TTable AddTableSelectiveByColumnsNamesTo(TTable T1, TTable T2, TableInfo TblInfExt1 = null, TableInfo TblInfExt2 = null, int = 1)
        {
            TTable TR =(TTable) this.Clone();
            DataCell HdrCell;//=null;
            int QColumns, QColumnsInAddedSource, QAddedColumns, QLinesOld, QAddedLines, QLinesNew, IniTblColN, n = 0, CurTypeN1, CurTypeN2;
            int[] ColNAdded = null, ColToAppend = null;
            TableInfo TblInf1 = T1.Choose_TableInfo_StrSize_ByExtAndInner(TblInfExt1), TblInf2 = T2.Choose_TableInfo_StrSize_ByExtAndInner(TblInfExt2);
            QColumns = TblInf1.GetQColumns();
            QColumnsInAddedSource = TblInf2.GetQColumns();
            QLinesOld = TblInf1.GetQLines();
            QAddedLines = TblInf2.GetQLines();
            QLinesNew = QLinesOld + QAddedLines;
            QAddedColumns = 0;
            for (int i = 1; i <= QColumnsInAddedSource; i++)
            {
                HdrCell = T2.GetCell_LineOfColHeader(i);
                IniTblColN = TR.ColHeaderCellNIsEqualToCell(HdrCell, TblInf1.GetTableInfo_ConcrRepr(),                 if (IniTblColN != 0)
                {
                QAddedColumns++;
                if (QAddedColumns == 1)
                {
                ColToAppend = new int[1];
                ColToAppend[1 - 1] = IniTblColN;
                ColNAdded = new int[1];
                ColNAdded[1 - 1] = i;
                }
                else
                {
                n = QAddedColumns - 1;
                n = ColToAppend.Length;
                MyLib.AddToVector<int>(ref ColToAppend, ref n, IniTblColN);
                n = QAddedColumns - 1;
                n = ColNAdded.Length;
                MyLib.AddToVector<int>(ref ColNAdded, ref n, i);
                }//if
                }//if
            }//for
            QAddedColumns = n;
            for (int i = 1; i <= QAddedLines; i++)
            {
                TR.AddEmptyLine_TypesByExisting(TblInf1);
                for (int j = 1; j <= QAddedColumns; j++)
                {
                SetDataCellByDataCell(T2.GetCell(i, ColNAdded[j - 1], TblInf2.GetTableInfo_ConcrRepr()), QLinesOld + i, ColToAppend[j - 1], TblInf1);
                }
            }
            return TR;
        }//fn
    }//cl
}//ns  //2021-02-20


both cpp

//MainWindow.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>300</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralWidget">
   <widget class="QPushButton" name="pushButton">
    <property name="geometry">
     <rect>
      <x>130</x>
      <y>20</y>
      <width>80</width>
      <height>21</height>
     </rect>
    </property>
    <property name="text">
     <string>PushButton</string>
    </property>
   </widget>
   <widget class="QTextBrowser" name="textBrowser">
    <property name="geometry">
     <rect>
      <x>30</x>
      <y>50</y>
      <width>341</width>
      <height>192</height>
     </rect>
    </property>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menuBar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>400</width>
     <height>18</height>
    </rect>
   </property>
  </widget>
  <widget class="QToolBar" name="mainToolBar">
   <attribute name="toolBarArea">
    <enum>TopToolBarArea</enum>
   </attribute>
   <attribute name="toolBarBreak">
    <bool>false</bool>
   </attribute>
  </widget>
  <widget class="QStatusBar" name="statusBar"/>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <resources/>
 <connections/>
</ui>


//datacell.h 

#ifndef DATACELL_H
#define DATACELL_H

#include"mylib.h"
#include"numberparse.h"
#include "typeinfo.h"
#include "tableinfo.h"

class TDataCell{
    //
    public:
    //
    virtual void construct(int n=1)=0;
    virtual ~TDataCell()=0;
    //
            virtual int GetTypeN()=0;
            virtual int GetActiveN()=0;
            virtual void SetActiveN(int N)=0;
            virtual int GetLength() =0;
            virtual void SetLength(int L) =0;
            //
            virtual double GetDoubleVal() =0;
            virtual float GetFloatVal() =0;
            virtual int GetIntVal() =0;
            virtual bool GetBoolVal() =0;
            virtual  QString ToString() =0;
            //
            virtual double GetDoubleValN(int N) =0;
            virtual float GetFloatValN(int N) =0;
            virtual int GetIntValN(int N) =0;
            virtual bool GetBoolValN(int N) =0;
            virtual QString ToStringN(int N) =0;
            //
            //virtual QStringGetNameN(int N) =0;//for db1
            //
            virtual void SetByValDouble(double val) =0;
            virtual void SetByValFloat(float val) =0;
            virtual void SetByValInt(int val) =0;
            virtual void SetByValBool(bool val) =0;
            virtual void SetByValString(QString val) =0;
            //
            //virtual   void SetByValStringName(string val) =0;//for db2
            //
            virtual void SetByValDoubleN(double val, int N) =0;
            virtual void SetByValFloatN(float val, int N) =0;
            virtual void SetByValIntN(int val, int N) =0;
            virtual void SetByValBoolN(bool val, int N) =0;
            virtual void SetByValStringN(QString val, int N) =0;
            //
            //virtual   void SetByValStringNameN(string val, int N) =0;//for db3
            //
            virtual void SetVal(double val) =0;
            virtual void SetVal(int val) =0;
            virtual void SetVal(bool val) =0;
            virtual void SetVal(QString val) =0;
            //
            //virtual   void SetValToName(string val) =0;//for db4
            //
            virtual   void SetValN(double val, int N) =0;
            virtual   void SetValN(int val, int N) =0;
            virtual   void SetValN(bool val, int N) =0;
            virtual   void SetValN(QString val, int N) =0;
            //
            //virtual   void SetValToNameN(string val, int N) =0;//for db5
            //
            virtual   void SetByArrDouble(double* val, int Q) =0;
            virtual   void SetByArrFloat(float* val, int Q) =0;
            virtual   void SetByArrInt(int* val, int Q) =0;
            virtual   void SetByArrBool(bool* val, int Q) =0;
            virtual   void SetByArrString(QString* val, int Q) =0;
            //
            //virtual   void SetByArrStringToNames(string[] val, int Q) =0;//for db6
            //
            virtual   void SetByArr(double* val, int Q) =0;
            virtual   void SetByArr(int* val, int Q) =0;
            virtual   void SetByArr(bool* val, int Q) =0;
            virtual   void SetByArr(QString* val, int Q) =0;
            //
            //virtual   void SetByArrToNames(QString* val, int Q) =0;//for db6
            //
            virtual   void AddOrInsDoubleVal(double val, int N) =0;
            virtual   void AddOrInsFloatVal(float val, int N) =0;
            virtual   void AddOrInsIntVal(int val, int N) =0;
            virtual   void AddOrInsBoolVal(bool val, int N) =0;
            virtual   void AddOrInsStringVal(QString val, int N) =0;
            //
            //virtual   void AddOrInsStringValToNames(string* val, int Q) =0;//for db7
            //
            //
            virtual void GetDoubleArr( double*&Arr,  int&QItems) =0;
            virtual void GetFloatArr( float*&Arr,  int&QItems) =0;
            virtual void GetIntArr( int*&Arr,  int&QItems) =0;
            virtual void GetBoolArr( bool*&Arr,  int&QItems) =0;
            virtual void ToStringArr( QString*&Arr,  int&QItems) =0;
            //
            //
            virtual void DelValN(int N) =0;
            //
            //
            virtual void SetNameN(QString name, int N) =0;
            virtual void SetName1(QString name) =0;
            virtual void SetName2(QString name) =0;
            virtual void SetName3(QString name) =0;
            virtual void SetNames(QString* Arr, int Q) =0;
            virtual QString GetNameN(int N) =0;
            virtual QString GetName1() =0;
            virtual QString GetName2() =0;
            virtual QString GetName3() =0;
            virtual void GetNames(QString*&Arr,  int&QItems) =0;
            virtual int GetLengthOfNamesList() =0;
            //
            //
            //virtual InsDoubleValN(double val, int N) =0;
            //virtual InsFloatValN(float val, int N) =0;
            //virtual InsIntValN(int val, int N) =0;
            //virtual InsBoolValN(bool val, int N) =0;
            //virtual InsStringValN(string val, int N) =0;
            //
            //virtual AddDoubleValN(double val, int N) =0;
            //virtual AddFloatValN(float val, int N) =0;
            //virtual AddIntValN(int val, int N) =0;
            //virtual AddBoolValN(bool val, int N) =0;
            //virtual AddStringValN(string val, int N) =0;
            //
            //virtual  object Clone() =0;
};

    class TCellDouble:public TDataCell
    {
        double val;
        //
        public:
        TCellDouble();
        TCellDouble(double val);
        TCellDouble(float val);
        TCellDouble(int val);
        TCellDouble(bool val);
        TCellDouble(QString val);
        //
        TCellDouble(double* val, int Q) ;
        TCellDouble(float* val, int Q);
        TCellDouble(int* val, int Q);
        TCellDouble(bool* val, int Q);
        TCellDouble(QString* val, int Q);
        //
        //        TCellDouble(TCellDouble&obj);
        //        //
        //        TCellDouble& operator =(TCellDouble&obj);
        //        //
        //        void Assign(TCellDouble&obj);
        //
        virtual void construct(int n=1);
        //
        virtual int GetTypeN();
        virtual int GetActiveN();
        virtual void SetActiveN(int N);
        virtual int GetLength();
        virtual void SetLength(int L);
        //
        virtual double GetDoubleVal();
        virtual float GetFloatVal();
        virtual int GetIntVal();
        virtual bool GetBoolVal();
        virtual QString ToString();
        //
        virtual double GetDoubleValN(int N);
        virtual float GetFloatValN(int N);
        virtual int GetIntValN(int N);
        virtual bool GetBoolValN(int N);
        virtual QString ToStringN(int N);
        //
        virtual void SetByValDouble(double val);
        virtual void SetByValFloat(float val);
        virtual void SetByValInt(int val);
        virtual void SetByValBool(bool val);
        virtual void SetByValString(QString val);
        //
        virtual void SetByValDoubleN(double val, int N);
        virtual void SetByValFloatN(float val, int N);
        virtual void SetByValIntN(int val, int N);
        virtual void SetByValBoolN(bool val, int N);
        virtual void SetByValStringN(QString val, int N);
        //
        virtual void SetVal(double val);
        virtual void SetVal(int val);
        virtual void SetVal(bool val);
        virtual void SetVal(QString val);
        //
        virtual void SetValN(double val, int N);
        virtual void SetValN(int val, int N);
        virtual void SetValN(bool val, int N);
        virtual void SetValN(QString val, int N);
        //
        virtual void SetByArrDouble(double* val, int Q);
        virtual void SetByArrFloat(float*val, int Q);
        virtual void SetByArrInt(int* val, int Q);
        virtual void SetByArrBool(bool* val, int Q);
        virtual void SetByArrString(QString*val, int Q);
        //
        virtual void SetByArr(double* val, int Q);
        virtual void SetByArr(int* val, int Q);
        virtual void SetByArr(bool* val, int Q);
        virtual void SetByArr(QString* val, int Q);
        //
        virtual void AddOrInsDoubleVal(double val, int N);
        virtual void AddOrInsFloatVal(float val, int N);
        virtual void AddOrInsIntVal(int val, int N);
        virtual void AddOrInsBoolVal(bool val, int N);
        virtual void AddOrInsStringVal(QString val, int N);
        //
        virtual void DelValN(int N);
        //
        virtual void GetDoubleArr(double*&Arr,  int&QItems);
        virtual void GetFloatArr(float*&Arr, int&QItems);
        virtual void GetIntArr(int*&Arr, int&QItems);
        virtual void GetBoolArr(bool*&Arr, int&QItems);
        virtual void ToStringArr(QString*&Arr, int&QItems);
        //
        virtual void SetNameN(QString name, int N);
        virtual void SetName1(QString name);
        virtual void SetName2(QString name);
        virtual void SetName3(QString name);
        virtual void SetNames(QString* Arr, int Q);
        virtual QString GetNameN(int N);
        virtual QString GetName();//!
        virtual QString GetName1();
        virtual QString GetName2();
        virtual QString GetName3();
        virtual void GetNames(QString*&Arr, int&QItems);
        virtual int GetLengthOfNamesList();
        //
    };//cl TCellDouble

    class TCellFloat:public TDataCell
    {
        float val;
        //
        public:
        TCellFloat();
        TCellFloat(double val);
        TCellFloat(float val);
        TCellFloat(int val);
        TCellFloat(bool val);
        TCellFloat(QString val);
        //
        TCellFloat(double* val, int Q) ;
        TCellFloat(float* val, int Q);
        TCellFloat(int* val, int Q);
        TCellFloat(bool* val, int Q);
        TCellFloat(QString* val, int Q);
        //
//        TCellFloat(TCellFloat&obj);
//        //
//        TCellFloat& operator =(TCellFloat&obj);
//        //
//        void Assign(TCellFloat&obj);

        //
        virtual void construct(int n=1);
        //
        virtual int GetTypeN();
        virtual int GetActiveN();
        virtual void SetActiveN(int N);
        virtual int GetLength();
        virtual void SetLength(int L);
        //
        virtual double GetDoubleVal();
        virtual float GetFloatVal();
        virtual int GetIntVal();
        virtual bool GetBoolVal();
        virtual QString ToString();
        //
        virtual double GetDoubleValN(int N);
        virtual float GetFloatValN(int N);
        virtual int GetIntValN(int N);
        virtual bool GetBoolValN(int N);
        virtual QString ToStringN(int N);
        //
        virtual void SetByValDouble(double val);
        virtual void SetByValFloat(float val);
        virtual void SetByValInt(int val);
        virtual void SetByValBool(bool val);
        virtual void SetByValString(QString val);
        //
        virtual void SetByValDoubleN(double val, int N);
        virtual void SetByValFloatN(float val, int N);
        virtual void SetByValIntN(int val, int N);
        virtual void SetByValBoolN(bool val, int N);
        virtual void SetByValStringN(QString val, int N);
        //
        virtual void SetVal(double val);
        virtual void SetVal(int val);
        virtual void SetVal(bool val);
        virtual void SetVal(QString val);
        //
        virtual void SetValN(double val, int N);
        virtual void SetValN(int val, int N);
        virtual void SetValN(bool val, int N);
        virtual void SetValN(QString val, int N);
        //
        virtual void SetByArrDouble(double* val, int Q);
        virtual void SetByArrFloat(float*val, int Q);
        virtual void SetByArrInt(int* val, int Q);
        virtual void SetByArrBool(bool* val, int Q);
        virtual void SetByArrString(QString*val, int Q);
        //
        virtual void SetByArr(double* val, int Q);
        virtual void SetByArr(int* val, int Q);
        virtual void SetByArr(bool* val, int Q);
        virtual void SetByArr(QString* val, int Q);
        //
        virtual void AddOrInsDoubleVal(double val, int N);
        virtual void AddOrInsFloatVal(float val, int N);
        virtual void AddOrInsIntVal(int val, int N);
        virtual void AddOrInsBoolVal(bool val, int N);
        virtual void AddOrInsStringVal(QString val, int N);
        //
        virtual void DelValN(int N);
        //
        virtual void GetDoubleArr(double*&Arr,  int&QItems);
        virtual void GetFloatArr(float*&Arr, int&QItems);
        virtual void GetIntArr(int*&Arr, int&QItems);
        virtual void GetBoolArr(bool*&Arr, int&QItems);
        virtual void ToStringArr(QString*&Arr, int&QItems);
        //
        virtual void SetNameN(QString name, int N);
        virtual void SetName1(QString name);
        virtual void SetName2(QString name);
        virtual void SetName3(QString name);
        virtual void SetNames(QString* Arr, int Q);
        virtual QString GetNameN(int N);
        virtual QString GetName1();
        virtual QString GetName2();
        virtual QString GetName3();
        virtual void GetNames(QString*&Arr, int&QItems);
        virtual int GetLengthOfNamesList();
        //

    };//cl TCellFloat


    class TCellInt:public TDataCell
    {
        int val;
        //
        public:
        TCellInt();
        TCellInt(double val);
        TCellInt(float val);
        TCellInt(int val);
        TCellInt(bool val);
        TCellInt(QString val);
        //
        TCellInt(double* val, int Q) ;
        TCellInt(float* val, int Q);
        TCellInt(int* val, int Q);
        TCellInt(bool* val, int Q);
        TCellInt(QString* val, int Q);
        //
//        TCellInt(TCellInt&obj);
//        //
//        TCellInt& operator =(TCellInt&obj);
//        //
//        void Assign(TCellInt&obj);

        //
        virtual void construct(int n=1);
        //
        virtual int GetTypeN();
        virtual int GetActiveN();
        virtual void SetActiveN(int N);
        virtual int GetLength();
        virtual void SetLength(int L);
        //
        virtual double GetDoubleVal();
        virtual float GetFloatVal();
        virtual int GetIntVal();
        virtual bool GetBoolVal();
        virtual QString ToString();
        //
        virtual double GetDoubleValN(int N);
        virtual float GetFloatValN(int N);
        virtual int GetIntValN(int N);
        virtual bool GetBoolValN(int N);
        virtual QString ToStringN(int N);
        //
        virtual void SetByValDouble(double val);
        virtual void SetByValFloat(float val);
        virtual void SetByValInt(int val);
        virtual void SetByValBool(bool val);
        virtual void SetByValString(QString val);
        //
        virtual void SetByValDoubleN(double val, int N);
        virtual void SetByValFloatN(float val, int N);
        virtual void SetByValIntN(int val, int N);
        virtual void SetByValBoolN(bool val, int N);
        virtual void SetByValStringN(QString val, int N);
        //
        virtual void SetVal(double val);
        virtual void SetVal(int val);
        virtual void SetVal(bool val);
        virtual void SetVal(QString val);
        //
        virtual void SetValN(double val, int N);
        virtual void SetValN(int val, int N);
        virtual void SetValN(bool val, int N);
        virtual void SetValN(QString val, int N);
        //
        virtual void SetByArrDouble(double* val, int Q);
        virtual void SetByArrFloat(float*val, int Q);
        virtual void SetByArrInt(int* val, int Q);
        virtual void SetByArrBool(bool* val, int Q);
        virtual void SetByArrString(QString*val, int Q);
        //
        virtual void SetByArr(double* val, int Q);
        virtual void SetByArr(int* val, int Q);
        virtual void SetByArr(bool* val, int Q);
        virtual void SetByArr(QString* val, int Q);
        //
        virtual void AddOrInsDoubleVal(double val, int N);
        virtual void AddOrInsFloatVal(float val, int N);
        virtual void AddOrInsIntVal(int val, int N);
        virtual void AddOrInsBoolVal(bool val, int N);
        virtual void AddOrInsStringVal(QString val, int N);
        //
        virtual void DelValN(int N);
        //
        virtual void GetDoubleArr(double*&Arr,  int&QItems);
        virtual void GetFloatArr(float*&Arr, int&QItems);
        virtual void GetIntArr(int*&Arr, int&QItems);
        virtual void GetBoolArr(bool*&Arr, int&QItems);
        virtual void ToStringArr(QString*&Arr, int&QItems);
        //
        virtual void SetNameN(QString name, int N);
        virtual void SetName1(QString name);
        virtual void SetName2(QString name);
        virtual void SetName3(QString name);
        virtual void SetNames(QString* Arr, int Q);
        virtual QString GetNameN(int N);
        virtual QString GetName1();
        virtual QString GetName2();
        virtual QString GetName3();
        virtual void GetNames(QString*&Arr, int&QItems);
        virtual int GetLengthOfNamesList();
        //

    };//cl TCellInt

    class TCellBool:public TDataCell
    {
        bool val;
        //
        public:
        TCellBool();
        TCellBool(double val);
        TCellBool(float val);
        TCellBool(int val);
        TCellBool(bool val);
        TCellBool(QString val);
        //
        TCellBool(double* val, int Q) ;
        TCellBool(float* val, int Q);
        TCellBool(int* val, int Q);
        TCellBool(bool* val, int Q);
        TCellBool(QString* val, int Q);
        //
//        TCelBool(TCelBool&obj);
//        //
//        TCelBool& operator =(TCelBool&obj);
//        //
//        void Assign(TCelBool&obj);

        //
        virtual void construct(int n=1);
        //
        virtual int GetTypeN();
        virtual int GetActiveN();
        virtual void SetActiveN(int N);
        virtual int GetLength();
        virtual void SetLength(int L);
        //
        virtual double GetDoubleVal();
        virtual float GetFloatVal();
        virtual int GetIntVal();
        virtual bool GetBoolVal();
        virtual QString ToString();
        //
        virtual double GetDoubleValN(int N);
        virtual float GetFloatValN(int N);
        virtual int GetIntValN(int N);
        virtual bool GetBoolValN(int N);
        virtual QString ToStringN(int N);
        //
        virtual void SetByValDouble(double val);
        virtual void SetByValFloat(float val);
        virtual void SetByValInt(int val);
        virtual void SetByValBool(bool val);
        virtual void SetByValString(QString val);
        //
        virtual void SetByValDoubleN(double val, int N);
        virtual void SetByValFloatN(float val, int N);
        virtual void SetByValIntN(int val, int N);
        virtual void SetByValBoolN(bool val, int N);
        virtual void SetByValStringN(QString val, int N);
        //
        virtual void SetVal(double val);
        virtual void SetVal(int val);
        virtual void SetVal(bool val);
        virtual void SetVal(QString val);
        //
        virtual void SetValN(double val, int N);
        virtual void SetValN(int val, int N);
        virtual void SetValN(bool val, int N);
        virtual void SetValN(QString val, int N);
        //
        virtual void SetByArrDouble(double* val, int Q);
        virtual void SetByArrFloat(float*val, int Q);
        virtual void SetByArrInt(int* val, int Q);
        virtual void SetByArrBool(bool* val, int Q);
        virtual void SetByArrString(QString*val, int Q);
        //
        virtual void SetByArr(double* val, int Q);
        virtual void SetByArr(int* val, int Q);
        virtual void SetByArr(bool* val, int Q);
        virtual void SetByArr(QString* val, int Q);
        //
        virtual void AddOrInsDoubleVal(double val, int N);
        virtual void AddOrInsFloatVal(float val, int N);
        virtual void AddOrInsIntVal(int val, int N);
        virtual void AddOrInsBoolVal(bool val, int N);
        virtual void AddOrInsStringVal(QString val, int N);
        //
        virtual void DelValN(int N);
        //
        virtual void GetDoubleArr(double*&Arr,  int&QItems);
        virtual void GetFloatArr(float*&Arr, int&QItems);
        virtual void GetIntArr(int*&Arr, int&QItems);
        virtual void GetBoolArr(bool*&Arr, int&QItems);
        virtual void ToStringArr(QString*&Arr, int&QItems);
        //
        virtual void SetNameN(QString name, int N);
        virtual void SetName1(QString name);
        virtual void SetName2(QString name);
        virtual void SetName3(QString name);
        virtual void SetNames(QString* Arr, int Q);
        virtual QString GetNameN(int N);
        virtual QString GetName1();
        virtual QString GetName2();
        virtual QString GetName3();
        virtual void GetNames(QString*&Arr, int&QItems);
        virtual int GetLengthOfNamesList();
        //

    };//cl TCellBool

    class TCellString:public TDataCell
    {
        QString val;
        //
        public:
        TCellString();
        TCellString(double val);
        TCellString(float val);
        TCellString(int val);
        TCellString(bool val);
        TCellString(QString val);
        //
        TCellString(double* val, int Q) ;
        TCellString(float* val, int Q);
        TCellString(int* val, int Q);
        TCellString(bool* val, int Q);
        TCellString(QString* val, int Q);
        //
//        TCelBool(TCelBool&obj);
//        //
//        TCelBool& operator =(TCelBool&obj);
//        //
//        void Assign(TCelBool&obj);

        //
        virtual void construct(int n=1);
        //
        virtual int GetTypeN();
        virtual int GetActiveN();
        virtual void SetActiveN(int N);
        virtual int GetLength();
        virtual void SetLength(int L);
        //
        virtual double GetDoubleVal();
        virtual float GetFloatVal();
        virtual int GetIntVal();
        virtual bool GetBoolVal();
        virtual QString ToString();
        //
        virtual double GetDoubleValN(int N);
        virtual float GetFloatValN(int N);
        virtual int GetIntValN(int N);
        virtual bool GetBoolValN(int N);
        virtual QString ToStringN(int N);
        //
        virtual void SetByValDouble(double val);
        virtual void SetByValFloat(float val);
        virtual void SetByValInt(int val);
        virtual void SetByValBool(bool val);
        virtual void SetByValString(QString val);
        //
        virtual void SetByValDoubleN(double val, int N);
        virtual void SetByValFloatN(float val, int N);
        virtual void SetByValIntN(int val, int N);
        virtual void SetByValBoolN(bool val, int N);
        virtual void SetByValStringN(QString val, int N);
        //
        virtual void SetVal(double val);
        virtual void SetVal(int val);
        virtual void SetVal(bool val);
        virtual void SetVal(QString val);
        //
        virtual void SetValN(double val, int N);
        virtual void SetValN(int val, int N);
        virtual void SetValN(bool val, int N);
        virtual void SetValN(QString val, int N);
        //
        virtual void SetByArrDouble(double* val, int Q);
        virtual void SetByArrFloat(float*val, int Q);
        virtual void SetByArrInt(int* val, int Q);
        virtual void SetByArrBool(bool* val, int Q);
        virtual void SetByArrString(QString*val, int Q);
        //
        virtual void SetByArr(double* val, int Q);
        virtual void SetByArr(int* val, int Q);
        virtual void SetByArr(bool* val, int Q);
        virtual void SetByArr(QString* val, int Q);
        //
        virtual void AddOrInsDoubleVal(double val, int N);
        virtual void AddOrInsFloatVal(float val, int N);
        virtual void AddOrInsIntVal(int val, int N);
        virtual void AddOrInsBoolVal(bool val, int N);
        virtual void AddOrInsStringVal(QString val, int N);
        //
        virtual void DelValN(int N);
        //
        virtual void GetDoubleArr(double*&Arr,  int&QItems);
        virtual void GetFloatArr(float*&Arr, int&QItems);
        virtual void GetIntArr(int*&Arr, int&QItems);
        virtual void GetBoolArr(bool*&Arr, int&QItems);
        virtual void ToStringArr(QString*&Arr, int&QItems);
        //
        virtual void SetNameN(QString name, int N);
        virtual void SetName1(QString name);
        virtual void SetName2(QString name);
        virtual void SetName3(QString name);
        virtual void SetNames(QString* Arr, int Q);
        virtual QString GetNameN(int N);
        virtual QString GetName1();
        virtual QString GetName2();
        virtual QString GetName3();
        virtual void GetNames(QString*&Arr, int&QItems);
        virtual int GetLengthOfNamesList();
        //

    };//cl TCellString


    class TCellDoubleArr:public TDataCell
    {
        //double val;
        std::vector<double>content;
        int ActiveN, Length;
        //
        public:
        TCellDoubleArr();
        TCellDoubleArr(double val);
        TCellDoubleArr(float val);
        TCellDoubleArr(int val);
        TCellDoubleArr(bool val);
        TCellDoubleArr(QString val);
        //
        TCellDoubleArr(double* val, int Q) ;
        TCellDoubleArr(float* val, int Q);
        TCellDoubleArr(int* val, int Q);
        TCellDoubleArr(bool* val, int Q);
        TCellDoubleArr(QString* val, int Q);
        //
//        TCellDoubleArr(TCellDoubleArr&obj);
//        //
//        TCellDoubleArr& operator =(TCellDoubleArr&obj);
//        //
//        void Assign(TCellDoubleArr&obj);

        //
        virtual void construct(int n=1);
        //
        virtual int GetTypeN();
        virtual int GetActiveN();
        virtual void SetActiveN(int N);
        virtual int GetLength();
        virtual void SetLength(int L);
        //
        virtual double GetDoubleVal();
        virtual float GetFloatVal();
        virtual int GetIntVal();
        virtual bool GetBoolVal();
        virtual QString ToString();
        //
        virtual double GetDoubleValN(int N);
        virtual float GetFloatValN(int N);
        virtual int GetIntValN(int N);
        virtual bool GetBoolValN(int N);
        virtual QString ToStringN(int N);
        //
        virtual void SetByValDouble(double val);
        virtual void SetByValFloat(float val);
        virtual void SetByValInt(int val);
        virtual void SetByValBool(bool val);
        virtual void SetByValString(QString val);
        //
        virtual void SetByValDoubleN(double val, int N);
        virtual void SetByValFloatN(float val, int N);
        virtual void SetByValIntN(int val, int N);
        virtual void SetByValBoolN(bool val, int N);
        virtual void SetByValStringN(QString val, int N);
        //
        virtual void SetVal(double val);
        virtual void SetVal(int val);
        virtual void SetVal(bool val);
        virtual void SetVal(QString val);
        //
        virtual void SetValN(double val, int N);
        virtual void SetValN(int val, int N);
        virtual void SetValN(bool val, int N);
        virtual void SetValN(QString val, int N);
        //
        virtual void SetByArrDouble(double* val, int Q);
        virtual void SetByArrFloat(float*val, int Q);
        virtual void SetByArrInt(int* val, int Q);
        virtual void SetByArrBool(bool* val, int Q);
        virtual void SetByArrString(QString*val, int Q);
        //
        virtual void SetByArr(double* val, int Q);
        virtual void SetByArr(int* val, int Q);
        virtual void SetByArr(bool* val, int Q);
        virtual void SetByArr(QString* val, int Q);
        //
        virtual void AddOrInsDoubleVal(double val, int N);
        virtual void AddOrInsFloatVal(float val, int N);
        virtual void AddOrInsIntVal(int val, int N);
        virtual void AddOrInsBoolVal(bool val, int N);
        virtual void AddOrInsStringVal(QString val, int N);
        //
        virtual void DelValN(int N);
        //
        virtual void GetDoubleArr(double*&Arr,  int&QItems);
        virtual void GetFloatArr(float*&Arr, int&QItems);
        virtual void GetIntArr(int*&Arr, int&QItems);
        virtual void GetBoolArr(bool*&Arr, int&QItems);
        virtual void ToStringArr(QString*&Arr, int&QItems);
        //
        virtual void SetNameN(QString name, int N);
        virtual void SetName1(QString name);
        virtual void SetName2(QString name);
        virtual void SetName3(QString name);
        virtual void SetNames(QString* Arr, int Q);
        virtual QString GetNameN(int N);
        virtual QString GetName1();
        virtual QString GetName2();
        virtual QString GetName3();
        virtual void GetNames(QString*&Arr, int&QItems);
        virtual int GetLengthOfNamesList();
        //
    };//cl TCellDoubleArr



    class TCellFloatArr:public TDataCell
    {
        //double val;
        std::vector<float>content;
        int ActiveN, Length;
        //
        public:
        TCellFloatArr();
        TCellFloatArr(double val);
        TCellFloatArr(float val);
        TCellFloatArr(int val);
        TCellFloatArr(bool val);
        TCellFloatArr(QString val);
        //
        TCellFloatArr(double* val, int Q) ;
        TCellFloatArr(float* val, int Q);
        TCellFloatArr(int* val, int Q);
        TCellFloatArr(bool* val, int Q);
        TCellFloatArr(QString* val, int Q);
        //
//        TCellFloatArr(TCellFloatArr&obj);
//        //
//        TCellFloatArr& operator =(TCellFloatArr&obj);
//        //
//        void Assign(TCellFloatArr&obj);

        //
        virtual void construct(int n=1);
        //
        virtual int GetTypeN();
        virtual int GetActiveN();
        virtual void SetActiveN(int N);
        virtual int GetLength();
        virtual void SetLength(int L);
        //
        virtual double GetDoubleVal();
        virtual float GetFloatVal();
        virtual int GetIntVal();
        virtual bool GetBoolVal();
        virtual QString ToString();
        //
        virtual double GetDoubleValN(int N);
        virtual float GetFloatValN(int N);
        virtual int GetIntValN(int N);
        virtual bool GetBoolValN(int N);
        virtual QString ToStringN(int N);
        //
        virtual void SetByValDouble(double val);
        virtual void SetByValFloat(float val);
        virtual void SetByValInt(int val);
        virtual void SetByValBool(bool val);
        virtual void SetByValString(QString val);
        //
        virtual void SetByValDoubleN(double val, int N);
        virtual void SetByValFloatN(float val, int N);
        virtual void SetByValIntN(int val, int N);
        virtual void SetByValBoolN(bool val, int N);
        virtual void SetByValStringN(QString val, int N);
        //
        virtual void SetVal(double val);
        virtual void SetVal(int val);
        virtual void SetVal(bool val);
        virtual void SetVal(QString val);
        //
        virtual void SetValN(double val, int N);
        virtual void SetValN(int val, int N);
        virtual void SetValN(bool val, int N);
        virtual void SetValN(QString val, int N);
        //
        virtual void SetByArrDouble(double* val, int Q);
        virtual void SetByArrFloat(float*val, int Q);
        virtual void SetByArrInt(int* val, int Q);
        virtual void SetByArrBool(bool* val, int Q);
        virtual void SetByArrString(QString*val, int Q);
        //
        virtual void SetByArr(double* val, int Q);
        virtual void SetByArr(int* val, int Q);
        virtual void SetByArr(bool* val, int Q);
        virtual void SetByArr(QString* val, int Q);
        //
        virtual void AddOrInsDoubleVal(double val, int N);
        virtual void AddOrInsFloatVal(float val, int N);
        virtual void AddOrInsIntVal(int val, int N);
        virtual void AddOrInsBoolVal(bool val, int N);
        virtual void AddOrInsStringVal(QString val, int N);
        //
        virtual void DelValN(int N);
        //
        virtual void GetDoubleArr(double*&Arr,  int&QItems);
        virtual void GetFloatArr(float*&Arr, int&QItems);
        virtual void GetIntArr(int*&Arr, int&QItems);
        virtual void GetBoolArr(bool*&Arr, int&QItems);
        virtual void ToStringArr(QString*&Arr, int&QItems);
        //
        virtual void SetNameN(QString name, int N);
        virtual void SetName1(QString name);
        virtual void SetName2(QString name);
        virtual void SetName3(QString name);
        virtual void SetNames(QString* Arr, int Q);
        virtual QString GetNameN(int N);
        virtual QString GetName1();
        virtual QString GetName2();
        virtual QString GetName3();
        virtual void GetNames(QString*&Arr, int&QItems);
        virtual int GetLengthOfNamesList();
        //
    };//cl TCellFloatArr

    class TCellIntArr:public TDataCell
    {
        //double val;
        std::vector<int>content;
        int ActiveN, Length;
        //
        public:
        TCellIntArr();
        TCellIntArr(double val);
        TCellIntArr(float val);
        TCellIntArr(int val);
        TCellIntArr(bool val);
        TCellIntArr(QString val);
        //
        TCellIntArr(double* val, int Q) ;
        TCellIntArr(float* val, int Q);
        TCellIntArr(int* val, int Q);
        TCellIntArr(bool* val, int Q);
        TCellIntArr(QString* val, int Q);
        //
//        TCellIntArr(TCellIntArr&obj);
//        //
//        TCellIntArr& operator =(TCellIntArr&obj);
//        //
//        void Assign(TCellIntArr&obj);

        //
        virtual void construct(int n=1);
        //
        virtual int GetTypeN();
        virtual int GetActiveN();
        virtual void SetActiveN(int N);
        virtual int GetLength();
        virtual void SetLength(int L);
        //
        virtual double GetDoubleVal();
        virtual float GetFloatVal();
        virtual int GetIntVal();
        virtual bool GetBoolVal();
        virtual QString ToString();
        //
        virtual double GetDoubleValN(int N);
        virtual float GetFloatValN(int N);
        virtual int GetIntValN(int N);
        virtual bool GetBoolValN(int N);
        virtual QString ToStringN(int N);
        //
        virtual void SetByValDouble(double val);
        virtual void SetByValFloat(float val);
        virtual void SetByValInt(int val);
        virtual void SetByValBool(bool val);
        virtual void SetByValString(QString val);
        //
        virtual void SetByValDoubleN(double val, int N);
        virtual void SetByValFloatN(float val, int N);
        virtual void SetByValIntN(int val, int N);
        virtual void SetByValBoolN(bool val, int N);
        virtual void SetByValStringN(QString val, int N);
        //
        virtual void SetVal(double val);
        virtual void SetVal(int val);
        virtual void SetVal(bool val);
        virtual void SetVal(QString val);
        //
        virtual void SetValN(double val, int N);
        virtual void SetValN(int val, int N);
        virtual void SetValN(bool val, int N);
        virtual void SetValN(QString val, int N);
        //
        virtual void SetByArrDouble(double* val, int Q);
        virtual void SetByArrFloat(float*val, int Q);
        virtual void SetByArrInt(int* val, int Q);
        virtual void SetByArrBool(bool* val, int Q);
        virtual void SetByArrString(QString*val, int Q);
        //
        virtual void SetByArr(double* val, int Q);
        virtual void SetByArr(int* val, int Q);
        virtual void SetByArr(bool* val, int Q);
        virtual void SetByArr(QString* val, int Q);
        //
        virtual void AddOrInsDoubleVal(double val, int N);
        virtual void AddOrInsFloatVal(float val, int N);
        virtual void AddOrInsIntVal(int val, int N);
        virtual void AddOrInsBoolVal(bool val, int N);
        virtual void AddOrInsStringVal(QString val, int N);
        //
        virtual void DelValN(int N);
        //
        virtual void GetDoubleArr(double*&Arr,  int&QItems);
        virtual void GetFloatArr(float*&Arr, int&QItems);
        virtual void GetIntArr(int*&Arr, int&QItems);
        virtual void GetBoolArr(bool*&Arr, int&QItems);
        virtual void ToStringArr(QString*&Arr, int&QItems);
        //
        virtual void SetNameN(QString name, int N);
        virtual void SetName1(QString name);
        virtual void SetName2(QString name);
        virtual void SetName3(QString name);
        virtual void SetNames(QString* Arr, int Q);
        virtual QString GetNameN(int N);
        virtual QString GetName1();
        virtual QString GetName2();
        virtual QString GetName3();
        virtual void GetNames(QString*&Arr, int&QItems);
        virtual int GetLengthOfNamesList();
        //
    };//cl TCellIntArr

    class TCellBoolArr:public TDataCell
    {
        //double val;
        std::vector<bool>content;
        int ActiveN, Length;
        //
        public:
        TCellBoolArr();
        TCellBoolArr(double val);
        TCellBoolArr(float val);
        TCellBoolArr(int val);
        TCellBoolArr(bool val);
        TCellBoolArr(QString val);
        //
        TCellBoolArr(double* val, int Q) ;
        TCellBoolArr(float* val, int Q);
        TCellBoolArr(int* val, int Q);
        TCellBoolArr(bool* val, int Q);
        TCellBoolArr(QString* val, int Q);
        //
//        TCellBoolArr(TCellBoolArr&obj);
//        //
//        TCellBoolArr& operator =(TCellBoolArr&obj);
//        //
//        void Assign(TCellBoolArr&obj);

        //
        virtual void construct(int n=1);
        //
        virtual int GetTypeN();
        virtual int GetActiveN();
        virtual void SetActiveN(int N);
        virtual int GetLength();
        virtual void SetLength(int L);
        //
        virtual double GetDoubleVal();
        virtual float GetFloatVal();
        virtual int GetIntVal();
        virtual bool GetBoolVal();
        virtual QString ToString();
        //
        virtual double GetDoubleValN(int N);
        virtual float GetFloatValN(int N);
        virtual int GetIntValN(int N);
        virtual bool GetBoolValN(int N);
        virtual QString ToStringN(int N);
        //
        virtual void SetByValDouble(double val);
        virtual void SetByValFloat(float val);
        virtual void SetByValInt(int val);
        virtual void SetByValBool(bool val);
        virtual void SetByValString(QString val);
        //
        virtual void SetByValDoubleN(double val, int N);
        virtual void SetByValFloatN(float val, int N);
        virtual void SetByValIntN(int val, int N);
        virtual void SetByValBoolN(bool val, int N);
        virtual void SetByValStringN(QString val, int N);
        //
        virtual void SetVal(double val);
        virtual void SetVal(int val);
        virtual void SetVal(bool val);
        virtual void SetVal(QString val);
        //
        virtual void SetValN(double val, int N);
        virtual void SetValN(int val, int N);
        virtual void SetValN(bool val, int N);
        virtual void SetValN(QString val, int N);
        //
        virtual void SetByArrDouble(double* val, int Q);
        virtual void SetByArrFloat(float*val, int Q);
        virtual void SetByArrInt(int* val, int Q);
        virtual void SetByArrBool(bool* val, int Q);
        virtual void SetByArrString(QString*val, int Q);
        //
        virtual void SetByArr(double* val, int Q);
        virtual void SetByArr(int* val, int Q);
        virtual void SetByArr(bool* val, int Q);
        virtual void SetByArr(QString* val, int Q);
        //
        virtual void AddOrInsDoubleVal(double val, int N);
        virtual void AddOrInsFloatVal(float val, int N);
        virtual void AddOrInsIntVal(int val, int N);
        virtual void AddOrInsBoolVal(bool val, int N);
        virtual void AddOrInsStringVal(QString val, int N);
        //
        virtual void DelValN(int N);
        //
        virtual void GetDoubleArr(double*&Arr,  int&QItems);
        virtual void GetFloatArr(float*&Arr, int&QItems);
        virtual void GetIntArr(int*&Arr, int&QItems);
        virtual void GetBoolArr(bool*&Arr, int&QItems);
        virtual void ToStringArr(QString*&Arr, int&QItems);
        //
        virtual void SetNameN(QString name, int N);
        virtual void SetName1(QString name);
        virtual void SetName2(QString name);
        virtual void SetName3(QString name);
        virtual void SetNames(QString* Arr, int Q);
        virtual QString GetNameN(int N);
        virtual QString GetName1();
        virtual QString GetName2();
        virtual QString GetName3();
        virtual void GetNames(QString*&Arr, int&QItems);
        virtual int GetLengthOfNamesList();
        //
    };//cl TCellBoolArr


    class TCellStringArr:public TDataCell
    {
        //double val;
        std::vector<QString>content;
        int ActiveN, Length;
        //
        public:
        TCellStringArr();
        TCellStringArr(double val);
        TCellStringArr(float val);
        TCellStringArr(int val);
        TCellStringArr(bool val);
        TCellStringArr(QString val);
        //
        TCellStringArr(double* val, int Q) ;
        TCellStringArr(float* val, int Q);
        TCellStringArr(int* val, int Q);
        TCellStringArr(bool* val, int Q);
        TCellStringArr(QString* val, int Q);
        //
//        TCellStringArr(TCellStringArr&obj);
//        //
//        TCellStringArr& operator =(TCellStringArr&obj);
//        //
//        void Assign(TCellStringArr&obj);

        //
        virtual void construct(int n=1);
        //
        virtual int GetTypeN();
        virtual int GetActiveN();
        virtual void SetActiveN(int N);
        virtual int GetLength();
        virtual void SetLength(int L);
        //
        virtual double GetDoubleVal();
        virtual float GetFloatVal();
        virtual int GetIntVal();
        virtual bool GetBoolVal();
        virtual QString ToString();
        //
        virtual double GetDoubleValN(int N);
        virtual float GetFloatValN(int N);
        virtual int GetIntValN(int N);
        virtual bool GetBoolValN(int N);
        virtual QString ToStringN(int N);
        //
        virtual void SetByValDouble(double val);
        virtual void SetByValFloat(float val);
        virtual void SetByValInt(int val);
        virtual void SetByValBool(bool val);
        virtual void SetByValString(QString val);
        //
        virtual void SetByValDoubleN(double val, int N);
        virtual void SetByValFloatN(float val, int N);
        virtual void SetByValIntN(int val, int N);
        virtual void SetByValBoolN(bool val, int N);
        virtual void SetByValStringN(QString val, int N);
        //
        virtual void SetVal(double val);
        virtual void SetVal(int val);
        virtual void SetVal(bool val);
        virtual void SetVal(QString val);
        //
        virtual void SetValN(double val, int N);
        virtual void SetValN(int val, int N);
        virtual void SetValN(bool val, int N);
        virtual void SetValN(QString val, int N);
        //
        virtual void SetByArrDouble(double* val, int Q);
        virtual void SetByArrFloat(float*val, int Q);
        virtual void SetByArrInt(int* val, int Q);
        virtual void SetByArrBool(bool* val, int Q);
        virtual void SetByArrString(QString*val, int Q);
        //
        virtual void SetByArr(double* val, int Q);
        virtual void SetByArr(int* val, int Q);
        virtual void SetByArr(bool* val, int Q);
        virtual void SetByArr(QString* val, int Q);
        //
        virtual void AddOrInsDoubleVal(double val, int N);
        virtual void AddOrInsFloatVal(float val, int N);
        virtual void AddOrInsIntVal(int val, int N);
        virtual void AddOrInsBoolVal(bool val, int N);
        virtual void AddOrInsStringVal(QString val, int N);
        //
        virtual void DelValN(int N);
        //
        virtual void GetDoubleArr(double*&Arr,  int&QItems);
        virtual void GetFloatArr(float*&Arr, int&QItems);
        virtual void GetIntArr(int*&Arr, int&QItems);
        virtual void GetBoolArr(bool*&Arr, int&QItems);
        virtual void ToStringArr(QString*&Arr, int&QItems);
        //
        virtual void SetNameN(QString name, int N);
        virtual void SetName1(QString name);
        virtual void SetName2(QString name);
        virtual void SetName3(QString name);
        virtual void SetNames(QString* Arr, int Q);
        virtual QString GetNameN(int N);
        virtual QString GetName1();
        virtual QString GetName2();
        virtual QString GetName3();
        virtual void GetNames(QString*&Arr, int&QItems);
        virtual int GetLengthOfNamesList();
        //
    };//cl TCellStringArr


    class TDBCOlHeader_Items_Double:public TDataCell
    {
        //double val;
        std::vector<double>content;
        std::vector<QString>names;
        int ActiveN_ByDefault, LengthOfItemsSet, LengthOfNamesSet;
        //
        public:
        TDBCOlHeader_Items_Double();
        //TDBCOlHeader_Items_Double(double val);
        //TDBCOlHeader_Items_Double(float val);
        //TDBCOlHeader_Items_Double(int val);
        //TDBCOlHeader_Items_Double(bool val);
        //TDBCOlHeader_Items_Double(QString val);
        //
        TDBCOlHeader_Items_Double(double* val, int Q) ;
        //TDBCOlHeader_Items_Double(float* val, int Q);
        //TDBCOlHeader_Items_Double(int* val, int Q);
        //TDBCOlHeader_Items_Double(bool* val, int Q);
        //TDBCOlHeader_Items_Double(QString* val, int Q);
        //
        TDBCOlHeader_Items_Double(double* val, int QItems, QString* name, int QNames);
        //
        //   TCellDoubleArr(TCellDoubleArr&obj);
        //   //
        //   TCellDoubleArr& operator =(TCellDoubleArr&obj);
        //   //
        //   void Assign(TCellDoubleArr&obj);
        //
        virtual void construct(int n=1);
        //
        virtual int GetTypeN();
        virtual int GetActiveN();
        virtual void SetActiveN(int N);
        virtual int GetLength();
        virtual void SetLength(int L);
        //
        virtual double GetDoubleVal();
        virtual float GetFloatVal();
        virtual int GetIntVal();
        virtual bool GetBoolVal();
        virtual QString ToString();
        //
        virtual double GetDoubleValN(int N);
        virtual float GetFloatValN(int N);
        virtual int GetIntValN(int N);
        virtual bool GetBoolValN(int N);
        virtual QString ToStringN(int N);
        //
        virtual void SetByValDouble(double val);
        virtual void SetByValFloat(float val);
        virtual void SetByValInt(int val);
        virtual void SetByValBool(bool val);
        virtual void SetByValString(QString val);
        //
        virtual void SetByValDoubleN(double val, int N);
        virtual void SetByValFloatN(float val, int N);
        virtual void SetByValIntN(int val, int N);
        virtual void SetByValBoolN(bool val, int N);
        virtual void SetByValStringN(QString val, int N);
        //
        virtual void SetVal(double val);
        virtual void SetVal(int val);
        virtual void SetVal(bool val);
        virtual void SetVal(QString val);
        //
        virtual void SetValN(double val, int N);
        virtual void SetValN(int val, int N);
        virtual void SetValN(bool val, int N);
        virtual void SetValN(QString val, int N);
        //
        virtual void SetByArrDouble(double* val, int Q);
        virtual void SetByArrFloat(float*val, int Q);
        virtual void SetByArrInt(int* val, int Q);
        virtual void SetByArrBool(bool* val, int Q);
        virtual void SetByArrString(QString*val, int Q);
        //
        virtual void SetByArr(double* val, int Q);
        virtual void SetByArr(int* val, int Q);
        virtual void SetByArr(bool* val, int Q);
        virtual void SetByArr(QString* val, int Q);
        //
        virtual void AddOrInsDoubleVal(double val, int N);
        virtual void AddOrInsFloatVal(float val, int N);
        virtual void AddOrInsIntVal(int val, int N);
        virtual void AddOrInsBoolVal(bool val, int N);
        virtual void AddOrInsStringVal(QString val, int N);
        //
        virtual void DelValN(int N);
        //
        virtual void GetDoubleArr(double*&Arr,  int&QItems);
        virtual void GetFloatArr(float*&Arr, int&QItems);
        virtual void GetIntArr(int*&Arr, int&QItems);
        virtual void GetBoolArr(bool*&Arr, int&QItems);
        virtual void ToStringArr(QString*&Arr, int&QItems);
        //
        virtual void SetNameN(QString name, int N);
        virtual void SetName1(QString name);
        virtual void SetName2(QString name);
        virtual void SetName3(QString name);
        virtual void SetNames(QString* Arr, int Q);
        virtual QString GetNameN(int N);
        virtual QString GetName1();
        virtual QString GetName2();
        virtual QString GetName3();
        virtual void GetNames(QString*&Arr, int&QItems);
        virtual int GetLengthOfNamesList();
        //
    };//cl TDBCOlHeader_Items_Double

class TDBCOlHeader_Items_Int:public TDataCell
{
    //double val;
    std::vector<int>content;
    std::vector<QString>names;
    int ActiveN_ByDefault, LengthOfItemsSet, LengthOfNamesSet;
    //
    public:
    TDBCOlHeader_Items_Int();
    //TDBCOlHeader_Items_Int(double val);
    //TDBCOlHeader_Items_Int(float val);
    //TDBCOlHeader_Items_Int(int val);
    //TDBCOlHeader_Items_Int(bool val);
    //TDBCOlHeader_Items_Int(QString val);
    //
    //TDBCOlHeader_Items_Int(double* val, int Q) ;
    //TDBCOlHeader_Items_Int(float* val, int Q);
    TDBCOlHeader_Items_Int(int* val, int Q);
    //TDBCOlHeader_Items_Int(bool* val, int Q);
    //TDBCOlHeader_Items_Int(QString* val, int Q);
    //
    TDBCOlHeader_Items_Int(int* val, int QItems, QString* name, int QNames);
    //
    //   TCellDoubleArr(TCellDoubleArr&obj);
    //   //
    //   TCellDoubleArr& operator =(TCellDoubleArr&obj);
    //   //
    //   void Assign(TCellDoubleArr&obj);
    //
    virtual void construct(int n=1);
    //
    virtual int GetTypeN();
    virtual int GetActiveN();
    virtual void SetActiveN(int N);
    virtual int GetLength();
    virtual void SetLength(int L);
    //
    virtual double GetDoubleVal();
    virtual float GetFloatVal();
    virtual int GetIntVal();
    virtual bool GetBoolVal();
    virtual QString ToString();
    //
    virtual double GetDoubleValN(int N);
    virtual float GetFloatValN(int N);
    virtual int GetIntValN(int N);
    virtual bool GetBoolValN(int N);
    virtual QString ToStringN(int N);
    //
    virtual void SetByValDouble(double val);
    virtual void SetByValFloat(float val);
    virtual void SetByValInt(int val);
    virtual void SetByValBool(bool val);
    virtual void SetByValString(QString val);
    //
    virtual void SetByValDoubleN(double val, int N);
    virtual void SetByValFloatN(float val, int N);
    virtual void SetByValIntN(int val, int N);
    virtual void SetByValBoolN(bool val, int N);
    virtual void SetByValStringN(QString val, int N);
    //
    virtual void SetVal(double val);
    virtual void SetVal(int val);
    virtual void SetVal(bool val);
    virtual void SetVal(QString val);
    //
    virtual void SetValN(double val, int N);
    virtual void SetValN(int val, int N);
    virtual void SetValN(bool val, int N);
    virtual void SetValN(QString val, int N);
    //
    virtual void SetByArrDouble(double* val, int Q);
    virtual void SetByArrFloat(float*val, int Q);
    virtual void SetByArrInt(int* val, int Q);
    virtual void SetByArrBool(bool* val, int Q);
    virtual void SetByArrString(QString*val, int Q);
    //
    virtual void SetByArr(double* val, int Q);
    virtual void SetByArr(int* val, int Q);
    virtual void SetByArr(bool* val, int Q);
    virtual void SetByArr(QString* val, int Q);
    //
    virtual void AddOrInsDoubleVal(double val, int N);
    virtual void AddOrInsFloatVal(float val, int N);
    virtual void AddOrInsIntVal(int val, int N);
    virtual void AddOrInsBoolVal(bool val, int N);
    virtual void AddOrInsStringVal(QString val, int N);
    //
    virtual void DelValN(int N);
    //
    virtual void GetDoubleArr(double*&Arr,  int&QItems);
    virtual void GetFloatArr(float*&Arr, int&QItems);
    virtual void GetIntArr(int*&Arr, int&QItems);
    virtual void GetBoolArr(bool*&Arr, int&QItems);
    virtual void ToStringArr(QString*&Arr, int&QItems);
    //
    virtual void SetNameN(QString name, int N);
    virtual void SetName1(QString name);
    virtual void SetName2(QString name);
    virtual void SetName3(QString name);
    virtual void SetNames(QString* Arr, int Q);
    virtual QString GetNameN(int N);
    virtual QString GetName1();
    virtual QString GetName2();
    virtual QString GetName3();
    virtual void GetNames(QString*&Arr, int&QItems);
    virtual int GetLengthOfNamesList();
    //
};//cl TDBCOlHeader_Items_Int

class TDBCOlHeader_Items_String:public TDataCell
{
    //double val;
    std::vector<QString>content;
    std::vector<QString>names;
    int ActiveN_ByDefault, LengthOfItemsSet, LengthOfNamesSet;
    //
    public:
    TDBCOlHeader_Items_String();
    //TDBCOlHeader_Items_String(double val);
    //TDBCOlHeader_Items_String(float val);
    //TDBCOlHeader_Items_String(int val);
    //TDBCOlHeader_Items_String(bool val);
    //TDBCOlHeader_Items_String(QString val);
    //
    //TDBCOlHeader_Items_String(double* val, int Q) ;
    //TDBCOlHeader_Items_String(float* val, int Q);
    //TDBCOlHeader_Items_String(int* val, int Q);
    //TDBCOlHeader_Items_String(bool* val, int Q);
    TDBCOlHeader_Items_String(QString* val, int Q);
    //
    TDBCOlHeader_Items_String(QString* val, int QVals, QString* name, int QNames);
    //
    //   TCellDoubleArr(TCellDoubleArr&obj);
    //   //
    //   TCellDoubleArr& operator =(TCellDoubleArr&obj);
    //   //
    //   void Assign(TCellDoubleArr&obj);
    //
    virtual void construct(int n=1);
    //
    virtual int GetTypeN();
    virtual int GetActiveN();
    virtual void SetActiveN(int N);
    virtual int GetLength();
    virtual void SetLength(int L);
    //
    virtual double GetDoubleVal();
    virtual float GetFloatVal();
    virtual int GetIntVal();
    virtual bool GetBoolVal();
    virtual QString ToString();
    //
    virtual double GetDoubleValN(int N);
    virtual float GetFloatValN(int N);
    virtual int GetIntValN(int N);
    virtual bool GetBoolValN(int N);
    virtual QString ToStringN(int N);
    //
    virtual void SetByValDouble(double val);
    virtual void SetByValFloat(float val);
    virtual void SetByValInt(int val);
    virtual void SetByValBool(bool val);
    virtual void SetByValString(QString val);
    //
    virtual void SetByValDoubleN(double val, int N);
    virtual void SetByValFloatN(float val, int N);
    virtual void SetByValIntN(int val, int N);
    virtual void SetByValBoolN(bool val, int N);
    virtual void SetByValStringN(QString val, int N);
    //
    virtual void SetVal(double val);
    virtual void SetVal(int val);
    virtual void SetVal(bool val);
    virtual void SetVal(QString val);
    //
    virtual void SetValN(double val, int N);
    virtual void SetValN(int val, int N);
    virtual void SetValN(bool val, int N);
    virtual void SetValN(QString val, int N);
    //
    virtual void SetByArrDouble(double* val, int Q);
    virtual void SetByArrFloat(float*val, int Q);
    virtual void SetByArrInt(int* val, int Q);
    virtual void SetByArrBool(bool* val, int Q);
    virtual void SetByArrString(QString*val, int Q);
    //
    virtual void SetByArr(double* val, int Q);
    virtual void SetByArr(int* val, int Q);
    virtual void SetByArr(bool* val, int Q);
    virtual void SetByArr(QString* val, int Q);
    //
    virtual void AddOrInsDoubleVal(double val, int N);
    virtual void AddOrInsFloatVal(float val, int N);
    virtual void AddOrInsIntVal(int val, int N);
    virtual void AddOrInsBoolVal(bool val, int N);
    virtual void AddOrInsStringVal(QString val, int N);
    //
    virtual void DelValN(int N);
    //
    virtual void GetDoubleArr(double*&Arr,  int&QItems);
    virtual void GetFloatArr(float*&Arr, int&QItems);
    virtual void GetIntArr(int*&Arr, int&QItems);
    virtual void GetBoolArr(bool*&Arr, int&QItems);
    virtual void ToStringArr(QString*&Arr, int&QItems);
    //
    virtual void SetNameN(QString name, int N);
    virtual void SetName1(QString name);
    virtual void SetName2(QString name);
    virtual void SetName3(QString name);
    virtual void SetNames(QString* Arr, int Q);
    virtual QString GetNameN(int N);
    virtual QString GetName1();
    virtual QString GetName2();
    virtual QString GetName3();
    virtual void GetNames(QString*&Arr, int&QItems);
    virtual int GetLengthOfNamesList();
    //
};//cl TDBCOlHeader_Items_String


    class DataCell
    {
        //TDataCell* cell;
        public:
        TDataCell* cell;
        //
        DataCell();
        //
        DataCell(double val);
        DataCell(float val);
        DataCell(int val);
        DataCell(bool val);
        DataCell(QString val);
        DataCell(double* arr, int Length);
        DataCell(float* arr, int Length);
        DataCell(int* arr, int Length);
        DataCell(bool* arr, int Length);
        DataCell(QString* arr, int Length);
        DataCell(int val, bool ConstNotVar);
        DataCell(int TypeN, int N);
        //DataCell(DataCellTypeInfo TypeInf);
        //DataCell(TypeCell TypeInf);
        DataCell(TypeCell *TypeInf);
        //
        void SetDefault0();
        //
        TDataCell* GetCell();
        //DataCell GetCell();
            //
        //DataCellTypeInfo GetTypeInfo();
        //TypeCell GetTypeInfo();
        TypeCell* GetTypeInfo();
        //void SetTypeAndDefaultValByTypeInf(DataCellTypeInfo TypeInf, bool PreserveVal=false);
        void SetTypeAndDefaultValByTypeInf(TypeCell *TypeInf, bool PreserveVal=false);
        //
        double GetDoubleVal();
        float GetFloatVal();
        int GetIntVal();
        bool GetBoolVal();
        QString ToString();
        //
        void GetDoubleArr(double*&vals, int&count);
        void GetFloatArr(float*&vals, int&count);
        void GetIntArr(int*&vals, int&count);
        void GetBoolArr(bool*&vals, int&count);
        void ToStringArr(QString*&vals, int&count);
        //
        double GetDoubleValN(int N);
        float GetFloatValN(int N);
        int GetIntValN(int N);
        bool GetBoolValN(int N);
        QString ToStringN(int N);
        //
        void SetVal(double val);
        void SetVal(int val);
        void SetVal(bool val);
        void SetVal(QString val);
        //
        void SetValN(double val, int N);
        void SetValN(float val, int N);
        void SetValN(int val, int N);
        void SetValN(bool val, int N);
        void SetValN(QString val, int N);
        //
        int GetTypeN();
        int GetLength();
        int GetActiveN();
        //
        void SetActiveN(int N);
        void SetLength(int Length);
        //
        void SetTypeN(int TypeN, TableCellAccessConfiguration *cfg;)
        //
        void DelValN(int N);
        //
        void AddOrInsDoubleVal(double val, int N);
        void AddOrInsFloatVal(float val, int N);
        void AddOrInsIntVal(int val, int N);
        void AddOrInsBoolVal(bool val, int N);
        void AddOrInsStringVal(QString val, int N);
        //
        void Assign(double val);
        void Assign(float val);
        void Assign(int val);
        void Assign(bool val);
        void Assign(QString val);
        void Assign(double val, int N);
        void Assign(float val, int N);
        void Assign(int val, int N);
        void Assign(bool val, int N);
        void Assign(QString val, int N);
        void Assign(double* val, int count);
        void Assign(float* val, int count);
        void Assign(int* val, int count);
        void Assign(bool* val, int count);
        void Assign(QString* val, int count);
        void Assign(double* val, int count, QString name1, QString name2, QString name3);
        void Assign(QString* val, int count, QString name1, QString name2, QString name3);
        void Assign(double* val, int countItems, QString* names, int countNames);
        void Assign(float* val, int countItems, QString* names, int countNames);
        void Assign(int* val, int countItems, QString* names, int countNames);
        void Assign(QString* val, int countItems, QString* names, int countNames);
        void Assign(TDataCell* obj);
        void Assign(DataCell obj);
        void AssignBy(TDataCell* CellFrom);
        void AssignBy(DataCell obj);

            /*
            //mark34-2
        class DataCell
        {
            TDataCell cell;
            DataCell() {
                cell = null;
                SetDefault0();
            }
            //
            DataCell(double val)
            {
                cell = null;
                SetDefault0();
                SetValAndTypeDouble(val);
            }
            DataCell(float val)
            {
                cell = null;
                SetDefault0();
                SetValAndTypeFloat(val);
            }
            DataCell(int val)
            {
                cell = null;
                SetDefault0();
                SetValAndTypeInt(val);
            }
            DataCell(bool val)
            {
                cell = null;
                SetDefault0();
                SetValAndTypeBool(val);
            }
            DataCell(string val)
            {
                cell = null;
                SetDefault0();
                SetValAndTypeString(val);
            }
            DataCell(double[] arr, int Length)
            {
                cell = null;
                SetDefault0();
                SetArrAndTypeDouble(arr, Length);
            }
            DataCell(float[] arr, int Length)
            {
                cell = null;
                SetDefault0();
                SetArrAndTypeFloat(arr, Length);
            }
            DataCell(int[] arr, int Length)
            {
                cell = null;
                SetDefault0();
                SetArrAndTypeInt(arr, Length);
            }
            DataCell(bool[] arr, int Length)
            {
                cell = null;
                SetDefault0();
                SetArrAndTypeBool(arr, Length);
            }
            DataCell(string[] arr, int Length)
            {
                cell = null;
                SetDefault0();
                SetArrAndTypeString(arr, Length);
            }
            DataCell(int val, bool ConstNotVar)
            {
                cell = null;
                SetDefault0();
                if (ConstNotVar)
                {
                cell = new TCellUniqueNumKeeper(val);
                }
                else
                {
                SetValAndTypeInt(val);
                }
            }
            DataCell(int TypeN, int N)
            {
                double DoubleVal = 0;
                float FloatVal = 0;
                int IntVal = 0;
                bool BoolVal = MyLib.BoolValByDefault;
                string StringVal = "";
                double []DoubleArr = null;
                float[] FloatArr = null;
                int[] IntArr = null;
                bool[] BoolArr = null;
                string[] StringArr = null;
                cell = null;
                //SetDefault0();
                SetDefault0();
                switch (TypeN)
                {
                case TableConsts.DoubleTypeN:
                cell = new TCellDoubleArr();
                break;
                case TableConsts.FloatTypeN:
                cell = new TCellFloat();
                break;
                case TableConsts.IntTypeN:
                cell = new TCelBool();
                break;
                case TableConsts.BoolTypeN:
                cell = new TCellBool();
                break;
                case TableConsts.StringTypeN:
                cell = new TCellString();
                break;
                case TableConsts.DoubleArrayTypeN:
                if (N < 1 || N > MyLib.MaxInt) N = 1;
                DoubleArr = new double[N];
                for (int i = 1; i <= N; i++) DoubleArr[i - 1] = 0;
                cell = new TCellDoubleMemo(DoubleArr, N);
                break;
                case TableConsts.FloatArrayTypeN:
                if (N < 1 || N > MyLib.MaxInt) N = 1;
                FloatArr = new float[N];
                for (int i = 1; i <= N; i++) FloatArr[i - 1] = 0;
                cell = new TCellFloatMemo(FloatArr, N);
                break;
                case TableConsts.IntArrayTypeN:
                if (N < 1 || N > MyLib.MaxInt) N = 1;
                IntArr = new int[N];
                for (int i = 1; i <= N; i++) IntArr[i - 1] = 0;
                cell = new TCellFloatMemo(IntArr, N);
                break;
                case TableConsts.BoolArrayTypeN:
                if (N < 1 || N > MyLib.MaxInt) N = 1;
                BoolArr = new bool[N];
                for (int i = 1; i <= N; i++) BoolArr[i - 1] = MyLib.BoolValByDefault;
                cell = new TCellBoolMemo(IntArr, N);
                break;
                case TableConsts.StringArrayTypeN:
                if (N < 1 || N > MyLib.MaxInt) N = 1;
                StringArr = new string[N];
                for (int i = 1; i <= N; i++) StringArr[i - 1] = "";
                cell = new TCellStringMemo(StringArr, N);
                break;
                case TableConsts.UniqueIntValKeeperTypeN:
                cell = new TCellUniqueNumKeeper(N);
                break;
                }
                this.cell.SetActiveN(1);
                //SetActiveN(1);
            }
            DataCell(DataCellTypeInfo TypeInf)
            {
                int TypeN=TypeInf.GetTypeN();
                int length=TypeInf.GetLength();
                int N=length;
                double DoubleVal = 0;
                float FloatVal = 0;
                int IntVal = 0;
                bool BoolVal = MyLib.BoolValByDefault;
                string StringVal = "";
                double []DoubleArr = null;
                float[] FloatArr = null;
                int[] IntArr = null;
                bool[] BoolArr = null;
                string[] StringArr = null;
                cell = null;
                //SetDefault0();
                switch (TypeN)
                {
                case TableConsts.DoubleTypeN:
                cell = new TCellDouble();
                break;
                case TableConsts.FloatTypeN:
                cell = new TCellFloat();
                break;
                case TableConsts.IntTypeN:
                cell = new TCelBool();
                break;
                case TableConsts.BoolTypeN:
                cell = new TCellBool();
                break;
                case TableConsts.StringTypeN:
                cell = new TCellString();
                break;
                case TableConsts.DoubleArrayTypeN:
                if (length < 1 || N > MyLib.MaxInt) N = 1;
                DoubleArr = new double[N];
                for (int i = 1; i <= N; i++) DoubleArr[i - 1] = 0;
                cell = new TCellDoubleMemo(DoubleArr, N);
                break;
                case TableConsts.FloatArrayTypeN:
                if (N < 1 || N > MyLib.MaxInt) N = 1;
                FloatArr = new float[N];
                for (int i = 1; i <= N; i++) FloatArr[i - 1] = 0;
                cell = new TCellFloatMemo(FloatArr, N);
                break;
                case TableConsts.IntArrayTypeN:
                if (N < 1 || N > MyLib.MaxInt) N = 1;
                IntArr = new int[N];
                for (int i = 1; i <= N; i++) IntArr[i - 1] = 0;
                cell = new TCellFloatMemo(IntArr, N);
                break;
                case TableConsts.BoolArrayTypeN:
                if (N < 1 || N > MyLib.MaxInt) N = 1;
                BoolArr = new bool[N];
                for (int i = 1; i <= N; i++) BoolArr[i - 1] = MyLib.BoolValByDefault;
                cell = new TCellBoolMemo(IntArr, N);
                break;
                case TableConsts.StringArrayTypeN:
                if (N < 1 || N > MyLib.MaxInt) N = 1;
                StringArr = new string[N];
                for (int i = 1; i <= N; i++) StringArr[i - 1] = "";
                cell = new TCellStringMemo(StringArr, N);
                break;
                case TableConsts.UniqueIntValKeeperTypeN:
                cell = new TCellUniqueNumKeeper(N);
                break;
                }
                this.cell.SetActiveN(1);
            }
            //
            void SetDefault0()
            {
                int TypeN = TableConsts.DefaultAnyCellTypeN;
                switch (TypeN)
                {
                case TableConsts.DoubleTypeN:
                cell = new TCellDouble();
                break;
                case TableConsts.FloatTypeN:
                cell = new TCellFloat();
                break;
                case TableConsts.IntTypeN:
                cell = new TCelBool();
                break;
                case TableConsts.BoolTypeN:
                cell = new TCellBool();
                break;
                case TableConsts.StringTypeN:
                cell = new TCellString();
                break;
                case TableConsts.DoubleArrayTypeN:
                cell = new TCellDoubleMemo();
                break;
                case TableConsts.FloatArrayTypeN:
                cell = new TCellFloatMemo();
                break;
                case TableConsts.IntArrayTypeN:
                cell = new TCelBoolMemo();
                break;
                case TableConsts.BoolArrayTypeN:
                cell = new TCellBoolMemo();
                break;
                case TableConsts.StringArrayTypeN:
                cell = new TCellStringMemo();
                break;
                }//swch
                SetActiveN(1);
            }//fn
            //
            TDataCell GetCell() { return this.cell; }
            //
            DataCellTypeInfo GetTypeInfo()
            {
                int TypeN = GetTypeN();
                int length = GetLength();
                DataCellTypeInfo TypeInf = new DataCellTypeInfo(TypeN, length);
                return TypeInf;
            }
            void SetTypeAndDefaultValByTypeInf(DataCellTypeInfo TypeInf, bool PreserveVal=false)
            {
                TableCellAccessConfiguration cfg=new TableCellAccessConfiguration();
                int TypeN = TypeInf.GetTypeN();
                int length = TypeInf.GetLength();
                cfg.LengthOfArrCellTypes=length;
                cfg.PreserveVal=PreserveVal;
                this.SetTypeN(TypeN, cfg);
            }
            //
            double GetDoubleVal()
            {
                return cell.GetDoubleVal();
            }
            float GetFloatVal()
            {
                return cell.GetFloatVal();
            }
            int GetIntVal()
            {
                return cell.GetIntVal();
            }
            bool GetBoolVal()
            {
                return cell.GetBoolVal();
            }
            override string ToString()
            {
                return cell.ToString();
            }
            //
            void GetDoubleArr(ref double[] vals, ref int count)
            {
                cell.GetDoubleArr(ref vals, ref count);
            }
            void GetFloatArr(ref float[] vals, ref int count)
            {
                cell.GetFloatArr(ref vals, ref count);
            }
            void GetIntArr(ref int[] vals, ref int count)
            {
                cell.GetIntArr(ref vals, ref count);
            }
            void GetBoolArr(ref bool[] vals, ref int count)
            {
                cell.GetBoolArr(ref vals, ref count);
            }
            void ToStringArr(ref string[] vals, ref int count)
            {
                cell.ToStringArr(ref vals, ref count);
            }
            //
            double GetDoubleValN(int N)
            {
                return cell.GetDoubleValN(N);
            }
            float GetFloatValN(int N)
            {
                return cell.GetFloatValN(N);
            }
            int GetIntValN(int N)
            {
                return cell.GetIntValN(N);
            }
            bool GetBoolValN(int N)
            {
                return cell.GetBoolValN(N);
            }
            string ToStringN(int N)
            {
                return cell.ToStringN(N);
            }
            //
            void SetVal(double val){ cell.SetVal(val); }
            void SetVal(int val){ cell.SetVal(val); }
            void SetVal(bool val) { cell.SetVal(val); }
            void SetVal(string val) { cell.SetVal(val); }
            //
            void SetValN(double val, int N) { cell.SetValN(val, N); }
            void SetValN(float val, int N) { cell.SetValN(val, N); }
            void SetValN(int val, int N) { cell.SetValN(val, N); }
            void SetValN(bool val, int N) { cell.SetValN(val, N); }
            void SetValN(string val, int N) { cell.SetValN(val, N); }
            //
            int GetTypeN() { return cell.GetTypeN(); }
            int GetLength() {
                int N = 0;
                if (cell != null) N = cell.GetLength();
                return N;
            }
            int GetActiveN() {
                int N = 0;
                if (cell != null) N = cell.GetActiveN();
                return N;
            }
            //
            void SetActiveN(int N)
            {
                cell.SetActiveN(N);
            }
            void SetLength(int Length){
                cell.SetLength(Length);
            }
            //
            void DelValN(int N)
            {
                cell.DelValN(N);
            }
            //
            void AddOrInsDoubleVal(double val, int N)
            {
                cell.AddOrInsDoubleVal(val, N);
            }
            void AddOrInsFloatVal(float val, int N)
            {
                cell.AddOrInsFloatVal(val, N);
            }
            void AddOrInsIntVal(int val, int N)
            {
                cell.AddOrInsIntVal(val, N);
            }
            void AddOrInsBoolVal(bool val, int N)
            {
                cell.AddOrInsBoolVal(val, N);
            }
            void AddOrInsStringVal(string val, int N)
            {
                cell.AddOrInsStringVal(val, N);
            }
            //
            void Assign(double val)
            {
                cell = new TCellDouble();
                cell.SetVal(val);
                //cell.SetValAndT
            }
            void Assign(float val)
            {
                cell = new TCellFloat();
                cell.SetVal(val);
            }
            void Assign(int val)
            {
                cell = new TCelBool();
                cell.SetVal(val);
            }
            void Assign(bool val)
            {
                cell = new TCellBool();
                cell.SetVal(val);
            }
            void Assign(string val)
            {
                cell = new TCellString();
                cell.SetVal(val);
            }
            void Assign(double val, int N)
            {
                double[]arr=null;
                int ActualLength, PrevLength=cell.GetLength(), MinLength;
                TDataCell bufCell;
                if (cell==null || (cell.GetTypeN() != TableConsts.DoubleTypeN && PrevLength < N))
                {
                bufCell=cell;
                if(N<PrevLength) ActualLength=PrevLength; else ActualLength=N;
                if(ActualLength<=PrevLength) MinLength=ActualLength; else MinLength=PrevLength;
                arr=new double[ActualLength];
                for(int i=1; i<=ActualLength; i++) arr[i-1]=0;
                for(int i=1; i<=MinLength; i++) arr[i-1]=bufCell.GetDoubleValN(N);
                cell = new TCellDoubleMemo(arr, ActualLength);
                }
                cell.SetValN(val, N);
            }
            void Assign(float val, int N)
            {
                float[] arr = null;
                int ActualLength, PrevLength = cell.GetLength(), MinLength;
                TDataCell bufCell;
                if (cell==null || (cell.GetTypeN() != TableConsts.DoubleTypeN && PrevLength < N))
                {
                bufCell = cell;
                if (N < PrevLength) ActualLength = PrevLength; else ActualLength = N;
                if (ActualLength <= PrevLength) MinLength = ActualLength; else MinLength = PrevLength;
                arr = new float[ActualLength];
                for (int i = 1; i <= ActualLength; i++) arr[i - 1] = 0;
                for (int i = 1; i <= MinLength; i++) arr[i - 1] = bufCell.GetFloatValN(N);
                cell = new TCellFloatMemo(arr, ActualLength);
                }
                cell.SetValN(val, N);
            }
            void Assign(int val, int N)
            {
                int[] arr = null;
                int ActualLength, PrevLength = cell.GetLength(), MinLength;
                TDataCell bufCell;
                if (cell==null || (cell.GetTypeN() != TableConsts.DoubleTypeN && PrevLength < N))
                {
                bufCell = cell;
                if (N < PrevLength) ActualLength = PrevLength; else ActualLength = N;
                if (ActualLength <= PrevLength) MinLength = ActualLength; else MinLength = PrevLength;
                arr = new int[ActualLength];
                for (int i = 1; i <= ActualLength; i++) arr[i - 1] = 0;
                for (int i = 1; i <= MinLength; i++) arr[i - 1] = bufCell.GetIntValN(N);
                cell = new TCelBoolMemo(arr, ActualLength);
                }
                cell.SetValN(val, N);
            }
            void Assign(bool val, int N)
            {
                bool[] arr = null;
                int ActualLength, PrevLength = cell.GetLength(), MinLength;
                TDataCell bufCell;
                if (cell==null || (cell.GetTypeN() != TableConsts.DoubleTypeN && PrevLength < N))
                {
                bufCell = cell;
                if (N < PrevLength) ActualLength = PrevLength; else ActualLength = N;
                if (ActualLength <= PrevLength) MinLength = ActualLength; else MinLength = PrevLength;
                arr = new bool[ActualLength];
                for (int i = 1; i <= ActualLength; i++) arr[i - 1] = MyLib.BoolValByDefault;
                for (int i = 1; i <= MinLength; i++) arr[i - 1] = bufCell.GetBoolValN(N);
                cell = new TCellBoolMemo(arr, ActualLength);
                }
                cell.SetValN(val, N);
            }
            void Assign(string val, int N)
            {
                string[] arr = null;
                int ActualLength, PrevLength = cell.GetLength(), MinLength;
                TDataCell bufCell;
                if (cell==null || (cell.GetTypeN() != TableConsts.DoubleTypeN && PrevLength < N))
                {
                bufCell = cell;
                if (N < PrevLength) ActualLength = PrevLength; else ActualLength = N;
                if (ActualLength <= PrevLength) MinLength = ActualLength; else MinLength = PrevLength;
                arr = new string[ActualLength];
                for (int i = 1; i <= ActualLength; i++) arr[i - 1] = "";
                for (int i = 1; i <= MinLength; i++) arr[i - 1] = bufCell.ToStringN(N);
                cell = new TCellBoolMemo(arr, ActualLength);
                }
                cell.SetValN(val, N);
            }
            void Assign(double[] val, int count)
            {
                cell = new TCellDoubleMemo(val, count);
            }
            void Assign(float[] val, int count)
            {
                cell = new TCellFloatMemo(val, count);
            }
            void Assign(int[] val, int count)
            {
                cell = new TCelBoolMemo(val, count);
            }
            void Assign(bool[] val, int count)
            {
                cell = new TCellBoolMemo(val,  count);
            }
            void Assign(string[] val, int count)
            {
                cell = new TCellStringMemo(val, count);
            }
            void Assign(double[] val, int count, string name1, string name2, string name3)
            {
                cell = new TDataBaseFieldHeader_WithItems_Double(val, count, name1, name2, name3);
            }
            void Assign(string[] val, int count, string name1, string name2, string name3)
            {
                cell = new TDataBaseFieldHeader_WithItems_String(val, count, name1, name2, name3);
            }
            void Assign(TDataCell obj)
            {
                cell = obj;
            }
            void Assign(DataCell obj)
            {
                int TypeN, Length=0;
                double DoubleVal;
                float FloatVal;
                int IntVal;
                bool BoolVal;
                string StringVal;
                double[] DoubleArr = null;
                float[] FloatArr = null;
                int[] IntArr = null;
                bool[] BoolArr = null;
                string[] StringArr = null;
                if (obj == null) cell = null;
                else
                {
                TypeN = obj.GetTypeN();
                switch (TypeN)
                {
                case TableConsts.DoubleTypeN:
                DoubleVal = obj.GetDoubleVal();
                cell = new TCellDouble(DoubleVal);
                break;
                case TableConsts.FloatTypeN:
                FloatVal = obj.GetFloatVal();
                cell = new TCellFloat(FloatVal);
                break;
                case TableConsts.IntTypeN:
                IntVal = obj.GetIntVal();
                cell = new TCellInt(IntVal);
                break;
                case TableConsts.BoolTypeN:
                BoolVal = obj.GetBoolVal();
                cell = new TCellBool(BoolVal);
                break;
                case TableConsts.StringTypeN:
                StringVal = obj.ToString();
                cell = new TCellString(StringVal);
                break;
                case TableConsts.DoubleArrayTypeN:
                obj.GetDoubleArr(ref DoubleArr, ref Length);
                cell = new TCellDoubleMemo(DoubleArr, Length);
                break;
                case TableConsts.FloatArrayTypeN:
                obj.GetFloatArr(ref FloatArr, ref Length);
                cell = new TCellFloatMemo(FloatArr, Length);
                break;
                case TableConsts.IntArrayTypeN:
                obj.GetIntArr(ref IntArr, ref Length);
                cell = new TCellIntMemo(IntArr, Length);
                break;
                case TableConsts.BoolArrayTypeN:
                obj.GetBoolArr(ref BoolArr, ref Length);
                cell = new TCellBoolMemo(BoolArr, Length);
                break;
                case TableConsts.StringArrayTypeN:
                obj.ToStringArr(ref StringArr, ref Length);
                cell = new TCellStringMemo(StringArr, Length);
                break;
                }//swch
                }//if
            }//fn asgn
            //
            void AssignBy(TDataCell CellFrom)
            {
                TDataCell CellTo = this.cell;
                int TypeTo = CellTo.GetTypeN(), TypeFrom = CellFrom.GetTypeN(), LenFrom = CellFrom.GetLength(), LenTo = CellTo.GetLength(), LenMin;
                double DoubleVal;
                float FloatVal;
                int IntVal;
                bool BoolVal;
                string StringVal;
                double[] DoubleArr = null;
                float[] FloatArr = null;
                int[] IntArr = null;
                bool[] BoolArr = null;
                string[] StringArr = null;
                if (LenFrom >= LenTo) LenMin = LenFrom; else LenMin = LenTo;
                switch (TypeFrom)
                {
                case TableConsts.DoubleTypeN:
                switch (TypeTo)
                {
                case TableConsts.DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                //DoubleVal=CellFrom.GetDoubleVal();
                //CellTo.SetByValDouble(DoubleVal);
                break;
                case TableConsts.FloatTypeN:
                //CellTo.SetByValFloat(CellFrom.GetFloatVal());
                //CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                FloatVal = CellFrom.GetFloatVal();
                CellTo.SetByValFloat(FloatVal);
                DoubleVal = CellFrom.GetDoubleVal();
                CellTo.SetByValDouble(DoubleVal);
                break;
                case TableConsts.IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                break;
                case TableConsts.BoolTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                break;
                case TableConsts.StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                break;
                case TableConsts.DoubleArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case TableConsts.FloatArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case TableConsts.IntArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case TableConsts.BoolArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case TableConsts.StringArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case TableConsts.UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case TableConsts.TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case TableConsts.FloatTypeN:
                switch (TypeTo)
                {
                case TableConsts.DoubleTypeN:
                DoubleVal = CellFrom.GetDoubleVal();
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                FloatVal = CellFrom.GetFloatVal();
                CellTo.SetByValFloat(FloatVal);
                break;
                case TableConsts.FloatTypeN:
                FloatVal = CellFrom.GetFloatVal();
                CellTo.SetByValFloat(FloatVal);
                //IntVal=CellFrom.GetIntVal();
                //CellTo.SetByValInt(IntVal);
                break;
                case TableConsts.IntTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TableConsts.BoolTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case TableConsts.StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                break;
                case TableConsts.DoubleArrayTypeN:
                FloatVal = CellFrom.GetFloatVal();
                CellTo.SetByValFloat(FloatVal);
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case TableConsts.FloatArrayTypeN:
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                //CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                //CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case TableConsts.IntArrayTypeN:
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case TableConsts.BoolArrayTypeN:
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case TableConsts.StringArrayTypeN:
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case TableConsts.UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case TableConsts.TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case TableConsts.IntTypeN:
                switch (TypeTo)
                {
                case TableConsts.DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TableConsts.FloatTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TableConsts.IntTypeN:
                //CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TableConsts.BoolTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case TableConsts.StringTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellTo.SetByValString(CellFrom.ToString());
                break;
                case TableConsts.DoubleArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case TableConsts.FloatArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                //CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                //CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case TableConsts.IntArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case TableConsts.BoolArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case TableConsts.StringArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case TableConsts.UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case TableConsts.TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case TableConsts.BoolTypeN:
                switch (TypeTo)
                {
                case TableConsts.DoubleTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                //CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TableConsts.FloatTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case TableConsts.IntTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TableConsts.BoolTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case TableConsts.StringTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellTo.SetByValString(CellFrom.ToString());
                break;
                case TableConsts.DoubleArrayTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case TableConsts.FloatArrayTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                //CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                //CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case TableConsts.IntArrayTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case TableConsts.BoolArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case TableConsts.StringArrayTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case TableConsts.UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case TableConsts.TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case TableConsts.StringTypeN:
                switch (TypeTo)
                {
                case TableConsts.DoubleTypeN:
                //CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellTo.SetByValString(CellFrom.ToString());
                break;
                case TableConsts.FloatTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                break;
                case TableConsts.IntTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TableConsts.BoolTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case TableConsts.StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                //CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case TableConsts.DoubleArrayTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case TableConsts.FloatArrayTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case TableConsts.IntArrayTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case TableConsts.BoolArrayTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case TableConsts.StringArrayTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case TableConsts.UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case TableConsts.TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case TableConsts.DoubleArrayTypeN:
                switch (TypeTo)
                {
                case TableConsts.DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                //CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                //CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case TableConsts.FloatTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                break;
                case TableConsts.IntTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TableConsts.BoolTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case TableConsts.StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case TableConsts.DoubleArrayTypeN:
                //CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case TableConsts.FloatArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case TableConsts.IntArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case TableConsts.BoolArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case TableConsts.StringArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case TableConsts.UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case TableConsts.TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case TableConsts.FloatArrayTypeN:
                switch (TypeTo)
                {
                case TableConsts.DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case TableConsts.FloatTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case TableConsts.IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case TableConsts.BoolTypeN:
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case TableConsts.StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case TableConsts.DoubleArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case TableConsts.FloatArrayTypeN:
                //CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                //CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case TableConsts.IntArrayTypeN:
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case TableConsts.BoolArrayTypeN:
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case TableConsts.StringArrayTypeN:
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case TableConsts.UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case TableConsts.TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case TableConsts.IntArrayTypeN:
                switch (TypeTo)
                {
                case TableConsts.DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case TableConsts.FloatTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case TableConsts.IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case TableConsts.BoolTypeN:
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case TableConsts.StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case TableConsts.DoubleArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case TableConsts.FloatArrayTypeN:
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case TableConsts.IntArrayTypeN:
                //CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                //CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case TableConsts.BoolArrayTypeN:
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case TableConsts.StringArrayTypeN:
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case TableConsts.UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case TableConsts.TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case TableConsts.BoolArrayTypeN:
                switch (TypeTo)
                {
                case TableConsts.DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case TableConsts.FloatTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case TableConsts.IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case TableConsts.BoolTypeN:
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case TableConsts.StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case TableConsts.DoubleArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case TableConsts.FloatArrayTypeN:
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case TableConsts.IntArrayTypeN:
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case TableConsts.BoolArrayTypeN:
                //CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                //CellTo.SetByArrInt(IntArr, LenFrom);
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case TableConsts.StringArrayTypeN:
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case TableConsts.UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case TableConsts.TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case TableConsts.StringArrayTypeN:
                switch (TypeTo)
                {
                case TableConsts.DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case TableConsts.FloatTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case TableConsts.IntTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case TableConsts.BoolTypeN:
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case TableConsts.StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case TableConsts.DoubleArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case TableConsts.FloatArrayTypeN:
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case TableConsts.IntArrayTypeN:
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case TableConsts.BoolArrayTypeN:
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case TableConsts.StringArrayTypeN:
                //CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                //CellTo.SetByArrString(StringArr, LenFrom);
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case TableConsts.UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case TableConsts.TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case TableConsts.UniqueIntValKeeperTypeN:
                switch (TypeTo)
                {
                case TableConsts.DoubleTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TableConsts.FloatTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TableConsts.IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TableConsts.BoolTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TableConsts.StringTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TableConsts.DoubleArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TableConsts.FloatArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TableConsts.IntArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TableConsts.BoolArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TableConsts.StringArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TableConsts.UniqueIntValKeeperTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TableConsts.TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case TableConsts.TDataBaseFieldHeaderTypeN: //ne done!
                switch (TypeTo)
                {
                case TableConsts.DoubleTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TableConsts.FloatTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TableConsts.IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TableConsts.BoolTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TableConsts.StringTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TableConsts.DoubleArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TableConsts.FloatArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TableConsts.IntArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TableConsts.BoolArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TableConsts.StringArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TableConsts.UniqueIntValKeeperTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TableConsts.TDataBaseFieldHeaderTypeN:
                //NOp;
                break;
                }//switch
                break;
                }//switch
                this.cell=CellTo;
            }
            void AssignBy(DataCell obj)
            {
                TDataCell ObjCell = obj.GetCell();
                AssignBy(ObjCell);
            }
             */
            //mark4
            void SetTypeN(int TypeN, TableCellAccessConfiguration *cfgExt);
            //
            void SetValAndTypeDouble(double val);
            void SetValAndTypeFloat(float val);
            void SetValAndTypeInt(int val);
            void SetValAndTypeBool(bool val);
            void SetValAndTypeString(QString val);
            void SetArrAndTypeDouble(double* arr, int Length);
            void SetArrAndTypeFloat(float* arr, int Length);
            void SetArrAndTypeInt(int* arr, int Length);
            void SetArrAndTypeBool(bool* arr, int Length);
            void SetArrAndTypeString(QString* arr, int Length);
            void SetValAndTypeUniqueIntNumKeeper(int val);
            //
            void SetByValDouble(double val);
            void SetByValFloat(float val);
            void SetByValInt(int val);
            void SetByValBool(bool val);
            void SetByValString(QString val);
            //
            void SetByValDoubleN(double val, int N);
            void SetByValFloatN(float val, int N);
            void SetByValIntN(int val, int N);
            void SetByValBoolN(bool val, int N);
            void SetByValStringN(QString val, int N);
            //
            void SetByArrDouble(double* val, int Length);
            void SetByArrFloat(float* val, int Length);
            void SetByArrInt(int* val, int Length);
            void SetByArrBool(bool* val, int Length);
            void SetByArrString(QString* val, int Length);
            //
            int GetErstItemNByStringVal(QString val);
            void SetActiveNByStringVal(QString val);
            //
            QString GetNameN(int N);
            QString GetName1();
            QString GetName2();
            QString GetName3();
            void GetNames(QString*&Arr, int&QItems);
            int GetLengthOfNamesList();
            //
            DataCell& operator +(DataCell& obj);
            //
            /*void SetNameN(string name, int N) { this.cell.SetNameN(name, N); }
            void SetName1(string name) { this.cell.SetName1(name); }
            void SetName2(string name) { this.cell.SetName2(name); }
            void SetName3(string name) { this.cell.SetName3(name); }
            void SetNames(string[] Arr, int Q){this.cell.SetNames(Arr, Q);}
            string GetNameN(int N) { return this.cell.GetNameN(N); }
            string GetName1() { return this.cell.GetName1(); }
            string GetName2() { return this.cell.GetName2(); }
            string GetName3() { return this.cell.GetName3(); }
            void GetNames(ref string[] Arr, ref int QItems){this.cell.GetNames(ref Arr, ref QItems);}
            int GetLengthOfNamesList() { return this.cell.GetLengthOfNamesList();}*/
            //
            DataCell ReturnCopy();
            //void SetFromGridCellValueOnly(DataGridViewCell gridCell, TableReadingTypesParams TypesParams);
        };//cl DataCell


             DataCell operator +(DataCell obj1, DataCell obj2);

#endif // DATACELL_H


//datacell.cpp =======================================================

#include "datacell.h"

//class TCellDouble: TDataCell
//{
//    double val;
//    :
//datacell.cpp

#include "datacell.h"

//class TCellDouble: TDataCell
//{
//    double val;
//    :
    TCellDouble::TCellDouble() { this->val = 0; }
    TCellDouble::TCellDouble(double val) { SetByValDouble(val); }
    TCellDouble::TCellDouble(float val) { SetByValFloat(val); }
    TCellDouble::TCellDouble(int val) { SetByValInt(val); }
    TCellDouble::TCellDouble(bool val) { SetByValBool(val); }
    TCellDouble::TCellDouble(QString val) { SetByValString(val); }
    //
    TCellDouble::TCellDouble(double* val, int Q) { SetByArrDouble(val, Q); }
    TCellDouble::TCellDouble(float* val, int Q) { SetByArrFloat(val, Q); }
    TCellDouble::TCellDouble(int* val, int Q) { SetByArrInt(val, Q); }
    TCellDouble::TCellDouble(bool* val, int Q) { SetByArrBool(val, Q); }
    TCellDouble::TCellDouble(QString* val, int Q) { SetByArrString(val, Q); }
    //
    //hope they will not be needed
//    TCellDouble(TCellDouble&obj){
//        this->Assign(obj);
//    }
//    //
//    TCellDouble& operator =(TCellDouble&obj){
//        this->Assign(obj);
//        return*this;
//    }
//    //
//    void Assign(TCellDouble&obj){
//        this->data=obj.data;
//    }
    void TCellDouble::construct(int n){
        this->val=0;
    }


    int TCellDouble::GetTypeN() { return DoubleTypeN; }
    int TCellDouble::GetActiveN() { return 1;}
    void TCellDouble::SetActiveN(int N) { }
    int TCellDouble::GetLength() { return 1; }
    void TCellDouble::SetLength(int L){}
    //
    double TCellDouble::GetDoubleVal() { return val; }
    float TCellDouble::GetFloatVal() {
        float r;
        r = (float)val;
        return r;
    }
    int TCellDouble::GetIntVal()
    {
        int r;
        r =(int) round(val);
        return r;
    }
    bool TCellDouble::GetBoolVal() {
        bool r;
        if(BoolValByDefault==true){
            if (val == 0) r = false;
            else r = true;
        }else{
            if (val == 1) r = true;
            else r = false;
        }
        return r;
    }
    QString TCellDouble::ToString() {
        QString s;
        s=RealToString(val);
        s.setNum(val);
        return s;//val.ToString();
    }
    //
    double TCellDouble::GetDoubleValN(int N) { return val; }
    float TCellDouble::GetFloatValN(int N) { return (float)val; }
    int TCellDouble::GetIntValN(int N)
    {
        int r;
        r = (int)round(val);
        return r;
    }
    bool TCellDouble::GetBoolValN(int N)
    {
        bool r;
        if(BoolValByDefault==true){
            if (val == 0) r = false;
            else r = true;
        }else{
            if (val == 1) r = true;
            else r = false;
        }
        return r;
    }
    QString TCellDouble::ToStringN(int N) {
        QString s;
        //QString RealToString(double x, int Repr_IntAndFrac0_ExpAfOrderLim1_ExpAnyhow2=0,  int QAftComma=6, int OrdAfWhichExp=6, int BaseDec=10);
        s=RealToString(val);
        s.setNum(val);
        return s;
    }
    //
    void TCellDouble::SetByValDouble(double val) { this->val = (double)val; }
    void TCellDouble::SetByValFloat(float val) { this->val = (double)val; }
    void TCellDouble::SetByValInt(int val) { this->val = (double)val; }
    void TCellDouble::SetByValBool(bool val)
    {
        int i;
        i = BoolToInt(val);
        this->val=(double)i;
    }
    void TCellDouble::SetByValString(QString val) {
        //this->val = Convert.ToDouble(val);
        //this->val = NumberParse.StrToFloat(val);
        this->val=StrToReal(val);
        this->val =val.toDouble();
    } //hin S' ne abl convert!!
    //
    void TCellDouble::SetByValDoubleN(double val, int N) { SetByValDouble(val); }
    void TCellDouble::SetByValFloatN(float val, int N) { SetByValFloat(val); }
    void TCellDouble::SetByValIntN(int val, int N) { SetByValInt(val); }
    void TCellDouble::SetByValBoolN(bool val, int N) { SetByValBool(val); }
    void TCellDouble::SetByValStringN(QString val, int N) { SetByValString(val); }
    //
    void TCellDouble::SetVal(double val) { this->val = (double)val; }
    void TCellDouble::SetVal(int val) { this->val = (double)val; }
    void TCellDouble::SetVal(bool val)
    {
        int i;
        i = BoolToInt(val);
        this->val = (double)i;
    }
    void TCellDouble::SetVal(QString val) {
        //this->val = Convert.ToDouble(val);
        this->val=StrToReal(val);
        this->val=val.toDouble();
    }
    //
    void TCellDouble::SetValN(double val, int N) { SetVal(val); }
    void TCellDouble::SetValN(int val, int N) { SetVal(val); }
    void TCellDouble::SetValN(bool val, int N) { SetVal(val); }
    void TCellDouble::SetValN(QString val, int N) { SetVal(val); }
    //
    void TCellDouble::SetByArrDouble(double* val, int Q){
       if(val!=NULL)SetByValDouble(val[1-1]);
       else SetByValDouble(0);
    }
    void TCellDouble::SetByArrFloat(float* val, int Q)
    {
        if (val != NULL) SetByValFloat(val[1 - 1]);
        else SetByValFloat(0);
    }
    void TCellDouble::SetByArrInt(int* val, int Q)
    {
        if (val != NULL) SetByValInt(val[1 - 1]);
        else SetByValInt(0);
    }
    void TCellDouble::SetByArrBool(bool* val, int Q)
    {
        if (val != NULL) SetByValBool(val[1 - 1]);
        else SetByValBool(BoolValByDefault);
    }
    void TCellDouble::SetByArrString(QString* val, int Q)
    {
        if (val != NULL) SetByValString(val[1 - 1]);
        else SetByValString("");
    }
    //
    void TCellDouble::SetByArr(double* val, int Q){
        if(val!=NULL)SetByValDouble(val[1-1]);
        else SetByValDouble(0);
    }
    void TCellDouble::SetByArr(int* val, int Q)
    {
        if (val != NULL) SetByValInt(val[1 - 1]);
        else SetByValInt(0);
    }
    void TCellDouble::SetByArr(bool* val, int Q)
    {
        if (val != NULL) SetByValBool(val[1 - 1]);
        else SetByValBool(BoolValByDefault);
    }
    void TCellDouble::SetByArr(QString* val, int Q)
    {
        if (val != NULL) SetByValString(val[1 - 1]);
        else SetByValString("");
    }
    //
    void TCellDouble::AddOrInsDoubleVal(double val, int N)
    {
        this->val = val;
    }
    void TCellDouble::AddOrInsFloatVal(float val, int N)
    {
        this->val = (double)val;
    }
    void TCellDouble::AddOrInsIntVal(int val, int N)
    {
        this->val = (double)val;
    }
    void TCellDouble::AddOrInsBoolVal(bool val, int N)
    {
        this->val = (double) BoolToInt(val);
    }
    void TCellDouble::AddOrInsStringVal(QString val, int N)
    {
        this->val=StrToReal(val, NULL, 10);
        //this->val.SetNum(val);// Convert.ToDouble(val);
    }
    //
    void TCellDouble::DelValN(int N) { }
    //
    void TCellDouble::GetDoubleArr(double*&Arr,  int&QItems) {
        QItems=1;
        Arr = new double[QItems];
        Arr[1 - 1] = GetDoubleVal();
    }
    void TCellDouble::GetFloatArr( float*&Arr, int&QItems) {
        QItems = 1;
        Arr = new float[QItems];
        Arr[1 - 1] = GetFloatVal();
    }
    void TCellDouble::GetIntArr( int*&Arr,  int&QItems) {
        QItems = 1;
        Arr = new int[QItems];
        Arr[1 - 1] = GetIntVal();
    }
    void TCellDouble::GetBoolArr( bool*&Arr,  int&QItems) {
        QItems = 1;
        Arr = new bool[QItems];
        Arr[1 - 1] = GetBoolVal();
    }
    void TCellDouble::ToStringArr(QString*&Arr, int&QItems) {
        QItems = 1;
        if(Arr!=NULL)delete[]Arr;
        Arr = new QString[QItems];
        Arr[1 - 1] = ToString();
    }
    //
    void TCellDouble::SetNameN(QString name, int N) { SetByValStringN(name, N);  }
    void TCellDouble::SetName1(QString name) { SetByValStringN(name, 1); }
    void TCellDouble::SetName2(QString name) { SetByValStringN(name, 2); }
    void TCellDouble::SetName3(QString name) { SetByValStringN(name, 3); }
    void TCellDouble::SetNames(QString* Arr, int Q) { SetByArrString(Arr, Q); }
    QString TCellDouble::GetNameN(int N) { return ToStringN(N); }
    QString TCellDouble::GetName() { return ToString(); }
    QString TCellDouble::GetName1() { return ToStringN(1); }
    QString TCellDouble::GetName2() { return ToStringN(2); }
    QString TCellDouble::GetName3() { return ToStringN(3); }
    void TCellDouble::GetNames(QString*&Arr, int&QItems) { ToStringArr(Arr, QItems); }
    int TCellDouble::GetLengthOfNamesList() { return 1; }
    //
//     override object Clone(){
//        return new TCellDouble(this->GetDoubleVal());
//    }
//};//cl


    //class TCellFloat: TDataCell
    //{
    //    double val;
    //    :
        TCellFloat::TCellFloat() { this->val = 0; }
        TCellFloat::TCellFloat(double val) { SetByValDouble(val); }
        TCellFloat::TCellFloat(float val) { SetByValFloat(val); }
        TCellFloat::TCellFloat(int val) { SetByValInt(val); }
        TCellFloat::TCellFloat(bool val) { SetByValBool(val); }
        TCellFloat::TCellFloat(QString val) { SetByValString(val); }
        //
        TCellFloat::TCellFloat(double* val, int Q) { SetByArrDouble(val, Q); }
        TCellFloat::TCellFloat(float* val, int Q) { SetByArrFloat(val, Q); }
        TCellFloat::TCellFloat(int* val, int Q) { SetByArrInt(val, Q); }
        TCellFloat::TCellFloat(bool* val, int Q) { SetByArrBool(val, Q); }
        TCellFloat::TCellFloat(QString* val, int Q) { SetByArrString(val, Q); }
        //
        //hope they will not be needed
    //    TCellFloat(TCellFloat&obj){
    //        this->Assign(obj);
    //    }
    //    //
    //    TCellFloat& operator =(TCellFloat&obj){
    //        this->Assign(obj);
    //        return*this;
    //    }
    //    //
    //    void Assign(TCellFloat&obj){
    //        this->data=obj.data;
    //    }
        void TCellFloat::construct(int n){
            this->val=0;
        }
        int TCellFloat::GetTypeN() { return FloatTypeN; }
        int TCellFloat::GetActiveN() { return 1;}
        void TCellFloat::SetActiveN(int N) { }
        int TCellFloat::GetLength() { return 1; }
        void TCellFloat::SetLength(int L){}
        //
        double TCellFloat::GetDoubleVal(){
            double r;
            r = (double)val;
            return r;
        }
        float TCellFloat::GetFloatVal() {
//            float r;
//            r = (float)val;
            return val;
//            return r;
        }
        int TCellFloat::GetIntVal()
        {
            int r;
            r =(int) round(val);
            return r;
        }
        bool TCellFloat::GetBoolVal() {
            bool r;
            if(BoolValByDefault==true){
                if (val == 0) r = false;
                else r = true;
            }else{
                if (val == 1) r = true;
                else r = false;
            }
            return r;
        }
        QString TCellFloat::ToString() {
            QString s;
            s=RealToString(val);
            s.setNum(val);
            return s;//val.ToString();
        }
        //
        double TCellFloat::GetDoubleValN(int N) { return (double)val; }
        float TCellFloat::GetFloatValN(int N) { return val; }
        int TCellFloat::GetIntValN(int N)
        {
            int r;
            r = (int)round(val);
            return r;
        }
        bool TCellFloat::GetBoolValN(int N)
        {
            bool r;
            if(BoolValByDefault==true){
                if (val == 0) r = false;
                else r = true;
            }else{
                if (val == 1) r = true;
                else r = false;
            }
            return r;
        }
        QString TCellFloat::ToStringN(int N) {
            QString s;
            //QString RealToString(double x, int Repr_IntAndFrac0_ExpAfOrderLim1_ExpAnyhow2=0,  int QAftComma=6, int OrdAfWhichExp=6, int BaseDec=10);
            s=RealToString(val);
            s.setNum(val);
            return s;
        }
        //
        void TCellFloat::SetByValDouble(double val) { this->val = (float)val; }
        void TCellFloat::SetByValFloat(float val) { this->val = (float)val; }
        void TCellFloat::SetByValInt(int val) { this->val = (float)val; }
        void TCellFloat::SetByValBool(bool val)
        {
            int i;
            i = BoolToInt(val);
            this->val=(float)i;
        }
        void TCellFloat::SetByValString(QString val) {
            //this->val = Convert.ToDouble(val);
            //this->val = NumberParse.StrToFloat(val);
            this->val=(float)StrToReal(val);
            this->val =val.toFloat();
        } //hin S' ne abl convert!!
        //
        void TCellFloat::SetByValDoubleN(double val, int N) { SetByValDouble(val); }
        void TCellFloat::SetByValFloatN(float val, int N) { SetByValFloat(val); }
        void TCellFloat::SetByValIntN(int val, int N) { SetByValInt(val); }
        void TCellFloat::SetByValBoolN(bool val, int N) { SetByValBool(val); }
        void TCellFloat::SetByValStringN(QString val, int N) { SetByValString(val); }
        //
        void TCellFloat::SetVal(double val) { this->val = (float)val; }
        void TCellFloat::SetVal(int val) { this->val = (float)val; }
        void TCellFloat::SetVal(bool val)
        {
            int i;
            i = BoolToInt(val);
            this->val = (double)i;
        }
        void TCellFloat::SetVal(QString val) {
            //this->val = Convert.ToDouble(val);
            this->val=(float)StrToReal(val);
            this->val=val.toFloat();
        }
        //
        void TCellFloat::SetValN(double val, int N) { SetVal(val); }
        void TCellFloat::SetValN(int val, int N) { SetVal(val); }
        void TCellFloat::SetValN(bool val, int N) { SetVal(val); }
        void TCellFloat::SetValN(QString val, int N) { SetVal(val); }
        //
        void TCellFloat::SetByArrDouble(double* val, int Q){
           if(val!=NULL)SetByValDouble(val[1-1]);
           else SetByValDouble(0);
        }
        void TCellFloat::SetByArrFloat(float* val, int Q)
        {
            if (val != NULL) SetByValFloat(val[1 - 1]);
            else SetByValFloat(0);
        }
        void TCellFloat::SetByArrInt(int* val, int Q)
        {
            if (val != NULL) SetByValInt(val[1 - 1]);
            else SetByValInt(0);
        }
        void TCellFloat::SetByArrBool(bool* val, int Q)
        {
            if (val != NULL) SetByValBool(val[1 - 1]);
            else SetByValBool(BoolValByDefault);
        }
        void TCellFloat::SetByArrString(QString* val, int Q)
        {
            if (val != NULL) SetByValString(val[1 - 1]);
            else SetByValString("");
        }
        //
        void TCellFloat::SetByArr(double* val, int Q){
            if(val!=NULL)SetByValDouble(val[1-1]);
            else SetByValDouble(0);
        }
        void TCellFloat::SetByArr(int* val, int Q)
        {
            if (val != NULL) SetByValInt(val[1 - 1]);
            else SetByValInt(0);
        }
        void TCellFloat::SetByArr(bool* val, int Q)
        {
            if (val != NULL) SetByValBool(val[1 - 1]);
            else SetByValBool(BoolValByDefault);
        }
        void TCellFloat::SetByArr(QString* val, int Q)
        {
            if (val != NULL) SetByValString(val[1 - 1]);
            else SetByValString("");
        }
        //
        void TCellFloat::AddOrInsDoubleVal(double val, int N)
        {
            this->val = (float)val;
        }
        void TCellFloat::AddOrInsFloatVal(float val, int N)
        {
            this->val = (float)val;
        }
        void TCellFloat::AddOrInsIntVal(int val, int N)
        {
            this->val = (float)val;
        }
        void TCellFloat::AddOrInsBoolVal(bool val, int N)
        {
            this->val = (float) BoolToInt(val);
        }
        void TCellFloat::AddOrInsStringVal(QString val, int N)
        {
            this->val=StrToReal(val, NULL, 10);
            //this->val.SetNum(val);// Convert.ToDouble(val);
        }
        //
        void TCellFloat::DelValN(int N) { }
        //
        void TCellFloat::GetDoubleArr(double*&Arr,  int&QItems) {
            QItems=1;
            Arr = new double[QItems];
            Arr[1 - 1] = GetDoubleVal();
        }
        void TCellFloat::GetFloatArr( float*&Arr, int&QItems) {
            QItems = 1;
            Arr = new float[QItems];
            Arr[1 - 1] = GetFloatVal();
        }
        void TCellFloat::GetIntArr( int*&Arr,  int&QItems) {
            QItems = 1;
            Arr = new int[QItems];
            Arr[1 - 1] = GetIntVal();
        }
        void TCellFloat::GetBoolArr( bool*&Arr,  int&QItems) {
            QItems = 1;
            Arr = new bool[QItems];
            Arr[1 - 1] = GetBoolVal();
        }
        void TCellFloat::ToStringArr(QString*&Arr, int&QItems) {
            QItems = 1;
            if(Arr!=NULL)delete[]Arr;
            Arr = new QString[QItems];
            Arr[1 - 1] = ToString();
        }
        //
        void TCellFloat::SetNameN(QString name, int N) { SetByValStringN(name, N);  }
        void TCellFloat::SetName1(QString name) { SetByValStringN(name, 1); }
        void TCellFloat::SetName2(QString name) { SetByValStringN(name, 2); }
        void TCellFloat::SetName3(QString name) { SetByValStringN(name, 3); }
        void TCellFloat::SetNames(QString* Arr, int Q) { SetByArrString(Arr, Q); }
        QString TCellFloat::GetNameN(int N) { return ToStringN(N); }
        QString TCellFloat::GetName1() { return ToStringN(1); }
        QString TCellFloat::GetName2() { return ToStringN(2); }
        QString TCellFloat::GetName3() { return ToStringN(3); }
        void TCellFloat::GetNames(QString*&Arr, int&QItems) { ToStringArr(Arr, QItems); }
        int TCellFloat::GetLengthOfNamesList() { return 1; }
        //
    //     override object Clone(){
    //        return new TCellDouble(this->GetDoubleVal());
    //    }
    //};//cl  //TCellFloat



//class TCellInt: TDataCell
   //{
   //    double val;
   //    :
   TCellInt::TCellInt() { this->val = 0; }
   TCellInt::TCellInt(double val) { SetByValDouble(val); }
   TCellInt::TCellInt(float val) { SetByValFloat(val); }
   TCellInt::TCellInt(int val) { SetByValInt(val); }
   TCellInt::TCellInt(bool val) { SetByValBool(val); }
   TCellInt::TCellInt(QString val) { SetByValString(val); }
   //
   TCellInt::TCellInt(double* val, int Q) { SetByArrDouble(val, Q); }
   TCellInt::TCellInt(float* val, int Q) { SetByArrFloat(val, Q); }
   TCellInt::TCellInt(int* val, int Q) { SetByArrInt(val, Q); }
   TCellInt::TCellInt(bool* val, int Q) { SetByArrBool(val, Q); }
   TCellInt::TCellInt(QString* val, int Q) { SetByArrString(val, Q); }
   //
                //hope they will not be needed
                //    TCellInt(TCellInt&obj){
                //        this->Assign(obj);
                //    }
                //    //
                //    TCellInt& operator =(TCellInt&obj){
                //        this->Assign(obj);
                //        return*this;
                //    }
                //    //
                //    void Assign(TCellInt&obj){
                //        this->data=obj.data;
                //    }
    void TCellInt::construct(int n){
        this->val=0;
    }
    int TCellInt::GetTypeN() { return IntTypeN; }
    int TCellInt::GetActiveN() { return 1;}
    void TCellInt::SetActiveN(int N) { }
    int TCellInt::GetLength() { return 1; }
    void TCellInt::SetLength(int L){}
    //
    double TCellInt::GetDoubleVal(){
        double r;
        r = (double)val;
        return r;
    }
    float TCellInt::GetFloatVal() {
        float r;
        r = (float)val;
        return r;
    }
    int TCellInt::GetIntVal()
    {
        //int r;
        //r =(int) round(val);
        //return r;
        return val;
    }
    bool TCellInt::GetBoolVal() {
        bool r;
        if(BoolValByDefault==true){
            if (val == 0) r = false;
            else r = true;
        }else{
            if (val == 1) r = true;
            else r = false;
        }
        return r;
    }
    QString TCellInt::ToString() {
        QString s;
        s=RealToString(val);
        s.setNum(val);
        return s;//val.ToString();
    }
    //
    double TCellInt::GetDoubleValN(int N) { return (double)val; }
    float TCellInt::GetFloatValN(int N) { return (float)val; }
    int TCellInt::GetIntValN(int N)
    {
         //int r;
         //r = (int)round(val);
         //return r;
         return val;
    }
    bool TCellInt::GetBoolValN(int N)
    {
        bool r;
        if(BoolValByDefault==true){
            if (val == 0) r = false;
            else r = true;
        }else{
            if (val == 1) r = true;
            else r = false;
        }
        return r;
    }
    QString TCellInt::ToStringN(int N) {
        QString s;
        //QString RealToString(double x, int Repr_IntAndFrac0_ExpAfOrderLim1_ExpAnyhow2=0,  int QAftComma=6, int OrdAfWhichExp=6, int BaseDec=10);
        s=IntToStringSimple(BoolToInt(val)); // s=RealToString(val);
        s.setNum(BoolToInt(val));
        return s;
    }
    //
    void TCellInt::SetByValDouble(double val) { this->val = (int)round(val); }
    void TCellInt::SetByValFloat(float val) { this->val = (int)round(val);  }
    void TCellInt::SetByValInt(int val) { this->val = val; }
    void TCellInt::SetByValBool(bool val)
    {
         this->val=BoolToInt(val);
         // this->val=(double)i;
   }
   void TCellInt::SetByValString(QString val) {
       //this->val = Convert.ToDouble(val);
       //this->val = NumberParse.StrToFloat(val);
       this->val=(int)StrToInt(val);
       this->val =val.toInt();
   } //hin S' ne abl convert!!
   //
   void TCellInt::SetByValDoubleN(double val, int N) { SetByValDouble(val); }
   void TCellInt::SetByValFloatN(float val, int N) { SetByValFloat(val); }
   void TCellInt::SetByValIntN(int val, int N) { SetByValInt(val); }
   void TCellInt::SetByValBoolN(bool val, int N) { SetByValBool(val); }
   void TCellInt::SetByValStringN(QString val, int N) { SetByValString(val); }
   //
   void TCellInt::SetVal(double val) {  this->val = (int)round(val); }
   void TCellInt::SetVal(int val) { this->val = val; }
   void TCellInt::SetVal(bool val)
   {
       this->val = BoolToInt(val);
   }
   void TCellInt::SetVal(QString val) {
       //this->val = Convert.ToDouble(val);
       this->val=StrToInt(val);
       this->val=val.toInt();
   }
   //
   void TCellInt::SetValN(double val, int N) { SetVal(val); }
   void TCellInt::SetValN(int val, int N) { SetVal(val); }
   void TCellInt::SetValN(bool val, int N) { SetVal(val); }
   void TCellInt::SetValN(QString val, int N) { SetVal(val); }
   //
   void TCellInt::SetByArrDouble(double* val, int Q){
       if(val!=NULL)SetByValDouble(val[1-1]);
       else SetByValDouble(0);
   }
   void TCellInt::SetByArrFloat(float* val, int Q)
   {
       if (val != NULL) SetByValFloat(val[1 - 1]);
       else SetByValFloat(0);
   }
   void TCellInt::SetByArrInt(int* val, int Q)
   {
       if (val != NULL) SetByValInt(val[1 - 1]);
       else SetByValInt(0);
   }
   void TCellInt::SetByArrBool(bool* val, int Q)
   {
       if (val != NULL) SetByValBool(val[1 - 1]);
       else SetByValBool(BoolValByDefault);
   }
   void TCellInt::SetByArrString(QString* val, int Q)
   {
       if (val != NULL) SetByValString(val[1 - 1]);
       else SetByValString("");
   }
   //
   void TCellInt::SetByArr(double* val, int Q){
       if(val!=NULL)SetByValDouble(val[1-1]);
       else SetByValDouble(0);
   }
   void TCellInt::SetByArr(int* val, int Q)
   {
       if (val != NULL) SetByValInt(val[1 - 1]);
       else SetByValInt(0);
   }
   void TCellInt::SetByArr(bool* val, int Q)
   {
       if (val != NULL) SetByValBool(val[1 - 1]);
       else SetByValBool(BoolValByDefault);
   }
   void TCellInt::SetByArr(QString* val, int Q)
   {
       if (val != NULL) SetByValString(val[1 - 1]);
       else SetByValString("");
   }
   //
   void TCellInt::AddOrInsDoubleVal(double val, int N)
   {
       this->val = (int)round(val);
   }
   void TCellInt::AddOrInsFloatVal(float val, int N)
   {
       this->val = (int)round(val);
   }
   void TCellInt::AddOrInsIntVal(int val, int N)
   {
       //this->val = (float)val;
       this->val = val;
   }
   void TCellInt::AddOrInsBoolVal(bool val, int N)
   {
       int r;
       r=BoolToInt(val);
       this->val = r;
   }
   void TCellInt::AddOrInsStringVal(QString val, int N)
   {
       this->val=StrToInt(val, NULL, 10);
       //this->val.SetNum(val);// Convert.ToDouble(val);
   }
   //
   void TCellInt::DelValN(int N) { }
   //
   void TCellInt::GetDoubleArr(double*&Arr,  int&QItems) {
       QItems=1;
       Arr = new double[QItems];
       Arr[1 - 1] = GetDoubleVal();
   }
   void TCellInt::GetFloatArr( float*&Arr, int&QItems) {
       QItems = 1;
       Arr = new float[QItems];
       Arr[1 - 1] = GetFloatVal();
   }
   void TCellInt::GetIntArr( int*&Arr,  int&QItems) {
       QItems = 1;
       Arr = new int[QItems];
       Arr[1 - 1] = GetIntVal();
   }
   void TCellInt::GetBoolArr( bool*&Arr,  int&QItems) {
       QItems = 1;
       Arr = new bool[QItems];
       Arr[1 - 1] = GetBoolVal();
   }
   void TCellInt::ToStringArr(QString*&Arr, int&QItems) {
       QItems = 1;
       if(Arr!=NULL)delete[]Arr;
       Arr = new QString[QItems];
       Arr[1 - 1] = ToString();
   }
   //
   void TCellInt::SetNameN(QString name, int N) { SetByValStringN(name, N);  }
   void TCellInt::SetName1(QString name) { SetByValStringN(name, 1); }
   void TCellInt::SetName2(QString name) { SetByValStringN(name, 2); }
   void TCellInt::SetName3(QString name) { SetByValStringN(name, 3); }
   void TCellInt::SetNames(QString* Arr, int Q) { SetByArrString(Arr, Q); }
   QString TCellInt::GetNameN(int N) { return ToStringN(N); }
   QString TCellInt::GetName1() { return ToStringN(1); }
   QString TCellInt::GetName2() { return ToStringN(2); }
   QString TCellInt::GetName3() { return ToStringN(3); }
   void TCellInt::GetNames(QString*&Arr, int&QItems) { ToStringArr(Arr, QItems); }
   int TCellInt::GetLengthOfNamesList() { return 1; }
   //
                //     override object Clone(){
                //        return new TCellDouble(this->GetDoubleVal());
                //    }
//};//cl  //TCellInt




   //class TCellBool: TDataCell
      //{
      //    double val;
      //    :
      TCellBool::TCellBool() { this->val = BoolValByDefault; }
      TCellBool::TCellBool(double val) { SetByValDouble(val); }
      TCellBool::TCellBool(float val) { SetByValFloat(val); }
      TCellBool::TCellBool(int val) { SetByValInt(val); }
      TCellBool::TCellBool(bool val) { SetByValBool(val); }
      TCellBool::TCellBool(QString val) { SetByValString(val); }
      //
      TCellBool::TCellBool(double* val, int Q) { SetByArrDouble(val, Q); }
      TCellBool::TCellBool(float* val, int Q) { SetByArrFloat(val, Q); }
      TCellBool::TCellBool(int* val, int Q) { SetByArrInt(val, Q); }
      TCellBool::TCellBool(bool* val, int Q) { SetByArrBool(val, Q); }
      TCellBool::TCellBool(QString* val, int Q) { SetByArrString(val, Q); }
      //
                //hope they will not be needed
                //    TCellBool(TCellBool&obj){
                //        this->Assign(obj);
                //    }
                //    //
                //    TCellBool& operator =(TCellBool&obj){
                //        this->Assign(obj);
                //        return*this;
                //    }
                //    //
                //    void Assign(TCellBool&obj){
                //        this->data=obj.data;
                //    }
      void TCellBool::construct(int n){
          this->val=BoolValByDefault;
      }
       int TCellBool::GetTypeN() { return BoolTypeN; }
       int TCellBool::GetActiveN() { return 1;}
       void TCellBool::SetActiveN(int N) { }
       int TCellBool::GetLength() { return 1; }
       void TCellBool::SetLength(int L){}
       //
       double TCellBool::GetDoubleVal(){
           double r;
           int z;
           z=BoolToInt(this->val);
           r = (double)z;
           return r;
       }
       float TCellBool::GetFloatVal() {
           float r;
           r = (float)BoolToInt(this->val);
           return r;
       }
       int TCellBool::GetIntVal()
       {
           //int r;
           //r =(int) round(val);
           //return r;
           return BoolToInt(this->val);;
       }
       bool TCellBool::GetBoolVal() {
           //bool r;
           //if(BoolValByDefault==true){
           //    if (val == 0) r = false;
           //    else r = true;
           //}else{
           //    if (val == 1) r = true;
           //    else r = false;
           //}
           //return r;
           return val;
       }
       QString TCellBool::ToString() {
           QString s;
           s=IntToStringSimple(BoolToInt(val)); // s=RealToString(val);
           s.setNum(BoolToInt(val));
           return s;//val.ToString();
       }
       //
       double TCellBool::GetDoubleValN(int N) { return (double)BoolToInt(val); }
       float TCellBool::GetFloatValN(int N) { return (float)BoolToInt(val); }
       int TCellBool::GetIntValN(int N)
       {
            //int r;
            //r = (int)round(val);
            //return r;
            return BoolToInt(val);
       }
       bool TCellBool::GetBoolValN(int N)
       {
           //bool r;
           //if(BoolValByDefault==true){
           //    if (val == 0) r = false;
           //    else r = true;
           //}else{
           //    if (val == 1) r = true;
           //    else r = false;
           //}
           //return r;
           return val;
       }
       QString TCellBool::ToStringN(int N) {
           QString s;
           //QString RealToString(double x, int Repr_IntAndFrac0_ExpAfOrderLim1_ExpAnyhow2=0,  int QAftComma=6, int OrdAfWhichExp=6, int BaseDec=10);
           s=RealToString(val);
           s.setNum(val);
           return s;
       }
       //
       void TCellBool::SetByValDouble(double val) { this->val = IntToBool((int)round(val)); }
       void TCellBool::SetByValFloat(float val) { this->val = IntToBool((int)round(val)); }
       void TCellBool::SetByValInt(int val) { this->val = IntToBool(val); }
       void TCellBool::SetByValBool(bool val)
       {
            //int i;
            //i = BoolToInt(val);
            //this->val=i;
            // this->val=(double)i;
            this->val=val;
      }
      void TCellBool::SetByValString(QString val) {
          //this->val = Convert.ToDouble(val);
          //this->val = NumberParse.StrToFloat(val);
          this->val=IntToBool(StrToInt(val));
          this->val =IntToBool(val.toInt());
      } //hin S' ne abl convert!!
      //
      void TCellBool::SetByValDoubleN(double val, int N) { SetByValDouble(val); }
      void TCellBool::SetByValFloatN(float val, int N) { SetByValFloat(val); }
      void TCellBool::SetByValIntN(int val, int N) { SetByValInt(val); }
      void TCellBool::SetByValBoolN(bool val, int N) { SetByValBool(val); }
      void TCellBool::SetByValStringN(QString val, int N) { SetByValString(val); }
      //
      void TCellBool::SetVal(double val) { this->val = IntToBool((int)round(val));}
      void TCellBool::SetVal(int val) {this->val = IntToBool(val); }
      void TCellBool::SetVal(bool val)
      {
          //int i;
          //i = BoolToInt(val);
          //this->val=i;
          // this->val=(double)i;
          this->val=val;
      }
      void TCellBool::SetVal(QString val) {
          //this->val = Convert.ToDouble(val);
          this->val=IntToBool(StrToInt(val));
          this->val==IntToBool(val.toInt());
      }
      //
      void TCellBool::SetValN(double val, int N) { SetVal(val); }
      void TCellBool::SetValN(int val, int N) { SetVal(val); }
      void TCellBool::SetValN(bool val, int N) { SetVal(val); }
      void TCellBool::SetValN(QString val, int N) { SetVal(val); }
      //
      void TCellBool::SetByArrDouble(double* val, int Q){
          if(val!=NULL)SetByValDouble(val[1-1]);
          else SetByValDouble(0);
      }
      void TCellBool::SetByArrFloat(float* val, int Q)
      {
          if (val != NULL) SetByValFloat(val[1 - 1]);
          else SetByValFloat(0);
      }
      void TCellBool::SetByArrInt(int* val, int Q)
      {
          if (val != NULL) SetByValInt(val[1 - 1]);
          else SetByValInt(0);
      }
      void TCellBool::SetByArrBool(bool* val, int Q)
      {
          if (val != NULL) SetByValBool(val[1 - 1]);
          else SetByValBool(BoolValByDefault);
      }
      void TCellBool::SetByArrString(QString* val, int Q)
      {
          if (val != NULL) SetByValString(val[1 - 1]);
          else SetByValString("");
      }
      //
      void TCellBool::SetByArr(double* val, int Q){
          if(val!=NULL)SetByValDouble(val[1-1]);
          else SetByValDouble(0);
      }
      void TCellBool::SetByArr(int* val, int Q)
      {
          if (val != NULL) SetByValInt(val[1 - 1]);
          else SetByValInt(0);
      }
      void TCellBool::SetByArr(bool* val, int Q)
      {
          if (val != NULL) SetByValBool(val[1 - 1]);
          else SetByValBool(BoolValByDefault);
      }
      void TCellBool::SetByArr(QString* val, int Q)
      {
          if (val != NULL) SetByValString(val[1 - 1]);
          else SetByValString("");
      }
      //
      void TCellBool::AddOrInsDoubleVal(double val, int N)
      {
          this->val = IntToBool((int)round(val));
      }
      void TCellBool::AddOrInsFloatVal(float val, int N)
      {
          this->val = IntToBool((int)round(val));
      }
      void TCellBool::AddOrInsIntVal(int val, int N)
      {
          //this->val = (float)val;
          this->val = IntToBool(val);
      }
      void TCellBool::AddOrInsBoolVal(bool val, int N)
      {
          //int r;
          //r=BoolToInt(val);
          //this->val = r;
          this->val = val;
      }
      void TCellBool::AddOrInsStringVal(QString val, int N)
      {
          this->val=IntToBool(StrToInt(val, NULL, 10));
          //this->val.SetNum(val);// Convert.ToDouble(val);
      }
      //
      void TCellBool::DelValN(int N) { }
      //
      void TCellBool::GetDoubleArr(double*&Arr,  int&QItems) {
          QItems=1;
          Arr = new double[QItems];
          Arr[1 - 1] = GetDoubleVal();
      }
      void TCellBool::GetFloatArr( float*&Arr, int&QItems) {
          QItems = 1;
          Arr = new float[QItems];
          Arr[1 - 1] = GetFloatVal();
      }
      void TCellBool::GetIntArr( int*&Arr,  int&QItems) {
          QItems = 1;
          Arr = new int[QItems];
          Arr[1 - 1] = GetIntVal();
      }
      void TCellBool::GetBoolArr( bool*&Arr,  int&QItems) {
          QItems = 1;
          Arr = new bool[QItems];
          Arr[1 - 1] = GetBoolVal();
      }
      void TCellBool::ToStringArr(QString*&Arr, int&QItems) {
          QItems = 1;
          if(Arr!=NULL)delete[]Arr;
          Arr = new QString[QItems];
          Arr[1 - 1] = ToString();
      }
      //
      void TCellBool::SetNameN(QString name, int N) { SetByValStringN(name, N);  }
      void TCellBool::SetName1(QString name) { SetByValStringN(name, 1); }
      void TCellBool::SetName2(QString name) { SetByValStringN(name, 2); }
      void TCellBool::SetName3(QString name) { SetByValStringN(name, 3); }
      void TCellBool::SetNames(QString* Arr, int Q) { SetByArrString(Arr, Q); }
      QString TCellBool::GetNameN(int N) { return ToStringN(N); }
      QString TCellBool::GetName1() { return ToStringN(1); }
      QString TCellBool::GetName2() { return ToStringN(2); }
      QString TCellBool::GetName3() { return ToStringN(3); }
      void TCellBool::GetNames(QString*&Arr, int&QItems) { ToStringArr(Arr, QItems); }
      int TCellBool::GetLengthOfNamesList() { return 1; }
      //
                //     override object Clone(){
                //        return new TCellDouble(this->GetDoubleVal());
                //    }
   //};//cl  //TCellBool



      //class TCellString: TDataCell
         //{
         //    double val;
         //    :
         void TCellString::construct(int n){
             this->val="";
         }
         TCellString::TCellString() { this->val = ""; }
         TCellString::TCellString(double val) { SetByValDouble(val); }
         TCellString::TCellString(float val) { SetByValFloat(val); }
         TCellString::TCellString(int val) { SetByValInt(val); }
         TCellString::TCellString(bool val) { SetByValBool(val); }
         TCellString::TCellString(QString val) { SetByValString(val); }
         //
         TCellString::TCellString(double* val, int Q) { SetByArrDouble(val, Q); }
         TCellString::TCellString(float* val, int Q) { SetByArrFloat(val, Q); }
         TCellString::TCellString(int* val, int Q) { SetByArrInt(val, Q); }
         TCellString::TCellString(bool* val, int Q) { SetByArrBool(val, Q); }
         TCellString::TCellString(QString* val, int Q) { SetByArrString(val, Q); }
         //
                //hope they will not be needed
                //    TCellString(TCellString&obj){
                //        this->Assign(obj);
                //    }
                //    //
                //    TCellString& operator =(TCellString&obj){
                //        this->Assign(obj);
                //        return*this;
                //    }
                //    //
                //    void Assign(TCellString&obj){
                //        this->data=obj.data;
                //    }
          int TCellString::GetTypeN() { return StringTypeN; }
          int TCellString::GetActiveN() { return 1;}
          void TCellString::SetActiveN(int N) { }
          int TCellString::GetLength() { return 1; }
          void TCellString::SetLength(int L){}
          //
          double TCellString::GetDoubleVal(){
              double r;
              r=StrToReal(val, NULL);
              r=val.toDouble();
              return r;
          }
          float TCellString::GetFloatVal() {
              float r;
              r=StrToReal(val, NULL);
              r=val.toFloat();
              return r;
          }
          int TCellString::GetIntVal()
          {
              int r;
              r=StrToInt(val, NULL);
              r=val.toInt();
              return r;
          }
          bool TCellString::GetBoolVal() {
              int i=GetIntVal();
              return IntToBool(i);
          }
          QString TCellString::ToString() {
              //QString s;
              //s=IntToString(BoolToInt(val)); // s=RealToString(val);
              //s.setNum(BoolToInt(val));
              //return s;//val.ToString();
              return val;
          }
          //
          double TCellString::GetDoubleValN(int N) { return GetDoubleVal(); }
          float TCellString::GetFloatValN(int N) { return GetFloatVal();; }
          int TCellString::GetIntValN(int N) { return GetIntVal(); }
          bool TCellString::GetBoolValN(int N) { return GetBoolVal();}

          QString TCellString::ToStringN(int N) {
              return ToString();
          }
          //
          void TCellString::SetByValDouble(double val) {
              this->val=RealToString(val);
              this->val.setNum(val);
          }
          void TCellString::SetByValFloat(float val) {
              this->val=RealToString((double)val);
              this->val.setNum(val);
          }
          void TCellString::SetByValInt(int val) {
              this->val=IntToStr(val);
              this->val.setNum(val);
          }
          void TCellString::SetByValBool(bool val)
          {
               int i;
               i = BoolToInt(val);
               SetByValInt(i);
         }
         void TCellString::SetByValString(QString val) {
             this->val =val;
         }
         //
         void TCellString::SetByValDoubleN(double val, int N) { SetByValDouble(val); }
         void TCellString::SetByValFloatN(float val, int N) { SetByValFloat(val); }
         void TCellString::SetByValIntN(int val, int N) { SetByValInt(val); }
         void TCellString::SetByValBoolN(bool val, int N) { SetByValBool(val); }
         void TCellString::SetByValStringN(QString val, int N) { SetByValString(val); }
         //
         void TCellString::SetVal(double val) {
             this->val=RealToString(val);
             this->val.setNum(val);
         }
         void TCellString::SetVal(int val) {
             this->val=IntToStringSimple(val);
             this->val.setNum(val);
         }
         void TCellString::SetVal(bool val){
             int i;
             i = BoolToInt(val);
             SetByValInt(i);
         }
         void TCellString::SetVal(QString val) {
             this->val=val;
         }
         //
         void TCellString::SetValN(double val, int N){
             this->val=RealToString(val);
             this->val.setNum(val);
         }
         void TCellString::SetValN(int val, int N)  {
             this->val=IntToStringSimple(val);
             this->val.setNum(val);
         }
         void TCellString::SetValN(bool val, int N) {
             int i;
             i = BoolToInt(val);
             SetByValInt(i);
         }
         void TCellString::SetValN(QString val, int N){
             this->val=val;
         }
         //
         void TCellString::SetByArrDouble(double* val, int Q){
             if(val!=NULL)SetByValDouble(val[1-1]);
             else SetByValDouble(0);
         }
         void TCellString::SetByArrFloat(float* val, int Q)
         {
             if (val != NULL) SetByValFloat(val[1 - 1]);
             else SetByValFloat(0);
         }
         void TCellString::SetByArrInt(int* val, int Q)
         {
             if (val != NULL) SetByValInt(val[1 - 1]);
             else SetByValInt(0);
         }
         void TCellString::SetByArrBool(bool* val, int Q)
         {
             if (val != NULL) SetByValBool(val[1 - 1]);
             else SetByValBool(BoolValByDefault);
         }
         void TCellString::SetByArrString(QString* val, int Q)
         {
             if (val != NULL) SetByValString(val[1 - 1]);
             else SetByValString("");
         }
         //
         void TCellString::SetByArr(double* val, int Q){
             if(val!=NULL)SetByValDouble(val[1-1]);
             else SetByValDouble(0);
         }
         void TCellString::SetByArr(int* val, int Q)
         {
             if (val != NULL) SetByValInt(val[1 - 1]);
             else SetByValInt(0);
         }
         void TCellString::SetByArr(bool* val, int Q)
         {
             if (val != NULL) SetByValBool(val[1 - 1]);
             else SetByValBool(BoolValByDefault);
         }
         void TCellString::SetByArr(QString* val, int Q)
         {
             if (val != NULL) SetByValString(val[1 - 1]);
             else SetByValString("");
         }
         //
         void TCellString::AddOrInsDoubleVal(double val, int N) {
             this->val=RealToString(val);
             this->val.setNum(val);
         }
         void TCellString::AddOrInsFloatVal(float val, int N) {
             this->val=RealToString((double)val);
             this->val.setNum(val);
         }
         void TCellString::AddOrInsIntVal(int val, int N){
             this->val=IntToStringSimple(val);
             this->val.setNum(val);
         }
         void TCellString::AddOrInsBoolVal(bool val, int N)
         {
              int i;
              i = BoolToInt(val);
              SetByValInt(i);
        }
         void TCellString::AddOrInsStringVal(QString val, int N){
             this->val=val;
         }
         //
         void TCellString::DelValN(int N) { }
         //
         void TCellString::GetDoubleArr(double*&Arr,  int&QItems) {
             QItems=1;
             Arr = new double[QItems];
             Arr[1 - 1] = GetDoubleVal();
         }
         void TCellString::GetFloatArr( float*&Arr, int&QItems) {
             QItems = 1;
             Arr = new float[QItems];
             Arr[1 - 1] = GetFloatVal();
         }
         void TCellString::GetIntArr( int*&Arr,  int&QItems) {
             QItems = 1;
             Arr = new int[QItems];
             Arr[1 - 1] = GetIntVal();
         }
         void TCellString::GetBoolArr( bool*&Arr,  int&QItems) {
             QItems = 1;
             Arr = new bool[QItems];
             Arr[1 - 1] = GetBoolVal();
         }
         void TCellString::ToStringArr(QString*&Arr, int&QItems) {
             QItems = 1;
             if(Arr!=NULL)delete[]Arr;
             Arr = new QString[QItems];
             Arr[1 - 1] = ToString();
         }
         //
         void TCellString::SetNameN(QString name, int N) { SetByValStringN(name, N);  }
         void TCellString::SetName1(QString name) { SetByValStringN(name, 1); }
         void TCellString::SetName2(QString name) { SetByValStringN(name, 2); }
         void TCellString::SetName3(QString name) { SetByValStringN(name, 3); }
         void TCellString::SetNames(QString* Arr, int Q) { SetByArrString(Arr, Q); }
         QString TCellString::GetNameN(int N) { return ToStringN(N); }
         QString TCellString::GetName1() { return ToStringN(1); }
         QString TCellString::GetName2() { return ToStringN(2); }
         QString TCellString::GetName3() { return ToStringN(3); }
         void TCellString::GetNames(QString*&Arr, int&QItems) { ToStringArr(Arr, QItems); }
         int TCellString::GetLengthOfNamesList() { return 1; }
         //
                //     override object Clone(){
                //        return new TCellDoubleArr(this->GetDoubleVal());
                //    }
      //};//cl  //TCellString


         //class TCellDoubleArr: TDataCell
         //{
         //    double val;
         //    :
             TCellDoubleArr::TCellDoubleArr() {
                double val=0;
                //
                ActiveN=0;
                Length=0;
                //
                ActiveN=1;
                Length=1;
                //
                content.push_back(val);
             }
             TCellDoubleArr::TCellDoubleArr(double val) { SetByValDouble(val); }
             TCellDoubleArr::TCellDoubleArr(float val) { SetByValFloat(val); }
             TCellDoubleArr::TCellDoubleArr(int val) { SetByValInt(val); }
             TCellDoubleArr::TCellDoubleArr(bool val) { SetByValBool(val); }
             TCellDoubleArr::TCellDoubleArr(QString val) { SetByValString(val); }
             //
             TCellDoubleArr::TCellDoubleArr(double* val, int Q) { SetByArrDouble(val, Q); }
             TCellDoubleArr::TCellDoubleArr(float* val, int Q) { SetByArrFloat(val, Q); }
             TCellDoubleArr::TCellDoubleArr(int* val, int Q) { SetByArrInt(val, Q); }
             TCellDoubleArr::TCellDoubleArr(bool* val, int Q) { SetByArrBool(val, Q); }
             TCellDoubleArr::TCellDoubleArr(QString* val, int Q) { SetByArrString(val, Q); }
             //
             //hope they will not be needed
             //    TCellDoubleArr(TCellDoubleArr&obj){
             //        this->Assign(obj);
             //    }
             //    //
             //    TCellDoubleArr& operator =(TCellDoubleArr&obj){
             //        this->Assign(obj);
             //        return*this;
             //    }
             //    //
             //    void Assign(TCellDoubleArr&obj){
             //        this->data=obj.data;
             //    }
             void TCellDoubleArr::construct(int n){
                //this->val=new double[n];
                for(int i=1; i<=n; i++) this->content.push_back(0);
             }
             int TCellDoubleArr::GetTypeN() { return DoubleArrayTypeN; }
             int TCellDoubleArr::GetActiveN() { return ActiveN;}
             void TCellDoubleArr::SetActiveN(int N) {
                if(N>=1 && N<=content.size()) this->ActiveN=N;
             }
             int TCellDoubleArr::GetLength() { return Length; }
             void TCellDoubleArr::SetLength(int L){
                double val=0;
                int iL=content.size();
                if(L>=1 && L<=MaxInt){
                if(L>iL){
                for(int i=1; i<=L-iL; i++){
                content.push_back(val);
                }
                }else if(L<iL){
                for(int i=1; i<=iL-L; i++){
                content.pop_back();
                }
                }
                Length=L;
                }
             }//SetLength
             //
             double TCellDoubleArr::GetDoubleVal() {
                double val;
                val=content[ActiveN-1];
                return val;
             }
             float TCellDoubleArr::GetFloatVal() {
                float val;
                val=(float)content[ActiveN-1];
                return val;
             }
             int TCellDoubleArr::GetIntVal()
             {
                double val;
                val=content[ActiveN-1];
                int r;
                //r =(int) round(content[ActiveN-1]);
                r =(int) round(val);
                return r;
             }
             bool TCellDoubleArr::GetBoolVal() {
                bool r;
                double val=content[ActiveN-1];
                if(BoolValByDefault==true){
                if (val == 0) r = false;
                else r = true;
                }else{
                if (val == 1) r = true;
                else r = false;
                }
                return r;
             }
             QString TCellDoubleArr::ToString() {
                double val=content[ActiveN-1];
                QString s;
                s=RealToString(val);
                s.setNum(val);
                return s;//val.ToString();
             }
             //
             double TCellDoubleArr::GetDoubleValN(int N) {
                double val=0;
                if(N>=1 && N<=content.size()){
                val=content[N-1];
                }
                return val;
             }
             float TCellDoubleArr::GetFloatValN(int N){
                float val=0;
                if(N>=1 && N<=content.size()){
                val=(float)content[N-1];
                }
                return val;
             }
             int TCellDoubleArr::GetIntValN(int N)
             {
                int r=0;
                double val=0;
                this->Length=this->content.size();
                if(N>=1 && N<=Length){
                val=this->content[N-1];
                r = (int)round(val);
                }
                return r;
             }
             bool TCellDoubleArr::GetBoolValN(int N)
             {
                double val;
                bool r=BoolValByDefault;
                this->Length=this->content.size();
                if(N>= 1 && N<=Length){
                val=this->content[N-1];
                if(BoolValByDefault==true){
                if (val == 0) r = false;
                else r = true;
                }else{
                if (val == 1) r = true;
                else r = false;
                }
                }
                return r;
             }
             QString TCellDoubleArr::ToStringN(int N) {
                QString s;
                //QString RealToString(double x, int Repr_IntAndFrac0_ExpAfOrderLim1_ExpAnyhow2=0,  int QAftComma=6, int OrdAfWhichExp=6, int BaseDec=10);
                double val=content[ActiveN-1];
                s=RealToString(val);
                s.setNum(val);
                return s;
             }
             //
             void TCellDoubleArr::SetByValDouble(double val) {
                //this->val = (double)val;
                content[ActiveN-1]=val;
             }
             void TCellDoubleArr::SetByValFloat(float val) {
                //this->val = (double)val;
                content[ActiveN-1]=(double)val;
             }
             void TCellDoubleArr::SetByValInt(int val) {
                //this->val = (double)val;
                content[ActiveN-1]=(double)val;
             }
             void TCellDoubleArr::SetByValBool(bool val)
             {
                int i;
                i = BoolToInt(val);
                //this->val=(double)i;
                content[ActiveN-1]=(double)i;
             }
             void TCellDoubleArr::SetByValString(QString val) {
                double x;
                //this->val = Convert.ToDouble(val);
                //this->val = NumberParse.StrToFloat(val);
                x=StrToReal(val);
                x =val.toDouble();
                content[ActiveN-1]=x;
             } //hin S' ne abl convert!!
             //
             void TCellDoubleArr::SetByValDoubleN(double val, int N) {
                //SetByValDouble(val);
                if(N>=1 && N<=content.size()) content[N-1]=val;
             }
             void TCellDoubleArr::SetByValFloatN(float val, int N){
                //SetByValFloat(val);
                if(N>=1 && N<=content.size()) content[N-1]=(double)val;
             }
             void TCellDoubleArr::SetByValIntN(int val, int N) {
                //SetByValInt(val);
                if(N>=1 && N<=content.size()) content[N-1]=(double)val;
             }
             void TCellDoubleArr::SetByValBoolN(bool val, int N) {
                SetByValBool(val);
                if(N>=1 && N<=content.size()) content[N-1]=(double)BoolToInt(val);
             }
             void TCellDoubleArr::SetByValStringN(QString val, int N) {
                SetByValString(val);
                double x;
                x=StrToReal(val);
                x=val.toDouble();
                if(N>=1 && N<=content.size()) content[N-1]=x;
             }
             //
             void TCellDoubleArr::SetVal(double val) {
                //this->val = (double)val;
                content[ActiveN-1]=val;
             }
             void TCellDoubleArr::SetVal(int val) {
                //this->val = (double)val;
                content[ActiveN-1]=(double)val;
             }
             void TCellDoubleArr::SetVal(bool val)
             {
                int i;
                i = BoolToInt(val);
                //this->val = (double)i;
                content[ActiveN-1]=(double)i;
             }
             void TCellDoubleArr::SetVal(QString val) {
                double x;
                //this->val = Convert.ToDouble(val);
                //this->val=StrToReal(val);
                //this->val=val.toDouble();
                x=StrToReal(val);
                x=val.toDouble();
                content[ActiveN-1]=x;
             }
             //
             void TCellDoubleArr::SetValN(double val, int N) {
                //SetVal(val);
                if(N>=1 && N<=content.size())content[N-1]=val;
             }
             void TCellDoubleArr::SetValN(int val, int N) {
                //SetVal(val);
                if(N>=1 && N<=content.size())content[N-1]=(double)val;
             }
             void TCellDoubleArr::SetValN(bool val, int N) {
                //SetVal(val);
                int x=BoolToInt(val);
                if(N>=1 && N<=content.size())content[N-1]=(double)x;
             }
             void TCellDoubleArr::SetValN(QString val, int N) {
                //SetVal(val);
                double x=StrToReal(val);
                x=val.toDouble();
                if(N>=1 && N<=content.size())content[N-1]=x;
             }
             //
             void TCellDoubleArr::SetByArrDouble(double* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
             }
             void TCellDoubleArr::SetByArrFloat(float* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(double)val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
             }
             void TCellDoubleArr::SetByArrInt(int* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(double)val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
             }
             void TCellDoubleArr::SetByArrBool(bool* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(double)BoolToInt(val[i-1]);
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
             }
             void TCellDoubleArr::SetByArrString(QString* val, int Q){
                double x;
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                x=StrToReal(val[i-1]);
                x=val[i-1].toDouble();
                content[i-1]=x;
                }
                }
                else
                {
                // for(int i=1; i<=MinN; i++){
                //     x=0;
                //     content[i-1]=x;
                //}
                //NOp; NULL as argument let it be means nothing to change
                }
             }
             //
             void TCellDoubleArr::SetByArr(double* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
             }
             void TCellDoubleArr::SetByArr(int* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(double)val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
             }
             void TCellDoubleArr::SetByArr(bool* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(double)BoolToInt(val[i-1]);
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
             }
             void TCellDoubleArr::SetByArr(QString* val, int Q){
                double x;
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                x=StrToReal(val[i-1]);
                x=val[i-1].toDouble();
                content[i-1]=x;
                }
                }
                else
                {
                // for(int i=1; i<=MinN; i++){
                //     x=0;
                //     content[i-1]=x;
                //}
                //NOp; NULL as argument let it be means nothing to change
                }
             }
             //
             void TCellDoubleArr::AddOrInsDoubleVal(double val, int N){
                //SetByValDouble(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length) content.insert(content.begin()+N-1,val);
                else{
                content.push_back(val);
                Length++;
                //ActiveN=N;
                }
             }
             void TCellDoubleArr::AddOrInsFloatVal(float val, int N){
                //SetByValDouble(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length) content.insert(content.begin()+N-1,(double)val);
                else{
                content.push_back((double)val);
                Length++;
                //ActiveN=N;
                }
             }
             void TCellDoubleArr::AddOrInsIntVal(int val, int N){
                //SetByValDouble(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length) content.insert(content.begin()+N-1,(double)val);
                else{
                content.push_back((double)val);
                Length++;
                //ActiveN=N;
                }
             }
             void TCellDoubleArr::AddOrInsBoolVal(bool val, int N){
                int x=BoolToInt(val);
                //SetByValDouble(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length) {
                content.insert(content.begin()+N-1,(double)x);
                }else{
                content.push_back((double)x);
                Length++;
                //ActiveN=N;
                }
             }
             void TCellDoubleArr::AddOrInsStringVal(QString val, int N){
                double x=StrToReal(val);
                x=val.toDouble();
                //SetByValDouble(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length){
                content.insert(content.begin()+N-1,x);
                }else{
                content.push_back(x);
                Length++;
                //ActiveN=N;
                }
             }
             //
             void TCellDoubleArr::DelValN(int N) {
                this->Length=this->content.size();
                if(N>=1 && N<=Length){
                content.erase(content.begin()+N-1);
                }
             }
             //
             void TCellDoubleArr::GetDoubleArr(double*&Arr,  int&QItems) {
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new double[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetDoubleValN(i);
             }
             void TCellDoubleArr::GetFloatArr( float*&Arr, int&QItems){
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new float[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetFloatValN(i);
             }
             void TCellDoubleArr::GetIntArr( int*&Arr,  int&QItems){
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new int[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetIntValN(i);
             }
             void TCellDoubleArr::GetBoolArr( bool*&Arr,  int&QItems){
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new bool[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetBoolValN(i);
             }
             void TCellDoubleArr::ToStringArr(QString*&Arr, int&QItems) {
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new QString[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = ToStringN(i);
             }
             //
             void TCellDoubleArr::SetNameN(QString name, int N) { SetByValStringN(name, N);  }
             void TCellDoubleArr::SetName1(QString name) { SetByValStringN(name, 1); }
             void TCellDoubleArr::SetName2(QString name) { SetByValStringN(name, 2); }
             void TCellDoubleArr::SetName3(QString name) { SetByValStringN(name, 3); }
             void TCellDoubleArr::SetNames(QString* Arr, int Q) { SetByArrString(Arr, Q); }
             QString TCellDoubleArr::GetNameN(int N) { return ToStringN(N); }
             QString TCellDoubleArr::GetName1() { return ToStringN(1); }
             QString TCellDoubleArr::GetName2() { return ToStringN(2); }
             QString TCellDoubleArr::GetName3() { return ToStringN(3); }
             void TCellDoubleArr::GetNames(QString*&Arr, int&QItems) { ToStringArr(Arr, QItems); }
             int TCellDoubleArr::GetLengthOfNamesList() { return 1; }
             //
         //     override object Clone(){
         //        return new TCellDoubleArr(this->GetDoubleVal());
         //    }
//};//cl TCellDoubleArr



             //class TCellFloatArr: TDataCell
             //{
             //    double val;
             //    :
                TCellFloatArr::TCellFloatArr() {
                double val=0;
                //
                ActiveN=0;
                Length=0;
                //
                ActiveN=1;
                Length=1;
                //
                content.push_back(val);
                }
                void TCellFloatArr::construct(int n){
                //this->val=new float[n];
                //for(int i=1; i<=n; i++) val[i-1]=0;
                for(int i=1; i<=n; i++) this->content.push_back(0);
                }
                TCellFloatArr::TCellFloatArr(double val) { SetByValDouble(val); }
                TCellFloatArr::TCellFloatArr(float val) { SetByValFloat(val); }
                TCellFloatArr::TCellFloatArr(int val) { SetByValInt(val); }
                TCellFloatArr::TCellFloatArr(bool val) { SetByValBool(val); }
                TCellFloatArr::TCellFloatArr(QString val) { SetByValString(val); }
                //
                TCellFloatArr::TCellFloatArr(double* val, int Q) { SetByArrDouble(val, Q); }
                TCellFloatArr::TCellFloatArr(float* val, int Q) { SetByArrFloat(val, Q); }
                TCellFloatArr::TCellFloatArr(int* val, int Q) { SetByArrInt(val, Q); }
                TCellFloatArr::TCellFloatArr(bool* val, int Q) { SetByArrBool(val, Q); }
                TCellFloatArr::TCellFloatArr(QString* val, int Q) { SetByArrString(val, Q); }
                //
                //hope they will not be needed
             //    TCellFloatArr(TCellFloatArr&obj){
             //        this->Assign(obj);
             //    }
             //    //
             //    TCellFloatArr& operator =(TCellFloatArr&obj){
             //        this->Assign(obj);
             //        return*this;
             //    }
             //    //
             //    void Assign(TCellFloatArr&obj){
             //        this->data=obj.data;
             //    }
                int TCellFloatArr::GetTypeN() { return FloatArrayTypeN; }
                int TCellFloatArr::GetActiveN() { return ActiveN;}
                void TCellFloatArr::SetActiveN(int N) {
                if(N>=1 && N<=content.size()) this->ActiveN=N;
                }
                int TCellFloatArr::GetLength() { return Length; }
                void TCellFloatArr::SetLength(int L){
                float val=0;
                int iL=content.size();
                if(L>=1 && L<=MaxInt){
                if(L>iL){
                for(int i=1; i<=L-iL; i++){
                content.push_back(val);
                }
                }else if(L<iL){
                for(int i=1; i<=iL-L; i++){
                content.pop_back();
                }
                }
                Length=L;
                }
                }//SetLength
                //
                double TCellFloatArr::GetDoubleVal() {
                double val;
                val=(double)content[ActiveN-1];
                return val;
                }
                float TCellFloatArr::GetFloatVal() {
                float val;
                //val=(float)content[ActiveN-1];
                val=content[ActiveN-1];
                return val;
                }
                int TCellFloatArr::GetIntVal()
                {
                float val;
                val=content[ActiveN-1];
                int r;
                //r =(int) round(content[ActiveN-1]);
                r =(int) round(val);
                return r;
                }
                bool TCellFloatArr::GetBoolVal() {
                bool r;
                float val=content[ActiveN-1];
                if(BoolValByDefault==true){
                if (val == 0) r = false;
                else r = true;
                }else{
                if (val == 1) r = true;
                else r = false;
                }
                return r;
                }
                QString TCellFloatArr::ToString() {
                float val=content[ActiveN-1];
                QString s;
                s=RealToString((double)val);
                s.setNum(val);
                return s;//val.ToString();
                }
                //
                double TCellFloatArr::GetDoubleValN(int N) {
                double val=0;
                if(N>=1 && N<=content.size()){
                val=(double)content[N-1];
                }
                return val;
                }
                float TCellFloatArr::GetFloatValN(int N){
                float val=0;
                if(N>=1 && N<=content.size()){
                //val=(float)content[N-1];
                val=content[N-1];
                }
                return val;
                }
                int TCellFloatArr::GetIntValN(int N)
                {
                float val;
                int r=0;
                if(N>=1 && N<=content.size()){
                val=content[N-1];
                r = (int)round(val);
                }
                return r;
                }
                bool TCellFloatArr::GetBoolValN(int N)
                {
                bool r=BoolValByDefault;
                float val;
                this->Length=this->content.size();
                if(N>=1 && N<=Length){
                if(BoolValByDefault==true){
                if (val == 0) r = false;
                else r = true;
                }else{
                if (val == 1) r = true;
                else r = false;
                }
                }
                return r;
                }
                QString TCellFloatArr::ToStringN(int N) {
                QString s;
                //QString RealToString(double x, int Repr_IntAndFrac0_ExpAfOrderLim1_ExpAnyhow2=0,  int QAftComma=6, int OrdAfWhichExp=6, int BaseDec=10);
                //double val=(double)content[ActiveN-1];
                float val=content[ActiveN-1];
                //s=RealToString((float)val);
                s=RealToString(val);
                s.setNum(val);
                return s;
                }
                //
                void TCellFloatArr::SetByValDouble(double val) {
                //this->val = (double)val;
                content[ActiveN-1]=(float)val;
                }
                void TCellFloatArr::SetByValFloat(float val) {
                //this->val = (double)val;
                //content[ActiveN-1]=(float)val;
                content[ActiveN-1]=(float)val;
                }
                void TCellFloatArr::SetByValInt(int val) {
                //this->val = (double)val;
                content[ActiveN-1]=(float)val;
                }
                void TCellFloatArr::SetByValBool(bool val)
                {
                int i;
                i = BoolToInt(val);
                //this->val=(double)i;
                content[ActiveN-1]=(float)i;
                }
                void TCellFloatArr::SetByValString(QString val) {
                float x;
                //this->val = Convert.ToDouble(val);
                //this->val = NumberParse.StrToFloat(val);
                x=(float)StrToReal(val);
                x =val.toFloat();
                content[ActiveN-1]=x;
                } //hin S' ne abl convert!!
                //
                void TCellFloatArr::SetByValDoubleN(double val, int N) {
                //SetByValDouble(val);
                if(N>=1 && N<=content.size()) content[N-1]=(float)val;
                }
                void TCellFloatArr::SetByValFloatN(float val, int N){
                //SetByValFloat(val);
                //if(N>=1 && N<=content.size()) content[N-1]=(float)val;
                if(N>=1 && N<=content.size()) content[N-1]=val;
                }
                void TCellFloatArr::SetByValIntN(int val, int N) {
                //SetByValInt(val);
                if(N>=1 && N<=content.size()) content[N-1]=(float)val;
                }
                void TCellFloatArr::SetByValBoolN(bool val, int N) {
                SetByValBool(val);
                if(N>=1 && N<=content.size()) content[N-1]=(float)BoolToInt(val);
                }
                void TCellFloatArr::SetByValStringN(QString val, int N) {
                SetByValString(val);
                double x;
                x=StrToReal(val);
                x=val.toFloat();
                if(N>=1 && N<=content.size()) content[N-1]=(float)x;
                }
                //
                void TCellFloatArr::SetVal(double val) {
                //this->val = (double)val;
                content[ActiveN-1]=(float)val;
                }
                void TCellFloatArr::SetVal(int val) {
                //this->val = (double)val;
                //content[ActiveN-1]=(float)val;
                content[ActiveN-1]=val;
                }
                void TCellFloatArr::SetVal(bool val)
                {
                int i;
                i = BoolToInt(val);
                //this->val = (double)i;
                content[ActiveN-1]=(float)i;
                }
                void TCellFloatArr::SetVal(QString val) {
                double x;
                //this->val = Convert.ToDouble(val);
                //this->val=StrToReal(val);
                //this->val=val.toDouble();
                x=StrToReal(val);
                x=val.toDouble();
                content[ActiveN-1]=(float)x;
                }
                //
                void TCellFloatArr::SetValN(double val, int N) {
                //SetVal(val);
                if(N>=1 && N<=content.size())content[N-1]=(float)val;
                }
                void TCellFloatArr::SetValN(int val, int N) {
                //SetVal(val);
                //if(N>=1 && N<=content.size())content[N-1]=(float)val;
                if(N>=1 && N<=content.size())content[N-1]=val;
                }
                void TCellFloatArr::SetValN(bool val, int N) {
                //SetVal(val);
                int x=BoolToInt(val);
                if(N>=1 && N<=content.size())content[N-1]=(float)x;
                }
                void TCellFloatArr::SetValN(QString val, int N) {
                //SetVal(val);
                double x=StrToReal(val);
                x=val.toDouble();
                if(N>=1 && N<=content.size())content[N-1]=(float)x;
                }
                //
                void TCellFloatArr::SetByArrDouble(double* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(float)val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellFloatArr::SetByArrFloat(float* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                //for(int i=1; i<=MinN; i++) content[i-1]=(float)val[i-1];
                for(int i=1; i<=MinN; i++) content[i-1]=val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellFloatArr::SetByArrInt(int* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(float)val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellFloatArr::SetByArrBool(bool* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(float)BoolToInt(val[i-1]);
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellFloatArr::SetByArrString(QString* val, int Q){
                float x;
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                x=(float)StrToReal(val[i-1]);
                x=val[i-1].toFloat();
                content[i-1]=x;
                }
                }
                else
                {
                // for(int i=1; i<=MinN; i++){
                //     x=0;
                //     content[i-1]=x;
                //}
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                //
                void TCellFloatArr::SetByArr(double* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(float)val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellFloatArr::SetByArr(int* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(float)val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellFloatArr::SetByArr(bool* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(float)BoolToInt(val[i-1]);
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellFloatArr::SetByArr(QString* val, int Q){
                float x;
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                x=(float)StrToReal(val[i-1]);
                x=val[i-1].toFloat();
                content[i-1]=x;
                }
                }
                else
                {
                // for(int i=1; i<=MinN; i++){
                //     x=0;
                //     content[i-1]=x;
                //}
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                //
                void TCellFloatArr::AddOrInsDoubleVal(double val, int N){
                //SetByValDouble(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length){
                content.insert(content.begin()+N-1,(float)val);
                }else{
                content.push_back((float)val);
                Length++;
                //ActiveN=N;
                }
                }
                void TCellFloatArr::AddOrInsFloatVal(float val, int N){
                //SetByValDouble(val);
                //if(N>=1 && N<=content.size()) content.insert(N-1,(float)val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length){
                content.insert(content.begin()+N-1,(float)val);
                }else{
                //content.push_back((float)val);
                content.push_back(val);
                Length++;
                //ActiveN=N;
                }
                }
                void TCellFloatArr::AddOrInsIntVal(int val, int N){
                //SetByValDouble(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length){
                content.insert(content.begin()+N-1,(float)val);
                }else{
                content.push_back((float)val);
                Length++;
                //ActiveN=N;
                }
                }
                void TCellFloatArr::AddOrInsBoolVal(bool val, int N){
                int x=BoolToInt(val);
                //SetByValDouble(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length){
                content.insert(content.begin()+N-1,(float)val);
                }else{
                content.push_back((float)x);
                Length++;
                //ActiveN=N;
                }
                }
                void TCellFloatArr::AddOrInsStringVal(QString val, int N){
                float x=(float)StrToReal(val);
                x=val.toFloat();
                //SetByValDouble(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length){
                content.insert(content.begin()+N-1,x);
                }else{
                content.push_back(x);
                Length++;
                //ActiveN=N;
                }
                }
                //
                void TCellFloatArr::DelValN(int N) {
                if(N>=1 && N<=content.size()){
                content.erase(content.begin()+N-1);
                }
                }
                //
                void TCellFloatArr::GetDoubleArr(double*&Arr,  int&QItems) {
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new double[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetDoubleValN(i);
                }
                void TCellFloatArr::GetFloatArr( float*&Arr, int&QItems){
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new float[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetFloatValN(i);
                }
                void TCellFloatArr::GetIntArr( int*&Arr,  int&QItems){
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new int[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetIntValN(i);
                }
                void TCellFloatArr::GetBoolArr( bool*&Arr,  int&QItems){
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new bool[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetBoolValN(i);
                }
                void TCellFloatArr::ToStringArr(QString*&Arr, int&QItems) {
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new QString[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = ToStringN(i);
                }
                //
                void TCellFloatArr::SetNameN(QString name, int N) { SetByValStringN(name, N);  }
                void TCellFloatArr::SetName1(QString name) { SetByValStringN(name, 1); }
                void TCellFloatArr::SetName2(QString name) { SetByValStringN(name, 2); }
                void TCellFloatArr::SetName3(QString name) { SetByValStringN(name, 3); }
                void TCellFloatArr::SetNames(QString* Arr, int Q) { SetByArrString(Arr, Q); }
                QString TCellFloatArr::GetNameN(int N) { return ToStringN(N); }
                QString TCellFloatArr::GetName1() { return ToStringN(1); }
                QString TCellFloatArr::GetName2() { return ToStringN(2); }
                QString TCellFloatArr::GetName3() { return ToStringN(3); }
                void TCellFloatArr::GetNames(QString*&Arr, int&QItems) { ToStringArr(Arr, QItems); }
                int TCellFloatArr::GetLengthOfNamesList() { return 1; }
                //
             //     override object Clone(){
             //        return new TCellFloatArr(this->GetDoubleVal());
             //    }
    //};//cl TCellFloatArr



                //class TCellIntArr: TDataCell
                //{
                //    double val;
                //    :
                TCellIntArr::TCellIntArr() {
                double val=0;
                //
                ActiveN=0;
                Length=0;
                //
                ActiveN=1;
                Length=1;
                //
                content.push_back(val);
                }
                void TCellIntArr::construct(int n){
                //this->val=new int[n];
                //for(int i=1; i<=n; i++) val[i-1]=0;
                for(int i=1; i<=n; i++) this->content.push_back(0);
                }
                TCellIntArr::TCellIntArr(double val) { SetByValDouble(val); }
                TCellIntArr::TCellIntArr(float val) { SetByValFloat(val); }
                TCellIntArr::TCellIntArr(int val) { SetByValInt(val); }
                TCellIntArr::TCellIntArr(bool val) { SetByValBool(val); }
                TCellIntArr::TCellIntArr(QString val) { SetByValString(val); }
                //
                TCellIntArr::TCellIntArr(double* val, int Q) { SetByArrDouble(val, Q); }
                TCellIntArr::TCellIntArr(float* val, int Q) { SetByArrFloat(val, Q); }
                TCellIntArr::TCellIntArr(int* val, int Q) { SetByArrInt(val, Q); }
                TCellIntArr::TCellIntArr(bool* val, int Q) { SetByArrBool(val, Q); }
                TCellIntArr::TCellIntArr(QString* val, int Q) { SetByArrString(val, Q); }
                //
                //hope they will not be needed
                //    TCellIntArr(TCellIntArr&obj){
                //        this->Assign(obj);
                //    }
                //    //
                //    TCellIntArr& operator =(TCellIntArr&obj){
                //        this->Assign(obj);
                //        return*this;
                //    }
                //    //
                //    void Assign(TCellIntArr&obj){
                //        this->data=obj.data;
                //    }
                int TCellIntArr::GetTypeN() { return IntArrayTypeN; }
                int TCellIntArr::GetActiveN() { return ActiveN;}
                void TCellIntArr::SetActiveN(int N) {
                if(N>=1 && N<=content.size()) this->ActiveN=N;
                }
                int TCellIntArr::GetLength() { return Length; }
                void TCellIntArr::SetLength(int L){
                int val=0;
                int iL=content.size();
                if(L>=1 && L<=MaxInt){
                if(L>iL){
                for(int i=1; i<=L-iL; i++){
                content.push_back(val);
                }
                }else if(L<iL){
                for(int i=1; i<=iL-L; i++){
                content.pop_back();
                }
                }
                Length=L;
                }
                }//SetLength
                //
                double TCellIntArr::GetDoubleVal() {
                double val;
                val=(double)content[ActiveN-1];
                return val;
                }
                float TCellIntArr::GetFloatVal() {
                float val;
                val=(float)content[ActiveN-1];
                return val;
                }
                int TCellIntArr::GetIntVal()
                {
                int val;
                val=content[ActiveN-1];
                //int r;
                //r =(int) round(content[ActiveN-1]);
                //r =(int) round(val);
                //return r;
                return val;
                }
                bool TCellIntArr::GetBoolVal() {
                bool r;
                int val=content[ActiveN-1];
                if(BoolValByDefault==true){
                if (val == 0) r = false;
                else r = true;
                }else{
                if (val == 1) r = true;
                else r = false;
                }
                return r;
                }
                QString TCellIntArr::ToString() {
                int val=content[ActiveN-1];
                QString s;
                s=IntToStringSimple(val);
                s.setNum(val);
                return s;//val.ToString();
                }
                //
                double TCellIntArr::GetDoubleValN(int N) {
                double val=0;
                if(N>=1 && N<=content.size()){
                val=(double)content[N-1];
                }
                return val;
                }
                float TCellIntArr::GetFloatValN(int N){
                float val=0;
                if(N>=1 && N<=content.size()){
                val=(float)content[N-1];
                }
                return val;
                }
                int TCellIntArr::GetIntValN(int N)
                {
                int r=0;
                if(N>=1 && N<=content.size()){
                //r = (int)round(content[N-1]);
                r = content[N-1];
                }
                return r;
                }
                bool TCellIntArr::GetBoolValN(int N)
                {
                int val;
                bool r=BoolValByDefault, chk=BoolValByDefault;
                //if(chk==true){
                this->Length=this->content.size();
                if(N>=1 && N<=this->Length){
                val=content[N-1];
                if(BoolValByDefault==true){
                if (val == 0) r = false;
                else r = true;
                }else{
                if (val == 1) r = true;
                else r = false;
                }
                }
                return r;
                }
                QString TCellIntArr::ToStringN(int N) {
                QString s="";
                //QString RealToString(double x, int Repr_IntAndFrac0_ExpAfOrderLim1_ExpAnyhow2=0,  int QAftComma=6, int OrdAfWhichExp=6, int BaseDec=10);
                int val=content[ActiveN-1];
                //float val=content[ActiveN-1];
                s=IntToStringSimple(val);
                s.setNum(val);
                return s;
                }
                //
                void TCellIntArr::SetByValDouble(double val) {
                //this->val = (double)val;
                int y=(int)round(val);
                content[ActiveN-1]=y;
                }
                void TCellIntArr::SetByValFloat(float val) {
                //this->val = (double)val;
                //content[ActiveN-1]=(float)val;
                //int y=(int)round(val);
                int y=(int)round(val);
                content[ActiveN-1]=y;
                }
                void TCellIntArr::SetByValInt(int val) {
                //this->val = (double)val;
                //content[ActiveN-1]=(float)val;
                content[ActiveN-1]=val;
                }
                void TCellIntArr::SetByValBool(bool val)
                {
                int i;
                i = BoolToInt(val);
                //this->val=(double)i;
                content[ActiveN-1]=i;
                }
                void TCellIntArr::SetByValString(QString val) {
                double x;
                int y;
                x=StrToReal(val);
                x=val.toDouble();
                y=IntPart(x);
                y=(int)round(x);
                y=val.toInt();
                content[ActiveN-1]=y;
                } //hin S' ne abl convert!!
                //
                void TCellIntArr::SetByValDoubleN(double val, int N) {
                //SetByValDouble(val);
                if(N>=1 && N<=content.size()) content[N-1]=(int)round(val);
                }
                void TCellIntArr::SetByValFloatN(float val, int N){
                //SetByValFloat(val);
                //if(N>=1 && N<=content.size()) content[N-1]=(float)val;
                if(N>=1 && N<=content.size())  content[N-1]=(int)round(val);
                }
                void TCellIntArr::SetByValIntN(int val, int N) {
                //SetByValInt(val);
                if(N>=1 && N<=content.size()) content[N-1]=val;
                }
                void TCellIntArr::SetByValBoolN(bool val, int N) {
                SetByValBool(val);
                if(N>=1 && N<=content.size()) content[N-1]=BoolToInt(val);
                }
                void TCellIntArr::SetByValStringN(QString val, int N) {
                double x;
                int y;
                x=StrToReal(val);
                x=val.toDouble();
                y=IntPart(x);
                y=(int)round(x);
                y=val.toInt();
                if(N>=1 && N<=content.size())content[N-1]=y;
                }
                //
                void TCellIntArr::SetVal(double val) {
                //this->val = (double)val;
                content[ActiveN-1]=(int)round(val);
                }
                void TCellIntArr::SetVal(int val) {
                //this->val = (double)val;
                //content[ActiveN-1]=(float)val;
                content[ActiveN-1]=val;
                }
                void TCellIntArr::SetVal(bool val)
                {
                int i;
                i = BoolToInt(val);
                //this->val = (double)i;
                content[ActiveN-1]=BoolToInt(i);
                }
                void TCellIntArr::SetVal(QString val) {
                double x=StrToReal(val);
                int y;
                y=IntPart(x);
                y=(int)round(x);
                y=val.toInt();
                content[ActiveN-1]=y;
                }
                //
                void TCellIntArr::SetValN(double val, int N) {
                //SetVal(val);
                if(N>=1 && N<=content.size())content[N-1]=(int)round(val);
                }
                void TCellIntArr::SetValN(int val, int N) {
                //SetVal(val);
                //if(N>=1 && N<=content.size())content[N-1]=(float)val;
                if(N>=1 && N<=content.size())content[N-1]=val;
                }
                void TCellIntArr::SetValN(bool val, int N) {
                //SetVal(val);
                int x=BoolToInt(val);
                if(N>=1 && N<=content.size())content[N-1]=x;
                }
                void TCellIntArr::SetValN(QString val, int N) {
                double x;
                int y;
                x=StrToReal(val);
                x=val.toDouble();
                y=IntPart(x);
                y=(int)round(x);
                y=val.toInt();
                if(N>=1 && N<=content.size())content[N-1]=y;
                }
                //
                void TCellIntArr::SetByArrDouble(double* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(float)val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellIntArr::SetByArrFloat(float* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                //for(int i=1; i<=MinN; i++) content[i-1]=(float)val[i-1];
                for(int i=1; i<=MinN; i++) content[i-1]=val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellIntArr::SetByArrInt(int* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(float)val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellIntArr::SetByArrBool(bool* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(float)BoolToInt(val[i-1]);
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellIntArr::SetByArrString(QString* val, int Q){
                double x;
                int y;
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                x=StrToReal(val[i-1]);
                x=val[i-1].toDouble();
                y=IntPart(x);
                y=(int)round(x);
                y=val[i-1].toInt();
                content[i-1]=y;
                }
                }
                else
                {
                // for(int i=1; i<=MinN; i++){
                //     x=0;
                //     content[i-1]=x;
                //}
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                //
                void TCellIntArr::SetByArr(double* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(int)round(val[i-1]);
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellIntArr::SetByArr(int* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellIntArr::SetByArr(bool* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=BoolToInt(val[i-1]);
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellIntArr::SetByArr(QString* val, int Q){
                double x;
                int y;
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                x=StrToReal(val[i-1]);
                x=val[i-1].toDouble();
                y=IntPart(x);
                y=(int)round(x);
                y=val[i-1].toInt();
                content[i-1]=y;
                }
                }
                else
                {
                // for(int i=1; i<=MinN; i++){
                //     x=0;
                //     content[i-1]=x;
                //}
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                //
                void TCellIntArr::AddOrInsDoubleVal(double val, int N){
                //SetByValDouble(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length){
                content.insert(content.begin()+N-1,(int)round(val));
                }else{
                content.push_back((int)round(val));
                Length++;
                //ActiveN=N;
                }
                }
                void TCellIntArr::AddOrInsFloatVal(float val, int N){
                //SetByValDouble(val);
                //if(N>=1 && N<=content.size()) content.insert(N-1,(float)val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length){
                content.insert(content.begin()+N-1,(int)round(val));
                }else{
                //content.push_back((float)val);
                content.push_back((int)round(val));
                Length++;
                //ActiveN=N;
                }
                }
                void TCellIntArr::AddOrInsIntVal(int val, int N){
                //SetByValDouble(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length){
                content.insert(content.begin()+N-1,(int)round(val));
                }else{
                content.push_back(val);
                Length++;
                //ActiveN=N;
                }
                }
                void TCellIntArr::AddOrInsBoolVal(bool val, int N){
                int x=BoolToInt(val);
                //SetByValDouble(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length){
                content.insert(content.begin()+N-1,BoolToInt(val));
                }else{
                content.push_back(BoolToInt(x));
                Length++;
                //ActiveN=N;
                }
                }
                void TCellIntArr::AddOrInsStringVal(QString val, int N){
                double x=StrToReal(val);
                int y=IntPart(x);
                x=val.toDouble();
                y=(int)round(x);
                //SetByValDouble(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length){
                content.insert(content.begin()+N-1,y);
                }else{
                content.push_back(y);
                Length++;
                //ActiveN=N;
                }
                }
                //
                void TCellIntArr::DelValN(int N) {
                this->Length=this->content.size();
                if(N>=1 && N<=Length){
                content.erase(content.begin()+N-1);
                }
                }
                //
                void TCellIntArr::GetDoubleArr(double*&Arr,  int&QItems) {
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new double[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetDoubleValN(i);
                }
                void TCellIntArr::GetFloatArr( float*&Arr, int&QItems){
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new float[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetFloatValN(i);
                }
                void TCellIntArr::GetIntArr( int*&Arr,  int&QItems){
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new int[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetIntValN(i);
                }
                void TCellIntArr::GetBoolArr( bool*&Arr,  int&QItems){
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new bool[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetBoolValN(i);
                }
                void TCellIntArr::ToStringArr(QString*&Arr, int&QItems) {
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new QString[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = ToStringN(i);
                }
                //
                void TCellIntArr::SetNameN(QString name, int N) { SetByValStringN(name, N);  }
                void TCellIntArr::SetName1(QString name) { SetByValStringN(name, 1); }
                void TCellIntArr::SetName2(QString name) { SetByValStringN(name, 2); }
                void TCellIntArr::SetName3(QString name) { SetByValStringN(name, 3); }
                void TCellIntArr::SetNames(QString* Arr, int Q) { SetByArrString(Arr, Q); }
                QString TCellIntArr::GetNameN(int N) { return ToStringN(N); }
                QString TCellIntArr::GetName1() { return ToStringN(1); }
                QString TCellIntArr::GetName2() { return ToStringN(2); }
                QString TCellIntArr::GetName3() { return ToStringN(3); }
                void TCellIntArr::GetNames(QString*&Arr, int&QItems) { ToStringArr(Arr, QItems); }
                int TCellIntArr::GetLengthOfNamesList() { return 1; }
                //
                //     override object Clone(){
                //        return new TCellIntArr(this->GetDoubleVal());
                //    }
        //};//cl TCellIntArr


                //class TCellBoolArr: TDataCell
                //{
                //    double val;
                //    :
                TCellBoolArr::TCellBoolArr() {
                double val=0;
                //
                ActiveN=0;
                Length=0;
                //
                ActiveN=1;
                Length=1;
                //
                content.push_back(val);
                }
                TCellBoolArr::TCellBoolArr(double val) { SetByValDouble(val); }
                TCellBoolArr::TCellBoolArr(float val) { SetByValFloat(val); }
                TCellBoolArr::TCellBoolArr(int val) { SetByValInt(val); }
                TCellBoolArr::TCellBoolArr(bool val) { SetByValBool(val); }
                TCellBoolArr::TCellBoolArr(QString val) { SetByValString(val); }
                //
                TCellBoolArr::TCellBoolArr(double* val, int Q) { SetByArrDouble(val, Q); }
                TCellBoolArr::TCellBoolArr(float* val, int Q) { SetByArrFloat(val, Q); }
                TCellBoolArr::TCellBoolArr(int* val, int Q) { SetByArrInt(val, Q); }
                TCellBoolArr::TCellBoolArr(bool* val, int Q) { SetByArrBool(val, Q); }
                TCellBoolArr::TCellBoolArr(QString* val, int Q) { SetByArrString(val, Q); }
                //
                //hope they will not be needed
                //    TCellBoolArr(TCellBoolArr&obj){
                //        this->Assign(obj);
                //    }
                //    //
                //    TCellBoolArr& operator =(TCellBoolArr&obj){
                //        this->Assign(obj);
                //        return*this;
                //    }
                //    //
                //    void Assign(TCellBoolArr&obj){
                //        this->data=obj.data;
                //    }
                void TCellBoolArr::construct(int n){
                //this->val=new bool[n];
                //for(int i=1; i<=n; i++) val[i-1]=BoolValByDefault;
                for(int i=1; i<=n; i++) this->content.push_back(BoolValByDefault);
                }
                int TCellBoolArr::GetTypeN() { return BoolArrayTypeN; }
                int TCellBoolArr::GetActiveN() { return ActiveN;}
                void TCellBoolArr::SetActiveN(int N) {
                if(N>=1 && N<=content.size()) this->ActiveN=N;
                }
                int TCellBoolArr::GetLength() { return Length; }
                void TCellBoolArr::SetLength(int L){
                bool val=BoolValByDefault;
                int iL=content.size();
                if(L>=1 && L<=MaxInt){
                if(L>iL){
                for(int i=1; i<=L-iL; i++){
                content.push_back(val);
                }
                }else if(L<iL){
                for(int i=1; i<=iL-L; i++){
                content.pop_back();
                }
                }
                Length=L;
                }
                }//SetLength
                //
                double TCellBoolArr::GetDoubleVal() {
                double val;
                val=(double)BoolToInt(content[ActiveN-1]);
                return val;
                }
                float TCellBoolArr::GetFloatVal() {
                float val;
                val=(float)BoolToInt(content[ActiveN-1]);
                return val;
                }
                int TCellBoolArr::GetIntVal()
                {
                int val;
                val=BoolToInt(content[ActiveN-1]);
                //int r;
                //r =(int) round(content[ActiveN-1]);
                //r =(int) round(val);
                //return r;
                return val;
                }
                bool TCellBoolArr::GetBoolVal() {
                //bool r=BoolValByDefault, chk=BoolValByDefault;
                //int val=content[ActiveN-1];
                ////if(chk==true){
                //if(BoolValByDefault==true){
                //    if (val == 0) r = false;
                //    else r = true;
                //}else{
                //    if (val == 1) r = true;
                //    else r = false;
                //}
                //return r;
                return this->content[ActiveN-1];
                }
                QString TCellBoolArr::ToString() {
                int val=BoolToInt(content[ActiveN-1]);
                QString s;
                s=IntToStringSimple(val);
                s.setNum(val);
                return s;//val.ToString();
                }
                //
                double TCellBoolArr::GetDoubleValN(int N) {
                double val=0;
                if(N>=1 && N<=content.size()){
                val=(double)BoolToInt(content[N-1]);
                }
                return val;
                }
                float TCellBoolArr::GetFloatValN(int N){
                float val=0;
                if(N>=1 && N<=content.size()){
                val=(float)BoolToInt(content[N-1]);
                }
                return val;
                }
                int TCellBoolArr::GetIntValN(int N)
                {
                int r=0;
                if(N>=1 && N<=content.size()){
                //r = (int)round(content[N-1]);
                r = BoolToInt(content[N-1]);
                }
                return r;
                }
                bool TCellBoolArr::GetBoolValN(int N)
                {
                //bool r=BoolValByDefault, chk=BoolValByDefault;
                ////if(chk==true){
                //if(BoolValByDefault==true){
                //    if (val == 0) r = false;
                //    else r = true;
                //}else{
                //    if (val == 1) r = true;
                //    else r = false;
                //}
                //return r;
                return content[N-1];
                }
                QString TCellBoolArr::ToStringN(int N) {
                QString s="";
                //QString RealToString(double x, int Repr_IntAndFrac0_ExpAfOrderLim1_ExpAnyhow2=0,  int QAftComma=6, int OrdAfWhichExp=6, int BaseDec=10);
                int val=content[ActiveN-1];
                //float val=content[ActiveN-1];
                s=IntToStringSimple(val);
                s.setNum(val);
                return s;
                }
                //
                void TCellBoolArr::SetByValDouble(double val) {
                //this->val = (double)val;
                int y=(int)round(val);
                content[ActiveN-1]=IntToBool(y);
                }
                void TCellBoolArr::SetByValFloat(float val) {
                //this->val = (double)val;
                //content[ActiveN-1]=(float)val;
                //int y=(int)round(val);
                int y=(int)round(val);
                content[ActiveN-1]=IntToBool(y);;
                }
                void TCellBoolArr::SetByValInt(int val) {
                //this->val = (double)val;
                //content[ActiveN-1]=(float)val;
                content[ActiveN-1]=IntToBool(val);
                }
                void TCellBoolArr::SetByValBool(bool val)
                {
                //int i;
                //i = BoolToInt(val);
                ////this->val=(double)i;
                //content[ActiveN-1]=i;
                content[ActiveN-1]=val;
                }
                void TCellBoolArr::SetByValString(QString val) {
                double x;
                int y;
                x=StrToReal(val);
                x=val.toDouble();
                y=IntPart(x);
                y=(int)round(x);
                y=val.toInt();
                content[ActiveN-1]=IntToBool(y);
                } //hin S' ne abl convert!!
                //
                void TCellBoolArr::SetByValDoubleN(double val, int N) {
                //SetByValDouble(val);
                if(N>=1 && N<=content.size()) content[N-1]=IntToBool((int)round(val));
                }
                void TCellBoolArr::SetByValFloatN(float val, int N){
                //SetByValFloat(val);
                //if(N>=1 && N<=content.size()) content[N-1]=(float)val;
                if(N>=1 && N<=content.size())  content[N-1]=IntToBool((int)round(val));
                }
                void TCellBoolArr::SetByValIntN(int val, int N) {
                //SetByValInt(val);
                if(N>=1 && N<=content.size()) content[N-1]=IntToBool(val);
                }
                void TCellBoolArr::SetByValBoolN(bool val, int N) {
                SetByValBool(val);
                if(N>=1 && N<=content.size()) content[N-1]=val;
                }
                void TCellBoolArr::SetByValStringN(QString val, int N) {
                double x;
                int y;
                x=StrToReal(val);
                x=val.toDouble();
                y=IntPart(x);
                y=(int)round(x);
                y=val.toInt();
                if(N>=1 && N<=content.size())content[N-1]=IntToBool(y);
                }
                //
                void TCellBoolArr::SetVal(double val) {
                //this->val = (double)val;
                content[ActiveN-1]=IntToBool((int)round(val));
                }
                void TCellBoolArr::SetVal(int val) {
                //this->val = (double)val;
                //content[ActiveN-1]=(float)val;
                content[ActiveN-1]=IntToBool(val);
                }
                void TCellBoolArr::SetVal(bool val)
                {
                //int i;
                //i = BoolToInt(val);
                ////this->val = (double)i;
                //content[ActiveN-1]=BoolToInt(i);
                content[ActiveN-1]=val;
                }
                void TCellBoolArr::SetVal(QString val) {
                double x=StrToReal(val);
                int y;
                y=IntPart(x);
                y=(int)round(x);
                y=val.toInt();
                content[ActiveN-1]=IntToBool(y);
                }
                //
                void TCellBoolArr::SetValN(double val, int N) {
                //SetVal(val);
                this->Length=content.size();
                if(N>=1 && N<=Length) content[N-1]=IntToBool((int)round(val));
                }
                void TCellBoolArr::SetValN(int val, int N) {
                //SetVal(val);
                //if(N>=1 && N<=content.size())content[N-1]=(float)val;
                this->Length=content.size();
                if(N>=1 && N<=Length) content[N-1]=IntToBool(val);
                }
                void TCellBoolArr::SetValN(bool val, int N) {
                //SetVal(val);
                //int x=BoolToInt(val);
                //if(N>=1 && N<=content.size())content[N-1]=x;
                this->Length=content.size();
                if(N>=1 && N<=Length)content[N-1]=val;
                }
                void TCellBoolArr::SetValN(QString val, int N) {
                double x;
                int y;
                x=StrToReal(val);
                x=val.toDouble();
                y=IntPart(x);
                y=(int)round(x);
                y=val.toInt();
                if(N>=1 && N<=content.size())content[N-1]=y;
                }
                //
                void TCellBoolArr::SetByArrDouble(double* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(int)round(val[i-1]);
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellBoolArr::SetByArrFloat(float* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                //for(int i=1; i<=MinN; i++) content[i-1]=(float)val[i-1];
                for(int i=1; i<=MinN; i++) content[i-1]=val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellBoolArr::SetByArrInt(int* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=BoolToInt(val[i-1]);
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellBoolArr::SetByArrBool(bool* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellBoolArr::SetByArrString(QString* val, int Q){
                double x;
                int y;
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                x=StrToReal(val[i-1]);
                x=val[i-1].toDouble();
                y=IntPart(x);
                y=(int)round(x);
                y=val[i-1].toInt();
                content[i-1]=IntToBool(y);
                }
                }
                else
                {
                // for(int i=1; i<=MinN; i++){
                //     x=0;
                //     content[i-1]=x;
                //}
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                //
                void TCellBoolArr::SetByArr(double* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=IntToBool((int)round(val[i-1]));
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellBoolArr::SetByArr(int* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=BoolToInt(val[i-1]);
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellBoolArr::SetByArr(bool* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=BoolToInt(val[i-1]);
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellBoolArr::SetByArr(QString* val, int Q){
                double x;
                int y;
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                x=StrToReal(val[i-1]);
                x=val[i-1].toDouble();
                y=IntPart(x);
                y=(int)round(x);
                y=val[i-1].toInt();
                content[i-1]=IntToBool(y);
                }
                }
                else
                {
                // for(int i=1; i<=MinN; i++){
                //     x=0;
                //     content[i-1]=x;
                //}
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                //
                void TCellBoolArr::AddOrInsDoubleVal(double val, int N){
                //SetByValDouble(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length) content.insert(content.begin()+N-1,(int)round(val));
                else{
                content.push_back(IntToBool((int)round(val)));
                Length++;
                //ActiveN=N;
                }
                }
                void TCellBoolArr::AddOrInsFloatVal(float val, int N){
                //SetByValDouble(val);
                //if(N>=1 && N<=content.size()) content.insert(N-1,(float)val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length) content.insert(content.begin()+N-1,(int)round(val));
                else{
                //content.push_back((float)val);
                content.push_back(IntToBool((int)round(val)));
                Length++;
                //ActiveN=N;
                }
                }
                void TCellBoolArr::AddOrInsIntVal(int val, int N){
                //SetByValDouble(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length) content.insert(content.begin()+N-1,IntToBool(val));
                else{
                content.push_back(IntToBool(val));
                this->Length++;
                //ActiveN=N;
                }
                }
                void TCellBoolArr::AddOrInsBoolVal(bool val, int N){
                int x=BoolToInt(val);
                //SetByValDouble(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length){
                content.insert(content.begin()+N-1,val);
                }else{
                content.push_back(x);
                Length++;
                //ActiveN=N;
                }
                }
                void TCellBoolArr::AddOrInsStringVal(QString val, int N){
                double x=StrToReal(val);
                int y=IntPart(x);
                x=val.toDouble();
                y=(int)round(x);
                //SetByValDouble(val);
                if(N>=1 && N<=content.size()){
                content.insert(content.begin()+N-1,IntToBool(y));
                }else{
                content.push_back(IntToBool(y));
                Length++;
                //ActiveN=N;
                }
                }
                //
                void TCellBoolArr::DelValN(int N) {
                if(N>=1 && N<=content.size()){
                content.erase(content.begin()+N-1);
                }
                }
                //
                void TCellBoolArr::GetDoubleArr(double*&Arr,  int&QItems) {
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new double[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetDoubleValN(i);
                }
                void TCellBoolArr::GetFloatArr( float*&Arr, int&QItems){
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new float[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetFloatValN(i);
                }
                void TCellBoolArr::GetIntArr( int*&Arr,  int&QItems){
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new int[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetIntValN(i);
                }
                void TCellBoolArr::GetBoolArr( bool*&Arr,  int&QItems){
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new bool[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetBoolValN(i);
                }
                void TCellBoolArr::ToStringArr(QString*&Arr, int&QItems) {
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new QString[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = ToStringN(i);
                }
                //
                void TCellBoolArr::SetNameN(QString name, int N) { SetByValStringN(name, N);  }
                void TCellBoolArr::SetName1(QString name) { SetByValStringN(name, 1); }
                void TCellBoolArr::SetName2(QString name) { SetByValStringN(name, 2); }
                void TCellBoolArr::SetName3(QString name) { SetByValStringN(name, 3); }
                void TCellBoolArr::SetNames(QString* Arr, int Q) { SetByArrString(Arr, Q); }
                QString TCellBoolArr::GetNameN(int N) { return ToStringN(N); }
                QString TCellBoolArr::GetName1() { return ToStringN(1); }
                QString TCellBoolArr::GetName2() { return ToStringN(2); }
                QString TCellBoolArr::GetName3() { return ToStringN(3); }
                void TCellBoolArr::GetNames(QString*&Arr, int&QItems) { ToStringArr(Arr, QItems); }
                int TCellBoolArr::GetLengthOfNamesList() { return 1; }
                //
                //     override object Clone(){
                //        return new TCellBoolArr(this->GetDoubleVal());
                //    }
            //};//cl TCellBoolArr



   //class TCellStringArr: TDataCell
                //{
                //    double val;
                //    :
                TCellStringArr::TCellStringArr() {
                QString val="";
                //
                ActiveN=0;
                Length=0;
                //
                ActiveN=1;
                Length=1;
                //
                content.push_back(val);
                }
                TCellStringArr::TCellStringArr(double val) { SetByValDouble(val); }
                TCellStringArr::TCellStringArr(float val) { SetByValFloat(val); }
                TCellStringArr::TCellStringArr(int val) { SetByValInt(val); }
                TCellStringArr::TCellStringArr(bool val) { SetByValBool(val); }
                TCellStringArr::TCellStringArr(QString val) { SetByValString(val); }
                //
                TCellStringArr::TCellStringArr(double* val, int Q) { SetByArrDouble(val, Q); }
                TCellStringArr::TCellStringArr(float* val, int Q) { SetByArrFloat(val, Q); }
                TCellStringArr::TCellStringArr(int* val, int Q) { SetByArrInt(val, Q); }
                TCellStringArr::TCellStringArr(bool* val, int Q) { SetByArrBool(val, Q); }
                TCellStringArr::TCellStringArr(QString* val, int Q) { SetByArrString(val, Q); }
                //
                //hope they will not be needed
                //    TCellStringArr(TCellStringArr&obj){
                //        this->Assign(obj);
                //    }
                //    //
                //    TCellStringArr& operator =(TCellStringArr&obj){
                //        this->Assign(obj);
                //        return*this;
                //    }
                //    //
                //    void Assign(TCellStringArr&obj){
                //        this->data=obj.data;
                //    }
                void TCellStringArr::construct(int n){
                //this->val=new QString[n];
                //for(int i=1; i<=n; i++) val[i-1]="";
                for(int i=1; i<=n; i++) this->content.push_back("");
                }
                int TCellStringArr::GetTypeN() { return StringArrayTypeN; }
                int TCellStringArr::GetActiveN() { return ActiveN;}
                void TCellStringArr::SetActiveN(int N) {
                if(N>=1 && N<=content.size()) this->ActiveN=N;
                }
                int TCellStringArr::GetLength() { return Length; }
                void TCellStringArr::SetLength(int L){
                QString val="";
                int iL=content.size();
                if(L>=1 && L<=MaxInt){
                if(L>iL){
                for(int i=1; i<=L-iL; i++){
                content.push_back(val);
                }
                }else if(L<iL){
                for(int i=1; i<=iL-L; i++){
                content.pop_back();
                }
                }
                Length=L;
                }
                }//SetLength
                //
                double TCellStringArr::GetDoubleVal() {
                double val;
                val=StrToReal(content[ActiveN-1]);
                //val=(double)content[ActiveN-1];
                val=content[ActiveN-1].toDouble();
                return val;
                }
                float TCellStringArr::GetFloatVal() {
                float val;
                //val=(floatcontent[ActiveN-1];
                val=(float)StrToReal(content[ActiveN-1]);
                val=content[ActiveN-1].toFloat();
                return val;
                }
                int TCellStringArr::GetIntVal()
                {
                int val;
                //val=content[ActiveN-1];
                val=StrToInt(content[ActiveN-1]);
                val=content[ActiveN-1].toInt();
                //int r;
                //r =(int) round(content[ActiveN-1]);
                //r =(int) round(val);
                //return r;
                return val;
                }
                bool TCellStringArr::GetBoolVal() {
                bool r, ItIsTrueWord, ItIsFalseWord;
                QString val;
                ItIsTrueWord=IsTrueWord(content[ActiveN-1]);
                ItIsFalseWord=IsFalseWord(content[ActiveN-1]);
                //val=content[ActiveN-1];
                if(BoolValByDefault==true){
                if (ItIsFalseWord) r = false;
                else r = true;
                }else{
                if (ItIsTrueWord) r = true;
                else r = false;
                }
                return r;
                }
                QString TCellStringArr::ToString() {
                //int val=content[ActiveN-1];
                //QString s;
                //s=IntToString(val);
                //s.setNum(val);
                //return s;//val.ToString();
                return content[ActiveN-1];
                }
                //
                double TCellStringArr::GetDoubleValN(int N) {
                double val=0;
                if(N>=1 && N<=content.size()){
                val=StrToReal(content[N-1]);
                val=content[N-1].toDouble();
                }
                return val;
                }
                float TCellStringArr::GetFloatValN(int N){
                float val=0;
                if(N>=1 && N<=content.size()){
                val=(float)StrToReal(content[N-1]);
                val=content[N-1].toFloat();
                }
                return val;
                }
                int TCellStringArr::GetIntValN(int N)
                {
                int r=0;
                if(N>=1 && N<=content.size()){
                //r = (int)round(content[N-1]);
                r = StrToInt(content[N-1]);
                r=content[N-1].toInt();
                }
                return r;
                }
                bool TCellStringArr::GetBoolValN(int N)
                {
                bool r=BoolValByDefault, chk=BoolValByDefault;
                if(N>=1 && N<=content.size()){
                //if(chk==true){
                if(BoolValByDefault==true){
                if (IsFalseWord(content[N-1])) r = false;
                else r = true;
                }else{
                if (IsTrueWord(content[N-1])) r = true;
                else r = false;
                }
                }
                return r;
                }
                QString TCellStringArr::ToStringN(int N) {
                QString s="";
                ////QString RealToString(double x, int Repr_IntAndFrac0_ExpAfOrderLim1_ExpAnyhow2=0,  int QAftComma=6, int OrdAfWhichExp=6, int BaseDec=10);
                //int val=content[ActiveN-1];
                ////float val=content[ActiveN-1];
                //s=IntToString(val);
                //s.setNum(val);
                //return s;
                if(N>=1 && N<=content.size()) s=content[N-1];
                return s;
                }
                //
                void TCellStringArr::SetByValDouble(double val) {
                QString s;
                s.setNum(val);
                s=RealToString(val);
                content[ActiveN-1]=s;
                }
                void TCellStringArr::SetByValFloat(float val) {
                QString s;
                s.setNum(val);
                s=RealToString((double)val);
                content[ActiveN-1]=s;
                }
                void TCellStringArr::SetByValInt(int val) {
                QString s;
                s.setNum(val);
                s=IntToStr(val);
                content[ActiveN-1]=s;
                }
                void TCellStringArr::SetByValBool(bool val)
                {
                int i;
                i = BoolToInt(val);
                //this->val=(double)i;
                content[ActiveN-1]=IntToStr(i);
                content[ActiveN-1].setNum(i);
                }
                void TCellStringArr::SetByValString(QString val) {
                content[ActiveN-1]=val;
                }
                //
                void TCellStringArr::SetByValDoubleN(double val, int N) {
                //SetByValDouble(val);
                if(N>=1 && N<=content.size()) content[N-1]=RealToString(val);
                if(N>=1 && N<=content.size()) content[N-1].setNum(val);
                }
                void TCellStringArr::SetByValFloatN(float val, int N){
                //SetByValFloat(val);
                if(N>=1 && N<=content.size()) content[N-1]=RealToString((double)val);
                if(N>=1 && N<=content.size()) content[N-1].setNum(val);
                }
                void TCellStringArr::SetByValIntN(int val, int N) {
                //SetByValInt(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length) (content[N-1])=IntToStringSimple(val);
                if(N>=1 && N<=Length) content[N-1].setNum(val);
                }
                void TCellStringArr::SetByValBoolN(bool val, int N) {
                SetByValBool(val);
                if(N>=1 && N<=content.size()) content[N-1]=IntToStr(BoolToInt(val));
                if(N>=1 && N<=content.size()) content[N-1].setNum(BoolToInt(val));
                }
                void TCellStringArr::SetByValStringN(QString val, int N) {
                if(N>=1 && N<=content.size())content[N-1]=val;
                }
                //
                void TCellStringArr::SetVal(double val) {
                //this->val = (double)val;
                content[ActiveN-1]=RealToString(val);
                content[ActiveN-1].setNum(val);
                }
                void TCellStringArr::SetVal(int val) {
                //this->val = (double)val;
                //content[ActiveN-1]=(float)val;
                content[ActiveN-1]=IntToStr(val);
                content[ActiveN-1].setNum(val);
                }
                void TCellStringArr::SetVal(bool val)
                {
                int i;
                i = BoolToInt(val);
                content[ActiveN-1]=IntToStr(i);
                content[ActiveN-1].setNum(i);
                }
                void TCellStringArr::SetVal(QString val) {
                content[ActiveN-1]=val;
                }
                //
                void TCellStringArr::SetValN(double val, int N) {
                //SetVal(val);
                if(N>=1 && N<=content.size())content[N-1]=RealToString(val);
                if(N>=1 && N<=content.size())content[N-1].setNum(val);
                }
                void TCellStringArr::SetValN(int val, int N) {
                //SetVal(val);
                //if(N>=1 && N<=content.size())content[N-1]=(float)val;
                if(N>=1 && N<=content.size())content[N-1]=IntToStr(val);
                if(N>=1 && N<=content.size())content[N-1].setNum(val);
                }
                void TCellStringArr::SetValN(bool val, int N) {
                if(N>=1 && N<=content.size())content[N-1]=IntToStr(BoolToInt(val));
                if(N>=1 && N<=content.size())content[N-1].setNum(BoolToInt(val));
                }
                void TCellStringArr::SetValN(QString val, int N) {
                if(N>=1 && N<=content.size())content[N-1]=val;
                }
                //
                void TCellStringArr::SetByArrDouble(double* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                content[i-1]=RealToString(val[i-1]);
                content[i-1].setNum(val[i-1]);
                }
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellStringArr::SetByArrFloat(float* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                content[i-1]=RealToString((double)val[i-1]);
                content[i-1].setNum(val[i-1]);
                }
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellStringArr::SetByArrInt(int* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                content[i-1]=IntToStr(val[i-1]);
                content[i-1].setNum(val[i-1]);
                }
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellStringArr::SetByArrBool(bool* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) {
                content[i-1]=IntToStr(BoolToInt(val[i-1]));
                content[i-1].setNum(BoolToInt(val[i-1]));
                }
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellStringArr::SetByArrString(QString* val, int Q){
                //double x;
                //int y;
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                //x=StrToReal(val[i-1]);
                //x=val[i-1].toDouble();
                //y=IntPart(x);
                //y=(int)round(x);
                //y=val[i-1].toInt();
                //content[i-1]=y;
                content[i-1]=val[i-1];
                }
                }
                else
                {
                // for(int i=1; i<=MinN; i++){
                //     x=0;
                //     content[i-1]=x;
                //}
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                //
                void TCellStringArr::SetByArr(double* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                //content[i-1]=(int)round(val[i-1]);
                content[i-1]=RealToString(val[i-1]);
                content[i-1].setNum(val[i-1]);
                }
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellStringArr::SetByArr(int* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                //content[i-1]=(int)round(val[i-1]);
                content[i-1]=RealToString((double)val[i-1]);
                content[i-1].setNum(val[i-1]);
                }
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellStringArr::SetByArr(bool* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                content[i-1]=IntToStr(BoolToInt(val[i-1]));
                content[i-1].setNum(BoolToInt(val[i-1]));
                }
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellStringArr::SetByArr(QString* val, int Q){
                double x;
                int y;
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                //x=StrToReal(val[i-1]);
                //x=val[i-1].toDouble();
                //y=IntPart(x);
                //y=(int)round(x);
                //y=val[i-1].toInt();
                //content[i-1]=y;
                content[i-1]=val[i-1];
                }
                }
                else
                {
                // for(int i=1; i<=MinN; i++){
                //     x=0;
                //     content[i-1]=x;
                //}
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                //
                void TCellStringArr::AddOrInsDoubleVal(double val, int N){
                //SetByValDouble(val);
                QString s;
                s=RealToString(val);
                s.setNum(val);
                if(N>=1 && N<=content.size()) content.insert(content.begin()+N-1,s);
                else{
                content.push_back(s);
                Length++;
                //ActiveN=N;
                }
                }
                void TCellStringArr::AddOrInsFloatVal(float val, int N){
                //SetByValDouble(val);
                //if(N>=1 && N<=content.size()) content.insert(N-1,(float)val);
                QString s;
                s=RealToString((double)val);
                s.setNum(val);
                if(N>=1 && N<=content.size()) content.insert(content.begin()+N-1,s);
                else{
                //content.push_back((float)val);
                content.push_back(s);
                Length++;
                //ActiveN=N;
                }
                }
                void TCellStringArr::AddOrInsIntVal(int val, int N){
                //SetByValDouble(val);
                QString s;
                s=IntToStringSimple(val);
                s.setNum(val);
                if(N>=1 && N<=content.size()) content.insert(content.begin()+N-1,s);
                else{
                content.push_back(s);
                Length++;
                //ActiveN=N;
                }
                }
                void TCellStringArr::AddOrInsBoolVal(bool val, int N){
                int x=BoolToInt(val);
                //SetByValDouble(val);
                QString s;
                s=IntToStringSimple(x);
                s.setNum(x);
                if(N>=1 && N<=content.size()){
                content.insert(content.begin()+N-1,s);
                }else{
                content.push_back(s);
                Length++;
                //ActiveN=N;
                }
                }
                void TCellStringArr::AddOrInsStringVal(QString val, int N){
                //double x=StrToReal(val);
                //int y=IntPart(x);
                //x=val.toDouble();
                //y=(int)round(x);
                //SetByValDouble(val);
                if(N>=1 && N<=content.size()){
                content.insert(content.begin()+N-1,val);
                }else{
                content.push_back(val);
                Length++;
                //ActiveN=N;
                }
                }
                //
                void TCellStringArr::DelValN(int N) {
                if(N>=1 && N<=content.size()){
                content.erase(content.begin()+N-1);
                }
                }
                //
                void TCellStringArr::GetDoubleArr(double*&Arr,  int&QItems) {
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new double[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetDoubleValN(i);
                }
                void TCellStringArr::GetFloatArr( float*&Arr, int&QItems){
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new float[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetFloatValN(i);
                }
                void TCellStringArr::GetIntArr( int*&Arr,  int&QItems){
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new int[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetIntValN(i);
                }
                void TCellStringArr::GetBoolArr( bool*&Arr,  int&QItems){
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new bool[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetBoolValN(i);
                }
                void TCellStringArr::ToStringArr(QString*&Arr, int&QItems) {
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new QString[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = ToStringN(i);
                }
                //
                void TCellStringArr::SetNameN(QString name, int N) { SetByValStringN(name, N);  }
                void TCellStringArr::SetName1(QString name) { SetByValStringN(name, 1); }
                void TCellStringArr::SetName2(QString name) { SetByValStringN(name, 2); }
                void TCellStringArr::SetName3(QString name) { SetByValStringN(name, 3); }
                void TCellStringArr::SetNames(QString* Arr, int Q) { SetByArrString(Arr, Q); }
                QString TCellStringArr::GetNameN(int N) { return ToStringN(N); }
                QString TCellStringArr::GetName1() { return ToStringN(1); }
                QString TCellStringArr::GetName2() { return ToStringN(2); }
                QString TCellStringArr::GetName3() { return ToStringN(3); }
                void TCellStringArr::GetNames(QString*&Arr, int&QItems) { ToStringArr(Arr, QItems); }
                int TCellStringArr::GetLengthOfNamesList() { return 1; }
                //
                //     override object Clone(){
                //        return new TCellStringArr(this->GetDoubleVal());
                //    }
                //};//cl TCellStringArr



                //class TDBCOlHeader_Items_Double: TDataCell
                //{
                //    double val;
                //    :
                TDBCOlHeader_Items_Double::TDBCOlHeader_Items_Double() {
                /*double val=0;
                //
                ActiveN=0;
                Length=0;
                //
                ActiveN=1;
                Length=1;
                //
                content.push_back(val);*/
                this->construct();
                }
                //TDBCOlHeader_Items_Double::TDBCOlHeader_Items_Double(double val) { this->construct(); SetByValDouble(val); }
                //TDBCOlHeader_Items_Double::TDBCOlHeader_Items_Double(float val) { this->construct(); SetByValFloat(val); }
                //TDBCOlHeader_Items_Double::TDBCOlHeader_Items_Double(int val) {  this->construct(); SetByValInt(val); }
                //TDBCOlHeader_Items_Double::TDBCOlHeader_Items_Double(bool val) { this->construct(); SetByValBool(val); }
                //TDBCOlHeader_Items_Double::TDBCOlHeader_Items_Double(QString val) { this->construct(); SetByValString(val); }
                //
                TDBCOlHeader_Items_Double::TDBCOlHeader_Items_Double(double* val, int Q) { this->construct(); SetByArrDouble(val, Q); }
                //TDBCOlHeader_Items_Double::TDBCOlHeader_Items_Double(float* val, int Q) { this->construct(); SetByArrFloat(val, Q); }
                //TDBCOlHeader_Items_Double::TDBCOlHeader_Items_Double(int* val, int Q) { this->construct(); SetByArrInt(val, Q); }
                //TDBCOlHeader_Items_Double::TDBCOlHeader_Items_Double(bool* val, int Q) { this->construct(); SetByArrBool(val, Q); }
                //TDBCOlHeader_Items_Double::TDBCOlHeader_Items_Double(QString* val, int Q) { this->construct();SetByArrString(val, Q); }
                TDBCOlHeader_Items_Double::TDBCOlHeader_Items_Double(double* val, int QItems, QString* name, int QNames){
                int countItems=1, countNames=1;
                if(QNames>7)countNames=7;
                else if(QNames<1) countNames=1;
                else countNames=QNames;
                if(QItems>MaxInt)countItems=MaxInt;
                else if(QItems<1)countItems=1;
                else countItems=QItems;
                if(val==NULL){
                if(countItems>MaxInt/2)countItems=1;
                for(int i=1; i<=countItems; i++)this->content.push_back(0);
                }else{
                for(int i=1; i<=countItems; i++)this->content.push_back(val[i-1]);
                }
                //
                if(name==NULL){
                for(int i=1; i<=countNames; i++)this->names.push_back("");
                }else{
                for(int i=1; i<=countNames; i++)this->names.push_back(name[i-1]);
                }
                }

                //
                //hope they will not be needed
                //    TCellDoubleArr(TCellDoubleArr&obj){
                //        this->Assign(obj);
                //    }
                //    //
                //    TCellDoubleArr& operator =(TCellDoubleArr&obj){
                //        this->Assign(obj);
                //        return*this;
                //    }
                //    //
                //    void Assign(TCellDoubleArr&obj){
                //        this->data=obj.data;
                //    }
                void TDBCOlHeader_Items_Double::construct(int n){
                //this->val=new double[n];
                int qi=7;
                for(int i=1; i<=n; i++) this->content.push_back(0);
                for(int i=1; i<=qi; i++) this->names.push_back("");
                }
                int TDBCOlHeader_Items_Double::GetTypeN() { return DoubleItemsDBFieldHeaderCellTypeN; }
                int TDBCOlHeader_Items_Double::GetActiveN() { return ActiveN_ByDefault;}
                void TDBCOlHeader_Items_Double::SetActiveN(int N) {
                if(N>=1 && N<=content.size()) this->ActiveN_ByDefault=N;
                }
                int TDBCOlHeader_Items_Double::GetLength() { return this->LengthOfItemsSet; }
                void TDBCOlHeader_Items_Double::SetLength(int L){
                double val=0;
                int iL=content.size();
                if(L>=1 && L<=MaxInt){
                if(L>iL){
                for(int i=1; i<=L-iL; i++){
                content.push_back(val);
                }
                }else if(L<iL){
                for(int i=1; i<=iL-L; i++){
                content.pop_back();
                }
                }
                this->LengthOfItemsSet=L;
                }
                }//SetLength
                //
                double TDBCOlHeader_Items_Double::GetDoubleVal() {
                int ActiveN=1;
                double val;
                val=content[ActiveN-1];
                return val;
                }
                float TDBCOlHeader_Items_Double::GetFloatVal() {
                int ActiveN=1;
                float val;
                val=(float)content[ActiveN-1];
                return val;
                }
                int TDBCOlHeader_Items_Double::GetIntVal()
                {
                int ActiveN=1;
                double val;
                val=content[ActiveN-1];
                int r;
                //r =(int) round(content[ActiveN-1]);
                r =(int) round(val);
                return r;
                }
                bool TDBCOlHeader_Items_Double::GetBoolVal() {
                bool r;
                int ActiveN=1;
                double val=content[ActiveN-1];
                if(BoolValByDefault==true){
                if (val == 0) r = false;
                else r = true;
                }else{
                if (val == 1) r = true;
                else r = false;
                }
                return r;
                }
                QString TDBCOlHeader_Items_Double::ToString() {
                int ActiveN=1;
                double val=content[ActiveN-1];
                QString s;
                s=RealToString(val);
                s.setNum(val);
                return s;//val.ToString();
                }
                //
                double TDBCOlHeader_Items_Double::GetDoubleValN(int N) {
                double val=0;
                if(N>=1 && N<=content.size()){
                val=content[N-1];
                }
                return val;
                }
                float TDBCOlHeader_Items_Double::GetFloatValN(int N){
                float val=0;
                if(N>=1 && N<=content.size()){
                val=(float)content[N-1];
                }
                return val;
                }
                int TDBCOlHeader_Items_Double::GetIntValN(int N)
                {
                int r=0;
                double val=0;
                this->LengthOfItemsSet=this->content.size();
                if(N>=1 && N<=this->LengthOfItemsSet){
                val=this->content[N-1];
                r = (int)round(val);
                }
                return r;
                }
                bool TDBCOlHeader_Items_Double::GetBoolValN(int N)
                {
                double val;
                bool r=BoolValByDefault;
                this->LengthOfItemsSet=this->content.size();
                if(N>= 1 && N<=LengthOfItemsSet){
                val=this->content[N-1];
                if(BoolValByDefault==true){
                if (val == 0) r = false;
                else r = true;
                }else{
                if (val == 1) r = true;
                else r = false;
                }
                }
                return r;
                }
                QString TDBCOlHeader_Items_Double::ToStringN(int N) {
                QString s;
                //QString RealToString(double x, int Repr_IntAndFrac0_ExpAfOrderLim1_ExpAnyhow2=0,  int QAftComma=6, int OrdAfWhichExp=6, int BaseDec=10);
                double val=content[N-1];
                s=RealToString(val);
                s.setNum(val);
                return s;
                }
                //
                void TDBCOlHeader_Items_Double::SetByValDouble(double val) {
                //this->val = (double)val;
                int ActiveN=1;
                content[ActiveN-1]=val;
                }
                void TDBCOlHeader_Items_Double::SetByValFloat(float val) {
                //this->val = (double)val;
                int ActiveN=1;
                content[ActiveN-1]=(double)val;
                }
                void TDBCOlHeader_Items_Double::SetByValInt(int val) {
                //this->val = (double)val;
                int ActiveN=1;
                content[ActiveN-1]=(double)val;
                }
                void TDBCOlHeader_Items_Double::SetByValBool(bool val)
                {
                int i;
                i = BoolToInt(val);
                int ActiveN=1;
                //this->val=(double)i;
                content[ActiveN-1]=(double)i;
                }
                void TDBCOlHeader_Items_Double::SetByValString(QString val) {
                double x;
                int ActiveN=1;
                //this->val = Convert.ToDouble(val);
                //this->val = NumberParse.StrToFloat(val);
                x=StrToReal(val);
                x =val.toDouble();
                content[ActiveN-1]=x;
                } //hin S' ne abl convert!!
                //
                void TDBCOlHeader_Items_Double::SetByValDoubleN(double val, int N) {
                //SetByValDouble(val);
                if(N>=1 && N<=content.size()) content[N-1]=val;
                }
                void TDBCOlHeader_Items_Double::SetByValFloatN(float val, int N){
                //SetByValFloat(val);
                if(N>=1 && N<=content.size()) content[N-1]=(double)val;
                }
                void TDBCOlHeader_Items_Double::SetByValIntN(int val, int N) {
                //SetByValInt(val);
                if(N>=1 && N<=content.size()) content[N-1]=(double)val;
                }
                void TDBCOlHeader_Items_Double::SetByValBoolN(bool val, int N) {
                SetByValBool(val);
                if(N>=1 && N<=content.size()) content[N-1]=(double)BoolToInt(val);
                }
                void TDBCOlHeader_Items_Double::SetByValStringN(QString val, int N) {
                SetByValString(val);
                double x;
                x=StrToReal(val);
                x=val.toDouble();
                if(N>=1 && N<=content.size()) content[N-1]=x;
                }
                //
                void TDBCOlHeader_Items_Double::SetVal(double val) {
                //this->val = (double)val;
                int ActiveN=1;
                content[ActiveN-1]=val;
                }
                void TDBCOlHeader_Items_Double::SetVal(int val) {
                //this->val = (double)val;
                int ActiveN=1;
                content[ActiveN-1]=(double)val;
                }
                void TDBCOlHeader_Items_Double::SetVal(bool val)
                {
                int i;
                int ActiveN=1;
                i = BoolToInt(val);
                //this->val = (double)i;
                content[ActiveN-1]=(double)i;
                }
                void TDBCOlHeader_Items_Double::SetVal(QString val) {
                double x;
                int ActiveN=1;
                //this->val = Convert.ToDouble(val);
                //this->val=StrToReal(val);
                //this->val=val.toDouble();
                x=StrToReal(val);
                x=val.toDouble();
                content[ActiveN-1]=x;
                }
                //
                void TDBCOlHeader_Items_Double::SetValN(double val, int N) {
                //SetVal(val);
                if(N>=1 && N<=content.size())content[N-1]=val;
                }
                void TDBCOlHeader_Items_Double::SetValN(int val, int N) {
                //SetVal(val);
                if(N>=1 && N<=content.size())content[N-1]=(double)val;
                }
                void TDBCOlHeader_Items_Double::SetValN(bool val, int N) {
                //SetVal(val);
                int x=BoolToInt(val);
                if(N>=1 && N<=content.size())content[N-1]=(double)x;
                }
                void TDBCOlHeader_Items_Double::SetValN(QString val, int N) {
                //SetVal(val);
                double x=StrToReal(val);
                x=val.toDouble();
                if(N>=1 && N<=content.size())content[N-1]=x;
                }
                //
                void TDBCOlHeader_Items_Double::SetByArrDouble(double* val, int Q){
                int MinN;
                this->LengthOfItemsSet=this->content.size();
                if(this->LengthOfItemsSet>=Q) MinN=Q; else MinN=this->LengthOfItemsSet;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TDBCOlHeader_Items_Double::SetByArrFloat(float* val, int Q){
                int MinN;
                if(this->LengthOfItemsSet>=Q) MinN=Q; else MinN=this->LengthOfItemsSet;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(double)val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TDBCOlHeader_Items_Double::SetByArrInt(int* val, int Q){
                int MinN;
                if(this->LengthOfItemsSet>=Q) MinN=Q; else MinN=this->LengthOfItemsSet;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(double)val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TDBCOlHeader_Items_Double::SetByArrBool(bool* val, int Q){
                int MinN;
                if(this->LengthOfItemsSet>=Q) MinN=Q; else MinN=this->LengthOfItemsSet;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(double)BoolToInt(val[i-1]);
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TDBCOlHeader_Items_Double::SetByArrString(QString* val, int Q){
                double x;
                int MinN;
                if(this->LengthOfItemsSet>=Q) MinN=Q; else MinN=this->LengthOfItemsSet;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                x=StrToReal(val[i-1]);
                x=val[i-1].toDouble();
                content[i-1]=x;
                }
                }
                else
                {
                // for(int i=1; i<=MinN; i++){
                //     x=0;
                //     content[i-1]=x;
                //}
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                //
                void TDBCOlHeader_Items_Double::SetByArr(double* val, int Q){
                int MinN;
                if(this->LengthOfItemsSet>=Q) MinN=Q; else MinN=this->LengthOfItemsSet;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TDBCOlHeader_Items_Double::SetByArr(int* val, int Q){
                int MinN;
                if(this->LengthOfItemsSet>=Q) MinN=Q; else MinN=this->LengthOfItemsSet;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(double)val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TDBCOlHeader_Items_Double::SetByArr(bool* val, int Q){
                int MinN;
                if(this->LengthOfItemsSet>=Q) MinN=Q; else MinN=this->LengthOfItemsSet;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(double)BoolToInt(val[i-1]);
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TDBCOlHeader_Items_Double::SetByArr(QString* val, int Q){
                double x;
                int MinN;
                if(this->LengthOfItemsSet>=Q) MinN=Q; else MinN=this->LengthOfItemsSet;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                x=StrToReal(val[i-1]);
                x=val[i-1].toDouble();
                content[i-1]=x;
                }
                }
                else
                {
                // for(int i=1; i<=MinN; i++){
                //     x=0;
                //     content[i-1]=x;
                //}
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                //
                void TDBCOlHeader_Items_Double::AddOrInsDoubleVal(double val, int N){
                //SetByValDouble(val);
                this->LengthOfItemsSet=this->content.size();
                if(N>=1 && N<=this->LengthOfItemsSet) content.insert(content.begin()+N-1,val);
                else{
                content.push_back(val);
                this->LengthOfItemsSet++;
                //ActiveN=N;
                }
                }
                void TDBCOlHeader_Items_Double::AddOrInsFloatVal(float val, int N){
                //SetByValDouble(val);
                this->LengthOfItemsSet=this->content.size();
                if(N>=1 && N<=this->LengthOfItemsSet) content.insert(content.begin()+N-1,(double)val);
                else{
                content.push_back((double)val);
                this->LengthOfItemsSet++;
                //ActiveN=N;
                }
                }
                void TDBCOlHeader_Items_Double::AddOrInsIntVal(int val, int N){
                //SetByValDouble(val);
                this->LengthOfItemsSet=this->content.size();
                if(N>=1 && N<=this->LengthOfItemsSet) content.insert(content.begin()+N-1,(double)val);
                else{
                content.push_back((double)val);
                this->LengthOfItemsSet++;
                //ActiveN=N;
                }
                }
                void TDBCOlHeader_Items_Double::AddOrInsBoolVal(bool val, int N){
                int x=BoolToInt(val);
                //SetByValDouble(val);
                this->LengthOfItemsSet=this->content.size();
                if(N>=1 && N<=this->LengthOfItemsSet) {
                content.insert(content.begin()+N-1,(double)x);
                }else{
                content.push_back((double)x);
                this->LengthOfItemsSet++;
                //ActiveN=N;
                }
                }
                void TDBCOlHeader_Items_Double::AddOrInsStringVal(QString val, int N){
                double x=StrToReal(val);
                x=val.toDouble();
                //SetByValDouble(val);
                this->LengthOfItemsSet=this->content.size();
                if(N>=1 && N<=this->LengthOfItemsSet){
                content.insert(content.begin()+N-1,x);
                }else{
                content.push_back(x);
                this->LengthOfItemsSet++;
                //ActiveN=N;
                }
                }
                //
                void TDBCOlHeader_Items_Double::DelValN(int N) {
                this->LengthOfItemsSet=this->content.size();
                if(N>=1 && N<=this->LengthOfItemsSet){
                content.erase(content.begin()+N-1);
                }
                }
                //
                void TDBCOlHeader_Items_Double::GetDoubleArr(double*&Arr,  int&QItems) {
                QItems=this->LengthOfItemsSet;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new double[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetDoubleValN(i);
                }
                void TDBCOlHeader_Items_Double::GetFloatArr( float*&Arr, int&QItems){
                QItems=this->LengthOfItemsSet;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new float[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetFloatValN(i);
                }
                void TDBCOlHeader_Items_Double::GetIntArr( int*&Arr,  int&QItems){
                QItems=this->LengthOfItemsSet;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new int[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetIntValN(i);
                }
                void TDBCOlHeader_Items_Double::GetBoolArr( bool*&Arr,  int&QItems){
                QItems=this->LengthOfItemsSet;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new bool[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetBoolValN(i);
                }
                void TDBCOlHeader_Items_Double::ToStringArr(QString*&Arr, int&QItems) {
                QItems=this->LengthOfItemsSet;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new QString[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = ToStringN(i);
                }
                //
                void TDBCOlHeader_Items_Double::SetNameN(QString name, int N) {
                if(N>=1 && N<=7){
                while(this->names.size()<N-1){
                this->names.push_back("");
                }
                this->names[N-1]=name;
                }
                }
                void TDBCOlHeader_Items_Double::SetName1(QString name){
                int N=1;
                while(this->names.size()<N-1){
                this->names.push_back("");
                }
                this->names[N-1]=name;
                }
                void TDBCOlHeader_Items_Double::SetName2(QString name){
                int N=2;
                while(this->names.size()<N-1){
                this->names.push_back("");
                }
                this->names[N-1]=name;
                }
                void TDBCOlHeader_Items_Double::SetName3(QString name){
                int N=3;
                while(this->names.size()<N-1){
                this->names.push_back("");
                }
                this->names[N-1]=name;
                }
                void TDBCOlHeader_Items_Double::SetNames(QString* Arr, int Q){
                this->LengthOfNamesSet=this->names.size();
                if(Q>=1 && Q<=7){
                for(int i=1; i<=Q; i++){
                if(this->LengthOfItemsSet<=Q) this->names[i-1]=Arr[i-1];
                else this->names.push_back(Arr[i-1]);
                }
                }
                }
                QString TDBCOlHeader_Items_Double::GetNameN(int N) {
                QString R="";
                this->LengthOfNamesSet=this->names.size();
                if(N>=1 && N<=7 && N<this->LengthOfItemsSet) R=this->names[N-1];
                return R;
                }
                QString TDBCOlHeader_Items_Double::GetName1() {
                int N=1;
                QString R="";
                this->LengthOfNamesSet=this->names.size();
                if(N>=1 && N<=7 && N<=this->LengthOfItemsSet) R=this->names[N-1];
                return R;
                }
                QString TDBCOlHeader_Items_Double::GetName2() {
                int N=2;
                QString R="";
                this->LengthOfNamesSet=this->names.size();
                if(N>=1 && N<=7 && N<=this->LengthOfItemsSet) R=this->names[N-1];
                return R;
                }
                QString TDBCOlHeader_Items_Double::GetName3() {
                int N=3;
                QString R="";
                this->LengthOfNamesSet=this->names.size();
                if(N>=1 && N<=7 && N<=this->LengthOfNamesSet) R=this->names[N-1];
                return R;
                }
                void TDBCOlHeader_Items_Double::GetNames(QString*&Arr, int&QItems) {
                if(Arr!=NULL) delete[]Arr;
                QItems=this->GetLengthOfNamesList();
                if(Arr==NULL) Arr=new QString[QItems];
                for(int i=1; i<=QItems; i++) Arr[i-1]=this->names[i-1];
                }
                int TDBCOlHeader_Items_Double::GetLengthOfNamesList(){
                this->LengthOfNamesSet=this->names.size();
                return this->LengthOfNamesSet;
                }
                //
                //     override object Clone(){
                //        return new TCellDoubleArr(this->GetDoubleVal());
                //    }
                //};//cl TDBCOlHeader_Items_Double


                //TCellIntArr

                //class TDBCOlHeader_Items_Int: TDataCell
                //{
                //    double val;
                //    :
                TDBCOlHeader_Items_Int::TDBCOlHeader_Items_Int() {
                //double val=0;
                ////
                //ActiveN=0;
                //Length=0;
                ////
                //ActiveN=1;
                //Length=1;
                ////
                //content.push_back(val);
                ////
                this->construct();
                }
                void TDBCOlHeader_Items_Int::construct(int n){
                //this->val=new double[n];
                int qi=7;
                for(int i=1; i<=n; i++) this->content.push_back(0);
                for(int i=1; i<=qi; i++) this->names.push_back("");
                }
                //TDBCOlHeader_Items_Int::TDBCOlHeader_Items_Int(double val) { SetByValDouble(val); }
                //TDBCOlHeader_Items_Int::TDBCOlHeader_Items_Int(float val) { SetByValFloat(val); }
                //TDBCOlHeader_Items_Int::TDBCOlHeader_Items_Int(int val) { SetByValInt(val); }
                //TDBCOlHeader_Items_Int::TDBCOlHeader_Items_Int(bool val) { SetByValBool(val); }
                //TDBCOlHeader_Items_Int::TDBCOlHeader_Items_Int(QString val) { SetByValString(val); }
                //
                //TDBCOlHeader_Items_Int::TDBCOlHeader_Items_Int(double* val, int Q) { SetByArrDouble(val, Q); }
                //TDBCOlHeader_Items_Int::TDBCOlHeader_Items_Int(float* val, int Q) { SetByArrFloat(val, Q); }
                TDBCOlHeader_Items_Int::TDBCOlHeader_Items_Int(int* val, int Q) {  this->construct();SetByArrInt(val, Q); }
                //TDBCOlHeader_Items_Int::TDBCOlHeader_Items_Int(bool* val, int Q) { SetByArrBool(val, Q); }
                //TDBCOlHeader_Items_Int::TDBCOlHeader_Items_Int(QString* val, int Q) { this->construct(); SetByArrString(val, Q); }
                TDBCOlHeader_Items_Int::TDBCOlHeader_Items_Int(int* val, int QItems, QString* name, int QNames){
                int countItems=1, countNames=1;
                if(QNames>7)countNames=7;
                else if(QNames<1) countNames=1;
                else countNames=QNames;
                if(QItems>MaxInt)countItems=MaxInt;
                else if(QItems<1)countItems=1;
                else countItems=QItems;
                if(val==NULL){
                if(countItems>MaxInt/2)countItems=1;
                for(int i=1; i<=countItems; i++)this->content.push_back(0);
                }else{
                for(int i=1; i<=countItems; i++)this->content.push_back(val[i-1]);
                }
                //
                if(name==NULL){
                for(int i=1; i<=countNames; i++)this->names.push_back("");
                }else{
                for(int i=1; i<=countNames; i++)this->names.push_back(name[i-1]);
                }
                }
                //
                //hope they will not be needed
                //    TDBCOlHeader_Items_Int(TDBCOlHeader_Items_Int&obj){
                //        this->Assign(obj);
                //    }
                //    //
                //    TDBCOlHeader_Items_Int& operator =(TDBCOlHeader_Items_Int&obj){
                //        this->Assign(obj);
                //        return*this;
                //    }
                //    //
                //    void Assign(TDBCOlHeader_Items_Int&obj){
                //        this->data=obj.data;
                //    }
                int TDBCOlHeader_Items_Int::GetTypeN() { return IntArrayTypeN; }
                int TDBCOlHeader_Items_Int::GetActiveN() { return ActiveN_ByDefault;}
                void TDBCOlHeader_Items_Int::SetActiveN(int N) {
                if(N>=1 && N<=content.size()) this->ActiveN_ByDefault=N;
                }
                int TDBCOlHeader_Items_Int::GetLength() { return this->LengthOfItemsSet; }
                void TDBCOlHeader_Items_Int::SetLength(int L){
                int val=0;
                int iL=content.size();
                if(L>=1 && L<=MaxInt){
                if(L>iL){
                for(int i=1; i<=L-iL; i++){
                content.push_back(val);
                }
                }else if(L<iL){
                for(int i=1; i<=iL-L; i++){
                content.pop_back();
                }
                }
                this->LengthOfItemsSet=L;
                }
                }//SetLength
                //
                double TDBCOlHeader_Items_Int::GetDoubleVal() {
                int ActiveN=1;
                double val;
                val=(double)content[ActiveN-1];
                return val;
                }
                float TDBCOlHeader_Items_Int::GetFloatVal() {
                int ActiveN=1;
                float val;
                val=(float)content[ActiveN-1];
                return val;
                }
                int TDBCOlHeader_Items_Int::GetIntVal()
                {
                int ActiveN=1;
                int val;
                val=content[ActiveN-1];
                //int r;
                //r =(int) round(content[ActiveN-1]);
                //r =(int) round(val);
                //return r;
                return val;
                }
                bool TDBCOlHeader_Items_Int::GetBoolVal() {
                bool r;
                int ActiveN=1;
                int val=content[ActiveN-1];
                if(BoolValByDefault==true){
                if (val == 0) r = false;
                else r = true;
                }else{
                if (val == 1) r = true;
                else r = false;
                }
                return r;
                }
                QString TDBCOlHeader_Items_Int::ToString() {
                int ActiveN=1;
                int val=content[ActiveN-1];
                QString s;
                s=IntToStringSimple(val);
                s.setNum(val);
                return s;//val.ToString();
                }
                //
                double TDBCOlHeader_Items_Int::GetDoubleValN(int N) {
                double val=0;
                if(N>=1 && N<=content.size()){
                val=(double)content[N-1];
                }
                return val;
                }
                float TDBCOlHeader_Items_Int::GetFloatValN(int N){
                float val=0;
                if(N>=1 && N<=content.size()){
                val=(float)content[N-1];
                }
                return val;
                }
                int TDBCOlHeader_Items_Int::GetIntValN(int N)
                {
                int r=0;
                if(N>=1 && N<=content.size()){
                //r = (int)round(content[N-1]);
                r = content[N-1];
                }
                return r;
                }
                bool TDBCOlHeader_Items_Int::GetBoolValN(int N)
                {
                int val;
                bool r=BoolValByDefault, chk=BoolValByDefault;
                //if(chk==true){
                this->LengthOfItemsSet=this->content.size();
                if(N>=1 && N<=this->LengthOfItemsSet){
                val=content[N-1];
                if(BoolValByDefault==true){
                if (val == 0) r = false;
                else r = true;
                }else{
                if (val == 1) r = true;
                else r = false;
                }
                }
                return r;
                }
                QString TDBCOlHeader_Items_Int::ToStringN(int N) {
                int ActiveN=1;
                QString s="";
                //QString RealToString(double x, int Repr_IntAndFrac0_ExpAfOrderLim1_ExpAnyhow2=0,  int QAftComma=6, int OrdAfWhichExp=6, int BaseDec=10);
                int val=content[ActiveN-1];
                //float val=content[ActiveN-1];
                s=IntToStringSimple(val);
                s.setNum(val);
                return s;
                }
                //
                void TDBCOlHeader_Items_Int::SetByValDouble(double val) {
                int ActiveN=1;
                //this->val = (double)val;
                int y=(int)round(val);
                content[ActiveN-1]=y;
                }
                void TDBCOlHeader_Items_Int::SetByValFloat(float val) {
                int ActiveN=1;
                //this->val = (double)val;
                //content[ActiveN-1]=(float)val;
                //int y=(int)round(val);
                int y=(int)round(val);
                content[ActiveN-1]=y;
                }
                void TDBCOlHeader_Items_Int::SetByValInt(int val) {
                int ActiveN=1;
                //this->val = (double)val;
                //content[ActiveN-1]=(float)val;
                content[ActiveN-1]=val;
                }
                void TDBCOlHeader_Items_Int::SetByValBool(bool val)
                {
                int ActiveN=1;
                int i;
                i = BoolToInt(val);
                //this->val=(double)i;
                content[ActiveN-1]=i;
                }
                void TDBCOlHeader_Items_Int::SetByValString(QString val) {
                int ActiveN=1;
                double x;
                int y;
                x=StrToReal(val);
                x=val.toDouble();
                y=IntPart(x);
                y=(int)round(x);
                y=val.toInt();
                content[ActiveN-1]=y;
                } //hin S' ne abl convert!!
                //
                void TDBCOlHeader_Items_Int::SetByValDoubleN(double val, int N) {
                //SetByValDouble(val);
                if(N>=1 && N<=content.size()) content[N-1]=(int)round(val);
                }
                void TDBCOlHeader_Items_Int::SetByValFloatN(float val, int N){
                //SetByValFloat(val);
                //if(N>=1 && N<=content.size()) content[N-1]=(float)val;
                if(N>=1 && N<=content.size())  content[N-1]=(int)round(val);
                }
                void TDBCOlHeader_Items_Int::SetByValIntN(int val, int N) {
                //SetByValInt(val);
                if(N>=1 && N<=content.size()) content[N-1]=val;
                }
                void TDBCOlHeader_Items_Int::SetByValBoolN(bool val, int N) {
                SetByValBool(val);
                if(N>=1 && N<=content.size()) content[N-1]=BoolToInt(val);
                }
                void TDBCOlHeader_Items_Int::SetByValStringN(QString val, int N) {
                double x;
                int y;
                x=StrToReal(val);
                x=val.toDouble();
                y=IntPart(x);
                y=(int)round(x);
                y=val.toInt();
                if(N>=1 && N<=content.size())content[N-1]=y;
                }
                //
                void TDBCOlHeader_Items_Int::SetVal(double val) {
                int ActiveN=1;
                //this->val = (double)val;
                content[ActiveN-1]=(int)round(val);
                }
                void TDBCOlHeader_Items_Int::SetVal(int val) {
                int ActiveN=1;
                //this->val = (double)val;
                //content[ActiveN-1]=(float)val;
                content[ActiveN-1]=val;
                }
                void TDBCOlHeader_Items_Int::SetVal(bool val)
                {
                int ActiveN=1;
                int i;
                i = BoolToInt(val);
                //this->val = (double)i;
                content[ActiveN-1]=BoolToInt(i);
                }
                void TDBCOlHeader_Items_Int::SetVal(QString val) {
                int ActiveN=1;
                double x=StrToReal(val);
                int y;
                y=IntPart(x);
                y=(int)round(x);
                y=val.toInt();
                content[ActiveN-1]=y;
                }
                //
                void TDBCOlHeader_Items_Int::SetValN(double val, int N) {
                //SetVal(val);
                if(N>=1 && N<=content.size())content[N-1]=(int)round(val);
                }
                void TDBCOlHeader_Items_Int::SetValN(int val, int N) {
                //SetVal(val);
                //if(N>=1 && N<=content.size())content[N-1]=(float)val;
                if(N>=1 && N<=content.size())content[N-1]=val;
                }
                void TDBCOlHeader_Items_Int::SetValN(bool val, int N) {
                //SetVal(val);
                int x=BoolToInt(val);
                if(N>=1 && N<=content.size())content[N-1]=x;
                }
                void TDBCOlHeader_Items_Int::SetValN(QString val, int N) {
                double x;
                int y;
                x=StrToReal(val);
                x=val.toDouble();
                y=IntPart(x);
                y=(int)round(x);
                y=val.toInt();
                if(N>=1 && N<=content.size())content[N-1]=y;
                }
                //
                void TDBCOlHeader_Items_Int::SetByArrDouble(double* val, int Q){
                int MinN;
                if(this->LengthOfItemsSet>=Q) MinN=Q; else MinN=this->LengthOfItemsSet;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(float)val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TDBCOlHeader_Items_Int::SetByArrFloat(float* val, int Q){
                int MinN;
                if(this->LengthOfItemsSet>=Q) MinN=Q; else MinN=this->LengthOfItemsSet;
                if(val!=NULL){
                //for(int i=1; i<=MinN; i++) content[i-1]=(float)val[i-1];
                for(int i=1; i<=MinN; i++) content[i-1]=val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TDBCOlHeader_Items_Int::SetByArrInt(int* val, int Q){
                int MinN;
                if(this->LengthOfItemsSet>=Q) MinN=Q; else MinN=this->LengthOfItemsSet;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(float)val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TDBCOlHeader_Items_Int::SetByArrBool(bool* val, int Q){
                int MinN;
                if(this->LengthOfItemsSet>=Q) MinN=Q; else MinN=this->LengthOfItemsSet;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(float)BoolToInt(val[i-1]);
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TDBCOlHeader_Items_Int::SetByArrString(QString* val, int Q){
                double x;
                int y;
                int MinN;
                if(this->LengthOfItemsSet>=Q) MinN=Q; else MinN=this->LengthOfItemsSet;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                x=StrToReal(val[i-1]);
                x=val[i-1].toDouble();
                y=IntPart(x);
                y=(int)round(x);
                y=val[i-1].toInt();
                content[i-1]=y;
                }
                }
                else
                {
                // for(int i=1; i<=MinN; i++){
                //     x=0;
                //     content[i-1]=x;
                //}
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                //
                void TDBCOlHeader_Items_Int::SetByArr(double* val, int Q){
                int MinN;
                if(this->LengthOfItemsSet>=Q) MinN=Q; else MinN=this->LengthOfItemsSet;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(int)round(val[i-1]);
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TDBCOlHeader_Items_Int::SetByArr(int* val, int Q){
                int MinN;
                if(this->LengthOfItemsSet>=Q) MinN=Q; else MinN=this->LengthOfItemsSet;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TDBCOlHeader_Items_Int::SetByArr(bool* val, int Q){
                int MinN;
                if(this->LengthOfItemsSet>=Q) MinN=Q; else MinN=this->LengthOfItemsSet;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=BoolToInt(val[i-1]);
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TDBCOlHeader_Items_Int::SetByArr(QString* val, int Q){
                double x;
                int y;
                int MinN;
                if(this->LengthOfItemsSet>=Q) MinN=Q; else MinN=this->LengthOfItemsSet;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                x=StrToReal(val[i-1]);
                x=val[i-1].toDouble();
                y=IntPart(x);
                y=(int)round(x);
                y=val[i-1].toInt();
                content[i-1]=y;
                }
                }
                else
                {
                // for(int i=1; i<=MinN; i++){
                //     x=0;
                //     content[i-1]=x;
                //}
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                //
                void TDBCOlHeader_Items_Int::AddOrInsDoubleVal(double val, int N){
                //SetByValDouble(val);
                this->LengthOfItemsSet=this->content.size();
                if(N>=1 && N<=this->LengthOfItemsSet){
                content.insert(content.begin()+N-1,(int)round(val));
                }else{
                content.push_back((int)round(val));
                this->LengthOfItemsSet++;
                //ActiveN=N;
                }
                }
                void TDBCOlHeader_Items_Int::AddOrInsFloatVal(float val, int N){
                //SetByValDouble(val);
                //if(N>=1 && N<=content.size()) content.insert(N-1,(float)val);
                this->LengthOfItemsSet=this->content.size();
                if(N>=1 && N<=this->LengthOfItemsSet){
                content.insert(content.begin()+N-1,(int)round(val));
                }else{
                //content.push_back((float)val);
                content.push_back((int)round(val));
                this->LengthOfItemsSet++;
                //ActiveN=N;
                }
                }
                void TDBCOlHeader_Items_Int::AddOrInsIntVal(int val, int N){
                //SetByValDouble(val);
                this->LengthOfItemsSet=this->content.size();
                if(N>=1 && N<=this->LengthOfItemsSet){
                content.insert(content.begin()+N-1,(int)round(val));
                }else{
                content.push_back(val);
                this->LengthOfItemsSet++;
                //ActiveN=N;
                }
                }
                void TDBCOlHeader_Items_Int::AddOrInsBoolVal(bool val, int N){
                int x=BoolToInt(val);
                //SetByValDouble(val);
                this->LengthOfItemsSet=this->content.size();
                if(N>=1 && N<=this->LengthOfItemsSet){
                content.insert(content.begin()+N-1,BoolToInt(val));
                }else{
                content.push_back(BoolToInt(x));
                this->LengthOfItemsSet++;
                //ActiveN=N;
                }
                }
                void TDBCOlHeader_Items_Int::AddOrInsStringVal(QString val, int N){
                double x=StrToReal(val);
                int y=IntPart(x);
                x=val.toDouble();
                y=(int)round(x);
                //SetByValDouble(val);
                this->LengthOfItemsSet=this->content.size();
                if(N>=1 && N<=this->LengthOfItemsSet){
                content.insert(content.begin()+N-1,y);
                }else{
                content.push_back(y);
                this->LengthOfItemsSet++;
                //ActiveN=N;
                }
                }
                //
                void TDBCOlHeader_Items_Int::DelValN(int N) {
                this->LengthOfItemsSet=this->content.size();
                if(N>=1 && N<=this->LengthOfItemsSet){
                content.erase(content.begin()+N-1);
                }
                }
                //
                void TDBCOlHeader_Items_Int::GetDoubleArr(double*&Arr,  int&QItems) {
                this->LengthOfItemsSet=this->content.size();
                QItems=this->LengthOfItemsSet;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new double[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetDoubleValN(i);
                }
                void TDBCOlHeader_Items_Int::GetFloatArr( float*&Arr, int&QItems){
                this->LengthOfItemsSet=this->content.size();
                QItems=this->LengthOfItemsSet;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new float[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetFloatValN(i);
                }
                void TDBCOlHeader_Items_Int::GetIntArr( int*&Arr,  int&QItems){
                this->LengthOfItemsSet=this->content.size();
                QItems=this->LengthOfItemsSet;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new int[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetIntValN(i);
                }
                void TDBCOlHeader_Items_Int::GetBoolArr( bool*&Arr,  int&QItems){
                this->LengthOfItemsSet=this->content.size();
                QItems=this->LengthOfItemsSet;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new bool[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetBoolValN(i);
                }
                void TDBCOlHeader_Items_Int::ToStringArr(QString*&Arr, int&QItems) {
                this->LengthOfItemsSet=this->content.size();
                QItems=this->LengthOfItemsSet;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new QString[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = ToStringN(i);
                }
                //
                void TDBCOlHeader_Items_Int::SetNameN(QString name, int N) {
                if(N>=1 && N<=7){
                while(this->names.size()<N-1){
                this->names.push_back("");
                }
                this->names[N-1]=name;
                }
                }
                void TDBCOlHeader_Items_Int::SetName1(QString name){
                int N=1;
                while(this->names.size()<N-1){
                this->names.push_back("");
                }
                this->names[N-1]=name;
                }
                void TDBCOlHeader_Items_Int::SetName2(QString name){
                int N=2;
                while(this->names.size()<N-1){
                this->names.push_back("");
                }
                this->names[N-1]=name;
                }
                void TDBCOlHeader_Items_Int::SetName3(QString name){
                int N=3;
                while(this->names.size()<N-1){
                this->names.push_back("");
                }
                this->names[N-1]=name;
                }
                void TDBCOlHeader_Items_Int::SetNames(QString* Arr, int Q){
                this->LengthOfNamesSet=this->names.size();
                if(Q>=1 && Q<=7){
                for(int i=1; i<=Q; i++){
                if(this->LengthOfItemsSet<=Q) this->names[i-1]=Arr[i-1];
                else this->names.push_back(Arr[i-1]);
                }
                }
                }
                QString TDBCOlHeader_Items_Int::GetNameN(int N) {
                QString R="";
                this->LengthOfNamesSet=this->names.size();
                if(N>=1 && N<=7 && N<this->LengthOfItemsSet) R=this->names[N-1];
                return R;
                }
                QString TDBCOlHeader_Items_Int::GetName1() {
                int N=1;
                QString R="";
                this->LengthOfNamesSet=this->names.size();
                if(N>=1 && N<=7 && N<=this->LengthOfItemsSet) R=this->names[N-1];
                return R;
                }
                QString TDBCOlHeader_Items_Int::GetName2() {
                int N=2;
                QString R="";
                this->LengthOfNamesSet=this->names.size();
                if(N>=1 && N<=7 && N<=this->LengthOfItemsSet) R=this->names[N-1];
                return R;
                }
                QString TDBCOlHeader_Items_Int::GetName3() {
                int N=3;
                QString R="";
                this->LengthOfNamesSet=this->names.size();
                if(N>=1 && N<=7 && N<=this->LengthOfNamesSet) R=this->names[N-1];
                return R;
                }
                void TDBCOlHeader_Items_Int::GetNames(QString*&Arr, int&QItems) {
                if(Arr!=NULL) delete[]Arr;
                QItems=this->GetLengthOfNamesList();
                if(Arr==NULL) Arr=new QString[QItems];
                for(int i=1; i<=QItems; i++) Arr[i-1]=this->names[i-1];
                }
                int TDBCOlHeader_Items_Int::GetLengthOfNamesList(){
                this->LengthOfNamesSet=this->names.size();
                return this->LengthOfNamesSet;
                }
                //
                //     override object Clone(){
                //        return new TDBCOlHeader_Items_Int(this->GetDoubleVal());
                //    }
                //};//cl TDBCOlHeader_Items_Int



    //class TDBCOlHeader_Items_String: TDataCell
    //{
          //    double val;
          //    :
          TDBCOlHeader_Items_String::TDBCOlHeader_Items_String() {
              //QString val="";
              //
              //ActiveN=0;
              //Length=0;
              //
              //ActiveN=1;
              //Length=1;
              //
              //content.push_back(val);
              this->construct();
          }
          //TDBCOlHeader_Items_String::TDBCOlHeader_Items_String(double val) { this->construct();  SetByValDouble(val); }
          //TDBCOlHeader_Items_String::TDBCOlHeader_Items_String(float val) { this->construct(); SetByValFloat(val); }
          //TDBCOlHeader_Items_String::TDBCOlHeader_Items_String(int val) { this->construct(); SetByValInt(val); }
          //TDBCOlHeader_Items_String::TDBCOlHeader_Items_String(bool val) { this->construct(); SetByValBool(val); }
          //TDBCOlHeader_Items_String::TDBCOlHeader_Items_String(QString val) { this->construct(); SetByValString(val); }
          //
          //TDBCOlHeader_Items_String::TDBCOlHeader_Items_String(double* val, int Q) { this->construct(); SetByArrDouble(val, Q); }
          //TDBCOlHeader_Items_String::TDBCOlHeader_Items_String(float* val, int Q) { this->construct(); SetByArrFloat(val, Q); }
          //TDBCOlHeader_Items_String::TDBCOlHeader_Items_String(int* val, int Q) { this->construct(); SetByArrInt(val, Q); }
          //TDBCOlHeader_Items_String::TDBCOlHeader_Items_String(bool* val, int Q) { this->construct(); SetByArrBool(val, Q); }
          TDBCOlHeader_Items_String::TDBCOlHeader_Items_String(QString* val, int Q) { this->construct(); SetByArrString(val, Q); }
          //
          TDBCOlHeader_Items_String::TDBCOlHeader_Items_String(QString* val, int QItems, QString* name, int QNames){
              int countItems=1, countNames=1;
              if(QNames>7)countNames=7;
              else if(QNames<1) countNames=1;
              else countNames=QNames;
              if(QItems>MaxInt)countItems=MaxInt;
              else if(QItems<1)countItems=1;
              else countItems=QItems;
              if(val==NULL){
                if(countItems>MaxInt/2)countItems=1;
                for(int i=1; i<=countItems; i++)this->content.push_back("");
              }else{
                for(int i=1; i<=countItems; i++)this->content.push_back(val[i-1]);
              }
              //
              if(name==NULL){
                for(int i=1; i<=countNames; i++)this->names.push_back("");
              }else{
                for(int i=1; i<=countNames; i++)this->names.push_back(name[i-1]);
              }
          }
          //hope they will not be needed
          //    TDBCOlHeader_Items_String(TDBCOlHeader_Items_String&obj){
          //        this->Assign(obj);
                //    }
                //    //
                //    TDBCOlHeader_Items_String& operator =(TDBCOlHeader_Items_String&obj){
                //        this->Assign(obj);
                //        return*this;
                //    }
                //    //
                //    void Assign(TDBCOlHeader_Items_String&obj){
                //        this->data=obj.data;
                //    }
                void TDBCOlHeader_Items_String::construct(int n){
                //this->val=new double[n];
                int qi=7;
                for(int i=1; i<=n; i++) this->content.push_back("");
                for(int i=1; i<=qi; i++) this->names.push_back("");
                }
                int TDBCOlHeader_Items_String::GetTypeN() { return StringArrayTypeN; }
                int TDBCOlHeader_Items_String::GetActiveN() { return ActiveN_ByDefault;}
                void TDBCOlHeader_Items_String::SetActiveN(int N) {
                if(N>=1 && N<=content.size()) this->ActiveN_ByDefault=N;
                }
                int TDBCOlHeader_Items_String::GetLength() { return this->LengthOfItemsSet; }
                void TDBCOlHeader_Items_String::SetLength(int L){
                QString val="";
                int iL=content.size();
                if(L>=1 && L<=MaxInt){
                if(L>iL){
                for(int i=1; i<=L-iL; i++){
                content.push_back(val);
                }
                }else if(L<iL){
                for(int i=1; i<=iL-L; i++){
                content.pop_back();
                }
                }
                this->LengthOfItemsSet=L;
                }
                }//SetLength
                //
                double TDBCOlHeader_Items_String::GetDoubleVal() {
                int ActiveN=1;
                double val;
                val=StrToReal(content[ActiveN-1]);
                //val=(double)content[ActiveN-1];
                val=content[ActiveN-1].toDouble();
                return val;
                }
                float TDBCOlHeader_Items_String::GetFloatVal() {
                int ActiveN=1;
                float val;
                //val=(floatcontent[ActiveN-1];
                val=(float)StrToReal(content[ActiveN-1]);
                val=content[ActiveN-1].toFloat();
                return val;
                }
                int TDBCOlHeader_Items_String::GetIntVal()
                {
                int ActiveN=1;
                int val;
                //val=content[ActiveN-1];
                val=StrToInt(content[ActiveN-1]);
                val=content[ActiveN-1].toInt();
                //int r;
                //r =(int) round(content[ActiveN-1]);
                //r =(int) round(val);
                //return r;
                return val;
                }
                bool TDBCOlHeader_Items_String::GetBoolVal() {
                int ActiveN=1;
                bool r, ItIsTrueWord, ItIsFalseWord;
                QString val;
                ItIsTrueWord=IsTrueWord(content[ActiveN-1]);
                ItIsFalseWord=IsFalseWord(content[ActiveN-1]);
                //val=content[ActiveN-1];
                if(BoolValByDefault==true){
                if (ItIsFalseWord) r = false;
                else r = true;
                }else{
                if (ItIsTrueWord) r = true;
                else r = false;
                }
                return r;
                }
                QString TDBCOlHeader_Items_String::ToString() {
                int ActiveN=1;
                //int val=content[ActiveN-1];
                //QString s;
                //s=IntToString(val);
                //s.setNum(val);
                //return s;//val.ToString();
                return content[ActiveN-1];
                }
                //
                double TDBCOlHeader_Items_String::GetDoubleValN(int N) {
                double val=0;
                if(N>=1 && N<=content.size()){
                val=StrToReal(content[N-1]);
                val=content[N-1].toDouble();
                }
                return val;
                }
                float TDBCOlHeader_Items_String::GetFloatValN(int N){
                float val=0;
                if(N>=1 && N<=content.size()){
                val=(float)StrToReal(content[N-1]);
                val=content[N-1].toFloat();
                }
                return val;
                }
                int TDBCOlHeader_Items_String::GetIntValN(int N)
                {
                int r=0;
                if(N>=1 && N<=content.size()){
                //r = (int)round(content[N-1]);
                r = StrToInt(content[N-1]);
                r=content[N-1].toInt();
                }
                return r;
                }
                bool TDBCOlHeader_Items_String::GetBoolValN(int N)
                {
                bool r=BoolValByDefault, chk=BoolValByDefault;
                if(N>=1 && N<=content.size()){
                //if(chk==true){
                if(BoolValByDefault==true){
                if (IsFalseWord(content[N-1])) r = false;
                else r = true;
                }else{
                if (IsTrueWord(content[N-1])) r = true;
                else r = false;
                }
                }
                return r;
                }
                QString TDBCOlHeader_Items_String::ToStringN(int N) {
                QString s="";
                ////QString RealToString(double x, int Repr_IntAndFrac0_ExpAfOrderLim1_ExpAnyhow2=0,  int QAftComma=6, int OrdAfWhichExp=6, int BaseDec=10);
                //int val=content[ActiveN-1];
                ////float val=content[ActiveN-1];
                //s=IntToString(val);
                //s.setNum(val);
                //return s;
                if(N>=1 && N<=content.size()) s=content[N-1];
                return s;
                }
                //
                void TDBCOlHeader_Items_String::SetByValDouble(double val) {
                int ActiveN=1;
                QString s;
                s.setNum(val);
                s=RealToString(val);
                content[ActiveN-1]=s;
                }
                void TDBCOlHeader_Items_String::SetByValFloat(float val) {
                int ActiveN=1;
                QString s;
                s.setNum(val);
                s=RealToString((double)val);
                content[ActiveN-1]=s;
                }
                void TDBCOlHeader_Items_String::SetByValInt(int val) {
                int ActiveN=1;
                QString s;
                s.setNum(val);
                s=IntToStr(val);
                content[ActiveN-1]=s;
                }
                void TDBCOlHeader_Items_String::SetByValBool(bool val)
                {
                int ActiveN=1;
                int i;
                i = BoolToInt(val);
                //this->val=(double)i;
                content[ActiveN-1]=IntToStr(i);
                content[ActiveN-1].setNum(i);
                }
                void TDBCOlHeader_Items_String::SetByValString(QString val) {
                int ActiveN=1;
                content[ActiveN-1]=val;
                }
                //
                void TDBCOlHeader_Items_String::SetByValDoubleN(double val, int N) {
                //SetByValDouble(val);
                if(N>=1 && N<=content.size()) content[N-1]=RealToString(val);
                if(N>=1 && N<=content.size()) content[N-1].setNum(val);
                }
                void TDBCOlHeader_Items_String::SetByValFloatN(float val, int N){
                //SetByValFloat(val);
                if(N>=1 && N<=content.size()) content[N-1]=RealToString((double)val);
                if(N>=1 && N<=content.size()) content[N-1].setNum(val);
                }
                void TDBCOlHeader_Items_String::SetByValIntN(int val, int N) {
                //SetByValInt(val);
                this->LengthOfItemsSet=this->content.size();
                if(N>=1 && N<=this->LengthOfItemsSet) (content[N-1])=IntToStringSimple(val);
                if(N>=1 && N<=this->LengthOfItemsSet) content[N-1].setNum(val);
                }
                void TDBCOlHeader_Items_String::SetByValBoolN(bool val, int N) {
                SetByValBool(val);
                if(N>=1 && N<=content.size()) content[N-1]=IntToStr(BoolToInt(val));
                if(N>=1 && N<=content.size()) content[N-1].setNum(BoolToInt(val));
                }
                void TDBCOlHeader_Items_String::SetByValStringN(QString val, int N) {
                if(N>=1 && N<=content.size())content[N-1]=val;
                }
                //
                void TDBCOlHeader_Items_String::SetVal(double val) {
                int ActiveN=1;
                //this->val = (double)val;
                content[ActiveN-1]=RealToString(val);
                content[ActiveN-1].setNum(val);
                }
                void TDBCOlHeader_Items_String::SetVal(int val) {
                int ActiveN=1;
                //this->val = (double)val;
                //content[ActiveN-1]=(float)val;
                content[ActiveN-1]=IntToStr(val);
                content[ActiveN-1].setNum(val);
                }
                void TDBCOlHeader_Items_String::SetVal(bool val)
                {
                int ActiveN=1;
                int i;
                i = BoolToInt(val);
                content[ActiveN-1]=IntToStr(i);
                content[ActiveN-1].setNum(i);
                }
                void TDBCOlHeader_Items_String::SetVal(QString val) {
                int ActiveN=1;
                content[ActiveN-1]=val;
                }
                //
                void TDBCOlHeader_Items_String::SetValN(double val, int N) {
                //SetVal(val);
                if(N>=1 && N<=content.size())content[N-1]=RealToString(val);
                if(N>=1 && N<=content.size())content[N-1].setNum(val);
                }
                void TDBCOlHeader_Items_String::SetValN(int val, int N) {
                //SetVal(val);
                //if(N>=1 && N<=content.size())content[N-1]=(float)val;
                if(N>=1 && N<=content.size())content[N-1]=IntToStr(val);
                if(N>=1 && N<=content.size())content[N-1].setNum(val);
                }
                void TDBCOlHeader_Items_String::SetValN(bool val, int N) {
                if(N>=1 && N<=content.size())content[N-1]=IntToStr(BoolToInt(val));
                if(N>=1 && N<=content.size())content[N-1].setNum(BoolToInt(val));
                }
                void TDBCOlHeader_Items_String::SetValN(QString val, int N) {
                if(N>=1 && N<=content.size())content[N-1]=val;
                }
                //
                void TDBCOlHeader_Items_String::SetByArrDouble(double* val, int Q){
                int MinN;
                if(this->LengthOfItemsSet>=Q) MinN=Q; else MinN=this->LengthOfItemsSet;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                content[i-1]=RealToString(val[i-1]);
                content[i-1].setNum(val[i-1]);
                }
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TDBCOlHeader_Items_String::SetByArrFloat(float* val, int Q){
                int MinN;
                if(this->LengthOfItemsSet>=Q) MinN=Q; else MinN=this->LengthOfItemsSet;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                content[i-1]=RealToString((double)val[i-1]);
                content[i-1].setNum(val[i-1]);
                }
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TDBCOlHeader_Items_String::SetByArrInt(int* val, int Q){
                int MinN;
                if(this->LengthOfItemsSet>=Q) MinN=Q; else MinN=this->LengthOfItemsSet;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                content[i-1]=IntToStr(val[i-1]);
                content[i-1].setNum(val[i-1]);
                }
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TDBCOlHeader_Items_String::SetByArrBool(bool* val, int Q){
                int MinN;
                if(this->LengthOfItemsSet>=Q) MinN=Q; else MinN=this->LengthOfItemsSet;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) {
                content[i-1]=IntToStr(BoolToInt(val[i-1]));
                content[i-1].setNum(BoolToInt(val[i-1]));
                }
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TDBCOlHeader_Items_String::SetByArrString(QString* val, int Q){
                //double x;
                //int y;
                int MinN;
                if(this->LengthOfItemsSet>=Q) MinN=Q; else MinN=this->LengthOfItemsSet;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                //x=StrToReal(val[i-1]);
                //x=val[i-1].toDouble();
                //y=IntPart(x);
                //y=(int)round(x);
                //y=val[i-1].toInt();
                //content[i-1]=y;
                content[i-1]=val[i-1];
                }
                }
                else
                {
                // for(int i=1; i<=MinN; i++){
                //     x=0;
                //     content[i-1]=x;
                //}
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                //
                void TDBCOlHeader_Items_String::SetByArr(double* val, int Q){
                int MinN;
                if(this->LengthOfItemsSet>=Q) MinN=Q; else MinN=this->LengthOfItemsSet;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                //content[i-1]=(int)round(val[i-1]);
                content[i-1]=RealToString(val[i-1]);
                content[i-1].setNum(val[i-1]);
                }
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TDBCOlHeader_Items_String::SetByArr(int* val, int Q){
                int MinN;
                if(this->LengthOfItemsSet>=Q) MinN=Q; else MinN=this->LengthOfItemsSet;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                //content[i-1]=(int)round(val[i-1]);
                content[i-1]=RealToString((double)val[i-1]);
                content[i-1].setNum(val[i-1]);
                }
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TDBCOlHeader_Items_String::SetByArr(bool* val, int Q){
                int MinN;
                if(this->LengthOfItemsSet>=Q) MinN=Q; else MinN=this->LengthOfItemsSet;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                content[i-1]=IntToStr(BoolToInt(val[i-1]));
                content[i-1].setNum(BoolToInt(val[i-1]));
                }
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TDBCOlHeader_Items_String::SetByArr(QString* val, int Q){
                double x;
                int y;
                int MinN;
                if(this->LengthOfItemsSet>=Q) MinN=Q; else MinN=this->LengthOfItemsSet;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                //x=StrToReal(val[i-1]);
                //x=val[i-1].toDouble();
                //y=IntPart(x);
                //y=(int)round(x);
                //y=val[i-1].toInt();
                //content[i-1]=y;
                content[i-1]=val[i-1];
                }
                }
                else
                {
                // for(int i=1; i<=MinN; i++){
                //     x=0;
                //     content[i-1]=x;
                //}
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                //
                void TDBCOlHeader_Items_String::AddOrInsDoubleVal(double val, int N){
                //SetByValDouble(val);
                QString s;
                s=RealToString(val);
                s.setNum(val);
                if(N>=1 && N<=content.size()) content.insert(content.begin()+N-1,s);
                else{
                content.push_back(s);
                this->LengthOfItemsSet++;
                //ActiveN=N;
                }
                }
                void TDBCOlHeader_Items_String::AddOrInsFloatVal(float val, int N){
                //SetByValDouble(val);
                //if(N>=1 && N<=content.size()) content.insert(N-1,(float)val);
                QString s;
                s=RealToString((double)val);
                s.setNum(val);
                if(N>=1 && N<=content.size()) content.insert(content.begin()+N-1,s);
                else{
                //content.push_back((float)val);
                content.push_back(s);
                this->LengthOfItemsSet++;
                //ActiveN=N;
                }
                }
                void TDBCOlHeader_Items_String::AddOrInsIntVal(int val, int N){
                //SetByValDouble(val);
                QString s;
                s=IntToStringSimple(val);
                s.setNum(val);
                if(N>=1 && N<=content.size()) content.insert(content.begin()+N-1,s);
                else{
                content.push_back(s);
                this->LengthOfItemsSet++;
                //ActiveN=N;
                }
                }
                void TDBCOlHeader_Items_String::AddOrInsBoolVal(bool val, int N){
                int x=BoolToInt(val);
                //SetByValDouble(val);
                QString s;
                s=IntToStringSimple(x);
                s.setNum(x);
                if(N>=1 && N<=content.size()){
                content.insert(content.begin()+N-1,s);
                }else{
                content.push_back(s);
                this->LengthOfItemsSet++;
                //ActiveN=N;
                }
                }
                void TDBCOlHeader_Items_String::AddOrInsStringVal(QString val, int N){
                //double x=StrToReal(val);
                //int y=IntPart(x);
                //x=val.toDouble();
                //y=(int)round(x);
                //SetByValDouble(val);
                if(N>=1 && N<=content.size()){
                content.insert(content.begin()+N-1,val);
                }else{
                content.push_back(val);
                this->LengthOfItemsSet++;
                //ActiveN=N;
                }
                }
                //
                void TDBCOlHeader_Items_String::DelValN(int N) {
                if(N>=1 && N<=content.size()){
                content.erase(content.begin()+N-1);
                }
                }
                //
                void TDBCOlHeader_Items_String::GetDoubleArr(double*&Arr,  int&QItems) {
                QItems=this->LengthOfItemsSet;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new double[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetDoubleValN(i);
                }
                void TDBCOlHeader_Items_String::GetFloatArr( float*&Arr, int&QItems){
                QItems=this->LengthOfItemsSet;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new float[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetFloatValN(i);
                }
                void TDBCOlHeader_Items_String::GetIntArr( int*&Arr,  int&QItems){
                QItems=this->LengthOfItemsSet;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new int[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetIntValN(i);
                }
                void TDBCOlHeader_Items_String::GetBoolArr( bool*&Arr,  int&QItems){
                QItems=this->LengthOfItemsSet;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new bool[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetBoolValN(i);
                }
                void TDBCOlHeader_Items_String::ToStringArr(QString*&Arr, int&QItems) {
                QItems=this->LengthOfItemsSet;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new QString[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = ToStringN(i);
                }
                //
                void TDBCOlHeader_Items_String::SetNameN(QString name, int N) {
                if(N>=1 && N<=7){
                while(this->names.size()<N-1){
                this->names.push_back("");
                }
                this->names[N-1]=name;
                }
                }
                void TDBCOlHeader_Items_String::SetName1(QString name){
                int N=1;
                while(this->names.size()<N-1){
                this->names.push_back("");
                }
                this->names[N-1]=name;
                }
                void TDBCOlHeader_Items_String::SetName2(QString name){
                int N=2;
                while(this->names.size()<N-1){
                this->names.push_back("");
                }
                this->names[N-1]=name;
                }
                void TDBCOlHeader_Items_String::SetName3(QString name){
                int N=3;
                while(this->names.size()<N-1){
                this->names.push_back("");
                }
                this->names[N-1]=name;
                }
                void TDBCOlHeader_Items_String::SetNames(QString* Arr, int Q){
                this->LengthOfNamesSet=this->names.size();
                if(Q>=1 && Q<=7){
                for(int i=1; i<=Q; i++){
                if(this->LengthOfItemsSet<=Q) this->names[i-1]=Arr[i-1];
                else this->names.push_back(Arr[i-1]);
                }
                }
                }
                QString TDBCOlHeader_Items_String::GetNameN(int N) {
                QString R="";
                this->LengthOfNamesSet=this->names.size();
                if(N>=1 && N<=7 && N<this->LengthOfItemsSet) R=this->names[N-1];
                return R;
                }
                QString TDBCOlHeader_Items_String::GetName1() {
                int N=1;
                QString R="";
                this->LengthOfNamesSet=this->names.size();
                if(N>=1 && N<=7 && N<=this->LengthOfItemsSet) R=this->names[N-1];
                return R;
                }
                QString TDBCOlHeader_Items_String::GetName2() {
                int N=2;
                QString R="";
                this->LengthOfNamesSet=this->names.size();
                if(N>=1 && N<=7 && N<=this->LengthOfItemsSet) R=this->names[N-1];
                return R;
                }
                QString TDBCOlHeader_Items_String::GetName3() {
                int N=3;
                QString R="";
                this->LengthOfNamesSet=this->names.size();
                if(N>=1 && N<=7 && N<=this->LengthOfNamesSet) R=this->names[N-1];
                return R;
                }
                void TDBCOlHeader_Items_String::GetNames(QString*&Arr, int&QItems) {
                if(Arr!=NULL) delete[]Arr;
                QItems=this->GetLengthOfNamesList();
                if(Arr==NULL) Arr=new QString[QItems];
                for(int i=1; i<=QItems; i++) Arr[i-1]=this->names[i-1];
                }
                int TDBCOlHeader_Items_String::GetLengthOfNamesList(){
                this->LengthOfNamesSet=this->names.size();
                return this->LengthOfNamesSet;
                }
                //
                //     override object Clone(){
                //        return new TDBCOlHeader_Items_String(this->GetDoubleVal());
                //    }
                //};//cl TDBCOlHeader_Items_String





    // class DataCell:ICloneable
    //        {
    //            TDataCell cell;
    //             DataCell() {
    //                cell = NULL;
    //                SetDefault0();
    //            }
            //
    DataCell::DataCell() {
        cell = NULL;
        SetDefault0();
    }
    DataCell::DataCell(double val)
    {
        cell = NULL;
        SetDefault0();
        SetValAndTypeDouble(val);
    }
    DataCell::DataCell(float val)
    {
        cell = NULL;
        SetDefault0();
        SetValAndTypeFloat(val);
    }
    DataCell::DataCell(int val)
    {
         cell = NULL;
         SetDefault0();
         SetValAndTypeInt(val);
    }
    DataCell::DataCell(bool val)
    {
        cell = NULL;
        SetDefault0();
        SetValAndTypeBool(val);
    }
    DataCell::DataCell(QString val)
    {
        cell = NULL;
        SetDefault0();
        SetValAndTypeString(val);
    }
    DataCell::DataCell(double*arr, int Length)
    {
        cell = NULL;
        SetDefault0();
        SetArrAndTypeDouble(arr, Length);
    }
    DataCell::DataCell(float*arr, int Length)
    {
        cell = NULL;
        SetDefault0();
        SetArrAndTypeFloat(arr, Length);
    }
    DataCell::DataCell(int*arr, int Length)
    {
         cell = NULL;
         SetDefault0();
         SetArrAndTypeInt(arr, Length);
    }
    DataCell::DataCell(bool*arr, int Length)
    {
        cell = NULL;
        SetDefault0();
        SetArrAndTypeBool(arr, Length);
    }
    DataCell::DataCell(QString*arr, int Length)
    {
         cell = NULL;
         SetDefault0();
         SetArrAndTypeString(arr, Length);
    }
    /*DataCell::DataCell(int val, bool ConstNotVar)
    {
        cell = NULL;
        SetDefault0();
        if (ConstNotVar)
        {
            cell = new TCellUniqueNumKeeper(val);
        }
        else
        {
            SetValAndTypeInt(val);
        }
     }*/
     DataCell::DataCell(int TypeN, int N)
     {
         double DoubleVal = 0;
         float FloatVal = 0;
         int IntVal = 0;
         bool BoolVal =BoolValByDefault;
         QString StringVal = "";
         double *DoubleArr = NULL;
         float* FloatArr = NULL;
         int* IntArr = NULL;
         bool* BoolArr = NULL;
         QString* StringArr = NULL;
         cell = NULL;
         //SetDefault0();
         SetDefault0();
         switch (TypeN)
         {
              case DoubleTypeN:
                cell = new TCellDouble();
              break;
              case FloatTypeN:
                cell = new TCellFloat();
              break;
              case IntTypeN:
                cell = new TCellInt();
              break;
              case BoolTypeN:
                cell = new TCellBool();
              break;
              case StringTypeN:
                cell = new TCellString();
              break;
              case DoubleArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                DoubleArr = new double[N];
                for (int i = 1; i <= N; i++) DoubleArr[i - 1] = 0;
                cell = new TCellDoubleArr(DoubleArr, N);
                delete[]DoubleArr;
              break;
              case FloatArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                FloatArr = new float[N];
                for (int i = 1; i <= N; i++) FloatArr[i - 1] = 0;
                cell = new TCellFloatArr(FloatArr, N);
                delete[]FloatArr;
              break;
              case IntArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                IntArr = new int[N];
                for (int i = 1; i <= N; i++) IntArr[i - 1] = 0;
                cell = new TCellIntArr(IntArr, N);
                delete[]IntArr;
              break;
              case BoolArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                BoolArr = new bool[N];
                for (int i = 1; i <= N; i++) BoolArr[i - 1] = BoolValByDefault;
                cell = new TCellBoolArr(IntArr, N);
                delete[]BoolArr;
               break;
               case StringArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                StringArr = new QString[N];
                for (int i = 1; i <= N; i++) StringArr[i - 1] = "";
                cell = new TCellStringArr(StringArr, N);
                delete[]StringArr;
               break;
               //case UniqueIntValKeeperTypeN:
               //    cell = new TCellUniqueNumKeeper(N);
               //break;
          }
          this->cell->SetActiveN(1);
          //SetActiveN(1);
      }
      //DataCell::DataCell(DataCellTypeInfo TypeInf)
      DataCell::DataCell(TypeCell *TypeInf)
      {
          int TypeN=TypeInf->GetTypeN();
          int length=TypeInf->GetLength();
          int N=length;
          double DoubleVal = 0;
          float FloatVal = 0;
          int IntVal = 0;
          bool BoolVal = BoolValByDefault;
          QString StringVal = "";
          double * DoubleArr = NULL;
          float* FloatArr = NULL;
          int* IntArr = NULL;
          bool* BoolArr = NULL;
          QString* StringArr = NULL;
          cell = NULL;
          //SetDefault0();
          switch (TypeN)
          {
               case DoubleTypeN:
                cell = new TCellDouble();
               break;
               case FloatTypeN:
                cell = new TCellFloat();
               break;
               case IntTypeN:
                cell = new TCellInt();
               break;
               case BoolTypeN:
                cell = new TCellBool();
               break;
               case StringTypeN:
                cell = new TCellString();
               break;
               case DoubleArrayTypeN:
                if (length < 1 || N > MaxInt) N = 1;
                DoubleArr = new double[N];
                for (int i = 1; i <= N; i++) DoubleArr[i - 1] = 0;
                cell = new TCellDoubleArr(DoubleArr, N);
                delete[]DoubleArr;
               break;
               case FloatArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                FloatArr = new float[N];
                for (int i = 1; i <= N; i++) FloatArr[i - 1] = 0;
                cell = new TCellFloatArr(FloatArr, N);
                delete[]FloatArr;
               break;
               case IntArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                IntArr = new int[N];
                for (int i = 1; i <= N; i++) IntArr[i - 1] = 0;
                cell = new TCellIntArr(IntArr, N);
                delete[]IntArr;
               break;
               case BoolArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                BoolArr = new bool[N];
                for (int i = 1; i <= N; i++) BoolArr[i - 1] = BoolValByDefault;
                cell = new TCellBoolArr(IntArr, N);
                delete[]BoolArr;
               break;
               case StringArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                StringArr = new QString[N];
                for (int i = 1; i <= N; i++) StringArr[i - 1] = "";
                cell = new TCellStringArr(StringArr, N);
                delete[]StringArr;
               break;
               //case UniqueIntValKeeperTypeN:
               //    cell = new TCellUniqueNumKeeper(N);
               //break;
           }
           this->cell->SetActiveN(1);
      }
      //
      void DataCell::SetDefault0()
      {
          int TypeN = DefaultAnyCellTypeN;
          switch (TypeN)
          {
               case DoubleTypeN:
                cell = new TCellDouble();
               break;
               case FloatTypeN:
                cell = new TCellFloat();
               break;
               case IntTypeN:
                cell = new TCellInt();
               break;
               case BoolTypeN:
                cell = new TCellBool();
               break;
               case StringTypeN:
                cell = new TCellString();
               break;
               case DoubleArrayTypeN:
                cell = new TCellDoubleArr();
               break;
               case FloatArrayTypeN:
                cell = new TCellFloatArr();
               break;
               case IntArrayTypeN:
                cell = new TCellIntArr();
               break;
               case BoolArrayTypeN:
                cell = new TCellBoolArr();
               break;
               case StringArrayTypeN:
                cell = new TCellStringArr();
              break;
           }//swch
        }//fn
            //
      TDataCell* DataCell::GetCell() {
          return (this->cell);
      }
            //
      //DataCellTypeInfo DataCell::GetTypeInfo()
      TypeCell* DataCell::GetTypeInfo()
      {
           int TypeN = GetTypeN();
           int length = GetLength();
           //DataCellTypeInfo TypeInf = new DataCellTypeInfo(TypeN, length);
           TypeCell TypeInf ;//= new DataCellTypeInfo(TypeN, length);
           return &TypeInf;
       }
       void DataCell::SetTypeAndDefaultValByTypeInf(TypeCell *TypeInf, bool PreserveVal)
       {
           TableCellAccessConfiguration cfg;//=new TableCellAccessConfiguration();
           int TypeN = TypeInf->GetTypeN();
           int length = TypeInf->GetLength();
           cfg.LengthOfArrCellTypes=length;
           cfg.PreserveVal=PreserveVal;
           this->SetTypeN(TypeN, cfg);
       }
        void DataCell::SetType(TypeCell *TypeInf)
        {
            double dVal;
            float fVal;
            int iVal;
            bool bVal;
            QString sVal;
            double*dArr=NULL;
            float*fArr=NULL;
            int* iArr=NULL;
            bool*bArr=NULL;
            QString* sArr=NULL, *names=NULL;
            int TypeN, TypeNPrev, LengthOfItemsSet, PrevLengthOfItemsSet, LengthOfNamesSet, MinLengthOfItemsSet;
            //
            if(cell!=NULL){
                TypeNPrev=cell->GetTypeN(); else TypeNPrev=0;
            }
                       //else PrevLengthOfItemsSet=1;//0;
            if(TypeInf==NULL){
                TypeN=DoubleTypeN;
                LengthOfItemsSet = 1;
            }else{
                TypeN = TypeInf->GetTypeN();
                LengthOfItemsSet = TypeInf->GetLength();
            }
            if(cell==NULL){
                TypeNPrev=DoubleTypeN;
                PrevLengthOfItemsSet = 1;
            }else{
                TypeNPrev = cell->GetTypeN();
                PrevLengthOfItemsSet = cell->GetLength();
            }
            //
            if(TypeNPrev!=TypeN){
                switch(TypeN){
                case DoubleTypeN:
                if(cell==NULL){
                dVal=0;
                }else{
                dVal=cell->GetDoubleVal();
                if(TypeN!=TypeNPrev){
                delete cell;
                cell=new TCellDouble(dVal);
                }
                }
                break;
                case FloatTypeN:
                if(cell==NULL){
                fVal=0;
                }else{
                fVal=cell->GetFloatVal();
                if(TypeN!=TypeNPrev){
                delete cell;
                cell=new TCellFloat(fVal);
                }
                }
                break;
                case IntTypeN:
                if(cell==NULL){
                iVal=0;
                }else{
                iVal=cell->GetIntVal();
                if(TypeN!=TypeNPrev){
                delete cell;
                cell=new TCellInt(iVal);
                }
                }
                break;
                case BoolTypeN:
                if(cell==NULL){
                bVal=BoolValByDefault;
                }else{
                bVal=cell->GetBoolVal();
                if(TypeN!=TypeNPrev){
                delete cell;
                cell=new TCellBool(bVal);
                }
                }
                break;
                case StringTypeN:
                if(cell==NULL){
                sVal="";
                }else{
                sVal=cell->ToString();
                if(TypeN!=TypeNPrev){
                delete cell;
                cell=new TCellString(sVal);
                }
                }
                break;
                case UniqueIntValKeeperTypeN:
                //
                break;
                case DoubleArrayTypeN:

                if(cell==NULL){
                dArr=0;
                }else{

                }
                break;
                case FloatArrayTypeN:

                break;
                case IntArrayTypeN:

                break;
                case BoolArrayTypeN:

                break;
                case StringArrayTypeN:

                break;
                case DoubleItemsDBFieldHeaderCellTypeN:

                break;
                case IntItemsFieldDBHeaderCellTypeN:

                break;
                case StringItemsDBFieldHeaderCellTypeN:

                break;
                }//switch
            }else{// if(TypeNPrev!=TypeN)
                if(cell!=NULL)PrevLengthOfItemsSet=cell->GetLength();
                else PrevLengthOfItemsSet=1;//0;
            }
        }//fn
       //
             double DataCell::GetDoubleVal()
            {
                return cell->GetDoubleVal();
            }
             float DataCell::GetFloatVal()
            {
                return cell->GetFloatVal();
            }
             int DataCell::GetIntVal()
            {
                return cell->GetIntVal();
            }
             bool DataCell::GetBoolVal()
            {
                return cell->GetBoolVal();
            }
            QString DataCell::ToString()
            {
                //QString s;
                //s=RealToString(this->val);
                //s.setNum(this->val);
                //return cell.ToString();
                return this->cell->ToString();
            }
            //
            void DataCell::GetDoubleArr(double*&vals, int&count)
            {
                cell->GetDoubleArr(vals, count);
            }
             void DataCell::GetFloatArr(float*&vals, int&count)
            {
                cell->GetFloatArr(vals, count);
            }
             void DataCell::GetIntArr(int*&vals, int&count)
            {
                cell->GetIntArr(vals, count);
            }
             void DataCell::GetBoolArr(bool*&vals, int&count)
            {
                cell->GetBoolArr(vals,count);
            }
             void DataCell::ToStringArr(QString*&vals, int&count)
            {
                cell->ToStringArr(vals, count);
            }
            //
             double DataCell::GetDoubleValN(int N)
            {
                return cell->GetDoubleValN(N);
            }
             float DataCell::GetFloatValN(int N)
            {
                return cell->GetFloatValN(N);
            }
             int DataCell::GetIntValN(int N)
            {
                return cell->GetIntValN(N);
            }
             bool DataCell::GetBoolValN(int N)
            {
                return cell->GetBoolValN(N);
            }
            QString DataCell::ToStringN(int N)
            {
                return cell->ToStringN(N);
            }
            //
             void DataCell::SetVal(double val){ cell->SetVal(val); }
             void DataCell::SetVal(int val){ cell->SetVal(val); }
             void DataCell::SetVal(bool val) { cell->SetVal(val); }
             void DataCell::SetVal(QString val) { cell->SetVal(val); }
            //
             void DataCell::SetValN(double val, int N) { cell->SetValN(val, N); }
             void DataCell::SetValN(float val, int N) { cell->SetValN(val, N); }
             void DataCell::SetValN(int val, int N) { cell->SetValN(val, N); }
             void DataCell::SetValN(bool val, int N) { cell->SetValN(val, N); }
             void DataCell::SetValN(QString val, int N) { cell->SetValN(val, N); }
            //
             int DataCell::GetTypeN() { return cell->GetTypeN(); }
             int DataCell::GetLength() {
                int N = 0;
                if (cell != NULL) N = cell->GetLength();
                return N;
            }
             int DataCell::GetActiveN() {
                int N = 0;
                if (cell != NULL) N = cell->GetActiveN();
                return N;
            }
            //
             void DataCell::SetActiveN(int N)
            {
                cell->SetActiveN(N);
            }
             void DataCell::SetLength(int Length){
                cell->SetLength(Length);
            }
            //
             void DataCell::DelValN(int N)
            {
                cell->DelValN(N);
            }
            //
             void DataCell::AddOrInsDoubleVal(double val, int N)
            {
                cell->AddOrInsDoubleVal(val, N);
            }
             void DataCell::AddOrInsFloatVal(float val, int N)
            {
                cell->AddOrInsFloatVal(val, N);
            }
             void DataCell::AddOrInsIntVal(int val, int N)
            {
                cell->AddOrInsIntVal(val, N);
            }
             void DataCell::AddOrInsBoolVal(bool val, int N)
            {
                cell->AddOrInsBoolVal(val, N);
            }
             void DataCell::AddOrInsStringVal(QString val, int N)
            {
                cell->AddOrInsStringVal(val, N);
            }
            //
             void DataCell::Assign(double val)
            {
                cell = new TCellDouble();
                cell->SetVal(val);
                //cell.SetValAndT
            }
             void DataCell::Assign(float val)
            {
                cell = new TCellFloat();
                cell->SetVal(val);
            }
             void DataCell::Assign(int val)
            {
                cell = new TCellInt();
                cell->SetVal(val);
            }
             void DataCell::Assign(bool val)
            {
                cell = new TCellBool();
                cell->SetVal(val);
            }
             void DataCell::Assign(QString val)
            {
                cell = new TCellString();
                cell->SetVal(val);
            }
             void DataCell::Assign(double val, int N)
            {
                double*arr=NULL;
                int ActualLength, PrevLength, MinLength, PrevTypeN;
                //TDataCell* bufCell=NULL;
                if(cell!=NULL)PrevTypeN=cell->GetTypeN();
                if(cell!=NULL)PrevLength=cell->GetLength();
                if(cell!=NULL)PrevTypeN=cell->GetTypeN();
                if(cell!=NULL && !((PrevTypeN==DoubleArrayTypeN ||                 if(N<PrevLength) ActualLength=PrevLength; else ActualLength=N;
                if(ActualLength<=PrevLength) MinLength=ActualLength; else MinLength=PrevLength;
                arr=new double[ActualLength];
                for(int i=1; i<=ActualLength; i++) arr[i-1]=0;
                if(cell!=NULL)for(int i=1; i<=PrevLength; i++) arr[i-1]=cell->GetDoubleValN(i);
                if(cell!=NULL)delete cell;
                cell = new TCellDoubleArr(arr, ActualLength);
                delete[]arr;
                }
                cell->SetValN(val, N);
                /*if (cell==NULL || (cell->GetTypeN() != DoubleTypeN && PrevLength < N))
                {
                bufCell=cell;
                if(N<PrevLength) ActualLength=PrevLength; else ActualLength=N;
                if(ActualLength<=PrevLength) MinLength=ActualLength; else MinLength=PrevLength;
                arr=new double[ActualLength];
                for(int i=1; i<=ActualLength; i++) arr[i-1]=0;
                for(int i=1; i<=MinLength; i++) arr[i-1]=bufCell.GetDoubleValN(N);
                cell = new TCellDoubleArr(arr, ActualLength);
                }
                cell->SetValN(val, N);
                delete[]arr;*/
            }
             void DataCell::Assign(float val, int N)
            {
                float* arr = NULL;
                int ActualLength, PrevLength, MinLength, PrevTypeN;
                //TDataCell* bufCell=NULL;
                if(cell!=NULL)PrevTypeN=cell->GetTypeN();
                if(cell!=NULL)PrevLength=cell->GetLength();
                if(cell!=NULL)PrevTypeN=cell->GetTypeN();
                if(cell!=NULL && !((PrevTypeN==FloatArrayTypeN ||                 if(N<PrevLength) ActualLength=PrevLength; else ActualLength=N;
                if(ActualLength<=PrevLength) MinLength=ActualLength; else MinLength=PrevLength;
                arr=new float[ActualLength];
                for(int i=1; i<=ActualLength; i++) arr[i-1]=0;
                if(cell!=NULL)for(int i=1; i<=PrevLength; i++) arr[i-1]=cell->GetFloatValN(i);
                if(cell!=NULL)delete cell;
                cell = new TCellFloatArr(arr, ActualLength);
                delete[]arr;
                }
                cell->SetValN(val, N);
                /*int ActualLength, PrevLength = cell->GetLength(), MinLength;
                TDataCell bufCell;
                if (cell==NULL || (cell->GetTypeN() != DoubleTypeN && PrevLength < N))
                {
                bufCell = cell;
                if (N < PrevLength) ActualLength = PrevLength; else ActualLength = N;
                if (ActualLength <= PrevLength) MinLength = ActualLength; else MinLength = PrevLength;
                arr = new float[ActualLength];
                for (int i = 1; i <= ActualLength; i++) arr[i - 1] = 0;
                for (int i = 1; i <= MinLength; i++) arr[i - 1] = bufCell.GetFloatValN(N);
                cell = new TCellFloatArr(arr, ActualLength);
                }
                cell->SetValN(val, N);
                delete[]arr;*/
            }
             void DataCell::Assign(int val, int N)
            {
                int* arr = NULL;
                int ActualLength, PrevLength, MinLength, PrevTypeN;
                //TDataCell* bufCell=NULL;
                if(cell!=NULL)PrevTypeN=cell->GetTypeN();
                if(cell!=NULL)PrevLength=cell->GetLength();
                if(cell!=NULL)PrevTypeN=cell->GetTypeN();
                if(cell!=NULL && !((PrevTypeN==IntArrayTypeN ||                 if(N<PrevLength) ActualLength=PrevLength; else ActualLength=N;
                if(ActualLength<=PrevLength) MinLength=ActualLength; else MinLength=PrevLength;
                arr=new int[ActualLength];
                for(int i=1; i<=ActualLength; i++) arr[i-1]=0;
                if(cell!=NULL)for(int i=1; i<=PrevLength; i++) arr[i-1]=cell->GetIntValN(i);
                if(cell!=NULL)delete cell;
                cell = new TCellIntArr(arr, ActualLength);
                delete[]arr;
                }
                cell->SetValN(val, N);
                /*int ActualLength, PrevLength = cell->GetLength(), MinLength;
                TDataCell bufCell;
                if (cell==NULL || (cell->GetTypeN() != DoubleTypeN && PrevLength < N))
                {
                bufCell = cell;
                if (N < PrevLength) ActualLength = PrevLength; else ActualLength = N;
                if (ActualLength <= PrevLength) MinLength = ActualLength; else MinLength = PrevLength;
                arr = new int[ActualLength];
                for (int i = 1; i <= ActualLength; i++) arr[i - 1] = 0;
                for (int i = 1; i <= MinLength; i++) arr[i - 1] = bufCell.GetIntValN(N);
                cell = new TCellIntArr(arr, ActualLength);
                }
                cell->SetValN(val, N);
                delete[]arr;*/
            }
             void DataCell::Assign(bool val, int N)
            {
                bool* arr = NULL;
                int ActualLength, PrevLength, MinLength, PrevTypeN;
                //TDataCell* bufCell=NULL;
                if(cell!=NULL)PrevTypeN=cell->GetTypeN();
                if(cell!=NULL)PrevLength=cell->GetLength();
                if(cell!=NULL)PrevTypeN=cell->GetTypeN();
                if(cell!=NULL && !((PrevTypeN==BoolArrayTypeN /*||                 if(N<PrevLength) ActualLength=PrevLength; else ActualLength=N;
                if(ActualLength<=PrevLength) MinLength=ActualLength; else MinLength=PrevLength;
                arr=new bool[ActualLength];
                for(int i=1; i<=ActualLength; i++) arr[i-1]=BoolValByDefault;
                if(cell!=NULL)for(int i=1; i<=PrevLength; i++) arr[i-1]=cell->GetBoolValN(i);
                if(cell!=NULL)delete cell;
                cell = new TCellBoolArr(arr, ActualLength);
                delete[]arr;
                }
                cell->SetValN(val, N);
                /*int ActualLength, PrevLength, MinLength, PrevTypeN;
                //TDataCell* bufCell=NULL;
                if(cell!=NULL)PrevTypeN=cell->GetTypeN();
                if(cell!=NULL)PrevLength=cell->GetLength();
                if(cell!=NULL)PrevTypeN=cell->GetTypeN();
                if(cell!=NULL && !((PrevTypeN==IntArrayTypeN ||                 if(N<PrevLength) ActualLength=PrevLength; else ActualLength=N;
                if(ActualLength<=PrevLength) MinLength=ActualLength; else MinLength=PrevLength;
                arr=new bool[ActualLength];
                for(int i=1; i<=ActualLength; i++) arr[i-1]=0;
                if(cell!=NULL)for(int i=1; i<=PrevLength; i++) arr[i-1]=cell->GetDoubleValN(N);
                if(cell!=NULL)delete cell;
                cell = new TCellDoubleArr(arr, ActualLength);
                delete[]arr;
                }
                cell->SetValN(val, N);*/
                /*
                int ActualLength, PrevLength = cell->GetLength(), MinLength;
                TDataCell bufCell;
                if (cell==NULL || (cell.GetTypeN() != DoubleTypeN && PrevLength < N))
                {
                bufCell = cell;
                if (N < PrevLength) ActualLength = PrevLength; else ActualLength = N;
                if (ActualLength <= PrevLength) MinLength = ActualLength; else MinLength = PrevLength;
                arr = new bool[ActualLength];
                for (int i = 1; i <= ActualLength; i++) arr[i - 1] = BoolValByDefault;
                for (int i = 1; i <= MinLength; i++) arr[i - 1] = bufCell.GetBoolValN(N);
                cell = new TCellBoolArr(arr, ActualLength);
                }
                cell->SetValN(val, N);
                delete[]arr;
                */
            }
             void DataCell::Assign(QString val, int N)
            {
                QString* arr = NULL;
                int ActualLength, PrevLength, MinLength, PrevTypeN;
                //TDataCell* bufCell=NULL;
                if(cell!=NULL)PrevTypeN=cell->GetTypeN();
                if(cell!=NULL)PrevLength=cell->GetLength();
                if(cell!=NULL)PrevTypeN=cell->GetTypeN();
                if(cell!=NULL && !((PrevTypeN==StringArrayTypeN ||                 if(N<PrevLength) ActualLength=PrevLength; else ActualLength=N;
                if(ActualLength<=PrevLength) MinLength=ActualLength; else MinLength=PrevLength;
                arr=new QString[ActualLength];
                for(int i=1; i<=ActualLength; i++) arr[i-1]="";
                if(cell!=NULL)for(int i=1; i<=PrevLength; i++) arr[i-1]=cell->ToStringN(i);
                if(cell!=NULL)delete cell;
                cell = new TCellStringArr(arr, ActualLength);
                delete[]arr;
                }
                cell->SetValN(val, N);
                /*int ActualLength, PrevLength = cell->GetLength(), MinLength;
                TDataCell bufCell;
                if (cell==NULL || (cell.GetTypeN() != DoubleTypeN && PrevLength < N))
                {
                bufCell = cell;
                if (N < PrevLength) ActualLength = PrevLength; else ActualLength = N;
                if (ActualLength <= PrevLength) MinLength = ActualLength; else MinLength = PrevLength;
                arr = new string[ActualLength];
                for (int i = 1; i <= ActualLength; i++) arr[i - 1] = "";
                for (int i = 1; i <= MinLength; i++) arr[i - 1] = bufCell.ToStringN(N);
                cell = new TCellBoolArr(arr, ActualLength);
                }
                cell->SetValN(val, N);
                delete[]arr;*/
            }
             void DataCell::Assign(double* val, int count)
            {
                //cell = new TCellDoubleMemo(val, count);
                if(cell!=NULL)delete cell;
                cell = new TCellDoubleArr(val, count);
            }
             void DataCell::Assign(float* val, int count)
            {
                //cell = new TCellFloatMemo(val, count);
                if(cell!=NULL)delete cell;
                cell = new TCellFloatArr(val, count);
            }
             void DataCell::Assign(int* val, int count)
            {
                //cell = new TCellIntMemo(val, count);
                if(cell!=NULL)delete cell;
                cell = new TCellIntArr(val, count);
            }
             void DataCell::Assign(bool* val, int count)
            {
                //cell = new TCellBoolMemo(val,  count);
                if(cell!=NULL)delete cell;
                cell = new TCellBoolArr(val,  count);
            }
             void DataCell::Assign(QString* val, int count)
            {
                //cell = new TCellStringMemo(val, count);
                if(cell!=NULL)delete cell;
                cell = new TCellStringArr(val, count);
            }
            /* void DataCell::Assign(double* val, int count, QString name1, QString name2, QString name3)
            {
                cell = new TDataBaseFieldHeader_WithItems_Double(val, count, name1, name2, name3);
            }
             void DataCell::Assign(QString* val, int count, QString name1, QString name2, QString name3)
            {
                cell = new TDataBaseFieldHeader_WithItems_String(val, count, name1, name2, name3);
            }*/
             void DataCell::Assign(double* val, int countItems, QString* names, int countNames)
             {
                if(cell!=NULL) delete cell;
                cell = new TDBCOlHeader_Items_Double(val, countItems, names, countNames);
             }
             /*void DataCell::Assign(float* val, int countItems, QString* names, int countNames)
             {
                if(cell!=NULL) delete cell;
                cell = new TDBCOlHeader_Items_Double(val, countItems, names, countNames);
             }*/
             void DataCell::Assign(int* val, int countItems, QString* names, int countNames)
             {
                if(cell!=NULL) delete cell;
                cell = new TDBCOlHeader_Items_Int(val, count, name1, name2, name3);
             }
             void DataCell::Assign(QString* val, int countItems, QString* names, int countNames)
             {
                if(cell!=NULL) delete cell;
                cell = new TDBCOlHeader_Items_String(val, countItems, names, countNames);
             }
            //void DataCell::Assign(TDataCell obj)//dynamic cast?
            //{
            //    cell = obj;
            //}
            void DataCell::Assign(TDataCell* obj)
            {
                int TypeN, Length=0;
                double DoubleVal;
                float FloatVal;
                int IntVal;
                bool BoolVal;
                QString StringVal;
                double* DoubleArr = NULL;
                float* FloatArr = NULL;
                int* IntArr = NULL;
                bool* BoolArr = NULL;
                QString* StringArr = NULL;
                //
                if(this->cell!=NULL) delete cell;
                //
                if (obj == NULL) cell = NULL;
                else
                {
                TypeN = obj->GetTypeN();
                switch (TypeN)
                {
                case DoubleTypeN:
                DoubleVal = obj->GetDoubleVal();
                cell = new TCellDouble(DoubleVal);
                break;
                case FloatTypeN:
                FloatVal = obj->GetFloatVal();
                cell = new TCellFloat(FloatVal);
                break;
                case IntTypeN:
                IntVal = obj->GetIntVal();
                cell = new TCellInt(IntVal);
                break;
                case BoolTypeN:
                BoolVal = obj->GetBoolVal();
                cell = new TCellBool(BoolVal);
                break;
                case StringTypeN:
                StringVal = obj->ToString();
                cell = new TCellString(StringVal);
                break;
                case DoubleArrayTypeN:
                obj->GetDoubleArr(DoubleArr, Length);
                cell = new TCellDoubleMemo(DoubleArr, Length);
                break;
                case FloatArrayTypeN:
                obj->GetFloatArr(FloatArr, Length);
                cell = new TCellFloatMemo(FloatArr, Length);
                break;
                case IntArrayTypeN:
                obj->GetIntArr(IntArr, Length);
                cell = new TCellIntMemo(IntArr, Length);
                break;
                case BoolArrayTypeN:
                obj->GetBoolArr(BoolArr, Length);
                cell = new TCellBoolMemo(BoolArr, Length);
                break;
                case StringArrayTypeN:
                obj->ToStringArr(StringArr, Length);
                cell = new TCellStringMemo(StringArr, Length);
                break;
                }//swch
                }//if
            }
            void DataCell::Assign(DataCell obj)
            {
                int TypeN, Length=0;
                double DoubleVal;
                float FloatVal;
                int IntVal;
                bool BoolVal;
                QString StringVal;
                double* DoubleArr = NULL;
                float* FloatArr = NULL;
                int* IntArr = NULL;
                bool* BoolArr = NULL;
                QString* StringArr = NULL;
                if (obj == NULL) cell = NULL;
                else
                {
                TypeN = obj.GetTypeN();
                switch (TypeN)
                {
                case DoubleTypeN:
                DoubleVal = obj.GetDoubleVal();
                cell = new TCellDouble(DoubleVal);
                break;
                case FloatTypeN:
                FloatVal = obj.GetFloatVal();
                cell = new TCellFloat(FloatVal);
                break;
                case IntTypeN:
                IntVal = obj.GetIntVal();
                cell = new TCellInt(IntVal);
                break;
                case BoolTypeN:
                BoolVal = obj.GetBoolVal();
                cell = new TCellBool(BoolVal);
                break;
                case StringTypeN:
                StringVal = obj.ToString();
                cell = new TCellString(StringVal);
                break;
                case DoubleArrayTypeN:
                obj.GetDoubleArr(DoubleArr, Length);
                cell = new TCellDoubleMemo(DoubleArr, Length);
                break;
                case FloatArrayTypeN:
                obj.GetFloatArr(FloatArr, Length);
                cell = new TCellFloatMemo(FloatArr, Length);
                break;
                case IntArrayTypeN:
                obj.GetIntArr(IntArr, Length);
                cell = new TCellIntMemo(IntArr, Length);
                break;
                case BoolArrayTypeN:
                obj.GetBoolArr(BoolArr, Length);
                cell = new TCellBoolMemo(BoolArr, Length);
                break;
                case StringArrayTypeN:
                obj.ToStringArr(StringArr, Length);
                cell = new TCellStringMemo(StringArr, Length);
                break;
                }//swch
                }//if
            }//fn asgn
            //mark34-1
             void DataCell::AssignBy(TDataCell *CellFrom)
            {
                TDataCell CellTo = this.cell;
                int TypeTo = CellTo.GetTypeN(), TypeFrom = CellFrom.GetTypeN(), LenFrom = CellFrom.GetLength(), LenTo = CellTo.GetLength(), LenMin;
                double DoubleVal;
                float FloatVal;
                int IntVal;
                bool BoolVal;
                QString StringVal;
                double[] DoubleArr = NULL;
                float[] FloatArr = NULL;
                int[] IntArr = NULL;
                bool[] BoolArr = NULL;
                QString* StringArr = NULL;
                if (LenFrom >= LenTo) LenMin = LenFrom; else LenMin = LenTo;
                switch (TypeFrom)
                {
                case DoubleTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                //DoubleVal=CellFrom.GetDoubleVal();
                //CellTo.SetByValDouble(DoubleVal);
                break;
                case FloatTypeN:
                //CellTo.SetByValFloat(CellFrom.GetFloatVal());
                //CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                FloatVal = CellFrom.GetFloatVal();
                CellTo.SetByValFloat(FloatVal);
                DoubleVal = CellFrom.GetDoubleVal();
                CellTo.SetByValDouble(DoubleVal);
                break;
                case IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                break;
                case BoolTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                break;
                case StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                break;
                case DoubleArrayTypeN:
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellFrom.GetDoubleArr(DoubleArr, enFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case DoubleItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case IntItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case StringItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case FloatTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                DoubleVal = CellFrom.GetDoubleVal();
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                FloatVal = CellFrom.GetFloatVal();
                CellTo.SetByValFloat(FloatVal);
                break;
                case FloatTypeN:
                FloatVal = CellFrom.GetFloatVal();
                CellTo.SetByValFloat(FloatVal);
                //IntVal=CellFrom.GetIntVal();
                //CellTo.SetByValInt(IntVal);
                break;
                case IntTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                break;
                case DoubleArrayTypeN:
                FloatVal = CellFrom.GetFloatVal();
                CellTo.SetByValFloat(FloatVal);
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                //CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                //CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case DoubleItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case IntItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case StringItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case IntTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case IntTypeN:
                //CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellTo.SetByValString(CellFrom.ToString());
                break;
                case DoubleArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                //CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                //CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case DoubleItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case IntItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case StringItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case BoolTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                //CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case IntTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellTo.SetByValString(CellFrom.ToString());
                break;
                case DoubleArrayTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                //CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                //CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case DoubleItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case IntItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case StringItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case StringTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                //CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellTo.SetByValString(CellFrom.ToString());
                break;
                case FloatTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                break;
                case IntTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                //CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case DoubleArrayTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case DoubleItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case IntItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case StringItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case DoubleArrayTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                //CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                //CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case FloatTypeN:
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                break;
                case IntTypeN:
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case DoubleArrayTypeN:
                //CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case DoubleItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case IntItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case StringItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case FloatArrayTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case FloatTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case BoolTypeN:
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case DoubleArrayTypeN:
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case FloatArrayTypeN:
                //CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                //CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case DoubleItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case IntItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case StringItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case IntArrayTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case FloatTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolTypeN:
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case DoubleArrayTypeN:
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                //CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                //CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case DoubleItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case IntItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case StringItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case BoolArrayTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case FloatTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case BoolTypeN:
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case DoubleArrayTypeN:
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case BoolArrayTypeN:
                //CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                //CellTo.SetByArrInt(IntArr, LenFrom);
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case DoubleItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case IntItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case StringItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case StringArrayTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case FloatTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case IntTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolTypeN:
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case DoubleArrayTypeN:
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                //CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                //CellTo.SetByArrString(StringArr, LenFrom);
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case DoubleItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case IntItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case StringItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case UniqueIntValKeeperTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case StringTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case DoubleArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case IntArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case StringArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case UniqueIntValKeeperTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case DoubleItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case IntItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case StringItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case DoubleItemsFieldHeaderCellTypeN: //ne done!
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case StringTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case DoubleArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case IntArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case StringArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case UniqueIntValKeeperTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case DoubleItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case IntItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case StringItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case IntItemsFieldHeaderCellTypeN: //ne done!
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case StringTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case DoubleArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case IntArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case StringArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case UniqueIntValKeeperTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case DoubleItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case IntItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case StringItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case StringItemsFieldHeaderCellTypeN: //ne done!
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case StringTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case DoubleArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case IntArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case StringArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case UniqueIntValKeeperTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case DoubleItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case IntItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case StringItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                }//switch
                this.cell=CellTo;
            }
             void DataCell::AssignBy(DataCell obj)
            {
                TDataCell ObjCell = obj.GetCell();
                AssignBy(ObjCell);
            }
            /*
            //mark34-2
         class DataCell
        {
            TDataCell cell;
             DataCell() {
                cell = NULL;
                SetDefault0();
            }
            //
             DataCell(double val)
            {
                cell = NULL;
                SetDefault0();
                SetValAndTypeDouble(val);
            }
             DataCell(float val)
            {
                cell = NULL;
                SetDefault0();
                SetValAndTypeFloat(val);
            }
             DataCell(int val)
            {
                cell = NULL;
                SetDefault0();
                SetValAndTypeInt(val);
            }
             DataCell(bool val)
            {
                cell = NULL;
                SetDefault0();
                SetValAndTypeBool(val);
            }
             DataCell(string val)
            {
                cell = NULL;
                SetDefault0();
                SetValAndTypeString(val);
            }
             DataCell(double[] arr, int Length)
            {
                cell = NULL;
                SetDefault0();
                SetArrAndTypeDouble(arr, Length);
            }
             DataCell(float[] arr, int Length)
            {
                cell = NULL;
                SetDefault0();
                SetArrAndTypeFloat(arr, Length);
            }
             DataCell(int[] arr, int Length)
            {
                cell = NULL;
                SetDefault0();
                SetArrAndTypeInt(arr, Length);
            }
             DataCell(bool[] arr, int Length)
            {
                cell = NULL;
                SetDefault0();
                SetArrAndTypeBool(arr, Length);
            }
             DataCell(string[] arr, int Length)
            {
                cell = NULL;
                SetDefault0();
                SetArrAndTypeString(arr, Length);
            }
             DataCell(int val, bool ConstNotVar)
            {
                cell = NULL;
                SetDefault0();
                if (ConstNotVar)
                {
                cell = new TCellUniqueNumKeeper(val);
                }
                else
                {
                SetValAndTypeInt(val);
                }
            }
             DataCell(int TypeN, int N)
            {
                double DoubleVal = 0;
                float FloatVal = 0;
                int IntVal = 0;
                bool BoolVal = BoolValByDefault;
                string StringVal = "";
                double []DoubleArr = NULL;
                float[] FloatArr = NULL;
                int[] IntArr = NULL;
                bool[] BoolArr = NULL;
                string[] StringArr = NULL;
                cell = NULL;
                //SetDefault0();
                SetDefault0();
                switch (TypeN)
                {
                case DoubleTypeN:
                cell = new TCellDouble();
                break;
                case FloatTypeN:
                cell = new TCellFloat();
                break;
                case IntTypeN:
                cell = new TCellInt();
                break;
                case BoolTypeN:
                cell = new TCellBool();
                break;
                case StringTypeN:
                cell = new TCellString();
                break;
                case DoubleArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                DoubleArr = new double[N];
                for (int i = 1; i <= N; i++) DoubleArr[i - 1] = 0;
                cell = new TCellDoubleMemo(DoubleArr, N);
                break;
                case FloatArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                FloatArr = new float[N];
                for (int i = 1; i <= N; i++) FloatArr[i - 1] = 0;
                cell = new TCellFloatMemo(FloatArr, N);
                break;
                case IntArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                IntArr = new int[N];
                for (int i = 1; i <= N; i++) IntArr[i - 1] = 0;
                cell = new TCellFloatMemo(IntArr, N);
                break;
                case BoolArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                BoolArr = new bool[N];
                for (int i = 1; i <= N; i++) BoolArr[i - 1] = BoolValByDefault;
                cell = new TCellBoolMemo(IntArr, N);
                break;
                case StringArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                StringArr = new string[N];
                for (int i = 1; i <= N; i++) StringArr[i - 1] = "";
                cell = new TCellStringMemo(StringArr, N);
                break;
                case UniqueIntValKeeperTypeN:
                cell = new TCellUniqueNumKeeper(N);
                break;
                }
                this.cell.SetActiveN(1);
                //SetActiveN(1);
            }
             DataCell(DataCellTypeInfo TypeInf)
            {
                int TypeN=TypeInf.GetTypeN();
                int length=TypeInf.GetLength();
                int N=length;
                double DoubleVal = 0;
                float FloatVal = 0;
                int IntVal = 0;
                bool BoolVal = BoolValByDefault;
                string StringVal = "";
                double []DoubleArr = NULL;
                float[] FloatArr = NULL;
                int[] IntArr = NULL;
                bool[] BoolArr = NULL;
                string[] StringArr = NULL;
                cell = NULL;
                //SetDefault0();
                switch (TypeN)
                {
                case DoubleTypeN:
                cell = new TCellDouble();
                break;
                case FloatTypeN:
                cell = new TCellFloat();
                break;
                case IntTypeN:
                cell = new TCellInt();
                break;
                case BoolTypeN:
                cell = new TCellBool();
                break;
                case StringTypeN:
                cell = new TCellString();
                break;
                case DoubleArrayTypeN:
                if (length < 1 || N > MaxInt) N = 1;
                DoubleArr = new double[N];
                for (int i = 1; i <= N; i++) DoubleArr[i - 1] = 0;
                cell = new TCellDoubleMemo(DoubleArr, N);
                break;
                case FloatArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                FloatArr = new float[N];
                for (int i = 1; i <= N; i++) FloatArr[i - 1] = 0;
                cell = new TCellFloatMemo(FloatArr, N);
                break;
                case IntArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                IntArr = new int[N];
                for (int i = 1; i <= N; i++) IntArr[i - 1] = 0;
                cell = new TCellFloatMemo(IntArr, N);
                break;
                case BoolArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                BoolArr = new bool[N];
                for (int i = 1; i <= N; i++) BoolArr[i - 1] = BoolValByDefault;
                cell = new TCellBoolMemo(IntArr, N);
                break;
                case StringArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                StringArr = new string[N];
                for (int i = 1; i <= N; i++) StringArr[i - 1] = "";
                cell = new TCellStringMemo(StringArr, N);
                break;
                case UniqueIntValKeeperTypeN:
                cell = new TCellUniqueNumKeeper(N);
                break;
                }
                this.cell.SetActiveN(1);
            }
            //
             void SetDefault0()
            {
                int TypeN = DefaultAnyCellTypeN;
                switch (TypeN)
                {
                case DoubleTypeN:
                cell = new TCellDouble();
                break;
                case FloatTypeN:
                cell = new TCellFloat();
                break;
                case IntTypeN:
                cell = new TCellInt();
                break;
                case BoolTypeN:
                cell = new TCellBool();
                break;
                case StringTypeN:
                cell = new TCellString();
                break;
                case DoubleArrayTypeN:
                cell = new TCellDoubleMemo();
                break;
                case FloatArrayTypeN:
                cell = new TCellFloatMemo();
                break;
                case IntArrayTypeN:
                cell = new TCellIntMemo();
                break;
                case BoolArrayTypeN:
                cell = new TCellBoolMemo();
                break;
                case StringArrayTypeN:
                cell = new TCellStringMemo();
                break;
                }//swch
                SetActiveN(1);
            }//fn
            //
             TDataCell GetCell() { return this.cell; }
            //
             DataCellTypeInfo GetTypeInfo()
            {
                int TypeN = GetTypeN();
                int length = GetLength();
                DataCellTypeInfo TypeInf = new DataCellTypeInfo(TypeN, length);
                return TypeInf;
            }
             void SetTypeAndDefaultValByTypeInf(DataCellTypeInfo TypeInf, bool PreserveVal=false)
            {
                TableCellAccessConfiguration cfg=new TableCellAccessConfiguration();
                int TypeN = TypeInf.GetTypeN();
                int length = TypeInf.GetLength();
                cfg.LengthOfArrCellTypes=length;
                cfg.PreserveVal=PreserveVal;
                this.SetTypeN(TypeN, cfg);
            }
            //
             double GetDoubleVal()
            {
                return cell.GetDoubleVal();
            }
             float GetFloatVal()
            {
                return cell.GetFloatVal();
            }
             int GetIntVal()
            {
                return cell.GetIntVal();
            }
             bool GetBoolVal()
            {
                return cell.GetBoolVal();
            }
             override string ToString()
            {
                return cell.ToString();
            }
            //
             void GetDoubleArr(ref double[] vals, ref int count)
            {
                cell.GetDoubleArr(ref vals, ref count);
            }
             void GetFloatArr(ref float[] vals, ref int count)
            {
                cell.GetFloatArr(ref vals, ref count);
            }
             void GetIntArr(ref int[] vals, ref int count)
            {
                cell.GetIntArr(ref vals, ref count);
            }
             void GetBoolArr(ref bool[] vals, ref int count)
            {
                cell.GetBoolArr(ref vals, ref count);
            }
             void ToStringArr(ref string[] vals, ref int count)
            {
                cell.ToStringArr(ref vals, ref count);
            }
            //
             double GetDoubleValN(int N)
            {
                return cell.GetDoubleValN(N);
            }
             float GetFloatValN(int N)
            {
                return cell.GetFloatValN(N);
            }
             int GetIntValN(int N)
            {
                return cell.GetIntValN(N);
            }
             bool GetBoolValN(int N)
            {
                return cell.GetBoolValN(N);
            }
             string ToStringN(int N)
            {
                return cell.ToStringN(N);
            }
            //
             void SetVal(double val){ cell.SetVal(val); }
             void SetVal(int val){ cell.SetVal(val); }
             void SetVal(bool val) { cell.SetVal(val); }
             void SetVal(string val) { cell.SetVal(val); }
            //
             void SetValN(double val, int N) { cell.SetValN(val, N); }
             void SetValN(float val, int N) { cell.SetValN(val, N); }
             void SetValN(int val, int N) { cell.SetValN(val, N); }
             void SetValN(bool val, int N) { cell.SetValN(val, N); }
             void SetValN(string val, int N) { cell.SetValN(val, N); }
            //
             int GetTypeN() { return cell.GetTypeN(); }
             int GetLength() {
                int N = 0;
                if (cell != NULL) N = cell.GetLength();
                return N;
            }
             int GetActiveN() {
                int N = 0;
                if (cell != NULL) N = cell.GetActiveN();
                return N;
            }
            //
             void SetActiveN(int N)
            {
                cell.SetActiveN(N);
            }
             void SetLength(int Length){
                cell.SetLength(Length);
            }
            //
             void DelValN(int N)
            {
                cell.DelValN(N);
            }
            //
             void AddOrInsDoubleVal(double val, int N)
            {
                cell.AddOrInsDoubleVal(val, N);
            }
             void AddOrInsFloatVal(float val, int N)
            {
                cell.AddOrInsFloatVal(val, N);
            }
             void AddOrInsIntVal(int val, int N)
            {
                cell.AddOrInsIntVal(val, N);
            }
             void AddOrInsBoolVal(bool val, int N)
            {
                cell.AddOrInsBoolVal(val, N);
            }
             void AddOrInsStringVal(string val, int N)
            {
                cell.AddOrInsStringVal(val, N);
            }
            //
             void Assign(double val)
            {
                cell = new TCellDouble();
                cell.SetVal(val);
                //cell.SetValAndT
            }
             void Assign(float val)
            {
                cell = new TCellFloat();
                cell.SetVal(val);
            }
             void Assign(int val)
            {
                cell = new TCellInt();
                cell.SetVal(val);
            }
             void Assign(bool val)
            {
                cell = new TCellBool();
                cell.SetVal(val);
            }
             void Assign(string val)
            {
                cell = new TCellString();
                cell.SetVal(val);
            }
             void Assign(double val, int N)
            {
                double[]arr=NULL;
                int ActualLength, PrevLength=cell.GetLength(), MinLength;
                TDataCell bufCell;
                if (cell==NULL || (cell.GetTypeN() != DoubleTypeN && PrevLength < N))
                {
                bufCell=cell;
                if(N<PrevLength) ActualLength=PrevLength; else ActualLength=N;
                if(ActualLength<=PrevLength) MinLength=ActualLength; else MinLength=PrevLength;
                arr=new double[ActualLength];
                for(int i=1; i<=ActualLength; i++) arr[i-1]=0;
                for(int i=1; i<=MinLength; i++) arr[i-1]=bufCell.GetDoubleValN(N);
                cell = new TCellDoubleMemo(arr, ActualLength);
                }
                cell.SetValN(val, N);
            }
             void Assign(float val, int N)
            {
                float[] arr = NULL;
                int ActualLength, PrevLength = cell.GetLength(), MinLength;
                TDataCell bufCell;
                if (cell==NULL || (cell.GetTypeN() != DoubleTypeN && PrevLength < N))
                {
                bufCell = cell;
                if (N < PrevLength) ActualLength = PrevLength; else ActualLength = N;
                if (ActualLength <= PrevLength) MinLength = ActualLength; else MinLength = PrevLength;
                arr = new float[ActualLength];
                for (int i = 1; i <= ActualLength; i++) arr[i - 1] = 0;
                for (int i = 1; i <= MinLength; i++) arr[i - 1] = bufCell.GetFloatValN(N);
                cell = new TCellFloatMemo(arr, ActualLength);
                }
                cell.SetValN(val, N);
            }
             void Assign(int val, int N)
            {
                int[] arr = NULL;
                int ActualLength, PrevLength = cell.GetLength(), MinLength;
                TDataCell bufCell;
                if (cell==NULL || (cell.GetTypeN() != DoubleTypeN && PrevLength < N))
                {
                bufCell = cell;
                if (N < PrevLength) ActualLength = PrevLength; else ActualLength = N;
                if (ActualLength <= PrevLength) MinLength = ActualLength; else MinLength = PrevLength;
                arr = new int[ActualLength];
                for (int i = 1; i <= ActualLength; i++) arr[i - 1] = 0;
                for (int i = 1; i <= MinLength; i++) arr[i - 1] = bufCell.GetIntValN(N);
                cell = new TCellIntMemo(arr, ActualLength);
                }
                cell.SetValN(val, N);
            }
             void Assign(bool val, int N)
            {
                bool[] arr = NULL;
                int ActualLength, PrevLength = cell.GetLength(), MinLength;
                TDataCell bufCell;
                if (cell==NULL || (cell.GetTypeN() != DoubleTypeN && PrevLength < N))
                {
                bufCell = cell;
                if (N < PrevLength) ActualLength = PrevLength; else ActualLength = N;
                if (ActualLength <= PrevLength) MinLength = ActualLength; else MinLength = PrevLength;
                arr = new bool[ActualLength];
                for (int i = 1; i <= ActualLength; i++) arr[i - 1] = BoolValByDefault;
                for (int i = 1; i <= MinLength; i++) arr[i - 1] = bufCell.GetBoolValN(N);
                cell = new TCellBoolMemo(arr, ActualLength);
                }
                cell.SetValN(val, N);
            }
             void Assign(string val, int N)
            {
                string[] arr = NULL;
                int ActualLength, PrevLength = cell.GetLength(), MinLength;
                TDataCell bufCell;
                if (cell==NULL || (cell.GetTypeN() != DoubleTypeN && PrevLength < N))
                {
                bufCell = cell;
                if (N < PrevLength) ActualLength = PrevLength; else ActualLength = N;
                if (ActualLength <= PrevLength) MinLength = ActualLength; else MinLength = PrevLength;
                arr = new string[ActualLength];
                for (int i = 1; i <= ActualLength; i++) arr[i - 1] = "";
                for (int i = 1; i <= MinLength; i++) arr[i - 1] = bufCell.ToStringN(N);
                cell = new TCellBoolMemo(arr, ActualLength);
                }
                cell.SetValN(val, N);
            }
             void Assign(double[] val, int count)
            {
                cell = new TCellDoubleMemo(val, count);
            }
             void Assign(float[] val, int count)
            {
                cell = new TCellFloatMemo(val, count);
            }
             void Assign(int[] val, int count)
            {
                cell = new TCellIntMemo(val, count);
            }
             void Assign(bool[] val, int count)
            {
                cell = new TCellBoolMemo(val,  count);
            }
             void Assign(string[] val, int count)
            {
                cell = new TCellStringMemo(val, count);
            }
             void Assign(double[] val, int count, string name1, string name2, string name3)
            {
                cell = new TDataBaseFieldHeader_WithItems_Double(val, count, name1, name2, name3);
            }
             void Assign(string[] val, int count, string name1, string name2, string name3)
            {
                cell = new TDataBaseFieldHeader_WithItems_String(val, count, name1, name2, name3);
            }
             void Assign(TDataCell obj)
            {
                cell = obj;
            }
             void Assign(DataCell obj)
            {
                int TypeN, Length=0;
                double DoubleVal;
                float FloatVal;
                int IntVal;
                bool BoolVal;
                string StringVal;
                double[] DoubleArr = NULL;
                float[] FloatArr = NULL;
                int[] IntArr = NULL;
                bool[] BoolArr = NULL;
                string[] StringArr = NULL;
                if (obj == NULL) cell = NULL;
                else
                {
                TypeN = obj.GetTypeN();
                switch (TypeN)
                {
                case DoubleTypeN:
                DoubleVal = obj.GetDoubleVal();
                cell = new TCellDouble(DoubleVal);
                break;
                case FloatTypeN:
                FloatVal = obj.GetFloatVal();
                cell = new TCellFloat(FloatVal);
                break;
                case IntTypeN:
                IntVal = obj.GetIntVal();
                cell = new TCellInt(IntVal);
                break;
                case BoolTypeN:
                BoolVal = obj.GetBoolVal();
                cell = new TCellBool(BoolVal);
                break;
                case StringTypeN:
                StringVal = obj.ToString();
                cell = new TCellString(StringVal);
                break;
                case DoubleArrayTypeN:
                obj.GetDoubleArr(ref DoubleArr, ref Length);
                cell = new TCellDoubleMemo(DoubleArr, Length);
                break;
                case FloatArrayTypeN:
                obj.GetFloatArr(ref FloatArr, ref Length);
                cell = new TCellFloatMemo(FloatArr, Length);
                break;
                case IntArrayTypeN:
                obj.GetIntArr(ref IntArr, ref Length);
                cell = new TCellIntMemo(IntArr, Length);
                break;
                case BoolArrayTypeN:
                obj.GetBoolArr(ref BoolArr, ref Length);
                cell = new TCellBoolMemo(BoolArr, Length);
                break;
                case StringArrayTypeN:
                obj.ToStringArr(ref StringArr, ref Length);
                cell = new TCellStringMemo(StringArr, Length);
                break;
                }//swch
                }//if
            }//fn asgn
            //
             void AssignBy(TDataCell CellFrom)
            {
                TDataCell CellTo = this.cell;
                int TypeTo = CellTo.GetTypeN(), TypeFrom = CellFrom.GetTypeN(), LenFrom = CellFrom.GetLength(), LenTo = CellTo.GetLength(), LenMin;
                double DoubleVal;
                float FloatVal;
                int IntVal;
                bool BoolVal;
                string StringVal;
                double[] DoubleArr = NULL;
                float[] FloatArr = NULL;
                int[] IntArr = NULL;
                bool[] BoolArr = NULL;
                string[] StringArr = NULL;
                if (LenFrom >= LenTo) LenMin = LenFrom; else LenMin = LenTo;
                switch (TypeFrom)
                {
                case DoubleTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                //DoubleVal=CellFrom.GetDoubleVal();
                //CellTo.SetByValDouble(DoubleVal);
                break;
                case FloatTypeN:
                //CellTo.SetByValFloat(CellFrom.GetFloatVal());
                //CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                FloatVal = CellFrom.GetFloatVal();
                CellTo.SetByValFloat(FloatVal);
                DoubleVal = CellFrom.GetDoubleVal();
                CellTo.SetByValDouble(DoubleVal);
                break;
                case IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                break;
                case BoolTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                break;
                case StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                break;
                case DoubleArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case FloatTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                DoubleVal = CellFrom.GetDoubleVal();
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                FloatVal = CellFrom.GetFloatVal();
                CellTo.SetByValFloat(FloatVal);
                break;
                case FloatTypeN:
                FloatVal = CellFrom.GetFloatVal();
                CellTo.SetByValFloat(FloatVal);
                //IntVal=CellFrom.GetIntVal();
                //CellTo.SetByValInt(IntVal);
                break;
                case IntTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                break;
                case DoubleArrayTypeN:
                FloatVal = CellFrom.GetFloatVal();
                CellTo.SetByValFloat(FloatVal);
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                //CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                //CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case IntTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case IntTypeN:
                //CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellTo.SetByValString(CellFrom.ToString());
                break;
                case DoubleArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                //CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                //CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case BoolTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                //CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case IntTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellTo.SetByValString(CellFrom.ToString());
                break;
                case DoubleArrayTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                //CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                //CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case StringTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                //CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellTo.SetByValString(CellFrom.ToString());
                break;
                case FloatTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                break;
                case IntTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                //CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case DoubleArrayTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case DoubleArrayTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                //CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                //CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case FloatTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                break;
                case IntTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case DoubleArrayTypeN:
                //CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case FloatArrayTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case FloatTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case BoolTypeN:
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case DoubleArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case FloatArrayTypeN:
                //CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                //CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case IntArrayTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case FloatTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolTypeN:
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case DoubleArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                //CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                //CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case BoolArrayTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case FloatTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case BoolTypeN:
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case DoubleArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case BoolArrayTypeN:
                //CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                //CellTo.SetByArrInt(IntArr, LenFrom);
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case StringArrayTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case FloatTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case IntTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolTypeN:
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case DoubleArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                //CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                //CellTo.SetByArrString(StringArr, LenFrom);
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case UniqueIntValKeeperTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case StringTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case DoubleArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case IntArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case StringArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case UniqueIntValKeeperTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case TDataBaseFieldHeaderTypeN: //ne done!
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case StringTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case DoubleArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case IntArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case StringArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case UniqueIntValKeeperTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TDataBaseFieldHeaderTypeN:
                //NOp;
                break;
                }//switch
                break;
                }//switch
                this.cell=CellTo;
            }
             void AssignBy(DataCell obj)
            {
                TDataCell ObjCell = obj.GetCell();
                AssignBy(ObjCell);
            }
             */
            //mark4
             void DataCell::SetTypeN(int TypeN, TableCellAccessConfiguration *cfgExt)
            {
                double* DoubleArr = NULL;
                float* FloatArr = NULL;
                int* IntArr = NULL;
                bool* BoolArr = NULL;
                string* StringArr = NULL;
                TDataCell BufCell = NULL;
                TableCellAccessConfiguration cfg=NULL;
                if (cfgExt != NULL) cfg = cfgExt; //qu s'abl?
                else cfg = new TableCellAccessConfiguration();
                if (cfg.PreserveVal)
                {
                BufCell = cell;
                }
                switch (TypeN)
                {
                case DoubleTypeN:
                if(!cfg.PreserveVal) cell = new TCellDouble();
                else cell = new TCellDouble(BufCell.GetDoubleVal());
                break;
                case FloatTypeN:
                cell = new TCellFloat();
                if (cfg.PreserveVal) cell.SetByValFloat(BufCell.GetFloatVal());
                break;
                case IntTypeN:
                cell = new TCellInt();
                if (cfg.PreserveVal) cell.SetByValInt(BufCell.GetIntVal());
                break;
                case BoolTypeN:
                cell = new TCellBool();
                if (cfg.PreserveVal) cell.SetByValBool(BufCell.GetBoolVal());
                break;
                case StringTypeN:
                cell = new TCellString();
                if (cfg.PreserveVal) cell.SetByValString(BufCell.ToString());
                break;
                case UniqueIntValKeeperTypeN:
                cell = new TCellUniqueNumKeeper(cfg.UniqueIntVal);
                if (cfg.PreserveVal) cell.SetByValInt(BufCell.GetIntVal());
                break;
                case DoubleArrayTypeN:
                if (cfg.PreserveVal) BufCell.GetDoubleArr(ref DoubleArr, ref cfg.LengthOfArrCellTypes);
                cell = new TCellDoubleMemo(DoubleArr, cfg.LengthOfArrCellTypes);
                break;
                case FloatArrayTypeN:
                if (cfg.PreserveVal) BufCell.GetFloatArr(ref FloatArr, ref cfg.LengthOfArrCellTypes);
                cell = new TCellFloatMemo(FloatArr, cfg.LengthOfArrCellTypes);
                break;
                case IntArrayTypeN:
                if (cfg.PreserveVal) BufCell.GetIntArr(ref IntArr, ref cfg.LengthOfArrCellTypes);
                cell = new TCellIntMemo(IntArr, cfg.LengthOfArrCellTypes);
                break;
                case BoolArrayTypeN:
                if (cfg.PreserveVal) BufCell.GetBoolArr(ref BoolArr, ref cfg.LengthOfArrCellTypes);
                cell = new TCellBoolMemo(BoolArr, cfg.LengthOfArrCellTypes);
                break;
                case StringArrayTypeN:
                if (cfg.PreserveVal) BufCell.ToStringArr(ref StringArr, ref cfg.LengthOfArrCellTypes);
                cell = new TCellStringMemo(BoolArr, cfg.LengthOfArrCellTypes);
                break;
                }
            }
            //
             void DataCell::SetValAndTypeDouble(double val)
            {
                if (cell != NULL && cell.GetTypeN() != DoubleTypeN)
                {
                cell = new TCellDouble(val);
                }
                else
                {
                cell.SetByValDouble(val);
                }
            }
             void DataCell::SetValAndTypeFloat(float val)
            {
                if (cell != NULL && cell.GetTypeN() != FloatTypeN)
                {
                cell = new TCellFloat(val);
                }
                else
                {
                cell.SetByValFloat(val);
                }
            }
             void DataCell::SetValAndTypeInt(int val)
            {
                if (cell != NULL && cell.GetTypeN() != IntTypeN)
                {
                cell = new TCellInt(val);
                }
                else
                {
                cell.SetByValInt(val);
                }
            }
             void DataCell::SetValAndTypeBool(bool val)
            {
                if (cell != NULL && cell.GetTypeN() != BoolTypeN)
                {
                cell = new TCellBool(val);
                }
                else
                {
                cell.SetByValBool(val);
                }
            }
             void DataCell::SetValAndTypeString(string val)
            {
                if (cell != NULL && cell.GetTypeN() != StringTypeN)
                {
                cell = new TCellString(val);
                }
                else
                {
                cell.SetByValString(val);
                }
            }
             void DataCell::SetArrAndTypeDouble(double[] arr, int Length)
            {
                if (cell != NULL && cell.GetTypeN() != DoubleArrayTypeN)
                {
                cell = new TCellDoubleMemo(arr, Length);
                }
                else
                {
                cell.SetByArrDouble(arr, Length);
                }
            }
             void DataCell::SetArrAndTypeFloat(float[] arr, int Length)
            {
                if (cell != NULL && cell.GetTypeN() != FloatArrayTypeN)
                {
                cell = new TCellFloatMemo(arr, Length);
                }
                else
                {
                cell.SetByArrFloat(arr, Length);
                }
            }
             void DataCell::SetArrAndTypeInt(int[] arr, int Length)
            {
                if (cell != NULL && cell.GetTypeN() != IntArrayTypeN)
                {
                cell = new TCellIntMemo(arr, Length);
                }
                else
                {
                cell.SetByArrInt(arr, Length);
                }
            }
             void DataCell::SetArrAndTypeBool(bool[] arr, int Length)
            {
                if (cell != NULL && cell.GetTypeN() != BoolArrayTypeN)
                {
                cell = new TCellBoolMemo(arr, Length);
                }
                else
                {
                cell.SetByArrBool(arr, Length);
                }
            }
             void DataCell::SetArrAndTypeString(string[] arr, int Length)
            {
                if (cell != NULL && cell.GetTypeN() != StringArrayTypeN)
                {
                cell = new TCellStringMemo(arr, Length);
                }
                else
                {
                cell.SetByArrString(arr, Length);
                }
            }
             void DataCell::SetValAndTypeUniqueIntNumKeeper(int val)
            {
                cell = new TCellUniqueNumKeeper(val);
            }
            //
             void DataCell::SetByValDouble(double val)
            {
                cell.SetByValDouble(val);
            }
             void DataCell::SetByValFloat(float val)
            {
                cell.SetByValFloat(val);
            }
             void DataCell::SetByValInt(int val)
            {
                cell.SetByValInt(val);
            }
             void DataCell::SetByValBool(bool val)
            {
                cell.SetByValBool(val);
            }
             void DataCell::SetByValString(string val)
            {
                cell.SetByValString(val);
            }
            //
             void DataCell::SetByValDoubleN(double val, int N)
            {
                cell.SetByValDoubleN(val, N);
            }
             void DataCell::SetByValFloatN(float val, int N)
            {
                cell.SetByValFloatN(val, N);
            }
             void DataCell::SetByValIntN(int val, int N)
            {
                cell.SetByValIntN(val, N);
            }
             void DataCell::SetByValBoolN(bool val, int N)
            {
                cell.SetByValBoolN(val, N);
            }
             void DataCell::SetByValStringN(string val, int N)
            {
                cell.SetByValStringN(val, N);
            }
            //
             void DataCell::SetByArrDouble(double[] val, int Length)
            {
                cell.SetByArrDouble(val, Length);
            }
             void DataCell::SetByArrFloat(float[] val, int Length)
            {
                cell.SetByArrFloat(val, Length);
            }
             void DataCell::SetByArrInt(int[] val, int Length)
            {
                cell.SetByArrInt(val, Length);
            }
             void DataCell::SetByArrBool(bool[] val, int Length)
            {
                cell.SetByArrBool(val, Length);
            }
             void DataCell::SetByArrString(string[] val, int Length)
            {
                cell.SetByArrString(val, Length);
            }
            //
             int DataCell::GetErstItemNByStringVal(string val)
            {
                int N = 0;
                for (int i = GetLength(); i >= 1; i--)
                {
                if(val.Equals(ToStringN(i))) N=i;
                }
                return N;
            }
             void DataCell::SetActiveNByStringVal(string val){
                int N = 0;
                for (int i = GetLength(); i >= 1; i--)
                {
                if(val.Equals(ToStringN(i))) N=i;
                }
                if(N!=0) SetActiveN(N);
            }
            //
             DataCell::string GetNameN(int N) {
                return cell.GetNameN(N);
            }
             DataCell::string GetName1()
            {
                return cell.GetName1();
            }
             DataCell::string GetName2() {
                return cell.GetName2();
            }
             DataCell::string GetName3() {
                return cell.GetName3();
            }
             void DataCell::GetNames(ref string[] Arr, ref int QItems)
            {
                cell.GetNames(ref Arr, ref QItems);
            }
             int DataCell::GetLengthOfNamesList()
            {
                return cell.GetLengthOfNamesList();
            }
            //
             static DataCell::DataCell operator +(DataCell obj1, DataCell obj2){
                DataCell sum = new DataCell();
                double[] DoubleArr = NULL;
                float[] FloatArr = NULL;
                int[] IntArr = NULL;
                bool[] BoolArr = NULL;
                string[] StringArr = NULL;
                int Type1N, Type2N, Length1, Length2;
                if (obj1 != NULL)
                {
                if (obj2 != NULL) //else NOp;
                {
                Type1N = obj1.GetTypeN();
                Type2N = obj2.GetTypeN();
                switch (Type1N)
                {
                case DoubleTypeN:
                switch (Type2N)
                {
                case DoubleTypeN:
                sum = new DataCell(obj1.GetDoubleVal() + obj2.GetDoubleVal());
                break;
                case FloatTypeN:
                //sum = new DataCell(obj1.GetFloatVal() + obj2.GetFloatVal());
                sum = new DataCell(obj1.GetDoubleVal() + obj2.GetDoubleVal());
                break;
                case IntTypeN:
                //sum = new DataCell(obj1.GetIntVal() + obj2.GetIntVal());
                sum = new DataCell(obj1.GetDoubleVal() + obj2.GetDoubleVal());
                break;
                case BoolTypeN:
                //sum = new DataCell(obj1.GetBoolVal() && obj2.GetBoolVal());
                sum = new DataCell(obj1.GetDoubleVal() + obj2.GetDoubleVal());
                break;
                case StringTypeN:
                //sum = new DataCell(obj1.ToString() + obj2.ToString());
                sum = new DataCell(obj1.GetDoubleVal() + obj2.GetDoubleVal());
                break;
                case DoubleArrayTypeN:
                Length1 = obj1.GetLength(); //1
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i +Length1- 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(DoubleArr, Length1 + Length2);
                break;
                case FloatArrayTypeN: //ob double longer r' float: s'nee'd array of > long vars
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i +Length1- 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(DoubleArr, Length1 + Length2);
                break;
                case IntArrayTypeN://ob double longer r' float: s'nee'd array of > long vars
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i +Length1- 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(DoubleArr, Length1 + Length2);
                break;
                case BoolArrayTypeN: //ob double longer r' float: s'nee'd array of > long vars
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i +Length1- 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(DoubleArr, Length1 + Length2);
                break;
                case StringArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i +Length1- 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(DoubleArr, Length1 + Length2);
                //
                //Length1 = obj1.GetLength();
                //Length2 = obj2.GetLength();
                //StringArr = new string[Length1 + Length2];
                //for (int i = 1; i <= Length1; i++){
                //    StringArr[i - 1] = obj1.ToStringN(i);
                //}
                //for (int i = 1; i <= Length2; i++)
                //{
                //    StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                //}
                //sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                }//switch
                break;
                case FloatTypeN:
                switch (Type2N)
                {
                case DoubleTypeN:
                sum = new DataCell(obj1.GetDoubleVal() + obj2.GetDoubleVal());
                break;
                case FloatTypeN:
                //sum = new DataCell(obj1.GetFloatVal() + obj2.GetFloatVal());
                sum = new DataCell(obj1.GetFloatVal() + obj2.GetFloatVal());
                break;
                case IntTypeN:
                //sum = new DataCell(obj1.GetIntVal() + obj2.GetIntVal());
                sum = new DataCell(obj1.GetFloatVal() + obj2.GetFloatVal());
                break;
                case BoolTypeN:
                //sum = new DataCell(obj1.GetBoolVal() && obj2.GetBoolVal());
                sum = new DataCell(obj1.GetFloatVal() + obj2.GetFloatVal());
                break;
                case StringTypeN:
                //sum = new DataCell(obj1.ToString() + obj2.ToString());
                sum = new DataCell(obj1.GetFloatVal() + obj2.GetFloatVal());
                break;
                case DoubleArrayTypeN:
                //Length1 = obj1.GetLength();
                //Length2 = obj2.GetLength();
                //DoubleArr = new double[Length1 + Length2];
                //for (int i = 1; i <= Length1; i++){
                //    DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                //}
                //for (int i = 1; i <= Length2; i++)
                //{
                //    DoubleArr[i +Length1- 1] = obj2.GetDoubleValN(i);
                //}
                //sum = new DataCell(DoubleArr, Length1 + Length2);
                //
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                break;
                case FloatArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                //CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                //CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                break;
                case BoolArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                break;
                case StringArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                //
                //Length1 = obj1.GetLength();
                //Length2 = obj2.GetLength();
                //StringArr = new string[Length1 + Length2];
                //for (int i = 1; i <= Length1; i++){
                //    StringArr[i - 1] = obj1.ToStringN(i);
                //}
                //for (int i = 1; i <= Length2; i++)
                //{
                //    StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                //}
                //sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                }//switch
                break;
                case IntTypeN:
                switch (Type2N)
                {
                case DoubleTypeN:
                sum = new DataCell(obj1.GetDoubleVal() + obj2.GetDoubleVal());
                break;
                case FloatTypeN:
                //sum = new DataCell(obj1.GetFloatVal() + obj2.GetFloatVal());
                sum = new DataCell(obj1.GetFloatVal() + obj2.GetFloatVal());
                break;
                case IntTypeN:
                //sum = new DataCell(obj1.GetIntVal() + obj2.GetIntVal());
                sum = new DataCell(obj1.GetIntVal() + obj2.GetIntVal());
                break;
                case BoolTypeN:
                //sum = new DataCell(obj1.GetBoolVal() && obj2.GetBoolVal());
                sum = new DataCell(obj1.GetIntVal() + obj2.GetIntVal());
                break;
                case StringTypeN:
                //sum = new DataCell(obj1.GetIntVal() + obj2.GetIntVal());
                sum = new DataCell(obj1.GetIntVal() + obj2.GetIntVal());
                break;
                case DoubleArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i +Length1- 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(DoubleArr, Length1 + Length2);
                break;
                case FloatArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                //CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                //CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                IntArr = new int[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                IntArr[i - 1] = obj1.GetIntValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                IntArr[i + Length1 - 1] = obj2.GetIntValN(i);
                }
                sum = new DataCell(IntArr, Length1 + Length2);
                break;
                case BoolArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                IntArr = new int[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                IntArr[i - 1] = obj1.GetIntValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                IntArr[i + Length1 - 1] = obj2.GetIntValN(i);
                }
                sum = new DataCell(IntArr, Length1 + Length2);
                break;
                case StringArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                IntArr = new int[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                IntArr[i - 1] = obj1.GetIntValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                IntArr[i + Length1 - 1] = obj2.GetIntValN(i);
                }
                sum = new DataCell(IntArr, Length1 + Length2);
                //
                //Length1 = obj1.GetLength();
                //Length2 = obj2.GetLength();
                //StringArr = new string[Length1 + Length2];
                //for (int i = 1; i <= Length1; i++){
                //    StringArr[i - 1] = obj1.ToStringN(i);
                //}
                //for (int i = 1; i <= Length2; i++)
                //{
                //    StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                //}
                //sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                }//switch
                break;
                case BoolTypeN:
                switch (Type2N)
                {
                case DoubleTypeN:
                sum = new DataCell(obj1.GetBoolVal() && obj2.GetBoolVal());
                break;
                case FloatTypeN:
                //sum = new DataCell(obj1.GetFloatVal() + obj2.GetFloatVal());
                sum = new DataCell(obj1.GetBoolVal() && obj2.GetBoolVal());
                break;
                case IntTypeN:
                //sum = new DataCell(obj1.GetIntVal() + obj2.GetIntVal());
                sum = new DataCell(obj1.GetBoolVal() && obj2.GetBoolVal());
                break;
                case BoolTypeN:
                //sum = new DataCell(obj1.GetBoolVal() && obj2.GetBoolVal());
                sum = new DataCell(obj1.GetBoolVal() && obj2.GetBoolVal());
                break;
                case StringTypeN:
                //sum = new DataCell(obj1.GetIntVal() + obj2.GetIntVal());
                sum = new DataCell(obj1.GetBoolVal() && obj2.GetBoolVal());
                break;
                case DoubleArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                BoolArr = new bool[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                BoolArr[i - 1] = obj1.GetBoolValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                BoolArr[i + Length1 - 1] = obj2.GetBoolValN(i);
                }
                sum = new DataCell(BoolArr, Length1 + Length2);
                break;
                case FloatArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                BoolArr = new bool[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                BoolArr[i - 1] = obj1.GetBoolValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                BoolArr[i + Length1 - 1] = obj2.GetBoolValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                //CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                //CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                BoolArr = new bool[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                BoolArr[i - 1] = obj1.GetBoolValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                BoolArr[i + Length1 - 1] = obj2.GetBoolValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                break;
                case BoolArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                IntArr = new int[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                IntArr[i - 1] = obj1.GetIntValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                IntArr[i + Length1 - 1] = obj2.GetIntValN(i);
                }
                sum = new DataCell(IntArr, Length1 + Length2);
                break;
                case StringArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                IntArr = new int[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                IntArr[i - 1] = obj1.GetIntValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                IntArr[i + Length1 - 1] = obj2.GetIntValN(i);
                }
                sum = new DataCell(IntArr, Length1 + Length2);
                //
                //Length1 = obj1.GetLength();
                //Length2 = obj2.GetLength();
                //StringArr = new string[Length1 + Length2];
                //for (int i = 1; i <= Length1; i++){
                //    StringArr[i - 1] = obj1.ToStringN(i);
                //}
                //for (int i = 1; i <= Length2; i++)
                //{
                //    StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                //}
                //sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                }//switch
                break;
                case StringTypeN:
                switch (Type2N)
                {
                case DoubleTypeN:
                sum = new DataCell(obj1.ToString() + obj2.ToString());
                break;
                case FloatTypeN:
                sum = new DataCell(obj1.ToString() + obj2.ToString());
                break;
                case IntTypeN:
                sum = new DataCell(obj1.ToString() + obj2.ToString());
                break;
                case BoolTypeN:
                sum = new DataCell(obj1.ToString() + obj2.ToString());
                break;
                case StringTypeN:
                sum = new DataCell(obj1.ToString() + obj2.ToString());
                //CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case DoubleArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                StringArr = new string[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                StringArr[i - 1] = obj1.ToStringN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case FloatArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                StringArr = new string[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                StringArr[i - 1] = obj1.ToStringN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case IntArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                StringArr = new string[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                StringArr[i - 1] = obj1.ToStringN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case BoolArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                StringArr = new string[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                StringArr[i - 1] = obj1.ToStringN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case StringArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                StringArr = new string[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                StringArr[i - 1] = obj1.ToStringN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                }//switch
                break;
                case DoubleArrayTypeN:
                switch (Type2N)
                {
                case DoubleTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i + Length1 - 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case FloatTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i + Length1 - 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case IntTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i + Length1 - 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case BoolTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i + Length1 - 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case StringTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i + Length1 - 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case DoubleArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i + Length1 - 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case FloatArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i + Length1 - 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case IntArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i + Length1 - 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case BoolArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i + Length1 - 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case StringArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i + Length1 - 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                }//switch
                break;
                //mark5
                case FloatArrayTypeN:
                switch (Type2N)
                {
                case DoubleTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i + Length1 - 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case FloatTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                break;
                case IntTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                break;
                case BoolTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                break;
                case StringTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                break;
                case DoubleArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i + Length1 - 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case FloatArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                break;
                case IntArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                break;
                case BoolArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                break;
                case StringArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                }//switch
                break;
                case IntArrayTypeN:
                switch (Type2N)
                {
                case DoubleTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i + Length1 - 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(DoubleArr, Length1 + Length2);
                break;
                case FloatTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                break;
                case IntTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                IntArr = new int[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                IntArr[i - 1] = obj1.GetIntValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                IntArr[i + Length1 - 1] = obj2.GetIntValN(i);
                }
                sum = new DataCell(IntArr, Length1 + Length2);
                break;
                case BoolTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                IntArr = new int[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                IntArr[i - 1] = obj1.GetIntValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                IntArr[i + Length1 - 1] = obj2.GetIntValN(i);
                }
                sum = new DataCell(IntArr, Length1 + Length2);
                break;
                case StringTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                IntArr = new int[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                IntArr[i - 1] = obj1.GetIntValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                IntArr[i + Length1 - 1] = obj2.GetIntValN(i);
                }
                sum = new DataCell(IntArr, Length1 + Length2);
                break;
                case DoubleArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i + Length1 - 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(DoubleArr, Length1 + Length2);
                break;
                case FloatArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                break;
                case IntArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                IntArr = new int[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                IntArr[i - 1] = obj1.GetIntValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                IntArr[i + Length1 - 1] = obj2.GetIntValN(i);
                }
                sum = new DataCell(IntArr, Length1 + Length2);
                break;
                case BoolArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                IntArr = new int[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                IntArr[i - 1] = obj1.GetIntValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                IntArr[i + Length1 - 1] = obj2.GetIntValN(i);
                }
                sum = new DataCell(IntArr, Length1 + Length2);
                break;
                case StringArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                IntArr = new int[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                IntArr[i - 1] = obj1.GetIntValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                IntArr[i + Length1 - 1] = obj2.GetIntValN(i);
                }
                sum = new DataCell(IntArr, Length1 + Length2);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                }//switch
                break;
                case BoolArrayTypeN:
                switch (Type2N)
                {
                case DoubleTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i + Length1 - 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(DoubleArr, Length1 + Length2);
                break;
                case FloatTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                break;
                case IntTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                IntArr = new int[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                IntArr[i - 1] = obj1.GetIntValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                IntArr[i + Length1 - 1] = obj2.GetIntValN(i);
                }
                sum = new DataCell(IntArr, Length1 + Length2);
                break;
                case BoolTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                BoolArr = new bool[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                BoolArr[i - 1] = obj1.GetBoolValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                BoolArr[i + Length1 - 1] = obj2.GetBoolValN(i);
                }
                sum = new DataCell(BoolArr, Length1 + Length2);
                break;
                case StringTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                BoolArr = new bool[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                BoolArr[i - 1] = obj1.GetBoolValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                BoolArr[i + Length1 - 1] = obj2.GetBoolValN(i);
                }
                sum = new DataCell(BoolArr, Length1 + Length2);
                break;
                case DoubleArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                BoolArr = new bool[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                BoolArr[i - 1] = obj1.GetBoolValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                BoolArr[i + Length1 - 1] = obj2.GetBoolValN(i);
                }
                sum = new DataCell(BoolArr, Length1 + Length2);
                break;
                case FloatArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                BoolArr = new bool[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                BoolArr[i - 1] = obj1.GetBoolValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                BoolArr[i + Length1 - 1] = obj2.GetBoolValN(i);
                }
                sum = new DataCell(BoolArr, Length1 + Length2);
                break;
                case IntArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                BoolArr = new bool[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                BoolArr[i - 1] = obj1.GetBoolValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                BoolArr[i + Length1 - 1] = obj2.GetBoolValN(i);
                }
                sum = new DataCell(BoolArr, Length1 + Length2);
                break;
                case BoolArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                BoolArr = new bool[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                BoolArr[i - 1] = obj1.GetBoolValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                BoolArr[i + Length1 - 1] = obj2.GetBoolValN(i);
                }
                sum = new DataCell(BoolArr, Length1 + Length2);
                break;
                case StringArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                BoolArr = new bool[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                BoolArr[i - 1] = obj1.GetBoolValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                BoolArr[i + Length1 - 1] = obj2.GetBoolValN(i);
                }
                sum = new DataCell(BoolArr, Length1 + Length2);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                }//switch
                break;
                case StringArrayTypeN:
                switch (Type2N)
                {
                case DoubleTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                StringArr = new string[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                StringArr[i - 1] = obj1.ToStringN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case FloatTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                StringArr = new string[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                StringArr[i - 1] = obj1.ToStringN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case IntTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                StringArr = new string[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                StringArr[i - 1] = obj1.ToStringN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case BoolTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                StringArr = new string[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                StringArr[i - 1] = obj1.ToStringN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case StringTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                StringArr = new string[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                StringArr[i - 1] = obj1.ToStringN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case DoubleArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                StringArr = new string[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                StringArr[i - 1] = obj1.ToStringN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case FloatArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                StringArr = new string[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                StringArr[i - 1] = obj1.ToStringN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case IntArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                StringArr = new string[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                StringArr[i - 1] = obj1.ToStringN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case BoolArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                StringArr = new string[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                StringArr[i - 1] = obj1.ToStringN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case StringArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                StringArr = new string[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                StringArr[i - 1] = obj1.ToStringN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                }//switch
                break;
                case UniqueIntValKeeperTypeN:
                switch (Type2N)
                {
                case DoubleTypeN:
                //CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatTypeN:
                //CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case IntTypeN:
                //CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                //CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case StringTypeN:
                //CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case DoubleArrayTypeN:
                //CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatArrayTypeN:
                //CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case IntArrayTypeN:
                //CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolArrayTypeN:
                //CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case StringArrayTypeN:
                //CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case UniqueIntValKeeperTypeN:
                //CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                }//switch
                break;
                }//switch
                }
                else sum.Assign(obj1);
                }
                else sum.Assign(obj2);
                return sum;
            }//operator +
            //
            /* void SetNameN(string name, int N) { this.cell.SetNameN(name, N); }
             void SetName1(string name) { this.cell.SetName1(name); }
             void SetName2(string name) { this.cell.SetName2(name); }
             void SetName3(string name) { this.cell.SetName3(name); }
             void SetNames(string[] Arr, int Q){this.cell.SetNames(Arr, Q);}
             string GetNameN(int N) { return this.cell.GetNameN(N); }
             string GetName1() { return this.cell.GetName1(); }
             string GetName2() { return this.cell.GetName2(); }
             string GetName3() { return this.cell.GetName3(); }
             void GetNames(ref string[] Arr, ref int QItems){this.cell.GetNames(ref Arr, ref QItems);}
             int GetLengthOfNamesList() { return this.cell.GetLengthOfNamesList();}*/
            //
            DataCell ReturnCopy()
             {
                TDataCell* cell=NULL;
                int TypeN = this.GetTypeN(), QItems=this.GetLength(), QNames=this.GetLengthOfNamesList(), ActiveN=this.GetActiveN();
                double[] ItemsDbl=null;
                float[] ItemsFlt=null;
                int[] ItemsInt=null;
                bool[] ItemsBool=null;
                string[] ItemsStr=null;
                string[] Names=null;
                switch (TypeN)
                {
                case TableConsts.DoubleTypeN:
                cell=new DataCell(this.GetDoubleVal());
                break;
                case TableConsts.FloatTypeN:
                cell=new DataCell(this.GetFloatVal());
                break;
                case TableConsts.IntTypeN:
                cell=new DataCell(this.GetIntVal());
                break;
                case TableConsts.BoolTypeN:
                cell=new DataCell(this.GetBoolVal());
                break;
                case TableConsts.StringTypeN:
                cell=new DataCell(this.ToString());
                break;
                case TableConsts.DoubleArrayTypeN:
                this.GetDoubleArr(ref ItemsDbl, ref QItems);
                cell=new DataCell(ItemsDbl, QItems);
                break;
                case TableConsts.FloatArrayTypeN:
                this.GetFloatArr(ref ItemsFlt, ref QItems);
                cell=new DataCell(ItemsFlt, QItems);
                break;
                case TableConsts.IntArrayTypeN:
                this.GetIntArr(ref ItemsInt, ref QItems);
                cell=new DataCell(ItemsInt, QItems);
                break;
                case TableConsts.BoolArrayTypeN:
                this.GetBoolArr(ref ItemsBool, ref QItems);
                cell=new DataCell(ItemsBool, QItems);
                break;
                case TableConsts.StringArrayTypeN:
                this.ToStringArr(ref ItemsStr, ref QItems);
                cell=new DataCell(ItemsStr, QItems);
                break;
                //case TableConsts.UniqueIntValKeeperTypeN:
                //     this.GetIntArr(ref ItemsInt, ref QItems);
                //     cell=new DataCell(ItemsInt, QItems);
                //     break;
                case TableConsts.DoubleItemsFieldHeaderCellTypeN:
                this.GetDoubleArr(ref ItemsDbl, ref QItems);
                this.GetNames(ref Names, ref QNames);
                cell=new DataCell(ItemsDbl, QItems);
                break;
                case TableConsts.IntItemsFieldHeaderCellTypeN:
                this.GetIntArr(ref ItemsInt, ref QItems);
                this.GetNames(ref Names, ref QNames);
                cell = new DataCell(ItemsInt, QItems);
                break;
                case TableConsts.StringItemsFieldHeaderCellTypeN:
                this.ToStringArr(ref ItemsStr, ref QItems);
                this.GetNames(ref Names, ref QNames);
                cell = new DataCell(ItemsStr, QItems);
                break;
                }//switch
                if (TableConsts.TypeNIsCorrectArray(TypeN)) cell.SetActiveN(ActiveN);
                return *cell;
             }
//             void SetFromGridCellValueOnly(DataGridViewCell gridCell, TableReadingTypesParams TypesParams)
//             {
//                //TableHeaderRowsExistance GridHdrInUseExt, TableHeaderRowsExistance TblHdrToShowExt, TableSize QTableRowsAllExt, TableSize QTableRowsToShowExt, TableSize ErstTableRowsNsToShowExt, TableSize QRowsNamesToShowExt
//                DataGridViewComboBoxCell ComboBoxCell = null;
//                DataGridViewCheckBoxCell CheckBoxCell = null;
//                double DoubleVal;
//                int IntVal, TableCellTypeN;
//                bool BoolVal;
//                string val, cur;
//                TableCellTypeN=this.GetTypeN();
//                if (gridCell is DataGridViewComboBoxCell)
//                {
//                ComboBoxCell = (DataGridViewComboBoxCell)gridCell;
//                IntVal = 0;
//                val=ComboBoxCell.Value.ToString();
//                for(int i=1; i<=ComboBoxCell.Items.Count; i++){
//                cur=ComboBoxCell.Items[i-1].ToString();
//                if(val.Equals(cur)){
//                IntVal=i;
//                }
//                }
//                switch(TableCellTypeN){
//                case TableConsts.IntTypeN:
//                case TableConsts.StringArrayTypeN:
//                this.SetByValInt(IntVal);
//                break;
//                case TableConsts.StringTypeN:
//                this.SetByValString(val);
//                break;
//                default:
//                this.SetByValString(val);
//                break;
//                }
//                }
//                else if (gridCell is DataGridViewCheckBoxCell)
//                {
//                CheckBoxCell=(DataGridViewCheckBoxCell)gridCell;
//                if (MyLib.BoolValByDefault == true)
//                {
//                if ((bool)CheckBoxCell.Value)
//                {
//                IntVal = 1;
//                val = TableConsts.TrueWord;
//                }
//                else
//                {
//                IntVal = 2;
//                val = TableConsts.FalseWord;
//                }
//                }
//                else
//                {
//                if ((bool)CheckBoxCell.Value)
//                {
//                IntVal = 2;
//                val = TableConsts.TrueWord;
//                }
//                else
//                {
//                IntVal = 1;
//                val = TableConsts.FalseWord;
//                }
//                }
//                switch (TableCellTypeN)
//                {
//                case TableConsts.BoolTypeN:
//                this.SetByValBool((bool)CheckBoxCell.Value);
//                break;
//                case TableConsts.IntTypeN:
//                //                break;
//                case TableConsts.StringTypeN:
//                this.SetByValString(val);
//                break;
//                case TableConsts.StringArrayTypeN:
//                this.SetActiveN(IntVal);
//                break;
//                default:
//                this.SetByValBool((bool)CheckBoxCell.Value);
//                break;
//                }
//                }
//                else if (gridCell is DataGridViewTextBoxCell)
//                {
//                //NOp;
//                }
//                else
//                {
//                val = gridCell.Value.ToString();
//                this.SetByValString(val);
//                }
//             }//fn

        //}//cl DataCell
    TCellDouble::TCellDouble() { this->val = 0; }
    TCellDouble::TCellDouble(double val) { SetByValDouble(val); }
    TCellDouble::TCellDouble(float val) { SetByValFloat(val); }
    TCellDouble::TCellDouble(int val) { SetByValInt(val); }
    TCellDouble::TCellDouble(bool val) { SetByValBool(val); }
    TCellDouble::TCellDouble(QString val) { SetByValString(val); }
    //
    TCellDouble::TCellDouble(double* val, int Q) { SetByArrDouble(val, Q); }
    TCellDouble::TCellDouble(float* val, int Q) { SetByArrFloat(val, Q); }
    TCellDouble::TCellDouble(int* val, int Q) { SetByArrInt(val, Q); }
    TCellDouble::TCellDouble(bool* val, int Q) { SetByArrBool(val, Q); }
    TCellDouble::TCellDouble(QString* val, int Q) { SetByArrString(val, Q); }
    //
    //hope they will not be needed
//    TCellDouble(TCellDouble&obj){
//        this->Assign(obj);
//    }
//    //
//    TCellDouble& operator =(TCellDouble&obj){
//        this->Assign(obj);
//        return*this;
//    }
//    //
//    void Assign(TCellDouble&obj){
//        this->data=obj.data;
//    }
    int TCellDouble::GetTypeN() { return DoubleTypeN; }
    int TCellDouble::GetActiveN() { return 1;}
    void TCellDouble::SetActiveN(int N) { }
    int TCellDouble::GetLength() { return 1; }
    void TCellDouble::SetLength(int L){}
    //
    double TCellDouble::GetDoubleVal() { return val; }
    float TCellDouble::GetFloatVal() {
        float r;
        r = (float)val;
        return r;
    }
    int TCellDouble::GetIntVal()
    {
        int r;
        r =(int) round(val);
        return r;
    }
    bool TCellDouble::GetBoolVal() {
        bool r;
        if(BoolValByDefault==true){
            if (val == 0) r = false;
            else r = true;
        }else{
            if (val == 1) r = true;
            else r = false;
        }
        return r;
    }
    QString TCellDouble::ToString() {
        QString s;
        s=RealToString(val);
        s.setNum(val);
        return s;//val.ToString();
    }
    //
    double TCellDouble::GetDoubleValN(int N) { return val; }
    float TCellDouble::GetFloatValN(int N) { return (float)val; }
    int TCellDouble::GetIntValN(int N)
    {
        int r;
        r = (int)round(val);
        return r;
    }
    bool TCellDouble::GetBoolValN(int N)
    {
        bool r;
        if(BoolValByDefault==true){
            if (val == 0) r = false;
            else r = true;
        }else{
            if (val == 1) r = true;
            else r = false;
        }
        return r;
    }
    QString TCellDouble::ToStringN(int N) {
        QString s;
        //QString RealToString(double x, int Repr_IntAndFrac0_ExpAfOrderLim1_ExpAnyhow2=0,  int QAftComma=6, int OrdAfWhichExp=6, int BaseDec=10);
        s=RealToString(val);
        s.setNum(val);
        return s;
    }
    //
    void TCellDouble::SetByValDouble(double val) { this->val = (double)val; }
    void TCellDouble::SetByValFloat(float val) { this->val = (double)val; }
    void TCellDouble::SetByValInt(int val) { this->val = (double)val; }
    void TCellDouble::SetByValBool(bool val)
    {
        int i;
        i = BoolToInt(val);
        this->val=(double)i;
    }
    void TCellDouble::SetByValString(QString val) {
        //this->val = Convert.ToDouble(val);
        //this->val = NumberParse.StrToFloat(val);
        this->val=StrToReal(val);
        this->val =val.toDouble();
    } //hin S' ne abl convert!!
    //
    void TCellDouble::SetByValDoubleN(double val, int N) { SetByValDouble(val); }
    void TCellDouble::SetByValFloatN(float val, int N) { SetByValFloat(val); }
    void TCellDouble::SetByValIntN(int val, int N) { SetByValInt(val); }
    void TCellDouble::SetByValBoolN(bool val, int N) { SetByValBool(val); }
    void TCellDouble::SetByValStringN(QString val, int N) { SetByValString(val); }
    //
    void TCellDouble::SetVal(double val) { this->val = (double)val; }
    void TCellDouble::SetVal(int val) { this->val = (double)val; }
    void TCellDouble::SetVal(bool val)
    {
        int i;
        i = BoolToInt(val);
        this->val = (double)i;
    }
    void TCellDouble::SetVal(QString val) {
        //this->val = Convert.ToDouble(val);
        this->val=StrToReal(val);
        this->val=val.toDouble();
    }
    //
    void TCellDouble::SetValN(double val, int N) { SetVal(val); }
    void TCellDouble::SetValN(int val, int N) { SetVal(val); }
    void TCellDouble::SetValN(bool val, int N) { SetVal(val); }
    void TCellDouble::SetValN(QString val, int N) { SetVal(val); }
    //
    void TCellDouble::SetByArrDouble(double* val, int Q){
       if(val!=NULL)SetByValDouble(val[1-1]);
       else SetByValDouble(0);
    }
    void TCellDouble::SetByArrFloat(float* val, int Q)
    {
        if (val != NULL) SetByValFloat(val[1 - 1]);
        else SetByValFloat(0);
    }
    void TCellDouble::SetByArrInt(int* val, int Q)
    {
        if (val != NULL) SetByValInt(val[1 - 1]);
        else SetByValInt(0);
    }
    void TCellDouble::SetByArrBool(bool* val, int Q)
    {
        if (val != NULL) SetByValBool(val[1 - 1]);
        else SetByValBool(BoolValByDefault);
    }
    void TCellDouble::SetByArrString(QString* val, int Q)
    {
        if (val != NULL) SetByValString(val[1 - 1]);
        else SetByValString("");
    }
    //
    void TCellDouble::SetByArr(double* val, int Q){
        if(val!=NULL)SetByValDouble(val[1-1]);
        else SetByValDouble(0);
    }
    void TCellDouble::SetByArr(int* val, int Q)
    {
        if (val != NULL) SetByValInt(val[1 - 1]);
        else SetByValInt(0);
    }
    void TCellDouble::SetByArr(bool* val, int Q)
    {
        if (val != NULL) SetByValBool(val[1 - 1]);
        else SetByValBool(BoolValByDefault);
    }
    void TCellDouble::SetByArr(QString* val, int Q)
    {
        if (val != NULL) SetByValString(val[1 - 1]);
        else SetByValString("");
    }
    //
    void TCellDouble::AddOrInsDoubleVal(double val, int N)
    {
        this->val = val;
    }
    void TCellDouble::AddOrInsFloatVal(float val, int N)
    {
        this->val = (double)val;
    }
    void TCellDouble::AddOrInsIntVal(int val, int N)
    {
        this->val = (double)val;
    }
    void TCellDouble::AddOrInsBoolVal(bool val, int N)
    {
        this->val = (double) BoolToInt(val);
    }
    void TCellDouble::AddOrInsStringVal(QString val, int N)
    {
        this->val=StrToReal(val, NULL, 10);
        //this->val.SetNum(val);// Convert.ToDouble(val);
    }
    //
    void TCellDouble::DelValN(int N) { }
    //
    void TCellDouble::GetDoubleArr(double*&Arr,  int&QItems) {
        QItems=1;
        Arr = new double[QItems];
        Arr[1 - 1] = GetDoubleVal();
    }
    void TCellDouble::GetFloatArr( float*&Arr, int&QItems) {
        QItems = 1;
        Arr = new float[QItems];
        Arr[1 - 1] = GetFloatVal();
    }
    void TCellDouble::GetIntArr( int*&Arr,  int&QItems) {
        QItems = 1;
        Arr = new int[QItems];
        Arr[1 - 1] = GetIntVal();
    }
    void TCellDouble::GetBoolArr( bool*&Arr,  int&QItems) {
        QItems = 1;
        Arr = new bool[QItems];
        Arr[1 - 1] = GetBoolVal();
    }
    void TCellDouble::ToStringArr(QString*&Arr, int&QItems) {
        QItems = 1;
        if(Arr!=NULL)delete[]Arr;
        Arr = new QString[QItems];
        Arr[1 - 1] = ToString();
    }
    //
    void TCellDouble::SetNameN(QString name, int N) { SetByValStringN(name, N);  }
    void TCellDouble::SetName1(QString name) { SetByValStringN(name, 1); }
    void TCellDouble::SetName2(QString name) { SetByValStringN(name, 2); }
    void TCellDouble::SetName3(QString name) { SetByValStringN(name, 3); }
    void TCellDouble::SetNames(QString* Arr, int Q) { SetByArrString(Arr, Q); }
    QString TCellDouble::GetNameN(int N) { return ToStringN(N); }
    QString TCellDouble::GetName1() { return ToStringN(1); }
    QString TCellDouble::GetName2() { return ToStringN(2); }
    QString TCellDouble::GetName3() { return ToStringN(3); }
    void TCellDouble::GetNames(QString*&Arr, int&QItems) { ToStringArr(Arr, QItems); }
    int TCellDouble::GetLengthOfNamesList() { return 1; }
    //
//     override object Clone(){
//        return new TCellDouble(this->GetDoubleVal());
//    }
//};//cl


    //class TCellFloat: TDataCell
    //{
    //    double val;
    //    :
        TCellFloat::TCellFloat() { this->val = 0; }
        TCellFloat::TCellFloat(double val) { SetByValDouble(val); }
        TCellFloat::TCellFloat(float val) { SetByValFloat(val); }
        TCellFloat::TCellFloat(int val) { SetByValInt(val); }
        TCellFloat::TCellFloat(bool val) { SetByValBool(val); }
        TCellFloat::TCellFloat(QString val) { SetByValString(val); }
        //
        TCellFloat::TCellFloat(double* val, int Q) { SetByArrDouble(val, Q); }
        TCellFloat::TCellFloat(float* val, int Q) { SetByArrFloat(val, Q); }
        TCellFloat::TCellFloat(int* val, int Q) { SetByArrInt(val, Q); }
        TCellFloat::TCellFloat(bool* val, int Q) { SetByArrBool(val, Q); }
        TCellFloat::TCellFloat(QString* val, int Q) { SetByArrString(val, Q); }
        //
        //hope they will not be needed
    //    TCellFloat(TCellFloat&obj){
    //        this->Assign(obj);
    //    }
    //    //
    //    TCellFloat& operator =(TCellFloat&obj){
    //        this->Assign(obj);
    //        return*this;
    //    }
    //    //
    //    void Assign(TCellFloat&obj){
    //        this->data=obj.data;
    //    }
        int TCellFloat::GetTypeN() { return FloatTypeN; }
        int TCellFloat::GetActiveN() { return 1;}
        void TCellFloat::SetActiveN(int N) { }
        int TCellFloat::GetLength() { return 1; }
        void TCellFloat::SetLength(int L){}
        //
        double TCellFloat::GetDoubleVal(){
            double r;
            r = (double)val;
            return r;
        }
        float TCellFloat::GetFloatVal() {
//            float r;
//            r = (float)val;
            return val;
//            return r;
        }
        int TCellFloat::GetIntVal()
        {
            int r;
            r =(int) round(val);
            return r;
        }
        bool TCellFloat::GetBoolVal() {
            bool r;
            if(BoolValByDefault==true){
                if (val == 0) r = false;
                else r = true;
            }else{
                if (val == 1) r = true;
                else r = false;
            }
            return r;
        }
        QString TCellFloat::ToString() {
            QString s;
            s=RealToString(val);
            s.setNum(val);
            return s;//val.ToString();
        }
        //
        double TCellFloat::GetDoubleValN(int N) { return (double)val; }
        float TCellFloat::GetFloatValN(int N) { return val; }
        int TCellFloat::GetIntValN(int N)
        {
            int r;
            r = (int)round(val);
            return r;
        }
        bool TCellFloat::GetBoolValN(int N)
        {
            bool r;
            if(BoolValByDefault==true){
                if (val == 0) r = false;
                else r = true;
            }else{
                if (val == 1) r = true;
                else r = false;
            }
            return r;
        }
        QString TCellFloat::ToStringN(int N) {
            QString s;
            //QString RealToString(double x, int Repr_IntAndFrac0_ExpAfOrderLim1_ExpAnyhow2=0,  int QAftComma=6, int OrdAfWhichExp=6, int BaseDec=10);
            s=RealToString(val);
            s.setNum(val);
            return s;
        }
        //
        void TCellFloat::SetByValDouble(double val) { this->val = (float)val; }
        void TCellFloat::SetByValFloat(float val) { this->val = (float)val; }
        void TCellFloat::SetByValInt(int val) { this->val = (float)val; }
        void TCellFloat::SetByValBool(bool val)
        {
            int i;
            i = BoolToInt(val);
            this->val=(float)i;
        }
        void TCellFloat::SetByValString(QString val) {
            //this->val = Convert.ToDouble(val);
            //this->val = NumberParse.StrToFloat(val);
            this->val=(float)StrToReal(val);
            this->val =val.toFloat();
        } //hin S' ne abl convert!!
        //
        void TCellFloat::SetByValDoubleN(double val, int N) { SetByValDouble(val); }
        void TCellFloat::SetByValFloatN(float val, int N) { SetByValFloat(val); }
        void TCellFloat::SetByValIntN(int val, int N) { SetByValInt(val); }
        void TCellFloat::SetByValBoolN(bool val, int N) { SetByValBool(val); }
        void TCellFloat::SetByValStringN(QString val, int N) { SetByValString(val); }
        //
        void TCellFloat::SetVal(double val) { this->val = (float)val; }
        void TCellFloat::SetVal(int val) { this->val = (float)val; }
        void TCellFloat::SetVal(bool val)
        {
            int i;
            i = BoolToInt(val);
            this->val = (double)i;
        }
        void TCellFloat::SetVal(QString val) {
            //this->val = Convert.ToDouble(val);
            this->val=(float)StrToReal(val);
            this->val=val.toFloat();
        }
        //
        void TCellFloat::SetValN(double val, int N) { SetVal(val); }
        void TCellFloat::SetValN(int val, int N) { SetVal(val); }
        void TCellFloat::SetValN(bool val, int N) { SetVal(val); }
        void TCellFloat::SetValN(QString val, int N) { SetVal(val); }
        //
        void TCellFloat::SetByArrDouble(double* val, int Q){
           if(val!=NULL)SetByValDouble(val[1-1]);
           else SetByValDouble(0);
        }
        void TCellFloat::SetByArrFloat(float* val, int Q)
        {
            if (val != NULL) SetByValFloat(val[1 - 1]);
            else SetByValFloat(0);
        }
        void TCellFloat::SetByArrInt(int* val, int Q)
        {
            if (val != NULL) SetByValInt(val[1 - 1]);
            else SetByValInt(0);
        }
        void TCellFloat::SetByArrBool(bool* val, int Q)
        {
            if (val != NULL) SetByValBool(val[1 - 1]);
            else SetByValBool(BoolValByDefault);
        }
        void TCellFloat::SetByArrString(QString* val, int Q)
        {
            if (val != NULL) SetByValString(val[1 - 1]);
            else SetByValString("");
        }
        //
        void TCellFloat::SetByArr(double* val, int Q){
            if(val!=NULL)SetByValDouble(val[1-1]);
            else SetByValDouble(0);
        }
        void TCellFloat::SetByArr(int* val, int Q)
        {
            if (val != NULL) SetByValInt(val[1 - 1]);
            else SetByValInt(0);
        }
        void TCellFloat::SetByArr(bool* val, int Q)
        {
            if (val != NULL) SetByValBool(val[1 - 1]);
            else SetByValBool(BoolValByDefault);
        }
        void TCellFloat::SetByArr(QString* val, int Q)
        {
            if (val != NULL) SetByValString(val[1 - 1]);
            else SetByValString("");
        }
        //
        void TCellFloat::AddOrInsDoubleVal(double val, int N)
        {
            this->val = (float)val;
        }
        void TCellFloat::AddOrInsFloatVal(float val, int N)
        {
            this->val = (float)val;
        }
        void TCellFloat::AddOrInsIntVal(int val, int N)
        {
            this->val = (float)val;
        }
        void TCellFloat::AddOrInsBoolVal(bool val, int N)
        {
            this->val = (float) BoolToInt(val);
        }
        void TCellFloat::AddOrInsStringVal(QString val, int N)
        {
            this->val=StrToReal(val, NULL, 10);
            //this->val.SetNum(val);// Convert.ToDouble(val);
        }
        //
        void TCellFloat::DelValN(int N) { }
        //
        void TCellFloat::GetDoubleArr(double*&Arr,  int&QItems) {
            QItems=1;
            Arr = new double[QItems];
            Arr[1 - 1] = GetDoubleVal();
        }
        void TCellFloat::GetFloatArr( float*&Arr, int&QItems) {
            QItems = 1;
            Arr = new float[QItems];
            Arr[1 - 1] = GetFloatVal();
        }
        void TCellFloat::GetIntArr( int*&Arr,  int&QItems) {
            QItems = 1;
            Arr = new int[QItems];
            Arr[1 - 1] = GetIntVal();
        }
        void TCellFloat::GetBoolArr( bool*&Arr,  int&QItems) {
            QItems = 1;
            Arr = new bool[QItems];
            Arr[1 - 1] = GetBoolVal();
        }
        void TCellFloat::ToStringArr(QString*&Arr, int&QItems) {
            QItems = 1;
            if(Arr!=NULL)delete[]Arr;
            Arr = new QString[QItems];
            Arr[1 - 1] = ToString();
        }
        //
        void TCellFloat::SetNameN(QString name, int N) { SetByValStringN(name, N);  }
        void TCellFloat::SetName1(QString name) { SetByValStringN(name, 1); }
        void TCellFloat::SetName2(QString name) { SetByValStringN(name, 2); }
        void TCellFloat::SetName3(QString name) { SetByValStringN(name, 3); }
        void TCellFloat::SetNames(QString* Arr, int Q) { SetByArrString(Arr, Q); }
        QString TCellFloat::GetNameN(int N) { return ToStringN(N); }
        QString TCellFloat::GetName1() { return ToStringN(1); }
        QString TCellFloat::GetName2() { return ToStringN(2); }
        QString TCellFloat::GetName3() { return ToStringN(3); }
        void TCellFloat::GetNames(QString*&Arr, int&QItems) { ToStringArr(Arr, QItems); }
        int TCellFloat::GetLengthOfNamesList() { return 1; }
        //
    //     override object Clone(){
    //        return new TCellDouble(this->GetDoubleVal());
    //    }
    //};//cl  //TCellFloat



//class TCellInt: TDataCell
   //{
   //    double val;
   //    :
   TCellInt::TCellInt() { this->val = 0; }
   TCellInt::TCellInt(double val) { SetByValDouble(val); }
   TCellInt::TCellInt(float val) { SetByValFloat(val); }
   TCellInt::TCellInt(int val) { SetByValInt(val); }
   TCellInt::TCellInt(bool val) { SetByValBool(val); }
   TCellInt::TCellInt(QString val) { SetByValString(val); }
   //
   TCellInt::TCellInt(double* val, int Q) { SetByArrDouble(val, Q); }
   TCellInt::TCellInt(float* val, int Q) { SetByArrFloat(val, Q); }
   TCellInt::TCellInt(int* val, int Q) { SetByArrInt(val, Q); }
   TCellInt::TCellInt(bool* val, int Q) { SetByArrBool(val, Q); }
   TCellInt::TCellInt(QString* val, int Q) { SetByArrString(val, Q); }
   //
                //hope they will not be needed
                //    TCellInt(TCellInt&obj){
                //        this->Assign(obj);
                //    }
                //    //
                //    TCellInt& operator =(TCellInt&obj){
                //        this->Assign(obj);
                //        return*this;
                //    }
                //    //
                //    void Assign(TCellInt&obj){
                //        this->data=obj.data;
                //    }
    int TCellInt::GetTypeN() { return IntTypeN; }
    int TCellInt::GetActiveN() { return 1;}
    void TCellInt::SetActiveN(int N) { }
    int TCellInt::GetLength() { return 1; }
    void TCellInt::SetLength(int L){}
    //
    double TCellInt::GetDoubleVal(){
        double r;
        r = (double)val;
        return r;
    }
    float TCellInt::GetFloatVal() {
        float r;
        r = (float)val;
        return r;
    }
    int TCellInt::GetIntVal()
    {
        //int r;
        //r =(int) round(val);
        //return r;
        return val;
    }
    bool TCellInt::GetBoolVal() {
        bool r;
        if(BoolValByDefault==true){
            if (val == 0) r = false;
            else r = true;
        }else{
            if (val == 1) r = true;
            else r = false;
        }
        return r;
    }
    QString TCellInt::ToString() {
        QString s;
        s=RealToString(val);
        s.setNum(val);
        return s;//val.ToString();
    }
    //
    double TCellInt::GetDoubleValN(int N) { return (double)val; }
    float TCellInt::GetFloatValN(int N) { return (float)val; }
    int TCellInt::GetIntValN(int N)
    {
         //int r;
         //r = (int)round(val);
         //return r;
         return val;
    }
    bool TCellInt::GetBoolValN(int N)
    {
        bool r;
        if(BoolValByDefault==true){
            if (val == 0) r = false;
            else r = true;
        }else{
            if (val == 1) r = true;
            else r = false;
        }
        return r;
    }
    QString TCellInt::ToStringN(int N) {
        QString s;
        //QString RealToString(double x, int Repr_IntAndFrac0_ExpAfOrderLim1_ExpAnyhow2=0,  int QAftComma=6, int OrdAfWhichExp=6, int BaseDec=10);
        s=IntToStringSimple(BoolToInt(val)); // s=RealToString(val);
        s.setNum(BoolToInt(val));
        return s;
    }
    //
    void TCellInt::SetByValDouble(double val) { this->val = (int)round(val); }
    void TCellInt::SetByValFloat(float val) { this->val = (int)round(val);  }
    void TCellInt::SetByValInt(int val) { this->val = val; }
    void TCellInt::SetByValBool(bool val)
    {
         this->val=BoolToInt(val);
         // this->val=(double)i;
   }
   void TCellInt::SetByValString(QString val) {
       //this->val = Convert.ToDouble(val);
       //this->val = NumberParse.StrToFloat(val);
       this->val=(int)StrToInt(val);
       this->val =val.toInt();
   } //hin S' ne abl convert!!
   //
   void TCellInt::SetByValDoubleN(double val, int N) { SetByValDouble(val); }
   void TCellInt::SetByValFloatN(float val, int N) { SetByValFloat(val); }
   void TCellInt::SetByValIntN(int val, int N) { SetByValInt(val); }
   void TCellInt::SetByValBoolN(bool val, int N) { SetByValBool(val); }
   void TCellInt::SetByValStringN(QString val, int N) { SetByValString(val); }
   //
   void TCellInt::SetVal(double val) {  this->val = (int)round(val); }
   void TCellInt::SetVal(int val) { this->val = val; }
   void TCellInt::SetVal(bool val)
   {
       this->val = BoolToInt(val);
   }
   void TCellInt::SetVal(QString val) {
       //this->val = Convert.ToDouble(val);
       this->val=StrToInt(val);
       this->val=val.toInt();
   }
   //
   void TCellInt::SetValN(double val, int N) { SetVal(val); }
   void TCellInt::SetValN(int val, int N) { SetVal(val); }
   void TCellInt::SetValN(bool val, int N) { SetVal(val); }
   void TCellInt::SetValN(QString val, int N) { SetVal(val); }
   //
   void TCellInt::SetByArrDouble(double* val, int Q){
       if(val!=NULL)SetByValDouble(val[1-1]);
       else SetByValDouble(0);
   }
   void TCellInt::SetByArrFloat(float* val, int Q)
   {
       if (val != NULL) SetByValFloat(val[1 - 1]);
       else SetByValFloat(0);
   }
   void TCellInt::SetByArrInt(int* val, int Q)
   {
       if (val != NULL) SetByValInt(val[1 - 1]);
       else SetByValInt(0);
   }
   void TCellInt::SetByArrBool(bool* val, int Q)
   {
       if (val != NULL) SetByValBool(val[1 - 1]);
       else SetByValBool(BoolValByDefault);
   }
   void TCellInt::SetByArrString(QString* val, int Q)
   {
       if (val != NULL) SetByValString(val[1 - 1]);
       else SetByValString("");
   }
   //
   void TCellInt::SetByArr(double* val, int Q){
       if(val!=NULL)SetByValDouble(val[1-1]);
       else SetByValDouble(0);
   }
   void TCellInt::SetByArr(int* val, int Q)
   {
       if (val != NULL) SetByValInt(val[1 - 1]);
       else SetByValInt(0);
   }
   void TCellInt::SetByArr(bool* val, int Q)
   {
       if (val != NULL) SetByValBool(val[1 - 1]);
       else SetByValBool(BoolValByDefault);
   }
   void TCellInt::SetByArr(QString* val, int Q)
   {
       if (val != NULL) SetByValString(val[1 - 1]);
       else SetByValString("");
   }
   //
   void TCellInt::AddOrInsDoubleVal(double val, int N)
   {
       this->val = (int)round(val);
   }
   void TCellInt::AddOrInsFloatVal(float val, int N)
   {
       this->val = (int)round(val);
   }
   void TCellInt::AddOrInsIntVal(int val, int N)
   {
       //this->val = (float)val;
       this->val = val;
   }
   void TCellInt::AddOrInsBoolVal(bool val, int N)
   {
       int r;
       r=BoolToInt(val);
       this->val = r;
   }
   void TCellInt::AddOrInsStringVal(QString val, int N)
   {
       this->val=StrToInt(val, NULL, 10);
       //this->val.SetNum(val);// Convert.ToDouble(val);
   }
   //
   void TCellInt::DelValN(int N) { }
   //
   void TCellInt::GetDoubleArr(double*&Arr,  int&QItems) {
       QItems=1;
       Arr = new double[QItems];
       Arr[1 - 1] = GetDoubleVal();
   }
   void TCellInt::GetFloatArr( float*&Arr, int&QItems) {
       QItems = 1;
       Arr = new float[QItems];
       Arr[1 - 1] = GetFloatVal();
   }
   void TCellInt::GetIntArr( int*&Arr,  int&QItems) {
       QItems = 1;
       Arr = new int[QItems];
       Arr[1 - 1] = GetIntVal();
   }
   void TCellInt::GetBoolArr( bool*&Arr,  int&QItems) {
       QItems = 1;
       Arr = new bool[QItems];
       Arr[1 - 1] = GetBoolVal();
   }
   void TCellInt::ToStringArr(QString*&Arr, int&QItems) {
       QItems = 1;
       if(Arr!=NULL)delete[]Arr;
       Arr = new QString[QItems];
       Arr[1 - 1] = ToString();
   }
   //
   void TCellInt::SetNameN(QString name, int N) { SetByValStringN(name, N);  }
   void TCellInt::SetName1(QString name) { SetByValStringN(name, 1); }
   void TCellInt::SetName2(QString name) { SetByValStringN(name, 2); }
   void TCellInt::SetName3(QString name) { SetByValStringN(name, 3); }
   void TCellInt::SetNames(QString* Arr, int Q) { SetByArrString(Arr, Q); }
   QString TCellInt::GetNameN(int N) { return ToStringN(N); }
   QString TCellInt::GetName1() { return ToStringN(1); }
   QString TCellInt::GetName2() { return ToStringN(2); }
   QString TCellInt::GetName3() { return ToStringN(3); }
   void TCellInt::GetNames(QString*&Arr, int&QItems) { ToStringArr(Arr, QItems); }
   int TCellInt::GetLengthOfNamesList() { return 1; }
   //
                //     override object Clone(){
                //        return new TCellDouble(this->GetDoubleVal());
                //    }
//};//cl  //TCellInt




   //class TCellBool: TDataCell
      //{
      //    double val;
      //    :
      TCellBool::TCellBool() { this->val = BoolValByDefault; }
      TCellBool::TCellBool(double val) { SetByValDouble(val); }
      TCellBool::TCellBool(float val) { SetByValFloat(val); }
      TCellBool::TCellBool(int val) { SetByValInt(val); }
      TCellBool::TCellBool(bool val) { SetByValBool(val); }
      TCellBool::TCellBool(QString val) { SetByValString(val); }
      //
      TCellBool::TCellBool(double* val, int Q) { SetByArrDouble(val, Q); }
      TCellBool::TCellBool(float* val, int Q) { SetByArrFloat(val, Q); }
      TCellBool::TCellBool(int* val, int Q) { SetByArrInt(val, Q); }
      TCellBool::TCellBool(bool* val, int Q) { SetByArrBool(val, Q); }
      TCellBool::TCellBool(QString* val, int Q) { SetByArrString(val, Q); }
      //
                //hope they will not be needed
                //    TCellBool(TCellBool&obj){
                //        this->Assign(obj);
                //    }
                //    //
                //    TCellBool& operator =(TCellBool&obj){
                //        this->Assign(obj);
                //        return*this;
                //    }
                //    //
                //    void Assign(TCellBool&obj){
                //        this->data=obj.data;
                //    }
       int TCellBool::GetTypeN() { return BoolTypeN; }
       int TCellBool::GetActiveN() { return 1;}
       void TCellBool::SetActiveN(int N) { }
       int TCellBool::GetLength() { return 1; }
       void TCellBool::SetLength(int L){}
       //
       double TCellBool::GetDoubleVal(){
           double r;
           int z;
           z=BoolToInt(this->val);
           r = (double)z;
           return r;
       }
       float TCellBool::GetFloatVal() {
           float r;
           r = (float)BoolToInt(this->val);
           return r;
       }
       int TCellBool::GetIntVal()
       {
           //int r;
           //r =(int) round(val);
           //return r;
           return BoolToInt(this->val);;
       }
       bool TCellBool::GetBoolVal() {
           //bool r;
           //if(BoolValByDefault==true){
           //    if (val == 0) r = false;
           //    else r = true;
           //}else{
           //    if (val == 1) r = true;
           //    else r = false;
           //}
           //return r;
           return val;
       }
       QString TCellBool::ToString() {
           QString s;
           s=IntToStringSimple(BoolToInt(val)); // s=RealToString(val);
           s.setNum(BoolToInt(val));
           return s;//val.ToString();
       }
       //
       double TCellBool::GetDoubleValN(int N) { return (double)BoolToInt(val); }
       float TCellBool::GetFloatValN(int N) { return (float)BoolToInt(val); }
       int TCellBool::GetIntValN(int N)
       {
            //int r;
            //r = (int)round(val);
            //return r;
            return BoolToInt(val);
       }
       bool TCellBool::GetBoolValN(int N)
       {
           //bool r;
           //if(BoolValByDefault==true){
           //    if (val == 0) r = false;
           //    else r = true;
           //}else{
           //    if (val == 1) r = true;
           //    else r = false;
           //}
           //return r;
           return val;
       }
       QString TCellBool::ToStringN(int N) {
           QString s;
           //QString RealToString(double x, int Repr_IntAndFrac0_ExpAfOrderLim1_ExpAnyhow2=0,  int QAftComma=6, int OrdAfWhichExp=6, int BaseDec=10);
           s=RealToString(val);
           s.setNum(val);
           return s;
       }
       //
       void TCellBool::SetByValDouble(double val) { this->val = IntToBool((int)round(val)); }
       void TCellBool::SetByValFloat(float val) { this->val = IntToBool((int)round(val)); }
       void TCellBool::SetByValInt(int val) { this->val = IntToBool(val); }
       void TCellBool::SetByValBool(bool val)
       {
            //int i;
            //i = BoolToInt(val);
            //this->val=i;
            // this->val=(double)i;
            this->val=val;
      }
      void TCellBool::SetByValString(QString val) {
          //this->val = Convert.ToDouble(val);
          //this->val = NumberParse.StrToFloat(val);
          this->val=IntToBool(StrToInt(val));
          this->val =IntToBool(val.toInt());
      } //hin S' ne abl convert!!
      //
      void TCellBool::SetByValDoubleN(double val, int N) { SetByValDouble(val); }
      void TCellBool::SetByValFloatN(float val, int N) { SetByValFloat(val); }
      void TCellBool::SetByValIntN(int val, int N) { SetByValInt(val); }
      void TCellBool::SetByValBoolN(bool val, int N) { SetByValBool(val); }
      void TCellBool::SetByValStringN(QString val, int N) { SetByValString(val); }
      //
      void TCellBool::SetVal(double val) { this->val = IntToBool((int)round(val));}
      void TCellBool::SetVal(int val) {this->val = IntToBool(val); }
      void TCellBool::SetVal(bool val)
      {
          //int i;
          //i = BoolToInt(val);
          //this->val=i;
          // this->val=(double)i;
          this->val=val;
      }
      void TCellBool::SetVal(QString val) {
          //this->val = Convert.ToDouble(val);
          this->val=IntToBool(StrToInt(val));
          this->val==IntToBool(val.toInt());
      }
      //
      void TCellBool::SetValN(double val, int N) { SetVal(val); }
      void TCellBool::SetValN(int val, int N) { SetVal(val); }
      void TCellBool::SetValN(bool val, int N) { SetVal(val); }
      void TCellBool::SetValN(QString val, int N) { SetVal(val); }
      //
      void TCellBool::SetByArrDouble(double* val, int Q){
          if(val!=NULL)SetByValDouble(val[1-1]);
          else SetByValDouble(0);
      }
      void TCellBool::SetByArrFloat(float* val, int Q)
      {
          if (val != NULL) SetByValFloat(val[1 - 1]);
          else SetByValFloat(0);
      }
      void TCellBool::SetByArrInt(int* val, int Q)
      {
          if (val != NULL) SetByValInt(val[1 - 1]);
          else SetByValInt(0);
      }
      void TCellBool::SetByArrBool(bool* val, int Q)
      {
          if (val != NULL) SetByValBool(val[1 - 1]);
          else SetByValBool(BoolValByDefault);
      }
      void TCellBool::SetByArrString(QString* val, int Q)
      {
          if (val != NULL) SetByValString(val[1 - 1]);
          else SetByValString("");
      }
      //
      void TCellBool::SetByArr(double* val, int Q){
          if(val!=NULL)SetByValDouble(val[1-1]);
          else SetByValDouble(0);
      }
      void TCellBool::SetByArr(int* val, int Q)
      {
          if (val != NULL) SetByValInt(val[1 - 1]);
          else SetByValInt(0);
      }
      void TCellBool::SetByArr(bool* val, int Q)
      {
          if (val != NULL) SetByValBool(val[1 - 1]);
          else SetByValBool(BoolValByDefault);
      }
      void TCellBool::SetByArr(QString* val, int Q)
      {
          if (val != NULL) SetByValString(val[1 - 1]);
          else SetByValString("");
      }
      //
      void TCellBool::AddOrInsDoubleVal(double val, int N)
      {
          this->val = IntToBool((int)round(val));
      }
      void TCellBool::AddOrInsFloatVal(float val, int N)
      {
          this->val = IntToBool((int)round(val));
      }
      void TCellBool::AddOrInsIntVal(int val, int N)
      {
          //this->val = (float)val;
          this->val = IntToBool(val);
      }
      void TCellBool::AddOrInsBoolVal(bool val, int N)
      {
          //int r;
          //r=BoolToInt(val);
          //this->val = r;
          this->val = val;
      }
      void TCellBool::AddOrInsStringVal(QString val, int N)
      {
          this->val=IntToBool(StrToInt(val, NULL, 10));
          //this->val.SetNum(val);// Convert.ToDouble(val);
      }
      //
      void TCellBool::DelValN(int N) { }
      //
      void TCellBool::GetDoubleArr(double*&Arr,  int&QItems) {
          QItems=1;
          Arr = new double[QItems];
          Arr[1 - 1] = GetDoubleVal();
      }
      void TCellBool::GetFloatArr( float*&Arr, int&QItems) {
          QItems = 1;
          Arr = new float[QItems];
          Arr[1 - 1] = GetFloatVal();
      }
      void TCellBool::GetIntArr( int*&Arr,  int&QItems) {
          QItems = 1;
          Arr = new int[QItems];
          Arr[1 - 1] = GetIntVal();
      }
      void TCellBool::GetBoolArr( bool*&Arr,  int&QItems) {
          QItems = 1;
          Arr = new bool[QItems];
          Arr[1 - 1] = GetBoolVal();
      }
      void TCellBool::ToStringArr(QString*&Arr, int&QItems) {
          QItems = 1;
          if(Arr!=NULL)delete[]Arr;
          Arr = new QString[QItems];
          Arr[1 - 1] = ToString();
      }
      //
      void TCellBool::SetNameN(QString name, int N) { SetByValStringN(name, N);  }
      void TCellBool::SetName1(QString name) { SetByValStringN(name, 1); }
      void TCellBool::SetName2(QString name) { SetByValStringN(name, 2); }
      void TCellBool::SetName3(QString name) { SetByValStringN(name, 3); }
      void TCellBool::SetNames(QString* Arr, int Q) { SetByArrString(Arr, Q); }
      QString TCellBool::GetNameN(int N) { return ToStringN(N); }
      QString TCellBool::GetName1() { return ToStringN(1); }
      QString TCellBool::GetName2() { return ToStringN(2); }
      QString TCellBool::GetName3() { return ToStringN(3); }
      void TCellBool::GetNames(QString*&Arr, int&QItems) { ToStringArr(Arr, QItems); }
      int TCellBool::GetLengthOfNamesList() { return 1; }
      //
                //     override object Clone(){
                //        return new TCellDouble(this->GetDoubleVal());
                //    }
   //};//cl  //TCellBool



      //class TCellString: TDataCell
         //{
         //    double val;
         //    :
         TCellString::TCellString() { this->val = ""; }
         TCellString::TCellString(double val) { SetByValDouble(val); }
         TCellString::TCellString(float val) { SetByValFloat(val); }
         TCellString::TCellString(int val) { SetByValInt(val); }
         TCellString::TCellString(bool val) { SetByValBool(val); }
         TCellString::TCellString(QString val) { SetByValString(val); }
         //
         TCellString::TCellString(double* val, int Q) { SetByArrDouble(val, Q); }
         TCellString::TCellString(float* val, int Q) { SetByArrFloat(val, Q); }
         TCellString::TCellString(int* val, int Q) { SetByArrInt(val, Q); }
         TCellString::TCellString(bool* val, int Q) { SetByArrBool(val, Q); }
         TCellString::TCellString(QString* val, int Q) { SetByArrString(val, Q); }
         //
                //hope they will not be needed
                //    TCellString(TCellString&obj){
                //        this->Assign(obj);
                //    }
                //    //
                //    TCellString& operator =(TCellString&obj){
                //        this->Assign(obj);
                //        return*this;
                //    }
                //    //
                //    void Assign(TCellString&obj){
                //        this->data=obj.data;
                //    }
          int TCellString::GetTypeN() { return StringTypeN; }
          int TCellString::GetActiveN() { return 1;}
          void TCellString::SetActiveN(int N) { }
          int TCellString::GetLength() { return 1; }
          void TCellString::SetLength(int L){}
          //
          double TCellString::GetDoubleVal(){
              double r;
              r=StrToReal(val, NULL);
              r=val.toDouble();
              return r;
          }
          float TCellString::GetFloatVal() {
              float r;
              r=StrToReal(val, NULL);
              r=val.toFloat();
              return r;
          }
          int TCellString::GetIntVal()
          {
              int r;
              r=StrToInt(val, NULL);
              r=val.toInt();
              return r;
          }
          bool TCellString::GetBoolVal() {
              int i=GetIntVal();
              return IntToBool(i);
          }
          QString TCellString::ToString() {
              //QString s;
              //s=IntToString(BoolToInt(val)); // s=RealToString(val);
              //s.setNum(BoolToInt(val));
              //return s;//val.ToString();
              return val;
          }
          //
          double TCellString::GetDoubleValN(int N) { return GetDoubleVal(); }
          float TCellString::GetFloatValN(int N) { return GetFloatVal();; }
          int TCellString::GetIntValN(int N) { return GetIntVal(); }
          bool TCellString::GetBoolValN(int N) { return GetBoolVal();}

          QString TCellString::ToStringN(int N) {
              return ToString();
          }
          //
          void TCellString::SetByValDouble(double val) {
              this->val=RealToString(val);
              this->val.setNum(val);
          }
          void TCellString::SetByValFloat(float val) {
              this->val=RealToString((double)val);
              this->val.setNum(val);
          }
          void TCellString::SetByValInt(int val) {
              this->val=IntToStr(val);
              this->val.setNum(val);
          }
          void TCellString::SetByValBool(bool val)
          {
               int i;
               i = BoolToInt(val);
               SetByValInt(i);
         }
         void TCellString::SetByValString(QString val) {
             this->val =val;
         }
         //
         void TCellString::SetByValDoubleN(double val, int N) { SetByValDouble(val); }
         void TCellString::SetByValFloatN(float val, int N) { SetByValFloat(val); }
         void TCellString::SetByValIntN(int val, int N) { SetByValInt(val); }
         void TCellString::SetByValBoolN(bool val, int N) { SetByValBool(val); }
         void TCellString::SetByValStringN(QString val, int N) { SetByValString(val); }
         //
         void TCellString::SetVal(double val) {
             this->val=RealToString(val);
             this->val.setNum(val);
         }
         void TCellString::SetVal(int val) {
             this->val=IntToStringSimple(val);
             this->val.setNum(val);
         }
         void TCellString::SetVal(bool val){
             int i;
             i = BoolToInt(val);
             SetByValInt(i);
         }
         void TCellString::SetVal(QString val) {
             this->val=val;
         }
         //
         void TCellString::SetValN(double val, int N){
             this->val=RealToString(val);
             this->val.setNum(val);
         }
         void TCellString::SetValN(int val, int N)  {
             this->val=IntToStringSimple(val);
             this->val.setNum(val);
         }
         void TCellString::SetValN(bool val, int N) {
             int i;
             i = BoolToInt(val);
             SetByValInt(i);
         }
         void TCellString::SetValN(QString val, int N){
             this->val=val;
         }
         //
         void TCellString::SetByArrDouble(double* val, int Q){
             if(val!=NULL)SetByValDouble(val[1-1]);
             else SetByValDouble(0);
         }
         void TCellString::SetByArrFloat(float* val, int Q)
         {
             if (val != NULL) SetByValFloat(val[1 - 1]);
             else SetByValFloat(0);
         }
         void TCellString::SetByArrInt(int* val, int Q)
         {
             if (val != NULL) SetByValInt(val[1 - 1]);
             else SetByValInt(0);
         }
         void TCellString::SetByArrBool(bool* val, int Q)
         {
             if (val != NULL) SetByValBool(val[1 - 1]);
             else SetByValBool(BoolValByDefault);
         }
         void TCellString::SetByArrString(QString* val, int Q)
         {
             if (val != NULL) SetByValString(val[1 - 1]);
             else SetByValString("");
         }
         //
         void TCellString::SetByArr(double* val, int Q){
             if(val!=NULL)SetByValDouble(val[1-1]);
             else SetByValDouble(0);
         }
         void TCellString::SetByArr(int* val, int Q)
         {
             if (val != NULL) SetByValInt(val[1 - 1]);
             else SetByValInt(0);
         }
         void TCellString::SetByArr(bool* val, int Q)
         {
             if (val != NULL) SetByValBool(val[1 - 1]);
             else SetByValBool(BoolValByDefault);
         }
         void TCellString::SetByArr(QString* val, int Q)
         {
             if (val != NULL) SetByValString(val[1 - 1]);
             else SetByValString("");
         }
         //
         void TCellString::AddOrInsDoubleVal(double val, int N) {
             this->val=RealToString(val);
             this->val.setNum(val);
         }
         void TCellString::AddOrInsFloatVal(float val, int N) {
             this->val=RealToString((double)val);
             this->val.setNum(val);
         }
         void TCellString::AddOrInsIntVal(int val, int N){
             this->val=IntToStringSimple(val);
             this->val.setNum(val);
         }
         void TCellString::AddOrInsBoolVal(bool val, int N)
         {
              int i;
              i = BoolToInt(val);
              SetByValInt(i);
        }
         void TCellString::AddOrInsStringVal(QString val, int N){
             this->val=val;
         }
         //
         void TCellString::DelValN(int N) { }
         //
         void TCellString::GetDoubleArr(double*&Arr,  int&QItems) {
             QItems=1;
             Arr = new double[QItems];
             Arr[1 - 1] = GetDoubleVal();
         }
         void TCellString::GetFloatArr( float*&Arr, int&QItems) {
             QItems = 1;
             Arr = new float[QItems];
             Arr[1 - 1] = GetFloatVal();
         }
         void TCellString::GetIntArr( int*&Arr,  int&QItems) {
             QItems = 1;
             Arr = new int[QItems];
             Arr[1 - 1] = GetIntVal();
         }
         void TCellString::GetBoolArr( bool*&Arr,  int&QItems) {
             QItems = 1;
             Arr = new bool[QItems];
             Arr[1 - 1] = GetBoolVal();
         }
         void TCellString::ToStringArr(QString*&Arr, int&QItems) {
             QItems = 1;
             if(Arr!=NULL)delete[]Arr;
             Arr = new QString[QItems];
             Arr[1 - 1] = ToString();
         }
         //
         void TCellString::SetNameN(QString name, int N) { SetByValStringN(name, N);  }
         void TCellString::SetName1(QString name) { SetByValStringN(name, 1); }
         void TCellString::SetName2(QString name) { SetByValStringN(name, 2); }
         void TCellString::SetName3(QString name) { SetByValStringN(name, 3); }
         void TCellString::SetNames(QString* Arr, int Q) { SetByArrString(Arr, Q); }
         QString TCellString::GetNameN(int N) { return ToStringN(N); }
         QString TCellString::GetName1() { return ToStringN(1); }
         QString TCellString::GetName2() { return ToStringN(2); }
         QString TCellString::GetName3() { return ToStringN(3); }
         void TCellString::GetNames(QString*&Arr, int&QItems) { ToStringArr(Arr, QItems); }
         int TCellString::GetLengthOfNamesList() { return 1; }
         //
                //     override object Clone(){
                //        return new TCellDoubleArr(this->GetDoubleVal());
                //    }
      //};//cl  //TCellString


         //class TCellDoubleArr: TDataCell
         //{
         //    double val;
         //    :
             TCellDoubleArr::TCellDoubleArr() {
                double val=0;
                //
                ActiveN=0;
                Length=0;
                //
                ActiveN=1;
                Length=1;
                //
                content.push_back(val);
             }
             TCellDoubleArr::TCellDoubleArr(double val) { SetByValDouble(val); }
             TCellDoubleArr::TCellDoubleArr(float val) { SetByValFloat(val); }
             TCellDoubleArr::TCellDoubleArr(int val) { SetByValInt(val); }
             TCellDoubleArr::TCellDoubleArr(bool val) { SetByValBool(val); }
             TCellDoubleArr::TCellDoubleArr(QString val) { SetByValString(val); }
             //
             TCellDoubleArr::TCellDoubleArr(double* val, int Q) { SetByArrDouble(val, Q); }
             TCellDoubleArr::TCellDoubleArr(float* val, int Q) { SetByArrFloat(val, Q); }
             TCellDoubleArr::TCellDoubleArr(int* val, int Q) { SetByArrInt(val, Q); }
             TCellDoubleArr::TCellDoubleArr(bool* val, int Q) { SetByArrBool(val, Q); }
             TCellDoubleArr::TCellDoubleArr(QString* val, int Q) { SetByArrString(val, Q); }
             //
             //hope they will not be needed
         //    TCellDoubleArr(TCellDoubleArr&obj){
         //        this->Assign(obj);
         //    }
         //    //
         //    TCellDoubleArr& operator =(TCellDoubleArr&obj){
         //        this->Assign(obj);
         //        return*this;
         //    }
         //    //
         //    void Assign(TCellDoubleArr&obj){
         //        this->data=obj.data;
         //    }
             int TCellDoubleArr::GetTypeN() { return DoubleArrayTypeN; }
             int TCellDoubleArr::GetActiveN() { return ActiveN;}
             void TCellDoubleArr::SetActiveN(int N) {
                if(N>=1 && N<=content.size()) this->ActiveN=N;
             }
             int TCellDoubleArr::GetLength() { return Length; }
             void TCellDoubleArr::SetLength(int L){
                double val=0;
                int iL=content.size();
                if(L>=1 && L<=MaxInt){
                if(L>iL){
                for(int i=1; i<=L-iL; i++){
                content.push_back(val);
                }
                }else if(L<iL){
                for(int i=1; i<=iL-L; i++){
                content.pop_back();
                }
                }
                Length=L;
                }
             }//SetLength
             //
             double TCellDoubleArr::GetDoubleVal() {
                double val;
                val=content[ActiveN-1];
                return val;
             }
             float TCellDoubleArr::GetFloatVal() {
                float val;
                val=(float)content[ActiveN-1];
                return val;
             }
             int TCellDoubleArr::GetIntVal()
             {
                double val;
                val=content[ActiveN-1];
                int r;
                //r =(int) round(content[ActiveN-1]);
                r =(int) round(val);
                return r;
             }
             bool TCellDoubleArr::GetBoolVal() {
                bool r;
                double val=content[ActiveN-1];
                if(BoolValByDefault==true){
                if (val == 0) r = false;
                else r = true;
                }else{
                if (val == 1) r = true;
                else r = false;
                }
                return r;
             }
             QString TCellDoubleArr::ToString() {
                double val=content[ActiveN-1];
                QString s;
                s=RealToString(val);
                s.setNum(val);
                return s;//val.ToString();
             }
             //
             double TCellDoubleArr::GetDoubleValN(int N) {
                double val=0;
                if(N>=1 && N<=content.size()){
                val=content[N-1];
                }
                return val;
             }
             float TCellDoubleArr::GetFloatValN(int N){
                float val=0;
                if(N>=1 && N<=content.size()){
                val=(float)content[N-1];
                }
                return val;
             }
             int TCellDoubleArr::GetIntValN(int N)
             {
                int r=0;
                double val=0;
                this->Length=this->content.size();
                if(N>=1 && N<=Length){
                val=this->content[N-1];
                r = (int)round(val);
                }
                return r;
             }
             bool TCellDoubleArr::GetBoolValN(int N)
             {
                double val;
                bool r=BoolValByDefault;
                this->Length=this->content.size();
                if(N>= 1 && N<=Length){
                val=this->content[N-1];
                if(BoolValByDefault==true){
                if (val == 0) r = false;
                else r = true;
                }else{
                if (val == 1) r = true;
                else r = false;
                }
                }
                return r;
             }
             QString TCellDoubleArr::ToStringN(int N) {
                QString s;
                //QString RealToString(double x, int Repr_IntAndFrac0_ExpAfOrderLim1_ExpAnyhow2=0,  int QAftComma=6, int OrdAfWhichExp=6, int BaseDec=10);
                double val=content[ActiveN-1];
                s=RealToString(val);
                s.setNum(val);
                return s;
             }
             //
             void TCellDoubleArr::SetByValDouble(double val) {
                //this->val = (double)val;
                content[ActiveN-1]=val;
             }
             void TCellDoubleArr::SetByValFloat(float val) {
                //this->val = (double)val;
                content[ActiveN-1]=(double)val;
             }
             void TCellDoubleArr::SetByValInt(int val) {
                //this->val = (double)val;
                content[ActiveN-1]=(double)val;
             }
             void TCellDoubleArr::SetByValBool(bool val)
             {
                int i;
                i = BoolToInt(val);
                //this->val=(double)i;
                content[ActiveN-1]=(double)i;
             }
             void TCellDoubleArr::SetByValString(QString val) {
                double x;
                //this->val = Convert.ToDouble(val);
                //this->val = NumberParse.StrToFloat(val);
                x=StrToReal(val);
                x =val.toDouble();
                content[ActiveN-1]=x;
             } //hin S' ne abl convert!!
             //
             void TCellDoubleArr::SetByValDoubleN(double val, int N) {
                //SetByValDouble(val);
                if(N>=1 && N<=content.size()) content[N-1]=val;
             }
             void TCellDoubleArr::SetByValFloatN(float val, int N){
                //SetByValFloat(val);
                if(N>=1 && N<=content.size()) content[N-1]=(double)val;
             }
             void TCellDoubleArr::SetByValIntN(int val, int N) {
                //SetByValInt(val);
                if(N>=1 && N<=content.size()) content[N-1]=(double)val;
             }
             void TCellDoubleArr::SetByValBoolN(bool val, int N) {
                SetByValBool(val);
                if(N>=1 && N<=content.size()) content[N-1]=(double)BoolToInt(val);
             }
             void TCellDoubleArr::SetByValStringN(QString val, int N) {
                SetByValString(val);
                double x;
                x=StrToReal(val);
                x=val.toDouble();
                if(N>=1 && N<=content.size()) content[N-1]=x;
             }
             //
             void TCellDoubleArr::SetVal(double val) {
                //this->val = (double)val;
                content[ActiveN-1]=val;
             }
             void TCellDoubleArr::SetVal(int val) {
                //this->val = (double)val;
                content[ActiveN-1]=(double)val;
             }
             void TCellDoubleArr::SetVal(bool val)
             {
                int i;
                i = BoolToInt(val);
                //this->val = (double)i;
                content[ActiveN-1]=(double)i;
             }
             void TCellDoubleArr::SetVal(QString val) {
                double x;
                //this->val = Convert.ToDouble(val);
                //this->val=StrToReal(val);
                //this->val=val.toDouble();
                x=StrToReal(val);
                x=val.toDouble();
                content[ActiveN-1]=x;
             }
             //
             void TCellDoubleArr::SetValN(double val, int N) {
                //SetVal(val);
                if(N>=1 && N<=content.size())content[N-1]=val;
             }
             void TCellDoubleArr::SetValN(int val, int N) {
                //SetVal(val);
                if(N>=1 && N<=content.size())content[N-1]=(double)val;
             }
             void TCellDoubleArr::SetValN(bool val, int N) {
                //SetVal(val);
                int x=BoolToInt(val);
                if(N>=1 && N<=content.size())content[N-1]=(double)x;
             }
             void TCellDoubleArr::SetValN(QString val, int N) {
                //SetVal(val);
                double x=StrToReal(val);
                x=val.toDouble();
                if(N>=1 && N<=content.size())content[N-1]=x;
             }
             //
             void TCellDoubleArr::SetByArrDouble(double* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
             }
             void TCellDoubleArr::SetByArrFloat(float* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(double)val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
             }
             void TCellDoubleArr::SetByArrInt(int* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(double)val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
             }
             void TCellDoubleArr::SetByArrBool(bool* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(double)BoolToInt(val[i-1]);
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
             }
             void TCellDoubleArr::SetByArrString(QString* val, int Q){
                double x;
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                x=StrToReal(val[i-1]);
                x=val[i-1].toDouble();
                content[i-1]=x;
                }
                }
                else
                {
                // for(int i=1; i<=MinN; i++){
                //     x=0;
                //     content[i-1]=x;
                //}
                //NOp; NULL as argument let it be means nothing to change
                }
             }
             //
             void TCellDoubleArr::SetByArr(double* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
             }
             void TCellDoubleArr::SetByArr(int* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(double)val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
             }
             void TCellDoubleArr::SetByArr(bool* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(double)BoolToInt(val[i-1]);
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
             }
             void TCellDoubleArr::SetByArr(QString* val, int Q){
                double x;
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                x=StrToReal(val[i-1]);
                x=val[i-1].toDouble();
                content[i-1]=x;
                }
                }
                else
                {
                // for(int i=1; i<=MinN; i++){
                //     x=0;
                //     content[i-1]=x;
                //}
                //NOp; NULL as argument let it be means nothing to change
                }
             }
             //
             void TCellDoubleArr::AddOrInsDoubleVal(double val, int N){
                //SetByValDouble(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length) content.insert(content.begin()+N-1,val);
                else{
                content.push_back(val);
                Length++;
                //ActiveN=N;
                }
             }
             void TCellDoubleArr::AddOrInsFloatVal(float val, int N){
                //SetByValDouble(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length) content.insert(content.begin()+N-1,(double)val);
                else{
                content.push_back((double)val);
                Length++;
                //ActiveN=N;
                }
             }
             void TCellDoubleArr::AddOrInsIntVal(int val, int N){
                //SetByValDouble(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length) content.insert(content.begin()+N-1,(double)val);
                else{
                content.push_back((double)val);
                Length++;
                //ActiveN=N;
                }
             }
             void TCellDoubleArr::AddOrInsBoolVal(bool val, int N){
                int x=BoolToInt(val);
                //SetByValDouble(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length) {
                content.insert(content.begin()+N-1,(double)x);
                }else{
                content.push_back((double)x);
                Length++;
                //ActiveN=N;
                }
             }
             void TCellDoubleArr::AddOrInsStringVal(QString val, int N){
                double x=StrToReal(val);
                x=val.toDouble();
                //SetByValDouble(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length){
                content.insert(content.begin()+N-1,x);
                }else{
                content.push_back(x);
                Length++;
                //ActiveN=N;
                }
             }
             //
             void TCellDoubleArr::DelValN(int N) {
                this->Length=this->content.size();
                if(N>=1 && N<=Length){
                content.erase(content.begin()+N-1);
                }
             }
             //
             void TCellDoubleArr::GetDoubleArr(double*&Arr,  int&QItems) {
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new double[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetDoubleValN(i);
             }
             void TCellDoubleArr::GetFloatArr( float*&Arr, int&QItems){
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new float[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetFloatValN(i);
             }
             void TCellDoubleArr::GetIntArr( int*&Arr,  int&QItems){
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new int[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetIntValN(i);
             }
             void TCellDoubleArr::GetBoolArr( bool*&Arr,  int&QItems){
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new bool[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetBoolValN(i);
             }
             void TCellDoubleArr::ToStringArr(QString*&Arr, int&QItems) {
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new QString[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = ToStringN(i);
             }
             //
             void TCellDoubleArr::SetNameN(QString name, int N) { SetByValStringN(name, N);  }
             void TCellDoubleArr::SetName1(QString name) { SetByValStringN(name, 1); }
             void TCellDoubleArr::SetName2(QString name) { SetByValStringN(name, 2); }
             void TCellDoubleArr::SetName3(QString name) { SetByValStringN(name, 3); }
             void TCellDoubleArr::SetNames(QString* Arr, int Q) { SetByArrString(Arr, Q); }
             QString TCellDoubleArr::GetNameN(int N) { return ToStringN(N); }
             QString TCellDoubleArr::GetName1() { return ToStringN(1); }
             QString TCellDoubleArr::GetName2() { return ToStringN(2); }
             QString TCellDoubleArr::GetName3() { return ToStringN(3); }
             void TCellDoubleArr::GetNames(QString*&Arr, int&QItems) { ToStringArr(Arr, QItems); }
             int TCellDoubleArr::GetLengthOfNamesList() { return 1; }
             //
         //     override object Clone(){
         //        return new TCellDoubleArr(this->GetDoubleVal());
         //    }
//};//cl TCellDoubleArr



             //class TCellFloatArr: TDataCell
             //{
             //    double val;
             //    :
                TCellFloatArr::TCellFloatArr() {
                double val=0;
                //
                ActiveN=0;
                Length=0;
                //
                ActiveN=1;
                Length=1;
                //
                content.push_back(val);
                }
                TCellFloatArr::TCellFloatArr(double val) { SetByValDouble(val); }
                TCellFloatArr::TCellFloatArr(float val) { SetByValFloat(val); }
                TCellFloatArr::TCellFloatArr(int val) { SetByValInt(val); }
                TCellFloatArr::TCellFloatArr(bool val) { SetByValBool(val); }
                TCellFloatArr::TCellFloatArr(QString val) { SetByValString(val); }
                //
                TCellFloatArr::TCellFloatArr(double* val, int Q) { SetByArrDouble(val, Q); }
                TCellFloatArr::TCellFloatArr(float* val, int Q) { SetByArrFloat(val, Q); }
                TCellFloatArr::TCellFloatArr(int* val, int Q) { SetByArrInt(val, Q); }
                TCellFloatArr::TCellFloatArr(bool* val, int Q) { SetByArrBool(val, Q); }
                TCellFloatArr::TCellFloatArr(QString* val, int Q) { SetByArrString(val, Q); }
                //
                //hope they will not be needed
             //    TCellFloatArr(TCellFloatArr&obj){
             //        this->Assign(obj);
             //    }
             //    //
             //    TCellFloatArr& operator =(TCellFloatArr&obj){
             //        this->Assign(obj);
             //        return*this;
             //    }
             //    //
             //    void Assign(TCellFloatArr&obj){
             //        this->data=obj.data;
             //    }
                int TCellFloatArr::GetTypeN() { return FloatArrayTypeN; }
                int TCellFloatArr::GetActiveN() { return ActiveN;}
                void TCellFloatArr::SetActiveN(int N) {
                if(N>=1 && N<=content.size()) this->ActiveN=N;
                }
                int TCellFloatArr::GetLength() { return Length; }
                void TCellFloatArr::SetLength(int L){
                float val=0;
                int iL=content.size();
                if(L>=1 && L<=MaxInt){
                if(L>iL){
                for(int i=1; i<=L-iL; i++){
                content.push_back(val);
                }
                }else if(L<iL){
                for(int i=1; i<=iL-L; i++){
                content.pop_back();
                }
                }
                Length=L;
                }
                }//SetLength
                //
                double TCellFloatArr::GetDoubleVal() {
                double val;
                val=(double)content[ActiveN-1];
                return val;
                }
                float TCellFloatArr::GetFloatVal() {
                float val;
                //val=(float)content[ActiveN-1];
                val=content[ActiveN-1];
                return val;
                }
                int TCellFloatArr::GetIntVal()
                {
                float val;
                val=content[ActiveN-1];
                int r;
                //r =(int) round(content[ActiveN-1]);
                r =(int) round(val);
                return r;
                }
                bool TCellFloatArr::GetBoolVal() {
                bool r;
                float val=content[ActiveN-1];
                if(BoolValByDefault==true){
                if (val == 0) r = false;
                else r = true;
                }else{
                if (val == 1) r = true;
                else r = false;
                }
                return r;
                }
                QString TCellFloatArr::ToString() {
                float val=content[ActiveN-1];
                QString s;
                s=RealToString((double)val);
                s.setNum(val);
                return s;//val.ToString();
                }
                //
                double TCellFloatArr::GetDoubleValN(int N) {
                double val=0;
                if(N>=1 && N<=content.size()){
                val=(double)content[N-1];
                }
                return val;
                }
                float TCellFloatArr::GetFloatValN(int N){
                float val=0;
                if(N>=1 && N<=content.size()){
                //val=(float)content[N-1];
                val=content[N-1];
                }
                return val;
                }
                int TCellFloatArr::GetIntValN(int N)
                {
                float val;
                int r=0;
                if(N>=1 && N<=content.size()){
                val=content[N-1];
                r = (int)round(val);
                }
                return r;
                }
                bool TCellFloatArr::GetBoolValN(int N)
                {
                bool r=BoolValByDefault;
                float val;
                this->Length=this->content.size();
                if(N>=1 && N<=Length){
                if(BoolValByDefault==true){
                if (val == 0) r = false;
                else r = true;
                }else{
                if (val == 1) r = true;
                else r = false;
                }
                }
                return r;
                }
                QString TCellFloatArr::ToStringN(int N) {
                QString s;
                //QString RealToString(double x, int Repr_IntAndFrac0_ExpAfOrderLim1_ExpAnyhow2=0,  int QAftComma=6, int OrdAfWhichExp=6, int BaseDec=10);
                //double val=(double)content[ActiveN-1];
                float val=content[ActiveN-1];
                //s=RealToString((float)val);
                s=RealToString(val);
                s.setNum(val);
                return s;
                }
                //
                void TCellFloatArr::SetByValDouble(double val) {
                //this->val = (double)val;
                content[ActiveN-1]=(float)val;
                }
                void TCellFloatArr::SetByValFloat(float val) {
                //this->val = (double)val;
                //content[ActiveN-1]=(float)val;
                content[ActiveN-1]=(float)val;
                }
                void TCellFloatArr::SetByValInt(int val) {
                //this->val = (double)val;
                content[ActiveN-1]=(float)val;
                }
                void TCellFloatArr::SetByValBool(bool val)
                {
                int i;
                i = BoolToInt(val);
                //this->val=(double)i;
                content[ActiveN-1]=(float)i;
                }
                void TCellFloatArr::SetByValString(QString val) {
                float x;
                //this->val = Convert.ToDouble(val);
                //this->val = NumberParse.StrToFloat(val);
                x=(float)StrToReal(val);
                x =val.toFloat();
                content[ActiveN-1]=x;
                } //hin S' ne abl convert!!
                //
                void TCellFloatArr::SetByValDoubleN(double val, int N) {
                //SetByValDouble(val);
                if(N>=1 && N<=content.size()) content[N-1]=(float)val;
                }
                void TCellFloatArr::SetByValFloatN(float val, int N){
                //SetByValFloat(val);
                //if(N>=1 && N<=content.size()) content[N-1]=(float)val;
                if(N>=1 && N<=content.size()) content[N-1]=val;
                }
                void TCellFloatArr::SetByValIntN(int val, int N) {
                //SetByValInt(val);
                if(N>=1 && N<=content.size()) content[N-1]=(float)val;
                }
                void TCellFloatArr::SetByValBoolN(bool val, int N) {
                SetByValBool(val);
                if(N>=1 && N<=content.size()) content[N-1]=(float)BoolToInt(val);
                }
                void TCellFloatArr::SetByValStringN(QString val, int N) {
                SetByValString(val);
                double x;
                x=StrToReal(val);
                x=val.toFloat();
                if(N>=1 && N<=content.size()) content[N-1]=(float)x;
                }
                //
                void TCellFloatArr::SetVal(double val) {
                //this->val = (double)val;
                content[ActiveN-1]=(float)val;
                }
                void TCellFloatArr::SetVal(int val) {
                //this->val = (double)val;
                //content[ActiveN-1]=(float)val;
                content[ActiveN-1]=val;
                }
                void TCellFloatArr::SetVal(bool val)
                {
                int i;
                i = BoolToInt(val);
                //this->val = (double)i;
                content[ActiveN-1]=(float)i;
                }
                void TCellFloatArr::SetVal(QString val) {
                double x;
                //this->val = Convert.ToDouble(val);
                //this->val=StrToReal(val);
                //this->val=val.toDouble();
                x=StrToReal(val);
                x=val.toDouble();
                content[ActiveN-1]=(float)x;
                }
                //
                void TCellFloatArr::SetValN(double val, int N) {
                //SetVal(val);
                if(N>=1 && N<=content.size())content[N-1]=(float)val;
                }
                void TCellFloatArr::SetValN(int val, int N) {
                //SetVal(val);
                //if(N>=1 && N<=content.size())content[N-1]=(float)val;
                if(N>=1 && N<=content.size())content[N-1]=val;
                }
                void TCellFloatArr::SetValN(bool val, int N) {
                //SetVal(val);
                int x=BoolToInt(val);
                if(N>=1 && N<=content.size())content[N-1]=(float)x;
                }
                void TCellFloatArr::SetValN(QString val, int N) {
                //SetVal(val);
                double x=StrToReal(val);
                x=val.toDouble();
                if(N>=1 && N<=content.size())content[N-1]=(float)x;
                }
                //
                void TCellFloatArr::SetByArrDouble(double* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(float)val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellFloatArr::SetByArrFloat(float* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                //for(int i=1; i<=MinN; i++) content[i-1]=(float)val[i-1];
                for(int i=1; i<=MinN; i++) content[i-1]=val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellFloatArr::SetByArrInt(int* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(float)val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellFloatArr::SetByArrBool(bool* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(float)BoolToInt(val[i-1]);
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellFloatArr::SetByArrString(QString* val, int Q){
                float x;
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                x=(float)StrToReal(val[i-1]);
                x=val[i-1].toFloat();
                content[i-1]=x;
                }
                }
                else
                {
                // for(int i=1; i<=MinN; i++){
                //     x=0;
                //     content[i-1]=x;
                //}
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                //
                void TCellFloatArr::SetByArr(double* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(float)val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellFloatArr::SetByArr(int* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(float)val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellFloatArr::SetByArr(bool* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(float)BoolToInt(val[i-1]);
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellFloatArr::SetByArr(QString* val, int Q){
                float x;
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                x=(float)StrToReal(val[i-1]);
                x=val[i-1].toFloat();
                content[i-1]=x;
                }
                }
                else
                {
                // for(int i=1; i<=MinN; i++){
                //     x=0;
                //     content[i-1]=x;
                //}
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                //
                void TCellFloatArr::AddOrInsDoubleVal(double val, int N){
                //SetByValDouble(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length){
                content.insert(content.begin()+N-1,(float)val);
                }else{
                content.push_back((float)val);
                Length++;
                //ActiveN=N;
                }
                }
                void TCellFloatArr::AddOrInsFloatVal(float val, int N){
                //SetByValDouble(val);
                //if(N>=1 && N<=content.size()) content.insert(N-1,(float)val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length){
                content.insert(content.begin()+N-1,(float)val);
                }else{
                //content.push_back((float)val);
                content.push_back(val);
                Length++;
                //ActiveN=N;
                }
                }
                void TCellFloatArr::AddOrInsIntVal(int val, int N){
                //SetByValDouble(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length){
                content.insert(content.begin()+N-1,(float)val);
                }else{
                content.push_back((float)val);
                Length++;
                //ActiveN=N;
                }
                }
                void TCellFloatArr::AddOrInsBoolVal(bool val, int N){
                int x=BoolToInt(val);
                //SetByValDouble(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length){
                content.insert(content.begin()+N-1,(float)val);
                }else{
                content.push_back((float)x);
                Length++;
                //ActiveN=N;
                }
                }
                void TCellFloatArr::AddOrInsStringVal(QString val, int N){
                float x=(float)StrToReal(val);
                x=val.toFloat();
                //SetByValDouble(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length){
                content.insert(content.begin()+N-1,x);
                }else{
                content.push_back(x);
                Length++;
                //ActiveN=N;
                }
                }
                //
                void TCellFloatArr::DelValN(int N) {
                if(N>=1 && N<=content.size()){
                content.erase(content.begin()+N-1);
                }
                }
                //
                void TCellFloatArr::GetDoubleArr(double*&Arr,  int&QItems) {
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new double[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetDoubleValN(i);
                }
                void TCellFloatArr::GetFloatArr( float*&Arr, int&QItems){
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new float[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetFloatValN(i);
                }
                void TCellFloatArr::GetIntArr( int*&Arr,  int&QItems){
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new int[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetIntValN(i);
                }
                void TCellFloatArr::GetBoolArr( bool*&Arr,  int&QItems){
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new bool[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetBoolValN(i);
                }
                void TCellFloatArr::ToStringArr(QString*&Arr, int&QItems) {
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new QString[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = ToStringN(i);
                }
                //
                void TCellFloatArr::SetNameN(QString name, int N) { SetByValStringN(name, N);  }
                void TCellFloatArr::SetName1(QString name) { SetByValStringN(name, 1); }
                void TCellFloatArr::SetName2(QString name) { SetByValStringN(name, 2); }
                void TCellFloatArr::SetName3(QString name) { SetByValStringN(name, 3); }
                void TCellFloatArr::SetNames(QString* Arr, int Q) { SetByArrString(Arr, Q); }
                QString TCellFloatArr::GetNameN(int N) { return ToStringN(N); }
                QString TCellFloatArr::GetName1() { return ToStringN(1); }
                QString TCellFloatArr::GetName2() { return ToStringN(2); }
                QString TCellFloatArr::GetName3() { return ToStringN(3); }
                void TCellFloatArr::GetNames(QString*&Arr, int&QItems) { ToStringArr(Arr, QItems); }
                int TCellFloatArr::GetLengthOfNamesList() { return 1; }
                //
             //     override object Clone(){
             //        return new TCellFloatArr(this->GetDoubleVal());
             //    }
    //};//cl TCellFloatArr



                //class TCellIntArr: TDataCell
                //{
                //    double val;
                //    :
                TCellIntArr::TCellIntArr() {
                double val=0;
                //
                ActiveN=0;
                Length=0;
                //
                ActiveN=1;
                Length=1;
                //
                content.push_back(val);
                }
                TCellIntArr::TCellIntArr(double val) { SetByValDouble(val); }
                TCellIntArr::TCellIntArr(float val) { SetByValFloat(val); }
                TCellIntArr::TCellIntArr(int val) { SetByValInt(val); }
                TCellIntArr::TCellIntArr(bool val) { SetByValBool(val); }
                TCellIntArr::TCellIntArr(QString val) { SetByValString(val); }
                //
                TCellIntArr::TCellIntArr(double* val, int Q) { SetByArrDouble(val, Q); }
                TCellIntArr::TCellIntArr(float* val, int Q) { SetByArrFloat(val, Q); }
                TCellIntArr::TCellIntArr(int* val, int Q) { SetByArrInt(val, Q); }
                TCellIntArr::TCellIntArr(bool* val, int Q) { SetByArrBool(val, Q); }
                TCellIntArr::TCellIntArr(QString* val, int Q) { SetByArrString(val, Q); }
                //
                //hope they will not be needed
                //    TCellIntArr(TCellIntArr&obj){
                //        this->Assign(obj);
                //    }
                //    //
                //    TCellIntArr& operator =(TCellIntArr&obj){
                //        this->Assign(obj);
                //        return*this;
                //    }
                //    //
                //    void Assign(TCellIntArr&obj){
                //        this->data=obj.data;
                //    }
                int TCellIntArr::GetTypeN() { return IntArrayTypeN; }
                int TCellIntArr::GetActiveN() { return ActiveN;}
                void TCellIntArr::SetActiveN(int N) {
                if(N>=1 && N<=content.size()) this->ActiveN=N;
                }
                int TCellIntArr::GetLength() { return Length; }
                void TCellIntArr::SetLength(int L){
                int val=0;
                int iL=content.size();
                if(L>=1 && L<=MaxInt){
                if(L>iL){
                for(int i=1; i<=L-iL; i++){
                content.push_back(val);
                }
                }else if(L<iL){
                for(int i=1; i<=iL-L; i++){
                content.pop_back();
                }
                }
                Length=L;
                }
                }//SetLength
                //
                double TCellIntArr::GetDoubleVal() {
                double val;
                val=(double)content[ActiveN-1];
                return val;
                }
                float TCellIntArr::GetFloatVal() {
                float val;
                val=(float)content[ActiveN-1];
                return val;
                }
                int TCellIntArr::GetIntVal()
                {
                int val;
                val=content[ActiveN-1];
                //int r;
                //r =(int) round(content[ActiveN-1]);
                //r =(int) round(val);
                //return r;
                return val;
                }
                bool TCellIntArr::GetBoolVal() {
                bool r;
                int val=content[ActiveN-1];
                if(BoolValByDefault==true){
                if (val == 0) r = false;
                else r = true;
                }else{
                if (val == 1) r = true;
                else r = false;
                }
                return r;
                }
                QString TCellIntArr::ToString() {
                int val=content[ActiveN-1];
                QString s;
                s=IntToStringSimple(val);
                s.setNum(val);
                return s;//val.ToString();
                }
                //
                double TCellIntArr::GetDoubleValN(int N) {
                double val=0;
                if(N>=1 && N<=content.size()){
                val=(double)content[N-1];
                }
                return val;
                }
                float TCellIntArr::GetFloatValN(int N){
                float val=0;
                if(N>=1 && N<=content.size()){
                val=(float)content[N-1];
                }
                return val;
                }
                int TCellIntArr::GetIntValN(int N)
                {
                int r=0;
                if(N>=1 && N<=content.size()){
                //r = (int)round(content[N-1]);
                r = content[N-1];
                }
                return r;
                }
                bool TCellIntArr::GetBoolValN(int N)
                {
                int val;
                bool r=BoolValByDefault, chk=BoolValByDefault;
                //if(chk==true){
                this->Length=this->content.size();
                if(N>=1 && N<=this->Length){
                val=content[N-1];
                if(BoolValByDefault==true){
                if (val == 0) r = false;
                else r = true;
                }else{
                if (val == 1) r = true;
                else r = false;
                }
                }
                return r;
                }
                QString TCellIntArr::ToStringN(int N) {
                QString s="";
                //QString RealToString(double x, int Repr_IntAndFrac0_ExpAfOrderLim1_ExpAnyhow2=0,  int QAftComma=6, int OrdAfWhichExp=6, int BaseDec=10);
                int val=content[ActiveN-1];
                //float val=content[ActiveN-1];
                s=IntToStringSimple(val);
                s.setNum(val);
                return s;
                }
                //
                void TCellIntArr::SetByValDouble(double val) {
                //this->val = (double)val;
                int y=(int)round(val);
                content[ActiveN-1]=y;
                }
                void TCellIntArr::SetByValFloat(float val) {
                //this->val = (double)val;
                //content[ActiveN-1]=(float)val;
                //int y=(int)round(val);
                int y=(int)round(val);
                content[ActiveN-1]=y;
                }
                void TCellIntArr::SetByValInt(int val) {
                //this->val = (double)val;
                //content[ActiveN-1]=(float)val;
                content[ActiveN-1]=val;
                }
                void TCellIntArr::SetByValBool(bool val)
                {
                int i;
                i = BoolToInt(val);
                //this->val=(double)i;
                content[ActiveN-1]=i;
                }
                void TCellIntArr::SetByValString(QString val) {
                double x;
                int y;
                x=StrToReal(val);
                x=val.toDouble();
                y=IntPart(x);
                y=(int)round(x);
                y=val.toInt();
                content[ActiveN-1]=y;
                } //hin S' ne abl convert!!
                //
                void TCellIntArr::SetByValDoubleN(double val, int N) {
                //SetByValDouble(val);
                if(N>=1 && N<=content.size()) content[N-1]=(int)round(val);
                }
                void TCellIntArr::SetByValFloatN(float val, int N){
                //SetByValFloat(val);
                //if(N>=1 && N<=content.size()) content[N-1]=(float)val;
                if(N>=1 && N<=content.size())  content[N-1]=(int)round(val);
                }
                void TCellIntArr::SetByValIntN(int val, int N) {
                //SetByValInt(val);
                if(N>=1 && N<=content.size()) content[N-1]=val;
                }
                void TCellIntArr::SetByValBoolN(bool val, int N) {
                SetByValBool(val);
                if(N>=1 && N<=content.size()) content[N-1]=BoolToInt(val);
                }
                void TCellIntArr::SetByValStringN(QString val, int N) {
                double x;
                int y;
                x=StrToReal(val);
                x=val.toDouble();
                y=IntPart(x);
                y=(int)round(x);
                y=val.toInt();
                if(N>=1 && N<=content.size())content[N-1]=y;
                }
                //
                void TCellIntArr::SetVal(double val) {
                //this->val = (double)val;
                content[ActiveN-1]=(int)round(val);
                }
                void TCellIntArr::SetVal(int val) {
                //this->val = (double)val;
                //content[ActiveN-1]=(float)val;
                content[ActiveN-1]=val;
                }
                void TCellIntArr::SetVal(bool val)
                {
                int i;
                i = BoolToInt(val);
                //this->val = (double)i;
                content[ActiveN-1]=BoolToInt(i);
                }
                void TCellIntArr::SetVal(QString val) {
                double x=StrToReal(val);
                int y;
                y=IntPart(x);
                y=(int)round(x);
                y=val.toInt();
                content[ActiveN-1]=y;
                }
                //
                void TCellIntArr::SetValN(double val, int N) {
                //SetVal(val);
                if(N>=1 && N<=content.size())content[N-1]=(int)round(val);
                }
                void TCellIntArr::SetValN(int val, int N) {
                //SetVal(val);
                //if(N>=1 && N<=content.size())content[N-1]=(float)val;
                if(N>=1 && N<=content.size())content[N-1]=val;
                }
                void TCellIntArr::SetValN(bool val, int N) {
                //SetVal(val);
                int x=BoolToInt(val);
                if(N>=1 && N<=content.size())content[N-1]=x;
                }
                void TCellIntArr::SetValN(QString val, int N) {
                double x;
                int y;
                x=StrToReal(val);
                x=val.toDouble();
                y=IntPart(x);
                y=(int)round(x);
                y=val.toInt();
                if(N>=1 && N<=content.size())content[N-1]=y;
                }
                //
                void TCellIntArr::SetByArrDouble(double* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(float)val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellIntArr::SetByArrFloat(float* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                //for(int i=1; i<=MinN; i++) content[i-1]=(float)val[i-1];
                for(int i=1; i<=MinN; i++) content[i-1]=val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellIntArr::SetByArrInt(int* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(float)val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellIntArr::SetByArrBool(bool* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(float)BoolToInt(val[i-1]);
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellIntArr::SetByArrString(QString* val, int Q){
                double x;
                int y;
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                x=StrToReal(val[i-1]);
                x=val[i-1].toDouble();
                y=IntPart(x);
                y=(int)round(x);
                y=val[i-1].toInt();
                content[i-1]=y;
                }
                }
                else
                {
                // for(int i=1; i<=MinN; i++){
                //     x=0;
                //     content[i-1]=x;
                //}
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                //
                void TCellIntArr::SetByArr(double* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(int)round(val[i-1]);
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellIntArr::SetByArr(int* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellIntArr::SetByArr(bool* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=BoolToInt(val[i-1]);
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellIntArr::SetByArr(QString* val, int Q){
                double x;
                int y;
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                x=StrToReal(val[i-1]);
                x=val[i-1].toDouble();
                y=IntPart(x);
                y=(int)round(x);
                y=val[i-1].toInt();
                content[i-1]=y;
                }
                }
                else
                {
                // for(int i=1; i<=MinN; i++){
                //     x=0;
                //     content[i-1]=x;
                //}
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                //
                void TCellIntArr::AddOrInsDoubleVal(double val, int N){
                //SetByValDouble(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length){
                content.insert(content.begin()+N-1,(int)round(val));
                }else{
                content.push_back((int)round(val));
                Length++;
                //ActiveN=N;
                }
                }
                void TCellIntArr::AddOrInsFloatVal(float val, int N){
                //SetByValDouble(val);
                //if(N>=1 && N<=content.size()) content.insert(N-1,(float)val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length){
                content.insert(content.begin()+N-1,(int)round(val));
                }else{
                //content.push_back((float)val);
                content.push_back((int)round(val));
                Length++;
                //ActiveN=N;
                }
                }
                void TCellIntArr::AddOrInsIntVal(int val, int N){
                //SetByValDouble(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length){
                content.insert(content.begin()+N-1,(int)round(val));
                }else{
                content.push_back(val);
                Length++;
                //ActiveN=N;
                }
                }
                void TCellIntArr::AddOrInsBoolVal(bool val, int N){
                int x=BoolToInt(val);
                //SetByValDouble(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length){
                content.insert(content.begin()+N-1,BoolToInt(val));
                }else{
                content.push_back(BoolToInt(x));
                Length++;
                //ActiveN=N;
                }
                }
                void TCellIntArr::AddOrInsStringVal(QString val, int N){
                double x=StrToReal(val);
                int y=IntPart(x);
                x=val.toDouble();
                y=(int)round(x);
                //SetByValDouble(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length){
                content.insert(content.begin()+N-1,y);
                }else{
                content.push_back(y);
                Length++;
                //ActiveN=N;
                }
                }
                //
                void TCellIntArr::DelValN(int N) {
                this->Length=this->content.size();
                if(N>=1 && N<=Length){
                content.erase(content.begin()+N-1);
                }
                }
                //
                void TCellIntArr::GetDoubleArr(double*&Arr,  int&QItems) {
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new double[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetDoubleValN(i);
                }
                void TCellIntArr::GetFloatArr( float*&Arr, int&QItems){
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new float[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetFloatValN(i);
                }
                void TCellIntArr::GetIntArr( int*&Arr,  int&QItems){
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new int[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetIntValN(i);
                }
                void TCellIntArr::GetBoolArr( bool*&Arr,  int&QItems){
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new bool[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetBoolValN(i);
                }
                void TCellIntArr::ToStringArr(QString*&Arr, int&QItems) {
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new QString[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = ToStringN(i);
                }
                //
                void TCellIntArr::SetNameN(QString name, int N) { SetByValStringN(name, N);  }
                void TCellIntArr::SetName1(QString name) { SetByValStringN(name, 1); }
                void TCellIntArr::SetName2(QString name) { SetByValStringN(name, 2); }
                void TCellIntArr::SetName3(QString name) { SetByValStringN(name, 3); }
                void TCellIntArr::SetNames(QString* Arr, int Q) { SetByArrString(Arr, Q); }
                QString TCellIntArr::GetNameN(int N) { return ToStringN(N); }
                QString TCellIntArr::GetName1() { return ToStringN(1); }
                QString TCellIntArr::GetName2() { return ToStringN(2); }
                QString TCellIntArr::GetName3() { return ToStringN(3); }
                void TCellIntArr::GetNames(QString*&Arr, int&QItems) { ToStringArr(Arr, QItems); }
                int TCellIntArr::GetLengthOfNamesList() { return 1; }
                //
                //     override object Clone(){
                //        return new TCellIntArr(this->GetDoubleVal());
                //    }
        //};//cl TCellIntArr


                //class TCellBoolArr: TDataCell
                //{
                //    double val;
                //    :
                TCellBoolArr::TCellBoolArr() {
                double val=0;
                //
                ActiveN=0;
                Length=0;
                //
                ActiveN=1;
                Length=1;
                //
                content.push_back(val);
                }
                TCellBoolArr::TCellBoolArr(double val) { SetByValDouble(val); }
                TCellBoolArr::TCellBoolArr(float val) { SetByValFloat(val); }
                TCellBoolArr::TCellBoolArr(int val) { SetByValInt(val); }
                TCellBoolArr::TCellBoolArr(bool val) { SetByValBool(val); }
                TCellBoolArr::TCellBoolArr(QString val) { SetByValString(val); }
                //
                TCellBoolArr::TCellBoolArr(double* val, int Q) { SetByArrDouble(val, Q); }
                TCellBoolArr::TCellBoolArr(float* val, int Q) { SetByArrFloat(val, Q); }
                TCellBoolArr::TCellBoolArr(int* val, int Q) { SetByArrInt(val, Q); }
                TCellBoolArr::TCellBoolArr(bool* val, int Q) { SetByArrBool(val, Q); }
                TCellBoolArr::TCellBoolArr(QString* val, int Q) { SetByArrString(val, Q); }
                //
                //hope they will not be needed
                //    TCellBoolArr(TCellBoolArr&obj){
                //        this->Assign(obj);
                //    }
                //    //
                //    TCellBoolArr& operator =(TCellBoolArr&obj){
                //        this->Assign(obj);
                //        return*this;
                //    }
                //    //
                //    void Assign(TCellBoolArr&obj){
                //        this->data=obj.data;
                //    }
                int TCellBoolArr::GetTypeN() { return BoolArrayTypeN; }
                int TCellBoolArr::GetActiveN() { return ActiveN;}
                void TCellBoolArr::SetActiveN(int N) {
                if(N>=1 && N<=content.size()) this->ActiveN=N;
                }
                int TCellBoolArr::GetLength() { return Length; }
                void TCellBoolArr::SetLength(int L){
                bool val=BoolValByDefault;
                int iL=content.size();
                if(L>=1 && L<=MaxInt){
                if(L>iL){
                for(int i=1; i<=L-iL; i++){
                content.push_back(val);
                }
                }else if(L<iL){
                for(int i=1; i<=iL-L; i++){
                content.pop_back();
                }
                }
                Length=L;
                }
                }//SetLength
                //
                double TCellBoolArr::GetDoubleVal() {
                double val;
                val=(double)BoolToInt(content[ActiveN-1]);
                return val;
                }
                float TCellBoolArr::GetFloatVal() {
                float val;
                val=(float)BoolToInt(content[ActiveN-1]);
                return val;
                }
                int TCellBoolArr::GetIntVal()
                {
                int val;
                val=BoolToInt(content[ActiveN-1]);
                //int r;
                //r =(int) round(content[ActiveN-1]);
                //r =(int) round(val);
                //return r;
                return val;
                }
                bool TCellBoolArr::GetBoolVal() {
                //bool r=BoolValByDefault, chk=BoolValByDefault;
                //int val=content[ActiveN-1];
                ////if(chk==true){
                //if(BoolValByDefault==true){
                //    if (val == 0) r = false;
                //    else r = true;
                //}else{
                //    if (val == 1) r = true;
                //    else r = false;
                //}
                //return r;
                return this->content[ActiveN-1];
                }
                QString TCellBoolArr::ToString() {
                int val=BoolToInt(content[ActiveN-1]);
                QString s;
                s=IntToStringSimple(val);
                s.setNum(val);
                return s;//val.ToString();
                }
                //
                double TCellBoolArr::GetDoubleValN(int N) {
                double val=0;
                if(N>=1 && N<=content.size()){
                val=(double)BoolToInt(content[N-1]);
                }
                return val;
                }
                float TCellBoolArr::GetFloatValN(int N){
                float val=0;
                if(N>=1 && N<=content.size()){
                val=(float)BoolToInt(content[N-1]);
                }
                return val;
                }
                int TCellBoolArr::GetIntValN(int N)
                {
                int r=0;
                if(N>=1 && N<=content.size()){
                //r = (int)round(content[N-1]);
                r = BoolToInt(content[N-1]);
                }
                return r;
                }
                bool TCellBoolArr::GetBoolValN(int N)
                {
                //bool r=BoolValByDefault, chk=BoolValByDefault;
                ////if(chk==true){
                //if(BoolValByDefault==true){
                //    if (val == 0) r = false;
                //    else r = true;
                //}else{
                //    if (val == 1) r = true;
                //    else r = false;
                //}
                //return r;
                return content[N-1];
                }
                QString TCellBoolArr::ToStringN(int N) {
                QString s="";
                //QString RealToString(double x, int Repr_IntAndFrac0_ExpAfOrderLim1_ExpAnyhow2=0,  int QAftComma=6, int OrdAfWhichExp=6, int BaseDec=10);
                int val=content[ActiveN-1];
                //float val=content[ActiveN-1];
                s=IntToStringSimple(val);
                s.setNum(val);
                return s;
                }
                //
                void TCellBoolArr::SetByValDouble(double val) {
                //this->val = (double)val;
                int y=(int)round(val);
                content[ActiveN-1]=IntToBool(y);
                }
                void TCellBoolArr::SetByValFloat(float val) {
                //this->val = (double)val;
                //content[ActiveN-1]=(float)val;
                //int y=(int)round(val);
                int y=(int)round(val);
                content[ActiveN-1]=IntToBool(y);;
                }
                void TCellBoolArr::SetByValInt(int val) {
                //this->val = (double)val;
                //content[ActiveN-1]=(float)val;
                content[ActiveN-1]=IntToBool(val);
                }
                void TCellBoolArr::SetByValBool(bool val)
                {
                //int i;
                //i = BoolToInt(val);
                ////this->val=(double)i;
                //content[ActiveN-1]=i;
                content[ActiveN-1]=val;
                }
                void TCellBoolArr::SetByValString(QString val) {
                double x;
                int y;
                x=StrToReal(val);
                x=val.toDouble();
                y=IntPart(x);
                y=(int)round(x);
                y=val.toInt();
                content[ActiveN-1]=IntToBool(y);
                } //hin S' ne abl convert!!
                //
                void TCellBoolArr::SetByValDoubleN(double val, int N) {
                //SetByValDouble(val);
                if(N>=1 && N<=content.size()) content[N-1]=IntToBool((int)round(val));
                }
                void TCellBoolArr::SetByValFloatN(float val, int N){
                //SetByValFloat(val);
                //if(N>=1 && N<=content.size()) content[N-1]=(float)val;
                if(N>=1 && N<=content.size())  content[N-1]=IntToBool((int)round(val));
                }
                void TCellBoolArr::SetByValIntN(int val, int N) {
                //SetByValInt(val);
                if(N>=1 && N<=content.size()) content[N-1]=IntToBool(val);
                }
                void TCellBoolArr::SetByValBoolN(bool val, int N) {
                SetByValBool(val);
                if(N>=1 && N<=content.size()) content[N-1]=val;
                }
                void TCellBoolArr::SetByValStringN(QString val, int N) {
                double x;
                int y;
                x=StrToReal(val);
                x=val.toDouble();
                y=IntPart(x);
                y=(int)round(x);
                y=val.toInt();
                if(N>=1 && N<=content.size())content[N-1]=IntToBool(y);
                }
                //
                void TCellBoolArr::SetVal(double val) {
                //this->val = (double)val;
                content[ActiveN-1]=IntToBool((int)round(val));
                }
                void TCellBoolArr::SetVal(int val) {
                //this->val = (double)val;
                //content[ActiveN-1]=(float)val;
                content[ActiveN-1]=IntToBool(val);
                }
                void TCellBoolArr::SetVal(bool val)
                {
                //int i;
                //i = BoolToInt(val);
                ////this->val = (double)i;
                //content[ActiveN-1]=BoolToInt(i);
                content[ActiveN-1]=val;
                }
                void TCellBoolArr::SetVal(QString val) {
                double x=StrToReal(val);
                int y;
                y=IntPart(x);
                y=(int)round(x);
                y=val.toInt();
                content[ActiveN-1]=IntToBool(y);
                }
                //
                void TCellBoolArr::SetValN(double val, int N) {
                //SetVal(val);
                this->Length=content.size();
                if(N>=1 && N<=Length) content[N-1]=IntToBool((int)round(val));
                }
                void TCellBoolArr::SetValN(int val, int N) {
                //SetVal(val);
                //if(N>=1 && N<=content.size())content[N-1]=(float)val;
                this->Length=content.size();
                if(N>=1 && N<=Length) content[N-1]=IntToBool(val);
                }
                void TCellBoolArr::SetValN(bool val, int N) {
                //SetVal(val);
                //int x=BoolToInt(val);
                //if(N>=1 && N<=content.size())content[N-1]=x;
                this->Length=content.size();
                if(N>=1 && N<=Length)content[N-1]=val;
                }
                void TCellBoolArr::SetValN(QString val, int N) {
                double x;
                int y;
                x=StrToReal(val);
                x=val.toDouble();
                y=IntPart(x);
                y=(int)round(x);
                y=val.toInt();
                if(N>=1 && N<=content.size())content[N-1]=y;
                }
                //
                void TCellBoolArr::SetByArrDouble(double* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=(int)round(val[i-1]);
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellBoolArr::SetByArrFloat(float* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                //for(int i=1; i<=MinN; i++) content[i-1]=(float)val[i-1];
                for(int i=1; i<=MinN; i++) content[i-1]=val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellBoolArr::SetByArrInt(int* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=BoolToInt(val[i-1]);
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellBoolArr::SetByArrBool(bool* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=val[i-1];
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellBoolArr::SetByArrString(QString* val, int Q){
                double x;
                int y;
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                x=StrToReal(val[i-1]);
                x=val[i-1].toDouble();
                y=IntPart(x);
                y=(int)round(x);
                y=val[i-1].toInt();
                content[i-1]=IntToBool(y);
                }
                }
                else
                {
                // for(int i=1; i<=MinN; i++){
                //     x=0;
                //     content[i-1]=x;
                //}
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                //
                void TCellBoolArr::SetByArr(double* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=IntToBool((int)round(val[i-1]));
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellBoolArr::SetByArr(int* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=BoolToInt(val[i-1]);
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellBoolArr::SetByArr(bool* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) content[i-1]=BoolToInt(val[i-1]);
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellBoolArr::SetByArr(QString* val, int Q){
                double x;
                int y;
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                x=StrToReal(val[i-1]);
                x=val[i-1].toDouble();
                y=IntPart(x);
                y=(int)round(x);
                y=val[i-1].toInt();
                content[i-1]=IntToBool(y);
                }
                }
                else
                {
                // for(int i=1; i<=MinN; i++){
                //     x=0;
                //     content[i-1]=x;
                //}
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                //
                void TCellBoolArr::AddOrInsDoubleVal(double val, int N){
                //SetByValDouble(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length) content.insert(content.begin()+N-1,(int)round(val));
                else{
                content.push_back(IntToBool((int)round(val)));
                Length++;
                //ActiveN=N;
                }
                }
                void TCellBoolArr::AddOrInsFloatVal(float val, int N){
                //SetByValDouble(val);
                //if(N>=1 && N<=content.size()) content.insert(N-1,(float)val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length) content.insert(content.begin()+N-1,(int)round(val));
                else{
                //content.push_back((float)val);
                content.push_back(IntToBool((int)round(val)));
                Length++;
                //ActiveN=N;
                }
                }
                void TCellBoolArr::AddOrInsIntVal(int val, int N){
                //SetByValDouble(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length) content.insert(content.begin()+N-1,IntToBool(val));
                else{
                content.push_back(IntToBool(val));
                this->Length++;
                //ActiveN=N;
                }
                }
                void TCellBoolArr::AddOrInsBoolVal(bool val, int N){
                int x=BoolToInt(val);
                //SetByValDouble(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length){
                content.insert(content.begin()+N-1,val);
                }else{
                content.push_back(x);
                Length++;
                //ActiveN=N;
                }
                }
                void TCellBoolArr::AddOrInsStringVal(QString val, int N){
                double x=StrToReal(val);
                int y=IntPart(x);
                x=val.toDouble();
                y=(int)round(x);
                //SetByValDouble(val);
                if(N>=1 && N<=content.size()){
                content.insert(content.begin()+N-1,IntToBool(y));
                }else{
                content.push_back(IntToBool(y));
                Length++;
                //ActiveN=N;
                }
                }
                //
                void TCellBoolArr::DelValN(int N) {
                if(N>=1 && N<=content.size()){
                content.erase(content.begin()+N-1);
                }
                }
                //
                void TCellBoolArr::GetDoubleArr(double*&Arr,  int&QItems) {
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new double[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetDoubleValN(i);
                }
                void TCellBoolArr::GetFloatArr( float*&Arr, int&QItems){
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new float[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetFloatValN(i);
                }
                void TCellBoolArr::GetIntArr( int*&Arr,  int&QItems){
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new int[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetIntValN(i);
                }
                void TCellBoolArr::GetBoolArr( bool*&Arr,  int&QItems){
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new bool[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetBoolValN(i);
                }
                void TCellBoolArr::ToStringArr(QString*&Arr, int&QItems) {
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new QString[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = ToStringN(i);
                }
                //
                void TCellBoolArr::SetNameN(QString name, int N) { SetByValStringN(name, N);  }
                void TCellBoolArr::SetName1(QString name) { SetByValStringN(name, 1); }
                void TCellBoolArr::SetName2(QString name) { SetByValStringN(name, 2); }
                void TCellBoolArr::SetName3(QString name) { SetByValStringN(name, 3); }
                void TCellBoolArr::SetNames(QString* Arr, int Q) { SetByArrString(Arr, Q); }
                QString TCellBoolArr::GetNameN(int N) { return ToStringN(N); }
                QString TCellBoolArr::GetName1() { return ToStringN(1); }
                QString TCellBoolArr::GetName2() { return ToStringN(2); }
                QString TCellBoolArr::GetName3() { return ToStringN(3); }
                void TCellBoolArr::GetNames(QString*&Arr, int&QItems) { ToStringArr(Arr, QItems); }
                int TCellBoolArr::GetLengthOfNamesList() { return 1; }
                //
                //     override object Clone(){
                //        return new TCellBoolArr(this->GetDoubleVal());
                //    }
            //};//cl TCellBoolArr


                //cl TCellIntArr

   //class TCellStringArr: TDataCell
                //{
                //    double val;
                //    :
                TCellStringArr::TCellStringArr() {
                QString val="";
                //
                ActiveN=0;
                Length=0;
                //
                ActiveN=1;
                Length=1;
                //
                content.push_back(val);
                }
                TCellStringArr::TCellStringArr(double val) { SetByValDouble(val); }
                TCellStringArr::TCellStringArr(float val) { SetByValFloat(val); }
                TCellStringArr::TCellStringArr(int val) { SetByValInt(val); }
                TCellStringArr::TCellStringArr(bool val) { SetByValBool(val); }
                TCellStringArr::TCellStringArr(QString val) { SetByValString(val); }
                //
                TCellStringArr::TCellStringArr(double* val, int Q) { SetByArrDouble(val, Q); }
                TCellStringArr::TCellStringArr(float* val, int Q) { SetByArrFloat(val, Q); }
                TCellStringArr::TCellStringArr(int* val, int Q) { SetByArrInt(val, Q); }
                TCellStringArr::TCellStringArr(bool* val, int Q) { SetByArrBool(val, Q); }
                TCellStringArr::TCellStringArr(QString* val, int Q) { SetByArrString(val, Q); }
                //
                //hope they will not be needed
                //    TCellStringArr(TCellStringArr&obj){
                //        this->Assign(obj);
                //    }
                //    //
                //    TCellStringArr& operator =(TCellStringArr&obj){
                //        this->Assign(obj);
                //        return*this;
                //    }
                //    //
                //    void Assign(TCellStringArr&obj){
                //        this->data=obj.data;
                //    }
                int TCellStringArr::GetTypeN() { return StringArrayTypeN; }
                int TCellStringArr::GetActiveN() { return ActiveN;}
                void TCellStringArr::SetActiveN(int N) {
                if(N>=1 && N<=content.size()) this->ActiveN=N;
                }
                int TCellStringArr::GetLength() { return Length; }
                void TCellStringArr::SetLength(int L){
                QString val="";
                int iL=content.size();
                if(L>=1 && L<=MaxInt){
                if(L>iL){
                for(int i=1; i<=L-iL; i++){
                content.push_back(val);
                }
                }else if(L<iL){
                for(int i=1; i<=iL-L; i++){
                content.pop_back();
                }
                }
                Length=L;
                }
                }//SetLength
                //
                double TCellStringArr::GetDoubleVal() {
                double val;
                val=StrToReal(content[ActiveN-1]);
                //val=(double)content[ActiveN-1];
                val=content[ActiveN-1].toDouble();
                return val;
                }
                float TCellStringArr::GetFloatVal() {
                float val;
                //val=(floatcontent[ActiveN-1];
                val=(float)StrToReal(content[ActiveN-1]);
                val=content[ActiveN-1].toFloat();
                return val;
                }
                int TCellStringArr::GetIntVal()
                {
                int val;
                //val=content[ActiveN-1];
                val=StrToInt(content[ActiveN-1]);
                val=content[ActiveN-1].toInt();
                //int r;
                //r =(int) round(content[ActiveN-1]);
                //r =(int) round(val);
                //return r;
                return val;
                }
                bool TCellStringArr::GetBoolVal() {
                bool r, ItIsTrueWord, ItIsFalseWord;
                QString val;
                ItIsTrueWord=IsTrueWord(content[ActiveN-1]);
                ItIsFalseWord=IsFalseWord(content[ActiveN-1]);
                //val=content[ActiveN-1];
                if(BoolValByDefault==true){
                if (ItIsFalseWord) r = false;
                else r = true;
                }else{
                if (ItIsTrueWord) r = true;
                else r = false;
                }
                return r;
                }
                QString TCellStringArr::ToString() {
                //int val=content[ActiveN-1];
                //QString s;
                //s=IntToString(val);
                //s.setNum(val);
                //return s;//val.ToString();
                return content[ActiveN-1];
                }
                //
                double TCellStringArr::GetDoubleValN(int N) {
                double val=0;
                if(N>=1 && N<=content.size()){
                val=StrToReal(content[N-1]);
                val=content[N-1].toDouble();
                }
                return val;
                }
                float TCellStringArr::GetFloatValN(int N){
                float val=0;
                if(N>=1 && N<=content.size()){
                val=(float)StrToReal(content[N-1]);
                val=content[N-1].toFloat();
                }
                return val;
                }
                int TCellStringArr::GetIntValN(int N)
                {
                int r=0;
                if(N>=1 && N<=content.size()){
                //r = (int)round(content[N-1]);
                r = StrToInt(content[N-1]);
                r=content[N-1].toInt();
                }
                return r;
                }
                bool TCellStringArr::GetBoolValN(int N)
                {
                bool r=BoolValByDefault, chk=BoolValByDefault;
                if(N>=1 && N<=content.size()){
                //if(chk==true){
                if(BoolValByDefault==true){
                if (IsFalseWord(content[N-1])) r = false;
                else r = true;
                }else{
                if (IsTrueWord(content[N-1])) r = true;
                else r = false;
                }
                }
                return r;
                }
                QString TCellStringArr::ToStringN(int N) {
                QString s="";
                ////QString RealToString(double x, int Repr_IntAndFrac0_ExpAfOrderLim1_ExpAnyhow2=0,  int QAftComma=6, int OrdAfWhichExp=6, int BaseDec=10);
                //int val=content[ActiveN-1];
                ////float val=content[ActiveN-1];
                //s=IntToString(val);
                //s.setNum(val);
                //return s;
                if(N>=1 && N<=content.size()) s=content[N-1];
                return s;
                }
                //
                void TCellStringArr::SetByValDouble(double val) {
                QString s;
                s.setNum(val);
                s=RealToString(val);
                content[ActiveN-1]=s;
                }
                void TCellStringArr::SetByValFloat(float val) {
                QString s;
                s.setNum(val);
                s=RealToString((double)val);
                content[ActiveN-1]=s;
                }
                void TCellStringArr::SetByValInt(int val) {
                QString s;
                s.setNum(val);
                s=IntToStr(val);
                content[ActiveN-1]=s;
                }
                void TCellStringArr::SetByValBool(bool val)
                {
                int i;
                i = BoolToInt(val);
                //this->val=(double)i;
                content[ActiveN-1]=IntToStr(i);
                content[ActiveN-1].setNum(i);
                }
                void TCellStringArr::SetByValString(QString val) {
                content[ActiveN-1]=val;
                }
                //
                void TCellStringArr::SetByValDoubleN(double val, int N) {
                //SetByValDouble(val);
                if(N>=1 && N<=content.size()) content[N-1]=RealToString(val);
                if(N>=1 && N<=content.size()) content[N-1].setNum(val);
                }
                void TCellStringArr::SetByValFloatN(float val, int N){
                //SetByValFloat(val);
                if(N>=1 && N<=content.size()) content[N-1]=RealToString((double)val);
                if(N>=1 && N<=content.size()) content[N-1].setNum(val);
                }
                void TCellStringArr::SetByValIntN(int val, int N) {
                //SetByValInt(val);
                this->Length=this->content.size();
                if(N>=1 && N<=Length) (content[N-1])=IntToStringSimple(val);
                if(N>=1 && N<=Length) content[N-1].setNum(val);
                }
                void TCellStringArr::SetByValBoolN(bool val, int N) {
                SetByValBool(val);
                if(N>=1 && N<=content.size()) content[N-1]=IntToStr(BoolToInt(val));
                if(N>=1 && N<=content.size()) content[N-1].setNum(BoolToInt(val));
                }
                void TCellStringArr::SetByValStringN(QString val, int N) {
                if(N>=1 && N<=content.size())content[N-1]=val;
                }
                //
                void TCellStringArr::SetVal(double val) {
                //this->val = (double)val;
                content[ActiveN-1]=RealToString(val);
                content[ActiveN-1].setNum(val);
                }
                void TCellStringArr::SetVal(int val) {
                //this->val = (double)val;
                //content[ActiveN-1]=(float)val;
                content[ActiveN-1]=IntToStr(val);
                content[ActiveN-1].setNum(val);
                }
                void TCellStringArr::SetVal(bool val)
                {
                int i;
                i = BoolToInt(val);
                content[ActiveN-1]=IntToStr(i);
                content[ActiveN-1].setNum(i);
                }
                void TCellStringArr::SetVal(QString val) {
                content[ActiveN-1]=val;
                }
                //
                void TCellStringArr::SetValN(double val, int N) {
                //SetVal(val);
                if(N>=1 && N<=content.size())content[N-1]=RealToString(val);
                if(N>=1 && N<=content.size())content[N-1].setNum(val);
                }
                void TCellStringArr::SetValN(int val, int N) {
                //SetVal(val);
                //if(N>=1 && N<=content.size())content[N-1]=(float)val;
                if(N>=1 && N<=content.size())content[N-1]=IntToStr(val);
                if(N>=1 && N<=content.size())content[N-1].setNum(val);
                }
                void TCellStringArr::SetValN(bool val, int N) {
                if(N>=1 && N<=content.size())content[N-1]=IntToStr(BoolToInt(val));
                if(N>=1 && N<=content.size())content[N-1].setNum(BoolToInt(val));
                }
                void TCellStringArr::SetValN(QString val, int N) {
                if(N>=1 && N<=content.size())content[N-1]=val;
                }
                //
                void TCellStringArr::SetByArrDouble(double* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                content[i-1]=RealToString(val[i-1]);
                content[i-1].setNum(val[i-1]);
                }
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellStringArr::SetByArrFloat(float* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                content[i-1]=RealToString((double)val[i-1]);
                content[i-1].setNum(val[i-1]);
                }
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellStringArr::SetByArrInt(int* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                content[i-1]=IntToStr(val[i-1]);
                content[i-1].setNum(val[i-1]);
                }
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellStringArr::SetByArrBool(bool* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++) {
                content[i-1]=IntToStr(BoolToInt(val[i-1]));
                content[i-1].setNum(BoolToInt(val[i-1]));
                }
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellStringArr::SetByArrString(QString* val, int Q){
                //double x;
                //int y;
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                //x=StrToReal(val[i-1]);
                //x=val[i-1].toDouble();
                //y=IntPart(x);
                //y=(int)round(x);
                //y=val[i-1].toInt();
                //content[i-1]=y;
                content[i-1]=val[i-1];
                }
                }
                else
                {
                // for(int i=1; i<=MinN; i++){
                //     x=0;
                //     content[i-1]=x;
                //}
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                //
                void TCellStringArr::SetByArr(double* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                //content[i-1]=(int)round(val[i-1]);
                content[i-1]=RealToString(val[i-1]);
                content[i-1].setNum(val[i-1]);
                }
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellStringArr::SetByArr(int* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                //content[i-1]=(int)round(val[i-1]);
                content[i-1]=RealToString((double)val[i-1]);
                content[i-1].setNum(val[i-1]);
                }
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellStringArr::SetByArr(bool* val, int Q){
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                content[i-1]=IntToStr(BoolToInt(val[i-1]));
                content[i-1].setNum(BoolToInt(val[i-1]));
                }
                }
                else
                {
                //for(int i=1; i<=MinN; i++) content[i-1]=0;
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                void TCellStringArr::SetByArr(QString* val, int Q){
                double x;
                int y;
                int MinN;
                if(Length>=Q) MinN=Q; else MinN=Length;
                if(val!=NULL){
                for(int i=1; i<=MinN; i++){
                //x=StrToReal(val[i-1]);
                //x=val[i-1].toDouble();
                //y=IntPart(x);
                //y=(int)round(x);
                //y=val[i-1].toInt();
                //content[i-1]=y;
                content[i-1]=val[i-1];
                }
                }
                else
                {
                // for(int i=1; i<=MinN; i++){
                //     x=0;
                //     content[i-1]=x;
                //}
                //NOp; NULL as argument let it be means nothing to change
                }
                }
                //
                void TCellStringArr::AddOrInsDoubleVal(double val, int N){
                //SetByValDouble(val);
                QString s;
                s=RealToString(val);
                s.setNum(val);
                if(N>=1 && N<=content.size()) content.insert(content.begin()+N-1,s);
                else{
                content.push_back(s);
                Length++;
                //ActiveN=N;
                }
                }
                void TCellStringArr::AddOrInsFloatVal(float val, int N){
                //SetByValDouble(val);
                //if(N>=1 && N<=content.size()) content.insert(N-1,(float)val);
                QString s;
                s=RealToString((double)val);
                s.setNum(val);
                if(N>=1 && N<=content.size()) content.insert(content.begin()+N-1,s);
                else{
                //content.push_back((float)val);
                content.push_back(s);
                Length++;
                //ActiveN=N;
                }
                }
                void TCellStringArr::AddOrInsIntVal(int val, int N){
                //SetByValDouble(val);
                QString s;
                s=IntToStringSimple(val);
                s.setNum(val);
                if(N>=1 && N<=content.size()) content.insert(content.begin()+N-1,s);
                else{
                content.push_back(s);
                Length++;
                //ActiveN=N;
                }
                }
                void TCellStringArr::AddOrInsBoolVal(bool val, int N){
                int x=BoolToInt(val);
                //SetByValDouble(val);
                QString s;
                s=IntToStringSimple(x);
                s.setNum(x);
                if(N>=1 && N<=content.size()){
                content.insert(content.begin()+N-1,s);
                }else{
                content.push_back(s);
                Length++;
                //ActiveN=N;
                }
                }
                void TCellStringArr::AddOrInsStringVal(QString val, int N){
                //double x=StrToReal(val);
                //int y=IntPart(x);
                //x=val.toDouble();
                //y=(int)round(x);
                //SetByValDouble(val);
                if(N>=1 && N<=content.size()){
                content.insert(content.begin()+N-1,val);
                }else{
                content.push_back(val);
                Length++;
                //ActiveN=N;
                }
                }
                //
                void TCellStringArr::DelValN(int N) {
                if(N>=1 && N<=content.size()){
                content.erase(content.begin()+N-1);
                }
                }
                //
                void TCellStringArr::GetDoubleArr(double*&Arr,  int&QItems) {
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new double[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetDoubleValN(i);
                }
                void TCellStringArr::GetFloatArr( float*&Arr, int&QItems){
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new float[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetFloatValN(i);
                }
                void TCellStringArr::GetIntArr( int*&Arr,  int&QItems){
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new int[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetIntValN(i);
                }
                void TCellStringArr::GetBoolArr( bool*&Arr,  int&QItems){
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new bool[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = GetBoolValN(i);
                }
                void TCellStringArr::ToStringArr(QString*&Arr, int&QItems) {
                QItems=Length;
                if(Arr!=NULL){
                delete[]Arr;
                Arr=new QString[QItems];
                }
                for(int i=1; i<=QItems; i++) Arr[i-1] = ToStringN(i);
                }
                //
                void TCellStringArr::SetNameN(QString name, int N) { SetByValStringN(name, N);  }
                void TCellStringArr::SetName1(QString name) { SetByValStringN(name, 1); }
                void TCellStringArr::SetName2(QString name) { SetByValStringN(name, 2); }
                void TCellStringArr::SetName3(QString name) { SetByValStringN(name, 3); }
                void TCellStringArr::SetNames(QString* Arr, int Q) { SetByArrString(Arr, Q); }
                QString TCellStringArr::GetNameN(int N) { return ToStringN(N); }
                QString TCellStringArr::GetName1() { return ToStringN(1); }
                QString TCellStringArr::GetName2() { return ToStringN(2); }
                QString TCellStringArr::GetName3() { return ToStringN(3); }
                void TCellStringArr::GetNames(QString*&Arr, int&QItems) { ToStringArr(Arr, QItems); }
                int TCellStringArr::GetLengthOfNamesList() { return 1; }
                //
                //     override object Clone(){
                //        return new TCellStringArr(this->GetDoubleVal());
                //    }
                //};//cl TCellStringArr




    // class DataCell:ICloneable
    //        {
    //            TDataCell cell;
    //             DataCell() {
    //                cell = NULL;
    //                SetDefault0();
    //            }
            //
    DataCell::DataCell() {
        cell = NULL;
        SetDefault0();
    }
    DataCell::DataCell(double val)
    {
        cell = NULL;
        SetDefault0();
        SetValAndTypeDouble(val);
    }
    DataCell::DataCell(float val)
    {
        cell = NULL;
        SetDefault0();
        SetValAndTypeFloat(val);
    }
    DataCell::DataCell(int val)
    {
         cell = NULL;
         SetDefault0();
         SetValAndTypeInt(val);
    }
    DataCell::DataCell(bool val)
    {
        cell = NULL;
        SetDefault0();
        SetValAndTypeBool(val);
    }
    DataCell::DataCell(QString val)
    {
        cell = NULL;
        SetDefault0();
        SetValAndTypeString(val);
    }
    DataCell::DataCell(double*arr, int Length)
    {
        cell = NULL;
        SetDefault0();
        SetArrAndTypeDouble(arr, Length);
    }
    DataCell::DataCell(float*arr, int Length)
    {
        cell = NULL;
        SetDefault0();
        SetArrAndTypeFloat(arr, Length);
    }
    DataCell::DataCell(int*arr, int Length)
    {
         cell = NULL;
         SetDefault0();
         SetArrAndTypeInt(arr, Length);
    }
    DataCell::DataCell(bool*arr, int Length)
    {
        cell = NULL;
        SetDefault0();
        SetArrAndTypeBool(arr, Length);
    }
    DataCell::DataCell(QString*arr, int Length)
    {
         cell = NULL;
         SetDefault0();
         SetArrAndTypeString(arr, Length);
    }
    DataCell::DataCell(int val, bool ConstNotVar)
    {
        cell = NULL;
        SetDefault0();
        if (ConstNotVar)
        {
            cell = new TCellUniqueNumKeeper(val);
        }
        else
        {
            SetValAndTypeInt(val);
        }
     }
     DataCell::DataCell(int TypeN, int N)
     {
         double DoubleVal = 0;
         float FloatVal = 0;
         int IntVal = 0;
         bool BoolVal =BoolValByDefault;
         QString StringVal = "";
         double *DoubleArr = NULL;
         float* FloatArr = NULL;
         int* IntArr = NULL;
         bool* BoolArr = NULL;
         QString* StringArr = NULL;
         cell = NULL;
         //SetDefault0();
         SetDefault0();
         switch (TypeN)
         {
              case DoubleTypeN:
                cell = new TCellDouble();
              break;
              case FloatTypeN:
                cell = new TCellFloat();
              break;
              case IntTypeN:
                cell = new TCellInt();
              break;
              case BoolTypeN:
                cell = new TCellBool();
              break;
              case StringTypeN:
                cell = new TCellString();
              break;
              case DoubleArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                DoubleArr = new double[N];
                for (int i = 1; i <= N; i++) DoubleArr[i - 1] = 0;
                cell = new TCellDoubleMemo(DoubleArr, N);
                delete[]DoubleArr;
              break;
              case FloatArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                FloatArr = new float[N];
                for (int i = 1; i <= N; i++) FloatArr[i - 1] = 0;
                cell = new TCellFloatMemo(FloatArr, N);
                delete[]FloatArr;
              break;
              case IntArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                IntArr = new int[N];
                for (int i = 1; i <= N; i++) IntArr[i - 1] = 0;
                cell = new TCellFloatMemo(IntArr, N);
                delete[]IntArr;
              break;
              case BoolArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                BoolArr = new bool[N];
                for (int i = 1; i <= N; i++) BoolArr[i - 1] = BoolValByDefault;
                cell = new TCellBoolMemo(IntArr, N);
                delete[]BoolArr;
               break;
               case StringArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                StringArr = new QString[N];
                for (int i = 1; i <= N; i++) StringArr[i - 1] = "";
                cell = new TCellStringMemo(StringArr, N);
                delete[]StringArr;
               break;
               case UniqueIntValKeeperTypeN:
                cell = new TCellUniqueNumKeeper(N);
               break;
          }
          this.cell.SetActiveN(1);
          //SetActiveN(1);
      }
      DataCell::DataCell(DataCellTypeInfo TypeInf)
      {
          int TypeN=TypeInf.GetTypeN();
          int length=TypeInf.GetLength();
          int N=length;
          double DoubleVal = 0;
          float FloatVal = 0;
          int IntVal = 0;
          bool BoolVal = BoolValByDefault;
          QString StringVal = "";
          double * DoubleArr = NULL;
          float* FloatArr = NULL;
          int* IntArr = NULL;
          bool* BoolArr = NULL;
          QString* StringArr = NULL;
          cell = NULL;
          //SetDefault0();
          switch (TypeN)
          {
               case DoubleTypeN:
                cell = new TCellDouble();
               break;
               case FloatTypeN:
                cell = new TCellFloat();
               break;
               case IntTypeN:
                cell = new TCellInt();
               break;
               case BoolTypeN:
                cell = new TCellBool();
               break;
               case StringTypeN:
                cell = new TCellString();
               break;
               case DoubleArrayTypeN:
                if (length < 1 || N > MaxInt) N = 1;
                DoubleArr = new double[N];
                for (int i = 1; i <= N; i++) DoubleArr[i - 1] = 0;
                cell = new TCellDoubleMemo(DoubleArr, N);
                delete[]DoubleArr;
               break;
               case FloatArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                FloatArr = new float[N];
                for (int i = 1; i <= N; i++) FloatArr[i - 1] = 0;
                cell = new TCellFloatMemo(FloatArr, N);
                delete[]FloatArr;
               break;
               case IntArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                IntArr = new int[N];
                for (int i = 1; i <= N; i++) IntArr[i - 1] = 0;
                cell = new TCellFloatMemo(IntArr, N);
                delete[]IntArr;
               break;
               case BoolArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                BoolArr = new bool[N];
                for (int i = 1; i <= N; i++) BoolArr[i - 1] = BoolValByDefault;
                cell = new TCellBoolMemo(IntArr, N);
                delete[]BoolArr;
               break;
               case StringArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                StringArr = new QString[N];
                for (int i = 1; i <= N; i++) StringArr[i - 1] = "";
                cell = new TCellStringMemo(StringArr, N);
                delete[]StringArr;
               break;
               case UniqueIntValKeeperTypeN:
                cell = new TCellUniqueNumKeeper(N);
               break;
           }
           this->cell.SetActiveN(1);
      }
      //
      void DataCell::SetDefault0()
      {
          int TypeN = DefaultAnyCellTypeN;
          switch (TypeN)
          {
               case DoubleTypeN:
                cell = new TCellDouble();
               break;
               case FloatTypeN:
                cell = new TCellFloat();
               break;
               case IntTypeN:
                cell = new TCellInt();
               break;
               case BoolTypeN:
                cell = new TCellBool();
               break;
               case StringTypeN:
                cell = new TCellString();
               break;
               case DoubleArrayTypeN:
                cell = new TCellDoubleMemo();
               break;
               case FloatArrayTypeN:
                cell = new TCellFloatMemo();
               break;
               case IntArrayTypeN:
                cell = new TCellIntMemo();
               break;
               case BoolArrayTypeN:
                cell = new TCellBoolMemo();
               break;
               case StringArrayTypeN:
                cell = new TCellStringMemo();
              break;
           }//swch
        }//fn
            //
      TDataCell* DataCell::GetCell() {
          return &(this->cell);
      }
            //
      DataCellTypeInfo DataCell::GetTypeInfo()
      {
           int TypeN = GetTypeN();
           int length = GetLength();
           DataCellTypeInfo TypeInf = new DataCellTypeInfo(TypeN, length);
           return TypeInf;
       }
       void DataCell::SetTypeAndDefaultValByTypeInf(DataCellTypeInfo TypeInf, bool PreserveVal=false)
       {
           TableCellAccessConfiguration cfg=new TableCellAccessConfiguration();
           int TypeN = TypeInf.GetTypeN();
           int length = TypeInf.GetLength();
           cfg.LengthOfArrCellTypes=length;
           cfg.PreserveVal=PreserveVal;
           this.SetTypeN(TypeN, cfg);
       }
       //
             double DataCell::GetDoubleVal()
            {
                return cell.GetDoubleVal();
            }
             float DataCell::GetFloatVal()
            {
                return cell.GetFloatVal();
            }
             int DataCell::GetIntVal()
            {
                return cell.GetIntVal();
            }
             bool DataCell::GetBoolVal()
            {
                return cell.GetBoolVal();
            }
            QString DataCell::ToString()
            {
                QString s;
                s=RealToStr(this->val);
                s.setNum(this->val);
                return cell.ToString();
            }
            //
            void DataCell::GetDoubleArr(double*&vals, int&count)
            {
                cell.GetDoubleArr(vals, count);
            }
             void DataCell::GetFloatArr(float*&vals, int&count)
            {
                cell.GetFloatArr(vals, count);
            }
             void DataCell::GetIntArr(int*&vals, int&count)
            {
                cell.GetIntArr(vals, count);
            }
             void DataCell::GetBoolArr(bool*&vals, int&count)
            {
                cell.GetBoolArr(vals,count);
            }
             void DataCell::ToStringArr(QString*&vals, int&count)
            {
                cell.ToStringArr(vals, count);
            }
            //
             double DataCell::GetDoubleValN(int N)
            {
                return cell.GetDoubleValN(N);
            }
             float DataCell::GetFloatValN(int N)
            {
                return cell.GetFloatValN(N);
            }
             int DataCell::GetIntValN(int N)
            {
                return cell.GetIntValN(N);
            }
             bool DataCell::GetBoolValN(int N)
            {
                return cell.GetBoolValN(N);
            }
             string DataCell::ToStringN(int N)
            {
                return cell.ToStringN(N);
            }
            //
             void DataCell::SetVal(double val){ cell.SetVal(val); }
             void DataCell::SetVal(int val){ cell.SetVal(val); }
             void DataCell::SetVal(bool val) { cell.SetVal(val); }
             void DataCell::SetVal(QString val) { cell.SetVal(val); }
            //
             void DataCell::SetValN(double val, int N) { cell.SetValN(val, N); }
             void DataCell::SetValN(float val, int N) { cell.SetValN(val, N); }
             void DataCell::SetValN(int val, int N) { cell.SetValN(val, N); }
             void DataCell::SetValN(bool val, int N) { cell.SetValN(val, N); }
             void DataCell::SetValN(QString val, int N) { cell.SetValN(val, N); }
            //
             int DataCell::GetTypeN() { return cell.GetTypeN(); }
             int DataCell::GetLength() {
                int N = 0;
                if (cell != NULL) N = cell.GetLength();
                return N;
            }
             int DataCell::GetActiveN() {
                int N = 0;
                if (cell != NULL) N = cell.GetActiveN();
                return N;
            }
            //
             void DataCell::SetActiveN(int N)
            {
                cell.SetActiveN(N);
            }
             void DataCell::SetLength(int Length){
                cell.SetLength(Length);
            }
            //
             void DataCell::DelValN(int N)
            {
                cell.DelValN(N);
            }
            //
             void DataCell::AddOrInsDoubleVal(double val, int N)
            {
                cell.AddOrInsDoubleVal(val, N);
            }
             void DataCell::AddOrInsFloatVal(float val, int N)
            {
                cell.AddOrInsFloatVal(val, N);
            }
             void DataCell::AddOrInsIntVal(int val, int N)
            {
                cell.AddOrInsIntVal(val, N);
            }
             void DataCell::AddOrInsBoolVal(bool val, int N)
            {
                cell.AddOrInsBoolVal(val, N);
            }
             void DataCell::AddOrInsStringVal(string val, int N)
            {
                cell.AddOrInsStringVal(val, N);
            }
            //
             void DataCell::Assign(double val)
            {
                cell = new TCellDouble();
                cell.SetVal(val);
                //cell.SetValAndT
            }
             void DataCell::Assign(float val)
            {
                cell = new TCellFloat();
                cell.SetVal(val);
            }
             void DataCell::Assign(int val)
            {
                cell = new TCellInt();
                cell.SetVal(val);
            }
             void DataCell::Assign(bool val)
            {
                cell = new TCellBool();
                cell.SetVal(val);
            }
             void DataCell::Assign(QString val)
            {
                cell = new TCellString();
                cell.SetVal(val);
            }
             void DataCell::Assign(double val, int N)
            {
                double[]arr=NULL;
                int ActualLength, PrevLength=cell.GetLength(), MinLength;
                TDataCell bufCell;
                if (cell==NULL || (cell.GetTypeN() != DoubleTypeN && PrevLength < N))
                {
                bufCell=cell;
                if(N<PrevLength) ActualLength=PrevLength; else ActualLength=N;
                if(ActualLength<=PrevLength) MinLength=ActualLength; else MinLength=PrevLength;
                arr=new double[ActualLength];
                for(int i=1; i<=ActualLength; i++) arr[i-1]=0;
                for(int i=1; i<=MinLength; i++) arr[i-1]=bufCell.GetDoubleValN(N);
                cell = new TCellDoubleMemo(arr, ActualLength);
                }
                cell.SetValN(val, N);
            }
             void DataCell::Assign(float val, int N)
            {
                float[] arr = NULL;
                int ActualLength, PrevLength = cell.GetLength(), MinLength;
                TDataCell bufCell;
                if (cell==NULL || (cell.GetTypeN() != DoubleTypeN && PrevLength < N))
                {
                bufCell = cell;
                if (N < PrevLength) ActualLength = PrevLength; else ActualLength = N;
                if (ActualLength <= PrevLength) MinLength = ActualLength; else MinLength = PrevLength;
                arr = new float[ActualLength];
                for (int i = 1; i <= ActualLength; i++) arr[i - 1] = 0;
                for (int i = 1; i <= MinLength; i++) arr[i - 1] = bufCell.GetFloatValN(N);
                cell = new TCellFloatMemo(arr, ActualLength);
                }
                cell.SetValN(val, N);
            }
             void DataCell::Assign(int val, int N)
            {
                int[] arr = NULL;
                int ActualLength, PrevLength = cell.GetLength(), MinLength;
                TDataCell bufCell;
                if (cell==NULL || (cell.GetTypeN() != DoubleTypeN && PrevLength < N))
                {
                bufCell = cell;
                if (N < PrevLength) ActualLength = PrevLength; else ActualLength = N;
                if (ActualLength <= PrevLength) MinLength = ActualLength; else MinLength = PrevLength;
                arr = new int[ActualLength];
                for (int i = 1; i <= ActualLength; i++) arr[i - 1] = 0;
                for (int i = 1; i <= MinLength; i++) arr[i - 1] = bufCell.GetIntValN(N);
                cell = new TCellIntMemo(arr, ActualLength);
                }
                cell.SetValN(val, N);
            }
             void DataCell::Assign(bool val, int N)
            {
                bool[] arr = NULL;
                int ActualLength, PrevLength = cell.GetLength(), MinLength;
                TDataCell bufCell;
                if (cell==NULL || (cell.GetTypeN() != DoubleTypeN && PrevLength < N))
                {
                bufCell = cell;
                if (N < PrevLength) ActualLength = PrevLength; else ActualLength = N;
                if (ActualLength <= PrevLength) MinLength = ActualLength; else MinLength = PrevLength;
                arr = new bool[ActualLength];
                for (int i = 1; i <= ActualLength; i++) arr[i - 1] = BoolValByDefault;
                for (int i = 1; i <= MinLength; i++) arr[i - 1] = bufCell.GetBoolValN(N);
                cell = new TCellBoolMemo(arr, ActualLength);
                }
                cell.SetValN(val, N);
            }
             void DataCell::Assign(QString val, int N)
            {
                QString* arr = NULL;
                int ActualLength, PrevLength = cell.GetLength(), MinLength;
                TDataCell bufCell;
                if (cell==NULL || (cell.GetTypeN() != DoubleTypeN && PrevLength < N))
                {
                bufCell = cell;
                if (N < PrevLength) ActualLength = PrevLength; else ActualLength = N;
                if (ActualLength <= PrevLength) MinLength = ActualLength; else MinLength = PrevLength;
                arr = new string[ActualLength];
                for (int i = 1; i <= ActualLength; i++) arr[i - 1] = "";
                for (int i = 1; i <= MinLength; i++) arr[i - 1] = bufCell.ToStringN(N);
                cell = new TCellBoolMemo(arr, ActualLength);
                }
                cell.SetValN(val, N);
            }
             void DataCell::Assign(double* val, int count)
            {
                cell = new TCellDoubleMemo(val, count);
            }
             void DataCell::Assign(float* val, int count)
            {
                cell = new TCellFloatMemo(val, count);
            }
             void DataCell::Assign(int* val, int count)
            {
                cell = new TCellIntMemo(val, count);
            }
             void DataCell::Assign(bool* val, int count)
            {
                cell = new TCellBoolMemo(val,  count);
            }
             void DataCell::Assign(QString* val, int count)
            {
                cell = new TCellStringMemo(val, count);
            }
             void DataCell::Assign(double* val, int count, QString name1, QString name2, QString name3)
            {
                cell = new TDataBaseFieldHeader_WithItems_Double(val, count, name1, name2, name3);
            }
             void DataCell::Assign(QString* val, int count, QString name1, QString name2, QString name3)
            {
                cell = new TDataBaseFieldHeader_WithItems_String(val, count, name1, name2, name3);
            }
            //void DataCell::Assign(TDataCell obj)//dynamic cast?
            //{
            //    cell = obj;
            //}
            void DataCell::Assign(TDataCell obj)
            {
                int TypeN, Length=0;
                double DoubleVal;
                float FloatVal;
                int IntVal;
                bool BoolVal;
                string StringVal;
                double* DoubleArr = NULL;
                float* FloatArr = NULL;
                int* IntArr = NULL;
                bool* BoolArr = NULL;
                QString* StringArr = NULL;
                //
                if(this->cell!=NULL) delete cell;
                //
                if (obj == NULL) cell = NULL;
                else
                {
                TypeN = obj.GetTypeN();
                switch (TypeN)
                {
                case DoubleTypeN:
                DoubleVal = obj.GetDoubleVal();
                cell = new TCellDouble(DoubleVal);
                break;
                case FloatTypeN:
                FloatVal = obj.GetFloatVal();
                cell = new TCellFloat(FloatVal);
                break;
                case IntTypeN:
                IntVal = obj.GetIntVal();
                cell = new TCellInt(IntVal);
                break;
                case BoolTypeN:
                BoolVal = obj.GetBoolVal();
                cell = new TCellBool(BoolVal);
                break;
                case StringTypeN:
                StringVal = obj.ToString();
                cell = new TCellString(StringVal);
                break;
                case DoubleArrayTypeN:
                obj.GetDoubleArr(DoubleArr, Length);
                cell = new TCellDoubleMemo(DoubleArr, Length);
                break;
                case FloatArrayTypeN:
                obj.GetFloatArr(FloatArr, Length);
                cell = new TCellFloatMemo(FloatArr, Length);
                break;
                case IntArrayTypeN:
                obj.GetIntArr(IntArr, Length);
                cell = new TCellIntMemo(IntArr, Length);
                break;
                case BoolArrayTypeN:
                obj.GetBoolArr(BoolArr, Length);
                cell = new TCellBoolMemo(BoolArr, Length);
                break;
                case StringArrayTypeN:
                obj.ToStringArr(StringArr, Length);
                cell = new TCellStringMemo(StringArr, Length);
                break;
                }//swch
                }//if
            }
             void DataCell::Assign(DataCell obj)
            {
                int TypeN, Length=0;
                double DoubleVal;
                float FloatVal;
                int IntVal;
                bool BoolVal;
                string StringVal;
                double* DoubleArr = NULL;
                float* FloatArr = NULL;
                int* IntArr = NULL;
                bool* BoolArr = NULL;
                QString* StringArr = NULL;
                if (obj == NULL) cell = NULL;
                else
                {
                TypeN = obj.GetTypeN();
                switch (TypeN)
                {
                case DoubleTypeN:
                DoubleVal = obj.GetDoubleVal();
                cell = new TCellDouble(DoubleVal);
                break;
                case FloatTypeN:
                FloatVal = obj.GetFloatVal();
                cell = new TCellFloat(FloatVal);
                break;
                case IntTypeN:
                IntVal = obj.GetIntVal();
                cell = new TCellInt(IntVal);
                break;
                case BoolTypeN:
                BoolVal = obj.GetBoolVal();
                cell = new TCellBool(BoolVal);
                break;
                case StringTypeN:
                StringVal = obj.ToString();
                cell = new TCellString(StringVal);
                break;
                case DoubleArrayTypeN:
                obj.GetDoubleArr(DoubleArr, Length);
                cell = new TCellDoubleMemo(DoubleArr, Length);
                break;
                case FloatArrayTypeN:
                obj.GetFloatArr(FloatArr, Length);
                cell = new TCellFloatMemo(FloatArr, Length);
                break;
                case IntArrayTypeN:
                obj.GetIntArr(IntArr, Length);
                cell = new TCellIntMemo(IntArr, Length);
                break;
                case BoolArrayTypeN:
                obj.GetBoolArr(BoolArr, Length);
                cell = new TCellBoolMemo(BoolArr, Length);
                break;
                case StringArrayTypeN:
                obj.ToStringArr(StringArr, Length);
                cell = new TCellStringMemo(StringArr, Length);
                break;
                }//swch
                }//if
            }//fn asgn
            //mark34-1
             void DataCell::AssignBy(TDataCell *CellFrom)
            {
                TDataCell CellTo = this.cell;
                int TypeTo = CellTo.GetTypeN(), TypeFrom = CellFrom.GetTypeN(), LenFrom = CellFrom.GetLength(), LenTo = CellTo.GetLength(), LenMin;
                double DoubleVal;
                float FloatVal;
                int IntVal;
                bool BoolVal;
                string StringVal;
                double[] DoubleArr = NULL;
                float[] FloatArr = NULL;
                int[] IntArr = NULL;
                bool[] BoolArr = NULL;
                QString* StringArr = NULL;
                if (LenFrom >= LenTo) LenMin = LenFrom; else LenMin = LenTo;
                switch (TypeFrom)
                {
                case DoubleTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                //DoubleVal=CellFrom.GetDoubleVal();
                //CellTo.SetByValDouble(DoubleVal);
                break;
                case FloatTypeN:
                //CellTo.SetByValFloat(CellFrom.GetFloatVal());
                //CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                FloatVal = CellFrom.GetFloatVal();
                CellTo.SetByValFloat(FloatVal);
                DoubleVal = CellFrom.GetDoubleVal();
                CellTo.SetByValDouble(DoubleVal);
                break;
                case IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                break;
                case BoolTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                break;
                case StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                break;
                case DoubleArrayTypeN:
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellFrom.GetDoubleArr(DoubleArr, enFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case DoubleItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case IntItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case StringItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case FloatTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                DoubleVal = CellFrom.GetDoubleVal();
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                FloatVal = CellFrom.GetFloatVal();
                CellTo.SetByValFloat(FloatVal);
                break;
                case FloatTypeN:
                FloatVal = CellFrom.GetFloatVal();
                CellTo.SetByValFloat(FloatVal);
                //IntVal=CellFrom.GetIntVal();
                //CellTo.SetByValInt(IntVal);
                break;
                case IntTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                break;
                case DoubleArrayTypeN:
                FloatVal = CellFrom.GetFloatVal();
                CellTo.SetByValFloat(FloatVal);
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                //CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                //CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case DoubleItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case IntItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case StringItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case IntTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case IntTypeN:
                //CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellTo.SetByValString(CellFrom.ToString());
                break;
                case DoubleArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                //CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                //CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case DoubleItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case IntItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case StringItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case BoolTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                //CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case IntTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellTo.SetByValString(CellFrom.ToString());
                break;
                case DoubleArrayTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                //CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                //CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case DoubleItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case IntItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case StringItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case StringTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                //CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellTo.SetByValString(CellFrom.ToString());
                break;
                case FloatTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                break;
                case IntTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                //CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case DoubleArrayTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case DoubleItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case IntItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case StringItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case DoubleArrayTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                //CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                //CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case FloatTypeN:
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                break;
                case IntTypeN:
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case DoubleArrayTypeN:
                //CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case DoubleItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case IntItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case StringItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case FloatArrayTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case FloatTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case BoolTypeN:
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case DoubleArrayTypeN:
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case FloatArrayTypeN:
                //CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                //CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case DoubleItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case IntItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case StringItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case IntArrayTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case FloatTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolTypeN:
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case DoubleArrayTypeN:
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                //CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                //CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case DoubleItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case IntItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case StringItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case BoolArrayTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case FloatTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case BoolTypeN:
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case DoubleArrayTypeN:
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case BoolArrayTypeN:
                //CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                //CellTo.SetByArrInt(IntArr, LenFrom);
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case DoubleItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case IntItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case StringItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case StringArrayTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case FloatTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case IntTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolTypeN:
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case DoubleArrayTypeN:
                CellFrom.GetDoubleArr(DoubleArr, LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                CellFrom.GetFloatArr(FloatArr, LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellFrom.GetIntArr(IntArr, LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                CellFrom.GetBoolArr(BoolArr, LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                //CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                //CellTo.SetByArrString(StringArr, LenFrom);
                CellFrom.ToStringArr(StringArr, LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case DoubleItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case IntItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case StringItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case UniqueIntValKeeperTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case StringTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case DoubleArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case IntArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case StringArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case UniqueIntValKeeperTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case DoubleItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case IntItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case StringItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case DoubleItemsFieldHeaderCellTypeN: //ne done!
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case StringTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case DoubleArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case IntArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case StringArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case UniqueIntValKeeperTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case DoubleItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case IntItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case StringItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case IntItemsFieldHeaderCellTypeN: //ne done!
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case StringTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case DoubleArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case IntArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case StringArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case UniqueIntValKeeperTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case DoubleItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case IntItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case StringItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case StringItemsFieldHeaderCellTypeN: //ne done!
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case StringTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case DoubleArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case IntArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case StringArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case UniqueIntValKeeperTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case DoubleItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case IntItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                case StringItemsFieldHeaderCellTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                }//switch
                this.cell=CellTo;
            }
             void DataCell::AssignBy(DataCell obj)
            {
                TDataCell ObjCell = obj.GetCell();
                AssignBy(ObjCell);
            }
            /*
            //mark34-2
         class DataCell
        {
            TDataCell cell;
             DataCell() {
                cell = NULL;
                SetDefault0();
            }
            //
             DataCell(double val)
            {
                cell = NULL;
                SetDefault0();
                SetValAndTypeDouble(val);
            }
             DataCell(float val)
            {
                cell = NULL;
                SetDefault0();
                SetValAndTypeFloat(val);
            }
             DataCell(int val)
            {
                cell = NULL;
                SetDefault0();
                SetValAndTypeInt(val);
            }
             DataCell(bool val)
            {
                cell = NULL;
                SetDefault0();
                SetValAndTypeBool(val);
            }
             DataCell(string val)
            {
                cell = NULL;
                SetDefault0();
                SetValAndTypeString(val);
            }
             DataCell(double[] arr, int Length)
            {
                cell = NULL;
                SetDefault0();
                SetArrAndTypeDouble(arr, Length);
            }
             DataCell(float[] arr, int Length)
            {
                cell = NULL;
                SetDefault0();
                SetArrAndTypeFloat(arr, Length);
            }
             DataCell(int[] arr, int Length)
            {
                cell = NULL;
                SetDefault0();
                SetArrAndTypeInt(arr, Length);
            }
             DataCell(bool[] arr, int Length)
            {
                cell = NULL;
                SetDefault0();
                SetArrAndTypeBool(arr, Length);
            }
             DataCell(string[] arr, int Length)
            {
                cell = NULL;
                SetDefault0();
                SetArrAndTypeString(arr, Length);
            }
             DataCell(int val, bool ConstNotVar)
            {
                cell = NULL;
                SetDefault0();
                if (ConstNotVar)
                {
                cell = new TCellUniqueNumKeeper(val);
                }
                else
                {
                SetValAndTypeInt(val);
                }
            }
             DataCell(int TypeN, int N)
            {
                double DoubleVal = 0;
                float FloatVal = 0;
                int IntVal = 0;
                bool BoolVal = BoolValByDefault;
                string StringVal = "";
                double []DoubleArr = NULL;
                float[] FloatArr = NULL;
                int[] IntArr = NULL;
                bool[] BoolArr = NULL;
                string[] StringArr = NULL;
                cell = NULL;
                //SetDefault0();
                SetDefault0();
                switch (TypeN)
                {
                case DoubleTypeN:
                cell = new TCellDouble();
                break;
                case FloatTypeN:
                cell = new TCellFloat();
                break;
                case IntTypeN:
                cell = new TCellInt();
                break;
                case BoolTypeN:
                cell = new TCellBool();
                break;
                case StringTypeN:
                cell = new TCellString();
                break;
                case DoubleArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                DoubleArr = new double[N];
                for (int i = 1; i <= N; i++) DoubleArr[i - 1] = 0;
                cell = new TCellDoubleMemo(DoubleArr, N);
                break;
                case FloatArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                FloatArr = new float[N];
                for (int i = 1; i <= N; i++) FloatArr[i - 1] = 0;
                cell = new TCellFloatMemo(FloatArr, N);
                break;
                case IntArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                IntArr = new int[N];
                for (int i = 1; i <= N; i++) IntArr[i - 1] = 0;
                cell = new TCellFloatMemo(IntArr, N);
                break;
                case BoolArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                BoolArr = new bool[N];
                for (int i = 1; i <= N; i++) BoolArr[i - 1] = BoolValByDefault;
                cell = new TCellBoolMemo(IntArr, N);
                break;
                case StringArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                StringArr = new string[N];
                for (int i = 1; i <= N; i++) StringArr[i - 1] = "";
                cell = new TCellStringMemo(StringArr, N);
                break;
                case UniqueIntValKeeperTypeN:
                cell = new TCellUniqueNumKeeper(N);
                break;
                }
                this.cell.SetActiveN(1);
                //SetActiveN(1);
            }
             DataCell(DataCellTypeInfo TypeInf)
            {
                int TypeN=TypeInf.GetTypeN();
                int length=TypeInf.GetLength();
                int N=length;
                double DoubleVal = 0;
                float FloatVal = 0;
                int IntVal = 0;
                bool BoolVal = BoolValByDefault;
                string StringVal = "";
                double []DoubleArr = NULL;
                float[] FloatArr = NULL;
                int[] IntArr = NULL;
                bool[] BoolArr = NULL;
                string[] StringArr = NULL;
                cell = NULL;
                //SetDefault0();
                switch (TypeN)
                {
                case DoubleTypeN:
                cell = new TCellDouble();
                break;
                case FloatTypeN:
                cell = new TCellFloat();
                break;
                case IntTypeN:
                cell = new TCellInt();
                break;
                case BoolTypeN:
                cell = new TCellBool();
                break;
                case StringTypeN:
                cell = new TCellString();
                break;
                case DoubleArrayTypeN:
                if (length < 1 || N > MaxInt) N = 1;
                DoubleArr = new double[N];
                for (int i = 1; i <= N; i++) DoubleArr[i - 1] = 0;
                cell = new TCellDoubleMemo(DoubleArr, N);
                break;
                case FloatArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                FloatArr = new float[N];
                for (int i = 1; i <= N; i++) FloatArr[i - 1] = 0;
                cell = new TCellFloatMemo(FloatArr, N);
                break;
                case IntArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                IntArr = new int[N];
                for (int i = 1; i <= N; i++) IntArr[i - 1] = 0;
                cell = new TCellFloatMemo(IntArr, N);
                break;
                case BoolArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                BoolArr = new bool[N];
                for (int i = 1; i <= N; i++) BoolArr[i - 1] = BoolValByDefault;
                cell = new TCellBoolMemo(IntArr, N);
                break;
                case StringArrayTypeN:
                if (N < 1 || N > MaxInt) N = 1;
                StringArr = new string[N];
                for (int i = 1; i <= N; i++) StringArr[i - 1] = "";
                cell = new TCellStringMemo(StringArr, N);
                break;
                case UniqueIntValKeeperTypeN:
                cell = new TCellUniqueNumKeeper(N);
                break;
                }
                this.cell.SetActiveN(1);
            }
            //
             void SetDefault0()
            {
                int TypeN = DefaultAnyCellTypeN;
                switch (TypeN)
                {
                case DoubleTypeN:
                cell = new TCellDouble();
                break;
                case FloatTypeN:
                cell = new TCellFloat();
                break;
                case IntTypeN:
                cell = new TCellInt();
                break;
                case BoolTypeN:
                cell = new TCellBool();
                break;
                case StringTypeN:
                cell = new TCellString();
                break;
                case DoubleArrayTypeN:
                cell = new TCellDoubleMemo();
                break;
                case FloatArrayTypeN:
                cell = new TCellFloatMemo();
                break;
                case IntArrayTypeN:
                cell = new TCellIntMemo();
                break;
                case BoolArrayTypeN:
                cell = new TCellBoolMemo();
                break;
                case StringArrayTypeN:
                cell = new TCellStringMemo();
                break;
                }//swch
                SetActiveN(1);
            }//fn
            //
             TDataCell GetCell() { return this.cell; }
            //
             DataCellTypeInfo GetTypeInfo()
            {
                int TypeN = GetTypeN();
                int length = GetLength();
                DataCellTypeInfo TypeInf = new DataCellTypeInfo(TypeN, length);
                return TypeInf;
            }
             void SetTypeAndDefaultValByTypeInf(DataCellTypeInfo TypeInf, bool PreserveVal=false)
            {
                TableCellAccessConfiguration cfg=new TableCellAccessConfiguration();
                int TypeN = TypeInf.GetTypeN();
                int length = TypeInf.GetLength();
                cfg.LengthOfArrCellTypes=length;
                cfg.PreserveVal=PreserveVal;
                this.SetTypeN(TypeN, cfg);
            }
            //
             double GetDoubleVal()
            {
                return cell.GetDoubleVal();
            }
             float GetFloatVal()
            {
                return cell.GetFloatVal();
            }
             int GetIntVal()
            {
                return cell.GetIntVal();
            }
             bool GetBoolVal()
            {
                return cell.GetBoolVal();
            }
             override string ToString()
            {
                return cell.ToString();
            }
            //
             void GetDoubleArr(ref double[] vals, ref int count)
            {
                cell.GetDoubleArr(ref vals, ref count);
            }
             void GetFloatArr(ref float[] vals, ref int count)
            {
                cell.GetFloatArr(ref vals, ref count);
            }
             void GetIntArr(ref int[] vals, ref int count)
            {
                cell.GetIntArr(ref vals, ref count);
            }
             void GetBoolArr(ref bool[] vals, ref int count)
            {
                cell.GetBoolArr(ref vals, ref count);
            }
             void ToStringArr(ref string[] vals, ref int count)
            {
                cell.ToStringArr(ref vals, ref count);
            }
            //
             double GetDoubleValN(int N)
            {
                return cell.GetDoubleValN(N);
            }
             float GetFloatValN(int N)
            {
                return cell.GetFloatValN(N);
            }
             int GetIntValN(int N)
            {
                return cell.GetIntValN(N);
            }
             bool GetBoolValN(int N)
            {
                return cell.GetBoolValN(N);
            }
             string ToStringN(int N)
            {
                return cell.ToStringN(N);
            }
            //
             void SetVal(double val){ cell.SetVal(val); }
             void SetVal(int val){ cell.SetVal(val); }
             void SetVal(bool val) { cell.SetVal(val); }
             void SetVal(string val) { cell.SetVal(val); }
            //
             void SetValN(double val, int N) { cell.SetValN(val, N); }
             void SetValN(float val, int N) { cell.SetValN(val, N); }
             void SetValN(int val, int N) { cell.SetValN(val, N); }
             void SetValN(bool val, int N) { cell.SetValN(val, N); }
             void SetValN(string val, int N) { cell.SetValN(val, N); }
            //
             int GetTypeN() { return cell.GetTypeN(); }
             int GetLength() {
                int N = 0;
                if (cell != NULL) N = cell.GetLength();
                return N;
            }
             int GetActiveN() {
                int N = 0;
                if (cell != NULL) N = cell.GetActiveN();
                return N;
            }
            //
             void SetActiveN(int N)
            {
                cell.SetActiveN(N);
            }
             void SetLength(int Length){
                cell.SetLength(Length);
            }
            //
             void DelValN(int N)
            {
                cell.DelValN(N);
            }
            //
             void AddOrInsDoubleVal(double val, int N)
            {
                cell.AddOrInsDoubleVal(val, N);
            }
             void AddOrInsFloatVal(float val, int N)
            {
                cell.AddOrInsFloatVal(val, N);
            }
             void AddOrInsIntVal(int val, int N)
            {
                cell.AddOrInsIntVal(val, N);
            }
             void AddOrInsBoolVal(bool val, int N)
            {
                cell.AddOrInsBoolVal(val, N);
            }
             void AddOrInsStringVal(string val, int N)
            {
                cell.AddOrInsStringVal(val, N);
            }
            //
             void Assign(double val)
            {
                cell = new TCellDouble();
                cell.SetVal(val);
                //cell.SetValAndT
            }
             void Assign(float val)
            {
                cell = new TCellFloat();
                cell.SetVal(val);
            }
             void Assign(int val)
            {
                cell = new TCellInt();
                cell.SetVal(val);
            }
             void Assign(bool val)
            {
                cell = new TCellBool();
                cell.SetVal(val);
            }
             void Assign(string val)
            {
                cell = new TCellString();
                cell.SetVal(val);
            }
             void Assign(double val, int N)
            {
                double[]arr=NULL;
                int ActualLength, PrevLength=cell.GetLength(), MinLength;
                TDataCell bufCell;
                if (cell==NULL || (cell.GetTypeN() != DoubleTypeN && PrevLength < N))
                {
                bufCell=cell;
                if(N<PrevLength) ActualLength=PrevLength; else ActualLength=N;
                if(ActualLength<=PrevLength) MinLength=ActualLength; else MinLength=PrevLength;
                arr=new double[ActualLength];
                for(int i=1; i<=ActualLength; i++) arr[i-1]=0;
                for(int i=1; i<=MinLength; i++) arr[i-1]=bufCell.GetDoubleValN(N);
                cell = new TCellDoubleMemo(arr, ActualLength);
                }
                cell.SetValN(val, N);
            }
             void Assign(float val, int N)
            {
                float[] arr = NULL;
                int ActualLength, PrevLength = cell.GetLength(), MinLength;
                TDataCell bufCell;
                if (cell==NULL || (cell.GetTypeN() != DoubleTypeN && PrevLength < N))
                {
                bufCell = cell;
                if (N < PrevLength) ActualLength = PrevLength; else ActualLength = N;
                if (ActualLength <= PrevLength) MinLength = ActualLength; else MinLength = PrevLength;
                arr = new float[ActualLength];
                for (int i = 1; i <= ActualLength; i++) arr[i - 1] = 0;
                for (int i = 1; i <= MinLength; i++) arr[i - 1] = bufCell.GetFloatValN(N);
                cell = new TCellFloatMemo(arr, ActualLength);
                }
                cell.SetValN(val, N);
            }
             void Assign(int val, int N)
            {
                int[] arr = NULL;
                int ActualLength, PrevLength = cell.GetLength(), MinLength;
                TDataCell bufCell;
                if (cell==NULL || (cell.GetTypeN() != DoubleTypeN && PrevLength < N))
                {
                bufCell = cell;
                if (N < PrevLength) ActualLength = PrevLength; else ActualLength = N;
                if (ActualLength <= PrevLength) MinLength = ActualLength; else MinLength = PrevLength;
                arr = new int[ActualLength];
                for (int i = 1; i <= ActualLength; i++) arr[i - 1] = 0;
                for (int i = 1; i <= MinLength; i++) arr[i - 1] = bufCell.GetIntValN(N);
                cell = new TCellIntMemo(arr, ActualLength);
                }
                cell.SetValN(val, N);
            }
             void Assign(bool val, int N)
            {
                bool[] arr = NULL;
                int ActualLength, PrevLength = cell.GetLength(), MinLength;
                TDataCell bufCell;
                if (cell==NULL || (cell.GetTypeN() != DoubleTypeN && PrevLength < N))
                {
                bufCell = cell;
                if (N < PrevLength) ActualLength = PrevLength; else ActualLength = N;
                if (ActualLength <= PrevLength) MinLength = ActualLength; else MinLength = PrevLength;
                arr = new bool[ActualLength];
                for (int i = 1; i <= ActualLength; i++) arr[i - 1] = BoolValByDefault;
                for (int i = 1; i <= MinLength; i++) arr[i - 1] = bufCell.GetBoolValN(N);
                cell = new TCellBoolMemo(arr, ActualLength);
                }
                cell.SetValN(val, N);
            }
             void Assign(string val, int N)
            {
                string[] arr = NULL;
                int ActualLength, PrevLength = cell.GetLength(), MinLength;
                TDataCell bufCell;
                if (cell==NULL || (cell.GetTypeN() != DoubleTypeN && PrevLength < N))
                {
                bufCell = cell;
                if (N < PrevLength) ActualLength = PrevLength; else ActualLength = N;
                if (ActualLength <= PrevLength) MinLength = ActualLength; else MinLength = PrevLength;
                arr = new string[ActualLength];
                for (int i = 1; i <= ActualLength; i++) arr[i - 1] = "";
                for (int i = 1; i <= MinLength; i++) arr[i - 1] = bufCell.ToStringN(N);
                cell = new TCellBoolMemo(arr, ActualLength);
                }
                cell.SetValN(val, N);
            }
             void Assign(double[] val, int count)
            {
                cell = new TCellDoubleMemo(val, count);
            }
             void Assign(float[] val, int count)
            {
                cell = new TCellFloatMemo(val, count);
            }
             void Assign(int[] val, int count)
            {
                cell = new TCellIntMemo(val, count);
            }
             void Assign(bool[] val, int count)
            {
                cell = new TCellBoolMemo(val,  count);
            }
             void Assign(string[] val, int count)
            {
                cell = new TCellStringMemo(val, count);
            }
             void Assign(double[] val, int count, string name1, string name2, string name3)
            {
                cell = new TDataBaseFieldHeader_WithItems_Double(val, count, name1, name2, name3);
            }
             void Assign(string[] val, int count, string name1, string name2, string name3)
            {
                cell = new TDataBaseFieldHeader_WithItems_String(val, count, name1, name2, name3);
            }
             void Assign(TDataCell obj)
            {
                cell = obj;
            }
             void Assign(DataCell obj)
            {
                int TypeN, Length=0;
                double DoubleVal;
                float FloatVal;
                int IntVal;
                bool BoolVal;
                string StringVal;
                double[] DoubleArr = NULL;
                float[] FloatArr = NULL;
                int[] IntArr = NULL;
                bool[] BoolArr = NULL;
                string[] StringArr = NULL;
                if (obj == NULL) cell = NULL;
                else
                {
                TypeN = obj.GetTypeN();
                switch (TypeN)
                {
                case DoubleTypeN:
                DoubleVal = obj.GetDoubleVal();
                cell = new TCellDouble(DoubleVal);
                break;
                case FloatTypeN:
                FloatVal = obj.GetFloatVal();
                cell = new TCellFloat(FloatVal);
                break;
                case IntTypeN:
                IntVal = obj.GetIntVal();
                cell = new TCellInt(IntVal);
                break;
                case BoolTypeN:
                BoolVal = obj.GetBoolVal();
                cell = new TCellBool(BoolVal);
                break;
                case StringTypeN:
                StringVal = obj.ToString();
                cell = new TCellString(StringVal);
                break;
                case DoubleArrayTypeN:
                obj.GetDoubleArr(ref DoubleArr, ref Length);
                cell = new TCellDoubleMemo(DoubleArr, Length);
                break;
                case FloatArrayTypeN:
                obj.GetFloatArr(ref FloatArr, ref Length);
                cell = new TCellFloatMemo(FloatArr, Length);
                break;
                case IntArrayTypeN:
                obj.GetIntArr(ref IntArr, ref Length);
                cell = new TCellIntMemo(IntArr, Length);
                break;
                case BoolArrayTypeN:
                obj.GetBoolArr(ref BoolArr, ref Length);
                cell = new TCellBoolMemo(BoolArr, Length);
                break;
                case StringArrayTypeN:
                obj.ToStringArr(ref StringArr, ref Length);
                cell = new TCellStringMemo(StringArr, Length);
                break;
                }//swch
                }//if
            }//fn asgn
            //
             void AssignBy(TDataCell CellFrom)
            {
                TDataCell CellTo = this.cell;
                int TypeTo = CellTo.GetTypeN(), TypeFrom = CellFrom.GetTypeN(), LenFrom = CellFrom.GetLength(), LenTo = CellTo.GetLength(), LenMin;
                double DoubleVal;
                float FloatVal;
                int IntVal;
                bool BoolVal;
                string StringVal;
                double[] DoubleArr = NULL;
                float[] FloatArr = NULL;
                int[] IntArr = NULL;
                bool[] BoolArr = NULL;
                string[] StringArr = NULL;
                if (LenFrom >= LenTo) LenMin = LenFrom; else LenMin = LenTo;
                switch (TypeFrom)
                {
                case DoubleTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                //DoubleVal=CellFrom.GetDoubleVal();
                //CellTo.SetByValDouble(DoubleVal);
                break;
                case FloatTypeN:
                //CellTo.SetByValFloat(CellFrom.GetFloatVal());
                //CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                FloatVal = CellFrom.GetFloatVal();
                CellTo.SetByValFloat(FloatVal);
                DoubleVal = CellFrom.GetDoubleVal();
                CellTo.SetByValDouble(DoubleVal);
                break;
                case IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                break;
                case BoolTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                break;
                case StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                break;
                case DoubleArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case FloatTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                DoubleVal = CellFrom.GetDoubleVal();
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                FloatVal = CellFrom.GetFloatVal();
                CellTo.SetByValFloat(FloatVal);
                break;
                case FloatTypeN:
                FloatVal = CellFrom.GetFloatVal();
                CellTo.SetByValFloat(FloatVal);
                //IntVal=CellFrom.GetIntVal();
                //CellTo.SetByValInt(IntVal);
                break;
                case IntTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                break;
                case DoubleArrayTypeN:
                FloatVal = CellFrom.GetFloatVal();
                CellTo.SetByValFloat(FloatVal);
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                //CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                //CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case IntTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case IntTypeN:
                //CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellTo.SetByValString(CellFrom.ToString());
                break;
                case DoubleArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                //CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                //CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case BoolTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                //CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case IntTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellTo.SetByValString(CellFrom.ToString());
                break;
                case DoubleArrayTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                //CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                //CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case StringTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                //CellTo.SetByValBool(CellFrom.GetBoolVal());
                CellTo.SetByValString(CellFrom.ToString());
                break;
                case FloatTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                break;
                case IntTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                //CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case DoubleArrayTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case DoubleArrayTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                //CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                //CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case FloatTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                break;
                case IntTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case DoubleArrayTypeN:
                //CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case FloatArrayTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case FloatTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case BoolTypeN:
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case DoubleArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case FloatArrayTypeN:
                //CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                //CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case IntArrayTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case FloatTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolTypeN:
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case DoubleArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                //CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                //CellTo.SetByArrFloat(FloatArr, LenFrom);
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case BoolArrayTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case FloatTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case BoolTypeN:
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case DoubleArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case BoolArrayTypeN:
                //CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                //CellTo.SetByArrInt(IntArr, LenFrom);
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case StringArrayTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValDouble(CellFrom.GetDoubleVal());
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case FloatTypeN:
                CellTo.SetByValFloat(CellFrom.GetFloatVal());
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case IntTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                break;
                case BoolTypeN:
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case StringTypeN:
                CellTo.SetByValString(CellFrom.ToString());
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case DoubleArrayTypeN:
                CellFrom.GetDoubleArr(ref DoubleArr, ref LenFrom);
                CellTo.SetByArrDouble(DoubleArr, LenFrom);
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case FloatArrayTypeN:
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                CellFrom.GetIntArr(ref IntArr, ref LenFrom);
                CellTo.SetByArrInt(IntArr, LenFrom);
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case BoolArrayTypeN:
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                CellFrom.GetBoolArr(ref BoolArr, ref LenFrom);
                CellTo.SetByArrBool(BoolArr, LenFrom);
                break;
                case StringArrayTypeN:
                //CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                //CellTo.SetByArrString(StringArr, LenFrom);
                CellFrom.ToStringArr(ref StringArr, ref LenFrom);
                CellTo.SetByArrString(StringArr, LenFrom);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                case TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case UniqueIntValKeeperTypeN:
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case StringTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case DoubleArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case IntArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case StringArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case UniqueIntValKeeperTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TDataBaseFieldHeaderTypeN://ne done!
                //NOp;
                break;
                }//switch
                break;
                case TDataBaseFieldHeaderTypeN: //ne done!
                switch (TypeTo)
                {
                case DoubleTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case IntTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case StringTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case DoubleArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case IntArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case StringArrayTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case UniqueIntValKeeperTypeN:
                CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case TDataBaseFieldHeaderTypeN:
                //NOp;
                break;
                }//switch
                break;
                }//switch
                this.cell=CellTo;
            }
             void AssignBy(DataCell obj)
            {
                TDataCell ObjCell = obj.GetCell();
                AssignBy(ObjCell);
            }
             */
            //mark4
             void DataCell::SetTypeN(int TypeN, TableCellAccessConfiguration *cfgExt)
            {
                double* DoubleArr = NULL;
                float* FloatArr = NULL;
                int* IntArr = NULL;
                bool* BoolArr = NULL;
                string* StringArr = NULL;
                TDataCell BufCell = NULL;
                TableCellAccessConfiguration cfg=NULL;
                if (cfgExt != NULL) cfg = cfgExt; //qu s'abl?
                else cfg = new TableCellAccessConfiguration();
                if (cfg.PreserveVal)
                {
                BufCell = cell;
                }
                switch (TypeN)
                {
                case DoubleTypeN:
                if(!cfg.PreserveVal) cell = new TCellDouble();
                else cell = new TCellDouble(BufCell.GetDoubleVal());
                break;
                case FloatTypeN:
                cell = new TCellFloat();
                if (cfg.PreserveVal) cell.SetByValFloat(BufCell.GetFloatVal());
                break;
                case IntTypeN:
                cell = new TCellInt();
                if (cfg.PreserveVal) cell.SetByValInt(BufCell.GetIntVal());
                break;
                case BoolTypeN:
                cell = new TCellBool();
                if (cfg.PreserveVal) cell.SetByValBool(BufCell.GetBoolVal());
                break;
                case StringTypeN:
                cell = new TCellString();
                if (cfg.PreserveVal) cell.SetByValString(BufCell.ToString());
                break;
                case UniqueIntValKeeperTypeN:
                cell = new TCellUniqueNumKeeper(cfg.UniqueIntVal);
                if (cfg.PreserveVal) cell.SetByValInt(BufCell.GetIntVal());
                break;
                case DoubleArrayTypeN:
                if (cfg.PreserveVal) BufCell.GetDoubleArr(ref DoubleArr, ref cfg.LengthOfArrCellTypes);
                cell = new TCellDoubleMemo(DoubleArr, cfg.LengthOfArrCellTypes);
                break;
                case FloatArrayTypeN:
                if (cfg.PreserveVal) BufCell.GetFloatArr(ref FloatArr, ref cfg.LengthOfArrCellTypes);
                cell = new TCellFloatMemo(FloatArr, cfg.LengthOfArrCellTypes);
                break;
                case IntArrayTypeN:
                if (cfg.PreserveVal) BufCell.GetIntArr(ref IntArr, ref cfg.LengthOfArrCellTypes);
                cell = new TCellIntMemo(IntArr, cfg.LengthOfArrCellTypes);
                break;
                case BoolArrayTypeN:
                if (cfg.PreserveVal) BufCell.GetBoolArr(ref BoolArr, ref cfg.LengthOfArrCellTypes);
                cell = new TCellBoolMemo(BoolArr, cfg.LengthOfArrCellTypes);
                break;
                case StringArrayTypeN:
                if (cfg.PreserveVal) BufCell.ToStringArr(ref StringArr, ref cfg.LengthOfArrCellTypes);
                cell = new TCellStringMemo(BoolArr, cfg.LengthOfArrCellTypes);
                break;
                }
            }
            //
             void DataCell::SetValAndTypeDouble(double val)
            {
                if (cell != NULL && cell.GetTypeN() != DoubleTypeN)
                {
                cell = new TCellDouble(val);
                }
                else
                {
                cell.SetByValDouble(val);
                }
            }
             void DataCell::SetValAndTypeFloat(float val)
            {
                if (cell != NULL && cell.GetTypeN() != FloatTypeN)
                {
                cell = new TCellFloat(val);
                }
                else
                {
                cell.SetByValFloat(val);
                }
            }
             void DataCell::SetValAndTypeInt(int val)
            {
                if (cell != NULL && cell.GetTypeN() != IntTypeN)
                {
                cell = new TCellInt(val);
                }
                else
                {
                cell.SetByValInt(val);
                }
            }
             void DataCell::SetValAndTypeBool(bool val)
            {
                if (cell != NULL && cell.GetTypeN() != BoolTypeN)
                {
                cell = new TCellBool(val);
                }
                else
                {
                cell.SetByValBool(val);
                }
            }
             void DataCell::SetValAndTypeString(string val)
            {
                if (cell != NULL && cell.GetTypeN() != StringTypeN)
                {
                cell = new TCellString(val);
                }
                else
                {
                cell.SetByValString(val);
                }
            }
             void DataCell::SetArrAndTypeDouble(double[] arr, int Length)
            {
                if (cell != NULL && cell.GetTypeN() != DoubleArrayTypeN)
                {
                cell = new TCellDoubleMemo(arr, Length);
                }
                else
                {
                cell.SetByArrDouble(arr, Length);
                }
            }
             void DataCell::SetArrAndTypeFloat(float[] arr, int Length)
            {
                if (cell != NULL && cell.GetTypeN() != FloatArrayTypeN)
                {
                cell = new TCellFloatMemo(arr, Length);
                }
                else
                {
                cell.SetByArrFloat(arr, Length);
                }
            }
             void DataCell::SetArrAndTypeInt(int[] arr, int Length)
            {
                if (cell != NULL && cell.GetTypeN() != IntArrayTypeN)
                {
                cell = new TCellIntMemo(arr, Length);
                }
                else
                {
                cell.SetByArrInt(arr, Length);
                }
            }
             void DataCell::SetArrAndTypeBool(bool[] arr, int Length)
            {
                if (cell != NULL && cell.GetTypeN() != BoolArrayTypeN)
                {
                cell = new TCellBoolMemo(arr, Length);
                }
                else
                {
                cell.SetByArrBool(arr, Length);
                }
            }
             void DataCell::SetArrAndTypeString(string[] arr, int Length)
            {
                if (cell != NULL && cell.GetTypeN() != StringArrayTypeN)
                {
                cell = new TCellStringMemo(arr, Length);
                }
                else
                {
                cell.SetByArrString(arr, Length);
                }
            }
             void DataCell::SetValAndTypeUniqueIntNumKeeper(int val)
            {
                cell = new TCellUniqueNumKeeper(val);
            }
            //
             void DataCell::SetByValDouble(double val)
            {
                cell.SetByValDouble(val);
            }
             void DataCell::SetByValFloat(float val)
            {
                cell.SetByValFloat(val);
            }
             void DataCell::SetByValInt(int val)
            {
                cell.SetByValInt(val);
            }
             void DataCell::SetByValBool(bool val)
            {
                cell.SetByValBool(val);
            }
             void DataCell::SetByValString(string val)
            {
                cell.SetByValString(val);
            }
            //
             void DataCell::SetByValDoubleN(double val, int N)
            {
                cell.SetByValDoubleN(val, N);
            }
             void DataCell::SetByValFloatN(float val, int N)
            {
                cell.SetByValFloatN(val, N);
            }
             void DataCell::SetByValIntN(int val, int N)
            {
                cell.SetByValIntN(val, N);
            }
             void DataCell::SetByValBoolN(bool val, int N)
            {
                cell.SetByValBoolN(val, N);
            }
             void DataCell::SetByValStringN(string val, int N)
            {
                cell.SetByValStringN(val, N);
            }
            //
             void DataCell::SetByArrDouble(double[] val, int Length)
            {
                cell.SetByArrDouble(val, Length);
            }
             void DataCell::SetByArrFloat(float[] val, int Length)
            {
                cell.SetByArrFloat(val, Length);
            }
             void DataCell::SetByArrInt(int[] val, int Length)
            {
                cell.SetByArrInt(val, Length);
            }
             void DataCell::SetByArrBool(bool[] val, int Length)
            {
                cell.SetByArrBool(val, Length);
            }
             void DataCell::SetByArrString(string[] val, int Length)
            {
                cell.SetByArrString(val, Length);
            }
            //
             int DataCell::GetErstItemNByStringVal(string val)
            {
                int N = 0;
                for (int i = GetLength(); i >= 1; i--)
                {
                if(val.Equals(ToStringN(i))) N=i;
                }
                return N;
            }
             void DataCell::SetActiveNByStringVal(string val){
                int N = 0;
                for (int i = GetLength(); i >= 1; i--)
                {
                if(val.Equals(ToStringN(i))) N=i;
                }
                if(N!=0) SetActiveN(N);
            }
            //
             DataCell::string GetNameN(int N) {
                return cell.GetNameN(N);
            }
             DataCell::string GetName1()
            {
                return cell.GetName1();
            }
             DataCell::string GetName2() {
                return cell.GetName2();
            }
             DataCell::string GetName3() {
                return cell.GetName3();
            }
             void DataCell::GetNames(ref string[] Arr, ref int QItems)
            {
                cell.GetNames(ref Arr, ref QItems);
            }
             int DataCell::GetLengthOfNamesList()
            {
                return cell.GetLengthOfNamesList();
            }
            //
             static DataCell::DataCell operator +(DataCell obj1, DataCell obj2){
                DataCell sum = new DataCell();
                double[] DoubleArr = NULL;
                float[] FloatArr = NULL;
                int[] IntArr = NULL;
                bool[] BoolArr = NULL;
                string[] StringArr = NULL;
                int Type1N, Type2N, Length1, Length2;
                if (obj1 != NULL)
                {
                if (obj2 != NULL) //else NOp;
                {
                Type1N = obj1.GetTypeN();
                Type2N = obj2.GetTypeN();
                switch (Type1N)
                {
                case DoubleTypeN:
                switch (Type2N)
                {
                case DoubleTypeN:
                sum = new DataCell(obj1.GetDoubleVal() + obj2.GetDoubleVal());
                break;
                case FloatTypeN:
                //sum = new DataCell(obj1.GetFloatVal() + obj2.GetFloatVal());
                sum = new DataCell(obj1.GetDoubleVal() + obj2.GetDoubleVal());
                break;
                case IntTypeN:
                //sum = new DataCell(obj1.GetIntVal() + obj2.GetIntVal());
                sum = new DataCell(obj1.GetDoubleVal() + obj2.GetDoubleVal());
                break;
                case BoolTypeN:
                //sum = new DataCell(obj1.GetBoolVal() && obj2.GetBoolVal());
                sum = new DataCell(obj1.GetDoubleVal() + obj2.GetDoubleVal());
                break;
                case StringTypeN:
                //sum = new DataCell(obj1.ToString() + obj2.ToString());
                sum = new DataCell(obj1.GetDoubleVal() + obj2.GetDoubleVal());
                break;
                case DoubleArrayTypeN:
                Length1 = obj1.GetLength(); //1
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i +Length1- 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(DoubleArr, Length1 + Length2);
                break;
                case FloatArrayTypeN: //ob double longer r' float: s'nee'd array of > long vars
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i +Length1- 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(DoubleArr, Length1 + Length2);
                break;
                case IntArrayTypeN://ob double longer r' float: s'nee'd array of > long vars
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i +Length1- 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(DoubleArr, Length1 + Length2);
                break;
                case BoolArrayTypeN: //ob double longer r' float: s'nee'd array of > long vars
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i +Length1- 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(DoubleArr, Length1 + Length2);
                break;
                case StringArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i +Length1- 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(DoubleArr, Length1 + Length2);
                //
                //Length1 = obj1.GetLength();
                //Length2 = obj2.GetLength();
                //StringArr = new string[Length1 + Length2];
                //for (int i = 1; i <= Length1; i++){
                //    StringArr[i - 1] = obj1.ToStringN(i);
                //}
                //for (int i = 1; i <= Length2; i++)
                //{
                //    StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                //}
                //sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                }//switch
                break;
                case FloatTypeN:
                switch (Type2N)
                {
                case DoubleTypeN:
                sum = new DataCell(obj1.GetDoubleVal() + obj2.GetDoubleVal());
                break;
                case FloatTypeN:
                //sum = new DataCell(obj1.GetFloatVal() + obj2.GetFloatVal());
                sum = new DataCell(obj1.GetFloatVal() + obj2.GetFloatVal());
                break;
                case IntTypeN:
                //sum = new DataCell(obj1.GetIntVal() + obj2.GetIntVal());
                sum = new DataCell(obj1.GetFloatVal() + obj2.GetFloatVal());
                break;
                case BoolTypeN:
                //sum = new DataCell(obj1.GetBoolVal() && obj2.GetBoolVal());
                sum = new DataCell(obj1.GetFloatVal() + obj2.GetFloatVal());
                break;
                case StringTypeN:
                //sum = new DataCell(obj1.ToString() + obj2.ToString());
                sum = new DataCell(obj1.GetFloatVal() + obj2.GetFloatVal());
                break;
                case DoubleArrayTypeN:
                //Length1 = obj1.GetLength();
                //Length2 = obj2.GetLength();
                //DoubleArr = new double[Length1 + Length2];
                //for (int i = 1; i <= Length1; i++){
                //    DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                //}
                //for (int i = 1; i <= Length2; i++)
                //{
                //    DoubleArr[i +Length1- 1] = obj2.GetDoubleValN(i);
                //}
                //sum = new DataCell(DoubleArr, Length1 + Length2);
                //
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                break;
                case FloatArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                //CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                //CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                break;
                case BoolArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                break;
                case StringArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                //
                //Length1 = obj1.GetLength();
                //Length2 = obj2.GetLength();
                //StringArr = new string[Length1 + Length2];
                //for (int i = 1; i <= Length1; i++){
                //    StringArr[i - 1] = obj1.ToStringN(i);
                //}
                //for (int i = 1; i <= Length2; i++)
                //{
                //    StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                //}
                //sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                }//switch
                break;
                case IntTypeN:
                switch (Type2N)
                {
                case DoubleTypeN:
                sum = new DataCell(obj1.GetDoubleVal() + obj2.GetDoubleVal());
                break;
                case FloatTypeN:
                //sum = new DataCell(obj1.GetFloatVal() + obj2.GetFloatVal());
                sum = new DataCell(obj1.GetFloatVal() + obj2.GetFloatVal());
                break;
                case IntTypeN:
                //sum = new DataCell(obj1.GetIntVal() + obj2.GetIntVal());
                sum = new DataCell(obj1.GetIntVal() + obj2.GetIntVal());
                break;
                case BoolTypeN:
                //sum = new DataCell(obj1.GetBoolVal() && obj2.GetBoolVal());
                sum = new DataCell(obj1.GetIntVal() + obj2.GetIntVal());
                break;
                case StringTypeN:
                //sum = new DataCell(obj1.GetIntVal() + obj2.GetIntVal());
                sum = new DataCell(obj1.GetIntVal() + obj2.GetIntVal());
                break;
                case DoubleArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i +Length1- 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(DoubleArr, Length1 + Length2);
                break;
                case FloatArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                //CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                //CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                IntArr = new int[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                IntArr[i - 1] = obj1.GetIntValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                IntArr[i + Length1 - 1] = obj2.GetIntValN(i);
                }
                sum = new DataCell(IntArr, Length1 + Length2);
                break;
                case BoolArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                IntArr = new int[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                IntArr[i - 1] = obj1.GetIntValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                IntArr[i + Length1 - 1] = obj2.GetIntValN(i);
                }
                sum = new DataCell(IntArr, Length1 + Length2);
                break;
                case StringArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                IntArr = new int[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                IntArr[i - 1] = obj1.GetIntValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                IntArr[i + Length1 - 1] = obj2.GetIntValN(i);
                }
                sum = new DataCell(IntArr, Length1 + Length2);
                //
                //Length1 = obj1.GetLength();
                //Length2 = obj2.GetLength();
                //StringArr = new string[Length1 + Length2];
                //for (int i = 1; i <= Length1; i++){
                //    StringArr[i - 1] = obj1.ToStringN(i);
                //}
                //for (int i = 1; i <= Length2; i++)
                //{
                //    StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                //}
                //sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                }//switch
                break;
                case BoolTypeN:
                switch (Type2N)
                {
                case DoubleTypeN:
                sum = new DataCell(obj1.GetBoolVal() && obj2.GetBoolVal());
                break;
                case FloatTypeN:
                //sum = new DataCell(obj1.GetFloatVal() + obj2.GetFloatVal());
                sum = new DataCell(obj1.GetBoolVal() && obj2.GetBoolVal());
                break;
                case IntTypeN:
                //sum = new DataCell(obj1.GetIntVal() + obj2.GetIntVal());
                sum = new DataCell(obj1.GetBoolVal() && obj2.GetBoolVal());
                break;
                case BoolTypeN:
                //sum = new DataCell(obj1.GetBoolVal() && obj2.GetBoolVal());
                sum = new DataCell(obj1.GetBoolVal() && obj2.GetBoolVal());
                break;
                case StringTypeN:
                //sum = new DataCell(obj1.GetIntVal() + obj2.GetIntVal());
                sum = new DataCell(obj1.GetBoolVal() && obj2.GetBoolVal());
                break;
                case DoubleArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                BoolArr = new bool[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                BoolArr[i - 1] = obj1.GetBoolValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                BoolArr[i + Length1 - 1] = obj2.GetBoolValN(i);
                }
                sum = new DataCell(BoolArr, Length1 + Length2);
                break;
                case FloatArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                BoolArr = new bool[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                BoolArr[i - 1] = obj1.GetBoolValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                BoolArr[i + Length1 - 1] = obj2.GetBoolValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                //CellFrom.GetFloatArr(ref FloatArr, ref LenFrom);
                //CellTo.SetByArrFloat(FloatArr, LenFrom);
                break;
                case IntArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                BoolArr = new bool[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                BoolArr[i - 1] = obj1.GetBoolValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                BoolArr[i + Length1 - 1] = obj2.GetBoolValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                break;
                case BoolArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                IntArr = new int[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                IntArr[i - 1] = obj1.GetIntValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                IntArr[i + Length1 - 1] = obj2.GetIntValN(i);
                }
                sum = new DataCell(IntArr, Length1 + Length2);
                break;
                case StringArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                IntArr = new int[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                IntArr[i - 1] = obj1.GetIntValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                IntArr[i + Length1 - 1] = obj2.GetIntValN(i);
                }
                sum = new DataCell(IntArr, Length1 + Length2);
                //
                //Length1 = obj1.GetLength();
                //Length2 = obj2.GetLength();
                //StringArr = new string[Length1 + Length2];
                //for (int i = 1; i <= Length1; i++){
                //    StringArr[i - 1] = obj1.ToStringN(i);
                //}
                //for (int i = 1; i <= Length2; i++)
                //{
                //    StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                //}
                //sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                }//switch
                break;
                case StringTypeN:
                switch (Type2N)
                {
                case DoubleTypeN:
                sum = new DataCell(obj1.ToString() + obj2.ToString());
                break;
                case FloatTypeN:
                sum = new DataCell(obj1.ToString() + obj2.ToString());
                break;
                case IntTypeN:
                sum = new DataCell(obj1.ToString() + obj2.ToString());
                break;
                case BoolTypeN:
                sum = new DataCell(obj1.ToString() + obj2.ToString());
                break;
                case StringTypeN:
                sum = new DataCell(obj1.ToString() + obj2.ToString());
                //CellTo.SetByValBool(CellFrom.GetBoolVal());
                break;
                case DoubleArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                StringArr = new string[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                StringArr[i - 1] = obj1.ToStringN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case FloatArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                StringArr = new string[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                StringArr[i - 1] = obj1.ToStringN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case IntArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                StringArr = new string[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                StringArr[i - 1] = obj1.ToStringN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case BoolArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                StringArr = new string[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                StringArr[i - 1] = obj1.ToStringN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case StringArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                StringArr = new string[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                StringArr[i - 1] = obj1.ToStringN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                }//switch
                break;
                case DoubleArrayTypeN:
                switch (Type2N)
                {
                case DoubleTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i + Length1 - 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case FloatTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i + Length1 - 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case IntTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i + Length1 - 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case BoolTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i + Length1 - 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case StringTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i + Length1 - 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case DoubleArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i + Length1 - 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case FloatArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i + Length1 - 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case IntArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i + Length1 - 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case BoolArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i + Length1 - 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case StringArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i + Length1 - 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                }//switch
                break;
                //mark5
                case FloatArrayTypeN:
                switch (Type2N)
                {
                case DoubleTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i + Length1 - 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case FloatTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                break;
                case IntTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                break;
                case BoolTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                break;
                case StringTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                break;
                case DoubleArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i + Length1 - 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case FloatArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                break;
                case IntArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                break;
                case BoolArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                break;
                case StringArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                }//switch
                break;
                case IntArrayTypeN:
                switch (Type2N)
                {
                case DoubleTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i + Length1 - 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(DoubleArr, Length1 + Length2);
                break;
                case FloatTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                break;
                case IntTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                IntArr = new int[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                IntArr[i - 1] = obj1.GetIntValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                IntArr[i + Length1 - 1] = obj2.GetIntValN(i);
                }
                sum = new DataCell(IntArr, Length1 + Length2);
                break;
                case BoolTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                IntArr = new int[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                IntArr[i - 1] = obj1.GetIntValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                IntArr[i + Length1 - 1] = obj2.GetIntValN(i);
                }
                sum = new DataCell(IntArr, Length1 + Length2);
                break;
                case StringTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                IntArr = new int[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                IntArr[i - 1] = obj1.GetIntValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                IntArr[i + Length1 - 1] = obj2.GetIntValN(i);
                }
                sum = new DataCell(IntArr, Length1 + Length2);
                break;
                case DoubleArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i + Length1 - 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(DoubleArr, Length1 + Length2);
                break;
                case FloatArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                break;
                case IntArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                IntArr = new int[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                IntArr[i - 1] = obj1.GetIntValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                IntArr[i + Length1 - 1] = obj2.GetIntValN(i);
                }
                sum = new DataCell(IntArr, Length1 + Length2);
                break;
                case BoolArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                IntArr = new int[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                IntArr[i - 1] = obj1.GetIntValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                IntArr[i + Length1 - 1] = obj2.GetIntValN(i);
                }
                sum = new DataCell(IntArr, Length1 + Length2);
                break;
                case StringArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                IntArr = new int[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                IntArr[i - 1] = obj1.GetIntValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                IntArr[i + Length1 - 1] = obj2.GetIntValN(i);
                }
                sum = new DataCell(IntArr, Length1 + Length2);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                }//switch
                break;
                case BoolArrayTypeN:
                switch (Type2N)
                {
                case DoubleTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                DoubleArr = new double[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                DoubleArr[i - 1] = obj1.GetDoubleValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                DoubleArr[i + Length1 - 1] = obj2.GetDoubleValN(i);
                }
                sum = new DataCell(DoubleArr, Length1 + Length2);
                break;
                case FloatTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                FloatArr = new float[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                FloatArr[i - 1] = obj1.GetFloatValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                FloatArr[i + Length1 - 1] = obj2.GetFloatValN(i);
                }
                sum = new DataCell(FloatArr, Length1 + Length2);
                break;
                case IntTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                IntArr = new int[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                IntArr[i - 1] = obj1.GetIntValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                IntArr[i + Length1 - 1] = obj2.GetIntValN(i);
                }
                sum = new DataCell(IntArr, Length1 + Length2);
                break;
                case BoolTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                BoolArr = new bool[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                BoolArr[i - 1] = obj1.GetBoolValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                BoolArr[i + Length1 - 1] = obj2.GetBoolValN(i);
                }
                sum = new DataCell(BoolArr, Length1 + Length2);
                break;
                case StringTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                BoolArr = new bool[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                BoolArr[i - 1] = obj1.GetBoolValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                BoolArr[i + Length1 - 1] = obj2.GetBoolValN(i);
                }
                sum = new DataCell(BoolArr, Length1 + Length2);
                break;
                case DoubleArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                BoolArr = new bool[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                BoolArr[i - 1] = obj1.GetBoolValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                BoolArr[i + Length1 - 1] = obj2.GetBoolValN(i);
                }
                sum = new DataCell(BoolArr, Length1 + Length2);
                break;
                case FloatArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                BoolArr = new bool[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                BoolArr[i - 1] = obj1.GetBoolValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                BoolArr[i + Length1 - 1] = obj2.GetBoolValN(i);
                }
                sum = new DataCell(BoolArr, Length1 + Length2);
                break;
                case IntArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                BoolArr = new bool[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                BoolArr[i - 1] = obj1.GetBoolValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                BoolArr[i + Length1 - 1] = obj2.GetBoolValN(i);
                }
                sum = new DataCell(BoolArr, Length1 + Length2);
                break;
                case BoolArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                BoolArr = new bool[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                BoolArr[i - 1] = obj1.GetBoolValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                BoolArr[i + Length1 - 1] = obj2.GetBoolValN(i);
                }
                sum = new DataCell(BoolArr, Length1 + Length2);
                break;
                case StringArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                BoolArr = new bool[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                BoolArr[i - 1] = obj1.GetBoolValN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                BoolArr[i + Length1 - 1] = obj2.GetBoolValN(i);
                }
                sum = new DataCell(BoolArr, Length1 + Length2);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                }//switch
                break;
                case StringArrayTypeN:
                switch (Type2N)
                {
                case DoubleTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                StringArr = new string[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                StringArr[i - 1] = obj1.ToStringN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case FloatTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                StringArr = new string[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                StringArr[i - 1] = obj1.ToStringN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case IntTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                StringArr = new string[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                StringArr[i - 1] = obj1.ToStringN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case BoolTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                StringArr = new string[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                StringArr[i - 1] = obj1.ToStringN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case StringTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                StringArr = new string[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                StringArr[i - 1] = obj1.ToStringN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case DoubleArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                StringArr = new string[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                StringArr[i - 1] = obj1.ToStringN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case FloatArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                StringArr = new string[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                StringArr[i - 1] = obj1.ToStringN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case IntArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                StringArr = new string[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                StringArr[i - 1] = obj1.ToStringN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case BoolArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                StringArr = new string[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                StringArr[i - 1] = obj1.ToStringN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case StringArrayTypeN:
                Length1 = obj1.GetLength();
                Length2 = obj2.GetLength();
                StringArr = new string[Length1 + Length2];
                for (int i = 1; i <= Length1; i++){
                StringArr[i - 1] = obj1.ToStringN(i);
                }
                for (int i = 1; i <= Length2; i++)
                {
                StringArr[i + Length1 - 1] = obj2.ToStringN(i);
                }
                sum = new DataCell(StringArr, Length1 + Length2);
                break;
                case UniqueIntValKeeperTypeN:
                //NOp;
                break;
                }//switch
                break;
                case UniqueIntValKeeperTypeN:
                switch (Type2N)
                {
                case DoubleTypeN:
                //CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatTypeN:
                //CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case IntTypeN:
                //CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolTypeN:
                //CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case StringTypeN:
                //CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case DoubleArrayTypeN:
                //CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case FloatArrayTypeN:
                //CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case IntArrayTypeN:
                //CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case BoolArrayTypeN:
                //CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case StringArrayTypeN:
                //CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                case UniqueIntValKeeperTypeN:
                //CellTo.SetByValInt(CellFrom.GetIntVal());
                break;
                }//switch
                break;
                }//switch
                }
                else sum.Assign(obj1);
                }
                else sum.Assign(obj2);
                return sum;
            }//operator +
            //
            /* void SetNameN(string name, int N) { this.cell.SetNameN(name, N); }
             void SetName1(string name) { this.cell.SetName1(name); }
             void SetName2(string name) { this.cell.SetName2(name); }
             void SetName3(string name) { this.cell.SetName3(name); }
             void SetNames(string[] Arr, int Q){this.cell.SetNames(Arr, Q);}
             string GetNameN(int N) { return this.cell.GetNameN(N); }
             string GetName1() { return this.cell.GetName1(); }
             string GetName2() { return this.cell.GetName2(); }
             string GetName3() { return this.cell.GetName3(); }
             void GetNames(ref string[] Arr, ref int QItems){this.cell.GetNames(ref Arr, ref QItems);}
             int GetLengthOfNamesList() { return this.cell.GetLengthOfNamesList();}*/
            //
            DataCell ReturnCopy()
             {
                TDataCell* cell=NULL;
                int TypeN = this.GetTypeN(), QItems=this.GetLength(), QNames=this.GetLengthOfNamesList(), ActiveN=this.GetActiveN();
                double[] ItemsDbl=null;
                float[] ItemsFlt=null;
                int[] ItemsInt=null;
                bool[] ItemsBool=null;
                string[] ItemsStr=null;
                string[] Names=null;
                switch (TypeN)
                {
                case TableConsts.DoubleTypeN:
                cell=new DataCell(this.GetDoubleVal());
                break;
                case TableConsts.FloatTypeN:
                cell=new DataCell(this.GetFloatVal());
                break;
                case TableConsts.IntTypeN:
                cell=new DataCell(this.GetIntVal());
                break;
                case TableConsts.BoolTypeN:
                cell=new DataCell(this.GetBoolVal());
                break;
                case TableConsts.StringTypeN:
                cell=new DataCell(this.ToString());
                break;
                case TableConsts.DoubleArrayTypeN:
                this.GetDoubleArr(ref ItemsDbl, ref QItems);
                cell=new DataCell(ItemsDbl, QItems);
                break;
                case TableConsts.FloatArrayTypeN:
                this.GetFloatArr(ref ItemsFlt, ref QItems);
                cell=new DataCell(ItemsFlt, QItems);
                break;
                case TableConsts.IntArrayTypeN:
                this.GetIntArr(ref ItemsInt, ref QItems);
                cell=new DataCell(ItemsInt, QItems);
                break;
                case TableConsts.BoolArrayTypeN:
                this.GetBoolArr(ref ItemsBool, ref QItems);
                cell=new DataCell(ItemsBool, QItems);
                break;
                case TableConsts.StringArrayTypeN:
                this.ToStringArr(ref ItemsStr, ref QItems);
                cell=new DataCell(ItemsStr, QItems);
                break;
                //case TableConsts.UniqueIntValKeeperTypeN:
                //     this.GetIntArr(ref ItemsInt, ref QItems);
                //     cell=new DataCell(ItemsInt, QItems);
                //     break;
                case TableConsts.DoubleItemsFieldHeaderCellTypeN:
                this.GetDoubleArr(ref ItemsDbl, ref QItems);
                this.GetNames(ref Names, ref QNames);
                cell=new DataCell(ItemsDbl, QItems);
                break;
                case TableConsts.IntItemsFieldHeaderCellTypeN:
                this.GetIntArr(ref ItemsInt, ref QItems);
                this.GetNames(ref Names, ref QNames);
                cell = new DataCell(ItemsInt, QItems);
                break;
                case TableConsts.StringItemsFieldHeaderCellTypeN:
                this.ToStringArr(ref ItemsStr, ref QItems);
                this.GetNames(ref Names, ref QNames);
                cell = new DataCell(ItemsStr, QItems);
                break;
                }//switch
                if (TableConsts.TypeNIsCorrectArray(TypeN)) cell.SetActiveN(ActiveN);
                return *cell;
             }
//             void SetFromGridCellValueOnly(DataGridViewCell gridCell, TableReadingTypesParams TypesParams)
//             {
//                //TableHeaderRowsExistance GridHdrInUseExt, TableHeaderRowsExistance TblHdrToShowExt, TableSize QTableRowsAllExt, TableSize QTableRowsToShowExt, TableSize ErstTableRowsNsToShowExt, TableSize QRowsNamesToShowExt
//                DataGridViewComboBoxCell ComboBoxCell = null;
//                DataGridViewCheckBoxCell CheckBoxCell = null;
//                double DoubleVal;
//                int IntVal, TableCellTypeN;
//                bool BoolVal;
//                string val, cur;
//                TableCellTypeN=this.GetTypeN();
//                if (gridCell is DataGridViewComboBoxCell)
//                {
//                ComboBoxCell = (DataGridViewComboBoxCell)gridCell;
//                IntVal = 0;
//                val=ComboBoxCell.Value.ToString();
//                for(int i=1; i<=ComboBoxCell.Items.Count; i++){
//                cur=ComboBoxCell.Items[i-1].ToString();
//                if(val.Equals(cur)){
//                IntVal=i;
//                }
//                }
//                switch(TableCellTypeN){
//                case TableConsts.IntTypeN:
//                case TableConsts.StringArrayTypeN:
//                this.SetByValInt(IntVal);
//                break;
//                case TableConsts.StringTypeN:
//                this.SetByValString(val);
//                break;
//                default:
//                this.SetByValString(val);
//                break;
//                }
//                }
//                else if (gridCell is DataGridViewCheckBoxCell)
//                {
//                CheckBoxCell=(DataGridViewCheckBoxCell)gridCell;
//                if (MyLib.BoolValByDefault == true)
//                {
//                if ((bool)CheckBoxCell.Value)
//                {
//                IntVal = 1;
//                val = TableConsts.TrueWord;
//                }
//                else
//                {
//                IntVal = 2;
//                val = TableConsts.FalseWord;
//                }
//                }
//                else
//                {
//                if ((bool)CheckBoxCell.Value)
//                {
//                IntVal = 2;
//                val = TableConsts.TrueWord;
//                }
//                else
//                {
//                IntVal = 1;
//                val = TableConsts.FalseWord;
//                }
//                }
//                switch (TableCellTypeN)
//                {
//                case TableConsts.BoolTypeN:
//                this.SetByValBool((bool)CheckBoxCell.Value);
//                break;
//                case TableConsts.IntTypeN:
//                //                break;
//                case TableConsts.StringTypeN:
//                this.SetByValString(val);
//                break;
//                case TableConsts.StringArrayTypeN:
//                this.SetActiveN(IntVal);
//                break;
//                default:
//                this.SetByValBool((bool)CheckBoxCell.Value);
//                break;
//                }
//                }
//                else if (gridCell is DataGridViewTextBoxCell)
//                {
//                //NOp;
//                }
//                else
//                {
//                val = gridCell.Value.ToString();
//                this.SetByValString(val);
//                }
//             }//fn

        //}//cl DataCell


       
       
        //typeinfo.h
       
        #ifndef TYPEINFO_H
#define TYPEINFO_H

#include<vector>
#include<QString>
#include "tableinfo.h"

class TypeCell
{
    int TypeN, Length;
public:
    TypeCell();
    TypeCell(int TypeN, int length=2);
    int GetTypeN();
    int GetLength();
    void Get(int&TypeN, int&length);
    void SetTypeN(int TypeN);
    void SetLength(int length);
    void Set(int TypeN, int length=2);
};

class TypeCellRow
{
    int Q;
    std::vector<TypeCell>data;
public:
    TypeCellRow();
    TypeCellRow(TypeCell*cells, int Q);
    TypeCellRow(TypeCell cell);
    TypeCellRow(int*types, int*lengths, int Q);
    //
    void SetSize(int Q);
    TypeCell GetCellN(int CellN);
    void SetCellN(TypeCell cell, int CellN);
    //
    int GetTypeN_CellN(int CellN);
    int GetLength_CellN(int CellN);
    void Get_CellN(int&TypeN, int&length, int CellN);
    void SetTypeN_CellN(int TypeN, int CellN);
    void SetLength_CellN(int TypeN, int CellN);
    void Set_CellN(int TypeN, int length, int CellN);
};
//class TypeInfo
//{
//public:
//    TypeInfo();
//};

#endif // TYPEINFO_H




#include "typeinfo.h"

TypeCell::TypeCell(){
    TypeN=DefaultAnyCellTypeN;
    Length=DefaultArrayLength;
}
TypeCell::TypeCell(int TypeN, int length){
    SetTypeN(TypeN);
    SetLength(length);
}

int TypeCell::GetTypeN(){return TypeN;}
int TypeCell::GetLength(){return Length;}
void TypeCell::Get(int&TypeN, int&length){}
void TypeCell::SetTypeN(int TypeN){
    if(TypeNIsCorrect(TypeN)) this->TypeN=TypeN;
    else this->TypeN=DefaultAnyCellTypeN;
}
void TypeCell::SetLength(int length){
    if(length>0 & length<MyMaxInt) this->Length=length;
    else this->Length=DefaultArrayLength;
}
void TypeCell::Set(int TypeN, int length){
    SetTypeN(TypeN);
    SetLength(length);
}


TypeCellRow::TypeCellRow(){
    data.clear();
    TypeCell DfltCell;
    data.at(1-1)=DfltCell;
}
TypeCellRow::TypeCellRow(TypeCell*cells, int Q){
    data.clear();
    TypeCell CurCell;
    if(cells!=NULL){
        if(Q>0 && Q<=MyMaxInt){
            for(int i=1; i<Q; i++){
                CurCell=cells[i-1];
                data.push_back(CurCell);
                this->Q++;
            }
        }else{
            Q=1;
            CurCell=cells[1-1];
            data.push_back(CurCell);
            this->Q--;
        }
    }else{
        if(Q>0 && Q<=MyMaxInt){
            for(int i=1; i<Q; i++){
                //CurCell=cells[i-1];
                data.push_back(CurCell);
                this->Q++;
            }
        }else{
            Q=1;
            //CurCell=cells[1-1];
            data.push_back(CurCell);
            this->Q--;
        }
    }
    data.at(1-1)=CurCell;
}
TypeCellRow::TypeCellRow(TypeCell cell){
    this->Q=1;
    data.clear();
    data.push_back(cell);
}
TypeCellRow::TypeCellRow(int*types, int*lengths, int Q){
    data.clear();
    TypeCell CurType;
    int TypeN, Length;
    if(Q>0 && Q<MyMaxInt) this->Q=Q; else Q=1;
    for(int i=1; i<=this->Q; i++){
        if(types!=NULL && TypeNIsCorrect(types[i-1]))  TypeN=types[i-1]; else TypeN=DefaultAnyCellTypeN;
        if(lengths!=NULL && lengths[i-1]>0 && lengths[i-1]<MyMaxInt) Length=lengths[i-1]; else Length=1;
        CurType.Set(TypeN, Length);
        data.push_back(CurType);
    }
}
//
void TypeCellRow::SetSize(int Q){
    int dL=abs(Q-this->Q);
    TypeCell DfltCell;
    if(Q>0 && Q<MyMaxInt){
        if(Q>this->Q){
            for(int i=1; i<=dL; i++){
                data.push_back(DfltCell);
            }
        }else if(Q<this->Q){
            for(int i=1; i<=dL; i++){
                data.pop_back();
            }
        }
    }else Q=1;
}
//
TypeCell TypeCellRow::GetCellN(int CellN){
    TypeCell R;
    if(CellN>0 && CellN<this->Q) R=data.at(CellN-1);
    return R;
}
void TypeCellRow::SetCellN(TypeCell cell, int CellN){
    if(CellN>0 && CellN<this->Q) data.at(CellN-1)=cell;
}
//
int TypeCellRow::GetTypeN_CellN(int CellN){
    //TypeCell cell;
    int TypeN=DefaultAnyCellTypeN;
    if(CellN>0 && CellN<=this->Q) TypeN=(data.at(CellN-1)).GetTypeN();
    return TypeN;
}
int TypeCellRow::GetLength_CellN(int CellN){
    int Length=DefaultArrayLength;
    if(CellN>0 && CellN<=this->Q) Length=(data.at(CellN-1)).GetLength();
    return Length;
}
void TypeCellRow::Get_CellN(int&TypeN, int&length, int CellN){
    TypeN=GetTypeN_CellN(CellN);
    length=GetLength_CellN(CellN);
}
void TypeCellRow::SetTypeN_CellN(int TypeN, int CellN){
    if(CellN>0 & CellN<=this->Q) data.at(CellN-1).SetTypeN(TypeN) ;
}
void TypeCellRow::SetLength_CellN(int Length, int CellN){
    if(CellN>0 && CellN<=this->Q) (data.at(CellN-1)).SetLength(Length);
}
void TypeCellRow::Set_CellN(int TypeN, int length, int CellN){
    if(CellN>0 && CellN<=this->Q) (data.at(CellN-1)).Set(TypeN, length);
}

//TypeInfo::TypeInfo()
//{

//}


//NumberParse.h

#ifndef NUMBERPARSE_H
#define NUMBERPARSE_H

#include"MyLib.h"
#include<qstring.h>
#include"mymathlib.h"
/*
struct TNumberParts{                // 1234.5678E+2 // 1234.5678E-2 //1234.5678
    int IntPartAsWritten;                // 1234         // 1234         //1234
    double FracPartAsWritten,                // .5678        // .5678        // .5678
           MantissaAsWritten;                // 1234.5678    // 1234.5678    //1234.5678
    int OrderAsWritten;                //  2           // 2            // 0
    //
    int IntPartAsMathRules;                // 1            // 1            // 1
    double FracPartAsMathRules,                // 0.2345678    // 0.2345678    // 0.2345678
           MantissaAsMathRules;                // 1.2345678    // 1.2345678    // 1.2345678
    //
    int Order;                // 6-1=5        // 2-1=1         // 4-1=3
    //
    int IntPartWhole;                // 123456       // 12            // 1234
    double FracPartWhole,                // 0.78         // 0.345678      // 0.5678
           MantissaWhole;                // 123465.78    // 12.345678     // 1234.5678
    //
    bool NumberHasPositiveSign, OrderHasPositiveSign;   //it is clear
    //
    //int OrderOfIntPart, OrderOfFracPart;   //cmnted 2021-03-24
    // alr present, see above
    // bool SignOfMantissaIsPositive, SignOfOrderIsPositive;
};
void SetNumberDataNull(TNumberParts&data);
void WriteNumberParts(TNumberParts data, TValsShowHide*vsh=NULL);
*/

class TNumberParts{                // 1234.5678E+2 // 1234.5678E-2 //1234.5678
    public:
    int IntPartAsWritten;                // 1234         // 1234         //1234
    double FracPartAsWritten,                // .5678        // .5678        // .5678
           MantissaAsWritten;                // 1234.5678    // 1234.5678    //1234.5678
    int OrderAsWritten;                //  2           // 2            // 0
    //
    int IntPartAsMathRules;                // 1            // 1            // 1
    double FracPartAsMathRules,                // 0.2345678    // 0.2345678    // 0.2345678
           MantissaAsMathRules;                // 1.2345678    // 1.2345678    // 1.2345678
    //
    int Order;                // 6-1=5        // 2-1=1         // 4-1=3
    //
    int IntPartWhole;                // 123456       // 12            // 1234
    double FracPartWhole,                // 0.78         // 0.345678      // 0.5678
           MantissaWhole;                // 123465.78    // 12.345678     // 1234.5678
    //
    bool NumberHasPositiveSign, OrderHasPositiveSign;   //it is clear
    //
    //int OrderOfIntPart, OrderOfFracPart;   //cmnted 2021-03-24
    // alr present, see above
    // bool SignOfMantissaIsPositive, SignOfOrderIsPositive;
    //
    TNumberParts();
    //TNumberParts(int x);
    //TNumberParts(double x);
    void SetNull();
    void ShowText(TValsShowHide*vsh);
};
//
int DigitOf(QString s, int baseDec=10);
bool IsDigit(QString s, int baseDec=10);
void IntPartDet(double x, int&ip, double&IntPartFP);
int IntPart(double x);
TNumberParts SeparateNum(double x, TValsShowHide*vsh=NULL, int BaseDec=10);
void SeparateNum(double x, int&IntPartOfNum, double&FracPartOfNum, int&IntPartOfMant, double&FracPartOfMant, int&Order, int&Sgn, int&OrdSgn, int BaseDec=10);
void IntToDigits(int x, int&Order, int digit[], int BaseDec=10, bool SortNatural=true);
void RealToDigits_UsualMantAndOrd(double x, int&Order, int&OrderLength, int mant_digit[], int ord_digit[], int QAftComma=6, int BaseDec=10, bool SortNatural=true);
void RealToDigits_IntAndFracSepar(double x, int&Order, int int_digit[], int frac_digit[], int QAftComma=6, int BaseDec=10, bool SortNatural=true);
QString IntToStringSimple(int x, int BaseDec=10);
QString RealToString(double x, int Repr_IntAndFrac0_ExpAfOrderLim1_ExpAnyhow2=0,  int QAftComma=6, int OrdAfWhichExp=6, int BaseDec=10);
//void NumToChars(double x, int BaseDec, int QCharsAftCommaRequired, int&len, char UsualNum[], char MantOrd[]);
//
char DigitSignCh(int digit, int baseDec=10);
QString DigitSign(int digit, int baseDec=10);
QString ExcelColumnByN(int N);
int ExcelColN(QString Col);
void ExcelCellCoordsFromAddress(QString CellSign, int&LineN, int&ColN);
//
bool IsComma(QString x);
bool IsOrderMark(QString x);
bool IsOrderMark(QString x, int BaseDecDec=10);
//double NumberParse(QStringx, int FracPartLenReq, int baseDec, bool ZeroForFracNecessary, int&IntPart,  double&FracPart, int&NeededFrac, int&Order, bool&Sign, int&ErstError){
TNumberParts StrNumberParse(QString x, TValsShowHide*vsh=NULL, int BaseDecDec=10);
double StrToReal(QString s, TValsShowHide*vsh=NULL, int BaseDec=10);


#endif // NUMBERPARSE_H

//NumberParse.cpp
#include "numberparse.h"



//NumberParse::NumberParse()
//{

//}



/*
void SetNumberDataNull(  TNumberParts&data){
     data.IntPartAsWritten=0;
     data.FracPartAsWritten=0;//dbl;
     data.OrderAsWritten=0;
     data.MantissaAsMathRules =0;//dbl;
     data.IntPartAsMathRules=0;
     data.FracPartAsMathRules=0;
     data.MantissaAsWritten =0;//dbl;
     data.IntPartWhole=0;
     data.FracPartWhole=0;//dbl;
     data.MantissaWhole=0;//dbl;
     data.Order=0;
     data.NumberHasPositiveSign=true;
     data.OrderHasPositiveSign=true;
     //data.OrderOfIntPart=0;
     //data.OrderOfFracPart=0;
     //data.
}
void WriteNumberParts(TNumberParts data, TValsShowHide*vsh){
                                            writeln(vsh,"Order="+IntToStr(data.Order));
        };
*/
TNumberParts::TNumberParts(){
    this->SetNull();
}
void TNumberParts::SetNull(){
     this->IntPartAsWritten=0;
     this->FracPartAsWritten=0;//dbl;
     this->OrderAsWritten=0;
     this->MantissaAsMathRules =0;//dbl;
     this->IntPartAsMathRules=0;
     this->FracPartAsMathRules=0;
     this->MantissaAsWritten =0;//dbl;
     this->IntPartWhole=0;
     this->FracPartWhole=0;//dbl;
     this->MantissaWhole=0;//dbl;
     this->Order=0;
     this->NumberHasPositiveSign=true;
     this->OrderHasPositiveSign=true;
}
void TNumberParts::ShowText(TValsShowHide*vsh){
    QString s;
    //
//    s.setNum(this->IntPartAsWritten);
//    //    s.setNum(this->FracPartAsWritten);
//    //    s.setNum(this->OrderAsWritten);
//    //    s.setNum(this->MantissaAsMathRules);
//    //    s.setNum(this->IntPartAsMathRules);
//    //    s.setNum(this->FracPartAsMathRules);
//    //    s.setNum(this->MantissaAsWritten);
//    //    s.setNum(this->IntPartWhole);
//    //    s.setNum(this->FracPartWhole);
//    //    s.setNum(this->MantissaWhole);
//    //    s.setNum(this->Order);
//    writeln(vsh,"Order="+IntToStr(this->Order));
//    s.setNum(BoolToInt(this->NumberHasPositiveSign));
//    //        //
    s.setNum(this->IntPartAsWritten);
    writeln(vsh,"IntPartAsWritten="+s);
    s.setNum(this->FracPartAsWritten);
    writeln(vsh,"FracPartAsWritten="+s);
    s.setNum(this->OrderAsWritten);
    writeln(vsh,"OrderAsWritten="+s);
    s.setNum(this->MantissaAsMathRules);
    writeln(vsh,"MantissaAsMathRules="+s);
    s.setNum(this->IntPartAsMathRules);
    writeln(vsh,"IntPartAsMathRules="+s);
    s.setNum(this->FracPartAsMathRules);
    writeln(vsh,"FracPartAsMathRules="+s);
    s.setNum(this->MantissaAsWritten);
    writeln(vsh,"MantissaAsWritten="+s);
    s.setNum(this->IntPartWhole);
    writeln(vsh,"IntPartWhole="+s);
    s.setNum(this->FracPartWhole);
    writeln(vsh,"FracPartWhole="+s);
    s.setNum(this->MantissaWhole);
    writeln(vsh,"MantissaWhole="+s);
    s.setNum(this->Order);
    writeln(vsh,"Order="+s);
    s.setNum(BoolToInt(this->NumberHasPositiveSign));
    writeln(vsh,"NumberHasPositiveSign="+s);
    s.setNum(BoolToInt(this->OrderHasPositiveSign));
    writeln(vsh,"OrderHasPositiveSign="+s);
};



void IntPartDet(double x, int&ip, double&IntPartFP){
    ip=0;
    IntPartFP=0;
    while(!((IntPartFP<=x)&&((IntPartFP+1)>x))){
        IntPartFP+=1;
        ip++;
    }
}
int IntPart(double x){
    double z=0;
    int ip=0;
    IntPartDet(x, ip, z);
    return ip;
}
TNumberParts SeparateNum(double x, TValsShowHide*vsh, int BaseDec){
    double z=0, x1=fabs(x);//, IntPartF, Mantissa;//, FracPartOfInt, FracPartOfFrac;
    int ord=1;
    TNumberParts NumberData;
    //SetNumberDataNull(NumberData);
    if(x<0){
        NumberData.NumberHasPositiveSign=false;
    }
    if(x1<1){
        NumberData.OrderHasPositiveSign=false;
    }
    if(x1>=1){
        while(z<x1){
            z+=1;
            NumberData.IntPartWhole+=1;
            //NumberData.Order+=1;
        }
        if(z>x1){
            z-=1;
            NumberData.IntPartWhole-=1;
            //NumberData.Order-=1;
        }
        //NumberData.Order=(NumberData.IntPartWhole/BaseDec);
        while(ord<NumberData.IntPartWhole){
            ord*=BaseDec;
            NumberData.Order++;
        }
        if(ord>NumberData.IntPartWhole){
             ord/=BaseDec;
            NumberData.Order--;
        }
                NumberData.MantissaWhole= (double)NumberData.IntPartWhole+NumberData.FracPartWhole;
        //
        z=x1;
        while(z>BaseDec){
             z/=BaseDec;
        }
        if(z<1){
             z*=BaseDec;
        }
        //
        //NumberData.MantissaAsMathRules=z;
        //NumberData.IntPartAsMathRules=IntPart(z);
                NumberData.FracPartAsMathRules;
    }else{  //x1<1
         z=x1;
         while(z<1){
             z*=BaseDec;
             NumberData.Order+=1;
         }
         if(z>BaseDec){
             z/=BaseDec;
             NumberData.Order-=1;
         }
         //NumberData.Order=(NumberData.IntPartWhole/BaseDec);
         NumberData.IntPartWhole=0;
         NumberData.FracPartWhole=x1;
         NumberData.MantissaWhole=          //
         //NumberData.IntPartAsMathRules=IntPart(z);
                NumberData.FracPartAsMathRules;
    }
    NumberData.MantissaAsMathRules=z;
    NumberData.IntPartAsMathRules=IntPart(z);
        //
    NumberData.IntPartAsWritten=NumberData.IntPartWhole;
    NumberData.FracPartAsWritten=NumberData.FracPartWhole;
    NumberData.MantissaAsWritten= NumberData.MantissaWhole;
    NumberData.OrderAsWritten= NumberData.Order;
    return NumberData;
}
void SeparateNum(double x, int&IntPartOfNum, double&FracPartOfNum, int&IntPartOfMant, double&FracPartOfMant, int&Order, int&Sgn, int&OrdSgn, int BaseDec){
    double z=0, x1=fabs(x), IntPartF, Mantissa;//, FracPartOfInt, FracPartOfFrac;
    TNumberParts NumberData;
    //23,45 =23+0,45 = 2,345E+1
    //initio
    IntPartOfNum=0;
    FracPartOfNum=0;
    IntPartOfMant=0;
    FracPartOfMant=0;
    Order=0;
    Sgn=1;
    OrdSgn=1;
    //signs
    if(x==0){
        IntPartOfNum=0;
        FracPartOfNum=0;
        IntPartOfMant=0;
        FracPartOfMant=0;
        Order=0;
        Sgn=1;
        OrdSgn=1;
    }else{
        if(x<0)Sgn=0;    else Sgn=1;
        if(x1<1)OrdSgn=0; else OrdSgn=1;
        //int part of num
        //IntPartOfNum=0;
        //while(!((z<x1)&&((z+1)>x1))){
        //    z=z+1;
        //    IntPartOfNum++;
        //}
        //IntPartF=z;
        IntPartDet(x1,IntPartOfNum,IntPartF);
        //Frac part of num
        FracPartOfNum=x1-IntPartF;
        //FracPartOfNum=x1-IntPartOfNum;
        //Mantissa & order
        Mantissa=x1;//IntPartF;
        Order=0;
        if(OrdSgn==1){
            Mantissa=x1;
            while(Mantissa>=BaseDec){
                Mantissa/=BaseDec;
                Order++;
            }
        }else{ // OrdSgn==0
            while(Mantissa<1){
                Mantissa*=BaseDec;
                Order++;
            }
        }
        //int part of mantissa
        //IntPartOfMant=0;
        //z=0;
        //while(!((z<Mantissa)&&((z+1)>Mantissa))){
        //    z=z+1;
        //    IntPartOfMant++;
        //}
        //IntPartF=z;
        IntPartDet(Mantissa,IntPartOfMant,IntPartF);
        FracPartOfMant=Mantissa-IntPartF;
    }
    //
    NumberData.MantissaWhole=Mantissa;
    NumberData.IntPartWhole= IntPartOfNum;
    NumberData.FracPartWhole= FracPartOfNum;
    NumberData.Order= Order;
}




void IntToDigits(int x, int&Order, int digit[], int BaseDec, bool SortNatural){
    int Sgn, x1=abs(x), Mantissa, y, z, CurDigit;
    if(x<0)Sgn=0;    else Sgn=1;
    Order=0;
    Mantissa=x1;
    Order=0;
    //if(OrdSgn==1){  //always so, becuause it is int
        Mantissa=x1;
        while(Mantissa>=BaseDec){
            Mantissa/=BaseDec;
            Order++;
        }
    //}
    y=x1;
    for(int i=1; i<=Order; i++){
        y/=BaseDec;//int part
        z=y/BaseDec;
        CurDigit=y-z*BaseDec;
        digit[i]=CurDigit;
    }
    digit[0]=x1-(x1/BaseDec)*BaseDec;
    if(SortNatural){
        SortVisaVersa(digit, Order+1);
    }
}
//new:
void RealToDigits_UsualMantAndOrd(double x, int&Order, int&OrderLength, int mant_digit[], int ord_digit[],  int QAftComma, int BaseDec, bool SortNatural){
    double z;
    int y;//, OrderFictive=0;
    TNumberParts NumberParts;
    NumberParts=SeparateNum(x, NULL, BaseDec);
    z=NumberParts.MantissaAsMathRules*IntPower(BaseDec, QAftComma);
    y=IntPart(z);
    IntToDigits(y, Order, mant_digit, BaseDec);
    IntToDigits(NumberParts.Order, OrderLength, ord_digit, BaseDec);
}
//new:
void RealToDigits_IntAndFracSepar(double x, int&Order, int int_digit[], int frac_digit[], int QAftComma, int BaseDec, bool SortNatural){
    double z;
    int y, OrderFictive=0;
    TNumberParts NumberParts;
    NumberParts=SeparateNum(x, NULL, BaseDec);
    IntToDigits(NumberParts.IntPartWhole, Order, int_digit, BaseDec);
    z=NumberParts.FracPartWhole*IntPower(BaseDec, QAftComma);
    y=IntPart(z);
    IntToDigits(y, OrderFictive, frac_digit, BaseDec);
}
//as was:
/*void RealToDigits_UsualMantAndOrd(double x, int&Order, int&OrderLength, int mant_digit[], int ord_digit[],  int QAftComma, int BaseDec){
    double IntPartR=0, y=x;
    int IntPart=0;
    int IntPartOfNum; double FracPartOfNum; int IntPartOfMant; double FracPartOfMant;  int Sgn; int OrdSgn;
    SeparateNum(x, IntPartOfNum, FracPartOfNum, IntPartOfMant, FracPartOfMant, Order, Sgn, OrdSgn, BaseDec);
    for(int i=1; i<=QAftComma; i++){
        y*=BaseDec;
    }
    IntPartDet(y, IntPart, IntPartR);
    IntToDigits(y, Order, mant_digit, BaseDec);
    IntToDigits(Order, OrderLength, ord_digit, BaseDec);
} */
//as was:
/*
void RealToDigits_IntAndFracSepar(double x, int&Order, int int_digit[], int frac_digit[], int QAftComma, int BaseDec){
    double IntPartR=0, y=x, OrderFictive;
    //int IntPart=0;
    int IntPartOfNum=0; double FracPartOfNum=0; int IntPartOfMant=0; double FracPartOfMant=0;  int Sgn=0; int OrdSgn=0;
    //int NeededPartOfFracPart;
    SeparateNum(x, BaseDec, IntPartOfNum, FracPartOfNum, IntPartOfMant, FracPartOfMant, Order, Sgn, OrdSgn);
    y=FracPartOfNum;
    for(int i=1; i<=QAftComma; i++) y*=BaseDec;
    //IntPartDet(y, IntPart, IntPartR);
    IntToDigits(y, Order, int_digit, BaseDec);
    //
    //NeededPartOfFracPart=IntPart(x);
    OrderFictive=QAftComma;
    IntToDigits(y, Order, int_digit, BaseDec);
}
*/
QString IntToStringSimple(int x, int BaseDec){
    QString s="", c;
    bool SortNatural=true;
    int arr1[50], arr2[50], Order=0, OrderLength=0;
    IntToDigits(x, Order, arr1, BaseDec);
    if(x<0)s="-";
    for(int i=1; i<=Order+1; i++){
        c=DigitSign(arr[i-1], BaseDec);
        c.setNum(arr[i-1]);
        s=s+c;
    }
    return s;
}

QString RealToString(double x, int Repr_IntAndFrac0_ExpAfOrderLim1_ExpAnyhow2,  int QAftComma, int OrdAfWhichExp, int BaseDec){
    QString rslt, cur, rsltIntAndFrac, rsltExp;
    int digit_mant[80], digit_ord[12], digit_int[50], digit_frac[50];
    int Order=0, OrderLength=0;
    RealToDigits_UsualMantAndOrd(x, Order, OrderLength, digit_mant, digit_ord, QAftComma, BaseDec, true);
    RealToDigits_IntAndFracSepar(x, Order, digit_int, digit_frac, QAftComma, BaseDec, true);
    rsltIntAndFrac="";
    if(x<0) rsltIntAndFrac="-";
    for(int i=1; i<=Order+1; i++){
        cur=IntToStr(digit_int[i-1]);
        rsltIntAndFrac=rsltIntAndFrac+cur;
    }
    rsltIntAndFrac=rsltIntAndFrac+".";
    for(int i=1; i<=QAftComma; i++){
        cur=IntToStr(digit_frac[i-1]);
        rsltIntAndFrac=rsltIntAndFrac+cur;
    }
    rsltExp="";
    if(x<0) rsltExp="-";
    cur=IntToStr(digit_mant[1-1]);
    rsltExp=rsltExp+cur;
    rsltExp=rsltExp+".";
    for(int i=2; i<=QAftComma; i++){
        cur=IntToStr(digit_mant[i-1]);
        rsltExp=rsltExp+cur;
    }
    if(BaseDec<=14)rsltExp=rsltExp+"E";
    else rsltExp=rsltExp+"@";
    if(x<1) rsltExp=rsltExp+"-";
    else if(Order>0) rsltExp=rsltExp+"+";
    for(int i=1; i<=OrderLength+1; i++){
        cur=IntToStr(digit_ord[i-1]);
        rsltExp=rsltExp+cur;
    }
    switch(Repr_IntAndFrac0_ExpAfOrderLim1_ExpAnyhow2){
        case 0:
            rslt=rsltIntAndFrac;
        break;
        case 1:
            if(Order<OrdAfWhichExp) rslt=rsltIntAndFrac;
            else rslt=rsltExp;
        break;
        case 2:
            rslt=rsltExp;
        break;
    }
    return rslt;
}

/*void IntToChars(int x, int BaseDec, int&len, int digit[], char ch[]){
    int Order=0, Sgn, OrdSgn, x1=abs(x), Mantissa, y, n;
    if(x<0)Sgn=0;    else Sgn=1;
    if(x1<1)OrdSgn=0; else OrdSgn=1;
    Mantissa=x1;
    Order=0;
    if(OrdSgn==1){
        Mantissa=x1;
        while(Mantissa>=BaseDec){
            Mantissa/=BaseDec;
            Order++;
        }
    }else{ // OrdSgn==0
        while(Mantissa<1){
            Mantissa*=BaseDec;
            Order++;
        }
    }
    y=x1;
    for(int i=1; i<=Order; i++){
        y/=BaseDec;//int part
        digit[i-1]=x1-(i-1)*BaseDec;
    }
}*/
//void NumToChars(double x, int BaseDec, int QCharsAftCommaRequired, int&len, char UsualNum[], char MantOrd[]){
//    int IntPartOfNum=0; double FracPartOfNum=0; int IntPartOfMant=0; double FracPartOfMant=0; int Order=0; int Sgn=0; int OrdSgn=0;
//    SeparateNum(x, BaseDec, IntPartOfNum, FracPartOfNum, IntPartOfMant, FracPartOfMant, Order, Sgn, OrdSgn);
//    len=1;//"."
//    if(Sgn==1)len++;
//    if(OrdSgn==1)len++;

//}


char DigitSignCh(int digit, int baseDec){
    char r;
    if(digit==0){
        r='0';
    }
    if(digit==1){
        //if(baseDec!=27)r='0';
        //else r='A';
        if(baseDec==27 || baseDec==8)r='A';
        else r='1';
    }
    if(digit==2){
        //if(baseDec!=27)r='2';
        //else r='B';
        if(baseDec==27 || baseDec==8)r='B';
        else r='2';
    }
    if(digit==3){
        //if(baseDec!=27)r='3';
        //else r='C';
        if(baseDec==27 || baseDec==8)r='C';
        else r='3';
    }
    if(digit==4){
        //if(baseDec!=27)r='4';
        //else r='D';
        if(baseDec==27 || baseDec==8)r='D';
        else r='4';
    }
    if(digit==5){
        //if(baseDec!=27)r='5';
        //else r='E';
        if(baseDec==27 || baseDec==8)r='E';
        else r='5';
    }
    if(digit==6){
        //if(baseDec!=27)r='6';
        //else r='F';
        if(baseDec==27 || baseDec==8)r='F';
        else r='6';
    }
    if(digit==7){
        //if(baseDec!=27)r='7';
        //else r='G';
        if(baseDec==27 || baseDec==8)r='G';
        else r='7';
    }
    if(digit==8){
        //if(baseDec!=27)r='8';
        //else r='H';
        if(baseDec==27 || baseDec==8)r='H';
        else r='8';
    }
    if(digit==9){
        //if(baseDec!=27)r='9';
        //else r='I';
        if(baseDec==27 || baseDec==8)r='I';
        else r='9';
    }
    //
    if(digit==10){
        if(baseDec==27)r='J';
        else r='A';
    }
    if(digit==11){
        if(baseDec==27)r='K';
        else r='B';
    }
    if(digit==12){
        if(baseDec==27)r='L';
        else r='C';
    }
    if(digit==13){
        if(baseDec==27)r='M';
        else r='D';
    }
    if(digit==14){
        if(baseDec==27)r='N';
        else r='E';
    }
    if(digit==15){
        if(baseDec==27)r='O';
        else r='F';
    }
    //
    if(digit==16){
        if(baseDec==27)r='P';
        else r='G';
    }
    if(digit==17){
        if(baseDec==27)r='Q';
        else r='H';
    }
    if(digit==18){
        if(baseDec==27)r='R';
        else r='I';
    }
    if(digit==19){
        if(baseDec==27)r='S';
        else r='J';
    }
    if(digit==20){
        if(baseDec==27)r='T';
        else r='K';
    }
    if(digit==21){
        if(baseDec==27)r='U';
        else r='L';
    }
    if(digit==22){
        if(baseDec==27)r='V';
        else r='M';
    }
    if(digit==23){
        if(baseDec==27)r='W';
        else r='N';
    }
    if(digit==24){
        if(baseDec==27)r='X';
        else r='O';
    }
    if(digit==25){
        if(baseDec==27)r='Y';
        else r='P';
    }
    if(digit==26){
        if(baseDec==27)r='Z';
        else r='Q';
    }
    //
    if(digit==27) r='R';
    if(digit==28) r='S';
    if(digit==29) r='T';
    if(digit==30) r='U';
    if(digit==31) r='V';
    if(digit==32) r='W';
    if(digit==33) r='X';
    if(digit==34) r='Y';
    if(digit==35) r='Z';
    //
    if(digit>=baseDec)r='?';
    //
    return r;
}

QString DigitSign(int digit, int baseDec){
    QString r;
    if(digit==0){
        r="0";
    }
    if(digit==1){
        //if(baseDec!=27)r="0";
        //else r="A";
        if(baseDec==27 || baseDec==8)r="A";
        else r="1";
    }
    if(digit==2){
        //if(baseDec!=27)r="2";
        //else r="B";
        if(baseDec==27 || baseDec==8)r="B";
        else r="2";
    }
    if(digit==3){
        //if(baseDec!=27)r="3";
        //else r="C";
        if(baseDec==27 || baseDec==8)r="C";
        else r="3";
    }
    if(digit==4){
        //if(baseDec!=27)r="4";
        //else r="D";
        if(baseDec==27 || baseDec==8)r="D";
        else r="4";
    }
    if(digit==5){
        //if(baseDec!=27)r="5";
        //else r="E";
        if(baseDec==27 || baseDec==8)r="E";
        else r="5";
    }
    if(digit==6){
        //if(baseDec!=27)r="6";
        //else r="F";
        if(baseDec==27 || baseDec==8)r="F";
        else r="6";
    }
    if(digit==7){
        //if(baseDec!=27)r="7";
        //else r="G";
        if(baseDec==27 || baseDec==8)r="G";
        else r="7";
    }
    if(digit==8){
        //if(baseDec!=27)r="8";
        //else r="H";
        if(baseDec==27 || baseDec==8)r="H";
        else r="8";
    }
    //
    if(digit==9){
        //if(baseDec!=27)r="9";
        //else r="I";
        if(baseDec==27 || baseDec==8)r="I";
        else r="9";
    }
    //
    if(digit==10){
        if(baseDec==27)r="J";
        else r="A";
    }
    if(digit==11){
        if(baseDec==27)r="K";
        else r="B";
    }
    if(digit==12){
        if(baseDec==27)r="L";
        else r="C";
    }
    if(digit==13){
        if(baseDec==27)r="M";
        else r="D";
    }
    if(digit==14){
        if(baseDec==27)r="N";
        else r="E";
    }
    if(digit==15){
        if(baseDec==27)r="O";
        else r="F";
    }
    //
    if(digit==16){
        if(baseDec==27)r="P";
        else r="G";
    }
    if(digit==17){
        if(baseDec==27)r="Q";
        else r="H";
    }
    if(digit==18){
        if(baseDec==27)r="R";
        else r="I";
    }
    if(digit==19){
        if(baseDec==27)r="S";
        else r="J";
    }
    if(digit==20){
        if(baseDec==27)r="T";
        else r="K";
    }
    if(digit==21){
        if(baseDec==27)r="U";
        else r="L";
    }
    if(digit==22){
        if(baseDec==27)r="V";
        else r="M";
    }
    if(digit==23){
        if(baseDec==27)r="W";
        else r="N";
    }
    if(digit==24){
        if(baseDec==27)r="X";
        else r="O";
    }
    if(digit==25){
        if(baseDec==27)r="Y";
        else r="P";
    }
    if(digit==26){
        if(baseDec==27)r="Z";
        else r="Q";
    }
    //
    if(digit==27)r="R";
    if(digit==28)r="S";
    if(digit==29)r="T";
    if(digit==30)r="U";
    if(digit==31)r="V";
    if(digit==32)r="W";
    if(digit==33)r="X";
    if(digit==34)r="Y";
    if(digit==35)r="Z";
    //
    if(digit>=baseDec)r="-1";
    //
    return r;
}

QString ExcelColumnByN(int N){
    QString S;
    int Order=0;
    int digit[3];
    int m=N/27;
    int n=N+m;
    if(n==0)n++;
    //S=IntToStr(N)+"=";
    S="";
    if(N<=0)S="?";
    else{
        //void IntToDigits(int x, int&Order, int digit[], int BaseDec=10);
        //IntToDigits(n, 27, Order, digit);
        IntToDigits(n, Order, digit, 27);
        for(int i=Order+1; i>=1; i--){
            S+=DigitSign(digit[i-1], 27);
        }
    }
    return S;
}
int ExcelColN(QString Col){
    int ColN=0;
    QString s;
    bool contin=true;
    while(!(/*ColN>=256 ||*/ ExcelColumnByN(ColN)==Col))ColN++;
    //while(contin){
    //     ColN++;
    //     s=ExcelColumnByN(ColN);
    //     if(s==Col || ColN==256)contin=false;
    //}
    return ColN;
}


int DigitOf(QString s, int baseDec){
    int digit=-1;
    QString r;
    if(s=="0"){
        digit=0;
    }
    if(s=="1"){
        if(baseDec!=27 || baseDec!=8)digit=1;
    }
    if(s=="2"){
        if(baseDec!=27 || baseDec!=8)digit=2;
    }
    if(s=="3"){
        if(baseDec!=27 || baseDec!=8)digit=3;
    }
    if(s=="4"){
        if(baseDec!=27 || baseDec!=8)digit=4;
    }
    if(s=="5"){
        if(baseDec!=27 || baseDec!=8)digit=5;
    }
    if(s=="6"){
        if(baseDec!=27 || baseDec!=8)digit=6;
    }
    if(s=="7"){
        if(baseDec!=27 || baseDec!=8)digit=7;
    }
    if(s=="8"){
        if(baseDec!=27 || baseDec!=8)digit=8;
    }
    //
    if(s=="9"){
        if(baseDec!=27)digit=9;
    }
    //
    if(s=="A"){
        if(baseDec==27|| baseDec==8)digit=1;
        else digit=10;
    }
    if(s=="B"){
        if(baseDec==27|| baseDec==8)digit=2;
        else digit=11;
    }
    if(s=="C"){
        if(baseDec==27|| baseDec==8)digit=3;
        else digit=12;
    }
    if(s=="D"){
        if(baseDec==27|| baseDec==8)digit=4;
        else digit=13;
    }
    if(s=="E"){
        if(baseDec==27|| baseDec==8)digit=5;
        else digit=14;
    }
    if(s=="F"){
        if(baseDec==27|| baseDec==8)digit=6;
        else digit=15;
    }
    if(s=="G"){
        if(baseDec==27|| baseDec==8)digit=7;
        else digit=16;
    }
    if(s=="H"){
        if(baseDec==27|| baseDec==8)digit=8;
        else digit=17;
    }
    //
    if(s=="I"){
        if(baseDec==27)digit=9;
        else digit=18;
    }
    if(s=="J"){
        if(baseDec==27)digit=10;
        else digit=19;
    }
    if(s=="K"){
        if(baseDec==27)digit=11;
        else digit=20;
    }
    if(s=="L"){
        if(baseDec==27)digit=12;
        else digit=21;
    }
    if(s=="M"){
        if(baseDec==27)digit=13;
        else digit=22;
    }
    if(s=="N"){
        if(baseDec==27)digit=14;
        else digit=23;
    }
    if(s=="O"){
        if(baseDec==27)digit=15;
        else digit=24;
    }
    if(s=="P"){
        if(baseDec==27)digit=16;
        else digit=25;
    }
    if(s=="Q"){
        if(baseDec==27)digit=17;
        else digit=26;
    }
    if(s=="R"){
        if(baseDec==27)digit=18;
        else digit=27;
    }
    //
    if(s=="S"){
        if(baseDec==27)digit=19;
        else digit=28;
    }
    if(s=="T"){
        if(baseDec==27)digit=20;
        else digit=29;
    }
    //
    if(s=="U"){
        if(baseDec==27)digit=21;
        else digit=30;
    }
    if(s=="V"){
        if(baseDec==27)digit=22;
        else digit=31;
    }
    if(s=="W"){
        if(baseDec==27)digit=23;
        else digit=32;
    }
    if(s=="X"){
        if(baseDec==27)digit=24;
        else digit=33;
    }
    if(s=="Y"){
        if(baseDec==27)digit=25;
        else digit=34;
    }
    if(s=="Z"){
        if(baseDec==27)digit=26;
        else digit=35;
    }
    //
    if(digit>=baseDec)digit=-1;
    //
    return digit;
}
bool IsDigit(QString s, int baseDec){return (DigitOf(s,baseDec)!=-1);}
void ExcelCellCoordsFromAddress(QString CellSign, int&LineN, int&ColN){
    QString CurStr, ColSign;
    int L=CellSign.length(), d;
    ColSign=""; LineN=0;
    for(int i=1; i<=L; i++){
        CurStr=CellSign.mid(i,1);
        d=DigitOf(CurStr,10);
        if(d==-1)ColSign+=CurStr;
        else LineN=LineN*10+d;
    }
    ColN=ExcelColN(ColSign);
}


bool IsComma(QString x){
    return (x=="."||x==",");
}
bool IsOrderMark(QString x){
    return }
bool IsOrderMark(QString x, int BaseDec){
    bool b;
    b=( (x=="#"||x=="@") || ( (x=="E"||x=="e")&&(BaseDec<=14) ) );
    return b;
}
//double NumberParse(QStringx, int FracPartLenReq, int baseDec, bool ZeroForFracNecessary, int&IntPart,  double&FracPart, int&NeededFrac, int&Order, bool&Sign, int&ErstError){
TNumberParts StrNumberParse(QString x, TValsShowHide*vsh, int BaseDec){
    TNumberParts NumParts;
    int NowInt1Frac2Ord3=1, digit=-1, LenOfFrPrt=0;//, FrPrtInt=0;
    QString s, prev_s, qw="E";
    double FrcPrt=0;
    bool OrderIsPositive=true;
    //
    double y;
    bool Sign, ZeroForFracNecessary;
    int ErstError;
    //
    NumParts.IntPartAsWritten=0;
    NumParts.Order=0;
    NumParts.FracPartAsWritten=0;
    NumParts.MantissaAsWritten=0;
    //
    NumParts.MantissaAsMathRules=0;
    NumParts.IntPartAsMathRules=0;
    NumParts.FracPartAsMathRules=0;
    NumParts.MantissaAsWritten=0;
    //
    NumParts.Order=0;//Order=0;
    Sign=true;
    writeln(vsh,x);
    for(int i=1; i<=x.length(); i++){
        if(i>1)prev_s=s;
        s=x.mid(i,1);
        writeln(vsh,s);
        if(IsOrderMark(s,BaseDec)){
            if(NowInt1Frac2Ord3<3){
                NowInt1Frac2Ord3=3;
                writeln(vsh,"now order");
            }else{
                //error
                writeln(vsh,"IncorrectSym");
            }
        }
        if(s=="-"){
           //if(IsOrderMark(prev_s,baseDec)) OrderIsPositive=false; //also gut
           if(NowInt1Frac2Ord3==3 && NumParts.Order==0){
              OrderIsPositive=false;
              writeln(vsh,"Negative Order");
           }else if(i==1){
              Sign=false;
              writeln(vsh,"Negative Number");
           }else{
              // error
              writeln(vsh,"IncorrectSym");
           }
        }
        if(s=="+"){
           //if(IsOrderMark(prev_s,baseDec)) OrderIsPositive=true; //also gut
           if(NowInt1Frac2Ord3==3 && NumParts.Order==0){
              OrderIsPositive=true;
              writeln(vsh,"Positive Order");
           }else if(i==1){
               Sign=true;
               writeln(vsh,"Positive Number");
           }else{
               //error
               writeln(vsh,"IncorrectSym");
           }
        }
        if(s=="."||s==","){
            if(NowInt1Frac2Ord3==1){
                NowInt1Frac2Ord3=2;
                writeln(vsh,"Now Frac part");
            }else{
                ErstError=i;
                writeln(vsh,"IncorrectSym");
            }
            //
                           ErstError=i;
                writeln(vsh,"IncorrectSym");
            }
        }
        digit=DigitOf(s,BaseDec);
        //writeln(vsh,"Digit="+IntToStr(digit));
        if(digit!=-1){
            writeln(vsh,"Digit="+IntToStr(digit));
            if(NowInt1Frac2Ord3==1){
                                            }else if(NowInt1Frac2Ord3==2){
                LenOfFrPrt++;
                //FrPrtInt=FrPrtInt*baseDec+digit;
                                                            }else if(NowInt1Frac2Ord3==3){
                NumParts.Order=NumParts.Order*BaseDec+digit;
                            }
        }
    }
    if(!OrderIsPositive)NumParts.Order=-NumParts.Order;
    NumParts.NumberHasPositiveSign=Sign;
    NumParts.OrderHasPositiveSign=OrderIsPositive;
        if(Sign==false)y=-y;
    //return y;
    return NumParts;
}

double StrToReal(QString s,  TValsShowHide*vsh, int BaseDec){
    double y;
    TNumberParts NumParts;
    NumParts= StrNumberParse(s, vsh, BaseDec);
    bool Sign=(NumParts.NumberHasPositiveSign==true);
        if(Sign==false)y=-y;
    return y;
}
double StrToInt(QString s,  TValsShowHide*vsh, int BaseDec){
    //double y;
    int z;
    TNumberParts NumParts;
    NumParts= StrNumberParse(s, vsh, BaseDec);
    bool Sign=(NumParts.NumberHasPositiveSign==true);
        //if(Sign==false)y=-y;
        if(Sign==false)z=-z;
    return z;
}

/*QStringRealToString(double x, int Repr_IntAndFrac0_ExpAfOrderLim1_ExpAnyhow2,  int QAftComma, int OrdAfWhichExp, int BaseDec){
    QStringst r;
    int Order=0;
    str="";
    if(x<0)str=str+"-";
    return str;
} */


// MyMathLib.h

#ifndef MYMATHLIB_H
#define MYMATHLIB_H


//class MyMathLib
//{
//public:
//    MyMathLib();
//};

double IntPower(double x, int pow);
//float IntPower(float x, int pow);
//int IntPower(int x, int pow);

#endif // MYMATHLIB_H

//MyMathLib.cpp

#include "mymathlib.h"

//MyMathLib::MyMathLib()
//{

//}

double IntPower(double x, int pow){
    double y=1;
    if(pow==0) y=1;
    else if(pow==1) y=x;
    else if(pow>0){
        for(int i=1; i<=pow; i++) y*=x;
    }else{//pow<0
        for(int i=1; i<=pow; i++) y/=x;
    }
    return y;
}
//float IntPower(float x, int pow){
//    float y=1;
//    if(pow==0) y=1;
//    else if(pow==1) y=x;
//    else if(pow>0){
//        for(int i=1; i<=pow; i++) y*=x;
//    }else{//pow<0
//        for(int i=1; i<=-pow; i++) y/=x;
//    }
//    return y;
//}
//int IntPower(int x, int pow){
//    int y=1;
//    if(pow==0) y=1;
//    else if(pow==1) y=x;
//    else if(pow>0){
//        for(int i=1; i<=pow; i++) y*=x;
//    }else{//pow<0
//        for(int i=1; i<=-pow; i++) y*=x;
//    }
//    return y;
//}


// tableInfo.h

#ifndef TABLEINFO_H
#define TABLEINFO_H

#include"mylib.h"

//class TableInfo
//{
//public:
//    TableInfo();
//};
    //
    const int DoubleTypeN = 1;
    const int FloatTypeN = 2;
    const int IntTypeN = 3;
    const int BoolTypeN = 4;
    const int StringTypeN = 5;
    //
    const int DoubleArrayTypeN = 11;
    const int FloatArrayTypeN = 12;
    const int IntArrayTypeN = 13;
    const int BoolArrayTypeN = 14;
    const int StringArrayTypeN = 15;
    //
    const int UniqueIntValKeeperTypeN = 23;
    //
    const int DoubleItemsFieldHeaderCellTypeN = 31;
    const int IntItemsFieldHeaderCellTypeN = 33;
    const int StringItemsFieldHeaderCellTypeN = 35;
    //
    const int DefaultAnyCellTypeN = StringTypeN;
    const int DefaultContentCellTypeN = DoubleTypeN;
    const int DefaultColOfLineHeaderCellTypeN = IntTypeN;
    const int DefaultLineOfColHeaderCellTypeN = DefaultAnyCellTypeN;
    //
    const std::string TableDataComponent_ContentCell = "Content cell";
    const std::string TableDataComponent_LineOfColHeaderCell = "Line of Col Hdr";
    const std::string TableDataComponent_ColOfLineHeaderCell = "Col of Line Hdr";
    const std::string TableDataComponent_LinesGenName = "Lines Gen Name";
    const std::string TableDataComponent_ColsGenName = "Cols Gen Name";
    const std::string TableDataComponent_TableName = "Table Name";
    const std::string TableDataComponent_LinesGenName_Scnd = "Lines Gen Name Scnd";
    const std::string TableDataComponent_ColsGenName_Scnd = "Cols Gen Name Scnd";
    const std::string TableDataComponent_TableName_Scnd = "Table Name Scnd";
    const std::string TableDataComponent_LineOfColHeaderCell_Scnd = "Line of Col Hdr Scnd";
    const std::string TableDataComponent_ColOfLineHeaderCell_Scnd = "Col of Line Hdr Scnd";
    //
    const std::string TrueWord = "true";
    const std::string FalseWord = "false";
    //
    //
    class TableCellAccessConfiguration //cl 5
    {
    public:
        bool CheckCellExistance;
        bool PreserveVal;
        int LengthOfArrCellTypes;
        int UniqueIntVal;
        //
        TableCellAccessConfiguration();
        TableCellAccessConfiguration ReturnCopy();
        void SetDefault();
        void SetValsPreserve_Yes();
        void SetValsPreserve_No();
        void SetLength(int L);
        QString ToString();
        bool GetIfNeedToCheckCellExistance();
        bool GetIfNeedToPreserveVal();
    }; //cl 5 TableCellAccessConfiguration
    class TableSettingConfiguration //cl 6
    {
    public:
        //public bool PreserveVals;
        TableCellAccessConfiguration CellCfg;
        bool WriteParamsInfo;
        //
        TableSettingConfiguration();
        TableSettingConfiguration ReturnCopy();
        void SetDefault();
        void SetValsPreserve_Yes();
        void SetValsPreserve_No();
        void SetLength(int L);
        QString ToString();
        bool GetIfNeedToWriteParamsInfo();
        bool GetIfNeedToPreserveVal();
    }; //cl 6 TableSettingConfiguration
    //
#endif // TABLEINFO_H

//tableinfo.cpp
#include "tableinfo.h"

//TableInfo::TableInfo()
//{

//}

//class TableCellAccessConfiguration:ICloneable //cl 5
//    {
//public:
    bool TableCellAccessConfiguration::CheckCellExistance;
    bool TableCellAccessConfiguration::PreserveVal;
    int TableCellAccessConfiguration::LengthOfArrCellTypes;
    int TableCellAccessConfiguration::UniqueIntVal;
    //
        {
        SetDefault();
    }
    TableCellAccessConfiguration TableCellAccessConfiguration::Clone() { return this.MemberwiseClone(); }
    void SetDefault()
    {
            CheckCellExistance = false;
            PreserveVal = false;
            LengthOfArrCellTypes = 1;
            UniqueIntVal = 1;
    }
    void TableCellAccessConfiguration::SetValsPreserve_Yes() { PreserveVal = true; }
    void TableCellAccessConfiguration::SetValsPreserve_No() { PreserveVal = false; }
    void TableCellAccessConfiguration::SetLength(int L)
    {
        if (L >= 1 && L <= MyLib.MaxInt) LengthOfArrCellTypes = L;
    }
    QString TableCellAccessConfiguration::ToString()
    {
        string s;
        s = "";
        s = s + "CheckCellExistance: " + MyLib.BoolToInt(CheckCellExistance);
        s = s + " PreserveVal: " + MyLib.BoolToInt(PreserveVal);
        s = s + " Length of ArrCellTypes: " + LengthOfArrCellTypes.ToString();
        s = s + " Unique int val: " + UniqueIntVal.ToString();
        return s;
    }
    bool TableCellAccessConfiguration::GetIfNeedToCheckCellExistance() { return CheckCellExistance; }
    bool TableCellAccessConfiguration::GetIfNeedToPreserveVal() { return PreserveVal; }
//}; //cl 5 TableCellAccessConfiguration
//class TableSettingConfiguration:ICloneable //cl 6
//{
//public:
    //public bool PreserveVals;
    TableCellAccessConfiguration CellCfg;
    bool TableCellAccessConfiguration::WriteParamsInfo;
    //
    TableCellAccessConfiguration::TableSettingConfiguration() { SetDefault(); }
    TableCellAccessConfiguration TableCellAccessConfiguration::ReturnCopy(){
            TableSettingConfiguration NewObj;
            NewObj = new TableSettingConfiguration();
            NewObj.CellCfg = this.CellCfg;
            NewObj.WriteParamsInfo = this.WriteParamsInfo;
            return NewObj;
    }
    void TableCellAccessConfiguration::SetDefault()
    {
      CellCfg = new TableCellAccessConfiguration();
      WriteParamsInfo = true;
      //PreserveVals = false;
    }
    void TableCellAccessConfiguration::SetValsPreserve_Yes() { CellCfg.PreserveVal = true; }
    void TableCellAccessConfiguration::SetValsPreserve_No() { CellCfg.PreserveVal = false; }
    void TableCellAccessConfiguration::SetLength(int L) { CellCfg.SetLength(L); }
    QString TableCellAccessConfiguration::ToString()
    {
        string s;
        s = "";
        s = s + "WriteParamsInfo: " + MyLib.BoolToInt(WriteParamsInfo);
        //s = s + " PreserveVal: " + MyLib.BoolToInt(PreserveVals);
        s = s + " Cell Configuration: " + CellCfg.ToString();
        return s;
    }
    bool TableCellAccessConfiguration::GetIfNeedToWriteParamsInfo() { return WriteParamsInfo; }
    bool TableCellAccessConfiguration::GetIfNeedToPreserveVal() { return CellCfg.PreserveVal; }
//}; //cl 6 TableSettingConfiguration


//mylib.h

#ifndef MYLIB_H
#define MYLIB_H

#include<iostream>
#include<QString>
#include"math.h"
#include <qtextbrowser.h>//QTextBrowser
//class MyLib
//{
//public:
//    MyLib();
//};

const bool BoolValByDefault=true;
const int MaxInt=65000;

int BoolToInt(bool x);
bool  BoolOfInt(int x);
bool IntToBool(int x);
bool  IntOfBool(bool x);

QString FloatToStr(float x);
QString FloatToStr(double x);
QString IntToStr(int x);

bool IsTrueWord(QString word);
bool IsFalseWord(QString word);

char*ReadLine(FILE*f);
//char*ReadLine(FILE*f, int Show1Hide0, bool ConsoleInterface, TMemo*M);
int CharPtrToArr(char*ptr, char Arr[]);

//class TValsShowHide{
//  public:
//    int Show1Hide0;
//    bool ConsoleInterface;
//    TMemo*M;
//    TStringGrid*G;
//    FILE*f;
//    TValsShowHide();
//    void SetWriting(int v);
//    void EnableWriting();
//    void DisableWriting();
//    void write(char*s);
//    void write(QStrings);
//    void writeln(char*s);
//    void writeln(QStrings);
//};

class TValsShowHide; //forward declaration!

template<typename T> Swap(T&x1, T&x2){
    T buf;
    buf=x1;
    x1=x2;
    x2=buf;
}

template<typename T> SortVisaVersa(T*&x, int Q, TValsShowHide*vsh=NULL){    //checked, works well
    int NBound, N1, N2;
    if(Q==0) NBound=Q/2;
    else NBound=(Q-1)/2;
    for(int i=1; i<=NBound; i++){
        N1= i-1;
        N2= Q-i+1-1;
        Swap((*(x+N1)),(*(x+N2)));
    }
}

//struct TValsShowHide{
//    int Show1Hide0;
//    bool ConsoleInterface;
//    QTextBrowser*TxtFld;
//    FILE*f;
//};

class TValsShowHide{
  public:
    int Show1Hide0;
    bool ConsoleInterface;
    QTextBrowser*TxtFld;
    FILE*f;
    //
    TValsShowHide();
    void EnableWriting();
    void DisableWriting();
    void write(char*s);
    void write(QString str);
    void writeln(char*s);
    void writeln(QString str);
};
//
void writeln(TValsShowHide *VSH, char*s);
void writeln(TValsShowHide *VSH, QString str);
//void writeln(TValsShowHide *VSH, char*s);
//void writeln(TValsShowHide *VSH, QString str);

#endif // MYLIB_H

//mylib.cpp
#include "mylib.h"

#include"qstring.h"

//MyLib::MyLib()
//{

//}



int BoolToInt(bool x){
    int y=0;
//    bool b=BoolValByDefault;
//    if(b==true){
//        if(x==0)
//    }
    if(x)y=1;
    return y;

}
bool  BoolOfInt(int x){
    bool y=BoolValByDefault, DfltIsTrue=BoolValByDefault;
    if(DfltIsTrue==true){
        y=(x!=0);
    }else{
        y=(x==1);
    }
    return y;
}
bool IntToBool(int x){ return BoolOfInt(x); }
bool  IntOfBool(bool x){ return BoolToInt(x); }

QString FloatToStr(float x){
   QString ss;
   ss.setNum(x);
   return ss;
}
QString FloatToStr(double x){
    QString ss;
    ss.setNum(x);
    return ss;
 }
QString IntToStr(int x){
    QString ss;
    ss.setNum(x);
    return ss;
 }


int IsMathFunction(QString word){
    int N=0;
    int L=word.length();
    if(l==4){
       if(
           (word.mid(1-1,1)=="s" || word.mid(1-1,1)=="S")
               &&
           (word.mid(2-1,1)=="i" || word.mid(2-1,1)=="I")
               &&
           (word.mid(3-1,1)=="n" || word.mid(3-1,1)=="N")
               &&
           (word.mid(4-1,1)=="h" || word.mid(4-1,1)=="H")
         )N=21;
         //else r=false;
       if(
           (word.mid(1-1,1)=="c" || word.mid(1-1,1)=="C")
               &&
           (word.mid(2-1,1)=="o" || word.mid(2-1,1)=="O")
               &&
           (word.mid(3-1,1)=="s" || word.mid(3-1,1)=="S")
               &&
           (word.mid(4-1,1)=="h" || word.mid(4-1,1)=="H")
         )N=22;
         //else r=false;
       if(
           (word.mid(1-1,1)=="t" || word.mid(1-1,1)=="T")
               &&
           (word.mid(2-1,1)=="a" || word.mid(2-1,1)=="A")
               &&
           (word.mid(3-1,1)=="n" || word.mid(3-1,1)=="N")
               &&
           (word.mid(4-1,1)=="h" || word.mid(4-1,1)=="H")
         )N=23;
         //else r=false;
       if(
           (word.mid(1-1,1)=="s" || word.mid(1-1,1)=="S")
               &&
           (word.mid(2-1,1)=="i" || word.mid(2-1,1)=="I")
               &&
           (word.mid(3-1,1)=="g" || word.mid(3-1,1)=="G")
               &&
           (word.mid(4-1,1)=="h" || word.mid(4-1,1)=="N")
         )N=24;
         //else r=false;
        if(
            (word.mid(1-1,1)=="a" || word.mid(1-1,1)=="A")
                &&
            (word.mid(2-1,1)=="s" || word.mid(2-1,1)=="S")
                &&
            (word.mid(3-1,1)=="i" || word.mid(3-1,1)=="I")
                &&
            (word.mid(4-1,1)=="n" || word.mid(4-1,1)=="N")
           )N=24;
              //else r=false;
        if(
            (word.mid(1-1,1)=="a" || word.mid(1-1,1)=="A")
                &&
            (word.mid(2-1,1)=="c" || word.mid(2-1,1)=="C")
                &&
            (word.mid(3-1,1)=="o" || word.mid(3-1,1)=="O")
                &&
             (word.mid(4-1,1)=="s" || word.mid(4-1,1)=="S")
           )N=24;
              //else r=false;
        if(
            (word.mid(1-1,1)=="a" || word.mid(1-1,1)=="A")
                &&
            (word.mid(2-1,1)=="t" || word.mid(2-1,1)=="T")
                &&
            (word.mid(3-1,1)=="a" || word.mid(3-1,1)=="A")
                &&
            (word.mid(4-1,1)=="n" || word.mid(4-1,1)=="N")
           )N=24;
           //else r=false;
        if(
            (word.mid(1-1,1)=="a" || word.mid(1-1,1)=="A")
                &&
            (word.mid(2-1,1)=="c" || word.mid(2-1,1)=="C")
                &&
            (word.mid(3-1,1)=="t" || word.mid(3-1,1)=="T")
                &&
            (word.mid(4-1,1)=="g" || word.mid(4-1,1)=="G")
           )N=24;
           //else r=false;
        if(
            (word.mid(1-1,1)=="a" || word.mid(1-1,1)=="A")
                &&
            (word.mid(2-1,1)=="c" || word.mid(2-1,1)=="C")
                &&
            (word.mid(3-1,1)=="t" || word.mid(3-1,1)=="T")
                &&
            (word.mid(4-1,1)=="h" || word.mid(4-1,1)=="H")
           )N=24;
           //else r=false;
        if(
            (word.mid(1-1,1)=="f" || word.mid(1-1,1)=="F")
                &&
            (word.mid(2-1,1)=="a" || word.mid(2-1,1)=="A")
                &&
            (word.mid(3-1,1)=="c" || word.mid(3-1,1)=="C")
                &&
            (word.mid(4-1,1)=="t" || word.mid(4-1,1)=="T")
           )N=24;
           //else r=false;
        if(
            (word.mid(1-1,1)=="f" || word.mid(1-1,1)=="F")
                &&
            (word.mid(2-1,1)=="r" || word.mid(2-1,1)=="R")
                &&
            (word.mid(3-1,1)=="a" || word.mid(3-1,1)=="A")
                &&
            (word.mid(4-1,1)=="c" || word.mid(4-1,1)=="C")
           )N=24;
           //else r=false;
        if(
            (word.mid(1-1,1)=="m" || word.mid(1-1,1)=="M")
                &&
            (word.mid(2-1,1)=="e" || word.mid(2-1,1)=="E")
                &&
            (word.mid(3-1,1)=="a" || word.mid(3-1,1)=="A")
                &&
            (word.mid(4-1,1)=="n" || word.mid(4-1,1)=="N")
           )N=24;
           //else r=false;
        if(
            (word.mid(1-1,1)=="r" || word.mid(1-1,1)=="R")
                &&
            (word.mid(2-1,1)=="o" || word.mid(2-1,1)=="O")
                &&
            (word.mid(3-1,1)=="o" || word.mid(3-1,1)=="O")
                &&
            (word.mid(4-1,1)=="t" || word.mid(4-1,1)=="T")
           )N=24;
           //else r=false;
        if(
            (word.mid(1-1,1)=="s" || word.mid(1-1,1)=="S")
                &&
            (word.mid(2-1,1)=="q" || word.mid(2-1,1)=="Q")
                &&
            (word.mid(3-1,1)=="r" || word.mid(3-1,1)=="R")
                &&
            (word.mid(4-1,1)=="t" || word.mid(4-1,1)=="T")
           )N=24;
           //else r=false;
        if(
            (word.mid(1-1,1)=="r" || word.mid(1-1,1)=="R")
                &&
            (word.mid(2-1,1)=="e" || word.mid(2-1,1)=="E")
                &&
            (word.mid(3-1,1)=="s" || word.mid(3-1,1)=="S")
                &&
            (word.mid(4-1,1)=="t" || word.mid(4-1,1)=="T")
           )N=24;
           //else r=false;
    }
    if(l==3){
       if(
           (word.mid(1-1,1)=="s" || word.mid(1-1,1)=="S")
               &&
           (word.mid(2-1,1)=="i" || word.mid(2-1,1)=="I")
               &&
           (word.mid(3-1,1)=="n" || word.mid(3-1,1)=="N")
         )N=10;
         //else r=false;
       if(
            (word.mid(1-1,1)=="c" || word.mid(1-1,1)=="C")
                &&
            (word.mid(2-1,1)=="o" || word.mid(2-1,1)=="O")
                &&
            (word.mid(3-1,1)=="s" || word.mid(3-1,1)=="S")
          )N=11;
          //else r=false;
        if(
            (word.mid(1-1,1)=="t" || word.mid(1-1,1)=="T")
                &&
            (word.mid(2-1,1)=="a" || word.mid(2-1,1)=="A")
                &&
            (word.mid(3-1,1)=="n" || word.mid(3-1,1)=="N")
          )N=12;
          //else r=false;
        if(
            (word.mid(1-1,1)=="c" || word.mid(1-1,1)=="C")
                &&
            (word.mid(2-1,1)=="t" || word.mid(2-1,1)=="T")
                &&
            (word.mid(3-1,1)=="g" || word.mid(3-1,1)=="G")
          )N=13;
        if(
            (word.mid(1-1,1)=="a" || word.mid(1-1,1)=="A")
                &&
            (word.mid(2-1,1)=="t" || word.mid(2-1,1)=="T")
                &&
            (word.mid(3-1,1)=="g" || word.mid(3-1,1)=="G")
          )N=13;
          //else r=false;
        if(
            (word.mid(1-1,1)=="e" || word.mid(1-1,1)=="E")
                &&
            (word.mid(2-1,1)=="x" || word.mid(2-1,1)=="X")
                &&
            (word.mid(3-1,1)=="p" || word.mid(3-1,1)=="P")
          )N=13;
          //else r=false;
        if(
            (word.mid(1-1,1)=="l" || word.mid(1-1,1)=="L")
                &&
            (word.mid(2-1,1)=="o" || word.mid(2-1,1)=="O")
                &&
            (word.mid(3-1,1)=="g" || word.mid(3-1,1)=="G")
          )N=13;
          //else r=false;
        if(
            (word.mid(1-1,1)=="c" || word.mid(1-1,1)=="C")
                &&
            (word.mid(2-1,1)=="t" || word.mid(2-1,1)=="T")
                &&
            (word.mid(3-1,1)=="h" || word.mid(3-1,1)=="H")
          )N=13;
          //else r=false;
        if(
            (word.mid(1-1,1)=="a" || word.mid(1-1,1)=="A")
                &&
            (word.mid(2-1,1)=="s" || word.mid(2-1,1)=="S")
                &&
            (word.mid(3-1,1)=="h" || word.mid(3-1,1)=="H")
          )N=13;
          //else r=false;
        if(
            (word.mid(1-1,1)=="a" || word.mid(1-1,1)=="A")
                &&
            (word.mid(2-1,1)=="c" || word.mid(2-1,1)=="c")
                &&
            (word.mid(3-1,1)=="h" || word.mid(3-1,1)=="H")
          )N=13;
          //else r=false;
        if(
            (word.mid(1-1,1)=="a" || word.mid(1-1,1)=="A")
                &&
            (word.mid(2-1,1)=="t" || word.mid(2-1,1)=="T")
                &&
            (word.mid(3-1,1)=="h" || word.mid(3-1,1)=="H")
          )N=13;
          //else r=false;
        if(
            (word.mid(1-1,1)=="p" || word.mid(1-1,1)=="P")
                &&
            (word.mid(2-1,1)=="o" || word.mid(2-1,1)=="O")
                &&
            (word.mid(3-1,1)=="w" || word.mid(3-1,1)=="W")
          )N=13;
          //else r=false;
        if(
            (word.mid(1-1,1)=="s" || word.mid(1-1,1)=="S")
                &&
            (word.mid(2-1,1)=="q" || word.mid(2-1,1)=="Q")
                &&
            (word.mid(3-1,1)=="r" || word.mid(3-1,1)=="R")
          )N=13;
          //else r=false;
        if(
            (word.mid(1-1,1)=="a" || word.mid(1-1,1)=="A")
                &&
            (word.mid(2-1,1)=="b" || word.mid(2-1,1)=="B")
                &&
            (word.mid(3-1,1)=="s" || word.mid(3-1,1)=="S")
          )N=13;
          //else r=false;
        if(
            (word.mid(1-1,1)=="i" || word.mid(1-1,1)=="I")
                &&
            (word.mid(2-1,1)=="n" || word.mid(2-1,1)=="N")
                &&
            (word.mid(3-1,1)=="t" || word.mid(3-1,1)=="T")
          )N=13;
          //else r=false;
        if(
            (word.mid(1-1,1)=="m" || word.mid(1-1,1)=="M")
                &&
            (word.mid(2-1,1)=="i" || word.mid(2-1,1)=="I")
                &&
            (word.mid(3-1,1)=="n" || word.mid(3-1,1)=="N")
          )N=13;
          //else r=false;
        if(
            (word.mid(1-1,1)=="m" || word.mid(1-1,1)=="M")
                &&
            (word.mid(2-1,1)=="a" || word.mid(2-1,1)=="A")
                &&
            (word.mid(3-1,1)=="x" || word.mid(3-1,1)=="X")
          )N=13;
          //else r=false;
        if(
            (word.mid(1-1,1)=="a" || word.mid(1-1,1)=="A")
                &&
            (word.mid(2-1,1)=="v" || word.mid(2-1,1)=="V")
                &&
            (word.mid(3-1,1)=="e" || word.mid(3-1,1)=="E")
          )N=13;
          //else r=false;
    }
    if(l==2){
        if(
            (word.mid(1-1,1)=="l" || word.mid(1-1,1)=="L")
                &&
            (word.mid(2-1,1)=="g" || word.mid(2-1,1)=="G")
          )N=11;
         //else r=false;
        if(
            (word.mid(1-1,1)=="l" || word.mid(1-1,1)=="L")
                &&
            (word.mid(2-1,1)=="n" || word.mid(2-1,1)=="N")
          )N=11;
         //else r=false;
        if(
            (word.mid(1-1,1)=="s" || word.mid(1-1,1)=="S")
                &&
            (word.mid(2-1,1)=="h" || word.mid(2-1,1)=="H")
          )N=11;
         //else r=false;
        if(
            (word.mid(1-1,1)=="c" || word.mid(1-1,1)=="C")
                &&
            (word.mid(2-1,1)=="h" || word.mid(2-1,1)=="H")
          )N=11;
         //else r=false;
        if(
            (word.mid(1-1,1)=="t" || word.mid(1-1,1)=="T")
                &&
            (word.mid(2-1,1)=="h" || word.mid(2-1,1)=="H")
          )N=11;
         //else r=false;
        if(
            (word.mid(1-1,1)=="g" || word.mid(1-1,1)=="G")
                &&
            (word.mid(2-1,1)=="t" || word.mid(2-1,1)=="T")
          )N=11;
         //else r=false;
        if(
            (word.mid(1-1,1)=="g" || word.mid(1-1,1)=="G")
                &&
            (word.mid(2-1,1)=="e" || word.mid(2-1,1)=="E")
          )N=11;
         //else r=false;
        if(
            (word.mid(1-1,1)=="l" || word.mid(1-1,1)=="L")
                &&
            (word.mid(2-1,1)=="t" || word.mid(2-1,1)=="T")
          )N=11;
         //else r=false;
        if(
            (word.mid(1-1,1)=="l" || word.mid(1-1,1)=="L")
                &&
            (word.mid(2-1,1)=="e" || word.mid(2-1,1)=="E")
          )N=11;
         //else r=false;
        if(
            (word.mid(1-1,1)=="e" || word.mid(1-1,1)=="E")
                &&
            (word.mid(2-1,1)=="t" || word.mid(2-1,1)=="T")
          )N=11;
         //else r=false;
        if(
            (word.mid(1-1,1)=="e" || word.mid(1-1,1)=="E")
                &&
            (word.mid(2-1,1)=="q" || word.mid(2-1,1)=="Q")
          )N=11;
         //else r=false;
        if(
            (word.mid(1-1,1)=="n" || word.mid(1-1,1)=="N")
                &&
            (word.mid(2-1,1)=="e" || word.mid(2-1,1)=="E")
          )N=11;
         //else r=false;
    }
    if(l==1){
        if(
            (word.mid(1-1,1)=="!" || word.mid(1-1,1)=="!")
          )N=11;
    }
    return r;
}

bool IsTrueWord(QString word){
    bool r=false;
    int L=word.length();
    if(l==4){
       if(
           (word.mid(1-1,1)=="t" || word.mid(1-1,1)=="T")
               &&
           (word.mid(2-1,1)=="r" || word.mid(2-1,1)=="R")
               &&
           (word.mid(3-1,1)=="u" || word.mid(3-1,1)=="U")
               &&
           (word.mid(4-1,1)=="e" || word.mid(4-1,1)=="E")
         )r=true;
         //else r=false;
    }
    if(l==3){
       if(
           (word.mid(1-1,1)=="y" || word.mid(1-1,1)=="Y")
               &&
           (word.mid(2-1,1)=="e" || word.mid(2-1,1)=="E")
               &&
           (word.mid(3-1,1)=="s" || word.mid(3-1,1)=="S")
         )r=true;
         //else r=false;
    }
    if(l==1){
       if(
           (word.mid(1-1,1)=="y" || word.mid(1-1,1)=="Y")
               ||
           (word.mid(2-1,1)=="t" || word.mid(2-1,1)=="T")
               &&
           (word.mid(2-1,1)=="1" || word.mid(2-1,1)=="+")
         )r=true;
         //else r=false;
    }
    return r;
}
bool IsFalseWord(QString word){
    bool r=false;
    int L=word.length();
    if(l==5){
       if(
           (word.mid(1-1,1)=="f" || word.mid(1-1,1)=="F")
               &&
           (word.mid(2-1,1)=="a" || word.mid(2-1,1)=="A")
               &&
           (word.mid(3-1,1)=="l" || word.mid(3-1,1)=="L")
               &&
           (word.mid(4-1,1)=="s" || word.mid(4-1,1)=="SE")
               &&
           (word.mid(4-1,1)=="e" || word.mid(4-1,1)=="E")
         )r=true;
         //else r=false;
    }
    if(l==2){
       if(
           (word.mid(1-1,1)=="n" || word.mid(1-1,1)=="N")
               &&
           (word.mid(2-1,1)=="o" || word.mid(2-1,1)=="O")
         )r=true;
         //else r=false;
    }
    if(l==1){
       if(
           (word.mid(1-1,1)=="n" || word.mid(1-1,1)=="N")
               ||
           (word.mid(2-1,1)=="f" || word.mid(2-1,1)=="F")
               &&
           (word.mid(2-1,1)=="0" || word.mid(2-1,1)=="-")
         )r=true;
         //else r=false;
    }
    return r;
}



char*ReadLine(FILE*f){
    int CountLength=0;
    char ch, ChArr[200], *ChPtr=NULL;
    do{
        fscanf(f,"", &ch);
        //printf("",ch);
        if((ch!='\n')&&(ch!='\0')&&!feof(f)){
            CountLength++;
            ChArr[CountLength-1]=ch;
        }
    }while((ch!='\n')&&(ch!='\0')&&!feof(f)/*&&(ch!='@')*/);
    ChArr[CountLength-1+1]='\0';
    //if(CountLength!='\0')ChPtr=ChArr;
    //printf("\n");
    if(CountLength!=0)ChPtr=ChArr;
    return ChPtr;
}

//char*ReadLine(FILE*f, int Show1Hide0, bool ConsoleInterface, TMemo*M){
//    int CountLength=0;
//    char ch, ChArr[200], *ChPtr=NULL, ChArrSngl[5];
//    if(Show1Hide0){
//        if(ConsoleInterface)printf("ReadLine starts working\n");
//        if(M!=NULL)M->Lines->Add("ReadLine starts working");
//    }
//    do{
//        fscanf(f,"", &ch);

//        if((ch!='\n')&&(ch!='\0')&&!feof(f)){
//            CountLength++;
//            ChArr[CountLength-1]=ch;
//            if(Show1Hide0){
//                if(ConsoleInterface)printf("",ch);
//                if(M!=NULL){
//                ChArrSngl[0]=ch; ChArrSngl[1]='\0';
//                M->Lines->Add(AnsiString(ChArrSngl));
//                }
//            }
//        }
//        else{
//           if(ch=='\n'){
//               if(Show1Hide0){
//                if(ConsoleInterface){
//                printf("\n");
//                printf("","\\n");
//                }
//                if(M!=NULL){
//                ChArrSngl[0]='\\'; ChArrSngl[1]='n';   ChArrSngl[1]='\0';
//                M->Lines->Add(AnsiString(ChArrSngl));
//                }
//               }
//           }
//           if(ch=='\0'){
//               if(Show1Hide0){
//                if(ConsoleInterface){
//                printf("\n");
//                printf("","\\0");
//                }
//                if(M!=NULL){
//                ChArrSngl[0]='\\'; ChArrSngl[1]='0';   ChArrSngl[1]='\0';
//                M->Lines->Add(AnsiString(ChArrSngl));
//                }
//               }
//           }
//           if(feof(f)){
//                if(Show1Hide0){
//                if(ConsoleInterface){
//                printf("\n");
//                printf("End of file reached");
//                }
//                if(M!=NULL){
//                strcpy(ChArrSngl,"EOF\0");
//                M->Lines->Add(AnsiString(ChArrSngl));
//                }
//               }
//           }
//        }
//    }while((ch!='\n')&&(ch!='\0')&&!feof(f)/*&&(ch!='@')*/);
//    ChArr[CountLength-1+1]='\0';
//    //if(CountLength!='\0')ChPtr=ChArr;
//    //printf("\n");
//    if(CountLength!=0)ChPtr=ChArr;
//    if(Show1Hide0){
//        if(ConsoleInterface)printf("ReadLine finishes working\n");
//        if(M!=NULL)M->Lines->Add("ReadLine finishes working");
//    }
//    return ChPtr;
//}

int CharPtrToArr(char*ptr, char Arr[]){
    int count=0, SignificantLength=0;
    char cur;
    do{
        count++;
        cur=(*(ptr+count-1));
        //printf("",cur);
        Arr[count-1]=cur;
        if((cur!='\0')&&(cur!='\n')){
            SignificantLength++;
        }
    }while((cur!='\0')&&(cur!='\n'));
    //printf("assigning finished\n");
    return SignificantLength;
}

double ReadLineAsRealNum(FILE*f){
    double x;
    fscanf(f,"\n",&x);
    return x;
}


TValsShowHide::TValsShowHide(){
    Show1Hide0=0;
    ConsoleInterface=false;
    TxtFld=NULL;
    //G=NULL; //(reserved)
    f=NULL;
}
void TValsShowHide::EnableWriting(){Show1Hide0=1;}
void TValsShowHide::DisableWriting(){Show1Hide0=0;}


void TValsShowHide::write(char*s){
    //char cta[255];
    //strcpy(cta,s);
        if(Show1Hide0==1){
            //if(ConsoleInterface) printf(s);
            if(ConsoleInterface) printf("",s);
            if(TxtFld!=NULL) TxtFld->append(QString(s));
            if(f!=NULL) fprintf(f,"",s);
        }
}

void TValsShowHide::write(QString str){
    //char cta[255];
    //strcpy(cta,s);
    const char*pch=str.toStdString().c_str();
        if(Show1Hide0==1){
            //if(ConsoleInterface) printf(str.c_str());
            if(ConsoleInterface) printf("",pch);
            if(TxtFld!=NULL) TxtFld->append(str);
            if(f!=NULL) fprintf(f,"",pch);
        }
}

void TValsShowHide::writeln(char*s){
    //char cta[255];
    //strcpy(cta,s);
        if(Show1Hide0==1){
            if(ConsoleInterface) printf("\n",s);
            if(TxtFld!=NULL) TxtFld->append(QString(s));
            if(f!=NULL) fprintf(f,"\n",s);
        }
}

void TValsShowHide::writeln(QString str){
    //char cta[255];
    //strcpy(cta,s);
    const char*pch=str.toStdString().c_str();
        if(Show1Hide0==1){
            if(ConsoleInterface) printf("\n",pch);
            if(TxtFld!=NULL) TxtFld->append(str);
            if(f!=NULL) fprintf(f,"\n",pch);
        }
}
//
//
void writeln(TValsShowHide*w,char*pch){
    //QString *s=new QString(pch);
    QString s=pch;
    if(w!=NULL){
        if(w->Show1Hide0!=0){
            if(w->ConsoleInterface)printf("\n",pch);
            if(w->f!=NULL)fprintf(w->f,"\n",pch);
            if(w->TxtFld!=NULL)w->TxtFld->append(s);
        }
    }
    //delete s;
}
void writeln(TValsShowHide*w, QString s){
    const char*pch=s.toStdString().c_str();
    if(w!=NULL){
        if(w->Show1Hide0!=0){
            if(w->ConsoleInterface)printf("\n",pch);
            if(w->f!=NULL)fprintf(w->f,"\n",pch);
            if(w->TxtFld!=NULL)w->TxtFld->append(s);
        }
    }
}



// main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}


//MainWindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    vsh.TxtFld=ui->textBrowser;
    //
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}




//NumbersDialog.cpp


#include <vcl.h>
#pragma hdrstop

#include "NumbersDialog.h"

#include "NumberParse.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
AnsiString ValueToShow(int x, int L){
    AnsiString nssr=IntToStr(x);
    //if();
}
AnsiString ValueToShow(double x, int L, int FracPartLen);
AnsiString ValueToShow(double x, int FracPartLen, bool OrdNssr);
//int AnsiStringToInt(

void __fastcall TForm1::MenuItemPrepareNumber1Click(TObject *Sender)
{
    /*
    double x;
    TNumberParts NumParts;
    x=StrToFloat(Edit1->Text);
    vsh.EnableWriting();
    //vsh.DisableWriting();
    NumParts=NumToParts(x,10, &vsh);
    Memo1->Lines->Add("Results of preparing "+FloatToStr(x));
    //Memo1->Lines->Add("IntPart: "+IntToStr(NumParts.IntPartAsWritten));
    //Memo1->Lines->Add("FracPart: "+FloatToStr(NumParts.FracPartAsWritten));
    Memo1->Lines->Add("IntPart: "+IntToStr(NumParts.IntPartWhole));
    Memo1->Lines->Add("FracPart: "+FloatToStr(NumParts.FracPartWhole));
    Memo1->Lines->Add("Mantissa: "+FloatToStr(NumParts.MantissaAsMathRules));
    Memo1->Lines->Add("Order: "+FloatToStr(NumParts.Order));
    */
}

void __fastcall TForm1::FormCreate(TObject *Sender)
{
    vsh.M=Memo1;
    //if(vsh.f==NULL)ShowMessage("+"); else  ShowMessage("-");
    vsh.EnableWriting();
    //
    //SetNumberDataNull(NumberData);
}

void __fastcall TForm1::MenuItemDegreesfractionaltodegminsecs1Click(
      TObject *Sender)
{
     /*
      vsh.EnableWriting();
    //vsh.DisableWriting();
     float DegFrac, Secs;
     int DegInt, MinInt;
     DegFrac=StrToFloat(Edit1->Text);
     //void DegMinSec(float DegFrac, int&DegInt, int&MinInt, float&Secs)
     DegMinSec(DegFrac, DegInt, MinInt, Secs, &vsh);
          */
}

void __fastcall TForm1::MenuItemDigitsOfInt1Click(TObject *Sender)
{
    /*
    int x=StrToInt(Edit1->Text), order=0, digits[20];
    vsh.EnableWriting();
    //vsh.DisableWriting();
    Memo1->Lines->Add("int num="+IntToStr(x)+" Digits:");
    DigitsOfInt(x, 10, &vsh, order, digits);
    for(int i=1; i<=order+1; i++){
        Memo1->Lines->Add(IntToStr(digits[i-1]));
    }
    */
}

void __fastcall TForm1::MenuItemDigitsOfFloat1Click(TObject *Sender)
{
    /*
    //Memo1->Lines->Clear();
     float x=StrToFloat(Edit1->Text);
     int order=0, IntDigits[20], FracDigits[20], QAftComma=3;
     vsh.EnableWriting();
    //vsh.DisableWriting();
    //void DigitsOfFloat(float x, int BaseDec, int QAftComma, TValsShowHide*vsh, int&order, int IntDigits[], int FracDigits[]);
    DigitsOfFloat(             x,          10,     QAftComma,              &vsh,      order,      IntDigits,       FracDigits);
    Memo1->Lines->Add("Number: "+FloatToStr(x));
    Memo1->Lines->Add("Order: "+IntToStr(order));
    Memo1->Lines->Add("IntPart:");
    for(int i=1; i<=order+1; i++){
        Memo1->Lines->Add(IntToStr(IntDigits[i-1]));
    }
    Memo1->Lines->Add("FracPart:");
    for(int i=1; i<=4; i++){
        Memo1->Lines->Add(IntToStr(FracDigits[i-1]));
    }
    */
}

void __fastcall TForm1::MenuItemDigitsOfFloat11Click(TObject *Sender)
{
    /*
    //Memo1->Lines->Clear();
    AnsiString s="";
     float x=StrToFloat(Edit1->Text);
     int order=0, Digits[20], QAftComma=3;
     //int IntDigits[20], FracDigits[20];
     vsh.EnableWriting();
    //vsh.DisableWriting();
    //void DigitsOfFloat(float x, int BaseDec, int QAftComma, TValsShowHide*vsh, int&order, int Digits[], AnsiString&s);
    DigitsOfFloat(             x,          10,     QAftComma,               &vsh,    order,      Digits,             s);
    //DigitsOfFloat(             x,          10,     QAftComma,              &vsh,      order,      IntDigits,       FracDigits);
    Memo1->Lines->Add("Number: "+FloatToStr(x));
    Memo1->Lines->Add("Order: "+IntToStr(order));
    Memo1->Lines->Add("Digits:");
    for(int i=1; i<=order+1+QAftComma+1; i++){
        Memo1->Lines->Add(IntToStr(Digits[i-1]));
    }
    Memo1->Lines->Add(s);
    */
}

void __fastcall TForm1::IntPower1Click(TObject *Sender)
{
     /*
     float x[]={2, -2, 0.5, -0.5, 1, 0}, y[30];
     int p[]={2, -2, 1, -1, 0}, n;
     n=0;
     for(int i=1; i<=6; i++){
         for(int j=1; j<=5; j++){
             n++;
             y[n-1]=IntPower(x[i-1], p[j-1]);
                      }
     }
     */
}

void __fastcall TForm1::ParseStrindgfAndRecognizeNumber1Click(
      TObject *Sender)
{
      /*
      AnsiString s=Edit1->Text;
      double n;
      int IntPart=0, NeededFrac=0, Order=0, ErstError=0, FracPartLenReq=0;
      double FracPart;
      bool Sign=true;
      //double NumberParse(AnsiString x, int FracPartLenReq, int base, bool ZeroForFracNecessary, int&IntPart,  double&FracPart, int&NeededFrac, int&Order, bool&Sign, int&ErstError);
      n=NumberParse(s, 10, &vsh);
      Memo1->Lines->Add(FloatToStr(n));
      */
}

void __fastcall TForm1::ParseStringAndRecognizeNumberchar1Click(
      TObject *Sender)
{
     /*
     TNumberParts NumParts;
     TValsShowHide vsh;
     vsh.M=Memo1;
     vsh.EnableWriting();
     AnsiString s;
     char*pch, ch[80];
     double number;
     int ErstErrCharN=0, countErrors=0, len=0;
     s=Edit1->Text;
     pch=s.c_str();
     CharPtrToArr(pch, ch);
     writeln(&vsh,"Analyze text data before parsing...");
     while((*(pch+len))!='\0'){
         len++;
         writeln(&vsh,(*(pch+len)));
     }
     writeln(&vsh,"Parsing...");
     NumberParse(len, ch, 10, NumParts, ErstErrCharN, countErrors);
     if(countErrors==0)writeln(&vsh, "No errors detected. Number is defined successfully");
     else writeln(&vsh, IntToStr(countErrors)+" errors; first is N "+IntToStr(ErstErrCharN));
     number=NumParts.IntPartWhole+NumParts.FracPartWhole;
     if(NumParts.NumberHasPositiveSign==false)number=-number;
     writeln(&vsh, " Answer: Number= "+FloatToStr(number));
     writeln(&vsh, " General: IntPart= "+FloatToStr(NumParts.IntPartWhole)+" FracPart: "+FloatToStr(NumParts.FracPartWhole)+" Order: "+IntToStr(NumParts.Order));
     writeln(&vsh, " Scientific: IntPart= "+FloatToStr(NumParts.IntPartAsMathRules)+" FracPart: "+FloatToStr(NumParts.FracPartAsMathRules)+" Order: "+IntToStr(NumParts.Order));
     writeln(&vsh, " Written: IntPart= "+FloatToStr(NumParts.IntPartAsWritten)+" FracPart: "+FloatToStr(NumParts.FracPartAsWritten)+" Order: "+IntToStr(NumParts.OrderAsWritten));
     //writeln(&vsh, " Scientific representation: "+FloatToStr(number));
     */
}

void __fastcall TForm1::IntToCharArr1Click(TObject *Sender)
{
   /*AnsiString s;
   int x;
   char*pch;
   x=StrToInt(Edit1->Text);
   pch=IntDecToCharArr(x);
   s=AnsiString(pch);
   Memo1->Lines->Add("Answer: "+s);
   */
}

void __fastcall TForm1::DigitsOfFloat21Click(TObject *Sender)
{
    /*
    //Memo1->Lines->Clear();
    AnsiString s="";
    float number;
    TNumberParts NumParts;
    float x;
    char ch[80], *pch;
    int order=0, Digits[20], QAftComma=3, len=0;
    x=StrToFloat(Edit1->Text);
    int IntDigits[20], FracDigits[20];
    vsh.EnableWriting();
    //vsh.DisableWriting();
    //void DigitsOfFloat(float xx, int BaseDec, int QAftComma, TValsShowHide*vsh, TNumberParts&NumParts, int&len, int Digits[], char s[]);
    DigitsOfFloat(              x,          10,             3,              &vsh,              NumParts,     len,       Digits);
    order=NumParts.Order;
    Memo1->Lines->Add("Initial number: "+FloatToStr(x));
    Memo1->Lines->Add("IntPart: "+IntToStr(NumParts.IntPartWhole));
    Memo1->Lines->Add("FracPart: "+FloatToStr(NumParts.FracPartWhole));
    //Memo1->Lines->Add("Mantissa: "+FloatToStr(NumParts.MantissaWhole));
    Memo1->Lines->Add("Mantissa: "+FloatToStr(NumParts.MantissaAsMathRules));
    Memo1->Lines->Add("Order: "+IntToStr(order));
    Memo1->Lines->Add("Digits:");
    //for(int i=1; i<=order+1+QAftComma+1; i++){
    //    Memo1->Lines->Add(IntToStr(Digits[i-1]));
    //}
    for(int i=1; i<=len; i++){
        Memo1->Lines->Add(IntToStr(Digits[i-1]));
    }
    */
    /*
    pch=ch;
    s=AnsiString(pch);
    Memo1->Lines->Add("Answer :"+s);
    */
}







void __fastcall TForm1::Button_ParseStringAndRecognNum_Click(
      TObject *Sender)
{
     AnsiString s;
     s=this->Edit1->Text;
     double y;
     y= StrToReal(s, &(this->vsh));
          writeln(&vsh, "y="+FloatToStr(y));
}

void __fastcall TForm1::Button_DigitsOfIntAndFrac_Click(TObject *Sender)
{
    double x=StrToFloat(this->Edit1->Text);
    int Order=0, QAftComma=6,  BaseDec=10;
    //void RealToDigits_IntAndFracSepar(double x, int&Order, int int_digit[], int frac_digit[], int QAftComma=6, int BaseDec=10);
    RealToDigits_IntAndFracSepar(x, Order, arr1, arr2);//, QAftComma, BaseDec);
    writeln(&vsh ,"Int");
    for(int i=1; i<=Order+1; i++){
         writeln(&vsh ,IntToStr(arr1[i-1]));
    }
    writeln(&vsh ,"Frac");
    for(int i=1; i<=QAftComma; i++){
         writeln(&vsh ,IntToStr(arr2[i-1]));
    }
}

void __fastcall TForm1::Button_SeparateNumClick(TObject *Sender)
{
     int BaseDec=10;
     double x=StrToFloat(this->Edit1->Text);
     writeln(&vsh,"x="+FloatToStr(x));
     this->NumberData=SeparateNum(x, &vsh, BaseDec);
     bool Sign=(NumberData.NumberHasPositiveSign==true);
     double      if(Sign==false)y=-y;
     writeln(&vsh,"y="+FloatToStr(y));
     NumberData.ShowText(&this->vsh);
}

void __fastcall TForm1::Button_DigitsOfMantAndOrderClick(TObject *Sender)
{
     double x=StrToFloat(this->Edit1->Text);
     int Order=0, OrderLength=0;
     int QAftComma=6; int BaseDec=10;
     //void RealToDigits_UsualMantAndOrd(double x, int&Order, int&OrderLength, int mant_digit[], int ord_digit[], int QAftComma=6, int BaseDec=10);
     RealToDigits_UsualMantAndOrd(x, Order, OrderLength, arr1, arr2, QAftComma, BaseDec);
     writeln(&vsh,"Mantissa's digits");
     for(int i=1; i<=Order+1; i++){
          writeln(&vsh,IntToStr(arr1[i-1]));
     }
     writeln(&vsh,"Order's digits");
     for(int i=1; i<=OrderLength+1; i++){
          writeln(&vsh,IntToStr(arr2[i-1]));
     }
     SortVisaVersa(arr1, Order+1/*, &this->vsh*/);
     writeln(&vsh,"Mantissa's digits visa versa");
     for(int i=1; i<=Order+1; i++){
          writeln(&vsh,IntToStr(arr1[i-1]));
     }
     SortVisaVersa(arr2, OrderLength+1/*, &this->vsh*/);
     writeln(&vsh,"Mantissa's digits visa versa");
     for(int i=1; i<=Order+1; i++){
          writeln(&vsh,IntToStr(arr2[i-1]));
     }
}

void __fastcall TForm1::Button_NumberToIntAndFracClick(TObject *Sender)
{
     double x=StrToFloat(this->Edit1->Text);
     AnsiString s;
     //AnsiString RealToString(double x, int Repr_IntAndFrac0_ExpAfOrderLim1_ExpAnyhow2=0,  int QAftComma=6, int OrdAfWhichExp=6, int BaseDec=10);
     s= RealToString(x, 0);
     writeln(&this->vsh,FloatToStr(x));
     writeln(&this->vsh,s);
}

void __fastcall TForm1::ButtonNumberToIntAndFrac_ExpIfOrdGT6Click(
      TObject *Sender)
{
     double x=StrToFloat(this->Edit1->Text);
     AnsiString s;
     //AnsiString RealToString(double x, int Repr_IntAndFrac0_ExpAfOrderLim1_ExpAnyhow2=0,  int QAftComma=6, int OrdAfWhichExp=6, int BaseDec=10);
     s= RealToString(x, 1);
     writeln(&this->vsh,FloatToStr(x));
     writeln(&this->vsh,s);
}

void __fastcall TForm1::ButtonNumberToExp_Click(TObject *Sender)
{
    double x=StrToFloat(this->Edit1->Text);
     AnsiString s;
     //AnsiString RealToString(double x, int Repr_IntAndFrac0_ExpAfOrderLim1_ExpAnyhow2=0,  int QAftComma=6, int OrdAfWhichExp=6, int BaseDec=10);
     s= RealToString(x, 2);
     writeln(&this->vsh,FloatToStr(x));
     writeln(&this->vsh,s);
}

//NumbersDialog.h


#ifndef NumbersDialogH
#define NumbersDialogH
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Menus.hpp>
//
//#include "Numbers.h"
#include "MyLib.h"
#include "NumberParse.h"
class TForm1 : public TForm
{
__published: // IDE-managed Components
        TMemo *Memo1;
        TEdit *Edit1;
        TMainMenu *MainMenu1;
        TMenuItem *Actions1;
        TMenuItem *MenuItemPrepareNumber1;
        TMenuItem *MenuItemDegreesfractionaltodegminsecs1;
        TMenuItem *MenuItemDigitsOfInt1;
        TMenuItem *MenuItemDigitsOfFloat11;
        TMenuItem *IntPower1;
        TMenuItem *ParseStrindgfAndRecognizeNumber1;
        TMenuItem *ParseStringAndRecognizeNumberchar1;
        TMenuItem *DigitsOfFloat21;
        TButton *Button_ParseStringAndRecognNum_;
        TButton *Button_DigitsOfMantAndOrder;
        TButton *Button_DigitsOfIntAndFrac_;
        TButton *Button_NumberToIntAndFrac;
        TButton *ButtonNumberToIntAndFrac_ExpIfOrdGT6;
        TButton *ButtonNumberToExp_;
        TButton *Button_SeparateNum;
        void __fastcall MenuItemPrepareNumber1Click(TObject *Sender);
        void __fastcall FormCreate(TObject *Sender);
        void __fastcall MenuItemDegreesfractionaltodegminsecs1Click(
          TObject *Sender);
        void __fastcall MenuItemDigitsOfInt1Click(TObject *Sender);
        void __fastcall MenuItemDigitsOfFloat1Click(TObject *Sender);
        void __fastcall MenuItemDigitsOfFloat11Click(TObject *Sender);
        void __fastcall IntPower1Click(TObject *Sender);
        void __fastcall ParseStrindgfAndRecognizeNumber1Click(
          TObject *Sender);
        void __fastcall ParseStringAndRecognizeNumberchar1Click(
          TObject *Sender);
        void __fastcall IntToCharArr1Click(TObject *Sender);
        void __fastcall DigitsOfFloat21Click(TObject *Sender);
        void __fastcall Button_ParseStringAndRecognNum_Click(
          TObject *Sender);
        void __fastcall Button_DigitsOfIntAndFrac_Click(TObject *Sender);
        void __fastcall Button_SeparateNumClick(TObject *Sender);
        void __fastcall Button_DigitsOfMantAndOrderClick(TObject *Sender);
        void __fastcall Button_NumberToIntAndFracClick(TObject *Sender);
        void __fastcall ButtonNumberToIntAndFrac_ExpIfOrdGT6Click(
          TObject *Sender);
        void __fastcall ButtonNumberToExp_Click(TObject *Sender);
private: // User declarations
public: // User declarations
        __fastcall TForm1(TComponent* Owner);
        TValsShowHide vsh;
        int arr1[80], arr2[80];
        TNumberParts NumberData;
};
extern PACKAGE TForm1 *Form1;
#endif

//==================================================

//NumberParse.cpp


#include <vcl.h>
#pragma hdrstop

#include "NumberParse.h"


#pragma package(smart_init)
/*
void SetNumberDataNull(  TNumberParts&data){
     data.IntPartAsWritten=0;
     data.FracPartAsWritten=0;//dbl;
     data.OrderAsWritten=0;
     data.MantissaAsMathRules =0;//dbl;
     data.IntPartAsMathRules=0;
     data.FracPartAsMathRules=0;
     data.MantissaAsWritten =0;//dbl;
     data.IntPartWhole=0;
     data.FracPartWhole=0;//dbl;
     data.MantissaWhole=0;//dbl;
     data.Order=0;
     data.NumberHasPositiveSign=true;
     data.OrderHasPositiveSign=true;
     //data.OrderOfIntPart=0;
     //data.OrderOfFracPart=0;
     //data.
}
void WriteNumberParts(TNumberParts data, TValsShowHide*vsh){
                                            writeln(vsh,"Order="+IntToStr(data.Order));
        };
*/
TNumberParts::TNumberParts(){
    this->SetNull();
}
void TNumberParts::SetNull(){
     this->IntPartAsWritten=0;
     this->FracPartAsWritten=0;//dbl;
     this->OrderAsWritten=0;
     this->MantissaAsMathRules =0;//dbl;
     this->IntPartAsMathRules=0;
     this->FracPartAsMathRules=0;
     this->MantissaAsWritten =0;//dbl;
     this->IntPartWhole=0;
     this->FracPartWhole=0;//dbl;
     this->MantissaWhole=0;//dbl;
     this->Order=0;
     this->NumberHasPositiveSign=true;
     this->OrderHasPositiveSign=true;
}
void TNumberParts::ShowText(TValsShowHide*vsh){
                                            writeln(vsh,"Order="+IntToStr(this->Order));
        };

void IntPartDet(double x, int&ip, double&IntPartFP){
    ip=0;
    IntPartFP=0;
    while(!((IntPartFP<=x)&&((IntPartFP+1)>x))){
        IntPartFP+=1;
        ip++;
    }
}
int IntPart(double x){
    double z=0;
    int ip=0;
    IntPartDet(x, ip, z);
    return ip;
}
TNumberParts SeparateNum(double x, TValsShowHide*vsh, int BaseDec){
    double z=0, x1=fabs(x);//, IntPartF, Mantissa;//, FracPartOfInt, FracPartOfFrac;
    int ord=1;
    TNumberParts NumberData;
    //SetNumberDataNull(NumberData);
    if(x<0){
        NumberData.NumberHasPositiveSign=false;
    }
    if(x1<1){
        NumberData.OrderHasPositiveSign=false;
    }
    if(x1>=1){
        while(z<x1){
            z+=1;
            NumberData.IntPartWhole+=1;
            //NumberData.Order+=1;
        }
        if(z>x1){
            z-=1;
            NumberData.IntPartWhole-=1;
            //NumberData.Order-=1;
        }
        //NumberData.Order=(NumberData.IntPartWhole/BaseDec);
        while(ord<NumberData.IntPartWhole){
            ord*=BaseDec;
            NumberData.Order++;
        }
        if(ord>NumberData.IntPartWhole){
             ord/=BaseDec;
            NumberData.Order--;
        }
                NumberData.MantissaWhole= (double)NumberData.IntPartWhole+NumberData.FracPartWhole;
        //
        z=x1;
        while(z>BaseDec){
             z/=BaseDec;
        }
        if(z<1){
             z*=BaseDec;
        }
        //
        //NumberData.MantissaAsMathRules=z;
        //NumberData.IntPartAsMathRules=IntPart(z);
                NumberData.FracPartAsMathRules;
    }else{  //x1<1
         z=x1;
         while(z<1){
             z*=BaseDec;
             NumberData.Order+=1;
         }
         if(z>BaseDec){
             z/=BaseDec;
             NumberData.Order-=1;
         }
         //NumberData.Order=(NumberData.IntPartWhole/BaseDec);
         NumberData.IntPartWhole=0;
         NumberData.FracPartWhole=x1;
         NumberData.MantissaWhole=          //
         //NumberData.IntPartAsMathRules=IntPart(z);
                NumberData.FracPartAsMathRules;
    }
    NumberData.MantissaAsMathRules=z;
    NumberData.IntPartAsMathRules=IntPart(z);
        //
    NumberData.IntPartAsWritten=NumberData.IntPartWhole;
    NumberData.FracPartAsWritten=NumberData.FracPartWhole;
    NumberData.MantissaAsWritten= NumberData.MantissaWhole;
    NumberData.OrderAsWritten= NumberData.Order;
    return NumberData;
}
void SeparateNum(double x, int&IntPartOfNum, double&FracPartOfNum, int&IntPartOfMant, double&FracPartOfMant, int&Order, int&Sgn, int&OrdSgn, int BaseDec){
    double z=0, x1=fabs(x), IntPartF, Mantissa;//, FracPartOfInt, FracPartOfFrac;
    TNumberParts NumberData;
    //23,45 =23+0,45 = 2,345E+1
    //initio
    IntPartOfNum=0;
    FracPartOfNum=0;
    IntPartOfMant=0;
    FracPartOfMant=0;
    Order=0;
    Sgn=1;
    OrdSgn=1;
    //signs
    if(x==0){
        IntPartOfNum=0;
        FracPartOfNum=0;
        IntPartOfMant=0;
        FracPartOfMant=0;
        Order=0;
        Sgn=1;
        OrdSgn=1;
    }else{
        if(x<0)Sgn=0;    else Sgn=1;
        if(x1<1)OrdSgn=0; else OrdSgn=1;
        //int part of num
        //IntPartOfNum=0;
        //while(!((z<x1)&&((z+1)>x1))){
        //    z=z+1;
        //    IntPartOfNum++;
        //}
        //IntPartF=z;
        IntPartDet(x1,IntPartOfNum,IntPartF);
        //Frac part of num
        FracPartOfNum=x1-IntPartF;
        //FracPartOfNum=x1-IntPartOfNum;
        //Mantissa & order
        Mantissa=x1;//IntPartF;
        Order=0;
        if(OrdSgn==1){
            Mantissa=x1;
            while(Mantissa>=BaseDec){
                Mantissa/=BaseDec;
                Order++;
            }
        }else{ // OrdSgn==0
            while(Mantissa<1){
                Mantissa*=BaseDec;
                Order++;
            }
        }
        //int part of mantissa
        //IntPartOfMant=0;
        //z=0;
        //while(!((z<Mantissa)&&((z+1)>Mantissa))){
        //    z=z+1;
        //    IntPartOfMant++;
        //}
        //IntPartF=z;
        IntPartDet(Mantissa,IntPartOfMant,IntPartF);
        FracPartOfMant=Mantissa-IntPartF;
    }
    //
    NumberData.MantissaWhole=Mantissa;
    NumberData.IntPartWhole= IntPartOfNum;
    NumberData.FracPartWhole= FracPartOfNum;
    NumberData.Order= Order;

}




void IntToDigits(int x, int&Order, int digit[], int BaseDec, bool SortNatural){
    int Sgn, x1=abs(x), Mantissa, y, z, CurDigit;
    if(x<0)Sgn=0;    else Sgn=1;
    Order=0;
    Mantissa=x1;
    Order=0;
    //if(OrdSgn==1){  //always so, becuause it is int
        Mantissa=x1;
        while(Mantissa>=BaseDec){
            Mantissa/=BaseDec;
            Order++;
        }
    //}
    y=x1;
    for(int i=1; i<=Order; i++){
        y/=BaseDec;//int part
        z=y/BaseDec;
        CurDigit=y-z*BaseDec;
        digit[i]=CurDigit;
    }
    digit[0]=x1-(x1/BaseDec)*BaseDec;
    if(SortNatural){
         SortVisaVersa(digit, Order+1);
    }
}
//new:
void RealToDigits_UsualMantAndOrd(double x, int&Order, int&OrderLength, int mant_digit[], int ord_digit[],  int QAftComma, int BaseDec, bool SortNatural){
    double z;
    int y;//, OrderFictive=0;
    TNumberParts NumberParts;
    NumberParts=SeparateNum(x, NULL, BaseDec);
    z=NumberParts.MantissaAsMathRules*IntPower(BaseDec, QAftComma);
    y=IntPart(z);
    IntToDigits(y, Order, mant_digit, BaseDec);
    IntToDigits(NumberParts.Order, OrderLength, ord_digit, BaseDec);
}
//new:
void RealToDigits_IntAndFracSepar(double x, int&Order, int int_digit[], int frac_digit[], int QAftComma, int BaseDec, bool SortNatural){
    double z;
    int y, OrderFictive=0;
    TNumberParts NumberParts;
    NumberParts=SeparateNum(x, NULL, BaseDec);
    IntToDigits(NumberParts.IntPartWhole, Order, int_digit, BaseDec);
    z=NumberParts.FracPartWhole*IntPower(BaseDec, QAftComma);
    y=IntPart(z);
    IntToDigits(y, OrderFictive, frac_digit, BaseDec);
}
//as was:
/*void RealToDigits_UsualMantAndOrd(double x, int&Order, int&OrderLength, int mant_digit[], int ord_digit[],  int QAftComma, int BaseDec){
    double IntPartR=0, y=x;
    int IntPart=0;
    int IntPartOfNum; double FracPartOfNum; int IntPartOfMant; double FracPartOfMant;  int Sgn; int OrdSgn;
    SeparateNum(x, IntPartOfNum, FracPartOfNum, IntPartOfMant, FracPartOfMant, Order, Sgn, OrdSgn, BaseDec);
    for(int i=1; i<=QAftComma; i++){
        y*=BaseDec;
    }
    IntPartDet(y, IntPart, IntPartR);
    IntToDigits(y, Order, mant_digit, BaseDec);
    IntToDigits(Order, OrderLength, ord_digit, BaseDec);
} */
//as was:
/*
void RealToDigits_IntAndFracSepar(double x, int&Order, int int_digit[], int frac_digit[], int QAftComma, int BaseDec){
    double IntPartR=0, y=x, OrderFictive;
    //int IntPart=0;
    int IntPartOfNum=0; double FracPartOfNum=0; int IntPartOfMant=0; double FracPartOfMant=0;  int Sgn=0; int OrdSgn=0;
    //int NeededPartOfFracPart;
    SeparateNum(x, BaseDec, IntPartOfNum, FracPartOfNum, IntPartOfMant, FracPartOfMant, Order, Sgn, OrdSgn);
    y=FracPartOfNum;
    for(int i=1; i<=QAftComma; i++) y*=BaseDec;
    //IntPartDet(y, IntPart, IntPartR);
    IntToDigits(y, Order, int_digit, BaseDec);
    //
    //NeededPartOfFracPart=IntPart(x);
    OrderFictive=QAftComma;
    IntToDigits(y, Order, int_digit, BaseDec);
}
*/
AnsiString RealToString(double x, int Repr_IntAndFrac0_ExpAfOrderLim1_ExpAnyhow2,  int QAftComma, int OrdAfWhichExp, int BaseDec){
    AnsiString rslt, cur, rsltIntAndFrac, rsltExp;
    int digit_mant[80], digit_ord[12], digit_int[50], digit_frac[50];
    int Order=0, OrderLength=0;
    RealToDigits_UsualMantAndOrd(x, Order, OrderLength, digit_mant, digit_ord, QAftComma, BaseDec, true);
    RealToDigits_IntAndFracSepar(x, Order, digit_int, digit_frac, QAftComma, BaseDec, true);
    rsltIntAndFrac="";
    if(x<0) rsltIntAndFrac="-";
    for(int i=1; i<=Order+1; i++){
        cur=IntToStr(digit_int[i-1]);
        rsltIntAndFrac=rsltIntAndFrac+cur;
    }
    rsltIntAndFrac=rsltIntAndFrac+".";
    for(int i=1; i<=QAftComma; i++){
        cur=IntToStr(digit_frac[i-1]);
        rsltIntAndFrac=rsltIntAndFrac+cur;
    }
    rsltExp="";
    if(x<0) rsltExp="-";
    cur=IntToStr(digit_mant[1-1]);
    rsltExp=rsltExp+cur;
    rsltExp=rsltExp+".";
    for(int i=2; i<=QAftComma; i++){
        cur=IntToStr(digit_mant[i-1]);
        rsltExp=rsltExp+cur;
    }
    if(BaseDec<=14)rsltExp=rsltExp+"E";
    else rsltExp=rsltExp+"@";
    if(x<1) rsltExp=rsltExp+"-";
    else if(Order>0) rsltExp=rsltExp+"+";
    for(int i=1; i<=OrderLength+1; i++){
        cur=IntToStr(digit_ord[i-1]);
        rsltExp=rsltExp+cur;
    }
    switch(Repr_IntAndFrac0_ExpAfOrderLim1_ExpAnyhow2){
        case 0:
            rslt=rsltIntAndFrac;
        break;
        case 1:
            if(Order<OrdAfWhichExp) rslt=rsltIntAndFrac;
            else rslt=rsltExp;
        break;
        case 2:
            rslt=rsltExp;
        break;
    }
    return rslt;
}

/*void IntToChars(int x, int BaseDec, int&len, int digit[], char ch[]){
    int Order=0, Sgn, OrdSgn, x1=abs(x), Mantissa, y, n;
    if(x<0)Sgn=0;    else Sgn=1;
    if(x1<1)OrdSgn=0; else OrdSgn=1;
    Mantissa=x1;
    Order=0;
    if(OrdSgn==1){
        Mantissa=x1;
        while(Mantissa>=BaseDec){
            Mantissa/=BaseDec;
            Order++;
        }
    }else{ // OrdSgn==0
        while(Mantissa<1){
            Mantissa*=BaseDec;
            Order++;
        }
    }
    y=x1;
    for(int i=1; i<=Order; i++){
        y/=BaseDec;//int part
        digit[i-1]=x1-(i-1)*BaseDec;
    }
}*/
//void NumToChars(double x, int BaseDec, int QCharsAftCommaRequired, int&len, char UsualNum[], char MantOrd[]){
//    int IntPartOfNum=0; double FracPartOfNum=0; int IntPartOfMant=0; double FracPartOfMant=0; int Order=0; int Sgn=0; int OrdSgn=0;
//    SeparateNum(x, BaseDec, IntPartOfNum, FracPartOfNum, IntPartOfMant, FracPartOfMant, Order, Sgn, OrdSgn);
//    len=1;//"."
//    if(Sgn==1)len++;
//    if(OrdSgn==1)len++;

//}


char DigitSignCh(int digit, int baseDec){
    char r;
    if(digit==0){
        r='0';
    }
    if(digit==1){
        //if(baseDec!=27)r='0';
        //else r='A';
        if(baseDec==27 || baseDec==8)r='A';
        else r='1';
    }
    if(digit==2){
        //if(baseDec!=27)r='2';
        //else r='B';
        if(baseDec==27 || baseDec==8)r='B';
        else r='2';
    }
    if(digit==3){
        //if(baseDec!=27)r='3';
        //else r='C';
        if(baseDec==27 || baseDec==8)r='C';
        else r='3';
    }
    if(digit==4){
        //if(baseDec!=27)r='4';
        //else r='D';
        if(baseDec==27 || baseDec==8)r='D';
        else r='4';
    }
    if(digit==5){
        //if(baseDec!=27)r='5';
        //else r='E';
        if(baseDec==27 || baseDec==8)r='E';
        else r='5';
    }
    if(digit==6){
        //if(baseDec!=27)r='6';
        //else r='F';
        if(baseDec==27 || baseDec==8)r='F';
        else r='6';
    }
    if(digit==7){
        //if(baseDec!=27)r='7';
        //else r='G';
        if(baseDec==27 || baseDec==8)r='G';
        else r='7';
    }
    if(digit==8){
        //if(baseDec!=27)r='8';
        //else r='H';
        if(baseDec==27 || baseDec==8)r='H';
        else r='8';
    }
    if(digit==9){
        //if(baseDec!=27)r='9';
        //else r='I';
        if(baseDec==27 || baseDec==8)r='I';
        else r='9';
    }
    //
    if(digit==10){
        if(baseDec==27)r='J';
        else r='A';
    }
    if(digit==11){
        if(baseDec==27)r='K';
        else r='B';
    }
    if(digit==12){
        if(baseDec==27)r='L';
        else r='C';
    }
    if(digit==13){
        if(baseDec==27)r='M';
        else r='D';
    }
    if(digit==14){
        if(baseDec==27)r='N';
        else r='E';
    }
    if(digit==15){
        if(baseDec==27)r='O';
        else r='F';
    }
    //
    if(digit==16){
        if(baseDec==27)r='P';
        else r='G';
    }
    if(digit==17){
        if(baseDec==27)r='Q';
        else r='H';
    }
    if(digit==18){
        if(baseDec==27)r='R';
        else r='I';
    }
    if(digit==19){
        if(baseDec==27)r='S';
        else r='J';
    }
    if(digit==20){
        if(baseDec==27)r='T';
        else r='K';
    }
    if(digit==21){
        if(baseDec==27)r='U';
        else r='L';
    }
    if(digit==22){
        if(baseDec==27)r='V';
        else r='M';
    }
    if(digit==23){
        if(baseDec==27)r='W';
        else r='N';
    }
    if(digit==24){
        if(baseDec==27)r='X';
        else r='O';
    }
    if(digit==25){
        if(baseDec==27)r='Y';
        else r='P';
    }
    if(digit==26){
        if(baseDec==27)r='Z';
        else r='Q';
    }
    //
    if(digit==27) r='R';
    if(digit==28) r='S';
    if(digit==29) r='T';
    if(digit==30) r='U';
    if(digit==31) r='V';
    if(digit==32) r='W';
    if(digit==33) r='X';
    if(digit==34) r='Y';
    if(digit==35) r='Z';
    //
    if(digit>=baseDec)r='?';
    //
    return r;
}

AnsiString DigitSign(int digit, int baseDec){
    AnsiString r;
    if(digit==0){
        r="0";
    }
    if(digit==1){
        //if(baseDec!=27)r="0";
        //else r="A";
        if(baseDec==27 || baseDec==8)r="A";
        else r="1";
    }
    if(digit==2){
        //if(baseDec!=27)r="2";
        //else r="B";
        if(baseDec==27 || baseDec==8)r="B";
        else r="2";
    }
    if(digit==3){
        //if(baseDec!=27)r="3";
        //else r="C";
        if(baseDec==27 || baseDec==8)r="C";
        else r="3";
    }
    if(digit==4){
        //if(baseDec!=27)r="4";
        //else r="D";
        if(baseDec==27 || baseDec==8)r="D";
        else r="4";
    }
    if(digit==5){
        //if(baseDec!=27)r="5";
        //else r="E";
        if(baseDec==27 || baseDec==8)r="E";
        else r="5";
    }
    if(digit==6){
        //if(baseDec!=27)r="6";
        //else r="F";
        if(baseDec==27 || baseDec==8)r="F";
        else r="6";
    }
    if(digit==7){
        //if(baseDec!=27)r="7";
        //else r="G";
        if(baseDec==27 || baseDec==8)r="G";
        else r="7";
    }
    if(digit==8){
        //if(baseDec!=27)r="8";
        //else r="H";
        if(baseDec==27 || baseDec==8)r="H";
        else r="8";
    }
    //
    if(digit==9){
        //if(baseDec!=27)r="9";
        //else r="I";
        if(baseDec==27 || baseDec==8)r="I";
        else r="9";
    }
    //
    if(digit==10){
        if(baseDec==27)r="J";
        else r="A";
    }
    if(digit==11){
        if(baseDec==27)r="K";
        else r="B";
    }
    if(digit==12){
        if(baseDec==27)r="L";
        else r="C";
    }
    if(digit==13){
        if(baseDec==27)r="M";
        else r="D";
    }
    if(digit==14){
        if(baseDec==27)r="N";
        else r="E";
    }
    if(digit==15){
        if(baseDec==27)r="O";
        else r="F";
    }
    //
    if(digit==16){
        if(baseDec==27)r="P";
        else r="G";
    }
    if(digit==17){
        if(baseDec==27)r="Q";
        else r="H";
    }
    if(digit==18){
        if(baseDec==27)r="R";
        else r="I";
    }
    if(digit==19){
        if(baseDec==27)r="S";
        else r="J";
    }
    if(digit==20){
        if(baseDec==27)r="T";
        else r="K";
    }
    if(digit==21){
        if(baseDec==27)r="U";
        else r="L";
    }
    if(digit==22){
        if(baseDec==27)r="V";
        else r="M";
    }
    if(digit==23){
        if(baseDec==27)r="W";
        else r="N";
    }
    if(digit==24){
        if(baseDec==27)r="X";
        else r="O";
    }
    if(digit==25){
        if(baseDec==27)r="Y";
        else r="P";
    }
    if(digit==26){
        if(baseDec==27)r="Z";
        else r="Q";
    }
    //
    if(digit==27)r="R";
    if(digit==28)r="S";
    if(digit==29)r="T";
    if(digit==30)r="U";
    if(digit==31)r="V";
    if(digit==32)r="W";
    if(digit==33)r="X";
    if(digit==34)r="Y";
    if(digit==35)r="Z";
    //
    if(digit>=baseDec)r="-1";
    //
    return r;
}

AnsiString ExcelColumnByN(int N){
    AnsiString S;
    int Order=0;
    int digit[3];
    int m=N/27;
    int n=N+m;
    if(n==0)n++;
    //S=IntToStr(N)+"=";
    S="";
    if(N<=0)S="?";
    else{
        //void IntToDigits(int x, int&Order, int digit[], int BaseDec=10);
        //IntToDigits(n, 27, Order, digit);
        IntToDigits(n, Order, digit, 27);
        for(int i=Order+1; i>=1; i--){
            S+=DigitSign(digit[i-1], 27);
        }
    }
    return S;
}
int ExcelColN(AnsiString Col){
    int ColN=0;
    AnsiString s;
    bool contin=true;
    while(!(/*ColN>=256 ||*/ ExcelColumnByN(ColN)==Col))ColN++;
    //while(contin){
    //     ColN++;
    //     s=ExcelColumnByN(ColN);
    //     if(s==Col || ColN==256)contin=false;
    //}
    return ColN;
}


int DigitOf(AnsiString s, int baseDec){
    int digit=-1;
    AnsiString r;
    if(s=="0"){
        digit=0;
    }
    if(s=="1"){
        if(baseDec!=27 || baseDec!=8)digit=1;
    }
    if(s=="2"){
        if(baseDec!=27 || baseDec!=8)digit=2;
    }
    if(s=="3"){
        if(baseDec!=27 || baseDec!=8)digit=3;
    }
    if(s=="4"){
        if(baseDec!=27 || baseDec!=8)digit=4;
    }
    if(s=="5"){
        if(baseDec!=27 || baseDec!=8)digit=5;
    }
    if(s=="6"){
        if(baseDec!=27 || baseDec!=8)digit=6;
    }
    if(s=="7"){
        if(baseDec!=27 || baseDec!=8)digit=7;
    }
    if(s=="8"){
        if(baseDec!=27 || baseDec!=8)digit=8;
    }
    //
    if(s=="9"){
        if(baseDec!=27)digit=9;
    }
    //
    if(s=="A"){
        if(baseDec==27|| baseDec==8)digit=1;
        else digit=10;
    }
    if(s=="B"){
        if(baseDec==27|| baseDec==8)digit=2;
        else digit=11;
    }
    if(s=="C"){
        if(baseDec==27|| baseDec==8)digit=3;
        else digit=12;
    }
    if(s=="D"){
        if(baseDec==27|| baseDec==8)digit=4;
        else digit=13;
    }
    if(s=="E"){
        if(baseDec==27|| baseDec==8)digit=5;
        else digit=14;
    }
    if(s=="F"){
        if(baseDec==27|| baseDec==8)digit=6;
        else digit=15;
    }
    if(s=="G"){
        if(baseDec==27|| baseDec==8)digit=7;
        else digit=16;
    }
    if(s=="H"){
        if(baseDec==27|| baseDec==8)digit=8;
        else digit=17;
    }
    //
    if(s=="I"){
        if(baseDec==27)digit=9;
        else digit=18;
    }
    if(s=="J"){
        if(baseDec==27)digit=10;
        else digit=19;
    }
    if(s=="K"){
        if(baseDec==27)digit=11;
        else digit=20;
    }
    if(s=="L"){
        if(baseDec==27)digit=12;
        else digit=21;
    }
    if(s=="M"){
        if(baseDec==27)digit=13;
        else digit=22;
    }
    if(s=="N"){
        if(baseDec==27)digit=14;
        else digit=23;
    }
    if(s=="O"){
        if(baseDec==27)digit=15;
        else digit=24;
    }
    if(s=="P"){
        if(baseDec==27)digit=16;
        else digit=25;
    }
    if(s=="Q"){
        if(baseDec==27)digit=17;
        else digit=26;
    }
    if(s=="R"){
        if(baseDec==27)digit=18;
        else digit=27;
    }
    //
    if(s=="S"){
        if(baseDec==27)digit=19;
        else digit=28;
    }
    if(s=="T"){
        if(baseDec==27)digit=20;
        else digit=29;
    }
    //
    if(s=="U"){
        if(baseDec==27)digit=21;
        else digit=30;
    }
    if(s=="V"){
        if(baseDec==27)digit=22;
        else digit=31;
    }
    if(s=="W"){
        if(baseDec==27)digit=23;
        else digit=32;
    }
    if(s=="X"){
        if(baseDec==27)digit=24;
        else digit=33;
    }
    if(s=="Y"){
        if(baseDec==27)digit=25;
        else digit=34;
    }
    if(s=="Z"){
        if(baseDec==27)digit=26;
        else digit=35;
    }
    //
    if(digit>=baseDec)digit=-1;
    //
    return digit;
}
bool IsDigit(AnsiString s, int baseDec){return (DigitOf(s,baseDec)!=-1);}
void ExcelCellCoordsFromAddress(AnsiString CellSign, int&LineN, int&ColN){
    AnsiString CurStr, ColSign;
    int L=CellSign.Length(), d;
    ColSign=""; LineN=0;
    for(int i=1; i<=L; i++){
        CurStr=CellSign.SubString(i,1);
        d=DigitOf(CurStr,10);
        if(d==-1)ColSign+=CurStr;
        else LineN=LineN*10+d;
    }
    ColN=ExcelColN(ColSign);
}


bool IsComma(AnsiString x){
    return (x=="."||x==",");
}
bool IsOrderMark(AnsiString x){
    return }
bool IsOrderMark(AnsiString x, int BaseDec){
    bool b;
    b=( (x=="#"||x=="@") || ( (x=="E"||x=="e")&&(BaseDec<=14) ) );
    return b;
}
//double NumberParse(AnsiString x, int FracPartLenReq, int baseDec, bool ZeroForFracNecessary, int&IntPart,  double&FracPart, int&NeededFrac, int&Order, bool&Sign, int&ErstError){
TNumberParts StrNumberParse(AnsiString x, TValsShowHide*vsh, int BaseDec){
    TNumberParts NumParts;
    int NowInt1Frac2Ord3=1, digit=-1, LenOfFrPrt=0;//, FrPrtInt=0;
    AnsiString s, prev_s, qw="E";
    double FrcPrt=0;
    bool OrderIsPositive=true;
    //
    double y;
    bool Sign, ZeroForFracNecessary;
    int ErstError;
    //
    NumParts.IntPartAsWritten=0;
    NumParts.Order=0;
    NumParts.FracPartAsWritten=0;
    NumParts.MantissaAsWritten=0;
    //
    NumParts.MantissaAsMathRules=0;
    NumParts.IntPartAsMathRules=0;
    NumParts.FracPartAsMathRules=0;
    NumParts.MantissaAsWritten=0;
    //
    NumParts.Order=0;//Order=0;
    Sign=true;
    writeln(vsh,x);
    for(int i=1; i<=x.Length(); i++){
        if(i>1)prev_s=s;
        s=x.SubString(i,1);
        writeln(vsh,s);
        if(IsOrderMark(s,BaseDec)){
            if(NowInt1Frac2Ord3<3){
                NowInt1Frac2Ord3=3;
                writeln(vsh,"now order");
            }else{
                //error
                writeln(vsh,"IncorrectSym");
            }
        }
        if(s=="-"){
           //if(IsOrderMark(prev_s,baseDec)) OrderIsPositive=false; //also gut
           if(NowInt1Frac2Ord3==3 && NumParts.Order==0){
              OrderIsPositive=false;
              writeln(vsh,"Negative Order");
           }else if(i==1){
              Sign=false;
              writeln(vsh,"Negative Number");
           }else{
              // error
              writeln(vsh,"IncorrectSym");
           }
        }
        if(s=="+"){
           //if(IsOrderMark(prev_s,baseDec)) OrderIsPositive=true; //also gut
           if(NowInt1Frac2Ord3==3 && NumParts.Order==0){
              OrderIsPositive=true;
              writeln(vsh,"Positive Order");
           }else if(i==1){
               Sign=true;
               writeln(vsh,"Positive Number");
           }else{
               //error
               writeln(vsh,"IncorrectSym");
           }
        }
        if(s=="."||s==","){
            if(NowInt1Frac2Ord3==1){
                NowInt1Frac2Ord3=2;
                writeln(vsh,"Now Frac part");
            }else{
                ErstError=i;
                writeln(vsh,"IncorrectSym");
            }
            //
                           ErstError=i;
                writeln(vsh,"IncorrectSym");
            }
        }
        digit=DigitOf(s,BaseDec);
        //writeln(vsh,"Digit="+IntToStr(digit));
        if(digit!=-1){
            writeln(vsh,"Digit="+IntToStr(digit));
            if(NowInt1Frac2Ord3==1){
                                            }else if(NowInt1Frac2Ord3==2){
                LenOfFrPrt++;
                //FrPrtInt=FrPrtInt*baseDec+digit;
                                                            }else if(NowInt1Frac2Ord3==3){
                NumParts.Order=NumParts.Order*BaseDec+digit;
                            }
        }
    }
    if(!OrderIsPositive)NumParts.Order=-NumParts.Order;
    NumParts.NumberHasPositiveSign=Sign;
    NumParts.OrderHasPositiveSign=OrderIsPositive;
        if(Sign==false)y=-y;
    //return y;
    return NumParts;
}

double StrToReal(AnsiString s,  TValsShowHide*vsh, int BaseDec){
    double y;
    TNumberParts NumParts;
    NumParts= StrNumberParse(s, vsh, BaseDec);
    bool Sign=(NumParts.NumberHasPositiveSign==true);
        if(Sign==false)y=-y;
    return y;
}

/*AnsiString RealToString(double x, int Repr_IntAndFrac0_ExpAfOrderLim1_ExpAnyhow2,  int QAftComma, int OrdAfWhichExp, int BaseDec){
    AnsiString str;
    int Order=0;
    str="";
    if(x<0)str=str+"-";
    return str;
} */

//NumberParse.h ---------------------------------------------------

//
#ifndef NumberParseH
#define NumberParseH
//
#include"MyLib.h"
#include"MyMathLib.h"
/*
struct TNumberParts{                // 1234.5678E+2 // 1234.5678E-2 //1234.5678
    int IntPartAsWritten;                // 1234         // 1234         //1234
    double FracPartAsWritten,                // .5678        // .5678        // .5678
           MantissaAsWritten;                // 1234.5678    // 1234.5678    //1234.5678
    int OrderAsWritten;                //  2           // 2            // 0
    //
    int IntPartAsMathRules;                // 1            // 1            // 1
    double FracPartAsMathRules,                // 0.2345678    // 0.2345678    // 0.2345678
           MantissaAsMathRules;                // 1.2345678    // 1.2345678    // 1.2345678
    //
    int Order;                // 6-1=5        // 2-1=1         // 4-1=3
    //
    int IntPartWhole;                // 123456       // 12            // 1234
    double FracPartWhole,                // 0.78         // 0.345678      // 0.5678
           MantissaWhole;                // 123465.78    // 12.345678     // 1234.5678
    //
    bool NumberHasPositiveSign, OrderHasPositiveSign;   //it is clear
    //
    //int OrderOfIntPart, OrderOfFracPart;   //cmnted 2021-03-24
    // alr present, see above
    // bool SignOfMantissaIsPositive, SignOfOrderIsPositive;
};
void SetNumberDataNull(TNumberParts&data);
void WriteNumberParts(TNumberParts data, TValsShowHide*vsh=NULL);
*/

class TNumberParts{                // 1234.5678E+2 // 1234.5678E-2 //1234.5678
    public:
    int IntPartAsWritten;                // 1234         // 1234         //1234
    double FracPartAsWritten,                // .5678        // .5678        // .5678
           MantissaAsWritten;                // 1234.5678    // 1234.5678    //1234.5678
    int OrderAsWritten;                //  2           // 2            // 0
    //
    int IntPartAsMathRules;                // 1            // 1            // 1
    double FracPartAsMathRules,                // 0.2345678    // 0.2345678    // 0.2345678
           MantissaAsMathRules;                // 1.2345678    // 1.2345678    // 1.2345678
    //
    int Order;                // 6-1=5        // 2-1=1         // 4-1=3
    //
    int IntPartWhole;                // 123456       // 12            // 1234
    double FracPartWhole,                // 0.78         // 0.345678      // 0.5678
           MantissaWhole;                // 123465.78    // 12.345678     // 1234.5678
    //
    bool NumberHasPositiveSign, OrderHasPositiveSign;   //it is clear
    //
    //int OrderOfIntPart, OrderOfFracPart;   //cmnted 2021-03-24
    // alr present, see above
    // bool SignOfMantissaIsPositive, SignOfOrderIsPositive;
    //
    TNumberParts();
    //TNumberParts(int x);
    //TNumberParts(double x);
    void SetNull();
    void ShowText(TValsShowHide*vsh);
};
//
int DigitOf(AnsiString s, int baseDec=10);
bool IsDigit(AnsiString s, int baseDec=10);
void IntPartDet(double x, int&ip, double&IntPartFP);
int IntPart(double x);
TNumberParts SeparateNum(double x, TValsShowHide*vsh=NULL, int BaseDec=10);
void SeparateNum(double x, int&IntPartOfNum, double&FracPartOfNum, int&IntPartOfMant, double&FracPartOfMant, int&Order, int&Sgn, int&OrdSgn, int BaseDec=10);
void IntToDigits(int x, int&Order, int digit[], int BaseDec=10, bool SortNatural=true);
void RealToDigits_UsualMantAndOrd(double x, int&Order, int&OrderLength, int mant_digit[], int ord_digit[], int QAftComma=6, int BaseDec=10, bool SortNatural=true);
void RealToDigits_IntAndFracSepar(double x, int&Order, int int_digit[], int frac_digit[], int QAftComma=6, int BaseDec=10, bool SortNatural=true);
AnsiString RealToString(double x, int Repr_IntAndFrac0_ExpAfOrderLim1_ExpAnyhow2=0,  int QAftComma=6, int OrdAfWhichExp=6, int BaseDec=10);
//void NumToChars(double x, int BaseDec, int QCharsAftCommaRequired, int&len, char UsualNum[], char MantOrd[]);
//
char DigitSignCh(int digit, int baseDec=10);
AnsiString DigitSign(int digit, int baseDec=10);
AnsiString ExcelColumnByN(int N);
int ExcelColN(AnsiString Col);
void ExcelCellCoordsFromAddress(AnsiString CellSign, int&LineN, int&ColN);
//
bool IsComma(AnsiString x);
bool IsOrderMark(AnsiString x);
bool IsOrderMark(AnsiString x, int BaseDecDec=10);
//double NumberParse(AnsiString x, int FracPartLenReq, int baseDec, bool ZeroForFracNecessary, int&IntPart,  double&FracPart, int&NeededFrac, int&Order, bool&Sign, int&ErstError){
TNumberParts StrNumberParse(AnsiString x, TValsShowHide*vsh=NULL, int BaseDecDec=10);
double StrToReal(AnsiString s, TValsShowHide*vsh=NULL, int BaseDec=10);
//
#endif


//MyMathLib.cpp


#include <vcl.h>
#pragma hdrstop

#include "MyMathLib.h"


#pragma package(smart_init)

double IntPower(double x, int pow){
    double y=1;
    if(pow==0) y=1;
    else if(pow==1) y=x;
    else if(pow>0){
        for(int i=1; i<=pow; i++) y*=x;
    }else{//pow<0
        for(int i=1; i<=-pow; i++) y/=x;
    }
    return y;
}
/*float IntPower(float x, int pow){
    float y=1;
    if(pow==0) y=1;
    else if(pow==1) y=x;
    else if(pow>0){
        for(int i=1; i<=pow; i++) y*=x;
    }else{//pow<0
        for(int i=1; i<=-pow; i++) y/=x;
    }
    return y;
}
int IntPower(int x, int pow){
    int y=1;
    if(pow==0) y=1;
    else if(pow==1) y=x;
    else if(pow>0){
        for(int i=1; i<=pow; i++) y*=x;
    }else{//pow<0
        for(int i=1; i<=-pow; i++) y*=x;
    }
    return y;
} */

//MyMathLib.h


#ifndef MyMathLibH
#define MyMathLibH

double IntPower(double x, int pow);
/*float IntPower(float x, int pow);
int IntPower(int x, int pow); */

#endif


//MyLib.cpp


#include <vcl.h>
#pragma hdrstop

#include "MyLib.h"


#pragma package(smart_init)

const bool BoolValByDefault=true;
const int MaxInt=65000;

int BoolToInt(bool x){
    int y=0;
//    bool b=BoolValByDefault;
//    if(b==true){
//        if(x==0)
//    }
    if(x)y=1;
    return y;

}
bool  BoolOfInt(int x){
    bool y=BoolValByDefault, DfltIsTrue=BoolValByDefault;
    if(DfltIsTrue==true){
        y=(x!=0);
    }else{
        y=(x==1);
    }
    return y;
}
bool IntToBool(int x){ return BoolOfInt(x); }
bool  IntOfBool(bool x){ return BoolToInt(x); }

/*QString FloatToStr(float x){
   QString ss;
   ss.setNum(x);
   return ss;
}
QString FloatToStr(double x){
    QString ss;
    ss.setNum(x);
    return ss;
 }
QString IntToStr(int x){
    QString ss;
    ss.setNum(x);
    return ss;
 }*/


char*ReadLine(FILE*f){
    int CountLength=0;
    char ch, ChArr[200], *ChPtr=NULL;
    do{
        fscanf(f,"", &ch);
        //printf("",ch);
        if((ch!='\n')&&(ch!='\0')&&!feof(f)){
            CountLength++;
            ChArr[CountLength-1]=ch;
        }
    }while((ch!='\n')&&(ch!='\0')&&!feof(f)/*&&(ch!='@')*/);
    ChArr[CountLength-1+1]='\0';
    //if(CountLength!='\0')ChPtr=ChArr;
    //printf("\n");
    if(CountLength!=0)ChPtr=ChArr;
    return ChPtr;
}

//char*ReadLine(FILE*f, int Show1Hide0, bool ConsoleInterface, TMemo*M){
//    int CountLength=0;
//    char ch, ChArr[200], *ChPtr=NULL, ChArrSngl[5];
//    if(Show1Hide0){
//        if(ConsoleInterface)printf("ReadLine starts working\n");
//        if(M!=NULL)M->Lines->Add("ReadLine starts working");
//    }
//    do{
//        fscanf(f,"", &ch);

//        if((ch!='\n')&&(ch!='\0')&&!feof(f)){
//            CountLength++;
//            ChArr[CountLength-1]=ch;
//            if(Show1Hide0){
//                if(ConsoleInterface)printf("",ch);
//                if(M!=NULL){
//                ChArrSngl[0]=ch; ChArrSngl[1]='\0';
//                M->Lines->Add(AnsiString(ChArrSngl));
//                }
//            }
//        }
//        else{
//           if(ch=='\n'){
//               if(Show1Hide0){
//                if(ConsoleInterface){
//                printf("\n");
//                printf("","\\n");
//                }
//                if(M!=NULL){
//                ChArrSngl[0]='\\'; ChArrSngl[1]='n';   ChArrSngl[1]='\0';
//                M->Lines->Add(AnsiString(ChArrSngl));
//                }
//               }
//           }
//           if(ch=='\0'){
//               if(Show1Hide0){
//                if(ConsoleInterface){
//                printf("\n");
//                printf("","\\0");
//                }
//                if(M!=NULL){
//                ChArrSngl[0]='\\'; ChArrSngl[1]='0';   ChArrSngl[1]='\0';
//                M->Lines->Add(AnsiString(ChArrSngl));
//                }
//               }
//           }
//           if(feof(f)){
//                if(Show1Hide0){
//                if(ConsoleInterface){
//                printf("\n");
//                printf("End of file reached");
//                }
//                if(M!=NULL){
//                strcpy(ChArrSngl,"EOF\0");
//                M->Lines->Add(AnsiString(ChArrSngl));
//                }
//               }
//           }
//        }
//    }while((ch!='\n')&&(ch!='\0')&&!feof(f)/*&&(ch!='@')*/);
//    ChArr[CountLength-1+1]='\0';
//    //if(CountLength!='\0')ChPtr=ChArr;
//    //printf("\n");
//    if(CountLength!=0)ChPtr=ChArr;
//    if(Show1Hide0){
//        if(ConsoleInterface)printf("ReadLine finishes working\n");
//        if(M!=NULL)M->Lines->Add("ReadLine finishes working");
//    }
//    return ChPtr;
//}

int CharPtrToArr(char*ptr, char Arr[]){
    int count=0, SignificantLength=0;
    char cur;
    do{
        count++;
        cur=(*(ptr+count-1));
        //printf("",cur);
        Arr[count-1]=cur;
        if((cur!='\0')&&(cur!='\n')){
            SignificantLength++;
        }
    }while((cur!='\0')&&(cur!='\n'));
    //printf("assigning finished\n");
    return SignificantLength;
}

double ReadLineAsRealNum(FILE*f){
    double x;
    fscanf(f,"\n",&x);
    return x;
}


TValsShowHide::TValsShowHide(){
    Show1Hide0=0;
    ConsoleInterface=false;
    M=NULL;
    G=NULL;
    f=NULL;
}
void TValsShowHide::EnableWriting(){Show1Hide0=1;}
void TValsShowHide::DisableWriting(){Show1Hide0=0;}




void TValsShowHide::write(char*s){
    //char cta[255];
    //strcpy(cta,s);
        if(Show1Hide0==1){
            //if(ConsoleInterface) printf(s);
            if(ConsoleInterface) printf("",s);
            if(M!=NULL) M->Lines->Add(AnsiString(s));
            if(f!=NULL) fprintf(f,"",s);
        }
}

void TValsShowHide::write(AnsiString str){
    //char cta[255];
    //strcpy(cta,s);
        if(Show1Hide0==1){
            //if(ConsoleInterface) printf(str.c_str());
            if(ConsoleInterface) printf("",str.c_str());
            if(M!=NULL) M->Lines->Add(str);
            if(f!=NULL) fprintf(f,"",str.c_str());
        }
}

void TValsShowHide::writeln(char*s){
    //char cta[255];
    //strcpy(cta,s);
        if(Show1Hide0==1){
            if(ConsoleInterface) printf("\n",s);
            if(M!=NULL) M->Lines->Add(AnsiString(s));
            if(f!=NULL) fprintf(f,"\n",s);
        }
}

void TValsShowHide::writeln(AnsiString str){
    //char cta[255];
    //strcpy(cta,s);
        if(Show1Hide0==1){
            if(ConsoleInterface) printf("\n",str.c_str());
            if(M!=NULL) M->Lines->Add(str);
            if(f!=NULL) fprintf(f,"\n",str.c_str());
        }
}

//

void write(TValsShowHide *VSH, char*s){
    //char cta[255];
    //strcpy(cta,s);
    if(VSH!=NULL){
        if(VSH->Show1Hide0==1){
            //if(VSH->ConsoleInterface) printf(s);
            if(VSH->ConsoleInterface) printf("",s);
            if(VSH->M!=NULL) VSH->M->Lines->Add(AnsiString(s));
            if(VSH->f!=NULL) fprintf(VSH->f,"",s);
        }
    }
}

void write(TValsShowHide *VSH, AnsiString str){
    //char cta[255];
    //strcpy(cta,s);
    if(VSH!=NULL){
        if(VSH->Show1Hide0==1){
            //if(VSH->ConsoleInterface) printf(str.c_str());
            if(VSH->ConsoleInterface) printf("",str.c_str());
            if(VSH->M!=NULL) VSH->M->Lines->Add(str);
            if(VSH->f!=NULL) fprintf(VSH->f,"",str.c_str());
        }
    }
}

void writeln(TValsShowHide *VSH, char*s){
    //char cta[255];
    //strcpy(cta,s);
    if(VSH!=NULL){
        if(VSH->Show1Hide0==1){
            if(VSH->ConsoleInterface) printf("\n",s);
            if(VSH->M!=NULL) VSH->M->Lines->Add(AnsiString(s));
            if(VSH->f!=NULL) fprintf(VSH->f,"\n",s);
        }
    }
}

void writeln(TValsShowHide *VSH, AnsiString str){
    //char cta[255];
    //strcpy(cta,s);
    if(VSH!=NULL){
        if(VSH->Show1Hide0==1){
            if(VSH->ConsoleInterface) printf("\n",str.c_str());
            if(VSH->M!=NULL) VSH->M->Lines->Add(str);
            if(VSH->f!=NULL) fprintf(VSH->f,"\n",str.c_str());
        }
    }
}

//MyLib.h

#ifndef MyLibH
#define MyLibH

#include"iostream.h"//;;; ;;;;
#include"grids.hpp"

int BoolToInt(bool x);
bool  BoolOfInt(int x);
bool IntToBool(int x);
bool  IntOfBool(bool x);

/*AnsiString FloatToStr(float x);
AnsiString FloatToStr(double x);
AnsiString IntToStr(int x);*/

char*ReadLine(FILE*f);
//char*ReadLine(FILE*f, int Show1Hide0, bool ConsoleInterface, TMemo*M);
int CharPtrToArr(char*ptr, char Arr[]);

template<typename T> Swap(T&x1, T&x2){
    T buf;
    buf=x1;
    x1=x2;
    x2=buf;
}

class TValsShowHide; //forward declaration!

template<typename T> SortVisaVersa(T*&x, int Q, TValsShowHide*vsh=NULL){    //checked, works well
    int NBound, N1, N2;
    if(Q==0) NBound=Q/2;
    else NBound=(Q-1)/2;
    for(int i=1; i<=NBound; i++){
        N1= i-1;
        N2= Q-i+1-1;
        Swap((*(x+N1)),(*(x+N2)));
    }
}

class TValsShowHide{
  public:
    int Show1Hide0;
    bool ConsoleInterface;
    TMemo*M;
    TStringGrid*G;
    FILE*f;
    TValsShowHide();
    void SetWriting(int v);
    void EnableWriting();
    void DisableWriting();
    void write(char*s);
    void write(AnsiString s);
    void writeln(char*s);
    void writeln(AnsiString s);
};

void write(TValsShowHide *VSH, char*s);
void write(TValsShowHide *VSH, AnsiString str);
void writeln(TValsShowHide *VSH, char*s);
void writeln(TValsShowHide *VSH, AnsiString str);
#endif






Загрузочное меню в Windows 7, 8, 10 вместо boot.ini из XP
AhsColonDSlash. EwindowsnotASGFL. EsAdot. EruAslash. Ewindows-7Aslash. ErASGFL. EdASGSL. EktirovASGSL. EniASGFL. E-mASGFL. Enyu-zASGSL. Egruzki-windows-7Aslash. E


Расстояние от плоскости симметрии вертолета до центра тяжести пулемета b
Горизонтальная дальность полета пули l
Высота полета вертолета в момент выстрела h
Угол пикирования ;
Горизонтальная дальность пули, при которой ныне получится пересечение ее траектории с плоскостью симметрии вертолета l1=2 км
Горизонтальная дальность пули, при которой после конструктивных изменений (разворота пулемета) получится пересечение ее траектории с плоскостью симметрии вертолета l2=1 км
Точка падения пули без разворота S (F0, H0, I0) (straight – прямо)
Точка падения пули при нынешнем развороте N (F1, I1) (now – сейчас)
Точка падения пули при нынешнем развороте A (F2) (additional angle – добавочный угол)
Если из точки N падения пули при нынешнем повороте пулемета провести вертикаль, то из точки центра C вертолета (вследствие малости размеров предполагаем, что здесь находятся и центр тяжести, и прицел, и проекция центра тяжести W пулемета на плоскость симметрии вертолета OLNH) провести вертикальную прямую CL, то плоскость, проходящая через точку C вертолета параллельно строительной горизонтали, пересекает эту прямую в точке F, направление нуля прицела пересекает прямую CL в точке T, а линия визирования цели будет CN. Поэтому угол прицеливания – это TCN.
При дополнительном повороте пулемета траектория пули пересечет плоскость симметрии вертолета OLNH на прямой IJ. Если бы нг было сопроттвления воздуха, то траектории движения пуль были бы прямыми, и точка пересечения была бы точкой пенресечения прямых IJ и CF, с учетом балистической тректории она будет ниже. В этом случае пули левого пудемета упадут в точку A справа от плоскости симметрии, а правого – в зеркальную ей точку слева.
Такое применение пулемета нецелесообразно, поэтому очевидно, предполагается, что вертолет будет на дальносьи от цели 1 км при максимальном угле пикирования 20;.
Тогда точкой падения пуль станет точка I, а высота полета D/sin(;).
Однако наша задача вывести зависимость между углаим прицеливаения в обоих случваях а это возможно лишь при общность условий. Поэтому будем считать, что разлет в сторону мал либо учитывается отделено на горизонтальной шкале прицела.
При любом расстоянии li, при котором происходи пересечение траекторий полета пуль и плоскости симметрии, горизонтальная дальность составит
Dг=l*(1-cos(arctg(b/li)).
На расстоянии Dг от точки O будет находиться точка P, в которой будет находиться цель без учета ее рассотяния от плоскости симметрии вертолета.
Угол прицеливания – это угол TCP=TCF+TCCL+CLCP
Учитывая угол между СГФ и нулем лимба 57 тысячных (кажется), пролучаем формулу для угла прицеливания
fi=57+1000(-theta*pi/180+arctg(h/Dг)= 57+1000(arctg(h / l*(1-cos(arctg(b/li))))


4.1 Общие положения
Задачей расчета дренажных трубопроводов является проверка их соответствия своему функциональному назначению:
; вытеснение воздуха из баков по мере их заполнения топливом при заправке во избежание избыточного давления в баках,
; заполнение баков воздухом при расходе топлива в полете и в случае экстренного снижения во избежание разрежения в баках и возможного их смятия.
Соответствие дренажных трубопроводов своему функциональному назначению выполняется при подборе конструктором внутренних диаметров элементов трубопроводов не ниже минимально допустимых по условию сопротивления движению воздуха.
Количественным критерием правильности конструктивно назначенных параметров дренажных трубопроводов и эффективности выполнения им своего функционального назначения является давление в баках.
Метод решения данной задачи – составление и решение уравнений Бернулли, связывающих давление в баках и движение воздуха по трубопроводам с учетом их гидравлических сопротивлений



Cyberforum om Qt, om widgets in TableWidget
AhsColonDSlash3wDot. EcybASGFL. ErforumAdot. EruAslash. EqtAslash. EthrASGFL. EASGSL. EdAone. E797075Adot. Ehtml

Трудоголики в панике: за отказ от отпуска работника могут наказать, озвучены подробности

AhsColonDSlash. EglASGSL. EvnoASGFL. EAdot. EukrASGSL. EiniASGSL. EnwASGSL. EllAdot. EcomAslash. E6Atwo. E80Atwo. E-trudogoliki-v-pASGSL. EnikASGFL. E-zASGSL. E-otkASGSL. Ez-ot-otpuskASGSL. E-rASGSL. EbotnikASGSL. E-mogut-nASGSL. EkASGSL. EzASGSL. Et-ozvuchASGFL. Eny-podrobnosti?utmAUL. EmASGFL. EdiumAequal. ErASGFL. EfASGFL. ErrASGSL. ElAamp. EutmAUL. EsourcASGFL. EAequal. EidASGFL. EASGSL. ElmASGFL. EdiASGSL. EAamp. EutmAUL. EcASGSL. EmpASGSL. EignAequal. EukrASGSL. EiniASGSL. EnwASGSL. EllAdot. EcomAamp. EutmAUL. EtASGFL. ErmAequal. EAone. EAtwo. E8Atri. E7Atwo. E9Aamp. EutmAUL. EcontASGFL. EntAequal. E89885Aone. E8

Парламент Молдовы принял проект снижения пенсионного возраста в стране
AhsColonDSlash. EstrASGSL. EnASGSL. EAdot. EuASGSL. EAslash. EnASGFL. EwsAslash. EAtri. E07058-pASGSL. ErlASGSL. EmASGFL. Ent-moldovy-prinjASGSL. El-proASGFL. Ekt-snizhASGFL. EnijASGSL. E-pASGFL. Ensionnoho-vozrASGSL. EstASGSL. E-v-strASGSL. EnASGFL. EAdot. Ehtml

Молдова повысила статус русского языка. Чиновников обязали говорить по-русски
AhsColonDSlash. EnASGFL. EwsAdot. ErbcAdot. EuASGSL. EAslash. ErusAslash. EpoliticsAslash. EmoldovASGSL. E-povysilASGSL. E-stASGSL. Etus-russkogo-zykASGSL. E-chinovnikov-Aone. E608Aone. EAtri. EAtwo. E905Adot. Ehtml

10 интересных фактов о байкальской нерпе
AhsColonDSlash. EriASGSL. EAdot. EruAslash. EAtwo. E0Aone. E705Atwo. E5Aslash. EAone. E49497Aone. EAtwo. EAtwo. E7Adot. Ehtml

"Скорые" не для всех, вакцины по 40 центов, медицинский коллапс с января. Что принял Кабмин 16 декабря
AhsColonDSlash. EstrASGSL. EnASGSL. EAdot. EuASGSL. EAslash. EnASGFL. EwsAslash. EAtri. E070Atri. E6-chto-prinjASGSL. El-kASGSL. Ebin-Aone. E6-dASGFL. EkASGSL. EbrjASGSL. EAdot. Ehtml

Как восстановить загрузочный сектор — Master Boot Record
AhsColonDSlash3wDot. EstASGSL. ErusrASGFL. EcovASGFL. EryAdot. EruAslash. EASGSL. ErticlASGFL. EsAslash. Ehow-to-rASGFL. EcovASGFL. Er-mASGSL. EstASGFL. Er-boot-rASGFL. EcordAdot. Ehtml

Редактирование меню загрузки Windows 7
AhsColonDSlash. EwindowsnotASGFL. EsAdot. EruAslash. Ewindows-7Aslash. ErASGFL. EdASGSL. EktirovASGSL. EniASGFL. E-mASGFL. Enyu-zASGSL. Egruzki-windows-7Aslash. E

Как изменить параметры загрузки Windows 7, 8 и где найти boot.ini.
AhColonDSlash. Epk-hASGFL. ElpAdot. EcomAslash. EworkstASGSL. EtionAslash. Eboot-options-windows-7-8-bootini

https://coderoad.ru/8247793/-std-string--std-vector-char

AhsColonDSlash. EcodASGFL. EroASGSL. EdAdot. EruAslash. E8Atwo. E4779Atri. EAslash. EAPerCent. ED0APerCent. E9FAPerCent. EDAone. EAPerCent. E80APerCent. ED0APerCent. EB5APerCent. ED0APerCent. EBABGFL. EAPerCent. ED0APerCent. EBAone. EAPerCent. EDAone. EAPerCent. E80APerCent. ED0APerCent. EB0APerCent. ED0APerCent. EB7APerCent. ED0APerCent. EBABGFL. EAPerCent. ED0APerCent. EBAtwo. EAPerCent. ED0APerCent. EB0APerCent. ED0APerCent. EBDAPerCent. ED0APerCent. EB8APerCent. ED0APerCent. EB5-std-string-APerCent. ED0APerCent. EBAtwo. E-std-vASGFL. Ector-chASGSL. Er

https://coderoad.ru/8247793/-std-string--std-vector-char



Как преобразовать std :: string в const char * или char *?

https://overcoder.net/q/1553/--std-string--const-char--char

AhsColonDSlash. EovASGFL. ErcodASGFL. ErAdot. EnASGFL. EtAslash. EqAslash. EAone. E55Atri. EAslash. EAPerCent. ED0APerCent. EBABGSL. EAPerCent. ED0APerCent. EB0APerCent. ED0APerCent. EBABGSL. E-APerCent. ED0APerCent. EBFAPerCent. EDAone. EAPerCent. E80APerCent. ED0APerCent. EB5APerCent. ED0APerCent. EBABGFL. EAPerCent. ED0APerCent. EBAone. EAPerCent. EDAone. EAPerCent. E80APerCent. ED0APerCent. EB0APerCent. ED0APerCent. EB7APerCent. ED0APerCent. EBABGFL. EAPerCent. ED0APerCent. EBAtwo. EAPerCent. ED0APerCent. EB0APerCent. EDAone. EAPerCent. E8Atwo. EAPerCent. EDAone. EAPerCent. E8C-std-string-APerCent. ED0APerCent. EBAtwo. E-const-chASGSL. Er-APerCent. ED0APerCent. EB8APerCent. ED0APerCent. EBBAPerCent. ED0APerCent. EB8-chASGSL. Er

https://overcoder.net/q/1553/--std-string--const-char--char

Байкал


AhsColonDSlash. ErASGSL. EdulovASGSL. EAdot. ElivASGFL. EjournASGSL. ElAdot. EcomAslash. E4048Aone. E8Aone. EAdot. Ehtml?mASGFL. EdiASGSL. EAamp. EutmAUL. EsourcASGFL. EAequal. EljtimASGFL. Es



Рецензии
На это произведение написаны 2 рецензии, здесь отображается последняя, остальные - в полном списке.