Files
TeslaRel410/restoration/source410/backdate.py
T
CydandClaude Fable 5 63312e07f9 source410: literal 4.10 source reconstruction + BC++ 4.52 fleet toolchain archived
- BORLAND/: Borland C++ 4.52 (chosen over 4.5 by byte-match: CODE/RP/CW32.LIB
  is identical to 4.52's install lib). BCC32/TLINK32/TLIB/MAKE run natively on
  Win11; CODE/BT/OPT.MAK is the shipped BTL4OPT.EXE's exact flag recipe
  (extender = Borland PowerPack DPMI32, not Phar Lap TNT).
- restoration/source410/: the literal 1995-form reconstruction of the missing
  BT game source (never mixed into CODE/). Round 1-3 state:
  * 6 of 10 surviving original TUs COMPILE CLEAN under the period toolchain
    (BTMSSN, BTCNSL, BTSCNRL, BTTEAM, BTL4MODE, BTL4ARND) - first builds
    since 1996.
  * BT_L4/BTL4APP.CPP pilot reconstruction: 12/12 functions, Fail() lands on
    its binary-recorded line 400 exactly.
  * BT/BTCNSL.HPP: console wire IDs recovered from the binary's ctors
    (Killed=9, Damaged=10, ScoreUpdate=13, DeathWithoutHonor=15 [T1];
    TeamScore=12 flagged [T4]).
  * MUNGA/: 8 engine-header backfills back-dated from the BT412 WinTesla tree
    (VDATA numbering decomp-verified; AUDREND's OpenAL-era virtual removed -
    the period compiler is the drift detector).
  * Tooling: backdate.py (WinTesla->1995 header transform), compile410.sh
    (per-TU verification sweep under authentic OPT.MAK flags).
  * README: corrected roadmap - MECH.HPP is the capstone grown with the mech
    TU reconstructions; BTREG.CPP green = the header-family milestone.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 07:33:26 -05:00

65 lines
2.5 KiB
Python

#!/usr/bin/env python3
"""
backdate.py -- mechanically back-date a WinTesla-era engine header (BT411/BT412
engine/MUNGA*/X.h) to its 1995 form (source410/MUNGA/X.HPP).
Transforms (the mechanical part -- ALWAYS eyeball the result and write the
.NOTES.md sidecar; content drift is NOT detected here):
#pragma once -> #if !defined(X_HPP) / #define X_HPP ... #endif
#include "y.h" -> guarded #if !defined(Y_HPP) #include <y.hpp> #endif
(system includes like <string.h> are left alone)
Usage: py -3 backdate.py <donor.h> <OUTPUT.HPP>
"""
import os
import re
import sys
def main():
donor, out = sys.argv[1], sys.argv[2]
name = os.path.splitext(os.path.basename(out))[0].upper()
guard = "%s_HPP" % name
body = open(donor, "r", errors="replace").read().splitlines()
res = []
warned = set()
for line in body:
s = line.strip()
if s == "#pragma once":
continue
# local include, possibly with a relative path -- keep the basename
m = re.match(r'#include\s+"(?:[.\\/A-Za-z0-9_]*[\\/])?([A-Za-z0-9_]+)\.h(?:pp)?"', s)
if m:
inc = m.group(1).lower()
g = inc.upper() + "_HPP"
res.append("#\tif !defined(%s)" % g)
res.append("#\t\tinclude <%s.hpp>" % inc)
res.append("#\tendif")
continue
# post-1994 C++ the 4.52 compiler rejects: de-modernize
line = re.sub(r"\bstd::", "", line)
line = re.sub(r"\btrue\b", "True", line)
line = re.sub(r"\bfalse\b", "False", line)
line = re.sub(r"\bbool\b", "Logical", line)
for bad in ("<ostream>",):
if bad in line:
line = None
break
if line is None:
continue
for marker in ("namespace", "static_cast", "reinterpret_cast", "const_cast"):
if marker in s and marker not in warned:
warned.add(marker)
print("WARNING: post-1994 construct '%s' present -- fix by hand" % marker)
res.append(line)
# strip leading blank lines
while res and not res[0].strip():
res.pop(0)
with open(out, "w", newline="\r\n") as f:
f.write("#if !defined(%s)\n#\tdefine %s\n\n" % (guard, guard))
f.write("\n".join(res))
f.write("\n\n#endif\n")
print("wrote %s (%d lines from %s)" % (out, len(res) + 5, donor))
if __name__ == "__main__":
main()