summary_programargs-iochan.md 1.7 KB

Step: ProgramArgs + IOChan

Tag v3-programargs-iochan. Suite 126/126; fixpoint OK (bootstrap/fixpoint.sh, image 2,071,330 bytes).

ProgramArgs

  • ArgCount() : CARDINAL — the number of arguments after the program name.
  • GetArg(n : CARDINAL; VAR s : ARRAY OF CHAR) : BOOLEAN — 1-based (1 = first argument); FALSE when absent.
  • Over SysShim.argc/SysShim.arg → shim m2argc/m2arg, which read /proc/self/cmdline (Linux).

IOChan

  • TYPE ChanId; — opaque; completed as ADDRESS (a C FILE *).
  • StdInChan/StdOutChan/StdErrChan.
  • ReadChar, WriteChar, WriteString, WriteLn, WriteInt.
  • All operations go through SysShim (stdin/stdout/stderr, fgetc/fputc/fputs/fwriteln/fwriteint); a NIL handle degrades to a safe no-op / 0C, as in Files.

Bridge additions

  • runtime/syslib/SysShim.def/.mod: argc, stdin, fgetc, fwriteint.
  • runtime/syslib/shim.c: m2stdin.

Tests

  • progargs_prog.mod (exit 7, run with no arguments): ArgCount = 0, GetArg(1) and GetArg(999) return FALSE.
  • iochan_prog.mod: writes hello 42 on StdOutChan, reads one character from StdInChan, echoes got Z; first stdout line hello 42, exit 0.

Scope notes

  • ProgramArgs.ArgCount excludes argv[0]; GetArg is 1-based.
  • IOChan is a pragmatic subset: ReadString, ReadResult, seek/position and channels over files are not included; ChanId wraps only the standard streams for now.

Files

stdlib/programargs.def/.mod, stdlib/iochan.def/.mod, runtime/syslib/SysShim.def/.mod, runtime/syslib/shim.c, compiler/tests/{progargs_prog,iochan_prog}.mod, compiler/run_tests.sh, docs/{features,plan}.md.