NextTrain format file library

Committer:
rinosh2
Date:
Tue Nov 16 16:38:02 2010 +0000
Revision:
0:1e951aba6a7e
Child:
1:f89f955130c7

        

Who changed what in which revision?

UserRevisionLine numberNew 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