| 18 |
|
}; |
| 19 |
|
|
| 20 |
|
const char MOname[12][10] = { |
| 21 |
< |
"January", "February", "March", "April", "June", "July", |
| 21 |
> |
"January", "February", "March", "April", "May", "June", "July", |
| 22 |
|
"August", "September", "October", "November", "December" |
| 23 |
|
}; |
| 24 |
|
|
| 149 |
|
scan_date(EPWheader *epw) |
| 150 |
|
{ |
| 151 |
|
int hour; |
| 152 |
< |
float minute; |
| 152 |
> |
int minute; |
| 153 |
|
|
| 154 |
|
++epw->lino; |
| 155 |
|
if (epw->isWEA) { /* simpler for WEA input */ |
| 160 |
|
epw->dtpos.month--; |
| 161 |
|
} else { |
| 162 |
|
/* EPW input line */ |
| 163 |
< |
if (fscanf(epw->fp, "%hd,%hd,%hd,%d,%f,", &epw->dtpos.year, |
| 163 |
> |
if (fscanf(epw->fp, "%hd,%hd,%hd,%d,%d,", &epw->dtpos.year, |
| 164 |
|
&epw->dtpos.month, &epw->dtpos.day, &hour, &minute) != 5) |
| 165 |
|
goto scanerr; |
| 166 |
< |
epw->dtpos.hour = hour - minute*(0.5/60.); |
| 166 |
> |
epw->dtpos.hour = hour-1; |
| 167 |
> |
if (epw->period[0].nperhour == 1) |
| 168 |
> |
epw->dtpos.hour += .5; |
| 169 |
> |
else |
| 170 |
> |
epw->dtpos.hour += minute*(1./60.); |
| 171 |
|
epw->dtpos.month--; |
| 172 |
|
} |
| 173 |
|
/* check date/time */ |
| 210 |
|
goto badformat; |
| 211 |
|
if (hdr->isWEA) { /* getting WEA header */ |
| 212 |
|
cp = linbuf+6; |
| 213 |
< |
if (sscanf(cp, "%[^_]_%[^\r\n]q", |
| 214 |
< |
hdr->loc.city, hdr->loc.country) != 2) |
| 213 |
> |
if (sscanf(cp, "%[^_]_%[^\r\n]", |
| 214 |
> |
hdr->loc.city, hdr->loc.country) < 1) |
| 215 |
|
goto badformat; |
| 216 |
|
if (!fgets(linbuf, sizeof(linbuf), hdr->fp)) |
| 217 |
|
goto readerr; |
| 585 |
|
rp->nosnowdays = atoi(cp); |
| 586 |
|
cp = strchr(cp, ','); |
| 587 |
|
} |
| 588 |
< |
if (!cp++) goto badformat; |
| 588 |
> |
if (!cp++) goto skiprest; |
| 589 |
|
if (*cp != ',') { |
| 590 |
|
rp->albedo = atof(cp); |
| 591 |
|
cp = strchr(cp, ','); |
| 592 |
|
} |
| 593 |
< |
if (!cp++) goto badformat; |
| 593 |
> |
if (!cp++) goto skiprest; |
| 594 |
|
if (*cp != ',') { |
| 595 |
|
rp->liqpdepth = atof(cp) * 1e-3; |
| 596 |
|
cp = strchr(cp, ','); |
| 597 |
|
} |
| 598 |
< |
if (!cp++) goto badformat; |
| 598 |
> |
if (!cp++) goto skiprest; |
| 599 |
|
if ((*cp != ',') & (*cp != '\n')) |
| 600 |
|
rp->liqhours = atof(cp); |
| 601 |
+ |
skiprest: |
| 602 |
|
if (scan_date(epw) || feof(epw->fp)) |
| 603 |
|
return(1); /* normal return (even if next is EOF) */ |
| 604 |
|
badformat: |