THE MATRIX v0.3.3 - BUILD / VALIDATION INFORMATION
================================================
Created by Xendrome - https://www.dosbbs.com

All four executables were rebuilt from this package's source as 386+ real-mode
DOS MZ programs. These are DOS executables, not Windows applications.
Player magic MXPLR04 adds three U16 fields (gambling year, day, games used).
MXPLR03 records and older v1/v2 records convert automatically. Record headers
and world format are unchanged; all game/editor binaries must be upgraded together.

BUILD TOOLCHAIN
---------------
gcc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0
GCC -m16 -march=i386 -std=c89 -Oz, custom DOS runtime, GNU ld and objcopy.
Warnings are errors for C compilation. Function/data sections are linked with
--gc-sections to an ELF intermediate, then objcopy extracts the flat image and
make_mz.py creates the DOS MZ header. The ELF is only a build intermediate;
run the .EXE in DOS. The existing linker guard (__image_end < 0xEF00) remains.
The linker may describe the ELF load segment as RWX; this single-segment
real-mode intermediate is not a protected-mode Linux program.

From SOURCE on Linux with GCC/binutils/Python 3:
  sh BUILD_GCC16.SH
  sh BUILD_COMMONS_GCC16.SH
  sh BUILD_EDITOR_GCC16.SH
  sh BUILD_INST_GCC16.SH

The Open Watcom batch files are retained as alternate source-build recipes;
Open Watcom builds were not exercised for this release. Supplied EXEs are GCC.

FINAL DOS IMAGE SIZES
--------------------
File            EXE bytes   Image+BSS end   Bytes below stack top (0xFFFC)
MATRIX.EXE         57012   0xEB4C           5296
COMMONS.EXE        34352   0x918C           28272
EDITOR.EXE         55724   0xE32C           7376
GETINST.EXE         6408   0x1B0C           58608

The raw stack margins are not a formal maximum-stack proof. GCC stack-usage
reports were inspected for the large arena, news and editor frames; the build
continues to enforce the original image-boundary safety guard.

REGRESSION CHECKS
-----------------
Run: python3 tests/RUNTEST.PY
Requires a Linux/POSIX host with GCC and Python 3. The runner creates temporary
DATA directories and removes them afterward; it does not use live player data.
The tests use actual game/persistence code and simulated terminal input.

26 passing scenarios:
  levelreward - progressive saved rewards, no repeat payout, cancellation,
                maximum level and credit-cap handling
  news        - expired records removed on append/view, recent records retained
  newsfail    - failed temporary write preserves existing news
  newsbackup  - interrupted replacement recovers NEWS.BAK
  locks       - old active locks cannot be stolen; only owned locks are removed
  world       - overlapping counters/gauges merge; editor changes preserve other
                updates; daily reset is once per date; old sessions cannot undo it
  corrupt     - invalid player/world records fail closed and remain intact
  orphan      - lone player TMP is preserved for recovery, not replaced
  backup      - a valid backup recovers a damaged current player record
  savefail    - failed player save stops the process with exit code 6
  focus       - re-entry does not refill zero Focus during the same day
  disconnect  - character creation and affected submenus return on carrier loss
  credits     - large percentage losses and capped additions do not wrap
  betwin      - winning wager and profit persist
  betlose     - seven wrong guesses persist the lost stake
  betdrop     - disconnection does not refund the committed stake
  daily       - three-play cap, re-entry, day rollover, clock-backward handling
                and configurable limits (including zero)
  cancel      - cancelling the wager costs neither credits nor a play
  limitcfg    - configuration save/load and default for an absent new key
  migrate     - old player record upgrades while retaining character progress
  io_test     - actual input helpers return on an already-lost carrier

Additional identity regressions:
  identity    - two ATDT callers with ID 1 retain separate characters; original
                P0000001 owner and case-insensitive re-entry preserve progress
  collision   - a conflicting stored handle refuses access without writes
  dropfile    - actual parser rejects missing/truncated/blank/oversized identity
  main entry  - real MATRIX entry rejects a missing dropfile before DATA access
  Commons     - real COMMONS entry rejects a missing dropfile before DATA access

MZ header lengths, image payloads, allocation size and linker bounds were checked.
The shipped runtime binaries match their SOURCE build-directory copies byte for
byte. Archive integrity and source/runtime display consistency were checked.
This is source/build and host-side regression validation. The release has not
been run end-to-end in the user's live FreeDOS/ATDT/FOSSIL environment.

COMPATIBILITY / OPERATIONS
--------------------------
The existing FOSSIL character-output path and DOS file-I/O latency improvements
are retained. Output/flush is skipped after detected carrier loss. Critical
player/world writes check commit and close errors and stop on failure.
Normal/fatal C exits release process-owned locks. Forced VM termination can leave
locks; see UPGRADE.TXT for safe offline recovery and installation instructions.

SHA-256 OF SHIPPED EXECUTABLES
-----------------------------
77038e12d7c91bb7bd49f159e80634cf467b92a13a58499257ca895348906536  MATRIX.EXE
c4f323379dd27dacd82080078b8192833012e74dd9106a8612b8e9c59c6de777  COMMONS.EXE
00a08bb4f356499eb9f9acecbe5d73f5f82e784aa3a587f92282e3ac42f3da7b  EDITOR.EXE
b3a9619fce841044d115b49d7300de9b15890aa9a74b5235d75ee680a83cbe1c  GETINST.EXE

HELP DISPLAY VALIDATION
-----------------------
All five help screens checked for DOS CRLF, 24 rows, at most 78 visible
columns, matching source/runtime copies, and no terminal wrap or scroll.
Menu keys and status blocks also use updated colors and spacing.
