summaryrefslogtreecommitdiffhomepage
path: root/Boot/BootKit
diff options
context:
space:
mode:
authorAmlal <amlalelmahrouss@icloud.com>2024-05-23 07:53:50 +0000
committerAmlal <amlalelmahrouss@icloud.com>2024-05-23 07:53:50 +0000
commitf5081a8f9a8537ad5be5d639955cd1d0e68a9e1d (patch)
treec9305701aa2d4ee0235c85c67cd6633e5763ec21 /Boot/BootKit
parentca675beb41dba8d7d16c5793b55d1672f38be3b4 (diff)
parent06b1a4bb12b4043b606d8bb0d55942d636c6833e (diff)
Merged in MHR-23 (pull request #13)
MHR-23
Diffstat (limited to 'Boot/BootKit')
-rw-r--r--Boot/BootKit/BitManip.hxx2
-rw-r--r--Boot/BootKit/BootKit.hxx4
-rw-r--r--Boot/BootKit/Device.hxx2
-rw-r--r--Boot/BootKit/EPM.hxx2
-rw-r--r--Boot/BootKit/HW/ATA.hxx2
-rw-r--r--Boot/BootKit/HW/SATA.hxx2
-rw-r--r--Boot/BootKit/Platform.hxx6
-rw-r--r--Boot/BootKit/Protocol.hxx2
-rw-r--r--Boot/BootKit/Vendor/Qr.hxx14
-rw-r--r--Boot/BootKit/Vendor/QrVendor/bit.h247
-rw-r--r--Boot/BootKit/Vendor/Shared/base.h (renamed from Boot/BootKit/Vendor/QrVendor/base.h)12
-rw-r--r--Boot/BootKit/Vendor/Shared/bit.h247
-rw-r--r--Boot/BootKit/Vendor/Support.hxx25
13 files changed, 286 insertions, 281 deletions
diff --git a/Boot/BootKit/BitManip.hxx b/Boot/BootKit/BitManip.hxx
index bf46e75c..cef6c875 100644
--- a/Boot/BootKit/BitManip.hxx
+++ b/Boot/BootKit/BitManip.hxx
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright SoftwareLabs
+ Copyright SoftwareLabs
------------------------------------------- */
diff --git a/Boot/BootKit/BootKit.hxx b/Boot/BootKit/BootKit.hxx
index 179ca141..961137ca 100644
--- a/Boot/BootKit/BootKit.hxx
+++ b/Boot/BootKit/BootKit.hxx
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright SoftwareLabs
+ Copyright SoftwareLabs
------------------------------------------- */
@@ -360,7 +360,7 @@ inline Boolean BDiskFormatFactory<BootDev>::Format(const char* partName,
fDiskDev.Write(buf, sectorSz);
BTextWriter writer;
- writer.Write(L"New Boot: Write-Partition, OK.\r");
+ writer.Write(L"New Boot: Write-Partition: OK.\r");
return true;
}
diff --git a/Boot/BootKit/Device.hxx b/Boot/BootKit/Device.hxx
index 3bdc2829..215c10b6 100644
--- a/Boot/BootKit/Device.hxx
+++ b/Boot/BootKit/Device.hxx
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright SoftwareLabs
+ Copyright SoftwareLabs
------------------------------------------- */
diff --git a/Boot/BootKit/EPM.hxx b/Boot/BootKit/EPM.hxx
index 0df86724..0cefad5d 100644
--- a/Boot/BootKit/EPM.hxx
+++ b/Boot/BootKit/EPM.hxx
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright SoftwareLabs
+ Copyright SoftwareLabs
------------------------------------------- */
diff --git a/Boot/BootKit/HW/ATA.hxx b/Boot/BootKit/HW/ATA.hxx
index 8f06739b..d9b251f5 100644
--- a/Boot/BootKit/HW/ATA.hxx
+++ b/Boot/BootKit/HW/ATA.hxx
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright SoftwareLabs
+ Copyright SoftwareLabs
------------------------------------------- */
diff --git a/Boot/BootKit/HW/SATA.hxx b/Boot/BootKit/HW/SATA.hxx
index 1ad87493..bbb65ec0 100644
--- a/Boot/BootKit/HW/SATA.hxx
+++ b/Boot/BootKit/HW/SATA.hxx
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright SoftwareLabs
+ Copyright SoftwareLabs
------------------------------------------- */
diff --git a/Boot/BootKit/Platform.hxx b/Boot/BootKit/Platform.hxx
index 972430ce..14a1fa54 100644
--- a/Boot/BootKit/Platform.hxx
+++ b/Boot/BootKit/Platform.hxx
@@ -1,14 +1,14 @@
/* -------------------------------------------
- Copyright SoftwareLabs
+ Copyright SoftwareLabs
------------------------------------------- */
#pragma once
/**
- @file Processor.hxx
- @brief Processor specific code.
+ @file Processor.hxx
+ @brief Processor specific code.
*/
#ifdef __x86_64__
diff --git a/Boot/BootKit/Protocol.hxx b/Boot/BootKit/Protocol.hxx
index 95a5ca6f..3d9fd9f8 100644
--- a/Boot/BootKit/Protocol.hxx
+++ b/Boot/BootKit/Protocol.hxx
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright SoftwareLabs
+ Copyright SoftwareLabs
------------------------------------------- */
diff --git a/Boot/BootKit/Vendor/Qr.hxx b/Boot/BootKit/Vendor/Qr.hxx
index 1df0bdaf..3bafc09f 100644
--- a/Boot/BootKit/Vendor/Qr.hxx
+++ b/Boot/BootKit/Vendor/Qr.hxx
@@ -5,14 +5,16 @@
#include <stddef.h>
#include <stdint.h>
-#include <BootKit/Vendor/QrVendor/base.h>
-#include <BootKit/Vendor/QrVendor/bit.h>
+#include <BootKit/Vendor/Shared/base.h>
+#include <BootKit/Vendor/Shared/bit.h>
#include <BootKit/Vendor/QrPrelude.hxx>
#include <Builtins/Toolbox/Toolbox.hxx>
#include <BootKit/Vendor/Support.hxx>
#include <CompilerKit/Detail.hxx>
+/// @note the QR code is still code 128, it utilizes the same concept of having it's own character set.
+
namespace qr
{
inline uint8_t min_poly =
@@ -285,14 +287,6 @@ namespace qr
{
return SIDE;
}
- constexpr auto data_size() const
- {
- return N_BITS;
- }
- constexpr auto data_ptr() const
- {
- return code;
- }
bool module(int x, int y);
bool encode(const char* str, size_t len, Ecc ecc, int mask = -1);
diff --git a/Boot/BootKit/Vendor/QrVendor/bit.h b/Boot/BootKit/Vendor/QrVendor/bit.h
deleted file mode 100644
index 94ab0bf2..00000000
--- a/Boot/BootKit/Vendor/QrVendor/bit.h
+++ /dev/null
@@ -1,247 +0,0 @@
-#ifndef UTL_BIT_H
-#define UTL_BIT_H
-
-#include <bit>
-
-namespace utl
-{
-
- /**
- * @brief Size of object in terms of bits.
- *
- * @tparam T Object type
- * @return Number of bits
- */
- template <class T>
- constexpr auto bit_size()
- {
- return sizeof(T) * 8;
- }
-
- /**
- * @brief Integer with all bits set to 1.
- *
- * @tparam T Integer type
- * @return All set integer
- */
- template <class T>
- constexpr T bit_full()
- {
- return T(-1);
- }
-
- /**
- * @brief Wrap around mask for power of two number of bits
- * within given integer type. For example:
- * [ bit_wrap<uint8_t> = 8 - 1 = 0b111 ]
- * [ bit_wrap<uint16_t> = 16 - 1 = 0b1111 ]
- * [ bit_wrap<uint32_t> = 32 - 1 = 0b11111 ]
- *
- * @tparam T Integer type
- * @return Wrap around mask for number of bits
- */
- template <class T>
- constexpr T bit_wrap()
- {
- return bit_size<T>() - 1;
- }
-
- /**
- * @brief Number of bits to fit bit_wrap<T> result, in other words
- * bit width of (sizeof(T) * 8 - 1). For example:
- * [ bit_shft<uint8_t> = bit_width(0b111) = 3 ]
- * [ bit_shft<uint16_t> = bit_width(0b1111) = 4 ]
- * [ bit_shft<uint32_t> = bit_width(0b11111) = 5 ]
- *
- * @tparam T Integer type
- * @return Number of bits to shift to divide by sizeof(T) * 8
- */
- template <class T>
- constexpr auto bit_shft()
- {
- return std::bit_width(bit_wrap<T>());
- }
-
- /**
- * @brief Round up division by number of bits within given integer type,
- * which sizeof(T) * 8 is power of two.
- *
- * @tparam T Inetegr type
- * @param x Dividend
- * @return Quotient
- */
- template <class T>
- constexpr auto bit_ceil(auto x)
- {
- return (x + bit_wrap<T>()) >> bit_shft<T>();
- }
-
- /**
- * @brief Count leading zeros.
- *
- * @param x Unsigned integer argument
- * @return Number of leading zeros
- */
- constexpr unsigned cntlz(auto x)
- {
- if constexpr (std::is_same_v<decltype(x), int>)
- return std::countl_zero(unsigned(x));
- else
- return std::countl_zero(x);
- }
-
- /**
- * @brief Count trailing zeros.
- *
- * @param x Unsigned integer argument
- * @return Number of trailing zeros
- */
- constexpr unsigned cnttz(auto x)
- {
- if constexpr (std::is_same_v<decltype(x), int>)
- return std::countr_zero(unsigned(x));
- else
- return std::countr_zero(x);
- }
-
- /**
- * @brief Get number of words (integers) required to store N bits.
- *
- * @tparam T Word integer type
- * @param n Number of bits to store
- * @return Number of words
- */
- template <class T>
- constexpr size_t words_in_bits(size_t n)
- {
- return (n >> bit_shft<T>()) + !!(n & bit_wrap<T>());
- }
-
- /**
- * @brief Get number of bytes required to store N bits.
- *
- * @param n Number of bits to store
- * @return Number of bytes
- */
- constexpr size_t bytes_in_bits(size_t n)
- {
- return words_in_bits<uint8_t>(n);
- }
-
- /**
- * @brief Make integer with bit at given position.
- *
- * @tparam T Inetegr type
- * @param n Bit position
- * @return Integer with set bit
- */
- template <class T = unsigned>
- constexpr T bit(int n)
- {
- return T(1) << n;
- }
-
- /**
- * @brief Get n-th bit of an integer.
- *
- * @tparam T Integer type
- * @param x Integer
- * @param n Bit position from LSB
- * @return true if set
- */
- template <class T>
- constexpr bool get_bit(T x, int n)
- {
- return (x >> n) & 1;
- }
-
- /**
- * @brief Set n-th bit of an integer.
- *
- * @tparam T Integer type
- * @param x Integer
- * @param n Bit position from LSB
- */
- template <class T>
- constexpr void set_bit(T& x, int n)
- {
- x |= 1 << n;
- }
-
- /**
- * @brief Clear n-th bit of an integer.
- *
- * @tparam T Integer type
- * @param x Integer
- * @param n Bit position from LSB
- */
- template <class T>
- constexpr void clr_bit(T& x, int n)
- {
- x &= ~(1 << n);
- }
-
- /**
- * @brief Get n-th bit in array of words (starting from LSB).
- *
- * @tparam T Word type
- * @param p Array of words
- * @param n Index of bit to get
- * @return true if set
- */
- template <class T>
- constexpr bool get_arr_bit(const T* p, unsigned n)
- {
- return get_bit(p[n >> bit_shft<T>()], n & bit_wrap<T>());
- }
-
- /**
- * @brief Set n-th bit in array of words (starting from LSB).
- *
- * @tparam T Word type
- * @param p Array of words
- * @param n Index of bit to set
- */
- template <class T>
- constexpr void set_arr_bit(T* p, unsigned n)
- {
- set_bit(p[n >> bit_shft<T>()], n & bit_wrap<T>());
- }
-
- /**
- * @brief Clear n-th bit in array of words (starting from LSB).
- *
- * @tparam T Word type
- * @param p Array of words
- * @param n Index of bit to clear
- */
- template <class T>
- constexpr void clr_arr_bit(T* p, unsigned n)
- {
- clr_bit(p[n >> bit_shft<T>()], n & bit_wrap<T>());
- }
-
- /**
- * @brief Shift bits left in array of integer elements from least significant bit
- * and considering 0-th byte as the right most.
- * uint16_t example: 0b10000000'11100001 ==> 0b00000001'11000010.
- *
- * @tparam T Integer type
- * @tparam L Length of array
- * @param x Array of integers, nullptr not acceptable!
- * @param len Number of elements
- */
- template <class T, size_t L>
- constexpr void shift_left(T (&x)[L])
- {
- for (int i = L - 1; i > 0; --i)
- {
- x[i] <<= 1;
- x[i] |= x[i - 1] >> bit_wrap<T>();
- }
- x[0] <<= 1;
- }
-
-} // namespace utl
-
-#endif
diff --git a/Boot/BootKit/Vendor/QrVendor/base.h b/Boot/BootKit/Vendor/Shared/base.h
index a98ae4f0..d1c028d7 100644
--- a/Boot/BootKit/Vendor/QrVendor/base.h
+++ b/Boot/BootKit/Vendor/Shared/base.h
@@ -9,12 +9,12 @@ namespace utl
{
/**
- * @brief Helper to get number of elements in array.
- *
- * @tparam T Auto-deduced element type
- * @tparam N Auto-deduced number of elements
- * @return Array size
- */
+ * @brief Helper to get number of elements in array.
+ *
+ * @tparam T Auto-deduced element type
+ * @tparam N Auto-deduced number of elements
+ * @return Array size
+ */
template <class T, size_t N>
constexpr size_t countof(T (&)[N])
{
diff --git a/Boot/BootKit/Vendor/Shared/bit.h b/Boot/BootKit/Vendor/Shared/bit.h
new file mode 100644
index 00000000..6923e94a
--- /dev/null
+++ b/Boot/BootKit/Vendor/Shared/bit.h
@@ -0,0 +1,247 @@
+#ifndef UTL_BIT_H
+#define UTL_BIT_H
+
+#include <bit>
+
+namespace utl
+{
+
+ /**
+ * @brief Size of object in terms of bits.
+ *
+ * @tparam T Object type
+ * @return Number of bits
+ */
+ template <class T>
+ constexpr auto bit_size()
+ {
+ return sizeof(T) * 8;
+ }
+
+ /**
+ * @brief Integer with all bits set to 1.
+ *
+ * @tparam T Integer type
+ * @return All set integer
+ */
+ template <class T>
+ constexpr T bit_full()
+ {
+ return T(-1);
+ }
+
+ /**
+ * @brief Wrap around mask for power of two number of bits
+ * within given integer type. For example:
+ * [ bit_wrap<uint8_t> = 8 - 1 = 0b111 ]
+ * [ bit_wrap<uint16_t> = 16 - 1 = 0b1111 ]
+ * [ bit_wrap<uint32_t> = 32 - 1 = 0b11111 ]
+ *
+ * @tparam T Integer type
+ * @return Wrap around mask for number of bits
+ */
+ template <class T>
+ constexpr T bit_wrap()
+ {
+ return bit_size<T>() - 1;
+ }
+
+ /**
+ * @brief Number of bits to fit bit_wrap<T> result, in other words
+ * bit width of (sizeof(T) * 8 - 1). For example:
+ * [ bit_shft<uint8_t> = bit_width(0b111) = 3 ]
+ * [ bit_shft<uint16_t> = bit_width(0b1111) = 4 ]
+ * [ bit_shft<uint32_t> = bit_width(0b11111) = 5 ]
+ *
+ * @tparam T Integer type
+ * @return Number of bits to shift to divide by sizeof(T) * 8
+ */
+ template <class T>
+ constexpr auto bit_shft()
+ {
+ return std::bit_width(bit_wrap<T>());
+ }
+
+ /**
+ * @brief Round up division by number of bits within given integer type,
+ * which sizeof(T) * 8 is power of two.
+ *
+ * @tparam T Inetegr type
+ * @param x Dividend
+ * @return Quotient
+ */
+ template <class T>
+ constexpr auto bit_ceil(auto x)
+ {
+ return (x + bit_wrap<T>()) >> bit_shft<T>();
+ }
+
+ /**
+ * @brief Count leading zeros.
+ *
+ * @param x Unsigned integer argument
+ * @return Number of leading zeros
+ */
+ constexpr unsigned cntlz(auto x)
+ {
+ if constexpr (std::is_same_v<decltype(x), int>)
+ return std::countl_zero(unsigned(x));
+ else
+ return std::countl_zero(x);
+ }
+
+ /**
+ * @brief Count trailing zeros.
+ *
+ * @param x Unsigned integer argument
+ * @return Number of trailing zeros
+ */
+ constexpr unsigned cnttz(auto x)
+ {
+ if constexpr (std::is_same_v<decltype(x), int>)
+ return std::countr_zero(unsigned(x));
+ else
+ return std::countr_zero(x);
+ }
+
+ /**
+ * @brief Get number of words (integers) required to store N bits.
+ *
+ * @tparam T Word integer type
+ * @param n Number of bits to store
+ * @return Number of words
+ */
+ template <class T>
+ constexpr size_t words_in_bits(size_t n)
+ {
+ return (n >> bit_shft<T>()) + !!(n & bit_wrap<T>());
+ }
+
+ /**
+ * @brief Get number of bytes required to store N bits.
+ *
+ * @param n Number of bits to store
+ * @return Number of bytes
+ */
+ constexpr size_t bytes_in_bits(size_t n)
+ {
+ return words_in_bits<uint8_t>(n);
+ }
+
+ /**
+ * @brief Make integer with bit at given position.
+ *
+ * @tparam T Inetegr type
+ * @param n Bit position
+ * @return Integer with set bit
+ */
+ template <class T = unsigned>
+ constexpr T bit(int n)
+ {
+ return T(1) << n;
+ }
+
+ /**
+ * @brief Get n-th bit of an integer.
+ *
+ * @tparam T Integer type
+ * @param x Integer
+ * @param n Bit position from LSB
+ * @return true if set
+ */
+ template <class T>
+ constexpr bool get_bit(T x, int n)
+ {
+ return (x >> n) & 1;
+ }
+
+ /**
+ * @brief Set n-th bit of an integer.
+ *
+ * @tparam T Integer type
+ * @param x Integer
+ * @param n Bit position from LSB
+ */
+ template <class T>
+ constexpr void set_bit(T& x, int n)
+ {
+ x |= 1 << n;
+ }
+
+ /**
+ * @brief Clear n-th bit of an integer.
+ *
+ * @tparam T Integer type
+ * @param x Integer
+ * @param n Bit position from LSB
+ */
+ template <class T>
+ constexpr void clr_bit(T& x, int n)
+ {
+ x &= ~(1 << n);
+ }
+
+ /**
+ * @brief Get n-th bit in array of words (starting from LSB).
+ *
+ * @tparam T Word type
+ * @param p Array of words
+ * @param n Index of bit to get
+ * @return true if set
+ */
+ template <class T>
+ constexpr bool get_arr_bit(const T* p, unsigned n)
+ {
+ return get_bit(p[n >> bit_shft<T>()], n & bit_wrap<T>());
+ }
+
+ /**
+ * @brief Set n-th bit in array of words (starting from LSB).
+ *
+ * @tparam T Word type
+ * @param p Array of words
+ * @param n Index of bit to set
+ */
+ template <class T>
+ constexpr void set_arr_bit(T* p, unsigned n)
+ {
+ set_bit(p[n >> bit_shft<T>()], n & bit_wrap<T>());
+ }
+
+ /**
+ * @brief Clear n-th bit in array of words (starting from LSB).
+ *
+ * @tparam T Word type
+ * @param p Array of words
+ * @param n Index of bit to clear
+ */
+ template <class T>
+ constexpr void clr_arr_bit(T* p, unsigned n)
+ {
+ clr_bit(p[n >> bit_shft<T>()], n & bit_wrap<T>());
+ }
+
+ /**
+ * @brief Shift bits left in array of integer elements from least significant bit
+ * and considering 0-th byte as the right most.
+ * uint16_t example: 0b10000000'11100001 ==> 0b00000001'11000010.
+ *
+ * @tparam T Integer type
+ * @tparam L Length of array
+ * @param x Array of integers, nullptr not acceptable!
+ * @param len Number of elements
+ */
+ template <class T, size_t L>
+ constexpr void shift_left(T (&x)[L])
+ {
+ for (int i = L - 1; i > 0; --i)
+ {
+ x[i] <<= 1;
+ x[i] |= x[i - 1] >> bit_wrap<T>();
+ }
+ x[0] <<= 1;
+ }
+
+} // namespace utl
+
+#endif
diff --git a/Boot/BootKit/Vendor/Support.hxx b/Boot/BootKit/Vendor/Support.hxx
index d8075152..6a480779 100644
--- a/Boot/BootKit/Vendor/Support.hxx
+++ b/Boot/BootKit/Vendor/Support.hxx
@@ -1,12 +1,13 @@
/* -------------------------------------------
- Copyright SoftwareLabs
+ Copyright SoftwareLabs
------------------------------------------- */
#pragma once
-/// @file Purpose of this file is to help port libs into the bootloader.
+/// @file Support.hxx
+/// @brief Purpose of this file is to help port libs into the bootloader.
#include <BootKit/BootKit.hxx>
@@ -18,7 +19,7 @@
#define CopyMem(dst, src, sz) memcpy(dst, src, sz)
#define StrLen(src) strlen(src)
-inline int isspace(int c)
+inline int IsSpace(int c)
{
return c == ' ';
}
@@ -27,16 +28,21 @@ inline long StringToLong(const char* nptr, char** endptr, int base)
{
const char *p = nptr, *endp;
bool is_neg = 0, overflow = 0;
+
/* Need unsigned so (-cLongMin) can fit in these: */
unsigned long n = 0UL, cutoff;
int cutlim;
+
if (base < 0 || base == 1 || base > 36)
{
return 0L;
}
+
endp = nptr;
- while (isspace(*p))
+
+ while (IsSpace(*p))
p++;
+
if (*p == '+')
{
p++;
@@ -49,8 +55,8 @@ inline long StringToLong(const char* nptr, char** endptr, int base)
{
p++;
/* For strtol(" 0xZ", &endptr, 16), endptr should point to 'x';
- * pointing to ' ' or '0' is non-compliant.
- * (Many implementations do this wrong.) */
+ * pointing to ' ' or '0' is non-compliant.
+ * (Many implementations do this wrong.) */
endp = p;
if (base == 16 && (*p == 'X' || *p == 'x'))
{
@@ -81,8 +87,10 @@ inline long StringToLong(const char* nptr, char** endptr, int base)
{
base = 10;
}
+
cutoff = (is_neg) ? -(cLongMin / base) : cLongMax / base;
cutlim = (is_neg) ? -(cLongMin % base) : cLongMax % base;
+
while (1)
{
int c;
@@ -98,7 +106,7 @@ inline long StringToLong(const char* nptr, char** endptr, int base)
if (overflow)
{
/* endptr should go forward and point to the non-digit character
- * (of the given base); required by ANSI standard. */
+ * (of the given base); required by ANSI standard. */
if (endptr)
continue;
break;
@@ -110,11 +118,14 @@ inline long StringToLong(const char* nptr, char** endptr, int base)
}
n = n * base + c;
}
+
if (endptr)
*endptr = (char*)endp;
+
if (overflow)
{
return ((is_neg) ? cLongMin : cLongMax);
}
+
return (long)((is_neg) ? -n : n);
}