[go: up one dir, main page]

File: intel.h

package info (click to toggle)
srecord 1.58-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 5,144 kB
  • sloc: cpp: 26,774; sh: 7,053; makefile: 2,889; awk: 187; vhdl: 15
file content (150 lines) | stat: -rw-r--r-- 3,949 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
//
// srecord - manipulate eprom load files
// Copyright (C) 1998-2000, 2002, 2003, 2006-2008, 2010, 2011 Peter Miller
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation; either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with this program. If not, see
// <http://www.gnu.org/licenses/>.
//

#ifndef SRECORD_INPUT_FILE_INTEL_H
#define SRECORD_INPUT_FILE_INTEL_H

#include <srecord/input/file.h>

namespace srecord {

/**
  * The srecord::input_file_intel class is used to represent the parse state
  * of an Intel Hex formatted file.
  */
class input_file_intel:
    public input_file
{
public:
    /**
      * The destructor.
      */
    virtual ~input_file_intel();

    /**
      * The create class method is used to create new dynamically
      * allocated instances of this class.
      *
      * @param file_name
      *     The name of the file to be read.
      * @returns
      *     smart pointer to new instance
      */
    static pointer create(const std::string &file_name);

protected:
    // See base class for documentation.
    bool read(record &record);

    // See base class for documentation.
    const char *get_file_format_name(void) const;

    // See base class for documentation.
    const char *format_option_name(void) const;

private:
    /**
      * The constructor.
      *
      * @param file_name
      *     The name of the file to be read.
      */
    input_file_intel(const std::string &file_name);

    /**
      * Read one record from the file.  The read method is a wrapper
      * around this method.
      */
    bool read_inner(record &);

    /**
      * The data_record_count instance variable is used to remember the
      * number of data records seen to date.
      */
    int data_record_count;

    /**
      * The garbage_warning instance variable is used to remember wherther
      * or not a warning has already been issued about garbage lines
      * of input.
      */
    bool garbage_warning;

    /**
      * The seen_some_input instance variable is used to remember whether
      * or not the file contains any data.
      */
    bool seen_some_input;

    /**
      * The termination_seen instance variable is used to remember
      * whether or not a termination record has been seen yet.
      */
    bool termination_seen;

    enum mode_t
    {
        mode_linear, // aka i32hex
        mode_segmented, // aka i16hex
        mode_i8hex
    };

    /**
      * The mode instance variable is used to remember what addressing
      * mode the file is currently in.
      */
    mode_t mode;

    /**
      * The address_base instance variable is used to remember the
      * segment base address when in segmented addressing mode.
      */
    unsigned long address_base;

    /**
      * The pushback instance variable is used to remember the previous
      * record in the file.  This is needed in some instances, but not always.
      */
    record *pushback;

    /**
      * The end_seen instance variable is used to remember whether or
      * not the end of file has been seen yet.
      */
    bool end_seen;

    /**
      * The default constructor.  Do not use.
      */
    input_file_intel();

    /**
      * The copy constructor.  Do not use.
      */
    input_file_intel(const input_file_intel &);

    /**
      * The assignment operator.  Do not use.
      */
    input_file_intel &operator=(const input_file_intel &);
};

};

#endif // SRECORD_INPUT_FILE_INTEL_H