*** empty log message ***
[h316.git] / pc-tools / ldc2 / src / tape_block.hh
1 #ifndef TAPE_BLOCK_HH
2 #define TAPE_BLOCK_HH
3
4 using namespace std;
5
6 /*!
7 *\brief Tape data block base class.
8 *
9 * This class represents a Honeywell paper tape block.
10 * That may be some kind of data block or a end of tape mark.
11 */
12 class tape_block{
13
14 public: // types
15
16 /*!
17 * Tape block types.
18 */
19 typedef enum {
20 TBT_DATA=0x10, //!< Data block
21 TBT_EOT, //!< End of tape block
22 TBT_BROKEN, //!< A broken block
23 } tb_type_t;
24
25 /*!
26 *\brief Local base class for exceptions.
27 */
28 class exception {
29 protected:
30 exception();
31 public:
32 virtual ~exception();
33 tape_block * get_block();
34 protected:
35 tape_block * m_broken_block;
36 };
37
38 /*!
39 *\brief Checksum error exception.
40 */
41 class checksum_error_exception
42 : public exception {
43 public:
44 checksum_error_exception(tape_block * block);
45 };
46
47 /*!
48 *\brief EOF while reading block exception.
49 */
50 class eof_illegal_exception
51 : public exception {
52 public:
53 eof_illegal_exception(tape_block * block);
54 };
55
56 /*!
57 *\brief EOF after reading block exception.
58 */
59 class eof_legal_exception
60 : public exception {
61 public:
62 eof_legal_exception(int bytes_consumed);
63 int get_consumed();
64 private:
65 int bytes_consumed;
66 tape_block * get_block();
67 };
68
69 /*!
70 *\brief IO error exception.
71 */
72 class io_error_exception
73 : exception {
74 public:
75 io_error_exception();
76 private:
77 tape_block * get_block();
78 };
79
80 public: // methods
81 virtual ~tape_block();
82
83 tape_block(tape_block &);
84 void operator=(tape_block &);
85
86 virtual int get_type();
87 virtual int get_subtype();
88 virtual vector<string> get_description();
89 int get_raw_size();
90 int get_discarded_bytes();
91 unsigned char * get_raw_data();
92
93 static tape_block * gen_from_fd(int fd,
94 void(*input_start)(void *)=0,
95 void (*input_stop)(void *)=0,
96 void * start_stop_arg=0
97 );
98
99 protected: // methods
100 tape_block();
101 string get_typestring();
102
103 private: // methods
104 tape_block (int fd_p,
105 void(*input_start)(void *)=0,
106 void (*input_stop)(void *)=0,
107 void * start_stop_arg=0
108 );
109
110 int init_words(void);
111 int test_checksum();
112
113 protected: // members
114 int block_type; //!< Type of this block.
115 int discarded_bytes; //!< Amount of bytes discarded before beginning.
116 unsigned char * raw_data; //!< Raw block data in bytes.
117 int raw_size; //!< Size of the raw data.
118 unsigned short * word_data; //!< Data organized in machine words.
119 int word_size; //!< Size of the blocks in machine words.
120 int poolsize; //!< Amount of data malloc'ed
121 }; // class tape_block
122
123 #endif