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 / retrv.c < prev    next >
Text File  |  1999-11-10  |  3KB  |  104 lines

  1. /*  SeisView alone/client    Copyright (C) 1992,1998  K.Koketsu
  2.              <history>
  3.          98-10-18  retrv() is again separated from `select.c'.
  4.          96-06-22  retrv() is included in `select.c'.
  5.          94-01-07  retrv() is separated form `select.c' and `seivd.c'. */
  6.  
  7. /* This is the common retrieving kernel for `select.c' and `seisvd.c'. */
  8. unsigned retrv(I, total, js1, js2)
  9. unsigned I, js1, js2;
  10. int      total;
  11. {
  12.     long     lon;
  13.     short    lat, mag, i;
  14.     unsigned pag, J, si, di;
  15.     unsigned yy, md, hm, sc, dep;
  16.     unsigned char  *b1, *b2;
  17.  
  18.     pag = total / 4095;
  19.     J   = total % 4095;
  20.     b1  = (unsigned char *)iseg[js1];
  21.     b2  = (unsigned char *)iseg[js2+pag];
  22.     if(total%4095==0 && total>0) {
  23.     poke(0xfe, 0xfff4, iseg[js2+pag-1]);
  24.     poke(0xff, 0xfff5, iseg[js2+pag-1]);
  25.     }
  26.  
  27.     di = J*16 + 4;
  28. Rvp:
  29.     si = I*16 + 4;
  30.     yy = b1[si] + (b1[si+1] << 8);
  31.     if(yy >= 0xff00) {
  32.     b2[di  ] = b1[si  ];
  33.     b2[di+1] = b1[si+1];
  34.     return( yy );
  35.     }
  36.     if(b1[si] == 0xff) {
  37.     yy = b1[si+13] + (b1[si+14] << 8);
  38.     }
  39.     else {
  40.     if(b1[si] >= 155)  yy = b1[si] + 1800 - 155;
  41.     else  yy = b1[si] + 1900;
  42.     }
  43.     if(yy >  iyy2)  goto Rv9;
  44.     if(yy == iyy2) {
  45.     md = (b1[si+1] << 8) + b1[si+2];
  46.     if(md >  imd2)  goto Rv9;
  47.     if(md == imd2) {
  48.         hm = (b1[si+3] << 8) + b1[si+4];
  49.         if(hm > ihm2)  goto Rv9;
  50.         sc = b1[si+5] + (b1[si+6] << 8);
  51.         if(hm==ihm2 && sc>isc2)  goto Rv9;
  52.     }
  53.     }
  54.  
  55.     if(yy <  iyy1)  goto Rv9;
  56.     if(yy == iyy1) {
  57.     md = (b1[si+1] << 8) + b1[si+2];
  58.     if(md <  imd1)  goto Rv9;
  59.     if(md == imd1) {
  60.         hm = (b1[si+3] << 8) + b1[si+4];
  61.         if(hm < ihm1)  goto Rv9;
  62.         sc = b1[si+5] + (b1[si+6] << 8);
  63.         if(hm==ihm1 && sc<isc1)  goto Rv9;
  64.     }
  65.     }
  66.  
  67.     lon = ((long)b1[si+7] << 8) + ((long)b1[si+8] & 0x7f);
  68.     if(b1[si+ 8] & 0x80)  lon = - lon;
  69.     if(lo2>b180 && lon<lo1)  lon = lon + b360;
  70.     if(lon<lo1 || lon>lo2)  goto Rv9;
  71.     if(lon==lo2 && b1[si+ 9]>0)  goto Rv9;
  72.     if(lon==lo1 && b1[si+ 9]>0 && lo1<0)  goto Rv9;
  73.  
  74.     lat = (b1[si+10] << 8) + (b1[si+11] & 0x7f);
  75.     if(b1[si+11] & 0x80)  lat = - lat;
  76.     if(lat<la1 || lat>la2)  goto Rv9;
  77.     if(lat==la2 && b1[si+12]>0)  goto Rv9;
  78.     if(lat==la1 && b1[si+12]>0 && la1<0)  goto Rv9;
  79.  
  80.     if(b1[si] == 0xff) {
  81.     if(*ynh$ == 'N')  goto Rv9;
  82.     }
  83.     else {
  84.     dep = b1[si+13] + (b1[si+14] << 8);
  85.     if(dep == 0xffff) { if(*ynh$ == 'N')  goto Rv9; }
  86.     else  if(dep<ih1 || dep>ih2)  goto Rv9;
  87.     }
  88.  
  89.     if(b1[si+15] == 0) {
  90.     if(*ynm$ == 'N')  goto Rv9;
  91.     }
  92.     else {
  93.     mag = b1[si+15] & 0x7f;
  94.     if(b1[si+15] & 0x80)  mag = - mag;
  95.     if(mag<m1 || mag>m2)  goto Rv9;
  96.     }
  97.     
  98.     for(i=0; i<16; i++)  b2[di+i] = b1[si+i];
  99.     return( I );
  100. Rv9:
  101.     I++;
  102.     goto Rvp;
  103. }
  104.