About:
Invest:
Notable changes in this release:
MNT Reform laptop is a first class citizen
now includes freedoom(1) wad
scroll down for more
Multiple installation media are provided for PC, Raspberry Pi, and MNT Reform.For PC, burn an .iso file to CD, or dd it directly to USB media. ForRaspberry Pi or MNT Reform, dd an .img file directly to sdcard.
The pi.img file can be used for Raspberry Pi 1, 2, and 3. The pi3.imgfile can be used for Raspberry Pi 3 and 4.
http://9front.org/iso/9front-9442.0e66f87316e571f7edf5274369ec69a5905507aa.386.iso.gz.torrent
http://9front.org/iso/9front-9442.0e66f87316e571f7edf5274369ec69a5905507aa.amd64.iso.gz.torrent
http://9front.org/iso/9front-9442.0e66f87316e571f7edf5274369ec69a5905507aa.pi.img.gz.torrent
http://9front.org/iso/9front-9442.0e66f87316e571f7edf5274369ec69a5905507aa.pi3.img.gz.torrent
http://9front.org/iso/9front-9442.0e66f87316e571f7edf5274369ec69a5905507aa.reform.img.gz.torrent
; sha1sum -2 256 9front-9442*gz dd67daad1bf2397c19543eeeb4aa6e2642febdcce3100556bf4b1af7cb38e252 9front-9442.0e66f87316e571f7edf5274369ec69a5905507aa.386.iso.gz c577bdd3190211fd0e9b46c1afada712b9a9ee460a4d5a4c679e522f5f72eda6 9front-9442.0e66f87316e571f7edf5274369ec69a5905507aa.amd64.iso.gz 012812e745e642b1c8d27fc58b001a34f0ab4f605660c89cbded41ca20cce503 9front-9442.0e66f87316e571f7edf5274369ec69a5905507aa.pi.img.gz 6313e1d028380a11228613c2a78f76f28685a119f1ab8c6aae5393dedc17db02 9front-9442.0e66f87316e571f7edf5274369ec69a5905507aa.pi3.img.gz 83b1dd8acaacd0dcb9bed188cbf33f3a410486d1724d15bcef4646c0288bec95 9front-9442.0e66f87316e571f7edf5274369ec69a5905507aa.reform.img.gz
http://lux.felloff.net/usr/cinap_lenrek/9front/
https://ftp.cc.uoc.gr/mirrors/9front/
http://git.9front.org/plan9front/plan9front/HEAD/info.html
http://fqa.9front.org/dash1.goldenageofballooning.pdf
dash 1 manual:http://9front.org/propaganda/books
by cinap
http://9front.org/mp3/fal4.mp3
Oscar Zoroaster Phadrig Isaac Norman Henkle Emmannuel Ambroise Diggs
acpi: /mnt/acpi → /mnt/pm
aux/acpi, aux/imx8pm: stats(1) expects two numbers for each cputemp reading
aux/acpi: fix division by zero (thanks umbraticus)
aux/acpi: mount -a on /dev instead of /mnt/pm; ctl → pmctl
aux/acpi: simplify/rework; support “power off” via pmctl
aux/imx8pm: add core/gpu/vpu temp read support (kernel counterpart is TBD)
aux/imx8pm: add relative brightness setting (-+N), useful for key bindings
aux/imx8pm: calibrate per documentation (but with questionable values)
aux/imx8pm: hide gpu and vpu from cputemp
aux/kbdfs, nusb/kb: add basic media keys support; add /dev/hidNctl to change repeat/delay; fix a race condition
aux/kbdfs: correct comment regarding 0x79 and 0x7b codes.
aux/vga: misc. igfx fixes for displayport
aux/wm8960: audio controls fs for MNT Reform
aux/wm8960: disable speaker boost to avoid clipping
aux/wm8960: do the math
aux/wm8960: expose 3d stereo controls
aux/wm8960: fix chopped audio on the speakers with high volume
aux/wm8960: make jack detect work; enable thermal shutdown; fix fractional div part
aux/wm8960: provide hardcoded “speed” in volume file
aux/wm8960: reduce popping, clean up
aux/wm8960: relative volume adjustment through the fs interface
aux/wm8960: run as master and provide more precise clock; add oneshot mode (no fs)
aux/wm8960: support 48kHz via “speed” verb
bind, mount: stop returning mount id
devarch: add name for VIA C7 Eden
devi2c: add generic i2c bus driver
devip: arp: don’t leak data in the padding of arp replies
devip: arp: make sure arpresolve() only returns single packet
devip: arp: move arp expire logic into own function
devip: do tcp mss clamping when forwarding packets
devip: fix ipv6 mss clamping
devip: get rid of Ipifc.mintu
devip: less stupid hnputs_csum()
devip: make Rproxy flag explicit
devip: replicate the nat-flag (Rtrans) when superceding interface route
devip: use port/netif.h constants for ethermedium
devpci: provide a #$ device for PCI config access
devvga: fix race condition between writes to vgactl
ether8169: support for RTL8168EP chips
etherimx: fix link negotiation
etherimx: set iomux pad configiguration
etheriwl: add 7265 device id
ethervgbe: enable auto-negotiation and ipv6 (thanks arne)
igfx: Add support for Xeon E3-1200v3
imx8/gpio: add interrupt handlers support
imx8/gpio: allow 0 as “no-op” gpio pin
imx8/gpio: missed change in the previous commit
imx8/gpio: use u32int for bit mask
imx8/lcd: disable the bridge output on blank
imx8/lcd: reduce flicker
imx8/lcd: rework screen blanking
imx8/lcd: set iomux pad configuration
imx8/lcd: silly work around for display instability
imx8/lcd: toggle lcdif on blankscreen
imx8/pm: provide acpi(1)-compatible battery readings
imx8/sai, aux/wm8960: expose jack detect status in #A/audiostat
imx8/sai: do not strangle the core with interrupts on underruns
imx8/sai: double the delay; set clock explicitly
imx8/sai: flush the ring on close to avoid garbage leftovers on restarts
imx8/sai: increase watermark, run in slave mode, continue on fifo errors
imx8/sai: reduce watermark; use the fifo size reported by the platform; remove useless stuff
imx8/usbxhci: bring usb out of reset
imx8/usbxhciimx: fix a set and not used warning
imx8/usdhc: cleanup, set pad configuration
imx8/usdhc: implement highspeed mode (50Mhz)
imx8/usdhc: work around broken multi-write for now
imx8: add a semi-working SAI2 audio driver
imx8: add aux/imx8pm with lcd brightness control
imx8: add gpio helper gpioout()/gpioin()
imx8: add i2c bus driver
imx8: add iomuxpad() helper for pad and mux control
imx8: add simple i2c rtc driver for NXP PCF8523
imx8: add work in progress i.MX8MQ kernel for the mntreform2 laptop
imx8: add xhci driver for the soc
imx8: better syntax for iomuxpad() options using ~ for negation
imx8: ccm: fix sai copy-paste typos
imx8: cleanup mem.h
imx8: detect cpu lcycles() frequency
imx8: enable/expose tmu
imx8: fix install target
imx8: fix reduced lcdif pix clk workaround by enabling underflow recovery
imx8: get mac address from OTP rom
imx8: gic: irqenable → intrenable
imx8: 1.6Ghz turbo
imx8: implement /dev/reboot support
imx8: implement psci calls for system reset and multicore startup
imx8: invalidate l2 cache as well (fixes not fully cleared BSS on cold boot)
imx8: less stupid pci interrupt handler
imx8: load a plan9.ini at CONFADDR 0x40010000
imx8: mainscreen turn on!
imx8: make gpc functionality available with a powerup() function
imx8: pcie and nvme support
imx8: port usdhc driver (from bcm/sdhc) for external sdcard
imx8: provide iomuxgpr() function to access iomuxc’s gpr’s
imx8: qos magic to avoid interference between pcie and lcdif
imx8: reset lcdif and sn65sdi86 bridge before init
imx8: set virtual timer offset to zero for all cores
imx8: turn backlight off when blanking
kernel: add /rc to devroot
kernel: add chdev command to devcons
kernel: add dev dtracy provider.
kernel: add devskel for pc and pc64
kernel: allocate notes in heap
kernel: allow kiloprocs – allocate procs lazily
kernel: be more careful about argc for /dev/drivers writes
kernel: bootrc: add bootloop=
kernel: cleanup unused fields from devpipe
kernel: compute available kernel pages using sizeof(Proc*)
kernel: consistently add devbridge and netdevmedium to kernel configs
kernel: devskel: use RWlock
kernel: devwalk: correct debug print
kernel: disable wstat for devpipe
kernel: exclude ppc kernels from all target
kernel: fix freeb() for custom pools
kernel: fix noteid change race condition from devproc while forking (thanks joe7)
kernel: get rid of Proc.kstack
kernel: half NERR, refcount Note’s to avoid excessive allocations for postnotepg()
kernel: remove dead case from devpipe
kernel: simplify notify() adding common popnote() function
kernel: use 64 bits for mountids
mkdevc: fix dtracy-disabled builds (thanks ori)
nusb/disk: always allow raw scsi request (even without media present)
nusb/disk: fix interactions with libdisk
nusb/kb, aux/kbdfs: add brightness down/up media keys
nusb/kb: add “rawon”/“rawoff” to switch ctl fid into raw report output mode
nusb/kb: fix scancode for right ctl
nusb/kb: support 無変換, 変換, and ‘ひらがな / カタカナ’ keys
nusb/ptp: increase payload
nusb/usbd: retry opendevtata() a few times on attach (work around mnt-reform trackball)
pc/rtc: make sure string is NUL terminates for rtc write
pc64: half KSTACK to 8k.
reform/audio: remove DAC vol limit; discharge HP caps on init
reform/audio: remove HP caps discharge; faster hp/spk switch and (un)mute response
reform/audio: use soft-mute to toggle DAC
reform/pm: add keyboard light level controlling to /dev/light
reform/pm: calculate time to full (dis)charge; low→warn capacity; endless loop protection
reform/pm: kbdoled: allow any size/depth of uncompressed image - convert ourselves
reform/pm: kbdoled: clear the OLED on zero-length write
reform/pm: lpc comms: increase delays to 80ms
reform/pm: lpccall: read as much as possible after the command; clean up
reform/pm: measure CPU temperature only when requested, disable monitoring right away
reform/pm: oops. do not invert
reform/pm: power off via the keyboard first
reform/pm: provide /dev/kbdoled to display a 126x32x1 bitmap on the keyboard OLED
reform/pm: serve lpc readouts over a queue to avoid lockups on other requests
reform/shortcuts: change to use available media keys via Hyper
reform/shortcuts: negative step values
reform/shortcuts: use Kmod4+esc to (un)mute the audio
reform/shortcuts: use media keys for LCD brightness control
reform: add pmctl to read more info and to turn power rails off; manpages
reform: add reform/shortcuts
reform: only override console=0 when no plan9.ini is passed
reform: tweak manpage and reform/audio a bit
sdnvme: add dmaflush() instructions, move to port/
sdnvme: avoid “empty if body” warning
sdnvme: correct mode/serial/firmware string lengths
sdnvme: fix missing unlock() in submit queue full case
sysproc: raise limit on #! lines, and allow quoted args
tcpmssclamp: only check the first ipv4 fragment for tcp header
tcpmssclamp: pass correct size tcpmssclamp()
uartimx: fix interrupts
usb: fix ehci isochronous “in” split transactions
usbsdmux: Add program to control usb-sd-mux device
usbxhci: eliminate “set but not used” warning
usbxhciimx: set iomux pad configuration
zynq: correctly specify dolock flag to postnote()
ar: print output to stdout (thanks uramekus)
cc: take our pickle out of the peephole
dtracy: correctly look up aggregate keys
dtracy: make timer probes run in interrupt context
ape/bsd/bind.c, ape/bsd/listen.c: Set local IP.
ape/bsd/bind.c, ape/bsd/listen.c: Use _syserrno.
ape/bsd/bind.c: Do not issue “bind *”.
ape/bsd/bind.c: Do not pretend that the port could be negative.
ape/bsd/listen.c: Do not try to issue “announce *”.
ape/bsd/listen.c: Drop “bind 0”.
ape: fix warning building mkstemp
lib9p: double the buffer for /srv/$service
libFLAC: update 1.3.4 → 1.4.0
libc: shorten strchr and runestrchr
libc: tmdate: provide better parse errors
libc: tmparse: remove incorrect isalpha definition
libdraw: bikeshed formatting
libdtracy: fix wrong key size comparsion in dtarecord()
libflac: work around kencc running out of registers on arm
libndb: increase buffer size to allow longer lines
libtags: opus/vorbis: make sure to get to the last frame to have the full duration
libtags: pick R128 gain
libtags: try other formats after id3v2 is found
libtags: vorbis, opus: ignore tags past the ogg page
audio/flacdec: don’t run pcmconv on s16r44100c2
audio/mkplist: don’t fail entirely if a directory is not accessible
audio/mkplist: leverage parallelism
audio/zuke: “r” key - “repeat one” mode, based on the patch from qwx (thanks)
audio/zuke: add slow scrolling
audio/zuke: basic replay gain support
audio/zuke: clear out enter() prompt image if search failed
audio/zuke: clip scrolling to the edges
audio/zuke: display currently enabled modes when stopped
audio/zuke: don’t blink the mouse pointer while idling
audio/zuke: don’t fall into the rathole
audio/zuke: faster redraw without flashing - XRGB32 with backing image
audio/zuke: fix newly introduced bugs
audio/zuke: fix off-by-one in playlist loading; initialize scrolling to avoid jump on first track
audio/zuke: fix playlist plumbing while in shuffled mode
audio/zuke: fix repeat and replay gain modes not showing when playing network streams
audio/zuke: fix seeking with mouse
audio/zuke: fix wrong string width of playback position calculated on network streams
audio/zuke: fix/enable playlist loading via plumber “audio” port
audio/zuke: kill off decoders; use more OCEXEC
audio/zuke: less garbage dereferencing, stop interrupting decoders
audio/zuke: properly report empty playlist error
audio/zuke: put the search input on its own window
audio/zuke: redraw as soon as search input is enter (not only cancelled); more chance for non-blocking redraw
audio/zuke: redraw in a separate thread - no audio dropouts on scrolling, more responsive
audio/zuke: rewrite rendering logic
audio/zuke: seekto: vlong, unsigned doesn’t work well for negative numbers…
audio/zuke: update ICY title from the stream metadata while playing
audio/zuke: use digits to enter exact seek position
audio/zuke: use percentile to calculate relative widths of columns
auth/acmed: remove obsolete ip/acmed.c
auth/box: -s, -. flags
auth/box: bind in the binary by default
auth/box: build restricted namespaces using components from the parent.
auth/box: don’t bother switching to none
auth/box: preserve cwd name, but clear it out
auth/newns: add chdev command
aux/9pcon: add support for Rerror in assert mode
aux/9pcon: add assert flag
aux/9pcon: style
aux/aout2uimage: fix text section size rounding (for data section alignment)
aux/listen: Allow per service namespace files
aux/listen: remove Service struct
aux/listen: remove argument clutter
aux/listen: remove special cases for depreciated datakit
aux/listen: remove unused cpu global
aux/txt2uimage: helper for generating uimage script files
awk: correct incoherent cell in assignment (thanks smj, mpinjr)
awk: initialize records fully in recinit()
bar: a status bar program
bar: leave last aux on screen on eof
cdfs: handle block sizes correctly
chdev: change kernel driver access
chdev: dont pollute environment
cwfs: fix iounit negotiation
delkey: stop being clever about which factotum to use
diff: avoid empty hunks when there are no changes
diff: clean up some comments
diff: fix style
diff: retain original file names
disk/mkext: fix nil dereference in arg parsing
exportfs: fix clunk of first attach with -S
fshalt: allow passing a kernel to ‘fshalt -r’
fshalt: optionally use /dev/pmctl to shut down the machine
fshalt: remove unused variable
fshalt: shut up about #P not being present
fshalt: support relative paths to the new kernel
g: add .ha (Hare)
games/dmid: don’t buffer output
games/doom: add “m_forward” cvar to disable vertical motion move; actually implement use_mouse
games/doom: add optional autorun
games/doom: fix glitchy mouse movement
games/doom: raise max scale factor for 4k
games/doom: raise static limits
games/doom: rename mouse use key for what it is and remove double click
git/commit: fix typo in if statement
git/commit: user better defaults for username
git/common.rc: create required directories
git/compat: expand to cover go bootstrap
git/compat: fix ‘git init –bare’ and ‘git ls-remote’ (thanks floren)
git/compat: fix init
git/export: use native diff
git/get: keep sending what we have until we get an ack
git/hist: add command to show history of files
git/hist: fix with repository other than /
git/hist: make it work in subdirectories
git/import: fix handling relative paths
git/import: remove removed files from index after commit
git/import: squash leading/trailing/consecutive blanks and strip trailing space
git/import: use patch(1)
git/log: fix log count
git/log: only count the messages we show when limiting counts
git/log: support -n option to restrict log counts
git/merge: correctly preserve permissions when merging
git/merge: preserve exec bit correctly
git/pack: add support for skipping ssh signatures
git/pull: fetch all branches (please test)
git/pull: remove ‘-b’ and ‘-a’ option
git/query: implement range using paint()
git/rebase: allow rebase without a clean tree
git/rebase: remove unnecessary use of @ operator
git/send: fill in ‘theirs’ object, even if we miss it
git/serve: log correct error message
git/walk: don’t list untracked files after removal
git: clear status on whoami success
git: improve error on short read
git: performance enhancements
git: rename internal ‘git/fetch’ plumbing to ‘git/get’
history: Rewrite history 9front was first
hjfs: do not truncate lines on /adm/users write
icanhasvmx: our vmx requires unrestricted guest too
ip/dhcpd: properly skip past ipv6 addresses in addrsopt
ip/dhcpd: quiet up syslog
ip/ftpd: use chdev in /lib/namespace.ftp
ip/ipconfig: refactor plan9 vendor parsing
ip/ipconfig: we do not want icmp advice errors on our dhcp connection
ip/sol: handle timeout on password entry for digest auth
ip/tinc: fix ping pong racing causing recalcs and deleting nodes
ip/torrent: fix silly readn() error check (thanks pr)
ktrans: cast switch statement for arm
ktrans: clean headers
ktrans: don’t leak on conflicting jisho lines
ktrans: gui and man page rework
ktrans: listen on lang port for plumber
ktrans: revisit grammer handling and do some spring cleaning
ktrans: tow inside the environment
ktrans: use stdio by default
ktrans: xin chào
ktrans: こんにちは!
ktrans: 你好
ktrans: 新しい降り
make: command’s output plumbable
man: turn on troff -mnihongo if JP font is used
mothra: enable mousewheel scrolling in history list
mothra: get rid of soft hyphens
mothra: make scrollbar style consistent with other applications
patch: apply patches atomically
patch: fix bounds check for hunk scan in forward direction
patch: fix consecutive deletions
patch: fix deletion of files
patch: fix line bounds check when searching for hunk
patch: fix line calculation to avoid redundant searches
patch: fix uninitialized Fbuf during dry run
patch: handle stripped/empty lines mid-hunk
patch: implement a new, simpler patch program to replace ape/patch
patch: improve hunk search
patch: make slurp() return void
pc: remove -n option and check if stdin is cons instead
plot: fix disc and circle operations
rc: squelch ‘Write error’ warning
rcpu: show error when we auth but don’t connect
rio: /dev/label should just ignore offset
rio: add ‘none’ attach option to wsys
rio: add /dev/kbdtap
rio: close the display on the way out
rio: correct error message
rio: correct tap code
rio: ensure single reader and single writer for kbdtap
rio: kbdtap deadlocks are verboden
rio: kbdtap style tweak
rio: make it harder to deadlock from kbdtap
rio: more pointy edges with none attach
rio: prevent some more keyboard lockups
rio: require a confirmation for Exit
rio: return ‘global’ size for none /dev/wctl read (thanks umbraticus)
rio: show Exit in subrios
riow: fix uninitialized field
riow: handle ckKz properly (thanks qwx); better sticky mode (label-dependent)
riow: keyboard-controller for rio
sam: ignore autoindent in cmd window
skelfs: dont mount if not asked to
snoopy: add “ippkt” protocol to demux ip packet interfaces without media header.
spf: limit recursion depth to prevent ddos (thanks tijay, iashiq5)
splitmbox: split a mailbox into mdir format (thanks, umbraticus)
src: ‘test -x’ instead of ‘test -f’
src: search for binaries in path, not random places
ssh: send interrupts even when we’re not in raw mode
togif: fix a typo - don’t free the same image we’re going to use
upas/Mail: check if plumb attrs are nil
upas/dkim: dkim signing for upas
upas/fs/imap.c: additional sanity checking duringExpunge
to avoid suicide
upas/fs: clear errstr after chkunix
upas/fs: support date format used in RFC 4155 mbox files
vncv: allow the use of the Mod4 (Super) key
vt: fix home/end sequences in xterm mode
vt: increase buffer size
vt: quote special characters in command arguments
walk: include qid version in deduplication
window: add wsys ‘none’ attach to attempted wctl search
window: fix regression w.r.t subrios
9pqueue(2): fix typo
auth(8): bugs have been squashed
auth(8): specify what gets put into the environemnt with ‘-s’
auth(8): sync usage messages for auth/box
camv(1), nusb(4): add more details on camera operation
cpu(1): why did we have an empty file? (thanks llamaa)
fork(2): Document RFNOMNT edge cases.
fork(2): fix commas in RFNOMNT references
fork(2): fix parens in RFNOMNT references (thanks Amavect)
fshalt(8): document -r kernelpath feature
git(1), gitfs(4): fix style and typos (thanks schwindl)
git(1): remove documentation for deleted ‘-b’ option (thanks llamaa)
i2c(3): Add documentation for kernels devi2c
i2c(3): fix typos, thanks quinq
import(4), oexportfs(4): more empty files removed.
imx8pm(8): add manpage
ip(3): Discuss local IP addresses for “announce” and “bind”.
ktrans(1): added a history section (thanks moody!)
ktrans(1): documented $jisho and made some improvements. (thanks to Kenji Okamoto, cinap, BurnZez, romi and Aaron for your work on ktrans!)
ktrans(1): remove README files
ktrans(1): typo
ls(1): Make man page synopsis consistent with usage output
mpc(1): fix typo
nusb(4), camv(1): add nusb/cam description, introduce camv manpage
paqfs(4): fix paqfs manpage
patch(1): add the manpage
patch(1): remove bell labs patch scripts
patch(1): remove options that don’t exist
reform(1): add a note about battery readings
rio(4): talk about kbdtap
riow(1): remove the filter warning as it passes unknown keys now
rsa(2): fix X509reqtoRSApub(…) signature
sam(1): clarify “
skel(3): → skelfs(4)
sol(8): fix example (vncv vs vnc)
tlssrv(8): update example path to imap4d
wm8960(8): add manpage
wm8960(8): fix wrong source and see also
zuke(1): document current track printout on stdout
/lib/font/bit/pelm: use Korean fonts
/lib/font/bit/terminus: remove duplicate OFL license and refer to /lib/legal
/lib/font/bit: add Adobe Source Hangul Sans
/lib/ktrans: added tools to fetch skk dicts and convert them to ktrans jishos
/lib/rob: I told this anecdote in an internal talk at Google. You might have seen it then.
/lib/rob: Sockets are just so unpleasant
/lib/theo: I want to say more.
/lib/theo: Isn’t that bad?
/lib/theo: The man page says “don’t do that”.
/lib/theo: This is a bug in a diff I put into snapshots.
/lib/troll: 9 is not nginx-level scale
/lib/troll: Plan
/lib/troll: [9fans] Power mac support
/lib/troll: plan9 secret society
/rc/bin/9fs: case 9front: restore extra/ and iso/
/rc/bin/9fs: fix case 9config for new contrib.9front.org server.
/rc/bin: amend usage misdirections (thanks umbraticus)
/sys/games/lib/fortunes: Use a client written in Go? – Skip Tavakkolian
/sys/lib/dist/mkfile: add target for mnt-reform image
/sys/lib/dist/mkfile: create a default plan9.ini for reform image
/sys/lib/kbmap/jp: correct Zenkaku control character
/sys/man/8/smtp: document missing flags (thanks, chris)
/sys/man: fix minor complaints from checkman
/sys/src/boot/reform/mkfile: download official u-boot for the mnt-reform
/sys/src/boot/reform: generate boot.scr
/sys/src/cmd/mkfile: append to $NOMK so user can provide their own
florenate: not funny
fontsel: Japanese sample text
fontsel: a font selector program
fontsel: sample Korean text
inst/prepdisk: fix invocations of test(1)
inst: make bootsetup work for on pc architectures
kbmap: add latin american keymap (thanks ssf)
move and rename MNT Reform 2 support utilies, cat manpages into one
remove empty /sys/src/cmd/cpu.c
update /lib/pci
valley, feminize: these jokes suck.
vga font: add 23ed-23ef, 23f4-23fa, some of which are used in bar(1) manpage