Files
tdkpin/original/reconstructed/tdkpin_palette.h
T
ddidderr 8b99e9607c feat(reconstruction): complete binary-backed C recovery
Replace the partial mechanics transcriptions with a separate, readable C11
reconstruction of the complete Win16 image while preserving the original raw
Ghidra export as immutable evidence. Cover all ordinary and overlapping entry
points, Borland runtime behavior, Win16 imports, segmented data, callbacks,
resources, indirect control flow, physics, rendering, persistence, and
startup/shutdown lifecycles.

Add deterministic extraction and audit tooling plus address-linked ledgers for
functions, imports, DGROUP ranges and objects, relocations, resources, and
callbacks. The final gate records zero raw, partial, restored, unknown,
blocked, or unclassified required units. Keep the semantic-fidelity boundary
explicit: the portable C is not claimed to reproduce a byte-identical Borland
NE build.

Add strict focused harnesses for every reconstructed C unit, exact resource
round-trip checks, and a 16-bit Borland Real48 reference probe. No Rust source
or Cargo metadata is changed in this phase.

Test Plan:
- `bash original/tools/test_reconstructed_c.sh` -- passed
- `bash original/tools/probe_real48_reference.sh` -- passed bit-for-bit
- `python3 original/tools/audit_reconstruction.py --require-complete` -- passed
- `git diff --cached --check` -- passed
- `git diff HEAD -- '*.rs' Cargo.toml Cargo.lock` -- empty
2026-08-23 16:41:17 +02:00

72 lines
1.9 KiB
C

#ifndef TDKPIN_PALETTE_H
#define TDKPIN_PALETTE_H
#include "tdkpin_borland_runtime.h"
#include <stddef.h>
#pragma pack(push, 1)
typedef struct {
uint8_t red;
uint8_t green;
uint8_t blue;
uint8_t flags;
} PALETTEENTRY16;
typedef struct {
uint16_t version;
uint16_t entry_count;
PALETTEENTRY16 entries[256];
} LOGPALETTE256;
typedef struct {
uint8_t blue;
uint8_t green;
uint8_t red;
uint8_t reserved;
} RGBQUAD16;
typedef struct {
uint32_t size;
int32_t width;
int32_t height;
uint16_t planes;
uint16_t bit_count;
uint32_t compression;
uint32_t image_bytes;
int32_t x_pixels_per_meter;
int32_t y_pixels_per_meter;
uint32_t colors_used;
uint32_t important_colors;
} BITMAPINFOHEADER16;
typedef struct {
BITMAPINFOHEADER16 header;
RGBQUAD16 colors[256];
} BITMAPINFO256;
#pragma pack(pop)
_Static_assert(sizeof(PALETTEENTRY16) == 4, "Win16 PALETTEENTRY drift");
_Static_assert(sizeof(LOGPALETTE256) == 1028, "Win16 LOGPALETTE drift");
_Static_assert(sizeof(RGBQUAD16) == 4, "Win16 RGBQUAD drift");
_Static_assert(sizeof(BITMAPINFOHEADER16) == 40, "BITMAPINFOHEADER drift");
_Static_assert(
offsetof(BITMAPINFOHEADER16, bit_count) == 14,
"BITMAPINFO bit-count drift");
_Static_assert(offsetof(BITMAPINFO256, colors) == 40, "BITMAPINFO color offset drift");
_Static_assert(sizeof(BITMAPINFO256) == 1064, "BITMAPINFO256 drift");
void tdkpin_create_palette_from_rgb_table(void); /* 1008:11c5 */
void tdkpin_realize_nocollapse_palette(HWND16 window); /* 1008:0023 */
void tdkpin_load_palette_resource(
Win16FarPtr destination,
Win16FarPtr resource_name,
HINSTANCE16 instance); /* 1008:1326 */
void tdkpin_fill_bitmap_info_palette(
Win16FarPtr bitmap_info); /* 1008:13a8 */
HBITMAP16 tdkpin_load_bitmap_resource(
Win16FarPtr resource_name,
HINSTANCE16 instance); /* 1008:149d */
#endif