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 >
Wrap
C/C++ Source or Header
|
2000-04-23
|
10KB
|
355 lines
/* SeisView alone/client Copyright (C) 1992,1998 K.Koketsu
<history>
98-11-04 Remote auxiliary files.
98-11-03 Include panel definitions and remove CR.
98-10-05 Add the hard-copy function.
96-06-19 undetermined and negative magnitudes. */
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
#include "ctlname.h"
#include "seis.h"
extern char *iseg[10]; /* work segments for selected events */
extern unsigned nseg; /* number of working segments */
extern short nmax, nmax2; /* maximum numbers of selected events */
extern int itot; /* total # selected events */
extern char f2$[6], prn$[5], port$[7]; /* printer type etc. */
extern char z$[11], w$[81]; /* work string */
/***************************** variables for panel ***************************/
extern char em$[51]; /* error message on menu */
extern char mc$[42][9], md$[65]; /* field strings */
extern short isr; /* initial cursor position */
/**************************** variables for retrieval ***********************/
extern char so1$[4], som1$[3], so2$[4], som2$[3];
extern char sa1$[3], sam1$[3], sa2$[3], sam2$[3];
extern char sew1$[2], sew2$[2], sns1$[2], sns2$[2];
extern char y1$[5], m1$[3], d1$[3], h1$[3], n1$[3], s1$[3], t1$[3];
extern char y2$[5], m2$[3], d2$[3], h2$[3], n2$[3], s2$[3], t2$[3];
FILE *fp;
void brosub();
int table();
/*************************** BROWSE ************** (Browse selected events.) */
int browse()
{
windows_menu( BROWSE );
_wide_spacing();
return( table(0, itot) );
}
int table(is, itt)
int is, itt;
{
short itg, its1, nrgn, kl, lo1, lo2;
short js, je, jt, iss, np;
if(is==0 && itt==0) return( 3 );
itg = 0; nrgn = 0;
/* BROWSE */
if(is == 0) {
iss = 0;
kl = 19;
}
/* FIND */
else {
iss = nmax/4095;
kl = 18;
}
if(is==1 && nmax2<=4095) nrgn = 0;
else {
lo1 = atoi( so1$ ); lo2 = atoi( so2$ );
if(*sew1$=='E' && *sew2$=='E' && *sns1$=='N' && *sns2$=='N' &&
lo1>=125 && lo2<=148 && lo1<=lo2 &&
atoi(sa1$)>= 25 && atoi(sa2$)<= 48) {
nrgn = 1;
rbload(iseg[nseg-1], 0, "JAPAN.MES");
rbload(iseg[nseg-1], 0x2000, "JAPAN.NAM");
}
else {
nrgn = 2;
rbload(iseg[nseg-1], 0, "WORLD.MES");
rbload(iseg[nseg-1], 0x2000, "WORLD.NAM");
}
}
its1 = itt - 1;
js = 0;
for(;;) {
clear( 9 );
fkey( 2 );
standend();
if((je=js+kl) > its1) je = its1;
move(0, 4);
if(is == 0) {
printw("Request : BROWSE for %d events from %s.", itt, f2$);
}
else {
printw("Request : MAP for %d events from %s.", itot, f2$);
move(1, 4);
printw(" FIND BROWSE for %d events.", itt);
}
brosub(js, je, iss, is, 0, nrgn);
jt = 4+is+je-js;
j11:
while((np=getcchr()) == CtlE) check_exit();
switch( np ) {
case F1: if(tcopy() == 0) show_error_message(22);
fkey(2); goto j11;
case F3: if(is == 0) return( 0 ); else return( F3 );
case F6: if(is == 0) return( 0 ); else return( F6 );
case F4: js = 0; break;
case F5: if((js=itt-kl-1) < 0) js = 0; break;
case F7: if((js=js -kl-1) < 0) js = 0; break;
case F8: js = js + (kl+1);
if(js > itt-1) js = itt-kl-1;
if(js < 0) js = 0;
break;
default: beep(); goto j11;
}
}
}
void brosub(js, je, iss, first, n, nrgn)
short js, je, first, n, nrgn, iss;
{
int iy, imd, ihm, j, kla, klo, ipag, na, mr;
double xx, yy, hh, sc, rm;
char *c, yy$[5], md$[5], hm$[5];
char *is, ns, ew;
if(n == 0) {
wreverse();
move(1+first, 0); clrtoeol();
itoa(js+1, w$, 10);
addstr( w$ );
move(1+first, 5);
addstr(
"Date Time Lon Lat Depth M Region");
standend();
}
else if(n == 1) {
lpputs(
" Date Time Lon Lat Depth M Region\r\n\r\n");
}
for(j=js ; j<=je; j++) {
ipag = j / 4095;
is = iseg[iss+ipag];
na = (j-ipag*4095)*16 + 4;
klo = peek(na+ 7,is);
if(peek(na+ 8,is) > 127) ew = 'W'; else ew = 'E';
xx = fabs( bin2deg(na+ 7,is) );
kla = peek(na+10,is);
if(peek(na+11,is) > 127) ns = 'S'; else ns = 'N';
yy = fabs( bin2deg(na+10,is) );
hh = (short)qeek(na+13,is);
iy = fnyear(na,is);
sprintf(yy$, "%4d", iy);
if(iy < 1885) hh = -1.; else hh = hh / 10.;
imd = peek(na+1,is)*100 + peek(na+2,is);
if(imd == 0) strcpy(md$," ");
else {
sprintf(md$, "%4d", imd);
while(c = strchr(md$,' ')) *c = '0';
}
ihm = peek(na+3,is)*100 + peek(na+4,is);
if(iy < 1885) strcpy(hm$," ");
else {
sprintf(hm$, "%4d", ihm);
while(c = strchr(hm$,' ')) *c = '0';
}
sc = qeek(na+ 5,is) / 10.;
mr = peek(na+15,is);
if(mr == 0) rm = -9999.;
else if(mr & 0x80) rm = - (mr & 0x7f) / 10.;
else rm = mr / 10.;
if(n == 0) {
move(j-js+2+first, 0);
printw("%c %s %s %s", 65+j-js, yy$, md$, hm$);
if(iy >= 1885) printw( "%5.1f", sc); else printw(" ");
printw(" %8.3f%c %7.3f%c", xx, ew, yy, ns);
if(hh >= 0.) printw(" %5.1f", hh); else printw(" ");
if(rm >-1000.) printw(" %4.1f", rm); else printw(" ");
if(nrgn > 0)
printw(" %s", region(nrgn,kla,ns,klo,ew,yy,iseg[nseg-1]));
}
else if(n == 1) {
sprintf(w$, "%s %s %s", yy$, md$, hm$);
lpputs( w$ );
if(iy >= 1885) { sprintf(w$, "%5.1f",sc); lpputs(w$); }
else lpputs(" ");
sprintf(w$, " %8.3f%c %7.3f%c", xx, ew, yy, ns); lpputs( w$ );
if(hh >= 0.) { sprintf(w$," %5.1f",hh); lpputs(w$); }
else lpputs(" ");
if(rm >-1000.) { sprintf(w$," %4.1f",rm); lpputs(w$); }
else lpputs(" ");
if(nrgn > 0) {
sprintf(w$, " %s", region(nrgn,kla,ns,klo,ew,yy,iseg[nseg-1]));
lpputs( w$ );
}
lpputs( "\r\n" );
}
else {
fprintf(fp, "%s %s %s", yy$, md$, hm$);
if(iy >= 1885) fprintf(fp, "%5.1f",sc); else fprintf(fp," ");
fprintf(fp, " %8.3f%c %7.3f%c", xx, ew, yy, ns);
if(hh >= 0.) fprintf(fp," %5.1f",hh); else fprintf(fp," ");
if(rm >-1000.) fprintf(fp," %4.1f",rm); else fprintf(fp," ");
if(nrgn > 0)
fprintf(fp," %s", region(nrgn,kla,ns,klo,ew,yy,iseg[nseg-1]));
fputs("\n", fp);
}
na = na + 16;
}
/* Build an area for error messages. */
if(n == 0) mvaddstr(22, 1, "--->");
}
fnyear(na, is)
unsigned na;
char *is;
{
int iya;
iya = peek(na, is);
if(iya == 255) {
iya = qeek(na+13,is);
return( iya );
}
if(iya < 0x9b) iya = iya + 1900;
else iya = iya + 1645;
return( iya );
}
char region_str[25];
char *region(nr, kla, ns, klo, ew, yy, iwseg)
int nr, kla, klo;
double yy;
char *iwseg, ns, ew;
{
short i, i0, na, lla, nla, len;
short jrgl, jrgn, irgn, nrg;
/* nr == 1 (Japan), 2 (World) */
if(ns == 'S') kla = - kla - 1;
if(ew == 'W') klo = - klo;
na = 0;
if(nr == 2) { lla = kla; i0 = -90; len = 2; }
else {
if(kla<28 || kla>=46 || klo<128 || klo>=148) {
*region_str = 0; return( region_str );
}
i0 = 0; len = 1;
lla = (short)(yy * 1.5);
}
irgn = 0;
for(i=i0; i<90; i++) {
nla = (char)peek(na, iwseg);
nrg = peek(na+1, iwseg);
if(lla == nla) break;
na = na + 2 + nrg*(len+1);
}
na += 2;
for(i=1; i<=nrg; i++) {
if(len > 1) jrgl = (short)qeek(na, iwseg);
else jrgl = peek(na, iwseg);
jrgn = peek(na+len, iwseg);
if(klo < jrgl) break;
irgn = jrgn;
na += (len+1);
}
if(irgn == 0) *region_str = 0;
else {
for(i=0; i<24; i++) {
region_str[i] = peek(i+(irgn-1)*24+0x2000, iwseg);
}
region_str[i] = 0;
}
return( region_str );
}
int print()
{
short nrgn, lo1, lo2;
int i;
if(itot == 0) return( 3 );
lo1 = atoi( so1$ ); lo2 = atoi( so2$ );
if(*sew1$=='E' && *sew2$=='E' && *sns1$=='N' && *sns2$=='N' &&
lo1>=125 && lo2<=148 && lo1<=lo2 &&
atoi(sa1$)>= 25 && atoi(sa2$)<= 48) {
nrgn = 1;
rbload(iseg[nseg-1], 0, "JAPAN.MES");
rbload(iseg[nseg-1], 0x2000, "JAPAN.NAM");
}
else {
nrgn = 2;
rbload(iseg[nseg-1], 0, "WORLD.MES");
rbload(iseg[nseg-1], 0x2000, "WORLD.NAM");
}
i = panel( PRINT );
if(i==3 || i==6) return( 0 );
clear( 9 );
wblink();
mvaddstr(5, 20, "Now printing .....");
standend();
lpinit();
brosub(0, itot-1, 0, 0, 1, nrgn);
lpclose();
return( 0 );
}
int save()
{
int i;
if(itot == 0) return( 3 );
isr = 0;
*md$ = 0;
j35:
i = panel( SAVE );
if(i==3 || i==6) return( 0 );
strxcpy(w$, md$);
fp = fopen(w$, "w");
if(fp == NULL) {
sprintf(em$, "`%s' cannot be opened.", w$);
goto j35;
}
brosub(0, itot-1, 0, 0, 2, 0);
fclose( fp );
return( 0 );
}
/************************ Panel Definitions **********************/
char save_pan[] = "\
Request : SAVE \
Specify options in () as you like and press Enter. \
\
Pathname of the file where data will be saved \
( ) \
You may include a drive name like A: on Windows. \
Blank means a current working directory. \
\
6, 4, 164";