Follows the step-7 analysis. Rather than force one FileIO under
two ABIs (host gm2 NUL-terminated strings vs V3 length-prefixed
descriptors), this lands the self-hosted syslib the stage-2
compiler will link: runtime/syslib/SysShim + runtime/syslib/FileIO
— V3-only, descriptor-aware, over the existing C shim. Suite 103/103.
runtime/syslib/SysShimDescriptor-aware externals over shim.c: fopenread/fopenwrite
(→ ADDRESS), fclose, fread (bulk, sets the buffer's length),
fputc, fputs, fwriteln, fwriteintw, stdout/stderr
(→ ADDRESS), arg (argv via /proc/self/cmdline). Statement-like
operations are proper procedures (V3's 233 forbids
function-as-statement); value-returning ones are functions.
runtime/syslib/FileIOThe compiler's FileIO subset, reimplemented over SysShim only:
File = ADDRESS; Open/Close/ReadBytes/Write/WriteLn/
WriteString/WriteInt/WriteCard/NextParameter, plus
SLENGTH/Assign/Extract/Concat/Compare and the classic
constants. This is the stage-2 counterpart of the host FileIO
used to bootstrap; the stage-1 gm2 build keeps the host library
(the standard bootstrap split, as Blaise does with FPC).
FioProg → 42: writes "hello\n" via the self-hosted FileIO, opens
it for read, ReadBytes (which sets the buffer's length), and checks
buf[0] = 'h' and length 6. Harness links shim.c.
Compiling the compiler's own sources with V3 will also need:
0C/15C/177C octal char-code
literals → CHR(n) (V3 has no C suffix), and &/~/<> →
AND/NOT/#.DEFINITION MODULE FOR "C" + EXPORT UNQUALIFIED V3 dialect
only if a single FFI definition must also compile under gm2
(not needed for the current split).runtime/syslib/SysShim.def|.mod, runtime/syslib/FileIO.def|.mod,
compiler/tests/fio_prog.mod, compiler/run_tests.sh.
Step 7 remains "in progress": the compiler-source Redux sweep and
the FileIO selection between stages are the remaining tasks.