/* generate stream page ------------------------------------------------------*/ static int gen_page2(gtime_t time, const char *temp, const char *page) { FILE *ifp,*ofp; gtime_t ts,te; double ep[6],hour[24],late[MAXSTA][24]= {{0}},avai[MAXSTA][24]= {{0}}; double val1[MAXSTA],val2[MAXSTA]; char buff[1024],file[1024],*sta[MAXSTA],str[MAXSTA][32]; int i,j,n,nsta=0,sec=0; ts=timeadd(time,-90000.0); te=timeadd(time, -3600.0); for (i=0; i<MAXSTA; i++) sta[i]=str[i]; for (i=0; i<24; i++) { time2epoch(timeadd(ts,i*3600.0),ep); sprintf(file,REP_FILE,ep[0],ep[1],ep[2],ep[3]); if (!(n=read_rep(file,sta,val1,val2))) continue; for (j=0; j<n; j++) { late[j][i]=val1[j]; avai[j][i]=val2[j]; } hour[i]=ep[3]; nsta=n; } if (!(ifp=fopen(temp,"r"))) { fprintf(stderr,"file open error: %s\n",temp); return 0; } if (!(ofp=fopen(page,"w"))) { fprintf(stderr,"file open error: %s\n",page); fclose(ifp); return 0; } while (fgets(buff,sizeof(buff),ifp)) { if (strstr(buff,"@DATE START" )) sec=1; else if (strstr(buff,"@TABLE0 START")) sec=2; else if (strstr(buff,"@TABLE1 START")) sec=3; else if (strstr(buff,"@TABLE2 START")) sec=4; else if (strstr(buff,"@DATE END" )) sec=0; else if (strstr(buff,"@TABLE0 END" )) sec=0; else if (strstr(buff,"@TABLE1 END" )) sec=0; else if (strstr(buff,"@TABLE2 END" )) sec=0; switch (sec) { case 0: fputs(buff,ofp); break; case 1: out_date(ofp,ts,te); break; case 2: out_ref(ofp,ts); break; case 3: out_table1(ofp,sta,nsta,hour,avai,1); break; case 4: out_table1(ofp,sta,nsta,hour,late,1); break; } } fclose(ifp); fclose(ofp); return 1; }
static Token *read_token_int(void) { int c = getc_nonspace(); switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': return read_number(c); case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '_': return read_ident(c); case '*': case '/': case '(': case ')': case ',': case ';': case '[': case ']': case '{': case '}': case '<': case '>': case '!': case '?': case ':': case '.': return make_punct(c); case '-': c = getc(stdin); if (c == '-') return make_punct(PUNCT_DEC); if (c == '>') return make_punct(PUNCT_ARROW); ungetc(c, stdin); return make_punct('-'); case '=': return read_rep('=', '=', PUNCT_EQ); case '+': return read_rep('+', '+', PUNCT_INC); case '&': return read_rep('&', '&', PUNCT_LOGAND); case '|': return read_rep('|', '|', PUNCT_LOGOR); case '"': return read_string(); case '\'': return read_char(); case EOF: return NULL; default: error("Unexpected character: '%c'", c); } }