#include  "complex.h"
#include "gr_def.h"
#include "screen.h"
#include "shst_prt.h"


/* -----------------------------------*/
extern void VIEW_SMEN(word_s);
/* -----------------------------------*/

extern void cl_scr1(word_s nscr);
extern void save_time_scr(word_s nscr);
word_s jokei (word_s nom_ret,word_s nom,word_s nscr);

 word_s xl,yl,xr,yr;
 word_s color_of_text_menu;

/* ----------------------------------*/
 extern long int _ttm;
 extern struct tm *tn;

/* ---------------------------------- */

 extern two_sc *t_scr[];
 extern char *tscreen[];
 extern word_s n_m1[];

 #define tscr t_scr[nscr]

 extern word_s pr_copy[];

#define nmon tn->tm_mon


/* double change_ed_val(double ed_val,word_s ch,word_s flag);*/

 void F_MENY(word_s i,char *TEXT_M[],word_s NX,word_s NY);
 word_s SAIMAK(word_s sai_ret,char *TEXT_M[],word_s MAXY,word_s NX, word_s NY,word_s COLT,
                         word_s nscr,byte *ind_m);
/* ================================================================= */
 /* ¯/¯ ¢ë¢®¤  ¬¥­î ¨ 㯐 ¢«¥­¨ï 㪠§ â¥«¥¬ ¬¥­î.
         sai_ret -­®¬¥ ⥪ã饣® í«¥¬¥­â  ¬¥­î,
         *TEXT_M  -㪠§ â¥«ì ­  áâãªâãã Œ…ž,
         N•      -ª®®¤¨­ â  • ¢¥å­¥£® «¥¢®£® 㣫  Œ…ž,
         NY      -ª®®¤¨­ â  Y ¢¥å­¥£® «¥¢®£® 㣫  Œ…ž,
         MaxX    -MAX ¤«¨­  á␮ª¨ Œ…ž,
         MaxY    -Œ€• ª®«¨ç¥á⢮ í«¥¬¥­â®¢ ¬¥­î,
         COLM    -梥⠯ï¬®ã£®«ì­¨ª  Œ…ž,
         COLT    -梥â ⥪áâ  Œ…ž .
         ­  ¢ë室¥ -­®¬¥ ¢ë¡ ­­®£® í«¥¬¥­â  ¬¥­î
 */

 word_s UPR_MEN(word_s sai_ret,char *TEXT_M[],word_s NX,word_s NY,
                word_s MAXX,word_s MAXY,word_s COLM,word_s COLT,word_s nscr,byte *ind_m)
 {
   word_s i;

   request_resource(ekran,0L);
   if(screen!=nscr) set_screen(nscr);

   xl=(NX-1)*DW-4;yl=(NY-1)*DH-4;xr=(NX+MAXX-1)*DW+4;yr=(NY+MAXY-1)*DH+4;
   _setcolor(WHITE); rectangle(xl+1,yl+1,xr-1,yr-1);
   _setcolor(COLM); _rectangle( _GFILLINTERIOR, xl,yl,xr,yr);
   color_of_text_menu = COLT;
   _settextcolor(COLT);
   for(i=0;i<MAXY;i++)
          F_MENY(i,TEXT_M, NX,NY);
   if(screen!=nscr) set_screen(screen);
   release_resource(ekran);

   sai_ret= SAIMAK(sai_ret,TEXT_M,MAXY,NX,NY,COLT,nscr,ind_m);
   return(sai_ret);
 }
/* ================================================================= */

void F_MENY(word_s i,char *TEXT_M[],word_s NX,word_s NY)
{
    gprintf(NY+i,NX,TEXT_M[i]);
}
/* ================================================================= */

   word_s SAIMAK(word_s sai_ret,char *TEXT_M[],word_s MAXY,word_s NX, word_s NY,
                          word_s COLT,word_s nscr,byte *ind_m)
{ word_s COLU=MAG_BR_,y;
  word_s i,pp=0;
  word_s ind_menu[4];

 request_resource(ekran,0L);
 if(screen!=nscr) set_screen(nscr);
 _settextcolor (COLU);
 F_MENY(sai_ret,TEXT_M,NX,NY);
 if(screen!=nscr) set_screen(screen);
 release_resource(ekran);

 do
 { pp=0;
   tscr->kod = read_wpipe(scr_chn[nscr],0*HZ);

   if (ind_m!=NULL)
   {
     if (tscr->kod==Down || tscr->kod==Up || (t_kbd && (tscr->kod==End || tscr->kod==Home)))
     { n_m1[nscr]=0; time(&_ttm);
      _ttm=_ttm+(long)tscr->n_d1*3600L*24L;t_loct(&_ttm,tn);
      save_time_scr(nscr);
     }
     ind_menu[nscr]=sai_ret;
     if (tscr->kod==Down)
     {
      if (sai_ret==strlen(ind_m)-1) ind_menu[nscr]=0;
      else ind_menu[nscr]=sai_ret+1;
     }
     if (tscr->kod==Up){
      if (sai_ret==0) ind_menu[nscr]=strlen(ind_m)-1;
      else ind_menu[nscr]=sai_ret-1;
   }
   if(!t_kbd)
   {
    if (tscr->kod==End) ind_menu[nscr]=strlen(ind_m)-1;
    if (tscr->kod==Home) ind_menu[nscr]=0;
   }
   if (ind_m[ind_menu[nscr]]<200)  pp=1;
 }

   if (pp)
   {
    if (tscr->cod_str==0xFFFD)
    {
      request_resource(ekran,0L);
      if (screen!=nscr) set_screen(nscr);
      _setcolor(BLACK_);
      _rectangle(_GFILLINTERIOR,(nc_1+1)*DW,(ns_1-1)*DH,(nc_2+38)*DW,(ns_1+1)*DH);
      eprintf(BLACK_,"");
      if (screen!=nscr) set_screen(screen);
      release_resource(ekran);
    }

    if (tscr->cod_str==0xFFFD)
    {
      switch (ind_m[ind_menu[nscr]])
      {
        case 3: tscr->f_copy=2; break;
        case 2: tscr->f_copy=1; break;
        case 4: tscr->f_copy=4; break;
        case 5: tscr->f_copy=7;  time(&_ttm);
                _ttm=_ttm+(long)tscr->n_d1*3600L*24L; t_loct(&_ttm,tn);
                save_time_scr(nscr);
                break;
      }
    }
    if (tscr->cod_str==0xFFFF || tscr->cod_str==0xFFFE)
    {
        switch(ind_m[ind_menu[nscr]])
        {
          case  4: tscr->f_copy=3; break;
          case  5: tscr->f_copy=6; break;
          case 12: tscr->f_copy=5; time(&_ttm);
                   _ttm=_ttm+(long)tscr->n_d1*3600L*24L; t_loct(&_ttm,tn);
                   save_time_scr(nscr);
                   break;
          case  1: tscr->f_copy=0; time(&_ttm);
                   _ttm=_ttm+(long)tscr->n_d1*3600L*24L; t_loct(&_ttm,tn);
                   save_time_scr(nscr);
                   break;
        }
    }
    VIEW_SMEN(nscr);
   }

   else
   {
     if (tscr->kod==Down || tscr->kod==Up  || tscr->kod==ESC ||
         tscr->kod==Home || tscr->kod==End || tscr->kod==Left ||
         tscr->kod==Right)
     {
      cl_scr1(nscr);
      if ((tscr->cod_str==0xFFFF || tscr->cod_str==0xFFFE))
           tscr->f_copy=0;
      if (tscr->cod_str==0xFFFD)
      {
#if(UCHET)
         tscr->n_d1=0;
#else
         tscr->n_d1=-1;
#endif
         time(&_ttm); t_loct(&_ttm,tn); save_time_scr(nscr);}
     }
   }

   if (ind_m!=NULL){
      if (ind_m[ind_menu[nscr]]<200 && (tscr->kod==MORE || tscr->kod==LESS))
      {  tscr->cod_str=tscr->kod;
         tscr->kod=ENTER;
      }
   }
   var_obj(tscr->kod,nscr);
   if(list_func(tscr->kod)){ /* ¥á«¨ ¢ë§®¢ ¤p㣮© § ¤ ç¨ */
     request_resource(ekran,0L);
     if (screen!=nscr) set_screen(nscr);
     _setcolor(BLACK_);
     _rectangle(_GFILLINTERIOR,(nc_1+1)*DW,(ns_1-1)*DH,(nc_2+38)*DW,(ns_1+1)*DH);
     open_graph();
     if (screen!=nscr) set_screen(screen);
     release_resource(ekran);
     pr_copy[0]=pr_copy[1]=0;
     return tscr->kod;
   }

   request_resource(ekran,0L);
   if (screen!=nscr) set_screen(nscr);
   _settextcolor ( COLT);
   F_MENY(sai_ret,TEXT_M,NX,NY);
   sai_ret=jokei(sai_ret,MAXY-1,nscr);
   _settextcolor (COLU);
   F_MENY(sai_ret,TEXT_M,NX,NY);
   if (screen!=nscr) set_screen(screen);
   release_resource(ekran);
 }
 while (tscr->kod!= ESC && tscr->kod != ENTER );
 if( tscr->kod==ESC ||( tscr->kod == ENTER && !sai_ret) )
     {sai_ret=0;tscr->cod_str=tscr->kod;}
/* release_resource(ekran);*/
 return(-sai_ret);
}
/* ================================================================= */

/* ¯/¯ ®¯¥¤¥«¥­¨ï á«¥¤ãî饣® ­®¬¥  í«¥¬¥­â  ¬¥­î ¯®
    ª®¤ã ­ ¦ â®© ª« ¢¨è¨ kod;
   nom_ret -­®¬¥ ⥪ã饣® 㪠§ â¥«ï ¬¥­î;
   nom     -max ª®«¨ç¥á⢮ í«¥¬¥­â®¢ ¬¥­î ;
   DL_V    -max ª®«¨ç¥á⢮ í«¥¬¥­â®¢ ¬¥­î ¢ á␮ª¥;
   ­  ¢ë室¥ ­®¬¥ á«¥¤ãî饣® í«¥¬¥­â  ¬¥­î */

 word_s jokei (word_s nom_ret,word_s nom,word_s nscr)
 { word_s DL_V=1;

 if(tscr->kod==Up){if (nom_ret-DL_V<0)
                   {nom_ret=(nom/DL_V)*DL_V+nom_ret%DL_V;
                    if (nom_ret>nom) nom_ret=nom_ret-DL_V;
                   }else nom_ret=nom_ret-DL_V;goto m1;}
 if(tscr->kod==Down){if (nom_ret+DL_V>nom) nom_ret=nom_ret%DL_V;
                     else nom_ret =nom_ret+DL_V; goto m1;}
 if(tscr->kod==Left){if (nom_ret == 0 ) nom_ret=nom+1; nom_ret--; goto m1;}
 if(tscr->kod==Right){if (nom_ret==nom) nom_ret = -1; nom_ret ++; goto m1;}
 if(tscr->kod==Home){nom_ret=0;goto m1;}
 if(tscr->kod==End){nom_ret=nom;goto m1;}
m1:;
  return (nom_ret);
  }
/* ================================================================= */

void  SN_MENY(word_s NX,word_s NY,word_s MAXX,word_s MAXY)
 { request_resource(ekran,0L);
   _setcolor(BLACK_);
   xl=(NX-1)*DW-4;yl=(NY-1)*DH-4;
   xr=(NX+MAXX-1)*DW+4;yr=(NY+MAXY-1)*DH+4;
   _rectangle( _GFILLINTERIOR, xl,yl,xr,yr);
   release_resource(ekran);
 }

/* ******************************************************************** */
/*-------------------------------------------------------------------

double change_ed_val(double ed_val,word_s ch,word_s flag){
  switch (ch){
    case 4: if (flag) {if (ed_val<9999) ed_val=ed_val+1;}
            else
               if (ed_val>=1) ed_val=ed_val-1;
            break;
    case 3: if (flag) {if (ed_val+10<9999) ed_val=ed_val+10;}
            else
               if(ed_val>=10) ed_val=ed_val-10;
            break;
    case 2: if (flag) {if(ed_val+100<9999) ed_val=ed_val+100;}
            else
               if (ed_val>=100) ed_val=ed_val-100;
            break;
    case 1: if (flag) {if (ed_val<9000)  ed_val=ed_val+1000;}
            else      {if (ed_val>=1000) ed_val=ed_val-1000;}
            break;
    case 6: if (flag) {if (ed_val<9999.9) ed_val=ed_val+0.1;}
            else      {if (ed_val>=0.1)   ed_val=ed_val-0.1;}
            break;
    case 7: if (flag) {if (ed_val<9999.99) ed_val=ed_val+0.01;}
            else      {
                if (ed_val>=0.01) ed_val=ed_val-0.01;
                else {ed_val=0.0; sign_ed=1;}
                }
            break;
  }
  if (ed_val>9999.99) ed_val=9999.99;
  return ed_val;
}
*********************************/