Files
Hermes Agent d555071406 fix: stabilize learning path, reliability and legacy Windows builds
Unify beginner syntax while preserving compatibility, repair ownership and parser guards, add verified distribution tooling and VC6 Windows 98 build inputs, and clarify documentation and release status. Preserve DOS build-input line endings and exclude generated binaries/caches.
2026-10-20 22:40:19 +00:00

2.8 KiB

Windows 98 SE compilation (Visual C++ 6.0)

Claro has a dedicated 32-bit x86, MSVC6 build. It keeps the runtime in the single src/claro.c file. This is separate from the modern MinGW x64 download.

Build on a configured VC6 system

  1. Extract the project to a short path such as C:\CLARO.
  2. Open the compiler environment installed with Visual C++ 6.0, or run that installation's original VCVARS32.BAT. Check cl reports compiler 12.00. Compiler, include and library paths remain installation-specific; the project does not bundle Microsoft's toolchain.
  3. Change to the Claro folder and run:
build98.bat

The output is claro98.exe. Try:

claro98.exe --version
claro98.exe lessons\01_hello.claro
claro98.exe test

build98.bat and build98.rsp use 8.3-compatible names. The batch file uses no SETLOCAL, %~dp0, EXIT /B, WHERE, or command-chaining extensions. Compiler options live in a response file to avoid COMMAND.COM's short command-line limit. Both files use CRLF line endings. Modernized toolchain environment wrappers may use CMD-only syntax; use the VC6 environment appropriate to the actual host.

Target settings

  • /TC /W3: compile as C with normal warnings.
  • /ML /O1: VC6 static single-threaded CRT, optimized for size. No newer Visual C++ runtime DLL needs to be installed for this build.
  • WINVER=0x0410, _WIN32_WINDOWS=0x0410: Windows 98 header target selection.
  • /MACHINE:I386 /SUBSYSTEM:CONSOLE,4.10: 32-bit x86 console executable with a Windows 98-era subsystem version.
  • /STACK:16777216: 16 MiB reserve so nested calls reach Claro's existing recursion guard instead of overflowing the default Windows stack first.

The source selects long for _findfirst handles on pre-VC7 MSVC, matching the VC6 CRT declaration. Modern compilers retain their pointer-sized handle type. No /Dintptr_t=long workaround is used.

Verification boundary

The build is exercised with the actual MSVC600 compiler and linker under Wine. The source/build-policy check is python3 tools/validate_msvc6_source.py, also included in full release validation and CI. It does not replace the actual VC6 compiler test.

A PE header and a successful Wine test are not proof of execution on Windows 98 SE. Native Win98 SE loader/CRT, filesystem, console, shell, encoding and device behavior still need testing on that OS or a faithful emulator. Some static VC6 CRT imports include Wide-character API entry points and fallback paths; their presence must not be mistaken for a modern-NT-only requirement or for proof of Win98 correctness without a real target test.

Real HTTP requires a separately compatible curl executable. No modern TLS stack, GUI installer, Microsoft SDK or runtime DLL bundle is supplied. Run only trusted scripts. See portability and runtime limits.