home *** CD-ROM | disk | FTP | other *** search
/ ftp.eri.u-tokyo.ac.jp / 2014.03.ftp.eri.u-tokyo.ac.jp.zip / ftp.eri.u-tokyo.ac.jp / pub / seisv / src / 3.02 / time.c < prev   
C/C++ Source or Header  |  1999-11-10  |  18KB  |  626 lines

  1. /*  SeisView alone/client    Copyright (C) 1992,1998  K.Koketsu
  2.              <history>
  3.          98-11-03  Include panel definitions and remove CR.
  4.          98-10-06  Some global variables are replaced by constants.
  5.          98-10-01  _setbkcolor(0) in the initialization.
  6.          98-02-25  Abandon DOS, but take Windows 95/NT.
  7.          96-01-04  fix the bug in timebar().            */
  8.  
  9. #include <stdlib.h>
  10. #include <math.h>
  11. #include "ctlname.h"
  12. #include "seis.h"
  13.  
  14. extern char     *iseg[10];            /* work segments for  selected events  */
  15. extern unsigned nseg;                 /* number of working segments          */
  16. extern int    itot;                              /* total # selected events  */
  17. extern short  isort;                             /* flag for sorting         */
  18. extern char   z$[11], w$[81];                    /*  work string             */
  19.  
  20. /***************************** variables for menu ****************************/
  21. extern char   em$[51];                            /* error message on menu   */
  22. extern char   mc$[42][9];                         /* field strings           */
  23. extern short  isr;                                /* initial cursor position */
  24.  
  25. /**************************** variables for retrieval ************************/
  26. extern char   y1$[5], m1$[3], d1$[3], h1$[3], n1$[3], s1$[6];
  27. extern char   y2$[5], m2$[3], d2$[3], h2$[3], n2$[3], s2$[6];
  28.  
  29. /**************************** variables for TIME *****************************/
  30. int    kyy1, km1, kd1, kh1, kn1;
  31. int    kyy2, km2, kd2, kh2, kn2;
  32. int    lmt[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
  33.  
  34. /**************************** variables for taxis ****************************/
  35. double st0, rt0, ut;
  36.  
  37. void   tlplot(), timbar(), itos();
  38. int    fnuruu(), nnleng();
  39.  
  40. /******************* TIME (Draw time-frequency diagram) ************/
  41. int time_seisv()
  42. {
  43.     int    i, k, jvj, jvk, jvl, jhl, jtm;
  44.     int    rv1, rv2, ir, vlen;
  45.     int    ipag, na, ly, lm, ld, lh, iu, iw;
  46.     int    ldh, kdh1, kdh2, ln;
  47.     int    nn, iv, ip, iy, im, id, ih;
  48.     char   *is;
  49.     double st1, st2, sym, sym1, sym2;
  50.     double sc1, sc2, uv, rva, rm, sc, ru;
  51.     double rly, f;
  52.  
  53.     if(itot == 0)  return( 3 );
  54.     isr = 0;
  55.     strcpy(mc$[ 0],"LNR");
  56.     strcpy(mc$[ 1],y1$);  strcpy(mc$[ 2],m1$);  strcpy(mc$[ 3],d1$);
  57.     strcpy(mc$[ 4],h1$);  strcpy(mc$[ 5],n1$);  strcpy(mc$[ 6],s1$);
  58.     strcpy(mc$[ 7],y2$);  strcpy(mc$[ 8],m2$);  strcpy(mc$[ 9],d2$);
  59.     strcpy(mc$[10],h2$);  strcpy(mc$[11],n2$);  strcpy(mc$[12],s2$);
  60.     strcpy(mc$[13],"Y");  strcpy(mc$[14],"FRQ");  strcpy(mc$[15],"LNR");
  61.     strcpy(mc$[16],"    0");
  62.     scale(0, itot, &i, &k, &ir);  itos(k, w$, 5);
  63.     strcpy(mc$[17], w$);
  64. j100:
  65.     if(panel(TIME) == 3)  return( 0 );
  66.     kyy1 = atoi(mc$[ 1]);  kyy2 = atoi(mc$[ 7]);
  67.     km1  = atoi(mc$[ 2]);  km2  = atoi(mc$[ 8]);
  68.     kd1  = atoi(mc$[ 3]);  kd2  = atoi(mc$[ 9]);
  69.     kh1  = atoi(mc$[ 4]);  kh2  = atoi(mc$[10]);
  70.     kn1  = atoi(mc$[ 5]);  kn2  = atoi(mc$[11]);
  71.     sc1  = atof(mc$[ 6]);  sc2  = atof(mc$[12]);
  72.     if(!strcmp(mc$[13],"H"))  jtm = 3;
  73.     else if(!strcmp(mc$[13],"D"))  jtm = 2;
  74.     else if(!strcmp(mc$[13],"M"))  jtm = 1;
  75.     else  jtm = 0;
  76.     rv1 = atoi(mc$[16]);  rv2 = atoi(mc$[17]);
  77.     if(!strcmp(mc$[ 0],"LOG")) jhl = 2;  else jhl = 1;
  78.     if(!strcmp(mc$[14],"MAG")) jvk = 2;  else jvk = 1;
  79.     if(!strcmp(mc$[14],"ACM")) jvj = 1;  else jvj = 0;
  80.     if(!strcmp(mc$[15],"LOG")) jvl = 2;  else jvl = 1;
  81.     if(jvk==2 && jhl==2 && jtm!=3) {
  82.         jtm = 2;  strcpy(mc$[13],"D");
  83.     }
  84.     if(jvl==2 && rv1  <0) { rv1 = 0;  strcpy(mc$[16],"    0"); }
  85.     if(jvk==1 && isort>0) {
  86.      strcpy(em$,"Frequency diagram cannot be made for data in special order.");
  87.      goto j100;
  88.     }
  89.  
  90.     clear( 0 );
  91.     _setbkcolor( 0 );
  92. j200: /* legend */
  93.     i = 24;
  94.     if(jvj == 1) { i = 1; strcpy(w$,"Accumulated "); strcpy(z$,"(ACM "); }
  95.     else         { i = 4; *w$ = 0; strcpy(z$,"("); }
  96.     if(jvk == 1) { strcat(w$,"Frequency"); strcat(z$,"FRQ)"); }
  97.     else         { strcat(w$,"Magnitude"); strcat(z$,"MAG)"); }
  98.     vprint(i, w$);
  99.     gprint(63, 1, "Time", 4);
  100.     gprint(68, 1, z$, 4);
  101.     legend3();
  102.     _setcolor( 7 );
  103.                                        /* axes */
  104.     vaxis(jvl, rv1, rv2, &ir, &uv, &rva);
  105.     vlen = (int)(YPixels - RowPixels*3.5);
  106.     if(jvk ==2) gfprint(0, vlen+1, "unknown", 5);
  107.  
  108.     st1 = fncal(kyy1, km1, kd1);
  109.     st2 = fncal(kyy2, km2, kd2);
  110.     taxis(jhl, jtm, st1, st2);
  111.  
  112.                           /* Draw bars */
  113.     if(jvk == 2) {  /* MAG */
  114.     _setcolor( 4 );
  115.     sym1 = kyy1*100.+ km1;  sym2 = kyy2*100.+ km2;
  116.     kdh1 =  kd1*100 + kh1;  kdh2 =  kd2*100 + kh2;
  117.     for(i=0; i<itot; i++) {
  118.         ipag = i / 4095;
  119.         is = iseg[ipag];
  120.         na = (i-ipag*4095)*16 + 4;
  121.         ly = fnyear(na,is);  lm = peek(na+1,is);
  122.         ld = peek(na+2,is);  lh = peek(na+3,is);
  123.         sym = ly*100. + lm;  ldh = ld*100 + lh;
  124.         if(sym>sym2 || (sym==sym2 && ldh>kdh2)) break;
  125.         if(sym>sym1 || (sym==sym1 && ldh>=kdh1)) {
  126.         rm = peek(na+15,is) / 10.;
  127.         if(jvl == 2) {
  128.             if(rm == 0.)  f = -1.;
  129.             else  f = log10(rm);
  130.         }
  131.         if((jvl==1 && rm>=rva) || (jvl==2 && f>=rva)) {
  132.             ln = peek(na+4,is);
  133.             sc = qeek(na+5,is)/10.;
  134.             if(jtm == 3)
  135.               ru = (fncal(ly,lm,ld)-st0)*24.+lh+ln/60.+sc/3600.-rt0;
  136.             else  ru = fncal(ly,lm,ld)-st0+lh/24.+ln/1440.;
  137.             if(jhl == 2)  iu = (int)(log10(ru+1)*ut);
  138.             else  iu = (int)(ru*ut);
  139.             if(rm == 0.) iw = - RowPixels/2;
  140.             else {
  141.             if(jvl == 2)  iw = (int)((log10(rm)-rva)*uv);
  142.             else  iw = (int)((rm-rva)*uv);
  143.             }
  144.             gmoveto(57+iu, vlen);  glineto(57+iu, vlen-iw);
  145.         }
  146.         }
  147.     }
  148.     }
  149.  
  150.     else {  /* FRQ */
  151.     nn = 0;  iv = 0;  ip = 0;
  152.     ly = kyy1;  lm = km1;  ld = kd1;  lh = kh1;
  153.     if(jtm == 0) {
  154.         f = fncal(kyy2,km2,kd2+1);
  155.         for(i=0; i<itot; i++) {
  156.         ipag = i / 4095;
  157.         is = iseg[ipag];
  158.         na = (i-ipag*4095)*16 + 4;
  159.         iy = fnyear(na,is);
  160.         if(iy >= kyy1) {
  161.             if(ly == iy) {
  162.             nn++;
  163.             if(i != itot-1) goto j215;
  164.             else ip = 1;
  165.             }
  166. j211:            iw = nnleng(nn, jvl, rva, uv);
  167.             if(jhl == 2) {
  168.             ru = ly - kyy1 + 1;
  169.             tlplot(ru, ut, iw, vlen);
  170.             }
  171.             else {
  172.             if(jvj == 0) {
  173.                 iu = (int)((fncal(ly,1,1)-st0) * ut);
  174.                 if((rly=fncal(ly,12,32)) > f)  rly = f;
  175.             }
  176.             else {
  177.                 iu = iv;
  178.                 if( ip )  rly = f;
  179.                 else if((rly=fncal(iy,1,1)) > f) rly = f;
  180.             }
  181.             iv = (int)((rly-st0) * ut);
  182.             timbar(jhl, iu, iv, iw, vlen);
  183.             }
  184.             ly = iy;
  185.             if(jvj == 0) nn = 1;  else nn++;
  186.             if(i==itot-1 && ip==0) { ip = 1; goto j211; }
  187.             if(ly > kyy2) break;
  188.         }
  189. j215:            continue;
  190.         }
  191.     }
  192.  
  193.     if(jtm == 1) {
  194.         f = fncal(kyy2,km2,kd2+1);
  195.         for(i=0; i<itot; i++) {
  196.         ipag = i / 4095;
  197.         is = iseg[ipag];
  198.         na = (i-ipag*4095)*16 + 4;
  199.         iy = fnyear(na,is);
  200.         im = peek(na+1,is);
  201.         if(iy>kyy1 || (iy==kyy1 && im>=km1)) {
  202.             if(ly==iy && lm==im) {
  203.             nn++;
  204.             if(i != itot-1) goto j225;  else ip = 1;
  205.             }
  206.  j221:            iw = nnleng(nn, jvl, rva, uv);
  207.             if(jhl == 2) {
  208.             ru = (ly-kyy1)*12+lm-km1+1;
  209.             tlplot(ru, ut, iw, vlen);
  210.             }
  211.             else {
  212.             if(jvj == 0) {
  213.                 iu = (int)((fncal(ly,lm,1)-st0) * ut);
  214.                 if((rly=fncal(ly,lm,lmt[lm-1]+1)) > f) rly = f;
  215.             }
  216.             else {
  217.                 iu = iv;
  218.                 if( ip )  rly = f;
  219.                 else if((rly=fncal(iy,im,1)) > f) rly = f;
  220.              }
  221.             iv = (int)((rly-st0) * ut);
  222.             timbar(jhl, iu, iv, iw, vlen);
  223.             }
  224.             ly = iy;  lm = im;
  225.             if(jvj == 0) nn = 1;  else nn++;
  226.             if(i==itot-1 && ip==0) { ip = 1;  goto j221; }
  227.             if(fncal(ly,lm,1) > fncal(kyy2,km2,1)) break;
  228.         }
  229. j225:            continue;
  230.         }
  231.     }
  232.  
  233.     if(jtm == 2) {
  234.         f = fncal(kyy2,km2,kd2+1);
  235.         for(i=0; i<itot; i++) {
  236.         ipag = i / 4095;
  237.         is = iseg[ipag];
  238.         na = (i-ipag*4095)*16 + 4;
  239.         iy = fnyear(na,is);
  240.         im = peek(na+1,is);
  241.         id = peek(na+2,is);
  242.         if(iy>kyy1 || (iy==kyy1 && im>=km1) ||
  243.            (iy==kyy1 && im==km1 && id>=kd1)) {
  244.             if(ly==iy && lm==im && ld==id) {
  245.             nn++;
  246.             if(i < itot-1) goto j235;  else ip = 1;
  247.             }
  248. j231:            iw = nnleng(nn, jvl, rva, uv);
  249.             if(jhl == 2) {
  250.             ru = fncal(ly,lm,ld) - st0+1;
  251.             tlplot(ru, ut, iw, vlen);
  252.             }
  253.             else {
  254.             if(jvj == 0) {
  255.                 iu = (int)((fncal(ly,lm,ld)-st0) * ut);
  256.                 if((rly=fncal(ly,lm,ld+1)) > f)  rly = f;
  257.             }
  258.             else {
  259.                 iu = iv;
  260.                 if( ip )  rly = f;
  261.                 else if((rly=fncal(iy,im,id)) > f) rly = f;
  262.             }
  263.             iv = (int)((rly-st0) * ut);
  264.             timbar(jhl, iu, iv, iw, vlen);
  265.             }
  266.             ly = iy;  lm = im;  ld = id;
  267.             if(jvj == 0) nn = 1;  else nn++;
  268.             if(i==itot-1 && ip==0) { ip = 1;  goto j231; }
  269.             if(fncal(ly,lm,ld) > fncal(kyy2,km2,kd2)) break;
  270.         }
  271. j235:            continue;
  272.         }
  273.     }
  274.  
  275.     if(jtm == 3) {
  276.         f  = (fncal(kyy2,km2,kd2)-st0)*24+kh2+1;
  277.         for(i=0; i<itot; i++) {
  278.         ipag = i / 4095;
  279.         is = iseg[ipag];
  280.         na = (i-ipag*4095)*16 + 4;
  281.         iy = fnyear(na,is);
  282.         im = peek(na+1,is);
  283.         id = peek(na+2,is);
  284.         ih = peek(na+3,is);
  285.         if(iy>kyy1 || (iy==kyy1 && im>=km1) ||
  286.            (iy==kyy1 && im==km1 && id>=kd1) ||
  287.            (iy==kyy1 && im==km1 && id==kd1 && ih>=kh1)) {
  288.             if(ly==iy && lm==im && ld==id && lh==ih) {
  289.             nn++;
  290.             if(i < itot-1) goto j245;  else ip = 1;
  291.             }
  292. j241:            iw = nnleng(nn, jvl, rva, uv);
  293.             if(jhl == 2) {
  294.             ru = (fncal(ly,lm,ld)-st0)*24+lh-rt0 + 1;
  295.             tlplot(ru, ut, iw, vlen);
  296.             }
  297.             else {
  298.                 if(jvj == 0) {
  299.                 iu = (int)(((fncal(ly,lm,ld)-st0)*24+lh-rt0) * ut);
  300.                 if((rly=(fncal(ly,lm,ld)-st0)*24+lh+1)>f) rly = f;
  301.             }
  302.             else {
  303.                 iu = iv;
  304.                 if( ip )  rly = f;
  305.                 else if((rly=(fncal(iy,im,id)-st0)*24+ih)>f) rly=f;
  306.             }
  307.             iv = (int)((rly-rt0)*ut);
  308.             timbar(jhl, iu, iv, iw, vlen);
  309.             }
  310.             ly = iy;  lm = im;  ld = id;  lh = ih;
  311.             if(jvj == 0) nn = 1;  else nn++;
  312.             if(i==itot-1 && ip==0) { ip = 1; goto j241; }
  313.             if(fncal(ly,lm,ld)*24+lh>fncal(kyy2,km2,kd2)*24+kh2) break;
  314.         }
  315. j245:            continue;
  316.         }
  317.     }
  318.     }
  319.  
  320.     k = fgkey(0, 1);
  321.     if(k==-1 || k==F1)  goto j200;
  322.     else if(k == F3)  return( 0 );
  323.     else  goto j100;
  324. }
  325.  
  326. int nnleng(nn, jvl, rva, uv)
  327. int    nn, jvl;
  328. double rva, uv;
  329. {
  330.     double f;
  331.  
  332.     if(nn == 0) return( 0 );
  333.     if(jvl == 2) {
  334.     f = nn;
  335.     return( (int)((log10(f)-rva)*uv) );
  336.     }
  337.     else  return( (int)((nn-rva)*uv) );
  338. }
  339.  
  340. void tlplot(ru, ut, iw, vlen)   /* log time plot */
  341. double ru, ut;
  342. int    iw, vlen;
  343. {
  344.     int  iv;
  345.     iv = (int)(log10(ru) * ut);
  346.     gmoveto(57+iv-6, vlen-iw);  glineto(57+iv+6, vlen-iw);
  347.     gmoveto(57+iv, vlen-iw-6);  glineto(57+iv, vlen-iw+6);
  348. }
  349.  
  350. void timbar(jhl, iu, iv, iw, vlen)
  351. int    jhl, iu, iv, iw, vlen;
  352. {
  353.     if(jhl == 2) {
  354.     gmoveto(57+iu, vlen); glineto(57+iv, vlen-iw);
  355.     }
  356.     else {
  357. /*     gbox(0, 57+iu, vlen, 57+iv, vlen-iw); (94-01-04) */
  358.     gbox(0, 57+iu, vlen-iw, 57+iv, vlen);
  359.     }
  360. }
  361.  
  362. double fncal(i, j, k)
  363. int  i, j, k;
  364. {
  365.     int    icy, icm, isy;
  366.     double rcc;
  367.  
  368.     if(i < 1900) { rcc = 0.; isy = 700; }
  369.     else  { rcc = 438300.; isy = 1900; }
  370.     for(icy=isy; icy<i; icy++) {
  371.     if(fnuruu(icy)) rcc = rcc + 366;  else rcc = rcc + 365;
  372.     }
  373.     rcc = rcc + k;
  374.     if(j < 2) return( rcc );
  375.     for(icm=1; icm<j; icm++) {
  376.     rcc = rcc + lmt[icm-1];
  377.     if(icm==2 && fnuruu(i))  rcc = rcc + 1;
  378.     }
  379.     return( rcc );
  380. }
  381.  
  382. void fnlac(days, icy, icm, icd)
  383. double days;
  384. int   *icy, *icm, *icd;
  385. {
  386.     int  i, kcp, icb;
  387.  
  388.     for(i=700; i<=2000; i++) {
  389.     if(fnuruu(i)) kcp = 366;  else kcp = 365;
  390.     if((days-=kcp) <= 0.)  break;
  391.     }
  392.     *icy = i;
  393.     icb = (int)(days + kcp);
  394.     for(i=1; i<=12; i++) {
  395.     kcp = lmt[i-1];
  396.     if(i==2 && fnuruu(*icy))  kcp++;
  397.     if((icb-=kcp) <= 0.)  break;
  398.     }
  399.     *icm = i;
  400.     *icd = icb + kcp;
  401. }
  402.  
  403. int fnuruu( i )
  404. int  i;
  405. {
  406.     if(i%  4 != 0)  return( 0 );
  407.     if(i%400 != 0)  return( 1 );
  408.     if(i%100 != 0)  return( 0 );
  409.     return( 1 );
  410. }
  411.  
  412. void taxis(iz, jtm, st1, st2)
  413. int   iz, jtm;
  414. double st1, st2;
  415. {
  416.     int    itn, iun, ib, vlen, vle2, xorg, svn;
  417.     int    lyy, lmm, ldd, lhh, lyz, lmz, ldz;
  418.     int    i, j, k, ihr, iday, rsb;
  419.     double stn, rtb;
  420.     double f, days, rt1, rt2;
  421.  
  422.     _setcolor( 7 );
  423.     vlen = (int)(YPixels - RowPixels*3.5);
  424.     xorg = 41;
  425.     gmoveto(xorg, vlen);
  426.     glineto( 490, vlen);
  427.     xorg += RowPixels;
  428.     vle2  = (int)(vlen + RowPixels*0.5);
  429.  
  430.     if(iz == 1) {          /* LNR */
  431.     if(jtm == 0) {
  432.         itn = kyy2+1 - kyy1;
  433.         if((iun=itn/8) < 1)  iun = 1;
  434.         st0 = fncal(kyy1,1,1);
  435.         ut  = 418./(st2+1-st0);
  436.         for(i=0; i<=itn; i+=iun) {
  437.         ib = (int)(xorg + (fncal(kyy1+i,1,1)-st0)*ut);
  438.         gmoveto(ib, vlen);  glineto(ib, vle2);
  439.         itoa(kyy1+i, w$, 10);
  440.         k = _gettextextent( w$ ) / 2;
  441.         gfprint(ib-k, vle2+2, w$, 7);
  442.         }
  443.     }
  444.     else if(jtm == 1) {
  445.         stn = (kyy2-kyy1)*12. + km2+1. - km1;
  446.         if((svn=(int)(stn/8.)) < 1)  svn = 1;
  447.         st0 = fncal(kyy1,km1,1);
  448.         ut  = 418/(st2+1-st0);
  449.         lyy = kyy1;  lmm = km1;  lyz = -1;
  450.         for(f=0.; f<=stn; f+=svn) {
  451.         ib = (int)(xorg + (fncal(lyy,lmm,1)-st0)*ut);
  452.         gmoveto(ib, vlen);  glineto(ib, vle2);
  453.         itoa(lmm, w$, 10);
  454.         k = _gettextextent( w$ ) / 2;
  455.         gfprint(ib-k, vle2+2, w$, 7);
  456.         if(lyy != lyz) {
  457.             itoa(lyy, w$, 10);
  458.             gfprint(ib-k, vle2+RowPixels, w$, 7);
  459.         }
  460.         lyz = lyy;
  461.         lmm = lmm + svn;
  462.             while(lmm > 12) { lmm -= 12; lyy++; }
  463.         }
  464.     }
  465.     else if(jtm == 2) {
  466.         stn = fncal(kyy2,km2,kd2)-fncal(kyy1,km1,kd1)+1;
  467.         if((svn=(int)(stn/8.)) < 1)  svn = 1;
  468.         st0 = fncal(kyy1,km1,kd1);
  469.         ut  = 418/(st2+1-st0);
  470.         lyy = kyy1; lmm = km1; ldd = kd1; lyz = -1; lmz = -1;
  471.         for(f=0.; f<=stn; f+=svn) {
  472.         ib = (int)(xorg + (fncal(lyy,lmm,ldd)-st0)*ut);
  473.         if(lmm == lmz)  goto j1337;
  474.         if(lyy == lyz)  goto j1410;
  475.         strcat(itoa(lyy,w$,10), "/");
  476.         strcat(w$, itoa(lmm,z$,10));
  477.         k = _gettextextent( w$ ) / 2;
  478.         gfprint(ib-k, vle2+RowPixels, w$, 7);
  479.         lyz = lyy;
  480.         goto j1337;
  481. j1410:        itoa(lmm, w$, 10);
  482.         k = _gettextextent( w$ ) / 2;
  483.         gfprint(ib-k, vle2+RowPixels, w$, 7);
  484. j1337:        gmoveto(ib, vlen);  glineto(ib, vle2);
  485.         itoa(ldd, w$, 10);
  486.         k = _gettextextent( w$ ) / 2;
  487.         gfprint(ib-k, vle2, w$, 7);
  488.         lmz = lmm;
  489.         days = st0 + f;
  490.         fnlac(days, &lyy, &lmm, &ldd);
  491.         }
  492.     }
  493.     else {
  494.         stn = (fncal(kyy2,km2,kd2)-fncal(kyy1,km1,kd1))*24 + kh2+1-kh1;
  495.         if((svn=(int)(stn/8.)) < 1)  svn = 1;
  496.         rt0 = kh1;
  497.         rt1 = kh1 + kn1/60.;
  498.         rt2 = kh2 + kn2/60.;
  499.         st0 = fncal(kyy1,km1,kd1);
  500.         ut  = 418/((st2-st0)*24.+rt2+1-rt0);
  501.         lmm = km1; ldd = kd1; lhh = kh1; lmz = -1; ldz = -1;
  502.         for(f=0.; f<=stn; f+=svn) {
  503.         ib = 57 + (int)(((fncal(kyy1,lmm,ldd)-st0)*24.+lhh-rt0)*ut);
  504.         if(ldd == ldz)  goto j1347;
  505.         if(lmm == lmz)  goto j1420;
  506.         strcat(itoa(lmm,w$,10), "/");
  507.         strcat(w$, itoa(ldd,z$,10));
  508.         k = _gettextextent( w$ ) / 2;
  509.         gfprint(ib-k, vle2+RowPixels, w$, 7);
  510.         lmz = lmm;  goto j1347;
  511. j1420:        itoa(ldd, w$, 10);
  512.         k = _gettextextent( w$ ) / 2;
  513.         gfprint(ib-k, vle2+RowPixels, w$, 7);
  514. j1347:        gmoveto(ib, vlen);  glineto(ib, vle2);
  515.         itoa(lhh, w$, 10);
  516.         k = _gettextextent( w$ ) / 2;
  517.         gfprint(ib-k, vle2, w$, 7);
  518.         ldz = ldd;
  519.         iday = (int)(f / 24.);
  520.         ihr  = (int)(f - iday*24);
  521.         lhh  = kh1 + ihr;
  522.             if(lhh > 23) { iday++; lhh -= 24; }
  523.         days = st0 + iday;
  524.         fnlac(days, &lyy, &lmm, &ldd);
  525.         }
  526.     }
  527.     _setcolor( 3 );
  528.     if(jtm == 3) ib = 57 + (int)(((st1-st0)*24.+rt1-rt0)*ut);
  529.     else         ib = 57 + (int)((st1-st0)*ut);
  530.     gmoveto(ib, vlen);  glineto(ib, vle2);
  531.     if(jtm == 3) ib = 57 + (int)(((st2-st0)*24.+rt2+1-rt0)*ut);
  532.     else         ib = 57 + (int)((st2+1-st0)*ut);
  533.     gmoveto(ib, vlen);  glineto(ib, vle2);
  534.     }
  535.  
  536.     else {     /* LOG */
  537.     st1 = 1;
  538.     switch( jtm ) {
  539.         case 0: st0 = fncal(kyy1,1,1);
  540.                 st2 = kyy2-kyy1+1;
  541.                 break;
  542.         case 1: st0 = fncal(kyy1,km1,1);
  543.                 st2 = (kyy2-kyy1)*12+km2+1-km1;
  544.                 break;
  545.         case 2: st0 = fncal(kyy1,km1,kd1);
  546.                 st2 = fncal(kyy2,km2,kd2)-fncal(kyy1,km1,kd1)+1;
  547.                 break;
  548.         case 3: st0 = fncal(kyy1,km1,kd1); rt0 = kh1;
  549.                 st2 = (fncal(kyy2,km2,kd2)-
  550.                fncal(kyy1,km1,kd1))*24 + kh2+1-kh1;
  551.                 break;
  552.     }
  553.     i = (int)st1;  j = (int)st2;
  554.     scale(i, j, &i, &rsb, &j);
  555.     f = rsb;
  556.     rtb = log10(f);  ut = 418/rtb;
  557.  
  558.     _setcolor( 7 );
  559.     j = 1;
  560.     for(i=0; i<5; i++) {
  561.         if(i > rsb) break;
  562.         ib = 57 + (int)(i*ut);
  563.         gmoveto(ib, vlen);  glineto(ib, vle2);
  564.         itoa(j, w$, 10);
  565.         k = _gettextextent( w$ ) / 2;
  566.         gfprint(ib-k, vle2, w$, 7);
  567.         j = j * 10;
  568.     }
  569.     _setcolor( 3 );
  570.     gmoveto(57, vlen);  glineto(57, vle2);
  571.     ib = 57 + (int)(log10(st2)*ut);
  572.     gmoveto(ib, vlen);  glineto(ib, vle2);
  573.     i = (int)st2;  itoa(i, w$, 10);
  574.     k = _gettextextent( w$ ) / 2;
  575.     gfprint(ib-k, vle2, w$, 3);
  576.     }
  577. }
  578.  
  579. void itos(i, s, len)
  580. int  i, len;
  581. char *s;
  582. {
  583.     int  j;  char  t[11];
  584.     itoa(i, t, 10);
  585.     if((int)strlen(t) < len) {
  586.     for(j=0; j<len-(int)strlen(t); j++)  s[j] = ' ';
  587.     s[j] = 0;
  588.     }
  589.     else  *s = 0;
  590.     strcat(s, t);
  591. }
  592.  
  593. /************************ Panel Definitions **********************/
  594. char time_pan[] = "\
  595.     Request : TIME                                                           \
  596.     Specify attributes of the coordinates in () as you like and press Enter. \
  597.           X-Axis :  Item       < TIME >                                      \
  598.                     Scaling    (     ) <--- LNR/LOG(Linear/Logarithmic)      \
  599.                     From       (      /    /    ) (    :    :       )        \
  600.                     To         (      /    /    ) (    :    :       )        \
  601.                     Tick Unit  (   )   <--- Y/M/D/H(Year/Month/Day/Hour)     \
  602.           Y-Axis :  Item       (     ) <--- FRQ/ACM/MAG                      \
  603.                                            (Frequency/Accumulated/Magnitude) \
  604.                     Scaling    (     ) <--- LNR/LOG(Linear/Logarithmic)      \
  605.                     Y1         (       )                                     \
  606.                     Y2         (       )                                     \
  607.                                                                              \
  608. 33,  3,  3 \
  609. 33,  4,  4 \
  610. 40,  4,  2 \
  611. 45,  4,  2 \
  612. 52,  4,  2 \
  613. 57,  4,  2 \
  614. 62,  4,  5 \
  615. 33,  5,  4 \
  616. 40,  5,  2 \
  617. 45,  5,  2 \
  618. 52,  5,  2 \
  619. 57,  5,  2 \
  620. 62,  5,  5 \
  621. 33,  6,  1 \
  622. 33,  7,  3 \
  623. 33,  9,  3 \
  624. 33, 10,  5 \
  625. 33, 11,  5 ";
  626.