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.02a / browse.c < prev    next >
C/C++ Source or Header  |  2000-04-23  |  10KB  |  355 lines

  1. /*  SeisView alone/client    Copyright (C) 1992,1998  K.Koketsu
  2.              <history>
  3.          98-11-04  Remote auxiliary files.
  4.          98-11-03  Include panel definitions and remove CR.
  5.           98-10-05  Add the hard-copy function.
  6.          96-06-19  undetermined and negative magnitudes.        */
  7.  
  8. #include  <stdio.h>
  9. #include  <string.h>
  10. #include  <ctype.h>
  11. #include  <math.h>
  12. #include  "ctlname.h"
  13. #include  "seis.h"
  14.  
  15. extern char     *iseg[10];            /* work segments for  selected events  */
  16. extern unsigned nseg;                 /* number of working segments          */
  17. extern short    nmax, nmax2;          /* maximum numbers of selected events  */
  18. extern int    itot;                               /* total # selected events */
  19. extern char   f2$[6], prn$[5], port$[7];          /* printer type etc.       */
  20. extern char   z$[11], w$[81];                     /* work string             */
  21.  
  22. /***************************** variables for panel ***************************/
  23. extern char   em$[51];                            /* error message on menu   */
  24. extern char   mc$[42][9], md$[65];                /* field strings           */
  25. extern short  isr;                                /* initial cursor position */
  26.  
  27. /**************************** variables for retrieval ***********************/
  28. extern char   so1$[4], som1$[3], so2$[4], som2$[3];
  29. extern char   sa1$[3], sam1$[3], sa2$[3], sam2$[3];
  30. extern char   sew1$[2], sew2$[2], sns1$[2], sns2$[2];
  31. extern char   y1$[5], m1$[3], d1$[3], h1$[3], n1$[3], s1$[3], t1$[3];
  32. extern char   y2$[5], m2$[3], d2$[3], h2$[3], n2$[3], s2$[3], t2$[3];
  33.  
  34. FILE  *fp;
  35. void  brosub();
  36. int   table();
  37.  
  38. /*************************** BROWSE ************** (Browse selected events.) */
  39. int browse()
  40. {
  41.     windows_menu( BROWSE );
  42.     _wide_spacing();
  43.     return( table(0, itot) );
  44. }
  45.  
  46. int table(is, itt)
  47. int   is, itt;
  48. {
  49.     short    itg, its1, nrgn, kl, lo1, lo2;
  50.     short    js, je, jt, iss, np;
  51.  
  52.     if(is==0 && itt==0)  return( 3 );
  53.  
  54.     itg = 0;  nrgn = 0;
  55.  
  56. /* BROWSE */
  57.     if(is == 0) {
  58.     iss = 0;
  59.     kl  = 19;
  60.     }
  61. /* FIND   */
  62.     else {
  63.     iss = nmax/4095;
  64.     kl  = 18;
  65.     }
  66.     if(is==1 && nmax2<=4095)  nrgn = 0;
  67.     else {
  68.     lo1 = atoi( so1$ );  lo2 = atoi( so2$ );
  69.     if(*sew1$=='E' && *sew2$=='E' && *sns1$=='N' && *sns2$=='N' &&
  70.        lo1>=125 && lo2<=148 && lo1<=lo2 &&
  71.        atoi(sa1$)>= 25 && atoi(sa2$)<= 48) {
  72.         nrgn = 1;
  73.         rbload(iseg[nseg-1],      0, "JAPAN.MES");
  74.         rbload(iseg[nseg-1], 0x2000, "JAPAN.NAM");
  75.     }
  76.     else {
  77.         nrgn = 2;
  78.         rbload(iseg[nseg-1],      0, "WORLD.MES");
  79.         rbload(iseg[nseg-1], 0x2000, "WORLD.NAM");
  80.     }
  81.     }
  82.  
  83.     its1 = itt - 1;
  84.     js   = 0;
  85.  
  86.     for(;;) {
  87.         clear( 9 );
  88.         fkey( 2 );
  89.         standend();
  90.         if((je=js+kl) > its1)  je = its1;
  91.         move(0, 4);
  92.         if(is == 0) {
  93.         printw("Request : BROWSE  for %d events from %s.", itt, f2$);
  94.     }
  95.     else {
  96.         printw("Request : MAP  for %d events from %s.", itot, f2$);
  97.         move(1, 4);
  98.         printw("          FIND BROWSE  for %d events.", itt);
  99.     }
  100.  
  101.     brosub(js, je, iss, is, 0, nrgn);
  102.     jt  = 4+is+je-js;
  103. j11:
  104.     while((np=getcchr()) == CtlE)  check_exit();
  105.     switch( np ) {
  106.         case F1: if(tcopy() == 0) show_error_message(22);
  107.                  fkey(2); goto j11;
  108.         case F3: if(is == 0) return( 0 ); else return( F3 );
  109.         case F6: if(is == 0) return( 0 ); else  return( F6 );
  110.         case F4: js = 0; break;
  111.         case F5: if((js=itt-kl-1) < 0) js = 0; break;
  112.         case F7: if((js=js -kl-1) < 0) js = 0; break;
  113.         case F8: js = js + (kl+1);
  114.              if(js > itt-1) js = itt-kl-1;
  115.              if(js < 0) js = 0;
  116.              break;
  117.         default: beep(); goto j11;
  118.         }
  119.     }
  120. }
  121.  
  122. void brosub(js, je, iss, first, n, nrgn)
  123. short  js, je, first, n, nrgn, iss;
  124. {
  125.     int       iy, imd, ihm, j, kla, klo, ipag, na, mr;
  126.     double    xx, yy, hh, sc, rm;
  127.     char      *c, yy$[5], md$[5], hm$[5];
  128.     char      *is, ns, ew;
  129.  
  130.     if(n == 0) {
  131.     wreverse();
  132.     move(1+first, 0);  clrtoeol();
  133.     itoa(js+1, w$, 10);
  134.     addstr( w$ );
  135.     move(1+first, 5);
  136.     addstr(
  137.     "Date       Time       Lon       Lat    Depth   M         Region");
  138.     standend();
  139.     }
  140.     else if(n == 1) {
  141.     lpputs(
  142.   "  Date       Time       Lon       Lat    Depth   M         Region\r\n\r\n");
  143.     }
  144.  
  145.     for(j=js ; j<=je; j++) {
  146.     ipag = j / 4095;
  147.     is = iseg[iss+ipag];
  148.     na = (j-ipag*4095)*16 + 4;
  149.     klo = peek(na+ 7,is);
  150.     if(peek(na+ 8,is) > 127) ew = 'W';  else  ew = 'E';
  151.     xx  = fabs( bin2deg(na+ 7,is) );
  152.     kla = peek(na+10,is);
  153.     if(peek(na+11,is) > 127) ns = 'S';  else  ns = 'N';
  154.     yy  = fabs( bin2deg(na+10,is) );
  155.     hh = (short)qeek(na+13,is);
  156.     iy = fnyear(na,is);
  157.     sprintf(yy$, "%4d", iy);
  158.     if(iy < 1885) hh = -1.;  else  hh = hh / 10.;
  159.     imd = peek(na+1,is)*100 + peek(na+2,is);
  160.     if(imd == 0) strcpy(md$,"    ");
  161.     else {
  162.         sprintf(md$, "%4d", imd);
  163.         while(c = strchr(md$,' '))  *c = '0';
  164.     }
  165.     ihm = peek(na+3,is)*100 + peek(na+4,is);
  166.     if(iy < 1885) strcpy(hm$,"    ");
  167.     else  {
  168.         sprintf(hm$, "%4d", ihm);
  169.         while(c = strchr(hm$,' '))  *c = '0';
  170.     }
  171.     sc = qeek(na+ 5,is) / 10.;
  172.     mr = peek(na+15,is);
  173.     if(mr == 0)  rm = -9999.;
  174.     else if(mr & 0x80)  rm = - (mr & 0x7f) / 10.;
  175.     else  rm = mr / 10.;
  176.  
  177.     if(n == 0) {
  178.         move(j-js+2+first, 0);
  179.         printw("%c  %s %s  %s", 65+j-js, yy$, md$, hm$);
  180.         if(iy >= 1885) printw(  "%5.1f", sc);  else printw("     ");
  181.         printw(" %8.3f%c %7.3f%c", xx, ew, yy, ns);
  182.         if(hh >=   0.) printw("  %5.1f", hh);  else printw("       ");
  183.         if(rm >-1000.) printw(" %4.1f", rm);  else printw("     ");
  184.         if(nrgn > 0)
  185.           printw("  %s", region(nrgn,kla,ns,klo,ew,yy,iseg[nseg-1]));
  186.     }
  187.     else if(n == 1) {
  188.         sprintf(w$, "%s %s  %s", yy$, md$, hm$);
  189.         lpputs( w$ );
  190.         if(iy >= 1885) { sprintf(w$,  "%5.1f",sc); lpputs(w$); }
  191.         else  lpputs("     ");
  192.         sprintf(w$, " %8.3f%c %7.3f%c", xx, ew, yy, ns);  lpputs( w$ );
  193.         if(hh >=   0.) { sprintf(w$,"  %5.1f",hh); lpputs(w$); }
  194.         else  lpputs("       ");
  195.         if(rm >-1000.) { sprintf(w$," %4.1f",rm); lpputs(w$); }
  196.         else  lpputs("     ");
  197.         if(nrgn > 0) {
  198.            sprintf(w$, "  %s", region(nrgn,kla,ns,klo,ew,yy,iseg[nseg-1]));
  199.            lpputs( w$ );
  200.         }
  201.         lpputs( "\r\n" );
  202.     }
  203.     else {
  204.       fprintf(fp, "%s %s  %s", yy$, md$, hm$);
  205.       if(iy >= 1885) fprintf(fp,  "%5.1f",sc);  else fprintf(fp,"     ");
  206.       fprintf(fp, " %8.3f%c %7.3f%c", xx, ew, yy, ns);
  207.       if(hh >=   0.) fprintf(fp,"  %5.1f",hh);  else fprintf(fp,"       ");
  208.       if(rm >-1000.) fprintf(fp," %4.1f",rm);  else fprintf(fp,"     ");
  209.       if(nrgn > 0)
  210.           fprintf(fp,"  %s", region(nrgn,kla,ns,klo,ew,yy,iseg[nseg-1]));
  211.       fputs("\n", fp);
  212.     }
  213.  
  214.     na = na + 16;
  215.     }
  216.  
  217.     /* Build an area for error messages. */
  218.     if(n == 0)  mvaddstr(22, 1, "--->");
  219.     
  220. }
  221.  
  222. fnyear(na, is)
  223. unsigned na;
  224. char    *is;
  225. {
  226.     int  iya;
  227.  
  228.     iya = peek(na, is);
  229.     if(iya == 255) {
  230.     iya = qeek(na+13,is);
  231.     return( iya );
  232.     }
  233.     if(iya < 0x9b)  iya = iya + 1900;
  234.     else            iya = iya + 1645;
  235.     return( iya );
  236. }
  237.  
  238. char  region_str[25];
  239. char *region(nr, kla, ns, klo, ew, yy, iwseg)
  240. int    nr, kla, klo;
  241. double yy;
  242. char   *iwseg, ns, ew;
  243. {
  244.     short  i, i0, na, lla, nla, len;
  245.     short  jrgl, jrgn, irgn, nrg;
  246.  
  247.     /* nr == 1 (Japan), 2 (World) */
  248.  
  249.     if(ns == 'S')  kla = - kla - 1;
  250.     if(ew == 'W')  klo = - klo;
  251.     na = 0;
  252.     if(nr == 2) { lla = kla;  i0 = -90;  len = 2; }
  253.     else {
  254.     if(kla<28 || kla>=46 || klo<128 || klo>=148) {
  255.         *region_str = 0;  return( region_str );
  256.     }
  257.     i0  = 0;  len = 1;
  258.     lla = (short)(yy * 1.5);
  259.     }
  260.  
  261.     irgn = 0;
  262.     for(i=i0; i<90; i++) {
  263.     nla = (char)peek(na, iwseg);
  264.     nrg = peek(na+1, iwseg);
  265.     if(lla == nla)  break;
  266.     na = na + 2 + nrg*(len+1);
  267.     }
  268.     na += 2;
  269.     for(i=1; i<=nrg; i++) {
  270.     if(len > 1)  jrgl = (short)qeek(na, iwseg);
  271.     else  jrgl = peek(na, iwseg);
  272.     jrgn = peek(na+len, iwseg);
  273.     if(klo < jrgl)  break;
  274.     irgn = jrgn;
  275.     na += (len+1);
  276.     }
  277.  
  278.     if(irgn == 0)  *region_str = 0;
  279.     else {
  280.     for(i=0; i<24; i++) {
  281.         region_str[i] = peek(i+(irgn-1)*24+0x2000, iwseg);
  282.     }
  283.     region_str[i] = 0;
  284.     }
  285.     return( region_str );
  286. }
  287.  
  288. int print()
  289. {
  290.     short  nrgn, lo1, lo2;
  291.     int    i;
  292.  
  293.     if(itot == 0)  return( 3 );
  294.     lo1 = atoi( so1$ );  lo2 = atoi( so2$ );
  295.     if(*sew1$=='E' && *sew2$=='E' && *sns1$=='N' && *sns2$=='N' &&
  296.        lo1>=125 && lo2<=148 && lo1<=lo2 &&
  297.        atoi(sa1$)>= 25 && atoi(sa2$)<= 48) {
  298.     nrgn = 1;
  299.     rbload(iseg[nseg-1],      0, "JAPAN.MES");
  300.     rbload(iseg[nseg-1], 0x2000, "JAPAN.NAM");
  301.     }
  302.     else {
  303.     nrgn = 2;
  304.     rbload(iseg[nseg-1],      0, "WORLD.MES");
  305.     rbload(iseg[nseg-1], 0x2000, "WORLD.NAM");
  306.     }
  307.  
  308.     i = panel( PRINT );
  309.     if(i==3 || i==6)  return( 0 );
  310.  
  311.     clear( 9 );
  312.     wblink();
  313.     mvaddstr(5, 20, "Now printing .....");
  314.     standend();
  315.  
  316.     lpinit();
  317.     brosub(0, itot-1, 0, 0, 1, nrgn);
  318.     lpclose();
  319.     return( 0 );
  320. }
  321.  
  322. int save()
  323. {
  324.     int  i;
  325.  
  326.     if(itot == 0)  return( 3 );
  327.     isr = 0;
  328.     *md$ = 0;
  329. j35:
  330.     i = panel( SAVE );
  331.     if(i==3 || i==6)  return( 0 );
  332.     strxcpy(w$, md$);
  333.  
  334.     fp = fopen(w$, "w");
  335.     if(fp == NULL) {
  336.     sprintf(em$, "`%s' cannot be opened.", w$);
  337.     goto j35;
  338.     }
  339.     brosub(0, itot-1, 0, 0, 2, 0);
  340.     fclose( fp );
  341.     return( 0 );
  342. }
  343.  
  344. /************************ Panel Definitions **********************/
  345. char save_pan[] = "\
  346.     Request : SAVE                                                           \
  347.     Specify options in () as you like and press Enter.                       \
  348.                                                                              \
  349.     Pathname of the file where data will be saved                            \
  350.     (                                                                  )     \
  351.          You may include a drive name like A: on Windows.                    \
  352.          Blank means a current working directory.                            \
  353.                                                                              \
  354.  6,  4, 164";
  355.