/* 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 { TTERR = 0, TTEOT, TTEQ, TTAHL, TTMIMJ, TTWORD, 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, /* surface */ MSS_YYGGi, MSS_IIiii, MSS_99LLL, MSS_iihVV, MSS_QLLLL, MSS_Nddff, }; 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]; enum ms_state_t ms_state; size_t ms_ndes; size_t ms_cdes; struct dataelem_t *ms_des; ms_handler_t ms_handler; }; /* code form handler */ int ms_default(struct message_t *ms, enum TokenType tt, const char *token, enum TokenType tt2, const char *token2); int ms_surf(struct message_t *ms, enum TokenType tt, const char *token, enum TokenType tt2, const char *token2); /* message related functions */ long tac_atoi(const char *ary, size_t width); /* end */