RetroLinker
Linker for several 8-bit, 16-bit and 32-bit formats
Loading...
Searching...
No Matches
format.h
1#ifndef FORMAT_H
2#define FORMAT_H
3
4#include <map>
5#include <optional>
6#include <string>
7#include "../common.h"
8#include "image.h"
9
10namespace Dumper
11{
12 class Dumper;
13}
14
15namespace Linker
16{
17 class Module;
18 class ModuleCollector;
19 class Reader;
20 class Writer;
21
25 class Format : public virtual Image
26 {
27 public:
28 offset_t file_offset;
29
30 Format(offset_t file_offset = 0)
31 : file_offset(file_offset)
32 {
33 }
34
35 virtual ~Format() = default;
39 virtual void Clear();
43 virtual void ReadFile(Reader& rd) = 0;
47 offset_t WriteFile(Writer& wr) const override = 0;
51 virtual void Dump(Dumper::Dumper& dump) const;
52
53 offset_t ImageSize() const override;
54 offset_t WriteFile(Writer& wr, offset_t count, offset_t offset = 0) const override;
55 };
56
60 class OutputFormat : public virtual Format
61 {
62 public:
66 virtual bool AddSupplementaryOutputFormat(std::string subformat);
70 virtual void SetOptions(std::map<std::string, std::string>& options);
71
75 std::optional<std::string> FetchOption(std::map<std::string, std::string>& options, std::string name);
76
80 std::string FetchOption(std::map<std::string, std::string>& options, std::string name, std::string default_value);
81
85 std::optional<offset_t> FetchIntegerOption(std::map<std::string, std::string>& options, std::string name);
86
90 virtual void SetModel(std::string model);
94 virtual void SetLinkScript(std::string script_file, std::map<std::string, std::string>& options);
98 virtual void ProcessModule(Module& object);
103 virtual void CalculateValues();
107 virtual void GenerateFile(std::string filename, Module& module);
114 virtual std::string GetDefaultExtension(Module& module, std::string filename) const;
120 virtual std::string GetDefaultExtension(Module& module) const;
121 /* x86 only */
133 virtual bool FormatSupportsSegmentation() const;
139 virtual bool FormatIs16bit() const;
146 virtual bool FormatIsLinear() const;
147 /* general */
154 virtual bool FormatSupportsResources() const;
158 virtual bool FormatSupportsLibraries() const; /* imports/exports, fileformat level support, not system support */
159 virtual unsigned FormatAdditionalSectionFlags(std::string section_name) const;
160 };
161
165 class InputFormat : public virtual Format, public std::enable_shared_from_this<InputFormat>
166 {
167 public:
172 virtual void SetupOptions(std::shared_ptr<OutputFormat> format);
176 virtual void ProduceModule(ModuleCollector& linker, Reader& rd, std::string file_name);
180 virtual void ProduceModule(Module& module, Reader& rd);
184 virtual void GenerateModule(ModuleCollector& linker, std::string file_name, bool is_library = false) const;
188 virtual void GenerateModule(Module& module) const;
189 public:
190 /* x86 only */
202 virtual bool FormatProvidesSegmentation() const;
203 /* w65 only */
207 virtual bool FormatRequiresDataStreamFix() const;
208 /* general */
215 virtual bool FormatProvidesResources() const;
219 virtual bool FormatProvidesLibraries() const;
220 };
221}
222
223#endif /* FORMAT_H */
An abstract interface that separates structure and presentation of the data inside a file.
Definition dumper.h:586
A class to encode a general file format.
Definition format.h:26
virtual void Dump(Dumper::Dumper &dump) const
Display file contents in a nice manner.
Definition format.cc:9
virtual void ReadFile(Reader &rd)=0
Loads file into memory.
offset_t WriteFile(Writer &wr) const override=0
Stores data in memory to file.
offset_t ImageSize() const override
Retrieves size of stored data.
Definition format.cc:18
virtual void Clear()
Resets all fields to their default values, deallocate memory.
Definition format.cc:14
Represents an abstract data image whose data can be written to a file.
Definition image.h:17
A class that provides a general interface to loading a module.
Definition format.h:166
virtual bool FormatRequiresDataStreamFix() const
Whether the generated file might contain bugs that require fixing.
Definition format.cc:200
virtual void SetupOptions(std::shared_ptr< OutputFormat > format)
Initializes the reader for linking purposes.
Definition format.cc:164
virtual bool FormatProvidesLibraries() const
Whether the format enables importing/exporting libraries.
Definition format.cc:210
virtual void GenerateModule(ModuleCollector &linker, std::string file_name, bool is_library=false) const
Loads the information into a module object.
Definition format.cc:180
virtual bool FormatProvidesResources() const
Whether the format supports resources.
Definition format.cc:205
virtual bool FormatProvidesSegmentation() const
Whether the format enables multiple x86 segments.
Definition format.cc:195
virtual void ProduceModule(ModuleCollector &linker, Reader &rd, std::string file_name)
Reads a file and loads the information into a module object.
Definition format.cc:168
Helper class that collects object files and libraries, and includes library objects for required symb...
Definition module_collector.h:19
Encodes an object module file as a collection of sections, symbols and relocations.
Definition module.h:24
A class that provides a general interface to setting up generation for a format.
Definition format.h:61
virtual bool FormatSupportsSegmentation() const
Whether the format supports multiple segments.
Definition format.cc:127
virtual void GenerateFile(std::string filename, Module &module)
The main function that handles processing, calculating and generating the final image.
Definition format.cc:105
virtual void ProcessModule(Module &object)
Processes the module object and initializes format fields.
Definition format.cc:97
virtual bool FormatSupportsLibraries() const
Whether the format supports libraries.
Definition format.cc:154
virtual std::string GetDefaultExtension(Module &module, std::string filename) const
Appends a default extension to the filename.
virtual bool FormatIsLinear() const
Whether the address space is linear or segmented.
Definition format.cc:137
virtual void SetLinkScript(std::string script_file, std::map< std::string, std::string > &options)
Selects a script file to use for linking.
Definition format.cc:92
virtual std::string GetDefaultExtension(Module &module) const
Provides a default filename for the output file.
virtual bool FormatIs16bit() const
Whether the format is 16-bit or not.
Definition format.cc:132
std::optional< offset_t > FetchIntegerOption(std::map< std::string, std::string > &options, std::string name)
Convenience method to look up option by name and convert it to integer.
Definition format.cc:68
virtual void SetOptions(std::map< std::string, std::string > &options)
Passes command line parameters as settings over to format object.
Definition format.cc:38
std::optional< std::string > FetchOption(std::map< std::string, std::string > &options, std::string name)
Convenience method to look up option by name.
Definition format.cc:42
virtual void SetModel(std::string model)
Sets the way memory is organized, typically modifying a built-in script.
Definition format.cc:84
virtual void CalculateValues()
Intermediate step between processing module and generating output file to set up headers and manageme...
Definition format.cc:101
virtual bool AddSupplementaryOutputFormat(std::string subformat)
If the output format actually drives multiple output formats (resource file, apple double,...
Definition format.cc:33
virtual bool FormatSupportsResources() const
Whether the format supports resources.
Definition format.cc:149
A helper class, encapsulating functionality needed to import binary data.
Definition reader.h:16
A helper class, encapsulating functionality needed to export binary data.
Definition writer.h:15