/* cdetac.h by TOYODA Eizi - LGPLv3 */ #define StringCopy(dst, src, n) ((src) ? \ (strncpy((dst),(src),(n)), (dst)[n] = '\0') : \ (memset((dst),'\0',(n)), '\0') ) #define StringEq(a, b) (0 == strcmp((a),(b))) /* clex.l */ enum TokenType { TTEOF = 0, TTEOT, TTEQ, TTAHL, TTMIMJ, TTWORD, TTNIL, TTMetarWW, TTMetarNH, TTMetarZ, TTMetarSM, TTMetarTTd, TTMetarR, TTMetarKT, TTMetarDVD, TTMetarQNH, TTMetarFix, TTMetarVV, TTMetarRI, TTMetarSD, TTMetarSLP, TTMetarTT, TTMetarCld, TTMetarRVR, TTMetarTL, TTMetarA, TTXWORD, }; extern char *yytext; extern FILE *yyin; /* decoder common */ struct dataelem_t { char de_name[8]; char de_lev[8]; long de_val; }; enum ms_state_t { MSS_ERR = 0, MSS_EQ, /* surface */ MSS_DD, MSS_YYGGi, MSS_IIiii, MSS_99LLL, MSS_QLLLL, MSS_MMMUU, MSS_hhhhi, MSS_iihVV, MSS_Nddff, MSS_Synop1, MSS_Synop2, MSS_Synop2ICE, MSS_Synop3, MSS_Synop4, MSS_Synop5, /* buoy */ MSS_YYMMJ, MSS_GGggi, MSS_QLLLLLa, MSS_LLLLLL, MSS_6QQQ, MSS_Buoy1, MSS_Buoy2, MSS_Buoy3, MSS_Buoy3TS, MSS_Buoy3dc1, MSS_Buoy3dc2, MSS_Buoy4, MSS_Buoy4_YYMMJ, MSS_Buoy4_GGgg_, MSS_Buoy4_Qc5La, MSS_Buoy4_6Lo, MSS_Buoy5, /* upper */ MSS_Temp2ini, MSS_Temp2skip, MSS_Temp2TTTDD, MSS_Temp2ddfff, MSS_Temp3ini, MSS_Temp5ini, MSS_Temp6ini, MSS_Temp7, MSS_Temp8, MSS_Temp91, MSS_Temp101, MSS_Temp102, /* metar */ MSS_MetarMain, MSS_MetarTrend, MSS_MetarRmk, }; struct message_t; typedef int (*ms_handler_t)( struct message_t *ms, enum TokenType tt, const char *token, enum TokenType tt2, const char *token2); struct message_t { char ms_ahl[22 + 1]; char ms_mimj[6 + 1]; char ms_id[8 + 1]; char ms_z[7 + 1]; char *ms_cccc; enum ms_state_t ms_state; size_t ms_ndes; struct dataelem_t *ms_des; size_t ms_verbsiz; char *ms_verb; char *ms_verbend; ms_handler_t ms_handler; }; /* code form handler */ extern int ms_default(struct message_t *ms, enum TokenType tt, const char *token, enum TokenType tt2, const char *token2); extern int ms_surf(struct message_t *ms, enum TokenType tt, const char *token, enum TokenType tt2, const char *token2); extern int ms_buoy(struct message_t *ms, enum TokenType tt, const char *token, enum TokenType tt2, const char *token2); extern int ms_upper(struct message_t *ms, enum TokenType tt, const char *token, enum TokenType tt2, const char *token2); extern int ms_metar(struct message_t *ms, enum TokenType tt, const char *token, enum TokenType tt2, const char *token2); /* message related functions */ extern long knot_to_mps(long val); extern int string_match(const char *str, const char *pat); extern long tac_atoi(const char *ary, size_t ofs, size_t width); extern long tac_atosi(const char *ary, int signchar, size_t ofs, size_t width); extern int ms_set(struct message_t *ms, const char *name, const char *lev, long val); extern long ms_get(struct message_t *ms, const char *name, const char *lev); extern int cdetac_interactive; /* end */