Skip to content

Commit

Permalink
Allow setting data types on bit boundaries.
Browse files Browse the repository at this point in the history
  • Loading branch information
solemnwarning committed Mar 17, 2024
1 parent f572bdc commit d4df1a4
Show file tree
Hide file tree
Showing 35 changed files with 1,803 additions and 915 deletions.
3 changes: 3 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -347,6 +347,7 @@ APP_OBJS := \
src/BasicDataTypes.$(BUILD_TYPE).o \
src/BitArray.$(BUILD_TYPE).o \
src/BitEditor.$(BUILD_TYPE).o \
src/BitOffset.$(BUILD_TYPE).o \
src/BitmapTool.$(BUILD_TYPE).o \
src/buffer.$(BUILD_TYPE).o \
src/BytesPerLineDialog.$(BUILD_TYPE).o \
Expand Down Expand Up @@ -440,6 +441,8 @@ TEST_OBJS := \
src/AppTestable.$(BUILD_TYPE).o \
src/ArtProvider.$(BUILD_TYPE).o \
src/BasicDataTypes.$(BUILD_TYPE).o \
src/BitArray.$(BUILD_TYPE).o \
src/BitOffset.$(BUILD_TYPE).o \
src/BitmapTool.$(BUILD_TYPE).o \
src/buffer.$(BUILD_TYPE).o \
src/ByteRangeSet.$(BUILD_TYPE).o \
Expand Down
2 changes: 2 additions & 0 deletions msvc/all-tests/all-tests.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,9 @@
<ClCompile Include="..\..\src\AppTestable.cpp" />
<ClCompile Include="..\..\src\ArtProvider.cpp" />
<ClCompile Include="..\..\src\BasicDataTypes.cpp" />
<ClCompile Include="..\..\src\BitArray.cpp" />
<ClCompile Include="..\..\src\BitmapTool.cpp" />
<ClCompile Include="..\..\src\BitOffset.cpp" />
<ClCompile Include="..\..\src\buffer.cpp" />
<ClCompile Include="..\..\src\ByteRangeSet.cpp" />
<ClCompile Include="..\..\src\BytesPerLineDialog.cpp" />
Expand Down
8 changes: 7 additions & 1 deletion msvc/all-tests/all-tests.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@
<Filter>tests</Filter>
</ClCompile>
<ClCompile Include="..\..\tests\BitOffset.cpp">
<Filter>tests</Filter>
<Filter>tests</Filter>
</ClCompile>
<ClCompile Include="..\..\tests\ByteRangeTree.cpp">
<Filter>tests</Filter>
Expand Down Expand Up @@ -352,6 +352,12 @@
<ClCompile Include="..\..\src\CustomMessageDialog.cpp">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="..\..\src\BitOffset.cpp">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="..\..\src\BitArray.cpp">
<Filter>src</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\res\ascii16.h">
Expand Down
2 changes: 2 additions & 0 deletions msvc/rehex.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -426,8 +426,10 @@
<ClCompile Include="..\src\AppTestable.cpp" />
<ClCompile Include="..\src\ArtProvider.cpp" />
<ClCompile Include="..\src\BasicDataTypes.cpp" />
<ClCompile Include="..\src\BitArray.cpp" />
<ClCompile Include="..\src\BitEditor.cpp" />
<ClCompile Include="..\src\BitmapTool.cpp" />
<ClCompile Include="..\src\BitOffset.cpp" />
<ClCompile Include="..\src\buffer.cpp" />
<ClCompile Include="..\src\BytesPerLineDialog.cpp" />
<ClCompile Include="..\src\ByteRangeSet.cpp" />
Expand Down
6 changes: 6 additions & 0 deletions msvc/rehex.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -273,6 +273,12 @@
<ClCompile Include="..\src\CustomMessageDialog.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\BitOffset.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\BitArray.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\src\AboutDialog.hpp">
Expand Down
21 changes: 11 additions & 10 deletions src/BasicDataTypes.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/* Reverse Engineer's Hex Editor
* Copyright (C) 2020-2022 Daniel Collins <solemnwarning@solemnwarning.net>
* Copyright (C) 2020-2024 Daniel Collins <solemnwarning@solemnwarning.net>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published by
Expand All @@ -22,6 +22,7 @@
#include <stdio.h>

#include "BasicDataTypes.hpp"
#include "BitOffset.hpp"
#include "DataType.hpp"
#include "document.hpp"
#include "DocumentCtrl.hpp"
Expand All @@ -34,7 +35,7 @@
#include "endian_conv.hpp"

#define IMPLEMENT_NDTR_CLASS(NAME, T, LABEL, FMT, XTOH, HTOX, FACTORY_FUNC) \
REHex::NAME::NAME(SharedDocumentPointer &doc, off_t offset, off_t length, off_t virt_offset): \
REHex::NAME::NAME(SharedDocumentPointer &doc, REHex::BitOffset offset, REHex::BitOffset length, REHex::BitOffset virt_offset): \
NumericDataTypeRegion(doc, offset, length, virt_offset, LABEL) {} \
\
std::string REHex::NAME::to_string(const T *data) const \
Expand All @@ -56,11 +57,11 @@
return false; \
} \
buf = HTOX(buf); \
doc->overwrite_data(d_offset, &buf, sizeof(buf)); \
doc->overwrite_data(d_offset.byte(), &buf, sizeof(buf)); /* BITFIXUP */ \
return true; \
} \
\
static REHex::DocumentCtrl::Region *FACTORY_FUNC(REHex::SharedDocumentPointer &doc, off_t offset, off_t length, off_t virt_offset) \
static REHex::DocumentCtrl::Region *FACTORY_FUNC(REHex::SharedDocumentPointer &doc, REHex::BitOffset offset, REHex::BitOffset length, REHex::BitOffset virt_offset) \
{ \
return new REHex::NAME(doc, offset, length, virt_offset); \
}
Expand Down Expand Up @@ -102,7 +103,7 @@ static REHex::DataTypeRegistration s64le_dtr("s64le", "signed 64-bit (little end
static REHex::DataTypeRegistration s64be_dtr("s64be", "signed 64-bit (big endian)", &s64be_factory, std::vector<std::string>({"Number"}), sizeof(int64_t));

#define IMPLEMENT_NDTR_CLASS_FLOAT(NAME, T, LABEL, FMT, XTOH, HTOX, FACTORY_FUNC) \
REHex::NAME::NAME(SharedDocumentPointer &doc, off_t offset, off_t length, off_t virt_offset): \
REHex::NAME::NAME(SharedDocumentPointer &doc, REHex::BitOffset offset, REHex::BitOffset length, REHex::BitOffset virt_offset): \
NumericDataTypeRegion(doc, offset, length, virt_offset, LABEL) {} \
\
std::string REHex::NAME::to_string(const T *data) const \
Expand Down Expand Up @@ -134,11 +135,11 @@ static REHex::DataTypeRegistration s64be_dtr("s64be", "signed 64-bit (big endian
} \
\
buf = HTOX<T>(buf); \
doc->overwrite_data(d_offset, &buf, sizeof(buf)); \
doc->overwrite_data(d_offset.byte(), &buf, sizeof(buf)); /* BITFIXUP */ \
return true; \
} \
\
static REHex::DocumentCtrl::Region *FACTORY_FUNC(REHex::SharedDocumentPointer &doc, off_t offset, off_t length, off_t virt_offset) \
static REHex::DocumentCtrl::Region *FACTORY_FUNC(REHex::SharedDocumentPointer &doc, REHex::BitOffset offset, REHex::BitOffset length, REHex::BitOffset virt_offset) \
{ \
return new REHex::NAME(doc, offset, length, virt_offset); \
}
Expand All @@ -150,7 +151,7 @@ static REHex::DataTypeRegistration f32le_dtr("f32le", "32-bit float (little endi
static REHex::DataTypeRegistration f32be_dtr("f32be", "32-bit float (big endian)", &f32be_factory, std::vector<std::string>({"Number"}), sizeof(float));

#define IMPLEMENT_NDTR_CLASS_DOUBLE(NAME, T, LABEL, FMT, XTOH, HTOX, FACTORY_FUNC) \
REHex::NAME::NAME(SharedDocumentPointer &doc, off_t offset, off_t length, off_t virt_offset): \
REHex::NAME::NAME(SharedDocumentPointer &doc, REHex::BitOffset offset, REHex::BitOffset length, REHex::BitOffset virt_offset): \
NumericDataTypeRegion(doc, offset, length, virt_offset, LABEL) {} \
\
std::string REHex::NAME::to_string(const T *data) const \
Expand Down Expand Up @@ -182,11 +183,11 @@ static REHex::DataTypeRegistration f32be_dtr("f32be", "32-bit float (big endian)
} \
\
buf = HTOX<T>(buf); \
doc->overwrite_data(d_offset, &buf, sizeof(buf)); \
doc->overwrite_data(d_offset.byte(), &buf, sizeof(buf)); /* BITFIXUP */ \
return true; \
} \
\
static REHex::DocumentCtrl::Region *FACTORY_FUNC(REHex::SharedDocumentPointer &doc, off_t offset, off_t length, off_t virt_offset) \
static REHex::DocumentCtrl::Region *FACTORY_FUNC(REHex::SharedDocumentPointer &doc, REHex::BitOffset offset, REHex::BitOffset length, REHex::BitOffset virt_offset) \
{ \
return new REHex::NAME(doc, offset, length, virt_offset); \
}
Expand Down

0 comments on commit d4df1a4

Please sign in to comment.