#!/usr/bin/env bash # Part of JoeyLib, Copyright (c) 2026 Scott Duensing, under the MIT License. # See LICENSE.md for license information. # SPDX-License-Identifier: MIT # # verify-win16-save.sh - Save gate for the Win16 port: a save outlives the # program, beside it. # # SAVE.EXE (examples/save) counts its launches in SAVES\RUNS.DAT. Windows # 3.11 under DOSBox (scripts/lib/win16Gate.sh) is booted twice with it as # the shell, its scratch folder as drive D:. Windows starts it from # C:\WINDOWS, so the port's own move into the program's folder is what puts # SAVES there. Each run is stopped once it has counted itself (SAVE waits # for ESC); the first must count 1 and the second 2. # # Usage: scripts/verify-win16-save.sh # Requires: Windows on DOSBox (install.sh install emulator:win16); # build/win16/bin/SAVE.EXE (make win16). set -uo pipefail repo=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd) source "$repo/scripts/lib/joeyEnv.sh" source "$repo/scripts/lib/win16Gate.sh" label=verify-win16-save win16Need program=$(joeyExampleProgram save win16) [ -f "$program" ] || { echo "$label: build SAVE.EXE first (make win16)" >&2; exit 2; } runSeconds=60 work=$(mktemp -d -t joeylib-win16-save.XXXXXX) cleanup() { win16Stop rm -rf "$work" } trap cleanup EXIT # savedCount -- the launch count in SAVES\RUNS.DAT, or nothing yet. savedCount() { local saved saved=$(find "$work/program" -maxdepth 2 -ipath "*/saves/runs.dat" -print -quit) [ -s "$saved" ] || return 0 python3 -c "import struct, sys; print(struct.unpack('&2 exit 1 fi done echo "$label: PASS (the second run counted 2, in SAVES beside the program)"