18 extern unsigned long mmap[16];
28 void display_data(
char *hb5,
char *pc,
int dmonth,
int dday,
int dyear,
int dhour,
29 int ddays,
char *
fname)
76 etime.
year=gmtim->tm_year+1900;
77 etime.
month=gmtim->tm_mon+1;
78 etime.
day=gmtim->tm_mday;
79 etime.
hour=gmtim->tm_hour;
91 int j,inum,
i,ier,ierr,qflow,len,
k;
92 char *
text,
buf[300],sbuf[150],hbuf[10];
98 XmString cancel,file_string,print_string;
117 file_string=XmStringCreateLocalized(
"file");
118 print_string=XmStringCreateLocalized(
"print");
119 cancel=XmStringCreateLocalized(
"quit");
142 XtSetArg(
args[argcount],XmNdeleteResponse,XmDO_NOTHING);argcount++;
148 XmDIALOG_OK_BUTTON));
150 XmDIALOG_HELP_BUTTON));
152 XmDIALOG_CANCEL_BUTTON));
154 XmDIALOG_SEPARATOR));
159 XtSetArg(
args[argcount],XmNbackground,0);argcount++;
166 XtSetArg(
args[argcount],XmNbackground,
mmap[1]);argcount++;
167 XtSetArg(
args[argcount],XmNforeground,
mmap[0]);argcount++;
174 XtSetArg(
args[argcount],XmNresizePolicy,XmRESIZE_ANY);argcount++;
175 XtSetArg(
args[argcount],XmNbackground,0);argcount++;
186 sprintf(sbuf,
"get_data %s %s %d %d %d %d %d %s",
201 fread(&inum,
sizeof(
int),1,
fp);
206 fread(&ier,
sizeof(
int),1,
fp);
258 sprintf(sbuf,
"get_data %s %s %d %d %d %d %d %s",
271 fread(&inum,
sizeof(
int),1,
fp);
277 fread(&ier,
sizeof(
int),1,
fp);
287 memcpy(&
save_rec[
j].pparm,
"SWIRMZZ\0\0\0",10);
313 else if(strncmp(pc,
"HGIR",4)==0 ||
314 strncmp(pc,
"QRIR",4)==0){
318 sprintf(sbuf,
"get_data %s %s %d %d %d %d %d %s",
331 fread(&inum,
sizeof(
int),1,
fp);
337 fread(&ier,
sizeof(
int),1,
fp);
347 memcpy(&
save_rec[
j].pparm,
"QRIPAZZ\0\0\0",10);
373 else if(strncmp(pc,
"QII",3)==0){
377 sprintf(sbuf,
"get_data %s %s %d %d %d %d %d %s",
390 fread(&inum,
sizeof(
int),1,
fp);
396 fread(&ier,
sizeof(
int),1,
fp);
406 memcpy(&
save_rec[
j].pparm,
"QIIPAZZ\0\0\0",10);
435 items[0].
label=
"Quit";
447 items[jj].
label=
"Linear stage";
450 items[jj].
label=
"Linear flow";
458 items[jj].
label=
"Scale to data";
461 items[jj].
label=
"Scale to flood";
469 items[jj].
label=
"Simulated flow off";
473 items[jj].
label=
"Simulated flow on";
481 items[jj].
label=
"Snow plot off";
485 items[jj].
label=
"Snow plot on";
491 items[jj].
label=NULL;
518 XmStringFree(file_string);
519 XmStringFree(print_string);
520 XmStringFree(cancel);
539 int xparm1,yparm1,xparm2,yparm2;
542 time_t lbtim,letim,
stim,otim;
543 char abuf[100],tbuf[100];
548 int deltat,
i,text_width,
j,h,qflag,ier;
550 float fxvalue,fyvalue,svalue,dxvalue;
551 int maxv,minv,smaxv,sminv,dvalue;
552 int xvalue,oday,yvalue,xvalue1,yvalue1,totlin,totdays,
hour,ierr,flow,ilinear;
554 char buf[200],ubuf[50],xbuf[50];
555 int inum,merr,ybegin,len;
557 double stage,wrn,fld,abs1,abs2;
563 int line_width,line_style,cap_style,join_style,lines;
597 XSetClipRectangles(
display,
gc1,0,0,rect,1,Unsorted);
675 strcpy(
buf,
"NO DATA");
711 lbtim=
ouptime(tm.tm_year,tm.tm_mon,tm.tm_mday,tm.tm_hour,tm.tm_min,0);
720 letim=
ouptime(tm.tm_year,tm.tm_mon,tm.tm_mday,tm.tm_hour,tm.tm_min,0);
726 totlin=(lbtim-letim)/(24L*3600L)+1;
728 totyears=(lbtim-letim)/(24L*3600L*365L)+1;
759 maxtimes=(lbtim-letim)/(deltat*3600L);
761 totdays=(lbtim-letim)/(24L*3600L)+1;
763 totlin=totdays*24/deltat+4;
772 for(
i=0;
i<=totlin;
i++) {
774 stim=letim+((
i-4)*deltat*3600L) +
hour*3600L;
781 if(xvalue >
width-xparm1)
784 if(xvalue < xs+xparm1)
791 if(gm->tm_mday==1 && gm->tm_mon==0) {
797 sprintf(
buf,
"%d/%d",gm->tm_mon+1,gm->tm_year);
809 else if(gm->tm_mday==1 && totyears < 2) {
828 if(oday != gm->tm_mday) {
830 if(gm->tm_hour==0 || htflag==1) {
832 sprintf(
buf,
"%d/%d",gm->tm_mon+1,gm->tm_mday);
849 if(h==0 || h==2 || h==4 || h==6 || h==8 ||
850 h==10 || h==12 || h==14 || h==16 ||
851 h==18 || h==20 || h==22)
856 else if(deltat==3 && totdays <= 2) {
859 if(h==0 || h==3 || h==6 || h==9 || h==12 ||
860 h==15 || h==18 || h==21)
867 if(h==0 || h==6 || h==12 || h==18)
879 else if(deltat==24) {
951 if(ierr >= 0 && ierr <= 2)
982 values[0].zdate,(
double)minv,
986 values[0].zdate,(
double)maxv,
989 if(ierr == 3 || merr == 3) {
1001 maxvalues=(maxv-minv)/(deltav);
1005 for(
i=0;
i<=maxvalues+2;
i++) {
1007 svalue=(float)minv+(
i*deltav);
1009 (float)(svalue-minv);
1012 if(yvalue < ys+yparm1 || yvalue >
height-yparm2)
1025 width-xparm1,yvalue);
1027 if(ilinear==0 || (ilinear==1 &&
1033 xvalue=
width-xparm1+2;
1045 xvalue=xs+xparm1-text_width;
1061 if(ilinear==0 || (ilinear==1 &&
1065 values[0].zdate,(
double)svalue,
1085 xvalue=
width-xparm1+2;
1093 xvalue=xs+xparm1-text_width;
1109 line_style=LineOnOffDash;
1111 join_style=JoinRound;
1113 XSetLineAttributes(
display,
gc1,line_width,line_style,
1114 cap_style,join_style);
1139 if(yvalue > ys+yparm1 &&
1142 width-xparm1,yvalue);
1173 line_style=LineOnOffDash;
1175 join_style=JoinRound;
1177 XSetLineAttributes(
display,
gc1,line_width,line_style,
1178 cap_style,join_style);
1180 if(yvalue > ys+yparm1 &&
1183 width-xparm1,yvalue);
1212 if(yvalue > ys+yparm1 &&
1215 width-xparm1,yvalue);
1221 line_style=LineSolid;
1223 join_style=JoinRound;
1225 XSetLineAttributes(
display,
gc1,line_width,line_style,
1226 cap_style,join_style);
1244 for(
i=0;
i<len;
i++) {
1251 yvalue,xbuf,strlen(xbuf));
1276 for(
i=0;
i<len;
i++) {
1283 yvalue,xbuf,strlen(xbuf));
1293 for(
i=0;
i<inum;
i++) {
1295 tm.tm_year=
values[
i].zdate/10000-1900;
1296 tm.tm_mon=(
values[
i].zdate-(tm.tm_year+1900)*10000)/100;
1297 tm.tm_mday=
values[
i].zdate-(tm.tm_year+1900)*10000-tm.tm_mon*100;
1298 tm.tm_hour=
values[
i].ztime/10000;
1299 tm.tm_min=(
values[
i].ztime-tm.tm_hour*10000)/100;
1301 tm.tm_mon=tm.tm_mon;
1302 stim=
ouptime(tm.tm_year+1900,tm.tm_mon,tm.tm_mday,
1303 tm.tm_hour,tm.tm_min,0);
1306 (float)(letim-
stim);
1311 (float)(svalue-minv);
1317 dxvalue=-(float)(
xmax-
xmin)/(float)(letim-lbtim)*
1325 if(
ymax - yvalue == 0 &&
i > 0) {
1328 if(oqual ==
'S' || oqual ==
'V' ||
1329 oqual ==
'A' || oqual ==
'B')
1332 else if(oqual ==
'F' || oqual ==
'X')
1335 else if(oqual ==
'D' || oqual ==
'E' || oqual==
'O')
1338 else if(oqual ==
'Q' || oqual ==
'C' )
1354 else if(oqual ==
'S' || oqual ==
'V' ||
1355 oqual ==
'A' || oqual ==
'B')
1358 else if(oqual ==
'F' || oqual ==
'X')
1361 else if(oqual ==
'D' || oqual ==
'E' || oqual==
'O')
1364 else if(oqual ==
'Q' || oqual ==
'C' )
1372 if(xvalue >= oxvalue)
1378 xvalue-dvalue,yvalue,
1379 dvalue-1,
ymax-yvalue+1);
1381 oxvalue=xvalue-dvalue;
1396 for(
i=0;
i<inum;
i++) {
1398 tm.tm_year=
values[
i].zdate/10000-1900;
1399 tm.tm_mon=(
values[
i].zdate-(tm.tm_year+1900)*10000)/100;
1400 tm.tm_mday=
values[
i].zdate-(tm.tm_year+1900)*10000-tm.tm_mon*100;
1401 tm.tm_hour=
values[
i].ztime/10000;
1402 tm.tm_min=(
values[
i].ztime-tm.tm_hour*10000)/100;
1404 tm.tm_mon=tm.tm_mon;
1405 stim=
ouptime(tm.tm_year+1900,tm.tm_mon,tm.tm_mday,tm.tm_hour,tm.tm_min,0);
1408 (float)(letim-
stim);
1419 svalue=(double)flow;
1424 (float)(svalue-minv);
1429 if(oqual ==
'S' || oqual ==
'V' ||
1430 oqual ==
'A' || oqual ==
'B')
1433 else if(oqual ==
'F' || oqual ==
'X')
1436 else if(oqual ==
'D' || oqual ==
'E' || oqual==
'O')
1439 else if(oqual ==
'Q' || oqual ==
'C' )
1447 if(otim-
stim < 7200L)
1474 for(
i=0;
i<qnum;
i++) {
1476 tm.tm_year=qalues[
i].
zdate/10000-1900;
1477 tm.tm_mon=(qalues[
i].
zdate-(tm.tm_year+1900)*10000)/100;
1478 tm.tm_mday=qalues[
i].
zdate-(tm.tm_year+1900)*10000-tm.tm_mon*100;
1479 tm.tm_hour=qalues[
i].
ztime/10000;
1480 tm.tm_min=(qalues[
i].
ztime-tm.tm_hour*10000)/100;
1482 tm.tm_mon=tm.tm_mon;
1483 stim=
ouptime(tm.tm_year+1900,tm.tm_mon,tm.tm_mday,
1484 tm.tm_hour,tm.tm_min,0);
1487 (float)(letim-
stim);
1492 (float)(svalue-minv);
1497 dxvalue=-(float)(
xmax-
xmin)/(float)(letim-lbtim)*
1505 if(
ymax - yvalue == 0 &&
i > 0) {
1507 if(oqual !=
'S' && oqual !=
'V')
1527 xvalue-dvalue,yvalue,
1528 dvalue-1,
ymax-yvalue+1);
1535 oqual=qalues[
i].
qual;
1544 strncmp(
save_rec[
k].parm,
"HGIR",4)== 0 ||
1545 strncmp(
save_rec[
k].parm,
"QII2",4)== 0)) ||
1548 for(
i=0;
i<qnum;
i++) {
1550 tm.tm_year=qalues[
i].
zdate/10000-1900;
1551 tm.tm_mon=(qalues[
i].
zdate-(tm.tm_year+1900)*10000)/100;
1552 tm.tm_mday=qalues[
i].
zdate-(tm.tm_year+1900)*10000-tm.tm_mon*100;
1553 tm.tm_hour=qalues[
i].
ztime/10000;
1554 tm.tm_min=(qalues[
i].
ztime-tm.tm_hour*10000)/100;
1556 tm.tm_mon=tm.tm_mon;
1557 stim=
ouptime(tm.tm_year+1900,tm.tm_mon,tm.tm_mday,tm.tm_hour,tm.tm_min,0);
1560 (float)(letim-
stim);
1571 svalue=(double)flow;
1576 (float)(svalue-minv);
1585 if(otim-
stim < 7200L)
1602 oqual=qalues[
i].
qual;
1627 sprintf(abuf,
" at %02d/%02d/%02d %02dZ",
1652 sprintf(abuf,
" at %02d/%02d/%02d %02dZ",
1719 struct stn_values *ptn_values,
int inum,
int pnum)
1724 int i,xdate,
xtime,ndate,ntime;
1730 for(
i=0;
i<inum;
i++) {
1751 for(
i=0;
i<pnum;
i++) {
1847 hours=(lbtim-letim)/3600L;
1855 else if(hours < 144)
1858 else if(hours < 288)
1861 else if(hours < 576)
1864 else if(hours < 1152)
1867 else if(hours < 2304)
1870 else if(hours < 4608)
1910 else if(diff < 1000)
1913 else if(diff < 2000)
1916 else if(diff < 4000)
1919 else if(diff < 10000)
1922 else if(diff < 20000)
1925 else if(diff < 40000)
1928 else if(diff < 100000)
1931 else if(diff < 200000)
1934 else if(diff < 400000)
1937 else if(diff < 1000000)
1940 else if(diff < 2000000)
1943 else if(diff < 4000000)
1954 void options_draw(Widget w,XtPointer data,XmDrawingAreaCallbackStruct *call_data)
2003 void quit_draw(Widget w,XtPointer data,XmDrawingAreaCallbackStruct *call_data)
2051 if(strncasecmp(
"P",ibuf,1)==0 ||
2052 strncasecmp(
"S",ibuf,1)==0)
2053 strcpy(sbuf,
"INCHES");
2055 else if(strncasecmp(
"T",ibuf,1)==0)
2056 strcpy(sbuf,
"DEGREES F");
2058 else if(strncasecmp(
"X",ibuf,1)==0)
2059 strcpy(sbuf,
"PERCENT");
2061 else if(strncasecmp(
"H",ibuf,1)==0)
2062 strcpy(sbuf,
"FEET");
2064 else if(strncasecmp(
"L",ibuf,1)==0)
2065 strcpy(sbuf,
"KAC-FT");
2067 else if(strncasecmp(
"Q",ibuf,1)==0 && strlen(ibuf) > 3 &&
2068 strncasecmp(
"M",&ibuf[2],1)==0)
2069 strcpy(sbuf,
"KAC-FT");
2071 else if(strncasecmp(
"Q",ibuf,1)==0 && strlen(ibuf) > 3 &&
2072 strncasecmp(
"D",&ibuf[2],1)==0)
2073 strcpy(sbuf,
"KAC-FT");
2075 else if(strncasecmp(
"QRD1Z",ibuf,5)==0)
2076 strcpy(sbuf,
"KCFS");
2078 else if(strncasecmp(
"Q",ibuf,1)==0)
2081 else if(strncasecmp(
"US",ibuf,2)==0)
2082 strcpy(sbuf,
"MILES PER HOUR");
2084 else if(strncasecmp(
"UD",ibuf,2)==0)
2085 strcpy(sbuf,
"DEGREES");
2089 strcpy(sbuf,
"VALUE");
2099 if(strncasecmp(
"HG",ibuf,2)==0)
2100 strcat(sbuf,
"RIVER STAGE");
2102 else if(strncasecmp(
"HP",ibuf,2)==0)
2103 strcat(sbuf,
"RESERVOIR POOL ELEVATION");
2105 else if(strncasecmp(
"LS",ibuf,2)==0)
2106 strcat(sbuf,
"LAKE STORAGE");
2108 else if(strncasecmp(
"PC",ibuf,2)==0)
2109 strcat(sbuf,
"PRECIPITATION ACCUMULATION");
2111 else if(strncasecmp(
"PP",ibuf,2)==0)
2112 strcat(sbuf,
"PRECIPITATION INCREMENTAL");
2114 else if(strncasecmp(
"QC",ibuf,2)==0)
2115 strcat(sbuf,
"RUNOFF VOLUME");
2117 else if(strncasecmp(
"QD",ibuf,2)==0)
2118 strcat(sbuf,
"DISCHARGE-DIVERSION");
2120 else if(strncasecmp(
"QI",ibuf,2)==0)
2121 strcat(sbuf,
"DISCHARGE-INFLOW");
2123 else if(strncasecmp(
"QR",ibuf,2)==0)
2124 strcat(sbuf,
"DISCHARGE-RIVER");
2126 else if(strncasecmp(
"QT",ibuf,2)==0)
2127 strcat(sbuf,
"DISCHARGE-OUTFLOW");
2129 else if(strncasecmp(
"SD",ibuf,2)==0)
2130 strcat(sbuf,
"SNOW DEPTH");
2132 else if(strncasecmp(
"SW",ibuf,2)==0)
2133 strcat(sbuf,
"SNOW WATER EQUIVALENT");
2135 else if(strncasecmp(
"TA",ibuf,2)==0)
2136 strcat(sbuf,
"AIR TEMPERATURE");
2138 else if(strncasecmp(
"US",ibuf,2)==0)
2139 strcat(sbuf,
"WIND SPEED");
2141 else if(strncasecmp(
"UD",ibuf,2)==0)
2142 strcat(sbuf,
"WIND DIRECTION");
2144 else if(strncasecmp(
"UQ",ibuf,2)==0)
2145 strcat(sbuf,
"WIND SPEED/DIRECTION");
2147 else if(strncasecmp(
"XR",ibuf,2)==0)
2148 strcat(sbuf,
"RELATIVE HUMIDITY");
2151 strcat(sbuf,
"UNKNOWN");
2155 if(strncasecmp(
"I",&ibuf[2],1)==0)
2156 strcat(sbuf,
"INSTANTANEOUS");
2158 else if(strncasecmp(
"D",&ibuf[2],1)==0)
2159 strcat(sbuf,
"DAILY");
2161 else if(strncasecmp(
"Q",&ibuf[2],1)==0)
2162 strcat(sbuf,
"SIX HOURLY");
2164 else if(strncasecmp(
"M",&ibuf[2],1)==0)
2165 strcat(sbuf,
"MONTHLY");
2168 strcat(sbuf,
"UNKNOWN");
2172 if(strncasecmp(
"R",&ibuf[3],1)==0)
2173 strcat(sbuf,
"OBSERVED");
2175 else if(strncasecmp(
"P",&ibuf[3],1)==0)
2176 strcat(sbuf,
"PROCESSED");
2178 else if(strncasecmp(
"1",&ibuf[3],1)==0)
2179 strcat(sbuf,
"PROCESSED LEVEL 1");
2181 else if(strncasecmp(
"2",&ibuf[3],1)==0)
2182 strcat(sbuf,
"PROCESSED LEVEL 2");
2184 else if(strncasecmp(
"F",&ibuf[3],1)==0)
2185 strcat(sbuf,
"FORECAST");
2188 strcat(sbuf,
"UNKNOWN");
2192 if(strncasecmp(
"Z",&ibuf[4],1)==0)
2193 strcat(sbuf,
"STP/SAO");
2195 else if(strncasecmp(
"G",&ibuf[4],1)==0)
2196 strcat(sbuf,
"GOES");
2198 else if(strncasecmp(
"M",&ibuf[4],1)==0)
2199 strcat(sbuf,
"METEOR");
2201 else if(strncasecmp(
"P",&ibuf[4],1)==0)
2202 strcat(sbuf,
"PHONE");
2204 else if(strncasecmp(
"R",&ibuf[4],1)==0)
2205 strcat(sbuf,
"RADIO");
2208 strcat(sbuf,
"UNKNOWN");
2210 if(strncasecmp(
"Z",&ibuf[5],1)!=0)
2213 if(strncasecmp(
"X",&ibuf[5],1)==0)
2214 strcat(sbuf,
"MAXIMUM:DAILY");
2216 else if(strncasecmp(
"N",&ibuf[5],1)==0)
2217 strcat(sbuf,
"MINIMUM:DAILY");
2219 if(strncasecmp(
"Z",&ibuf[6],1)!=0)
2222 if(strncasecmp(
"F",&ibuf[6],1)==0)
2225 else if(strncasecmp(
"N",&ibuf[6],1)==0)
int get_delta_time(time_t lbtim, time_t letim)
XFontStruct * info_font[10]
struct stn_values * stn_values
void draw_area(int k, int m, int xs, int ys, int xz, int yz)
void get_units(char *ibuf, char *sbuf)
void get_acronym(char *ibuf, char *sbuf)
float get_delta_valu(int diff)
struct max_min get_max_min(struct stn_values *stn_values, struct stn_values *ptn_values, int inum, int pnum)
void display_data(char *hb5, char *pc, int dmonth, int dday, int dyear, int dhour, int ddays, char *fname)
void berror(Widget widget, char *string)
long ouptime(int year, int month, int day, int hour, int minute, int second)
Widget AttachToCascade(Widget, char *, Widget)
Widget BuildPulldownPushMenu(Widget, char *, char, struct MenuItem *)
int GetFlow(char *, char, char, int, double, int *)
double GetStage(char *, char, char, int, int, int *)
static RatingTable rate_table
sprintf(fbuf,"/usr/mapper/nexrad/ngrid.%02d-%02d-%02d-%02d", year, month, day, hour)
printf("fbuf is %s\n", fbuf)