diff --git a/.claude/skills/limbo-dev/SKILL.md b/.claude/skills/limbo-dev/SKILL.md index be628bd0c..247c3930d 100644 --- a/.claude/skills/limbo-dev/SKILL.md +++ b/.claude/skills/limbo-dev/SKILL.md @@ -32,9 +32,14 @@ cd appl/cmd; mk install # installs to the canonical path ``` If a fix "isn't taking effect" — same bug after recompile, diagnostic -prints not appearing — run `tools/verify-dis-paths.sh` before chasing -anything else. The pre-commit hook (`./hooks/install.sh`) and CI both run -it. +prints not appearing — you almost certainly compiled to a path nothing +loads. `dis/` is a build product and is not tracked; rebuild it properly: + + for d in appl appl/mpeg appl/veltro tests; do (cd $d && mk install); done + +Never hand-roll `limbo -o `; use `tools/compile-limbo.sh` or +`mk install`. `tools/verify-dis-build.sh` (run by CI) checks the build +against `tools/dis-manifest.txt`. **2. A changed `.m` interface stales every dependent `.dis`.** The Dis VM rejects stale modules at load time with `link typecheck` errors — blank @@ -71,7 +76,7 @@ Verify every modified file's pre-image matches master tip (rebase, then `git diff master...HEAD` and check the base blobs). A branch cut from — or contaminated by — another unmerged branch can carry someone else's change through a textually clean merge, silently. Then run -`tools/verify-dis-paths.sh` and fill the PR template's design-principles +`tools/verify-dis-build.sh` and fill the PR template's design-principles checklist honestly. ## Running what you built diff --git a/.claude/skills/limbo-test/SKILL.md b/.claude/skills/limbo-test/SKILL.md index 30790b304..93003ca56 100644 --- a/.claude/skills/limbo-test/SKILL.md +++ b/.claude/skills/limbo-test/SKILL.md @@ -119,6 +119,6 @@ assuming it exercises behavior. suite passed — read the job log when it matters. - Gating: nsaudit fixture checks, wallet/secstore integration, the presentation file-open GUI regression, JIT correctness and boot smoke, - `verify-dis-paths`, `verify-sh-exec`, and the ring-fence job. + `verify-dis-build`, `verify-sh-exec`, and the ring-fence job. - Benchmarks (`tests/bench/`), stress (`tests/stress/`), and interop (`tests/interop/`) are deliberately outside the auto-run suite. diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6c93381ee..7d0891e5c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -171,6 +171,14 @@ jobs: echo "WARNING: libfido2 not linked — /dev/2fa will be a stub in this artifact" >&2 fi + # dis/ is not tracked, so the tree must be built before it can be + # staged -- exactly as emu/*/o.emu already is. This also checks the + # build against tools/dis-manifest.txt, so a release cannot quietly + # ship with a module missing. + PATH="$ROOT/$(uname -s | sed 's/Darwin/MacOSX/')/$(uname -m | sed 's/x86_64/amd64/; s/aarch64/arm64/')/bin:$PATH" + export PATH + "$ROOT/tools/verify-dis-build.sh" + # Shared runtime tree for d in dis lib fonts module services locale usr mnt; do [ -d "$d" ] && cp -a "$d" "$STAGE/" @@ -449,6 +457,14 @@ jobs: cp Linux/amd64/bin/limbo Linux/amd64/bin/mk "$STAGE/bin/" strip "$STAGE/bin/emu" "$STAGE/bin/limbo" "$STAGE/bin/mk" + # dis/ is not tracked, so the tree must be built before it can be + # staged -- exactly as emu/*/o.emu already is. This also checks the + # build against tools/dis-manifest.txt, so a release cannot quietly + # ship with a module missing. + PATH="$ROOT/$(uname -s | sed 's/Darwin/MacOSX/')/$(uname -m | sed 's/x86_64/amd64/; s/aarch64/arm64/')/bin:$PATH" + export PATH + "$ROOT/tools/verify-dis-build.sh" + # Runtime tree into resources/ for d in dis lib fonts module services locale usr mnt; do [ -d "$d" ] && cp -a "$d" "$STAGE/resources/" @@ -643,6 +659,14 @@ jobs: echo "WARNING: libfido2 not linked — /dev/2fa will be a stub in this artifact" >&2 fi + # dis/ is not tracked, so the tree must be built before it can be + # staged -- exactly as emu/*/o.emu already is. This also checks the + # build against tools/dis-manifest.txt, so a release cannot quietly + # ship with a module missing. + PATH="$ROOT/$(uname -s | sed 's/Darwin/MacOSX/')/$(uname -m | sed 's/x86_64/amd64/; s/aarch64/arm64/')/bin:$PATH" + export PATH + "$ROOT/tools/verify-dis-build.sh" + # Shared runtime tree for d in dis lib fonts module services locale usr mnt; do [ -d "$d" ] && cp -a "$d" "$STAGE/" @@ -919,6 +943,14 @@ jobs: # Native tools cp Linux/arm64/bin/limbo Linux/arm64/bin/mk "$STAGE/bin/" + # dis/ is not tracked, so the tree must be built before it can be + # staged -- exactly as emu/*/o.emu already is. This also checks the + # build against tools/dis-manifest.txt, so a release cannot quietly + # ship with a module missing. + PATH="$ROOT/$(uname -s | sed 's/Darwin/MacOSX/')/$(uname -m | sed 's/x86_64/amd64/; s/aarch64/arm64/')/bin:$PATH" + export PATH + "$ROOT/tools/verify-dis-build.sh" + # Runtime tree into resources/ for d in dis lib fonts module services locale usr mnt; do [ -d "$d" ] && cp -a "$d" "$STAGE/resources/" @@ -1115,6 +1147,14 @@ jobs: # Strip debug symbols before signing strip "$MACOS/emu" "$MACOS/tools/limbo" "$MACOS/tools/mk" + # dis/ is not tracked, so the tree must be built before it can be + # staged -- exactly as emu/*/o.emu already is. This also checks the + # build against tools/dis-manifest.txt, so a release cannot quietly + # ship with a module missing. + PATH="$ROOT/$(uname -s | sed 's/Darwin/MacOSX/')/$(uname -m | sed 's/x86_64/amd64/; s/aarch64/arm64/')/bin:$PATH" + export PATH + "$ROOT/tools/verify-dis-build.sh" + # Runtime tree goes in Contents/Resources/ for d in dis lib fonts module services locale usr mnt; do [ -d "$d" ] && cp -a "$d" "$RESOURCES/" @@ -1336,6 +1376,14 @@ jobs: cp MacOSX/arm64/bin/limbo MacOSX/arm64/bin/mk "$STAGE/MacOSX/arm64/bin/" strip "$STAGE/emu/MacOSX/o.emu" "$STAGE/MacOSX/arm64/bin/limbo" "$STAGE/MacOSX/arm64/bin/mk" 2>/dev/null || true + # dis/ is not tracked, so the tree must be built before it can be + # staged -- exactly as emu/*/o.emu already is. This also checks the + # build against tools/dis-manifest.txt, so a release cannot quietly + # ship with a module missing. + PATH="$ROOT/$(uname -s | sed 's/Darwin/MacOSX/')/$(uname -m | sed 's/x86_64/amd64/; s/aarch64/arm64/')/bin:$PATH" + export PATH + "$ROOT/tools/verify-dis-build.sh" + # Shared runtime tree for d in dis lib fonts module services locale usr mnt; do [ -d "$d" ] && cp -a "$d" "$STAGE/" diff --git a/.github/workflows/verify-dis-build.yml b/.github/workflows/verify-dis-build.yml new file mode 100644 index 000000000..0a5e4c383 --- /dev/null +++ b/.github/workflows/verify-dis-build.yml @@ -0,0 +1,42 @@ +name: Verify dis build + +# dis/ is a build product and is not tracked, so it cannot go stale. What +# it CAN do is quietly lose a module: drop a target from an mkfile's TARG +# and the module simply stops being built, with nothing to say so until +# something fails to load at runtime. 45 modules were already in that +# state and only kept working because their bytecode happened to be +# committed. +# +# tools/dis-manifest.txt tracks the set of modules the build must produce. +# This job builds the tree and compares. A module appearing or vanishing +# is a reviewable one-line diff instead of a binary blob. + +on: + pull_request: + push: + branches: [master] + +permissions: + contents: read + +jobs: + dis-build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + + - name: Build native toolchain + run: | + set -e + export ROOT="$PWD" + SYSTARG=Linux OBJTYPE=amd64 ./makemk.sh + export PATH="$ROOT/Linux/amd64/bin:$PATH" + for d in lib9 libbio libmp libsec libmath utils/iyacc limbo; do + (cd "$d" && mk install) + done + + - name: Build the runtime tree and check the manifest + run: | + export ROOT="$PWD" + export PATH="$ROOT/Linux/amd64/bin:$PATH" + ./tools/verify-dis-build.sh diff --git a/.github/workflows/verify-dis-paths.yml b/.github/workflows/verify-dis-paths.yml deleted file mode 100644 index 4c6df9884..000000000 --- a/.github/workflows/verify-dis-paths.yml +++ /dev/null @@ -1,27 +0,0 @@ -name: Verify dis-paths - -# Universal backstop for the "stale build artefact" bug class -# (INFR-28 history): a Limbo source file is committed, but the -# corresponding compiled .dis at the path declared in the module's -# PATH constant is missing or older than the source. emu loads the -# stale .dis; every "fix" appears to do nothing locally. -# -# This job runs in seconds and blocks merge. It catches contributors -# who don't have the local pre-commit hook installed (hooks/install.sh) -# or who used the wrong manual `limbo -o ...` target. - -on: - pull_request: - push: - branches: [master] - -permissions: - contents: read - -jobs: - verify: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - - name: Verify dis paths - run: ./tools/verify-dis-paths.sh diff --git a/.gitignore b/.gitignore index 50010caf8..b92efc78d 100644 --- a/.gitignore +++ b/.gitignore @@ -66,7 +66,36 @@ services/httpd/httpd.log !.clusterfuzzlite/Dockerfile # Compiled Limbo bytecode in source tree (build artifacts) -# Note: dis/*.dis (runtime files) are TRACKED, matching upstream Inferno OS +# Compiled Dis bytecode is a BUILD PRODUCT, not source. It is not tracked. +# +# It used to be, inherited from the 2006 upstream drop (46439007c), and the +# tree drifted from the source that produced it: bytecode went stale, modules +# were compiled to paths the build never installs to, sources were deleted +# with their binaries left behind, and 45 modules shipped that no mkfile +# compiled. Releases shipped ~940 files nothing had built from the tagged +# source. +# +# A release still ships a runnable tree -- the packaging job builds it first, +# exactly as it already did for emu/*/o.emu, which was never tracked either. +# +# Rebuild after a pull: for d in appl appl/mpeg appl/veltro tests; do +# (cd $d && mk install); done +# (hooks/post-merge does this for you -- install it with ./hooks/install.sh) +# +# The SET of modules the build must produce IS tracked, as +# tools/dis-manifest.txt, so a module cannot vanish unnoticed. +# +# Only *.dis is ignored: the hand-written Inferno sh scripts that live in +# these trees (acme/dis/Clean, dis/svc/auth, dis/lc, ...) are real sources +# and stay tracked. +dis/**/*.dis +acme/dis/**/*.dis +xenith/dis/**/*.dis +dis/**/*.sbl +# installed by appl/cmd/git/mkfile +dis/cmd/git/log.sh +dis/cmd/git/status.sh +dis/cmd/git/diff.sh /appl/**/*.dis /appl/**/*.sbl # Also exclude tests build artifacts @@ -77,15 +106,8 @@ services/httpd/httpd.log # Root-level build artifacts (stray compiles) /*.dis /*.sbl -# Debug symbols in runtime dis tree -/dis/**/*.sbl -# dis/tests/*.dis is TRACKED (runtime tree ships prebuilt, tests included — -# maintainer ruling 2026-08-21); only this stray lib-tree test artifact is not. -/dis/lib/testing_test.dis # CI/local test output test-output.txt -# Xenith plugin build artifacts (built from appl/xenith/xenith/) -/xenith/dis/ .env # Claude Code local settings @@ -199,9 +221,6 @@ tmp/.veltro/ # running veltro tests under emu); not source. usr/inferno/veltro/ -# Stale build artifacts placed in wrong location (authoritative copies are in dis/) -dis/cmd/luci*.dis -dis/cmd/luci*.sbl # Stray files fprint' @@ -254,7 +273,6 @@ usr/inferno/secstore/*/ lib/veltro/welcome_shown lib/veltro/tour_offered -dis/mermaid_test.dis # Runtime overlay root — populated by emu at boot, never tracked n/local/ @@ -294,10 +312,6 @@ build-android-apk.ndk-x86_64.log # node interop harness artifacts (generated; never commit keys) usr/inferno/keyring/interop-* tmp/interop_pulled_* -dis/interop_node_server.dis -dis/interop_node_client.dis -/dis/tests/stress/ -/dis/tests/bench/ # Local video/image capture from codec testing (kept on disk, never committed) *.m1v diff --git a/AGENTS.md b/AGENTS.md index fee2af9ed..714ed4929 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -30,12 +30,46 @@ Use the platform scripts instead of inventing local build flows. - `./build-linux-amd64.sh headless`: Linux build without SDL3. - `./build-macos-sdl3.sh` or `./build-macos-headless.sh`: macOS builds. - `powershell -ExecutionPolicy Bypass -File build-windows-amd64.ps1`: Windows build. -- `cd appl/cmd && mk install`: rebuild one Limbo subtree and install tracked runtime output into `dis/`. -- `cd tests && mk install && cd ..`: rebuild Limbo tests into the tracked runtime tree. +- `cd appl/cmd && mk install`: rebuild one Limbo subtree into `dis/`. +- `cd tests && mk install && cd ..`: rebuild the Limbo tests into `dis/tests/`. - `./run-tests.sh`: run host and emulator tests. - `./run-tests.sh -h` or `./run-tests.sh -i -v`: run only host tests, or only emulator tests with verbose output. - `./emu//o.emu -r. /tests/runner.dis -v`: run the native Limbo test runner directly when working inside the emulator workflow. +## Compiled bytecode is not in the repository + +`dis/` holds compiled Dis bytecode. **It is a build product and is not +tracked**, exactly like `emu/*/o.emu`. A fresh clone has no runtime until you +build one. Do not commit `.dis` files, and do not treat a missing one as a +bug in the tree. + +**Standard procedure after cloning, pulling, or changing any `.b` or `.m`:** + +```sh +export ROOT=$PWD +export PATH="$ROOT/$SYSHOST/$OBJTYPE/bin:$PATH" # e.g. Linux/arm64/bin +for d in appl appl/mpeg appl/veltro tests; do (cd $d && mk install); done +``` + +`hooks/post-merge` does this automatically after `git pull` — install it once +with `./hooks/install.sh`. Rebuilding the whole tree takes about 20 seconds. + +Those four directories are the complete set: `appl/mpeg` and `appl/veltro` are +**not** in `appl/mkfile`'s `DIRS`, so `cd appl && mk install` alone does not +reach them. This catches people out; use the loop. + +**If a change makes the build produce a different set of modules**, update +`tools/dis-manifest.txt` in the same commit. It lists every module the build +must produce, and `tools/verify-dis-build.sh` (run by CI and by every release +job) fails when one goes missing. Adding a module means adding a target to an +mkfile `TARG` *and* a line to the manifest; removing one means deleting both. +A module that is not in any `TARG` is never compiled — 45 were in that state +and only appeared to work because their bytecode had been committed by hand. + +**Never run `limbo -o ` by hand.** Use `tools/compile-limbo.sh` or +`mk install` from the source directory. Choosing an output path yourself is +how modules end up somewhere no build installs to and no runtime loads from. + ## Coding Style & Naming Conventions Match the surrounding code closely. Limbo (`.b`) is close to Go in structure but should follow existing Inferno idioms, naming, and control-flow style. C uses Plan 9 / Inferno conventions and tabs, not generic modern C house styles. *Host-side* shell scripts (`tests/host/`, `tools/`, `build-*.sh`) stay POSIX `sh` compatible; scripts that run *inside Inferno* (`tests/inferno/`, `lib/sh/`, boot scripts) are rc-style — no `&&`/`||` — see [docs/INFERNO-SHELL.md](docs/INFERNO-SHELL.md). Name new emulator tests `*_test.b`, host tests `*_test.sh`, and keep module interfaces in `module/` aligned with their implementation names. @@ -44,7 +78,7 @@ Use Inferno `mk`, not GNU make, for subtree builds. In `mkfile`s, do not chain c ## Testing Guidelines -Behavior changes should include tests. Prefer the repository’s Limbo test setup instead of ad hoc harnesses: build tests with `mk install`, then run them through `tests/runner.dis` or `./run-tests.sh`. Host integration checks belong in `tests/host/`. If a change regenerates runtime `.dis` files under `dis/`, make sure they result from `mk install` in the corresponding source directory rather than manual edits. +Behavior changes should include tests. Prefer the repository’s Limbo test setup instead of ad hoc harnesses: build tests with `mk install`, then run them through `tests/runner.dis` or `./run-tests.sh`. Host integration checks belong in `tests/host/`. `.dis` files are never committed; if a change adds or removes a module, update `tools/dis-manifest.txt` to match (see above). ## Security Review Priorities @@ -60,4 +94,4 @@ When proposing fixes, prefer namespace, mount, process-group, file-permission, a Recent history uses scoped, imperative subjects such as `fix(theme): ...`, `build: ...`, and `test: ...`. Keep the first line under 72 characters, explain why in the body when needed, and reference issue IDs like `INFR-28` when relevant. PRs should stay focused, describe the motivation, include test coverage, update docs for interface changes, and include screenshots for UI work in Lucia/Xenith. -Know what CI will check before you push: `verify-dis-paths` (every source's declared `.dis` exists and is fresh — the wrong-target trap), `verify-sh-exec` (Inferno-side test scripts committed mode 755), the ring-fence job (`tests/agent-harness/` material must never appear elsewhere), the advisory style gate (rc-violations, JSON inside `appl/`, new file interfaces with no linked proposal issue), plus builds, the test suites, CodeQL, and nsaudit fixture checks. The PR template's design-principles checklist is expected to be filled honestly. +Know what CI will check before you push: `verify-dis-build` (the tree builds and produces every module `tools/dis-manifest.txt` lists), `verify-sh-exec` (Inferno-side test scripts committed mode 755), the ring-fence job (`tests/agent-harness/` material must never appear elsewhere), the advisory style gate (rc-violations, JSON inside `appl/`, new file interfaces with no linked proposal issue), plus builds, the test suites, CodeQL, and nsaudit fixture checks. The PR template's design-principles checklist is expected to be filled honestly. diff --git a/CLAUDE.md b/CLAUDE.md index 1c628809f..915e0e631 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -47,15 +47,40 @@ The native tools are built to: - `MacOSX/arm64/bin/mk` - Plan 9 mk (Inferno's build tool) - `MacOSX/arm64/bin/limbo` - Limbo compiler -### Dis Files: What's Tracked and What's Not +### Dis Files: A Build Product -The `dis/` directory (the Inferno runtime tree) **is tracked in git**. This is intentional — Inferno is a self-hosting OS, and `dis/` is its `/usr/bin`. Without pre-built `.dis` files, a fresh clone can't boot: no shell, no `cat`, no `ls`. Upstream Inferno OS tracks them for the same reason. +The `dis/` directory holds compiled Dis bytecode. **It is a build product and +is not tracked in git**, exactly like `emu/*/o.emu`. A fresh clone has no +runtime until you build one — and it has no emulator either, so you were +building regardless. -However, **build artifacts in source directories are not tracked**: -- `appl/**/*.dis` — intermediate build outputs (`.gitignore`d) -- `tests/**/*.dis` — compiled tests (`.gitignore`d) +It used to be tracked, inherited from the 2006 upstream drop (`46439007c`, +still in this history). The cost was a tree free to drift from the source that +produced it: bytecode went stale (`dis/acme.dis` shipped font paths the source +had abandoned five months earlier), modules were compiled to paths the build +never installs to, sources were deleted with their binaries left behind, and 45 +modules shipped that no mkfile ever compiled. Releases carried ~940 files that +nothing had built from the tagged source. -This means: the runtime tree ships pre-built — including `dis/tests/`, whose test bytecode is tracked and updated via `mk install` like the rest of `dis/` — but you never commit `.dis` files from the `appl/` or `tests/` source directories. +Releases still ship a runnable tree: the packaging job builds it before +staging, which is how `o.emu` has always worked. + +**Rebuild after cloning, pulling, or editing any `.b` or `.m`:** + +```sh +export ROOT=$PWD +export PATH="$ROOT/$SYSHOST/$OBJTYPE/bin:$PATH" +for d in appl appl/mpeg appl/veltro tests; do (cd $d && mk install); done +``` + +Takes about 20 seconds. `hooks/post-merge` does it for you after `git pull` +(`./hooks/install.sh` once). All four directories are needed: `appl/mpeg` and +`appl/veltro` are not in `appl/mkfile`'s `DIRS`. + +**The set of modules the build must produce is tracked**, as +`tools/dis-manifest.txt`. `tools/verify-dis-build.sh` builds the tree and fails +if anything on that list is missing; CI and every release job run it. Add or +remove a module and you update the manifest in the same commit. **The stale bytecode problem:** When a `.m` interface file changes (e.g. `module/widget.m`), every `.dis` compiled against the old interface becomes stale. The Dis VM rejects stale modules at load time with `link typecheck` errors — apps show blank tabs, commands fail to load, and everything looks broken even though the source is fine. This is the most common class of post-pull breakage. @@ -67,15 +92,31 @@ This means: the runtime tree ships pre-built — including `dis/tests/`, whose t After that, every `git pull` triggers an automatic rebuild of stale bytecode. See `hooks/post-merge` for details. -**The wrong-target trap (READ THIS BEFORE COMPILING ANYTHING).** A separate class of stale-bytecode bug: a module declares `PATH: con "/dis/foo.dis";` so the runtime loads `dis/foo.dis`. The mkfile installs to `dis/foo.dis`. But there is *also* an `appl/cmd/foo.dis` (intermediate) and there used to be a parallel `dis/cmd/foo.dis` tree. If you manually compile with `limbo -o dis/cmd/foo.dis ...` (or any path that is NOT what the module's PATH constant declares), `emu` cheerfully keeps loading the old `dis/foo.dis` while your "fix" silently lands in a directory it never reads from. This has burned multiple debug sessions. The defences: +**The wrong-target trap (READ THIS BEFORE COMPILING ANYTHING).** A module +declares `PATH: con "/dis/foo.dis";` so the runtime loads `dis/foo.dis`, and its +mkfile installs there. If you hand-compile with `limbo -o dis/cmd/foo.dis ...` +— any path that is not what the build installs to — `emu` keeps loading the old +`dis/foo.dis` while your "fix" lands in a directory it never reads from. This +burned multiple debug sessions, and `dis/cmd/` accumulated seven stale +duplicates that way before it was cleaned out. -- **Never run `limbo -o ...` directly.** Use one of: - - `tools/compile-limbo.sh ` — reads the module's `PATH` constant and emits to that exact location. No `-o` to get wrong. - - `mk install` from the appropriate `appl//` — also installs to the canonical path (`DISBIN=$ROOT/dis`). -- **Pre-commit hook** (installed by `./hooks/install.sh`) runs `tools/verify-dis-paths.sh`, which refuses any commit where a source's `dis/.dis` is missing or older than the source. -- **CI** (`.github/workflows/verify-dis-paths.yml`) runs the same verifier on every PR — universal backstop for contributors who didn't install the local hook. +Untracking `dis/` removes most of this: you can no longer commit bytecode, so a +wrongly-placed file is a local mess rather than something that ships. What +remains is that your own tree can lie to you for an afternoon. The defences: -If you see "my fix isn't taking effect" symptoms (the bug looks the same after recompile, diagnostic prints don't appear in logs), check `tools/verify-dis-paths.sh` immediately before chasing anything else. +- **Never run `limbo -o ...` directly.** Use one of: + - `tools/compile-limbo.sh ` — reads the module's `PATH` constant and + emits to that exact location. No `-o` to get wrong. + - `mk install` from the appropriate source directory — installs to the + canonical path the mkfile's `DISBIN` names. +- **`tools/verify-dis-build.sh`** builds the tree and checks it against + `tools/dis-manifest.txt`. A module that no mkfile compiles shows up as + missing. CI and every release job run it. + +If you see "my fix isn't taking effect" symptoms — the bug looks identical after +a recompile, diagnostic prints never appear — you almost certainly compiled to a +path nothing loads. Rebuild properly with the loop above before chasing anything +else. ### Build Commands @@ -392,7 +433,7 @@ infernode/ │ ├── inferno/ # Inferno-side shell tests │ ├── testing/ # Testing framework self-tests │ └── agent-harness/ # Ring-fenced eval-harness gateway (see Ring-fence rule) -├── dis/ # Compiled Dis bytecode (~630 .dis files) +├── dis/ # Compiled Dis bytecode (build product, NOT tracked) ├── lib/ # Runtime data (fonts, shell profile, etc.) │ └── veltro/ # Veltro tools, agents, reminders ├── libinterp/ # Dis VM interpreter and JIT compilers diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a74d16de9..8225f9126 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -241,7 +241,9 @@ InferNode uses Plan 9's `mk` (not GNU make). Important points: - Use InferNode's **native build tools** (`mk`, `limbo`), not Plan 9 Port - Build from your host OS terminal, not inside the Inferno emulator - `mkfile` in each directory defines build rules -- `mk install` compiles and copies output to `dis/` +- `mk install` compiles and copies output to `dis/`, which is a build product and is **not** tracked; + rebuild with `for d in appl appl/mpeg appl/veltro tests; do (cd $d && mk install); done` +- Never commit `.dis` files. If a change adds or removes a module, update `tools/dis-manifest.txt` in the same commit - `mk nuke` cleans build artifacts - Don't use `&&` to chain commands in mkfiles — use `;` or separate rules diff --git a/QUICKSTART.md b/QUICKSTART.md index 216847837..ca72a2789 100644 --- a/QUICKSTART.md +++ b/QUICKSTART.md @@ -71,7 +71,25 @@ This hook runs automatically after every `git pull` or `git merge`. It detects w ### Why are `.dis` files in git? -Inferno is a self-hosting OS — the `dis/` directory is its runtime, like `/usr/bin` on Unix. Without pre-built `.dis` files, a fresh clone has no shell, no `cat`, no `ls`. The runtime tree (`dis/`) is tracked so the system boots immediately after clone. +Inferno is a self-hosting OS and the `dis/` directory is its runtime, like +`/usr/bin` on Unix. It holds compiled bytecode, so it is a **build product and +is not tracked in git** — the same as the emulator binary. A fresh clone has +neither, which is why the build step below is not optional. + +Rebuild the runtime whenever you clone, pull, or edit a `.b` or `.m`: + +```sh +export ROOT=$PWD +export PATH="$ROOT/$SYSHOST/$OBJTYPE/bin:$PATH" # e.g. Linux/arm64/bin +for d in appl appl/mpeg appl/veltro tests; do (cd $d && mk install); done +``` + +That takes about 20 seconds. Installing the git hooks (`./hooks/install.sh`) +makes `git pull` do it for you. All four directories matter: `appl/mpeg` and +`appl/veltro` are not reached by `cd appl && mk install` on its own. + +A downloaded **release** already contains a built runtime — the packaging job +builds it before staging, so nothing is required of you there. Build artifacts in source directories (`appl/**/*.dis`, `tests/**/*.dis`) are **not** tracked — only the runtime tree. diff --git a/acme/dis/Calendar.dis b/acme/dis/Calendar.dis deleted file mode 100644 index e863cf7f1..000000000 Binary files a/acme/dis/Calendar.dis and /dev/null differ diff --git a/acme/dis/Chat.dis b/acme/dis/Chat.dis deleted file mode 100644 index 282451e99..000000000 Binary files a/acme/dis/Chat.dis and /dev/null differ diff --git a/acme/dis/Ctag.dis b/acme/dis/Ctag.dis deleted file mode 100644 index e8199f865..000000000 Binary files a/acme/dis/Ctag.dis and /dev/null differ diff --git a/acme/dis/Feedkey.dis b/acme/dis/Feedkey.dis deleted file mode 100644 index 66ab47ce2..000000000 Binary files a/acme/dis/Feedkey.dis and /dev/null differ diff --git a/acme/dis/Jwin.dis b/acme/dis/Jwin.dis deleted file mode 100644 index 636921fd5..000000000 Binary files a/acme/dis/Jwin.dis and /dev/null differ diff --git a/acme/dis/Mail.dis b/acme/dis/Mail.dis deleted file mode 100644 index fd0c11d00..000000000 Binary files a/acme/dis/Mail.dis and /dev/null differ diff --git a/acme/dis/Mailpop3.dis b/acme/dis/Mailpop3.dis deleted file mode 100644 index 9d0471617..000000000 Binary files a/acme/dis/Mailpop3.dis and /dev/null differ diff --git a/acme/dis/Navigator.dis b/acme/dis/Navigator.dis deleted file mode 100644 index 6ac281358..000000000 Binary files a/acme/dis/Navigator.dis and /dev/null differ diff --git a/acme/dis/Prompt.dis b/acme/dis/Prompt.dis deleted file mode 100644 index 38b5f2d83..000000000 Binary files a/acme/dis/Prompt.dis and /dev/null differ diff --git a/acme/dis/Sql.dis b/acme/dis/Sql.dis deleted file mode 100644 index f1ee90ed8..000000000 Binary files a/acme/dis/Sql.dis and /dev/null differ diff --git a/acme/dis/Wiki.dis b/acme/dis/Wiki.dis deleted file mode 100644 index bef0a9119..000000000 Binary files a/acme/dis/Wiki.dis and /dev/null differ diff --git a/acme/dis/adeb.dis b/acme/dis/adeb.dis deleted file mode 100644 index eadfdd1e0..000000000 Binary files a/acme/dis/adeb.dis and /dev/null differ diff --git a/acme/dis/adict.dis b/acme/dis/adict.dis deleted file mode 100644 index 2c317f6b6..000000000 Binary files a/acme/dis/adict.dis and /dev/null differ diff --git a/acme/dis/adiff.dis b/acme/dis/adiff.dis deleted file mode 100644 index 08f22381a..000000000 Binary files a/acme/dis/adiff.dis and /dev/null differ diff --git a/acme/dis/agrep.dis b/acme/dis/agrep.dis deleted file mode 100644 index 315999cdb..000000000 Binary files a/acme/dis/agrep.dis and /dev/null differ diff --git a/acme/dis/airc.dis b/acme/dis/airc.dis deleted file mode 100644 index ba3dccac4..000000000 Binary files a/acme/dis/airc.dis and /dev/null differ diff --git a/acme/dis/awd.dis b/acme/dis/awd.dis deleted file mode 100644 index 9fb735702..000000000 Binary files a/acme/dis/awd.dis and /dev/null differ diff --git a/acme/dis/cd.dis b/acme/dis/cd.dis deleted file mode 100644 index db3ef3df4..000000000 Binary files a/acme/dis/cd.dis and /dev/null differ diff --git a/acme/dis/irc.dis b/acme/dis/irc.dis deleted file mode 100644 index c77d5272b..000000000 Binary files a/acme/dis/irc.dis and /dev/null differ diff --git a/acme/dis/mkbox.dis b/acme/dis/mkbox.dis deleted file mode 100644 index 5051c0d8d..000000000 Binary files a/acme/dis/mkbox.dis and /dev/null differ diff --git a/acme/dis/rect.dis b/acme/dis/rect.dis deleted file mode 100644 index 143fe1593..000000000 Binary files a/acme/dis/rect.dis and /dev/null differ diff --git a/acme/dis/spout.dis b/acme/dis/spout.dis deleted file mode 100644 index 55dfbf0ad..000000000 Binary files a/acme/dis/spout.dis and /dev/null differ diff --git a/acme/dis/win.dis b/acme/dis/win.dis deleted file mode 100644 index 49082f00f..000000000 Binary files a/acme/dis/win.dis and /dev/null differ diff --git a/acme/dis/winm.dis b/acme/dis/winm.dis deleted file mode 100644 index dc5debf0d..000000000 Binary files a/acme/dis/winm.dis and /dev/null differ diff --git a/appl/acme/mkfile b/appl/acme/mkfile index f9b075ce2..c861870c6 100644 --- a/appl/acme/mkfile +++ b/appl/acme/mkfile @@ -83,7 +83,9 @@ all:V: acme.dis install:V: $ROOT/dis/acme.dis $ROOT/dis/acme.dis: acme.dis - rm -f $target && cp acme.dis $target + mkdir -p $ROOT/dis + rm -f $target + cp acme.dis $target acme.dis: $MODULES $SYS_MODULE diff --git a/appl/charon/mkfile b/appl/charon/mkfile index 47cdf3930..46ada9195 100644 --- a/appl/charon/mkfile +++ b/appl/charon/mkfile @@ -81,10 +81,14 @@ all:V: charon.dis install:V: $ROOT/dis/charon.dis $ROOT/dis/wm/charon.dis $ROOT/dis/charon.dis: charon.dis - rm -f $target && cp charon.dis $target + mkdir -p $ROOT/dis + rm -f $target + cp charon.dis $target $ROOT/dis/wm/charon.dis: charon.dis - rm -f $target && cp charon.dis $target + mkdir -p $ROOT/dis/wm + rm -f $target + cp charon.dis $target charon.dis: $MODULES $SYS_MODULE diff --git a/appl/cmd/auth/factotum/proto/mkfile b/appl/cmd/auth/factotum/proto/mkfile index da7689a64..2a6e76d1b 100644 --- a/appl/cmd/auth/factotum/proto/mkfile +++ b/appl/cmd/auth/factotum/proto/mkfile @@ -4,6 +4,7 @@ TARG=\ p9any.dis\ pass.dis\ sign.dis\ + infauth.dis\ SYSMODULES=\ factotum.m\ diff --git a/appl/cmd/auth/mkfile b/appl/cmd/auth/mkfile index 70db15025..3e3f5d46e 100644 --- a/appl/cmd/auth/mkfile +++ b/appl/cmd/auth/mkfile @@ -19,6 +19,11 @@ TARG=\ secstore.dis\ secstored.dis\ secstore-setup.dis\ + aescbc.dis\ + ai2key.dis\ + createuser.dis\ + dsagen.dis\ + rsagen.dis\ SYSMODULES=\ arg.m\ diff --git a/appl/cmd/dict/mkfile b/appl/cmd/dict/mkfile index 6fbab6256..414006663 100644 --- a/appl/cmd/dict/mkfile +++ b/appl/cmd/dict/mkfile @@ -9,6 +9,7 @@ TARG=\ wikipedia.dis\ oeis.dis\ pg.dis\ + adict.dis\ MODULES=\ dictm.m\ @@ -28,13 +29,19 @@ install:V: $BINTARG $ROOT/dis/dict.dis $ROOT/acme/dis/adict.dis %.installall:V: $DISBIN/% $ROOT/dis/dict.dis: dict.dis - rm -f $target && cp dict.dis $target + mkdir -p $ROOT/dis + rm -f $target + cp dict.dis $target $ROOT/acme/dis/adict.dis: adict.dis - rm -f $target && cp adict.dis $target + mkdir -p $ROOT/acme/dis + rm -f $target + cp adict.dis $target $DISBIN/%: %.sh - cp $stem.sh $target && chmod a+rx $target + mkdir -p $DISBIN + cp $stem.sh $target + chmod a+rx $target nuke:V: rm -f $ROOT/dis/dict.dis diff --git a/appl/cmd/git/mkfile b/appl/cmd/git/mkfile index 35bb2ed1b..bdfccd856 100644 --- a/appl/cmd/git/mkfile +++ b/appl/cmd/git/mkfile @@ -34,6 +34,7 @@ DISBIN=$ROOT/dis/cmd/git <$ROOT/mkfiles/mkdis installsh:V: + mkdir -p $DISBIN cp log.sh $DISBIN/log.sh cp status.sh $DISBIN/status.sh cp diff.sh $DISBIN/diff.sh diff --git a/appl/cmd/git/push.b b/appl/cmd/git/push.b index daef15a00..e55f19346 100644 --- a/appl/cmd/git/push.b +++ b/appl/cmd/git/push.b @@ -159,8 +159,12 @@ init(nil: ref Draw->Context, args: list of string) if(perr != nil) fail("writepack: " + perr); - # Read credentials - creds := git->readcredentials(gitdir); + # Read credentials. Deliberately done here rather than in the Git + # library: #338 removed readcredentials() from Git so that a module + # loaded by an agent tool cannot read a credentials file. The command + # reads it in its own namespace, where visibility of .git/credentials + # is the capability that decides whether a push can authenticate. + creds := readcredentials(gitdir); if(creds == nil) fail("no credentials found; create .git/credentials with user:token"); @@ -177,6 +181,29 @@ init(nil: ref Draw->Context, args: list of string) oldhash.hex()[:7], localhash.hex()[:7], srcbranch, dstbranch); } +readcredentials(gitdir: string): string +{ + fd := sys->open(gitdir + "/credentials", Sys->OREAD); + if(fd == nil) + return nil; + buf := array [1024] of byte; + n := sys->read(fd, buf, len buf); + if(n <= 0) + return nil; + return strtrim(string buf[:n]); +} + +strtrim(s: string): string +{ + i := 0; + while(i < len s && (s[i] == ' ' || s[i] == '\t' || s[i] == '\n' || s[i] == '\r')) + i++; + j := len s; + while(j > i && (s[j-1] == ' ' || s[j-1] == '\t' || s[j-1] == '\n' || s[j-1] == '\r')) + j--; + return s[i:j]; +} + splitcolon(s: string): (string, string) { for(i := 0; i < len s; i++) diff --git a/appl/cmd/ip/mkfile b/appl/cmd/ip/mkfile index c0cdf887a..c485a5361 100644 --- a/appl/cmd/ip/mkfile +++ b/appl/cmd/ip/mkfile @@ -11,6 +11,7 @@ TARG=\ tftpd.dis\ virgild.dis\ sntp.dis\ + dhcp.dis\ SYSMODULES=\ attrdb.m\ diff --git a/appl/cmd/jitbug.b b/appl/cmd/jitbug.b new file mode 100644 index 000000000..7be244c65 --- /dev/null +++ b/appl/cmd/jitbug.b @@ -0,0 +1,72 @@ +implement JITBug; + +include "sys.m"; + sys: Sys; +include "draw.m"; + +JITBug: module { + init: fn(ctxt: ref Draw->Context, argv: list of string); +}; + +init(nil: ref Draw->Context, nil: list of string) +{ + sys = load Sys Sys->PATH; + + sys->print("=== JIT Bug Investigation ===\n\n"); + + # Bug 1: Big right shift + sys->print("--- Bug 1: Big Right Shift ---\n"); + a := big 16r100000000; # 2^32 = 4294967296 + sys->print("a = big 16r100000000 = %bd\n", a); + b := a >> 32; + sys->print("a >> 32 = %bd (expected 1)\n", b); + c := a >> 16; + sys->print("a >> 16 = %bd (expected 65536)\n", c); + d := a >> 1; + sys->print("a >> 1 = %bd (expected 2147483648)\n", d); + + # More shift tests + e := big 16rFFFFFFFF00000000; + sys->print("\ne = big 16rFFFFFFFF00000000 = %bd\n", e); + f := e >> 32; + sys->print("e >> 32 = %bd (expected 4294967295)\n", f); + g := e >> 16; + sys->print("e >> 16 = %bd\n", g); + + # Left shift for comparison + h := big 1 << 32; + sys->print("\nbig 1 << 32 = %bd (expected 4294967296)\n", h); + i := big 1 << 16; + sys->print("big 1 << 16 = %bd (expected 65536)\n", i); + + # Bug 2: CVTLW (big -> int) with negative values + sys->print("\n--- Bug 2: CVTLW (big->int) negative ---\n"); + bl := big -12345; + sys->print("big -12345 = %bd\n", bl); + iv := int bl; + sys->print("int big(-12345) = %d (expected -12345)\n", iv); + + bl2 := big -1; + sys->print("int big(-1) = %d (expected -1)\n", int bl2); + bl3 := big -42; + sys->print("int big(-42) = %d (expected -42)\n", int bl3); + + # Positive big -> int + bl4 := big 12345; + sys->print("int big(12345) = %d (expected 12345)\n", int bl4); + bl5 := big 0; + sys->print("int big(0) = %d (expected 0)\n", int bl5); + + # Check big storage + sys->print("\n--- Big storage layout ---\n"); + x := big 16r0000000100000002; + sys->print("big 16r0000000100000002 = %bd\n", x); + xint := int x; + sys->print("int(above) = %d (expected 4294967298 or truncated)\n", xint); + + # Negative big storage + y := big -1; + sys->print("big -1 = %bd (hex should be FFFFFFFFFFFFFFFF)\n", y); + yint := int y; + sys->print("int big(-1) = %d (expected -1)\n", yint); +} diff --git a/appl/cmd/jitbug2.b b/appl/cmd/jitbug2.b new file mode 100644 index 000000000..2f30c809b --- /dev/null +++ b/appl/cmd/jitbug2.b @@ -0,0 +1,75 @@ +implement JITBug2; + +include "sys.m"; + sys: Sys; +include "draw.m"; + +JITBug2: module { + init: fn(ctxt: ref Draw->Context, argv: list of string); +}; + +init(nil: ref Draw->Context, nil: list of string) +{ + sys = load Sys Sys->PATH; + + sys->print("=== CVTLW / MOVL Bug Investigation ===\n\n"); + + # Test 1: Simple big variable assignment and conversion + sys->print("--- Test 1: Sequential big assignments ---\n"); + a := big 100; + sys->print("a = %bd (expect 100)\n", a); + a = big 200; + sys->print("a = %bd (expect 200)\n", a); + a = big -1; + sys->print("a = %bd (expect -1)\n", a); + a = big -42; + sys->print("a = %bd (expect -42)\n", a); + + # Test 2: Different big variables + sys->print("\n--- Test 2: Separate big variables ---\n"); + b1 := big 111; + b2 := big 222; + b3 := big -333; + b4 := big -444; + sys->print("b1 = %bd (expect 111)\n", b1); + sys->print("b2 = %bd (expect 222)\n", b2); + sys->print("b3 = %bd (expect -333)\n", b3); + sys->print("b4 = %bd (expect -444)\n", b4); + + # Test 3: int(big) conversions + sys->print("\n--- Test 3: int(big) conversions ---\n"); + sys->print("int b1 = %d (expect 111)\n", int b1); + sys->print("int b2 = %d (expect 222)\n", int b2); + sys->print("int b3 = %d (expect -333)\n", int b3); + sys->print("int b4 = %d (expect -444)\n", int b4); + + # Test 4: big(int) then int(big) round-trip + sys->print("\n--- Test 4: Round-trip conversions ---\n"); + for (i := -5; i <= 5; i++) { + bv := big i; + iv := int bv; + status := "OK"; + if (iv != i) + status = "FAIL"; + sys->print(" %d -> big -> int = %d [%s]\n", i, iv, status); + } + + # Test 5: big assignment from expression + sys->print("\n--- Test 5: Big from expression ---\n"); + x := big 10; + y := big 20; + z := x + y; + sys->print("10 + 20 = %bd (expect 30)\n", z); + z = x - y; + sys->print("10 - 20 = %bd (expect -10)\n", z); + sys->print("int(10-20) = %d (expect -10)\n", int z); + + # Test 6: big copy + sys->print("\n--- Test 6: Big copy ---\n"); + src := big 99999; + dst := src; + sys->print("src = %bd, dst = %bd (both expect 99999)\n", src, dst); + src = big -99999; + dst = src; + sys->print("src = %bd, dst = %bd (both expect -99999)\n", src, dst); +} diff --git a/appl/cmd/jitshift.b b/appl/cmd/jitshift.b new file mode 100644 index 000000000..3b0977c3b --- /dev/null +++ b/appl/cmd/jitshift.b @@ -0,0 +1,52 @@ +implement JITShift; + +include "sys.m"; + sys: Sys; +include "draw.m"; + +JITShift: module { + init: fn(ctxt: ref Draw->Context, argv: list of string); +}; + +init(nil: ref Draw->Context, nil: list of string) +{ + sys = load Sys Sys->PATH; + + sys->print("=== Big Shift Debug ===\n"); + + # Test basic big values + a := big 1; + sys->print("big 1 = %bd\n", a); + + b := a << 32; + sys->print("big 1 << 32 = %bd\n", b); + + c := b >> 32; + sys->print("(big 1 << 32) >> 32 = %bd\n", c); + + # Direct constant + d := big 4294967296; + sys->print("big 4294967296 = %bd\n", d); + + e := d >> 32; + sys->print("big 4294967296 >> 32 = %bd\n", e); + + # Smaller shifts + sys->print("\nbig 256 >> 4 = %bd\n", big 256 >> 4); + sys->print("big 256 >> 8 = %bd\n", big 256 >> 8); + + # Shift within 32-bit range + f := big 16r80000000; + sys->print("big 16r80000000 = %bd\n", f); + sys->print("big 16r80000000 >> 1 = %bd\n", f >> 1); + sys->print("big 16r80000000 >> 31 = %bd\n", f >> 31); + + # Cross-word boundary + g := big 16r100000000; + sys->print("\nbig 16r100000000 = %bd\n", g); + sys->print("big 16r100000000 >> 1 = %bd\n", g >> 1); + sys->print("big 16r100000000 >> 16 = %bd\n", g >> 16); + sys->print("big 16r100000000 >> 31 = %bd\n", g >> 31); + sys->print("big 16r100000000 >> 32 = %bd\n", g >> 32); + sys->print("big 16r100000000 >> 33 = %bd\n", g >> 33); +} diff --git a/appl/cmd/mkfile b/appl/cmd/mkfile index e71ff51d4..0b54eed5a 100644 --- a/appl/cmd/mkfile +++ b/appl/cmd/mkfile @@ -202,6 +202,19 @@ TARG=\ xd.dis\ yacc.dis\ zeros.dis\ + audiotone.dis\ + bioget.dis\ + gateprobe.dis\ + jitbench.dis\ + jitbench2.dis\ + jitbug.dis\ + jitbug2.dis\ + jitcrash.dis\ + jitshift.dis\ + jittest.dis\ + mermaid_test.dis\ + test9p.dis\ + tlsperf.dis\ MODULES=\ diff --git a/appl/cmd/sh/mkfile b/appl/cmd/sh/mkfile index 1ea656e1c..5c6fe7d71 100644 --- a/appl/cmd/sh/mkfile +++ b/appl/cmd/sh/mkfile @@ -55,6 +55,8 @@ uninstall:V: rm -f $INS $ROOT/dis/sh.dis: sh.dis - rm -f $ROOT/dis/sh.dis && cp sh.dis $ROOT/dis/sh.dis + mkdir -p $ROOT/dis + rm -f $ROOT/dis/sh.dis + cp sh.dis $ROOT/dis/sh.dis %.dis: ${SYSMODULES:%=$MODDIR/%} diff --git a/appl/cmd/wikifs/mkfile b/appl/cmd/wikifs/mkfile index 65f7d20d4..221b3e29e 100644 --- a/appl/cmd/wikifs/mkfile +++ b/appl/cmd/wikifs/mkfile @@ -22,4 +22,6 @@ install:V: $BINTARG %.installall:V: $DISBIN/% $DISBIN/%: %.sh - cp $stem.sh $target && chmod a+rx $target + mkdir -p $DISBIN + cp $stem.sh $target + chmod a+rx $target diff --git a/appl/lib/ftree/cptree.b b/appl/lib/ftree/cptree.b new file mode 100644 index 000000000..5af59fff9 --- /dev/null +++ b/appl/lib/ftree/cptree.b @@ -0,0 +1,136 @@ +implement Cptree; + +include "sys.m"; + sys: Sys; +include "draw.m"; +include "readdir.m"; + readdir: Readdir; +include "cptree.m"; + +init() +{ + sys = load Sys Sys->PATH; + readdir = load Readdir Readdir->PATH; +} + +Context: adt { + progressch: chan of string; + warningch: chan of (string, chan of int); + finishedch: chan of string; +}; + +# recursively copy file/directory f into directory d; +# the name remains the same. +copyproc(f, d: string, progressch: chan of string, + warningch: chan of (string, chan of int), + finishedch: chan of string) +{ + ctxt := ref Context(progressch, warningch, finishedch); + (fok, fstat) := sys->stat(f); + if (fok == -1) + error(ctxt, sys->sprint("cannot stat '%s': %r", f)); + (dok, dstat) := sys->stat(d); + if (dok == -1) + error(ctxt, sys->sprint("cannot stat '%s': %r", d)); + if ((dstat.mode & Sys->DMDIR) == 0) + error(ctxt, sys->sprint("'%s' is not a directory", d)); + if (fstat.qid.path == dstat.qid.path) + error(ctxt, sys->sprint("'%s' and '%s' are identical", f, d)); + + c := d + "/" + fname(f); + (cok, cstat) := sys->stat(c); + if (cok == 0) + error(ctxt, sys->sprint("'%s' already exists", c)); + rcopy(ctxt, f, ref fstat, c); + finishedch <-= nil; +} + +rcopy(ctxt: ref Context, src: string, srcstat: ref Sys->Dir, dst: string) +{ + omode := Sys->OWRITE; + perm := srcstat.mode; + if (perm & Sys->DMDIR) { + omode = Sys->OREAD; + perm |= 8r300; + } + + dstfd := sys->create(dst, omode, perm); + if (dstfd == nil) { + warning(ctxt, sys->sprint("cannot create '%s': %r", dst)); + return; + } + if (srcstat.mode & Sys->DMDIR) { + (entries, n) := readdir->init(src, Readdir->NAME | Readdir->COMPACT); + if (n == -1) + warning(ctxt, sys->sprint("cannot read dir '%s': %r", src)); + for (i := 0; i < len entries; i++) { + e := entries[i]; + rcopy(ctxt, src + "/" + e.name, e, dst + "/" + e.name); + } + if (perm != srcstat.mode) { + (ok, nil) := sys->fstat(dstfd); + if (ok != -1) { + dststat := sys->nulldir; + dststat.mode = srcstat.mode; + sys->fwstat(dstfd, dststat); + } + } + } else { + srcfd := sys->open(src, Sys->OREAD); + if (srcfd == nil) { + sys->remove(dst); + warning(ctxt, sys->sprint("cannot open '%s': %r", src)); + return; + } + ctxt.progressch <-= "copying " + src; + buf := array[Sys->ATOMICIO] of byte; + while ((n := sys->read(srcfd, buf, len buf)) > 0) { + if (sys->write(dstfd, buf, n) != n) { + sys->remove(dst); + warning(ctxt, sys->sprint("error writing '%s': %r", dst)); + return; + } + } + if (n == -1) { + sys->remove(dst); + warning(ctxt, sys->sprint("error reading '%s': %r", src)); + return; + } + } +} + +warning(ctxt: ref Context, msg: string) +{ + r := chan of int; + ctxt.warningch <-= (msg, r); + if (!<-r) + exit; +} + +error(ctxt: ref Context, msg: string) +{ + ctxt.finishedch <-= msg; + exit; +} + +fname(f: string): string +{ + f = cleanname(f); + for (i := len f - 1; i >= 0; i--) + if (f[i] == '/') + break; + return f[i+1:]; +} + +cleanname(s: string): string +{ + t := ""; + i := 0; + while (i < len s) + if ((t[len t] = s[i++]) == '/') + while (i < len s && s[i] == '/') + i++; + if (len t > 1 && t[len t - 1] == '/') + t = t[0:len t - 1]; + return t; +} diff --git a/appl/lib/ftree/cptree.m b/appl/lib/ftree/cptree.m new file mode 100644 index 000000000..874a66a1a --- /dev/null +++ b/appl/lib/ftree/cptree.m @@ -0,0 +1,8 @@ +Cptree: module { + PATH: con "/dis/lib/ftree/cptree.dis"; + init: fn(); + copyproc: fn(f, d: string, progressch: chan of string, + warningch: chan of (string, chan of int), + finishedch: chan of string); +}; + diff --git a/appl/lib/ftree/items.b b/appl/lib/ftree/items.b new file mode 100644 index 000000000..023e3d33c --- /dev/null +++ b/appl/lib/ftree/items.b @@ -0,0 +1,326 @@ +implement Items; + +include "sys.m"; + sys: Sys; +include "draw.m"; + draw: Draw; + Point, Rect: import draw; +include "tk.m"; + tk: Tk; +include "items.m"; + +Taglen: con 5; +Titletaglen: con 10; +Spotdiam: con 10; +Lineopts: con " -width 1 -fill gray"; +Ovalopts: con " -outline gray"; +Crossopts: con " -fill red"; + +init() +{ + sys = load Sys Sys->PATH; + draw = load Draw Draw->PATH; + tk = load Tk Tk->PATH; +} + +blankexpander: Expander; +Expander.new(win: ref Tk->Toplevel, cvs: string): ref Expander +{ + e := ref blankexpander; + e.win = win; + e.cvs = cvs; + return e; +} + +moveto(win: ref Tk->Toplevel, cvs: string, tag: string, bbox: Rect, p: Point) +{ + if (!bbox.min.eq(p)) + cmd(win, cvs + " move " + tag + " " + p2s(p.sub(bbox.min))); +} + +bbox(win: ref Tk->Toplevel, cvs, w: string): Rect +{ + return s2r(cmd(win, cvs + " bbox " + w)); +} + +rename(win: ref Tk->Toplevel, it: Item, newname: string): Item +{ + (nil, itl) := sys->tokenize(cmd(win, ".c find withtag " + it.name), " "); + cmd(win, ".c dtag " + it.name + " " + it.name); + for (; itl != nil; itl = tl itl) + cmd(win, ".c addtag " + newname + " withtag " + hd itl); + it.name = newname; + return it; +} + +Expander.make(e: self ref Expander, titleitem: Item): Item +{ + name := titleitem.name; + tag := " -tags " + name; + + e.titleitem = rename(e.win, titleitem, "!!." + name); + cmd(e.win, e.cvs + " addtag " + name + " withtag !!." + name); + sc := spotcentre((0, 0), dxy(e.titleitem.r)); + spotr := Rect(sc, sc).inset(-Spotdiam/2); + + p := (spotr.max.x + Titletaglen, 0); + moveto(e.win, e.cvs, e.titleitem.name, e.titleitem.r, p); + e.titleitem.r = rmoveto(e.titleitem.r, p); + it := Item(name, ((0, 0), (spotr.max.x + Titletaglen + titleitem.r.dx(), titleitem.r.dy())), (0, 0)); + + # make line to the right of spot + cmd(e.win, e.cvs + " create line " + + p2s((spotr.max.x, sc.y)) + " " + p2s((spotr.max.x+Titletaglen, sc.y)) + tag + Lineopts); + + # make spot + spotid := cmd(e.win, e.cvs + " create oval " + + r2s(spotr) + Ovalopts + tag); + if (e.expanded) + cmd(e.win, e.cvs + " bind " + spotid + " " + + " {send event " + name + " contract}"); + else + cmd(e.win, e.cvs + " bind " + spotid + " " + + " {send event " + name + " expand}"); + + cmd(e.win, e.cvs + " raise " + spotid); + e.spotid = int spotid; + + it.attach = (0, sc.y); + it.r.max = (e.titleitem.r.dx() + spotr.max.x + Titletaglen, e.titleitem.r.dy()); + + if (!e.expanded) { + addcross(e, it, name); + return it; + } + + it.r = placechildren(e, it, name); + return it; +} + +rmoveto(r: Rect, p: Point): Rect +{ + return r.addpt(p.sub(r.min)); +} + +# place all children of e appropriately. +# assumes that the canvas items of all children are already made. +# return bbox rectangle of whole thing. +placechildren(e: ref Expander, it: Item, tags: string): Rect +{ + ltag := " -tags {"+ tags + " !." + it.name + "}"; + titlesize := dxy(e.titleitem.r); + sc := spotcentre(it.r.min, titlesize); + maxwidth := 0; + y := it.r.min.y + titlesize.y; + lasty := 0; + for (i := 0; i < len e.children; i++) { + c := e.children[i]; + if (c.r.dx() > maxwidth) + maxwidth = c.r.dx(); + c.r = c.r.addpt(it.r.min); + r: Rect; + r.min = (sc.x + Taglen, y); + r.max = r.min.add(dxy(c.r)); + moveto(e.win, e.cvs, c.name, c.r, r.min); + + # make item coords relative to parent + e.children[i].r = r.subpt(it.r.min); + cmd(e.win, e.cvs + " addtag " + it.name + " withtag " + c.name); + + # horizontal attachment + cmd(e.win, e.cvs + " create line " + + p2s((sc.x, y + c.attach.y)) + " " + + p2s((sc.x + Taglen + c.attach.x, y + c.attach.y)) + + ltag + Lineopts); + lasty = y + c.attach.y; + y += r.dy(); + } + + # vertical attachment (if there were any children) + if (i > 0) { + id := cmd(e.win, e.cvs + " create line " + + p2s((sc.x, sc.y + Spotdiam/2)) + " " + p2s((sc.x, lasty)) + ltag + Lineopts); + cmd(e.win, e.cvs + " bind " + id + " "+ + " {send event " + it.name + " see}"); + } + r := Rect(it.r.min, + (max(sc.x+Spotdiam/2+Titletaglen+titlesize.x, sc.x+Taglen+maxwidth), + y)); + return r; +} + +Expander.event(e: self ref Expander, it: Item, ev: string): Item +{ + case ev { + "expand" => + if (e.expanded) { + sys->print("item %s is already expanded\n", it.name); + return it; + } + e.expanded = 1; + tags := gettags(e.win, e.cvs, string e.spotid); + cmd(e.win, e.cvs + " delete !." + it.name); + cmd(e.win, e.cvs + " bind " + string e.spotid + " " + + + " {send event " + it.name + " contract}"); + it.r = placechildren(e, it, tags); + "contract" => + if (!e.expanded) { + sys->print("item %s is already contracted\n", it.name); + return it; + } + e.expanded = 0; + cmd(e.win, e.cvs + " delete !." + it.name); + for (i := 0; i < len e.children; i++) + cmd(e.win, e.cvs + " delete " + e.children[i].name); + cmd(e.win, e.cvs + " bind " + string e.spotid + " " + + + " {send event " + it.name + " expand}"); + tags := gettags(e.win, e.cvs, string e.spotid); + addcross(e, it, tags); + titlesize := dxy(e.titleitem.r); + it.r.max = it.r.min.add((Taglen * 2 + Spotdiam + titlesize.x, titlesize.y)); + e.children = nil; + "see" => + cmd(e.win, e.cvs + " see " + p2s(it.r.min)); + * => + sys->print("unknown event '%s' on item %s\n", ev, it.name); + } + return it; +} + +Expander.childrenchanged(e: self ref Expander, it: Item): Item +{ + cmd(e.win, e.cvs + " delete !." + it.name); + tags := gettags(e.win, e.cvs, string e.spotid); + it.r = placechildren(e, it, tags); + return it; +} + +gettags(win: ref Tk->Toplevel, cvs: string, name: string): string +{ + tags := cmd(win, cvs + " gettags " + name); + (n, tagl) := sys->tokenize(tags, " "); + ntags := ""; + for (; tagl != nil; tagl = tl tagl) { + t := hd tagl; + if (t[0] != '!' && (t[0] < '0' || t[0] > '9')) + ntags += " " + t; + } + return ntags; +} + +spotcentre(origin, titlesize: Point): Point +{ + return (origin.x + Spotdiam / 2, origin.y + titlesize.y / 2); +} + +addcross(e: ref Expander, it: Item, tags: string) +{ + p := spotcentre(it.r.min, dxy(e.titleitem.r)); + crosstags := " -tags {" + tags + " !." + it.name + "}"; + + id1 := cmd(e.win, e.cvs + " create line " + + p2s((p.x-Spotdiam/2, p.y)) + " " + + p2s((p.x+Spotdiam/2, p.y)) + crosstags + Crossopts); + id2 := cmd(e.win, e.cvs + " create line " + + p2s((p.x, p.y-Spotdiam/2)) + " " + + p2s((p.x, p.y+Spotdiam/2)) + crosstags + Crossopts); + cmd(e.win, e.cvs + " lower " + id1 + ";" + e.cvs + " lower " + id2); +} + +knownfont: string; +knownfontheight: int; +fontheight(win: ref Tk->Toplevel, font: string): int +{ + Font: import draw; + if (font == knownfont) + return knownfontheight; + if (win.image == nil) # can happen if we run out of image memory + return -1; + f := Font.open(win.image.display, font); + if (f == nil) + return -1; + knownfont = font; + knownfontheight = f.height; + return f.height; +} + +maketext(win: ref Tk->Toplevel, cvs: string, name: string, text: string): Item +{ + tag := " -tags " + name; + it := Item(name, ((0, 0), (0, 0)), (0, 0)); + ttid := cmd(win, cvs + " create text 0 0 " + + " -anchor nw" + tag + + " -text '" + text); + it.r = bbox(win, cvs, ttid); + h := fontheight(win, cmd(win, cvs + " itemcget " + ttid + " -font")); + if (h != -1) { + dh := it.r.dy() - h; + it.r.min.y += dh / 2; + it.r.max.y -= dh / 2; + } + it.attach = (0, it.r.dy() / 2); + return it; +} + +cmd(top: ref Tk->Toplevel, s: string): string +{ + e := tk->cmd(top, s); + if (e != nil && e[0] == '!') + sys->fprint(sys->fildes(2), "items: tk error %s on '%s'\n", e, s); + return e; +} + +r2s(r: Rect): string +{ + return string r.min.x + " " + string r.min.y + " " + + string r.max.x + " " + string r.max.y; +} + +s2r(s: string): Rect +{ + (n, toks) := sys->tokenize(s, " "); + if (n != 4) { + sys->print("'%s' is not a rectangle!\n", s); + raise "bad conversion"; + } + r: Rect; + (r.min.x, toks) = (int hd toks, tl toks); + (r.min.y, toks) = (int hd toks, tl toks); + (r.max.x, toks) = (int hd toks, tl toks); + (r.max.y, toks) = (int hd toks, tl toks); + return r; +} + +Item.eq(i: self Item, j: Item): int +{ + return i.r.eq(j.r) && i.attach.eq(j.attach) && i.name == j.name; +} + +Item.addpt(i: self Item, p: Point): Item +{ + i.r = i.r.addpt(p); + return i; +} + +Item.subpt(i: self Item, p: Point): Item +{ + i.r = i.r.subpt(p); + return i; +} + +p2s(p: Point): string +{ + return string p.x + " " + string p.y; +} + +dxy(r: Rect): Point +{ + return r.max.sub(r.min); +} + +max(a, b: int): int +{ + if (a > b) + return a; + return b; +} diff --git a/appl/lib/ftree/items.m b/appl/lib/ftree/items.m new file mode 100644 index 000000000..7af34d12e --- /dev/null +++ b/appl/lib/ftree/items.m @@ -0,0 +1,30 @@ +Items: module { + PATH: con "/dis/lib/ftree/items.dis"; + + Item: adt { + name: string; # tag held in common by all canvas items in this Item. + r: Rect; # relative to parent's Item when stored in children + attach: Point; # attachment point relative to r.min + + eq: fn(i: self Item, j: Item): int; + addpt: fn(i: self Item, p: Point): Item; + subpt: fn(i: self Item, p: Point): Item; + }; + + Expander: adt { + titleitem: Item; + expanded: int; + children: array of Item; + win: ref Tk->Toplevel; + cvs: string; + spotid: int; + + new: fn(win: ref Tk->Toplevel, cvs: string): ref Expander; + make: fn(e: self ref Expander, it: Item): Item; + event: fn(e: self ref Expander, it: Item, ev: string): Item; + childrenchanged: fn(e: self ref Expander, it: Item): Item; + }; + + init: fn(); + maketext: fn(win: ref Tk->Toplevel, cvs: string, name: string, text: string): Item; +}; diff --git a/appl/lib/ftree/mkfile b/appl/lib/ftree/mkfile new file mode 100644 index 000000000..e681bf340 --- /dev/null +++ b/appl/lib/ftree/mkfile @@ -0,0 +1,21 @@ +<../../../mkconfig + +TARG=\ + cptree.dis\ + items.dis\ + +MODULES=\ + cptree.m\ + items.m\ + +SYSMODULES=\ + draw.m\ + readdir.m\ + string.m\ + sys.m\ + tk.m\ + tkclient.m\ + +DISBIN=$ROOT/dis/lib/ftree + +<$ROOT/mkfiles/mkdis diff --git a/appl/lib/mkfile b/appl/lib/mkfile index 151813e98..5217e8d2f 100644 --- a/appl/lib/mkfile +++ b/appl/lib/mkfile @@ -2,6 +2,7 @@ DIRS=\ convcs\ + ftree\ crypt\ ecmascript\ encoding\ @@ -12,6 +13,8 @@ DIRS=\ TARG=\ aadraw.dis\ + popup.dis\ + scoretable.dis\ acmewin.dis\ arg.dis\ audit.dis\ @@ -160,6 +163,10 @@ TARG=\ writegif.dis\ x402.dis\ xml.dis\ + bioauth.dis\ + keyringinst.dis\ + softkbd.dis\ + viewport.dis\ MODULES= @@ -306,8 +313,12 @@ DISBIN=$ROOT/dis/lib <$ROOT/mkfiles/mksubdirs $DISBIN/arg.dis: arg.dis - rm -f $DISBIN/arg.dis && cat arg.dis > $DISBIN/arg.dis + mkdir -p $DISBIN + rm -f $DISBIN/arg.dis + cat arg.dis > $DISBIN/arg.dis $DISBIN/readdir.dis: readdir.dis - rm -f $DISBIN/readdir.dis && cat readdir.dis > $DISBIN/readdir.dis + mkdir -p $DISBIN + rm -f $DISBIN/readdir.dis + cat readdir.dis > $DISBIN/readdir.dis diff --git a/appl/lib/popup.b b/appl/lib/popup.b new file mode 100644 index 000000000..78eef27e9 --- /dev/null +++ b/appl/lib/popup.b @@ -0,0 +1,124 @@ +implement Popup; +include "sys.m"; + sys: Sys; +include "draw.m"; + Point: import Draw; +include "tk.m"; + tk: Tk; +include "popup.m"; + +init() +{ + sys = load Sys Sys->PATH; + tk = load Tk Tk->PATH; +} + +post(win: ref Tk->Toplevel, p: Point, a: array of string, n: int): chan of int +{ + rc := chan of int; + spawn postproc(win, p, a, n, rc); + return rc; +} + +postproc(win: ref Tk->Toplevel, p: Point, a: array of string, n: int, rc: chan of int) +{ + c := chan of string; + tk->namechan(win, c, "c.popup"); + mkpopupmenu(win, a); + cmd(win, ".popup entryconfigure " + string n + " -state active"); + cmd(win, "bind .popup {send c.popup unmap}"); + + dy := ypos(win, n) - ypos(win, 0); + p.y -= dy; + cmd(win, ".popup post " + string p.x + " " + string p.y + + ";grab set .popup"); + n = -1; + while ((e := <-c) != "unmap") + n = int e; + + cmd(win, "destroy .popup"); + rc <-= n; +} + +mkpopupmenu(win: ref Tk->Toplevel, a: array of string) +{ + cmd(win, "menu .popup"); + for (i := 0; i < len a; i++) { + cmd(win, ".popup add command -command {send c.popup " + string i + + "} -text '" + a[i]); + } +} + +Blank: con "-----"; + +# XXX what should we do about popups containing no items. +mkbutton(win: ref Tk->Toplevel, w: string, a: array of string, n: int): chan of string +{ + c := chan of string; + if (len a == 0) { + cmd(win, "label " + w + " -bd 2 -relief raised -text '" + Blank); + return c; + } + tk->namechan(win, c, "c" + w); + mkpopupmenu(win, a); + cmd(win, "label " + w + " -bd 2 -relief raised -width [.popup cget -width] -text '" + a[n]); + cmd(win, "bind " + w + " {send c" + w + " " + w + "}"); + cmd(win, "destroy .popup"); + return c; +} + +changebutton(win: ref Tk->Toplevel, w: string, a: array of string, n: int) +{ + if (len a > 0) { + mkpopupmenu(win, a); + cmd(win, w + " configure -width [.popup cget -width] -text '" + a[n]); + cmd(win, "bind " + w + " {send c" + w + " " + w + "}"); + cmd(win, "destroy .popup"); + } else { + cmd(win, w + " configure -text '" + Blank); + cmd(win, "bind " + w + " {}"); + } +} + +add(a: array of string, s: string): (array of string, int) +{ + for (i := 0; i < len a; i++) + if (s == a[i]) + return (a, i); + na := array[len a + 1] of string; + na[0:] = a; + na[len a] = s; + return (na, len a); +} + +#event(win: ref Tk->Toplevel, e: string, a: array of string): int +#{ +# w := e; +# p := Point(int cmd(win, w + " cget -actx"), int cmd(win, w + " cget -acty")); +# s := cmd(win, w + " cget -text"); +# for (i := 0; i < len a; i++) +# if (s == a[i]) +# break; +# if (i == len a) +# i = 0; +# +# n := post(win, p, a, i); +# if (n != -1) { +# cmd(win, w + " configure -text '" + a[n]); +# i = n; +# } +# return i; +#} + +ypos(win: ref Tk->Toplevel, n: int): int +{ + return int cmd(win, ".popup yposition " + string n); +} + +cmd(win: ref Tk->Toplevel, s: string): string +{ + r := tk->cmd(win, s); + if (len r > 0 && r[0] == '!') + sys->print("error executing '%s': %s\n", s, r[1:]); + return r; +} diff --git a/appl/lib/scoretable.b b/appl/lib/scoretable.b new file mode 100644 index 000000000..322e119b1 --- /dev/null +++ b/appl/lib/scoretable.b @@ -0,0 +1,150 @@ +# Copyright © 1999 Roger Peppe. All rights reserved. +implement Scoretable; +include "sys.m"; + sys: Sys; + stderr: ref Sys->FD; +include "draw.m"; +include "bufio.m"; + bufio: Bufio; + Iobuf: import bufio; +include "scoretable.m"; + +# this is the cut-down version - it doesn't bother +# with score table locking at all; there is such a version, +# but it needs a lock server, so is often more hassle than +# it's worth. if you want a distributed score file, contact +# rog@vitanuova.com +# currently this module is only used by tetris - the interface +# will probably change in the future. + +scorefile: string; +username: string; + +MAXSCORES: con 10; + +init(nil: int, user, nil: string, sfile: string): (int, string) +{ + if (sys == nil) { + sys = load Sys Sys->PATH; + stderr = sys->fildes(2); + bufio = load Bufio Bufio->PATH; + if (bufio == nil) { + sys = nil; + return (-1, sys->sprint("cannot load %s: %r", Bufio->PATH)); + } + } + username = user; + lock(); + scorefd: ref Sys->FD; + if ((scorefd = sys->open(sfile, Sys->ORDWR)) == nil + && (scorefd = sys->create(sfile, Sys->ORDWR, 8r666)) == nil) { + unlock(); + return (-1, sys->sprint("cannot open %s: %r", sfile)); + } + unlock(); + scorefile = sfile; + return (0, nil); +} + +lock() +{ +} + +unlock() +{ +} + +scores(): list of Score +{ + lock(); + sl := readscores(); + unlock(); + return sl; +} + +readscores(): list of Score +{ + sl: list of Score; + iob := bufio->open(scorefile, Sys->OREAD); + if (iob == nil) + return nil; + iob.seek(big 0, Bufio->SEEKSTART); + while ((s := iob.gets('\n')) != nil) { + (n, toks) := sys->tokenize(s, " \t\n"); + if (toks == nil) + continue; + if (n < 2) { + sys->fprint(stderr, "bad line in score table: %s", s); + continue; + } + score: Score; + (score.user, toks) = (hd toks, tl toks); + (score.score, toks) = (int hd toks, tl toks); + score.other = nil; + while (toks != nil) { + score.other += hd toks; + if (tl toks != nil) + score.other += " "; + toks = tl toks; + } + sl = score :: sl; + } + iob.close(); + nl: list of Score; + while (sl != nil) { + nl = hd sl :: nl; + sl = tl sl; + } + return nl; +} + +writescores(sl: list of Score) +{ + scoreiob := bufio->open(scorefile, Sys->OWRITE|Sys->OTRUNC); + if (scoreiob == nil) { + sys->fprint(stderr, "scoretable: cannot write score file '%s': %r\n", scorefile); + return; + } + scoreiob.seek(big 0, Bufio->SEEKSTART); + n := 0; + while (sl != nil && n < MAXSCORES) { + s := hd sl; + scoreiob.puts(sys->sprint("%s %d %s\n", s.user, s.score, s.other)); + n++; + sl = tl sl; + } + scoreiob.close(); +} + +setscore(score: int, other: string): int +{ + lock(); + sl := readscores(); + nl: list of Score; + done := 0; + n := rank := 0; + while (sl != nil) { + s := hd sl; + if (score > s.score && !done) { + nl = Score(username, score, other) :: nl; + rank = n; + done = 1; + } + nl = s :: nl; + sl = tl sl; + n++; + } + if (!done) { + nl = Score(username, score, other) :: nl; + rank = n; + } + sl = nil; + while (nl != nil) { + sl = hd nl :: sl; + nl = tl nl; + } + writescores(sl); + unlock(); + # XXX minor race condition in returning the rank, not our idea of the rank. + return rank; +} diff --git a/appl/math/mkfile b/appl/math/mkfile index 856e619e5..57ee635a8 100644 --- a/appl/math/mkfile +++ b/appl/math/mkfile @@ -10,6 +10,7 @@ TARG=\ genprimes.dis\ geodesy.dis\ graph0.dis\ + gr.dis\ # gr.dis\ hist0.dis\ linalg.dis\ diff --git a/appl/svc/mkfile b/appl/svc/mkfile index ee411d3ee..acec9e6e0 100644 --- a/appl/svc/mkfile +++ b/appl/svc/mkfile @@ -21,4 +21,6 @@ install:V: $SHFILES %.installall:V: $BIN/% $BIN/%: %.sh - cp $stem.sh $target && chmod a+rx $target + mkdir -p $BIN + cp $stem.sh $target + chmod a+rx $target diff --git a/appl/veltro/mkfile b/appl/veltro/mkfile index 6f8e8aa57..b1966e0f4 100644 --- a/appl/veltro/mkfile +++ b/appl/veltro/mkfile @@ -6,6 +6,7 @@ LIMBOFLAGS=-I$MODDIR -I. DISBIN=$ROOT/dis/veltro MAIN=\ + taskboard9p.dis\ agentlib.dis\ veltro.dis\ repl.dis\ @@ -22,10 +23,12 @@ MAIN=\ wallet9p.dis\ SOURCES=\ + sources/sms.dis\ sources/email.dis\ sources/mockmail.dis\ TOOLS=\ + tools/contacts.dis\ tools/read.dis\ tools/list.dis\ tools/find.dis\ @@ -267,6 +270,15 @@ tools/payfetch.dis: tools/payfetch.b tool.m tools/wallet.dis: tools/wallet.b tool.m limbo $LIMBOFLAGS -gw -o tools/wallet.dis tools/wallet.b +tools/contacts.dis: tools/contacts.b tool.m + limbo $LIMBOFLAGS -gw -o tools/contacts.dis tools/contacts.b + +sources/sms.dis: sources/sms.b + limbo $LIMBOFLAGS -gw -o sources/sms.dis sources/sms.b + +taskboard9p.dis: taskboard9p.b + limbo $LIMBOFLAGS -gw -o taskboard9p.dis taskboard9p.b + install:V: all mkdir -p $DISBIN $DISBIN/tools $DISBIN/sources cp $MAIN $DISBIN/ diff --git a/appl/wm/bounce.b b/appl/wm/bounce.b new file mode 100644 index 000000000..7d6cdd1b7 --- /dev/null +++ b/appl/wm/bounce.b @@ -0,0 +1,356 @@ +implement Bounce; + +# bouncing balls demo. it uses tk and multiple processes to animate a +# number of balls bouncing around the screen. each ball has its own +# process; CPU time is doled out fairly to each process by using +# a central monitor loop. + +include "sys.m"; + sys: Sys; +include "draw.m"; + draw: Draw; + Point, Rect: import draw; +include "tk.m"; + tk: Tk; +include "tkclient.m"; + tkclient: Tkclient; +include "math.m"; + math: Math; +include "rand.m"; + +Bounce: module { + init: fn(ctxt: ref Draw->Context, argv: list of string); +}; + +BALLSIZE: con 4; +ZERO: con 1e-6; +π: con Math->Pi; + +Line: adt { + p1, p2: Point; +}; + +Realpoint: adt { + x, y: real; +}; + +gamecmds := array[] of { +"canvas .c", +"bind .c {send cmd 0 %x %y}", +"bind .c {send cmd 0 %x %y}", +"bind .c {send cmd 1 %x %y}", +"bind .c {send cmd 2 %x %y}", +"frame .f", +"button .f.left -bitmap small_color_left.bit -bd 0 -command {send cmd k -1}", +"button .f.right -bitmap small_color_right.bit -bd 0 -command {send cmd k 1}", +"label .f.l -text {8 balls}", +"pack .f.left .f.right -side left", +"pack .f.l -side left", +"pack .f -fill x", +"pack .c -fill both -expand 1", +}; + +randch: chan of int; +lines: list of (int, Line); +lineid := 0; +lineversion := 0; + +addline(win: ref Tk->Toplevel, v: Line) +{ + lines = (++lineid, v) :: lines; + cmd(win, ".c create line " + pt2s(v.p1) + " " + pt2s(v.p2) + " -width 3 -fill black" + + " -tags l" + string lineid); + lineversion++; +} + +nomod(s: string) +{ + sys->fprint(sys->fildes(2), "bounce: cannot load %s: %r\n", s); + raise "fail:bad module"; +} + +init(ctxt: ref Draw->Context, argv: list of string) +{ + sys = load Sys Sys->PATH; + draw = load Draw Draw->PATH; + math = load Math Math->PATH; + tk = load Tk Tk->PATH; + tkclient = load Tkclient Tkclient->PATH; + if (tkclient == nil) + nomod(Tkclient->PATH); + tkclient->init(); + nballs := 8; + if (argv != nil && tl argv != nil) + nballs = int hd tl argv; + if (nballs < 0) { + sys->fprint(sys->fildes(2), "usage: bounce [nballs]\n"); + raise "fail:usage"; + } + sys->pctl(Sys->NEWPGRP, nil); + if(ctxt == nil) + ctxt = tkclient->makedrawcontext(); + (win, wmctl) := tkclient->toplevel(ctxt, nil, "Bounce", 0); + cmdch := chan of string; + tk->namechan(win, cmdch, "cmd"); + for (i := 0; i < len gamecmds; i++) + cmd(win, gamecmds[i]); + cmd(win, ".c configure -width 400 -height 400"); + cmd(win, "pack propagate . 0"); + cmd(win, ".f.l configure -text '" + string nballs + " balls"); + tkclient->onscreen(win, nil); + tkclient->startinput(win, "kbd"::"ptr"::nil); + + mch := chan of (int, Point); + randch = chan of int; + spawn randgenproc(randch); + csz := Point(int cmd(win, ".c cget -actwidth"), int cmd(win, ".c cget -actheight")); + + # add edges of window + addline(win, ((-1, -1), (csz.x, -1))); + addline(win, ((csz.x, -1), csz)); + addline(win, (csz, (-1, csz.y))); + addline(win, ((-1, csz.y), (-1, -1))); + + spawn makelinesproc(win, mch); + mkball := chan of (int, Realpoint, Realpoint); + spawn monitor(win, mkball); + for (i = 0; i < nballs; i++) + mkball <-= (1, randpoint(csz), makeunit(randpoint(csz))); + for (;;) alt { + s := <-win.ctxt.kbd => + tk->keyboard(win, s); + s := <-win.ctxt.ptr => + tk->pointer(win, *s); + s := <-win.ctxt.ctl or + s = <-win.wreq or + s = <-wmctl => + tkclient->wmctl(win, s); + c := <-cmdch => + (nil, toks) := sys->tokenize(c, " "); + if (hd toks != "k") { + mch <-= (int hd toks, Point(int hd tl toks, int hd tl tl toks)); + continue; + } + n := nballs + int hd tl toks; + if (n < 0) + n = 0; + dn := 1; + if (n < nballs) + dn = -1; + for (; nballs != n; nballs += dn) + mkball <-= (dn, randpoint(csz), makeunit(randpoint(csz))); + cmd(win, ".f.l configure -text '" + string nballs + " balls"); + cmd(win, "update"); + } +} + +randpoint(size: Point): Realpoint +{ + return (randreal(size.x), randreal(size.y)); +} + +# return randomish real number between 1 and x-1 +randreal(x: int): real +{ + return real (<-randch % ((x - 1) * 100)) / 100.0 + 1.0; +} + +# make sure cpu time is handed to all ball processes fairly +# by passing a "token" around to each process in turn. +# each process does its work when it *hasn't* got its +# token but it can't go through two iterations without +# waiting its turn. +# +# new processes can be created and destroyed by +# sending on mkball. processes are arranged in a stack-like +# order: new processes are added to the top of the stack, and +# processes are destroyed from the top of the stack downwards. +monitor(win: ref Tk->Toplevel, mkball: chan of (int, Realpoint, Realpoint)) +{ + procl := proc := chan of int :: nil; + spawn nullproc(hd proc); # always there to avoid deadlock when no balls. + hd proc <-= 1; # hand token to dummy proc + for (;;) { + procc := hd proc; + alt { + (n, p, v) := <-mkball => + if (n > 0) { # start new ball proc going. + procl = chan of int :: procl; + spawn animproc(hd procl, win, p, v); + } else if (tl procl != nil) { # stop a ball proc. + <-hd proc; # get token. + hd procl <-= 0; # stop proc. + proc = procl = tl procl; # remove proc. + hd proc <-= 1; # hand out token. + } + <-procc => # got token. + if ((proc = tl proc) == nil) + proc = procl; + hd proc <-= 1; # hand token to next process. + } + } +} + +nullproc(c: chan of int) +{ + for (;;) + c <-= <-c; +} + +# animate one ball. initial position and unit-velocity are +# given by p and v. +animproc(c: chan of int, win: ref Tk->Toplevel, p, v: Realpoint) +{ + speed := 0.1 + real (<-randch % 40) / 100.0; + ballid := cmd(win, sys->sprint(".c create oval 0 0 1 1 -fill #%.6x", <-randch & 16rffffff)); + hitlineid := -1; + smallcount := 0; + version := lineversion; +loop: for (;;) { + hitline: Line; + hitp: Realpoint; + + dist := 1000000.0; + oldid := hitlineid; + for (l := lines; l != nil; l = tl l) { + (id, line) := hd l; + (ok, hp, hdist) := intersect(p, v, line); + if (ok && hdist < dist && id != oldid && (smallcount < 10 || hdist > 1.5)) { + (hitp, hitline, hitlineid, dist) = (hp, line, id, hdist); + } + } + if (dist > 10000.0) { + sys->print("no intersection!\n"); +# sys->print("p: [%f, %f], v: [%f, %f]\n", p.x, p.y, v.x, v.y); +# for (l := lines; l != nil; l = tl l) { +# (id, line) := hd l; +# (ok, hp, hdist) := intersect(p, v, line); +# sys->print("line: [%d %d]->[%d %d] -> %d, [%f, %f], %f\n", line.p1.x, line.p1.y, line.p2.x, line.p2.y, +# ok, hp.x, hp.y, hdist); +# } + cmd(win, ".c delete " + ballid + ";update"); + while (c <-= <-c) + ; + exit; + } + if (dist < 0.0001) + smallcount++; + else + smallcount = 0; + bouncev := boing(v, hitline); + t0 := sys->millisec(); + dt := int (dist / speed); + t := 0; + do { + s := real t * speed; + currp := Realpoint(p.x + s * v.x, p.y + s * v.y); + bp := Point(int currp.x, int currp.y); + cmd(win, ".c coords " + ballid + " " + + string (bp.x-BALLSIZE)+" "+string (bp.y-BALLSIZE)+" "+ + string (bp.x+BALLSIZE)+" "+string (bp.y+BALLSIZE)); + cmd(win, "update"); + if (lineversion > version) { + (p, hitlineid, version) = (currp, oldid, lineversion); + continue loop; + } + # pass the token back to the monitor. + if (<-c == 0) { + cmd(win, ".c delete " + ballid + ";update"); + exit; + } + c <-= 1; + t = sys->millisec() - t0; + } while (t < dt); + p = hitp; + v = bouncev; + } +} + +# thread-safe access to the Rand module +randgenproc(ch: chan of int) +{ + rand := load Rand Rand->PATH; + for (;;) + ch <-= rand->rand(16r7fffffff); +} + +makelinesproc(win: ref Tk->Toplevel, mch: chan of (int, Point)) +{ + for (;;) { + (down, p1) := <-mch; + addline(win, (p1, p1)); + (id, nil) := hd lines; + p2 := p1; + do { + (down, p2) = <-mch; + cmd(win, ".c coords l" + string id + " " + pt2s(p1) + " " + pt2s(p2)); + cmd(win, "update"); + lines = (id, (p1, p2)) :: tl lines; + lineversion++; + if (down > 1) { + dp := p2.sub(p1); + if (dp.x*dp.x + dp.y*dp.y > 5) { + p1 = p2; + addline(win, (p2, p2)); + (id, nil) = hd lines; + } + } + } while (down); + } +} + +# make a vector of unit-length, parallel to v. +makeunit(v: Realpoint): Realpoint +{ + mag := math->sqrt(v.x * v.x + v.y * v.y); + return (v.x / mag, v.y / mag); +} + +# bounce ball travelling in direction av off line b. +# return the new unit vector. +boing(av: Realpoint, b: Line): Realpoint +{ + f := b.p2.sub(b.p1); + d := math->atan2(real f.y, real f.x) * 2.0 - math->atan2(av.y, av.x); + return (math->cos(d), math->sin(d)); +} + +# compute the intersection of lines a and b. +# b is assumed to be fixed, and a is indefinitely long +# but doesn't extend backwards from its starting point. +# a is defined by the starting point p and the unit vector v. +intersect(p, v: Realpoint, b: Line): (int, Realpoint, real) +{ + w := Realpoint(real (b.p2.x - b.p1.x), real (b.p2.y - b.p1.y)); + det := w.x * v.y - v.x * w.y; + if (det > -ZERO && det < ZERO) + return (0, (0.0, 0.0), 0.0); + + y21 := real b.p1.y - p.y; + x21 := real b.p1.x - p.x; + s := (w.x * y21 - w.y * x21) / det; + if (s < 0.0) + return (0, (0.0, 0.0), 0.0); + + hp := Realpoint(p.x+v.x*s, p.y+v.y*s); + if (b.p1.x > b.p2.x) + (b.p1.x, b.p2.x) = (b.p2.x, b.p1.x); + if (b.p1.y > b.p2.y) + (b.p1.y, b.p2.y) = (b.p2.y, b.p1.y); + + return (int hp.x >= b.p1.x && int hp.x <= b.p2.x + && int hp.y >= b.p1.y && int hp.y <= int b.p2.y, hp, s); +} + +cmd(top: ref Tk->Toplevel, s: string): string +{ + e := tk->cmd(top, s); + if (e != nil && e[0] == '!') + sys->print("tk error %s on '%s'\n", e, s); + return e; +} + +pt2s(p: Point): string +{ + return string p.x + " " + string p.y; +} diff --git a/appl/wm/date.b b/appl/wm/date.b new file mode 100644 index 000000000..72278b7a8 --- /dev/null +++ b/appl/wm/date.b @@ -0,0 +1,78 @@ +implement WmDate; + +include "sys.m"; + sys: Sys; + +include "draw.m"; + draw: Draw; + +include "tk.m"; + tk: Tk; + +include "tkclient.m"; + tkclient: Tkclient; + +include "daytime.m"; + daytime: Daytime; + + +WmDate: module +{ + init: fn(ctxt: ref Draw->Context, argv: list of string); +}; + +tpid: int; + +init(ctxt: ref Draw->Context, nil: list of string) +{ + sys = load Sys Sys->PATH; + if (ctxt == nil) { + sys->fprint(sys->fildes(2), "date: no window context\n"); + raise "fail:bad context"; + } + draw = load Draw Draw->PATH; + tk = load Tk Tk->PATH; + tkclient= load Tkclient Tkclient->PATH; + daytime = load Daytime Daytime->PATH; + + sys->pctl(Sys->NEWPGRP, nil); + tkclient->init(); + (t, wmctl) := tkclient->toplevel(ctxt, "", "Date", 0); + + st := daytime->time()[0:19]; + tk->cmd(t, "label .d -label {"+st+"}"); + tk->cmd(t, "pack .d; pack propagate . 0"); + tkclient->onscreen(t, nil); + tkclient->startinput(t, "ptr"::nil); + tick := chan of int; + spawn timer(tick); + + for(;;) alt { + s := <-t.ctxt.kbd => + tk->keyboard(t, s); + s := <-t.ctxt.ptr => + tk->pointer(t, *s); + s := <-t.ctxt.ctl or + s = <-t.wreq or + s = <-wmctl => + tkclient->wmctl(t, s); + <-tick => + tk->cmd(t, ".d configure -label {"+daytime->time()[0:19]+"};update"); + } +} + +timer(c: chan of int) +{ + tpid = sys->pctl(0, nil); + for(;;) { + c <-= 1; + sys->sleep(1000); + } +} + +kill(pid: int) +{ + fd := sys->open("#p/"+string pid+"/ctl", sys->OWRITE); + if(fd != nil) + sys->fprint(fd, "kill"); +} diff --git a/appl/wm/mkfile b/appl/wm/mkfile index 69764dd20..f312cdfad 100644 --- a/appl/wm/mkfile +++ b/appl/wm/mkfile @@ -4,6 +4,10 @@ DIRS=\ TARG=\ about.dis\ + task.dis\ + sh.dis\ + date.dis\ + bounce.dis\ logon.dis\ clock.dis\ colors.dis\ diff --git a/appl/wm/sh.b b/appl/wm/sh.b new file mode 100644 index 000000000..8f6343296 --- /dev/null +++ b/appl/wm/sh.b @@ -0,0 +1,874 @@ +implement WmSh; + +include "sys.m"; + sys: Sys; + FileIO: import sys; + +include "draw.m"; + draw: Draw; + Context, Rect: import draw; + +include "tk.m"; + tk: Tk; + +include "tkclient.m"; + tkclient: Tkclient; + +include "plumbmsg.m"; + plumbmsg: Plumbmsg; + Msg: import plumbmsg; + +include "workdir.m"; + +include "string.m"; + str: String; + +include "arg.m"; + +WmSh: module +{ + init: fn(ctxt: ref Draw->Context, args: list of string); +}; + +Command: type WmSh; + +BSW: con 23; # ^w bacspace word +BSL: con 21; # ^u backspace line +EOT: con 4; # ^d end of file +ESC: con 27; # hold mode + +# XXX line-based limits are inadequate - memory is still +# blown if a client writes a very long line. +HIWAT: con 2000; # maximum number of lines in transcript +LOWAT: con 1500; # amount to reduce to after high water + +Name: con "Shell"; + +Rdreq: adt +{ + off: int; + nbytes: int; + fid: int; + rc: chan of (array of byte, string); +}; + +shwin_cfg := array[] of { + "menu .m", + ".m add command -text noscroll -command {send edit noscroll}", + ".m add command -text cut -command {send edit cut}", + ".m add command -text paste -command {send edit paste}", + ".m add command -text snarf -command {send edit snarf}", + ".m add command -text send -command {send edit send}", + "frame .b -bd 1 -relief ridge", + "frame .ft -bd 0", + "scrollbar .ft.scroll -command {send scroll t}", + "text .ft.t -bd 1 -relief flat -yscrollcommand {send scroll s} -bg white -selectforeground black -selectbackground #CCCCCC", + ".ft.t tag configure sel -relief flat", + "pack .ft.scroll -side left -fill y", + "pack .ft.t -fill both -expand 1", + "pack .Wm_t -fill x", + "pack .b -anchor w -fill x", + "pack .ft -fill both -expand 1", + "focus .ft.t", + "bind .ft.t {send keys {%A}}", + "bind .ft.t {send keys {%A}}", + "bind .ft.t {send keys {%A}}", + "bind .ft.t {send keys {%A}}", + "bind .ft.t {send keys {%A}}", + "bind .ft.t +{send but1 pressed}", + "bind .ft.t +{send but1 pressed}", + "bind .ft.t +{send but1 released}", + "bind .ft.t {send but2 %X %Y}", + "bind .ft.t {}", + "bind .ft.t {}", + "bind .ft.t {send but3 pressed}", + "bind .ft.t {send but3 released %x %y}", + "bind .ft.t {}", + "bind .ft.t {}", + "bind .ft.t {}", + "bind .ft.t {}", +}; + +rdreq: list of Rdreq; +menuindex := "0"; +holding := 0; +haskbdfocus := 0; +plumbed := 0; +rawon := 0; +rawinput := ""; +scrolling := 1; +partialread: array of byte; +cwd := ""; +width, height, font: string; + +events: list of string; +evrdreq: list of Rdreq; +winname: string; + +badmod(p: string) +{ + sys->print("wm/sh: cannot load %s: %r\n", p); + raise "fail:bad module"; +} + +init(ctxt: ref Context, argv: list of string) +{ + sys = load Sys Sys->PATH; + draw = load Draw Draw->PATH; + tk = load Tk Tk->PATH; + + tkclient = load Tkclient Tkclient->PATH; + if (tkclient == nil) + badmod(Tkclient->PATH); + + str = load String String->PATH; + if (str == nil) + badmod(String->PATH); + + arg := load Arg Arg->PATH; + if (arg == nil) + badmod(Arg->PATH); + arg->init(argv); + + plumbmsg = load Plumbmsg Plumbmsg->PATH; + + sys->pctl(Sys->FORKNS | Sys->NEWPGRP | Sys->FORKENV, nil); + + tkclient->init(); + if (ctxt == nil) + ctxt = tkclient->makedrawcontext(); + if(ctxt == nil){ + sys->fprint(sys->fildes(2), "sh: no window context\n"); + raise "fail:bad context"; + } + + if(plumbmsg != nil && plumbmsg->init(1, nil, 0) >= 0){ + plumbed = 1; + workdir := load Workdir Workdir->PATH; + cwd = workdir->init(); + } + + shargs: list of string; + while ((opt := arg->opt()) != 0) { + case opt { + 'w' => + width = arg->arg(); + 'h' => + height = arg->arg(); + 'f' => + font = arg->arg(); + 'c' => + a := arg->arg(); + if (a == nil) { + sys->print("usage: wm/sh [-ilxvn] [-w width] [-h height] [-f font] [-c command] [file [args...]\n"); + raise "fail:usage"; + } + shargs = a :: "-c" :: shargs; + 'i' or 'l' or 'x' or 'v' or 'n' => + shargs = sys->sprint("-%c", opt) :: shargs; + } + } + argv = arg->argv(); + for (; shargs != nil; shargs = tl shargs) + argv = hd shargs :: argv; + + winname = Name + " " + cwd; + + spawn main(ctxt, argv); +} + +task(t: ref Tk->Toplevel) +{ + tkclient->wmctl(t, "task"); +} + +atend(t: ref Tk->Toplevel, w: string): int +{ + s := cmd(t, w+" yview"); + for(i := 0; i < len s; i++) + if(s[i] == ' ') + break; + return i == len s - 2 && s[i+1] == '1'; +} + +main(ctxt: ref Draw->Context, argv: list of string) +{ + (t, titlectl) := tkclient->toplevel(ctxt, "", winname, Tkclient->Appl); + wm := t.ctxt; + + edit := chan of string; + tk->namechan(t, edit, "edit"); + + keys := chan of string; + tk->namechan(t, keys, "keys"); + + butcmd := chan of string; + tk->namechan(t, butcmd, "button"); + + event := chan of string; + tk->namechan(t, event, "action"); + + scroll := chan of string; + tk->namechan(t, scroll, "scroll"); + + but1 := chan of string; + tk->namechan(t, but1, "but1"); + but2 := chan of string; + tk->namechan(t, but2, "but2"); + but3 := chan of string; + tk->namechan(t, but3, "but3"); + button1 := 0; + button3 := 0; + + for (i := 0; i < len shwin_cfg; i++) + cmd(t, shwin_cfg[i]); + (menuw, nil) := itemsize(t, ".m"); + if (font != nil) { + if (font[0] != '/' && (len font == 1 || font[0:2] != "./")) + font = "/fonts/" + font; + cmd(t, ".ft.t configure -font " + font); + } + cmd(t, ".ft.t configure -width 65w -height 20h"); + cmd(t, "pack propagate . 0"); + if(width != nil) + cmd(t, ". configure -width " + width); + if(height != nil) + cmd(t, ". configure -height " + height); + tkclient->onscreen(t, nil); + tkclient->startinput(t, "ptr" :: "kbd" :: nil); + + ioc := chan of (int, ref FileIO, ref FileIO, string, ref FileIO); + spawn newsh(ctxt, ioc, argv); + + (nil, file, filectl, consfile, shctl) := <-ioc; + if(file == nil || filectl == nil || shctl == nil) { + sys->print("newsh: shell cons creation failed\n"); + return; + } + dummyfwrite := chan of (int, array of byte, int, Sys->Rwrite); + fwrite := file.write; + + rdrpc: Rdreq; + + # outpoint is place in text to insert characters printed by programs + cmd(t, ".ft.t mark set outpoint 1.0; .ft.t mark gravity outpoint left"); + + for(;;) alt { + c := <-wm.kbd => + tk->keyboard(t, c); + m := <-wm.ptr => + tk->pointer(t, *m); + c := <-wm.ctl or + c = <-t.wreq or + c = <-titlectl => + (nil, flds) := sys->tokenize(c, " \t"); + if(flds != nil && hd flds == "haskbdfocus" && tl flds != nil){ + haskbdfocus = int hd tl flds; + setcols(t); + } + tkclient->wmctl(t, c); + ecmd := <-edit => + editor(t, ecmd); + sendinput(t); + + c := <-keys => + char := c[1]; + if(char == '\\') + char = c[2]; + if(char != ESC) + cut(t, 1); + if(rawon){ + if(int cmd(t, ".ft.t compare insert >= outpoint")){ + rawinput[len rawinput] = char; + sendinput(t); + break; + } + } + case char { + * => + cmd(t, ".ft.t insert insert "+c); + '\n' or + EOT => + cmd(t, ".ft.t insert insert "+c); + sendinput(t); + '\b' => + cmd(t, ".ft.t tkTextDelIns -c"); + BSL => + cmd(t, ".ft.t tkTextDelIns -l"); + BSW => + cmd(t, ".ft.t tkTextDelIns -w"); + ESC => + setholding(t, !holding); + } + cmd(t, ".ft.t see insert;update"); + + c := <-but1 => + button1 = (c == "pressed"); + button3 = 0; # abort any pending button 3 action + + c := <-but2 => + if(button1){ + cut(t, 1); + cmd(t, "update"); + break; + } + (nil, l) := sys->tokenize(c, " "); + x := int hd l - menuw/2; + y := int hd tl l - int cmd(t, ".m yposition "+menuindex) - 10; + cmd(t, ".m activate "+menuindex+"; .m post "+string x+" "+string y+ + "; update"); + button3 = 0; # abort any pending button 3 action + + c := <-but3 => + if(c == "pressed"){ + button3 = 1; + if(button1){ + paste(t); + sendinput(t); + cmd(t, "update"); + } + break; + } + if(plumbed == 0 || button3 == 0 || button1 != 0) + break; + button3 = 0; + # plumb message triggered by release of button 3 + (nil, l) := sys->tokenize(c, " "); + x := int hd tl l; + y := int hd tl tl l; + index := cmd(t, ".ft.t index @"+string x+","+string y); + selindex := cmd(t, ".ft.t tag ranges sel"); + if(selindex != "") + insel := cmd(t, ".ft.t compare sel.first <= "+index)=="1" && + cmd(t, ".ft.t compare sel.last >= "+index)=="1"; + else + insel = 0; + attr := ""; + if(insel) + text := tk->cmd(t, ".ft.t get sel.first sel.last"); + else{ + # have line with text in it + # now extract whitespace-bounded string around click + (nil, w) := sys->tokenize(index, "."); + charno := int hd tl w; + left := cmd(t, ".ft.t index {"+index+" linestart}"); + right := cmd(t, ".ft.t index {"+index+" lineend}"); + line := tk->cmd(t, ".ft.t get "+left+" "+right); + for(i=charno; i>0; --i) + if(line[i-1]==' ' || line[i-1]=='\t') + break; + for(j:=charno; jfprint(sys->fildes(2), "sh: plumbing write error: %r\n"); + c := <-butcmd => + simulatetype(t, tkunquote(c)); + sendinput(t); + cmd(t, "update"); + c := <-event => + events = str->append(tkunquote(c), events); + if (evrdreq != nil) { + rc := (hd evrdreq).rc; + rc <-= (array of byte hd events, nil); + evrdreq = tl evrdreq; + events = tl events; + } + rdrpc = <-shctl.read => + if(rdrpc.rc == nil) + continue; + if (events != nil) { + rdrpc.rc <-= (array of byte hd events, nil); + events = tl events; + } else + evrdreq = rdrpc :: evrdreq; + (nil, data, nil, wc) := <-shctl.write => + if (wc == nil) + break; + if ((err := shctlcmd(t, string data)) != nil) + wc <-= (0, err); + else + wc <-= (len data, nil); + rdrpc = <-filectl.read => + if(rdrpc.rc == nil) + continue; + rdrpc.rc <-= (nil, "not allowed"); + (nil, data, nil, wc) := <-filectl.write => + if(wc == nil) { + # consctl closed - revert to cooked mode + # XXX should revert only on *last* close? + rawon = 0; + continue; + } + (nc, cmdlst) := sys->tokenize(string data, " \n"); + if(nc == 1) { + case hd cmdlst { + "rawon" => + rawon = 1; + rawinput = ""; + # discard previous input + advance := string (len tk->cmd(t, ".ft.t get outpoint end") +1); + cmd(t, ".ft.t mark set outpoint outpoint+" + advance + "chars"); + partialread = nil; + "rawoff" => + rawon = 0; + partialread = nil; + "holdon" => + setholding(t, 1); + cmd(t, "update"); + "holdoff" => + setholding(t, 0); + cmd(t, "update"); + * => + wc <-= (0, "unknown consctl request"); + continue; + } + wc <-= (len data, nil); + continue; + } + wc <-= (0, "unknown consctl request"); + + rdrpc = <-file.read => + if(rdrpc.rc == nil) { + (ok, nil) := sys->stat(consfile); + if (ok < 0) + return; + continue; + } + append(rdrpc); + sendinput(t); + + c := <-scroll => + if(c[0] == 't'){ + cmd(t, ".ft.t yview "+c[1:]+";update"); + if(scrolling) + fwrite = file.write; + else if(atend(t, ".ft.t")) + fwrite = file.write; + else + fwrite = dummyfwrite; + }else{ + cmd(t, ".ft.scroll set "+c[1:]+";update"); + if(atend(t, ".ft.t") && fwrite == dummyfwrite) + fwrite = file.write; + } + (nil, data, nil, wc) := <-fwrite => + if(wc == nil) { + (ok, nil) := sys->stat(consfile); + if (ok < 0) + return; + continue; + } + needscroll := atend(t, ".ft.t"); + cdata := cursorcontrol(t, string data); + ncdata := string len cdata + "chars;"; + cmd(t, ".ft.t insert outpoint '"+ cdata); + wc <-= (len data, nil); + data = nil; + s := ".ft.t mark set outpoint outpoint+" + ncdata; + if(!atend(t, ".ft.t") && scrolling == 0) + fwrite = dummyfwrite; + else if(needscroll) + s += ".ft.t see outpoint;"; + s += "update"; + cmd(t, s); + nlines := int cmd(t, ".ft.t index end"); + if(nlines > HIWAT){ + s = ".ft.t delete 1.0 "+ string (nlines-LOWAT) +".0;update"; + cmd(t, s); + } + } +} + +setholding(t: ref Tk->Toplevel, hold: int) +{ + if(hold == holding) + return; + holding = hold; + if(!holding){ + tkclient->settitle(t, winname); + sendinput(t); + }else + tkclient->settitle(t, winname+" (holding)"); + setcols(t); +} + +setcols(t: ref Tk->Toplevel) +{ + fgcol := "black"; + if(holding){ + if(haskbdfocus) + fgcol = "#000099FF"; # DMedblue + else + fgcol = "#005DBBFF"; # DGreyblue + }else{ + if(haskbdfocus) + fgcol = "black"; + else + fgcol = "#666666FF"; # dark grey + } + cmd(t, ".ft.t configure -foreground "+fgcol+" -selectforeground "+fgcol); + cmd(t, ".ft.t tag configure sel -foreground "+fgcol); +} + +tkunquote(s: string): string +{ + if (s == nil) + return nil; + t: string; + if (s[0] != '{' || s[len s - 1] != '}') + return s; + for (i := 1; i < len s - 1; i++) { + if (s[i] == '\\') + i++; + t[len t] = s[i]; + } + return t; +} + +buttonid := 0; +shctlcmd(win: ref Tk->Toplevel, c: string): string +{ + toks := str->unquoted(c); + if (toks == nil) + return "null command"; + n := len toks; + case hd toks { + "button" or + "action"=> + # (button|action) title sendtext + if (n != 3) + return "bad usage"; + id := ".b.b" + string buttonid++; + cmd(win, "button " + id + " -text " + tk->quote(hd tl toks) + + " -command 'send " + hd toks + " " + tk->quote(hd tl tl toks)); + cmd(win, "pack " + id + " -side left"); + cmd(win, "pack propagate .b 0"); + "clear" => + cmd(win, "pack propagate .b 1"); + for (i := 0; i < buttonid; i++) + cmd(win, "destroy .b.b" + string i); + buttonid = 0; + "cwd" => + if (n != 2) + return "bad usage"; + cwd = hd tl toks; + winname = Name + " " + cwd; + tkclient->settitle(win, winname); + * => + return "bad command"; + } + cmd(win, "update"); + return nil; +} + + +RPCread: type (int, int, int, chan of (array of byte, string)); + +append(r: RPCread) +{ + t := r :: nil; + while(rdreq != nil) { + t = hd rdreq :: t; + rdreq = tl rdreq; + } + rdreq = t; +} + +insat(t: ref Tk->Toplevel, mark: string): int +{ + return cmd(t, ".ft.t compare insert == "+mark) == "1"; +} + +insininput(t: ref Tk->Toplevel): int +{ + if(cmd(t, ".ft.t compare insert >= outpoint") != "1") + return 0; + return cmd(t, ".ft.t compare {insert linestart} == {outpoint linestart}") == "1"; +} + +isalnum(s: string): int +{ + if(s == "") + return 0; + c := s[0]; + if('a' <= c && c <= 'z') + return 1; + if('A' <= c && c <= 'Z') + return 1; + if('0' <= c && c <= '9') + return 1; + if(c == '_') + return 1; + if(c > 16rA0) + return 1; + return 0; +} + +cursorcontrol(t: ref Tk->Toplevel, s: string): string +{ + l := len s; + for(i := 0; i < l; i++) { + case s[i] { + '\b' => + pre := ""; + rem := ""; + if(i + 1 < l) + rem = s[i+1:]; + if(i == 0) { # erase existing character in line + if(tk->cmd(t, ".ft.t get " + + "{outpoint linestart} outpoint") != "") + cmd(t, ".ft.t delete outpoint-1char"); + } else { + if(s[i-1] != '\n') # don't erase newlines + i--; + if(i) + pre = s[:i]; + } + s = pre + rem; + l = len s; + i = len pre - 1; + '\r' => + s[i] = '\n'; + if(i + 1 < l && s[i+1] == '\n') # \r\n + s = s[:i] + s[i+1:]; + else if(i > 0 && s[i-1] == '\n') # \n\r + s = s[:i-1] + s[i:]; + l = len s; + '\0' => + s[i] = Sys->UTFerror; + } + } + return s; +} + +editor(t: ref Tk->Toplevel, ecmd: string) +{ + s, snarf: string; + + case ecmd { + "scroll" => + menuindex = "0"; + scrolling = 1; + cmd(t, ".m entryconfigure 0 -text noscroll -command {send edit noscroll}"); + "noscroll" => + menuindex = "0"; + scrolling = 0; + cmd(t, ".m entryconfigure 0 -text scroll -command {send edit scroll}"); + "cut" => + menuindex = "1"; + cut(t, 1); + "paste" => + menuindex = "2"; + paste(t); + "snarf" => + menuindex = "3"; + if(cmd(t, ".ft.t tag ranges sel") == "") + break; + snarf = tk->cmd(t, ".ft.t get sel.first sel.last"); + tkclient->snarfput(snarf); + "send" => + menuindex = "4"; + if(cmd(t, ".ft.t tag ranges sel") != ""){ + snarf = tk->cmd(t, ".ft.t get sel.first sel.last"); + tkclient->snarfput(snarf); + }else{ + snarf = tkclient->snarfget(); + } + if(snarf != "") + s = snarf; + else + return; + if(s[len s-1] != '\n' && s[len s-1] != EOT) + s[len s] = '\n'; + simulatetype(t, s); + } + cmd(t, "update"); +} + +simulatetype(t: ref Tk->Toplevel, s: string) +{ + if(rawon){ + rawinput += s; + }else{ + cmd(t, ".ft.t see end; .ft.t insert end '"+s); + cmd(t, ".ft.t mark set insert end"); + tk->cmd(t, ".ft.t tag remove sel sel.first sel.last"); + } +} + +cut(t: ref Tk->Toplevel, snarfit: int) +{ + if(cmd(t, ".ft.t tag ranges sel") == "") + return; + if(snarfit) + tkclient->snarfput(tk->cmd(t, ".ft.t get sel.first sel.last")); + cmd(t, ".ft.t delete sel.first sel.last"); +} + +paste(t: ref Tk->Toplevel) +{ + snarf := tkclient->snarfget(); + if(snarf == "") + return; + cut(t, 0); + if(rawon && int cmd(t, ".ft.t compare insert >= outpoint")){ + rawinput += snarf; + }else{ + cmd(t, ".ft.t insert insert '"+snarf); + cmd(t, ".ft.t tag add sel insert-"+string len snarf+"chars insert"); + } +} + +sendinput(t: ref Tk->Toplevel) +{ + input: string; + if(rawon) + input = rawinput; + else + input = tk->cmd(t, ".ft.t get outpoint end"); + if(rdreq == nil || (input == nil && len partialread == 0)) + return; + r := hd rdreq; + (chars, bytes, partial) := triminput(r.nbytes, input, partialread); + if(bytes == nil) + return; # no terminator yet + rdreq = tl rdreq; + + alt { + r.rc <-= (bytes, nil) => + # check that it really was sent + alt { + r.rc <-= (nil, nil) => + ; + * => + return; + } + * => + return; # requester has disappeared; ignore his request and try another + } + if(rawon) + rawinput = rawinput[chars:]; + else + cmd(t, ".ft.t mark set outpoint outpoint+" + string chars + "chars"); + partialread = partial; +} + +# read at most nr bytes from the input string, returning the number of characters +# consumed, the bytes to be read, and any remaining bytes from a partially +# read multibyte UTF character. +triminput(nr: int, input: string, partial: array of byte): (int, array of byte, array of byte) +{ + if(nr <= len partial) + return (0, partial[0:nr], partial[nr:]); + if(holding) + return (0, nil, partial); + + # keep the array bounds within sensible limits + if(nr > len input*Sys->UTFmax) + nr = len input*Sys->UTFmax; + buf := array[nr+Sys->UTFmax] of byte; + t := len partial; + buf[0:] = partial; + + hold := !rawon; + i := 0; + while(i < len input){ + c := input[i++]; + # special case for ^D - don't read the actual ^D character + if(!rawon && c == EOT){ + hold = 0; + break; + } + + t += sys->char2byte(c, buf, t); + if(c == '\n' && !rawon){ + hold = 0; + break; + } + if(t >= nr) + break; + } + if(hold){ + for(j := i; j < len input; j++){ + c := input[j]; + if(c == '\n' || c == EOT) + break; + } + if(j == len input) + return (0, nil, partial); + # strip ^D when next read would read it, otherwise + # we'll give premature EOF. + if(i == j && input[i] == EOT) + i++; + } + partial = nil; + if(t > nr){ + partial = buf[nr:t]; + t = nr; + } + return (i, buf[0:t], partial); +} + +newsh(ctxt: ref Context, ioc: chan of (int, ref FileIO, ref FileIO, string, ref FileIO), + args: list of string) +{ + pid := sys->pctl(sys->NEWFD, nil); + + sh := load Command "/dis/sh.dis"; + if(sh == nil) { + ioc <-= (0, nil, nil, nil, nil); + return; + } + + tty := "cons."+string pid; + + sys->bind("#s","/chan",sys->MBEFORE); + fio := sys->file2chan("/chan", tty); + fioctl := sys->file2chan("/chan", tty + "ctl"); + shctl := sys->file2chan("/chan", "shctl"); + ioc <-= (pid, fio, fioctl, "/chan/"+tty, shctl); + if(fio == nil || fioctl == nil || shctl == nil) + return; + + sys->bind("/chan/"+tty, "/dev/cons", sys->MREPL); + sys->bind("/chan/"+tty+"ctl", "/dev/consctl", sys->MREPL); + + fd0 := sys->open("/dev/cons", sys->OREAD|sys->ORCLOSE); + fd1 := sys->open("/dev/cons", sys->OWRITE); + fd2 := sys->open("/dev/cons", sys->OWRITE); + + { + sh->init(ctxt, "sh" :: "-n" :: args); + }exception{ + "fail:*" => + exit; + } +} + +cmd(top: ref Tk->Toplevel, c: string): string +{ + s:= tk->cmd(top, c); +# sys->print("* %s\n", c); + if (s != nil && s[0] == '!') + sys->fprint(sys->fildes(2), "wmsh: tk error on '%s': %s\n", c, s); + return s; +} + +itemsize(top: ref Tk->Toplevel, item: string): (int, int) +{ + w := int tk->cmd(top, item + " cget -actwidth"); + h := int tk->cmd(top, item + " cget -actheight"); + b := int tk->cmd(top, item + " cget -borderwidth"); + return (w+b, h+b); +} diff --git a/appl/wm/task.b b/appl/wm/task.b new file mode 100644 index 000000000..762d1262d --- /dev/null +++ b/appl/wm/task.b @@ -0,0 +1,240 @@ +implement WmTask; + +include "sys.m"; + sys: Sys; + Dir: import sys; + +include "draw.m"; + draw: Draw; + +include "tk.m"; + tk: Tk; + Toplevel: import tk; + +include "tkclient.m"; + tkclient: Tkclient; + +include "dialog.m"; + dialog: Dialog; + +Prog: adt +{ + pid: int; + pgrp: int; + size: int; + state: string; + mod: string; +}; + +WmTask: module +{ + init: fn(ctxt: ref Draw->Context, argv: list of string); +}; + +Wm: module +{ + init: fn(ctxt: ref Draw->Context, argv: list of string); +}; + +task_cfg := array[] of { + "frame .fl", + "scrollbar .fl.scroll -command {.fl.l yview}", + "listbox .fl.l -width 40w -yscrollcommand {.fl.scroll set}", + "frame .b", + "button .b.ref -text Refresh -command {send cmd r}", + "button .b.deb -text Debug -command {send cmd d}", + "button .b.files -text Files -command {send cmd f}", + "button .b.kill -text Kill -command {send cmd k}", + "button .b.killg -text {Kill Group} -command {send cmd kg}", + "pack .b.ref .b.deb .b.files .b.kill .b.killg -side left -padx 2 -pady 2", + "pack .b -fill x", + "pack .fl.scroll -side left -fill y", + "pack .fl.l -fill both -expand 1", + "pack .fl -fill both -expand 1", + "pack propagate . 0", +}; + +init(ctxt: ref Draw->Context, nil: list of string) +{ + sys = load Sys Sys->PATH; + if (ctxt == nil) { + sys->fprint(sys->fildes(2), "task: no window context\n"); + raise "fail:bad context"; + } + draw = load Draw Draw->PATH; + tk = load Tk Tk->PATH; + tkclient= load Tkclient Tkclient->PATH; + dialog = load Dialog Dialog->PATH; + + tkclient->init(); + dialog->init(); + + sysnam := sysname(); + + (t, wmctl) := tkclient->toplevel(ctxt, "", sysnam, Tkclient->Appl); + if(t == nil) + return; + + cmd := chan of string; + tk->namechan(t, cmd, "cmd"); + + for (c:=0; ccmd(t, task_cfg[c]); + + readprog(t); + + tk->cmd(t, ".fl.l see end;update"); + tkclient->onscreen(t, nil); + tkclient->startinput(t, "kbd"::"ptr"::nil); + + for(;;) alt { + s := <-t.ctxt.kbd => + tk->keyboard(t, s); + s := <-t.ctxt.ptr => + tk->pointer(t, *s); + s := <-t.ctxt.ctl or + s = <-t.wreq => + tkclient->wmctl(t, s); + menu := <-wmctl => + case menu { + "exit" => + return; + "task" => + tkclient->wmctl(t, menu); + tk->cmd(t, ".fl.l delete 0 end"); + readprog(t); + tk->cmd(t, ".fl.l see end;update"); + * => + tkclient->wmctl(t, menu); + } + bcmd := <-cmd => + case bcmd { + "d" => + sel := tk->cmd(t, ".fl.l curselection"); + if(sel == "") + break; + pid := int tk->cmd(t, ".fl.l get "+sel); + stk := load Wm "/dis/wm/deb.dis"; + if(stk == nil) + break; + spawn stk->init(ctxt, "wm/deb" :: "-p "+string pid :: nil); + stk = nil; + "k" or "kg" => + sel := tk->cmd(t, ".fl.l curselection"); + if(sel == "") + break; + pid := int tk->cmd(t, ".fl.l get "+sel); + what := "opening ctl file"; + cfile := "/prog/"+string pid+"/ctl"; + cfd := sys->open(cfile, sys->OWRITE); + if(cfd != nil) { + if(bcmd == "kg"){ + if(sys->fprint(cfd, "killgrp") > 0){ + cfd = nil; + refresh(t); + break; + } + }else if(sys->fprint(cfd, "kill") > 0){ + tk->cmd(t, ".fl.l delete "+sel); + cfd = nil; + break; + } + cfd = nil; + what = "sending kill request"; + } + if(bcmd == "k" && sys->sprint("%r") == "file does not exist") { + refresh(t); + break; + } + dialog->prompt(ctxt, t.image, "error -fg red", "Kill", + "Error "+what+"\n"+ + "System: "+sys->sprint("%r"), + 0, "OK" :: nil); + "r" => + refresh(t); + "f" => + sel := tk->cmd(t, ".fl.l curselection"); + if(sel == "") + break; + pid := int tk->cmd(t, ".fl.l get "+sel); + fi := load Wm "/dis/wm/edit.dis"; + if(fi == nil) + break; + spawn fi->init(ctxt, + "edit" :: + "/prog/"+string pid+"/fd" :: nil); + fi = nil; + } + } +} + +refresh(t: ref Tk->Toplevel) +{ + tk->cmd(t, ".fl.l delete 0 end"); + readprog(t); + tk->cmd(t, ".fl.l see end;update"); +} + +mkprog(file: string): ref Prog +{ + fd := sys->open("/prog/"+file+"/status", sys->OREAD); + if(fd == nil) + return nil; + + buf := array[256] of byte; + n := sys->read(fd, buf, len buf); + if(n <= 0) + return nil; + + (v, l) := sys->tokenize(string buf[0:n], " "); + if(v < 6) + return nil; + + prg := ref Prog; + prg.pid = int hd l; + l = tl l; + prg.pgrp = int hd l; + l = tl l; + l = tl l; + # eat blanks in user name + while(len l > 3) + l = tl l; + prg.state = hd l; + l = tl l; + prg.size = int hd l; + l = tl l; + prg.mod = hd l; + + return prg; +} + +readprog(t: ref Toplevel) +{ + fd := sys->open("/prog", sys->OREAD); + if(fd == nil) + return; + for(;;) { + (n, d) := sys->dirread(fd); + if(n <= 0) + break; + for(i := 0; i < n; i++) { + p := mkprog(d[i].name); + if(p != nil){ + l := sys->sprint("%4d %4d %3dK %-7s %s", p.pid, p.pgrp, p.size, p.state, p.mod); + tk->cmd(t, ".fl.l insert end '"+l); + } + } + } +} + +sysname(): string +{ + fd := sys->open("#c/sysname", sys->OREAD); + if(fd == nil) + return "Anon"; + buf := array[128] of byte; + n := sys->read(fd, buf, len buf); + if(n < 0) + return "Anon"; + return string buf[0:n]; +} diff --git a/appl/xenith/mkfile b/appl/xenith/mkfile index 1fa792ea8..1e3c46a3e 100644 --- a/appl/xenith/mkfile +++ b/appl/xenith/mkfile @@ -97,7 +97,9 @@ all:V: xenith.dis install:V: $ROOT/dis/xenith.dis $ROOT/dis/xenith.dis: xenith.dis - rm -f $target && cp xenith.dis $target + mkdir -p $ROOT/dis + rm -f $target + cp xenith.dis $target xenith.dis: $MODULES $SYS_MODULE diff --git a/dis/2fa.dis b/dis/2fa.dis deleted file mode 100644 index 5542fab53..000000000 Binary files a/dis/2fa.dis and /dev/null differ diff --git a/dis/9660srv.dis b/dis/9660srv.dis deleted file mode 100644 index 75498a9be..000000000 Binary files a/dis/9660srv.dis and /dev/null differ diff --git a/dis/9cpu.dis b/dis/9cpu.dis deleted file mode 100644 index f3859640f..000000000 Binary files a/dis/9cpu.dis and /dev/null differ diff --git a/dis/9export.dis b/dis/9export.dis deleted file mode 100644 index 6cf80fc0a..000000000 Binary files a/dis/9export.dis and /dev/null differ diff --git a/dis/9win.dis b/dis/9win.dis deleted file mode 100644 index f458a0f7f..000000000 Binary files a/dis/9win.dis and /dev/null differ diff --git a/dis/abs.dis b/dis/abs.dis deleted file mode 100644 index 6cde4757a..000000000 Binary files a/dis/abs.dis and /dev/null differ diff --git a/dis/acme.dis b/dis/acme.dis deleted file mode 100644 index 8e1284d4f..000000000 Binary files a/dis/acme.dis and /dev/null differ diff --git a/dis/acme/acme.dis b/dis/acme/acme.dis deleted file mode 100644 index 8e1284d4f..000000000 Binary files a/dis/acme/acme.dis and /dev/null differ diff --git a/dis/acme/buff.dis b/dis/acme/buff.dis deleted file mode 100644 index 32f711d1f..000000000 Binary files a/dis/acme/buff.dis and /dev/null differ diff --git a/dis/acme/col.dis b/dis/acme/col.dis deleted file mode 100644 index ac71567f0..000000000 Binary files a/dis/acme/col.dis and /dev/null differ diff --git a/dis/acme/dat.dis b/dis/acme/dat.dis deleted file mode 100644 index 7c47e6bd9..000000000 Binary files a/dis/acme/dat.dis and /dev/null differ diff --git a/dis/acme/disk.dis b/dis/acme/disk.dis deleted file mode 100644 index 870a419e2..000000000 Binary files a/dis/acme/disk.dis and /dev/null differ diff --git a/dis/acme/ecmd.dis b/dis/acme/ecmd.dis deleted file mode 100644 index 19743885f..000000000 Binary files a/dis/acme/ecmd.dis and /dev/null differ diff --git a/dis/acme/edit.dis b/dis/acme/edit.dis deleted file mode 100644 index 60593695e..000000000 Binary files a/dis/acme/edit.dis and /dev/null differ diff --git a/dis/acme/elog.dis b/dis/acme/elog.dis deleted file mode 100644 index 354279599..000000000 Binary files a/dis/acme/elog.dis and /dev/null differ diff --git a/dis/acme/exec.dis b/dis/acme/exec.dis deleted file mode 100644 index 9fed4e819..000000000 Binary files a/dis/acme/exec.dis and /dev/null differ diff --git a/dis/acme/file.dis b/dis/acme/file.dis deleted file mode 100644 index 65dbfc37c..000000000 Binary files a/dis/acme/file.dis and /dev/null differ diff --git a/dis/acme/frame.dis b/dis/acme/frame.dis deleted file mode 100644 index 635a6b6ac..000000000 Binary files a/dis/acme/frame.dis and /dev/null differ diff --git a/dis/acme/fsys.dis b/dis/acme/fsys.dis deleted file mode 100644 index a366079ce..000000000 Binary files a/dis/acme/fsys.dis and /dev/null differ diff --git a/dis/acme/graph.dis b/dis/acme/graph.dis deleted file mode 100644 index 9ca6dbbc3..000000000 Binary files a/dis/acme/graph.dis and /dev/null differ diff --git a/dis/acme/gui.dis b/dis/acme/gui.dis deleted file mode 100644 index eff36834a..000000000 Binary files a/dis/acme/gui.dis and /dev/null differ diff --git a/dis/acme/look.dis b/dis/acme/look.dis deleted file mode 100644 index 288503a85..000000000 Binary files a/dis/acme/look.dis and /dev/null differ diff --git a/dis/acme/regx.dis b/dis/acme/regx.dis deleted file mode 100644 index f938a1d1a..000000000 Binary files a/dis/acme/regx.dis and /dev/null differ diff --git a/dis/acme/row.dis b/dis/acme/row.dis deleted file mode 100644 index f2bad6397..000000000 Binary files a/dis/acme/row.dis and /dev/null differ diff --git a/dis/acme/scrl.dis b/dis/acme/scrl.dis deleted file mode 100644 index be753a1f2..000000000 Binary files a/dis/acme/scrl.dis and /dev/null differ diff --git a/dis/acme/styxaux.dis b/dis/acme/styxaux.dis deleted file mode 100644 index 7da0817f4..000000000 Binary files a/dis/acme/styxaux.dis and /dev/null differ diff --git a/dis/acme/text.dis b/dis/acme/text.dis deleted file mode 100644 index b5f1f5723..000000000 Binary files a/dis/acme/text.dis and /dev/null differ diff --git a/dis/acme/time.dis b/dis/acme/time.dis deleted file mode 100644 index 5b5189ca6..000000000 Binary files a/dis/acme/time.dis and /dev/null differ diff --git a/dis/acme/util.dis b/dis/acme/util.dis deleted file mode 100644 index 88de9ba44..000000000 Binary files a/dis/acme/util.dis and /dev/null differ diff --git a/dis/acme/wind.dis b/dis/acme/wind.dis deleted file mode 100644 index c17ec36cc..000000000 Binary files a/dis/acme/wind.dis and /dev/null differ diff --git a/dis/acme/xfid.dis b/dis/acme/xfid.dis deleted file mode 100644 index 90d4e3b62..000000000 Binary files a/dis/acme/xfid.dis and /dev/null differ diff --git a/dis/acmeevent.dis b/dis/acmeevent.dis deleted file mode 100644 index ffbeeb32c..000000000 Binary files a/dis/acmeevent.dis and /dev/null differ diff --git a/dis/append.dis b/dis/append.dis deleted file mode 100644 index e23adf392..000000000 Binary files a/dis/append.dis and /dev/null differ diff --git a/dis/ar.dis b/dis/ar.dis deleted file mode 100644 index c7a1b2ae5..000000000 Binary files a/dis/ar.dis and /dev/null differ diff --git a/dis/archfs.dis b/dis/archfs.dis deleted file mode 100644 index 683c07407..000000000 Binary files a/dis/archfs.dis and /dev/null differ diff --git a/dis/array.dis b/dis/array.dis deleted file mode 100644 index 4f0d8121b..000000000 Binary files a/dis/array.dis and /dev/null differ diff --git a/dis/audiotone.dis b/dis/audiotone.dis deleted file mode 100644 index 6aae9d625..000000000 Binary files a/dis/audiotone.dis and /dev/null differ diff --git a/dis/auditfs.dis b/dis/auditfs.dis deleted file mode 100644 index e66e3b78d..000000000 Binary files a/dis/auditfs.dis and /dev/null differ diff --git a/dis/auditget.dis b/dis/auditget.dis deleted file mode 100644 index 7fefda7e3..000000000 Binary files a/dis/auditget.dis and /dev/null differ diff --git a/dis/auditverify.dis b/dis/auditverify.dis deleted file mode 100644 index 486009cde..000000000 Binary files a/dis/auditverify.dis and /dev/null differ diff --git a/dis/auplay.dis b/dis/auplay.dis deleted file mode 100644 index 257e7bd47..000000000 Binary files a/dis/auplay.dis and /dev/null differ diff --git a/dis/auth/aescbc.dis b/dis/auth/aescbc.dis deleted file mode 100644 index f718b170f..000000000 Binary files a/dis/auth/aescbc.dis and /dev/null differ diff --git a/dis/auth/ai2key.dis b/dis/auth/ai2key.dis deleted file mode 100644 index 3dbce80dc..000000000 Binary files a/dis/auth/ai2key.dis and /dev/null differ diff --git a/dis/auth/changelogin.dis b/dis/auth/changelogin.dis deleted file mode 100644 index d1d56a3bc..000000000 Binary files a/dis/auth/changelogin.dis and /dev/null differ diff --git a/dis/auth/convpasswd.dis b/dis/auth/convpasswd.dis deleted file mode 100644 index 2f8f68464..000000000 Binary files a/dis/auth/convpasswd.dis and /dev/null differ diff --git a/dis/auth/countersigner.dis b/dis/auth/countersigner.dis deleted file mode 100644 index 68415a762..000000000 Binary files a/dis/auth/countersigner.dis and /dev/null differ diff --git a/dis/auth/createsignerkey.dis b/dis/auth/createsignerkey.dis deleted file mode 100644 index e677a7c8f..000000000 Binary files a/dis/auth/createsignerkey.dis and /dev/null differ diff --git a/dis/auth/createuser.dis b/dis/auth/createuser.dis deleted file mode 100644 index c2d27aea9..000000000 Binary files a/dis/auth/createuser.dis and /dev/null differ diff --git a/dis/auth/dsagen.dis b/dis/auth/dsagen.dis deleted file mode 100644 index 55098f978..000000000 Binary files a/dis/auth/dsagen.dis and /dev/null differ diff --git a/dis/auth/factotum.dis b/dis/auth/factotum.dis deleted file mode 100644 index 7e1cef895..000000000 Binary files a/dis/auth/factotum.dis and /dev/null differ diff --git a/dis/auth/getpk.dis b/dis/auth/getpk.dis deleted file mode 100644 index 053f00109..000000000 Binary files a/dis/auth/getpk.dis and /dev/null differ diff --git a/dis/auth/keyfs.dis b/dis/auth/keyfs.dis deleted file mode 100644 index 60378c706..000000000 Binary files a/dis/auth/keyfs.dis and /dev/null differ diff --git a/dis/auth/keysrv.dis b/dis/auth/keysrv.dis deleted file mode 100644 index 4a46b700f..000000000 Binary files a/dis/auth/keysrv.dis and /dev/null differ diff --git a/dis/auth/logind.dis b/dis/auth/logind.dis deleted file mode 100644 index 7dd5dd55a..000000000 Binary files a/dis/auth/logind.dis and /dev/null differ diff --git a/dis/auth/mkauthinfo.dis b/dis/auth/mkauthinfo.dis deleted file mode 100644 index 4ebcc5e54..000000000 Binary files a/dis/auth/mkauthinfo.dis and /dev/null differ diff --git a/dis/auth/passwd.dis b/dis/auth/passwd.dis deleted file mode 100644 index 74ddace7a..000000000 Binary files a/dis/auth/passwd.dis and /dev/null differ diff --git a/dis/auth/proto/infauth.dis b/dis/auth/proto/infauth.dis deleted file mode 100644 index 45bef8744..000000000 Binary files a/dis/auth/proto/infauth.dis and /dev/null differ diff --git a/dis/auth/proto/p9any.dis b/dis/auth/proto/p9any.dis deleted file mode 100644 index 860d0c759..000000000 Binary files a/dis/auth/proto/p9any.dis and /dev/null differ diff --git a/dis/auth/proto/pass.dis b/dis/auth/proto/pass.dis deleted file mode 100644 index 73e22eb72..000000000 Binary files a/dis/auth/proto/pass.dis and /dev/null differ diff --git a/dis/auth/proto/sign.dis b/dis/auth/proto/sign.dis deleted file mode 100644 index d1746837b..000000000 Binary files a/dis/auth/proto/sign.dis and /dev/null differ diff --git a/dis/auth/rpc.dis b/dis/auth/rpc.dis deleted file mode 100644 index 1fb51fbbe..000000000 Binary files a/dis/auth/rpc.dis and /dev/null differ diff --git a/dis/auth/rsagen.dis b/dis/auth/rsagen.dis deleted file mode 100644 index 264e6a711..000000000 Binary files a/dis/auth/rsagen.dis and /dev/null differ diff --git a/dis/auth/secstore-setup.dis b/dis/auth/secstore-setup.dis deleted file mode 100644 index 046afef96..000000000 Binary files a/dis/auth/secstore-setup.dis and /dev/null differ diff --git a/dis/auth/secstore.dis b/dis/auth/secstore.dis deleted file mode 100644 index 0ddc76872..000000000 Binary files a/dis/auth/secstore.dis and /dev/null differ diff --git a/dis/auth/secstored.dis b/dis/auth/secstored.dis deleted file mode 100644 index 9675822a1..000000000 Binary files a/dis/auth/secstored.dis and /dev/null differ diff --git a/dis/auth/signer.dis b/dis/auth/signer.dis deleted file mode 100644 index ba61a060e..000000000 Binary files a/dis/auth/signer.dis and /dev/null differ diff --git a/dis/auth/verify.dis b/dis/auth/verify.dis deleted file mode 100644 index 2a86126ba..000000000 Binary files a/dis/auth/verify.dis and /dev/null differ diff --git a/dis/authnode.dis b/dis/authnode.dis deleted file mode 100644 index 8e998ff48..000000000 Binary files a/dis/authnode.dis and /dev/null differ diff --git a/dis/auxi/cpuslave.dis b/dis/auxi/cpuslave.dis deleted file mode 100644 index 2d1e76965..000000000 Binary files a/dis/auxi/cpuslave.dis and /dev/null differ diff --git a/dis/auxi/rdbgsrv.dis b/dis/auxi/rdbgsrv.dis deleted file mode 100644 index 3cc445e2f..000000000 Binary files a/dis/auxi/rdbgsrv.dis and /dev/null differ diff --git a/dis/auxi/rstyxd.dis b/dis/auxi/rstyxd.dis deleted file mode 100644 index 8dc6bedd9..000000000 Binary files a/dis/auxi/rstyxd.dis and /dev/null differ diff --git a/dis/awk.dis b/dis/awk.dis deleted file mode 100644 index bfbb84b3d..000000000 Binary files a/dis/awk.dis and /dev/null differ diff --git a/dis/basename.dis b/dis/basename.dis deleted file mode 100644 index 8910e70b8..000000000 Binary files a/dis/basename.dis and /dev/null differ diff --git a/dis/bdf2subfont.dis b/dis/bdf2subfont.dis deleted file mode 100644 index 2bb3c5a56..000000000 Binary files a/dis/bdf2subfont.dis and /dev/null differ diff --git a/dis/bind.dis b/dis/bind.dis deleted file mode 100644 index dda06f508..000000000 Binary files a/dis/bind.dis and /dev/null differ diff --git a/dis/bioget.dis b/dis/bioget.dis deleted file mode 100644 index 203734954..000000000 Binary files a/dis/bioget.dis and /dev/null differ diff --git a/dis/bit2gif.dis b/dis/bit2gif.dis deleted file mode 100644 index 0109778f6..000000000 Binary files a/dis/bit2gif.dis and /dev/null differ diff --git a/dis/broke.dis b/dis/broke.dis deleted file mode 100644 index e023d15d7..000000000 Binary files a/dis/broke.dis and /dev/null differ diff --git a/dis/bytes.dis b/dis/bytes.dis deleted file mode 100644 index dc6ff10bb..000000000 Binary files a/dis/bytes.dis and /dev/null differ diff --git a/dis/cal.dis b/dis/cal.dis deleted file mode 100644 index 2e49b17e2..000000000 Binary files a/dis/cal.dis and /dev/null differ diff --git a/dis/calc.dis b/dis/calc.dis deleted file mode 100644 index 8a928a2b6..000000000 Binary files a/dis/calc.dis and /dev/null differ diff --git a/dis/calendar9p.dis b/dis/calendar9p.dis deleted file mode 100644 index 1b57b17db..000000000 Binary files a/dis/calendar9p.dis and /dev/null differ diff --git a/dis/cat.dis b/dis/cat.dis deleted file mode 100644 index 799543da3..000000000 Binary files a/dis/cat.dis and /dev/null differ diff --git a/dis/cd.dis b/dis/cd.dis deleted file mode 100644 index f294e825b..000000000 Binary files a/dis/cd.dis and /dev/null differ diff --git a/dis/cddb.dis b/dis/cddb.dis deleted file mode 100644 index 81af8b2a0..000000000 Binary files a/dis/cddb.dis and /dev/null differ diff --git a/dis/chanchan.dis b/dis/chanchan.dis deleted file mode 100644 index c0a25dd80..000000000 Binary files a/dis/chanchan.dis and /dev/null differ diff --git a/dis/channel.dis b/dis/channel.dis deleted file mode 100644 index 7de90b744..000000000 Binary files a/dis/channel.dis and /dev/null differ diff --git a/dis/channel2.dis b/dis/channel2.dis deleted file mode 100644 index 747612fc8..000000000 Binary files a/dis/channel2.dis and /dev/null differ diff --git a/dis/charon.dis b/dis/charon.dis deleted file mode 100644 index 21d1a95d9..000000000 Binary files a/dis/charon.dis and /dev/null differ diff --git a/dis/charon/build.dis b/dis/charon/build.dis deleted file mode 100644 index 8d634c074..000000000 Binary files a/dis/charon/build.dis and /dev/null differ diff --git a/dis/charon/chutils.dis b/dis/charon/chutils.dis deleted file mode 100644 index 154508e6c..000000000 Binary files a/dis/charon/chutils.dis and /dev/null differ diff --git a/dis/charon/cookiesrv.dis b/dis/charon/cookiesrv.dis deleted file mode 100644 index 823c74f46..000000000 Binary files a/dis/charon/cookiesrv.dis and /dev/null differ diff --git a/dis/charon/ctype.dis b/dis/charon/ctype.dis deleted file mode 100644 index 20e2da8f7..000000000 Binary files a/dis/charon/ctype.dis and /dev/null differ diff --git a/dis/charon/date.dis b/dis/charon/date.dis deleted file mode 100644 index ce9f02610..000000000 Binary files a/dis/charon/date.dis and /dev/null differ diff --git a/dis/charon/event.dis b/dis/charon/event.dis deleted file mode 100644 index 89249d4ff..000000000 Binary files a/dis/charon/event.dis and /dev/null differ diff --git a/dis/charon/file.dis b/dis/charon/file.dis deleted file mode 100644 index f8cb9d125..000000000 Binary files a/dis/charon/file.dis and /dev/null differ diff --git a/dis/charon/ftp.dis b/dis/charon/ftp.dis deleted file mode 100644 index 1ff7e0ce2..000000000 Binary files a/dis/charon/ftp.dis and /dev/null differ diff --git a/dis/charon/gui.dis b/dis/charon/gui.dis deleted file mode 100644 index 3fe09630c..000000000 Binary files a/dis/charon/gui.dis and /dev/null differ diff --git a/dis/charon/http.dis b/dis/charon/http.dis deleted file mode 100644 index c46698bb6..000000000 Binary files a/dis/charon/http.dis and /dev/null differ diff --git a/dis/charon/img.dis b/dis/charon/img.dis deleted file mode 100644 index 2ce201f13..000000000 Binary files a/dis/charon/img.dis and /dev/null differ diff --git a/dis/charon/jscript.dis b/dis/charon/jscript.dis deleted file mode 100644 index 72b5f1293..000000000 Binary files a/dis/charon/jscript.dis and /dev/null differ diff --git a/dis/charon/layout.dis b/dis/charon/layout.dis deleted file mode 100644 index f3d927664..000000000 Binary files a/dis/charon/layout.dis and /dev/null differ diff --git a/dis/charon/lex.dis b/dis/charon/lex.dis deleted file mode 100644 index 6042c8bd4..000000000 Binary files a/dis/charon/lex.dis and /dev/null differ diff --git a/dis/charon/url.dis b/dis/charon/url.dis deleted file mode 100644 index ccfd193f7..000000000 Binary files a/dis/charon/url.dis and /dev/null differ diff --git a/dis/chatsrv.dis b/dis/chatsrv.dis deleted file mode 100644 index 9feea9bbf..000000000 Binary files a/dis/chatsrv.dis and /dev/null differ diff --git a/dis/chgrp.dis b/dis/chgrp.dis deleted file mode 100644 index 366a4744d..000000000 Binary files a/dis/chgrp.dis and /dev/null differ diff --git a/dis/chmod.dis b/dis/chmod.dis deleted file mode 100644 index 1c192bf69..000000000 Binary files a/dis/chmod.dis and /dev/null differ diff --git a/dis/cleanname.dis b/dis/cleanname.dis deleted file mode 100644 index 529f02305..000000000 Binary files a/dis/cleanname.dis and /dev/null differ diff --git a/dis/closure.dis b/dis/closure.dis deleted file mode 100644 index 1952120ea..000000000 Binary files a/dis/closure.dis and /dev/null differ diff --git a/dis/cmd/9export.dis b/dis/cmd/9export.dis deleted file mode 100644 index 6cf80fc0a..000000000 Binary files a/dis/cmd/9export.dis and /dev/null differ diff --git a/dis/cmd/auth/passwd.dis b/dis/cmd/auth/passwd.dis deleted file mode 100644 index 74ddace7a..000000000 Binary files a/dis/cmd/auth/passwd.dis and /dev/null differ diff --git a/dis/cmd/bdf2subfont.dis b/dis/cmd/bdf2subfont.dis deleted file mode 100644 index d4fa0179e..000000000 Binary files a/dis/cmd/bdf2subfont.dis and /dev/null differ diff --git a/dis/cmd/gateprobe.dis b/dis/cmd/gateprobe.dis deleted file mode 100644 index 2e37c55be..000000000 Binary files a/dis/cmd/gateprobe.dis and /dev/null differ diff --git a/dis/cmd/git/add.dis b/dis/cmd/git/add.dis deleted file mode 100644 index 6ee13aec7..000000000 Binary files a/dis/cmd/git/add.dis and /dev/null differ diff --git a/dis/cmd/git/branch.dis b/dis/cmd/git/branch.dis deleted file mode 100644 index 91bf9c7f4..000000000 Binary files a/dis/cmd/git/branch.dis and /dev/null differ diff --git a/dis/cmd/git/checkout.dis b/dis/cmd/git/checkout.dis deleted file mode 100644 index 77376acd6..000000000 Binary files a/dis/cmd/git/checkout.dis and /dev/null differ diff --git a/dis/cmd/git/clone.dis b/dis/cmd/git/clone.dis deleted file mode 100644 index f3c5970f4..000000000 Binary files a/dis/cmd/git/clone.dis and /dev/null differ diff --git a/dis/cmd/git/commit.dis b/dis/cmd/git/commit.dis deleted file mode 100644 index a6287828a..000000000 Binary files a/dis/cmd/git/commit.dis and /dev/null differ diff --git a/dis/cmd/git/diff.sh b/dis/cmd/git/diff.sh deleted file mode 100644 index 4a656bbcf..000000000 --- a/dis/cmd/git/diff.sh +++ /dev/null @@ -1,73 +0,0 @@ -#!/dis/sh.dis -# -# git/diff — show file differences via git/fs -# -# Usage: git/diff [dir] -# -# Runs system diff for each modified tracked file. -# - -load std -load expr - -fn findgit { - d=$1 - lim=20 - while {! ftest -d $d/.git} { - d=$d/.. - lim=${expr $lim 1 -} - if {~ $lim 0} { - echo 'not a git repository' >[1=2] - raise 'fail:not a git repository' - } - } - result=$d/.git -} - -fn ensure_fs { - gdir=$1 - mtpt=$gdir/fs - if {! ftest -d $mtpt/HEAD} { - cmd/git/fs $gdir - } - result=$mtpt -} - -fn treediff { - fsdir=$1 - prefix=$2 - workdir=$3 - for f in `{ls $fsdir} { - base=`{basename $f} - rpath=$prefix^$base - if {ftest -d $f} { - treediff $f $rpath/ $workdir - } { - if {ftest -e $workdir/$rpath} { - if {! cmp -s $f $workdir/$rpath} { - echo '---' a/$rpath - echo '+++' b/$rpath - diff $f $workdir/$rpath - } - } { - echo 'deleted:' $rpath - } - } - } -} - -dir=. -if {! ~ $#* 0} { - dir=$1 -} - -findgit $dir -gitdir=$result - -ensure_fs $gitdir -mtpt=$result - -if {ftest -d $mtpt/HEAD/tree} { - treediff $mtpt/HEAD/tree '' $dir -} -~ 1 1 diff --git a/dis/cmd/git/fetch.dis b/dis/cmd/git/fetch.dis deleted file mode 100644 index 4cf151541..000000000 Binary files a/dis/cmd/git/fetch.dis and /dev/null differ diff --git a/dis/cmd/git/fs.dis b/dis/cmd/git/fs.dis deleted file mode 100644 index a6a75bc8e..000000000 Binary files a/dis/cmd/git/fs.dis and /dev/null differ diff --git a/dis/cmd/git/init.dis b/dis/cmd/git/init.dis deleted file mode 100644 index 6d3e5d9d0..000000000 Binary files a/dis/cmd/git/init.dis and /dev/null differ diff --git a/dis/cmd/git/log.sh b/dis/cmd/git/log.sh deleted file mode 100644 index 58eaa014f..000000000 --- a/dis/cmd/git/log.sh +++ /dev/null @@ -1,87 +0,0 @@ -#!/dis/sh.dis -# -# git/log — display commit history via git/fs -# -# Usage: git/log [-n count] [dir] -# - -load std -load expr - -fn findgit { - d=$1 - lim=20 - while {! ftest -d $d/.git} { - d=$d/.. - lim=${expr $lim 1 -} - if {~ $lim 0} { - echo 'not a git repository' >[1=2] - raise 'fail:not a git repository' - } - } - result=$d/.git -} - -fn ensure_fs { - gdir=$1 - mtpt=$gdir/fs - if {! ftest -d $mtpt/HEAD} { - cmd/git/fs $gdir - } - result=$mtpt -} - -dir=. -limit=0 -args=$* - -# Parse arguments -while {! ~ $#args 0} { - a=${hd $args} - args=${tl $args} - if {~ $a -n} { - if {~ $#args 0} { - echo 'git/log: -n requires argument' >[1=2] - raise 'fail:usage' - } - limit=${hd $args} - args=${tl $args} - } { - dir=$a - } -} - -findgit $dir -gitdir=$result - -ensure_fs $gitdir -mtpt=$result - -hash=`{cat $mtpt/HEAD/hash} -count=0 - -while {! ~ $#hash 0} { - if {! ~ $limit 0} { - if {~ $count $limit} { - exit - } - } - - if {! ftest -d $mtpt/object/$hash} { - exit - } - - echo 'commit' $hash - echo 'Author:' `{cat $mtpt/object/$hash/author} - echo '' - cat $mtpt/object/$hash/msg | sed 's/^/ /' - echo '' - - # Follow first parent - if {ftest -f $mtpt/object/$hash/parent} { - hash=`{sed 1q $mtpt/object/$hash/parent} - } { - hash=() - } - count=${expr $count 1 +} -} diff --git a/dis/cmd/git/merge.dis b/dis/cmd/git/merge.dis deleted file mode 100644 index 3a8b92184..000000000 Binary files a/dis/cmd/git/merge.dis and /dev/null differ diff --git a/dis/cmd/git/pull.dis b/dis/cmd/git/pull.dis deleted file mode 100644 index a69e4f6cf..000000000 Binary files a/dis/cmd/git/pull.dis and /dev/null differ diff --git a/dis/cmd/git/push.dis b/dis/cmd/git/push.dis deleted file mode 100644 index 2fa125dc0..000000000 Binary files a/dis/cmd/git/push.dis and /dev/null differ diff --git a/dis/cmd/git/rm.dis b/dis/cmd/git/rm.dis deleted file mode 100644 index 7c1da1594..000000000 Binary files a/dis/cmd/git/rm.dis and /dev/null differ diff --git a/dis/cmd/git/status.sh b/dis/cmd/git/status.sh deleted file mode 100644 index 3185d7dd8..000000000 --- a/dis/cmd/git/status.sh +++ /dev/null @@ -1,93 +0,0 @@ -#!/dis/sh.dis -# -# git/status — show working tree status via git/fs -# -# Usage: git/status [dir] -# -# Compares files served by git/fs HEAD/tree/ with working directory. -# - -load std -load expr - -fn findgit { - d=$1 - lim=20 - while {! ftest -d $d/.git} { - d=$d/.. - lim=${expr $lim 1 -} - if {~ $lim 0} { - echo 'not a git repository' >[1=2] - raise 'fail:not a git repository' - } - } - result=$d/.git -} - -fn ensure_fs { - gdir=$1 - mtpt=$gdir/fs - if {! ftest -d $mtpt/HEAD} { - cmd/git/fs $gdir - } - result=$mtpt -} - -# Walk git/fs tree, compare each blob with working copy -fn treestatus { - fsdir=$1 - prefix=$2 - workdir=$3 - for f in `{ls $fsdir} { - base=`{basename $f} - rpath=$prefix^$base - if {ftest -d $f} { - treestatus $f $rpath/ $workdir - } { - if {! ftest -e $workdir/$rpath} { - echo ' D' $rpath - } { - if {! cmp -s $f $workdir/$rpath} { - echo ' M' $rpath - } - } - } - } -} - -# Walk working dir, check for untracked files -fn finduntracked { - wdir=$1 - prefix=$2 - treedir=$3 - for f in `{ls $wdir} { - base=`{basename $f} - if {! ~ $base .git} { - rpath=$prefix^$base - if {ftest -d $wdir/$base} { - finduntracked $wdir/$base $rpath/ $treedir - } { - if {! ftest -e $treedir/$rpath} { - echo '??' $rpath - } - } - } - } -} - -dir=. -if {! ~ $#* 0} { - dir=$1 -} - -findgit $dir -gitdir=$result - -ensure_fs $gitdir -mtpt=$result - -if {ftest -d $mtpt/HEAD/tree} { - treestatus $mtpt/HEAD/tree '' $dir - finduntracked $dir '' $mtpt/HEAD/tree -} -~ 1 1 diff --git a/dis/cmd/import.dis b/dis/cmd/import.dis deleted file mode 100644 index 91c4cc57c..000000000 Binary files a/dis/cmd/import.dis and /dev/null differ diff --git a/dis/cmd/mermaid_test.dis b/dis/cmd/mermaid_test.dis deleted file mode 100644 index 52ea669ae..000000000 Binary files a/dis/cmd/mermaid_test.dis and /dev/null differ diff --git a/dis/cmd/mount.dis b/dis/cmd/mount.dis deleted file mode 100644 index a8d40311c..000000000 Binary files a/dis/cmd/mount.dis and /dev/null differ diff --git a/dis/cmp.dis b/dis/cmp.dis deleted file mode 100644 index 251ffe546..000000000 Binary files a/dis/cmp.dis and /dev/null differ diff --git a/dis/comm.dis b/dis/comm.dis deleted file mode 100644 index 76e9fc8df..000000000 Binary files a/dis/comm.dis and /dev/null differ diff --git a/dis/comprehensive.dis b/dis/comprehensive.dis deleted file mode 100644 index ec48f7dd9..000000000 Binary files a/dis/comprehensive.dis and /dev/null differ diff --git a/dis/copy_cap.dis b/dis/copy_cap.dis deleted file mode 100644 index 92926d11f..000000000 Binary files a/dis/copy_cap.dis and /dev/null differ diff --git a/dis/countfs.dis b/dis/countfs.dis deleted file mode 100644 index 0f2ec45f1..000000000 Binary files a/dis/countfs.dis and /dev/null differ diff --git a/dis/cp.dis b/dis/cp.dis deleted file mode 100644 index 7ca6113de..000000000 Binary files a/dis/cp.dis and /dev/null differ diff --git a/dis/cprof.dis b/dis/cprof.dis deleted file mode 100644 index f9942696e..000000000 Binary files a/dis/cprof.dis and /dev/null differ diff --git a/dis/cpu.dis b/dis/cpu.dis deleted file mode 100644 index ec5b53c8c..000000000 Binary files a/dis/cpu.dis and /dev/null differ diff --git a/dis/crypt.dis b/dis/crypt.dis deleted file mode 100644 index 602eebb01..000000000 Binary files a/dis/crypt.dis and /dev/null differ diff --git a/dis/cut.dis b/dis/cut.dis deleted file mode 100644 index ece3caf91..000000000 Binary files a/dis/cut.dis and /dev/null differ diff --git a/dis/date.dis b/dis/date.dis deleted file mode 100644 index 0ed3ba9c5..000000000 Binary files a/dis/date.dis and /dev/null differ diff --git a/dis/dbfs.dis b/dis/dbfs.dis deleted file mode 100644 index e3cb7de43..000000000 Binary files a/dis/dbfs.dis and /dev/null differ diff --git a/dis/dbm/delete.dis b/dis/dbm/delete.dis deleted file mode 100644 index db3e1b401..000000000 Binary files a/dis/dbm/delete.dis and /dev/null differ diff --git a/dis/dbm/fetch.dis b/dis/dbm/fetch.dis deleted file mode 100644 index aef91d441..000000000 Binary files a/dis/dbm/fetch.dis and /dev/null differ diff --git a/dis/dbm/keys.dis b/dis/dbm/keys.dis deleted file mode 100644 index 3ac61198b..000000000 Binary files a/dis/dbm/keys.dis and /dev/null differ diff --git a/dis/dbm/list.dis b/dis/dbm/list.dis deleted file mode 100644 index 1e7aab774..000000000 Binary files a/dis/dbm/list.dis and /dev/null differ diff --git a/dis/dbm/store.dis b/dis/dbm/store.dis deleted file mode 100644 index 6109eef72..000000000 Binary files a/dis/dbm/store.dis and /dev/null differ diff --git a/dis/dcr.dis b/dis/dcr.dis deleted file mode 100644 index 872bd3468..000000000 Binary files a/dis/dcr.dis and /dev/null differ diff --git a/dis/dd.dis b/dis/dd.dis deleted file mode 100644 index 21f1442b6..000000000 Binary files a/dis/dd.dis and /dev/null differ diff --git a/dis/defer.dis b/dis/defer.dis deleted file mode 100644 index 22ccb58ed..000000000 Binary files a/dis/defer.dis and /dev/null differ diff --git a/dis/dial.dis b/dis/dial.dis deleted file mode 100644 index 39f456a7a..000000000 Binary files a/dis/dial.dis and /dev/null differ diff --git a/dis/dict.dis b/dis/dict.dis deleted file mode 100644 index a300a849b..000000000 Binary files a/dis/dict.dis and /dev/null differ diff --git a/dis/dict/adict.dis b/dis/dict/adict.dis deleted file mode 100644 index 2c317f6b6..000000000 Binary files a/dis/dict/adict.dis and /dev/null differ diff --git a/dis/dict/mkindex.dis b/dis/dict/mkindex.dis deleted file mode 100644 index f53fe3f2f..000000000 Binary files a/dis/dict/mkindex.dis and /dev/null differ diff --git a/dis/dict/oeis.dis b/dis/dict/oeis.dis deleted file mode 100644 index 7e7efa08c..000000000 Binary files a/dis/dict/oeis.dis and /dev/null differ diff --git a/dis/dict/pg.dis b/dis/dict/pg.dis deleted file mode 100644 index 34b896902..000000000 Binary files a/dis/dict/pg.dis and /dev/null differ diff --git a/dis/dict/pgw.dis b/dis/dict/pgw.dis deleted file mode 100644 index b3b1ba81c..000000000 Binary files a/dis/dict/pgw.dis and /dev/null differ diff --git a/dis/dict/roget.dis b/dis/dict/roget.dis deleted file mode 100644 index 4c4955b9b..000000000 Binary files a/dis/dict/roget.dis and /dev/null differ diff --git a/dis/dict/simple.dis b/dis/dict/simple.dis deleted file mode 100644 index 8871e92a4..000000000 Binary files a/dis/dict/simple.dis and /dev/null differ diff --git a/dis/dict/utils.dis b/dis/dict/utils.dis deleted file mode 100644 index b759ac003..000000000 Binary files a/dis/dict/utils.dis and /dev/null differ diff --git a/dis/dict/wikipedia.dis b/dis/dict/wikipedia.dis deleted file mode 100644 index d0acd072d..000000000 Binary files a/dis/dict/wikipedia.dis and /dev/null differ diff --git a/dis/diff.dis b/dis/diff.dis deleted file mode 100644 index 696ca8b9b..000000000 Binary files a/dis/diff.dis and /dev/null differ diff --git a/dis/disdep.dis b/dis/disdep.dis deleted file mode 100644 index 879b7a046..000000000 Binary files a/dis/disdep.dis and /dev/null differ diff --git a/dis/disdump.dis b/dis/disdump.dis deleted file mode 100644 index 82316d126..000000000 Binary files a/dis/disdump.dis and /dev/null differ diff --git a/dis/disk/calc.tab.dis b/dis/disk/calc.tab.dis deleted file mode 100644 index c0c2bfd34..000000000 Binary files a/dis/disk/calc.tab.dis and /dev/null differ diff --git a/dis/disk/fdisk.dis b/dis/disk/fdisk.dis deleted file mode 100644 index 1e01106bf..000000000 Binary files a/dis/disk/fdisk.dis and /dev/null differ diff --git a/dis/disk/format.dis b/dis/disk/format.dis deleted file mode 100644 index 2f66f9afd..000000000 Binary files a/dis/disk/format.dis and /dev/null differ diff --git a/dis/disk/ftl.dis b/dis/disk/ftl.dis deleted file mode 100644 index 43cf826b6..000000000 Binary files a/dis/disk/ftl.dis and /dev/null differ diff --git a/dis/disk/kfs.dis b/dis/disk/kfs.dis deleted file mode 100644 index 36f5b6394..000000000 Binary files a/dis/disk/kfs.dis and /dev/null differ diff --git a/dis/disk/kfscmd.dis b/dis/disk/kfscmd.dis deleted file mode 100644 index eed7710de..000000000 Binary files a/dis/disk/kfscmd.dis and /dev/null differ diff --git a/dis/disk/mbr.dis b/dis/disk/mbr.dis deleted file mode 100644 index a75cd27d5..000000000 Binary files a/dis/disk/mbr.dis and /dev/null differ diff --git a/dis/disk/mkext.dis b/dis/disk/mkext.dis deleted file mode 100644 index 2de2a52dd..000000000 Binary files a/dis/disk/mkext.dis and /dev/null differ diff --git a/dis/disk/mkfs.dis b/dis/disk/mkfs.dis deleted file mode 100644 index a572d4a34..000000000 Binary files a/dis/disk/mkfs.dis and /dev/null differ diff --git a/dis/disk/pedit.dis b/dis/disk/pedit.dis deleted file mode 100644 index 0aa03a23f..000000000 Binary files a/dis/disk/pedit.dis and /dev/null differ diff --git a/dis/disk/prep.dis b/dis/disk/prep.dis deleted file mode 100644 index 0f42062c8..000000000 Binary files a/dis/disk/prep.dis and /dev/null differ diff --git a/dis/du.dis b/dis/du.dis deleted file mode 100644 index 541f6a135..000000000 Binary files a/dis/du.dis and /dev/null differ diff --git a/dis/dynarray.dis b/dis/dynarray.dis deleted file mode 100644 index 068adbcd5..000000000 Binary files a/dis/dynarray.dis and /dev/null differ diff --git a/dis/echo.dis b/dis/echo.dis deleted file mode 100644 index 1a60a19d3..000000000 Binary files a/dis/echo.dis and /dev/null differ diff --git a/dis/ed.dis b/dis/ed.dis deleted file mode 100644 index 004184336..000000000 Binary files a/dis/ed.dis and /dev/null differ diff --git a/dis/edit.dis b/dis/edit.dis deleted file mode 100644 index fb733a6e8..000000000 Binary files a/dis/edit.dis and /dev/null differ diff --git a/dis/elgamal_profile_test.dis b/dis/elgamal_profile_test.dis deleted file mode 100644 index 6d919d9d9..000000000 Binary files a/dis/elgamal_profile_test.dis and /dev/null differ diff --git a/dis/emuinit.dis b/dis/emuinit.dis deleted file mode 100644 index 00388786e..000000000 Binary files a/dis/emuinit.dis and /dev/null differ diff --git a/dis/env.dis b/dis/env.dis deleted file mode 100644 index abe0a6923..000000000 Binary files a/dis/env.dis and /dev/null differ diff --git a/dis/esort.dis b/dis/esort.dis deleted file mode 100644 index a0ff7faea..000000000 Binary files a/dis/esort.dis and /dev/null differ diff --git a/dis/export.dis b/dis/export.dis deleted file mode 100644 index 71be87d58..000000000 Binary files a/dis/export.dis and /dev/null differ diff --git a/dis/fc.dis b/dis/fc.dis deleted file mode 100644 index 977b976b8..000000000 Binary files a/dis/fc.dis and /dev/null differ diff --git a/dis/fcp.dis b/dis/fcp.dis deleted file mode 100644 index 68bb2d6cc..000000000 Binary files a/dis/fcp.dis and /dev/null differ diff --git a/dis/fmt.dis b/dis/fmt.dis deleted file mode 100644 index 9efa6833e..000000000 Binary files a/dis/fmt.dis and /dev/null differ diff --git a/dis/fmtsprintf.dis b/dis/fmtsprintf.dis deleted file mode 100644 index 7be0fa2d9..000000000 Binary files a/dis/fmtsprintf.dis and /dev/null differ diff --git a/dis/fortune.dis b/dis/fortune.dis deleted file mode 100644 index 5bce29fc4..000000000 Binary files a/dis/fortune.dis and /dev/null differ diff --git a/dis/freq.dis b/dis/freq.dis deleted file mode 100644 index 01e5a15b9..000000000 Binary files a/dis/freq.dis and /dev/null differ diff --git a/dis/fs.dis b/dis/fs.dis deleted file mode 100644 index 20466db78..000000000 Binary files a/dis/fs.dis and /dev/null differ diff --git a/dis/fs/and.dis b/dis/fs/and.dis deleted file mode 100644 index 84449dd38..000000000 Binary files a/dis/fs/and.dis and /dev/null differ diff --git a/dis/fs/bundle.dis b/dis/fs/bundle.dis deleted file mode 100644 index 7e5a0d6c3..000000000 Binary files a/dis/fs/bundle.dis and /dev/null differ diff --git a/dis/fs/chstat.dis b/dis/fs/chstat.dis deleted file mode 100644 index 0a607e6f7..000000000 Binary files a/dis/fs/chstat.dis and /dev/null differ diff --git a/dis/fs/compose.dis b/dis/fs/compose.dis deleted file mode 100644 index e897d413c..000000000 Binary files a/dis/fs/compose.dis and /dev/null differ diff --git a/dis/fs/depth.dis b/dis/fs/depth.dis deleted file mode 100644 index c823259bc..000000000 Binary files a/dis/fs/depth.dis and /dev/null differ diff --git a/dis/fs/entries.dis b/dis/fs/entries.dis deleted file mode 100644 index c8d4ff89a..000000000 Binary files a/dis/fs/entries.dis and /dev/null differ diff --git a/dis/fs/eval.dis b/dis/fs/eval.dis deleted file mode 100644 index 091a1ccda..000000000 Binary files a/dis/fs/eval.dis and /dev/null differ diff --git a/dis/fs/exec.dis b/dis/fs/exec.dis deleted file mode 100644 index 3d1680b48..000000000 Binary files a/dis/fs/exec.dis and /dev/null differ diff --git a/dis/fs/filter.dis b/dis/fs/filter.dis deleted file mode 100644 index 00b20ffa3..000000000 Binary files a/dis/fs/filter.dis and /dev/null differ diff --git a/dis/fs/ls.dis b/dis/fs/ls.dis deleted file mode 100644 index 67bd403f0..000000000 Binary files a/dis/fs/ls.dis and /dev/null differ diff --git a/dis/fs/match.dis b/dis/fs/match.dis deleted file mode 100644 index 937a94382..000000000 Binary files a/dis/fs/match.dis and /dev/null differ diff --git a/dis/fs/merge.dis b/dis/fs/merge.dis deleted file mode 100644 index ce39f56e0..000000000 Binary files a/dis/fs/merge.dis and /dev/null differ diff --git a/dis/fs/mergewrite.dis b/dis/fs/mergewrite.dis deleted file mode 100644 index 416e7d745..000000000 Binary files a/dis/fs/mergewrite.dis and /dev/null differ diff --git a/dis/fs/mode.dis b/dis/fs/mode.dis deleted file mode 100644 index 93ac369f0..000000000 Binary files a/dis/fs/mode.dis and /dev/null differ diff --git a/dis/fs/not.dis b/dis/fs/not.dis deleted file mode 100644 index 31f97a02b..000000000 Binary files a/dis/fs/not.dis and /dev/null differ diff --git a/dis/fs/or.dis b/dis/fs/or.dis deleted file mode 100644 index eb11ef26e..000000000 Binary files a/dis/fs/or.dis and /dev/null differ diff --git a/dis/fs/path.dis b/dis/fs/path.dis deleted file mode 100644 index 499d5b677..000000000 Binary files a/dis/fs/path.dis and /dev/null differ diff --git a/dis/fs/pipe.dis b/dis/fs/pipe.dis deleted file mode 100644 index 584ec7756..000000000 Binary files a/dis/fs/pipe.dis and /dev/null differ diff --git a/dis/fs/print.dis b/dis/fs/print.dis deleted file mode 100644 index 268a79904..000000000 Binary files a/dis/fs/print.dis and /dev/null differ diff --git a/dis/fs/proto.dis b/dis/fs/proto.dis deleted file mode 100644 index ab7cef5e8..000000000 Binary files a/dis/fs/proto.dis and /dev/null differ diff --git a/dis/fs/query.dis b/dis/fs/query.dis deleted file mode 100644 index 4bd3202e9..000000000 Binary files a/dis/fs/query.dis and /dev/null differ diff --git a/dis/fs/run.dis b/dis/fs/run.dis deleted file mode 100644 index 631031606..000000000 Binary files a/dis/fs/run.dis and /dev/null differ diff --git a/dis/fs/select.dis b/dis/fs/select.dis deleted file mode 100644 index 51cd4e282..000000000 Binary files a/dis/fs/select.dis and /dev/null differ diff --git a/dis/fs/setroot.dis b/dis/fs/setroot.dis deleted file mode 100644 index 5baa7eac0..000000000 Binary files a/dis/fs/setroot.dis and /dev/null differ diff --git a/dis/fs/size.dis b/dis/fs/size.dis deleted file mode 100644 index 46fa485a2..000000000 Binary files a/dis/fs/size.dis and /dev/null differ diff --git a/dis/fs/unbundle.dis b/dis/fs/unbundle.dis deleted file mode 100644 index abeefe758..000000000 Binary files a/dis/fs/unbundle.dis and /dev/null differ diff --git a/dis/fs/void.dis b/dis/fs/void.dis deleted file mode 100644 index 016e2ebb3..000000000 Binary files a/dis/fs/void.dis and /dev/null differ diff --git a/dis/fs/walk.dis b/dis/fs/walk.dis deleted file mode 100644 index 283451cb5..000000000 Binary files a/dis/fs/walk.dis and /dev/null differ diff --git a/dis/fs/write.dis b/dis/fs/write.dis deleted file mode 100644 index b5b19716a..000000000 Binary files a/dis/fs/write.dis and /dev/null differ diff --git a/dis/ftest.dis b/dis/ftest.dis deleted file mode 100644 index b10576055..000000000 Binary files a/dis/ftest.dis and /dev/null differ diff --git a/dis/ftpfs.dis b/dis/ftpfs.dis deleted file mode 100644 index ea2581fec..000000000 Binary files a/dis/ftpfs.dis and /dev/null differ diff --git a/dis/ftrans.dis b/dis/ftrans.dis deleted file mode 100644 index 8659f2a33..000000000 Binary files a/dis/ftrans.dis and /dev/null differ diff --git a/dis/funcall.dis b/dis/funcall.dis deleted file mode 100644 index 315d84365..000000000 Binary files a/dis/funcall.dis and /dev/null differ diff --git a/dis/gcd.dis b/dis/gcd.dis deleted file mode 100644 index 5801bd4a7..000000000 Binary files a/dis/gcd.dis and /dev/null differ diff --git a/dis/getauthinfo.dis b/dis/getauthinfo.dis deleted file mode 100644 index 3fe15acbc..000000000 Binary files a/dis/getauthinfo.dis and /dev/null differ diff --git a/dis/getkey.dis b/dis/getkey.dis deleted file mode 100644 index 4664261d1..000000000 Binary files a/dis/getkey.dis and /dev/null differ diff --git a/dis/getline.dis b/dis/getline.dis deleted file mode 100644 index ae580df7d..000000000 Binary files a/dis/getline.dis and /dev/null differ diff --git a/dis/gettar.dis b/dis/gettar.dis deleted file mode 100644 index 51e75f03f..000000000 Binary files a/dis/gettar.dis and /dev/null differ diff --git a/dis/gif2bit.dis b/dis/gif2bit.dis deleted file mode 100644 index acc1b30c0..000000000 Binary files a/dis/gif2bit.dis and /dev/null differ diff --git a/dis/global.dis b/dis/global.dis deleted file mode 100644 index bab5bf6b4..000000000 Binary files a/dis/global.dis and /dev/null differ diff --git a/dis/goroutine.dis b/dis/goroutine.dis deleted file mode 100644 index 9ab3a64fe..000000000 Binary files a/dis/goroutine.dis and /dev/null differ diff --git a/dis/gpusrv.dis b/dis/gpusrv.dis deleted file mode 100644 index 9fb6e59f3..000000000 Binary files a/dis/gpusrv.dis and /dev/null differ diff --git a/dis/greet.dis b/dis/greet.dis deleted file mode 100644 index 9e5fe9743..000000000 Binary files a/dis/greet.dis and /dev/null differ diff --git a/dis/grep.dis b/dis/grep.dis deleted file mode 100644 index 9eb122cf0..000000000 Binary files a/dis/grep.dis and /dev/null differ diff --git a/dis/grid/lib/announce.dis b/dis/grid/lib/announce.dis deleted file mode 100644 index 8793e02fb..000000000 Binary files a/dis/grid/lib/announce.dis and /dev/null differ diff --git a/dis/grid/register.dis b/dis/grid/register.dis deleted file mode 100644 index c208728d7..000000000 Binary files a/dis/grid/register.dis and /dev/null differ diff --git a/dis/grid/reglisten.dis b/dis/grid/reglisten.dis deleted file mode 100644 index af87f2f5e..000000000 Binary files a/dis/grid/reglisten.dis and /dev/null differ diff --git a/dis/grid/regstyxlisten.dis b/dis/grid/regstyxlisten.dis deleted file mode 100644 index b75e835b1..000000000 Binary files a/dis/grid/regstyxlisten.dis and /dev/null differ diff --git a/dis/gunzip.dis b/dis/gunzip.dis deleted file mode 100644 index c9f29ac19..000000000 Binary files a/dis/gunzip.dis and /dev/null differ diff --git a/dis/gzip.dis b/dis/gzip.dis deleted file mode 100644 index c55dea59e..000000000 Binary files a/dis/gzip.dis and /dev/null differ diff --git a/dis/heap.dis b/dis/heap.dis deleted file mode 100644 index 987693d62..000000000 Binary files a/dis/heap.dis and /dev/null differ diff --git a/dis/hello.dis b/dis/hello.dis deleted file mode 100644 index fe7fe9e14..000000000 Binary files a/dis/hello.dis and /dev/null differ diff --git a/dis/history.dis b/dis/history.dis deleted file mode 100644 index 0c1bdb75d..000000000 Binary files a/dis/history.dis and /dev/null differ diff --git a/dis/idea.dis b/dis/idea.dis deleted file mode 100644 index 8acc83c65..000000000 Binary files a/dis/idea.dis and /dev/null differ diff --git a/dis/iface.dis b/dis/iface.dis deleted file mode 100644 index be78f4dae..000000000 Binary files a/dis/iface.dis and /dev/null differ diff --git a/dis/ifelse.dis b/dis/ifelse.dis deleted file mode 100644 index 67d6bcb81..000000000 Binary files a/dis/ifelse.dis and /dev/null differ diff --git a/dis/import.dis b/dis/import.dis deleted file mode 100644 index 91c4cc57c..000000000 Binary files a/dis/import.dis and /dev/null differ diff --git a/dis/install/applylog.dis b/dis/install/applylog.dis deleted file mode 100644 index e5b115678..000000000 Binary files a/dis/install/applylog.dis and /dev/null differ diff --git a/dis/install/arch.dis b/dis/install/arch.dis deleted file mode 100644 index 6a684bee9..000000000 Binary files a/dis/install/arch.dis and /dev/null differ diff --git a/dis/install/archfs.dis b/dis/install/archfs.dis deleted file mode 100644 index 0c92290d2..000000000 Binary files a/dis/install/archfs.dis and /dev/null differ diff --git a/dis/install/ckproto.dis b/dis/install/ckproto.dis deleted file mode 100644 index 16f9046cc..000000000 Binary files a/dis/install/ckproto.dis and /dev/null differ diff --git a/dis/install/create.dis b/dis/install/create.dis deleted file mode 100644 index 760ef239f..000000000 Binary files a/dis/install/create.dis and /dev/null differ diff --git a/dis/install/eproto.dis b/dis/install/eproto.dis deleted file mode 100644 index 81cf3811c..000000000 Binary files a/dis/install/eproto.dis and /dev/null differ diff --git a/dis/install/info.dis b/dis/install/info.dis deleted file mode 100644 index 81b19cb9e..000000000 Binary files a/dis/install/info.dis and /dev/null differ diff --git a/dis/install/inst.dis b/dis/install/inst.dis deleted file mode 100644 index 48a022d8f..000000000 Binary files a/dis/install/inst.dis and /dev/null differ diff --git a/dis/install/install.dis b/dis/install/install.dis deleted file mode 100644 index 941e2764b..000000000 Binary files a/dis/install/install.dis and /dev/null differ diff --git a/dis/install/log.dis b/dis/install/log.dis deleted file mode 100644 index 5284bb11d..000000000 Binary files a/dis/install/log.dis and /dev/null differ diff --git a/dis/install/logs.dis b/dis/install/logs.dis deleted file mode 100644 index 56808c477..000000000 Binary files a/dis/install/logs.dis and /dev/null differ diff --git a/dis/install/mergelog.dis b/dis/install/mergelog.dis deleted file mode 100644 index 54991c091..000000000 Binary files a/dis/install/mergelog.dis and /dev/null differ diff --git a/dis/install/mkproto.dis b/dis/install/mkproto.dis deleted file mode 100644 index eb0d455d8..000000000 Binary files a/dis/install/mkproto.dis and /dev/null differ diff --git a/dis/install/proto.dis b/dis/install/proto.dis deleted file mode 100644 index cbc5f36a7..000000000 Binary files a/dis/install/proto.dis and /dev/null differ diff --git a/dis/install/proto2list.dis b/dis/install/proto2list.dis deleted file mode 100644 index 324ad6883..000000000 Binary files a/dis/install/proto2list.dis and /dev/null differ diff --git a/dis/install/updatelog.dis b/dis/install/updatelog.dis deleted file mode 100644 index 0e35933bd..000000000 Binary files a/dis/install/updatelog.dis and /dev/null differ diff --git a/dis/install/wdiff.dis b/dis/install/wdiff.dis deleted file mode 100644 index d6a16917b..000000000 Binary files a/dis/install/wdiff.dis and /dev/null differ diff --git a/dis/install/wfind.dis b/dis/install/wfind.dis deleted file mode 100644 index 41de4317b..000000000 Binary files a/dis/install/wfind.dis and /dev/null differ diff --git a/dis/install/wrap.dis b/dis/install/wrap.dis deleted file mode 100644 index dd5d18e99..000000000 Binary files a/dis/install/wrap.dis and /dev/null differ diff --git a/dis/install/wrap2list.dis b/dis/install/wrap2list.dis deleted file mode 100644 index 84ec39b57..000000000 Binary files a/dis/install/wrap2list.dis and /dev/null differ diff --git a/dis/iostats.dis b/dis/iostats.dis deleted file mode 100644 index a9093e19c..000000000 Binary files a/dis/iostats.dis and /dev/null differ diff --git a/dis/ip/bootpd.dis b/dis/ip/bootpd.dis deleted file mode 100644 index 93e7a0dca..000000000 Binary files a/dis/ip/bootpd.dis and /dev/null differ diff --git a/dis/ip/dhcp.dis b/dis/ip/dhcp.dis deleted file mode 100644 index 2fa197ffd..000000000 Binary files a/dis/ip/dhcp.dis and /dev/null differ diff --git a/dis/ip/ping.dis b/dis/ip/ping.dis deleted file mode 100644 index 88481a026..000000000 Binary files a/dis/ip/ping.dis and /dev/null differ diff --git a/dis/ip/rip.dis b/dis/ip/rip.dis deleted file mode 100644 index 212d13d9a..000000000 Binary files a/dis/ip/rip.dis and /dev/null differ diff --git a/dis/ip/sntp.dis b/dis/ip/sntp.dis deleted file mode 100644 index 08793938c..000000000 Binary files a/dis/ip/sntp.dis and /dev/null differ diff --git a/dis/ip/tftpd.dis b/dis/ip/tftpd.dis deleted file mode 100644 index 4e5a36997..000000000 Binary files a/dis/ip/tftpd.dis and /dev/null differ diff --git a/dis/ip/virgild.dis b/dis/ip/virgild.dis deleted file mode 100644 index c49be0308..000000000 Binary files a/dis/ip/virgild.dis and /dev/null differ diff --git a/dis/jitbench.dis b/dis/jitbench.dis deleted file mode 100644 index 7cc72235a..000000000 Binary files a/dis/jitbench.dis and /dev/null differ diff --git a/dis/jitbench2.dis b/dis/jitbench2.dis deleted file mode 100644 index e69a6e90c..000000000 Binary files a/dis/jitbench2.dis and /dev/null differ diff --git a/dis/jitbug.dis b/dis/jitbug.dis deleted file mode 100644 index 204c50900..000000000 Binary files a/dis/jitbug.dis and /dev/null differ diff --git a/dis/jitbug2.dis b/dis/jitbug2.dis deleted file mode 100644 index 9f8323475..000000000 Binary files a/dis/jitbug2.dis and /dev/null differ diff --git a/dis/jitcrash.dis b/dis/jitcrash.dis deleted file mode 100644 index a7feef508..000000000 Binary files a/dis/jitcrash.dis and /dev/null differ diff --git a/dis/jitshift.dis b/dis/jitshift.dis deleted file mode 100644 index bdce59f77..000000000 Binary files a/dis/jitshift.dis and /dev/null differ diff --git a/dis/jittest.dis b/dis/jittest.dis deleted file mode 100644 index 0a81b3309..000000000 Binary files a/dis/jittest.dis and /dev/null differ diff --git a/dis/js.dis b/dis/js.dis deleted file mode 100644 index 2db679bc8..000000000 Binary files a/dis/js.dis and /dev/null differ diff --git a/dis/kill.dis b/dis/kill.dis deleted file mode 100644 index 78315c5cf..000000000 Binary files a/dis/kill.dis and /dev/null differ diff --git a/dis/ktrans.dis b/dis/ktrans.dis deleted file mode 100644 index 1c4f41756..000000000 Binary files a/dis/ktrans.dis and /dev/null differ diff --git a/dis/lib/aadraw.dis b/dis/lib/aadraw.dis deleted file mode 100644 index caba72a6c..000000000 Binary files a/dis/lib/aadraw.dis and /dev/null differ diff --git a/dis/lib/acmewin.dis b/dis/lib/acmewin.dis deleted file mode 100644 index 833c3d62e..000000000 Binary files a/dis/lib/acmewin.dis and /dev/null differ diff --git a/dis/lib/agentlib.dis b/dis/lib/agentlib.dis deleted file mode 100644 index bbceb9384..000000000 Binary files a/dis/lib/agentlib.dis and /dev/null differ diff --git a/dis/lib/arg.dis b/dis/lib/arg.dis deleted file mode 100644 index 97c6830e0..000000000 Binary files a/dis/lib/arg.dis and /dev/null differ diff --git a/dis/lib/asn1.dis b/dis/lib/asn1.dis deleted file mode 100644 index 9324b1467..000000000 Binary files a/dis/lib/asn1.dis and /dev/null differ diff --git a/dis/lib/attrdb.dis b/dis/lib/attrdb.dis deleted file mode 100644 index 0185413ca..000000000 Binary files a/dis/lib/attrdb.dis and /dev/null differ diff --git a/dis/lib/attrhash.dis b/dis/lib/attrhash.dis deleted file mode 100644 index e47946465..000000000 Binary files a/dis/lib/attrhash.dis and /dev/null differ diff --git a/dis/lib/audit.dis b/dis/lib/audit.dis deleted file mode 100644 index 34c058914..000000000 Binary files a/dis/lib/audit.dis and /dev/null differ diff --git a/dis/lib/auditchain.dis b/dis/lib/auditchain.dis deleted file mode 100644 index e49071111..000000000 Binary files a/dis/lib/auditchain.dis and /dev/null differ diff --git a/dis/lib/auditprov.dis b/dis/lib/auditprov.dis deleted file mode 100644 index ca254837d..000000000 Binary files a/dis/lib/auditprov.dis and /dev/null differ diff --git a/dis/lib/auth.dis b/dis/lib/auth.dis deleted file mode 100644 index 4bff5e5ce..000000000 Binary files a/dis/lib/auth.dis and /dev/null differ diff --git a/dis/lib/auth9.dis b/dis/lib/auth9.dis deleted file mode 100644 index ab32d40de..000000000 Binary files a/dis/lib/auth9.dis and /dev/null differ diff --git a/dis/lib/bioauth.dis b/dis/lib/bioauth.dis deleted file mode 100644 index 291379700..000000000 Binary files a/dis/lib/bioauth.dis and /dev/null differ diff --git a/dis/lib/bloomfilter.dis b/dis/lib/bloomfilter.dis deleted file mode 100644 index 0776da03d..000000000 Binary files a/dis/lib/bloomfilter.dis and /dev/null differ diff --git a/dis/lib/bufio.dis b/dis/lib/bufio.dis deleted file mode 100644 index 29d02e833..000000000 Binary files a/dis/lib/bufio.dis and /dev/null differ diff --git a/dis/lib/cfg.dis b/dis/lib/cfg.dis deleted file mode 100644 index e47f03588..000000000 Binary files a/dis/lib/cfg.dis and /dev/null differ diff --git a/dis/lib/cfgfile.dis b/dis/lib/cfgfile.dis deleted file mode 100644 index 442138cf4..000000000 Binary files a/dis/lib/cfgfile.dis and /dev/null differ diff --git a/dis/lib/chanfill.dis b/dis/lib/chanfill.dis deleted file mode 100644 index de6bb2e58..000000000 Binary files a/dis/lib/chanfill.dis and /dev/null differ diff --git a/dis/lib/complete.dis b/dis/lib/complete.dis deleted file mode 100644 index fc221e8d3..000000000 Binary files a/dis/lib/complete.dis and /dev/null differ diff --git a/dis/lib/convcs/8bit_stob.dis b/dis/lib/convcs/8bit_stob.dis deleted file mode 100644 index f8728ae10..000000000 Binary files a/dis/lib/convcs/8bit_stob.dis and /dev/null differ diff --git a/dis/lib/convcs/big5_btos.dis b/dis/lib/convcs/big5_btos.dis deleted file mode 100644 index ed871ba14..000000000 Binary files a/dis/lib/convcs/big5_btos.dis and /dev/null differ diff --git a/dis/lib/convcs/big5_stob.dis b/dis/lib/convcs/big5_stob.dis deleted file mode 100644 index 3cc5baf9c..000000000 Binary files a/dis/lib/convcs/big5_stob.dis and /dev/null differ diff --git a/dis/lib/convcs/convcs.dis b/dis/lib/convcs/convcs.dis deleted file mode 100644 index 98c0f7c7c..000000000 Binary files a/dis/lib/convcs/convcs.dis and /dev/null differ diff --git a/dis/lib/convcs/cp932_btos.dis b/dis/lib/convcs/cp932_btos.dis deleted file mode 100644 index 73688e55b..000000000 Binary files a/dis/lib/convcs/cp932_btos.dis and /dev/null differ diff --git a/dis/lib/convcs/cp_btos.dis b/dis/lib/convcs/cp_btos.dis deleted file mode 100644 index 2d8a3edd1..000000000 Binary files a/dis/lib/convcs/cp_btos.dis and /dev/null differ diff --git a/dis/lib/convcs/cp_stob.dis b/dis/lib/convcs/cp_stob.dis deleted file mode 100644 index fb531ee26..000000000 Binary files a/dis/lib/convcs/cp_stob.dis and /dev/null differ diff --git a/dis/lib/convcs/euc-jp_btos.dis b/dis/lib/convcs/euc-jp_btos.dis deleted file mode 100644 index 61ecb70b0..000000000 Binary files a/dis/lib/convcs/euc-jp_btos.dis and /dev/null differ diff --git a/dis/lib/convcs/gb2312_btos.dis b/dis/lib/convcs/gb2312_btos.dis deleted file mode 100644 index e14dfe172..000000000 Binary files a/dis/lib/convcs/gb2312_btos.dis and /dev/null differ diff --git a/dis/lib/convcs/tune_btos.dis b/dis/lib/convcs/tune_btos.dis deleted file mode 100644 index 28c07ba25..000000000 Binary files a/dis/lib/convcs/tune_btos.dis and /dev/null differ diff --git a/dis/lib/convcs/tune_stob.dis b/dis/lib/convcs/tune_stob.dis deleted file mode 100644 index 284d0684f..000000000 Binary files a/dis/lib/convcs/tune_stob.dis and /dev/null differ diff --git a/dis/lib/convcs/utf8_btos.dis b/dis/lib/convcs/utf8_btos.dis deleted file mode 100644 index 577815602..000000000 Binary files a/dis/lib/convcs/utf8_btos.dis and /dev/null differ diff --git a/dis/lib/convcs/utf8_stob.dis b/dis/lib/convcs/utf8_stob.dis deleted file mode 100644 index eba7557a0..000000000 Binary files a/dis/lib/convcs/utf8_stob.dis and /dev/null differ diff --git a/dis/lib/crc.dis b/dis/lib/crc.dis deleted file mode 100644 index b2ad5c83f..000000000 Binary files a/dis/lib/crc.dis and /dev/null differ diff --git a/dis/lib/crypt/pkcs.dis b/dis/lib/crypt/pkcs.dis deleted file mode 100644 index ac6d5c8c7..000000000 Binary files a/dis/lib/crypt/pkcs.dis and /dev/null differ diff --git a/dis/lib/crypt/ssl3.dis b/dis/lib/crypt/ssl3.dis deleted file mode 100644 index 74757b39e..000000000 Binary files a/dis/lib/crypt/ssl3.dis and /dev/null differ diff --git a/dis/lib/crypt/sslsession.dis b/dis/lib/crypt/sslsession.dis deleted file mode 100644 index a6fcfc666..000000000 Binary files a/dis/lib/crypt/sslsession.dis and /dev/null differ diff --git a/dis/lib/crypt/tls.dis b/dis/lib/crypt/tls.dis deleted file mode 100644 index e79249da0..000000000 Binary files a/dis/lib/crypt/tls.dis and /dev/null differ diff --git a/dis/lib/crypt/x509.dis b/dis/lib/crypt/x509.dis deleted file mode 100644 index 9ab6167e6..000000000 Binary files a/dis/lib/crypt/x509.dis and /dev/null differ diff --git a/dis/lib/csv.dis b/dis/lib/csv.dis deleted file mode 100644 index 8af1a0a20..000000000 Binary files a/dis/lib/csv.dis and /dev/null differ diff --git a/dis/lib/daytime.dis b/dis/lib/daytime.dis deleted file mode 100644 index 9eb73981f..000000000 Binary files a/dis/lib/daytime.dis and /dev/null differ diff --git a/dis/lib/dbm.dis b/dis/lib/dbm.dis deleted file mode 100644 index 520304a1d..000000000 Binary files a/dis/lib/dbm.dis and /dev/null differ diff --git a/dis/lib/debdata.dis b/dis/lib/debdata.dis deleted file mode 100644 index 2a420c1a1..000000000 Binary files a/dis/lib/debdata.dis and /dev/null differ diff --git a/dis/lib/debsrc.dis b/dis/lib/debsrc.dis deleted file mode 100644 index d3642c9a3..000000000 Binary files a/dis/lib/debsrc.dis and /dev/null differ diff --git a/dis/lib/debug.dis b/dis/lib/debug.dis deleted file mode 100644 index 15f902293..000000000 Binary files a/dis/lib/debug.dis and /dev/null differ diff --git a/dis/lib/deflate.dis b/dis/lib/deflate.dis deleted file mode 100644 index b5efd299c..000000000 Binary files a/dis/lib/deflate.dis and /dev/null differ diff --git a/dis/lib/devpointer.dis b/dis/lib/devpointer.dis deleted file mode 100644 index c960175e3..000000000 Binary files a/dis/lib/devpointer.dis and /dev/null differ diff --git a/dis/lib/dial.dis b/dis/lib/dial.dis deleted file mode 100644 index be7d21bc8..000000000 Binary files a/dis/lib/dial.dis and /dev/null differ diff --git a/dis/lib/dialnorm.dis b/dis/lib/dialnorm.dis deleted file mode 100644 index fcfc86756..000000000 Binary files a/dis/lib/dialnorm.dis and /dev/null differ diff --git a/dis/lib/dialog.dis b/dis/lib/dialog.dis deleted file mode 100644 index bd63b6278..000000000 Binary files a/dis/lib/dialog.dis and /dev/null differ diff --git a/dis/lib/dict.dis b/dis/lib/dict.dis deleted file mode 100644 index b441bdb86..000000000 Binary files a/dis/lib/dict.dis and /dev/null differ diff --git a/dis/lib/dis.dis b/dis/lib/dis.dis deleted file mode 100644 index d0c48ead4..000000000 Binary files a/dis/lib/dis.dis and /dev/null differ diff --git a/dis/lib/diskblocks.dis b/dis/lib/diskblocks.dis deleted file mode 100644 index 945923833..000000000 Binary files a/dis/lib/diskblocks.dis and /dev/null differ diff --git a/dis/lib/disks.dis b/dis/lib/disks.dis deleted file mode 100644 index 30067520a..000000000 Binary files a/dis/lib/disks.dis and /dev/null differ diff --git a/dis/lib/ecmascript.dis b/dis/lib/ecmascript.dis deleted file mode 100644 index 222788198..000000000 Binary files a/dis/lib/ecmascript.dis and /dev/null differ diff --git a/dis/lib/encoding/base16.dis b/dis/lib/encoding/base16.dis deleted file mode 100644 index d49198b55..000000000 Binary files a/dis/lib/encoding/base16.dis and /dev/null differ diff --git a/dis/lib/encoding/base32.dis b/dis/lib/encoding/base32.dis deleted file mode 100644 index b2540ecf7..000000000 Binary files a/dis/lib/encoding/base32.dis and /dev/null differ diff --git a/dis/lib/encoding/base32a.dis b/dis/lib/encoding/base32a.dis deleted file mode 100644 index 1892cba2f..000000000 Binary files a/dis/lib/encoding/base32a.dis and /dev/null differ diff --git a/dis/lib/encoding/base64.dis b/dis/lib/encoding/base64.dis deleted file mode 100644 index c7213d43b..000000000 Binary files a/dis/lib/encoding/base64.dis and /dev/null differ diff --git a/dis/lib/env.dis b/dis/lib/env.dis deleted file mode 100644 index 7e123e9da..000000000 Binary files a/dis/lib/env.dis and /dev/null differ diff --git a/dis/lib/ethcrypto.dis b/dis/lib/ethcrypto.dis deleted file mode 100644 index ebe6af786..000000000 Binary files a/dis/lib/ethcrypto.dis and /dev/null differ diff --git a/dis/lib/ether.dis b/dis/lib/ether.dis deleted file mode 100644 index c81305bb4..000000000 Binary files a/dis/lib/ether.dis and /dev/null differ diff --git a/dis/lib/ethrpc.dis b/dis/lib/ethrpc.dis deleted file mode 100644 index b5bd5c05e..000000000 Binary files a/dis/lib/ethrpc.dis and /dev/null differ diff --git a/dis/lib/exception.dis b/dis/lib/exception.dis deleted file mode 100644 index 129adca8d..000000000 Binary files a/dis/lib/exception.dis and /dev/null differ diff --git a/dis/lib/factotum.dis b/dis/lib/factotum.dis deleted file mode 100644 index 0b84c422d..000000000 Binary files a/dis/lib/factotum.dis and /dev/null differ diff --git a/dis/lib/fdrun.dis b/dis/lib/fdrun.dis deleted file mode 100644 index f3a90edca..000000000 Binary files a/dis/lib/fdrun.dis and /dev/null differ diff --git a/dis/lib/filepat.dis b/dis/lib/filepat.dis deleted file mode 100644 index f89583611..000000000 Binary files a/dis/lib/filepat.dis and /dev/null differ diff --git a/dis/lib/format.dis b/dis/lib/format.dis deleted file mode 100644 index fd039b390..000000000 Binary files a/dis/lib/format.dis and /dev/null differ diff --git a/dis/lib/fsfilter.dis b/dis/lib/fsfilter.dis deleted file mode 100644 index 097da4889..000000000 Binary files a/dis/lib/fsfilter.dis and /dev/null differ diff --git a/dis/lib/fslib.dis b/dis/lib/fslib.dis deleted file mode 100644 index e11a2285d..000000000 Binary files a/dis/lib/fslib.dis and /dev/null differ diff --git a/dis/lib/fsproto.dis b/dis/lib/fsproto.dis deleted file mode 100644 index 4c891ed2e..000000000 Binary files a/dis/lib/fsproto.dis and /dev/null differ diff --git a/dis/lib/ftree/cptree.dis b/dis/lib/ftree/cptree.dis deleted file mode 100644 index d9a8ecd09..000000000 Binary files a/dis/lib/ftree/cptree.dis and /dev/null differ diff --git a/dis/lib/ftree/items.dis b/dis/lib/ftree/items.dis deleted file mode 100644 index dcf397e95..000000000 Binary files a/dis/lib/ftree/items.dis and /dev/null differ diff --git a/dis/lib/geoproj.dis b/dis/lib/geoproj.dis deleted file mode 100644 index 4e57e4d42..000000000 Binary files a/dis/lib/geoproj.dis and /dev/null differ diff --git a/dis/lib/git/git.dis b/dis/lib/git/git.dis deleted file mode 100644 index 0e4fc6609..000000000 Binary files a/dis/lib/git/git.dis and /dev/null differ diff --git a/dis/lib/hash.dis b/dis/lib/hash.dis deleted file mode 100644 index b14f369a7..000000000 Binary files a/dis/lib/hash.dis and /dev/null differ diff --git a/dis/lib/html.dis b/dis/lib/html.dis deleted file mode 100644 index 132f8bcfb..000000000 Binary files a/dis/lib/html.dis and /dev/null differ diff --git a/dis/lib/ida/ida.dis b/dis/lib/ida/ida.dis deleted file mode 100644 index 58967f9bd..000000000 Binary files a/dis/lib/ida/ida.dis and /dev/null differ diff --git a/dis/lib/ida/idatab.dis b/dis/lib/ida/idatab.dis deleted file mode 100644 index 0c0ac8edc..000000000 Binary files a/dis/lib/ida/idatab.dis and /dev/null differ diff --git a/dis/lib/imageremap.dis b/dis/lib/imageremap.dis deleted file mode 100644 index 3f646d848..000000000 Binary files a/dis/lib/imageremap.dis and /dev/null differ diff --git a/dis/lib/imap.dis b/dis/lib/imap.dis deleted file mode 100644 index f845e8463..000000000 Binary files a/dis/lib/imap.dis and /dev/null differ diff --git a/dis/lib/inflate.dis b/dis/lib/inflate.dis deleted file mode 100644 index d0988012b..000000000 Binary files a/dis/lib/inflate.dis and /dev/null differ diff --git a/dis/lib/ip.dis b/dis/lib/ip.dis deleted file mode 100644 index 3d4fc1267..000000000 Binary files a/dis/lib/ip.dis and /dev/null differ diff --git a/dis/lib/ipattr.dis b/dis/lib/ipattr.dis deleted file mode 100644 index 51eff130e..000000000 Binary files a/dis/lib/ipattr.dis and /dev/null differ diff --git a/dis/lib/json.dis b/dis/lib/json.dis deleted file mode 100644 index 49c9ac8f4..000000000 Binary files a/dis/lib/json.dis and /dev/null differ diff --git a/dis/lib/keyringinst.dis b/dis/lib/keyringinst.dis deleted file mode 100644 index 12fb83413..000000000 Binary files a/dis/lib/keyringinst.dis and /dev/null differ diff --git a/dis/lib/keyset.dis b/dis/lib/keyset.dis deleted file mode 100644 index 649e01df7..000000000 Binary files a/dis/lib/keyset.dis and /dev/null differ diff --git a/dis/lib/libc.dis b/dis/lib/libc.dis deleted file mode 100644 index 9673b7cbb..000000000 Binary files a/dis/lib/libc.dis and /dev/null differ diff --git a/dis/lib/libc0.dis b/dis/lib/libc0.dis deleted file mode 100644 index 205ad5251..000000000 Binary files a/dis/lib/libc0.dis and /dev/null differ diff --git a/dis/lib/lists.dis b/dis/lib/lists.dis deleted file mode 100644 index 91317497d..000000000 Binary files a/dis/lib/lists.dis and /dev/null differ diff --git a/dis/lib/llmclient.dis b/dis/lib/llmclient.dis deleted file mode 100644 index 32e1f3ce0..000000000 Binary files a/dis/lib/llmclient.dis and /dev/null differ diff --git a/dis/lib/lock.dis b/dis/lib/lock.dis deleted file mode 100644 index ea94796af..000000000 Binary files a/dis/lib/lock.dis and /dev/null differ diff --git a/dis/lib/login.dis b/dis/lib/login.dis deleted file mode 100644 index 1b6f86349..000000000 Binary files a/dis/lib/login.dis and /dev/null differ diff --git a/dis/lib/lucitheme.dis b/dis/lib/lucitheme.dis deleted file mode 100644 index c8b5eabf0..000000000 Binary files a/dis/lib/lucitheme.dis and /dev/null differ diff --git a/dis/lib/mailparse.dis b/dis/lib/mailparse.dis deleted file mode 100644 index 193f36f87..000000000 Binary files a/dis/lib/mailparse.dis and /dev/null differ diff --git a/dis/lib/matrixlib.dis b/dis/lib/matrixlib.dis deleted file mode 100644 index aa2e6a8af..000000000 Binary files a/dis/lib/matrixlib.dis and /dev/null differ diff --git a/dis/lib/memfs.dis b/dis/lib/memfs.dis deleted file mode 100644 index 544b11032..000000000 Binary files a/dis/lib/memfs.dis and /dev/null differ diff --git a/dis/lib/menu.dis b/dis/lib/menu.dis deleted file mode 100644 index 67582bfd2..000000000 Binary files a/dis/lib/menu.dis and /dev/null differ diff --git a/dis/lib/menuhit.dis b/dis/lib/menuhit.dis deleted file mode 100644 index 0bdcbc93f..000000000 Binary files a/dis/lib/menuhit.dis and /dev/null differ diff --git a/dis/lib/mermaid.dis b/dis/lib/mermaid.dis deleted file mode 100644 index 29ff9c07d..000000000 Binary files a/dis/lib/mermaid.dis and /dev/null differ diff --git a/dis/lib/midi.dis b/dis/lib/midi.dis deleted file mode 100644 index 5e2365665..000000000 Binary files a/dis/lib/midi.dis and /dev/null differ diff --git a/dis/lib/msgio.dis b/dis/lib/msgio.dis deleted file mode 100644 index b6ca99e01..000000000 Binary files a/dis/lib/msgio.dis and /dev/null differ diff --git a/dis/lib/names.dis b/dis/lib/names.dis deleted file mode 100644 index 2eb6f16c0..000000000 Binary files a/dis/lib/names.dis and /dev/null differ diff --git a/dis/lib/nametree.dis b/dis/lib/nametree.dis deleted file mode 100644 index 5e2009f61..000000000 Binary files a/dis/lib/nametree.dis and /dev/null differ diff --git a/dis/lib/newns.dis b/dis/lib/newns.dis deleted file mode 100644 index d63d468b1..000000000 Binary files a/dis/lib/newns.dis and /dev/null differ diff --git a/dis/lib/ninep.dis b/dis/lib/ninep.dis deleted file mode 100644 index 56bab6183..000000000 Binary files a/dis/lib/ninep.dis and /dev/null differ diff --git a/dis/lib/nsconstruct.dis b/dis/lib/nsconstruct.dis deleted file mode 100644 index ce890a8d8..000000000 Binary files a/dis/lib/nsconstruct.dis and /dev/null differ diff --git a/dis/lib/oldauth.dis b/dis/lib/oldauth.dis deleted file mode 100644 index ff4b78d1c..000000000 Binary files a/dis/lib/oldauth.dis and /dev/null differ diff --git a/dis/lib/outlinefont.dis b/dis/lib/outlinefont.dis deleted file mode 100644 index 67149d40e..000000000 Binary files a/dis/lib/outlinefont.dis and /dev/null differ diff --git a/dis/lib/parseman.dis b/dis/lib/parseman.dis deleted file mode 100644 index 951f02699..000000000 Binary files a/dis/lib/parseman.dis and /dev/null differ diff --git a/dis/lib/pdf.dis b/dis/lib/pdf.dis deleted file mode 100644 index 61ee1b98a..000000000 Binary files a/dis/lib/pdf.dis and /dev/null differ diff --git a/dis/lib/plumbing.dis b/dis/lib/plumbing.dis deleted file mode 100644 index 2c9853bc9..000000000 Binary files a/dis/lib/plumbing.dis and /dev/null differ diff --git a/dis/lib/plumbmsg.dis b/dis/lib/plumbmsg.dis deleted file mode 100644 index 3cad1dc0c..000000000 Binary files a/dis/lib/plumbmsg.dis and /dev/null differ diff --git a/dis/lib/pop3.dis b/dis/lib/pop3.dis deleted file mode 100644 index e8aba762d..000000000 Binary files a/dis/lib/pop3.dis and /dev/null differ diff --git a/dis/lib/popup.dis b/dis/lib/popup.dis deleted file mode 100644 index 3b78601fa..000000000 Binary files a/dis/lib/popup.dis and /dev/null differ diff --git a/dis/lib/profile.dis b/dis/lib/profile.dis deleted file mode 100644 index a665e91ce..000000000 Binary files a/dis/lib/profile.dis and /dev/null differ diff --git a/dis/lib/pslib.dis b/dis/lib/pslib.dis deleted file mode 100644 index 3e679ba42..000000000 Binary files a/dis/lib/pslib.dis and /dev/null differ diff --git a/dis/lib/publicnet.dis b/dis/lib/publicnet.dis deleted file mode 100644 index 5b1918d88..000000000 Binary files a/dis/lib/publicnet.dis and /dev/null differ diff --git a/dis/lib/rabin.dis b/dis/lib/rabin.dis deleted file mode 100644 index a0f6ad112..000000000 Binary files a/dis/lib/rabin.dis and /dev/null differ diff --git a/dis/lib/rand.dis b/dis/lib/rand.dis deleted file mode 100644 index 995773f68..000000000 Binary files a/dis/lib/rand.dis and /dev/null differ diff --git a/dis/lib/random.dis b/dis/lib/random.dis deleted file mode 100644 index 6516e86bb..000000000 Binary files a/dis/lib/random.dis and /dev/null differ diff --git a/dis/lib/readavif.dis b/dis/lib/readavif.dis deleted file mode 100644 index 236150a1a..000000000 Binary files a/dis/lib/readavif.dis and /dev/null differ diff --git a/dis/lib/readdir.dis b/dis/lib/readdir.dis deleted file mode 100644 index 5bf40ed9c..000000000 Binary files a/dis/lib/readdir.dis and /dev/null differ diff --git a/dis/lib/readgif.dis b/dis/lib/readgif.dis deleted file mode 100644 index 778642061..000000000 Binary files a/dis/lib/readgif.dis and /dev/null differ diff --git a/dis/lib/readjpg.dis b/dis/lib/readjpg.dis deleted file mode 100644 index 4c4eb2898..000000000 Binary files a/dis/lib/readjpg.dis and /dev/null differ diff --git a/dis/lib/readpicfile.dis b/dis/lib/readpicfile.dis deleted file mode 100644 index 2db833721..000000000 Binary files a/dis/lib/readpicfile.dis and /dev/null differ diff --git a/dis/lib/readpng.dis b/dis/lib/readpng.dis deleted file mode 100644 index e86851d63..000000000 Binary files a/dis/lib/readpng.dis and /dev/null differ diff --git a/dis/lib/readsvg.dis b/dis/lib/readsvg.dis deleted file mode 100644 index bcc489e31..000000000 Binary files a/dis/lib/readsvg.dis and /dev/null differ diff --git a/dis/lib/readwebp.dis b/dis/lib/readwebp.dis deleted file mode 100644 index 064ad3451..000000000 Binary files a/dis/lib/readwebp.dis and /dev/null differ diff --git a/dis/lib/readxbitmap.dis b/dis/lib/readxbitmap.dis deleted file mode 100644 index b85506554..000000000 Binary files a/dis/lib/readxbitmap.dis and /dev/null differ diff --git a/dis/lib/regex.dis b/dis/lib/regex.dis deleted file mode 100644 index 2cd4a9ca8..000000000 Binary files a/dis/lib/regex.dis and /dev/null differ diff --git a/dis/lib/regexutils.dis b/dis/lib/regexutils.dis deleted file mode 100644 index 4c52566da..000000000 Binary files a/dis/lib/regexutils.dis and /dev/null differ diff --git a/dis/lib/registries.dis b/dis/lib/registries.dis deleted file mode 100644 index 327c28d64..000000000 Binary files a/dis/lib/registries.dis and /dev/null differ diff --git a/dis/lib/rfc3339.dis b/dis/lib/rfc3339.dis deleted file mode 100644 index df56d96da..000000000 Binary files a/dis/lib/rfc3339.dis and /dev/null differ diff --git a/dis/lib/rfc822.dis b/dis/lib/rfc822.dis deleted file mode 100644 index 382442fa2..000000000 Binary files a/dis/lib/rfc822.dis and /dev/null differ diff --git a/dis/lib/scoretable.dis b/dis/lib/scoretable.dis deleted file mode 100644 index 9f761e28d..000000000 Binary files a/dis/lib/scoretable.dis and /dev/null differ diff --git a/dis/lib/secstore.dis b/dis/lib/secstore.dis deleted file mode 100644 index 1fea98c0b..000000000 Binary files a/dis/lib/secstore.dis and /dev/null differ diff --git a/dis/lib/selectfile.dis b/dis/lib/selectfile.dis deleted file mode 100644 index c6764eea4..000000000 Binary files a/dis/lib/selectfile.dis and /dev/null differ diff --git a/dis/lib/sets.dis b/dis/lib/sets.dis deleted file mode 100644 index 825cb7696..000000000 Binary files a/dis/lib/sets.dis and /dev/null differ diff --git a/dis/lib/sets32.dis b/dis/lib/sets32.dis deleted file mode 100644 index 7092a0075..000000000 Binary files a/dis/lib/sets32.dis and /dev/null differ diff --git a/dis/lib/sexprs.dis b/dis/lib/sexprs.dis deleted file mode 100644 index d671496d1..000000000 Binary files a/dis/lib/sexprs.dis and /dev/null differ diff --git a/dis/lib/slip.dis b/dis/lib/slip.dis deleted file mode 100644 index 4d27f0102..000000000 Binary files a/dis/lib/slip.dis and /dev/null differ diff --git a/dis/lib/smtp.dis b/dis/lib/smtp.dis deleted file mode 100644 index 710af1266..000000000 Binary files a/dis/lib/smtp.dis and /dev/null differ diff --git a/dis/lib/softkbd.dis b/dis/lib/softkbd.dis deleted file mode 100644 index 0a34e0c9f..000000000 Binary files a/dis/lib/softkbd.dis and /dev/null differ diff --git a/dis/lib/sort.dis b/dis/lib/sort.dis deleted file mode 100644 index 8fc7d7cb4..000000000 Binary files a/dis/lib/sort.dis and /dev/null differ diff --git a/dis/lib/spki/spki.dis b/dis/lib/spki/spki.dis deleted file mode 100644 index 5876eea83..000000000 Binary files a/dis/lib/spki/spki.dis and /dev/null differ diff --git a/dis/lib/spki/verifier.dis b/dis/lib/spki/verifier.dis deleted file mode 100644 index 12ce41db4..000000000 Binary files a/dis/lib/spki/verifier.dis and /dev/null differ diff --git a/dis/lib/ssl.dis b/dis/lib/ssl.dis deleted file mode 100644 index 32e7edc80..000000000 Binary files a/dis/lib/ssl.dis and /dev/null differ diff --git a/dis/lib/string.dis b/dis/lib/string.dis deleted file mode 100644 index dbaee4c17..000000000 Binary files a/dis/lib/string.dis and /dev/null differ diff --git a/dis/lib/strinttab.dis b/dis/lib/strinttab.dis deleted file mode 100644 index b260e70a6..000000000 Binary files a/dis/lib/strinttab.dis and /dev/null differ diff --git a/dis/lib/stripe.dis b/dis/lib/stripe.dis deleted file mode 100644 index 847dc76fd..000000000 Binary files a/dis/lib/stripe.dis and /dev/null differ diff --git a/dis/lib/styx.dis b/dis/lib/styx.dis deleted file mode 100644 index bd361ff51..000000000 Binary files a/dis/lib/styx.dis and /dev/null differ diff --git a/dis/lib/styxflush.dis b/dis/lib/styxflush.dis deleted file mode 100644 index 24e2e6c24..000000000 Binary files a/dis/lib/styxflush.dis and /dev/null differ diff --git a/dis/lib/styxlib.dis b/dis/lib/styxlib.dis deleted file mode 100644 index 743a06f87..000000000 Binary files a/dis/lib/styxlib.dis and /dev/null differ diff --git a/dis/lib/styxpersist.dis b/dis/lib/styxpersist.dis deleted file mode 100644 index 210f9cbb2..000000000 Binary files a/dis/lib/styxpersist.dis and /dev/null differ diff --git a/dis/lib/styxservers.dis b/dis/lib/styxservers.dis deleted file mode 100644 index abef522bf..000000000 Binary files a/dis/lib/styxservers.dis and /dev/null differ diff --git a/dis/lib/tables.dis b/dis/lib/tables.dis deleted file mode 100644 index cde518e44..000000000 Binary files a/dis/lib/tables.dis and /dev/null differ diff --git a/dis/lib/tabs.dis b/dis/lib/tabs.dis deleted file mode 100644 index 67881e040..000000000 Binary files a/dis/lib/tabs.dis and /dev/null differ diff --git a/dis/lib/testing.dis b/dis/lib/testing.dis deleted file mode 100644 index 470123a74..000000000 Binary files a/dis/lib/testing.dis and /dev/null differ diff --git a/dis/lib/textwidget.dis b/dis/lib/textwidget.dis deleted file mode 100644 index 1fd0e23e8..000000000 Binary files a/dis/lib/textwidget.dis and /dev/null differ diff --git a/dis/lib/tftp.dis b/dis/lib/tftp.dis deleted file mode 100644 index b9222dbcf..000000000 Binary files a/dis/lib/tftp.dis and /dev/null differ diff --git a/dis/lib/timers.dis b/dis/lib/timers.dis deleted file mode 100644 index 7554f4819..000000000 Binary files a/dis/lib/timers.dis and /dev/null differ diff --git a/dis/lib/titlebar.dis b/dis/lib/titlebar.dis deleted file mode 100644 index 3740e9fea..000000000 Binary files a/dis/lib/titlebar.dis and /dev/null differ diff --git a/dis/lib/tkclient.dis b/dis/lib/tkclient.dis deleted file mode 100644 index 73d9afa45..000000000 Binary files a/dis/lib/tkclient.dis and /dev/null differ diff --git a/dis/lib/translate.dis b/dis/lib/translate.dis deleted file mode 100644 index 9c4747488..000000000 Binary files a/dis/lib/translate.dis and /dev/null differ diff --git a/dis/lib/twofa.dis b/dis/lib/twofa.dis deleted file mode 100644 index 005e66d3c..000000000 Binary files a/dis/lib/twofa.dis and /dev/null differ diff --git a/dis/lib/twofaslot.dis b/dis/lib/twofaslot.dis deleted file mode 100644 index aa6df282b..000000000 Binary files a/dis/lib/twofaslot.dis and /dev/null differ diff --git a/dis/lib/ubfa.dis b/dis/lib/ubfa.dis deleted file mode 100644 index ac982cfcb..000000000 Binary files a/dis/lib/ubfa.dis and /dev/null differ diff --git a/dis/lib/url.dis b/dis/lib/url.dis deleted file mode 100644 index 532e9ce86..000000000 Binary files a/dis/lib/url.dis and /dev/null differ diff --git a/dis/lib/vac.dis b/dis/lib/vac.dis deleted file mode 100644 index fe9432c12..000000000 Binary files a/dis/lib/vac.dis and /dev/null differ diff --git a/dis/lib/venti.dis b/dis/lib/venti.dis deleted file mode 100644 index 6f89d3beb..000000000 Binary files a/dis/lib/venti.dis and /dev/null differ diff --git a/dis/lib/viewport.dis b/dis/lib/viewport.dis deleted file mode 100644 index d89164084..000000000 Binary files a/dis/lib/viewport.dis and /dev/null differ diff --git a/dis/lib/virgil.dis b/dis/lib/virgil.dis deleted file mode 100644 index c05994996..000000000 Binary files a/dis/lib/virgil.dis and /dev/null differ diff --git a/dis/lib/w3c/css.dis b/dis/lib/w3c/css.dis deleted file mode 100644 index a47a2d04a..000000000 Binary files a/dis/lib/w3c/css.dis and /dev/null differ diff --git a/dis/lib/w3c/uris.dis b/dis/lib/w3c/uris.dis deleted file mode 100644 index 3b62c8c4b..000000000 Binary files a/dis/lib/w3c/uris.dis and /dev/null differ diff --git a/dis/lib/w3c/xpointers.dis b/dis/lib/w3c/xpointers.dis deleted file mode 100644 index 8f046a177..000000000 Binary files a/dis/lib/w3c/xpointers.dis and /dev/null differ diff --git a/dis/lib/wait.dis b/dis/lib/wait.dis deleted file mode 100644 index 9ca3b5279..000000000 Binary files a/dis/lib/wait.dis and /dev/null differ diff --git a/dis/lib/wallet.dis b/dis/lib/wallet.dis deleted file mode 100644 index c910b4fa5..000000000 Binary files a/dis/lib/wallet.dis and /dev/null differ diff --git a/dis/lib/watchvars.dis b/dis/lib/watchvars.dis deleted file mode 100644 index 3c2f9fffa..000000000 Binary files a/dis/lib/watchvars.dis and /dev/null differ diff --git a/dis/lib/web.dis b/dis/lib/web.dis deleted file mode 100644 index af8a98a07..000000000 Binary files a/dis/lib/web.dis and /dev/null differ diff --git a/dis/lib/webclient.dis b/dis/lib/webclient.dis deleted file mode 100644 index d8681b9a1..000000000 Binary files a/dis/lib/webclient.dis and /dev/null differ diff --git a/dis/lib/winplace.dis b/dis/lib/winplace.dis deleted file mode 100644 index 78071cb18..000000000 Binary files a/dis/lib/winplace.dis and /dev/null differ diff --git a/dis/lib/wirefmt.dis b/dis/lib/wirefmt.dis deleted file mode 100644 index 59ba9b2ed..000000000 Binary files a/dis/lib/wirefmt.dis and /dev/null differ diff --git a/dis/lib/wmclient.dis b/dis/lib/wmclient.dis deleted file mode 100644 index af2f6b614..000000000 Binary files a/dis/lib/wmclient.dis and /dev/null differ diff --git a/dis/lib/wmlib.dis b/dis/lib/wmlib.dis deleted file mode 100644 index f58804f22..000000000 Binary files a/dis/lib/wmlib.dis and /dev/null differ diff --git a/dis/lib/wmsrv.dis b/dis/lib/wmsrv.dis deleted file mode 100644 index b1a1cd629..000000000 Binary files a/dis/lib/wmsrv.dis and /dev/null differ diff --git a/dis/lib/workdir.dis b/dis/lib/workdir.dis deleted file mode 100644 index 40c01ac89..000000000 Binary files a/dis/lib/workdir.dis and /dev/null differ diff --git a/dis/lib/writegif.dis b/dis/lib/writegif.dis deleted file mode 100644 index fcc718395..000000000 Binary files a/dis/lib/writegif.dis and /dev/null differ diff --git a/dis/lib/x402.dis b/dis/lib/x402.dis deleted file mode 100644 index 70d6d4f4a..000000000 Binary files a/dis/lib/x402.dis and /dev/null differ diff --git a/dis/lib/xenithwin.dis b/dis/lib/xenithwin.dis deleted file mode 100644 index e1f8713b2..000000000 Binary files a/dis/lib/xenithwin.dis and /dev/null differ diff --git a/dis/lib/xml.dis b/dis/lib/xml.dis deleted file mode 100644 index b8e2c00d4..000000000 Binary files a/dis/lib/xml.dis and /dev/null differ diff --git a/dis/limbo.dis b/dis/limbo.dis deleted file mode 100644 index a8399a4b9..000000000 Binary files a/dis/limbo.dis and /dev/null differ diff --git a/dis/limbtest.dis b/dis/limbtest.dis deleted file mode 100644 index 33f61d3ee..000000000 Binary files a/dis/limbtest.dis and /dev/null differ diff --git a/dis/list_dis.dis b/dis/list_dis.dis deleted file mode 100644 index 9a01a052a..000000000 Binary files a/dis/list_dis.dis and /dev/null differ diff --git a/dis/listen.dis b/dis/listen.dis deleted file mode 100644 index f537380fc..000000000 Binary files a/dis/listen.dis and /dev/null differ diff --git a/dis/llmctl9p.dis b/dis/llmctl9p.dis deleted file mode 100644 index 93bf8cff0..000000000 Binary files a/dis/llmctl9p.dis and /dev/null differ diff --git a/dis/llmsrv.dis b/dis/llmsrv.dis deleted file mode 100644 index a051aa81d..000000000 Binary files a/dis/llmsrv.dis and /dev/null differ diff --git a/dis/localcron.dis b/dis/localcron.dis deleted file mode 100644 index 87cefce3d..000000000 Binary files a/dis/localcron.dis and /dev/null differ diff --git a/dis/lockfs.dis b/dis/lockfs.dis deleted file mode 100644 index 245603991..000000000 Binary files a/dis/lockfs.dis and /dev/null differ diff --git a/dis/logfile.dis b/dis/logfile.dis deleted file mode 100644 index ee22500e9..000000000 Binary files a/dis/logfile.dis and /dev/null differ diff --git a/dis/look.dis b/dis/look.dis deleted file mode 100644 index 81194cd8b..000000000 Binary files a/dis/look.dis and /dev/null differ diff --git a/dis/loop.dis b/dis/loop.dis deleted file mode 100644 index 08af00074..000000000 Binary files a/dis/loop.dis and /dev/null differ diff --git a/dis/ls.dis b/dis/ls.dis deleted file mode 100644 index efe9039a7..000000000 Binary files a/dis/ls.dis and /dev/null differ diff --git a/dis/lstar.dis b/dis/lstar.dis deleted file mode 100644 index 27fceb888..000000000 Binary files a/dis/lstar.dis and /dev/null differ diff --git a/dis/lucibridge.dis b/dis/lucibridge.dis deleted file mode 100644 index a4d3996dc..000000000 Binary files a/dis/lucibridge.dis and /dev/null differ diff --git a/dis/luciconv.dis b/dis/luciconv.dis deleted file mode 100644 index 97d4830c5..000000000 Binary files a/dis/luciconv.dis and /dev/null differ diff --git a/dis/lucictx.dis b/dis/lucictx.dis deleted file mode 100644 index 26abccffd..000000000 Binary files a/dis/lucictx.dis and /dev/null differ diff --git a/dis/lucifer.dis b/dis/lucifer.dis deleted file mode 100644 index 5a3c37fb0..000000000 Binary files a/dis/lucifer.dis and /dev/null differ diff --git a/dis/lucipres.dis b/dis/lucipres.dis deleted file mode 100644 index 5b29427c6..000000000 Binary files a/dis/lucipres.dis and /dev/null differ diff --git a/dis/luciuisrv.dis b/dis/luciuisrv.dis deleted file mode 100644 index b9d2072cf..000000000 Binary files a/dis/luciuisrv.dis and /dev/null differ diff --git a/dis/m4.dis b/dis/m4.dis deleted file mode 100644 index 32ecd950e..000000000 Binary files a/dis/m4.dis and /dev/null differ diff --git a/dis/mail9p.dis b/dis/mail9p.dis deleted file mode 100644 index 41b82f62a..000000000 Binary files a/dis/mail9p.dis and /dev/null differ diff --git a/dis/man2html.dis b/dis/man2html.dis deleted file mode 100644 index 5137a345b..000000000 Binary files a/dis/man2html.dis and /dev/null differ diff --git a/dis/man2txt.dis b/dis/man2txt.dis deleted file mode 100644 index bc530b42a..000000000 Binary files a/dis/man2txt.dis and /dev/null differ diff --git a/dis/map_range.dis b/dis/map_range.dis deleted file mode 100644 index c711e0339..000000000 Binary files a/dis/map_range.dis and /dev/null differ diff --git a/dis/map_range_int3.dis b/dis/map_range_int3.dis deleted file mode 100644 index e030d6ec4..000000000 Binary files a/dis/map_range_int3.dis and /dev/null differ diff --git a/dis/map_range_minimal.dis b/dis/map_range_minimal.dis deleted file mode 100644 index 02d7dda26..000000000 Binary files a/dis/map_range_minimal.dis and /dev/null differ diff --git a/dis/map_range_str1.dis b/dis/map_range_str1.dis deleted file mode 100644 index 13b17adb0..000000000 Binary files a/dis/map_range_str1.dis and /dev/null differ diff --git a/dis/maps.dis b/dis/maps.dis deleted file mode 100644 index 306438223..000000000 Binary files a/dis/maps.dis and /dev/null differ diff --git a/dis/math/ack.dis b/dis/math/ack.dis deleted file mode 100644 index 919e6cf1b..000000000 Binary files a/dis/math/ack.dis and /dev/null differ diff --git a/dis/math/crackerbarrel.dis b/dis/math/crackerbarrel.dis deleted file mode 100644 index 56a9f6da9..000000000 Binary files a/dis/math/crackerbarrel.dis and /dev/null differ diff --git a/dis/math/factor.dis b/dis/math/factor.dis deleted file mode 100644 index 8df549e3c..000000000 Binary files a/dis/math/factor.dis and /dev/null differ diff --git a/dis/math/ffts.dis b/dis/math/ffts.dis deleted file mode 100644 index a32a13714..000000000 Binary files a/dis/math/ffts.dis and /dev/null differ diff --git a/dis/math/fibonacci.dis b/dis/math/fibonacci.dis deleted file mode 100644 index 057520e7a..000000000 Binary files a/dis/math/fibonacci.dis and /dev/null differ diff --git a/dis/math/fit.dis b/dis/math/fit.dis deleted file mode 100644 index 77c3fcdae..000000000 Binary files a/dis/math/fit.dis and /dev/null differ diff --git a/dis/math/genprimes.dis b/dis/math/genprimes.dis deleted file mode 100644 index fa906156a..000000000 Binary files a/dis/math/genprimes.dis and /dev/null differ diff --git a/dis/math/geodesy.dis b/dis/math/geodesy.dis deleted file mode 100644 index 15636a048..000000000 Binary files a/dis/math/geodesy.dis and /dev/null differ diff --git a/dis/math/gr.dis b/dis/math/gr.dis deleted file mode 100644 index 50ed6fe52..000000000 Binary files a/dis/math/gr.dis and /dev/null differ diff --git a/dis/math/graph0.dis b/dis/math/graph0.dis deleted file mode 100644 index f5084b431..000000000 Binary files a/dis/math/graph0.dis and /dev/null differ diff --git a/dis/math/hist0.dis b/dis/math/hist0.dis deleted file mode 100644 index 3a6eb22a7..000000000 Binary files a/dis/math/hist0.dis and /dev/null differ diff --git a/dis/math/linalg.dis b/dis/math/linalg.dis deleted file mode 100644 index 527359b90..000000000 Binary files a/dis/math/linalg.dis and /dev/null differ diff --git a/dis/math/linbench.dis b/dis/math/linbench.dis deleted file mode 100644 index 120d1cc4c..000000000 Binary files a/dis/math/linbench.dis and /dev/null differ diff --git a/dis/math/mersenne.dis b/dis/math/mersenne.dis deleted file mode 100644 index b95838877..000000000 Binary files a/dis/math/mersenne.dis and /dev/null differ diff --git a/dis/math/parts.dis b/dis/math/parts.dis deleted file mode 100644 index 7a4218488..000000000 Binary files a/dis/math/parts.dis and /dev/null differ diff --git a/dis/math/perms.dis b/dis/math/perms.dis deleted file mode 100644 index ec935576e..000000000 Binary files a/dis/math/perms.dis and /dev/null differ diff --git a/dis/math/pi.dis b/dis/math/pi.dis deleted file mode 100644 index 8fecd9242..000000000 Binary files a/dis/math/pi.dis and /dev/null differ diff --git a/dis/math/polyfill.dis b/dis/math/polyfill.dis deleted file mode 100644 index 67667a60e..000000000 Binary files a/dis/math/polyfill.dis and /dev/null differ diff --git a/dis/math/polyhedra.dis b/dis/math/polyhedra.dis deleted file mode 100644 index e8f11c07e..000000000 Binary files a/dis/math/polyhedra.dis and /dev/null differ diff --git a/dis/math/powers.dis b/dis/math/powers.dis deleted file mode 100644 index b9369271e..000000000 Binary files a/dis/math/powers.dis and /dev/null differ diff --git a/dis/math/primes.dis b/dis/math/primes.dis deleted file mode 100644 index 705cbcd1a..000000000 Binary files a/dis/math/primes.dis and /dev/null differ diff --git a/dis/math/sieve.dis b/dis/math/sieve.dis deleted file mode 100644 index b767e7f95..000000000 Binary files a/dis/math/sieve.dis and /dev/null differ diff --git a/dis/matrix/alert-watcher.dis b/dis/matrix/alert-watcher.dis deleted file mode 100644 index bf0b03238..000000000 Binary files a/dis/matrix/alert-watcher.dis and /dev/null differ diff --git a/dis/matrix/comp-list.dis b/dis/matrix/comp-list.dis deleted file mode 100644 index 224da5e8f..000000000 Binary files a/dis/matrix/comp-list.dis and /dev/null differ diff --git a/dis/matrix/cpu-gauge.dis b/dis/matrix/cpu-gauge.dis deleted file mode 100644 index 2311b7e9d..000000000 Binary files a/dis/matrix/cpu-gauge.dis and /dev/null differ diff --git a/dis/matrix/geo-fixture.dis b/dis/matrix/geo-fixture.dis deleted file mode 100644 index 84640cce8..000000000 Binary files a/dis/matrix/geo-fixture.dis and /dev/null differ diff --git a/dis/matrix/geo-map.dis b/dis/matrix/geo-map.dis deleted file mode 100644 index a3066fef2..000000000 Binary files a/dis/matrix/geo-map.dis and /dev/null differ diff --git a/dis/matrix/line-plot.dis b/dis/matrix/line-plot.dis deleted file mode 100644 index 830c83e6c..000000000 Binary files a/dis/matrix/line-plot.dis and /dev/null differ diff --git a/dis/matrix/llm-context.dis b/dis/matrix/llm-context.dis deleted file mode 100644 index dad608c8c..000000000 Binary files a/dis/matrix/llm-context.dis and /dev/null differ diff --git a/dis/matrix/llm-recorder.dis b/dis/matrix/llm-recorder.dis deleted file mode 100644 index 08da885b1..000000000 Binary files a/dis/matrix/llm-recorder.dis and /dev/null differ diff --git a/dis/matrix/llm-sessions.dis b/dis/matrix/llm-sessions.dis deleted file mode 100644 index 1be1024fa..000000000 Binary files a/dis/matrix/llm-sessions.dis and /dev/null differ diff --git a/dis/matrix/mem-gauge.dis b/dis/matrix/mem-gauge.dis deleted file mode 100644 index a838ff157..000000000 Binary files a/dis/matrix/mem-gauge.dis and /dev/null differ diff --git a/dis/matrix/net-gauge.dis b/dis/matrix/net-gauge.dis deleted file mode 100644 index bd9d91f72..000000000 Binary files a/dis/matrix/net-gauge.dis and /dev/null differ diff --git a/dis/matrix/position-table.dis b/dis/matrix/position-table.dis deleted file mode 100644 index addf76ff7..000000000 Binary files a/dis/matrix/position-table.dis and /dev/null differ diff --git a/dis/matrix/proc-list.dis b/dis/matrix/proc-list.dis deleted file mode 100644 index 299a55f3e..000000000 Binary files a/dis/matrix/proc-list.dis and /dev/null differ diff --git a/dis/matrix/risk-gauge.dis b/dis/matrix/risk-gauge.dis deleted file mode 100644 index c06037b26..000000000 Binary files a/dis/matrix/risk-gauge.dis and /dev/null differ diff --git a/dis/matrix/signal-feed.dis b/dis/matrix/signal-feed.dis deleted file mode 100644 index 396e80e01..000000000 Binary files a/dis/matrix/signal-feed.dis and /dev/null differ diff --git a/dis/matrix/sparkline.dis b/dis/matrix/sparkline.dis deleted file mode 100644 index 2874eb5f5..000000000 Binary files a/dis/matrix/sparkline.dis and /dev/null differ diff --git a/dis/matrix/sysmon-svc.dis b/dis/matrix/sysmon-svc.dis deleted file mode 100644 index fdd69df56..000000000 Binary files a/dis/matrix/sysmon-svc.dis and /dev/null differ diff --git a/dis/matrix/tk-notes.dis b/dis/matrix/tk-notes.dis deleted file mode 100644 index cd917352d..000000000 Binary files a/dis/matrix/tk-notes.dis and /dev/null differ diff --git a/dis/matrix/video-ctl.dis b/dis/matrix/video-ctl.dis deleted file mode 100644 index ae06e7483..000000000 Binary files a/dis/matrix/video-ctl.dis and /dev/null differ diff --git a/dis/matrix/video-overlay.dis b/dis/matrix/video-overlay.dis deleted file mode 100644 index 5f3030631..000000000 Binary files a/dis/matrix/video-overlay.dis and /dev/null differ diff --git a/dis/matrix/video-pane.dis b/dis/matrix/video-pane.dis deleted file mode 100644 index ab1bbb247..000000000 Binary files a/dis/matrix/video-pane.dis and /dev/null differ diff --git a/dis/max.dis b/dis/max.dis deleted file mode 100644 index 18d0f7a10..000000000 Binary files a/dis/max.dis and /dev/null differ diff --git a/dis/mc.dis b/dis/mc.dis deleted file mode 100644 index 94fd71530..000000000 Binary files a/dis/mc.dis and /dev/null differ diff --git a/dis/md5sum.dis b/dis/md5sum.dis deleted file mode 100644 index 6cdbc5bf3..000000000 Binary files a/dis/md5sum.dis and /dev/null differ diff --git a/dis/mdb.dis b/dis/mdb.dis deleted file mode 100644 index 487bfe0d1..000000000 Binary files a/dis/mdb.dis and /dev/null differ diff --git a/dis/memfs.dis b/dis/memfs.dis deleted file mode 100644 index 9dd3a5b3e..000000000 Binary files a/dis/memfs.dis and /dev/null differ diff --git a/dis/mermaid_test.dis b/dis/mermaid_test.dis deleted file mode 100644 index 52ea669ae..000000000 Binary files a/dis/mermaid_test.dis and /dev/null differ diff --git a/dis/method.dis b/dis/method.dis deleted file mode 100644 index dd08b934b..000000000 Binary files a/dis/method.dis and /dev/null differ diff --git a/dis/mk.dis b/dis/mk.dis deleted file mode 100644 index e4d42f6ec..000000000 Binary files a/dis/mk.dis and /dev/null differ diff --git a/dis/mkdir.dis b/dis/mkdir.dis deleted file mode 100644 index 6480c52e8..000000000 Binary files a/dis/mkdir.dis and /dev/null differ diff --git a/dis/mkroot.dis b/dis/mkroot.dis deleted file mode 100644 index c5a17e321..000000000 Binary files a/dis/mkroot.dis and /dev/null differ diff --git a/dis/mntgen.dis b/dis/mntgen.dis deleted file mode 100644 index 65e9269eb..000000000 Binary files a/dis/mntgen.dis and /dev/null differ diff --git a/dis/mount.dis b/dis/mount.dis deleted file mode 100644 index a8d40311c..000000000 Binary files a/dis/mount.dis and /dev/null differ diff --git a/dis/mpeg/decode.dis b/dis/mpeg/decode.dis deleted file mode 100644 index 05ca27696..000000000 Binary files a/dis/mpeg/decode.dis and /dev/null differ diff --git a/dis/mpeg/mpegio.dis b/dis/mpeg/mpegio.dis deleted file mode 100644 index e5f990cf8..000000000 Binary files a/dis/mpeg/mpegio.dis and /dev/null differ diff --git a/dis/mpeg/mpegperf.dis b/dis/mpeg/mpegperf.dis deleted file mode 100644 index d2aed2b03..000000000 Binary files a/dis/mpeg/mpegperf.dis and /dev/null differ diff --git a/dis/mpeg/mpegtest.dis b/dis/mpeg/mpegtest.dis deleted file mode 100644 index a5e03c76b..000000000 Binary files a/dis/mpeg/mpegtest.dis and /dev/null differ diff --git a/dis/mpeg/remap24.dis b/dis/mpeg/remap24.dis deleted file mode 100644 index 5ab80255c..000000000 Binary files a/dis/mpeg/remap24.dis and /dev/null differ diff --git a/dis/mpeg/scidct.dis b/dis/mpeg/scidct.dis deleted file mode 100644 index 6bd7b2913..000000000 Binary files a/dis/mpeg/scidct.dis and /dev/null differ diff --git a/dis/mpeg/vidplay.dis b/dis/mpeg/vidplay.dis deleted file mode 100644 index ac24c25f0..000000000 Binary files a/dis/mpeg/vidplay.dis and /dev/null differ diff --git a/dis/mpeg/vidplay9p.dis b/dis/mpeg/vidplay9p.dis deleted file mode 100644 index 8afc0c250..000000000 Binary files a/dis/mpeg/vidplay9p.dis and /dev/null differ diff --git a/dis/mprof.dis b/dis/mprof.dis deleted file mode 100644 index f7eeb1f27..000000000 Binary files a/dis/mprof.dis and /dev/null differ diff --git a/dis/multi.dis b/dis/multi.dis deleted file mode 100644 index 6b813807a..000000000 Binary files a/dis/multi.dis and /dev/null differ diff --git a/dis/multi_iface.dis b/dis/multi_iface.dis deleted file mode 100644 index bb7417f32..000000000 Binary files a/dis/multi_iface.dis and /dev/null differ diff --git a/dis/multiret.dis b/dis/multiret.dis deleted file mode 100644 index 98fe5ae8d..000000000 Binary files a/dis/multiret.dis and /dev/null differ diff --git a/dis/mv.dis b/dis/mv.dis deleted file mode 100644 index aeafa3404..000000000 Binary files a/dis/mv.dis and /dev/null differ diff --git a/dis/ndb/cs.dis b/dis/ndb/cs.dis deleted file mode 100644 index f5f159de0..000000000 Binary files a/dis/ndb/cs.dis and /dev/null differ diff --git a/dis/ndb/csquery.dis b/dis/ndb/csquery.dis deleted file mode 100644 index 60fa1e514..000000000 Binary files a/dis/ndb/csquery.dis and /dev/null differ diff --git a/dis/ndb/dns.dis b/dis/ndb/dns.dis deleted file mode 100644 index 05448e5c7..000000000 Binary files a/dis/ndb/dns.dis and /dev/null differ diff --git a/dis/ndb/dnsquery.dis b/dis/ndb/dnsquery.dis deleted file mode 100644 index 26045d7cf..000000000 Binary files a/dis/ndb/dnsquery.dis and /dev/null differ diff --git a/dis/ndb/ipquery.dis b/dis/ndb/ipquery.dis deleted file mode 100644 index 9078f3419..000000000 Binary files a/dis/ndb/ipquery.dis and /dev/null differ diff --git a/dis/ndb/mkhash.dis b/dis/ndb/mkhash.dis deleted file mode 100644 index 009d4cd48..000000000 Binary files a/dis/ndb/mkhash.dis and /dev/null differ diff --git a/dis/ndb/query.dis b/dis/ndb/query.dis deleted file mode 100644 index 32cf0ea65..000000000 Binary files a/dis/ndb/query.dis and /dev/null differ diff --git a/dis/ndb/registry.dis b/dis/ndb/registry.dis deleted file mode 100644 index da84a14d4..000000000 Binary files a/dis/ndb/registry.dis and /dev/null differ diff --git a/dis/ndb/regquery.dis b/dis/ndb/regquery.dis deleted file mode 100644 index 571aab4fd..000000000 Binary files a/dis/ndb/regquery.dis and /dev/null differ diff --git a/dis/netkey.dis b/dis/netkey.dis deleted file mode 100644 index adaddfa59..000000000 Binary files a/dis/netkey.dis and /dev/null differ diff --git a/dis/netstat.dis b/dis/netstat.dis deleted file mode 100644 index ce3b920e8..000000000 Binary files a/dis/netstat.dis and /dev/null differ diff --git a/dis/newer.dis b/dis/newer.dis deleted file mode 100644 index ea3668a84..000000000 Binary files a/dis/newer.dis and /dev/null differ diff --git a/dis/newuser.dis b/dis/newuser.dis deleted file mode 100644 index a66e88455..000000000 Binary files a/dis/newuser.dis and /dev/null differ diff --git a/dis/ns.dis b/dis/ns.dis deleted file mode 100644 index bafb27ceb..000000000 Binary files a/dis/ns.dis and /dev/null differ diff --git a/dis/nsaudit.dis b/dis/nsaudit.dis deleted file mode 100644 index 997129297..000000000 Binary files a/dis/nsaudit.dis and /dev/null differ diff --git a/dis/nsbuild.dis b/dis/nsbuild.dis deleted file mode 100644 index 3976dd4e3..000000000 Binary files a/dis/nsbuild.dis and /dev/null differ diff --git a/dis/os.dis b/dis/os.dis deleted file mode 100644 index 0008f3f05..000000000 Binary files a/dis/os.dis and /dev/null differ diff --git a/dis/p.dis b/dis/p.dis deleted file mode 100644 index 12bd25eb7..000000000 Binary files a/dis/p.dis and /dev/null differ diff --git a/dis/panic_recover.dis b/dis/panic_recover.dis deleted file mode 100644 index 9d45f9903..000000000 Binary files a/dis/panic_recover.dis and /dev/null differ diff --git a/dis/pause.dis b/dis/pause.dis deleted file mode 100644 index 9303fe42c..000000000 Binary files a/dis/pause.dis and /dev/null differ diff --git a/dis/pipefile.dis b/dis/pipefile.dis deleted file mode 100644 index d97dd41c3..000000000 Binary files a/dis/pipefile.dis and /dev/null differ diff --git a/dis/pipefs.dis b/dis/pipefs.dis deleted file mode 100644 index c6dbc6a0c..000000000 Binary files a/dis/pipefs.dis and /dev/null differ diff --git a/dis/plumb.dis b/dis/plumb.dis deleted file mode 100644 index 908aa1d2c..000000000 Binary files a/dis/plumb.dis and /dev/null differ diff --git a/dis/plumber.dis b/dis/plumber.dis deleted file mode 100644 index 5faf2b20b..000000000 Binary files a/dis/plumber.dis and /dev/null differ diff --git a/dis/point.dis b/dis/point.dis deleted file mode 100644 index 46c3106f3..000000000 Binary files a/dis/point.dis and /dev/null differ diff --git a/dis/prof.dis b/dis/prof.dis deleted file mode 100644 index 4ee9b28dc..000000000 Binary files a/dis/prof.dis and /dev/null differ diff --git a/dis/ps.dis b/dis/ps.dis deleted file mode 100644 index b95aa9501..000000000 Binary files a/dis/ps.dis and /dev/null differ diff --git a/dis/puttar.dis b/dis/puttar.dis deleted file mode 100644 index c0278e839..000000000 Binary files a/dis/puttar.dis and /dev/null differ diff --git a/dis/pwd.dis b/dis/pwd.dis deleted file mode 100644 index 39b42ec8e..000000000 Binary files a/dis/pwd.dis and /dev/null differ diff --git a/dis/ramfile.dis b/dis/ramfile.dis deleted file mode 100644 index 24064b958..000000000 Binary files a/dis/ramfile.dis and /dev/null differ diff --git a/dis/randpass.dis b/dis/randpass.dis deleted file mode 100644 index 33835dbb0..000000000 Binary files a/dis/randpass.dis and /dev/null differ diff --git a/dis/range.dis b/dis/range.dis deleted file mode 100644 index e03c34295..000000000 Binary files a/dis/range.dis and /dev/null differ diff --git a/dis/raw2iaf.dis b/dis/raw2iaf.dis deleted file mode 100644 index f74582ab2..000000000 Binary files a/dis/raw2iaf.dis and /dev/null differ diff --git a/dis/rawdbfs.dis b/dis/rawdbfs.dis deleted file mode 100644 index 5d425958f..000000000 Binary files a/dis/rawdbfs.dis and /dev/null differ diff --git a/dis/rcmd.dis b/dis/rcmd.dis deleted file mode 100644 index a75870ce3..000000000 Binary files a/dis/rcmd.dis and /dev/null differ diff --git a/dis/read.dis b/dis/read.dis deleted file mode 100644 index 7df3757cf..000000000 Binary files a/dis/read.dis and /dev/null differ diff --git a/dis/rect.dis b/dis/rect.dis deleted file mode 100644 index e1e79d4a0..000000000 Binary files a/dis/rect.dis and /dev/null differ diff --git a/dis/rm.dis b/dis/rm.dis deleted file mode 100644 index 81b692e34..000000000 Binary files a/dis/rm.dis and /dev/null differ diff --git a/dis/rng.dis b/dis/rng.dis deleted file mode 100644 index dbce39477..000000000 Binary files a/dis/rng.dis and /dev/null differ diff --git a/dis/runas.dis b/dis/runas.dis deleted file mode 100644 index e3c00a33f..000000000 Binary files a/dis/runas.dis and /dev/null differ diff --git a/dis/scap.dis b/dis/scap.dis deleted file mode 100644 index 08578b1b5..000000000 Binary files a/dis/scap.dis and /dev/null differ diff --git a/dis/sed.dis b/dis/sed.dis deleted file mode 100644 index fdca5279e..000000000 Binary files a/dis/sed.dis and /dev/null differ diff --git a/dis/selectrecv.dis b/dis/selectrecv.dis deleted file mode 100644 index 0f78f6f19..000000000 Binary files a/dis/selectrecv.dis and /dev/null differ diff --git a/dis/sendmail.dis b/dis/sendmail.dis deleted file mode 100644 index b7708adf2..000000000 Binary files a/dis/sendmail.dis and /dev/null differ diff --git a/dis/seq.dis b/dis/seq.dis deleted file mode 100644 index 4dd372573..000000000 Binary files a/dis/seq.dis and /dev/null differ diff --git a/dis/sh.dis b/dis/sh.dis deleted file mode 100644 index e1c159892..000000000 Binary files a/dis/sh.dis and /dev/null differ diff --git a/dis/sh/arg.dis b/dis/sh/arg.dis deleted file mode 100644 index ce4abb226..000000000 Binary files a/dis/sh/arg.dis and /dev/null differ diff --git a/dis/sh/csv.dis b/dis/sh/csv.dis deleted file mode 100644 index a37100dcc..000000000 Binary files a/dis/sh/csv.dis and /dev/null differ diff --git a/dis/sh/echo.dis b/dis/sh/echo.dis deleted file mode 100644 index 6e765e01f..000000000 Binary files a/dis/sh/echo.dis and /dev/null differ diff --git a/dis/sh/expr.dis b/dis/sh/expr.dis deleted file mode 100644 index 171ba1e0c..000000000 Binary files a/dis/sh/expr.dis and /dev/null differ diff --git a/dis/sh/file2chan.dis b/dis/sh/file2chan.dis deleted file mode 100644 index 74b33a68e..000000000 Binary files a/dis/sh/file2chan.dis and /dev/null differ diff --git a/dis/sh/mload.dis b/dis/sh/mload.dis deleted file mode 100644 index df33d5647..000000000 Binary files a/dis/sh/mload.dis and /dev/null differ diff --git a/dis/sh/mpexpr.dis b/dis/sh/mpexpr.dis deleted file mode 100644 index dd1133718..000000000 Binary files a/dis/sh/mpexpr.dis and /dev/null differ diff --git a/dis/sh/regex.dis b/dis/sh/regex.dis deleted file mode 100644 index 73989903b..000000000 Binary files a/dis/sh/regex.dis and /dev/null differ diff --git a/dis/sh/sexprs.dis b/dis/sh/sexprs.dis deleted file mode 100644 index 945e2d674..000000000 Binary files a/dis/sh/sexprs.dis and /dev/null differ diff --git a/dis/sh/sh-inferno64.dis b/dis/sh/sh-inferno64.dis deleted file mode 100644 index 45ce2e202..000000000 Binary files a/dis/sh/sh-inferno64.dis and /dev/null differ diff --git a/dis/sh/sh.dis b/dis/sh/sh.dis deleted file mode 100644 index e1c159892..000000000 Binary files a/dis/sh/sh.dis and /dev/null differ diff --git a/dis/sh/std.dis b/dis/sh/std.dis deleted file mode 100644 index 0ea6b67d8..000000000 Binary files a/dis/sh/std.dis and /dev/null differ diff --git a/dis/sh/string.dis b/dis/sh/string.dis deleted file mode 100644 index 93e3047e8..000000000 Binary files a/dis/sh/string.dis and /dev/null differ diff --git a/dis/sh/tk.dis b/dis/sh/tk.dis deleted file mode 100644 index b6cbcd38a..000000000 Binary files a/dis/sh/tk.dis and /dev/null differ diff --git a/dis/sha1sum.dis b/dis/sha1sum.dis deleted file mode 100644 index ee745a1e0..000000000 Binary files a/dis/sha1sum.dis and /dev/null differ diff --git a/dis/sleep.dis b/dis/sleep.dis deleted file mode 100644 index fb8ee068f..000000000 Binary files a/dis/sleep.dis and /dev/null differ diff --git a/dis/slice.dis b/dis/slice.dis deleted file mode 100644 index 30a945c5e..000000000 Binary files a/dis/slice.dis and /dev/null differ diff --git a/dis/slice_subslice.dis b/dis/slice_subslice.dis deleted file mode 100644 index f57ae5a89..000000000 Binary files a/dis/slice_subslice.dis and /dev/null differ diff --git a/dis/snapd.dis b/dis/snapd.dis deleted file mode 100644 index f905e131c..000000000 Binary files a/dis/snapd.dis and /dev/null differ diff --git a/dis/sort.dis b/dis/sort.dis deleted file mode 100644 index e3f508024..000000000 Binary files a/dis/sort.dis and /dev/null differ diff --git a/dis/stack.dis b/dis/stack.dis deleted file mode 100644 index 755bcc5f8..000000000 Binary files a/dis/stack.dis and /dev/null differ diff --git a/dis/stackv.dis b/dis/stackv.dis deleted file mode 100644 index 08aa956cf..000000000 Binary files a/dis/stackv.dis and /dev/null differ diff --git a/dis/strcat.dis b/dis/strcat.dis deleted file mode 100644 index 2e0dda29d..000000000 Binary files a/dis/strcat.dis and /dev/null differ diff --git a/dis/strconv.dis b/dis/strconv.dis deleted file mode 100644 index 5b6c47c16..000000000 Binary files a/dis/strconv.dis and /dev/null differ diff --git a/dis/stream.dis b/dis/stream.dis deleted file mode 100644 index c89f21040..000000000 Binary files a/dis/stream.dis and /dev/null differ diff --git a/dis/string_ops.dis b/dis/string_ops.dis deleted file mode 100644 index f178a82bb..000000000 Binary files a/dis/string_ops.dis and /dev/null differ diff --git a/dis/strings.dis b/dis/strings.dis deleted file mode 100644 index 1aad1e74a..000000000 Binary files a/dis/strings.dis and /dev/null differ diff --git a/dis/strrange.dis b/dis/strrange.dis deleted file mode 100644 index e6aef38c9..000000000 Binary files a/dis/strrange.dis and /dev/null differ diff --git a/dis/styxchat.dis b/dis/styxchat.dis deleted file mode 100644 index 1f78bfc2b..000000000 Binary files a/dis/styxchat.dis and /dev/null differ diff --git a/dis/styxlisten.dis b/dis/styxlisten.dis deleted file mode 100644 index a115b4961..000000000 Binary files a/dis/styxlisten.dis and /dev/null differ diff --git a/dis/styxmon.dis b/dis/styxmon.dis deleted file mode 100644 index 8fd3ebe3a..000000000 Binary files a/dis/styxmon.dis and /dev/null differ diff --git a/dis/sum.dis b/dis/sum.dis deleted file mode 100644 index 760ab65d4..000000000 Binary files a/dis/sum.dis and /dev/null differ diff --git a/dis/svc/httpd/alarms.dis b/dis/svc/httpd/alarms.dis deleted file mode 100644 index b17bbd258..000000000 Binary files a/dis/svc/httpd/alarms.dis and /dev/null differ diff --git a/dis/svc/httpd/cache.dis b/dis/svc/httpd/cache.dis deleted file mode 100644 index 031926f60..000000000 Binary files a/dis/svc/httpd/cache.dis and /dev/null differ diff --git a/dis/svc/httpd/cgiparse.dis b/dis/svc/httpd/cgiparse.dis deleted file mode 100644 index 850e285db..000000000 Binary files a/dis/svc/httpd/cgiparse.dis and /dev/null differ diff --git a/dis/svc/httpd/contents.dis b/dis/svc/httpd/contents.dis deleted file mode 100644 index 7d9843d37..000000000 Binary files a/dis/svc/httpd/contents.dis and /dev/null differ diff --git a/dis/svc/httpd/date.dis b/dis/svc/httpd/date.dis deleted file mode 100644 index 2c3169241..000000000 Binary files a/dis/svc/httpd/date.dis and /dev/null differ diff --git a/dis/svc/httpd/echo.dis b/dis/svc/httpd/echo.dis deleted file mode 100644 index 92ad88af0..000000000 Binary files a/dis/svc/httpd/echo.dis and /dev/null differ diff --git a/dis/svc/httpd/httpd.dis b/dis/svc/httpd/httpd.dis deleted file mode 100644 index d092fdd5d..000000000 Binary files a/dis/svc/httpd/httpd.dis and /dev/null differ diff --git a/dis/svc/httpd/imagemap.dis b/dis/svc/httpd/imagemap.dis deleted file mode 100644 index 9421696fd..000000000 Binary files a/dis/svc/httpd/imagemap.dis and /dev/null differ diff --git a/dis/svc/httpd/parser.dis b/dis/svc/httpd/parser.dis deleted file mode 100644 index 6d38e066c..000000000 Binary files a/dis/svc/httpd/parser.dis and /dev/null differ diff --git a/dis/svc/httpd/redirect.dis b/dis/svc/httpd/redirect.dis deleted file mode 100644 index 1370f240f..000000000 Binary files a/dis/svc/httpd/redirect.dis and /dev/null differ diff --git a/dis/svc/httpd/stats.dis b/dis/svc/httpd/stats.dis deleted file mode 100644 index 37fd86efb..000000000 Binary files a/dis/svc/httpd/stats.dis and /dev/null differ diff --git a/dis/svc/httpd/wikipost.dis b/dis/svc/httpd/wikipost.dis deleted file mode 100644 index 3fce850dc..000000000 Binary files a/dis/svc/httpd/wikipost.dis and /dev/null differ diff --git a/dis/svc/webget/date.dis b/dis/svc/webget/date.dis deleted file mode 100644 index 1c92fc929..000000000 Binary files a/dis/svc/webget/date.dis and /dev/null differ diff --git a/dis/svc/webget/file.dis b/dis/svc/webget/file.dis deleted file mode 100644 index 737840658..000000000 Binary files a/dis/svc/webget/file.dis and /dev/null differ diff --git a/dis/svc/webget/ftp.dis b/dis/svc/webget/ftp.dis deleted file mode 100644 index 305ea8f4c..000000000 Binary files a/dis/svc/webget/ftp.dis and /dev/null differ diff --git a/dis/svc/webget/http.dis b/dis/svc/webget/http.dis deleted file mode 100644 index a11ef0dfb..000000000 Binary files a/dis/svc/webget/http.dis and /dev/null differ diff --git a/dis/svc/webget/image2enc.dis b/dis/svc/webget/image2enc.dis deleted file mode 100644 index 367f7258d..000000000 Binary files a/dis/svc/webget/image2enc.dis and /dev/null differ diff --git a/dis/svc/webget/message.dis b/dis/svc/webget/message.dis deleted file mode 100644 index 4bee1c204..000000000 Binary files a/dis/svc/webget/message.dis and /dev/null differ diff --git a/dis/svc/webget/webget.dis b/dis/svc/webget/webget.dis deleted file mode 100644 index 0f7372071..000000000 Binary files a/dis/svc/webget/webget.dis and /dev/null differ diff --git a/dis/svc/webget/wgutils.dis b/dis/svc/webget/wgutils.dis deleted file mode 100644 index 9a04d4fb6..000000000 Binary files a/dis/svc/webget/wgutils.dis and /dev/null differ diff --git a/dis/switch.dis b/dis/switch.dis deleted file mode 100644 index af2b95c36..000000000 Binary files a/dis/switch.dis and /dev/null differ diff --git a/dis/sysio.dis b/dis/sysio.dis deleted file mode 100644 index 863679772..000000000 Binary files a/dis/sysio.dis and /dev/null differ diff --git a/dis/sysprint.dis b/dis/sysprint.dis deleted file mode 100644 index 389d1ccac..000000000 Binary files a/dis/sysprint.dis and /dev/null differ diff --git a/dis/systime.dis b/dis/systime.dis deleted file mode 100644 index 22e25763a..000000000 Binary files a/dis/systime.dis and /dev/null differ diff --git a/dis/syswrite.dis b/dis/syswrite.dis deleted file mode 100644 index a1125c8f9..000000000 Binary files a/dis/syswrite.dis and /dev/null differ diff --git a/dis/tail.dis b/dis/tail.dis deleted file mode 100644 index 206483f93..000000000 Binary files a/dis/tail.dis and /dev/null differ diff --git a/dis/tarfs.dis b/dis/tarfs.dis deleted file mode 100644 index f1a2f014a..000000000 Binary files a/dis/tarfs.dis and /dev/null differ diff --git a/dis/tcs.dis b/dis/tcs.dis deleted file mode 100644 index af5992a87..000000000 Binary files a/dis/tcs.dis and /dev/null differ diff --git a/dis/tee.dis b/dis/tee.dis deleted file mode 100644 index f2d9fa0f1..000000000 Binary files a/dis/tee.dis and /dev/null differ diff --git a/dis/telnet.dis b/dis/telnet.dis deleted file mode 100644 index 52bcc6d0f..000000000 Binary files a/dis/telnet.dis and /dev/null differ diff --git a/dis/test-sdl3.dis b/dis/test-sdl3.dis deleted file mode 100644 index e56d1b63c..000000000 Binary files a/dis/test-sdl3.dis and /dev/null differ diff --git a/dis/test-tempfile.dis b/dis/test-tempfile.dis deleted file mode 100644 index 717859e82..000000000 Binary files a/dis/test-tempfile.dis and /dev/null differ diff --git a/dis/test.dis b/dis/test.dis deleted file mode 100644 index 89c9d3379..000000000 Binary files a/dis/test.dis and /dev/null differ diff --git a/dis/test9p.dis b/dis/test9p.dis deleted file mode 100644 index 8fa7d7ff7..000000000 Binary files a/dis/test9p.dis and /dev/null differ diff --git a/dis/tests/9p_export_test.dis b/dis/tests/9p_export_test.dis deleted file mode 100644 index a4c5842f8..000000000 Binary files a/dis/tests/9p_export_test.dis and /dev/null differ diff --git a/dis/tests/agent_test.dis b/dis/tests/agent_test.dis deleted file mode 100644 index 76da0702a..000000000 Binary files a/dis/tests/agent_test.dis and /dev/null differ diff --git a/dis/tests/agentlib_mcp_test.dis b/dis/tests/agentlib_mcp_test.dis deleted file mode 100644 index 54fb183e2..000000000 Binary files a/dis/tests/agentlib_mcp_test.dis and /dev/null differ diff --git a/dis/tests/agentlib_test.dis b/dis/tests/agentlib_test.dis deleted file mode 100644 index e980e54fb..000000000 Binary files a/dis/tests/agentlib_test.dis and /dev/null differ diff --git a/dis/tests/alpha_test.dis b/dis/tests/alpha_test.dis deleted file mode 100644 index 02458287e..000000000 Binary files a/dis/tests/alpha_test.dis and /dev/null differ diff --git a/dis/tests/arrayinit_test.dis b/dis/tests/arrayinit_test.dis deleted file mode 100644 index 7fb045e4c..000000000 Binary files a/dis/tests/arrayinit_test.dis and /dev/null differ diff --git a/dis/tests/asyncio_test.dis b/dis/tests/asyncio_test.dis deleted file mode 100644 index 936e2e249..000000000 Binary files a/dis/tests/asyncio_test.dis and /dev/null differ diff --git a/dis/tests/auditchain_test.dis b/dis/tests/auditchain_test.dis deleted file mode 100644 index 8712d2682..000000000 Binary files a/dis/tests/auditchain_test.dis and /dev/null differ diff --git a/dis/tests/auditprov_test.dis b/dis/tests/auditprov_test.dis deleted file mode 100644 index d0268b4f0..000000000 Binary files a/dis/tests/auditprov_test.dis and /dev/null differ diff --git a/dis/tests/auditsign_test.dis b/dis/tests/auditsign_test.dis deleted file mode 100644 index 0e31b5904..000000000 Binary files a/dis/tests/auditsign_test.dis and /dev/null differ diff --git a/dis/tests/auditverify_test.dis b/dis/tests/auditverify_test.dis deleted file mode 100644 index 9c50d888a..000000000 Binary files a/dis/tests/auditverify_test.dis and /dev/null differ diff --git a/dis/tests/authneg_test.dis b/dis/tests/authneg_test.dis deleted file mode 100644 index 14b17b04a..000000000 Binary files a/dis/tests/authneg_test.dis and /dev/null differ diff --git a/dis/tests/awk_test.dis b/dis/tests/awk_test.dis deleted file mode 100644 index aa1985f88..000000000 Binary files a/dis/tests/awk_test.dis and /dev/null differ diff --git a/dis/tests/bioauth_test.dis b/dis/tests/bioauth_test.dis deleted file mode 100644 index ec5ae8224..000000000 Binary files a/dis/tests/bioauth_test.dis and /dev/null differ diff --git a/dis/tests/bufio_test.dis b/dis/tests/bufio_test.dis deleted file mode 100644 index 490b24f5e..000000000 Binary files a/dis/tests/bufio_test.dis and /dev/null differ diff --git a/dis/tests/casel_test.dis b/dis/tests/casel_test.dis deleted file mode 100644 index 0adb49da8..000000000 Binary files a/dis/tests/casel_test.dis and /dev/null differ diff --git a/dis/tests/cipher_matrix_test.dis b/dis/tests/cipher_matrix_test.dis deleted file mode 100644 index d065b9e69..000000000 Binary files a/dis/tests/cipher_matrix_test.dis and /dev/null differ diff --git a/dis/tests/concurrency_test.dis b/dis/tests/concurrency_test.dis deleted file mode 100644 index 65a32a80b..000000000 Binary files a/dis/tests/concurrency_test.dis and /dev/null differ diff --git a/dis/tests/concurrent_auth_test.dis b/dis/tests/concurrent_auth_test.dis deleted file mode 100644 index 46a38293d..000000000 Binary files a/dis/tests/concurrent_auth_test.dis and /dev/null differ diff --git a/dis/tests/contacts_tool_test.dis b/dis/tests/contacts_tool_test.dis deleted file mode 100644 index 789d5b388..000000000 Binary files a/dis/tests/contacts_tool_test.dis and /dev/null differ diff --git a/dis/tests/cookiesrv_httponly_test.dis b/dis/tests/cookiesrv_httponly_test.dis deleted file mode 100644 index 4a84bd99f..000000000 Binary files a/dis/tests/cookiesrv_httponly_test.dis and /dev/null differ diff --git a/dis/tests/cowfs_test.dis b/dis/tests/cowfs_test.dis deleted file mode 100644 index d0ca6f475..000000000 Binary files a/dis/tests/cowfs_test.dis and /dev/null differ diff --git a/dis/tests/crypto_props_test.dis b/dis/tests/crypto_props_test.dis deleted file mode 100644 index 92956d7b4..000000000 Binary files a/dis/tests/crypto_props_test.dis and /dev/null differ diff --git a/dis/tests/crypto_test.dis b/dis/tests/crypto_test.dis deleted file mode 100644 index fc0dd7f17..000000000 Binary files a/dis/tests/crypto_test.dis and /dev/null differ diff --git a/dis/tests/cut_test.dis b/dis/tests/cut_test.dis deleted file mode 100644 index 1f870fba6..000000000 Binary files a/dis/tests/cut_test.dis and /dev/null differ diff --git a/dis/tests/delegation_budget_test.dis b/dis/tests/delegation_budget_test.dis deleted file mode 100644 index b8083f1b2..000000000 Binary files a/dis/tests/delegation_budget_test.dis and /dev/null differ diff --git a/dis/tests/dial_test.dis b/dis/tests/dial_test.dis deleted file mode 100644 index 8e41be349..000000000 Binary files a/dis/tests/dial_test.dis and /dev/null differ diff --git a/dis/tests/dialnorm_test.dis b/dis/tests/dialnorm_test.dis deleted file mode 100644 index 9b09a70eb..000000000 Binary files a/dis/tests/dialnorm_test.dis and /dev/null differ diff --git a/dis/tests/edit_test.dis b/dis/tests/edit_test.dis deleted file mode 100644 index 1a35f3414..000000000 Binary files a/dis/tests/edit_test.dis and /dev/null differ diff --git a/dis/tests/editor_test.dis b/dis/tests/editor_test.dis deleted file mode 100644 index 263e357ec..000000000 Binary files a/dis/tests/editor_test.dis and /dev/null differ diff --git a/dis/tests/ethcrypto_test.dis b/dis/tests/ethcrypto_test.dis deleted file mode 100644 index 6fd573c29..000000000 Binary files a/dis/tests/ethcrypto_test.dis and /dev/null differ diff --git a/dis/tests/ethrpc_conv_test.dis b/dis/tests/ethrpc_conv_test.dis deleted file mode 100644 index 087abd780..000000000 Binary files a/dis/tests/ethrpc_conv_test.dis and /dev/null differ diff --git a/dis/tests/example_test.dis b/dis/tests/example_test.dis deleted file mode 100644 index f90349063..000000000 Binary files a/dis/tests/example_test.dis and /dev/null differ diff --git a/dis/tests/factotum_test.dis b/dis/tests/factotum_test.dis deleted file mode 100644 index a575f35da..000000000 Binary files a/dis/tests/factotum_test.dis and /dev/null differ diff --git a/dis/tests/font_format_test.dis b/dis/tests/font_format_test.dis deleted file mode 100644 index 3b6a0ad26..000000000 Binary files a/dis/tests/font_format_test.dis and /dev/null differ diff --git a/dis/tests/fractal_tool_test.dis b/dis/tests/fractal_tool_test.dis deleted file mode 100644 index 000fabeec..000000000 Binary files a/dis/tests/fractal_tool_test.dis and /dev/null differ diff --git a/dis/tests/geomap_test.dis b/dis/tests/geomap_test.dis deleted file mode 100644 index d5ad8c0e7..000000000 Binary files a/dis/tests/geomap_test.dis and /dev/null differ diff --git a/dis/tests/git_test.dis b/dis/tests/git_test.dis deleted file mode 100644 index 6bf792567..000000000 Binary files a/dis/tests/git_test.dis and /dev/null differ diff --git a/dis/tests/goroutine_leak_test.dis b/dis/tests/goroutine_leak_test.dis deleted file mode 100644 index f6260939a..000000000 Binary files a/dis/tests/goroutine_leak_test.dis and /dev/null differ diff --git a/dis/tests/gpu_bench.dis b/dis/tests/gpu_bench.dis deleted file mode 100644 index f67f5484a..000000000 Binary files a/dis/tests/gpu_bench.dis and /dev/null differ diff --git a/dis/tests/gpu_smoke.dis b/dis/tests/gpu_smoke.dis deleted file mode 100644 index 2f92e13de..000000000 Binary files a/dis/tests/gpu_smoke.dis and /dev/null differ diff --git a/dis/tests/gpu_test.dis b/dis/tests/gpu_test.dis deleted file mode 100644 index 21442a970..000000000 Binary files a/dis/tests/gpu_test.dis and /dev/null differ diff --git a/dis/tests/handshake_fuzz_test.dis b/dis/tests/handshake_fuzz_test.dis deleted file mode 100644 index 3d4a5f1a4..000000000 Binary files a/dis/tests/handshake_fuzz_test.dis and /dev/null differ diff --git a/dis/tests/hello_test.dis b/dis/tests/hello_test.dis deleted file mode 100644 index ddfe635a6..000000000 Binary files a/dis/tests/hello_test.dis and /dev/null differ diff --git a/dis/tests/html_test.dis b/dis/tests/html_test.dis deleted file mode 100644 index 4a7a1e042..000000000 Binary files a/dis/tests/html_test.dis and /dev/null differ diff --git a/dis/tests/ics_test.dis b/dis/tests/ics_test.dis deleted file mode 100644 index 5d956e9c0..000000000 Binary files a/dis/tests/ics_test.dis and /dev/null differ diff --git a/dis/tests/imap_test.dis b/dis/tests/imap_test.dis deleted file mode 100644 index 035ccad1b..000000000 Binary files a/dis/tests/imap_test.dis and /dev/null differ diff --git a/dis/tests/imgload_test.dis b/dis/tests/imgload_test.dis deleted file mode 100644 index 259cb06a9..000000000 Binary files a/dis/tests/imgload_test.dis and /dev/null differ diff --git a/dis/tests/interop_test.dis b/dis/tests/interop_test.dis deleted file mode 100644 index 5bcb06199..000000000 Binary files a/dis/tests/interop_test.dis and /dev/null differ diff --git a/dis/tests/interrupt_test.dis b/dis/tests/interrupt_test.dis deleted file mode 100644 index c44aa2a22..000000000 Binary files a/dis/tests/interrupt_test.dis and /dev/null differ diff --git a/dis/tests/jit_test.dis b/dis/tests/jit_test.dis deleted file mode 100644 index a206e35e8..000000000 Binary files a/dis/tests/jit_test.dis and /dev/null differ diff --git a/dis/tests/json_test.dis b/dis/tests/json_test.dis deleted file mode 100644 index 75b003a42..000000000 Binary files a/dis/tests/json_test.dis and /dev/null differ diff --git a/dis/tests/kbddrainer_test.dis b/dis/tests/kbddrainer_test.dis deleted file mode 100644 index 4b9f850ea..000000000 Binary files a/dis/tests/kbddrainer_test.dis and /dev/null differ diff --git a/dis/tests/keyring_test.dis b/dis/tests/keyring_test.dis deleted file mode 100644 index d3aac5cdd..000000000 Binary files a/dis/tests/keyring_test.dis and /dev/null differ diff --git a/dis/tests/keyringinst_test.dis b/dis/tests/keyringinst_test.dis deleted file mode 100644 index 73efc24e9..000000000 Binary files a/dis/tests/keyringinst_test.dis and /dev/null differ diff --git a/dis/tests/lists_test.dis b/dis/tests/lists_test.dis deleted file mode 100644 index c846e9c17..000000000 Binary files a/dis/tests/lists_test.dis and /dev/null differ diff --git a/dis/tests/llmclient_reqshape_test.dis b/dis/tests/llmclient_reqshape_test.dis deleted file mode 100644 index 91e208227..000000000 Binary files a/dis/tests/llmclient_reqshape_test.dis and /dev/null differ diff --git a/dis/tests/llmclient_sse_fallback_test.dis b/dis/tests/llmclient_sse_fallback_test.dis deleted file mode 100644 index 2e26a4793..000000000 Binary files a/dis/tests/llmclient_sse_fallback_test.dis and /dev/null differ diff --git a/dis/tests/llmclient_think_gating_test.dis b/dis/tests/llmclient_think_gating_test.dis deleted file mode 100644 index e1aa8b6db..000000000 Binary files a/dis/tests/llmclient_think_gating_test.dis and /dev/null differ diff --git a/dis/tests/llmsrv_test.dis b/dis/tests/llmsrv_test.dis deleted file mode 100644 index ca3dd1bbb..000000000 Binary files a/dis/tests/llmsrv_test.dis and /dev/null differ diff --git a/dis/tests/lucibridge_approval_test.dis b/dis/tests/lucibridge_approval_test.dis deleted file mode 100644 index 0cdc61419..000000000 Binary files a/dis/tests/lucibridge_approval_test.dis and /dev/null differ diff --git a/dis/tests/lucibridge_test.dis b/dis/tests/lucibridge_test.dis deleted file mode 100644 index 3542beb23..000000000 Binary files a/dis/tests/lucibridge_test.dis and /dev/null differ diff --git a/dis/tests/lucifer_flicker_test.dis b/dis/tests/lucifer_flicker_test.dis deleted file mode 100644 index d596dbb25..000000000 Binary files a/dis/tests/lucifer_flicker_test.dis and /dev/null differ diff --git a/dis/tests/lucifer_helpers_test.dis b/dis/tests/lucifer_helpers_test.dis deleted file mode 100644 index c75e408c2..000000000 Binary files a/dis/tests/lucifer_helpers_test.dis and /dev/null differ diff --git a/dis/tests/lucifer_winstart_test.dis b/dis/tests/lucifer_winstart_test.dis deleted file mode 100644 index 4c0cbfb56..000000000 Binary files a/dis/tests/lucifer_winstart_test.dis and /dev/null differ diff --git a/dis/tests/lucifer_zorder_test.dis b/dis/tests/lucifer_zorder_test.dis deleted file mode 100644 index ec410ce35..000000000 Binary files a/dis/tests/lucifer_zorder_test.dis and /dev/null differ diff --git a/dis/tests/lucitheme_test.dis b/dis/tests/lucitheme_test.dis deleted file mode 100644 index 74d4b5b49..000000000 Binary files a/dis/tests/lucitheme_test.dis and /dev/null differ diff --git a/dis/tests/luciuisrv_test.dis b/dis/tests/luciuisrv_test.dis deleted file mode 100644 index f86cbd695..000000000 Binary files a/dis/tests/luciuisrv_test.dis and /dev/null differ diff --git a/dis/tests/mail9p_test.dis b/dis/tests/mail9p_test.dis deleted file mode 100644 index 3887c0af4..000000000 Binary files a/dis/tests/mail9p_test.dis and /dev/null differ diff --git a/dis/tests/mail_provision_test.dis b/dis/tests/mail_provision_test.dis deleted file mode 100644 index 3d199b9ef..000000000 Binary files a/dis/tests/mail_provision_test.dis and /dev/null differ diff --git a/dis/tests/matrix_perfdashboard_test.dis b/dis/tests/matrix_perfdashboard_test.dis deleted file mode 100644 index 3c0da5dde..000000000 Binary files a/dis/tests/matrix_perfdashboard_test.dis and /dev/null differ diff --git a/dis/tests/matrix_sysmon_test.dis b/dis/tests/matrix_sysmon_test.dis deleted file mode 100644 index 28bbab019..000000000 Binary files a/dis/tests/matrix_sysmon_test.dis and /dev/null differ diff --git a/dis/tests/matrix_test.dis b/dis/tests/matrix_test.dis deleted file mode 100644 index a0861cdf7..000000000 Binary files a/dis/tests/matrix_test.dis and /dev/null differ diff --git a/dis/tests/menu_test.dis b/dis/tests/menu_test.dis deleted file mode 100644 index f9bd53297..000000000 Binary files a/dis/tests/menu_test.dis and /dev/null differ diff --git a/dis/tests/mldsa_stress_test.dis b/dis/tests/mldsa_stress_test.dis deleted file mode 100644 index 833cdbdc6..000000000 Binary files a/dis/tests/mldsa_stress_test.dis and /dev/null differ diff --git a/dis/tests/mldsa_test.dis b/dis/tests/mldsa_test.dis deleted file mode 100644 index 58673ba2b..000000000 Binary files a/dis/tests/mldsa_test.dis and /dev/null differ diff --git a/dis/tests/mlkem_stress_test.dis b/dis/tests/mlkem_stress_test.dis deleted file mode 100644 index a27a44463..000000000 Binary files a/dis/tests/mlkem_stress_test.dis and /dev/null differ diff --git a/dis/tests/mlkem_test.dis b/dis/tests/mlkem_test.dis deleted file mode 100644 index a4bbe7305..000000000 Binary files a/dis/tests/mlkem_test.dis and /dev/null differ diff --git a/dis/tests/msg_approval_test.dis b/dis/tests/msg_approval_test.dis deleted file mode 100644 index eb70ab080..000000000 Binary files a/dis/tests/msg_approval_test.dis and /dev/null differ diff --git a/dis/tests/msg_badsrc.dis b/dis/tests/msg_badsrc.dis deleted file mode 100644 index 8f13d30e4..000000000 Binary files a/dis/tests/msg_badsrc.dis and /dev/null differ diff --git a/dis/tests/msg_capability_test.dis b/dis/tests/msg_capability_test.dis deleted file mode 100644 index b55ba4454..000000000 Binary files a/dis/tests/msg_capability_test.dis and /dev/null differ diff --git a/dis/tests/msg_notification_escape_test.dis b/dis/tests/msg_notification_escape_test.dis deleted file mode 100644 index ef01942b7..000000000 Binary files a/dis/tests/msg_notification_escape_test.dis and /dev/null differ diff --git a/dis/tests/msg_register_test.dis b/dis/tests/msg_register_test.dis deleted file mode 100644 index 6ed09bb5b..000000000 Binary files a/dis/tests/msg_register_test.dis and /dev/null differ diff --git a/dis/tests/ninepsrc_config_test.dis b/dis/tests/ninepsrc_config_test.dis deleted file mode 100644 index 48439930c..000000000 Binary files a/dis/tests/ninepsrc_config_test.dis and /dev/null differ diff --git a/dis/tests/opus_test.dis b/dis/tests/opus_test.dis deleted file mode 100644 index 7a2e126bc..000000000 Binary files a/dis/tests/opus_test.dis and /dev/null differ diff --git a/dis/tests/outlinefont_test.dis b/dis/tests/outlinefont_test.dis deleted file mode 100644 index 9e483c389..000000000 Binary files a/dis/tests/outlinefont_test.dis and /dev/null differ diff --git a/dis/tests/pathmanage_test.dis b/dis/tests/pathmanage_test.dis deleted file mode 100644 index 3bc5d6f51..000000000 Binary files a/dis/tests/pathmanage_test.dis and /dev/null differ diff --git a/dis/tests/pdf_conformance_test.dis b/dis/tests/pdf_conformance_test.dis deleted file mode 100644 index a38fe234a..000000000 Binary files a/dis/tests/pdf_conformance_test.dis and /dev/null differ diff --git a/dis/tests/pdf_test.dis b/dis/tests/pdf_test.dis deleted file mode 100644 index 59bdaf7af..000000000 Binary files a/dis/tests/pdf_test.dis and /dev/null differ diff --git a/dis/tests/pqauth_test.dis b/dis/tests/pqauth_test.dis deleted file mode 100644 index f2cb8f39e..000000000 Binary files a/dis/tests/pqauth_test.dis and /dev/null differ diff --git a/dis/tests/pqc_fuzz_test.dis b/dis/tests/pqc_fuzz_test.dis deleted file mode 100644 index 6ad844914..000000000 Binary files a/dis/tests/pqc_fuzz_test.dis and /dev/null differ diff --git a/dis/tests/pres_launch_test.dis b/dis/tests/pres_launch_test.dis deleted file mode 100644 index daf5026f2..000000000 Binary files a/dis/tests/pres_launch_test.dis and /dev/null differ diff --git a/dis/tests/publicnet_host_test.dis b/dis/tests/publicnet_host_test.dis deleted file mode 100644 index 89eda091d..000000000 Binary files a/dis/tests/publicnet_host_test.dis and /dev/null differ diff --git a/dis/tests/publicnet_test.dis b/dis/tests/publicnet_test.dis deleted file mode 100644 index e16281b67..000000000 Binary files a/dis/tests/publicnet_test.dis and /dev/null differ diff --git a/dis/tests/regex_test.dis b/dis/tests/regex_test.dis deleted file mode 100644 index 8525b956c..000000000 Binary files a/dis/tests/regex_test.dis and /dev/null differ diff --git a/dis/tests/render_registry_test.dis b/dis/tests/render_registry_test.dis deleted file mode 100644 index 91c95b69c..000000000 Binary files a/dis/tests/render_registry_test.dis and /dev/null differ diff --git a/dis/tests/runner.dis b/dis/tests/runner.dis deleted file mode 100644 index a2d3b4e9e..000000000 Binary files a/dis/tests/runner.dis and /dev/null differ diff --git a/dis/tests/sdl3_test.dis b/dis/tests/sdl3_test.dis deleted file mode 100644 index b6cf14697..000000000 Binary files a/dis/tests/sdl3_test.dis and /dev/null differ diff --git a/dis/tests/secp256k1_test.dis b/dis/tests/secp256k1_test.dis deleted file mode 100644 index 4e3c9cc50..000000000 Binary files a/dis/tests/secp256k1_test.dis and /dev/null differ diff --git a/dis/tests/secstore_abort_probe.dis b/dis/tests/secstore_abort_probe.dis deleted file mode 100644 index 463c4d3c7..000000000 Binary files a/dis/tests/secstore_abort_probe.dis and /dev/null differ diff --git a/dis/tests/secstore_crypto_test.dis b/dis/tests/secstore_crypto_test.dis deleted file mode 100644 index b04721eb1..000000000 Binary files a/dis/tests/secstore_crypto_test.dis and /dev/null differ diff --git a/dis/tests/sha3_test.dis b/dis/tests/sha3_test.dis deleted file mode 100644 index d21b07891..000000000 Binary files a/dis/tests/sha3_test.dis and /dev/null differ diff --git a/dis/tests/shell_tool_test.dis b/dis/tests/shell_tool_test.dis deleted file mode 100644 index 452ff5255..000000000 Binary files a/dis/tests/shell_tool_test.dis and /dev/null differ diff --git a/dis/tests/slhdsa_test.dis b/dis/tests/slhdsa_test.dis deleted file mode 100644 index cc815c47f..000000000 Binary files a/dis/tests/slhdsa_test.dis and /dev/null differ diff --git a/dis/tests/sms_msgsrc_test.dis b/dis/tests/sms_msgsrc_test.dis deleted file mode 100644 index 5202fa6b4..000000000 Binary files a/dis/tests/sms_msgsrc_test.dis and /dev/null differ diff --git a/dis/tests/sms_tool_test.dis b/dis/tests/sms_tool_test.dis deleted file mode 100644 index 5a47dfe47..000000000 Binary files a/dis/tests/sms_tool_test.dis and /dev/null differ diff --git a/dis/tests/softkbd_test.dis b/dis/tests/softkbd_test.dis deleted file mode 100644 index 68c830b57..000000000 Binary files a/dis/tests/softkbd_test.dis and /dev/null differ diff --git a/dis/tests/sort_test.dis b/dis/tests/sort_test.dis deleted file mode 100644 index bba07dfcc..000000000 Binary files a/dis/tests/sort_test.dis and /dev/null differ diff --git a/dis/tests/spawn_helpers_test.dis b/dis/tests/spawn_helpers_test.dis deleted file mode 100644 index a175efe19..000000000 Binary files a/dis/tests/spawn_helpers_test.dis and /dev/null differ diff --git a/dis/tests/spawn_test.dis b/dis/tests/spawn_test.dis deleted file mode 100644 index 6d3182d03..000000000 Binary files a/dis/tests/spawn_test.dis and /dev/null differ diff --git a/dis/tests/ssl_transport_test.dis b/dis/tests/ssl_transport_test.dis deleted file mode 100644 index 3c416d340..000000000 Binary files a/dis/tests/ssl_transport_test.dis and /dev/null differ diff --git a/dis/tests/stderr_test.dis b/dis/tests/stderr_test.dis deleted file mode 100644 index 125f75b34..000000000 Binary files a/dis/tests/stderr_test.dis and /dev/null differ diff --git a/dis/tests/string_test.dis b/dis/tests/string_test.dis deleted file mode 100644 index 24eaf1696..000000000 Binary files a/dis/tests/string_test.dis and /dev/null differ diff --git a/dis/tests/task_concurrent_probe.dis b/dis/tests/task_concurrent_probe.dis deleted file mode 100644 index 5c9157389..000000000 Binary files a/dis/tests/task_concurrent_probe.dis and /dev/null differ diff --git a/dis/tests/task_consistency_test.dis b/dis/tests/task_consistency_test.dis deleted file mode 100644 index ef33c90b1..000000000 Binary files a/dis/tests/task_consistency_test.dis and /dev/null differ diff --git a/dis/tests/taskparse_test.dis b/dis/tests/taskparse_test.dis deleted file mode 100644 index f637e58a7..000000000 Binary files a/dis/tests/taskparse_test.dis and /dev/null differ diff --git a/dis/tests/tcp_test.dis b/dis/tests/tcp_test.dis deleted file mode 100644 index bd6df9951..000000000 Binary files a/dis/tests/tcp_test.dis and /dev/null differ diff --git a/dis/tests/tempfile_test.dis b/dis/tests/tempfile_test.dis deleted file mode 100644 index 828f14b40..000000000 Binary files a/dis/tests/tempfile_test.dis and /dev/null differ diff --git a/dis/tests/testing/testing_test.dis b/dis/tests/testing/testing_test.dis deleted file mode 100644 index 649530496..000000000 Binary files a/dis/tests/testing/testing_test.dis and /dev/null differ diff --git a/dis/tests/textwidget_test.dis b/dis/tests/textwidget_test.dis deleted file mode 100644 index 547abaa50..000000000 Binary files a/dis/tests/textwidget_test.dis and /dev/null differ diff --git a/dis/tests/tk_test.dis b/dis/tests/tk_test.dis deleted file mode 100644 index dcddd147d..000000000 Binary files a/dis/tests/tk_test.dis and /dev/null differ diff --git a/dis/tests/tkimgrender.dis b/dis/tests/tkimgrender.dis deleted file mode 100644 index 919cec676..000000000 Binary files a/dis/tests/tkimgrender.dis and /dev/null differ diff --git a/dis/tests/tkrender.dis b/dis/tests/tkrender.dis deleted file mode 100644 index 045d8a3ac..000000000 Binary files a/dis/tests/tkrender.dis and /dev/null differ diff --git a/dis/tests/tls_crypto_test.dis b/dis/tests/tls_crypto_test.dis deleted file mode 100644 index 3603164cf..000000000 Binary files a/dis/tests/tls_crypto_test.dis and /dev/null differ diff --git a/dis/tests/tls_live_test.dis b/dis/tests/tls_live_test.dis deleted file mode 100644 index b09d1f393..000000000 Binary files a/dis/tests/tls_live_test.dis and /dev/null differ diff --git a/dis/tests/tls_pq_test.dis b/dis/tests/tls_pq_test.dis deleted file mode 100644 index 7a49936f0..000000000 Binary files a/dis/tests/tls_pq_test.dis and /dev/null differ diff --git a/dis/tests/tls_protocol_test.dis b/dis/tests/tls_protocol_test.dis deleted file mode 100644 index b3ba66103..000000000 Binary files a/dis/tests/tls_protocol_test.dis and /dev/null differ diff --git a/dis/tests/tlsclient.dis b/dis/tests/tlsclient.dis deleted file mode 100644 index 1518eda9b..000000000 Binary files a/dis/tests/tlsclient.dis and /dev/null differ diff --git a/dis/tests/todo9p_test.dis b/dis/tests/todo9p_test.dis deleted file mode 100644 index bf21e049d..000000000 Binary files a/dis/tests/todo9p_test.dis and /dev/null differ diff --git a/dis/tests/tool_schema_test.dis b/dis/tests/tool_schema_test.dis deleted file mode 100644 index 88961b3e4..000000000 Binary files a/dis/tests/tool_schema_test.dis and /dev/null differ diff --git a/dis/tests/tooldoc_test.dis b/dis/tests/tooldoc_test.dis deleted file mode 100644 index 38138a536..000000000 Binary files a/dis/tests/tooldoc_test.dis and /dev/null differ diff --git a/dis/tests/tools9p_test.dis b/dis/tests/tools9p_test.dis deleted file mode 100644 index c5f2f0a49..000000000 Binary files a/dis/tests/tools9p_test.dis and /dev/null differ diff --git a/dis/tests/tooluse_test.dis b/dis/tests/tooluse_test.dis deleted file mode 100644 index 81f663610..000000000 Binary files a/dis/tests/tooluse_test.dis and /dev/null differ diff --git a/dis/tests/twofaslot_test.dis b/dis/tests/twofaslot_test.dis deleted file mode 100644 index 1645075be..000000000 Binary files a/dis/tests/twofaslot_test.dis and /dev/null differ diff --git a/dis/tests/veltro_cc_alignment_test.dis b/dis/tests/veltro_cc_alignment_test.dis deleted file mode 100644 index e71c44f7a..000000000 Binary files a/dis/tests/veltro_cc_alignment_test.dis and /dev/null differ diff --git a/dis/tests/veltro_charon_security_test.dis b/dis/tests/veltro_charon_security_test.dis deleted file mode 100644 index 2d92210c1..000000000 Binary files a/dis/tests/veltro_charon_security_test.dis and /dev/null differ diff --git a/dis/tests/veltro_concurrent_test.dis b/dis/tests/veltro_concurrent_test.dis deleted file mode 100644 index 87ce38616..000000000 Binary files a/dis/tests/veltro_concurrent_test.dis and /dev/null differ diff --git a/dis/tests/veltro_launch_test.dis b/dis/tests/veltro_launch_test.dis deleted file mode 100644 index 2ccbbfc08..000000000 Binary files a/dis/tests/veltro_launch_test.dis and /dev/null differ diff --git a/dis/tests/veltro_more_tools_test.dis b/dis/tests/veltro_more_tools_test.dis deleted file mode 100644 index ca5c03afa..000000000 Binary files a/dis/tests/veltro_more_tools_test.dis and /dev/null differ diff --git a/dis/tests/veltro_present_security_test.dis b/dis/tests/veltro_present_security_test.dis deleted file mode 100644 index af5e0d5ed..000000000 Binary files a/dis/tests/veltro_present_security_test.dis and /dev/null differ diff --git a/dis/tests/veltro_safeexec_test.dis b/dis/tests/veltro_safeexec_test.dis deleted file mode 100644 index 722435ba6..000000000 Binary files a/dis/tests/veltro_safeexec_test.dis and /dev/null differ diff --git a/dis/tests/veltro_security_test.dis b/dis/tests/veltro_security_test.dis deleted file mode 100644 index 04526c6b8..000000000 Binary files a/dis/tests/veltro_security_test.dis and /dev/null differ diff --git a/dis/tests/veltro_test.dis b/dis/tests/veltro_test.dis deleted file mode 100644 index 7e4ee4640..000000000 Binary files a/dis/tests/veltro_test.dis and /dev/null differ diff --git a/dis/tests/veltro_tools_test.dis b/dis/tests/veltro_tools_test.dis deleted file mode 100644 index 906e7f963..000000000 Binary files a/dis/tests/veltro_tools_test.dis and /dev/null differ diff --git a/dis/tests/voice_scripts_test.dis b/dis/tests/voice_scripts_test.dis deleted file mode 100644 index 1eb8d04f3..000000000 Binary files a/dis/tests/voice_scripts_test.dis and /dev/null differ diff --git a/dis/tests/wallet_capability_test.dis b/dis/tests/wallet_capability_test.dis deleted file mode 100644 index e7c304444..000000000 Binary files a/dis/tests/wallet_capability_test.dis and /dev/null differ diff --git a/dis/tests/wallet_policy_test.dis b/dis/tests/wallet_policy_test.dis deleted file mode 100644 index 38e159cb5..000000000 Binary files a/dis/tests/wallet_policy_test.dis and /dev/null differ diff --git a/dis/tests/webclient_test.dis b/dis/tests/webclient_test.dis deleted file mode 100644 index 399e0cb14..000000000 Binary files a/dis/tests/webclient_test.dis and /dev/null differ diff --git a/dis/tests/webfs_test.dis b/dis/tests/webfs_test.dis deleted file mode 100644 index 464030fd7..000000000 Binary files a/dis/tests/webfs_test.dis and /dev/null differ diff --git a/dis/tests/widget_kbdfilter_test.dis b/dis/tests/widget_kbdfilter_test.dis deleted file mode 100644 index ee6e17af3..000000000 Binary files a/dis/tests/widget_kbdfilter_test.dis and /dev/null differ diff --git a/dis/tests/widget_scrollbar_test.dis b/dis/tests/widget_scrollbar_test.dis deleted file mode 100644 index 235f53f88..000000000 Binary files a/dis/tests/widget_scrollbar_test.dis and /dev/null differ diff --git a/dis/tests/wiki9p_security_probe.dis b/dis/tests/wiki9p_security_probe.dis deleted file mode 100644 index d431f31bf..000000000 Binary files a/dis/tests/wiki9p_security_probe.dis and /dev/null differ diff --git a/dis/tests/wireformat_test.dis b/dis/tests/wireformat_test.dis deleted file mode 100644 index 283142afe..000000000 Binary files a/dis/tests/wireformat_test.dis and /dev/null differ diff --git a/dis/tests/wm_apps_test.dis b/dis/tests/wm_apps_test.dis deleted file mode 100644 index c97f57b33..000000000 Binary files a/dis/tests/wm_apps_test.dis and /dev/null differ diff --git a/dis/tests/wmsrv_zorder_test.dis b/dis/tests/wmsrv_zorder_test.dis deleted file mode 100644 index bb624a8dc..000000000 Binary files a/dis/tests/wmsrv_zorder_test.dis and /dev/null differ diff --git a/dis/tests/x402_test.dis b/dis/tests/x402_test.dis deleted file mode 100644 index 1fb2d5b1d..000000000 Binary files a/dis/tests/x402_test.dis and /dev/null differ diff --git a/dis/tests/x509_test.dis b/dis/tests/x509_test.dis deleted file mode 100644 index 03c0cc847..000000000 Binary files a/dis/tests/x509_test.dis and /dev/null differ diff --git a/dis/tests/xenith_concurrency_test.dis b/dis/tests/xenith_concurrency_test.dis deleted file mode 100644 index f25591fa3..000000000 Binary files a/dis/tests/xenith_concurrency_test.dis and /dev/null differ diff --git a/dis/tests/xenith_exit_test.dis b/dis/tests/xenith_exit_test.dis deleted file mode 100644 index a1b68bd51..000000000 Binary files a/dis/tests/xenith_exit_test.dis and /dev/null differ diff --git a/dis/tests/xml_test.dis b/dis/tests/xml_test.dis deleted file mode 100644 index 943564a7e..000000000 Binary files a/dis/tests/xml_test.dis and /dev/null differ diff --git a/dis/time.dis b/dis/time.dis deleted file mode 100644 index 2fc04fcc9..000000000 Binary files a/dis/time.dis and /dev/null differ diff --git a/dis/timestamp.dis b/dis/timestamp.dis deleted file mode 100644 index f71b059f9..000000000 Binary files a/dis/timestamp.dis and /dev/null differ diff --git a/dis/tlsperf.dis b/dis/tlsperf.dis deleted file mode 100644 index 882cee19e..000000000 Binary files a/dis/tlsperf.dis and /dev/null differ diff --git a/dis/tokenize.dis b/dis/tokenize.dis deleted file mode 100644 index 5159aecf8..000000000 Binary files a/dis/tokenize.dis and /dev/null differ diff --git a/dis/touch.dis b/dis/touch.dis deleted file mode 100644 index efc4a84ad..000000000 Binary files a/dis/touch.dis and /dev/null differ diff --git a/dis/tr.dis b/dis/tr.dis deleted file mode 100644 index b663736fd..000000000 Binary files a/dis/tr.dis and /dev/null differ diff --git a/dis/trfs.dis b/dis/trfs.dis deleted file mode 100644 index e2724d5fb..000000000 Binary files a/dis/trfs.dis and /dev/null differ diff --git a/dis/tsort.dis b/dis/tsort.dis deleted file mode 100644 index 9a707a814..000000000 Binary files a/dis/tsort.dis and /dev/null differ diff --git a/dis/typeassert.dis b/dis/typeassert.dis deleted file mode 100644 index e065dae50..000000000 Binary files a/dis/typeassert.dis and /dev/null differ diff --git a/dis/unicode.dis b/dis/unicode.dis deleted file mode 100644 index 43bc4754d..000000000 Binary files a/dis/unicode.dis and /dev/null differ diff --git a/dis/uniq.dis b/dis/uniq.dis deleted file mode 100644 index 3d0a5b1c2..000000000 Binary files a/dis/uniq.dis and /dev/null differ diff --git a/dis/units.dis b/dis/units.dis deleted file mode 100644 index 4446abcca..000000000 Binary files a/dis/units.dis and /dev/null differ diff --git a/dis/unmount.dis b/dis/unmount.dis deleted file mode 100644 index 0c6b0f1f2..000000000 Binary files a/dis/unmount.dis and /dev/null differ diff --git a/dis/uudecode.dis b/dis/uudecode.dis deleted file mode 100644 index ec8eddc6a..000000000 Binary files a/dis/uudecode.dis and /dev/null differ diff --git a/dis/uuencode.dis b/dis/uuencode.dis deleted file mode 100644 index 1a8eba252..000000000 Binary files a/dis/uuencode.dis and /dev/null differ diff --git a/dis/vacfs.dis b/dis/vacfs.dis deleted file mode 100644 index e0510bba7..000000000 Binary files a/dis/vacfs.dis and /dev/null differ diff --git a/dis/vacget.dis b/dis/vacget.dis deleted file mode 100644 index b8cea90c2..000000000 Binary files a/dis/vacget.dis and /dev/null differ diff --git a/dis/vacput.dis b/dis/vacput.dis deleted file mode 100644 index 0ac541bf5..000000000 Binary files a/dis/vacput.dis and /dev/null differ diff --git a/dis/variadic.dis b/dis/variadic.dis deleted file mode 100644 index 47e71aae1..000000000 Binary files a/dis/variadic.dis and /dev/null differ diff --git a/dis/veltro/agentlib.dis b/dis/veltro/agentlib.dis deleted file mode 100644 index 217a1d326..000000000 Binary files a/dis/veltro/agentlib.dis and /dev/null differ diff --git a/dis/veltro/cowfs.dis b/dis/veltro/cowfs.dis deleted file mode 100644 index 5ebb36dad..000000000 Binary files a/dis/veltro/cowfs.dis and /dev/null differ diff --git a/dis/veltro/mc9p.dis b/dis/veltro/mc9p.dis deleted file mode 100644 index d595727b3..000000000 Binary files a/dis/veltro/mc9p.dis and /dev/null differ diff --git a/dis/veltro/msg9p.dis b/dis/veltro/msg9p.dis deleted file mode 100644 index 03e69d578..000000000 Binary files a/dis/veltro/msg9p.dis and /dev/null differ diff --git a/dis/veltro/msgwatch.dis b/dis/veltro/msgwatch.dis deleted file mode 100644 index e1afc4b07..000000000 Binary files a/dis/veltro/msgwatch.dis and /dev/null differ diff --git a/dis/veltro/ninepsrc.dis b/dis/veltro/ninepsrc.dis deleted file mode 100644 index 1440fa212..000000000 Binary files a/dis/veltro/ninepsrc.dis and /dev/null differ diff --git a/dis/veltro/nsconstruct.dis b/dis/veltro/nsconstruct.dis deleted file mode 100644 index 15d0d0178..000000000 Binary files a/dis/veltro/nsconstruct.dis and /dev/null differ diff --git a/dis/veltro/repl.dis b/dis/veltro/repl.dis deleted file mode 100644 index 51b675024..000000000 Binary files a/dis/veltro/repl.dis and /dev/null differ diff --git a/dis/veltro/sources/email.dis b/dis/veltro/sources/email.dis deleted file mode 100644 index eb1655dc3..000000000 Binary files a/dis/veltro/sources/email.dis and /dev/null differ diff --git a/dis/veltro/sources/mockmail.dis b/dis/veltro/sources/mockmail.dis deleted file mode 100644 index be5da6002..000000000 Binary files a/dis/veltro/sources/mockmail.dis and /dev/null differ diff --git a/dis/veltro/sources/sms.dis b/dis/veltro/sources/sms.dis deleted file mode 100644 index bebdba31c..000000000 Binary files a/dis/veltro/sources/sms.dis and /dev/null differ diff --git a/dis/veltro/speech9p.dis b/dis/veltro/speech9p.dis deleted file mode 100644 index c2488426f..000000000 Binary files a/dis/veltro/speech9p.dis and /dev/null differ diff --git a/dis/veltro/subagent.dis b/dis/veltro/subagent.dis deleted file mode 100644 index 928e9330b..000000000 Binary files a/dis/veltro/subagent.dis and /dev/null differ diff --git a/dis/veltro/taskboard9p.dis b/dis/veltro/taskboard9p.dis deleted file mode 100644 index 79cd695dc..000000000 Binary files a/dis/veltro/taskboard9p.dis and /dev/null differ diff --git a/dis/veltro/tools/browse.dis b/dis/veltro/tools/browse.dis deleted file mode 100644 index 2e91f69bb..000000000 Binary files a/dis/veltro/tools/browse.dis and /dev/null differ diff --git a/dis/veltro/tools/calendar.dis b/dis/veltro/tools/calendar.dis deleted file mode 100644 index f73fa5ec7..000000000 Binary files a/dis/veltro/tools/calendar.dis and /dev/null differ diff --git a/dis/veltro/tools/charon.dis b/dis/veltro/tools/charon.dis deleted file mode 100644 index a55fe211b..000000000 Binary files a/dis/veltro/tools/charon.dis and /dev/null differ diff --git a/dis/veltro/tools/contacts.dis b/dis/veltro/tools/contacts.dis deleted file mode 100644 index 1b5d7ae4e..000000000 Binary files a/dis/veltro/tools/contacts.dis and /dev/null differ diff --git a/dis/veltro/tools/dial.dis b/dis/veltro/tools/dial.dis deleted file mode 100644 index 313979a28..000000000 Binary files a/dis/veltro/tools/dial.dis and /dev/null differ diff --git a/dis/veltro/tools/diff.dis b/dis/veltro/tools/diff.dis deleted file mode 100644 index 73533b5de..000000000 Binary files a/dis/veltro/tools/diff.dis and /dev/null differ diff --git a/dis/veltro/tools/edit.dis b/dis/veltro/tools/edit.dis deleted file mode 100644 index 5426f9f10..000000000 Binary files a/dis/veltro/tools/edit.dis and /dev/null differ diff --git a/dis/veltro/tools/editor.dis b/dis/veltro/tools/editor.dis deleted file mode 100644 index a207a1ba4..000000000 Binary files a/dis/veltro/tools/editor.dis and /dev/null differ diff --git a/dis/veltro/tools/exec.dis b/dis/veltro/tools/exec.dis deleted file mode 100644 index cde0783bf..000000000 Binary files a/dis/veltro/tools/exec.dis and /dev/null differ diff --git a/dis/veltro/tools/find.dis b/dis/veltro/tools/find.dis deleted file mode 100644 index 1de6fb7fb..000000000 Binary files a/dis/veltro/tools/find.dis and /dev/null differ diff --git a/dis/veltro/tools/fractal.dis b/dis/veltro/tools/fractal.dis deleted file mode 100644 index ef94fff2b..000000000 Binary files a/dis/veltro/tools/fractal.dis and /dev/null differ diff --git a/dis/veltro/tools/gap.dis b/dis/veltro/tools/gap.dis deleted file mode 100644 index 74aa56b58..000000000 Binary files a/dis/veltro/tools/gap.dis and /dev/null differ diff --git a/dis/veltro/tools/git.dis b/dis/veltro/tools/git.dis deleted file mode 100644 index 4d58f6be2..000000000 Binary files a/dis/veltro/tools/git.dis and /dev/null differ diff --git a/dis/veltro/tools/gpu.dis b/dis/veltro/tools/gpu.dis deleted file mode 100644 index 2009a3964..000000000 Binary files a/dis/veltro/tools/gpu.dis and /dev/null differ diff --git a/dis/veltro/tools/grep.dis b/dis/veltro/tools/grep.dis deleted file mode 100644 index 798372bc9..000000000 Binary files a/dis/veltro/tools/grep.dis and /dev/null differ diff --git a/dis/veltro/tools/hear.dis b/dis/veltro/tools/hear.dis deleted file mode 100644 index 26d6af83c..000000000 Binary files a/dis/veltro/tools/hear.dis and /dev/null differ diff --git a/dis/veltro/tools/http.dis b/dis/veltro/tools/http.dis deleted file mode 100644 index 6233cabee..000000000 Binary files a/dis/veltro/tools/http.dis and /dev/null differ diff --git a/dis/veltro/tools/json.dis b/dis/veltro/tools/json.dis deleted file mode 100644 index e17fb65c6..000000000 Binary files a/dis/veltro/tools/json.dis and /dev/null differ diff --git a/dis/veltro/tools/keyring.dis b/dis/veltro/tools/keyring.dis deleted file mode 100644 index 5cbb922d6..000000000 Binary files a/dis/veltro/tools/keyring.dis and /dev/null differ diff --git a/dis/veltro/tools/launch.dis b/dis/veltro/tools/launch.dis deleted file mode 100644 index 07307bf9c..000000000 Binary files a/dis/veltro/tools/launch.dis and /dev/null differ diff --git a/dis/veltro/tools/limbo.dis b/dis/veltro/tools/limbo.dis deleted file mode 100644 index 9ae1f9976..000000000 Binary files a/dis/veltro/tools/limbo.dis and /dev/null differ diff --git a/dis/veltro/tools/list.dis b/dis/veltro/tools/list.dis deleted file mode 100644 index 9d40700b2..000000000 Binary files a/dis/veltro/tools/list.dis and /dev/null differ diff --git a/dis/veltro/tools/mail.dis b/dis/veltro/tools/mail.dis deleted file mode 100644 index a549a143c..000000000 Binary files a/dis/veltro/tools/mail.dis and /dev/null differ diff --git a/dis/veltro/tools/man.dis b/dis/veltro/tools/man.dis deleted file mode 100644 index 1d3bbaed7..000000000 Binary files a/dis/veltro/tools/man.dis and /dev/null differ diff --git a/dis/veltro/tools/matrix.dis b/dis/veltro/tools/matrix.dis deleted file mode 100644 index 19a6fd21a..000000000 Binary files a/dis/veltro/tools/matrix.dis and /dev/null differ diff --git a/dis/veltro/tools/memory.dis b/dis/veltro/tools/memory.dis deleted file mode 100644 index 9f791509a..000000000 Binary files a/dis/veltro/tools/memory.dis and /dev/null differ diff --git a/dis/veltro/tools/mount.dis b/dis/veltro/tools/mount.dis deleted file mode 100644 index 0f3f7a939..000000000 Binary files a/dis/veltro/tools/mount.dis and /dev/null differ diff --git a/dis/veltro/tools/payfetch.dis b/dis/veltro/tools/payfetch.dis deleted file mode 100644 index 3ed1f6957..000000000 Binary files a/dis/veltro/tools/payfetch.dis and /dev/null differ diff --git a/dis/veltro/tools/plan.dis b/dis/veltro/tools/plan.dis deleted file mode 100644 index a5afc8d1f..000000000 Binary files a/dis/veltro/tools/plan.dis and /dev/null differ diff --git a/dis/veltro/tools/present.dis b/dis/veltro/tools/present.dis deleted file mode 100644 index c6332e691..000000000 Binary files a/dis/veltro/tools/present.dis and /dev/null differ diff --git a/dis/veltro/tools/read.dis b/dis/veltro/tools/read.dis deleted file mode 100644 index 191cd573a..000000000 Binary files a/dis/veltro/tools/read.dis and /dev/null differ diff --git a/dis/veltro/tools/safeexec.dis b/dis/veltro/tools/safeexec.dis deleted file mode 100644 index 384cc69fb..000000000 Binary files a/dis/veltro/tools/safeexec.dis and /dev/null differ diff --git a/dis/veltro/tools/say.dis b/dis/veltro/tools/say.dis deleted file mode 100644 index 11b7245e9..000000000 Binary files a/dis/veltro/tools/say.dis and /dev/null differ diff --git a/dis/veltro/tools/search.dis b/dis/veltro/tools/search.dis deleted file mode 100644 index 55cd06111..000000000 Binary files a/dis/veltro/tools/search.dis and /dev/null differ diff --git a/dis/veltro/tools/shell.dis b/dis/veltro/tools/shell.dis deleted file mode 100644 index b3e772fff..000000000 Binary files a/dis/veltro/tools/shell.dis and /dev/null differ diff --git a/dis/veltro/tools/sms.dis b/dis/veltro/tools/sms.dis deleted file mode 100644 index d100a0b96..000000000 Binary files a/dis/veltro/tools/sms.dis and /dev/null differ diff --git a/dis/veltro/tools/spawn.dis b/dis/veltro/tools/spawn.dis deleted file mode 100644 index 5f978baac..000000000 Binary files a/dis/veltro/tools/spawn.dis and /dev/null differ diff --git a/dis/veltro/tools/task.dis b/dis/veltro/tools/task.dis deleted file mode 100644 index a433e0f1c..000000000 Binary files a/dis/veltro/tools/task.dis and /dev/null differ diff --git a/dis/veltro/tools/todo.dis b/dis/veltro/tools/todo.dis deleted file mode 100644 index fc2af1ab2..000000000 Binary files a/dis/veltro/tools/todo.dis and /dev/null differ diff --git a/dis/veltro/tools/vision.dis b/dis/veltro/tools/vision.dis deleted file mode 100644 index 79b84083a..000000000 Binary files a/dis/veltro/tools/vision.dis and /dev/null differ diff --git a/dis/veltro/tools/wallet.dis b/dis/veltro/tools/wallet.dis deleted file mode 100644 index 46ad9fc70..000000000 Binary files a/dis/veltro/tools/wallet.dis and /dev/null differ diff --git a/dis/veltro/tools/webfetch.dis b/dis/veltro/tools/webfetch.dis deleted file mode 100644 index cbdcc2ceb..000000000 Binary files a/dis/veltro/tools/webfetch.dis and /dev/null differ diff --git a/dis/veltro/tools/websearch.dis b/dis/veltro/tools/websearch.dis deleted file mode 100644 index eeeaac3b6..000000000 Binary files a/dis/veltro/tools/websearch.dis and /dev/null differ diff --git a/dis/veltro/tools/wiki.dis b/dis/veltro/tools/wiki.dis deleted file mode 100644 index d4a77a89f..000000000 Binary files a/dis/veltro/tools/wiki.dis and /dev/null differ diff --git a/dis/veltro/tools/write.dis b/dis/veltro/tools/write.dis deleted file mode 100644 index ec62a9719..000000000 Binary files a/dis/veltro/tools/write.dis and /dev/null differ diff --git a/dis/veltro/tools/xenith.dis b/dis/veltro/tools/xenith.dis deleted file mode 100644 index ef5f51b07..000000000 Binary files a/dis/veltro/tools/xenith.dis and /dev/null differ diff --git a/dis/veltro/tools9p.dis b/dis/veltro/tools9p.dis deleted file mode 100644 index c3f3515e5..000000000 Binary files a/dis/veltro/tools9p.dis and /dev/null differ diff --git a/dis/veltro/veltro.dis b/dis/veltro/veltro.dis deleted file mode 100644 index f4d7d23c1..000000000 Binary files a/dis/veltro/veltro.dis and /dev/null differ diff --git a/dis/veltro/wallet9p.dis b/dis/veltro/wallet9p.dis deleted file mode 100644 index 648ba89ad..000000000 Binary files a/dis/veltro/wallet9p.dis and /dev/null differ diff --git a/dis/veltro/wiki9p.dis b/dis/veltro/wiki9p.dis deleted file mode 100644 index dcf4bbaa6..000000000 Binary files a/dis/veltro/wiki9p.dis and /dev/null differ diff --git a/dis/ventisrv.dis b/dis/ventisrv.dis deleted file mode 100644 index ad6f9b9da..000000000 Binary files a/dis/ventisrv.dis and /dev/null differ diff --git a/dis/vid9p.dis b/dis/vid9p.dis deleted file mode 100644 index 1213a0e96..000000000 Binary files a/dis/vid9p.dis and /dev/null differ diff --git a/dis/wav2iaf.dis b/dis/wav2iaf.dis deleted file mode 100644 index 03431bbe9..000000000 Binary files a/dis/wav2iaf.dis and /dev/null differ diff --git a/dis/wc.dis b/dis/wc.dis deleted file mode 100644 index c2c70c891..000000000 Binary files a/dis/wc.dis and /dev/null differ diff --git a/dis/webfs.dis b/dis/webfs.dis deleted file mode 100644 index 4ae6496b8..000000000 Binary files a/dis/webfs.dis and /dev/null differ diff --git a/dis/webgrab.dis b/dis/webgrab.dis deleted file mode 100644 index fd9d5d7dc..000000000 Binary files a/dis/webgrab.dis and /dev/null differ diff --git a/dis/wiki.dis b/dis/wiki.dis deleted file mode 100644 index dad36617d..000000000 Binary files a/dis/wiki.dis and /dev/null differ diff --git a/dis/wikifs.dis b/dis/wikifs.dis deleted file mode 100644 index 6984bcdb8..000000000 Binary files a/dis/wikifs.dis and /dev/null differ diff --git a/dis/wm/about.dis b/dis/wm/about.dis deleted file mode 100644 index 07d20a764..000000000 Binary files a/dis/wm/about.dis and /dev/null differ diff --git a/dis/wm/bounce.dis b/dis/wm/bounce.dis deleted file mode 100644 index 66bea9f09..000000000 Binary files a/dis/wm/bounce.dis and /dev/null differ diff --git a/dis/wm/charon.dis b/dis/wm/charon.dis deleted file mode 100644 index 21d1a95d9..000000000 Binary files a/dis/wm/charon.dis and /dev/null differ diff --git a/dis/wm/clock.dis b/dis/wm/clock.dis deleted file mode 100644 index ec5874123..000000000 Binary files a/dis/wm/clock.dis and /dev/null differ diff --git a/dis/wm/coffee.dis b/dis/wm/coffee.dis deleted file mode 100644 index 4d5eb0768..000000000 Binary files a/dis/wm/coffee.dis and /dev/null differ diff --git a/dis/wm/colors.dis b/dis/wm/colors.dis deleted file mode 100644 index 6b27a67a9..000000000 Binary files a/dis/wm/colors.dis and /dev/null differ diff --git a/dis/wm/date.dis b/dis/wm/date.dis deleted file mode 100644 index 3309a0c00..000000000 Binary files a/dis/wm/date.dis and /dev/null differ diff --git a/dis/wm/deb.dis b/dis/wm/deb.dis deleted file mode 100644 index eb1fba16e..000000000 Binary files a/dis/wm/deb.dis and /dev/null differ diff --git a/dis/wm/editor.dis b/dis/wm/editor.dis deleted file mode 100644 index 8b1748cd2..000000000 Binary files a/dis/wm/editor.dis and /dev/null differ diff --git a/dis/wm/fractals.dis b/dis/wm/fractals.dis deleted file mode 100644 index f83f66308..000000000 Binary files a/dis/wm/fractals.dis and /dev/null differ diff --git a/dis/wm/ftree.dis b/dis/wm/ftree.dis deleted file mode 100644 index 2cc493c81..000000000 Binary files a/dis/wm/ftree.dis and /dev/null differ diff --git a/dis/wm/keyring.dis b/dis/wm/keyring.dis deleted file mode 100644 index ecc84319d..000000000 Binary files a/dis/wm/keyring.dis and /dev/null differ diff --git a/dis/wm/lens.dis b/dis/wm/lens.dis deleted file mode 100644 index f30e50db2..000000000 Binary files a/dis/wm/lens.dis and /dev/null differ diff --git a/dis/wm/logon.dis b/dis/wm/logon.dis deleted file mode 100644 index a4bc592cc..000000000 Binary files a/dis/wm/logon.dis and /dev/null differ diff --git a/dis/wm/man.dis b/dis/wm/man.dis deleted file mode 100644 index 59deef296..000000000 Binary files a/dis/wm/man.dis and /dev/null differ diff --git a/dis/wm/matrix.dis b/dis/wm/matrix.dis deleted file mode 100644 index 159ad3b89..000000000 Binary files a/dis/wm/matrix.dis and /dev/null differ diff --git a/dis/wm/memory.dis b/dis/wm/memory.dis deleted file mode 100644 index ac12bb702..000000000 Binary files a/dis/wm/memory.dis and /dev/null differ diff --git a/dis/wm/presrender.dis b/dis/wm/presrender.dis deleted file mode 100644 index a847d82e2..000000000 Binary files a/dis/wm/presrender.dis and /dev/null differ diff --git a/dis/wm/rt.dis b/dis/wm/rt.dis deleted file mode 100644 index 0a1d30b28..000000000 Binary files a/dis/wm/rt.dis and /dev/null differ diff --git a/dis/wm/sam.dis b/dis/wm/sam.dis deleted file mode 100644 index fae61dd7f..000000000 Binary files a/dis/wm/sam.dis and /dev/null differ diff --git a/dis/wm/samengine.dis b/dis/wm/samengine.dis deleted file mode 100644 index f0ac4adcc..000000000 Binary files a/dis/wm/samengine.dis and /dev/null differ diff --git a/dis/wm/samstub.dis b/dis/wm/samstub.dis deleted file mode 100644 index 4e3368e5a..000000000 Binary files a/dis/wm/samstub.dis and /dev/null differ diff --git a/dis/wm/samtk.dis b/dis/wm/samtk.dis deleted file mode 100644 index 3e66e14d0..000000000 Binary files a/dis/wm/samtk.dis and /dev/null differ diff --git a/dis/wm/settings.dis b/dis/wm/settings.dis deleted file mode 100644 index dfba47381..000000000 Binary files a/dis/wm/settings.dis and /dev/null differ diff --git a/dis/wm/sh.dis b/dis/wm/sh.dis deleted file mode 100644 index f886c0da2..000000000 Binary files a/dis/wm/sh.dis and /dev/null differ diff --git a/dis/wm/shell.dis b/dis/wm/shell.dis deleted file mode 100644 index cdad5540d..000000000 Binary files a/dis/wm/shell.dis and /dev/null differ diff --git a/dis/wm/task.dis b/dis/wm/task.dis deleted file mode 100644 index 7dcfea0a3..000000000 Binary files a/dis/wm/task.dis and /dev/null differ diff --git a/dis/wm/tetris.dis b/dis/wm/tetris.dis deleted file mode 100644 index 4bac3e883..000000000 Binary files a/dis/wm/tetris.dis and /dev/null differ diff --git a/dis/wm/view.dis b/dis/wm/view.dis deleted file mode 100644 index dbf3d7ad2..000000000 Binary files a/dis/wm/view.dis and /dev/null differ diff --git a/dis/wm/wallet.dis b/dis/wm/wallet.dis deleted file mode 100644 index 7515e13c5..000000000 Binary files a/dis/wm/wallet.dis and /dev/null differ diff --git a/dis/wm/wm.dis b/dis/wm/wm.dis deleted file mode 100644 index b3ddc9b83..000000000 Binary files a/dis/wm/wm.dis and /dev/null differ diff --git a/dis/wmexport.dis b/dis/wmexport.dis deleted file mode 100644 index 817375858..000000000 Binary files a/dis/wmexport.dis and /dev/null differ diff --git a/dis/wmimport.dis b/dis/wmimport.dis deleted file mode 100644 index fc71518e2..000000000 Binary files a/dis/wmimport.dis and /dev/null differ diff --git a/dis/xargs.dis b/dis/xargs.dis deleted file mode 100644 index 006031dd1..000000000 Binary files a/dis/xargs.dis and /dev/null differ diff --git a/dis/xd.dis b/dis/xd.dis deleted file mode 100644 index 20d9d98ca..000000000 Binary files a/dis/xd.dis and /dev/null differ diff --git a/dis/xenith.dis b/dis/xenith.dis deleted file mode 100644 index 081998107..000000000 Binary files a/dis/xenith.dis and /dev/null differ diff --git a/dis/xenith/asyncio.dis b/dis/xenith/asyncio.dis deleted file mode 100644 index 3d8642350..000000000 Binary files a/dis/xenith/asyncio.dis and /dev/null differ diff --git a/dis/xenith/buff.dis b/dis/xenith/buff.dis deleted file mode 100644 index e36ceed76..000000000 Binary files a/dis/xenith/buff.dis and /dev/null differ diff --git a/dis/xenith/col.dis b/dis/xenith/col.dis deleted file mode 100644 index 4c99f1451..000000000 Binary files a/dis/xenith/col.dis and /dev/null differ diff --git a/dis/xenith/dat.dis b/dis/xenith/dat.dis deleted file mode 100644 index 037c1ec68..000000000 Binary files a/dis/xenith/dat.dis and /dev/null differ diff --git a/dis/xenith/disk.dis b/dis/xenith/disk.dis deleted file mode 100644 index 53db97a2d..000000000 Binary files a/dis/xenith/disk.dis and /dev/null differ diff --git a/dis/xenith/ecmd.dis b/dis/xenith/ecmd.dis deleted file mode 100644 index 63e772681..000000000 Binary files a/dis/xenith/ecmd.dis and /dev/null differ diff --git a/dis/xenith/edit.dis b/dis/xenith/edit.dis deleted file mode 100644 index 4bd83ba89..000000000 Binary files a/dis/xenith/edit.dis and /dev/null differ diff --git a/dis/xenith/elog.dis b/dis/xenith/elog.dis deleted file mode 100644 index 0cb8f4dc1..000000000 Binary files a/dis/xenith/elog.dis and /dev/null differ diff --git a/dis/xenith/exec.dis b/dis/xenith/exec.dis deleted file mode 100644 index 495872672..000000000 Binary files a/dis/xenith/exec.dis and /dev/null differ diff --git a/dis/xenith/file.dis b/dis/xenith/file.dis deleted file mode 100644 index a27f635a0..000000000 Binary files a/dis/xenith/file.dis and /dev/null differ diff --git a/dis/xenith/format.dis b/dis/xenith/format.dis deleted file mode 100644 index 0e6ef0bfb..000000000 Binary files a/dis/xenith/format.dis and /dev/null differ diff --git a/dis/xenith/frame.dis b/dis/xenith/frame.dis deleted file mode 100644 index cf834e0db..000000000 Binary files a/dis/xenith/frame.dis and /dev/null differ diff --git a/dis/xenith/fsys.dis b/dis/xenith/fsys.dis deleted file mode 100644 index a86b2878e..000000000 Binary files a/dis/xenith/fsys.dis and /dev/null differ diff --git a/dis/xenith/graph.dis b/dis/xenith/graph.dis deleted file mode 100644 index a1abf1049..000000000 Binary files a/dis/xenith/graph.dis and /dev/null differ diff --git a/dis/xenith/gui.dis b/dis/xenith/gui.dis deleted file mode 100644 index de80cbb48..000000000 Binary files a/dis/xenith/gui.dis and /dev/null differ diff --git a/dis/xenith/imgload.dis b/dis/xenith/imgload.dis deleted file mode 100644 index 60378365e..000000000 Binary files a/dis/xenith/imgload.dis and /dev/null differ diff --git a/dis/xenith/look.dis b/dis/xenith/look.dis deleted file mode 100644 index 231624170..000000000 Binary files a/dis/xenith/look.dis and /dev/null differ diff --git a/dis/xenith/pngload.dis b/dis/xenith/pngload.dis deleted file mode 100644 index 857db1df7..000000000 Binary files a/dis/xenith/pngload.dis and /dev/null differ diff --git a/dis/xenith/regx.dis b/dis/xenith/regx.dis deleted file mode 100644 index c81215d8a..000000000 Binary files a/dis/xenith/regx.dis and /dev/null differ diff --git a/dis/xenith/render.dis b/dis/xenith/render.dis deleted file mode 100644 index a9d24e78a..000000000 Binary files a/dis/xenith/render.dis and /dev/null differ diff --git a/dis/xenith/render/charonrender.dis b/dis/xenith/render/charonrender.dis deleted file mode 100644 index 05d673fc1..000000000 Binary files a/dis/xenith/render/charonrender.dis and /dev/null differ diff --git a/dis/xenith/render/htmlfmt.dis b/dis/xenith/render/htmlfmt.dis deleted file mode 100644 index 935894fed..000000000 Binary files a/dis/xenith/render/htmlfmt.dis and /dev/null differ diff --git a/dis/xenith/render/htmlrender.dis b/dis/xenith/render/htmlrender.dis deleted file mode 100644 index ec9237278..000000000 Binary files a/dis/xenith/render/htmlrender.dis and /dev/null differ diff --git a/dis/xenith/render/imgrender.dis b/dis/xenith/render/imgrender.dis deleted file mode 100644 index fef98f8af..000000000 Binary files a/dis/xenith/render/imgrender.dis and /dev/null differ diff --git a/dis/xenith/render/mdfmt.dis b/dis/xenith/render/mdfmt.dis deleted file mode 100644 index 15ba39faf..000000000 Binary files a/dis/xenith/render/mdfmt.dis and /dev/null differ diff --git a/dis/xenith/render/mdrender.dis b/dis/xenith/render/mdrender.dis deleted file mode 100644 index f7876ff2d..000000000 Binary files a/dis/xenith/render/mdrender.dis and /dev/null differ diff --git a/dis/xenith/render/mermaidrender.dis b/dis/xenith/render/mermaidrender.dis deleted file mode 100644 index 7cf6a8a5b..000000000 Binary files a/dis/xenith/render/mermaidrender.dis and /dev/null differ diff --git a/dis/xenith/render/pdfrender.dis b/dis/xenith/render/pdfrender.dis deleted file mode 100644 index c4d9282c2..000000000 Binary files a/dis/xenith/render/pdfrender.dis and /dev/null differ diff --git a/dis/xenith/render/rlayout.dis b/dis/xenith/render/rlayout.dis deleted file mode 100644 index a0d6ec51b..000000000 Binary files a/dis/xenith/render/rlayout.dis and /dev/null differ diff --git a/dis/xenith/render/tlayout.dis b/dis/xenith/render/tlayout.dis deleted file mode 100644 index 4015d5e31..000000000 Binary files a/dis/xenith/render/tlayout.dis and /dev/null differ diff --git a/dis/xenith/row.dis b/dis/xenith/row.dis deleted file mode 100644 index 6d5a675e8..000000000 Binary files a/dis/xenith/row.dis and /dev/null differ diff --git a/dis/xenith/scrl.dis b/dis/xenith/scrl.dis deleted file mode 100644 index 7bb3de563..000000000 Binary files a/dis/xenith/scrl.dis and /dev/null differ diff --git a/dis/xenith/styxaux.dis b/dis/xenith/styxaux.dis deleted file mode 100644 index d81ffb0f5..000000000 Binary files a/dis/xenith/styxaux.dis and /dev/null differ diff --git a/dis/xenith/text.dis b/dis/xenith/text.dis deleted file mode 100644 index c3b463fbb..000000000 Binary files a/dis/xenith/text.dis and /dev/null differ diff --git a/dis/xenith/time.dis b/dis/xenith/time.dis deleted file mode 100644 index b2593bff0..000000000 Binary files a/dis/xenith/time.dis and /dev/null differ diff --git a/dis/xenith/util.dis b/dis/xenith/util.dis deleted file mode 100644 index 120423149..000000000 Binary files a/dis/xenith/util.dis and /dev/null differ diff --git a/dis/xenith/wind.dis b/dis/xenith/wind.dis deleted file mode 100644 index e3838dfd9..000000000 Binary files a/dis/xenith/wind.dis and /dev/null differ diff --git a/dis/xenith/xenith.dis b/dis/xenith/xenith.dis deleted file mode 100644 index 081998107..000000000 Binary files a/dis/xenith/xenith.dis and /dev/null differ diff --git a/dis/xenith/xfid.dis b/dis/xenith/xfid.dis deleted file mode 100644 index be2a229ca..000000000 Binary files a/dis/xenith/xfid.dis and /dev/null differ diff --git a/dis/yacc.dis b/dis/yacc.dis deleted file mode 100644 index a9e819b40..000000000 Binary files a/dis/yacc.dis and /dev/null differ diff --git a/dis/zeros.dis b/dis/zeros.dis deleted file mode 100644 index 336c58ba0..000000000 Binary files a/dis/zeros.dis and /dev/null differ diff --git a/docs/compliance/Common-Criteria-readiness.md b/docs/compliance/Common-Criteria-readiness.md index b8154478c..d177f911e 100644 --- a/docs/compliance/Common-Criteria-readiness.md +++ b/docs/compliance/Common-Criteria-readiness.md @@ -56,7 +56,7 @@ they are the *evaluation evidence* CC mandates. | **ASE** Security Target | A complete ST (TOE description, SFRs, rationale) | Not authored | | **ADV** Development | Functional spec, TOE design, and (EAL5+) a **formal/semiformal** security-policy model + correspondence | Isolation proof exists; full ADV_SPM / ADV_FSP / ADV_TDS to write | | **AGD** Guidance | Operational user + prep guidance | Partial (QUICKSTART, ops docs); not CC-structured | -| **ALC** Life-cycle | CM, flaw remediation, delivery, dev security | Strong technical base (reproducible builds, SLSA L3, signed artifacts, `verify-dis-paths`, security.md) — needs CC-form documentation | +| **ALC** Life-cycle | CM, flaw remediation, delivery, dev security | Strong technical base (reproducible builds, SLSA L3, signed artifacts, `verify-dis-build`, security.md) — needs CC-form documentation | | **ATE** Tests | Functional test coverage + depth | Strong test base (in-emu suite, `veltro_security_test`, crypto KATs) — needs coverage-to-SFR mapping | | **AVA** Vulnerability | Independent vuln assessment / pen-test | CodeQL + fuzzing + formal verification feed it; independent AVA is lab work | @@ -65,7 +65,7 @@ they are the *evaluation evidence* CC mandates. - **ADV (formal core):** the namespace isolation theorem and CBMC harnesses are exactly the kind of high-EAL evidence labs rarely see pre-engagement — `formal-verification/`. - **ALC:** reproducible Inferno `mk` builds, SLSA L3 provenance + Sigstore signing, SBOM, - `verify-dis-paths`, ring-fence guard — see [`SLSA.md`](SLSA.md), [`SP800-53-171-mapping.md`](SP800-53-171-mapping.md) §5.CM/SR. + `verify-dis-build`, ring-fence guard — see [`SLSA.md`](SLSA.md), [`SP800-53-171-mapping.md`](SP800-53-171-mapping.md) §5.CM/SR. - **ATE:** the in-emu regression suite and `tests/veltro_security_test.b` exercise the access mechanism directly. - **Small TCB** keeps every above class tractable — the whole point. diff --git a/docs/compliance/FIPS-140-3-readiness.md b/docs/compliance/FIPS-140-3-readiness.md index 5bbb5b2a0..71a3a12b0 100644 --- a/docs/compliance/FIPS-140-3-readiness.md +++ b/docs/compliance/FIPS-140-3-readiness.md @@ -45,7 +45,7 @@ standard. | **F4** | **SP 800-90A/B DRBG + entropy** — approved DRBG with documented entropy source and health tests | RNG is `genrandom`/`prng` (`include/libsec.h:486-489`); not documented as an SP 800-90A DRBG with 90B entropy assessment | Document/align the DRBG; entropy-source analysis. See `docs/TLS-ENTROPY.md` for prior entropy work. | | **F5** | **Module spec & security policy documents** — finite-state model, ports/interfaces, roles/services, SSP | Not authored | Documentation deliverables for the CMVP package. | | **F6** | **CAVP algorithm certificates** — each approved algorithm independently CAVP-tested | Not obtained | Run the CAVP test harness against `libsec` and submit. The existing KAT suites are the starting material. | -| **F7** | **Operational environment / integrity test** — module integrity self-check (e.g. signature/HMAC over the module image) at load | Build-time integrity exists (cosign, SLSA, `verify-dis-paths`) but no *runtime* module-integrity self-test | Add an integrity check at module init. | +| **F7** | **Operational environment / integrity test** — module integrity self-check (e.g. signature/HMAC over the module image) at load | Build-time integrity exists (cosign, SLSA, `verify-dis-build`) but no *runtime* module-integrity self-test | Add an integrity check at module init. | ## 3. What is already met (do not re-do) diff --git a/docs/compliance/SLSA.md b/docs/compliance/SLSA.md index 9735f6e14..76806f356 100644 --- a/docs/compliance/SLSA.md +++ b/docs/compliance/SLSA.md @@ -28,8 +28,10 @@ isolated CI build that emits **non-forgeable provenance** and are **signed**. Bu - **Continuous posture scoring:** OpenSSF Scorecard (`.github/workflows/scorecard.yml`). - **Artifact-content guard:** ring-fence CI fails the build if testing-only harness files leak into a release (`CLAUDE.md` "Ring-fence rule"; `release.yml`, `ci.yml`). -- **Bytecode integrity:** `verify-dis-paths` ensures shipped `.dis` matches source - (`.github/workflows/verify-dis-paths.yml`; `tools/verify-dis-paths.sh`). +- **Bytecode integrity:** shipped `.dis` is built from the tagged source by the release + job rather than committed, and checked against a tracked module manifest + (`.github/workflows/verify-dis-build.yml`; `tools/verify-dis-build.sh`; + `tools/dis-manifest.txt`). ## 3. Open items (tracked, not blocking the L3 close) @@ -62,4 +64,4 @@ hermetic/reproducible builds — tracked under INFR-340. ## 5. References - SLSA v1.0 (slsa.dev); OpenSSF Scorecard; Sigstore/cosign; SPDX / CycloneDX; in-toto. -- `.github/workflows/release.yml`, `sbom.yml`, `scorecard.yml`, `verify-dis-paths.yml`. +- `.github/workflows/release.yml`, `sbom.yml`, `scorecard.yml`, `verify-dis-build.yml`. diff --git a/docs/compliance/SP800-53-171-mapping.md b/docs/compliance/SP800-53-171-mapping.md index cda8659ab..bd12e794c 100644 --- a/docs/compliance/SP800-53-171-mapping.md +++ b/docs/compliance/SP800-53-171-mapping.md @@ -57,7 +57,7 @@ first; they are the controls a generic Linux/Windows host cannot evidence as cle | **IA** Identification & Auth | MFA, PKI, AAL3 | Technical | Factotum credential agent; FIDO2 UV (AAL3) login; PQ-capable X.509 / mTLS | [`SP800-63B-AAL3.md`](SP800-63B-AAL3.md); `docs/AUTHENTICATION.md`, `docs/DISTRIBUTED-AUTH.md` | **Strong** (AAL3 verifier shipped) | | **SC** System & Comms Protection | Crypto, boundary, transport | Technical | `libsec` (AES-256-GCM, SHA-384/512, full PQC); hybrid TLS + hybrid native STS; namespace boundaries | [`CNSA-2.0.md`](CNSA-2.0.md); `docs/CRYPTO-MODERNIZATION.md` | **Strong** (CNSA-strict params tracked) | | **SI** System & Information Integrity | Memory safety, malware, flaws | Technical | Dis VM: type-safe, memory-safe, sandboxed bytecode → eliminates whole CWE classes (no raw pointers, bounds-checked); CodeQL + fuzzing in CI | `doc/dis.ms`; `.github/workflows/security.yml` (CodeQL), `fuzz.yml`; `tests/handshake_fuzz_test.b` | **Strong** (see §5.SI) | -| **CM** Configuration Management | Baselines, integrity of components | Technical | Reproducible Plan 9 `mk` builds; `.dis` path-integrity verifier; SHA-pinned CI actions; tracked `dis/` runtime tree | `.github/workflows/verify-dis-paths.yml`; `tools/verify-dis-paths.sh`; `CLAUDE.md` (dis integrity) | **Strong** (see §5.CM) | +| **CM** Configuration Management | Baselines, integrity of components | Technical | Reproducible Plan 9 `mk` builds; bytecode built from source in CI and at release, checked against a tracked module manifest; SHA-pinned CI actions | `.github/workflows/verify-dis-build.yml`; `tools/verify-dis-build.sh`; `tools/dis-manifest.txt`; `CLAUDE.md` (dis is a build product) | **Strong** (see §5.CM) | | **SR** Supply Chain Risk | Provenance, integrity of artifacts | Technical | SLSA build provenance attestations; cosign keyless (Sigstore) signing; SHA256SUMS; OpenSSF Scorecard | `.github/workflows/release.yml:1257-1288`; `scorecard.yml` | **Strong** (see §5.SR) | | **CA** Assessment, Auth & Monitoring | Continuous assessment | Technical+Org | Formal verification in CI (TLA+/SPIN/CBMC); CodeQL/Scorecard/fuzz continuous scanning; ring-fence guard | `formal-verification/`; `.github/workflows/` (formal-verification, security, scorecard, fuzz); `CLAUDE.md` (ring-fence) | **Strong (technical)**; assessment process = operator | | **RA** Risk Assessment | Vuln scanning, risk | Technical+Org | CodeQL, fuzzing, OpenSSF Scorecard, formal verification feed risk posture; threat models in security docs | `.github/workflows/{security,fuzz,scorecard}.yml`; `docs/NAMESPACE_SECURITY_REVIEW.md` §3 (threat model) | **Partial** (tooling ✅; org RA process = operator) | @@ -102,9 +102,11 @@ dispositions, noreturn FPs); tracked, not silent. ### 5.CM — Configuration Management - **Reproducible builds** via Inferno-native `mk` (same toolchain builds the system and the apps; `CLAUDE.md` "Why Native Tools"). -- **Bytecode integrity:** `tools/verify-dis-paths.sh` + the `verify-dis-paths` CI workflow - refuse any commit where a compiled `.dis` is missing or older than its source — preventing - the "stale/ wrong-target bytecode" class. Pre-commit hook enforces locally; CI is the +- **Bytecode integrity:** compiled `.dis` is not committed at all — it is built from the + tagged source by CI and by every release job, which removes the "stale / wrong-target + bytecode" class by construction rather than policing it. `tools/dis-manifest.txt` tracks + the set of modules the build must produce and `tools/verify-dis-build.sh` fails if any is + missing, so a component cannot silently leave the baseline. CI is the universal backstop. - **Pinned dependencies:** CI actions are pinned to commit SHAs (see `release.yml`), not floating tags — a CM-2/CM-7 supply-integrity property. diff --git a/docs/compliance/common-criteria-security-target.md b/docs/compliance/common-criteria-security-target.md index 920243c9a..ec1ccaa6e 100644 --- a/docs/compliance/common-criteria-security-target.md +++ b/docs/compliance/common-criteria-security-target.md @@ -282,7 +282,7 @@ evaluation would still require. It restates, in ST form, the gap table of |-----------------|------------------|--------------------------|---------------------------| | **ADV** Development | Functional spec, TOE design, and (EAL5+) a formal/semiformal security-policy model + correspondence | The load-bearing property (namespace isolation) has a **formal model and machine-checked proof** across three tools; CBMC verifies actual C. `formal-verification/METHODOLOGY.md` | Full ADV_FSP / ADV_TDS / ADV_SPM / ADV_ARC documents to author; correspondence to the *whole* TSF | | **AGD** Guidance | Operational + preparative guidance | `QUICKSTART.md`, `docs/`, ops runbooks | Restructure to CC AGD_OPE/AGD_PRE form | -| **ALC** Life-cycle | CM, flaw remediation, delivery, dev security | Reproducible Inferno-`mk` builds, SLSA-3 provenance + Sigstore signing, SBOM, `verify-dis-paths`, pinned CI actions, ring-fence guard | CC-form ALC_CMC/CMS/DEL/DVS/FLR documentation | +| **ALC** Life-cycle | CM, flaw remediation, delivery, dev security | Reproducible Inferno-`mk` builds, SLSA-3 provenance + Sigstore signing, SBOM, `verify-dis-build`, pinned CI actions, ring-fence guard | CC-form ALC_CMC/CMS/DEL/DVS/FLR documentation | | **ATE** Tests | Functional coverage + depth | In-emu regression suite incl. `tests/veltro_security_test.b`, crypto tests, formal-verification CI | Coverage-to-SFR mapping (ATE_COV/DPT); independent ATE_IND | | **AVA** Vulnerability | Independent vuln assessment | CodeQL (`security.yml`), fuzzing (`fuzz.yml`), formal verification feed it | Accredited-lab AVA_VAN penetration test | | **ASE** Security Target | A complete ST | **This document** (self-produced baseline) | Evaluator review; PP instantiation | diff --git a/docs/compliance/nist-control-mappings.md b/docs/compliance/nist-control-mappings.md index 68db0e7e2..c0f9b5c9b 100644 --- a/docs/compliance/nist-control-mappings.md +++ b/docs/compliance/nist-control-mappings.md @@ -96,7 +96,7 @@ and the four-family itemization in |---------|--------------------------|-----------------------------|--------------------|---------------|------------------|-------| | **SI-2** / 3.14.1 | Flaw remediation | CodeQL + fuzzing in CI; formal verification; security-advisory process | Configurable / Integrator | `.github/workflows/security.yml`, `fuzz.yml`; `SECURITY.md` | FPT_TST | Remediation SLA is operator process | | **SI-3** / 3.14.2 | Malicious-code protection | Application layer is type-/memory-safe Dis bytecode; modules type-checked at load | By construction | `libinterp/`; `CLAUDE.md` (link typecheck) | FPT_TDC.1 | Eliminates whole CWE classes for ~700 Limbo apps | -| **SI-7** / 3.14.x | Software/firmware/information integrity | `.dis` path-integrity verifier; tracked `dis/` tree; hash-chained audit | By construction | `.github/workflows/verify-dis-paths.yml`; `tools/verify-dis-paths.sh` | FPT_TST | | +| **SI-7** / 3.14.x | Software/firmware/information integrity | bytecode built from source at release and checked against a tracked module manifest; hash-chained audit | By construction | `.github/workflows/verify-dis-build.yml`; `tools/verify-dis-build.sh`; `tools/dis-manifest.txt` | FPT_TST | | | **SI-16** | Memory protection | No raw pointers; bounds-checked arrays in Dis VM | By construction | `libinterp/` | FPT_TDC.1 | C TCB (emu/libsec) is *not* memory-safe — covered by CodeQL/fuzz/formal only | | **SI (TCB race residual)** | Integrity of the TSF itself | Namespace primitives formally verified; **3 emu-host UAF races open** | Partial | `formal-verification/TODO-RACE-CONDITIONS.md` | FPT_SEP.1 | **gap (F-1)** — formally confirmed defects | @@ -105,7 +105,7 @@ and the four-family itemization in | Control | Requirement (paraphrase) | How InferNode satisfies it | Satisfaction basis | Evidence path | CC SFR crosswalk | Notes | |---------|--------------------------|-----------------------------|--------------------|---------------|------------------|-------| | **CM-2** / 3.4.1 | Baseline configuration | Reproducible Inferno-`mk` builds; tracked `dis/` runtime tree | By construction | `CLAUDE.md` ("Why Native Tools") | ALC (Part 3) | | -| **CM-5** | Access restrictions for change | Pre-commit + CI verifiers gate commits/PRs | Configurable | `hooks/`, `.github/workflows/verify-dis-paths.yml` | ALC | | +| **CM-5** | Access restrictions for change | CI verifiers gate PRs; `hooks/post-merge` keeps working trees current | Configurable | `hooks/`, `.github/workflows/verify-dis-build.yml` | ALC | | | **CM-6** / 3.4.2 | Configuration settings | CNSA mode (`/env/cnsamode`), `NODEVS`, export scope are explicit settings | Configurable | `appl/lib/crypt/tls.b` (`cnsamode`); `CNSA-2.0.md` | FMT_SMF.1 | Secure settings are opt-in — integrator must set | | **CM-7** / 3.4.6–3.4.7 | Least functionality | Small TCB; `NODEVS`; compose only needed file services; ring-fence guard keeps test-only harness out of releases | By construction | `CLAUDE.md` (Ring-fence rule); `.github/workflows/ci.yml`, `release.yml` | FMT_MSA.3 | | | **CM-14 / SR** | Signed components / provenance | SHA-pinned CI actions; Sigstore cosign; SLSA provenance; SBOM | By construction | `.github/workflows/release.yml`, `scorecard.yml`, `sbom.yml` | ALC / (SR family) | See §7 | diff --git a/hooks/pre-commit b/hooks/pre-commit deleted file mode 100755 index 5b0b63cda..000000000 --- a/hooks/pre-commit +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/sh -# -# pre-commit — refuse to commit if any tracked Limbo source has a -# stale or missing .dis at its module's declared PATH. -# -# This is the local catch for the recurring "stale build artefacts" -# bug class: someone (often Claude) edits appl/cmd/lucictx.b, manually -# compiles to dis/cmd/lucictx.dis, but lucifer loads /dis/lucictx.dis -# and runs the old code. Every fix appears to "do nothing" until -# someone notices the path mismatch. We've burned multiple debug -# sessions on this — see INFR-28 history. -# -# What this hook does: -# 1. Run tools/verify-dis-paths.sh, which compares each -# appl/cmd/*.b's mtime against dis/.dis. -# 2. If any source is newer than its installed .dis, ABORT the -# commit and print the failing source/target pairs. -# -# To recover: rebuild with tools/compile-limbo.sh (or `mk install`), -# then re-run `git commit`. -# -# Bypass for emergencies: `git commit --no-verify`. Don't do it. - -set -e - -ROOT="$(git rev-parse --show-toplevel)" - -if [ ! -x "$ROOT/tools/verify-dis-paths.sh" ]; then - # Hook is newer than the verifier on disk — let the commit through - # rather than block on missing infrastructure. - exit 0 -fi - -if ! "$ROOT/tools/verify-dis-paths.sh"; then - echo "" >&2 - echo "pre-commit: refusing to commit with stale .dis artefacts." >&2 - echo " Fix: tools/compile-limbo.sh .b" >&2 - echo " Or: mk install (in the affected source dir)" >&2 - echo " Bypass (don't): git commit --no-verify" >&2 - exit 1 -fi diff --git a/lib/veltro/tools/launch.txt b/lib/veltro/tools/launch.txt index f85abea75..90d546aa7 100644 --- a/lib/veltro/tools/launch.txt +++ b/lib/veltro/tools/launch.txt @@ -29,4 +29,5 @@ and writes those files on your behalf. Other confirmed apps: clock, bounce, coffee, colors, date, editor, about, view, rt, lens, man, shell, fractals, keyring, xenith. -Apps requiring Tk (not available): task, tetris, sh, ftree, deb. +Tk is available (reintegrated in #350), so the Tk apps run too: +task, tetris, sh, ftree, deb. diff --git a/mkfiles/mkdis b/mkfiles/mkdis index fb3025e89..f342e229f 100644 --- a/mkfiles/mkdis +++ b/mkfiles/mkdis @@ -14,7 +14,11 @@ clean:V: clean-std nuke:V: nuke-std $DISBIN/%.dis: %.dis - rm -f $DISBIN/$stem.dis && cp $stem.dis $DISBIN/$stem.dis + # dis/ is a build product and git does not track empty directories, + # so the target directory may not exist in a fresh clone. + mkdir -p $DISBIN + rm -f $DISBIN/$stem.dis + cp $stem.dis $DISBIN/$stem.dis %.dis: $MODULES $SYS_MODULE diff --git a/module/popup.m b/module/popup.m new file mode 100644 index 000000000..f8773acc5 --- /dev/null +++ b/module/popup.m @@ -0,0 +1,11 @@ +# pop-up menus. +# use choicebuttons instead - it's difficult to get these right. +Popup: module { + PATH: con "/dis/lib/popup.dis"; + init: fn(); +# mkbutton: fn(win: ref Tk->Toplevel, w: string, a: array of string, n: int): chan of string; +# changebutton: fn(win: ref Tk->Toplevel, w: string, a: array of string, n: int); +# event: fn(win: ref Tk->Toplevel, e: string, a: array of string): int; +# add: fn(a: array of string, s: string): (array of string, int); + post: fn(win: ref Tk->Toplevel, p: Draw->Point, a: array of string, n: int): chan of int; +}; diff --git a/tests/cnsa_nodepair_test.sh b/tests/cnsa_nodepair_test.sh index 63f57faf3..214c30704 100755 --- a/tests/cnsa_nodepair_test.sh +++ b/tests/cnsa_nodepair_test.sh @@ -9,8 +9,8 @@ # 3. both nodes CNSA, ML-DSA-87 signer -> ML-KEM-1024 + CNSA signer succeeds # 4. mixed 1024 listener / 768 dialer -> handshake FAILS (no silent downgrade) # -# Requires a built emu and dis/authnode.dis -# (limbo -gw -Imodule -o dis/authnode.dis tests/authnode.b). +# Requires a built emu and dis/tests/authnode.dis +# (cd tests && mk install -- never hand-roll a limbo -o path). # set -u @@ -43,9 +43,9 @@ start_node() { # start_node -> prints pid local out="$1"; shift local mode="$1"; shift if [ "$mode" = "cnsa" ]; then - ( CNSAMODE=1 "$EMU" -r"$ROOT" /dis/authnode.dis "$@" 2>&1 "$out" & + ( CNSAMODE=1 "$EMU" -r"$ROOT" /dis/tests/authnode.dis "$@" 2>&1 "$out" & else - ( "$EMU" -r"$ROOT" /dis/authnode.dis "$@" 2>&1 "$out" & + ( "$EMU" -r"$ROOT" /dis/tests/authnode.dis "$@" 2>&1 "$out" & fi local pid=$! pids="$pids $pid" diff --git a/tests/mkfile b/tests/mkfile index 9648c2d5f..aa1736091 100644 --- a/tests/mkfile +++ b/tests/mkfile @@ -4,6 +4,7 @@ DIRS=\ testing\ TARG=\ + authnode.dis\ 9p_export_test.dis\ auditchain_test.dis\ auditprov_test.dis\ @@ -152,6 +153,12 @@ TARG=\ bioauth_test.dis\ softkbd_test.dis\ voice_scripts_test.dis\ + gpu_bench.dis\ + gpu_smoke.dis\ + llmclient_sse_fallback_test.dis\ + tlsclient.dis\ + veltro_cc_alignment_test.dis\ + webfs_test.dis\ MODULES= diff --git a/tools/compile-limbo.sh b/tools/compile-limbo.sh index 541927a0a..f972eace2 100755 --- a/tools/compile-limbo.sh +++ b/tools/compile-limbo.sh @@ -52,7 +52,8 @@ fi scan_module_path() { # Print the PATH constant of the module the file IMPLEMENTS. - # See tools/verify-dis-paths.sh for matching rules — kept in sync. + # The module's own PATH constant decides where the .dis goes; never + # pick an -o path by hand. awk ' /^implement[[:space:]]+[A-Za-z][A-Za-z0-9_]*[[:space:]]*;/ { match($0, /[A-Za-z][A-Za-z0-9_]*[[:space:]]*;/) diff --git a/tools/dis-manifest.txt b/tools/dis-manifest.txt new file mode 100644 index 000000000..bd2e6e899 --- /dev/null +++ b/tools/dis-manifest.txt @@ -0,0 +1,964 @@ +acme/dis/Calendar.dis +acme/dis/Chat.dis +acme/dis/Ctag.dis +acme/dis/Feedkey.dis +acme/dis/Jwin.dis +acme/dis/Mail.dis +acme/dis/Mailpop3.dis +acme/dis/Navigator.dis +acme/dis/Prompt.dis +acme/dis/Sql.dis +acme/dis/Wiki.dis +acme/dis/adeb.dis +acme/dis/adict.dis +acme/dis/adiff.dis +acme/dis/agrep.dis +acme/dis/airc.dis +acme/dis/awd.dis +acme/dis/cd.dis +acme/dis/irc.dis +acme/dis/mkbox.dis +acme/dis/rect.dis +acme/dis/spout.dis +acme/dis/win.dis +acme/dis/winm.dis +dis/2fa.dis +dis/9660srv.dis +dis/9cpu.dis +dis/9export.dis +dis/9win.dis +dis/acme.dis +dis/acme/acme.dis +dis/acme/buff.dis +dis/acme/col.dis +dis/acme/dat.dis +dis/acme/disk.dis +dis/acme/ecmd.dis +dis/acme/edit.dis +dis/acme/elog.dis +dis/acme/exec.dis +dis/acme/file.dis +dis/acme/frame.dis +dis/acme/fsys.dis +dis/acme/graph.dis +dis/acme/gui.dis +dis/acme/look.dis +dis/acme/regx.dis +dis/acme/row.dis +dis/acme/scrl.dis +dis/acme/styxaux.dis +dis/acme/text.dis +dis/acme/time.dis +dis/acme/util.dis +dis/acme/wind.dis +dis/acme/xfid.dis +dis/acmeevent.dis +dis/ar.dis +dis/archfs.dis +dis/audiotone.dis +dis/auditfs.dis +dis/auditget.dis +dis/auditverify.dis +dis/auplay.dis +dis/auth/aescbc.dis +dis/auth/ai2key.dis +dis/auth/changelogin.dis +dis/auth/convpasswd.dis +dis/auth/countersigner.dis +dis/auth/createsignerkey.dis +dis/auth/createuser.dis +dis/auth/dsagen.dis +dis/auth/factotum.dis +dis/auth/getpk.dis +dis/auth/keyfs.dis +dis/auth/keysrv.dis +dis/auth/logind.dis +dis/auth/mkauthinfo.dis +dis/auth/passwd.dis +dis/auth/proto/infauth.dis +dis/auth/proto/p9any.dis +dis/auth/proto/pass.dis +dis/auth/proto/sign.dis +dis/auth/rpc.dis +dis/auth/rsagen.dis +dis/auth/secstore-setup.dis +dis/auth/secstore.dis +dis/auth/secstored.dis +dis/auth/signer.dis +dis/auth/verify.dis +dis/auxi/cpuslave.dis +dis/auxi/rdbgsrv.dis +dis/auxi/rstyxd.dis +dis/awk.dis +dis/basename.dis +dis/bdf2subfont.dis +dis/bind.dis +dis/bioget.dis +dis/bit2gif.dis +dis/broke.dis +dis/bytes.dis +dis/cal.dis +dis/calc.dis +dis/calendar9p.dis +dis/cat.dis +dis/cd.dis +dis/cddb.dis +dis/charon.dis +dis/charon/build.dis +dis/charon/chutils.dis +dis/charon/cookiesrv.dis +dis/charon/ctype.dis +dis/charon/date.dis +dis/charon/event.dis +dis/charon/file.dis +dis/charon/ftp.dis +dis/charon/gui.dis +dis/charon/http.dis +dis/charon/img.dis +dis/charon/jscript.dis +dis/charon/layout.dis +dis/charon/lex.dis +dis/charon/url.dis +dis/chatsrv.dis +dis/chgrp.dis +dis/chmod.dis +dis/cleanname.dis +dis/cmd/git/add.dis +dis/cmd/git/branch.dis +dis/cmd/git/checkout.dis +dis/cmd/git/clone.dis +dis/cmd/git/commit.dis +dis/cmd/git/fetch.dis +dis/cmd/git/fs.dis +dis/cmd/git/init.dis +dis/cmd/git/merge.dis +dis/cmd/git/pull.dis +dis/cmd/git/push.dis +dis/cmd/git/rm.dis +dis/cmp.dis +dis/comm.dis +dis/countfs.dis +dis/cp.dis +dis/cprof.dis +dis/cpu.dis +dis/crypt.dis +dis/cut.dis +dis/date.dis +dis/dbfs.dis +dis/dbm/delete.dis +dis/dbm/fetch.dis +dis/dbm/keys.dis +dis/dbm/list.dis +dis/dbm/store.dis +dis/dcr.dis +dis/dd.dis +dis/dial.dis +dis/dict.dis +dis/dict/adict.dis +dis/dict/mkindex.dis +dis/dict/oeis.dis +dis/dict/pg.dis +dis/dict/pgw.dis +dis/dict/roget.dis +dis/dict/simple.dis +dis/dict/utils.dis +dis/dict/wikipedia.dis +dis/diff.dis +dis/disdep.dis +dis/disdump.dis +dis/disk/calc.tab.dis +dis/disk/fdisk.dis +dis/disk/format.dis +dis/disk/ftl.dis +dis/disk/kfs.dis +dis/disk/kfscmd.dis +dis/disk/mbr.dis +dis/disk/mkext.dis +dis/disk/mkfs.dis +dis/disk/pedit.dis +dis/disk/prep.dis +dis/du.dis +dis/echo.dis +dis/ed.dis +dis/edit.dis +dis/emuinit.dis +dis/env.dis +dis/esort.dis +dis/export.dis +dis/fc.dis +dis/fcp.dis +dis/fmt.dis +dis/fortune.dis +dis/freq.dis +dis/fs.dis +dis/fs/and.dis +dis/fs/bundle.dis +dis/fs/chstat.dis +dis/fs/compose.dis +dis/fs/depth.dis +dis/fs/entries.dis +dis/fs/eval.dis +dis/fs/exec.dis +dis/fs/filter.dis +dis/fs/ls.dis +dis/fs/match.dis +dis/fs/merge.dis +dis/fs/mergewrite.dis +dis/fs/mode.dis +dis/fs/not.dis +dis/fs/or.dis +dis/fs/path.dis +dis/fs/pipe.dis +dis/fs/print.dis +dis/fs/proto.dis +dis/fs/query.dis +dis/fs/run.dis +dis/fs/select.dis +dis/fs/setroot.dis +dis/fs/size.dis +dis/fs/unbundle.dis +dis/fs/void.dis +dis/fs/walk.dis +dis/fs/write.dis +dis/ftest.dis +dis/ftpfs.dis +dis/ftrans.dis +dis/gateprobe.dis +dis/getauthinfo.dis +dis/getkey.dis +dis/getline.dis +dis/gettar.dis +dis/gif2bit.dis +dis/gpusrv.dis +dis/grep.dis +dis/grid/lib/announce.dis +dis/grid/register.dis +dis/grid/reglisten.dis +dis/grid/regstyxlisten.dis +dis/gunzip.dis +dis/gzip.dis +dis/history.dis +dis/idea.dis +dis/import.dis +dis/install/applylog.dis +dis/install/arch.dis +dis/install/archfs.dis +dis/install/ckproto.dis +dis/install/create.dis +dis/install/eproto.dis +dis/install/info.dis +dis/install/inst.dis +dis/install/install.dis +dis/install/log.dis +dis/install/logs.dis +dis/install/mergelog.dis +dis/install/mkproto.dis +dis/install/proto.dis +dis/install/proto2list.dis +dis/install/updatelog.dis +dis/install/wdiff.dis +dis/install/wfind.dis +dis/install/wrap.dis +dis/install/wrap2list.dis +dis/iostats.dis +dis/ip/bootpd.dis +dis/ip/dhcp.dis +dis/ip/ping.dis +dis/ip/rip.dis +dis/ip/sntp.dis +dis/ip/tftpd.dis +dis/ip/virgild.dis +dis/jitbench.dis +dis/jitbench2.dis +dis/jitbug.dis +dis/jitbug2.dis +dis/jitcrash.dis +dis/jitshift.dis +dis/jittest.dis +dis/js.dis +dis/kill.dis +dis/ktrans.dis +dis/lib/aadraw.dis +dis/lib/acmewin.dis +dis/lib/arg.dis +dis/lib/asn1.dis +dis/lib/attrdb.dis +dis/lib/attrhash.dis +dis/lib/audit.dis +dis/lib/auditchain.dis +dis/lib/auditprov.dis +dis/lib/auth.dis +dis/lib/auth9.dis +dis/lib/bioauth.dis +dis/lib/bloomfilter.dis +dis/lib/bufio.dis +dis/lib/cfg.dis +dis/lib/cfgfile.dis +dis/lib/chanfill.dis +dis/lib/complete.dis +dis/lib/convcs/8bit_stob.dis +dis/lib/convcs/big5_btos.dis +dis/lib/convcs/big5_stob.dis +dis/lib/convcs/convcs.dis +dis/lib/convcs/cp932_btos.dis +dis/lib/convcs/cp_btos.dis +dis/lib/convcs/cp_stob.dis +dis/lib/convcs/euc-jp_btos.dis +dis/lib/convcs/gb2312_btos.dis +dis/lib/convcs/tune_btos.dis +dis/lib/convcs/tune_stob.dis +dis/lib/convcs/utf8_btos.dis +dis/lib/convcs/utf8_stob.dis +dis/lib/crc.dis +dis/lib/crypt/pkcs.dis +dis/lib/crypt/ssl3.dis +dis/lib/crypt/sslsession.dis +dis/lib/crypt/tls.dis +dis/lib/crypt/x509.dis +dis/lib/csv.dis +dis/lib/daytime.dis +dis/lib/dbm.dis +dis/lib/debdata.dis +dis/lib/debsrc.dis +dis/lib/debug.dis +dis/lib/deflate.dis +dis/lib/devpointer.dis +dis/lib/dial.dis +dis/lib/dialnorm.dis +dis/lib/dialog.dis +dis/lib/dict.dis +dis/lib/dis.dis +dis/lib/diskblocks.dis +dis/lib/disks.dis +dis/lib/ecmascript.dis +dis/lib/encoding/base16.dis +dis/lib/encoding/base32.dis +dis/lib/encoding/base32a.dis +dis/lib/encoding/base64.dis +dis/lib/env.dis +dis/lib/ethcrypto.dis +dis/lib/ether.dis +dis/lib/ethrpc.dis +dis/lib/exception.dis +dis/lib/factotum.dis +dis/lib/fdrun.dis +dis/lib/filepat.dis +dis/lib/format.dis +dis/lib/fsfilter.dis +dis/lib/fslib.dis +dis/lib/fsproto.dis +dis/lib/ftree/cptree.dis +dis/lib/ftree/items.dis +dis/lib/geoproj.dis +dis/lib/git/git.dis +dis/lib/hash.dis +dis/lib/html.dis +dis/lib/ida/ida.dis +dis/lib/ida/idatab.dis +dis/lib/imageremap.dis +dis/lib/imap.dis +dis/lib/inflate.dis +dis/lib/ip.dis +dis/lib/ipattr.dis +dis/lib/json.dis +dis/lib/keyringinst.dis +dis/lib/keyset.dis +dis/lib/libc.dis +dis/lib/libc0.dis +dis/lib/lists.dis +dis/lib/llmclient.dis +dis/lib/lock.dis +dis/lib/login.dis +dis/lib/lucitheme.dis +dis/lib/mailparse.dis +dis/lib/matrixlib.dis +dis/lib/memfs.dis +dis/lib/menu.dis +dis/lib/menuhit.dis +dis/lib/mermaid.dis +dis/lib/midi.dis +dis/lib/msgio.dis +dis/lib/names.dis +dis/lib/nametree.dis +dis/lib/newns.dis +dis/lib/ninep.dis +dis/lib/oldauth.dis +dis/lib/outlinefont.dis +dis/lib/parseman.dis +dis/lib/pdf.dis +dis/lib/plumbing.dis +dis/lib/plumbmsg.dis +dis/lib/pop3.dis +dis/lib/popup.dis +dis/lib/profile.dis +dis/lib/pslib.dis +dis/lib/publicnet.dis +dis/lib/rabin.dis +dis/lib/rand.dis +dis/lib/random.dis +dis/lib/readavif.dis +dis/lib/readdir.dis +dis/lib/readgif.dis +dis/lib/readjpg.dis +dis/lib/readpicfile.dis +dis/lib/readpng.dis +dis/lib/readsvg.dis +dis/lib/readwebp.dis +dis/lib/readxbitmap.dis +dis/lib/regex.dis +dis/lib/regexutils.dis +dis/lib/registries.dis +dis/lib/rfc3339.dis +dis/lib/rfc822.dis +dis/lib/scoretable.dis +dis/lib/secstore.dis +dis/lib/selectfile.dis +dis/lib/sets.dis +dis/lib/sets32.dis +dis/lib/sexprs.dis +dis/lib/slip.dis +dis/lib/smtp.dis +dis/lib/softkbd.dis +dis/lib/sort.dis +dis/lib/spki/spki.dis +dis/lib/spki/verifier.dis +dis/lib/ssl.dis +dis/lib/string.dis +dis/lib/strinttab.dis +dis/lib/stripe.dis +dis/lib/styx.dis +dis/lib/styxflush.dis +dis/lib/styxlib.dis +dis/lib/styxpersist.dis +dis/lib/styxservers.dis +dis/lib/tables.dis +dis/lib/tabs.dis +dis/lib/testing.dis +dis/lib/textwidget.dis +dis/lib/tftp.dis +dis/lib/timers.dis +dis/lib/titlebar.dis +dis/lib/tkclient.dis +dis/lib/translate.dis +dis/lib/twofa.dis +dis/lib/twofaslot.dis +dis/lib/ubfa.dis +dis/lib/url.dis +dis/lib/vac.dis +dis/lib/venti.dis +dis/lib/viewport.dis +dis/lib/virgil.dis +dis/lib/w3c/css.dis +dis/lib/w3c/uris.dis +dis/lib/w3c/xpointers.dis +dis/lib/wait.dis +dis/lib/wallet.dis +dis/lib/watchvars.dis +dis/lib/web.dis +dis/lib/webclient.dis +dis/lib/winplace.dis +dis/lib/wirefmt.dis +dis/lib/wmclient.dis +dis/lib/wmlib.dis +dis/lib/wmsrv.dis +dis/lib/workdir.dis +dis/lib/writegif.dis +dis/lib/x402.dis +dis/lib/xenithwin.dis +dis/lib/xml.dis +dis/limbo.dis +dis/limbtest.dis +dis/listen.dis +dis/llmctl9p.dis +dis/llmsrv.dis +dis/localcron.dis +dis/lockfs.dis +dis/logfile.dis +dis/look.dis +dis/ls.dis +dis/lstar.dis +dis/lucibridge.dis +dis/luciconv.dis +dis/lucictx.dis +dis/lucifer.dis +dis/lucipres.dis +dis/luciuisrv.dis +dis/m4.dis +dis/mail9p.dis +dis/man2html.dis +dis/man2txt.dis +dis/math/ack.dis +dis/math/crackerbarrel.dis +dis/math/factor.dis +dis/math/ffts.dis +dis/math/fibonacci.dis +dis/math/fit.dis +dis/math/genprimes.dis +dis/math/geodesy.dis +dis/math/gr.dis +dis/math/graph0.dis +dis/math/hist0.dis +dis/math/linalg.dis +dis/math/linbench.dis +dis/math/mersenne.dis +dis/math/parts.dis +dis/math/perms.dis +dis/math/pi.dis +dis/math/polyfill.dis +dis/math/polyhedra.dis +dis/math/powers.dis +dis/math/primes.dis +dis/math/sieve.dis +dis/matrix/alert-watcher.dis +dis/matrix/comp-list.dis +dis/matrix/cpu-gauge.dis +dis/matrix/geo-fixture.dis +dis/matrix/geo-map.dis +dis/matrix/line-plot.dis +dis/matrix/llm-context.dis +dis/matrix/llm-recorder.dis +dis/matrix/llm-sessions.dis +dis/matrix/mem-gauge.dis +dis/matrix/net-gauge.dis +dis/matrix/position-table.dis +dis/matrix/proc-list.dis +dis/matrix/risk-gauge.dis +dis/matrix/signal-feed.dis +dis/matrix/sparkline.dis +dis/matrix/sysmon-svc.dis +dis/matrix/tk-notes.dis +dis/matrix/video-ctl.dis +dis/matrix/video-overlay.dis +dis/matrix/video-pane.dis +dis/mc.dis +dis/md5sum.dis +dis/mdb.dis +dis/memfs.dis +dis/mermaid_test.dis +dis/mk.dis +dis/mkdir.dis +dis/mkroot.dis +dis/mntgen.dis +dis/mount.dis +dis/mpeg/decode.dis +dis/mpeg/mpegio.dis +dis/mpeg/mpegperf.dis +dis/mpeg/mpegtest.dis +dis/mpeg/remap24.dis +dis/mpeg/scidct.dis +dis/mpeg/vidplay.dis +dis/mpeg/vidplay9p.dis +dis/mprof.dis +dis/mv.dis +dis/ndb/cs.dis +dis/ndb/csquery.dis +dis/ndb/dns.dis +dis/ndb/dnsquery.dis +dis/ndb/ipquery.dis +dis/ndb/mkhash.dis +dis/ndb/query.dis +dis/ndb/registry.dis +dis/ndb/regquery.dis +dis/netkey.dis +dis/netstat.dis +dis/newer.dis +dis/newuser.dis +dis/ns.dis +dis/nsaudit.dis +dis/nsbuild.dis +dis/os.dis +dis/p.dis +dis/pause.dis +dis/pipefile.dis +dis/pipefs.dis +dis/plumb.dis +dis/plumber.dis +dis/prof.dis +dis/ps.dis +dis/puttar.dis +dis/pwd.dis +dis/ramfile.dis +dis/randpass.dis +dis/raw2iaf.dis +dis/rawdbfs.dis +dis/rcmd.dis +dis/read.dis +dis/rm.dis +dis/rng.dis +dis/runas.dis +dis/scap.dis +dis/sed.dis +dis/sendmail.dis +dis/seq.dis +dis/sh.dis +dis/sh/arg.dis +dis/sh/csv.dis +dis/sh/echo.dis +dis/sh/expr.dis +dis/sh/file2chan.dis +dis/sh/mload.dis +dis/sh/mpexpr.dis +dis/sh/regex.dis +dis/sh/sexprs.dis +dis/sh/sh.dis +dis/sh/std.dis +dis/sh/string.dis +dis/sh/tk.dis +dis/sha1sum.dis +dis/sleep.dis +dis/snapd.dis +dis/sort.dis +dis/stack.dis +dis/stackv.dis +dis/stream.dis +dis/strings.dis +dis/styxchat.dis +dis/styxlisten.dis +dis/styxmon.dis +dis/sum.dis +dis/svc/httpd/alarms.dis +dis/svc/httpd/cache.dis +dis/svc/httpd/cgiparse.dis +dis/svc/httpd/contents.dis +dis/svc/httpd/date.dis +dis/svc/httpd/echo.dis +dis/svc/httpd/httpd.dis +dis/svc/httpd/imagemap.dis +dis/svc/httpd/parser.dis +dis/svc/httpd/redirect.dis +dis/svc/httpd/stats.dis +dis/svc/httpd/wikipost.dis +dis/svc/webget/date.dis +dis/svc/webget/file.dis +dis/svc/webget/ftp.dis +dis/svc/webget/http.dis +dis/svc/webget/image2enc.dis +dis/svc/webget/message.dis +dis/svc/webget/webget.dis +dis/svc/webget/wgutils.dis +dis/tail.dis +dis/tarfs.dis +dis/tcs.dis +dis/tee.dis +dis/telnet.dis +dis/test.dis +dis/test9p.dis +dis/tests/9p_export_test.dis +dis/tests/agent_test.dis +dis/tests/agentlib_mcp_test.dis +dis/tests/agentlib_test.dis +dis/tests/alpha_test.dis +dis/tests/arrayinit_test.dis +dis/tests/asyncio_test.dis +dis/tests/auditchain_test.dis +dis/tests/auditprov_test.dis +dis/tests/auditsign_test.dis +dis/tests/auditverify_test.dis +dis/tests/authneg_test.dis +dis/tests/authnode.dis +dis/tests/awk_test.dis +dis/tests/bioauth_test.dis +dis/tests/bufio_test.dis +dis/tests/casel_test.dis +dis/tests/cipher_matrix_test.dis +dis/tests/concurrency_test.dis +dis/tests/concurrent_auth_test.dis +dis/tests/contacts_tool_test.dis +dis/tests/cookiesrv_httponly_test.dis +dis/tests/cowfs_test.dis +dis/tests/crypto_props_test.dis +dis/tests/crypto_test.dis +dis/tests/cut_test.dis +dis/tests/delegation_budget_test.dis +dis/tests/dial_test.dis +dis/tests/dialnorm_test.dis +dis/tests/edit_test.dis +dis/tests/editor_test.dis +dis/tests/ethcrypto_test.dis +dis/tests/ethrpc_conv_test.dis +dis/tests/example_test.dis +dis/tests/factotum_test.dis +dis/tests/font_format_test.dis +dis/tests/fractal_tool_test.dis +dis/tests/geomap_test.dis +dis/tests/git_test.dis +dis/tests/goroutine_leak_test.dis +dis/tests/gpu_bench.dis +dis/tests/gpu_smoke.dis +dis/tests/gpu_test.dis +dis/tests/handshake_fuzz_test.dis +dis/tests/hello_test.dis +dis/tests/html_test.dis +dis/tests/imap_test.dis +dis/tests/imgload_test.dis +dis/tests/interop_test.dis +dis/tests/interrupt_test.dis +dis/tests/jit_test.dis +dis/tests/json_test.dis +dis/tests/kbddrainer_test.dis +dis/tests/keyring_test.dis +dis/tests/keyringinst_test.dis +dis/tests/lists_test.dis +dis/tests/llmclient_reqshape_test.dis +dis/tests/llmclient_sse_fallback_test.dis +dis/tests/llmclient_think_gating_test.dis +dis/tests/llmsrv_test.dis +dis/tests/lucibridge_approval_test.dis +dis/tests/lucibridge_test.dis +dis/tests/lucifer_flicker_test.dis +dis/tests/lucifer_helpers_test.dis +dis/tests/lucifer_winstart_test.dis +dis/tests/lucifer_zorder_test.dis +dis/tests/lucitheme_test.dis +dis/tests/luciuisrv_test.dis +dis/tests/mail9p_test.dis +dis/tests/mail_provision_test.dis +dis/tests/matrix_perfdashboard_test.dis +dis/tests/matrix_sysmon_test.dis +dis/tests/matrix_test.dis +dis/tests/menu_test.dis +dis/tests/mldsa_stress_test.dis +dis/tests/mldsa_test.dis +dis/tests/mlkem_stress_test.dis +dis/tests/mlkem_test.dis +dis/tests/msg_approval_test.dis +dis/tests/msg_badsrc.dis +dis/tests/msg_capability_test.dis +dis/tests/msg_notification_escape_test.dis +dis/tests/msg_register_test.dis +dis/tests/ninepsrc_config_test.dis +dis/tests/opus_test.dis +dis/tests/outlinefont_test.dis +dis/tests/pathmanage_test.dis +dis/tests/pdf_conformance_test.dis +dis/tests/pdf_test.dis +dis/tests/pqauth_test.dis +dis/tests/pqc_fuzz_test.dis +dis/tests/pres_launch_test.dis +dis/tests/publicnet_host_test.dis +dis/tests/publicnet_test.dis +dis/tests/regex_test.dis +dis/tests/render_registry_test.dis +dis/tests/runner.dis +dis/tests/sdl3_test.dis +dis/tests/secp256k1_test.dis +dis/tests/secstore_abort_probe.dis +dis/tests/secstore_crypto_test.dis +dis/tests/sha3_test.dis +dis/tests/shell_tool_test.dis +dis/tests/slhdsa_test.dis +dis/tests/sms_msgsrc_test.dis +dis/tests/sms_tool_test.dis +dis/tests/softkbd_test.dis +dis/tests/sort_test.dis +dis/tests/spawn_helpers_test.dis +dis/tests/spawn_test.dis +dis/tests/ssl_transport_test.dis +dis/tests/stderr_test.dis +dis/tests/string_test.dis +dis/tests/task_concurrent_probe.dis +dis/tests/task_consistency_test.dis +dis/tests/taskparse_test.dis +dis/tests/tcp_test.dis +dis/tests/tempfile_test.dis +dis/tests/testing/testing_test.dis +dis/tests/textwidget_test.dis +dis/tests/tk_test.dis +dis/tests/tkimgrender.dis +dis/tests/tkrender.dis +dis/tests/tls_crypto_test.dis +dis/tests/tls_live_test.dis +dis/tests/tls_pq_test.dis +dis/tests/tls_protocol_test.dis +dis/tests/tlsclient.dis +dis/tests/tool_schema_test.dis +dis/tests/tooldoc_test.dis +dis/tests/tools9p_test.dis +dis/tests/tooluse_test.dis +dis/tests/twofaslot_test.dis +dis/tests/veltro_cc_alignment_test.dis +dis/tests/veltro_charon_security_test.dis +dis/tests/veltro_concurrent_test.dis +dis/tests/veltro_launch_test.dis +dis/tests/veltro_more_tools_test.dis +dis/tests/veltro_present_security_test.dis +dis/tests/veltro_security_test.dis +dis/tests/veltro_test.dis +dis/tests/veltro_tools_test.dis +dis/tests/voice_scripts_test.dis +dis/tests/wallet_capability_test.dis +dis/tests/wallet_policy_test.dis +dis/tests/webclient_test.dis +dis/tests/webfs_test.dis +dis/tests/wiki9p_security_probe.dis +dis/tests/wireformat_test.dis +dis/tests/wm_apps_test.dis +dis/tests/wmsrv_zorder_test.dis +dis/tests/x402_test.dis +dis/tests/x509_test.dis +dis/tests/xenith_concurrency_test.dis +dis/tests/xenith_exit_test.dis +dis/tests/xml_test.dis +dis/time.dis +dis/timestamp.dis +dis/tlsperf.dis +dis/tokenize.dis +dis/touch.dis +dis/tr.dis +dis/trfs.dis +dis/tsort.dis +dis/unicode.dis +dis/uniq.dis +dis/units.dis +dis/unmount.dis +dis/uudecode.dis +dis/uuencode.dis +dis/vacfs.dis +dis/vacget.dis +dis/vacput.dis +dis/veltro/agentlib.dis +dis/veltro/cowfs.dis +dis/veltro/mc9p.dis +dis/veltro/msg9p.dis +dis/veltro/msgwatch.dis +dis/veltro/ninepsrc.dis +dis/veltro/nsconstruct.dis +dis/veltro/repl.dis +dis/veltro/sources/email.dis +dis/veltro/sources/mockmail.dis +dis/veltro/sources/sms.dis +dis/veltro/speech9p.dis +dis/veltro/subagent.dis +dis/veltro/taskboard9p.dis +dis/veltro/tools/browse.dis +dis/veltro/tools/charon.dis +dis/veltro/tools/contacts.dis +dis/veltro/tools/dial.dis +dis/veltro/tools/diff.dis +dis/veltro/tools/edit.dis +dis/veltro/tools/editor.dis +dis/veltro/tools/exec.dis +dis/veltro/tools/find.dis +dis/veltro/tools/fractal.dis +dis/veltro/tools/gap.dis +dis/veltro/tools/git.dis +dis/veltro/tools/gpu.dis +dis/veltro/tools/grep.dis +dis/veltro/tools/hear.dis +dis/veltro/tools/http.dis +dis/veltro/tools/json.dis +dis/veltro/tools/keyring.dis +dis/veltro/tools/launch.dis +dis/veltro/tools/limbo.dis +dis/veltro/tools/list.dis +dis/veltro/tools/man.dis +dis/veltro/tools/matrix.dis +dis/veltro/tools/memory.dis +dis/veltro/tools/mount.dis +dis/veltro/tools/payfetch.dis +dis/veltro/tools/plan.dis +dis/veltro/tools/present.dis +dis/veltro/tools/read.dis +dis/veltro/tools/say.dis +dis/veltro/tools/search.dis +dis/veltro/tools/shell.dis +dis/veltro/tools/sms.dis +dis/veltro/tools/spawn.dis +dis/veltro/tools/task.dis +dis/veltro/tools/todo.dis +dis/veltro/tools/vision.dis +dis/veltro/tools/wallet.dis +dis/veltro/tools/webfetch.dis +dis/veltro/tools/websearch.dis +dis/veltro/tools/wiki.dis +dis/veltro/tools/write.dis +dis/veltro/tools/xenith.dis +dis/veltro/tools9p.dis +dis/veltro/veltro.dis +dis/veltro/wallet9p.dis +dis/veltro/wiki9p.dis +dis/ventisrv.dis +dis/vid9p.dis +dis/wav2iaf.dis +dis/wc.dis +dis/webfs.dis +dis/webgrab.dis +dis/wiki.dis +dis/wikifs.dis +dis/wm/about.dis +dis/wm/bounce.dis +dis/wm/charon.dis +dis/wm/clock.dis +dis/wm/coffee.dis +dis/wm/colors.dis +dis/wm/date.dis +dis/wm/deb.dis +dis/wm/editor.dis +dis/wm/fractals.dis +dis/wm/ftree.dis +dis/wm/keyring.dis +dis/wm/lens.dis +dis/wm/logon.dis +dis/wm/man.dis +dis/wm/matrix.dis +dis/wm/memory.dis +dis/wm/presrender.dis +dis/wm/rt.dis +dis/wm/sam.dis +dis/wm/samengine.dis +dis/wm/samstub.dis +dis/wm/samtk.dis +dis/wm/settings.dis +dis/wm/sh.dis +dis/wm/shell.dis +dis/wm/task.dis +dis/wm/tetris.dis +dis/wm/view.dis +dis/wm/wallet.dis +dis/wm/wm.dis +dis/wmexport.dis +dis/wmimport.dis +dis/xargs.dis +dis/xd.dis +dis/xenith.dis +dis/xenith/asyncio.dis +dis/xenith/buff.dis +dis/xenith/col.dis +dis/xenith/dat.dis +dis/xenith/disk.dis +dis/xenith/ecmd.dis +dis/xenith/edit.dis +dis/xenith/elog.dis +dis/xenith/exec.dis +dis/xenith/file.dis +dis/xenith/format.dis +dis/xenith/frame.dis +dis/xenith/fsys.dis +dis/xenith/graph.dis +dis/xenith/gui.dis +dis/xenith/imgload.dis +dis/xenith/look.dis +dis/xenith/pngload.dis +dis/xenith/regx.dis +dis/xenith/render.dis +dis/xenith/render/charonrender.dis +dis/xenith/render/htmlfmt.dis +dis/xenith/render/htmlrender.dis +dis/xenith/render/imgrender.dis +dis/xenith/render/mdfmt.dis +dis/xenith/render/mdrender.dis +dis/xenith/render/mermaidrender.dis +dis/xenith/render/pdfrender.dis +dis/xenith/render/rlayout.dis +dis/xenith/render/tlayout.dis +dis/xenith/row.dis +dis/xenith/scrl.dis +dis/xenith/styxaux.dis +dis/xenith/text.dis +dis/xenith/time.dis +dis/xenith/util.dis +dis/xenith/wind.dis +dis/xenith/xenith.dis +dis/xenith/xfid.dis +dis/yacc.dis +dis/zeros.dis diff --git a/tools/verify-dis-build.sh b/tools/verify-dis-build.sh new file mode 100755 index 000000000..33fc2305f --- /dev/null +++ b/tools/verify-dis-build.sh @@ -0,0 +1,111 @@ +#!/bin/sh +# +# verify-dis-build.sh — build the runtime tree and check nothing is missing. +# +# dis/ is not tracked: it is a build product, like emu/*/o.emu. A release +# ships it because the CI job that packages the release builds it first. +# +# Untracking removes the drift problem (bytecode can no longer be stale +# relative to its source, because it is always freshly compiled) and +# replaces it with a quieter one: a module dropped from an mkfile's TARG +# simply stops existing, and nothing says so until something fails to load +# at runtime. That is not hypothetical — 45 modules were in this state and +# only kept working because their bytecode happened to be committed. +# +# So the set of files the build must produce is itself tracked, as +# tools/dis-manifest.txt. ~960 lines of text instead of ~960 binaries: +# a module appearing or disappearing is a reviewable diff. +# +# Adding a module: build it, then add its path to the manifest in the same +# commit. Removing one: delete both. The diff should say what you meant. +# +# A MISSING module fails the check: something the product needs stopped +# being built. An EXTRA one is only reported. That asymmetry is +# deliberate -- extras are usually a local scratch build or a step that +# compiles something on the side (release.yml compiles the test-framework +# self-test into dis/lib/), and with bytecode no longer committable, a +# stray file cannot be published by accident the way a stale one could. +# +# Exit codes: +# 0 — the build produced everything the manifest lists +# 1 — modules missing +# 2 — setup error (wrong directory, missing toolchain, build failure) +# +set -e + +# comm(1) requires both inputs in the same collation order, and sort(1) +# collates differently by locale -- a manifest generated under en_GB and +# compared under the C locale on a CI runner fails with +# "comm: file 1 is not in sorted order". Pin both ends to C. +LC_ALL=C +export LC_ALL + +ROOT=$(cd "$(dirname "$0")/.." && pwd) +export ROOT +cd "$ROOT" + +MANIFEST="$ROOT/tools/dis-manifest.txt" + +if [ ! -f mkconfig ] || [ ! -f "$MANIFEST" ]; then + echo "verify-dis-build: run from an InferNode checkout" >&2 + exit 2 +fi + +if ! command -v mk >/dev/null 2>&1 || ! command -v limbo >/dev/null 2>&1; then + echo "verify-dis-build: mk and limbo must be on PATH" >&2 + echo " build them first: SYSTARG=\$(uname -s) OBJTYPE= ./makemk.sh" >&2 + echo " then add: \$ROOT/\$SYSHOST/\$OBJTYPE/bin" >&2 + exit 2 +fi + +# Every tree with a DISBIN under dis/, acme/dis/ or xenith/dis/. +# appl/mpeg and appl/veltro are NOT in appl/mkfile's DIRS, so +# `cd appl && mk install` does not reach them. Listed explicitly rather +# than left to be rediscovered by whoever hits it next. +DIRS="appl appl/mpeg appl/veltro tests" + +echo "verify-dis-build: building the runtime tree" +for d in $DIRS; do + if ! (cd "$d" && mk install) > "$ROOT/.dis-build-$$.log" 2>&1; then + echo "verify-dis-build: build failed in $d" >&2 + grep -E '\.b:[0-9]+:' "$ROOT/.dis-build-$$.log" | grep -v 'warning:' >&2 || true + rm -f "$ROOT/.dis-build-$$.log" + exit 2 + fi + rm -f "$ROOT/.dis-build-$$.log" +done + +# Scope: dis/ (the runtime, which releases ship) and acme/dis/ (acme's own +# command directory). xenith/dis/ is built by appl/xenith/xenith/bin but was +# never tracked and is not staged into releases, so it is not the manifest's +# business -- including it would only add two dozen permanent "extra" lines. +built="$ROOT/.dis-built-$$.txt" +want="$ROOT/.dis-want-$$.txt" +find dis acme/dis -name '*.dis' -type f 2>/dev/null | sed 's|^\./||' | sort > "$built" +# Sort the manifest here too rather than trusting its committed order: a line +# added in the wrong place should be a harmless diff, not a CI failure. +sort "$MANIFEST" > "$want" + +missing=$(comm -23 "$want" "$built") +extra=$(comm -13 "$want" "$built") +rm -f "$built" "$want" + +rc=0 +if [ -n "$missing" ]; then + echo "" >&2 + echo "the build did not produce these, but the manifest lists them:" >&2 + echo "$missing" | sed 's/^/ /' >&2 + echo "" >&2 + echo " A module is usually missing because it is not in its mkfile TARG." >&2 + echo " If it was removed on purpose, drop its line from" >&2 + echo " tools/dis-manifest.txt in the same commit." >&2 + rc=1 +fi +if [ -n "$extra" ]; then + echo "note: built but not listed in tools/dis-manifest.txt:" + echo "$extra" | sed 's/^/ /' + echo " If these are meant to ship, add them to the manifest." +fi +[ "$rc" = 0 ] || exit "$rc" + +echo "OK: the build produced all $(wc -l < "$MANIFEST" | tr -d ' ') modules the manifest lists" diff --git a/tools/verify-dis-paths.sh b/tools/verify-dis-paths.sh deleted file mode 100755 index 969814d7c..000000000 --- a/tools/verify-dis-paths.sh +++ /dev/null @@ -1,108 +0,0 @@ -#!/bin/bash -# -# verify-dis-paths.sh — fail-fast guard against the "wrong .dis target" bug -# that cost us a full session of theme-propagation debugging. -# -# What happened: I was compiling lucifer-side modules with -# limbo -o dis/cmd/lucictx.dis appl/cmd/lucictx.b -# but lucifer loads them via -# LuciCtx: module { PATH: con "/dis/lucictx.dis"; ...} -# i.e. /dis/lucictx.dis (without cmd/). Old stale .dis files at the -# correct path silently kept running while every "rebuilt" file landed -# in a parallel directory emu never read from. -# -# This script verifies that for every Limbo source file in -# appl/cmd/ that contains a `PATH: con "/dis/...` declaration, the -# corresponding compiled .dis exists at that path AND is at least as -# new as the source. Runs in under a second. Pre-commit hook -# candidate; also wired into `make` (see mkfile). -# -# Exit codes: -# 0 — all sources have a fresh, correctly-placed .dis -# 1 — at least one mismatch; details printed to stderr -# 2 — usage / setup error -# -set -euo pipefail - -ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -cd "$ROOT" - -fail=0 -checked=0 - -# stat(1) is the classic cross-platform divergence: -# macOS / BSD: stat -f %m FILE → mtime as epoch seconds -# GNU / Linux: stat -c %Y FILE → mtime as epoch seconds -# Picking the wrong one prints filesystem-info text starting with -# "File:", which the (( … )) arithmetic later treated as an unset -# variable name and crashed CI. Detect once and stash a function. -if stat -c %Y "$0" >/dev/null 2>&1; then - mtime() { stat -c %Y "$1"; } -else - mtime() { stat -f %m "$1"; } -fi - -scan_module_path() { - # Return the PATH constant of the module that this .b file - # IMPLEMENTS (top-level `implement Foo;`), not the first PATH it - # happens to mention. Files commonly cite the PATHs of modules - # they LOAD (cowfs, etc.) before declaring their own interface; - # matching the first PATH alone gives wrong answers. - # - # Strategy: find `implement Foo;`, then scan forward for - # `Foo: module {` ... `PATH: con "/dis/..."` ... `}`. - awk ' - /^implement[[:space:]]+[A-Za-z][A-Za-z0-9_]*[[:space:]]*;/ { - match($0, /[A-Za-z][A-Za-z0-9_]*[[:space:]]*;/) - impl = substr($0, RSTART, RLENGTH) - sub(/[[:space:]]*;.*$/, "", impl) - } - impl != "" && $0 ~ ("^" impl "[[:space:]]*:[[:space:]]*module") { - in_mod = 1 - next - } - in_mod && /PATH[[:space:]]*:[[:space:]]*con[[:space:]]*"\/dis\// { - match($0, /"\/dis\/[^"]+"/) - if(RSTART > 0) { - p = substr($0, RSTART+1, RLENGTH-2) - print p - exit - } - } - in_mod && /^[[:space:]]*}/ { - in_mod = 0 - } - ' "$1" -} - -for src in appl/cmd/*.b; do - disrel=$(scan_module_path "$src" || true) - [[ -z "$disrel" ]] && continue - - # Strip leading slash and prefix with the source-tree root. - dispath="${disrel#/}" - if [[ ! -f "$dispath" ]]; then - echo "FAIL: $src declares PATH=$disrel but $dispath is missing" >&2 - fail=1 - continue - fi - - src_t=$(mtime "$src") - dis_t=$(mtime "$dispath") - - if (( src_t > dis_t )); then - echo "FAIL: $src is newer than $dispath (recompile needed)" >&2 - fail=1 - fi - checked=$((checked + 1)) -done - -if (( fail )); then - echo "" >&2 - echo "$checked sources checked; FAILURES above." >&2 - echo "Recompile with: limbo -I module -o " >&2 - echo "(do NOT default to dis/cmd/X.dis — read the module's PATH constant)" >&2 - exit 1 -fi - -echo "OK: $checked sources have fresh .dis at their declared PATH"