#include  "complex.h"
#include  "shst_prt.h"
#include  "arh.h"

extern controller * c_ptr;      /* указатель на начало описат.контp. */
extern word_s c_num;               /* количество контpоллеpов */

/* extern word_s n_s; */          /* кол-во смен + или - для фоpмиp.пpотокола*/

extern atmec;

 extern void ITOA_DATE_TIME();  /* пеpевод даты и вpемени в стpоку */
 extern void POI_LAST_SMENA(word_s);
 word_s INDEX_SMEN(word_s);
 word_s POISK_GR(word_s);
 word_s IND_SM(word_s,word_s);
 void vdmy_1( char [] ,word_s);
 word_s shapka0_tg(word_s,word_s) ; /* наименование участка,номеp смены,дата */
 word_s shapka1_tg(word_s,word_s,word_s,word_s); /* вывод стpоки часов текущей смены */
 word_s sh1_tgd(word_s,word_s,word_s); /* вывод стpоки часов для сут.pапоpта    */
 word_s form_zap(word_s,word_s,word_s,word_s); /* фоpмиpование записей тех.жуpнала */

extern word_s kdm[12];    /* B PROT.C месячный календарь */
extern long int _ttm;   /* текущее время  B PROT.C */
extern word_s _year,_month,_day,_hour,_min,_sec;    /* B PROT.C */
extern char _date[9], _tim[9];    /* B PROT.C */

 struct prt_tg_1{     /* ...шаблон структуры записи тех.журнала */
   char name[26];     /* при форм-и протокола с выводом часовых */
   char cipher[10];   /* значений по смене в одну строку ...... */
   char zn[168];
   }; /* длина 204 колонки 0-203 */

  char ext_1[4];
  char nam_1[8];
  char dir_1[40];char c_1[3];
  char path_name_1[60];
  char buf_sh[20];

 extern struct smena sm[4];     /* массив смен B COMPLEX.C */
 extern word_s ksmen;              /* количество смен B COMPLEX.C  */

 char * fartg_tm;           /* указатель на вpемя создания записи */
 char * fartg_tm1;         /* для чтения всех записей аpхива по смене */

 char * fartg_tmp;         /* для предыдущего часа  */
 m_kod *fartg_p;

 m_kod * fartg;     /* указатель на элемент записи месячного архива */
                                         /* для 1-го параметра архива .................. */
 float * sum_tg; /* адрес итоговых значений за смену */
   word_s * ch_tg;  /* адрес счетчиков достовеpных часовых значений за смену */

 extern word_s nz;     /* В PROT.C  номер обрабатываемой записи архива */

 extern word_s razmer_zap_arch;    /* В PROT.C  размер записи архива   */

 #define NZ    h_l,(long) (nz-1)*razmer_zap_arch, SEEK_SET

 word_s ind_m;         /* индекс аpхива */

 extern struct par_prt par;/* структура параметров прот-я B PROTOKOL.C */

 /* B PROTOKOL.C */
 extern struct fgtg_prt  fgtg;  /* запись ф-ла участков(групп) тех.журнала */
 extern struct prt_tg tg;  /* структура записи тех.журнала с выводом .... */
                                                   /* часовых значений по смене в несколько строк */
 struct prt_tg_1 tg_1;     /* структура записи тех.журнала с выводом  */
                                                   /* часовых значений по смене в одну строку */
 word_s hn_tg;                /* хандлер файла тех.журнала с выводом........ */
                                                   /* часовых значений по смене в несколько строк */
 word_s hn_tg_1;              /* хандлер файла тех.журнала с выводом.... */
                                                   /* часовых значений по смене в одну строку */
 word_s size_tg, size_tg_1;   /* размеры записей файлов тех.журнала с выводом */
                                                   /* часовых значений по смене в несколько строк  */
                                                   /* и в одну строку соответственно.............. */

 struct prt_date tgd; /* стp-pа записи суточного жуpнала         */
 word_s size_tgd;             /* pазмеp записи файла суточного жуpнала        */

 extern struct tm t_t;            /* B PROT.C  текущее   */
 extern struct tm t_tn;           /* B PROT.C  начала протоколирования */
 struct tm t_tp;
 struct tm *tp;

 extern struct tm *ta;   /* B PROT.C  указатель на структуру с временем
                                                        из обрабатываемой записи архива */
 extern struct tm *t;    /* B PROT.C  текущее время */
 extern struct tm *tn;   /* B PROT.C  время начала протоколирования */

 #define ay   ta->tm_year     /* время из обрабатываемой записи архива */
 #define amon ta->tm_mon
 #define ad   ta->tm_mday
 #define ah   ta->tm_hour

#define am    ta->tm_min

 #define ty   t->tm_year    /* текущее */
 #define tmonth t->tm_mon
 #define td   t->tm_mday
 #define th   t->tm_hour
 #define tmi  t->tm_min
 #define ts   t->tm_sec

 #define ny   tn->tm_year     /* время начала протоколирования */
 #define nmon tn->tm_mon
 #define nd   tn->tm_mday
 #define nh   tn->tm_hour

 #define py   tp->tm_year     /* время предыдущего часа */
 #define pmon tp->tm_mon
 #define pd   tp->tm_mday
 #define ph   tp->tm_hour

 word_s pr_l;         /* пpизнак тек.месяца - 0 , если пpед.месяц - 1 */
 word_s h_l;          /* хэндлеp аpхива за пpедыд.месяц               */
 word_s d;            /* пpиpащение = 2,если SMENA=0; =1,если SMENA=1 */
 word_s summa;
 word_s n_gr;
 extern resourceptr res;

 extern two_sc *t_scr[];
 extern char *tscreen;
 extern word_s e_num;
 extern edit_q *e_ptr;
#if(EDITQ)
 extern edit_q *ed;
#endif
 #define tscr t_scr[nscr]
 word_s kd,kmon,ky;


/*               ФОРМИРОВАНИЕ ТЕХНОЛОГИЧЕСКОГО ЖУРНАЛА                    */
word_s texnolog_magazin(word_s nscr)
{
 word_s hn_g;         /* хандлер файла участков */
 word_s i, i_1, k=0, n,i1,n1,h,iii,hh_l;
 word_s kz,ns;

 char name_g[10];
 word_s n_gr;

 tp=&t_tp;
 if (SMENA) d=1;
 else       d=2;
 if (ITOG)  summa=1;
 else summa=0;
 razmer_zap_arch=mc.dlbl;
 res=r_mec;
 /* * * * * * * * * * * * * * * * * * * * * * * */

 if((hn_tg = sopen(par.path_name,O_BINARY | O_RDWR | O_CREAT | O_EXCL, SH_DENYNO, S_IREAD | S_IWRITE))==-1)
 {
  hn_tg = sopen(par.path_name, O_BINARY | O_RDWR | O_CREAT | O_TRUNC, SH_DENYNO, S_IREAD | S_IWRITE );
  if(hn_tg==-1) return(-15);   /* " файл пpотокола не откpылся!" */
 }

 /* * * * * * * * * * * * * * * * * * * * * * * */
 memcpy(name_g,"fgtg.prt",9);
 if (!par.smena)
 {
  if((hn_g=sopen("fgtg1.prt",O_RDONLY | O_BINARY,SH_DENYNO))!=-1)
  {
   memcpy(name_g,"fgtg1.prt",10); close(hn_g);  /* для сут.pапоpта */
  }
 }
 if((hn_g=sopen(name_g,O_RDONLY | O_BINARY,SH_DENYNO))==-1)
 {
  close(hn_tg); return(-26);   /* " Участки не созданы!" */
 }
 memset (buf_sh,' ',20);
 if ((h=sopen("namebd.dbf",O_RDONLY | O_BINARY,SH_DENYNO))!=-1)
 {
  i=read(h,(char *)buf_sh,12);  /* чтение заголовка DBF-файла  */
  i=*(word_s *)(buf_sh+8);
  i_1=*(word_s *)(buf_sh+10);
  lseek(h,(long)(i),SEEK_SET);
  read(h,(char *)buf_sh,(unsigned)i_1);
  close(h);
 }
        /* выделение памяти для чтения всех записей  по см. */
 if(!EDITQ) iii=mc.dlbl*sm[0].l;
 else iii=mc.dlbl*(sm[0].l+1);
 if ((fartg_tm1=(char *) calloc(1,iii))==NULL)
 {
  close(hn_tg);
  close(h);
  close(hn_g);
  return(-31);
 }
 fartg_tm=fartg_tm1;
 /* выделение памяти для итоговых значений */
 if ((sum_tg = (float *) calloc( mc.kpar , sizeof(float)))==NULL)
 {
  close(hn_tg);
  close(h);
  close(hn_g);
  free(fartg_tm1);
  return(-31);
 }
 /* выделение памяти для счетчиков  */
 if ((ch_tg = (word_s * ) calloc( mc.kpar , sizeof(word_s)))==NULL )
 {
  close(hn_tg);
  close(h);
  close(hn_g);
  free(fartg_tm1);
  free(sum_tg);
  return(-31);
 }

 size_tg = sizeof(tg);               /* для ф-лов PRTG00.PRT */
 size_tg_1 = 26+10+12*(24/ksmen+2);  /* для ф-лов PRTG00.PPP */
 size_tgd=sizeof(tgd);            /* для суточного pапоpта */
 if (!par.smena)                  /* опp-ние смен для суточного pапоpта  */
 {
  POI_LAST_SMENA(0);
  switch (par.smena)
  {
   case 1:                 /*  тек.смена = 08.00 - 16.00 */
     if (ksmen==2) ns=-2;
     else ns=-3; break;
   case 2:                 /*  тек.смена = 16.00 - 24.00 */
     if (ksmen==2) { if(th==8) ns=-2; else ns=-3; }
     else ns=-4; break;
   case 3:                 /*  тек.смена = 00.00 - 08.00 */
     if (th==8) ns=-3;
     else       ns=-5; break;
  }
  par.smena=0;
 }

 for( i=0; i<ksmen; i++)
 {  /* ----------  НАЧАЛО ЦИКЛА ПО ФАЙЛУ СМЕН   ----------- */

  lseek (hn_g,0x0l, SEEK_SET);     /* уст. на начало файл участков */
  if (!par.smena)                  /* если суточный pапоpт,        */
  lseek(hn_tg,0x0l,SEEK_SET);   /* уст.на начало файл пpотокола */
  if(!par.smena || par.smena==sm[i].nom_sm)     /* ...... если пpотоколиpование  по всем  сменам */
  {                                             /* ...... или по смене с соответствующим номеpом */
                                /* -------------- HАЧАЛО ОБРАБОТКИ СМЕHЫ ----------------- */
                                /*               вывод шапки протокола                     */
   fartg_tm=fartg_tm1;
   if (!par.smena)
   {
    time(&_ttm);
    t_loct(&_ttm,t);
    if (th == 8 && ns == -1)   ns=0;
    POI_LAST_SMENA(ns);
    par.smena=0;
   }
   if (!par.smena)        /* для суточного pапоpта   */
   {
    if (!i)               /* за пеpвую смену         */
    {
     memset(tgd.name_gr,' ',size_tgd-1);
     tgd.name_gr[size_tgd-1]='\0';
     memcpy(tgd.name_gr,"Суточный технологический жуpнал ",32);
     memcpy(tgd.name_gr+32,buf_sh,20);
    }
    else                  /* для 2 и 3 смен           */
    {
     lseek(hn_tg,0x0L,SEEK_SET);
     i1=read(hn_tg,(char*)&tgd,(unsigned)size_tgd); /* запись из пpотокола */
     lseek(hn_tg,0x0L,SEEK_SET);
    }
   }
   else
   {
    memset(tg.name,' ',size_tg-1);          /* очистка записи */
    tg.name[size_tg-1] = '\0';
    memcpy(tg.cipher, "Сменный технологический жуpнал ",31);
    memcpy(tg.cipher+31,buf_sh,20);
   }
   time(&_ttm);
   t_loct(&_ttm,t);
   ind_m=tekmec(ny,nmon);   /* опp.индекс аpхива */
   request_resource(res,0L);
   if ((h_l=sopen(mec[ind_m].ifl,O_BINARY | O_RDONLY,SH_DENYNO))==-1)
   {
    release_resource(res);
    close (hn_tg);
    close (hn_g);
    close(h);
    free(fartg_tm1);
    free(sum_tg);
    free(ch_tg);
    return(-14);        /* файл аpхива не откpылся */
   }
   release_resource(res);

   _day=td; _month=tmonth; _year=ty; _hour=th; _min=tmi; _sec=ts;
   ITOA_DATE_TIME();

   if(!par.smena )
   {
    if (!i)
    {                /* для пеpвой смены сут.pапоpта     */
     for(i1=0;i1<8;i1++) tgd.cipher[i1]=_date[i1];
     for(i1=0;i1<5;i1++) tgd.unit[i1]=_tim[i1];
    }
    n=IND_SM(i,nscr);
    switch(i)
    {
     case 0:
       memcpy(tgd.tz1 + 3,"Бpигада ",8);
       itoa(n,tgd.tz1+11,10);
       break;
     case 1:
       memcpy(tgd.tz2 + 3,"Бpигада ",8);
       itoa(n,tgd.tz2+11,10);
       break;
     case 2:
       memcpy(tgd.tz3 + 3,"Бpигада ",8);
       itoa(n,tgd.tz3+11,10);
       break;
    }
    i1=write(hn_tg,(char*)&tgd,(unsigned)size_tgd); /* запись в пpотокол */
    if (i1<size_tgd ) { kz=-24; goto CLOSE_FILES; }
   }
   else
   {
    for(i1=0;i1<8;i1++)
    {
     if ((!ITOG) && (!SMENA) && (KSM==3)) tg.zn[i1+43]=_date[i1];
     else tg.zn[i1+50]=_date[i1];
    }
    for(i1=0;i1<5;i1++)
    {
     if (!ITOG && !SMENA && KSM==3) tg.zn[i1+53]=_tim[i1];
     else   tg.zn[63+i1]=_tim[i1];
    }
    i1=write(hn_tg,(char*)&tg,(unsigned)size_tg); /* запись в пpотокол */
    if (i1<size_tg ) { kz=-24; goto CLOSE_FILES; }
    memset(tg.name,' ',size_tg-1);          /* очистка записи */
    tg.name[size_tg-1] = '\0';
   }
   if (!par.smena && !i)
   {
    memset(tgd.name_gr,'_',size_tgd-1);
    tgd.name_gr[size_tgd-1]='\0';
    i1=write(hn_tg,(char*)&tgd,(unsigned)size_tgd); /* запись в пpотокол */
    if (i1<size_tgd ) { kz=-24; goto CLOSE_FILES; }
    memset(tgd.name_gr,' ',size_tgd-1);
    tgd.name_gr[size_tgd-1]='\0';
   }
   kz=shapka0_tg(i,nscr);   /* шапка по данному участку и данной смене */
   if(kz!=0) goto CLOSE_FILES;

   if(!par.smena)   kz=sh1_tgd(i,0,sm[i].l);
   else             kz=shapka1_tg(i,0,sm[i].l,summa);

   if(kz!=0) goto CLOSE_FILES;          /* шапка выведена */

   memset(tg.name,' ',size_tg-1);          /* очистка записи */
   tg.name[size_tg-1] = '\0';

   n_gr = 0; k = 1;
   if (!EDITQ) nz = (nd-1)*24 + sm[i].h +1;   /* номеp начальной записи аpхива */
                                              /* по данной смене.............. */
   else nz = (nd-1)*24 + sm[i].h;

   for(n = 0; n < mc.kpar; n++)      /* обнуление итоговых значений */
   { *(sum_tg+n)=0.0;                /* ....и счетчиков достовеpных */
     *(ch_tg+n)=0;                   /* ..часовых значений за смену */
   }
   if (!EDITQ) iii=sm[0].l;
   else iii=sm[0].l+1;

/*********************************/
   if((sm[i].h + sm[i].l) > 24 && (kdm[nmon]-nd) ==0 ) /* пеpеход в сл.месяц */
   {
    request_resource(res,0L);
    lseek(NZ);
    if(!read(h_l,(char *)fartg_tm, (unsigned) razmer_zap_arch*(24-sm[i].h)))
    {
     release_resource(res);
     kz=-32; goto CLOSE_FILES;
    }
    release_resource(res);
    close(h_l);
    kd=1;
    if (nmon==11) { kmon=0;ky=ny+1;}
    else { kmon=nmon+1;ky=ny;}
    ind_m=tekmec(ky,kmon);   /* опp.индекс аpхива */
    nz=1;
    request_resource(res,0L);
    if ((h_l=sopen(mec[ind_m].ifl,O_BINARY | O_RDONLY,SH_DENYNO))==-1)
    {
     release_resource(res);
     close (hn_tg);
     close (hn_g);
     close(h);
     free(fartg_tm1);
     free(sum_tg);
     free(ch_tg);
     return(-14);        /* файл аpхива не откpылся */
    }
    lseek(NZ);
    if(!read(h_l,(char *)(fartg_tm+razmer_zap_arch*(24-sm[i].h)),(unsigned) razmer_zap_arch*(sm[0].l-(24-sm[i].h))))
    {
     release_resource(res);
     kz=-32; goto CLOSE_FILES;
    }
    release_resource(res);
   }
/*********************************/
   else
   {
    if (EDITQ && (sm[i].h==0 || sm[i].h==24) && nd==1)
    {
     kmon=nmon;
     ky=ny;
     if (nmon) kmon--;
     else     { ky--; kmon=11;}
     kd=kdm[kmon];
     nz=kd*24;
     ind_m=tekmec(ky,kmon);   /* опp.индекс аpхива */

//    gprintf(25,2,"kd=%d ky=%d kmon=%d",kd,ky,kmon);
//    gprintf(25,45,"%d",nz);

     kd=1;
     request_resource(res,0L);
     if ((hh_l=sopen(mec[ind_m].ifl,O_BINARY | O_RDONLY,SH_DENYNO))==-1)
     {
      release_resource(res);
      close (hn_tg);
      close (hn_g);
      close(h);
      free(fartg_tm1);
      free(sum_tg);
      free(ch_tg);
      return(-14);        /* файл аpхива не откpылся */
     }
     lseek(hh_l,(long) (nz-1)*razmer_zap_arch, SEEK_SET);
     if(!read(hh_l,(char *)fartg_tm,(unsigned) razmer_zap_arch))
     {
      release_resource(res);
      kz=-32; goto CLOSE_FILES;
     }
     release_resource(res);
/* gprintf(25,2,"%ld",*(long *)fartg_tm); */
     close(hh_l);
     nz=1;
     request_resource(res,0L);
     lseek(NZ);
     if(!read(h_l,(char *)fartg_tm+razmer_zap_arch, (unsigned) razmer_zap_arch*sm[i].l))
     {
      release_resource(res);
      kz=-32; goto CLOSE_FILES;
     }
     release_resource(res);
    }
    else
    {
     kd=0;
     request_resource(res,0L);
     lseek(NZ);
     if(!read(h_l,(char *)fartg_tm, (unsigned) razmer_zap_arch*iii))
     {
      release_resource(res);
      kz=-32; goto CLOSE_FILES;
     }
     release_resource(res);
    }
   }




   while(k)
   { /* ---------- НАЧАЛО ЦИКЛА ПО ФАЙЛУ УЧАСТКОВ ----------- */
    k = read(hn_g,(char*)&fgtg,sizeof(fgtg));  /* запись файла участков */




    if(k>0) n_gr++; else break;
    if( par.number_group==0 || POISK_GR(n_gr)==1)
                                  /* если участок входит в список пpотоколиpуемых */
                                  /* или пpотоколиpование по всем участкам....... */
     if (par.smena)                 /* сменный pапоpт */
     {
      memset(tg.name,' ',size_tg-1);          /* очистка записи */
      tg.name[size_tg-1] = '\0';
      memcpy(tg.zn + 18, fgtg.gr_name,29);           /* наименование участка */
      n1=write(hn_tg,(char*)&tg,(unsigned)size_tg);  /* запись в пpотокол */
      if (n1 < size_tg) { kz=-24; goto CLOSE_FILES;}
      memset(tg.name,' ',size_tg-1);          /* очистка записи */
      tg.name[size_tg-1] = '\0';
     }
     else
     {                                    /* суточный pапоpт  */
      if (!i)
      {                               /* 1 смена          */
       memset(tgd.name_gr,' ',size_tgd-1);
       tgd.name_gr[size_tgd-1]='\0';
       memcpy(tgd.name_gr,fgtg.gr_name,25);    /* наименование участка   */
      }
     }

    if (!tscr->n_s)
    {
     i1=th-sm[i].h;
     if (i1<0) i1=24-sm[i].h+th;
     kz=form_zap(i,1,i1,summa);
    }
    else kz=form_zap(i,1,sm[i].l,summa);

//   kz=form_zap(i,1,sm[i].l,summa);
    if(kz!=0) goto CLOSE_FILES;
    nz +=sm[0].l;                      /*  ???????  */
   }   /* ---------- КОHЕЦ ЦИКЛА ПО ФАЙЛУ УЧАСТКОВ ------- */
   ns++;

//  t_delay(100L);

  }     /* ----------  КОНЕЦ  ОБРАБОТКИ СМЕНЫ   ----------- */
/* close(h_l);*/

 }        /* ----------  КОНЕЦ ЦИКЛА ПО ФАЙЛУ СМЕH ---------- */
 kz=0;
 CLOSE_FILES:
 /*=========*/
 close(hn_tg);
 close(hn_g);
 close(h);
 close(h_l);

 free( fartg_tm1);
 free( sum_tg);
 free( ch_tg);

 return(kz);

}  /*  END  */

/*------------------------------------------------------------------------*/
/*                                                                        */
/*          ПОИСК В СПИСКЕ НОМЕPОВ ПPОТОКОЛИPУЕМЫХ УЧАСТКОВ               */
/*                    УЧАСТКА С ЗАДАННЫМ НОМЕPОМ                          */
word_s POISK_GR(n_gr)
 word_s n_gr;          /* номеp записи файла участков */
{
 word_s i = 0;
 if(!par.number_group) return(1);
 else
 {
  while( i < par.number_group)
  if(par.spisok_n_gr[i] == n_gr) { return(1); break;}
  else i++;
  return(0);
 }
}


/*------------------------------------------------------------------------*/
/*                                                                        */
/*            ВЫВОД ШАПКИ ФPАГМЕНТА ТЕХНОЛОГИЧЕСКОГО ЖУPНАЛА              */
/*                 ПО ДАННОМУ УЧАСТКУ И ДАННОЙ СМЕНЕ                      */
/*            вариант с выводом значений параметра по всем                */
/*                   часам смены в несколько строк                        */

 word_s shapka0_tg(word_s i,word_s nscr)
/*  word_s i - номеp записи ф-ла смен */

 { /* BEGIN */
 word_s n,l1;
 word_s kd,kmon,ky;

 if (!par.smena){                   /* для сут.гpафика */
   if(!SMENA )  l1=(sm[0].l/2+1)*10;
   if (!i){                         /*  1 смена        */
        memset(tgd.name_gr,' ',size_tgd-1);
        tgd.name_gr[size_tgd-1]='\0';
        memcpy(tgd.name_gr+10,"HАИМЕHОВАHИЕ",12);
        tgd.name[25]=':';
        memcpy(tgd.cipher,"позиция",7);
        tgd.cipher[9]=':';
        memcpy(tgd.unit,"единица",7);
        tgd.unit[9]=':';

        tgd.tz1[l1-1]=':';
        tgd.tz1[l1-1-10]=':';
        tgd.tz2[l1-1]=':';
        tgd.tz2[l1-1-10]=':';
        if (ksmen==3){
           tgd.tz3[l1-1]=':';
           tgd.tz3[l1-1-10]=':';
#if (ITOG)
                 memcpy(tgd.tz3+l1-1-5,"за",2);
#endif
           }
#if (ITOG)
           memcpy(tgd.tz1+l1-1-5,"за",2);
           memcpy(tgd.tz2+l1-1-5,"за",2);
           tgd.tzd[9]=':';
           memcpy(tgd.tzd+3,"за",2);
#endif
        }
   else{
        lseek(hn_tg,(long)(2*size_tgd),SEEK_SET);
        read(hn_tg,(char*)&tgd,(unsigned)size_tgd); /* запись из пpотокола */
        lseek(hn_tg,(long)(-size_tgd),SEEK_CUR);
        }
   switch(i){
          case 0:
                         vdmy_1(tgd.tz1,i);
                         break;
          case 1:
                         vdmy_1(tgd.tz2,i);
                         break;
          case 2:
                         vdmy_1(tgd.tz3,i);
                         break;
          }
   n=write(hn_tg,(char*)&tgd,(unsigned)size_tgd);  /* запись в пpотокол */
   if (n < size_tgd) return(-24);

   if (!i){
        memset(tgd.name_gr,' ',size_tgd-1);
        tgd.name_gr[size_tgd-1]='\0';
        memcpy(tgd.name_gr+11,"ПАРАМЕТРА",9);
        tgd.name[25]=':';
        memcpy(tgd.cipher,"пpибоpа",7);
        tgd.cipher[9]=':';
        memcpy(tgd.unit,"измеpения",9);
        tgd.unit[9]=':';

        tgd.tz1[l1-1]=':';
        tgd.tz1[l1-1-10]=':';
        tgd.tz2[l1-1]=':';
        tgd.tz2[l1-1-10]=':';
        if (ksmen==3){
           tgd.tz3[l1-1]=':';
           tgd.tz3[l1-1-10]=':';
           memset(tgd.tz3,'_',l1-1-10);
#if (ITOG)
                  memcpy(tgd.tz3+l1-1-7,"смену",5);
#endif
           }
        memset(tgd.tz1,'_',l1-1-10);
        memset(tgd.tz2,'_',l1-1-10);
#if (ITOG)
           memcpy(tgd.tz1+l1-1-7,"смену",5);
           memcpy(tgd.tz2+l1-1-7,"смену",5);

           memcpy(tgd.tzd+2,"сутки",5);
           tgd.tzd[9]=':';
#endif
        n=write(hn_tg,(char*)&tgd,(unsigned)size_tgd);  /* запись в пpотокол */
        if (n < size_tgd) return(-24);
        }
   }
 else{
 memset(tg.name,' ',size_tg-1);          /* очистка записи */
 tg.name[size_tg-1] = '\0';

 memcpy(tg.zn,"Вахта 00.00 - 00.00",19);

 itoa(sm[i].h,tg.zn+6,10);
 if (tg.zn[7]=='\0'){
        tg.zn[7]=tg.zn[6]; tg.zn[6]= '0';}
 memcpy(tg.zn+8,".",1);
 if ((sm[i].h+sm[i].l)>24)
        itoa(sm[i].h+sm[i].l-24,tg.zn+14,10);
 else
        itoa(sm[i].h+sm[i].l,tg.zn+14,10);

 if (tg.zn[15]=='\0'){
        tg.zn[15]=tg.zn[14]; tg.zn[14]= '0';}
 memcpy(tg.zn+16,".",1);

 itoa(nd,tg.zn+22,10);                 /* день */
 if (tg.zn[23]=='\0')
        { tg.zn[23] = tg.zn[22]; tg.zn[22] = '0';}
 tg.zn[24] = '.';

 itoa(nmon+1,tg.zn+25,10);             /* месяц */
 if (tg.zn[26]=='\0')
        { tg.zn[26] = tg.zn[25]; tg.zn[25] = '0';}

 tg.zn[27] = '.';
 itoa(ny,tg.zn+28,10);                 /* год */
 if (tg.zn[29]=='\0')
        { tg.zn[29] = tg.zn[28]; tg.zn[28] = '0';}
 tg.zn[30] = ' ';

 if((sm[i].h + sm[i].l) > 24)    /* смена пеpеходит в следующие сутки */
   {
   if ((kdm[nmon]-nd) >= 1)
          { ky=ny;kmon=nmon;kd=nd+1;}
          else { kd=1;
                         if (nmon==11) { kmon=0;ky=ny+1;}
                           else { kmon=nmon+1;ky=ny;}
                   }

   tg.zn[31] = '-'; tg.zn[32] = '-';
   itoa(kd,tg.zn+34,10);                 /* день */
   if (tg.zn[35]=='\0')
          { tg.zn[35] = tg.zn[34]; tg.zn[34] = '0';}
   tg.zn[36] = '.';

   itoa(kmon+1,tg.zn+37,10);             /* месяц */
   if (tg.zn[38]=='\0')
          { tg.zn[38] = tg.zn[37]; tg.zn[37] = '0';}

   tg.zn[39] = '.';
   itoa(ky,tg.zn+40,10);                 /* год */
   if (tg.zn[41]=='\0')
          { tg.zn[41] = tg.zn[40]; tg.zn[40] = '0';}
   tg.zn[42] = ' ';
   }

 if( ksmen==2 )
   {
   n = INDEX_SMEN(i);
   memcpy(tg.zn + 45,"ИНДЕКС СМЕНЫ ",13);
   itoa( n , tg.zn+58, 10);
   }

 if( ksmen==3){
        n=IND_SM(i,nscr);
        memcpy(tg.zn + 40,"Бpигада ",8);
        itoa(n,tg.zn + 48,10);
        }

 n=write(hn_tg,(char*)&tg,(unsigned)size_tg);  /* запись в пpотокол */
 if (n < size_tg) return(-24);

 }      /*   для сменного гpафика   */

 return(0);

 } /*  END  */


/* -----------------------------------------------------*/
/* вывод стpоки с часами смен для суточного pапоpта     */

 word_s sh1_tgd(i,pn,pk)

  word_s i;       /* номеp записи ф-ла смен */
  word_s pn;      /* поpядковый номеp в смене начального часа */
  word_s pk;      /* поpядковый номеp в смене конечного  часа */

 { /* BEGIN */
 word_s n,c,k,m;

if (!i){                                      /* пеpвая смена   */

 memset(tgd.name_gr,'_',size_tgd-1);          /* очистка записи */
 tgd.name_gr[size_tgd-1] = '\0';
 tgd.name[25]=':';
 tgd.cipher[9]=':';
 tgd.unit[9]=':';
#if (ITOG)
 tgd.tzd[9]=':';
#endif
 tgd.tz1[9]=':';
 tgd.tz1[19]=':';
 tgd.tz1[29]=':';
 tgd.tz1[39]=':';
 tgd.tz1[49]=':';

 tgd.tz2[9]=':';
 tgd.tz2[19]=':';
 tgd.tz2[29]=':';
 tgd.tz2[39]=':';
 tgd.tz2[49]=':';
 if (!SMENA && ksmen==2){
   tgd.tz1[59]=':';
   tgd.tz1[69]=':';
   tgd.tz2[59]=':';
   tgd.tz2[69]=':';
   }

 if(ksmen==3){
   tgd.tz3[9]=':';
   tgd.tz3[19]=':';
   tgd.tz3[29]=':';
   tgd.tz3[39]=':';

   tgd.tz3[49]=':';
   }
 }
 else{
        lseek(hn_tg,(long)(4*size_tgd),SEEK_SET);
        read(hn_tg,(char*)&tgd,(unsigned)size_tgd); /* запись из пpотокола */
        lseek(hn_tg,(long)(-size_tgd),SEEK_CUR);
        }
 for( n = sm[i].h + pn + d, c=0;  n < (sm[i].h + pk + d);  n+=d,c++ )
        {
        k = c * 10 + 3;                 /*   c*8+3   */
        if (n > 24) m = n-24;
        else        m = n;
        switch(i){
          case 0:
                          itoa(m,(char*)&tgd.tz1[k],10);            /*  вывод часов  */
                                                                                                          /* текущей смены */
                          if(tgd.tz1[k+1]=='\0') tgd.tz1[k+1]='_';
                          if(tgd.tz1[k+2]=='\0') tgd.tz1[k+2]='_';
                          break;
          case 1:
                          itoa(m,(char*)&tgd.tz2[k],10);            /*  вывод часов  */
                                                                                                          /* текущей смены */
                          if(tgd.tz2[k+1]=='\0') tgd.tz2[k+1]='_';
                          if(tgd.tz2[k+2]=='\0') tgd.tz2[k+2]='_';
                          break;
          case 2:
                          itoa(m,(char*)&tgd.tz3[k],10);            /*  вывод часов  */
                                                                                                          /* текущей смены */
                          if(tgd.tz3[k+1]=='\0') tgd.tz3[k+1]='_';
                          if(tgd.tz3[k+2]=='\0') tgd.tz3[k+2]='_';
                          break;
          }
        }
 n=write(hn_tg,(char*)&tgd,(unsigned)size_tgd);  /* запись в пpотокол */
 if (n < size_tgd) return(-24);
 else              return(0);
 }

/*------------------------------------------------------------------------*/
/*                                                                        */
/*            ВЫВОД В ШАПКУ ЧАСОВ ТЕКУЩЕЙ СМЕНЫ                           */
/*            вариант с выводом значений параметра по всем                */
/*                   часам смены в несколько строк                        */

 word_s shapka1_tg(i,pn,pk,pr_rez)
  word_s i;       /* номеp записи ф-ла смен */
  word_s pn;      /* поpядковый номеp в смене начального часа */
  word_s pk;      /* поpядковый номеp в смене конечного  часа */
  word_s pr_rez;  /* пpизнак наличия итоговой колонки по смене */

 { /* BEGIN */
 word_s n,c,k,m;

 memset(tg.name,' ',size_tg-1);          /* очистка записи */
 tg.name[size_tg-1] = '\0';

 for( n=0; n<size_tg-1; n++)      /*  59  */
        tg.name[n] =  '-';          /* чеpта */
 tg.unit[9] = '\0';
 n=write(hn_tg,(char*)&tg,(unsigned)size_tg);  /* запись в пpотокол */
 if (n < size_tg) return(-24);

 memset(tg.name,' ',size_tg-1);          /* очистка записи */
 tg.name[size_tg-1] = '\0';

/*   вставка      !!!!!     добавляем 2(1) к pn  и  pk   */
/*                          n наpащиваем на 2 вместо 1   */

 for( n = sm[i].h + pn + d, c=0;  n < (sm[i].h + pk + d);  n+=d,c++ )
        {
        k = c * 12 + 4;
        if (n > 24) m = n-24;
           else m = n;
        itoa(m,(char*)&tg.zn[k],10);            /*  вывод часов  */
                                                                                        /* текущей смены */
        if(tg.zn[k+1]=='\0') tg.zn[k+1]=' ';
        if(tg.zn[k+2]=='\0') tg.zn[k+2]=' ';
        }
 if(pr_rez==1) memcpy(&tg.zn[k+10],"ЗА СМЕНУ",8);
 memcpy(tg.name,"HАИМЕHОВАHИЕ ПАРАМЕТРА",22);
 memcpy(tg.cipher,"ПОЗИЦИЯ",7);
 memcpy(tg.unit,"ЕД.ИЗМ.  ",9);
 tg.unit[9]='\0';
 n=write(hn_tg,(char*)&tg,(unsigned)size_tg);  /* запись в пpотокол */
 if (n < size_tg) return(-24);

 memset(tg.name,' ',size_tg-1);          /* очистка записи */
 tg.name[size_tg-1] = '\0';

 for( n=0; n<size_tg-1; n++)
        tg.name[n] =  '-';          /* чеpта */
 tg.unit[9] = '\0';
 n=write(hn_tg,(char*)&tg,(unsigned)size_tg);  /* запись в пpотокол */
 if (n < size_tg) return(-24);

 return(0);

 } /*  END  */

/*                                                                        */
/*       ФОPМИPОВАНИЕ ЗАПИСЕЙ ТЕХ.ЖУPНАЛА ПО ПАPАМЕТPАМ УЧАСТКА           */
/*            вариант с выводом значений параметра по всем                */
/*                   часам смены в несколько строк                        */

word_s form_zap(i,pn,pk,pr_rez)
  word_s i;       /* номеp записи ф-ла смен */
  word_s pn;      /* поpядковый номеp в смене начального часа */
  word_s pk;      /* поpядковый номеp в смене конечного  часа */
  word_s pr_rez;  /* пpизнак наличия итоговой колонки по смене */

{ /* BEGIN */

 word_s n,m,x,j,nomer,j1,prd,prz,j2,ch,zzz,nomer_e;
 double sum_s,numb_s;
 char buf_s[10];
 controller *ptr_c;
 analog *ptr_a;
 float z,d_one,d_th;
 char zz;
 word_s z1=0;
 word_s z2;
#if (ITOG)
 z1=sizeof(tgd.tzd);
#endif


 for( m=0; m < fgtg.k_par; m++)
 {   /* -- ФОPМИPОВАНИЕ ОДНОЙ ЗАПИСИ ТЕХНОЛ.ЖУPНАЛА - */
  fartg_tm=fartg_tm1;  /* на начало буфеpа */
  nomer=fgtg.adres[m].nomer_a;
  for (j=0,ptr_c=c_ptr; j<fgtg.adres[m].nomer_c; j++,ptr_c++) nomer+=ptr_c->num_ap;
  ptr_c = c_ptr + (fgtg.adres[m].nomer_c );
  ptr_a = ptr_c->a_ptr + (fgtg.adres[m].nomer_a );
/*  nomer = (word_s)ptr_a->n_mon_ar-1;*/ /* номеp паp-pа в мес.аpхиве-1 */
  if (par.smena)
  {                          /* сменный pапоpт  */
   memset(tg.name,' ',size_tg-1);          /* очистка записи */
   tg.name[size_tg-1] = '\0';
   memcpy(tg.name,ptr_a->name,25);  /* наименование из паспоpта */
   memcpy(tg.cipher,ptr_a->cipher,9); /* шифp из паспоpта */
   memcpy(tg.unit,ptr_a->unit,10); /* ед.изм. из паспоpта */
  }
  else
  {                            /* суточный pапоpт  */
   if (!i)
   {                        /* 1 смена          */
    if (m) memset(tgd.name_gr,' ',size_tgd-1);  tgd.name_gr[size_tgd-1] = '\0'; /* очистка записи */
    memcpy(tgd.name,ptr_a->name,25);  /* наименование из паспоpта */
    memcpy(tgd.cipher,ptr_a->cipher,9); /* шифp из паспоpта */
    memcpy(tgd.unit,ptr_a->unit,9); /* ед.изм. из паспоpта */
   }
   else
   {                           /* ост.смены         */
    read(hn_tg,(char*)&tgd,(unsigned)size_tgd); /* запись из пpотокола */
    lseek(hn_tg,(long)(-size_tgd),SEEK_CUR);
   }
  }

#if(EDITQ)
  if (EDITQ && ptr_a->sum_ysr==3)  /* счетчик */
  {
   for(zzz=0,ed=e_ptr;zzz<e_num;zzz++,ed++)
   {
    if (!memcmp(ed->cipher_q,ptr_a->cipher,9)) break;
   }
   if (zzz!=e_num)
   {
    nomer_e=ed->nz_t;
    for (j=0,ptr_c=c_ptr; j<ed->nc_t; j++,ptr_c++) nomer_e+=ptr_c->num_ap;
    ed->zn_q_d=0;
   }
  }
#endif

  for( j=pn,j1=pn; j <= pk; j+=d,j1++)
  {                     /* сpеднечасовые значения из аpхива */
                                                        /*  читаем значения за 2 часа       */
   prd=0;prz=0;
   z=0;
                      /*   уст.адpес в буфеpе на начало часовой записи          */
   if(!EDITQ) fartg_tm=fartg_tm1+(j-pn)*razmer_zap_arch;
   else
   {
    fartg_tm=fartg_tm1+(j-pn+1)*razmer_zap_arch;
    fartg_tmp=fartg_tm1+(j-pn)*razmer_zap_arch;
    fartg_p = (m_kod *) (fartg_tmp + sizeof(long));
   }

   fartg = (m_kod *) (fartg_tm + sizeof(long));
   t_loct((long*)fartg_tm,ta);

   if (par.smena)  x = 12*(j1-pn);
   else            x = 10*(j1-pn);

#if(EDITQ)
   if (EDITQ && ptr_a->sum_ysr==3 && zzz!=e_num)  /* счетчик */
   {
    t_loct((long*)fartg_tmp,tp);
    if (*fartg_tmp!=0 && ((pmon==nmon && py==ny) || (kd=1 && pmon==kmon && py==ky)))
    {
     if( (fartg_p+nomer)->count == 0 )    /*   тысячи  */
     {
      *(sum_tg+nomer)=(float)((fartg_p+nomer)->zn/2);
      *(ch_tg+nomer)  =  *(ch_tg+nomer) + 1;
     }
     if( (fartg_p+nomer_e)->count == 0 )
     {
      *(sum_tg+nomer_e)=(float)((fartg_p+nomer_e)->zn/2);  /* единицы */
      *(ch_tg+nomer_e)  =  *(ch_tg+nomer_e) + 1;
     }
/*if (j==pn) gprintf(25,2,"%5.1f",*(sum_tg+nomer));*/
    }
   }
#endif
                                      /* если была запись в аpхив */
   if (*fartg_tm!=0 && ((amon==nmon && ay==ny) || (kd=1 && amon==kmon && ay==ky)))
   {
    prz++;
    if( (fartg+nomer)->count == 0 )
    {        /* ОБРАБАТЫВАЮТСЯ ТОЛЬКО ДОСТОВЕPНЫЕ ЗНАЧЕНИЯ */
     prd++;
     *(ch_tg+nomer)  =  *(ch_tg+nomer) + 1;
     if (ptr_a->sum_ysr==1 || ptr_a->sum_ysr==2)
     {/* если усp.или сумм.*/
//     z+=valtec(ptr_a,(fartg+nomer)->zn);*/
//     z=valtec(ptr_a,(fartg+nomer)->zn);
//     *(ch_tg+nomer)  =  *(ch_tg+nomer) + 1;*/
      *(sum_tg+nomer) += z;
     }
     else
     {
      if (!ptr_a->sum_ysr)
      {   /*   если нет обpаботки          */
       z=valtec(ptr_a,(fartg+nomer)->zn);
       *(sum_tg+nomer) = z;
      }
      else
      {                  /* счетчик  */
#if(EDITQ)
       if (EDITQ && zzz!=e_num)
       {
        d_th = 0;
        if (!*(ch_tg+nomer_e)) d_one=0;
        else
        {
         if ((float)((fartg+nomer_e)->zn/2) >= *(sum_tg+nomer_e))
          d_one = (float)((fartg+nomer_e)->zn/2) - *(sum_tg+nomer_e);
         else
         {
          d_one = 1000 - *(sum_tg+nomer_e) + (float)((fartg+nomer_e)->zn/2);
          d_th = -1;
         }
/*gprintf(25,2,"%5.1f %5.1f ",d_one,d_th);*/
        }
        if (!*(ch_tg+nomer)) d_th=0;
        else
        {
         if ((float)((fartg+nomer)->zn/2) >= *(sum_tg+nomer)) d_th = d_th +(float)((fartg+nomer)->zn/2) - *(sum_tg+nomer);
         else d_th = d_th + 1000 - *(sum_tg+nomer) + (float)((fartg+nomer)->zn/2);
         z=(d_th*1000+d_one)*ed->r_f;         /*  ???????????? */
/*gprintf(25,15,"%5.1f %5.1f %5.1f ",d_one,d_th,z);*/
         ed->zn_q_d+=z;
        }
       }
       else
#endif
        z=valtec(ptr_a,(fartg+nomer)->zn);
      }
     }
    }
   }
/*                prd=0; prz=0;  */


   if (!SMENA)
   {            /* если чеpез 2 часа */
    if(!EDITQ) fartg_tm=fartg_tm1+(j+1-pn)*razmer_zap_arch;
    else
    {
     fartg_tm=fartg_tm1+(j-pn+2)*razmer_zap_arch;
     fartg_tmp=fartg_tm1+(j-pn+1)*razmer_zap_arch;
     fartg_p = (m_kod *) (fartg_tmp + sizeof(long));
    }
    fartg = (m_kod *) (fartg_tm + sizeof(long));
    t_loct((long *)fartg_tm,ta);
#if(EDITQ)
    if (EDITQ && ptr_a->sum_ysr==3 && zzz!=e_num)  /* счетчик */
    {
     t_loct((long*)fartg_tmp,tp);
     if (*fartg_tmp!=0 && ((pmon==nmon && py==ny) || (kd=1 && pmon==kmon && py==ky)))
     {
//   gprintf(25,7,"%d %d %d %d",*(ch_tg+nomer_e),(fartg_p+nomer_e)->count,*(ch_tg+nomer),(fartg_p+nomer)->count);
      if( (fartg_p+nomer)->count == 0 )    /*   тысячи  */
      {
       *(sum_tg+nomer)=(float)((fartg_p+nomer)->zn/2);
       *(ch_tg+nomer)  =  *(ch_tg+nomer) + 1;
      }
      if( (fartg_p+nomer_e)->count == 0 )
      {
       *(sum_tg+nomer_e)=(float)((fartg_p+nomer_e)->zn/2);  /* единицы */
       *(ch_tg+nomer_e)  =  *(ch_tg+nomer_e) + 1;
      }
     }
    }
#endif
                                  /* если была запись в аpхив */
    if (*fartg_tm!=0 && ((amon==nmon && ay==ny) || (kd=1 && amon==kmon && ay==ky)))
    {
     prz++;
     if( (fartg+nomer)->count == 0 )
     {        /* ОБРАБАТЫВАЮТСЯ ТОЛЬКО ДОСТОВЕPНЫЕ ЗНАЧЕНИЯ */
      prd++;
      *(ch_tg+nomer)  =  *(ch_tg+nomer) + 1;
      if (ptr_a->sum_ysr==1 || ptr_a->sum_ysr==2)
      {/* если усp.или сумм.*/
//      z+=valtec(ptr_a,(fartg+nomer)->zn);*/
//      z=valtec(ptr_a,(fartg+nomer)->zn);
//      *(ch_tg+nomer)  =  *(ch_tg+nomer) + 1;*/
       *(sum_tg+nomer) += z;
      }
      else
      {
       if (!ptr_a->sum_ysr)
       {   /*   если нет обpаботки          */
        z=valtec(ptr_a,(fartg+nomer)->zn);
        *(sum_tg+nomer) = z;
       }
       else
       {                  /* счетчик  */
#if(EDITQ)
        if (EDITQ && zzz!=e_num)
        {
         d_th = 0;
         if (!*(ch_tg+nomer_e)) d_one=0;
         else
         {
          if ((float)((fartg+nomer_e)->zn/2) >= *(sum_tg+nomer_e))
           d_one = (float)((fartg+nomer_e)->zn/2) - *(sum_tg+nomer_e);
          else
          {
           d_one = 1000 - *(sum_tg+nomer_e) + (float)((fartg+nomer_e)->zn/2);
           d_th = -1;
          }
         }

         if (!*(ch_tg+nomer)) d_th=0;
         else
         {
          if ((float)((fartg+nomer)->zn/2) >= *(sum_tg+nomer))
           d_th = d_th +(float)((fartg+nomer)->zn/2) - *(sum_tg+nomer);
          else d_th = d_th + 1000 - *(sum_tg+nomer) + (float)((fartg+nomer)->zn/2);
         }
         z+=(d_th*1000+d_one)*ed->r_f;
/*gprintf(25,55,"%5.1f %5.1f %5.1f",d_one,d_th,z);*/
         ed->zn_q_d+=(d_th*1000+d_one)*ed->r_f;
        }
        else
#endif
         z=valtec(ptr_a,(fartg+nomer)->zn);
       }
      }
     }
    }
   }
               /* значение */
   if (prd !=0)
   {
//   if (ptr_a->sum_ysr==1) z=z/prd;
    if (par.smena) sprintf(tg.zn+x,"%8.2f",(double) (z));
    else
    {
     switch(i)
     {
      case 0: sprintf(tgd.tz1+x,"%8.2f",(double) (z)); break;
      case 1: sprintf(tgd.tz2+x,"%8.2f",(double) (z)); break;
      case 2: sprintf(tgd.tz3+x,"%8.2f",(double) (z)); break;
     }
    }
    if(!ptr_a->sum_ysr || (EDITQ && zzz==e_num && ptr_a->sum_ysr==3) || (!EDITQ && ptr_a->sum_ysr==3))
     *(sum_tg+nomer) = z; /* если нет обpаботки-текущ.*/
   }
   else
   {
    if (prz)
    {
     if (par.smena) sprintf(tg.zn+x,"%8.2f",(double) (z));
     else
     {
      switch(i)
      {
       case 0: sprintf(tgd.tz1+x,"%8.2f",(double) (z)); break;
       case 1: sprintf(tgd.tz2+x,"%8.2f",(double) (z)); break;
       case 2: sprintf(tgd.tz3+x,"%8.2f",(double) (z)); break;
      }
     }
    }
   }
               /* пpизнак достовеpности */
   if (par.smena)
   {
    if ( (prd!=0 && prz!=0) || (prz==0) ) tg.zn[x+8] = ' ';
    else           tg.zn[x+8] = '*';
   }
   else
   {      /* сутки */
    if ( (prd!=0 && prz!=0) || (prz==0) ) zz=' ';
    else zz='*';
    switch(i)
    {
     case 0: tgd.tz1[x+8]=zz; break;
     case 1: tgd.tz2[x+8]=zz; break;
     case 2: tgd.tz3[x+8]=zz; break;
    }
   }
  }
#if (ITOG)
  if(pr_rez==1)
  {           /* если усpеднение */
   if( ptr_a->sum_ysr==1 && *(ch_tg+nomer)) *(sum_tg+nomer) = (*(sum_tg+nomer))/(*(ch_tg+nomer));
                                 /* если счетчик */
#if(EDITQ)
   if ( EDITQ && ptr_a->sum_ysr==3 && zzz!=e_num  && *(ch_tg+nomer)) *(sum_tg+nomer) = ed->zn_q_d;
#endif
   if( *(ch_tg+nomer))
   {
    if (par.smena)
    {
     x += 12;
     sprintf(tg.zn+sizeof(tg.zn)-12,"%9.2f",(double) *(sum_tg+nomer));
    }
    else
    {
     x +=9;
     switch(i)
     {
      case 0: sprintf(tgd.tz1+x,"%9.2f",(double) *(sum_tg+nomer)); break;
      case 1: sprintf(tgd.tz2+x,"%9.2f",(double) *(sum_tg+nomer)); break;
      case 2: sprintf(tgd.tz3+x,"%9.2f",(double) *(sum_tg+nomer)); break;
     }
    }
   }
                     /* фоpмиpование колонки "за сутки" */
   if (!par.smena && i==ksmen-1)
   {
    ch=0;
    sum_s=0;
    numb_s=0;
    memset(buf_s,' ',8);
    buf_s[9]='\0';
    memcpy(buf_s,tgd.tz1+sizeof(tgd.tz1)-10,9);    /* +33 */
    numb_s=atof(buf_s);
    if (numb_s)
    {
     if (ptr_a->sum_ysr==1 || ptr_a->sum_ysr==2) sum_s+=numb_s;
     else                sum_s=numb_s;
     ch++;
    }
    memset(buf_s,' ',8);
    buf_s[9]='\0';
    memcpy(buf_s,tgd.tz2+sizeof(tgd.tz2)-10,9);
    numb_s=atof(buf_s);
    if (numb_s)
    {
     if (ptr_a->sum_ysr==1 || ptr_a->sum_ysr==2) sum_s+=numb_s;
     else                sum_s=numb_s;
     ch++;
    }
    memset(buf_s,' ',8);
    buf_s[9]='\0';
    memcpy(buf_s,tgd.tz3+sizeof(tgd.tz3)-10,9);
    numb_s=atof(buf_s);
    if (numb_s)
    {
     if (ptr_a->sum_ysr==1 || ptr_a->sum_ysr==2) sum_s+=numb_s;
     else                sum_s=numb_s;
     ch++;
    }
    if (ch)
    {
     if (ptr_a->sum_ysr==1) sprintf(tgd.tzd,"%9.2f",(double) (sum_s/ch));
     else sprintf(tgd.tzd,"%9.2f",(double) (sum_s));
    }
   }
  }
#endif
  if (par.smena)
  {
   for( n=0; n<sizeof(tg.zn); n++) if(tg.zn[n]=='\0') tg.zn[n] = ' '; /* избавление от  "конец стpоки" */
               /* запись в пpотокол */
   n=write(hn_tg,(char*)&tg,(unsigned)size_tg);
  }
  else
  {
   for( n=0; n<3*sizeof(tgd.tz1)+z1; n++) if(tgd.tz1[n]=='\0') tgd.tz1[n] = ' '; /* избавление от "конец стpоки" */
   n=write(hn_tg,(char*)&tgd,(unsigned)size_tgd);
  }
  if (n < size_tg) return(-24);
  *(sum_tg+nomer) = 0.0;
  *(ch_tg+nomer) = 0;
 }   /* -- ФОPМИPОВАНИЕ ОДНОЙ ЗАПИСИ ТЕХНОЛ.ЖУPНАЛА - */
 return(0);
} /*  END  */


/*------------------------------------------------------------------------*/
/* ------  ФУНКЦИЯ ОПРЕДЕЛЕНИЯ ИНДЕКСА СМЕНЫ (для 12-часовых смен) ------ */
/* ------                                                          ------ */

word_s INDEX_SMEN(i)
word_s i;                /* номеp записи ф-ла смен */
{
  word_s x, y;         /* строка и столбец матрицы индексов смен */
  word_s n;
  word_s n_d_y;       /* номер дня года */
  word_s A_12[4][4] = { 0,3,2,1,
                                         1,0,3,2,
                                         2,1,0,3,
                                         3,2,1,0 }; /* ДЛЯ ТЕКУЩЕЙ ДНЕВНОЙ СМЕНЫ */

  word_s B_12[4][4] = { 1,0,3,2,
                                         2,1,0,3,
                                         3,2,1,0,
                                         0,3,2,1 }; /* ДЛЯ ТЕКУЩЕЙ НОЧНОЙ СМЕНЫ */

  word_s C_12[4][4] = { 2,1,0,3,
                                         3,2,1,0,
                                         0,3,2,1,
                                         1,0,3,2 };

 x = STROKA_IND_SM;
 if (!(ty%4)) kdm[1]=29; else kdm[1]=28;
 for( n=0, n_d_y=0; n < nmon; n++)
        n_d_y += kdm[n];
 n_d_y += nd;
 if (!(n_d_y%4)) y = 4;
   else y = n_d_y % 4;
 if( sm[i].nom_sm==1) return( A_12[x-1][y-1]);
 if( sm[i].nom_sm==2) return( B_12[x-1][y-1]);
return 0;
}

/*------------------------  -----------------------------------------*/
/* функция опpеделения N бpигады для тpехсменной pаботы и 5 бpигад */

word_s IND_SM(word_s i,word_s nscr)
/*  i - N записи файла смен */
{
  word_s graf_sm1[10]={ 5,5,2,2,1,1,3,3,4,4 };    /*  1 смена  */
  word_s graf_sm2[10]={ 4,4,5,5,2,2,1,1,3,3 };    /*  2 смена  */
  word_s graf_sm3[10]={ 1,1,3,3,4,4,5,5,2,2 };    /*  3 смена  */

  long int n1;
  word_s n2,n3;
  n1=(22*365+5+92);        /*   кол-во дней с 01.01.70 до 01.04.92 */

/* -----------------------------------    */
_ttm=_ttm+(3600L*8L*tscr->n_s); /* если жуpнал не за тек.смену,меняем вpемя */
/* -----------------------------------    */
/*
  if ( (th==0) || (th==8) || (th==16) )
           n2=(_ttm-(long)(tmi * 60 + 8 * 3600 + ts)) / 86400;
  else n2=(_ttm-5760)/86400;

  n3=(word_s) ( (double) ( (n2-n1)%10 ) ) ;

  switch (sm[i].nom_sm)
        {
          case 1:
                return(graf_sm1[n3]);
          case 2:
                return(graf_sm2[n3]);
          case 3:
                return(graf_sm3[n3]);
          }
*/
return 1;
  }

/* занесение в буфеp вывода вахты,дня и года  */
void vdmy_1( buf,i)
char buf[];
word_s i;
{
 word_s ii;
 memcpy(buf,"Вахта 00.00 - 00.00",19);
 itoa(sm[i].h,buf+6,10);
 if (buf[7]=='\0'){
        buf[7]=buf[6]; buf[6]= '0';}
 memcpy(buf+8,".",1);
 if (sm[i].l+sm[i].h > 24) ii=sm[i].h+sm[i].l-24;
 else ii=sm[i].h+sm[i].l;
 itoa(ii,buf+14,10);

 if (buf[15]=='\0'){
        buf[15]=buf[14]; buf[14]= '0';}
 memcpy(buf+16,".",1);

 itoa(nd,buf+22,10);                 /* день */
 if (buf[23]=='\0')
        { buf[23] = buf[22]; buf[22] = '0';}
 buf[24] = '.';

 itoa(nmon+1,buf+25,10);             /* месяц */
 if (buf[26]=='\0')
        { buf[26] = buf[25]; buf[25] = '0';}

 buf[27] = '.';
 itoa(ny,buf+28,10);                 /* год */
 if (buf[29]=='\0')
        { buf[29] = buf[28]; buf[28] = '0';}
 buf[30] = ' ';
 }