NextTrain format file library
Diff: NextTrainFile.cpp
- Revision:
- 2:0aa41f709144
- Parent:
- 1:f89f955130c7
--- a/NextTrainFile.cpp Wed Nov 17 16:21:38 2010 +0000 +++ b/NextTrainFile.cpp Thu Nov 18 17:40:15 2010 +0000 @@ -13,7 +13,7 @@ //////////////////////////////////////////////////////////////////////////////// // NextTrainFile -NextTrainFile::NextTrainFile(const char* ntFile) : m_fp(0), m_shortopt(false) { +NextTrainFile::NextTrainFile(const char* ntFile) : m_fp(0), m_shortopt(false), m_delim(' ') { if(ntFile) open(ntFile); } @@ -35,6 +35,7 @@ if(ch <= 'z') return NextTrainFile::LINE_OPTION; return NextTrainFile::LINE_COMMENT; } + int getOptionID(char ch){ if(ch < 'A') return -1; if(ch <= 'Z') return ch - 'A'; @@ -43,18 +44,17 @@ return -1; } +const char* WEEK_LIST[] = { // week + holiday + "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT", "HOL" +}; int getWeekMask(char* str){ const char WEEK_DELIM[] = " []\t\r\n"; - const char* WEEK_LIST[] = { // week + holiday - "MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN", "HOL" - }; int ret = 0; char * p = strtok(str, WEEK_DELIM); while(p){ for(int index = 0; index < 8 ; ++index){ // week7 + holiday -// if(stricmp(p, WEEK_LIST[index]) == 0){ - if(strcmp(p, WEEK_LIST[index]) == 0){ + if(strcmp(p, WEEK_LIST[index]) == 0){ // stricmp? ret |= 1 << index; break; } @@ -110,8 +110,10 @@ break; } } + printf("NextTrainFile::open return %d, read %d bytes\n", ret, pos); return ret; } + NextTrainFile::Status NextTrainFile::close(){ if(m_fp){ fclose(m_fp); // no error check... @@ -191,7 +193,10 @@ for(; opt < p ; ++opt){ // check option format int optID = getOptionID(*opt); - if(optID < 0 || m_index[optID] == 0xff) return S_INVALID_OPTION_ID; + if(optID < 0 || m_index[optID] == 0xff){ + printf("NextTrainFile::search S_INVALID_OPTION_ID %x\n", (optID < 0)? -1 : m_index[optID]); + return S_INVALID_OPTION_ID; + } // append option string char* src = m_optbuf + m_index[optID]; @@ -211,12 +216,20 @@ len = strlen(src); } - if(len > left) return S_OPTION_OVERFLOW; // MAX_OPTION is too small... + if(len + 1 > left){ + printf("NextTrainFile::search S_OPTION_OVERFLOW\n"); + return S_OPTION_OVERFLOW; // MAX_OPTION is too small... + } + if(dst != m_ni.m_option && m_delim){ + *dst++ = m_delim; + left--; + } memcpy(dst, src, len); dst += len; left -= len; } *dst = 0; + printf("NextTrainFile::search %02d:%02d:%02d(%s) hit train %d:%02d\n", st->tm_hour, st->tm_min, st->tm_sec, WEEK_LIST[st->tm_wday], m_ni.m_hour, m_ni.m_min); return S_SUCCESS; } } @@ -232,7 +245,8 @@ } } + printf("NextTrainFile::search %02d:%02d:%02d(%s) NoTrain\n", st->tm_hour, st->tm_min, st->tm_sec, WEEK_LIST[st->tm_wday]); + return S_NO_TRAIN; // failed } -