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 / 2.01 / retrv.c < prev    next >
Text File  |  1994-01-08  |  3KB  |  111 lines

  1. /*  SeisView alone/client    Copyright (C) 1992,1994  K.Koketsu */
  2.  
  3. /* This is the common retrieving kernel for `select.c' and `seisvd.c'. */
  4. unsigned retrv(ismap, total, tomax, js1, js2)
  5. int      *total, ismap;
  6. short     tomax;
  7. unsigned js1, js2;
  8. {
  9.     long      lon;
  10.     short     lat, mag, i;
  11.     unsigned  I, J, pag, si, yy, md, hm, sc, dep;
  12.     unsigned char  *sg1, *sg2;
  13.  
  14.     I   = 0;
  15.     J   = *total % 4095;
  16.     pag = *total / 4095;
  17.     sg1 = (unsigned char *)iseg[js1];
  18.     sg2 = (unsigned char *)iseg[js2+pag] + 4;
  19.  
  20. Rvp:
  21.     si = I*16 + 4;
  22.     yy = sg1[si] + (sg1[si+1] << 8);
  23.     if(yy >= 0xff00) {
  24.     sg2[J*16  ] = sg1[si  ];
  25.     sg2[J*16+1] = sg1[si+1];
  26.         /* A dummy function is necessary in select.c. */
  27.     send_client(sg2, J);
  28.     return( yy );
  29.     }
  30.     if(sg1[si] == 0xff) {
  31.     yy = sg1[si+13] + (sg1[si+14] << 8);
  32.     }
  33.     else {
  34.     if(sg1[si] >= 155)  yy = sg1[si] + 1800 - 155;
  35.     else  yy = sg1[si] + 1900;
  36.     }
  37.     if(yy >  iyy2)  goto Rv9;
  38.     if(yy == iyy2) {
  39.     md = (sg1[si+1] << 8) + sg1[si+2];
  40.     if(md >  imd2)  goto Rv9;
  41.     if(md == imd2) {
  42.         hm = (sg1[si+3] << 8) + sg1[si+4];
  43.         if(hm > ihm2)  goto Rv9;
  44.         sc = sg1[si+5] + (sg1[si+6] << 8);
  45.         if(hm==ihm2 && sc>isc2)  goto Rv9;
  46.     }
  47.     }
  48.  
  49.     if(yy <  iyy1)  goto Rv9;
  50.     if(yy == iyy1) {
  51.     md = (sg1[si+1] << 8) + sg1[si+2];
  52.     if(md <  imd1)  goto Rv9;
  53.     if(md == imd1) {
  54.         hm = (sg1[si+3] << 8) + sg1[si+4];
  55.         if(hm < ihm1)  goto Rv9;
  56.         sc = sg1[si+5] + (sg1[si+6] << 8);
  57.         if(hm==ihm1 && sc<isc1)  goto Rv9;
  58.     }
  59.     }
  60.  
  61.     if(sg1[si+ 8] & 0x80)
  62.       lon = - (((long)sg1[si+7] << 8) + ((long)sg1[si+8] & 0x7f));
  63.     else  lon = ((long)sg1[si+ 7] << 8) + (long)sg1[si+ 8];
  64.     if(wrap && lon<lo1) { lon = lon + (long)360*256; }
  65.     if(lon<lo1 || lon>lo2)  goto Rv9;
  66.     if(lon==lo2 && sg1[si+ 9]>0)  goto Rv9;
  67.     if(lon==lo1 && sg1[si+ 9]>0 && lo1<0)  goto Rv9;
  68.  
  69.     if(sg1[si+11] & 0x80)  lat = - ((sg1[si+10] << 8) + (sg1[si+11] & 0x7f));
  70.     else  lat = (sg1[si+10] << 8) + sg1[si+11];
  71.     if(lat<la1 || lat>la2)  goto Rv9;
  72.     if(lat==la2 && sg1[si+12]>0)  goto Rv9;
  73.     if(lat==la1 && sg1[si+12]>0 && la1<0)  goto Rv9;
  74.  
  75.     if(sg1[si] == 0xff) {
  76.     if(*ynh$ == 'N')  goto Rv9;
  77.     }
  78.     else {
  79.     dep = sg1[si+13] + (sg1[si+14] << 8);
  80.     if(dep == 0xffff) { if(*ynh$ == 'N')  goto Rv9; }
  81.     else  if(dep<ih1 || dep>ih2)  goto Rv9;
  82.     }
  83.  
  84.     if(sg1[si+15] == 0) {
  85.     if(*ynm$ == 'N')  goto Rv9;
  86.     }
  87.     else {
  88.     if(sg1[si+15] & 0x80)  mag = -(sg1[si+15] & 0x7f);
  89.     else  mag = sg1[si+15];
  90.     if(mag<m1 || mag>m2)  goto Rv9;
  91.     }
  92.  
  93.     if( ismap ) { if(! checkpixel(si,js1))  goto Rv9; }
  94.  
  95.     for(i=0; i<16; i++)  sg2[J*16+i] = sg1[si+i];
  96.     (*total)++;
  97.     J++;
  98.         /* The following part is meaningless in seisvd.c, but a very large
  99.        value should be given. */
  100.     if(*total == tomax)  return( 0xffff );
  101.     if(J == 4095) {
  102.     sg2[J*16  ] = 0xfe;
  103.     sg2[J*16+1] = 0xff;
  104.     J = 0;  pag++;
  105.     sg2 = (unsigned char *)iseg[js2+pag] + 4;
  106.     }
  107. Rv9:
  108.     I++;
  109.     goto Rvp;
  110. }
  111.