unit step2a1;

interface
  procedure  LIBRARYENTRY( command: WORD  ); Pascal;
  function   LIBRARYNAME : PChar;         Pascal;
  function   LIBRARYID   : Cardinal;      Pascal;
implementation
uses
  Windows,
  SysUtils,
  LDefin2D,
  ksConstTLB,
  ksAuto,
{$IFDEF __LIGHT_VERSION__}
  klTLB;
{$ELSE}
  ksTLB;
{$ENDIF}

var
  iKompasObject: KompasObject;

//------------------------------------------------------------------------------
//  
//---
procedure StrIndefiniteArray;
var
  iDynamicArray: ksDynamicArray;
  iChar255: ksChar255;

  //  
  procedure ShowArray;
  var
    i, count: Integer;

  begin
    count := iDynamicArray.ksGetArrayCount;

    iKompasObject.ksMessage( PChar('count = ' + IntToStr(count)) );

    for i := 0 to count - 1 do
    begin
      iDynamicArray.ksGetArrayItem( i, iChar255 );
      iKompasObject.ksMessage( iChar255.str );
    end;
  end;

begin
  //  
  iDynamicArray := ksDynamicArray(iKompasObject.GetDynamicArray( CHAR_STR_ARR ));
  iChar255 := ksChar255(iKompasObject.GetParamStruct( ko_Char255 ));

  if (iDynamicArray <> nil) and (iChar255 <> nil) then
  begin
    iKompasObject.ksMessage(' ');

    iChar255.str := '12345';
    iDynamicArray.ksAddArrayItem( -1, iChar255 );

    iChar255.str := '67890';
    iDynamicArray.ksAddArrayItem( -1, iChar255 );

    iChar255.str := 'qwerty';
    iDynamicArray.ksAddArrayItem( -1, iChar255 );

    iKompasObject.ksMessageBoxResult;

    //  
    ShowArray;

    iKompasObject.ksMessage(' 1- ');

    iDynamicArray.ksExcludeArrayItem( 1 );

    //  
    ShowArray;

    //  
    iDynamicArray.ksDeleteArray;
  end;
end;

//------------------------------------------------------------------------------
//  
//---
procedure PointIndefiniteArray;
var
  iDynamicArray: ksDynamicArray;
  iMathPointParam: ksMathPointParam;
  buf: string;

  //  
  procedure ShowArray;
  var
    i, count: Integer;

  begin
    count := iDynamicArray.ksGetArrayCount;

    iKompasObject.ksMessage( PChar('count = ' + IntToStr(count)) );

    for i := 0 to count - 1 do
    begin
      iDynamicArray.ksGetArrayItem( i, iMathPointParam );
      buf := Format( '%d:  x = %5.1f  y = %5.1f', [i, iMathPointParam.x, iMathPointParam.y] );
      iKompasObject.ksMessage( buf );
    end;
  end;

  //     
  procedure AddPointItem( x, y: Double );
  begin
    iMathPointParam.x := x;
    iMathPointParam.y := y;
    iDynamicArray.ksAddArrayItem( -1, iMathPointParam );
  end;

  //    
  procedure SetPointItem( i: Integer; x, y: Double );
  begin
    iMathPointParam.x := x;
    iMathPointParam.y := y;
    iDynamicArray.ksSetArrayItem( i, iMathPointParam );
  end;

begin
  //  
  iDynamicArray := ksDynamicArray(iKompasObject.GetDynamicArray( POINT_ARR ));
  iMathPointParam := ksMathPointParam(iKompasObject.GetParamStruct( ko_MathPointParam ));

  if (iDynamicArray <> nil) and (iMathPointParam <> nil) then
  begin
    iKompasObject.ksMessage(' ');

    AddPointItem( 10, 10 );
    AddPointItem( 20, 20 );
    AddPointItem( 30, 30 );

    iKompasObject.ksMessageBoxResult;

    //  
    ShowArray;

    iKompasObject.ksMessage( '  1- ' );
    SetPointItem( 1, 50, 50 );

    iKompasObject.ksMessage( '  0- ' );
    SetPointItem( 0, 50, 50 );

    //  
    ShowArray;

    //  
    iDynamicArray.ksDeleteArray;
  end;
end;

//------------------------------------------------------------------------------
//    ""
//---
procedure TextIndefiniteArray;
var
  iDynamicArrayLine: ksDynamicArray;
  iDynamicArrayItem: ksDynamicArray;
  iTextItemParam: ksTextItemParam;
  iTextLineParam: ksTextLineParam;
  iTextItemFont: ksTextItemFont;
  buf: string;

  //   
  procedure ShowTextArray;
  var
    i, count: Integer;

    //   
    procedure ShowItemtArray( iDynamicArray: ksDynamicArray );
    var
      i, count: Integer;

    begin
      if iDynamicArray <> nil then
      begin
        count := iDynamicArray.ksGetArrayCount;

        iKompasObject.ksMessage( PChar('  = ' + IntToStr(count)) );

        //     
        for  i := 0 to count - 1 do
        begin
          iDynamicArray.ksGetArrayItem( i, iTextItemParam );
          iTextItemFont := ksTextItemFont( iTextItemParam.GetItemFont );
          buf := Format( '%d:  h = %5.1f  s = %s ', [i, iTextItemFont.height, iTextItemParam.s] );
          iKompasObject.ksMessage( buf );
        end;
      end;
    end;

  begin
    //  
    count := iDynamicArrayLine.ksGetArrayCount;

    iKompasObject.ksMessage( PChar('  = ' + IntToStr(count)) );

    //    
    for  i := 0 to count - 1 do
    begin
      iDynamicArrayLine.ksGetArrayItem( i, iTextLineParam );
      buf := Format( '%d:  style = %d', [i, iTextLineParam.style] );
      iKompasObject.ksMessage( buf );
      ShowItemtArray( ksDynamicArray(iTextLineParam.GetTextItemArr) );
    end;
  end;

  //      ,  
  procedure AddOrSetTextItem( h, ksu: Double; color: DWORD; bitvector: UINT; s: string; i: Integer );
  begin
    iTextItemFont := ksTextItemFont( iTextItemParam.GetItemFont );
    iTextItemFont.height := h;    //  
    iTextItemFont.ksu := ksu;     //  
    iTextItemFont.color := color; // 
    iTextItemFont.bitVector := bitvector; //   (, , ,   (, ,   ))
    iTextItemParam.SetItemFont( iTextItemFont );
    iTextItemParam.s := s;
    // 
    if i = -1 then
       iDynamicArrayItem.ksAddArrayItem( -1, iTextItemParam )
    else
       iDynamicArrayItem.ksSetArrayItem( i, iTextItemParam );
  end;

begin
  //    
  iDynamicArrayLine := ksDynamicArray(iKompasObject.GetDynamicArray( TEXT_LINE_ARR ));
  //     
  iDynamicArrayItem := ksDynamicArray(iKompasObject.GetDynamicArray( TEXT_ITEM_ARR ));

  iTextLineParam := ksTextLineParam(iKompasObject.GetParamStruct( ko_TextLineParam ));
  iTextItemParam := ksTextItemParam(iKompasObject.GetParamStruct( ko_TextItemParam ));

  if (iDynamicArrayLine <> nil) and (iDynamicArrayItem <> nil) and
     (iTextLineParam <> nil) and (iTextItemParam <> nil) then
  begin
    iKompasObject.ksMessage( '   ' );
    //  1-    
    AddOrSetTextItem( 10{h}, 1{ksu}, 1000{color}, 1{bitvector}, '1  1 '{s}, -1 );
    //  2-    
    AddOrSetTextItem( 20{h}, 2{ksu}, 2000{color}, 2{bitvector}, '2  1 '{s}, -1 );

    iTextLineParam.style := 1;
    iTextLineParam.SetTextItemArr( iDynamicArrayItem );
    // 1-             
    iDynamicArrayLine.ksAddArrayItem( -1, iTextLineParam );
    iKompasObject.ksMessageBoxResult;
    //   ,       
    iDynamicArrayItem.ksClearArray;

    iKompasObject.ksMessage( '   ' );
    //  1-    
    AddOrSetTextItem( 30{h}, 3{ksu}, 3000{color}, 3{bitvector}, '1  2 '{s}, -1 );
    //  2-    
    AddOrSetTextItem( 40{h}, 4{ksu}, 4000{color}, 4{bitvector}, '2  2 '{s}, -1 );

    iTextLineParam.style := 2;
    // 2-             
    iDynamicArrayLine.ksAddArrayItem( -1, iTextLineParam );
    iKompasObject.ksMessageBoxResult;

    //    
    ShowTextArray;

    iKompasObject.ksMessage( '     ' );
    //   
    iDynamicArrayLine.ksGetArrayItem( 0, iTextLineParam );
    //  
    AddOrSetTextItem( 50{h}, 1{ksu}, 1000{color}, 1{bitvector}, '() 2  1 '{s}, 1 );
    iTextLineParam.style := 3;
    //  
    iDynamicArrayLine.ksSetArrayItem( 0, iTextLineParam );

    iKompasObject.ksMessage('     ');
    //   
    iDynamicArrayLine.ksGetArrayItem( 1, iTextLineParam );
    //  
    AddOrSetTextItem( 60{h}, 1{ksu}, 1000{color}, 1{bitvector}, '() 1  2 '{s}, 0 );
    iTextLineParam.style := 4;
    //  
    iDynamicArrayLine.ksSetArrayItem( 1, iTextLineParam );
    //    
    ShowTextArray;

    //     
    iDynamicArrayItem.ksDeleteArray;
    //    
    iDynamicArrayLine.ksDeleteArray;
  end;
end;

//------------------------------------------------------------------------------
//    
//---
procedure AttrIndefiniteArray;
var
  iDynamicArrayAttrColumn1: ksDynamicArray;
  iDynamicArrayAttrColumn2: ksDynamicArray;
  iColumnInfoParam1,
  iColumnInfoParam2,
  iColumnInfoParam3,
  iColumnInfoParamStruct: ksColumnInfoParam;
  iDynamicArrayCharStr: ksDynamicArray;
  iChar255: ksChar255;
  buf: string;

  //   
  procedure ShowColumns( iDynamicArray: ksDynamicArray; r: Boolean );
  var
    iColumnInfoParam: ksColumnInfoParam;
    iDynamicArrayColumn: ksDynamicArray;
    iDynamicArrayFieldEnum: ksDynamicArray;
    iChar255: ksChar255;
    s: string;
    i, j, f: Integer;

  begin
    if iDynamicArray <> nil then
    begin
      iColumnInfoParam := ksColumnInfoParam(iKompasObject.GetParamStruct( ko_ColumnInfoParam ));
      iChar255 := ksChar255(iKompasObject.GetParamStruct( ko_Char255 ));

      if (iColumnInfoParam <> nil) and (iChar255 <> nil) then
      begin
        iDynamicArrayColumn := ksDynamicArray(iColumnInfoParam.GetColumns);
        iDynamicArrayFieldEnum := ksDynamicArray(iColumnInfoParam.GetFieldEnum);

        if (iDynamicArrayColumn <> nil) and (iDynamicArrayFieldEnum <> nil) then
        begin
          if r then
            s := ''
          else
            s := '';

          for i := 0 to iDynamicArray.ksGetArrayCount - 1 do
          begin
            if iDynamicArray.ksGetArrayItem(i, iColumnInfoParam) = 1 then
            begin
              //     
              if iColumnInfoParam.flagEnum then
                f := 1
              else
                f := 0;

              buf := Format( '%s %d  header = %s  type = %d  def = %s  flagEnum = %d',
                             [s, i, iColumnInfoParam.header, iColumnInfoParam.type_, iColumnInfoParam.def, f] );

              iKompasObject.ksMessage( buf );

              if iColumnInfoParam.type_ = RECORD_ATTR_TYPE then // 
                ShowColumns( ksDynamicArray(iColumnInfoParam.GetColumns), true )
              else
              begin
                if iColumnInfoParam.flagEnum then //   
                begin
                  iDynamicArrayFieldEnum := ksDynamicArray(iColumnInfoParam.GetFieldEnum);
                  iKompasObject.ksMessage( ' ' );

                  for j := 0 to iDynamicArrayFieldEnum.ksGetArrayCount - 1 do
                  begin
                    if( iDynamicArrayFieldEnum.ksGetArrayItem(j, iChar255) = 1 ) then
                      iKompasObject.ksMessage( iChar255.str )
                    else
                      iKompasObject.ksMessageBoxResult();
                  end;
                end;
              end;
            end
            else
              iKompasObject.ksMessageBoxResult;
          end;
        end;
      end;
    end;
  end;

begin
//    3 
//     int    (100, 200, 300)
//   -   
// struct
//   Double    123456789
//   long      1000000
//   Char      10
//       "text"

  //    
  iDynamicArrayAttrColumn1 := ksDynamicArray(iKompasObject.GetDynamicArray( ATTR_COLUMN_ARR ));
  iDynamicArrayAttrColumn2 := ksDynamicArray(iKompasObject.GetDynamicArray( ATTR_COLUMN_ARR ));
  iColumnInfoParam1 := ksColumnInfoParam(iKompasObject.GetParamStruct( ko_ColumnInfoParam ));
  iColumnInfoParam2 := ksColumnInfoParam(iKompasObject.GetParamStruct( ko_ColumnInfoParam ));
  iColumnInfoParam3 := ksColumnInfoParam(iKompasObject.GetParamStruct( ko_ColumnInfoParam ));
  iColumnInfoParamStruct := ksColumnInfoParam(iKompasObject.GetParamStruct( ko_ColumnInfoParam ));
  iDynamicArrayCharStr := ksDynamicArray(iKompasObject.GetDynamicArray( CHAR_STR_ARR ));
  iChar255 := ksChar255(iKompasObject.GetParamStruct( ko_Char255 ));

  if (iDynamicArrayAttrColumn1 <> nil) and (iDynamicArrayAttrColumn2 <> nil) and
     (iColumnInfoParam1 <> nil) and (iColumnInfoParam2 <> nil) and (iColumnInfoParam3 <> nil) and
     (iColumnInfoParamStruct <> nil) and ( iDynamicArrayCharStr <> nil) and (iChar255 <> nil) then
  begin
    iColumnInfoParam1.Init();

    iKompasObject.ksMessage( '  ' );

    iColumnInfoParam1.header := 'int';           // o- 
    iColumnInfoParam1.type_ := INT_ATTR_TYPE;    //     - .
    iColumnInfoParam1.key := 0;                  //  ,        
    iColumnInfoParam1.def := '100';              //   
    iColumnInfoParam1.flagEnum := true;          //   ,          
    iColumnInfoParam1.SetFieldEnum( iDynamicArrayCharStr ); //     ()
    iColumnInfoParam1.SetColumns( nil );         //        

    iChar255.str := '100';
    iDynamicArrayCharStr.ksAddArrayItem( -1, iChar255 );

    iChar255.str := '200';
    iDynamicArrayCharStr.ksAddArrayItem( -1, iChar255 );

    iChar255.str := '300';
    iDynamicArrayCharStr.ksAddArrayItem( -1, iChar255 );

    iDynamicArrayAttrColumn1.ksAddArrayItem( -1, iColumnInfoParam1 );

    iKompasObject.ksMessageBoxResult;

    iKompasObject.ksMessage( '  ' );
    iColumnInfoParam2.header := 'struct';        // o- 
    iColumnInfoParam2.type_ := RECORD_ATTR_TYPE; //     - .
    iColumnInfoParam2.key := 0;                  //  ,        
    iColumnInfoParam2.def := '';                 //   
    iColumnInfoParam2.flagEnum := false;         //   ,          
    iColumnInfoParam2.SetFieldEnum( nil );       //     ()
    iColumnInfoParam2.SetColumns( iDynamicArrayAttrColumn2 );  //        

    iKompasObject.ksMessageBoxResult;

    iKompasObject.ksMessage( '    ' );
    iKompasObject.ksMessage( '  ' );

    iColumnInfoParamStruct.header := 'double';   // o- 
    iColumnInfoParamStruct.type_ := DOUBLE_ATTR_TYPE; //     - .
    iColumnInfoParamStruct.key := 0;             //  ,        
    iColumnInfoParamStruct.def := '123456789';   //   
    iColumnInfoParamStruct.flagEnum := false;    //   ,          
    iColumnInfoParamStruct.SetFieldEnum( nil );  //     ()
    iColumnInfoParamStruct.SetColumns( nil );    //        

    iDynamicArrayAttrColumn2.ksAddArrayItem( -1, iColumnInfoParamStruct );

    iKompasObject.ksMessageBoxResult;

    iKompasObject.ksMessage( '  ' );
    iColumnInfoParamStruct.header := 'long';     // o- 
    iColumnInfoParamStruct.type_ := LINT_ATTR_TYPE; //     - .
    iColumnInfoParamStruct.key := 0;             //  ,        
    iColumnInfoParamStruct.def := '1000000';     //   
    iColumnInfoParamStruct.flagEnum := false;    //   ,          
    iColumnInfoParamStruct.SetFieldEnum( nil );  //     ()
    iColumnInfoParamStruct.SetColumns( nil );    //        

    iDynamicArrayAttrColumn2.ksAddArrayItem( -1, iColumnInfoParamStruct );

    iKompasObject.ksMessageBoxResult;

    iKompasObject.ksMessage( '  ' );
    iColumnInfoParamStruct.header := 'char';      // o- 
    iColumnInfoParamStruct.type_ := CHAR_ATTR_TYPE; //     - .
    iColumnInfoParamStruct.key := 0;              //  ,        
    iColumnInfoParamStruct.def := '10';           //   
    iColumnInfoParamStruct.flagEnum := false;     //   ,          
    iColumnInfoParamStruct.SetFieldEnum( nil );   //     ()
    iColumnInfoParamStruct.SetColumns( nil );     //        

    iDynamicArrayAttrColumn2.ksAddArrayItem( -1, iColumnInfoParamStruct );

    iDynamicArrayAttrColumn1.ksAddArrayItem( -1, iColumnInfoParam2 );

    iKompasObject.ksMessageBoxResult;

    iKompasObject.ksMessage( ' ' );
    iColumnInfoParam3.header := 'string';        // o- 
    iColumnInfoParam3.type_ := STRING_ATTR_TYPE; //     - .
    iColumnInfoParam3.key := 0;                  //  ,        
    iColumnInfoParam3.def := 'text';             //   
    iColumnInfoParam3.flagEnum := false;         //   ,          
    iColumnInfoParamStruct.SetFieldEnum( nil );  //     ()
    iColumnInfoParamStruct.SetColumns( nil );    //        

    iDynamicArrayAttrColumn1.ksAddArrayItem( -1, iColumnInfoParam3 );

    iKompasObject.ksMessageBoxResult;

    iKompasObject.ksMessage( '  ' );

    ShowColumns( iDynamicArrayAttrColumn1, false );

    iKompasObject.ksMessageBoxResult;

    iKompasObject.ksMessage( '   2->1 1->3 3->2' );
    iDynamicArrayAttrColumn1.ksSetArrayItem( 0, iColumnInfoParam2 );
    iDynamicArrayAttrColumn1.ksSetArrayItem( 2, iColumnInfoParam1 );
    iDynamicArrayAttrColumn1.ksSetArrayItem( 1, iColumnInfoParam3 );

    iKompasObject.ksMessage( '  ' );

    ShowColumns( iDynamicArrayAttrColumn1, false );

    //  
    iDynamicArrayAttrColumn1.ksDeleteArray();
    iDynamicArrayAttrColumn2.ksDeleteArray();
    iDynamicArrayCharStr.ksDeleteArray();
  end;
end;

//------------------------------------------------------------------------------
//  
//---
procedure PolyLineArray;
var
  iDynamicArrayPoint: ksDynamicArray;
  iDynamicArrayPolyline: ksDynamicArray;
  iMathPointParam: ksMathPointParam;
  buf: string;

  //   
  procedure ShowArrayPoint();
  var
    i, count: Integer;

  begin
    count := iDynamicArrayPoint.ksGetArrayCount;

    iKompasObject.ksMessage( PChar('  = ' + IntToStr(count)) );

    for i := 0 to count - 1 do
    begin
      iDynamicArrayPoint.ksGetArrayItem( i, iMathPointParam );
      buf := Format( '%d:  x = %5.1f  y = %5.1f', [i, iMathPointParam.x, iMathPointParam.y] );
      iKompasObject.ksMessage( buf );
    end;
  end;

  //   
  procedure ShowArrayPolyline;
  var
    i, count: Integer;

  begin
    count := iDynamicArrayPolyline.ksGetArrayCount;

    iKompasObject.ksMessage( PChar('  = ' + IntToStr(count)) );

    for i := 0 to count - 1 do
    begin
      iDynamicArrayPolyline.ksGetArrayItem( i, iDynamicArrayPoint );
      // i-   
      ShowArrayPoint;
    end;
  end;

  //     
  procedure AddOrSetArrayItem( x1, y1, x2, y2, x3, y3: Double; i: Integer );
  begin
    iDynamicArrayPoint.ksClearArray;
    //   
    iMathPointParam.x := x1;
    iMathPointParam.y := y1;
    iDynamicArrayPoint.ksAddArrayItem( -1, iMathPointParam );

    iMathPointParam.x := x2;
    iMathPointParam.y := y2;
    iDynamicArrayPoint.ksAddArrayItem( -1, iMathPointParam );

    iMathPointParam.x := x3;
    iMathPointParam.y := y3;
    iDynamicArrayPoint.ksAddArrayItem( -1, iMathPointParam );

    //      
    if i = -1 then
       iDynamicArrayPolyline.ksAddArrayItem( -1, iDynamicArrayPoint )
    else
       iDynamicArrayPolyline.ksSetArrayItem( i, iDynamicArrayPoint );
  end;

begin
  //   
  iDynamicArrayPoint := ksDynamicArray(iKompasObject.GetDynamicArray( POINT_ARR ));
  //   
  iDynamicArrayPolyline := ksDynamicArray(iKompasObject.GetDynamicArray( POLYLINE_ARR ));

  iMathPointParam := ksMathPointParam(iKompasObject.GetParamStruct( ko_MathPointParam ));

  if (iDynamicArrayPoint <> nil) and (iDynamicArrayPolyline <> nil) and (iMathPointParam <> nil) then
  begin
    iKompasObject.ksMessage('  ');
    AddOrSetArrayItem( 10, 10, 100, 100, 1000, 1000, -1 );
    AddOrSetArrayItem( 20, 20, 200, 200, 2000, 2000, -1 );
    AddOrSetArrayItem( 30, 30, 300, 300, 3000, 3000, -1 );
    ShowArrayPolyline;

    iKompasObject.ksMessage('    2- ');
    AddOrSetArrayItem( 50, 50, 500, 500, 5000, 5000, 1 );
    ShowArrayPolyline;

    //  
    iDynamicArrayPoint.ksDeleteArray;
    iDynamicArrayPolyline.ksDeleteArray;
  end;
end;

//------------------------------------------------------------------------------
//   
//---
procedure RectArray;
var
  iDynamicArray: ksDynamicArray;
  iMathPointParam: ksMathPointParam;
  iRectParam: ksRectParam;
  buf: string;

  //  
  procedure ShowArray;
  var
    i, count: Integer;

  begin
    count := iDynamicArray.ksGetArrayCount;

    iKompasObject.ksMessage( PChar('  = ' + IntToStr(count)) );

    for i := 0 to count - 1 do
    begin
      iDynamicArray.ksGetArrayItem( i, iRectParam );
      iMathPointParam := ksMathPointParam(iRectParam.GetpTop);
      buf := Format( '%d:  xTop = %5.1f  yTop = %5.1f',
                    [i, iMathPointParam.x, iMathPointParam.y] );
      iKompasObject.ksMessage( buf );

      iMathPointParam := ksMathPointParam(iRectParam.GetpBot);
      buf := Format( '%d:  xBot = %5.1f  yBot = %5.1f',
                     [i, iMathPointParam.x, iMathPointParam.y] );
      iKompasObject.ksMessage( buf );
    end;
  end;

  //     
  procedure AddOrSetArrayItem( xTop, yTop, xBot, yBot: Double; i: Integer );
  begin
    iMathPointParam.x := xTop;
    iMathPointParam.y := yTop;
    iRectParam.SetpTop( iMathPointParam );

    iMathPointParam.x := xBot;
    iMathPointParam.y := yBot;
    iRectParam.SetpBot( iMathPointParam );

    if i = -1 then
      iDynamicArray.ksAddArrayItem( -1, iRectParam )
    else
      iDynamicArray.ksSetArrayItem( i, iRectParam );
  end;

begin
  //  
  iDynamicArray := ksDynamicArray(iKompasObject.GetDynamicArray( RECT_ARR ));

  iRectParam := ksRectParam(iKompasObject.GetParamStruct( ko_RectParam ));
  iMathPointParam := ksMathPointParam(iKompasObject.GetParamStruct( ko_MathPointParam ));

  if (iDynamicArray <> nil) and (iRectParam <> nil) and (iMathPointParam <> nil) then
  begin
    iKompasObject.ksMessage(' ');
    AddOrSetArrayItem( 10,  10, 20,  -10, -1 );
    AddOrSetArrayItem( 20,  50, 50,   10, -1 );
    AddOrSetArrayItem( 20, 150, 50,  110, -1 );

    iKompasObject.ksMessageBoxResult;
    //  
    ShowArray;

    //  
    AddOrSetArrayItem( -20, -50, 20, -10,  1 );
    AddOrSetArrayItem(   0,   0, 10, -20,  0 );
    AddOrSetArrayItem(   5,   5, 25,   0, -1 );

    //  
    ShowArray;

    //  
    iDynamicArray.ksDeleteArray;
  end;
end;


//------------------------------------------------------------------------------
// LibraryName
//---
function LIBRARYNAME: PChar; pascal;
begin
  Result := 'e  ';
end;

//------------------------------------------------------------------------------
// LibraryId
//---
function LIBRARYID: UINT; pascal;
begin
  Result := 100;
end;

//------------------------------------------------------------------------------
// LibraryEntry
//---
procedure LIBRARYENTRY(command: WORD); pascal;
begin
  iKompasObject := KompasObject(CreateKompasObject);

  if iKompasObject <> nil then
  begin
    case command of
      1: StrIndefiniteArray;   //  
      2: PointIndefiniteArray; //  
      3: TextIndefiniteArray;  //    ""
      4: AttrIndefiniteArray;  //    
      5: PolyLineArray;        //  
      6: RectArray;            //   
    end;

    iKompasObject.ksMessageBoxResult;

    iKompasObject := nil;
  end;
end;

end.
