tReorg - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 522b0689c340d26feeac360640bf7e2e0582353c
 (DIR) parent 2df2758496b2ab508d349208449f04d85ae2eb2c
 (HTM) Author: rsc <devnull@localhost>
       Date:   Tue, 30 Sep 2003 19:05:50 +0000
       
       Reorg
       
       Diffstat:
         M include/bio.h                       |       1 +
         R src/cmd/samterm/Make.Darwin-PowerM… |       0 
         R src/cmd/mk/Make.FreeBSD-386 -> src… |       0 
         R src/cmd/mk/Make.HP-UX-9000 -> src/… |       0 
         R src/cmd/mk/Make.Linux-386 -> src/M… |       0 
         R src/cmd/samterm/Make.FreeBSD-386 -… |       0 
         R src/cmd/mk/Make.OSF1-alpha -> src/… |       0 
         R src/cmd/mk/Make.SunOS-sun4u -> src… |       0 
         R src/cmd/mk/Make.SunOS-sun4u-cc -> … |       0 
         R src/cmd/mk/Make.SunOS-sun4u-gcc ->… |       0 
         A src/Makefile                        |      19 +++++++++++++++++++
         A src/Makehdr                         |      21 +++++++++++++++++++++
         A src/Makeone                         |      10 ++++++++++
         A src/Makesyslib                      |       7 +++++++
         M src/cmd/mk/Makefile                 |      88 ++-----------------------------
         D src/cmd/mk/Makefile.MID             |      45 -------------------------------
         D src/cmd/mk/bundle.ports             |      46 -------------------------------
         D src/cmd/mk/mkfile                   |       9 ---------
         D src/cmd/mk/rpm.spec                 |      29 -----------------------------
         M src/cmd/sam/Makefile                |      48 +++++++++++++++++++++-----------
         M src/cmd/sam/address.c               |      22 +++++++++++-----------
         M src/cmd/sam/buff.c                  |       8 ++++----
         M src/cmd/sam/cmd.c                   |       6 +++---
         M src/cmd/sam/disk.c                  |      20 ++++++++++----------
         M src/cmd/sam/file.c                  |      24 ++++++++++++------------
         M src/cmd/sam/io.c                    |       9 ++++-----
         M src/cmd/sam/mesg.c                  |      44 ++++++++++++++++----------------
         D src/cmd/sam/mkfile                  |      40 -------------------------------
         M src/cmd/sam/moveto.c                |      14 +++++++-------
         M src/cmd/sam/rasp.c                  |      22 +++++++++++-----------
         M src/cmd/sam/regexp.c                |       4 ++--
         D src/cmd/sam/sam                     |       0 
         M src/cmd/sam/sam.c                   |      26 +++++++++++++-------------
         M src/cmd/sam/sam.h                   |       7 +++----
         M src/cmd/sam/xec.c                   |      12 ++++++------
         D src/cmd/samterm/Make.HP-UX-9000     |       6 ------
         D src/cmd/samterm/Make.Linux-386      |       7 -------
         D src/cmd/samterm/Make.NetBSD-386     |       7 -------
         D src/cmd/samterm/Make.OSF1-alpha     |       6 ------
         D src/cmd/samterm/Make.SunOS-sun4u    |       2 --
         D src/cmd/samterm/Make.SunOS-sun4u-cc |       6 ------
         D src/cmd/samterm/Make.SunOS-sun4u-g… |       6 ------
         M src/cmd/samterm/Makefile            |      85 ++++---------------------------
         D src/cmd/samterm/Makefile.MID        |      22 ----------------------
         D src/cmd/samterm/mkfile              |       9 ---------
         D src/cmd/samterm/samterm             |       0 
         D src/lib9/Make.Darwin-PowerMacintosh |       6 ------
         D src/lib9/Make.FreeBSD-386           |       7 -------
         D src/lib9/Make.HP-UX-9000            |       6 ------
         D src/lib9/Make.Linux-386             |       7 -------
         D src/lib9/Make.NetBSD-386            |       7 -------
         D src/lib9/Make.OSF1-alpha            |       6 ------
         D src/lib9/Make.SunOS-sun4u           |       2 --
         D src/lib9/Make.SunOS-sun4u-cc        |       6 ------
         D src/lib9/Make.SunOS-sun4u-gcc       |       6 ------
         M src/lib9/Makefile                   |      89 ++-----------------------------
         D src/lib9/Makefile.MID               |      49 -------------------------------
         D src/lib9/mkfile                     |       2 --
         D src/libbio/Make.FreeBSD-386         |       7 -------
         D src/libbio/Make.HP-UX-9000          |       6 ------
         D src/libbio/Make.Linux-386           |       7 -------
         D src/libbio/Make.NetBSD-386          |       7 -------
         D src/libbio/Make.OSF1-alpha          |       6 ------
         D src/libbio/Make.SunOS-sun4u         |       2 --
         D src/libbio/Make.SunOS-sun4u-cc      |       6 ------
         D src/libbio/Make.SunOS-sun4u-gcc     |       6 ------
         M src/libbio/Makefile                 |      85 ++-----------------------------
         D src/libbio/Makefile.MID             |      37 -------------------------------
         D src/libbio/bio.3                    |     336 -------------------------------
         D src/libbio/bio.h                    |      79 -------------------------------
         D src/libbio/bundle.ports             |      45 -------------------------------
         D src/libbio/mkfile                   |       1 -
         D src/libbio/rpm.spec                 |      30 ------------------------------
         D src/libdraw/Make.Darwin-PowerMacin… |       6 ------
         D src/libdraw/Make.FreeBSD-386        |       7 -------
         D src/libdraw/Make.HP-UX-9000         |       6 ------
         D src/libdraw/Make.Linux-386          |       7 -------
         D src/libdraw/Make.NetBSD-386         |       7 -------
         D src/libdraw/Make.OSF1-alpha         |       6 ------
         D src/libdraw/Make.SunOS-sun4u        |       2 --
         D src/libdraw/Make.SunOS-sun4u-cc     |       6 ------
         D src/libdraw/Make.SunOS-sun4u-gcc    |       6 ------
         M src/libdraw/Makefile                |     100 +++++--------------------------
         D src/libdraw/Makefile.MID            |     123 -------------------------------
         D src/libdraw/cursor.h                |       7 -------
         D src/libdraw/draw.h                  |     520 -------------------------------
         D src/libdraw/event.h                 |      63 -------------------------------
         D src/libdraw/keyboard.h              |      36 -------------------------------
         D src/libdraw/memdraw.h               |     209 -------------------------------
         D src/libdraw/memlayer.h              |      48 -------------------------------
         D src/libdraw/mkfile                  |       1 -
         D src/libdraw/mouse.h                 |      44 -------------------------------
         D src/libdraw/test                    |       0 
         D src/libfmt/Make.Darwin-PowerMacint… |       6 ------
         D src/libfmt/Make.FreeBSD-386         |       7 -------
         D src/libfmt/Make.HP-UX-9000          |       6 ------
         D src/libfmt/Make.Linux-386           |       7 -------
         D src/libfmt/Make.NetBSD-386          |       7 -------
         D src/libfmt/Make.OSF1-alpha          |       6 ------
         D src/libfmt/Make.SunOS-sun4u         |       2 --
         D src/libfmt/Make.SunOS-sun4u-cc      |       6 ------
         D src/libfmt/Make.SunOS-sun4u-gcc     |       6 ------
         M src/libfmt/Makefile                 |      88 ++-----------------------------
         D src/libfmt/Makefile.MID             |      63 -------------------------------
         D src/libfmt/bundle.ports             |      51 -------------------------------
         D src/libfmt/fmt.h                    |     100 -------------------------------
         D src/libfmt/fmtinstall.3             |     346 -------------------------------
         D src/libfmt/mkfile                   |       1 -
         D src/libfmt/rpm.spec                 |      34 -------------------------------
         D src/libframe/Make.Darwin-PowerMaci… |       6 ------
         D src/libframe/Make.FreeBSD-386       |       7 -------
         D src/libframe/Make.HP-UX-9000        |       6 ------
         D src/libframe/Make.Linux-386         |       7 -------
         D src/libframe/Make.NetBSD-386        |       7 -------
         D src/libframe/Make.OSF1-alpha        |       6 ------
         D src/libframe/Make.SunOS-sun4u       |       2 --
         D src/libframe/Make.SunOS-sun4u-cc    |       6 ------
         D src/libframe/Make.SunOS-sun4u-gcc   |       6 ------
         M src/libframe/Makefile               |      82 +++----------------------------
         D src/libframe/Makefile.MID           |      21 ---------------------
         D src/libframe/frame.h                |      85 -------------------------------
         D src/libframe/mkfile                 |       1 -
         D src/libregexp/Make.Darwin-PowerMac… |       6 ------
         D src/libregexp/Make.FreeBSD-386      |       7 -------
         D src/libregexp/Make.HP-UX-9000       |       6 ------
         D src/libregexp/Make.Linux-386        |       7 -------
         D src/libregexp/Make.NetBSD-386       |       7 -------
         D src/libregexp/Make.OSF1-alpha       |       6 ------
         D src/libregexp/Make.SunOS-sun4u      |       2 --
         D src/libregexp/Make.SunOS-sun4u-cc   |       6 ------
         D src/libregexp/Make.SunOS-sun4u-gcc  |       6 ------
         M src/libregexp/Makefile              |      89 ++-----------------------------
         D src/libregexp/Makefile.MID          |      34 -------------------------------
         D src/libregexp/bundle.ports          |      51 -------------------------------
         D src/libregexp/mkfile                |       1 -
         D src/libregexp/regexp9.3             |     227 -------------------------------
         D src/libregexp/regexp9.7             |     150 -------------------------------
         D src/libregexp/regexp9.h             |      71 -------------------------------
         D src/libregexp/rpm.spec              |      34 -------------------------------
         D src/libthread/Make.Darwin-PowerMac… |       6 ------
         D src/libthread/Make.FreeBSD-386      |       7 -------
         D src/libthread/Make.HP-UX-9000       |       6 ------
         D src/libthread/Make.Linux-386        |       7 -------
         D src/libthread/Make.NetBSD-386       |       7 -------
         D src/libthread/Make.OSF1-alpha       |       6 ------
         D src/libthread/Make.SunOS-sun4u      |       2 --
         D src/libthread/Make.SunOS-sun4u-cc   |       6 ------
         D src/libthread/Make.SunOS-sun4u-gcc  |       6 ------
         M src/libthread/Makefile              |      92 +++----------------------------
         D src/libthread/Makefile.MID          |      54 -------------------------------
         D src/libthread/bundle.ports          |      42 -------------------------------
         M src/libthread/create.c              |       1 -
         D src/libthread/ioproc.3              |     179 -------------------------------
         D src/libthread/mkfile                |       2 --
         D src/libthread/rpm.spec              |      26 --------------------------
         D src/libthread/thread.3              |     576 -------------------------------
         D src/libthread/thread.h              |     132 -------------------------------
         D src/libthread/tprimes               |       0 
         D src/libutf/Make.Darwin-PowerMacint… |       6 ------
         D src/libutf/Make.FreeBSD-386         |       7 -------
         D src/libutf/Make.HP-UX-9000          |       6 ------
         D src/libutf/Make.Linux-386           |       7 -------
         D src/libutf/Make.NetBSD-386          |       7 -------
         D src/libutf/Make.OSF1-alpha          |       6 ------
         D src/libutf/Make.SunOS-sun4u         |       2 --
         D src/libutf/Make.SunOS-sun4u-cc      |       6 ------
         D src/libutf/Make.SunOS-sun4u-gcc     |       6 ------
         M src/libutf/Makefile                 |      89 ++-----------------------------
         D src/libutf/Makefile.BOT             |      47 -------------------------------
         D src/libutf/Makefile.CMD             |       5 -----
         D src/libutf/Makefile.LIB             |       4 ----
         D src/libutf/Makefile.MID             |      41 -------------------------------
         D src/libutf/Makefile.TOP             |      20 --------------------
         D src/libutf/bundle.ports             |      43 ------------------------------
         D src/libutf/isalpharune.3            |      47 -------------------------------
         D src/libutf/mkfile                   |       9 ---------
         D src/libutf/rpm.spec                 |      28 ----------------------------
         D src/libutf/rune.3                   |     187 -------------------------------
         D src/libutf/runestrcat.3             |      65 -------------------------------
         D src/libutf/utf.7                    |      91 -------------------------------
         D src/libutf/utf.h                    |      51 -------------------------------
       
       181 files changed, 260 insertions(+), 6159 deletions(-)
       ---
 (DIR) diff --git a/include/bio.h b/include/bio.h
       t@@ -71,6 +71,7 @@ long        Bread(Biobuf*, void*, long);
        off_t        Bseek(Biobuf*, off_t, int);
        int        Bterm(Biobuf*);
        int        Bungetc(Biobuf*);
       +int        Bungetrune(Biobuf*);
        long        Bwrite(Biobuf*, void*, long);
        char*        Brdstr(Biobuf*, int, int);
        long        Bgetrune(Biobuf*);
 (DIR) diff --git a/src/cmd/samterm/Make.Darwin-PowerMacintosh b/src/Make.Darwin-PowerMacintosh
 (DIR) diff --git a/src/cmd/mk/Make.FreeBSD-386 b/src/Make.FreeBSD-386
 (DIR) diff --git a/src/cmd/mk/Make.HP-UX-9000 b/src/Make.HP-UX-9000
 (DIR) diff --git a/src/cmd/mk/Make.Linux-386 b/src/Make.Linux-386
 (DIR) diff --git a/src/cmd/samterm/Make.FreeBSD-386 b/src/Make.NetBSD-386
 (DIR) diff --git a/src/cmd/mk/Make.OSF1-alpha b/src/Make.OSF1-alpha
 (DIR) diff --git a/src/cmd/mk/Make.SunOS-sun4u b/src/Make.SunOS-sun4u
 (DIR) diff --git a/src/cmd/mk/Make.SunOS-sun4u-cc b/src/Make.SunOS-sun4u-cc
 (DIR) diff --git a/src/cmd/mk/Make.SunOS-sun4u-gcc b/src/Make.SunOS-sun4u-gcc
 (DIR) diff --git a/src/Makefile b/src/Makefile
       t@@ -0,0 +1,19 @@
       +DIRS=\
       +        lib9\
       +        libbio\
       +        libdraw\
       +        libfmt\
       +        libframe\
       +        libregexp\
       +        libthread\
       +        libutf\
       +        mk\
       +        sam\
       +        samterm\
       +
       +clean all install:
       +        for i in $(DIRS); \
       +        do \
       +                (echo $$i; cd $$i; $(MAKE) $*); \
       +        done
       +
 (DIR) diff --git a/src/Makehdr b/src/Makehdr
       t@@ -0,0 +1,21 @@
       +# this works in gnu make
       +SYSNAME:=${shell uname}
       +OBJTYPE:=${shell uname -m | sed 's;i.86;386;; s;/.*;;; s; ;;g'}
       +
       +# this works in bsd make
       +SYSNAME!=uname
       +OBJTYPE!=uname -m | sed 's;i.86;386;; s;/.*;;; s; ;;g'
       +
       +# the gnu rules will mess up bsd but not vice versa,
       +# hence the gnu rules come first.
       +
       +X11=/usr/X11R6
       +LDFLAGS=
       +CFLAGS=
       +
       +include $(9SRC)/Make.$(SYSNAME)-$(OBJTYPE)
       +LDFLAGS+=-L$(9SRC)/lib
       +
       +CLEANFILES=*.$O
       +NUKEFILES=
       +
 (DIR) diff --git a/src/Makeone b/src/Makeone
       t@@ -0,0 +1,10 @@
       +$(TARG): $(OFILES)
       +        $(CC) -o $(TARG) $(OFILES) $(LDFLAGS)
       +
       +CLEANFILES+=$(TARG)
       +
       +include $(9SRC)/Makecommon
       +
       +install: $(TARG)
       +        cp $(TARG) $(9SRC)/bin
       +
 (DIR) diff --git a/src/Makesyslib b/src/Makesyslib
       t@@ -0,0 +1,7 @@
       +all: $(9SRC)/lib/$(LIB)
       +
       +$(9SRC)/lib/$(LIB): $(OFILES)
       +        $(AR) $(ARFLAGS) $(9SRC)/lib/$(LIB) $(OFILES)
       +
       +include $(9SRC)/Makecommon
       +
 (DIR) diff --git a/src/cmd/mk/Makefile b/src/cmd/mk/Makefile
       t@@ -1,27 +1,7 @@
       -
       -# this works in gnu make
       -SYSNAME:=${shell uname}
       -OBJTYPE:=${shell uname -m | sed 's;i.86;386;; s;/.*;;; s; ;;g'}
       -
       -# this works in bsd make
       -SYSNAME!=uname
       -OBJTYPE!=uname -m | sed 's;i.86;386;; s;/.*;;; s; ;;g'
       -
       -# the gnu rules will mess up bsd but not vice versa,
       -# hence the gnu rules come first.
       -
       -include Make.$(SYSNAME)-$(OBJTYPE)
       -
       -PREFIX=/usr/local
       -
       -NUKEFILES=
       -
       -TGZFILES=
       +9SRC=..
       +include $(9SRC)/Makehdr
        
        TARG=mk
       -VERSION=2.0
       -PORTPLACE=devel/mk
       -NAME=mk
        
        OFILES=\
                arc.$O\
       t@@ -51,67 +31,7 @@ HFILES=\
                mk.h\
                fns.h\
        
       -all: $(TARG)
       -
       -TGZFILES+=mk.pdf
       -
       -install: $(LIB)
       -        test -d $(PREFIX)/man/man1 || mkdir $(PREFIX)/man/man1
       -        test -d $(PREFIX)/doc || mkdir $(PREFIX)/doc
       -        install -m 0755 mk $(PREFIX)/bin/mk
       -        cat mk.1 | sed 's;DOCPREFIX;$(PREFIX);g' >mk.1a
       -        install -m 0644 mk.1a $(PREFIX)/man/man1/mk.1
       -        install -m 0644 mk.pdf $(PREFIX)/doc/mk.pdf
       -
       -
       -$(TARG): $(OFILES)
       -        $(CC) -o $(TARG) $(OFILES) -L$(PREFIX)/lib -lregexp9 -lbio -lfmt -lutf
       -
       -
       -.c.$O:
       -        $(CC) $(CFLAGS) -I$(PREFIX)/include $*.c
       -
       -%.$O: %.c
       -        $(CC) $(CFLAGS) -I$(PREFIX)/include $*.c
       -
       -
       -$(OFILES): $(HFILES)
       -
       -tgz:
       -        rm -rf $(NAME)-$(VERSION)
       -        mkdir $(NAME)-$(VERSION)
       -        cp Makefile Make.* README LICENSE NOTICE *.[ch137] rpm.spec bundle.ports $(TGZFILES) $(NAME)-$(VERSION)
       -        tar cf - $(NAME)-$(VERSION) | gzip >$(NAME)-$(VERSION).tgz
       -        rm -rf $(NAME)-$(VERSION)
       -
       -clean:
       -        rm -f $(OFILES) $(LIB)
       -
       -nuke:
       -        rm -f $(OFILES) *.tgz *.rpm $(NUKEFILES)
       -
       -rpm:
       -        make tgz
       -        cp $(NAME)-$(VERSION).tgz /usr/src/RPM/SOURCES
       -        rpm -ba rpm.spec
       -        cp /usr/src/RPM/SRPMS/$(NAME)-$(VERSION)-1.src.rpm .
       -        cp /usr/src/RPM/RPMS/i586/$(NAME)-$(VERSION)-1.i586.rpm .
       -        scp *.rpm rsc@amsterdam.lcs.mit.edu:public_html/software
       -
       -PORTDIR=/usr/ports/$(PORTPLACE)
       +LDFLAGS+=-lregexp9 -lbio -lfmt -lutf
        
       -ports:
       -        make tgz
       -        rm -rf $(PORTDIR)
       -        mkdir $(PORTDIR)
       -        cp $(NAME)-$(VERSION).tgz /usr/ports/distfiles
       -        cat bundle.ports | (cd $(PORTDIR) && awk '$$1=="---" && $$3=="---" { ofile=$$2; next} {if(ofile) print >ofile}')
       -        (cd $(PORTDIR); make makesum)
       -        (cd $(PORTDIR); make)
       -        (cd $(PORTDIR); /usr/local/bin/portlint)
       -        rm -rf $(PORTDIR)/work
       -        shar `find $(PORTDIR)` > ports.shar
       -        (cd $(PORTDIR); tar cf - *) | gzip >$(NAME)-$(VERSION)-ports.tgz
       -        scp *.tgz rsc@amsterdam.lcs.mit.edu:public_html/software
       +include $(9SRC)/Makeone
        
       -.phony: all clean nuke install tgz rpm ports
 (DIR) diff --git a/src/cmd/mk/Makefile.MID b/src/cmd/mk/Makefile.MID
       t@@ -1,45 +0,0 @@
       -TARG=mk
       -VERSION=2.0
       -PORTPLACE=devel/mk
       -NAME=mk
       -
       -OFILES=\
       -        arc.$O\
       -        archive.$O\
       -        bufblock.$O\
       -        env.$O\
       -        file.$O\
       -        graph.$O\
       -        job.$O\
       -        lex.$O\
       -        main.$O\
       -        match.$O\
       -        mk.$O\
       -        parse.$O\
       -        recipe.$O\
       -        rule.$O\
       -        run.$O\
       -        sh.$O\
       -        shprint.$O\
       -        symtab.$O\
       -        var.$O\
       -        varsub.$O\
       -        word.$O\
       -        unix.$O\
       -
       -HFILES=\
       -        mk.h\
       -        fns.h\
       -
       -all: $(TARG)
       -
       -TGZFILES+=mk.pdf
       -
       -install: $(LIB)
       -        test -d $(PREFIX)/man/man1 || mkdir $(PREFIX)/man/man1
       -        test -d $(PREFIX)/doc || mkdir $(PREFIX)/doc
       -        install -m 0755 mk $(PREFIX)/bin/mk
       -        cat mk.1 | sed 's;DOCPREFIX;$(PREFIX);g' >mk.1a
       -        install -m 0644 mk.1a $(PREFIX)/man/man1/mk.1
       -        install -m 0644 mk.pdf $(PREFIX)/doc/mk.pdf
       -
 (DIR) diff --git a/src/cmd/mk/bundle.ports b/src/cmd/mk/bundle.ports
       t@@ -1,46 +0,0 @@
       ---- Makefile ---
       -# New ports collection makefile for: mk
       -# Date Created:                11 Feb 2003
       -# Whom:                        rsc
       -#
       -# THIS LINE NEEDS REPLACING.  IT'S HERE TO GET BY PORTLINT
       -# $FreeBSD: ports/devel/mk/Makefile,v 1.1 2003/02/12 00:51:22 rsc Exp $
       -
       -PORTNAME=        mk
       -PORTVERSION=        2.0
       -CATEGORIES=        devel
       -MASTER_SITES=        http://pdos.lcs.mit.edu/~rsc/software/
       -EXTRACT_SUFX=        .tgz
       -
       -MAINTAINER=        rsc@post.harvard.edu
       -
       -DEPENDS=        ${PORTSDIR}/devel/libutf \
       -        ${PORTSDIR}/devel/libfmt \
       -        ${PORTSDIR}/devel/libbio \
       -        ${PORTSDIR}/devel/libregexp9
       -
       -MAN1=                mk.1
       -USE_REINPLACE=        yes
       -
       -.include <bsd.port.pre.mk>
       -
       -post-patch:
       -        ${REINPLACE_CMD} -e 's,$$(PREFIX),${PREFIX},g' ${WRKSRC}/Makefile
       -
       -.include <bsd.port.post.mk>
       ---- pkg-comment ---
       -Streamlined replacement for make
       ---- pkg-descr ---
       -Mk is a streamlined replacement for make, written for 
       -Tenth Edition Research Unix by Andrew Hume.
       -
       -WWW: http://pdos.lcs.mit.edu/~rsc/software/#mk
       -
       -Russ Cox
       -rsc@post.harvard.edu
       ---- pkg-plist ---
       -bin/mk
       -doc/mk.pdf
       ---- /dev/null ---
       -This is just a way to make sure blank lines don't
       -creep into pkg-plist.
 (DIR) diff --git a/src/cmd/mk/mkfile b/src/cmd/mk/mkfile
       t@@ -1,9 +0,0 @@
       -all:V: Makefile Make.FreeBSD-386 Make.Linux-386 Make.HP-UX-9000 Make.OSF1-alpha \
       -        Make.SunOS-sun4u Make.SunOS-sun4u-cc Make.SunOS-sun4u-gcc \
       -        Make.NetBSD-386 Make.Darwin-PowerMacintosh
       -
       -Makefile:D: ../libutf/Makefile.TOP Makefile.MID ../libutf/Makefile.CMD ../libutf/Makefile.BOT
       -        cat $prereq >$target
       -
       -Make.%: ../libutf/Make.%
       -        cp $prereq $target
 (DIR) diff --git a/src/cmd/mk/rpm.spec b/src/cmd/mk/rpm.spec
       t@@ -1,29 +0,0 @@
       -Summary: Streamlined replacement for make
       -Name: mk
       -Version: 2.0
       -Release: 1
       -Group: Development/Utils
       -Copyright: Public Domain
       -Packager: Russ Cox <rsc@post.harvard.edu>
       -Source: http://pdos.lcs.mit.edu/~rsc/software/mk-2.0.tgz
       -URL: http://pdos.lcs.mit.edu/~rsc/software/#mk
       -Requires: libfmt libbio libregexp9 libutf
       -
       -%description
       -Mk is a streamlined replacement for make, written for 
       -Tenth Edition Research Unix by Andrew Hume.
       -
       -http://plan9.bell-labs.com/sys/doc/mk.pdf
       -%prep
       -%setup
       -
       -%build
       -make
       -
       -%install
       -make install
       -
       -%files
       -/usr/local/doc/mk.pdf
       -/usr/local/man/man1/mk.1
       -/usr/local/bin/mk
 (DIR) diff --git a/src/cmd/sam/Makefile b/src/cmd/sam/Makefile
       t@@ -1,18 +1,34 @@
       -H=errors.h mesg.h parse.h plumb.h sam.h
       -SRC= address.c buff.c cmd.c disk.c error.c file.c io.c\
       -     list.c mesg.c moveto.c multi.c unix.c rasp.c regexp.c\
       -     sam.c shell.c string.c sys.c util.c xec.c plumb.c
       +9SRC=..
       +include $(9SRC)/Makehdr
        
       -CC=gcc
       -PREFIX=$(HOME)
       -#PREFIX=/usr/local
       -CFLAGS=-I. -I$(PREFIX)/include -O -g
       -LDFLAGS=-L$(PREFIX)/lib
       -LDLIBS=-l9 -lfmt -lutf
       +TARG=sam
       +OFILES=sam.$O\
       +        address.$O\
       +        buff.$O\
       +        cmd.$O\
       +        disk.$O\
       +        error.$O\
       +        file.$O\
       +        io.$O\
       +        list.$O\
       +        mesg.$O\
       +        moveto.$O\
       +        multi.$O\
       +        plumb.$O\
       +        rasp.$O\
       +        regexp.$O\
       +        shell.$O\
       +        string.$O\
       +        sys.$O\
       +        unix.$O\
       +        util.$O\
       +        xec.$O\
       +
       +HFILES=sam.h\
       +        errors.h\
       +        mesg.h\
       +
       +LDFLAGS+=-l9 -lfmt -lutf
       +
       +include $(9SRC)/Makeone
        
       -all: sam
       -sam: $(SRC) $(H)
       -        $(CC) -o $@ $(CFLAGS) $(SRC) $(LDFLAGS) $(LDLIBS)
       -clean:
       -        rm -f *.o *~
       -        rm -f sam
 (DIR) diff --git a/src/cmd/sam/address.c b/src/cmd/sam/address.c
       t@@ -27,7 +27,7 @@ address(Addr *ap, Address a, int sign)
                                break;
        
                        case '$':
       -                        a.r.p1 = a.r.p2 = f->_.nc;
       +                        a.r.p1 = a.r.p2 = f->b.nc;
                                break;
        
                        case '\'':
       t@@ -52,7 +52,7 @@ address(Addr *ap, Address a, int sign)
                                break;
        
                        case '*':
       -                        a.r.p1 = 0, a.r.p2 = f->_.nc;
       +                        a.r.p1 = 0, a.r.p2 = f->b.nc;
                                return a;
        
                        case ',':
       t@@ -69,7 +69,7 @@ address(Addr *ap, Address a, int sign)
                                if(ap->next)
                                        a2 = address(ap->next, a, 0);
                                else
       -                                a2.f = a.f, a2.r.p1 = a2.r.p2 = f->_.nc;
       +                                a2.f = a.f, a2.r.p1 = a2.r.p2 = f->b.nc;
                                if(a1.f != a2.f)
                                        error(Eorder);
                                a.f = a1.f, a.r.p1 = a1.r.p1, a.r.p2 = a2.r.p2;
       t@@ -101,7 +101,7 @@ nextmatch(File *f, String *r, Posn p, int sign)
                        if(!execute(f, p, INFINITY))
                                error(Esearch);
                        if(sel.p[0].p1==sel.p[0].p2 && sel.p[0].p1==p){
       -                        if(++p>f->_.nc)
       +                        if(++p>f->b.nc)
                                        p = 0;
                                if(!execute(f, p, INFINITY))
                                        panic("address");
       t@@ -111,7 +111,7 @@ nextmatch(File *f, String *r, Posn p, int sign)
                                error(Esearch);
                        if(sel.p[0].p1==sel.p[0].p2 && sel.p[0].p2==p){
                                if(--p<0)
       -                                p = f->_.nc;
       +                                p = f->b.nc;
                                if(!bexecute(f, p))
                                        panic("address");
                        }
       t@@ -156,10 +156,10 @@ filematch(File *f, String *r)
                /* A little dirty... */
                if(menu == 0)
                        menu = fileopen();
       -        bufreset(menu);
       -        bufinsert(menu, 0, genstr.s, genstr.n);
       +        bufreset(&menu->b);
       +        bufinsert(&menu->b, 0, genstr.s, genstr.n);
                compile(r);
       -        return execute(menu, 0, menu->_.nc);
       +        return execute(menu, 0, menu->b.nc);
        }
        
        Address
       t@@ -171,7 +171,7 @@ charaddr(Posn l, Address addr, int sign)
                        addr.r.p2 = addr.r.p1-=l;
                else if(sign > 0)
                        addr.r.p1 = addr.r.p2+=l;
       -        if(addr.r.p1<0 || addr.r.p2>addr.f->_.nc)
       +        if(addr.r.p1<0 || addr.r.p2>addr.f->b.nc)
                        error(Erange);
                return addr;
        }
       t@@ -203,14 +203,14 @@ lineaddr(Posn l, Address addr, int sign)
                                        n = filereadc(f, p++)=='\n';
                                }
                                while(n < l){
       -                                if(p >= f->_.nc)
       +                                if(p >= f->b.nc)
                                                error(Erange);
                                        if(filereadc(f, p++) == '\n')
                                                n++;
                                }
                                a.r.p1 = p;
                        }
       -                while(p < f->_.nc && filereadc(f, p++)!='\n')
       +                while(p < f->b.nc && filereadc(f, p++)!='\n')
                                ;
                        a.r.p2 = p;
                }else{
 (DIR) diff --git a/src/cmd/sam/buff.c b/src/cmd/sam/buff.c
       t@@ -91,8 +91,8 @@ setcache(Buffer *b, uint q0)
                        i = b->cbi;
                }
                blp = &b->bl[i];
       -        while(q+(*blp)->_.n <= q0 && q+(*blp)->_.n < b->nc){
       -                q += (*blp)->_.n;
       +        while(q+(*blp)->u.n <= q0 && q+(*blp)->u.n < b->nc){
       +                q += (*blp)->u.n;
                        i++;
                        blp++;
                        if(i >= b->nbl)
       t@@ -102,8 +102,8 @@ setcache(Buffer *b, uint q0)
                /* remember position */
                b->cbi = i;
                b->cq = q;
       -        sizecache(b, bl->_.n);
       -        b->cnc = bl->_.n;
       +        sizecache(b, bl->u.n);
       +        b->cnc = bl->u.n;
                /*read block*/
                diskread(disk, bl, b->c, b->cnc);
        }
 (DIR) diff --git a/src/cmd/sam/cmd.c b/src/cmd/sam/cmd.c
       t@@ -185,14 +185,14 @@ termcommand(void)
        {
                Posn p;
        
       -        for(p=cmdpt; p<cmd->_.nc; p++){
       +        for(p=cmdpt; p<cmd->b.nc; p++){
                        if(terminp >= &termline[BLOCKSIZE]){
       -                        cmdpt = cmd->_.nc;
       +                        cmdpt = cmd->b.nc;
                                error(Etoolong);
                        }
                        *terminp++ = filereadc(cmd, p);
                }
       -        cmdpt = cmd->_.nc;
       +        cmdpt = cmd->b.nc;
        }
        
        void
 (DIR) diff --git a/src/cmd/sam/disk.c b/src/cmd/sam/disk.c
       t@@ -64,20 +64,20 @@ disknewblock(Disk *d, uint n)
                size = ntosize(n, &i);
                b = d->free[i];
                if(b)
       -                d->free[i] = b->_.next;
       +                d->free[i] = b->u.next;
                else{
                        /* allocate in chunks to reduce malloc overhead */
                        if(blist == nil){
                                blist = emalloc(100*sizeof(Block));
                                for(j=0; j<100-1; j++)
       -                                blist[j]._.next = &blist[j+1];
       +                                blist[j].u.next = &blist[j+1];
                        }
                        b = blist;
       -                blist = b->_.next;
       +                blist = b->u.next;
                        b->addr = d->addr;
                        d->addr += size;
                }
       -        b->_.n = n;
       +        b->u.n = n;
                return b;
        }
        
       t@@ -86,8 +86,8 @@ diskrelease(Disk *d, Block *b)
        {
                uint i;
        
       -        ntosize(b->_.n, &i);
       -        b->_.next = d->free[i];
       +        ntosize(b->u.n, &i);
       +        b->u.next = d->free[i];
                d->free[i] = b;
        }
        
       t@@ -98,7 +98,7 @@ diskwrite(Disk *d, Block **bp, Rune *r, uint n)
                Block *b;
        
                b = *bp;
       -        size = ntosize(b->_.n, nil);
       +        size = ntosize(b->u.n, nil);
                nsize = ntosize(n, nil);
                if(size != nsize){
                        diskrelease(d, b);
       t@@ -107,16 +107,16 @@ diskwrite(Disk *d, Block **bp, Rune *r, uint n)
                }
                if(pwrite(d->fd, r, n*sizeof(Rune), b->addr) != n*sizeof(Rune))
                        panic("write error to temp file");
       -        b->_.n = n;
       +        b->u.n = n;
        }
        
        void
        diskread(Disk *d, Block *b, Rune *r, uint n)
        {
       -        if(n > b->_.n)
       +        if(n > b->u.n)
                        panic("internal error: diskread");
        
       -        ntosize(b->_.n, nil);        /* called only for sanity check on Maxblock */
       +        ntosize(b->u.n, nil);        /* called only for sanity check on Maxblock */
                if(pread(d->fd, r, n*sizeof(Rune), b->addr) != n*sizeof(Rune))
                        panic("read error from temp file");
        }
 (DIR) diff --git a/src/cmd/sam/file.c b/src/cmd/sam/file.c
       t@@ -114,7 +114,7 @@ mergeextend(File *f, uint p0)
        
                mp0n = merge.p0+merge.n;
                if(mp0n != p0){
       -                bufread(f, mp0n, merge.buf+merge.nbuf, p0-mp0n);
       +                bufread(&f->b, mp0n, merge.buf+merge.nbuf, p0-mp0n);
                        merge.nbuf += p0-mp0n;
                        merge.n = p0-merge.p0;
                }
       t@@ -268,11 +268,11 @@ filedeltext(File *f, Text *t)
        void
        fileinsert(File *f, uint p0, Rune *s, uint ns)
        {
       -        if(p0 > f->_.nc)
       +        if(p0 > f->b.nc)
                        panic("internal error: fileinsert");
                if(f->seq > 0)
                        fileuninsert(f, &f->delta, p0, ns);
       -        bufinsert(f, p0, s, ns);
       +        bufinsert(&f->b, p0, s, ns);
                if(ns)
                        f->mod = TRUE;
        }
       t@@ -294,11 +294,11 @@ fileuninsert(File *f, Buffer *delta, uint p0, uint ns)
        void
        filedelete(File *f, uint p0, uint p1)
        {
       -        if(!(p0<=p1 && p0<=f->_.nc && p1<=f->_.nc))
       +        if(!(p0<=p1 && p0<=f->b.nc && p1<=f->b.nc))
                        panic("internal error: filedelete");
                if(f->seq > 0)
                        fileundelete(f, &f->delta, p0, p1);
       -        bufdelete(f, p0, p1);
       +        bufdelete(&f->b, p0, p1);
                if(p1 > p0)
                        f->mod = TRUE;
        }
       t@@ -321,7 +321,7 @@ fileundelete(File *f, Buffer *delta, uint p0, uint p1)
                        n = p1 - i;
                        if(n > RBUFSIZE)
                                n = RBUFSIZE;
       -                bufread(f, i, buf, n);
       +                bufread(&f->b, i, buf, n);
                        bufinsert(delta, delta->nc, buf, n);
                }
                fbuffree(buf);
       t@@ -334,9 +334,9 @@ filereadc(File *f, uint q)
        {
                Rune r;
        
       -        if(q >= f->_.nc)
       +        if(q >= f->b.nc)
                        return -1;
       -        bufread(f, q, &r, 1);
       +        bufread(&f->b, q, &r, 1);
                return r;
        }
        
       t@@ -402,7 +402,7 @@ fileload(File *f, uint p0, int fd, int *nulls)
        {
                if(f->seq > 0)
                        panic("undo in file.load unimplemented");
       -        return bufload(f, p0, fd, nulls);
       +        return bufload(&f->b, p0, fd, nulls);
        }
        
        int
       t@@ -525,7 +525,7 @@ fileundo(File *f, int isundo, int canredo, uint *q0p, uint *q1p, int flag)
                                if(canredo)
                                        fileundelete(f, epsilon, u.p0, u.p0+u.n);
                                f->mod = u.mod;
       -                        bufdelete(f, u.p0, u.p0+u.n);
       +                        bufdelete(&f->b, u.p0, u.p0+u.n);
                                raspdelete(f, u.p0, u.p0+u.n, flag);
                                *q0p = u.p0;
                                *q1p = u.p0;
       t@@ -543,7 +543,7 @@ fileundo(File *f, int isundo, int canredo, uint *q0p, uint *q1p, int flag)
                                        if(n > RBUFSIZE)
                                                n = RBUFSIZE;
                                        bufread(delta, up+i, buf, n);
       -                                bufinsert(f, u.p0+i, buf, n);
       +                                bufinsert(&f->b, u.p0+i, buf, n);
                                        raspinsert(f, u.p0+i, buf, n, flag);
                                }
                                fbuffree(buf);
       t@@ -601,7 +601,7 @@ void
        fileclose(File *f)
        {
                Strclose(&f->name);
       -        bufclose(f);
       +        bufclose(&f->b);
                bufclose(&f->delta);
                bufclose(&f->epsilon);
                if(f->rasp)
 (DIR) diff --git a/src/cmd/sam/io.c b/src/cmd/sam/io.c
       t@@ -53,7 +53,7 @@ writef(File *f)
                        error(Eappend);
                n = writeio(f);
                if(f->name.s[0]==0 || samename){
       -                if(addr.r.p1==0 && addr.r.p2==f->_.nc)
       +                if(addr.r.p1==0 && addr.r.p2==f->b.nc)
                                f->cleanseq = f->seq;
                        state(f, f->cleanseq==f->seq? Clean : Dirty);
                }
       t@@ -87,7 +87,7 @@ readio(File *f, int *nulls, int setdate, int toterm)
                *nulls = FALSE;
                b = 0;
                if(f->unread){
       -                nt = bufload(f, 0, io, nulls);
       +                nt = bufload(&f->b, 0, io, nulls);
                        if(toterm)
                                raspload(f);
                }else
       t@@ -149,7 +149,7 @@ writeio(File *f)
                                n = BLOCKSIZE;
                        else
                                n = addr.r.p2-p;
       -                bufread(f, p, genbuf, n);
       +                bufread(&f->b, p, genbuf, n);
                        c = Strtoc(tmprstr(genbuf, n));
                        m = strlen(c);
                        if(Write(io, c, m) != m){
       t@@ -188,8 +188,7 @@ bootterm(char *machine, char **argv, char **end)
                        argv[0] = "samterm";
                        *end = 0;
                        exec(samterm, argv);
       -                fprint(2, "can't exec: ");
       -                perror(samterm);
       +                fprint(2, "can't exec %s: %r\n", samterm);
                        _exits("damn");
                }
                if(pipe(ph2t)==-1 || pipe(pt2h)==-1)
 (DIR) diff --git a/src/cmd/sam/mesg.c b/src/cmd/sam/mesg.c
       t@@ -101,7 +101,7 @@ journaln(int out, long n)
        int
        rcvchar(void){
                static uchar buf[64];
       -        static i, nleft = 0;
       +        static int i, nleft = 0;
        
                if(nleft <= 0){
                        nleft = read(0, (char *)buf, sizeof buf);
       t@@ -116,9 +116,9 @@ rcvchar(void){
        int
        rcv(void){
                int c;
       -        static state = 0;
       -        static count = 0;
       -        static i = 0;
       +        static int state = 0;
       +        static int count = 0;
       +        static int i = 0;
        
                while((c=rcvchar()) != -1)
                        switch(state){
       t@@ -235,17 +235,17 @@ inmesg(Tmesg type)
                        journaln(0, p1-p0);
                        if(f->unread)
                                panic("Trequest: unread");
       -                if(p1>f->_.nc)
       -                        p1 = f->_.nc;
       -                if(p0>f->_.nc) /* can happen e.g. scrolling during command */
       -                        p0 = f->_.nc;
       +                if(p1>f->b.nc)
       +                        p1 = f->b.nc;
       +                if(p0>f->b.nc) /* can happen e.g. scrolling during command */
       +                        p0 = f->b.nc;
                        if(p0 == p1){
                                i = 0;
                                r.p1 = r.p2 = p0;
                        }else{
                                r = rdata(f->rasp, p0, p1-p0);
                                i = r.p2-r.p1;
       -                        bufread(f, r.p1, buf, i);
       +                        bufread(&f->b, r.p1, buf, i);
                        }
                        buf[i]=0;
                        outTslS(Hdata, f->tag, r.p1, tmprstr(buf, i+1));
       t@@ -271,9 +271,9 @@ inmesg(Tmesg type)
                        if(f->unread)
                                load(f);
                        else{
       -                        if(f->_.nc>0){
       -                                rgrow(f->rasp, 0L, f->_.nc);
       -                                outTsll(Hgrow, f->tag, 0L, f->_.nc);
       +                        if(f->b.nc>0){
       +                                rgrow(f->rasp, 0L, f->b.nc);
       +                                outTsll(Hgrow, f->tag, 0L, f->b.nc);
                                }
                                outTs(Hcheck0, f->tag);
                                moveto(f, f->dot.r);
       t@@ -302,7 +302,7 @@ inmesg(Tmesg type)
                        loginsert(f, p0, str->s, str->n);
                        if(fileupdate(f, FALSE, FALSE))
                                seq++;
       -                if(f==cmd && p0==f->_.nc-i && i>0 && str->s[i-1]=='\n'){
       +                if(f==cmd && p0==f->b.nc-i && i>0 && str->s[i-1]=='\n'){
                                freetmpstr(str);
                                termlocked++;
                                termcommand();
       t@@ -370,7 +370,7 @@ inmesg(Tmesg type)
                        journaln(0, i);
                        f = whichfile(i);
                        addr.r.p1 = 0;
       -                addr.r.p2 = f->_.nc;
       +                addr.r.p2 = f->b.nc;
                        if(f->name.s[0] == 0)
                                error(Enoname);
                        Strduplstr(&genstr, &f->name);
       t@@ -427,9 +427,9 @@ inmesg(Tmesg type)
                        outTl(Hsnarflen, genstr.n);
                        if(genstr.s[genstr.n-1] != '\n')
                                Straddc(&genstr, '\n');
       -                loginsert(cmd, cmd->_.nc, genstr.s, genstr.n);
       +                loginsert(cmd, cmd->b.nc, genstr.s, genstr.n);
                        fileupdate(cmd, FALSE, TRUE);
       -                cmd->dot.r.p1 = cmd->dot.r.p2 = cmd->_.nc;
       +                cmd->dot.r.p1 = cmd->dot.r.p2 = cmd->b.nc;
                        telldot(cmd);
                        termcommand();
                        break;
       t@@ -522,7 +522,7 @@ inmesg(Tmesg type)
                                p = p0;
                                while(p0>0 && (i=filereadc(f, p0 - 1))!=' ' && i!='\t' && i!='\n')
                                        p0--;
       -                        while(p1<f->_.nc && (i=filereadc(f, p1))!=' ' && i!='\t' && i!='\n')
       +                        while(p1<f->b.nc && (i=filereadc(f, p1))!=' ' && i!='\t' && i!='\n')
                                        p1++;
                                sprint(cbuf, "click=%ld", p-p0);
                                pm->attr = plumbunpackattr(cbuf);
       t@@ -559,13 +559,13 @@ snarf(File *f, Posn p1, Posn p2, Buffer *buf, int emptyok)
                        return;
                bufreset(buf);
                /* Stage through genbuf to avoid compaction problems (vestigial) */
       -        if(p2 > f->_.nc){
       -                fprint(2, "bad snarf addr p1=%ld p2=%ld f->_.nc=%d\n", p1, p2, f->_.nc); /*ZZZ should never happen, can remove */
       -                p2 = f->_.nc;
       +        if(p2 > f->b.nc){
       +                fprint(2, "bad snarf addr p1=%ld p2=%ld f->b.nc=%d\n", p1, p2, f->b.nc); /*ZZZ should never happen, can remove */
       +                p2 = f->b.nc;
                }
                for(l=p1; l<p2; l+=i){
                        i = p2-l>BLOCKSIZE? BLOCKSIZE : p2-l;
       -                bufread(f, l, genbuf, i);
       +                bufread(&f->b, l, genbuf, i);
                        bufinsert(buf, buf->nc, tmprstr(genbuf, i)->s, i);
                }
        }
       t@@ -609,7 +609,7 @@ setgenstr(File *f, Posn p0, Posn p1)
                        if(p1-p0 >= TBLOCKSIZE)
                                error(Etoolong);
                        Strinsure(&genstr, p1-p0);
       -                bufread(f, p0, genbuf, p1-p0);
       +                bufread(&f->b, p0, genbuf, p1-p0);
                        memmove(genstr.s, genbuf, RUNESIZE*(p1-p0));
                        genstr.n = p1-p0;
                }else{
 (DIR) diff --git a/src/cmd/sam/mkfile b/src/cmd/sam/mkfile
       t@@ -1,40 +0,0 @@
       -</$objtype/mkfile
       -
       -TARG=sam
       -OFILES=sam.$O\
       -        address.$O\
       -        buff.$O\
       -        cmd.$O\
       -        disk.$O\
       -        error.$O\
       -        file.$O\
       -        io.$O\
       -        list.$O\
       -        mesg.$O\
       -        moveto.$O\
       -        multi.$O\
       -        plan9.$O\
       -        rasp.$O\
       -        regexp.$O\
       -        shell.$O\
       -        string.$O\
       -        sys.$O\
       -        util.$O\
       -        xec.$O\
       -
       -HFILES=sam.h\
       -        errors.h\
       -        mesg.h\
       -
       -BIN=/$objtype/bin
       -</sys/src/cmd/mkone
       -
       -address.$O cmd.$O parse.$O xec.$O unix.$O:        parse.h
       -
       -safeinstall: $O.out
       -        mv $BIN/$TARG $BIN/o$TARG
       -        cp $prereq $BIN/$TARG
       -
       -safeinstallall:V:
       -        for (objtype in $CPUS)
       -                mk safeinstall
 (DIR) diff --git a/src/cmd/sam/moveto.c b/src/cmd/sam/moveto.c
       t@@ -39,8 +39,8 @@ lookorigin(File *f, Posn p0, Posn ls)
                int nl, nc, c;
                Posn p, oldp0;
        
       -        if(p0 > f->_.nc)
       -                p0 = f->_.nc;
       +        if(p0 > f->b.nc)
       +                p0 = f->b.nc;
                oldp0 = p0;
                p = p0;
                for(nl=nc=c=0; c!=-1 && nl<ls && nc<ls*CHARSHIFT; nc++)
       t@@ -85,7 +85,7 @@ clickmatch(File *f, int cl, int cr, int dir, Posn *p)
        
                for(;;){
                        if(dir > 0){
       -                        if(*p >= f->_.nc)
       +                        if(*p >= f->b.nc)
                                        break;
                                c = filereadc(f, (*p)++);
                        }else{
       t@@ -126,7 +126,7 @@ doubleclick(File *f, Posn p1)
                Rune *r, *l;
                Posn p;
        
       -        if(p1 > f->_.nc)
       +        if(p1 > f->b.nc)
                        return;
                f->dot.r.p1 = f->dot.r.p2 = p1;
                for(i=0; left[i]; i++){
       t@@ -147,7 +147,7 @@ doubleclick(File *f, Posn p1)
                        }
                        /* try right match */
                        p = p1;
       -                if(p1 == f->_.nc)
       +                if(p1 == f->b.nc)
                                c = '\n';
                        else
                                c = filereadc(f, p);
       t@@ -156,14 +156,14 @@ doubleclick(File *f, Posn p1)
                                        f->dot.r.p1 = p;
                                        if(c!='\n' || p!=0 || filereadc(f, 0)=='\n')
                                                f->dot.r.p1++;
       -                                f->dot.r.p2 = p1+(p1<f->_.nc && c=='\n');
       +                                f->dot.r.p2 = p1+(p1<f->b.nc && c=='\n');
                                }
                                return;
                        }
                }
                /* try filling out word to right */
                p = p1;
       -        while(p < f->_.nc && alnum(filereadc(f, p++)))
       +        while(p < f->b.nc && alnum(filereadc(f, p++)))
                        f->dot.r.p2++;
                /* try filling out word to left */
                p = p1;
 (DIR) diff --git a/src/cmd/sam/rasp.c b/src/cmd/sam/rasp.c
       t@@ -35,10 +35,10 @@ raspload(File *f)
        {
                if(f->rasp == nil)
                        return;
       -        grown = f->_.nc;
       +        grown = f->b.nc;
                growpos = 0;
       -        if(f->_.nc)
       -                rgrow(f->rasp, 0, f->_.nc);
       +        if(f->b.nc)
       +                rgrow(f->rasp, 0, f->b.nc);
                raspdone(f, 1);
        }
        
       t@@ -55,14 +55,14 @@ raspstart(File *f)
        void
        raspdone(File *f, int toterm)
        {
       -        if(f->dot.r.p1 > f->_.nc)
       -                f->dot.r.p1 = f->_.nc;
       -        if(f->dot.r.p2 > f->_.nc)
       -                f->dot.r.p2 = f->_.nc;
       -        if(f->mark.p1 > f->_.nc)
       -                f->mark.p1 = f->_.nc;
       -        if(f->mark.p2 > f->_.nc)
       -                f->mark.p2 = f->_.nc;
       +        if(f->dot.r.p1 > f->b.nc)
       +                f->dot.r.p1 = f->b.nc;
       +        if(f->dot.r.p2 > f->b.nc)
       +                f->dot.r.p2 = f->b.nc;
       +        if(f->mark.p1 > f->b.nc)
       +                f->mark.p1 = f->b.nc;
       +        if(f->mark.p2 > f->b.nc)
       +                f->mark.p2 = f->b.nc;
                if(f->rasp == nil)
                        return;
                if(grown)
 (DIR) diff --git a/src/cmd/sam/regexp.c b/src/cmd/sam/regexp.c
       t@@ -700,7 +700,7 @@ bexecute(File *f, Posn startp)
                                case 3:
                                                goto Return;
                                        list[0][0].inst = list[1][0].inst = 0;
       -                                p = f->_.nc;
       +                                p = f->b.nc;
                                        goto doloop;
                                default:
                                        goto Return;
       t@@ -758,7 +758,7 @@ bexecute(File *f, Posn startp)
                                        }
                                        break;
                                case EOL:
       -                                if(p==f->_.nc || filereadc(f, p)=='\n')
       +                                if(p==f->b.nc || filereadc(f, p)=='\n')
                                                goto Step;
                                        break;
                                case CCLASS:
 (DIR) diff --git a/src/cmd/sam/sam b/src/cmd/sam/sam
       Binary files differ.
 (DIR) diff --git a/src/cmd/sam/sam.c b/src/cmd/sam/sam.c
       t@@ -148,7 +148,7 @@ rescue(void)
                io = -1;
                for(i=0; i<file.nused; i++){
                        f = file.filepptr[i];
       -                if(f==cmd || f->_.nc==0 || !fileisdirty(f))
       +                if(f==cmd || f->b.nc==0 || !fileisdirty(f))
                                continue;
                        if(io == -1){
                                sprint(buf, "%s/sam.save", home);
       t@@ -164,7 +164,7 @@ rescue(void)
                        }else
                                sprint(buf, "nameless.%d", nblank++);
                        fprint(io, "#!%s '%s' $* <<'---%s'\n", SAMSAVECMD, buf, buf);
       -                addr.r.p1 = 0, addr.r.p2 = f->_.nc;
       +                addr.r.p1 = 0, addr.r.p2 = f->b.nc;
                        writeio(f);
                        fprint(io, "\n---%s\n", (char *)buf);
                }
       t@@ -299,7 +299,7 @@ cmdupdate(void)
        {
                if(cmd && cmd->seq!=0){
                        fileupdate(cmd, FALSE, downloaded);
       -                cmd->dot.r.p1 = cmd->dot.r.p2 = cmd->_.nc;
       +                cmd->dot.r.p1 = cmd->dot.r.p2 = cmd->b.nc;
                        telldot(cmd);
                }
        }
       t@@ -354,9 +354,9 @@ edit(File *f, int cmd)
                if(cmd == 'r')
                        logdelete(f, addr.r.p1, addr.r.p2);
                if(cmd=='e' || cmd=='I'){
       -                logdelete(f, (Posn)0, f->_.nc);
       -                addr.r.p2 = f->_.nc;
       -        }else if(f->_.nc!=0 || (f->name.s[0] && Strcmp(&genstr, &f->name)!=0))
       +                logdelete(f, (Posn)0, f->b.nc);
       +                addr.r.p2 = f->b.nc;
       +        }else if(f->b.nc!=0 || (f->name.s[0] && Strcmp(&genstr, &f->name)!=0))
                        empty = FALSE;
                if((io = open(genc, OREAD))<0) {
                        if (curfile && curfile->unread)
       t@@ -485,17 +485,17 @@ readcmd(String *s)
                        fileclose(flist);
                flist = fileopen();
        
       -        addr.r.p1 = 0, addr.r.p2 = flist->_.nc;
       +        addr.r.p1 = 0, addr.r.p2 = flist->b.nc;
                retcode = plan9(flist, '<', s, FALSE);
                fileupdate(flist, FALSE, FALSE);
                flist->seq = 0;
       -        if (flist->_.nc > BLOCKSIZE)
       +        if (flist->b.nc > BLOCKSIZE)
                        error(Etoolong);
                Strzero(&genstr);
       -        Strinsure(&genstr, flist->_.nc);
       -        bufread(flist, (Posn)0, genbuf, flist->_.nc);
       -        memmove(genstr.s, genbuf, flist->_.nc*RUNESIZE);
       -        genstr.n = flist->_.nc;
       +        Strinsure(&genstr, flist->b.nc);
       +        bufread(&flist->b, (Posn)0, genbuf, flist->b.nc);
       +        memmove(genstr.s, genbuf, flist->b.nc*RUNESIZE);
       +        genstr.n = flist->b.nc;
                Straddc(&genstr, '\0');
                return retcode;
        }
       t@@ -673,7 +673,7 @@ copy(File *f, Address addr2)
                        ni = addr.r.p2-p;
                        if(ni > BLOCKSIZE)
                                ni = BLOCKSIZE;
       -                bufread(f, p, genbuf, ni);
       +                bufread(&f->b, p, genbuf, ni);
                        loginsert(addr2.f, addr2.r.p2, tmprstr(genbuf, ni)->s, ni);
                }
                addr2.f->ndot.r.p2 = addr2.r.p2+(f->dot.r.p2-f->dot.r.p1);
 (DIR) diff --git a/src/cmd/sam/sam.h b/src/cmd/sam/sam.h
       t@@ -110,11 +110,10 @@ enum
        struct Block
        {
                uint                addr;        /* disk address in bytes */
       -        union
       -        {
       +        union {
                        uint        n;        /* number of used runes in block */
                        Block        *next;        /* pointer to next in free list */
       -        } _;
       +        } u;
        };
        
        struct Disk
       t@@ -151,7 +150,7 @@ void                bufreset(Buffer*);
        
        struct File
        {
       -        Buffer _;                                /* the data */
       +        Buffer         b;                                /* the data */
                Buffer                delta;                /* transcript of changes */
                Buffer                epsilon;        /* inversion of delta for redo */
                String                name;                /* name of associated file */
 (DIR) diff --git a/src/cmd/sam/xec.c b/src/cmd/sam/xec.c
       t@@ -231,7 +231,7 @@ s_cmd(File *f, Cmd *cp)
                                                j = c-'0';
                                                if(sel.p[j].p2-sel.p[j].p1>BLOCKSIZE)
                                                        error(Elongtag);
       -                                        bufread(f, sel.p[j].p1, genbuf, sel.p[j].p2-sel.p[j].p1);
       +                                        bufread(&f->b, sel.p[j].p1, genbuf, sel.p[j].p2-sel.p[j].p1);
                                                Strinsert(&genstr, tmprstr(genbuf, (sel.p[j].p2-sel.p[j].p1)), genstr.n);
                                        }else
                                                 Straddc(&genstr, c);
       t@@ -240,7 +240,7 @@ s_cmd(File *f, Cmd *cp)
                                else{
                                        if(sel.p[0].p2-sel.p[0].p1>BLOCKSIZE)
                                                error(Elongrhs);
       -                                bufread(f, sel.p[0].p1, genbuf, sel.p[0].p2-sel.p[0].p1);
       +                                bufread(&f->b, sel.p[0].p1, genbuf, sel.p[0].p2-sel.p[0].p1);
                                        Strinsert(&genstr,
                                                tmprstr(genbuf, (int)(sel.p[0].p2-sel.p[0].p1)),
                                                genstr.n);
       t@@ -390,15 +390,15 @@ display(File *f)
        
                p1 = addr.r.p1;
                p2 = addr.r.p2;
       -        if(p2 > f->_.nc){
       -                fprint(2, "bad display addr p1=%ld p2=%ld f->_.nc=%d\n", p1, p2, f->_.nc); /*ZZZ should never happen, can remove */
       -                p2 = f->_.nc;
       +        if(p2 > f->b.nc){
       +                fprint(2, "bad display addr p1=%ld p2=%ld f->b.nc=%d\n", p1, p2, f->b.nc); /*ZZZ should never happen, can remove */
       +                p2 = f->b.nc;
                }
                while(p1 < p2){
                        np = p2-p1;
                        if(np>BLOCKSIZE-1)
                                np = BLOCKSIZE-1;
       -                bufread(f, p1, genbuf, np);
       +                bufread(&f->b, p1, genbuf, np);
                        genbuf[np] = 0;
                        c = Strtoc(tmprstr(genbuf, np+1));
                        if(downloaded)
 (DIR) diff --git a/src/cmd/samterm/Make.HP-UX-9000 b/src/cmd/samterm/Make.HP-UX-9000
       t@@ -1,6 +0,0 @@
       -CC=cc
       -CFLAGS=-O -c -Ae -I.
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/cmd/samterm/Make.Linux-386 b/src/cmd/samterm/Make.Linux-386
       t@@ -1,7 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I.
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O        # default, can be overriden by Make.$(SYSNAME)
       -NAN=nan64.$O
 (DIR) diff --git a/src/cmd/samterm/Make.NetBSD-386 b/src/cmd/samterm/Make.NetBSD-386
       t@@ -1,7 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I. -I$(PREFIX)/include
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O        # default, can be overriden by Make.$(SYSNAME)
       -NAN=nan64.$O
 (DIR) diff --git a/src/cmd/samterm/Make.OSF1-alpha b/src/cmd/samterm/Make.OSF1-alpha
       t@@ -1,6 +0,0 @@
       -CC=cc
       -CFLAGS+=-g -c -I.
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/cmd/samterm/Make.SunOS-sun4u b/src/cmd/samterm/Make.SunOS-sun4u
       t@@ -1,2 +0,0 @@
       -include Make.SunOS-sun4u-$(CC)
       -NAN=nan64.$O
 (DIR) diff --git a/src/cmd/samterm/Make.SunOS-sun4u-cc b/src/cmd/samterm/Make.SunOS-sun4u-cc
       t@@ -1,6 +0,0 @@
       -CC=cc
       -CFLAGS+=-g -c -I. -O
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/cmd/samterm/Make.SunOS-sun4u-gcc b/src/cmd/samterm/Make.SunOS-sun4u-gcc
       t@@ -1,6 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/cmd/samterm/Makefile b/src/cmd/samterm/Makefile
       t@@ -1,22 +1,5 @@
       -
       -# this works in gnu make
       -SYSNAME:=${shell uname}
       -OBJTYPE:=${shell uname -m | sed 's;i.86;386;; s;/.*;;; s; ;;g'}
       -
       -# this works in bsd make
       -SYSNAME!=uname
       -OBJTYPE!=uname -m | sed 's;i.86;386;; s;/.*;;; s; ;;g'
       -
       -# the gnu rules will mess up bsd but not vice versa,
       -# hence the gnu rules come first.
       -
       -include Make.$(SYSNAME)-$(OBJTYPE)
       -
       -PREFIX=/usr/local
       -
       -NUKEFILES=
       -
       -TGZFILES=
       +9SRC=..
       +include $(9SRC)/Makehdr
        
        TARG=samterm
        OFILES=\
       t@@ -33,62 +16,12 @@ OFILES=\
        HFILES=\
                samterm.h\
                flayer.h\
       -        $(PREFIX)/include/frame.h\
       -
       -all: $(TARG)
       -
       -install:
       -        install -c -m 0755 samterm $(PREFIX)/bin/samterm
       -
       -
       -$(TARG): $(OFILES)
       -        $(CC) -o $(TARG) $(OFILES) -L$(PREFIX)/lib -lframe -ldraw -lthread -l9 -lregexp9 -lbio -lfmt -lutf -L/usr/X11R6/lib -lX11 -lm -ldraw
       -
       -
       -.c.$O:
       -        $(CC) $(CFLAGS) -I/usr/X11R6/include -I../sam -I$(PREFIX)/include $*.c
       -
       -%.$O: %.c
       -        $(CC) $(CFLAGS) -I/usr/X11R6/include -I../sam -I$(PREFIX)/include $*.c
       -
       -
       -$(OFILES): $(HFILES)
       -
       -tgz:
       -        rm -rf $(NAME)-$(VERSION)
       -        mkdir $(NAME)-$(VERSION)
       -        cp Makefile Make.* README LICENSE NOTICE *.[ch137] rpm.spec bundle.ports $(TGZFILES) $(NAME)-$(VERSION)
       -        tar cf - $(NAME)-$(VERSION) | gzip >$(NAME)-$(VERSION).tgz
       -        rm -rf $(NAME)-$(VERSION)
       -
       -clean:
       -        rm -f $(OFILES) $(LIB)
       -
       -nuke:
       -        rm -f $(OFILES) *.tgz *.rpm $(NUKEFILES)
       -
       -rpm:
       -        make tgz
       -        cp $(NAME)-$(VERSION).tgz /usr/src/RPM/SOURCES
       -        rpm -ba rpm.spec
       -        cp /usr/src/RPM/SRPMS/$(NAME)-$(VERSION)-1.src.rpm .
       -        cp /usr/src/RPM/RPMS/i586/$(NAME)-$(VERSION)-1.i586.rpm .
       -        scp *.rpm rsc@amsterdam.lcs.mit.edu:public_html/software
       -
       -PORTDIR=/usr/ports/$(PORTPLACE)
       +        ../sam/sam.h\
       +        ../sam/mesg.h\
       +        $(9SRC)/include/frame.h\
       +        $(9SRC)/include/draw.h\
        
       -ports:
       -        make tgz
       -        rm -rf $(PORTDIR)
       -        mkdir $(PORTDIR)
       -        cp $(NAME)-$(VERSION).tgz /usr/ports/distfiles
       -        cat bundle.ports | (cd $(PORTDIR) && awk '$$1=="---" && $$3=="---" { ofile=$$2; next} {if(ofile) print >ofile}')
       -        (cd $(PORTDIR); make makesum)
       -        (cd $(PORTDIR); make)
       -        (cd $(PORTDIR); /usr/local/bin/portlint)
       -        rm -rf $(PORTDIR)/work
       -        shar `find $(PORTDIR)` > ports.shar
       -        (cd $(PORTDIR); tar cf - *) | gzip >$(NAME)-$(VERSION)-ports.tgz
       -        scp *.tgz rsc@amsterdam.lcs.mit.edu:public_html/software
       +CFLAGS+=-I../sam
       +LDFLAGS+=-lframe -ldraw -lthread -l9 -lregexp9 -lbio -lfmt -lutf -L$(X11)/lib -lX11 -lm
        
       -.phony: all clean nuke install tgz rpm ports
       +include ../Makeone
 (DIR) diff --git a/src/cmd/samterm/Makefile.MID b/src/cmd/samterm/Makefile.MID
       t@@ -1,22 +0,0 @@
       -TARG=samterm
       -OFILES=\
       -        main.$O\
       -        icons.$O\
       -        menu.$O\
       -        mesg.$O\
       -        rasp.$O\
       -        scroll.$O\
       -        flayer.$O\
       -        io.$O\
       -        plan9.$O\
       -
       -HFILES=\
       -        samterm.h\
       -        flayer.h\
       -        $(PREFIX)/include/frame.h\
       -
       -all: $(TARG)
       -
       -install:
       -        install -c -m 0755 samterm $(PREFIX)/bin/samterm
       -
 (DIR) diff --git a/src/cmd/samterm/mkfile b/src/cmd/samterm/mkfile
       t@@ -1,9 +0,0 @@
       -all:V: Makefile Make.FreeBSD-386 Make.Linux-386 Make.HP-UX-9000 Make.OSF1-alpha \
       -        Make.SunOS-sun4u Make.SunOS-sun4u-cc Make.SunOS-sun4u-gcc \
       -        Make.NetBSD-386 Make.Darwin-PowerMacintosh
       -
       -Makefile:D: ../libutf/Makefile.TOP Makefile.MID ../libutf/Makefile.CMD ../libutf/Makefile.BOT
       -        cat $prereq >$target
       -
       -Make.%: ../libutf/Make.%
       -        cp $prereq $target
 (DIR) diff --git a/src/cmd/samterm/samterm b/src/cmd/samterm/samterm
       Binary files differ.
 (DIR) diff --git a/src/lib9/Make.Darwin-PowerMacintosh b/src/lib9/Make.Darwin-PowerMacintosh
       t@@ -1,6 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I. -I${PREFIX}/include
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/lib9/Make.FreeBSD-386 b/src/lib9/Make.FreeBSD-386
       t@@ -1,7 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I. -I$(PREFIX)/include
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O        # default, can be overriden by Make.$(SYSNAME)
       -NAN=nan64.$O
 (DIR) diff --git a/src/lib9/Make.HP-UX-9000 b/src/lib9/Make.HP-UX-9000
       t@@ -1,6 +0,0 @@
       -CC=cc
       -CFLAGS=-O -c -Ae -I.
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/lib9/Make.Linux-386 b/src/lib9/Make.Linux-386
       t@@ -1,7 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I.
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O        # default, can be overriden by Make.$(SYSNAME)
       -NAN=nan64.$O
 (DIR) diff --git a/src/lib9/Make.NetBSD-386 b/src/lib9/Make.NetBSD-386
       t@@ -1,7 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I. -I$(PREFIX)/include
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O        # default, can be overriden by Make.$(SYSNAME)
       -NAN=nan64.$O
 (DIR) diff --git a/src/lib9/Make.OSF1-alpha b/src/lib9/Make.OSF1-alpha
       t@@ -1,6 +0,0 @@
       -CC=cc
       -CFLAGS+=-g -c -I.
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/lib9/Make.SunOS-sun4u b/src/lib9/Make.SunOS-sun4u
       t@@ -1,2 +0,0 @@
       -include Make.SunOS-sun4u-$(CC)
       -NAN=nan64.$O
 (DIR) diff --git a/src/lib9/Make.SunOS-sun4u-cc b/src/lib9/Make.SunOS-sun4u-cc
       t@@ -1,6 +0,0 @@
       -CC=cc
       -CFLAGS+=-g -c -I. -O
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/lib9/Make.SunOS-sun4u-gcc b/src/lib9/Make.SunOS-sun4u-gcc
       t@@ -1,6 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/lib9/Makefile b/src/lib9/Makefile
       t@@ -1,27 +1,7 @@
       -
       -# this works in gnu make
       -SYSNAME:=${shell uname}
       -OBJTYPE:=${shell uname -m | sed 's;i.86;386;; s;/.*;;; s; ;;g'}
       -
       -# this works in bsd make
       -SYSNAME!=uname
       -OBJTYPE!=uname -m | sed 's;i.86;386;; s;/.*;;; s; ;;g'
       -
       -# the gnu rules will mess up bsd but not vice versa,
       -# hence the gnu rules come first.
       -
       -include Make.$(SYSNAME)-$(OBJTYPE)
       -
       -PREFIX=/usr/local
       -
       -NUKEFILES=
       -
       -TGZFILES=
       +9SRC=..
       +include $(9SRC)/Makehdr
        
        LIB=lib9.a
       -VERSION=2.0
       -PORTPLACE=devel/lib9
       -NAME=lib9
        
        OFILES=\
                _exits.$O\
       t@@ -53,68 +33,5 @@ OFILES=\
        HFILES=\
                lib9.h\
        
       -all: $(LIB)
       -
       -install: $(LIB)
       -        test -d $(PREFIX)/man/man3 || mkdir $(PREFIX)/man/man3
       -        # install -m 0644 lib9.3 $(PREFIX)/man/man3/lib9.3
       -        install -m 0644 lib9.h $(PREFIX)/include/lib9.h
       -        install -m 0644 $(LIB) $(PREFIX)/lib/$(LIB)
       -
       -test: $(LIB) test.$O
       -        $(CC) -o test test.$O $(LIB) -L$(PREFIX)/lib -lfmt -lutf
       -
       -testfork: $(LIB) testfork.$O
       -        $(CC) -o testfork testfork.$O $(LIB) -L$(PREFIX)/lib -lfmt -lutf
       -
       -$(LIB): $(OFILES)
       -        $(AR) $(ARFLAGS) $(LIB) $(OFILES)
       -
       -NUKEFILES+=$(LIB)
       -.c.$O:
       -        $(CC) $(CFLAGS) -I$(PREFIX)/include $*.c
       -
       -%.$O: %.c
       -        $(CC) $(CFLAGS) -I$(PREFIX)/include $*.c
       -
       -
       -$(OFILES): $(HFILES)
       -
       -tgz:
       -        rm -rf $(NAME)-$(VERSION)
       -        mkdir $(NAME)-$(VERSION)
       -        cp Makefile Make.* README LICENSE NOTICE *.[ch137] rpm.spec bundle.ports $(TGZFILES) $(NAME)-$(VERSION)
       -        tar cf - $(NAME)-$(VERSION) | gzip >$(NAME)-$(VERSION).tgz
       -        rm -rf $(NAME)-$(VERSION)
       -
       -clean:
       -        rm -f $(OFILES) $(LIB)
       -
       -nuke:
       -        rm -f $(OFILES) *.tgz *.rpm $(NUKEFILES)
       -
       -rpm:
       -        make tgz
       -        cp $(NAME)-$(VERSION).tgz /usr/src/RPM/SOURCES
       -        rpm -ba rpm.spec
       -        cp /usr/src/RPM/SRPMS/$(NAME)-$(VERSION)-1.src.rpm .
       -        cp /usr/src/RPM/RPMS/i586/$(NAME)-$(VERSION)-1.i586.rpm .
       -        scp *.rpm rsc@amsterdam.lcs.mit.edu:public_html/software
       -
       -PORTDIR=/usr/ports/$(PORTPLACE)
       -
       -ports:
       -        make tgz
       -        rm -rf $(PORTDIR)
       -        mkdir $(PORTDIR)
       -        cp $(NAME)-$(VERSION).tgz /usr/ports/distfiles
       -        cat bundle.ports | (cd $(PORTDIR) && awk '$$1=="---" && $$3=="---" { ofile=$$2; next} {if(ofile) print >ofile}')
       -        (cd $(PORTDIR); make makesum)
       -        (cd $(PORTDIR); make)
       -        (cd $(PORTDIR); /usr/local/bin/portlint)
       -        rm -rf $(PORTDIR)/work
       -        shar `find $(PORTDIR)` > ports.shar
       -        (cd $(PORTDIR); tar cf - *) | gzip >$(NAME)-$(VERSION)-ports.tgz
       -        scp *.tgz rsc@amsterdam.lcs.mit.edu:public_html/software
       +include $(9SRC)/Makesyslib
        
       -.phony: all clean nuke install tgz rpm ports
 (DIR) diff --git a/src/lib9/Makefile.MID b/src/lib9/Makefile.MID
       t@@ -1,49 +0,0 @@
       -LIB=lib9.a
       -VERSION=2.0
       -PORTPLACE=devel/lib9
       -NAME=lib9
       -
       -OFILES=\
       -        _exits.$O\
       -        argv0.$O\
       -        await.$O\
       -        encodefmt.$O\
       -        errstr.$O\
       -        exits.$O\
       -        ffork-$(SYSNAME).$O\
       -        getcallerpc-$(OBJTYPE).$O\
       -        getfields.$O\
       -        lock.$O\
       -        malloctag.$O\
       -        mallocz.$O\
       -        nrand.$O\
       -        qlock.$O\
       -        readn.$O\
       -        rendez.$O\
       -        strecpy.$O\
       -        sysfatal.$O\
       -        tas-$(OBJTYPE).$O\
       -        tokenize.$O\
       -        u16.$O\
       -        u32.$O\
       -        u64.$O\
       -        wait.$O\
       -        werrstr.$O\
       -
       -HFILES=\
       -        lib9.h\
       -
       -all: $(LIB)
       -
       -install: $(LIB)
       -        test -d $(PREFIX)/man/man3 || mkdir $(PREFIX)/man/man3
       -        # install -m 0644 lib9.3 $(PREFIX)/man/man3/lib9.3
       -        install -m 0644 lib9.h $(PREFIX)/include/lib9.h
       -        install -m 0644 $(LIB) $(PREFIX)/lib/$(LIB)
       -
       -test: $(LIB) test.$O
       -        $(CC) -o test test.$O $(LIB) -L$(PREFIX)/lib -lfmt -lutf
       -
       -testfork: $(LIB) testfork.$O
       -        $(CC) -o testfork testfork.$O $(LIB) -L$(PREFIX)/lib -lfmt -lutf
       -
 (DIR) diff --git a/src/lib9/mkfile b/src/lib9/mkfile
       t@@ -1,2 +0,0 @@
       -<../libutf/mkfile
       -
 (DIR) diff --git a/src/libbio/Make.FreeBSD-386 b/src/libbio/Make.FreeBSD-386
       t@@ -1,7 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I. -I$(PREFIX)/include
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O        # default, can be overriden by Make.$(SYSNAME)
       -NAN=nan64.$O
 (DIR) diff --git a/src/libbio/Make.HP-UX-9000 b/src/libbio/Make.HP-UX-9000
       t@@ -1,6 +0,0 @@
       -CC=cc
       -CFLAGS=-O -c -Ae -I.
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libbio/Make.Linux-386 b/src/libbio/Make.Linux-386
       t@@ -1,7 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I.
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O        # default, can be overriden by Make.$(SYSNAME)
       -NAN=nan64.$O
 (DIR) diff --git a/src/libbio/Make.NetBSD-386 b/src/libbio/Make.NetBSD-386
       t@@ -1,7 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I. -I$(PREFIX)/include
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O        # default, can be overriden by Make.$(SYSNAME)
       -NAN=nan64.$O
 (DIR) diff --git a/src/libbio/Make.OSF1-alpha b/src/libbio/Make.OSF1-alpha
       t@@ -1,6 +0,0 @@
       -CC=cc
       -CFLAGS+=-g -c -I.
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libbio/Make.SunOS-sun4u b/src/libbio/Make.SunOS-sun4u
       t@@ -1,2 +0,0 @@
       -include Make.SunOS-sun4u-$(CC)
       -NAN=nan64.$O
 (DIR) diff --git a/src/libbio/Make.SunOS-sun4u-cc b/src/libbio/Make.SunOS-sun4u-cc
       t@@ -1,6 +0,0 @@
       -CC=cc
       -CFLAGS+=-g -c -I. -O
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libbio/Make.SunOS-sun4u-gcc b/src/libbio/Make.SunOS-sun4u-gcc
       t@@ -1,6 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libbio/Makefile b/src/libbio/Makefile
       t@@ -1,27 +1,7 @@
       -
       -# this works in gnu make
       -SYSNAME:=${shell uname}
       -OBJTYPE:=${shell uname -m | sed 's;i.86;386;; s;/.*;;; s; ;;g'}
       -
       -# this works in bsd make
       -SYSNAME!=uname
       -OBJTYPE!=uname -m | sed 's;i.86;386;; s;/.*;;; s; ;;g'
       -
       -# the gnu rules will mess up bsd but not vice versa,
       -# hence the gnu rules come first.
       -
       -include Make.$(SYSNAME)-$(OBJTYPE)
       -
       -PREFIX=/usr/local
       -
       -NUKEFILES=
       -
       -TGZFILES=
       +9SRC=..
       +include $(9SRC)/Makehdr
        
        LIB=libbio.a
       -VERSION=2.0
       -PORTPLACE=devel/libbio
       -NAME=libbio
        
        OFILES=\
                bbuffered.$O\
       t@@ -44,65 +24,8 @@ OFILES=\
        HFILES=\
                bio.h\
        
       -all: $(LIB)
       -
       -install: $(LIB)
       -        test -d $(PREFIX)/man/man3 || mkdir $(PREFIX)/man/man3
       -        install -m 0644 bio.3 $(PREFIX)/man/man3/bio.3
       -        install -m 0644 bio.h $(PREFIX)/include
       -        install -m 0644 $(LIB) $(PREFIX)/lib/$(LIB)
       +include $(9SRC)/Makesyslib
        
        bcat: bcat.$O $(LIB)
       -        $(CC) -o bcat bcat.$O $(LIB) -L/usr/local/lib -lfmt -lutf
       -
       -$(LIB): $(OFILES)
       -        $(AR) $(ARFLAGS) $(LIB) $(OFILES)
       -
       -NUKEFILES+=$(LIB)
       -.c.$O:
       -        $(CC) $(CFLAGS) -I$(PREFIX)/include $*.c
       -
       -%.$O: %.c
       -        $(CC) $(CFLAGS) -I$(PREFIX)/include $*.c
       -
       -
       -$(OFILES): $(HFILES)
       -
       -tgz:
       -        rm -rf $(NAME)-$(VERSION)
       -        mkdir $(NAME)-$(VERSION)
       -        cp Makefile Make.* README LICENSE NOTICE *.[ch137] rpm.spec bundle.ports $(TGZFILES) $(NAME)-$(VERSION)
       -        tar cf - $(NAME)-$(VERSION) | gzip >$(NAME)-$(VERSION).tgz
       -        rm -rf $(NAME)-$(VERSION)
       -
       -clean:
       -        rm -f $(OFILES) $(LIB)
       -
       -nuke:
       -        rm -f $(OFILES) *.tgz *.rpm $(NUKEFILES)
       -
       -rpm:
       -        make tgz
       -        cp $(NAME)-$(VERSION).tgz /usr/src/RPM/SOURCES
       -        rpm -ba rpm.spec
       -        cp /usr/src/RPM/SRPMS/$(NAME)-$(VERSION)-1.src.rpm .
       -        cp /usr/src/RPM/RPMS/i586/$(NAME)-$(VERSION)-1.i586.rpm .
       -        scp *.rpm rsc@amsterdam.lcs.mit.edu:public_html/software
       -
       -PORTDIR=/usr/ports/$(PORTPLACE)
       -
       -ports:
       -        make tgz
       -        rm -rf $(PORTDIR)
       -        mkdir $(PORTDIR)
       -        cp $(NAME)-$(VERSION).tgz /usr/ports/distfiles
       -        cat bundle.ports | (cd $(PORTDIR) && awk '$$1=="---" && $$3=="---" { ofile=$$2; next} {if(ofile) print >ofile}')
       -        (cd $(PORTDIR); make makesum)
       -        (cd $(PORTDIR); make)
       -        (cd $(PORTDIR); /usr/local/bin/portlint)
       -        rm -rf $(PORTDIR)/work
       -        shar `find $(PORTDIR)` > ports.shar
       -        (cd $(PORTDIR); tar cf - *) | gzip >$(NAME)-$(VERSION)-ports.tgz
       -        scp *.tgz rsc@amsterdam.lcs.mit.edu:public_html/software
       +        $(CC) -o bcat bcat.$O -L$(9SRC)/lib -lbio -lfmt -lutf
        
       -.phony: all clean nuke install tgz rpm ports
 (DIR) diff --git a/src/libbio/Makefile.MID b/src/libbio/Makefile.MID
       t@@ -1,37 +0,0 @@
       -LIB=libbio.a
       -VERSION=2.0
       -PORTPLACE=devel/libbio
       -NAME=libbio
       -
       -OFILES=\
       -        bbuffered.$O\
       -        bfildes.$O\
       -        bflush.$O\
       -        bgetc.$O\
       -        bgetd.$O\
       -        binit.$O\
       -        boffset.$O\
       -        bprint.$O\
       -        bputc.$O\
       -        brdline.$O\
       -        brdstr.$O\
       -        bread.$O\
       -        bseek.$O\
       -        bwrite.$O\
       -        bgetrune.$O\
       -        bputrune.$O\
       -
       -HFILES=\
       -        bio.h\
       -
       -all: $(LIB)
       -
       -install: $(LIB)
       -        test -d $(PREFIX)/man/man3 || mkdir $(PREFIX)/man/man3
       -        install -m 0644 bio.3 $(PREFIX)/man/man3/bio.3
       -        install -m 0644 bio.h $(PREFIX)/include
       -        install -m 0644 $(LIB) $(PREFIX)/lib/$(LIB)
       -
       -bcat: bcat.$O $(LIB)
       -        $(CC) -o bcat bcat.$O $(LIB) -L/usr/local/lib -lfmt -lutf
       -
 (DIR) diff --git a/src/libbio/bio.3 b/src/libbio/bio.3
       t@@ -1,336 +0,0 @@
       -.TH BIO 3
       -.SH NAME
       -Bopen, Binit, Binits, Brdline, Brdstr, Bgetc, Bgetd, Bungetc, Bread, Bseek, Boffset, Bfildes, Blinelen, Bputc, Bprint, Bvprint, Bwrite, Bflush, Bterm, Bbuffered \- buffered input/output
       -.SH SYNOPSIS
       -.ta \w'Biobuf* 'u
       -.B #include <fmt.h>
       -.B #include <bio.h>
       -.PP
       -.B
       -Biobuf* Bopen(char *file, int mode)
       -.PP
       -.B
       -int        Binit(Biobuf *bp, int fd, int mode)
       -.PP
       -.B
       -int        Bterm(Biobuf *bp)
       -.PP
       -.B
       -int        Bprint(Biobuf *bp, char *format, ...)
       -.PP
       -.B
       -int        Bvprint(Biobuf *bp, char *format, va_list arglist);
       -.PP
       -.B
       -void*        Brdline(Biobuf *bp, int delim)
       -.PP
       -.B
       -char*        Brdstr(Biobuf *bp, int delim, int nulldelim)
       -.PP
       -.B
       -int        Blinelen(Biobuf *bp)
       -.PP
       -.B
       -off_t        Boffset(Biobuf *bp)
       -.PP
       -.B
       -int        Bfildes(Biobuf *bp)
       -.PP
       -.B
       -int        Bgetc(Biobuf *bp)
       -.PP
       -.B
       -long        Bgetrune(Biobufhdr *bp)
       -.PP
       -.B
       -int        Bgetd(Biobuf *bp, double *d)
       -.PP
       -.B
       -int        Bungetc(Biobuf *bp)
       -.PP
       -.B
       -int        Bungetrune(Biobufhdr *bp)
       -.PP
       -.B
       -off_t        Bseek(Biobuf *bp, off_t n, int type)
       -.PP
       -.B
       -int        Bputc(Biobuf *bp, int c)
       -.PP
       -.B
       -int        Bputrune(Biobufhdr *bp, long c)
       -.PP
       -.B
       -long        Bread(Biobuf *bp, void *addr, long nbytes)
       -.PP
       -.B
       -long        Bwrite(Biobuf *bp, void *addr, long nbytes)
       -.PP
       -.B
       -int        Bflush(Biobuf *bp)
       -.PP
       -.B
       -int        Bbuffered(Biobuf *bp)
       -.PP
       -.SH DESCRIPTION
       -These routines implement fast buffered I/O.
       -I/O on different file descriptors is independent.
       -.PP
       -.I Bopen
       -opens
       -.I file
       -for mode
       -.B O_RDONLY
       -or creates for mode
       -.BR O_WRONLY .
       -It calls
       -.IR malloc (3)
       -to allocate a buffer.
       -.PP
       -.I Binit
       -initializes a buffer
       -with the open file descriptor passed in
       -by the user.
       -.PP
       -Arguments
       -of types pointer to Biobuf and pointer to Biobuf
       -can be used interchangeably in the following routines.
       -.PP
       -.IR Bopen ,
       -.IR Binit ,
       -or
       -.I Binits
       -should be called before any of the
       -other routines on that buffer.
       -.I Bfildes
       -returns the integer file descriptor of the associated open file.
       -.PP
       -.I Bterm
       -flushes the buffer for
       -.IR bp .
       -If the buffer was allocated by
       -.IR Bopen ,
       -the buffer is
       -.I freed
       -and the file is closed.
       -.PP
       -.I Brdline
       -reads a string from the file associated with
       -.I bp
       -up to and including the first
       -.I delim
       -character.
       -The delimiter character at the end of the line is
       -not altered.
       -.I Brdline
       -returns a pointer to the start of the line or
       -.L 0
       -on end-of-file or read error.
       -.I Blinelen
       -returns the length (including the delimiter)
       -of the most recent string returned by
       -.IR Brdline .
       -.PP
       -.I Brdstr
       -returns a
       -.IR malloc (3)-allocated
       -buffer containing the next line of input delimited by
       -.IR delim ,
       -terminated by a NUL (0) byte.
       -Unlike
       -.IR Brdline ,
       -which returns when its buffer is full even if no delimiter has been found,
       -.I Brdstr
       -will return an arbitrarily long line in a single call.
       -If
       -.I nulldelim
       -is set, the terminal delimiter will be overwritten with a NUL.
       -After a successful call to
       -.IR Brdstr ,
       -the return value of
       -.I Blinelen
       -will be the length of the returned buffer, excluding the NUL.
       -.PP
       -.I Bgetc
       -returns the next byte from
       -.IR bp ,
       -or a negative value
       -at end of file.
       -.I Bungetc
       -may be called immediately after
       -.I Bgetc
       -to allow the same byte to be reread.
       -.PP
       -.I Bgetrune
       -calls
       -.I Bgetc
       -to read the bytes of the next
       -.SM UTF
       -sequence in the input stream and returns the value of the rune
       -represented by the sequence.
       -It returns a negative value
       -at end of file.
       -.I Bungetrune
       -may be called immediately after
       -.I Bgetrune
       -to allow the same
       -.SM UTF
       -sequence to be reread as either bytes or a rune.
       -.I Bungetc
       -and
       -.I Bungetrune
       -may back up a maximum of five bytes.
       -.PP
       -.I Bgetd
       -uses
       -.I fmtcharstod
       -(undocumented)
       -and
       -.I Bgetc
       -to read the formatted
       -floating-point number in the input stream,
       -skipping initial blanks and tabs.
       -The value is stored in
       -.BR *d.
       -.PP
       -.I Bread
       -reads
       -.I nbytes
       -of data from
       -.I bp
       -into memory starting at
       -.IR addr .
       -The number of bytes read is returned on success
       -and a negative value is returned if a read error occurred.
       -.PP
       -.I Bseek
       -applies
       -.IR lseek (2)
       -to
       -.IR bp .
       -It returns the new file offset.
       -.I Boffset
       -returns the file offset of the next character to be processed.
       -.PP
       -.I Bputc
       -outputs the low order 8 bits of
       -.I c
       -on
       -.IR bp .
       -If this causes a
       -.IR write
       -to occur and there is an error,
       -a negative value is returned.
       -Otherwise, a zero is returned.
       -.PP
       -.I Bputrune
       -calls
       -.I Bputc
       -to output the low order
       -16 bits of
       -.I c
       -as a rune
       -in
       -.SM UTF
       -format
       -on the output stream.
       -.PP
       -.I Bprint
       -is a buffered interface to
       -.IR print (2).
       -If this causes a
       -.IR write
       -to occur and there is an error,
       -a negative value
       -.RB ( Beof )
       -is returned.
       -Otherwise, the number of bytes output is returned.
       -.I Bvprint
       -does the same except it takes as argument a
       -.B va_list
       -parameter, so it can be called within a variadic function.
       -.PP
       -.I Bwrite
       -outputs
       -.I nbytes
       -of data starting at
       -.I addr
       -to
       -.IR bp .
       -If this causes a
       -.IR write
       -to occur and there is an error,
       -a negative value is returned.
       -Otherwise, the number of bytes written is returned.
       -.PP
       -.I Bflush
       -causes any buffered output associated with
       -.I bp
       -to be written.
       -The return is as for
       -.IR Bputc .
       -.I Bflush
       -is called on
       -exit for every buffer still open
       -for writing.
       -.PP
       -.I Bbuffered
       -returns the number of bytes in the buffer.
       -When reading, this is the number of bytes still available from the last
       -read on the file; when writing, it is the number of bytes ready to be
       -written.
       -.PP
       -This library uses
       -.IR fmt (3)
       -for diagnostic messages about internal errors,
       -as well as for the implementation of
       -.I Bprint
       -and
       -.IR Bvprint .
       -It uses
       -.IR utf (3)
       -for the implementation of
       -.I Bgetrune
       -and
       -.IR Bputrune .
       -.SH SEE ALSO
       -.IR atexit (3).
       -.IR open (2),
       -.IR print (3),
       -.IR utf (7)
       -.SH DIAGNOSTICS
       -.I Bio
       -routines that return integers yield
       -.B Beof
       -if 
       -.I bp
       -is not the descriptor of an open file.
       -.I Bopen
       -returns zero if the file cannot be opened in the given mode.
       -.SH HISTORY
       -The
       -.IR bio (3)
       -library originally appeared in Plan 9.
       -This is a port of the Plan 9 bio library.
       -.SH BUGS
       -.I Brdline
       -returns an error on strings longer than the buffer associated
       -with the file
       -and also if the end-of-file is encountered
       -before a delimiter.
       -.I Blinelen
       -will tell how many characters are available
       -in these cases.
       -In the case of a true end-of-file,
       -.I Blinelen
       -will return zero.
       -At the cost of allocating a buffer,
       -.I Brdstr
       -sidesteps these issues.
       -.PP
       -The data returned by
       -.I Brdline
       -may be overwritten by calls to any other
       -.I bio
       -routine on the same
       -.IR bp.
 (DIR) diff --git a/src/libbio/bio.h b/src/libbio/bio.h
       t@@ -1,79 +0,0 @@
       -#ifndef _BIOH_
       -#define _BIOH_ 1
       -
       -#include <sys/types.h>        /* for off_t */
       -#include <fcntl.h>        /* for O_RDONLY, O_WRONLY */
       -
       -typedef        struct        Biobuf        Biobuf;
       -
       -enum
       -{
       -        Bsize                = 8*1024,
       -        Bungetsize        = 4,                /* space for ungetc */
       -        Bmagic                = 0x314159,
       -        Beof                = -1,
       -        Bbad                = -2,
       -
       -        Binactive        = 0,                /* states */
       -        Bractive,
       -        Bwactive,
       -        Bracteof,
       -
       -        Bend
       -};
       -
       -struct        Biobuf
       -{
       -        int        icount;                /* neg num of bytes at eob */
       -        int        ocount;                /* num of bytes at bob */
       -        int        rdline;                /* num of bytes after rdline */
       -        int        runesize;                /* num of bytes of last getrune */
       -        int        state;                /* r/w/inactive */
       -        int        fid;                /* open file */
       -        int        flag;                /* magic if malloc'ed */
       -        off_t        offset;                /* offset of buffer in file */
       -        int        bsize;                /* size of buffer */
       -        unsigned char*        bbuf;                /* pointer to beginning of buffer */
       -        unsigned char*        ebuf;                /* pointer to end of buffer */
       -        unsigned char*        gbuf;                /* pointer to good data in buf */
       -        unsigned char        b[Bungetsize+Bsize];
       -};
       -
       -#define        BGETC(bp)\
       -        ((bp)->icount?(bp)->bbuf[(bp)->bsize+(bp)->icount++]:Bgetc((bp)))
       -#define        BPUTC(bp,c)\
       -        ((bp)->ocount?(bp)->bbuf[(bp)->bsize+(bp)->ocount++]=(c),0:Bputc((bp),(c)))
       -#define        BOFFSET(bp)\
       -        (((bp)->state==Bractive)?\
       -                (bp)->offset + (bp)->icount:\
       -        (((bp)->state==Bwactive)?\
       -                (bp)->offset + ((bp)->bsize + (bp)->ocount):\
       -                -1))
       -#define        BLINELEN(bp)\
       -        (bp)->rdline
       -#define        BFILDES(bp)\
       -        (bp)->fid
       -
       -int        Bbuffered(Biobuf*);
       -int        Bfildes(Biobuf*);
       -int        Bflush(Biobuf*);
       -int        Bgetc(Biobuf*);
       -int        Bgetd(Biobuf*, double*);
       -int        Binit(Biobuf*, int, int);
       -int        Binits(Biobuf*, int, int, unsigned char*, int);
       -int        Blinelen(Biobuf*);
       -off_t        Boffset(Biobuf*);
       -Biobuf*        Bopen(char*, int);
       -int        Bprint(Biobuf*, char*, ...);
       -int        Bputc(Biobuf*, int);
       -void*        Brdline(Biobuf*, int);
       -long        Bread(Biobuf*, void*, long);
       -off_t        Bseek(Biobuf*, off_t, int);
       -int        Bterm(Biobuf*);
       -int        Bungetc(Biobuf*);
       -long        Bwrite(Biobuf*, void*, long);
       -char*        Brdstr(Biobuf*, int, int);
       -long        Bgetrune(Biobuf*);
       -int        Bputrune(Biobuf*, long);
       -
       -#endif
 (DIR) diff --git a/src/libbio/bundle.ports b/src/libbio/bundle.ports
       t@@ -1,45 +0,0 @@
       ---- Makefile ---
       -# New ports collection makefile for: libbio
       -# Date Created:                11 Feb 2003
       -# Whom:                        rsc
       -#
       -# THIS LINE NEEDS REPLACING.  IT'S HERE TO GET BY PORTLINT
       -# $FreeBSD: ports/devel/libbio/Makefile,v 1.1 2003/02/12 00:51:22 rsc Exp $
       -
       -PORTNAME=        libbio
       -PORTVERSION=        2.0
       -CATEGORIES=        devel
       -MASTER_SITES=        http://pdos.lcs.mit.edu/~rsc/software/
       -EXTRACT_SUFX=        .tgz
       -
       -MAINTAINER=        rsc@post.harvard.edu
       -
       -DEPENDS=        ${PORTSDIR}/devel/libfmt ${PORTSDIR}/devel/libutf
       -
       -MAN3=                bio.3
       -USE_REINPLACE=        yes
       -
       -.include <bsd.port.pre.mk>
       -
       -post-patch:
       -        ${REINPLACE_CMD} -e 's,$$(PREFIX),${PREFIX},g' ${WRKSRC}/Makefile
       -
       -.include <bsd.port.post.mk>
       ---- pkg-comment ---
       -Simple buffered I/O library from Plan 9
       ---- pkg-descr ---
       -Libbio is a port of Plan 9's formatted I/O library.
       -It provides most of the same functionality as stdio or sfio,
       -but with a simpler interface and smaller footprint.
       -
       -WWW: http://pdos.lcs.mit.edu/~rsc/software/#libbio
       -http://plan9.bell-labs.com/magic/man2html/2/bio
       -
       -Russ Cox
       -rsc@post.harvard.edu
       ---- pkg-plist ---
       -lib/libbio.a
       -include/bio.h
       ---- /dev/null ---
       -This is just a way to make sure blank lines don't
       -creep into pkg-plist.
 (DIR) diff --git a/src/libbio/mkfile b/src/libbio/mkfile
       t@@ -1 +0,0 @@
       -<../libutf/mkfile
 (DIR) diff --git a/src/libbio/rpm.spec b/src/libbio/rpm.spec
       t@@ -1,30 +0,0 @@
       -Summary: Simple buffered I/O library from Plan 9
       -Name: libbio
       -Version: 2.0
       -Release: 1
       -Group: Development/C
       -Copyright: LGPL
       -Packager: Russ Cox <rsc@post.harvard.edu>
       -Source: http://pdos.lcs.mit.edu/~rsc/software/libbio-2.0.tgz
       -URL: http://pdos.lcs.mit.edu/~rsc/software/#libbio
       -Requires: libfmt libutf
       -
       -%description
       -Libbio is a port of Plan 9's formatted I/O library.
       -It provides most of the same functionality as stdio or sfio,
       -but with a simpler interface and smaller footprint.
       -
       -http://plan9.bell-labs.com/magic/man2html/2/bio
       -%prep
       -%setup
       -
       -%build
       -make
       -
       -%install
       -make install
       -
       -%files
       -/usr/local/include/bio.h
       -/usr/local/lib/libbio.a
       -/usr/local/man/man3/bio.3
 (DIR) diff --git a/src/libdraw/Make.Darwin-PowerMacintosh b/src/libdraw/Make.Darwin-PowerMacintosh
       t@@ -1,6 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I. -I${PREFIX}/include
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libdraw/Make.FreeBSD-386 b/src/libdraw/Make.FreeBSD-386
       t@@ -1,7 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I. -I$(PREFIX)/include
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O        # default, can be overriden by Make.$(SYSNAME)
       -NAN=nan64.$O
 (DIR) diff --git a/src/libdraw/Make.HP-UX-9000 b/src/libdraw/Make.HP-UX-9000
       t@@ -1,6 +0,0 @@
       -CC=cc
       -CFLAGS=-O -c -Ae -I.
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libdraw/Make.Linux-386 b/src/libdraw/Make.Linux-386
       t@@ -1,7 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I.
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O        # default, can be overriden by Make.$(SYSNAME)
       -NAN=nan64.$O
 (DIR) diff --git a/src/libdraw/Make.NetBSD-386 b/src/libdraw/Make.NetBSD-386
       t@@ -1,7 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I. -I$(PREFIX)/include
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O        # default, can be overriden by Make.$(SYSNAME)
       -NAN=nan64.$O
 (DIR) diff --git a/src/libdraw/Make.OSF1-alpha b/src/libdraw/Make.OSF1-alpha
       t@@ -1,6 +0,0 @@
       -CC=cc
       -CFLAGS+=-g -c -I.
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libdraw/Make.SunOS-sun4u b/src/libdraw/Make.SunOS-sun4u
       t@@ -1,2 +0,0 @@
       -include Make.SunOS-sun4u-$(CC)
       -NAN=nan64.$O
 (DIR) diff --git a/src/libdraw/Make.SunOS-sun4u-cc b/src/libdraw/Make.SunOS-sun4u-cc
       t@@ -1,6 +0,0 @@
       -CC=cc
       -CFLAGS+=-g -c -I. -O
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libdraw/Make.SunOS-sun4u-gcc b/src/libdraw/Make.SunOS-sun4u-gcc
       t@@ -1,6 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libdraw/Makefile b/src/libdraw/Makefile
       t@@ -1,30 +1,8 @@
       -
       -# this works in gnu make
       -SYSNAME:=${shell uname}
       -OBJTYPE:=${shell uname -m | sed 's;i.86;386;; s;/.*;;; s; ;;g'}
       -
       -# this works in bsd make
       -SYSNAME!=uname
       -OBJTYPE!=uname -m | sed 's;i.86;386;; s;/.*;;; s; ;;g'
       -
       -# the gnu rules will mess up bsd but not vice versa,
       -# hence the gnu rules come first.
       -
       -include Make.$(SYSNAME)-$(OBJTYPE)
       -
       -PREFIX=/usr/local
       -
       -NUKEFILES=
       -
       -TGZFILES=
       +9SRC=..
       +include $(9SRC)/Makehdr
        
        LIB=libdraw.a
       -VERSION=2.0
       -PORTPLACE=devel/libdraw
       -NAME=libdraw
        
       -# keyboard.$O\
       -# newwindow.$O\
        OFILES=\
                alloc.$O\
                allocimagemix.$O\
       t@@ -125,70 +103,20 @@ OFILES=\
                unix.$O\
        
        HFILES=\
       -        draw.h\
       -        memdraw.h
       +        $(9SRC)/include/draw.h\
       +        $(9SRC)/include/memdraw.h\
       +        $(9SRC)/include/memlayer.h\
       +        $(9SRC)/include/event.h\
       +        $(9SRC)/include/cursor.h\
       +        $(9SRC)/include/mouse.h\
       +        $(9SRC)/include/keyboard.h\
       +        x11-inc.h\
       +        x11-memdraw.h\
        
       -all: $(LIB)
       +CFLAGS+=-I$(X11)/include
        
       -install: $(LIB)
       -        install -c -m 0644 $(LIB) $(PREFIX)/lib/$(LIB)
       -        install -c -m 0644 draw.h $(PREFIX)/include/draw.h
       -        install -c -m 0644 event.h $(PREFIX)/include/event.h
       -        install -c -m 0644 cursor.h $(PREFIX)/include/cursor.h
       -        install -c -m 0644 mouse.h $(PREFIX)/include/mouse.h
       -        install -c -m 0644 keyboard.h $(PREFIX)/include/keyboard.h
       +include $(9SRC)/Makesyslib
        
        test: test.o $(LIB)
       -        gcc -o test test.o $(LIB) -L$(PREFIX)/lib -l9 -lfmt -lutf -L/usr/X11R6/lib -lX11 -lm
       -
       -$(LIB): $(OFILES)
       -        $(AR) $(ARFLAGS) $(LIB) $(OFILES)
       -
       -NUKEFILES+=$(LIB)
       -.c.$O:
       -        $(CC) $(CFLAGS) -I/usr/X11R6/include -I../sam -I$(PREFIX)/include $*.c
       -
       -%.$O: %.c
       -        $(CC) $(CFLAGS) -I/usr/X11R6/include -I../sam -I$(PREFIX)/include $*.c
       -
       -
       -$(OFILES): $(HFILES)
       -
       -tgz:
       -        rm -rf $(NAME)-$(VERSION)
       -        mkdir $(NAME)-$(VERSION)
       -        cp Makefile Make.* README LICENSE NOTICE *.[ch137] rpm.spec bundle.ports $(TGZFILES) $(NAME)-$(VERSION)
       -        tar cf - $(NAME)-$(VERSION) | gzip >$(NAME)-$(VERSION).tgz
       -        rm -rf $(NAME)-$(VERSION)
       -
       -clean:
       -        rm -f $(OFILES) $(LIB)
       -
       -nuke:
       -        rm -f $(OFILES) *.tgz *.rpm $(NUKEFILES)
       -
       -rpm:
       -        make tgz
       -        cp $(NAME)-$(VERSION).tgz /usr/src/RPM/SOURCES
       -        rpm -ba rpm.spec
       -        cp /usr/src/RPM/SRPMS/$(NAME)-$(VERSION)-1.src.rpm .
       -        cp /usr/src/RPM/RPMS/i586/$(NAME)-$(VERSION)-1.i586.rpm .
       -        scp *.rpm rsc@amsterdam.lcs.mit.edu:public_html/software
       -
       -PORTDIR=/usr/ports/$(PORTPLACE)
       -
       -ports:
       -        make tgz
       -        rm -rf $(PORTDIR)
       -        mkdir $(PORTDIR)
       -        cp $(NAME)-$(VERSION).tgz /usr/ports/distfiles
       -        cat bundle.ports | (cd $(PORTDIR) && awk '$$1=="---" && $$3=="---" { ofile=$$2; next} {if(ofile) print >ofile}')
       -        (cd $(PORTDIR); make makesum)
       -        (cd $(PORTDIR); make)
       -        (cd $(PORTDIR); /usr/local/bin/portlint)
       -        rm -rf $(PORTDIR)/work
       -        shar `find $(PORTDIR)` > ports.shar
       -        (cd $(PORTDIR); tar cf - *) | gzip >$(NAME)-$(VERSION)-ports.tgz
       -        scp *.tgz rsc@amsterdam.lcs.mit.edu:public_html/software
       +        gcc -o test test.o -L$(9SRC) -ldraw -l9 -lfmt -lutf -L$(X11)/lib -lX11 -lm
        
       -.phony: all clean nuke install tgz rpm ports
 (DIR) diff --git a/src/libdraw/Makefile.MID b/src/libdraw/Makefile.MID
       t@@ -1,123 +0,0 @@
       -LIB=libdraw.a
       -VERSION=2.0
       -PORTPLACE=devel/libdraw
       -NAME=libdraw
       -
       -# keyboard.$O\
       -# newwindow.$O\
       -OFILES=\
       -        alloc.$O\
       -        allocimagemix.$O\
       -        arith.$O\
       -        bezier.$O\
       -        border.$O\
       -        buildfont.$O\
       -        bytesperline.$O\
       -        chan.$O\
       -        cloadimage.$O\
       -        computil.$O\
       -        creadimage.$O\
       -        debug.$O\
       -        defont.$O\
       -        draw.$O\
       -        drawrepl.$O\
       -        egetrect.$O\
       -        ellipse.$O\
       -        emenuhit.$O\
       -        font.$O\
       -        freesubfont.$O\
       -        getdefont.$O\
       -        getrect.$O\
       -        getsubfont.$O\
       -        icossin.$O\
       -        icossin2.$O\
       -        init.$O\
       -        line.$O\
       -        loadimage.$O\
       -        menuhit.$O\
       -        mkfont.$O\
       -        openfont.$O\
       -        poly.$O\
       -        readcolmap.$O\
       -        readimage.$O\
       -        readsubfont.$O\
       -        rectclip.$O\
       -        replclipr.$O\
       -        rgb.$O\
       -        string.$O\
       -        stringbg.$O\
       -        stringsubfont.$O\
       -        stringwidth.$O\
       -        subfont.$O\
       -        subfontcache.$O\
       -        subfontname.$O\
       -        unloadimage.$O\
       -        window.$O\
       -        writecolmap.$O\
       -        writeimage.$O\
       -        writesubfont.$O\
       -        md-alloc.$O\
       -        md-arc.$O\
       -        md-cload.$O\
       -        md-cmap.$O\
       -        md-cread.$O\
       -        md-defont.$O\
       -        md-draw.$O\
       -        md-ellipse.$O\
       -        md-fillpoly.$O\
       -        md-hwdraw.$O\
       -        md-iprint.$O\
       -        md-line.$O\
       -        md-load.$O\
       -        md-openmemsubfont.$O\
       -        md-poly.$O\
       -        md-read.$O\
       -        md-string.$O\
       -        md-subfont.$O\
       -        md-unload.$O\
       -        md-write.$O\
       -        ml-draw.$O\
       -        ml-lalloc.$O\
       -        ml-layerop.$O\
       -        ml-ldelete.$O\
       -        ml-lhide.$O\
       -        ml-line.$O\
       -        ml-load.$O\
       -        ml-lorigin.$O\
       -        ml-lsetrefresh.$O\
       -        ml-ltofront.$O\
       -        ml-ltorear.$O\
       -        ml-unload.$O\
       -        x11-alloc.$O\
       -        x11-cload.$O\
       -        x11-draw.$O\
       -        x11-event.$O\
       -        x11-fill.$O\
       -        x11-get.$O\
       -        x11-init.$O\
       -        x11-itrans.$O\
       -        x11-keyboard.$O\
       -        x11-load.$O\
       -        x11-mouse.$O\
       -        x11-pixelbits.$O\
       -        x11-unload.$O\
       -        devdraw.$O\
       -        unix.$O\
       -
       -HFILES=\
       -        draw.h\
       -        memdraw.h
       -
       -all: $(LIB)
       -
       -install: $(LIB)
       -        install -c -m 0644 $(LIB) $(PREFIX)/lib/$(LIB)
       -        install -c -m 0644 draw.h $(PREFIX)/include/draw.h
       -        install -c -m 0644 event.h $(PREFIX)/include/event.h
       -        install -c -m 0644 cursor.h $(PREFIX)/include/cursor.h
       -        install -c -m 0644 mouse.h $(PREFIX)/include/mouse.h
       -        install -c -m 0644 keyboard.h $(PREFIX)/include/keyboard.h
       -
       -test: test.o $(LIB)
       -        gcc -o test test.o $(LIB) -L$(PREFIX)/lib -l9 -lfmt -lutf -L/usr/X11R6/lib -lX11 -lm
       -
 (DIR) diff --git a/src/libdraw/cursor.h b/src/libdraw/cursor.h
       t@@ -1,7 +0,0 @@
       -typedef struct Cursor Cursor;
       -struct        Cursor
       -{
       -        Point        offset;
       -        uchar        clr[2*16];
       -        uchar        set[2*16];
       -};
 (DIR) diff --git a/src/libdraw/draw.h b/src/libdraw/draw.h
       t@@ -1,520 +0,0 @@
       -typedef struct        Cachefont Cachefont;
       -typedef struct        Cacheinfo Cacheinfo;
       -typedef struct        Cachesubf Cachesubf;
       -typedef struct        Display Display;
       -typedef struct        Font Font;
       -typedef struct        Fontchar Fontchar;
       -typedef struct        Image Image;
       -typedef struct        Mouse Mouse;
       -typedef struct        Point Point;
       -typedef struct        Rectangle Rectangle;
       -typedef struct        RGB RGB;
       -typedef struct        Screen Screen;
       -typedef struct        Subfont Subfont;
       -
       -extern        int        Rfmt(Fmt*);
       -extern        int        Pfmt(Fmt*);
       -
       -enum
       -{
       -        DOpaque                = 0xFFFFFFFF,
       -        DTransparent        = 0x00000000,                /* only useful for allocimage, memfillcolor */
       -        DBlack                = 0x000000FF,
       -        DWhite                = 0xFFFFFFFF,
       -        DRed                = 0xFF0000FF,
       -        DGreen                = 0x00FF00FF,
       -        DBlue                = 0x0000FFFF,
       -        DCyan                = 0x00FFFFFF,
       -        DMagenta                = 0xFF00FFFF,
       -        DYellow                = 0xFFFF00FF,
       -        DPaleyellow        = 0xFFFFAAFF,
       -        DDarkyellow        = 0xEEEE9EFF,
       -        DDarkgreen        = 0x448844FF,
       -        DPalegreen        = 0xAAFFAAFF,
       -        DMedgreen        = 0x88CC88FF,
       -        DDarkblue        = 0x000055FF,
       -        DPalebluegreen= 0xAAFFFFFF,
       -        DPaleblue                = 0x0000BBFF,
       -        DBluegreen        = 0x008888FF,
       -        DGreygreen        = 0x55AAAAFF,
       -        DPalegreygreen        = 0x9EEEEEFF,
       -        DYellowgreen        = 0x99994CFF,
       -        DMedblue                = 0x000099FF,
       -        DGreyblue        = 0x005DBBFF,
       -        DPalegreyblue        = 0x4993DDFF,
       -        DPurpleblue        = 0x8888CCFF,
       -
       -        DNotacolor        = 0xFFFFFF00,
       -        DNofill                = DNotacolor,
       -        
       -};
       -
       -enum
       -{
       -        Displaybufsize        = 8000,
       -        ICOSSCALE        = 1024,
       -        Borderwidth =        4,
       -};
       -
       -enum
       -{
       -        /* refresh methods */
       -        Refbackup        = 0,
       -        Refnone                = 1,
       -        Refmesg                = 2
       -};
       -#define        NOREFRESH        ((void*)-1)
       -
       -enum
       -{
       -        /* line ends */
       -        Endsquare        = 0,
       -        Enddisc                = 1,
       -        Endarrow        = 2,
       -        Endmask                = 0x1F
       -};
       -
       -#define        ARROW(a, b, c)        (Endarrow|((a)<<5)|((b)<<14)|((c)<<23))
       -
       -typedef enum
       -{
       -        /* Porter-Duff compositing operators */
       -        Clear        = 0,
       -
       -        SinD        = 8,
       -        DinS        = 4,
       -        SoutD        = 2,
       -        DoutS        = 1,
       -
       -        S                = SinD|SoutD,
       -        SoverD        = SinD|SoutD|DoutS,
       -        SatopD        = SinD|DoutS,
       -        SxorD        = SoutD|DoutS,
       -
       -        D                = DinS|DoutS,
       -        DoverS        = DinS|DoutS|SoutD,
       -        DatopS        = DinS|SoutD,
       -        DxorS        = DoutS|SoutD,        /* == SxorD */
       -
       -        Ncomp = 12,
       -} Drawop;
       -
       -/*
       - * image channel descriptors 
       - */
       -enum {
       -        CRed = 0,
       -        CGreen,
       -        CBlue,
       -        CGrey,
       -        CAlpha,
       -        CMap,
       -        CIgnore,
       -        NChan,
       -};
       -
       -#define __DC(type, nbits)        ((((type)&15)<<4)|((nbits)&15))
       -#define CHAN1(a,b)        __DC(a,b)
       -#define CHAN2(a,b,c,d)        (CHAN1((a),(b))<<8|__DC((c),(d)))
       -#define CHAN3(a,b,c,d,e,f)        (CHAN2((a),(b),(c),(d))<<8|__DC((e),(f)))
       -#define CHAN4(a,b,c,d,e,f,g,h)        (CHAN3((a),(b),(c),(d),(e),(f))<<8|__DC((g),(h)))
       -
       -#define NBITS(c) ((c)&15)
       -#define TYPE(c) (((c)>>4)&15)
       -
       -enum {
       -        GREY1        = CHAN1(CGrey, 1),
       -        GREY2        = CHAN1(CGrey, 2),
       -        GREY4        = CHAN1(CGrey, 4),
       -        GREY8        = CHAN1(CGrey, 8),
       -        CMAP8        = CHAN1(CMap, 8),
       -        RGB15        = CHAN4(CIgnore, 1, CRed, 5, CGreen, 5, CBlue, 5),
       -        RGB16        = CHAN3(CRed, 5, CGreen, 6, CBlue, 5),
       -        RGB24        = CHAN3(CRed, 8, CGreen, 8, CBlue, 8),
       -        BGR24        = CHAN3(CBlue, 8, CGreen, 8, CRed, 8),
       -        RGBA32        = CHAN4(CRed, 8, CGreen, 8, CBlue, 8, CAlpha, 8),
       -        ARGB32        = CHAN4(CAlpha, 8, CRed, 8, CGreen, 8, CBlue, 8),        /* stupid VGAs */
       -        XRGB32  = CHAN4(CIgnore, 8, CRed, 8, CGreen, 8, CBlue, 8),
       -        XBGR32  = CHAN4(CIgnore, 8, CBlue, 8, CGreen, 8, CRed, 8),
       -};
       -
       -extern        char*        chantostr(char*, u32int);
       -extern        u32int        strtochan(char*);
       -extern        int                chantodepth(u32int);
       -
       -struct        Point
       -{
       -        int        x;
       -        int        y;
       -};
       -
       -struct Rectangle
       -{
       -        Point        min;
       -        Point        max;
       -};
       -
       -typedef void        (*Reffn)(Image*, Rectangle, void*);
       -
       -struct Screen
       -{
       -        Display        *display;        /* display holding data */
       -        int        id;                /* id of system-held Screen */
       -        Image        *image;                /* unused; for reference only */
       -        Image        *fill;                /* color to paint behind windows */
       -};
       -
       -struct Display
       -{
       -        QLock                qlock;
       -        int                locking;        /*program is using lockdisplay */
       -        int                dirno;
       -        int                imageid;
       -        int                local;
       -        void                (*error)(Display*, char*);
       -        char                *devdir;
       -        char                *windir;
       -        char                oldlabel[64];
       -        u32int                dataqid;
       -        Image                *image;
       -        Image                *white;
       -        Image                *black;
       -        Image                *opaque;
       -        Image                *transparent;
       -        uchar                *buf;
       -        int                bufsize;
       -        uchar                *bufp;
       -        uchar                *obuf;
       -        int                obufsize;
       -        uchar                *obufp;
       -        Font                *defaultfont;
       -        Subfont                *defaultsubfont;
       -        Image                *windows;
       -        Image                *screenimage;
       -        int                _isnewdisplay;
       -};
       -
       -struct Image
       -{
       -        Display                *display;        /* display holding data */
       -        int                id;                /* id of system-held Image */
       -        Rectangle        r;                /* rectangle in data area, local coords */
       -        Rectangle         clipr;                /* clipping region */
       -        int                depth;                /* number of bits per pixel */
       -        u32int        chan;
       -        int                repl;                /* flag: data replicates to tile clipr */
       -        Screen                *screen;        /* 0 if not a window */
       -        Image                *next;        /* next in list of windows */
       -};
       -
       -struct RGB
       -{
       -        u32int        red;
       -        u32int        green;
       -        u32int        blue;
       -};
       -
       -/*
       - * Subfonts
       - *
       - * given char c, Subfont *f, Fontchar *i, and Point p, one says
       - *        i = f->info+c;
       - *        draw(b, Rect(p.x+i->left, p.y+i->top,
       - *                p.x+i->left+((i+1)->x-i->x), p.y+i->bottom),
       - *                color, f->bits, Pt(i->x, i->top));
       - *        p.x += i->width;
       - * to draw characters in the specified color (itself an Image) in Image b.
       - */
       -
       -struct        Fontchar
       -{
       -        int                x;                /* left edge of bits */
       -        uchar                top;                /* first non-zero scan-line */
       -        uchar                bottom;                /* last non-zero scan-line + 1 */
       -        char                left;                /* offset of baseline */
       -        uchar                width;                /* width of baseline */
       -};
       -
       -struct        Subfont
       -{
       -        char                *name;
       -        short                n;                /* number of chars in font */
       -        uchar                height;                /* height of image */
       -        char                ascent;                /* top of image to baseline */
       -        Fontchar         *info;                /* n+1 character descriptors */
       -        Image                *bits;                /* of font */
       -        int                ref;
       -};
       -
       -enum
       -{
       -        /* starting values */
       -        LOG2NFCACHE =        6,
       -        NFCACHE =        (1<<LOG2NFCACHE),        /* #chars cached */
       -        NFLOOK =        5,                        /* #chars to scan in cache */
       -        NFSUBF =        2,                        /* #subfonts to cache */
       -        /* max value */
       -        MAXFCACHE =        1024+NFLOOK,                /* upper limit */
       -        MAXSUBF =        50,                        /* generous upper limit */
       -        /* deltas */
       -        DSUBF =         4,
       -        /* expiry ages */
       -        SUBFAGE        =        10000,
       -        CACHEAGE =        10000
       -};
       -
       -struct Cachefont
       -{
       -        Rune                min;        /* lowest rune value to be taken from subfont */
       -        Rune                max;        /* highest rune value+1 to be taken from subfont */
       -        int                offset;        /* position in subfont of character at min */
       -        char                *name;                        /* stored in font */
       -        char                *subfontname;                /* to access subfont */
       -};
       -
       -struct Cacheinfo
       -{
       -        ushort                x;                /* left edge of bits */
       -        uchar                width;                /* width of baseline */
       -        schar                left;                /* offset of baseline */
       -        Rune                value;        /* value of character at this slot in cache */
       -        ushort                age;
       -};
       -
       -struct Cachesubf
       -{
       -        u32int                age;        /* for replacement */
       -        Cachefont        *cf;        /* font info that owns us */
       -        Subfont                *f;        /* attached subfont */
       -};
       -
       -struct Font
       -{
       -        char                *name;
       -        Display                *display;
       -        short                height;        /* max height of image, interline spacing */
       -        short                ascent;        /* top of image to baseline */
       -        short                width;        /* widest so far; used in caching only */        
       -        short                nsub;        /* number of subfonts */
       -        u32int                age;        /* increasing counter; used for LRU */
       -        int                maxdepth;        /* maximum depth of all loaded subfonts */
       -        int                ncache;        /* size of cache */
       -        int                nsubf;        /* size of subfont list */
       -        Cacheinfo        *cache;
       -        Cachesubf        *subf;
       -        Cachefont        **sub;        /* as read from file */
       -        Image                *cacheimage;
       -};
       -
       -#define        Dx(r)        ((r).max.x-(r).min.x)
       -#define        Dy(r)        ((r).max.y-(r).min.y)
       -
       -/*
       - * Image management
       - */
       -extern Image*        _allocimage(Image*, Display*, Rectangle, u32int, int, u32int, int, int);
       -extern Image*        allocimage(Display*, Rectangle, u32int, int, u32int);
       -extern uchar*        bufimage(Display*, int);
       -extern int        bytesperline(Rectangle, int);
       -extern void        closedisplay(Display*);
       -extern void        drawerror(Display*, char*);
       -extern int        flushimage(Display*, int);
       -extern int        freeimage(Image*);
       -extern int        _freeimage1(Image*);
       -extern int        geninitdraw(char*, void(*)(Display*, char*), char*, char*, char*, int);
       -extern int        initdraw(void(*)(Display*, char*), char*, char*);
       -extern int        newwindow(char*);
       -extern int        loadimage(Image*, Rectangle, uchar*, int);
       -extern int        cloadimage(Image*, Rectangle, uchar*, int);
       -extern int        getwindow(Display*, int);
       -extern int        gengetwindow(Display*, char*, Image**, Screen**, int);
       -extern Image* readimage(Display*, int, int);
       -extern Image* creadimage(Display*, int, int);
       -extern int        unloadimage(Image*, Rectangle, uchar*, int);
       -extern int        wordsperline(Rectangle, int);
       -extern int        writeimage(int, Image*, int);
       -extern Image*        namedimage(Display*, char*);
       -extern int        nameimage(Image*, char*, int);
       -extern Image* allocimagemix(Display*, u32int, u32int);
       -
       -/*
       - * Colors
       - */
       -extern        void        readcolmap(Display*, RGB*);
       -extern        void        writecolmap(Display*, RGB*);
       -extern        u32int        setalpha(u32int, uchar);
       -
       -/*
       - * Windows
       - */
       -extern Screen*        allocscreen(Image*, Image*, int);
       -extern Image*        _allocwindow(Image*, Screen*, Rectangle, int, u32int);
       -extern Image*        allocwindow(Screen*, Rectangle, int, u32int);
       -extern void        bottomnwindows(Image**, int);
       -extern void        bottomwindow(Image*);
       -extern int        freescreen(Screen*);
       -extern Screen*        publicscreen(Display*, int, u32int);
       -extern void        topnwindows(Image**, int);
       -extern void        topwindow(Image*);
       -extern int        originwindow(Image*, Point, Point);
       -
       -/*
       - * Geometry
       - */
       -extern Point                Pt(int, int);
       -extern Rectangle        Rect(int, int, int, int);
       -extern Rectangle        Rpt(Point, Point);
       -extern Point                addpt(Point, Point);
       -extern Point                subpt(Point, Point);
       -extern Point                divpt(Point, int);
       -extern Point                mulpt(Point, int);
       -extern int                eqpt(Point, Point);
       -extern int                eqrect(Rectangle, Rectangle);
       -extern Rectangle        insetrect(Rectangle, int);
       -extern Rectangle        rectaddpt(Rectangle, Point);
       -extern Rectangle        rectsubpt(Rectangle, Point);
       -extern Rectangle        canonrect(Rectangle);
       -extern int                rectXrect(Rectangle, Rectangle);
       -extern int                rectinrect(Rectangle, Rectangle);
       -extern void                combinerect(Rectangle*, Rectangle);
       -extern int                rectclip(Rectangle*, Rectangle);
       -extern int                ptinrect(Point, Rectangle);
       -extern void                replclipr(Image*, int, Rectangle);
       -extern int                drawreplxy(int, int, int);        /* used to be drawsetxy */
       -extern Point        drawrepl(Rectangle, Point);
       -extern int                rgb2cmap(int, int, int);
       -extern int                cmap2rgb(int);
       -extern int                cmap2rgba(int);
       -extern void                icossin(int, int*, int*);
       -extern void                icossin2(int, int, int*, int*);
       -
       -/*
       - * Graphics
       - */
       -extern void        draw(Image*, Rectangle, Image*, Image*, Point);
       -extern void        drawop(Image*, Rectangle, Image*, Image*, Point, Drawop);
       -extern void        gendraw(Image*, Rectangle, Image*, Point, Image*, Point);
       -extern void        gendrawop(Image*, Rectangle, Image*, Point, Image*, Point, Drawop);
       -extern void        line(Image*, Point, Point, int, int, int, Image*, Point);
       -extern void        lineop(Image*, Point, Point, int, int, int, Image*, Point, Drawop);
       -extern void        poly(Image*, Point*, int, int, int, int, Image*, Point);
       -extern void        polyop(Image*, Point*, int, int, int, int, Image*, Point, Drawop);
       -extern void        fillpoly(Image*, Point*, int, int, Image*, Point);
       -extern void        fillpolyop(Image*, Point*, int, int, Image*, Point, Drawop);
       -extern Point        string(Image*, Point, Image*, Point, Font*, char*);
       -extern Point        stringop(Image*, Point, Image*, Point, Font*, char*, Drawop);
       -extern Point        stringn(Image*, Point, Image*, Point, Font*, char*, int);
       -extern Point        stringnop(Image*, Point, Image*, Point, Font*, char*, int, Drawop);
       -extern Point        runestring(Image*, Point, Image*, Point, Font*, Rune*);
       -extern Point        runestringop(Image*, Point, Image*, Point, Font*, Rune*, Drawop);
       -extern Point        runestringn(Image*, Point, Image*, Point, Font*, Rune*, int);
       -extern Point        runestringnop(Image*, Point, Image*, Point, Font*, Rune*, int, Drawop);
       -extern Point        stringbg(Image*, Point, Image*, Point, Font*, char*, Image*, Point);
       -extern Point        stringbgop(Image*, Point, Image*, Point, Font*, char*, Image*, Point, Drawop);
       -extern Point        stringnbg(Image*, Point, Image*, Point, Font*, char*, int, Image*, Point);
       -extern Point        stringnbgop(Image*, Point, Image*, Point, Font*, char*, int, Image*, Point, Drawop);
       -extern Point        runestringbg(Image*, Point, Image*, Point, Font*, Rune*, Image*, Point);
       -extern Point        runestringbgop(Image*, Point, Image*, Point, Font*, Rune*, Image*, Point, Drawop);
       -extern Point        runestringnbg(Image*, Point, Image*, Point, Font*, Rune*, int, Image*, Point);
       -extern Point        runestringnbgop(Image*, Point, Image*, Point, Font*, Rune*, int, Image*, Point, Drawop);
       -extern Point        _string(Image*, Point, Image*, Point, Font*, char*, Rune*, int, Rectangle, Image*, Point, Drawop);
       -extern Point        stringsubfont(Image*, Point, Image*, Subfont*, char*);
       -extern int                bezier(Image*, Point, Point, Point, Point, int, int, int, Image*, Point);
       -extern int                bezierop(Image*, Point, Point, Point, Point, int, int, int, Image*, Point, Drawop);
       -extern int                bezspline(Image*, Point*, int, int, int, int, Image*, Point);
       -extern int                bezsplineop(Image*, Point*, int, int, int, int, Image*, Point, Drawop);
       -extern int                bezsplinepts(Point*, int, Point**);
       -extern int                fillbezier(Image*, Point, Point, Point, Point, int, Image*, Point);
       -extern int                fillbezierop(Image*, Point, Point, Point, Point, int, Image*, Point, Drawop);
       -extern int                fillbezspline(Image*, Point*, int, int, Image*, Point);
       -extern int                fillbezsplineop(Image*, Point*, int, int, Image*, Point, Drawop);
       -extern void        ellipse(Image*, Point, int, int, int, Image*, Point);
       -extern void        ellipseop(Image*, Point, int, int, int, Image*, Point, Drawop);
       -extern void        fillellipse(Image*, Point, int, int, Image*, Point);
       -extern void        fillellipseop(Image*, Point, int, int, Image*, Point, Drawop);
       -extern void        arc(Image*, Point, int, int, int, Image*, Point, int, int);
       -extern void        arcop(Image*, Point, int, int, int, Image*, Point, int, int, Drawop);
       -extern void        fillarc(Image*, Point, int, int, Image*, Point, int, int);
       -extern void        fillarcop(Image*, Point, int, int, Image*, Point, int, int, Drawop);
       -extern void        border(Image*, Rectangle, int, Image*, Point);
       -extern void        borderop(Image*, Rectangle, int, Image*, Point, Drawop);
       -
       -/*
       - * Font management
       - */
       -extern Font*        openfont(Display*, char*);
       -extern Font*        buildfont(Display*, char*, char*);
       -extern void        freefont(Font*);
       -extern Font*        mkfont(Subfont*, Rune);
       -extern int        cachechars(Font*, char**, Rune**, ushort*, int, int*, char**);
       -extern void        agefont(Font*);
       -extern Subfont*        allocsubfont(char*, int, int, int, Fontchar*, Image*);
       -extern Subfont*        lookupsubfont(Display*, char*);
       -extern void        installsubfont(char*, Subfont*);
       -extern void        uninstallsubfont(Subfont*);
       -extern void        freesubfont(Subfont*);
       -extern Subfont*        readsubfont(Display*, char*, int, int);
       -extern Subfont*        readsubfonti(Display*, char*, int, Image*, int);
       -extern int        writesubfont(int, Subfont*);
       -extern void        _unpackinfo(Fontchar*, uchar*, int);
       -extern Point        stringsize(Font*, char*);
       -extern int        stringwidth(Font*, char*);
       -extern int        stringnwidth(Font*, char*, int);
       -extern Point        runestringsize(Font*, Rune*);
       -extern int        runestringwidth(Font*, Rune*);
       -extern int        runestringnwidth(Font*, Rune*, int);
       -extern Point        strsubfontwidth(Subfont*, char*);
       -extern int        loadchar(Font*, Rune, Cacheinfo*, int, int, char**);
       -extern char*        subfontname(char*, char*, int);
       -extern Subfont*        _getsubfont(Display*, char*);
       -extern Subfont*        getdefont(Display*);
       -extern void                lockdisplay(Display*);
       -extern void        unlockdisplay(Display*);
       -extern int                drawlsetrefresh(u32int, int, void*, void*);
       -
       -/*
       - * Predefined 
       - */
       -extern        uchar        defontdata[];
       -extern        int                sizeofdefont;
       -extern        Point                ZP;
       -extern        Rectangle        ZR;
       -
       -/*
       - * Set up by initdraw()
       - */
       -extern        Display        *display;
       -extern        Font                *font;
       -extern        Image        *screen;
       -extern        Screen        *_screen;
       -extern        int        _cursorfd;
       -extern        int        _drawdebug;        /* set to 1 to see errors from flushimage */
       -extern        void        _setdrawop(Display*, Drawop);
       -extern        Display        *_initdisplay(void(*)(Display*,char*), char*);
       -
       -#define        BGSHORT(p)                (((p)[0]<<0) | ((p)[1]<<8))
       -#define        BGLONG(p)                ((BGSHORT(p)<<0) | (BGSHORT(p+2)<<16))
       -#define        BPSHORT(p, v)                ((p)[0]=(v), (p)[1]=((v)>>8))
       -#define        BPLONG(p, v)                (BPSHORT(p, (v)), BPSHORT(p+2, (v)>>16))
       -
       -/*
       - * Compressed image file parameters and helper routines
       - */
       -#define        NMATCH        3                /* shortest match possible */
       -#define        NRUN        (NMATCH+31)        /* longest match possible */
       -#define        NMEM        1024                /* window size */
       -#define        NDUMP        128                /* maximum length of dump */
       -#define        NCBLOCK        6000                /* size of compressed blocks */
       -extern        void        _twiddlecompressed(uchar*, int);
       -extern        int        _compblocksize(Rectangle, int);
       -
       -/* XXX backwards helps; should go */
       -extern        int                log2[];
       -extern        u32int        drawld2chan[];
       -extern        void                drawsetdebug(int);
       -
       -/*
       - * Port magic.
       - */
       -int        _drawmsgread(Display*, void*, int);
       -int        _drawmsgwrite(Display*, void*, int);
 (DIR) diff --git a/src/libdraw/event.h b/src/libdraw/event.h
       t@@ -1,63 +0,0 @@
       -typedef struct        Event Event;
       -typedef struct        Menu Menu;
       -
       -enum
       -{
       -        Emouse                = 1,
       -        Ekeyboard        = 2,
       -};
       -
       -enum
       -{
       -        MAXSLAVE = 32,
       -        EMAXMSG = 128+8192,        /* size of 9p header+data */
       -};
       -
       -struct        Mouse
       -{
       -        int        buttons;        /* bit array: LMR=124 */
       -        Point        xy;
       -        ulong        msec;
       -};
       -
       -struct        Event
       -{
       -        int        kbdc;
       -        Mouse        mouse;
       -        int        n;                /* number of characters in message */
       -        void        *v;                /* data unpacked by general event-handling function */
       -        uchar        data[EMAXMSG];        /* message from an arbitrary file descriptor */
       -};
       -
       -struct Menu
       -{
       -        char        **item;
       -        char        *(*gen)(int);
       -        int        lasthit;
       -};
       -
       -/*
       - * Events
       - */
       -extern void         einit(ulong);
       -extern ulong         estart(ulong, int, int);
       -extern ulong         estartfn(ulong, int, int, int (*fn)(int, Event*, uchar*, int));
       -extern ulong         etimer(ulong, int);
       -extern ulong         event(Event*);
       -extern ulong         eread(ulong, Event*);
       -extern Mouse         emouse(void);
       -extern int         ekbd(void);
       -extern int         ecanread(ulong);
       -extern int         ecanmouse(void);
       -extern int         ecankbd(void);
       -extern void         eresized(int);        /* supplied by user */
       -extern int         emenuhit(int, Mouse*, Menu*);
       -extern int        eatomouse(Mouse*, char*, int);
       -extern Rectangle        getrect(int, Mouse*);
       -struct Cursor;
       -extern void         esetcursor(struct Cursor*);
       -extern void         emoveto(Point);
       -extern Rectangle        egetrect(int, Mouse*);
       -extern void                edrawgetrect(Rectangle, int);
       -extern int                ereadmouse(Mouse*);
       -extern int                eatomouse(Mouse*, char*, int);
 (DIR) diff --git a/src/libdraw/keyboard.h b/src/libdraw/keyboard.h
       t@@ -1,36 +0,0 @@
       -typedef struct         Keyboardctl Keyboardctl;
       -
       -struct        Keyboardctl
       -{
       -        struct Channel        *c;        /* chan(Rune)[20] */
       -
       -        char                *file;
       -        int                consfd;                /* to cons file */
       -        int                ctlfd;                /* to ctl file */
       -        int                pid;                /* of slave proc */
       -};
       -
       -
       -extern        Keyboardctl*        initkeyboard(char*);
       -extern        int                        ctlkeyboard(Keyboardctl*, char*);
       -extern        void                        closekeyboard(Keyboardctl*);
       -
       -enum {
       -        KF=        0xF000,        /* Rune: beginning of private Unicode space */
       -        /* KF|1, KF|2, ..., KF|0xC is F1, F2, ..., F12 */
       -        Khome=        KF|0x0D,
       -        Kup=        KF|0x0E,
       -        Kpgup=        KF|0x0F,
       -        Kprint=        KF|0x10,
       -        Kleft=        KF|0x11,
       -        Kright=        KF|0x12,
       -        Kdown=        0x80,
       -        Kview=        0x80,
       -        Kpgdown=        KF|0x13,
       -        Kins=        KF|0x14,
       -        Kend=        '\r',        /* [sic] */
       -
       -        Kalt=                KF|0x15,
       -        Kshift=        KF|0x16,
       -        Kctl=                KF|0x17,
       -};
 (DIR) diff --git a/src/libdraw/memdraw.h b/src/libdraw/memdraw.h
       t@@ -1,209 +0,0 @@
       -typedef struct        Memimage Memimage;
       -typedef struct        Memdata Memdata;
       -typedef struct        Memsubfont Memsubfont;
       -typedef struct        Memlayer Memlayer;
       -typedef struct        Memcmap Memcmap;
       -typedef struct        Memdrawparam        Memdrawparam;
       -
       -/*
       - * Memdata is allocated from main pool, but .data from the image pool.
       - * Memdata is allocated separately to permit patching its pointer after
       - * compaction when windows share the image data.
       - * The first word of data is a back pointer to the Memdata, to find
       - * The word to patch.
       - */
       -
       -struct Memdata
       -{
       -        u32int        *base;        /* allocated data pointer */
       -        uchar        *bdata;        /* pointer to first byte of actual data; word-aligned */
       -        int        ref;        /* number of Memimages using this data */
       -        void*        imref;
       -        int        allocd;        /* is this malloc'd? */
       -};
       -
       -enum {
       -        Frepl        = 1<<0,        /* is replicated */
       -        Fsimple        = 1<<1,        /* is 1x1 */
       -        Fgrey        = 1<<2,        /* is grey */
       -        Falpha        = 1<<3,        /* has explicit alpha */
       -        Fcmap        = 1<<4,        /* has cmap channel */
       -        Fbytes        = 1<<5,        /* has only 8-bit channels */
       -};
       -
       -struct Memimage
       -{
       -        Rectangle        r;        /* rectangle in data area, local coords */
       -        Rectangle        clipr;        /* clipping region */
       -        int                depth;        /* number of bits of storage per pixel */
       -        int                nchan;        /* number of channels */
       -        u32int                chan;        /* channel descriptions */
       -        Memcmap                *cmap;
       -
       -        Memdata                *data;        /* pointer to data; shared by windows in this image */
       -        int                zero;        /* data->bdata+zero==&byte containing (0,0) */
       -        u32int                width;        /* width in words of a single scan line */
       -        Memlayer        *layer;        /* nil if not a layer*/
       -        u32int                flags;
       -        void                *X;
       -
       -        int                shift[NChan];
       -        int                mask[NChan];
       -        int                nbits[NChan];
       -};
       -
       -struct Memcmap
       -{
       -        uchar        cmap2rgb[3*256];
       -        uchar        rgb2cmap[16*16*16];
       -};
       -
       -/*
       - * Subfonts
       - *
       - * given char c, Subfont *f, Fontchar *i, and Point p, one says
       - *        i = f->info+c;
       - *        draw(b, Rect(p.x+i->left, p.y+i->top,
       - *                p.x+i->left+((i+1)->x-i->x), p.y+i->bottom),
       - *                color, f->bits, Pt(i->x, i->top));
       - *        p.x += i->width;
       - * to draw characters in the specified color (itself a Memimage) in Memimage b.
       - */
       -
       -struct        Memsubfont
       -{
       -        char                *name;
       -        short                n;                /* number of chars in font */
       -        uchar                height;                /* height of bitmap */
       -        char                ascent;                /* top of bitmap to baseline */
       -        Fontchar        *info;                /* n+1 character descriptors */
       -        Memimage        *bits;                /* of font */
       -};
       -
       -/*
       - * Encapsulated parameters and information for sub-draw routines.
       - */
       -enum {
       -        Simplesrc=1<<0,
       -        Simplemask=1<<1,
       -        Replsrc=1<<2,
       -        Replmask=1<<3,
       -        Fullmask=1<<4,
       -};
       -struct        Memdrawparam
       -{
       -        Memimage *dst;
       -        Rectangle        r;
       -        Memimage *src;
       -        Rectangle sr;
       -        Memimage *mask;
       -        Rectangle mr;
       -        int op;
       -
       -        u32int state;
       -        u32int mval;        /* if Simplemask, the mask pixel in mask format */
       -        u32int mrgba;        /* mval in rgba */
       -        u32int sval;        /* if Simplesrc, the source pixel in src format */
       -        u32int srgba;        /* sval in rgba */
       -        u32int sdval;        /* sval in dst format */
       -};
       -
       -/*
       - * Memimage management
       - */
       -
       -extern Memimage*        allocmemimage(Rectangle, u32int);
       -extern Memimage*        allocmemimaged(Rectangle, u32int, Memdata*, void*);
       -extern Memimage*        readmemimage(int);
       -extern Memimage*        creadmemimage(int);
       -extern int                writememimage(int, Memimage*);
       -extern void                freememimage(Memimage*);
       -extern int                loadmemimage(Memimage*, Rectangle, uchar*, int);
       -extern int                cloadmemimage(Memimage*, Rectangle, uchar*, int);
       -extern int                unloadmemimage(Memimage*, Rectangle, uchar*, int);
       -extern u32int*                wordaddr(Memimage*, Point);
       -extern uchar*                byteaddr(Memimage*, Point);
       -extern int                drawclip(Memimage*, Rectangle*, Memimage*, Point*,
       -                                Memimage*, Point*, Rectangle*, Rectangle*);
       -extern void                memfillcolor(Memimage*, u32int);
       -extern int                memsetchan(Memimage*, u32int);
       -extern u32int                pixelbits(Memimage*, Point);
       -
       -/*
       - * Graphics
       - */
       -extern void        memdraw(Memimage*, Rectangle, Memimage*, Point, 
       -                        Memimage*, Point, int);
       -extern void        memline(Memimage*, Point, Point, int, int, int,
       -                        Memimage*, Point, int);
       -extern void        mempoly(Memimage*, Point*, int, int, int, int,
       -                        Memimage*, Point, int);
       -extern void        memfillpoly(Memimage*, Point*, int, int,
       -                        Memimage*, Point, int);
       -extern void        _memfillpolysc(Memimage*, Point*, int, int,
       -                        Memimage*, Point, int, int, int, int);
       -extern void        memimagedraw(Memimage*, Rectangle, Memimage*, Point,
       -                        Memimage*, Point, int);
       -extern int        hwdraw(Memdrawparam*);
       -extern void        memimageline(Memimage*, Point, Point, int, int, int,
       -                        Memimage*, Point, int);
       -extern void        _memimageline(Memimage*, Point, Point, int, int, int,
       -                        Memimage*, Point, Rectangle, int);
       -extern Point        memimagestring(Memimage*, Point, Memimage*, Point,
       -                        Memsubfont*, char*);
       -extern void        memellipse(Memimage*, Point, int, int, int,
       -                        Memimage*, Point, int);
       -extern void        memarc(Memimage*, Point, int, int, int, Memimage*,
       -                        Point, int, int, int);
       -extern Rectangle memlinebbox(Point, Point, int, int, int);
       -extern int        memlineendsize(int);
       -extern void        _memmkcmap(void);
       -extern void        memimageinit(void);
       -
       -/*
       - * Subfont management
       - */
       -extern Memsubfont*        allocmemsubfont(char*, int, int, int, Fontchar*, Memimage*);
       -extern Memsubfont*        openmemsubfont(char*);
       -extern void                freememsubfont(Memsubfont*);
       -extern Point                memsubfontwidth(Memsubfont*, char*);
       -extern Memsubfont*        getmemdefont(void);
       -
       -/*
       - * Predefined 
       - */
       -extern        Memimage*        memwhite;
       -extern        Memimage*        memblack;
       -extern        Memimage*        memopaque;
       -extern        Memimage*        memtransparent;
       -extern        Memcmap*        memdefcmap;
       -
       -/*
       - * Kernel interface
       - */
       -void                        memimagemove(void*, void*);
       -
       -/*
       - * Kernel cruft
       - */
       -extern void                rdb(void);
       -extern int                iprint(char*, ...);
       -extern int                drawdebug;
       -
       -/*
       - * For other implementations, like x11.
       - */
       -extern void                _memfillcolor(Memimage*, u32int);
       -extern Memimage*        _allocmemimage(Rectangle, u32int);
       -extern int                _cloadmemimage(Memimage*, Rectangle, uchar*, int);
       -extern int                _loadmemimage(Memimage*, Rectangle, uchar*, int);
       -extern void                _freememimage(Memimage*);
       -extern u32int                _rgbatoimg(Memimage*, u32int);
       -extern u32int                _imgtorgba(Memimage*, u32int);
       -extern u32int                _pixelbits(Memimage*, Point);
       -extern int                _unloadmemimage(Memimage*, Rectangle, uchar*, int);
       -extern Memdrawparam*        _memimagedrawsetup(Memimage*,
       -                                Rectangle, Memimage*, Point, Memimage*,
       -                                Point, int);
       -extern void                _memimagedraw(Memdrawparam*);
       -extern void                _drawreplacescreenimage(Memimage*);
 (DIR) diff --git a/src/libdraw/memlayer.h b/src/libdraw/memlayer.h
       t@@ -1,48 +0,0 @@
       -typedef struct Memscreen Memscreen;
       -typedef void (*Refreshfn)(Memimage*, Rectangle, void*);
       -
       -struct Memscreen
       -{
       -        Memimage        *frontmost;        /* frontmost layer on screen */
       -        Memimage        *rearmost;        /* rearmost layer on screen */
       -        Memimage        *image;                /* upon which all layers are drawn */
       -        Memimage        *fill;                        /* if non-zero, picture to use when repainting */
       -};
       -
       -struct Memlayer
       -{
       -        Rectangle                screenr;        /* true position of layer on screen */
       -        Point                        delta;        /* add delta to go from image coords to screen */
       -        Memscreen        *screen;        /* screen this layer belongs to */
       -        Memimage        *front;        /* window in front of this one */
       -        Memimage        *rear;        /* window behind this one*/
       -        int                clear;        /* layer is fully visible */
       -        Memimage        *save;        /* save area for obscured parts */
       -        Refreshfn        refreshfn;                /* function to call to refresh obscured parts if save==nil */
       -        void                *refreshptr;        /* argument to refreshfn */
       -};
       -
       -/*
       - * These functions accept local coordinates
       - */
       -int                        memload(Memimage*, Rectangle, uchar*, int, int);
       -int                        memunload(Memimage*, Rectangle, uchar*, int);
       -
       -/*
       - * All these functions accept screen coordinates, not local ones.
       - */
       -void                        _memlayerop(void (*fn)(Memimage*, Rectangle, Rectangle, void*, int), Memimage*, Rectangle, Rectangle, void*);
       -Memimage*        memlalloc(Memscreen*, Rectangle, Refreshfn, void*, u32int);
       -void                        memldelete(Memimage*);
       -void                        memlfree(Memimage*);
       -void                        memltofront(Memimage*);
       -void                        memltofrontn(Memimage**, int);
       -void                        _memltofrontfill(Memimage*, int);
       -void                        memltorear(Memimage*);
       -void                        memltorearn(Memimage**, int);
       -int                        memlsetrefresh(Memimage*, Refreshfn, void*);
       -void                        memlhide(Memimage*, Rectangle);
       -void                        memlexpose(Memimage*, Rectangle);
       -void                        _memlsetclear(Memscreen*);
       -int                        memlorigin(Memimage*, Point, Point);
       -void                        memlnorefresh(Memimage*, Rectangle, void*);
 (DIR) diff --git a/src/libdraw/mkfile b/src/libdraw/mkfile
       t@@ -1 +0,0 @@
       -<../libutf/mkfile
 (DIR) diff --git a/src/libdraw/mouse.h b/src/libdraw/mouse.h
       t@@ -1,44 +0,0 @@
       -typedef struct        Menu Menu;
       -typedef struct         Mousectl Mousectl;
       -
       -struct        Mouse
       -{
       -        int        buttons;        /* bit array: LMR=124 */
       -        Point        xy;
       -        ulong        msec;
       -};
       -
       -struct Mousectl
       -{
       -        Mouse        m;
       -        struct Channel        *c;        /* chan(Mouse) */
       -        struct Channel        *resizec;        /* chan(int)[2] */
       -                        /* buffered in case client is waiting for a mouse action before handling resize */
       -
       -        char                *file;
       -        int                mfd;                /* to mouse file */
       -        int                cfd;                /* to cursor file */
       -        int                pid;                /* of slave proc */
       -        Display                *display;
       -        /*Image*        image;        / * of associated window/display */
       -};
       -
       -struct Menu
       -{
       -        char        **item;
       -        char        *(*gen)(int);
       -        int        lasthit;
       -};
       -
       -/*
       - * Mouse
       - */
       -extern Mousectl*        initmouse(char*, Image*);
       -extern void                moveto(Mousectl*, Point);
       -extern int                        readmouse(Mousectl*);
       -extern void                closemouse(Mousectl*);
       -struct Cursor;
       -extern void                setcursor(Mousectl*, struct Cursor*);
       -extern void                drawgetrect(Rectangle, int);
       -extern Rectangle        getrect(int, Mousectl*);
       -extern int                         menuhit(int, Mousectl*, Menu*, Screen*);
 (DIR) diff --git a/src/libdraw/test b/src/libdraw/test
       Binary files differ.
 (DIR) diff --git a/src/libfmt/Make.Darwin-PowerMacintosh b/src/libfmt/Make.Darwin-PowerMacintosh
       t@@ -1,6 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I. -I${PREFIX}/include
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libfmt/Make.FreeBSD-386 b/src/libfmt/Make.FreeBSD-386
       t@@ -1,7 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I. -I$(PREFIX)/include -pg
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O        # default, can be overriden by Make.$(SYSNAME)
       -NAN=nan64.$O
 (DIR) diff --git a/src/libfmt/Make.HP-UX-9000 b/src/libfmt/Make.HP-UX-9000
       t@@ -1,6 +0,0 @@
       -CC=cc
       -CFLAGS=-O -c -Ae -I.
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libfmt/Make.Linux-386 b/src/libfmt/Make.Linux-386
       t@@ -1,7 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I. -DNEEDLL
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O        # default, can be overriden by Make.$(SYSNAME)
       -NAN=nan64.$O
 (DIR) diff --git a/src/libfmt/Make.NetBSD-386 b/src/libfmt/Make.NetBSD-386
       t@@ -1,7 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I. -I$(PREFIX)/include
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O        # default, can be overriden by Make.$(SYSNAME)
       -NAN=nan64.$O
 (DIR) diff --git a/src/libfmt/Make.OSF1-alpha b/src/libfmt/Make.OSF1-alpha
       t@@ -1,6 +0,0 @@
       -CC=cc
       -CFLAGS+=-g -c -I.
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libfmt/Make.SunOS-sun4u b/src/libfmt/Make.SunOS-sun4u
       t@@ -1,2 +0,0 @@
       -include Make.SunOS-sun4u-$(CC)
       -NAN=nan64.$O
 (DIR) diff --git a/src/libfmt/Make.SunOS-sun4u-cc b/src/libfmt/Make.SunOS-sun4u-cc
       t@@ -1,6 +0,0 @@
       -CC=cc
       -CFLAGS+=-g -c -I. -O
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libfmt/Make.SunOS-sun4u-gcc b/src/libfmt/Make.SunOS-sun4u-gcc
       t@@ -1,6 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libfmt/Makefile b/src/libfmt/Makefile
       t@@ -1,27 +1,7 @@
       -
       -# this works in gnu make
       -SYSNAME:=${shell uname}
       -OBJTYPE:=${shell uname -m | sed 's;i.86;386;; s;/.*;;; s; ;;g'}
       -
       -# this works in bsd make
       -SYSNAME!=uname
       -OBJTYPE!=uname -m | sed 's;i.86;386;; s;/.*;;; s; ;;g'
       -
       -# the gnu rules will mess up bsd but not vice versa,
       -# hence the gnu rules come first.
       -
       -include Make.$(SYSNAME)-$(OBJTYPE)
       -
       -PREFIX=/usr/local
       -
       -NUKEFILES=
       -
       -TGZFILES=
       +9SRC=..
       +include $(9SRC)/Makehdr
        
        LIB=libfmt.a
       -VERSION=2.0
       -PORTPLACE=devel/libfmt
       -NAME=libfmt
        
        NUM=\
                charstod.$O\
       t@@ -64,71 +44,13 @@ OFILES=\
        
        HFILES=\
                fmtdef.h\
       -        fmt.h\
       -
       -all: $(LIB)
       +        $(9SRC)/include/fmt.h\
        
       -install: $(LIB)
       -        test -d $(PREFIX)/man/man3 || mkdir $(PREFIX)/man/man3
       -        install -m 0644 print.3 $(PREFIX)/man/man3/print.3
       -        install -m 0644 fmtinstall.3 $(PREFIX)/man/man3/fmtinstall.3
       -        install -m 0644 fmt.h $(PREFIX)/include/fmt.h
       -        install -m 0644 $(LIB) $(PREFIX)/lib/$(LIB)
       +include $(9SRC)/Makesyslib
        
        $(NAN).$O: nan.h
        strtod.$O: nan.h
        
        test: $(LIB) test.$O
       -        $(CC) -o test test.$O $(LIB) -L$(PREFIX)/lib -lutf
       -
       -$(LIB): $(OFILES)
       -        $(AR) $(ARFLAGS) $(LIB) $(OFILES)
       -
       -NUKEFILES+=$(LIB)
       -.c.$O:
       -        $(CC) $(CFLAGS) -I$(PREFIX)/include $*.c
       -
       -%.$O: %.c
       -        $(CC) $(CFLAGS) -I$(PREFIX)/include $*.c
       -
       -
       -$(OFILES): $(HFILES)
       -
       -tgz:
       -        rm -rf $(NAME)-$(VERSION)
       -        mkdir $(NAME)-$(VERSION)
       -        cp Makefile Make.* README LICENSE NOTICE *.[ch137] rpm.spec bundle.ports $(TGZFILES) $(NAME)-$(VERSION)
       -        tar cf - $(NAME)-$(VERSION) | gzip >$(NAME)-$(VERSION).tgz
       -        rm -rf $(NAME)-$(VERSION)
       -
       -clean:
       -        rm -f $(OFILES) $(LIB)
       -
       -nuke:
       -        rm -f $(OFILES) *.tgz *.rpm $(NUKEFILES)
       -
       -rpm:
       -        make tgz
       -        cp $(NAME)-$(VERSION).tgz /usr/src/RPM/SOURCES
       -        rpm -ba rpm.spec
       -        cp /usr/src/RPM/SRPMS/$(NAME)-$(VERSION)-1.src.rpm .
       -        cp /usr/src/RPM/RPMS/i586/$(NAME)-$(VERSION)-1.i586.rpm .
       -        scp *.rpm rsc@amsterdam.lcs.mit.edu:public_html/software
       -
       -PORTDIR=/usr/ports/$(PORTPLACE)
       -
       -ports:
       -        make tgz
       -        rm -rf $(PORTDIR)
       -        mkdir $(PORTDIR)
       -        cp $(NAME)-$(VERSION).tgz /usr/ports/distfiles
       -        cat bundle.ports | (cd $(PORTDIR) && awk '$$1=="---" && $$3=="---" { ofile=$$2; next} {if(ofile) print >ofile}')
       -        (cd $(PORTDIR); make makesum)
       -        (cd $(PORTDIR); make)
       -        (cd $(PORTDIR); /usr/local/bin/portlint)
       -        rm -rf $(PORTDIR)/work
       -        shar `find $(PORTDIR)` > ports.shar
       -        (cd $(PORTDIR); tar cf - *) | gzip >$(NAME)-$(VERSION)-ports.tgz
       -        scp *.tgz rsc@amsterdam.lcs.mit.edu:public_html/software
       +        $(CC) -o test test.$O $(LIB) -L$(9SRC)/lib -lutf
        
       -.phony: all clean nuke install tgz rpm ports
 (DIR) diff --git a/src/libfmt/Makefile.MID b/src/libfmt/Makefile.MID
       t@@ -1,63 +0,0 @@
       -LIB=libfmt.a
       -VERSION=2.0
       -PORTPLACE=devel/libfmt
       -NAME=libfmt
       -
       -NUM=\
       -        charstod.$O\
       -        pow10.$O\
       -
       -OFILES=\
       -        dofmt.$O\
       -        errfmt.$O\
       -        fltfmt.$O\
       -        fmt.$O\
       -        fmtfd.$O\
       -        fmtfdflush.$O\
       -        fmtlock.$O\
       -        fmtprint.$O\
       -        fmtquote.$O\
       -        fmtrune.$O\
       -        fmtstr.$O\
       -        fmtvprint.$O\
       -        fprint.$O\
       -        print.$O\
       -        runefmtstr.$O\
       -        runeseprint.$O\
       -        runesmprint.$O\
       -        runesnprint.$O\
       -        runesprint.$O\
       -        runevseprint.$O\
       -        runevsmprint.$O\
       -        runevsnprint.$O\
       -        seprint.$O\
       -        smprint.$O\
       -        snprint.$O\
       -        sprint.$O\
       -        strtod.$O\
       -        vfprint.$O\
       -        vseprint.$O\
       -        vsmprint.$O\
       -        vsnprint.$O\
       -        $(NUM)\
       -        $(NAN)\
       -
       -HFILES=\
       -        fmtdef.h\
       -        fmt.h\
       -
       -all: $(LIB)
       -
       -install: $(LIB)
       -        test -d $(PREFIX)/man/man3 || mkdir $(PREFIX)/man/man3
       -        install -m 0644 print.3 $(PREFIX)/man/man3/print.3
       -        install -m 0644 fmtinstall.3 $(PREFIX)/man/man3/fmtinstall.3
       -        install -m 0644 fmt.h $(PREFIX)/include/fmt.h
       -        install -m 0644 $(LIB) $(PREFIX)/lib/$(LIB)
       -
       -$(NAN).$O: nan.h
       -strtod.$O: nan.h
       -
       -test: $(LIB) test.$O
       -        $(CC) -o test test.$O $(LIB) -L$(PREFIX)/lib -lutf
       -
 (DIR) diff --git a/src/libfmt/bundle.ports b/src/libfmt/bundle.ports
       t@@ -1,51 +0,0 @@
       ---- Makefile ---
       -# New ports collection makefile for: libfmt
       -# Date Created:                11 Feb 2003
       -# Whom:                        rsc
       -#
       -# THIS LINE NEEDS REPLACING.  IT'S HERE TO GET BY PORTLINT
       -# $FreeBSD: ports/devel/libfmt/Makefile,v 1.1 2003/02/12 00:51:22 rsc Exp $
       -
       -PORTNAME=        libfmt
       -PORTVERSION=        2.0
       -CATEGORIES=        devel
       -MASTER_SITES=        http://pdos.lcs.mit.edu/~rsc/software/
       -EXTRACT_SUFX=        .tgz
       -
       -MAINTAINER=        rsc@post.harvard.edu
       -
       -DEPENDS=        ${PORTSDIR}/devel/libutf
       -
       -MAN3=                print.3 fmtinstall.3
       -
       -USE_REINPLACE=yes
       -
       -.include <bsd.port.pre.mk>
       -
       -post-patch:
       -        ${REINPLACE_CMD} -e 's,$$(PREFIX),${PREFIX},g' ${WRKSRC}/Makefile
       -
       -.include <bsd.port.post.mk>
       ---- pkg-comment ---
       -Extensible formatted print C library (printf with user-defined verbs)
       ---- pkg-descr ---
       -Libfmt is a port of Plan 9's formatted print library.
       -As a base it provides all the syntax of ANSI printf
       -but adds the ability for client programs to install
       -new print verbs.  One such print verb (installed by
       -default) is %r, which prints the system error string.
       -Instead of perror("foo"), you can write fprint(2, "foo: %r\n"). 
       -This is especially nice when you write verbs to format
       -the data structures used by your particular program.
       -
       -WWW: http://pdos.lcs.mit.edu/~rsc/software/#libfmt
       -http://plan9.bell-labs.com/magic/man2html/2/print
       -
       -Russ Cox
       -rsc@post.harvard.edu
       ---- pkg-plist ---
       -lib/libfmt.a
       -include/fmt.h
       ---- /dev/null ---
       -This is just a way to make sure blank lines don't
       -creep into pkg-plist.
 (DIR) diff --git a/src/libfmt/fmt.h b/src/libfmt/fmt.h
       t@@ -1,100 +0,0 @@
       -
       -/*
       - * The authors of this software are Rob Pike and Ken Thompson.
       - *              Copyright (c) 2002 by Lucent Technologies.
       - * Permission to use, copy, modify, and distribute this software for any
       - * purpose without fee is hereby granted, provided that this entire notice
       - * is included in all copies of any software which is or includes a copy
       - * or modification of this software and in all copies of the supporting
       - * documentation for such software.
       - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
       - * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES MAKE ANY
       - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
       - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
       - */
       -
       -#ifndef _FMTH_
       -#define _FMTH_ 1
       -
       -#include <stdarg.h>
       -
       -#ifndef _UTFH_
       -#include <utf.h>
       -#endif
       -
       -typedef struct Fmt        Fmt;
       -struct Fmt{
       -        unsigned char        runes;                /* output buffer is runes or chars? */
       -        void        *start;                        /* of buffer */
       -        void        *to;                        /* current place in the buffer */
       -        void        *stop;                        /* end of the buffer; overwritten if flush fails */
       -        int        (*flush)(Fmt *);        /* called when to == stop */
       -        void        *farg;                        /* to make flush a closure */
       -        int        nfmt;                        /* num chars formatted so far */
       -        va_list        args;                        /* args passed to dofmt */
       -        int        r;                        /* % format Rune */
       -        int        width;
       -        int        prec;
       -        unsigned long        flags;
       -};
       -
       -enum{
       -        FmtWidth        = 1,
       -        FmtLeft                = FmtWidth << 1,
       -        FmtPrec                = FmtLeft << 1,
       -        FmtSharp        = FmtPrec << 1,
       -        FmtSpace        = FmtSharp << 1,
       -        FmtSign                = FmtSpace << 1,
       -        FmtZero                = FmtSign << 1,
       -        FmtUnsigned        = FmtZero << 1,
       -        FmtShort        = FmtUnsigned << 1,
       -        FmtLong                = FmtShort << 1,
       -        FmtVLong        = FmtLong << 1,
       -        FmtComma        = FmtVLong << 1,
       -        FmtByte                = FmtComma << 1,
       -        FmtLDouble        = FmtByte << 1,
       -
       -        FmtFlag                = FmtLDouble << 1
       -};
       -
       -extern        int        print(char*, ...);
       -extern        char*        seprint(char*, char*, char*, ...);
       -extern        char*        vseprint(char*, char*, char*, va_list);
       -extern        int        snprint(char*, int, char*, ...);
       -extern        int        vsnprint(char*, int, char*, va_list);
       -extern        char*        smprint(char*, ...);
       -extern        char*        vsmprint(char*, va_list);
       -extern        int        sprint(char*, char*, ...);
       -extern        int        fprint(int, char*, ...);
       -extern        int        vfprint(int, char*, va_list);
       -
       -extern        int        runesprint(Rune*, char*, ...);
       -extern        int        runesnprint(Rune*, int, char*, ...);
       -extern        int        runevsnprint(Rune*, int, char*, va_list);
       -extern        Rune*        runeseprint(Rune*, Rune*, char*, ...);
       -extern        Rune*        runevseprint(Rune*, Rune*, char*, va_list);
       -extern        Rune*        runesmprint(char*, ...);
       -extern        Rune*        runevsmprint(char*, va_list);
       -
       -extern        int        fmtfdinit(Fmt*, int, char*, int);
       -extern        int        fmtfdflush(Fmt*);
       -extern        int        fmtstrinit(Fmt*);
       -extern        char*        fmtstrflush(Fmt*);
       -extern        int        runefmtstrinit(Fmt*);
       -
       -extern        int        quotestrfmt(Fmt *f);
       -extern        void        quotefmtinstall(void);
       -extern        int        (*fmtdoquote)(int);
       -
       -
       -extern        int        fmtinstall(int, int (*)(Fmt*));
       -extern        int        dofmt(Fmt*, char*);
       -extern        int        fmtprint(Fmt*, char*, ...);
       -extern        int        fmtvprint(Fmt*, char*, va_list);
       -extern        int        fmtrune(Fmt*, int);
       -extern        int        fmtstrcpy(Fmt*, char*);
       -
       -extern        double        fmtstrtod(const char *, char **);
       -extern        double        fmtcharstod(int(*)(void*), void*);
       -
       -#endif
 (DIR) diff --git a/src/libfmt/fmtinstall.3 b/src/libfmt/fmtinstall.3
       t@@ -1,346 +0,0 @@
       -.TH FMTINSTALL 3
       -.de EX
       -.nf
       -.ft B
       -..
       -.de EE
       -.fi
       -.ft R
       -..
       -.SH NAME
       -fmtinstall, dofmt, fmtprint, fmtvprint, fmtstrcpy, fmtfdinit, fmtfdflush, fmtstrinit, fmtstrflush \- support for user-defined print formats and output routines
       -.SH SYNOPSIS
       -.B #include <fmt.h>
       -.PP
       -.ft L
       -.nf
       -.ta \w'    'u +\w'    'u +\w'    'u +\w'    'u +\w'    'u
       -typedef struct Fmt        Fmt;
       -struct Fmt{
       -        void        *start;                /* of buffer */
       -        void        *to;                /* current place in the buffer */
       -        void        *stop;                /* end of the buffer; overwritten if flush fails */
       -        int                (*flush)(Fmt*);        /* called when to == stop */
       -        void        *farg;                /* to make flush a closure */
       -        int                nfmt;                /* num chars formatted so far */
       -        va_list        args;                /* args passed to dofmt */
       -        int                r;                        /* % format character */
       -        int                width;
       -        int                prec;
       -        unsigned long        flags;
       -};
       -
       -enum{
       -        FmtWidth        = 1,
       -        FmtLeft                = FmtWidth << 1,
       -        FmtPrec                = FmtLeft << 1,
       -        FmtSharp        = FmtPrec << 1,
       -        FmtSpace        = FmtSharp << 1,
       -        FmtSign                = FmtSpace << 1,
       -        FmtZero                = FmtSign << 1,
       -        FmtUnsigned        = FmtZero << 1,
       -        FmtShort        = FmtUnsigned << 1,
       -        FmtLong                = FmtShort << 1,
       -        FmtVLong        = FmtLong << 1,
       -        FmtComma        = FmtVLong << 1,
       -        FmtByte                = FmtComma << 1,
       -        FmtLDouble        = FmtByte << 1,
       -
       -        FmtFlag                = FmtLDouble << 1
       -};
       -.fi
       -.PP
       -.B
       -.ta \w'\fLchar* 'u
       -
       -.PP
       -.B
       -int        fmtfdinit(Fmt *f, int fd, char *buf, int nbuf);
       -.PP
       -.B
       -int        fmtfdflush(Fmt *f);
       -.PP
       -.B
       -int        fmtstrinit(Fmt *f);
       -.PP
       -.B
       -char*        fmtstrflush(Fmt *f);
       -.PP
       -.B
       -int        fmtinstall(int c, int (*fn)(Fmt*));
       -.PP
       -.B
       -int        dofmt(Fmt *f, char *fmt);
       -.PP
       -.B
       -int        fmtprint(Fmt *f, char *fmt, ...);
       -.PP
       -.B
       -int        fmtvprint(Fmt *f, char *fmt, va_list v);
       -.PP
       -.B
       -int        fmtrune(Fmt *f, int r);
       -.PP
       -.B
       -int        fmtstrcpy(Fmt *f, char *s);
       -.SH DESCRIPTION
       -The interface described here allows the construction of custom
       -.IR print (3)
       -verbs and output routines.
       -In essence, they provide access to the workings of the formatted print code.
       -.PP
       -The
       -.IR print (3)
       -suite maintains its state with a data structure called
       -.BR Fmt .
       -A typical call to
       -.IR print (3)
       -or its relatives initializes a
       -.B Fmt
       -structure, passes it to subsidiary routines to process the output,
       -and finishes by emitting any saved state recorded in the
       -.BR Fmt .
       -The details of the
       -.B Fmt
       -are unimportant to outside users, except insofar as the general
       -design influences the interface.
       -The
       -.B Fmt
       -records
       -the verb being processed, its precision and width,
       -and buffering parameters.
       -Most important, it also records a
       -.I flush
       -routine that the library will call if a buffer overflows.
       -When printing to a file descriptor, the flush routine will
       -emit saved characters and reset the buffer; when printing
       -to an allocated string, it will resize the string to receive more output.
       -The flush routine is nil when printing to fixed-size buffers.
       -User code need never provide a flush routine; this is done internally
       -by the library.
       -.SS Custom output routines
       -To write a custom output routine, such as an error handler that
       -formats and prints custom error messages, the output sequence can be run
       -from outside the library using the routines described here.
       -There are two main cases: output to an open file descriptor
       -and output to a string.
       -.PP
       -To write to a file descriptor, call
       -.I fmtfdinit
       -to initialize the local
       -.B Fmt
       -structure
       -.IR f ,
       -giving the file descriptor
       -.IR fd ,
       -the buffer
       -.IR buf ,
       -and its size
       -.IR nbuf .
       -Then call
       -.IR fmtprint
       -or
       -.IR fmtvprint
       -to generate the output.
       -These behave just like
       -.B fprint
       -(see
       -.IR print (3))
       -or
       -.B vfprint
       -except that the characters are buffered until
       -.I fmtfdflush
       -is called.
       -A typical example of this sequence appears in the Examples section.
       -.PP
       -The same basic sequence applies when outputting to an allocated string:
       -call
       -.I fmtstrinit
       -to initialize the
       -.BR Fmt ,
       -then call
       -.I fmtprint
       -and
       -.I fmtvprint
       -to generate the output.
       -Finally,
       -.I fmtstrflush
       -will return the allocated string, which should be freed after use.
       -Regardless of the output style or type,
       -.I fmtprint
       -or
       -.I fmtvprint
       -generates the characters.
       -.SS Custom format verbs
       -.I Fmtinstall
       -is used to install custom verbs and flags labeled by character
       -.IR c ,
       -which may be any non-zero Unicode character.
       -.I Fn
       -should be declared as
       -.IP
       -.EX
       -int        fn(Fmt*)
       -.EE
       -.PP
       -.IB Fp ->r
       -is the flag or verb character to cause
       -.I fn
       -to be called.
       -In
       -.IR fn ,
       -.IB fp ->width ,
       -.IB fp ->prec
       -are the width and precision, and
       -.IB fp ->flags
       -the decoded flags for the verb (see
       -.IR print (3)
       -for a description of these items).
       -The standard flag values are:
       -.B FmtSign
       -.RB ( + ),
       -.B FmtLeft
       -.RB ( - ),
       -.B FmtSpace
       -.RB ( '\ ' ),
       -.B FmtSharp
       -.RB ( # ),
       -.B FmtComma
       -.RB ( , ),
       -.B FmtLong
       -.RB ( l ),
       -.B FmtShort
       -.RB ( h ),
       -.B FmtByte
       -.RB ( hh ),
       -.B FmtUnsigned
       -.RB ( u ),
       -.B FmtLDouble
       -.RB ( L ),
       -and
       -.B FmtVLong
       -.RB ( ll ).
       -The flag bits
       -.B FmtWidth
       -and
       -.B FmtPrec
       -identify whether a width and precision were specified.
       -.PP
       -.I Fn
       -is passed a pointer to the
       -.B Fmt
       -structure recording the state of the output.
       -If
       -.IB fp ->r
       -is a verb (rather than a flag),
       -.I fn
       -should use 
       -.B Fmt->args
       -to fetch its argument from the list,
       -then format it, and return zero.
       -If
       -.IB fp ->r
       -is a flag,
       -.I fn
       -should return a negative value:
       -the negation of one of the above flag values, or some otherwise unused power of two.
       -All interpretation of
       -.IB fp ->width\f1,
       -.IB fp ->prec\f1,
       -and
       -.IB fp-> flags
       -is left up to the conversion routine.
       -.I Fmtinstall
       -returns 0 if the installation succeeds, \-1 if it fails.
       -.PP
       -.IR Fmtprint
       -and
       -.IR fmtvprint
       -may be called to
       -help prepare output in custom conversion routines.
       -However, these functions clear the width, precision, and flags.
       -The function
       -.I dofmt
       -is the underlying formatter; it
       -uses the existing contents of
       -.B Fmt
       -and should be called only by sophisticated conversion routines.
       -All these routines return the number of characters
       -produced.
       -.PP
       -Some internal functions may be useful to format primitive types.
       -They honor the width, precision and flags as described in
       -.IR print (3).
       -.I Fmtrune
       -formats a single character
       -.BR r .
       -.I Fmtstrcpy
       -formats a string
       -.BR s .
       -All these routines return zero for successful execution.
       -.SH EXAMPLES
       -This function prints an error message with a variable
       -number of arguments and then quits.
       -Compared to the corresponding example in
       -.IR print (3),
       -this version uses a smaller buffer, will never truncate
       -the output message, but might generate multiple
       -.B write
       -system calls to produce its output.
       -.IP
       -.EX
       -.ta 6n +6n +6n +6n +6n +6n +6n +6n +6n
       -
       -void fatal(char *fmt, ...)
       -{
       -        Fmt f;
       -        char buf[64];
       -        va_list arg;
       -
       -        fmtfdinit(&f, 1, buf, sizeof buf);
       -        fmtprint(&f, "fatal: ");
       -        va_start(arg, fmt);
       -        fmtvprint(&f, fmt, arg);
       -        va_end(arg);
       -        fmtprint(&f, "\en");
       -        fmtfdflush(&f);
       -        exits("fatal error");
       -}
       -.EE
       -.PP
       -This example adds a verb to print complex numbers.
       -.IP
       -.EX
       -typedef
       -struct {
       -        double        r, i;
       -} Complex;
       -
       -int
       -Xfmt(Fmt *f)
       -{
       -        Complex c;
       -
       -        c = va_arg(f->args, Complex);
       -        return fmtprint(f, "(%g,%g)", c.r, c.i);
       -}
       -
       -main(...)
       -{
       -        Complex x;
       -
       -        x.r = 1.5;
       -        x.i = -2.3;
       -
       -        fmtinstall('X', Xfmt);
       -        print("x = %X\en", x);
       -}
       -.EE
       -.SH SEE ALSO
       -.IR print (3)
       -.SH HISTORY
       -This formatted print library originally
       -appeared as part of the Plan 9 C library.
       -.SH BUGS
       -The Plan 9 version supports Unicode strings and produces UTF output.
       -This version assumes that characters are always represented by 1-byte values.
 (DIR) diff --git a/src/libfmt/mkfile b/src/libfmt/mkfile
       t@@ -1 +0,0 @@
       -<../libutf/mkfile
 (DIR) diff --git a/src/libfmt/rpm.spec b/src/libfmt/rpm.spec
       t@@ -1,34 +0,0 @@
       -Summary: Extensible formatted print library.  (Printf with user-defined verbs.)
       -Name: libfmt
       -Version: 2.0
       -Release: 1
       -Group: Development/C
       -Copyright: BSD-like
       -Packager: Russ Cox <rsc@post.harvard.edu>
       -Source: http://pdos.lcs.mit.edu/~rsc/software/libfmt-2.0.tgz
       -URL: http://pdos.lcs.mit.edu/~rsc/software/#libfmt
       -Requires: libutf
       -
       -%description
       -Libfmt is a port of Plan 9's formatted print library.
       -As a base it provides all the syntax of ANSI printf
       -but adds the ability for client programs to install
       -new print verbs.  One such print verb (installed by
       -default) is %r, which prints the system error string.
       -Instead of perror("foo"), you can write fprint(2, "foo: %r\n"). 
       -This is especially nice when you write verbs to format
       -the data structures used by your particular program.
       -%prep
       -%setup
       -
       -%build
       -make
       -
       -%install
       -make install
       -
       -%files
       -/usr/local/include/fmt.h
       -/usr/local/lib/libfmt.a
       -/usr/local/man/man3/print.3
       -/usr/local/man/man3/fmtinstall.3
 (DIR) diff --git a/src/libframe/Make.Darwin-PowerMacintosh b/src/libframe/Make.Darwin-PowerMacintosh
       t@@ -1,6 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I. -I${PREFIX}/include
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libframe/Make.FreeBSD-386 b/src/libframe/Make.FreeBSD-386
       t@@ -1,7 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I. -I$(PREFIX)/include
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O        # default, can be overriden by Make.$(SYSNAME)
       -NAN=nan64.$O
 (DIR) diff --git a/src/libframe/Make.HP-UX-9000 b/src/libframe/Make.HP-UX-9000
       t@@ -1,6 +0,0 @@
       -CC=cc
       -CFLAGS=-O -c -Ae -I.
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libframe/Make.Linux-386 b/src/libframe/Make.Linux-386
       t@@ -1,7 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I.
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O        # default, can be overriden by Make.$(SYSNAME)
       -NAN=nan64.$O
 (DIR) diff --git a/src/libframe/Make.NetBSD-386 b/src/libframe/Make.NetBSD-386
       t@@ -1,7 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I. -I$(PREFIX)/include
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O        # default, can be overriden by Make.$(SYSNAME)
       -NAN=nan64.$O
 (DIR) diff --git a/src/libframe/Make.OSF1-alpha b/src/libframe/Make.OSF1-alpha
       t@@ -1,6 +0,0 @@
       -CC=cc
       -CFLAGS+=-g -c -I.
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libframe/Make.SunOS-sun4u b/src/libframe/Make.SunOS-sun4u
       t@@ -1,2 +0,0 @@
       -include Make.SunOS-sun4u-$(CC)
       -NAN=nan64.$O
 (DIR) diff --git a/src/libframe/Make.SunOS-sun4u-cc b/src/libframe/Make.SunOS-sun4u-cc
       t@@ -1,6 +0,0 @@
       -CC=cc
       -CFLAGS+=-g -c -I. -O
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libframe/Make.SunOS-sun4u-gcc b/src/libframe/Make.SunOS-sun4u-gcc
       t@@ -1,6 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libframe/Makefile b/src/libframe/Makefile
       t@@ -1,27 +1,7 @@
       -
       -# this works in gnu make
       -SYSNAME:=${shell uname}
       -OBJTYPE:=${shell uname -m | sed 's;i.86;386;; s;/.*;;; s; ;;g'}
       -
       -# this works in bsd make
       -SYSNAME!=uname
       -OBJTYPE!=uname -m | sed 's;i.86;386;; s;/.*;;; s; ;;g'
       -
       -# the gnu rules will mess up bsd but not vice versa,
       -# hence the gnu rules come first.
       -
       -include Make.$(SYSNAME)-$(OBJTYPE)
       -
       -PREFIX=/usr/local
       -
       -NUKEFILES=
       -
       -TGZFILES=
       +9SRC=..
       +include $(9SRC)/Makehdr
        
        LIB=libframe.a
       -VERSION=2.0
       -PORTPLACE=devel/libframe
       -NAME=libdraw
        
        OFILES=\
                frbox.$O\
       t@@ -34,59 +14,9 @@ OFILES=\
                frstr.$O\
                frutil.$O\
        
       -all: $(LIB)
       -
       -install: $(LIB)
       -        install -c -m 0644 $(LIB) $(PREFIX)/lib/$(LIB)
       -        install -c -m 0644 frame.h $(PREFIX)/include/frame.h
       -$(LIB): $(OFILES)
       -        $(AR) $(ARFLAGS) $(LIB) $(OFILES)
       -
       -NUKEFILES+=$(LIB)
       -.c.$O:
       -        $(CC) $(CFLAGS) -I/usr/X11R6/include -I$(PREFIX)/include $*.c
       -
       -%.$O: %.c
       -        $(CC) $(CFLAGS) -I/usr/X11R6/include -I$(PREFIX)/include $*.c
       -
       -
       -$(OFILES): $(HFILES)
       -
       -tgz:
       -        rm -rf $(NAME)-$(VERSION)
       -        mkdir $(NAME)-$(VERSION)
       -        cp Makefile Make.* README LICENSE NOTICE *.[ch137] rpm.spec bundle.ports $(TGZFILES) $(NAME)-$(VERSION)
       -        tar cf - $(NAME)-$(VERSION) | gzip >$(NAME)-$(VERSION).tgz
       -        rm -rf $(NAME)-$(VERSION)
       -
       -clean:
       -        rm -f $(OFILES) $(LIB)
       -
       -nuke:
       -        rm -f $(OFILES) *.tgz *.rpm $(NUKEFILES)
       -
       -rpm:
       -        make tgz
       -        cp $(NAME)-$(VERSION).tgz /usr/src/RPM/SOURCES
       -        rpm -ba rpm.spec
       -        cp /usr/src/RPM/SRPMS/$(NAME)-$(VERSION)-1.src.rpm .
       -        cp /usr/src/RPM/RPMS/i586/$(NAME)-$(VERSION)-1.i586.rpm .
       -        scp *.rpm rsc@amsterdam.lcs.mit.edu:public_html/software
       -
       -PORTDIR=/usr/ports/$(PORTPLACE)
       +HFILES=\
       +        $(9SRC)/include/frame.h\
       +        $(9SRC)/include/draw.h\
        
       -ports:
       -        make tgz
       -        rm -rf $(PORTDIR)
       -        mkdir $(PORTDIR)
       -        cp $(NAME)-$(VERSION).tgz /usr/ports/distfiles
       -        cat bundle.ports | (cd $(PORTDIR) && awk '$$1=="---" && $$3=="---" { ofile=$$2; next} {if(ofile) print >ofile}')
       -        (cd $(PORTDIR); make makesum)
       -        (cd $(PORTDIR); make)
       -        (cd $(PORTDIR); /usr/local/bin/portlint)
       -        rm -rf $(PORTDIR)/work
       -        shar `find $(PORTDIR)` > ports.shar
       -        (cd $(PORTDIR); tar cf - *) | gzip >$(NAME)-$(VERSION)-ports.tgz
       -        scp *.tgz rsc@amsterdam.lcs.mit.edu:public_html/software
       +include $(9SRC)/Makesyslib
        
       -.phony: all clean nuke install tgz rpm ports
 (DIR) diff --git a/src/libframe/Makefile.MID b/src/libframe/Makefile.MID
       t@@ -1,21 +0,0 @@
       -LIB=libframe.a
       -VERSION=2.0
       -PORTPLACE=devel/libframe
       -NAME=libdraw
       -
       -OFILES=\
       -        frbox.$O\
       -        frdelete.$O\
       -        frdraw.$O\
       -        frinit.$O\
       -        frinsert.$O\
       -        frptofchar.$O\
       -        frselect.$O\
       -        frstr.$O\
       -        frutil.$O\
       -
       -all: $(LIB)
       -
       -install: $(LIB)
       -        install -c -m 0644 $(LIB) $(PREFIX)/lib/$(LIB)
       -        install -c -m 0644 frame.h $(PREFIX)/include/frame.h
 (DIR) diff --git a/src/libframe/frame.h b/src/libframe/frame.h
       t@@ -1,85 +0,0 @@
       -typedef struct Frbox Frbox;
       -typedef struct Frame Frame;
       -
       -enum{
       -        BACK,
       -        HIGH,
       -        BORD,
       -        TEXT,
       -        HTEXT,
       -        NCOL
       -};
       -
       -#define        FRTICKW        3
       -
       -struct Frbox
       -{
       -        long                wid;                /* in pixels */
       -        long                nrune;                /* <0 ==> negate and treat as break char */
       -        uchar        *ptr;
       -        short        bc;        /* break char */
       -        short        minwid;
       -};
       -
       -struct Frame
       -{
       -        Font                *font;                /* of chars in the frame */
       -        Display                *display;        /* on which frame appears */
       -        Image                *b;                /* on which frame appears */
       -        Image                *cols[NCOL];        /* text and background colors */
       -        Rectangle        r;                /* in which text appears */
       -        Rectangle        entire;                /* of full frame */
       -        void                        (*scroll)(Frame*, int);        /* scroll function provided by application */
       -        Frbox                *box;
       -        ulong                p0, p1;                /* selection */
       -        ushort                nbox, nalloc;
       -        ushort                maxtab;                /* max size of tab, in pixels */
       -        ushort                nchars;                /* # runes in frame */
       -        ushort                nlines;                /* # lines with text */
       -        ushort                maxlines;        /* total # lines in frame */
       -        ushort                lastlinefull;        /* last line fills frame */
       -        ushort                modified;        /* changed since frselect() */
       -        Image                *tick;        /* typing tick */
       -        Image                *tickback;        /* saved image under tick */
       -        int                        ticked;        /* flag: is tick onscreen? */
       -};
       -
       -ulong        frcharofpt(Frame*, Point);
       -Point        frptofchar(Frame*, ulong);
       -int        frdelete(Frame*, ulong, ulong);
       -void        frinsert(Frame*, Rune*, Rune*, ulong);
       -void        frselect(Frame*, Mousectl*);
       -void        frselectpaint(Frame*, Point, Point, Image*);
       -void        frdrawsel(Frame*, Point, ulong, ulong, int);
       -void        frdrawsel0(Frame*, Point, ulong, ulong, Image*, Image*);
       -void        frinit(Frame*, Rectangle, Font*, Image*, Image**);
       -void        frsetrects(Frame*, Rectangle, Image*);
       -void        frclear(Frame*, int);
       -
       -uchar        *_frallocstr(Frame*, unsigned);
       -void        _frinsure(Frame*, int, unsigned);
       -Point        _frdraw(Frame*, Point);
       -void        _frgrowbox(Frame*, int);
       -void        _frfreebox(Frame*, int, int);
       -void        _frmergebox(Frame*, int);
       -void        _frdelbox(Frame*, int, int);
       -void        _frsplitbox(Frame*, int, int);
       -int        _frfindbox(Frame*, int, ulong, ulong);
       -void        _frclosebox(Frame*, int, int);
       -int        _frcanfit(Frame*, Point, Frbox*);
       -void        _frcklinewrap(Frame*, Point*, Frbox*);
       -void        _frcklinewrap0(Frame*, Point*, Frbox*);
       -void        _fradvance(Frame*, Point*, Frbox*);
       -int        _frnewwid(Frame*, Point, Frbox*);
       -int        _frnewwid0(Frame*, Point, Frbox*);
       -void        _frclean(Frame*, Point, int, int);
       -void        _frredraw(Frame*, Point);
       -void        _fraddbox(Frame*, int, int);
       -Point        _frptofcharptb(Frame*, ulong, Point, int);
       -Point        _frptofcharnb(Frame*, ulong, int);
       -int        _frstrlen(Frame*, int);
       -void        frtick(Frame*, Point, int);
       -void        frinittick(Frame*);
       -
       -#define        NRUNE(b)        ((b)->nrune<0? 1 : (b)->nrune)
       -#define        NBYTE(b)        strlen((char*)(b)->ptr)
 (DIR) diff --git a/src/libframe/mkfile b/src/libframe/mkfile
       t@@ -1 +0,0 @@
       -<../libutf/mkfile
 (DIR) diff --git a/src/libregexp/Make.Darwin-PowerMacintosh b/src/libregexp/Make.Darwin-PowerMacintosh
       t@@ -1,6 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I. -I${PREFIX}/include
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libregexp/Make.FreeBSD-386 b/src/libregexp/Make.FreeBSD-386
       t@@ -1,7 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I. -I$(PREFIX)/include
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O        # default, can be overriden by Make.$(SYSNAME)
       -NAN=nan64.$O
 (DIR) diff --git a/src/libregexp/Make.HP-UX-9000 b/src/libregexp/Make.HP-UX-9000
       t@@ -1,6 +0,0 @@
       -CC=cc
       -CFLAGS=-O -c -Ae -I.
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libregexp/Make.Linux-386 b/src/libregexp/Make.Linux-386
       t@@ -1,7 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I.
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O        # default, can be overriden by Make.$(SYSNAME)
       -NAN=nan64.$O
 (DIR) diff --git a/src/libregexp/Make.NetBSD-386 b/src/libregexp/Make.NetBSD-386
       t@@ -1,7 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I. -I$(PREFIX)/include
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O        # default, can be overriden by Make.$(SYSNAME)
       -NAN=nan64.$O
 (DIR) diff --git a/src/libregexp/Make.OSF1-alpha b/src/libregexp/Make.OSF1-alpha
       t@@ -1,6 +0,0 @@
       -CC=cc
       -CFLAGS+=-g -c -I.
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libregexp/Make.SunOS-sun4u b/src/libregexp/Make.SunOS-sun4u
       t@@ -1,2 +0,0 @@
       -include Make.SunOS-sun4u-$(CC)
       -NAN=nan64.$O
 (DIR) diff --git a/src/libregexp/Make.SunOS-sun4u-cc b/src/libregexp/Make.SunOS-sun4u-cc
       t@@ -1,6 +0,0 @@
       -CC=cc
       -CFLAGS+=-g -c -I. -O
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libregexp/Make.SunOS-sun4u-gcc b/src/libregexp/Make.SunOS-sun4u-gcc
       t@@ -1,6 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libregexp/Makefile b/src/libregexp/Makefile
       t@@ -1,27 +1,7 @@
       -
       -# this works in gnu make
       -SYSNAME:=${shell uname}
       -OBJTYPE:=${shell uname -m | sed 's;i.86;386;; s;/.*;;; s; ;;g'}
       -
       -# this works in bsd make
       -SYSNAME!=uname
       -OBJTYPE!=uname -m | sed 's;i.86;386;; s;/.*;;; s; ;;g'
       -
       -# the gnu rules will mess up bsd but not vice versa,
       -# hence the gnu rules come first.
       -
       -include Make.$(SYSNAME)-$(OBJTYPE)
       -
       -PREFIX=/usr/local
       -
       -NUKEFILES=
       -
       -TGZFILES=
       +9SRC=..
       +include $(9SRC)/Makehdr
        
        LIB=libregexp9.a
       -VERSION=2.0
       -PORTPLACE=devel/libregexp9
       -NAME=libregexp9
        
        OFILES=\
                regcomp.$O\
       t@@ -29,23 +9,15 @@ OFILES=\
                regexec.$O\
                regsub.$O\
                regaux.$O\
       -        rregsub.$O\
                rregaux.$O\
                rregexec.$O\
       +        rregsub.$O\
        
        HFILES=\
       -        regexp9.h\
       +        $(9SRC)/include/regexp9.h\
                regcomp.h\
        
       -all: $(LIB)
       -
       -install: $(LIB)
       -        test -d $(PREFIX)/man/man3 || mkdir $(PREFIX)/man/man3
       -        test -d $(PREFIX)/man/man7 || mkdir $(PREFIX)/man/man7
       -        install -m 0644 regexp9.3 $(PREFIX)/man/man3/regexp9.3
       -        install -m 0644 regexp9.7 $(PREFIX)/man/man7/regexp9.7
       -        install -m 0644 $(LIB) $(PREFIX)/lib/$(LIB)
       -        install -m 0644 regexp9.h $(PREFIX)/include/regexp9.h
       +include $(9SRC)/Makesyslib
        
        test: test.$O $(LIB)
                $(CC) -o test test.$O $(LIB) -L/usr/local/lib -lfmt -lutf
       t@@ -53,54 +25,3 @@ test: test.$O $(LIB)
        test2: test2.$O $(LIB)
                $(CC) -o test2 test2.$O $(LIB) -L/usr/local/lib -lfmt -lutf
        
       -$(LIB): $(OFILES)
       -        $(AR) $(ARFLAGS) $(LIB) $(OFILES)
       -
       -NUKEFILES+=$(LIB)
       -.c.$O:
       -        $(CC) $(CFLAGS) -I$(PREFIX)/include $*.c
       -
       -%.$O: %.c
       -        $(CC) $(CFLAGS) -I$(PREFIX)/include $*.c
       -
       -
       -$(OFILES): $(HFILES)
       -
       -tgz:
       -        rm -rf $(NAME)-$(VERSION)
       -        mkdir $(NAME)-$(VERSION)
       -        cp Makefile Make.* README LICENSE NOTICE *.[ch137] rpm.spec bundle.ports $(TGZFILES) $(NAME)-$(VERSION)
       -        tar cf - $(NAME)-$(VERSION) | gzip >$(NAME)-$(VERSION).tgz
       -        rm -rf $(NAME)-$(VERSION)
       -
       -clean:
       -        rm -f $(OFILES) $(LIB)
       -
       -nuke:
       -        rm -f $(OFILES) *.tgz *.rpm $(NUKEFILES)
       -
       -rpm:
       -        make tgz
       -        cp $(NAME)-$(VERSION).tgz /usr/src/RPM/SOURCES
       -        rpm -ba rpm.spec
       -        cp /usr/src/RPM/SRPMS/$(NAME)-$(VERSION)-1.src.rpm .
       -        cp /usr/src/RPM/RPMS/i586/$(NAME)-$(VERSION)-1.i586.rpm .
       -        scp *.rpm rsc@amsterdam.lcs.mit.edu:public_html/software
       -
       -PORTDIR=/usr/ports/$(PORTPLACE)
       -
       -ports:
       -        make tgz
       -        rm -rf $(PORTDIR)
       -        mkdir $(PORTDIR)
       -        cp $(NAME)-$(VERSION).tgz /usr/ports/distfiles
       -        cat bundle.ports | (cd $(PORTDIR) && awk '$$1=="---" && $$3=="---" { ofile=$$2; next} {if(ofile) print >ofile}')
       -        (cd $(PORTDIR); make makesum)
       -        (cd $(PORTDIR); make)
       -        (cd $(PORTDIR); /usr/local/bin/portlint)
       -        rm -rf $(PORTDIR)/work
       -        shar `find $(PORTDIR)` > ports.shar
       -        (cd $(PORTDIR); tar cf - *) | gzip >$(NAME)-$(VERSION)-ports.tgz
       -        scp *.tgz rsc@amsterdam.lcs.mit.edu:public_html/software
       -
       -.phony: all clean nuke install tgz rpm ports
 (DIR) diff --git a/src/libregexp/Makefile.MID b/src/libregexp/Makefile.MID
       t@@ -1,34 +0,0 @@
       -LIB=libregexp9.a
       -VERSION=2.0
       -PORTPLACE=devel/libregexp9
       -NAME=libregexp9
       -
       -OFILES=\
       -        regcomp.$O\
       -        regerror.$O\
       -        regexec.$O\
       -        regsub.$O\
       -        regaux.$O\
       -        rregsub.$O\
       -        rregaux.$O\
       -
       -HFILES=\
       -        regexp9.h\
       -        regcomp.h\
       -
       -all: $(LIB)
       -
       -install: $(LIB)
       -        test -d $(PREFIX)/man/man3 || mkdir $(PREFIX)/man/man3
       -        test -d $(PREFIX)/man/man7 || mkdir $(PREFIX)/man/man7
       -        install -m 0644 regexp9.3 $(PREFIX)/man/man3/regexp9.3
       -        install -m 0644 regexp9.7 $(PREFIX)/man/man7/regexp9.7
       -        install -m 0644 $(LIB) $(PREFIX)/lib/$(LIB)
       -        install -m 0644 regexp9.h $(PREFIX)/include/regexp9.h
       -
       -test: test.$O $(LIB)
       -        $(CC) -o test test.$O $(LIB) -L/usr/local/lib -lfmt -lutf
       -
       -test2: test2.$O $(LIB)
       -        $(CC) -o test2 test2.$O $(LIB) -L/usr/local/lib -lfmt -lutf
       -
 (DIR) diff --git a/src/libregexp/bundle.ports b/src/libregexp/bundle.ports
       t@@ -1,51 +0,0 @@
       ---- Makefile ---
       -# New ports collection makefile for: libbio
       -# Date Created:                11 Feb 2003
       -# Whom:                        rsc
       -#
       -# THIS LINE NEEDS REPLACING.  IT'S HERE TO GET BY PORTLINT
       -# $FreeBSD: ports/devel/libbio/Makefile,v 1.1 2003/02/12 00:51:22 rsc Exp $
       -
       -PORTNAME=        libregexp9
       -PORTVERSION=        2.0
       -CATEGORIES=        devel
       -MASTER_SITES=        http://pdos.lcs.mit.edu/~rsc/software/
       -EXTRACT_SUFX=        .tgz
       -
       -MAINTAINER=        rsc@post.harvard.edu
       -
       -DEPENDS=        ${PORTSDIR}/devel/libfmt ${PORTSDIR}/devel/libutf
       -
       -MAN3=                regexp9.3
       -MAN7=                regexp9.7
       -USE_REINPLACE=        yes
       -
       -.include <bsd.port.pre.mk>
       -
       -post-patch:
       -        ${REINPLACE_CMD} -e 's,$$(PREFIX),${PREFIX},g' ${WRKSRC}/Makefile
       -
       -.include <bsd.port.post.mk>
       ---- pkg-comment ---
       -Simple regular expression library from Plan 9
       ---- pkg-descr ---
       -Libregexp9 is a port of Plan 9's regexp library.
       -It is small and simple and provides the traditional
       -extended regular expressions (as opposed to the
       -current extended regular expressions, which add {}
       -and various \x character classes, among other 
       -complications).
       -
       -It handles Unicode in wide character or UTF8 format!
       -
       -WWW: http://pdos.lcs.mit.edu/~rsc/software/
       -http://plan9.bell-labs.com/magic/man2html/2/regexp
       -
       -Russ Cox
       -rsc@post.harvard.edu
       ---- pkg-plist ---
       -lib/libregexp9.a
       -include/regex9.h
       ---- /dev/null ---
       -This is just a way to make sure blank lines don't
       -creep into pkg-plist.
 (DIR) diff --git a/src/libregexp/mkfile b/src/libregexp/mkfile
       t@@ -1 +0,0 @@
       -<../libutf/mkfile
 (DIR) diff --git a/src/libregexp/regexp9.3 b/src/libregexp/regexp9.3
       t@@ -1,227 +0,0 @@
       -.TH REGEXP9 3
       -.de EX
       -.nf
       -.ft B
       -..
       -.de EE
       -.fi
       -.ft R
       -..
       -.de LR
       -.if t .BR \\$1 \\$2
       -.if n .RB ` \\$1 '\\$2
       -..
       -.de L
       -.nh
       -.if t .B \\$1
       -.if n .RB ` \\$1 '
       -..
       -.SH NAME
       -regcomp, regcomplit, regcompnl, regexec, regsub, regerror \- Plan 9 regular expression library
       -.SH SYNOPSIS
       -.B #include <regexp9.h>
       -.PP
       -.ta \w'\fLRegprog 'u
       -.B
       -Reprog        *regcomp(char *exp)
       -.PP
       -.B
       -Reprog        *regcomplit(char *exp)
       -.PP
       -.B
       -Reprog        *regcompnl(char *exp)
       -.PP
       -.nf
       -.B
       -int  regexec(Reprog *prog, char *string, Resub *match, int msize)
       -.PP
       -.nf
       -.B
       -void regsub(char *source, char *dest, int dlen, Resub *match, int msize)
       -.PP
       -.nf
       -.B
       -int  rregexec(Reprog *prog, Rune *string, Resub *match, int msize)
       -.PP
       -.nf
       -.B
       -void rregsub(Rune *source, Rune *dest, int dlen, Resub *match, int msize)
       -.PP
       -.B
       -void regerror(char *msg)
       -.SH DESCRIPTION
       -.I Regcomp
       -compiles a
       -regular expression and returns
       -a pointer to the generated description.
       -The space is allocated by
       -.IR malloc (3)
       -and may be released by
       -.IR free .
       -Regular expressions are exactly as in
       -.IR regexp9 (7).
       -.PP
       -.I Regcomplit
       -is like
       -.I regcomp
       -except that all characters are treated literally.
       -.I Regcompnl
       -is like
       -.I regcomp
       -except that the
       -.B .
       -metacharacter matches all characters, including newlines.
       -.PP
       -.I Regexec
       -matches a null-terminated
       -.I string
       -against the compiled regular expression in
       -.IR prog .
       -If it matches,
       -.I regexec
       -returns
       -.B 1
       -and fills in the array
       -.I match
       -with character pointers to the substrings of
       -.I string
       -that correspond to the
       -parenthesized subexpressions of 
       -.IR exp :
       -.BI match[ i ].sp
       -points to the beginning and
       -.BI match[ i ].ep
       -points just beyond
       -the end of the
       -.IR i th
       -substring.
       -(Subexpression
       -.I i
       -begins at the
       -.IR i th
       -left parenthesis, counting from 1.)
       -Pointers in
       -.B match[0]
       -pick out the substring that corresponds to
       -the whole regular expression.
       -Unused elements of
       -.I match
       -are filled with zeros.
       -Matches involving
       -.LR * ,
       -.LR + ,
       -and 
       -.L ?
       -are extended as far as possible.
       -The number of array elements in 
       -.I match
       -is given by
       -.IR msize .
       -The structure of elements of
       -.I match 
       -is:
       -.IP
       -.EX
       -typedef struct {
       -        union {
       -           char *sp;
       -           Rune *rsp;
       -        } s;
       -        union {
       -           char *ep;
       -           Rune *rep;
       -        } e;
       -} Resub;
       -.EE
       -.LP
       -If
       -.B match[0].s.sp
       -is nonzero on entry,
       -.I regexec
       -starts matching at that point within
       -.IR string .
       -If
       -.B match[0].e.ep
       -is nonzero on entry,
       -the last character matched is the one
       -preceding that point.
       -.PP
       -.I Regsub
       -places in
       -.I dest
       -a substitution instance of
       -.I source
       -in the context of the last
       -.I regexec
       -performed using
       -.IR match .
       -Each instance of
       -.BI \e n\f1,
       -where
       -.I n
       -is a digit, is replaced by the
       -string delimited by
       -.BI match[ n ].s.sp
       -and
       -.BI match[ n ].e.ep\f1.
       -Each instance of 
       -.L &
       -is replaced by the string delimited by
       -.B match[0].s.sp
       -and
       -.BR match[0].e.ep .
       -The substitution will always be null terminated and
       -trimmed to fit into dlen bytes.
       -.PP
       -.IR Regerror ,
       -called whenever an error is detected in
       -.IR regcomp ,
       -writes the string
       -.I msg
       -on the standard error file and exits.
       -.I Regerror
       -can be replaced to perform
       -special error processing.
       -If the user supplied
       -.I regerror
       -returns rather than exits,
       -.I regcomp
       -will return 0. 
       -.PP
       -.I Rregexec
       -and
       -.I rregsub
       -are variants of 
       -.I regexec
       -and
       -.I regsub
       -that use strings of
       -.B Runes
       -instead of strings of
       -.BR chars .
       -With these routines, the 
       -.I rsp
       -and
       -.I rep
       -fields of the
       -.I match
       -array elements should be used.
       -.SH "SEE ALSO"
       -.IR grep (1),
       -.IR regexp9 (7)
       -.SH DIAGNOSTICS
       -.I Regcomp
       -returns 
       -.B 0
       -for an illegal expression
       -or other failure.
       -.I Regexec
       -returns 0
       -if
       -.I string
       -is not matched.
       -.SH HISTORY
       -This particular regular expression was first written by Rob Pike for Plan 9.
       -It has also appeared as part of the Inferno operating system.
       -.SH BUGS
       -There is no way to specify or match a NUL character; NULs terminate patterns and strings.
 (DIR) diff --git a/src/libregexp/regexp9.7 b/src/libregexp/regexp9.7
       t@@ -1,150 +0,0 @@
       -.TH REGEXP9 7
       -.de EX
       -.nf
       -.ft B
       -..
       -.de EE
       -.fi
       -.ft R
       -..
       -.de LR
       -.if t .BR \\$1 \\$2
       -.if n .RB ` \\$1 '\\$2
       -..
       -.de L
       -.nh
       -.if t .B \\$1
       -.if n .RB ` \\$1 '
       -..
       -.SH NAME
       -regexp9 \- Plan 9 regular expression notation
       -.SH DESCRIPTION
       -This manual page describes the regular expression
       -syntax used by the Plan 9 regular expression library
       -.IR regexp9 (3).
       -It is the form used by
       -.IR egrep (1)
       -before
       -.I egrep
       -got complicated.
       -.PP
       -A 
       -.I "regular expression"
       -specifies
       -a set of strings of characters.
       -A member of this set of strings is said to be
       -.I matched
       -by the regular expression.  In many applications
       -a delimiter character, commonly
       -.LR / ,
       -bounds a regular expression.
       -In the following specification for regular expressions
       -the word `character' means any character (rune) but newline.
       -.PP
       -The syntax for a regular expression
       -.B e0
       -is
       -.IP
       -.EX
       -e3:  literal | charclass | '.' | '^' | '$' | '(' e0 ')'
       -
       -e2:  e3
       -  |  e2 REP
       -
       -REP: '*' | '+' | '?'
       -
       -e1:  e2
       -  |  e1 e2
       -
       -e0:  e1
       -  |  e0 '|' e1
       -.EE
       -.PP
       -A
       -.B literal
       -is any non-metacharacter, or a metacharacter
       -(one of
       -.BR .*+?[]()|\e^$ ),
       -or the delimiter
       -preceded by 
       -.LR \e .
       -.PP
       -A
       -.B charclass
       -is a nonempty string
       -.I s
       -bracketed
       -.BI [ \|s\| ]
       -(or
       -.BI [^ s\| ]\fR);
       -it matches any character in (or not in)
       -.IR s .
       -A negated character class never
       -matches newline.
       -A substring 
       -.IB a - b\f1,
       -with
       -.I a
       -and
       -.I b
       -in ascending
       -order, stands for the inclusive
       -range of
       -characters between
       -.I a
       -and
       -.IR b .
       -In 
       -.IR s ,
       -the metacharacters
       -.LR - ,
       -.LR ] ,
       -an initial
       -.LR ^ ,
       -and the regular expression delimiter
       -must be preceded by a
       -.LR \e ;
       -other metacharacters 
       -have no special meaning and
       -may appear unescaped.
       -.PP
       -A 
       -.L .
       -matches any character.
       -.PP
       -A
       -.L ^
       -matches the beginning of a line;
       -.L $
       -matches the end of the line.
       -.PP
       -The 
       -.B REP
       -operators match zero or more
       -.RB ( * ),
       -one or more
       -.RB ( + ),
       -zero or one
       -.RB ( ? ),
       -instances respectively of the preceding regular expression 
       -.BR e2 .
       -.PP
       -A concatenated regular expression,
       -.BR "e1\|e2" ,
       -matches a match to 
       -.B e1
       -followed by a match to
       -.BR e2 .
       -.PP
       -An alternative regular expression,
       -.BR "e0\||\|e1" ,
       -matches either a match to
       -.B e0
       -or a match to
       -.BR e1 .
       -.PP
       -A match to any part of a regular expression
       -extends as far as possible without preventing
       -a match to the remainder of the regular expression.
       -.SH "SEE ALSO"
       -.IR regexp9 (3)
 (DIR) diff --git a/src/libregexp/regexp9.h b/src/libregexp/regexp9.h
       t@@ -1,71 +0,0 @@
       -#ifndef _REGEXP9H_
       -
       -#define _REGEXP9H_ 1
       -#include <utf.h>
       -
       -typedef struct Resub                Resub;
       -typedef struct Reclass                Reclass;
       -typedef struct Reinst                Reinst;
       -typedef struct Reprog                Reprog;
       -
       -/*
       - *        Sub expression matches
       - */
       -struct Resub{
       -        union
       -        {
       -                char *sp;
       -                Rune *rsp;
       -        }s;
       -        union
       -        {
       -                char *ep;
       -                Rune *rep;
       -        }e;
       -};
       -
       -/*
       - *        character class, each pair of rune's defines a range
       - */
       -struct Reclass{
       -        Rune        *end;
       -        Rune        spans[64];
       -};
       -
       -/*
       - *        Machine instructions
       - */
       -struct Reinst{
       -        int        type;
       -        union        {
       -                Reclass        *cp;                /* class pointer */
       -                Rune        r;                /* character */
       -                int        subid;                /* sub-expression id for RBRA and LBRA */
       -                Reinst        *right;                /* right child of OR */
       -        }u1;
       -        union {        /* regexp relies on these two being in the same union */
       -                Reinst *left;                /* left child of OR */
       -                Reinst *next;                /* next instruction for CAT & LBRA */
       -        }u2;
       -};
       -
       -/*
       - *        Reprogram definition
       - */
       -struct Reprog{
       -        Reinst        *startinst;        /* start pc */
       -        Reclass        class[16];        /* .data */
       -        Reinst        firstinst[5];        /* .text */
       -};
       -
       -extern Reprog        *regcomp(char*);
       -extern Reprog        *regcomplit(char*);
       -extern Reprog        *regcompnl(char*);
       -extern void        regerror(char*);
       -extern int        regexec(Reprog*, char*, Resub*, int);
       -extern void        regsub(char*, char*, int, Resub*, int);
       -
       -extern int        rregexec(Reprog*, Rune*, Resub*, int);
       -extern void        rregsub(Rune*, Rune*, Resub*, int);
       -
       -#endif
 (DIR) diff --git a/src/libregexp/rpm.spec b/src/libregexp/rpm.spec
       t@@ -1,34 +0,0 @@
       -Summary: Simple regular expression library from Plan 9
       -Name: libregexp9
       -Version: 2.0
       -Release: 1
       -Group: Development/C
       -Copyright: Public Domain
       -Packager: Russ Cox <rsc@post.harvard.edu>
       -Source: http://pdos.lcs.mit.edu/~rsc/software/libregexp9-2.0.tgz
       -URL: http://pdos.lcs.mit.edu/~rsc/software/#libregexp9
       -Requires: libfmt libutf
       -
       -%description
       -Libregexp9 is a port of Plan 9's regexp library.
       -It is small and simple and provides the traditional
       -extended regular expressions (as opposed to the
       -current extended regular expressions, which add {}
       -and various \x character classes, among other 
       -complications).
       -
       -http://plan9.bell-labs.com/magic/man2html/2/regexp
       -%prep
       -%setup
       -
       -%build
       -make
       -
       -%install
       -make install
       -
       -%files
       -/usr/local/include/regexp9.h
       -/usr/local/lib/libregexp9.a
       -/usr/local/man/man3/regexp9.3
       -/usr/local/man/man7/regexp9.7
 (DIR) diff --git a/src/libthread/Make.Darwin-PowerMacintosh b/src/libthread/Make.Darwin-PowerMacintosh
       t@@ -1,6 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I. -I${PREFIX}/include
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libthread/Make.FreeBSD-386 b/src/libthread/Make.FreeBSD-386
       t@@ -1,7 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I. -I$(PREFIX)/include
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O        # default, can be overriden by Make.$(SYSNAME)
       -NAN=nan64.$O
 (DIR) diff --git a/src/libthread/Make.HP-UX-9000 b/src/libthread/Make.HP-UX-9000
       t@@ -1,6 +0,0 @@
       -CC=cc
       -CFLAGS=-O -c -Ae -I.
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libthread/Make.Linux-386 b/src/libthread/Make.Linux-386
       t@@ -1,7 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I.
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O        # default, can be overriden by Make.$(SYSNAME)
       -NAN=nan64.$O
 (DIR) diff --git a/src/libthread/Make.NetBSD-386 b/src/libthread/Make.NetBSD-386
       t@@ -1,7 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I. -I$(PREFIX)/include
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O        # default, can be overriden by Make.$(SYSNAME)
       -NAN=nan64.$O
 (DIR) diff --git a/src/libthread/Make.OSF1-alpha b/src/libthread/Make.OSF1-alpha
       t@@ -1,6 +0,0 @@
       -CC=cc
       -CFLAGS+=-g -c -I.
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libthread/Make.SunOS-sun4u b/src/libthread/Make.SunOS-sun4u
       t@@ -1,2 +0,0 @@
       -include Make.SunOS-sun4u-$(CC)
       -NAN=nan64.$O
 (DIR) diff --git a/src/libthread/Make.SunOS-sun4u-cc b/src/libthread/Make.SunOS-sun4u-cc
       t@@ -1,6 +0,0 @@
       -CC=cc
       -CFLAGS+=-g -c -I. -O
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libthread/Make.SunOS-sun4u-gcc b/src/libthread/Make.SunOS-sun4u-gcc
       t@@ -1,6 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libthread/Makefile b/src/libthread/Makefile
       t@@ -1,27 +1,7 @@
       -
       -# this works in gnu make
       -SYSNAME:=${shell uname}
       -OBJTYPE:=${shell uname -m | sed 's;i.86;386;; s;/.*;;; s; ;;g'}
       -
       -# this works in bsd make
       -SYSNAME!=uname
       -OBJTYPE!=uname -m | sed 's;i.86;386;; s;/.*;;; s; ;;g'
       -
       -# the gnu rules will mess up bsd but not vice versa,
       -# hence the gnu rules come first.
       -
       -include Make.$(SYSNAME)-$(OBJTYPE)
       -
       -PREFIX=/usr/local
       -
       -NUKEFILES=
       -
       -TGZFILES=
       +9SRC=..
       +include $(9SRC)/Makehdr
        
        LIB=libthread.a
       -VERSION=2.0
       -PORTPLACE=devel/libthread
       -NAME=libthread
        
        OFILES=\
                $(OBJTYPE).$O\
       t@@ -53,73 +33,17 @@ OFILES=\
                sched.$O\
        
        HFILES=\
       -        thread.h\
       +        $(9SRC)/include/thread.h\
                label.h\
                threadimpl.h\
        
       -all: $(LIB)
       +include $(9SRC)/Makesyslib
        
       -install: $(LIB)
       -        test -d $(PREFIX)/man/man3 || mkdir $(PREFIX)/man/man3
       -        install -m 0644 thread.3 $(PREFIX)/man/man3/thread.3
       -        install -m 0644 ioproc.3 $(PREFIX)/man/man3/ioproc.3
       -        install -m 0644 thread.h $(PREFIX)/include/thread.h
       -        install -m 0644 $(LIB) $(PREFIX)/lib/$(LIB)
       -
       -tprimes: $(LIB) tprimes.$O
       -        $(CC) -o tprimes tprimes.$O $(LIB) -L$(PREFIX)/lib -l9 -lfmt -lutf
       +tprimes: tprimes.$O
       +        $(CC) -o tprimes tprimes.$O -L$(9SRC)/lib -lthread -l9 -lfmt -lutf
        
        texec: $(LIB) texec.$O
       -        $(CC) -o texec texec.$O $(LIB) -L$(PREFIX)/lib -l9 -lfmt -lutf
       -
       -$(LIB): $(OFILES)
       -        $(AR) $(ARFLAGS) $(LIB) $(OFILES)
       -
       -NUKEFILES+=$(LIB)
       -.c.$O:
       -        $(CC) $(CFLAGS) -I/usr/X11R6/include -I../sam -I$(PREFIX)/include $*.c
       -
       -%.$O: %.c
       -        $(CC) $(CFLAGS) -I/usr/X11R6/include -I../sam -I$(PREFIX)/include $*.c
       -
       -
       -$(OFILES): $(HFILES)
       -
       -tgz:
       -        rm -rf $(NAME)-$(VERSION)
       -        mkdir $(NAME)-$(VERSION)
       -        cp Makefile Make.* README LICENSE NOTICE *.[ch137] rpm.spec bundle.ports $(TGZFILES) $(NAME)-$(VERSION)
       -        tar cf - $(NAME)-$(VERSION) | gzip >$(NAME)-$(VERSION).tgz
       -        rm -rf $(NAME)-$(VERSION)
       -
       -clean:
       -        rm -f $(OFILES) $(LIB)
       -
       -nuke:
       -        rm -f $(OFILES) *.tgz *.rpm $(NUKEFILES)
       -
       -rpm:
       -        make tgz
       -        cp $(NAME)-$(VERSION).tgz /usr/src/RPM/SOURCES
       -        rpm -ba rpm.spec
       -        cp /usr/src/RPM/SRPMS/$(NAME)-$(VERSION)-1.src.rpm .
       -        cp /usr/src/RPM/RPMS/i586/$(NAME)-$(VERSION)-1.i586.rpm .
       -        scp *.rpm rsc@amsterdam.lcs.mit.edu:public_html/software
       -
       -PORTDIR=/usr/ports/$(PORTPLACE)
       +        $(CC) -o texec texec.$O -L$(9SRC)/lib -lthread -l9 -lfmt -lutf
        
       -ports:
       -        make tgz
       -        rm -rf $(PORTDIR)
       -        mkdir $(PORTDIR)
       -        cp $(NAME)-$(VERSION).tgz /usr/ports/distfiles
       -        cat bundle.ports | (cd $(PORTDIR) && awk '$$1=="---" && $$3=="---" { ofile=$$2; next} {if(ofile) print >ofile}')
       -        (cd $(PORTDIR); make makesum)
       -        (cd $(PORTDIR); make)
       -        (cd $(PORTDIR); /usr/local/bin/portlint)
       -        rm -rf $(PORTDIR)/work
       -        shar `find $(PORTDIR)` > ports.shar
       -        (cd $(PORTDIR); tar cf - *) | gzip >$(NAME)-$(VERSION)-ports.tgz
       -        scp *.tgz rsc@amsterdam.lcs.mit.edu:public_html/software
       +CLEANFILES+=tprimes texec
        
       -.phony: all clean nuke install tgz rpm ports
 (DIR) diff --git a/src/libthread/Makefile.MID b/src/libthread/Makefile.MID
       t@@ -1,54 +0,0 @@
       -LIB=libthread.a
       -VERSION=2.0
       -PORTPLACE=devel/libthread
       -NAME=libthread
       -
       -OFILES=\
       -        $(OBJTYPE).$O\
       -        asm-$(SYSNAME)-$(OBJTYPE).$O\
       -        channel.$O\
       -        chanprint.$O\
       -        create.$O\
       -        debug.$O\
       -        exec-unix.$O\
       -        exit.$O\
       -        getpid.$O\
       -        id.$O\
       -        iocall.$O\
       -        ioclose.$O\
       -        ioopen.$O\
       -        ioproc.$O\
       -        ioread.$O\
       -        ioreadn.$O\
       -        iowrite.$O\
       -        kill.$O\
       -        lib.$O\
       -        main.$O\
       -        memset.$O\
       -        memsetd.$O\
       -        note.$O\
       -        proctab.$O\
       -        ref.$O\
       -        rendez.$O\
       -        sched.$O\
       -
       -HFILES=\
       -        thread.h\
       -        label.h\
       -        threadimpl.h\
       -
       -all: $(LIB)
       -
       -install: $(LIB)
       -        test -d $(PREFIX)/man/man3 || mkdir $(PREFIX)/man/man3
       -        install -m 0644 thread.3 $(PREFIX)/man/man3/thread.3
       -        install -m 0644 ioproc.3 $(PREFIX)/man/man3/ioproc.3
       -        install -m 0644 thread.h $(PREFIX)/include/thread.h
       -        install -m 0644 $(LIB) $(PREFIX)/lib/$(LIB)
       -
       -tprimes: $(LIB) tprimes.$O
       -        $(CC) -o tprimes tprimes.$O $(LIB) -L$(PREFIX)/lib -l9 -lfmt -lutf
       -
       -texec: $(LIB) texec.$O
       -        $(CC) -o texec texec.$O $(LIB) -L$(PREFIX)/lib -l9 -lfmt -lutf
       -
 (DIR) diff --git a/src/libthread/bundle.ports b/src/libthread/bundle.ports
       t@@ -1,42 +0,0 @@
       ---- Makefile ---
       -# New ports collection makefile for: libthread
       -# Date Created:                11 Feb 2003
       -# Whom:                        rsc
       -#
       -
       -PORTNAME=        libthread
       -PORTVERSION=        1.0
       -CATEGORIES=        devel
       -MASTER_SITES=        http://pdos.lcs.mit.edu/~rsc/software/
       -DISTNAME=        libthread
       -EXTRACT_SUFX=        .tgz
       -
       -MAINTAINER=        rsc@post.harvard.edu
       -
       -MAN3=                print.3 fmtinstall.3
       -MLINKS=                XXX
       -USE_REINPLACE=        XXX (wkj says yes)
       -
       -.include <bsd.port.pre.mk>
       -
       -post-patch:
       -        ${REINPLACE_CMD} -e 's,@@LOCAL@@,${PREFIX},g' ${WRKSRC}/Makefile
       -
       -.include <bsd.port.post.mk>
       -
       ---- pkg-comment ---
       -Plan 9 thread library
       ---- pkg-descr ---
       -Libthread is a port of Plan 9's thread library.
       -
       -WWW: http://pdos.lcs.mit.edu/~rsc/software/
       -WWW: http://plan9.bell-labs.com/magic/man2html/2/thread
       -
       -Russ Cox
       -rsc@post.harvard.edu
       ---- pkg-plist ---
       -lib/libthread.a
       -include/thread.h
       ---- /dev/null ---
       -This is just a way to make sure blank lines don't
       -creep into pkg-plist.
 (DIR) diff --git a/src/libthread/create.c b/src/libthread/create.c
       t@@ -1,6 +1,5 @@
        #include "threadimpl.h"
        
       -#define free
        Pqueue _threadpq;
        
        static int nextID(void);
 (DIR) diff --git a/src/libthread/ioproc.3 b/src/libthread/ioproc.3
       t@@ -1,179 +0,0 @@
       -.TH IOPROC 2
       -.SH NAME
       -closeioproc,
       -iocall,
       -ioclose,
       -iointerrupt,
       -iodial,
       -ioopen,
       -ioproc,
       -ioread,
       -ioreadn,
       -iowrite \- slave I/O processes for threaded programs
       -.SH SYNOPSIS
       -.PP
       -.de XX
       -.ift .sp 0.5
       -.ifn .sp
       -..
       -.EX
       -.ta \w'Ioproc* 'u
       -#include <u.h>
       -#include <libc.h>
       -#include <thread.h>
       -.sp
       -typedef struct Ioproc Ioproc;
       -.sp
       -Ioproc*        ioproc(void);
       -.XX
       -int        ioopen(Ioproc *io, char *file, int omode);
       -int        ioclose(Ioproc *io, int fd);
       -long        ioread(Ioproc *io, int fd, void *a, long n);
       -long        ioreadn(Ioproc *io, int fd, void *a, long n);
       -long        iowrite(Ioproc *io, int fd, void *a, long n);
       -int        iodial(Ioproc *io, char *addr, char *local, char *dir, char *cdfp);
       -.XX
       -void        iointerrupt(Ioproc *io);
       -void        closeioproc(Ioproc *io);
       -.XX
       -long        iocall(Ioproc *io, long (*op)(va_list *arg), ...);
       -.EE
       -.SH DESCRIPTION
       -.PP
       -These routines provide access to I/O in slave procs.
       -Since the I/O itself is done in a slave proc, other threads
       -in the calling proc can run while the calling thread
       -waits for the I/O to complete.
       -.PP
       -.I Ioproc
       -forks a new slave proc and returns a pointer to the
       -.B Ioproc
       -associated with it.
       -.I Ioproc
       -uses
       -.I mallocz
       -and
       -.IR proccreate ;
       -if either fails, it calls
       -.I sysfatal
       -rather than return an error.
       -.PP
       -.IR Ioopen ,
       -.IR ioclose ,
       -.IR ioread ,
       -.IR ioreadn ,
       -.IR iowrite ,
       -and
       -.IR iodial
       -are execute the
       -similarly named library or system calls
       -(see
       -.IR open (2),
       -.IR read (2),
       -and
       -.IR dial (2))
       -in the slave process associated with
       -.IR io .
       -It is an error to execute more than one call
       -at a time in an I/O proc.
       -.PP
       -.I Iointerrupt
       -interrupts the call currently executing in the I/O proc.
       -If no call is executing,
       -.IR iointerrupt
       -is a no-op.
       -.PP
       -.I Closeioproc
       -terminates the I/O proc and frees the associated
       -.B Ioproc .
       -.PP
       -.I Iocall
       -is a primitive that may be used to implement
       -more slave I/O routines.
       -.I Iocall
       -arranges for
       -.I op
       -to be called in
       -.IR io 's
       -proc, with
       -.I arg
       -set to the variable parameter list,
       -returning the value that
       -.I op
       -returns.
       -.SH EXAMPLE
       -Relay messages between two file descriptors,
       -counting the total number of bytes seen:
       -.IP
       -.EX
       -.ta +\w'xxxx'u +\w'xxxx'u +\w'xxxx'u
       -int tot;
       -
       -void
       -relaythread(void *v)
       -{
       -        int *fd, n;
       -        char buf[1024];
       -        Ioproc *io;
       -
       -        fd = v;
       -        io = ioproc();
       -        while((n = ioread(io, fd[0], buf, sizeof buf)) > 0){
       -                if(iowrite(io, fd[1], buf, n) != n)
       -                        sysfatal("iowrite: %r");
       -                tot += n;
       -        }
       -        closeioproc(io);
       -}
       -
       -void
       -relay(int fd0, int fd1)
       -{
       -        int fd[4];
       -
       -        fd[0] = fd[3] = fd0;
       -        fd[1] = fd[2] = fd1;
       -        threadcreate(relaythread, fd, 8192);
       -        threadcreate(relaythread, fd+2, 8192);
       -}
       -.EE
       -.LP
       -If the two
       -.I relaythread
       -instances were running in different procs, the
       -common access to
       -.I tot
       -would be unsafe.
       -.EE
       -.PP
       -Implement
       -.IR ioread :
       -.IP
       -.EX
       -static long
       -_ioread(va_list *arg)
       -{
       -        int fd;
       -        void *a;
       -        long n;
       -
       -        fd = va_arg(*arg, int);
       -        a = va_arg(*arg, void*);
       -        n = va_arg(*arg, long);
       -        return read(fd, a, n);
       -}
       -
       -long
       -ioread(Ioproc *io, int fd, void *a, long n)
       -{
       -        return iocall(io, _ioread, fd, a, n);
       -}
       -.EE
       -.SH SOURCE
       -.B /sys/src/libthread/io*.c
       -.SH SEE ALSO
       -.IR dial (2),
       -.IR open (2),
       -.IR read (2),
       -.IR thread (2)
       -
 (DIR) diff --git a/src/libthread/mkfile b/src/libthread/mkfile
       t@@ -1,2 +0,0 @@
       -<../libutf/mkfile
       -
 (DIR) diff --git a/src/libthread/rpm.spec b/src/libthread/rpm.spec
       t@@ -1,26 +0,0 @@
       -Summary: Port of Plan 9's thread library
       -Name: libthread
       -Version: 2.0
       -Release: 1
       -Group: Development/C
       -Copyright: BSD-like
       -Packager: Russ Cox <rsc@post.harvard.edu>
       -Source: http://pdos.lcs.mit.edu/~rsc/software/libthread-2.0.tgz
       -URL: http://pdos.lcs.mit.edu/~rsc/software/#libthread
       -
       -%description
       -Libthread is a port of Plan 9's thread library
       -%prep
       -%setup
       -
       -%build
       -make
       -
       -%install
       -make install
       -
       -%files
       -/usr/local/include/thread.h
       -/usr/local/lib/libthread.a
       -/usr/local/man/man3/thread.3
       -/usr/local/man/man3/ioproc.3
 (DIR) diff --git a/src/libthread/thread.3 b/src/libthread/thread.3
       t@@ -1,576 +0,0 @@
       -.TH THREAD 2
       -.SH NAME
       -alt,
       -chancreate,
       -chanfree,
       -chaninit,
       -chanprint,
       -mainstacksize,
       -proccreate,
       -procdata,
       -procexec,
       -procexecl,
       -procrfork,
       -recv,
       -recvp,
       -recvul,
       -send,
       -sendp,
       -sendul,
       -nbrecv,
       -nbrecvp,
       -nbrecvul,
       -nbsend,
       -nbsendp,
       -nbsendul,
       -threadcreate,
       -threaddata,
       -threadexits,
       -threadexitsall,
       -threadgetgrp,
       -threadgetname,
       -threadint,
       -threadintgrp,
       -threadkill,
       -threadkillgrp,
       -threadmain,
       -threadnotify,
       -threadid,
       -threadpid,
       -threadsetgrp,
       -threadsetname,
       -threadwaitchan,
       -yield \- thread and proc management
       -.SH SYNOPSIS
       -.PP
       -.EX
       -.ta 4n +4n +4n +4n +4n +4n +4n
       -#include <u.h>
       -#include <libc.h>
       -#include <thread.h>
       -.sp
       -#define        CHANEND                0
       -#define        CHANSND                1
       -#define        CHANRCV                2
       -#define        CHANNOP                3
       -#define        CHANNOBLK        4
       -.sp
       -.ta \w'    'u +\w'Channel 'u
       -typedef struct Alt Alt;
       -struct Alt {
       -        Channel        *c;
       -        void        *v;
       -        int        op;
       -        Channel        **tag;
       -        int        entryno;
       -};
       -.fi
       -.de XX
       -.ift .sp 0.5
       -.ifn .sp
       -..
       -.PP
       -.nf
       -.ft L
       -.ta \w'\fLChannel* 'u +4n +4n +4n +4n
       -void        threadmain(int argc, char *argv[])
       -int        mainstacksize
       -int        proccreate(void (*fn)(void*), void *arg, uint stacksize)
       -int        procrfork(void (*fn)(void*), void *arg, uint stacksize,
       -                int rforkflag)
       -int        threadcreate(void (*fn)(void*), void *arg, uint stacksize)
       -void        threadexits(char *status)
       -void        threadexitsall(char *status)
       -void        yield(void)
       -.XX
       -int        threadid(void)
       -int        threadgrp(void)
       -int        threadsetgrp(int group)
       -int        threadpid(int id)
       -.XX
       -int        threadint(int id)
       -int        threadintgrp(int group)
       -int        threadkill(int id)
       -int        threadkillgrp(int group)
       -.XX
       -void        threadsetname(char *name)
       -char*        threadgetname(void)
       -.XX
       -void**        threaddata(void)
       -void**        procdata(void)
       -.XX
       -int        chaninit(Channel *c, int elsize, int nel)
       -Channel*        chancreate(int elsize, int nel)
       -void        chanfree(Channel *c)
       -.XX
       -int        alt(Alt *alts)
       -int        recv(Channel *c, void *v)
       -void*        recvp(Channel *c)
       -ulong        recvul(Channel *c)
       -int        nbrecv(Channel *c, void *v)
       -void*        nbrecvp(Channel *c)
       -ulong        nbrecvul(Channel *c)
       -int        send(Channel *c, void *v)
       -int        sendp(Channel *c, void *v)
       -int        sendul(Channel *c, ulong v)
       -int        nbsend(Channel *c, void *v)
       -int        nbsendp(Channel *c, void *v)
       -int        nbsendul(Channel *c, ulong v)
       -int        chanprint(Channel *c, char *fmt, ...)
       -.XX
       -int        procexecl(Channel *cpid, char *file, ...)
       -int        procexec(Channel *cpid, char *file, char *args[])
       -Channel*        threadwaitchan(void)
       -.XX
       -int        threadnotify(int (*f)(void*, char*), int in)
       -.EE
       -.SH DESCRIPTION
       -.PP
       -The thread library provides parallel programming support similar to that
       -of the languages
       -Alef and Newsqueak.
       -Threads
       -and
       -procs
       -occupy a shared address space,
       -communicating and synchronizing through
       -.I channels
       -and shared variables.
       -.PP
       -A
       -.I proc
       -is a Plan 9 process that contains one or more cooperatively scheduled
       -.IR threads .
       -Programs using threads must replace
       -.I main
       -by
       -.IR threadmain .
       -The thread library provides a
       -.I main
       -function that sets up a proc with a single thread executing
       -.I threadmain
       -on a stack of size
       -.I mainstacksize
       -(default eight kilobytes).
       -To set
       -.IR mainstacksize ,
       -declare a global variable
       -initialized to the desired value
       -.RI ( e.g. ,
       -.B int
       -.B mainstacksize
       -.B =
       -.BR 1024 ).
       -.PP
       -.I Threadcreate
       -creates a new thread in the calling proc, returning a unique integer
       -identifying the thread; the thread
       -executes
       -.I fn(arg)
       -on a stack of size
       -.IR stacksize .
       -Thread stacks are allocated in shared memory, making it valid to pass 
       -pointers to stack variables between threads and procs.
       -.I Procrfork
       -creates a new proc, and inside that proc creates
       -a single thread as
       -.I threadcreate
       -would,
       -returning the id of the created thread.
       -.I Procrfork
       -creates the new proc by calling
       -.B rfork
       -(see
       -.IR fork (2))
       -with flags
       -.BR RFPROC|RFMEM|RFNOWAIT| \fIrforkflag\fR.
       -(The thread library depends on all its procs
       -running in the same rendezvous group.
       -Do not include
       -.B RFREND
       -in
       -.IR rforkflag .)
       -.I Proccreate
       -is identical to 
       -.I procrfork
       -with
       -.I rforkflag
       -set to zero.
       -Be aware that the calling thread may continue
       -execution before
       -the newly created proc and thread
       -are scheduled.
       -Because of this,
       -.I arg
       -should not point to data on the stack of a function that could
       -return before the new process is scheduled.
       -.PP
       -.I Threadexits
       -terminates the calling thread.
       -If the thread is the last in its proc,
       -.I threadexits
       -also terminates the proc, using
       -.I status
       -as the exit status.
       -.I Threadexitsall
       -terminates all procs in the program,
       -using
       -.I status
       -as the exit status.
       -.PP
       -The threads in a proc are coroutines, scheduled nonpreemptively
       -in a round-robin fashion.
       -A thread must explicitly relinquish control of the processor
       -before another thread in the same proc is run.
       -Calls that do this are
       -.IR yield ,
       -.IR proccreate ,
       -.IR procexec ,
       -.IR procexecl ,
       -.IR threadexits ,
       -.IR alt ,
       -.IR send ,
       -and
       -.I recv
       -(and the calls related to
       -.I send
       -and
       -.IR recv \(emsee
       -their descriptions further on).
       -Procs are scheduled by the operating system.
       -Therefore, threads in different procs can preempt one another
       -in arbitrary ways and should synchronize their
       -actions using
       -.B qlocks
       -(see
       -.IR lock (2))
       -or channel communication.
       -System calls such as
       -.IR read (2)
       -block the entire proc;
       -all threads in a proc block until the system call finishes.
       -.PP
       -As mentioned above, each thread has a unique integer thread id.
       -Thread ids are not reused; they are unique across the life of the program.
       -.I Threadid
       -returns the id for the current thread.
       -Each thread also has a thread group id.
       -The initial thread has a group id of zero.
       -Each new thread inherits the group id of
       -the thread that created it.
       -.I Threadgrp
       -returns the group id for the current thread;
       -.I threadsetgrp
       -sets it.
       -.I Threadpid
       -returns the pid of the Plan 9 process containing
       -the thread identified by
       -.IR id ,
       -or \-1
       -if no such thread is found.
       -.PP
       -.I Threadint
       -interrupts a thread that is blocked in a channel operation
       -or system call.
       -.I Threadintgrp
       -interrupts all threads with the given group id.
       -.I Threadkill
       -marks a thread to die when it next relinquishes the processor
       -(via one of the calls listed above).
       -If the thread is blocked in a channel operation or system call,
       -it is also interrupted.
       -.I Threadkillgrp
       -kills all threads with the given group id.
       -Note that
       -.I threadkill
       -and
       -.I threadkillgrp
       -will not terminate a thread that never relinquishes
       -the processor.
       -.PP
       -Primarily for debugging,
       -threads can have string names associated with them.
       -.I Threadgetname
       -returns the current thread's name;
       -.I threadsetname
       -sets it.
       -The pointer returned by
       -.I threadgetname
       -is only valid until the next call to
       -.IR threadsetname .
       -.PP
       -.I Threaddata
       -returns a pointer to a per-thread pointer
       -that may be modified by threaded programs for
       -per-thread storage.
       -Similarly, 
       -.I procdata
       -returns a pointer to a per-proc pointer.
       -.PP
       -.I Procexecl
       -and
       -.I procexec
       -are threaded analogues of
       -.I exec
       -and
       -.I execl
       -(see
       -.IR exec (2));
       -on success,
       -they replace the calling thread (which must be the only thread in its proc)
       -and invoke the external program, never returning.
       -On error, they return \-1.
       -If
       -.I cpid
       -is not null, the pid of the invoked program
       -will be sent along
       -.I cpid
       -once the program has been started, or \-1 will be sent if an
       -error occurs.
       -.I Procexec
       -and
       -.I procexecl
       -will not access their arguments after sending a result
       -along
       -.IR cpid .
       -Thus, programs that malloc the
       -.I argv
       -passed to
       -.I procexec
       -can safely free it once they have
       -received the
       -.I cpid
       -response.
       -.I Threadwaitchan
       -returns a channel of pointers to
       -.B Waitmsg
       -structures (see
       -.IR wait (2)).
       -When an exec'ed process exits, a pointer to a
       -.B Waitmsg
       -is sent to this channel.
       -These
       -.B Waitmsg
       -structures have been allocated with
       -.IR malloc (2)
       -and should be freed after use.
       -.PP
       -A
       -.B Channel
       -is a buffered or unbuffered queue for fixed-size messages.
       -Procs and threads
       -.I send
       -messages into the channel and
       -.I recv
       -messages from the channel.  If the channel is unbuffered, a
       -.I send
       -operation blocks until the corresponding
       -.I recv
       -operation occurs and
       -.IR "vice versa" .
       -.I Chaninit
       -initializes a 
       -.B Channel
       -for messages of size
       -.I elsize 
       -and with a buffer holding
       -.I nel
       -messages.
       -If
       -.I nel
       -is zero, the channel is unbuffered.
       -.IR Chancreate
       -allocates a new channel and initializes it.
       -.I Chanfree
       -frees a channel that is no longer used.
       -.I Chanfree
       -can be called by either sender or receiver after the last item has been
       -sent or received.  Freeing the channel will be delayed if there is a thread
       -blocked on it until that thread unblocks (but
       -.I chanfree
       -returns immediately).
       -.PP
       -.I Send
       -sends the element pointed at by
       -.I v
       -to the channel
       -.IR c .
       -If
       -.I v
       -is null, zeros are sent.
       -.I Recv
       -receives an element from
       -.I c
       -and stores it in
       -.IR v .
       -If
       -.I v
       -is null,
       -the received value is discarded.
       -.I Send
       -and
       -.I recv
       -return 1 on success, \-1 if interrupted.
       -.I Nbsend
       -and
       -.I nbrecv
       -behave similarly, but return 0 rather than blocking.
       -.PP
       -.IR Sendp ,
       -.IR nbsendp ,
       -.IR sendul ,
       -and
       -.I nbsendul
       -send a pointer or an unsigned long; the channel must
       -have been initialized with the appropriate
       -.IR elsize .
       -.IR Recvp ,
       -.IR nbrecvp ,
       -.IR recvul ,
       -and
       -.I nbrecvul
       -receive a pointer or an unsigned long;
       -they return zero when a zero is received,
       -when interrupted, or
       -(for
       -.I nbrecvp
       -and
       -.IR nbrecvul )
       -when the operation would have blocked.
       -To distinguish between these three cases,
       -use
       -.I recv
       -or
       -.IR nbrecv .
       -.PP
       -.I Alt
       -can be used to recv from or send to one of a number of channels,
       -as directed by an array of
       -.B Alt
       -structures,
       -each of which describes a potential send or receive operation.
       -In an
       -.B Alt
       -structure,
       -.B c
       -is the channel;
       -.B v
       -the value pointer (which may be null); and
       -.B op
       -the operation:
       -.B CHANSND
       -for a send operation,
       -.B CHANRECV
       -for a recv operation;
       -.B CHANNOP
       -for no operation
       -(useful
       -when
       -.I alt
       -is called with a varying set of operations).
       -The array of
       -.B Alt
       -structures is terminated by an entry with
       -.I op
       -.B CHANEND
       -or
       -.BR CHANNOBLK .
       -If at least one
       -.B Alt
       -structure can proceed, one of them is
       -chosen at random to be executed.
       -.I Alt
       -returns the index of the chosen structure.
       -If no operations can proceed and the list is terminated with
       -.BR CHANNOBLK ,
       -.I alt
       -returns the index of the terminating
       -.B CHANNOBLK
       -structure.
       -Otherwise,
       -.I alt
       -blocks until one of the operations can proceed,
       -eventually returning the index of the structure executes.
       -.I Alt
       -returns \-1 when interrupted.
       -The
       -.B tag
       -and
       -.B entryno
       -fields in the
       -.B Alt
       -structure are used internally by
       -.I alt
       -and need not be initialized.
       -They are not used between
       -.I alt
       -calls.
       -.PP
       -.I Chanprint
       -formats its arguments in the manner of
       -.IR print (2)
       -and sends the result to the channel
       -.IR c.
       -The string delivered by
       -.I chanprint
       -is allocated with
       -.IR malloc (2)
       -and should be freed upon receipt.
       -.PP
       -Thread library functions do not return on failure;
       -if errors occur, the entire program is aborted.
       -.PP
       -Threaded programs should use
       -.I threadnotify
       -in place of
       -.I atnotify
       -(see
       -.IR notify (2)).
       -.PP
       -It is safe to use
       -.B sysfatal
       -(see
       -.IR perror (2))
       -in threaded programs.
       -.I Sysfatal
       -will print the error string and call
       -.IR threadexitsall .
       -.PP
       -It is safe to use 
       -.IR rfork
       -(see
       -.IR fork (2))
       -to manage the namespace, file descriptors, note group, and environment of a
       -single process.
       -That is, it is safe to call
       -.I rfork
       -with the flags
       -.BR RFNAMEG ,
       -.BR RFFDG ,
       -.BR RFCFDG ,
       -.BR RFNOTEG ,
       -.BR RFENVG ,
       -and
       -.BR RFCENVG.
       -(To create new processes, use
       -.I proccreate
       -and 
       -.IR procrfork .)
       -As mentioned above,
       -the thread library depends on all procs being in the
       -same rendezvous group; do not change the rendezvous
       -group with
       -.IR rfork .
       -.SH FILES
       -.B /sys/lib/acid/thread
       -contains useful
       -.IR acid (1)
       -functions for debugging threaded programs.
       -.PP
       -.B /sys/src/libthread/example.c
       -contains a full example program.
       -.SH SOURCE
       -.B /sys/src/libthread
       -.SH SEE ALSO
       -.IR intro (2),
       -.IR ioproc (2)
 (DIR) diff --git a/src/libthread/thread.h b/src/libthread/thread.h
       t@@ -1,132 +0,0 @@
       -#ifndef _THREADH_
       -#define _THREADH_ 1
       -
       -/* avoid conflicts with socket library */
       -#undef send
       -#define send _threadsend
       -#undef recv
       -#define recv _threadrecv
       -
       -typedef struct Alt        Alt;
       -typedef struct Channel        Channel;
       -typedef struct Ref        Ref;
       -
       -/* Channel structure.  S is the size of the buffer.  For unbuffered channels
       - * s is zero.  v is an array of s values.  If s is zero, v is unused.
       - * f and n represent the state of the queue pointed to by v.
       - */
       -
       -enum {
       -        Nqwds = 2,
       -        Nqshift = 5,        // 2log #of bits in long
       -        Nqmask =  - 1,
       -        Nqbits = (1 << Nqshift) * 2,
       -};
       -
       -struct Channel {
       -        int                        s;                // Size of the channel (may be zero)
       -        unsigned int        f;                // Extraction point (insertion pt: (f + n) % s)
       -        unsigned int        n;                // Number of values in the channel
       -        int                        e;                // Element size
       -        int                        freed;        // Set when channel is being deleted
       -        volatile Alt        **qentry;        // Receivers/senders waiting (malloc)
       -        volatile int        nentry;        // # of entries malloc-ed
       -        unsigned char                v[1];                // Array of s values in the channel
       -};
       -
       -
       -/* Channel operations for alt: */
       -typedef enum {
       -        CHANEND,
       -        CHANSND,
       -        CHANRCV,
       -        CHANNOP,
       -        CHANNOBLK,
       -} ChanOp;
       -
       -struct Alt {
       -        Channel        *c;                /* channel */
       -        void                *v;                /* pointer to value */
       -        ChanOp        op;                /* operation */
       -
       -        /* the next variables are used internally to alt
       -         * they need not be initialized
       -         */
       -        Channel        **tag;        /* pointer to rendez-vous tag */
       -        int                entryno;        /* entry number */
       -};
       -
       -struct Ref {
       -        long ref;
       -};
       -
       -int                alt(Alt alts[]);
       -Channel*        chancreate(int elemsize, int bufsize);
       -int                chaninit(Channel *c, int elemsize, int elemcnt);
       -void                chanfree(Channel *c);
       -int                chanprint(Channel *, char *, ...);
       -long                decref(Ref *r);                /* returns 0 iff value is now zero */
       -void                incref(Ref *r);
       -int                nbrecv(Channel *c, void *v);
       -void*                nbrecvp(Channel *c);
       -unsigned long                nbrecvul(Channel *c);
       -int                nbsend(Channel *c, void *v);
       -int                nbsendp(Channel *c, void *v);
       -int                nbsendul(Channel *c, unsigned long v);
       -int                proccreate(void (*f)(void *arg), void *arg, unsigned int stacksize);
       -int                procrfork(void (*f)(void *arg), void *arg, unsigned int stacksize, int flag);
       -void**                procdata(void);
       -void                procexec(Channel *, char *, char *[]);
       -void                procexecl(Channel *, char *, ...);
       -int                recv(Channel *c, void *v);
       -void*                recvp(Channel *c);
       -unsigned long                recvul(Channel *c);
       -int                send(Channel *c, void *v);
       -int                sendp(Channel *c, void *v);
       -int                sendul(Channel *c, unsigned long v);
       -int                threadcreate(void (*f)(void *arg), void *arg, unsigned int stacksize);
       -void**                threaddata(void);
       -void                threadexits(char *);
       -void                threadexitsall(char *);
       -int                threadgetgrp(void);        /* return thread group of current thread */
       -char*                threadgetname(void);
       -void                threadint(int);        /* interrupt thread */
       -void                threadintgrp(int);        /* interrupt threads in grp */
       -void                threadkill(int);        /* kill thread */
       -void                threadkillgrp(int);        /* kill threads in group */
       -void                threadmain(int argc, char *argv[]);
       -void                threadnonotes(void);
       -int                threadnotify(int (*f)(void*, char*), int in);
       -int                threadid(void);
       -int                threadpid(int);
       -int                threadsetgrp(int);        /* set thread group, return old */
       -void                threadsetname(char *name);
       -Channel*        threadwaitchan(void);
       -int        tprivalloc(void);
       -void        tprivfree(int);
       -void        **tprivaddr(int);
       -void                yield(void);
       -
       -long                threadstack(void);
       -
       -extern        int                mainstacksize;
       -
       -/* slave I/O processes */
       -typedef struct Ioproc Ioproc;
       -
       -Ioproc*        ioproc(void);
       -void                closeioproc(Ioproc*);
       -void                iointerrupt(Ioproc*);
       -
       -int                ioclose(Ioproc*, int);
       -int                iodial(Ioproc*, char*, char*, char*, int*);
       -int                ioopen(Ioproc*, char*, int);
       -long                ioread(Ioproc*, int, void*, long);
       -long                ioreadn(Ioproc*, int, void*, long);
       -long                iowrite(Ioproc*, int, void*, long);
       -int                iosleep(Ioproc*, long);
       -
       -long                iocall(Ioproc*, long (*)(va_list*), ...);
       -void                ioret(Ioproc*, int);
       -
       -#endif        /* _THREADH_ */
 (DIR) diff --git a/src/libthread/tprimes b/src/libthread/tprimes
       Binary files differ.
 (DIR) diff --git a/src/libutf/Make.Darwin-PowerMacintosh b/src/libutf/Make.Darwin-PowerMacintosh
       t@@ -1,6 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I. -I${PREFIX}/include
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libutf/Make.FreeBSD-386 b/src/libutf/Make.FreeBSD-386
       t@@ -1,7 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I. -I$(PREFIX)/include
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O        # default, can be overriden by Make.$(SYSNAME)
       -NAN=nan64.$O
 (DIR) diff --git a/src/libutf/Make.HP-UX-9000 b/src/libutf/Make.HP-UX-9000
       t@@ -1,6 +0,0 @@
       -CC=cc
       -CFLAGS=-O -c -Ae -I.
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libutf/Make.Linux-386 b/src/libutf/Make.Linux-386
       t@@ -1,7 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I.
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O        # default, can be overriden by Make.$(SYSNAME)
       -NAN=nan64.$O
 (DIR) diff --git a/src/libutf/Make.NetBSD-386 b/src/libutf/Make.NetBSD-386
       t@@ -1,7 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c -I. -I$(PREFIX)/include
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O        # default, can be overriden by Make.$(SYSNAME)
       -NAN=nan64.$O
 (DIR) diff --git a/src/libutf/Make.OSF1-alpha b/src/libutf/Make.OSF1-alpha
       t@@ -1,6 +0,0 @@
       -CC=cc
       -CFLAGS+=-g -c -I.
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libutf/Make.SunOS-sun4u b/src/libutf/Make.SunOS-sun4u
       t@@ -1,2 +0,0 @@
       -include Make.SunOS-sun4u-$(CC)
       -NAN=nan64.$O
 (DIR) diff --git a/src/libutf/Make.SunOS-sun4u-cc b/src/libutf/Make.SunOS-sun4u-cc
       t@@ -1,6 +0,0 @@
       -CC=cc
       -CFLAGS+=-g -c -I. -O
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libutf/Make.SunOS-sun4u-gcc b/src/libutf/Make.SunOS-sun4u-gcc
       t@@ -1,6 +0,0 @@
       -CC=gcc
       -CFLAGS+=-Wall -Wno-missing-braces -Wno-parentheses -Wno-switch -O2 -g -c
       -O=o
       -AR=ar
       -ARFLAGS=rvc
       -NAN=nan64.$O
 (DIR) diff --git a/src/libutf/Makefile b/src/libutf/Makefile
       t@@ -1,27 +1,7 @@
       -
       -# this works in gnu make
       -SYSNAME:=${shell uname}
       -OBJTYPE:=${shell uname -m | sed 's;i.86;386;; s;/.*;;; s; ;;g'}
       -
       -# this works in bsd make
       -SYSNAME!=uname
       -OBJTYPE!=uname -m | sed 's;i.86;386;; s;/.*;;; s; ;;g'
       -
       -# the gnu rules will mess up bsd but not vice versa,
       -# hence the gnu rules come first.
       -
       -include Make.$(SYSNAME)-$(OBJTYPE)
       -
       -PREFIX=/usr/local
       -
       -NUKEFILES=
       -
       -TGZFILES=
       +9SRC=..
       +include $(9SRC)/Makehdr
        
        LIB=libutf.a
       -VERSION=2.0
       -PORTPLACE=devel/libutf
       -NAME=libutf
        
        OFILES=\
                rune.$O\
       t@@ -46,67 +26,6 @@ OFILES=\
                utfutf.$O\
        
        HFILES=\
       -        utf.h\
       -
       -all: $(LIB)
       -
       -install: $(LIB)
       -        test -d $(PREFIX)/man/man3 || mkdir $(PREFIX)/man/man3
       -        install -c -m 0644 isalpharune.3 $(PREFIX)/man/man3/isalpharune.3
       -        install -c -m 0644 utf.7 $(PREFIX)/man/man7/utf.7
       -        install -c -m 0644 rune.3 $(PREFIX)/man/man3/rune.3
       -        install -c -m 0644 runestrcat.3 $(PREFIX)/man/man3/runestrcat.3
       -        install -c -m 0644 utf.h $(PREFIX)/include/utf.h
       -        install -c -m 0644 $(LIB) $(PREFIX)/lib/$(LIB)
       -
       -$(LIB): $(OFILES)
       -        $(AR) $(ARFLAGS) $(LIB) $(OFILES)
       -
       -NUKEFILES+=$(LIB)
       -.c.$O:
       -        $(CC) $(CFLAGS) -I$(PREFIX)/include $*.c
       -
       -%.$O: %.c
       -        $(CC) $(CFLAGS) -I$(PREFIX)/include $*.c
       -
       -
       -$(OFILES): $(HFILES)
       -
       -tgz:
       -        rm -rf $(NAME)-$(VERSION)
       -        mkdir $(NAME)-$(VERSION)
       -        cp Makefile Make.* README LICENSE NOTICE *.[ch137] rpm.spec bundle.ports $(TGZFILES) $(NAME)-$(VERSION)
       -        tar cf - $(NAME)-$(VERSION) | gzip >$(NAME)-$(VERSION).tgz
       -        rm -rf $(NAME)-$(VERSION)
       -
       -clean:
       -        rm -f $(OFILES) $(LIB)
       -
       -nuke:
       -        rm -f $(OFILES) *.tgz *.rpm $(NUKEFILES)
       -
       -rpm:
       -        make tgz
       -        cp $(NAME)-$(VERSION).tgz /usr/src/RPM/SOURCES
       -        rpm -ba rpm.spec
       -        cp /usr/src/RPM/SRPMS/$(NAME)-$(VERSION)-1.src.rpm .
       -        cp /usr/src/RPM/RPMS/i586/$(NAME)-$(VERSION)-1.i586.rpm .
       -        scp *.rpm rsc@amsterdam.lcs.mit.edu:public_html/software
       -
       -PORTDIR=/usr/ports/$(PORTPLACE)
       -
       -ports:
       -        make tgz
       -        rm -rf $(PORTDIR)
       -        mkdir $(PORTDIR)
       -        cp $(NAME)-$(VERSION).tgz /usr/ports/distfiles
       -        cat bundle.ports | (cd $(PORTDIR) && awk '$$1=="---" && $$3=="---" { ofile=$$2; next} {if(ofile) print >ofile}')
       -        (cd $(PORTDIR); make makesum)
       -        (cd $(PORTDIR); make)
       -        (cd $(PORTDIR); /usr/local/bin/portlint)
       -        rm -rf $(PORTDIR)/work
       -        shar `find $(PORTDIR)` > ports.shar
       -        (cd $(PORTDIR); tar cf - *) | gzip >$(NAME)-$(VERSION)-ports.tgz
       -        scp *.tgz rsc@amsterdam.lcs.mit.edu:public_html/software
       +        $(9SRC)/include/utf.h\
        
       -.phony: all clean nuke install tgz rpm ports
       +include $(9SRC)/Makesyslib
 (DIR) diff --git a/src/libutf/Makefile.BOT b/src/libutf/Makefile.BOT
       t@@ -1,47 +0,0 @@
       -.c.$O:
       -        $(CC) $(CFLAGS) -I/usr/X11R6/include -I../sam -I$(PREFIX)/include $*.c
       -
       -%.$O: %.c
       -        $(CC) $(CFLAGS) -I/usr/X11R6/include -I../sam -I$(PREFIX)/include $*.c
       -
       -
       -$(OFILES): $(HFILES)
       -
       -tgz:
       -        rm -rf $(NAME)-$(VERSION)
       -        mkdir $(NAME)-$(VERSION)
       -        cp Makefile Make.* README LICENSE NOTICE *.[ch137] rpm.spec bundle.ports $(TGZFILES) $(NAME)-$(VERSION)
       -        tar cf - $(NAME)-$(VERSION) | gzip >$(NAME)-$(VERSION).tgz
       -        rm -rf $(NAME)-$(VERSION)
       -
       -clean:
       -        rm -f $(OFILES) $(LIB)
       -
       -nuke:
       -        rm -f $(OFILES) *.tgz *.rpm $(NUKEFILES)
       -
       -rpm:
       -        make tgz
       -        cp $(NAME)-$(VERSION).tgz /usr/src/RPM/SOURCES
       -        rpm -ba rpm.spec
       -        cp /usr/src/RPM/SRPMS/$(NAME)-$(VERSION)-1.src.rpm .
       -        cp /usr/src/RPM/RPMS/i586/$(NAME)-$(VERSION)-1.i586.rpm .
       -        scp *.rpm rsc@amsterdam.lcs.mit.edu:public_html/software
       -
       -PORTDIR=/usr/ports/$(PORTPLACE)
       -
       -ports:
       -        make tgz
       -        rm -rf $(PORTDIR)
       -        mkdir $(PORTDIR)
       -        cp $(NAME)-$(VERSION).tgz /usr/ports/distfiles
       -        cat bundle.ports | (cd $(PORTDIR) && awk '$$1=="---" && $$3=="---" { ofile=$$2; next} {if(ofile) print >ofile}')
       -        (cd $(PORTDIR); make makesum)
       -        (cd $(PORTDIR); make)
       -        (cd $(PORTDIR); /usr/local/bin/portlint)
       -        rm -rf $(PORTDIR)/work
       -        shar `find $(PORTDIR)` > ports.shar
       -        (cd $(PORTDIR); tar cf - *) | gzip >$(NAME)-$(VERSION)-ports.tgz
       -        scp *.tgz rsc@amsterdam.lcs.mit.edu:public_html/software
       -
       -.phony: all clean nuke install tgz rpm ports
 (DIR) diff --git a/src/libutf/Makefile.CMD b/src/libutf/Makefile.CMD
       t@@ -1,5 +0,0 @@
       -
       -$(TARG): $(OFILES)
       -        $(CC) -o $(TARG) $(OFILES) -L$(PREFIX)/lib -lframe -ldraw -lthread -l9 -lregexp9 -lbio -lfmt -lutf -L/usr/X11R6/lib -lX11 -lm
       -
       -
 (DIR) diff --git a/src/libutf/Makefile.LIB b/src/libutf/Makefile.LIB
       t@@ -1,4 +0,0 @@
       -$(LIB): $(OFILES)
       -        $(AR) $(ARFLAGS) $(LIB) $(OFILES)
       -
       -NUKEFILES+=$(LIB)
 (DIR) diff --git a/src/libutf/Makefile.MID b/src/libutf/Makefile.MID
       t@@ -1,41 +0,0 @@
       -LIB=libutf.a
       -VERSION=2.0
       -PORTPLACE=devel/libutf
       -NAME=libutf
       -
       -OFILES=\
       -        rune.$O\
       -        runestrcat.$O\
       -        runestrchr.$O\
       -        runestrcmp.$O\
       -        runestrcpy.$O\
       -        runestrdup.$O\
       -        runestrlen.$O\
       -        runestrecpy.$O\
       -        runestrncat.$O\
       -        runestrncmp.$O\
       -        runestrncpy.$O\
       -        runestrrchr.$O\
       -        runestrstr.$O\
       -        runetype.$O\
       -        utfecpy.$O\
       -        utflen.$O\
       -        utfnlen.$O\
       -        utfrrune.$O\
       -        utfrune.$O\
       -        utfutf.$O\
       -
       -HFILES=\
       -        utf.h\
       -
       -all: $(LIB)
       -
       -install: $(LIB)
       -        test -d $(PREFIX)/man/man3 || mkdir $(PREFIX)/man/man3
       -        install -c -m 0644 isalpharune.3 $(PREFIX)/man/man3/isalpharune.3
       -        install -c -m 0644 utf.7 $(PREFIX)/man/man7/utf.7
       -        install -c -m 0644 rune.3 $(PREFIX)/man/man3/rune.3
       -        install -c -m 0644 runestrcat.3 $(PREFIX)/man/man3/runestrcat.3
       -        install -c -m 0644 utf.h $(PREFIX)/include/utf.h
       -        install -c -m 0644 $(LIB) $(PREFIX)/lib/$(LIB)
       -
 (DIR) diff --git a/src/libutf/Makefile.TOP b/src/libutf/Makefile.TOP
       t@@ -1,20 +0,0 @@
       -
       -# this works in gnu make
       -SYSNAME:=${shell uname}
       -OBJTYPE:=${shell uname -m | sed 's;i.86;386;; s;/.*;;; s; ;;g'}
       -
       -# this works in bsd make
       -SYSNAME!=uname
       -OBJTYPE!=uname -m | sed 's;i.86;386;; s;/.*;;; s; ;;g'
       -
       -# the gnu rules will mess up bsd but not vice versa,
       -# hence the gnu rules come first.
       -
       -include Make.$(SYSNAME)-$(OBJTYPE)
       -
       -PREFIX=/usr/local
       -
       -NUKEFILES=
       -
       -TGZFILES=
       -
 (DIR) diff --git a/src/libutf/bundle.ports b/src/libutf/bundle.ports
       t@@ -1,43 +0,0 @@
       ---- Makefile ---
       -# New ports collection makefile for: libutf
       -# Date Created:                11 Feb 2003
       -# Whom:                        rsc
       -#
       -# THIS LINE NEEDS REPLACING.  IT'S HERE TO GET BY PORTLINT
       -# $FreeBSD: ports/devel/libfmt/Makefile,v 1.1 2003/02/12 00:51:22 rsc Exp $
       -
       -PORTNAME=        libutf
       -PORTVERSION=        2.0
       -CATEGORIES=        devel
       -MASTER_SITES=        http://pdos.lcs.mit.edu/~rsc/software/
       -EXTRACT_SUFX=        .tgz
       -
       -MAINTAINER=        rsc@post.harvard.edu
       -
       -MAN3=                rune.3 runestrcat.3 isalpharune.3
       -MAN7=                utf.7
       -
       -USE_REINPLACE=yes
       -
       -.include <bsd.port.pre.mk>
       -
       -post-patch:
       -        ${REINPLACE_CMD} -e 's,$$(PREFIX),${PREFIX},g' ${WRKSRC}/Makefile
       -
       -.include <bsd.port.post.mk>
       ---- pkg-comment ---
       -UTF8 support library from Plan 9
       ---- pkg-descr ---
       -UTF8 support library from Plan 9.
       -
       -WWW: http://pdos.lcs.mit.edu/~rsc/software/#libutf
       -http://plan9.bell-labs.com/magic/man2html/3/rune
       -
       -Russ Cox
       -rsc@post.harvard.edu
       ---- pkg-plist ---
       -lib/libutf.a
       -include/utf.h
       ---- /dev/null ---
       -This is just a way to make sure blank lines don't
       -creep into pkg-plist.
 (DIR) diff --git a/src/libutf/isalpharune.3 b/src/libutf/isalpharune.3
       t@@ -1,47 +0,0 @@
       -.TH ISALPHARUNE 3
       -.SH NAME
       -isalpharune, islowerrune, isspacerune, istitlerune, isupperrune, tolowerrune, totitlerune, toupperrune \- Unicode character classes and cases
       -.SH SYNOPSIS
       -.B #include <utf.h>
       -.PP
       -.B
       -int isalpharune(Rune c)
       -.PP
       -.B
       -int islowerrune(Rune c)
       -.PP
       -.B
       -int isspacerune(Rune c)
       -.PP
       -.B
       -int istitlerune(Rune c)
       -.PP
       -.B
       -int isupperrune(Rune c)
       -.PP
       -.B
       -Rune tolowerrune(Rune c)
       -.PP
       -.B
       -Rune totitlerune(Rune c)
       -.PP
       -.B
       -Rune toupperrune(Rune c)
       -.SH DESCRIPTION
       -These routines examine and operate on Unicode characters,
       -in particular a subset of their properties as defined in the Unicode standard.
       -Unicode defines some characters as alphabetic and specifies three cases:
       -upper, lower, and title.
       -Analogously to
       -.IR ctype (3)
       -for
       -.SM ASCII\c
       -,
       -these routines
       -test types and modify cases for Unicode characters.
       -The names are self-explanatory.
       -.PP
       -The case-conversion routines return the character unchanged if it has no case.
       -.SH "SEE ALSO
       -.IR ctype (3) ,
       -.IR "The Unicode Standard" .
 (DIR) diff --git a/src/libutf/mkfile b/src/libutf/mkfile
       t@@ -1,9 +0,0 @@
       -all:V: Makefile Make.FreeBSD-386 Make.Linux-386 Make.NetBSD-386 Make.HP-UX-9000 Make.OSF1-alpha \
       -        Make.SunOS-sun4u Make.SunOS-sun4u-cc Make.SunOS-sun4u-gcc \
       -        Make.Darwin-PowerMacintosh
       -
       -Makefile:D: ../libutf/Makefile.TOP Makefile.MID ../libutf/Makefile.LIB ../libutf/Makefile.BOT
       -        cat $prereq >$target
       -
       -Make.%: ../libutf/Make.%
       -        cp $prereq $target
 (DIR) diff --git a/src/libutf/rpm.spec b/src/libutf/rpm.spec
       t@@ -1,28 +0,0 @@
       -Summary: Port of Plan 9's UTF8 support functions
       -Name: libutf
       -Version: 2.0
       -Release: 1
       -Group: Development/C
       -Copyright: Public Domain
       -Packager: Russ Cox <rsc@post.harvard.edu>
       -Source: http://pdos.lcs.mit.edu/~rsc/software/libutf-2.0.tgz
       -URL: http://pdos.lcs.mit.edu/~rsc/software/#libutf
       -
       -%description
       -Libutf is a port of Plan 9's UTF8 support functions.
       -%prep
       -%setup
       -
       -%build
       -make
       -
       -%install
       -make install
       -
       -%files
       -/usr/local/include/utf.h
       -/usr/local/lib/libutf.a
       -/usr/local/man/man3/runestrcat.3
       -/usr/local/man/man3/isalpharune.3
       -/usr/local/man/man3/rune.3
       -/usr/local/man/man7/utf.7
 (DIR) diff --git a/src/libutf/rune.3 b/src/libutf/rune.3
       t@@ -1,187 +0,0 @@
       -.TH RUNE 3
       -.SH NAME
       -runetochar, chartorune, runelen, runenlen, fullrune, utfecpy, utflen, utfnlen, utfrune, utfrrune, utfutf \- rune/UTF conversion
       -.SH SYNOPSIS
       -.ta \w'\fLchar*xx'u
       -.B #include <utf.h>
       -.PP
       -.B
       -int        runetochar(char *s, Rune *r)
       -.PP
       -.B
       -int        chartorune(Rune *r, char *s)
       -.PP
       -.B
       -int        runelen(long r)
       -.PP
       -.B
       -int        runenlen(Rune *r, int n)
       -.PP
       -.B
       -int        fullrune(char *s, int n)
       -.PP
       -.B
       -char*        utfecpy(char *s1, char *es1, char *s2)
       -.PP
       -.B
       -int        utflen(char *s)
       -.PP
       -.B
       -int        utfnlen(char *s, long n)
       -.PP
       -.B
       -char*        utfrune(char *s, long c)
       -.PP
       -.B
       -char*        utfrrune(char *s, long c)
       -.PP
       -.B
       -char*        utfutf(char *s1, char *s2)
       -.SH DESCRIPTION
       -These routines convert to and from a
       -.SM UTF
       -byte stream and runes.
       -.PP
       -.I Runetochar
       -copies one rune at
       -.I r
       -to at most
       -.B UTFmax
       -bytes starting at
       -.I s
       -and returns the number of bytes copied.
       -.BR UTFmax ,
       -defined as
       -.B 3
       -in
       -.BR <libc.h> ,
       -is the maximum number of bytes required to represent a rune.
       -.PP
       -.I Chartorune
       -copies at most
       -.B UTFmax
       -bytes starting at
       -.I s
       -to one rune at
       -.I r
       -and returns the number of bytes copied.
       -If the input is not exactly in
       -.SM UTF
       -format,
       -.I chartorune
       -will convert to 0x80 and return 1.
       -.PP
       -.I Runelen
       -returns the number of bytes
       -required to convert
       -.I r
       -into
       -.SM UTF.
       -.PP
       -.I Runenlen
       -returns the number of bytes
       -required to convert the
       -.I n
       -runes pointed to by
       -.I r
       -into
       -.SM UTF.
       -.PP
       -.I Fullrune
       -returns 1 if the string
       -.I s
       -of length
       -.I n
       -is long enough to be decoded by
       -.I chartorune
       -and 0 otherwise.
       -This does not guarantee that the string
       -contains a legal
       -.SM UTF
       -encoding.
       -This routine is used by programs that
       -obtain input a byte at
       -a time and need to know when a full rune
       -has arrived.
       -.PP
       -The following routines are analogous to the
       -corresponding string routines with
       -.B utf
       -substituted for
       -.B str
       -and
       -.B rune
       -substituted for
       -.BR chr .
       -.PP
       -.I Utfecpy
       -copies UTF sequences until a null sequence has been copied, but writes no 
       -sequences beyond
       -.IR es1 .
       -If any sequences are copied,
       -.I s1
       -is terminated by a null sequence, and a pointer to that sequence is returned.
       -Otherwise, the original
       -.I s1
       -is returned.
       -.PP
       -.I Utflen
       -returns the number of runes that
       -are represented by the
       -.SM UTF
       -string
       -.IR s .
       -.PP
       -.I Utfnlen
       -returns the number of complete runes that
       -are represented by the first
       -.I n
       -bytes of
       -.SM UTF
       -string
       -.IR s .
       -If the last few bytes of the string contain an incompletely coded rune,
       -.I utfnlen
       -will not count them; in this way, it differs from
       -.IR utflen ,
       -which includes every byte of the string.
       -.PP
       -.I Utfrune
       -.RI ( utfrrune )
       -returns a pointer to the first (last)
       -occurrence of rune
       -.I c
       -in the
       -.SM UTF
       -string
       -.IR s ,
       -or 0 if
       -.I c
       -does not occur in the string.
       -The NUL byte terminating a string is considered to
       -be part of the string
       -.IR s .
       -.PP
       -.I Utfutf
       -returns a pointer to the first occurrence of
       -the
       -.SM UTF
       -string
       -.I s2
       -as a
       -.SM UTF
       -substring of
       -.IR s1 ,
       -or 0 if there is none.
       -If
       -.I s2
       -is the null string,
       -.I utfutf
       -returns
       -.IR s1 .
       -.SH HISTORY
       -These routines were written by Rob Pike and Ken Thompson
       -and first appeared in Plan 9.
       -.SH SEE ALSO
       -.IR utf (7),
       -.IR tcs (1)
 (DIR) diff --git a/src/libutf/runestrcat.3 b/src/libutf/runestrcat.3
       t@@ -1,65 +0,0 @@
       -.TH RUNESTRCAT 3
       -.SH NAME
       -runestrcat, 
       -runestrncat,
       -runestrcmp,
       -runestrncmp,
       -runestrcpy,
       -runestrncpy,
       -runestrecpy,
       -runestrlen,
       -runestrchr,
       -runestrrchr,
       -runestrdup,
       -runestrstr \- rune string operations
       -.SH SYNOPSIS
       -.B #include <utf.h>
       -.PP
       -.ta \w'\fLRune* \fP'u
       -.B
       -Rune*        runestrcat(Rune *s1, Rune *s2)
       -.PP
       -.B
       -Rune*        runestrncat(Rune *s1, Rune *s2, long n)
       -.PP
       -.B
       -int        runestrcmp(Rune *s1, Rune *s2)
       -.PP
       -.B
       -int        runestrncmp(Rune *s1, Rune *s2, long n)
       -.PP
       -.B
       -Rune*        runestrcpy(Rune *s1, Rune *s2)
       -.PP
       -.B
       -Rune*        runestrncpy(Rune *s1, Rune *s2, long n)
       -.PP
       -.B
       -Rune*        runestrecpy(Rune *s1, Rune *es1, Rune *s2)
       -.PP
       -.B
       -long        runestrlen(Rune *s)
       -.PP
       -.B
       -Rune*        runestrchr(Rune *s, Rune c)
       -.PP
       -.B
       -Rune*        runestrrchr(Rune *s, Rune c)
       -.PP
       -.B
       -Rune*        runestrdup(Rune *s)
       -.PP
       -.B
       -Rune*        runestrstr(Rune *s1, Rune *s2)
       -.SH DESCRIPTION
       -These functions are rune string analogues of
       -the corresponding functions in 
       -.IR strcat (3).
       -.SH HISTORY
       -These routines first appeared in Plan 9.
       -.SH SEE ALSO
       -.IR memmove (3),
       -.IR rune (3),
       -.IR strcat (2)
       -.SH BUGS
       -The outcome of overlapping moves varies among implementations.
 (DIR) diff --git a/src/libutf/utf.7 b/src/libutf/utf.7
       t@@ -1,91 +0,0 @@
       -.TH UTF 7
       -.SH NAME
       -UTF, Unicode, ASCII, rune \- character set and format
       -.SH DESCRIPTION
       -The Plan 9 character set and representation are
       -based on the Unicode Standard and on the ISO multibyte
       -.SM UTF-8
       -encoding (Universal Character
       -Set Transformation Format, 8 bits wide).
       -The Unicode Standard represents its characters in 16
       -bits;
       -.SM UTF-8
       -represents such
       -values in an 8-bit byte stream.
       -Throughout this manual,
       -.SM UTF-8
       -is shortened to
       -.SM UTF.
       -.PP
       -In Plan 9, a
       -.I rune
       -is a 16-bit quantity representing a Unicode character.
       -Internally, programs may store characters as runes.
       -However, any external manifestation of textual information,
       -in files or at the interface between programs, uses a
       -machine-independent, byte-stream encoding called
       -.SM UTF.
       -.PP
       -.SM UTF
       -is designed so the 7-bit
       -.SM ASCII
       -set (values hexadecimal 00 to 7F),
       -appear only as themselves
       -in the encoding.
       -Runes with values above 7F appear as sequences of two or more
       -bytes with values only from 80 to FF.
       -.PP
       -The
       -.SM UTF
       -encoding of the Unicode Standard is backward compatible with
       -.SM ASCII\c
       -:
       -programs presented only with
       -.SM ASCII
       -work on Plan 9
       -even if not written to deal with
       -.SM UTF,
       -as do
       -programs that deal with uninterpreted byte streams.
       -However, programs that perform semantic processing on
       -.SM ASCII
       -graphic
       -characters must convert from
       -.SM UTF
       -to runes
       -in order to work properly with non-\c
       -.SM ASCII
       -input.
       -See
       -.IR rune (2).
       -.PP
       -Letting numbers be binary,
       -a rune x is converted to a multibyte
       -.SM UTF
       -sequence
       -as follows:
       -.PP
       -01.   x in [00000000.0bbbbbbb] → 0bbbbbbb
       -.br
       -10.   x in [00000bbb.bbbbbbbb] → 110bbbbb, 10bbbbbb
       -.br
       -11.   x in [bbbbbbbb.bbbbbbbb] → 1110bbbb, 10bbbbbb, 10bbbbbb
       -.br
       -.PP
       -Conversion 01 provides a one-byte sequence that spans the
       -.SM ASCII
       -character set in a compatible way.
       -Conversions 10 and 11 represent higher-valued characters
       -as sequences of two or three bytes with the high bit set.
       -Plan 9 does not support the 4, 5, and 6 byte sequences proposed by X-Open.
       -When there are multiple ways to encode a value, for example rune 0,
       -the shortest encoding is used.
       -.PP
       -In the inverse mapping,
       -any sequence except those described above
       -is incorrect and is converted to rune hexadecimal 0080.
       -.SH "SEE ALSO"
       -.IR ascii (1),
       -.IR tcs (1),
       -.IR rune (3),
       -.IR "The Unicode Standard" .
 (DIR) diff --git a/src/libutf/utf.h b/src/libutf/utf.h
       t@@ -1,51 +0,0 @@
       -#ifndef _UTFH_
       -#define _UTFH_ 1
       -
       -typedef unsigned short Rune;        /* 16 bits */
       -
       -enum
       -{
       -        UTFmax                = 3,                /* maximum bytes per rune */
       -        Runesync        = 0x80,                /* cannot represent part of a UTF sequence (<) */
       -        Runeself        = 0x80,                /* rune and UTF sequences are the same (<) */
       -        Runeerror        = 0x80,                /* decoding error in UTF */
       -};
       -
       -/*
       - * rune routines
       - */
       -extern        int        runetochar(char*, Rune*);
       -extern        int        chartorune(Rune*, char*);
       -extern        int        runelen(long);
       -extern        int        runenlen(Rune*, int);
       -extern        int        fullrune(char*, int);
       -extern        int        utflen(char*);
       -extern        int        utfnlen(char*, long);
       -extern        char*        utfrune(char*, long);
       -extern        char*        utfrrune(char*, long);
       -extern        char*        utfutf(char*, char*);
       -extern        char*        utfecpy(char*, char*, char*);
       -
       -extern        Rune*        runestrcat(Rune*, Rune*);
       -extern        Rune*        runestrchr(Rune*, Rune);
       -extern        int        runestrcmp(Rune*, Rune*);
       -extern        Rune*        runestrcpy(Rune*, Rune*);
       -extern        Rune*        runestrncpy(Rune*, Rune*, long);
       -extern        Rune*        runestrecpy(Rune*, Rune*, Rune*);
       -extern        Rune*        runestrdup(Rune*);
       -extern        Rune*        runestrncat(Rune*, Rune*, long);
       -extern        int        runestrncmp(Rune*, Rune*, long);
       -extern        Rune*        runestrrchr(Rune*, Rune);
       -extern        long        runestrlen(Rune*);
       -extern        Rune*        runestrstr(Rune*, Rune*);
       -
       -extern        Rune        tolowerrune(Rune);
       -extern        Rune        totitlerune(Rune);
       -extern        Rune        toupperrune(Rune);
       -extern        int        isalpharune(Rune);
       -extern        int        islowerrune(Rune);
       -extern        int        isspacerune(Rune);
       -extern        int        istitlerune(Rune);
       -extern        int        isupperrune(Rune);
       -
       -#endif