1. Switches to 32-bit based calculation throughout. This is faster and
less error-prone as we only byte-swap once when reading and writing.
2. Removes global state from Diablo-SHA implementation.
* Hardcode the key and ensure buffers are appropriately sized.
If you do want to build the key at runtime the following initial state gets the right sequence:
```cpp
std::linear_congruential_engine<uint32_t, 214013, 2531011, 0> engine(3193970784);
for (auto ¬ch: key)
notch = static_cast<byte>(engine() >> 16);
```
* Move public defines into sha.h, move private struct into .cpp
* Remove unused count member, clarify loop in SHA1Input
* Update circular shift to indicate desired behaviour, remove unnecessary negation.
The parameters are also reordered to match C++20 rotl/rotr and the usual order for shift operators.
* SHA: Fix negative base shift UB
* SHA: Avoid signed integer overflow
We do cast from uint32_t to int32_t but that should be OK everywhere.
* SHA: Always use portable arithmetic right shift
* Reorder lib
This is the orhter that they appear in the exe imports
* Make includes C compatible
cursor.h: SetCursor conflicts with existing function
engine.h: CelDecDatLightEntry and Cel2DecDatLightEntry use by reference
*&
objects.h: DeleteObject conflicts with existing function
* Start compiling select files as C
* Clean up
pfile still emits warnings when parsed as C:
err:msvcrt:demangle_datatype Unknown type @
err:msvcrt:demangle_datatype Unknown type @