NextTrain format file library
NextTrainFile.h@0:1e951aba6a7e, 2010-11-16 (annotated)
- Committer:
- rinosh2
- Date:
- Tue Nov 16 16:38:02 2010 +0000
- Revision:
- 0:1e951aba6a7e
- Child:
- 1:f89f955130c7
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
rinosh2 | 0:1e951aba6a7e | 1 | /////////////////////////////////////////////////////////////////////////////// |
rinosh2 | 0:1e951aba6a7e | 2 | // NextTrainFile: NextTrain file parser by rinos 2010 |
rinosh2 | 0:1e951aba6a7e | 3 | /////////////////////////////////////////////////////////////////////////////// |
rinosh2 | 0:1e951aba6a7e | 4 | |
rinosh2 | 0:1e951aba6a7e | 5 | #ifndef __NEXTTRAIN_FILE_H__ |
rinosh2 | 0:1e951aba6a7e | 6 | #define __NEXTTRAIN_FILE_H__ |
rinosh2 | 0:1e951aba6a7e | 7 | |
rinosh2 | 0:1e951aba6a7e | 8 | #include "mbed.h" |
rinosh2 | 0:1e951aba6a7e | 9 | |
rinosh2 | 0:1e951aba6a7e | 10 | class NextTrainFile { |
rinosh2 | 0:1e951aba6a7e | 11 | // defines ///////////////////////////////////////////////////////////////// |
rinosh2 | 0:1e951aba6a7e | 12 | public: |
rinosh2 | 0:1e951aba6a7e | 13 | enum LINE_TYPE { |
rinosh2 | 0:1e951aba6a7e | 14 | LINE_COMMENT, |
rinosh2 | 0:1e951aba6a7e | 15 | LINE_TITLE, |
rinosh2 | 0:1e951aba6a7e | 16 | LINE_TIME, |
rinosh2 | 0:1e951aba6a7e | 17 | LINE_WEEK, |
rinosh2 | 0:1e951aba6a7e | 18 | LINE_OPTION |
rinosh2 | 0:1e951aba6a7e | 19 | }; |
rinosh2 | 0:1e951aba6a7e | 20 | |
rinosh2 | 0:1e951aba6a7e | 21 | static const int HOUR_DIV = 3; // Last Train AM 03:00 |
rinosh2 | 0:1e951aba6a7e | 22 | |
rinosh2 | 0:1e951aba6a7e | 23 | static const int MAX_TITLE = 80; |
rinosh2 | 0:1e951aba6a7e | 24 | static const int MAX_OPTION = 80; |
rinosh2 | 0:1e951aba6a7e | 25 | |
rinosh2 | 0:1e951aba6a7e | 26 | static const int MAX_OPTIONID = 52; // A-Za-z |
rinosh2 | 0:1e951aba6a7e | 27 | static const int MAX_OPTBUF = 256; // m_index (unsigned char) range |
rinosh2 | 0:1e951aba6a7e | 28 | |
rinosh2 | 0:1e951aba6a7e | 29 | struct NextInfo { |
rinosh2 | 0:1e951aba6a7e | 30 | char m_title [MAX_TITLE]; |
rinosh2 | 0:1e951aba6a7e | 31 | char m_option[MAX_OPTION]; |
rinosh2 | 0:1e951aba6a7e | 32 | unsigned int m_hour; |
rinosh2 | 0:1e951aba6a7e | 33 | unsigned int m_min; |
rinosh2 | 0:1e951aba6a7e | 34 | signed int m_diff; |
rinosh2 | 0:1e951aba6a7e | 35 | |
rinosh2 | 0:1e951aba6a7e | 36 | NextInfo() : m_hour(0), m_min(0), m_diff(0) { |
rinosh2 | 0:1e951aba6a7e | 37 | m_title[0] = 0; |
rinosh2 | 0:1e951aba6a7e | 38 | m_option[0] = 0; |
rinosh2 | 0:1e951aba6a7e | 39 | } |
rinosh2 | 0:1e951aba6a7e | 40 | }; |
rinosh2 | 0:1e951aba6a7e | 41 | |
rinosh2 | 0:1e951aba6a7e | 42 | // error code |
rinosh2 | 0:1e951aba6a7e | 43 | typedef enum { |
rinosh2 | 0:1e951aba6a7e | 44 | S_SUCCESS, |
rinosh2 | 0:1e951aba6a7e | 45 | S_OPEN_ERROR, |
rinosh2 | 0:1e951aba6a7e | 46 | S_ALREADY_OPEN, |
rinosh2 | 0:1e951aba6a7e | 47 | S_OPTION_OVERFLOW, |
rinosh2 | 0:1e951aba6a7e | 48 | |
rinosh2 | 0:1e951aba6a7e | 49 | S_NO_TRAIN, |
rinosh2 | 0:1e951aba6a7e | 50 | S_INVALID_OPTION_ID, |
rinosh2 | 0:1e951aba6a7e | 51 | } Status; |
rinosh2 | 0:1e951aba6a7e | 52 | |
rinosh2 | 0:1e951aba6a7e | 53 | // internal member/method ////////////////////////////////////////////////// |
rinosh2 | 0:1e951aba6a7e | 54 | private: |
rinosh2 | 0:1e951aba6a7e | 55 | FILE* m_fp; |
rinosh2 | 0:1e951aba6a7e | 56 | NextInfo m_ni; |
rinosh2 | 0:1e951aba6a7e | 57 | bool m_shortopt; |
rinosh2 | 0:1e951aba6a7e | 58 | |
rinosh2 | 0:1e951aba6a7e | 59 | unsigned char m_index [MAX_OPTIONID]; |
rinosh2 | 0:1e951aba6a7e | 60 | char m_optbuf[MAX_OPTBUF]; |
rinosh2 | 0:1e951aba6a7e | 61 | |
rinosh2 | 0:1e951aba6a7e | 62 | // Invalid method |
rinosh2 | 0:1e951aba6a7e | 63 | protected: |
rinosh2 | 0:1e951aba6a7e | 64 | NextTrainFile(const NextTrainFile& v) {} |
rinosh2 | 0:1e951aba6a7e | 65 | const NextTrainFile& operator =(const NextTrainFile& v) { return v; } |
rinosh2 | 0:1e951aba6a7e | 66 | |
rinosh2 | 0:1e951aba6a7e | 67 | // |
rinosh2 | 0:1e951aba6a7e | 68 | public: |
rinosh2 | 0:1e951aba6a7e | 69 | NextTrainFile(const char* ntFile = 0); |
rinosh2 | 0:1e951aba6a7e | 70 | ~NextTrainFile(); |
rinosh2 | 0:1e951aba6a7e | 71 | |
rinosh2 | 0:1e951aba6a7e | 72 | Status open(const char* ntFile); |
rinosh2 | 0:1e951aba6a7e | 73 | Status close(); |
rinosh2 | 0:1e951aba6a7e | 74 | void use_shortopt(bool f) { m_shortopt = f; } |
rinosh2 | 0:1e951aba6a7e | 75 | Status search(time_t dt = 0, int offset = 0); |
rinosh2 | 0:1e951aba6a7e | 76 | const NextInfo* next() const { return &m_ni; } |
rinosh2 | 0:1e951aba6a7e | 77 | }; |
rinosh2 | 0:1e951aba6a7e | 78 | |
rinosh2 | 0:1e951aba6a7e | 79 | #endif |