int CountOffsets;
int ctnCheck=99999;      //имхо больше 100тыс. квитков не будет
int Offsets[ctnCheck];
string Emails[ctnCheck];
int CheckMonth[ctnCheck];
int toEmail; //0- не отправлять по почте, 1- отправить  
var NameFile;       //путь для временого файла
var objEmail;       //объект для создания письма
var NamFilKBM;
var TmpFileName;    // буфер для имени временного файла
char strkvt[60];   // одна строка квитка
char Buffer[256];      // буфер для строки выводимой в файл
char Buf[256];

int zap1=0, zap2=0, zap3=0;   //счетчики кол-ва строк в трёх массивах квитков
int zap4=0, zap5=0, zap6=0;
int id1 = 60, id2 = 50;        // шесть массивов для шести квитков
char kvit1[id1][id2];   
char kvit2[id1][id2];
char kvit3[id1][id2];
char kvit4[id1][id2];
char kvit5[id1][id2];
char kvit6[id1][id2];

int zap11=0, zap12=0;
int id3 = 60, id4 = 250;
char list11[id3][id4];  
char list12[id3][id4];
int NewLst = 0;
int fir_kvt = 1;   // смещение для первого ряда квитков

int hf;                // хэндл создаваемого файла №2 (формата 6x1)
unsigned long dwBytes;




InitOffsets(cnt)
{
  toEmail=0;
  CountOffsets=0;
  for (int i=1;i<atoi(cnt);i++)
  {
    Offsets[i]=0; 
    Emails [i]="";
  }
}


CheckToFile()
{
  //путь для временного файла 
  char Dir[128];                              
  GetCurrentDirectory(128,Dir);               
  NameFile=Dir+"\\Kvitok.tmp";

  //удаляем файл,если он уже существует
  if (!access(NameFile,0))
    DeleteFile(NameFile);

  //сохраняем квитки в файл
  var CFile=CreateObject("CurPrnFile");
  CFile.CopyToDevice(NameFile);
}

Send_Checks()
{
  //CheckToFile();       //сохраняем печатную форму в файл

 // int hf;                // хэндл создаваемого файла №2 (формата 6x1)
 // unsigned long dwBytes;

  char Dir[128];                              
  GetCurrentDirectory(128,Dir);               
  NamFilKBM  =Dir+"\\Kvit_KBM.txt";

  // создадим временный файл в текущей директории
  // sprintf(TmpFileName,"test.tmp");
  TmpFileName=Dir+"\\Kvt3_KBM.txt";
  DeleteFile(TmpFileName);

  if ((hf  =    CreateFile(TmpFileName,1073741824   ,1              ,0   ,1         ,128                  ,0   )) == -1)
  {
    AmbaMessageBox("невозможно создать файл","ошибка",1,0);
  }



  //открываем файл с квитками 
  char buf[256];
  int handle = open(NameFile,O_RDONLY | O_TEXT,0);
  if ( handle==-1 )
  {
     sprintf(buf,"Ошибка при открытии файла с квитками\n%s",html);
     AmbaMessageBox(buf,"АМБа. Ошибка при отправке квитков по email",MB_OK|MB_ICONERROR,TypeMSG);
     return -1;
  }  


  int nkv=1, nkv2=1;  // счетчик массивов для квитков (начинаем с первого)        
  int countkv=0;         // счетчик квитков
  char rBuff[2];                             
  //int zap1=0, zap2=0, zap3=0;   //счетчики строк в трёх квитках

  var Month=CreateObject("KMonth");

  CleKvt();
  //CleLst();
  //цикл по ______к_в_и_т_к_а_м___________
  for(int i=1;i<=CountOffsets;i++)
   {
    long l=lseek(handle,Offsets[i-1],SEEK_SET);    //нач позиция квитка
    char strtmp[90000];
    int  r=read(handle,strtmp,Offsets[i]-Offsets[i-1]); //размер квитка
    strtmp=SubStr(strtmp,0,r); 

    ++countkv;
    if ( countkv == 4 )       
     {
                // WriteFile для контроля кол-ва строк в квитках
      //sprintf(Buffer,"%i_|_%i_|_%i_||_%i_|_%i_|_%i\r\n",zap1,zap2,zap3,zap4,zap5,zap6); WriteFile(hf,Buffer,strlen(Buffer),dwBytes,0);

      Mas1();
      Prnt();
      CleKvt();
      countkv = 1;

     }
    //if ( countkv == 7 ) 
    // {
      //sprintf(Buffer,"%i_|_%i_|_%i_||_%i_|_%i_|_%i\r\n",zap1,zap2,zap3,zap4,zap5,zap6); WriteFile(hf,Buffer,strlen(Buffer),dwBytes,0);
    //  Mas2();

    //  if (NewLst)  //если 2-я половина листа но общая длина двух квитков
    //   {           //превышает высоту листа
    //    sprintf(Buffer,"",Buf); WriteFile(hf,Buffer,strlen(Buffer),dwBytes,0);
    //    Prnt();
    //    countkv = 4;
    //    NewLst = 0;
    //   }
    //  else
    //   {
    //    Prnt2();
    //    CleKvt();
    //    countkv = 1;
    //   }
    // }

    int ll=1;
    double indstr=1;
    //  ниже WriteFile для контроля начала и длины тела квитка
    //sprintf(Buffer,"2:%d__%d\r\n",l,r); WriteFile(hf,Buffer,strlen(Buffer),dwBytes,0); // пишем в файл

    int zap=1;
    // цикл по   _______к_в_и_т_к_у__________
    for(int k=1; k<=r; k++)     
     {
        // если конец строки то идём на формирование строки квитка
      if (strtmp[k-1]=='\n')
        {            
         CleBuff();
         RTrim(strkvt); // FreeSpaceString(strkvt,3,"");
         //sprintf(Buffer,"%d__%d__%s\r\n",countkv,zap,strkvt); WriteFile(hf,Buffer,strlen(Buffer),dwBytes,0);
                  
         if ((countkv==1) && (zap<=id1))
          {
           for(int kv=1; kv <= 44; kv++)
            {
             if((strlen(strkvt) != 1) && (kv <= strlen(strkvt)) )  kvit1[zap][kv-1]=strkvt[kv-1];          
              
            }           
           zap1++;
          }

         if ((countkv==2) && (zap<=id1))
          {
           for(int kv=1; kv <= 44; kv++)
            {
             if(kv <= strlen(strkvt))  kvit2[zap][kv-1]=strkvt[kv-1];        
            }          
           zap2++;          
          }

         if ((countkv==3) && (zap<=id1))
          {
           for(int kv=1; kv <= 44; kv++)
            {
             if(kv <= strlen(strkvt))  kvit3[zap][kv-1]=strkvt[kv-1];        
            }          
           zap3++;          
          }


         if ((countkv==4) && (zap<=id1))
          {
           for(int kv=1; kv <= 44; kv++)
            {
             if(kv <= strlen(strkvt))  kvit4[zap][kv-1]=strkvt[kv-1];        
            }          
           zap4++;          
          }
         if ((countkv==5) && (zap<=id1))
          {
           for(int kv=1; kv <= 44; kv++)
            {
             if(kv <= strlen(strkvt))  kvit5[zap][kv-1]=strkvt[kv-1];        
            }          
           zap5++;          
          }
         if ((countkv==6) && (zap<=id1))
          {
           for(int kv=1; kv <= 44; kv++)
            {
             if(kv <= strlen(strkvt))  kvit6[zap][kv-1]=strkvt[kv-1];        
            }          
           zap6++;          
          }

         zap++;
         PreStr();
         ll=1;
        }

        // иначе продолжаем наполнять строку strkvt
      else
        {
         if( strtmp[k-1] == '')  ll--;
         if( strtmp[k-1] != '')  strkvt[ll-1] = strtmp[k-1];
         ll++;
        }

     }    
      
     //  string Mail=Emails[i];    
     //  Month.SetMonth(atoi(CheckMonth[i]));
     //  string namemonth = Month.NameMonth();
     //  FreeSpaceString(Mail,3,"");
       //отправляем квиток
     //  CheckToEmail(Mail,strtmp,namemonth);
   }

   //sprintf(Buffer,"%i_|_%i_|_%i_||_%i_|_%i_|_%i\r\n",zap1,zap2,zap3,zap4,zap5,zap6); WriteFile(hf,Buffer,strlen(Buffer),dwBytes,0);
  // if ( countkv < 4 ) 
  //  {
  //   sprintf(Buffer,"\r\n",Buf); WriteFile(hf,Buffer,strlen(Buffer),dwBytes,0);
  //   Mas1();
  //   Prnt();
  //  }
  // else
  //  {
  //   if ( countkv < 7 ) 
  //    {
  //     Mas2();
  //     Prnt2();
  //    }
  //  }

   if ( countkv )
    {
     Mas1();
     Prnt();
     sprintf(Buffer,"\r\n",Buf); WriteFile(hf,Buffer,strlen(Buffer),dwBytes,0); 
     sprintf(Buffer,"",Buf); WriteFile(hf,Buffer,strlen(Buffer),dwBytes,0);
    }

  CloseHandle(hf); // записали и закрыли файл №2 (формата 6x1)
  close(handle);   //чистим за собой
  //DeleteFile(NameFile);     //закомментир 20091125



}  



PreStr()
{

  for ( int ind=0; ind<60; ind++ )
   {
     strkvt[ind] = ' ';  
   }

}

CleBuff()
{
 for ( int ind=0; ind<132; ind++ ) Buffer[ind]= ' ';
 for ( int ind=0; ind<132; ind++ ) Buf[ind]= ' ';
}

Mas1()
{
 CleLst();

 zap11=zap1;
 if (zap11 < zap2) zap11=zap2;   //  выбор максимального числа строк
 if (zap11 < zap3) zap11=zap3;   //  в одном из трёх квитков

 zap1=0, zap2=0, zap3=0;

 for ( int st=1; st<=zap11; st++ ) 
  {     
   //st-ю строку перв квитка в list11[st]
   for ( int ko=0; ko<=43; ko++ ) list11[st][ko]=kvit1[st][ko];
          
   for ( int ko = 44; ko<=47; ko++ )  list11[st][ko]=' '; //между 1 и 2 квитками

   //st-ю строку второго квитка в list11[st]
   for ( int ko=46; ko<=91; ko++ )  list11[st][ko]=kvit2[st+fir_kvt][ko-46]; 

   for ( int ko = 90; ko<=93; ko++ )  list11[st][ko]=' '; //между 2 и 3 квитками

   //st-ю строку третьего квитка в list11[st]
   for ( int ko=92; ko<=135; ko++ )  list11[st][ko]=kvit3[st+fir_kvt][ko-92];
    
  }
 fir_kvt=0;
}

Mas2()
{
 CleLst();

 zap12=zap4;
 if (zap12 < zap5) zap12=zap5;   //  выбор максимального числа строк
 if (zap12 < zap6) zap12=zap6;   //  в одном из трёх квитков

 zap4=0, zap5=0, zap6=0;

 if ((zap11+zap12) > 66) NewLst=1;   //проверка на длину листа

 for ( int st=1; st<=zap12; st++ ) 
  {     
   //st-ю строку перв квитка в list11[st]
   for ( int ko=0; ko<=38; ko++ ) list11[st][ko]=kvit4[st][ko];
          
   for ( int ko = 39; ko<=43; ko++ )  list11[st][ko]=' '; //между 1 и 2 квитками

   //st-ю строку второго квитка в list11[st]
   for ( int ko=42; ko<=83; ko++ )  list11[st][ko]=kvit5[st][ko-42]; 

   for ( int ko = 81; ko<=86; ko++ )  list11[st][ko]=' '; //между 2 и 3 квитками

   //st-ю строку третьего квитка в list11[st]
   for ( int ko=84; ko<=126; ko++ )  list11[st][ko]=kvit6[st][ko-84];
    
  }
}

Prnt2()
{  
 for ( int st=1; st<=zap12; st++ )
  {
   CleBuff();
   for ( int ko=0; ko<=136; ko++ )   Buf[ko]=list11[st][ko];
   sprintf(Buffer,"%s\r\n",Buf); WriteFile(hf,Buffer,strlen(Buffer),dwBytes,0);    
  }
 sprintf(Buffer,"\r\n",Buf); WriteFile(hf,Buffer,strlen(Buffer),dwBytes,0); 
 sprintf(Buffer,"",Buf); WriteFile(hf,Buffer,strlen(Buffer),dwBytes,0);
}

                               
Prnt()
{  
 for ( int st=1; st<=zap11; st++ )
  {
   CleBuff();
   for ( int ko=0; ko<=136; ko++ )   Buf[ko]=list11[st][ko];
   sprintf(Buffer,"%s\r\n",Buf); WriteFile(hf,Buffer,strlen(Buffer),dwBytes,0);    
  }

 sprintf(Buffer,"\r\n",Buf); WriteFile(hf,Buffer,strlen(Buffer),dwBytes,0); 
 sprintf(Buffer,"",Buf); WriteFile(hf,Buffer,strlen(Buffer),dwBytes,0);

}

CleLst()
{
 for ( int ls=1; ls<=29; ls++ )
  {
   for ( int lss=0; lss<=100; lss++ )
    {
     list11[ls][lss] = '|';
    }
  }
}

CleKvt()
{
 for ( int ls=1; ls<=59; ls++ )
  {
   for ( int lss=0; lss<=49; lss++ )
    {
     kvit1[ls][lss] = ' ';
     kvit2[ls][lss] = ' ';
     kvit3[ls][lss] = ' ';
     kvit4[ls][lss] = ' ';
     kvit5[ls][lss] = ' ';
     kvit6[ls][lss] = ' ';
    }
  }
}