diff options
author | Charles.Forsyth <devnull@localhost> | 2006-12-23 00:30:12 +0000 |
---|---|---|
committer | Charles.Forsyth <devnull@localhost> | 2006-12-23 00:30:12 +0000 |
commit | 6e425a9de8c003b5a733621a6b6730ec3cc902b8 (patch) | |
tree | 314123bcab78ff295f38f85f31dc141e5fe22d15 | |
parent | 74a4d8c26dd3c1e9febcb717cfd6cb6512991a7a (diff) |
20061220
-rw-r--r-- | CHANGES | 78 | ||||
-rwxr-xr-x | FreeBSD/386/bin/data2c | bin | 40729 -> 40729 bytes | |||
-rwxr-xr-x | FreeBSD/386/bin/mk | bin | 160607 -> 160607 bytes | |||
-rwxr-xr-x | FreeBSD/386/bin/yacc | bin | 94814 -> 94814 bytes | |||
-rwxr-xr-x | Irix/mips/bin/mk | bin | 272072 -> 272072 bytes | |||
-rwxr-xr-x | Irix/mips/bin/mkext | bin | 150136 -> 150136 bytes | |||
-rwxr-xr-x | Irix/mips/bin/yacc | bin | 198184 -> 198184 bytes | |||
-rw-r--r-- | LICENCE | 6 | ||||
-rwxr-xr-x | Linux/386/bin/data2c | bin | 50083 -> 51457 bytes | |||
-rwxr-xr-x | Linux/386/bin/mk | bin | 190738 -> 193552 bytes | |||
-rw-r--r-- | Linux/386/bin/mkext | bin | 0 -> 83755 bytes | |||
-rwxr-xr-x | Linux/386/bin/yacc | bin | 111379 -> 113053 bytes | |||
-rw-r--r-- | Linux/arm/include/fpuctl.h | 52 | ||||
-rw-r--r-- | Linux/arm/include/lib9.h | 497 | ||||
-rw-r--r-- | MacOSX/README | 8 | ||||
-rwxr-xr-x | MacOSX/power/bin/data2c | bin | 25616 -> 31528 bytes | |||
-rwxr-xr-x | MacOSX/power/bin/mk | bin | 76736 -> 78020 bytes | |||
-rwxr-xr-x | MacOSX/power/bin/yacc | bin | 65948 -> 67740 bytes | |||
-rwxr-xr-x | Nt/386/bin/c2l.exe | bin | 225280 -> 225280 bytes | |||
-rwxr-xr-x | Nt/386/bin/cp.exe | bin | 61440 -> 61440 bytes | |||
-rwxr-xr-x | Nt/386/bin/data2c.exe | bin | 53248 -> 53248 bytes | |||
-rwxr-xr-x | Nt/386/bin/echo.exe | bin | 49152 -> 49152 bytes | |||
-rwxr-xr-x | Nt/386/bin/format.exe | bin | 65536 -> 65536 bytes | |||
-rwxr-xr-x | Nt/386/bin/mkdir.exe | bin | 49152 -> 49152 bytes | |||
-rwxr-xr-x | Nt/386/bin/mkext.exe | bin | 69632 -> 69632 bytes | |||
-rwxr-xr-x | Nt/386/bin/mv.exe | bin | 61440 -> 61440 bytes | |||
-rwxr-xr-x | Nt/386/bin/rm.exe | bin | 57344 -> 57344 bytes | |||
-rwxr-xr-x | Nt/386/bin/sed.exe | bin | 77824 -> 77824 bytes | |||
-rwxr-xr-x | Nt/386/bin/test.exe | bin | 61440 -> 61440 bytes | |||
-rwxr-xr-x | Nt/386/bin/tr.exe | bin | 53248 -> 53248 bytes | |||
-rwxr-xr-x | Nt/386/bin/yacc.exe | bin | 86016 -> 86016 bytes | |||
-rwxr-xr-x | Nt/386/include/lib9.h | 4 | ||||
-rwxr-xr-x | Solaris/sparc/bin/data2c | bin | 261272 -> 261272 bytes | |||
-rwxr-xr-x | Solaris/sparc/bin/mk | bin | 826928 -> 826928 bytes | |||
-rwxr-xr-x | Solaris/sparc/bin/mkext | bin | 424500 -> 424500 bytes | |||
-rwxr-xr-x | Solaris/sparc/bin/yacc | bin | 421936 -> 421936 bytes | |||
-rw-r--r-- | acme/mail/Mailpop3.dis | bin | 18989 -> 19083 bytes | |||
-rw-r--r-- | appl/acme/acme/mail/src/Mailpop3.b | 20 | ||||
-rw-r--r-- | appl/charon/build.b | 4 | ||||
-rw-r--r-- | appl/charon/http.b | 2 | ||||
-rw-r--r-- | appl/charon/layout.b | 4 | ||||
-rwxr-xr-x | appl/cmd/fortune.b | 4 | ||||
-rw-r--r-- | appl/cmd/limbo/com.b | 2 | ||||
-rw-r--r-- | appl/cmd/limbo/ecom.b | 2 | ||||
-rw-r--r-- | appl/cmd/limbo/lex.b | 1 | ||||
-rw-r--r-- | appl/cmd/limbo/limbo.b | 825 | ||||
-rw-r--r-- | appl/cmd/limbo/limbo.y | 1 | ||||
-rw-r--r-- | appl/cmd/limbo/typecheck.b | 6 | ||||
-rw-r--r-- | appl/cmd/mk/mk.b | 11 | ||||
-rw-r--r-- | appl/cmd/mkfile | 5 | ||||
-rw-r--r-- | appl/cmd/os.b | 53 | ||||
-rw-r--r-- | appl/cmd/test.b | 370 | ||||
-rw-r--r-- | appl/lib/chanfill.b | 34 | ||||
-rw-r--r-- | appl/lib/dis.b | 2 | ||||
-rw-r--r-- | appl/lib/mkfile | 3 | ||||
-rw-r--r-- | appl/lib/newns.b | 16 | ||||
-rw-r--r-- | appl/lib/pop3.b | 14 | ||||
-rw-r--r-- | appl/lib/sets.b | 2 | ||||
-rw-r--r-- | appl/lib/sets32.b | 2 | ||||
-rw-r--r-- | appl/lib/venti.b | 6 | ||||
-rw-r--r-- | appl/lib/w3c/mkfile | 2 | ||||
-rw-r--r-- | appl/lib/w3c/xpointers.b | 2 | ||||
-rw-r--r-- | appl/lib/xml.b | 21 | ||||
-rw-r--r-- | appl/svc/httpd/mkfile | 3 | ||||
-rw-r--r-- | appl/svc/webget/date.b | 24 | ||||
-rw-r--r-- | appl/svc/webget/http.b | 49 | ||||
-rw-r--r-- | appl/svc/webget/webget.b | 2 | ||||
-rw-r--r-- | appl/svc/webget/wgutils.b | 10 | ||||
-rw-r--r-- | appl/svc/webget/wgutils.m | 2 | ||||
-rw-r--r-- | appl/wm/sh.b | 31 | ||||
-rw-r--r-- | appl/wm/unibrowse.b | 26 | ||||
-rw-r--r-- | asm/asm.y | 6 | ||||
-rw-r--r-- | dis/ar.dis | bin | 0 -> 10395 bytes | |||
-rw-r--r-- | dis/cddb.dis | bin | 0 -> 4483 bytes | |||
-rw-r--r-- | dis/charon/build.dis | bin | 38630 -> 38649 bytes | |||
-rw-r--r-- | dis/charon/http.dis | bin | 12032 -> 12056 bytes | |||
-rw-r--r-- | dis/charon/layout.dis | bin | 67609 -> 67654 bytes | |||
-rw-r--r-- | dis/ebook/ebook.dis | bin | 29845 -> 29855 bytes | |||
-rw-r--r-- | dis/ebook/oebpackage.dis | bin | 4387 -> 4387 bytes | |||
-rw-r--r-- | dis/fortune.dis | bin | 1743 -> 1743 bytes | |||
-rw-r--r-- | dis/lib/chanfill.dis | bin | 404 -> 356 bytes | |||
-rw-r--r-- | dis/lib/csv.dis | bin | 0 -> 663 bytes | |||
-rw-r--r-- | dis/lib/dis.dis | bin | 7147 -> 7147 bytes | |||
-rw-r--r-- | dis/lib/newns.dis | bin | 6998 -> 7041 bytes | |||
-rw-r--r-- | dis/lib/pop3.dis | bin | 3422 -> 3377 bytes | |||
-rw-r--r-- | dis/lib/rfc822.dis | bin | 0 -> 5557 bytes | |||
-rw-r--r-- | dis/lib/sets.dis | bin | 3360 -> 3360 bytes | |||
-rw-r--r-- | dis/lib/sets32.dis | bin | 2051 -> 2051 bytes | |||
-rw-r--r-- | dis/lib/w3c/uris.dis | bin | 0 -> 3822 bytes | |||
-rw-r--r-- | dis/lib/xml.dis | bin | 8324 -> 8385 bytes | |||
-rw-r--r-- | dis/limbo.dis | bin | 343078 -> 343171 bytes | |||
-rw-r--r-- | dis/lookman | 18 | ||||
-rw-r--r-- | dis/lookman.dis | bin | 2861 -> 0 bytes | |||
-rw-r--r-- | dis/man2html.dis | bin | 0 -> 15911 bytes | |||
-rw-r--r-- | dis/mk.dis | bin | 58674 -> 58835 bytes | |||
-rw-r--r-- | dis/os.dis | bin | 3321 -> 3690 bytes | |||
-rw-r--r-- | dis/shutdown | 18 | ||||
-rw-r--r-- | dis/shutdown.dis | bin | 673 -> 0 bytes | |||
-rw-r--r-- | dis/svc/webget/http.dis | bin | 9923 -> 10161 bytes | |||
-rw-r--r-- | dis/svc/webget/webget.dis | bin | 5594 -> 5601 bytes | |||
-rw-r--r-- | dis/svc/webget/wgutils.dis | bin | 4062 -> 4151 bytes | |||
-rw-r--r-- | dis/test.dis | bin | 3178 -> 4189 bytes | |||
-rw-r--r-- | dis/wm/dmwm.dis | bin | 2943 -> 2943 bytes | |||
-rw-r--r-- | dis/wm/sh.dis | bin | 15488 -> 15872 bytes | |||
-rw-r--r-- | dis/wm/unibrowse.dis | bin | 17138 -> 17336 bytes | |||
-rw-r--r-- | doc/install.ms | 2 | ||||
-rw-r--r-- | emu/FreeBSD/asm-386.S | 3 | ||||
-rw-r--r-- | emu/FreeBSD/cmd.c | 25 | ||||
-rw-r--r-- | emu/FreeBSD/ipif.c | 5 | ||||
-rw-r--r-- | emu/Hp/cmd.c | 26 | ||||
-rw-r--r-- | emu/Irix/cmd.c | 26 | ||||
-rw-r--r-- | emu/Linux/asm-386.S | 6 | ||||
-rw-r--r-- | emu/Linux/asm-arm.S | 131 | ||||
-rw-r--r-- | emu/Linux/asm-power.S | 72 | ||||
-rw-r--r-- | emu/Linux/cmd.c | 26 | ||||
-rw-r--r-- | emu/Linux/emu-g | 96 | ||||
-rw-r--r-- | emu/Linux/mkfile | 2 | ||||
-rw-r--r-- | emu/Linux/os.c | 12 | ||||
-rw-r--r-- | emu/Linux/segflush-power.c | 27 | ||||
-rw-r--r-- | emu/MacOSX/NOTICE | 1 | ||||
-rw-r--r-- | emu/MacOSX/asm-386.s | 28 | ||||
-rw-r--r-- | emu/MacOSX/cmd.c | 25 | ||||
-rw-r--r-- | emu/MacOSX/mkfile | 5 | ||||
-rw-r--r-- | emu/MacOSX/os.c | 2 | ||||
-rw-r--r-- | emu/NOTICE | 1 | ||||
-rw-r--r-- | emu/Nt/cmd.c | 84 | ||||
-rw-r--r-- | emu/Nt/os.c | 105 | ||||
-rw-r--r-- | emu/Nt/win.c | 130 | ||||
-rw-r--r-- | emu/Plan9/cmd.c | 29 | ||||
-rw-r--r-- | emu/Plan9/win.c | 69 | ||||
-rw-r--r-- | emu/Solaris/cmd.c | 28 | ||||
-rw-r--r-- | emu/Unixware/cmd.c | 28 | ||||
-rw-r--r-- | emu/mkfile | 2 | ||||
-rw-r--r-- | emu/port/chan.c | 1 | ||||
-rw-r--r-- | emu/port/dev.c | 2 | ||||
-rw-r--r-- | emu/port/devcmd.c | 88 | ||||
-rw-r--r-- | emu/port/devcons.c | 334 | ||||
-rw-r--r-- | emu/port/devmem.c | 1 | ||||
-rw-r--r-- | emu/port/devprof.c | 18 | ||||
-rw-r--r-- | emu/port/error.h | 3 | ||||
-rw-r--r-- | emu/port/exportfs.c | 2 | ||||
-rw-r--r-- | emu/port/fns.h | 2 | ||||
-rw-r--r-- | emu/port/inferno.c | 3 | ||||
-rw-r--r-- | fonts/LICENCE | 73 | ||||
-rw-r--r-- | fonts/README.FONTS | 2 | ||||
-rw-r--r-- | include/interp.h | 3 | ||||
-rw-r--r-- | include/version.h | 2 | ||||
-rw-r--r-- | lib/games/fortunes | 8 | ||||
-rw-r--r-- | lib/games/fortunes.index | bin | 0 -> 32 bytes | |||
-rw-r--r-- | lib/proto/FreeBSD | 3 | ||||
-rw-r--r-- | lib/proto/Hp | 2 | ||||
-rw-r--r-- | lib/proto/Irix | 2 | ||||
-rw-r--r-- | lib/proto/Linux | 8 | ||||
-rw-r--r-- | lib/proto/MacOSX | 25 | ||||
-rw-r--r-- | lib/proto/Nt | 2 | ||||
-rw-r--r-- | lib/proto/Plan9 | 2 | ||||
-rw-r--r-- | lib/proto/Solaris | 2 | ||||
-rw-r--r-- | lib/proto/inferno | 24 | ||||
-rw-r--r-- | lib/proto/utils | 5 | ||||
-rw-r--r-- | lib9/getcallerpc-Linux-386.S | 1 | ||||
-rw-r--r-- | lib9/utfecpy.c | 2 | ||||
-rw-r--r-- | libinterp/ipint.c | 157 | ||||
-rw-r--r-- | libinterp/keyring.h | 6 | ||||
-rw-r--r-- | libinterp/runt.h | 39 | ||||
-rw-r--r-- | libkern/utfecpy.c | 2 | ||||
-rw-r--r-- | liblogfs/NOTICE | 28 | ||||
-rw-r--r-- | libmath/FPcontrol-MacOSX.c | 16 | ||||
-rw-r--r-- | libmemdraw/draw.c | 2 | ||||
-rw-r--r-- | libmp/port/mptouv.c | 2 | ||||
-rw-r--r-- | libtk/textu.c | 2 | ||||
-rw-r--r-- | libtk/textw.c | 12 | ||||
-rw-r--r-- | libtk/tindx.c | 3 | ||||
-rw-r--r-- | libtk/utils.c | 1 | ||||
-rw-r--r-- | libtk/windw.c | 1 | ||||
-rw-r--r-- | limbo/com.c | 2 | ||||
-rw-r--r-- | limbo/decls.c | 2 | ||||
-rw-r--r-- | limbo/ecom.c | 4 | ||||
-rw-r--r-- | limbo/lex.c | 1 | ||||
-rw-r--r-- | limbo/limbo.y | 1 | ||||
-rw-r--r-- | limbo/optim.c | 2 | ||||
-rw-r--r-- | limbo/sbl.c | 1 | ||||
-rw-r--r-- | limbo/typecheck.c | 8 | ||||
-rw-r--r-- | limbo/types.c | 12 | ||||
-rw-r--r-- | man/1/INDEX | 2 | ||||
-rw-r--r-- | man/1/ar | 163 | ||||
-rw-r--r-- | man/1/man | 49 | ||||
-rw-r--r-- | man/1/os | 18 | ||||
-rw-r--r-- | man/1/sh | 12 | ||||
-rw-r--r-- | man/1/sh-expr | 21 | ||||
-rw-r--r-- | man/1/sh-std | 7 | ||||
-rw-r--r-- | man/1/sh-tk | 25 | ||||
-rw-r--r-- | man/2/INDEX | 7 | ||||
-rw-r--r-- | man/2/csv | 58 | ||||
-rw-r--r-- | man/2/fsproto | 1 | ||||
-rw-r--r-- | man/2/keyring-ipint | 29 | ||||
-rw-r--r-- | man/2/pop3 | 11 | ||||
-rw-r--r-- | man/2/rfc822 | 327 | ||||
-rw-r--r-- | man/2/smtp | 10 | ||||
-rw-r--r-- | man/2/sys-print | 7 | ||||
-rw-r--r-- | man/2/w3c-uris | 242 | ||||
-rw-r--r-- | man/2/xml | 15 | ||||
-rw-r--r-- | man/3/cmd | 15 | ||||
-rw-r--r-- | man/7/INDEX | 1 | ||||
-rw-r--r-- | man/7/cddb | 56 | ||||
-rw-r--r-- | man/8/httpd | 25 | ||||
-rw-r--r-- | man/8/shutdown | 6 | ||||
-rw-r--r-- | man/index | 691 | ||||
-rw-r--r-- | mkfile | 6 | ||||
-rw-r--r-- | mkfiles/mkfile-FreeBSD-386 | 2 | ||||
-rw-r--r-- | mkfiles/mkfile-Linux-386 | 2 | ||||
-rw-r--r-- | mkfiles/mkfile-MacOSX-power | 6 | ||||
-rw-r--r-- | mkfiles/mkfile-Unixware-386 | 2 | ||||
-rw-r--r-- | mkfiles/mklibsubdirs | 2 | ||||
-rw-r--r-- | mkfiles/mksubdirs | 2 | ||||
-rw-r--r-- | module/keyring.m | 6 | ||||
-rw-r--r-- | module/xml.m | 1 | ||||
-rw-r--r-- | os/README | 4 | ||||
-rw-r--r-- | os/ip/loopbackmedium.c | 2 | ||||
-rw-r--r-- | os/ip/rudp.c | 2 | ||||
-rw-r--r-- | os/ipaq1110/NOTICE | 2 | ||||
-rw-r--r-- | os/port/devprof.c | 4 | ||||
-rw-r--r-- | os/port/error.h | 3 | ||||
-rw-r--r-- | os/port/exportfs.c | 7 | ||||
-rw-r--r-- | os/port/inferno.c | 3 | ||||
-rw-r--r-- | os/port/portmkfile | 3 | ||||
-rw-r--r-- | utils/0c/peep.c | 3 | ||||
-rw-r--r-- | utils/0c/reg.c | 1 | ||||
-rw-r--r-- | utils/5c/peep.c | 2 | ||||
-rw-r--r-- | utils/5c/txt.c | 1 | ||||
-rw-r--r-- | utils/5l/obj.c | 1 | ||||
-rw-r--r-- | utils/acid/os-Nt.c | 1 | ||||
-rw-r--r-- | utils/acid/os-Posix.c | 1 | ||||
-rw-r--r-- | utils/c2l/cc.h | 1 | ||||
-rw-r--r-- | utils/data2s/data2s.c | 5 | ||||
-rw-r--r-- | utils/kc/peep.c | 5 | ||||
-rw-r--r-- | utils/kc/reg.c | 1 | ||||
-rw-r--r-- | utils/kc/txt.c | 1 | ||||
-rw-r--r-- | utils/lib/yaccpar | 4 | ||||
-rw-r--r-- | utils/libmach/5db.c | 6 | ||||
-rw-r--r-- | utils/mk/graph.c | 2 | ||||
-rw-r--r-- | utils/mk/mk.c | 2 | ||||
-rw-r--r-- | utils/mkfile | 2 | ||||
-rw-r--r-- | utils/qa/lex.c | 1 | ||||
-rw-r--r-- | utils/qc/peep.c | 5 | ||||
-rw-r--r-- | utils/ql/asm.c | 92 | ||||
-rw-r--r-- | utils/ql/l.h | 4 | ||||
-rw-r--r-- | utils/sqz/sqz.c | 2 | ||||
-rw-r--r-- | utils/tc/peep.c | 2 | ||||
-rw-r--r-- | utils/vc/peep.c | 2 | ||||
-rw-r--r-- | utils/vc/reg.c | 1 | ||||
-rw-r--r-- | utils/vl/obj.c | 1 | ||||
-rw-r--r-- | utils/vl/span.c | 1 | ||||
-rw-r--r-- | utils/yacc/yaccpar | 4 |
253 files changed, 4638 insertions, 1541 deletions
@@ -1,3 +1,81 @@ +20061219 + cmd(3) and thus os(1) change to separate standard output and error streams + all /emu/*/cmd.c change to account for that (original changes to devcmd.c and MacOSX/cmd.c courtesy Cibernet) +20061215 + replaced things like <???> because gcc annoyingly whines even with 1950's trigraphs off + libtk/textu.c: uninitialised field in boundary case + libtk/textw.c: possibly uninitialised value; leave unchanged + utils/ql/l.h: uchar as to ushort, because of extra ops +20061214 + added fopen to xml.m to allow bufio->sopen and others to be used +20061213 + added MacOSX/386 components +20061013 + updated /os/ip/lookbackmedium.c and /os/ip/rudp.c +20061021 + change /os/port/exportfs.c to allow negotiating up to 64k msize + (matching /emu/port/exportfs.c) +20060809 + /appl/lib/newns.b uses String->unquoted, if it can load it +20060803 + /libtk/textw.c: default page up/down scrolls 0.75 of a page (to give context); also allows fractional value +20060801 + /utils/data2s/data2s.c: allocate at least one linker byte to empty files to avoid complaints +20060715 + /appl/lib/pop3.b remove defaultserver(); update pop3(2) to remove references to /services + similarly update smtp(2) + avoid some boundary cases in /appl/charon/^(build.b layout.b) +20060625 + added caerwynj@gmail.com changes to /appl/acme/acme/mail/src/Mailpop3.b +20060622 + /appl/lib/sets*.b: correct op's implementation of 2r1101 +20060613 + added csv(2), /module/csv.m, /appl/lib/csv.b +20060608 + preliminary rfc822(2), /appl/lib/rfc822.b +20060605 + /appl/lib/chanfill.b: remove alt => * +20060601 + fix /appl/lib/dis.b to save the real array once read in +20060526 + /appl/lib/venti.b: fix g64's byte ordering [not that it is, or can be called yet] +20060524 + copy end fix to lib*/utfecpy.c +20060523 + w3c-uris(2): add a .copy() operation +20060518 + /Nt/386/include/lib9.h define _USE_32BIT_TIME_T and deprecate `deprecated' warnings +20060504 + remove use of HEAP_ALIGN from /*/port/devprof.c; change Heap.pad to Heap.hprof in /include/interp.h +20060426 + correct text and selection colours in wm/sh for loss-of-focus and holding modes +20060423 + add /appl/lib/w3c/uris.b w3c-uris(2) /module/uris.m +20060419 + /emu/port/devcmd.c: correct wakeup state for started command +20060412 + /appl/svc/webget include caerwyn's changes +20060411 + put `|| exit 1' after each (command-list) in the mkfiles, just for bash +20060410 + /appl/cmd/limbo/typecheck.b /limbo/typecheck.c - stop wrong warning wrt use of ref fn +20060313 + remembered to install cddb port from last year... cddb(7) +20060312 + /emu/Nt/win.c; #define windows names out of the way to remove IPoint etc + /emu/Nt/os.c, simplify osblock/osready and eliminate erendezvous + /emu/port/devcons.c, tug into line with /os/port, to prepare for single-window changes + echo ^U on CAN (ctrl-U) +20060311 + replace Limbo version of shutdown by sh script; it's still a bit silly +20060309 + /*/port/inferno.c: 0 or -1 return value from dial functions + /os/port/portmkfile: remove reference to ../kfs + /man/8/httpd document -a; /appl/svc/httpd/httpd.b + /libmp/port/mptouv.c sign extension fix from 9 + /module/keyring.m, /libinterp/ipint.c: add some bitwise operators + change (undocumented) /appl/cmd/test.b so that `host' mkfiles will work in Inferno + should probably change the mkfiles to replace it 20060303 /emu/Plan9/win.c replace ldepthof 20060302 diff --git a/FreeBSD/386/bin/data2c b/FreeBSD/386/bin/data2c Binary files differindex f755f8fa..edbc2664 100755 --- a/FreeBSD/386/bin/data2c +++ b/FreeBSD/386/bin/data2c diff --git a/FreeBSD/386/bin/mk b/FreeBSD/386/bin/mk Binary files differindex 766d6349..d484548c 100755 --- a/FreeBSD/386/bin/mk +++ b/FreeBSD/386/bin/mk diff --git a/FreeBSD/386/bin/yacc b/FreeBSD/386/bin/yacc Binary files differindex 7390e221..8b8bc277 100755 --- a/FreeBSD/386/bin/yacc +++ b/FreeBSD/386/bin/yacc diff --git a/Irix/mips/bin/mk b/Irix/mips/bin/mk Binary files differindex 6c822e2a..7e3cc0bf 100755 --- a/Irix/mips/bin/mk +++ b/Irix/mips/bin/mk diff --git a/Irix/mips/bin/mkext b/Irix/mips/bin/mkext Binary files differindex 2ea0ad21..e3997deb 100755 --- a/Irix/mips/bin/mkext +++ b/Irix/mips/bin/mkext diff --git a/Irix/mips/bin/yacc b/Irix/mips/bin/yacc Binary files differindex 46dabda6..90e87fde 100755 --- a/Irix/mips/bin/yacc +++ b/Irix/mips/bin/yacc @@ -16,9 +16,9 @@ licences, listed here in increasing order of liberality: The text of each licence can be found in lib/legal. Some portions of the software are subject to GPL and LGPL. -Through their `copyleft' clauses impose some degree of reciprocity in terms of (for instance) -making changes and additions available in source form if you distribute software -that is subject to those licences, but only to the extent the licences require. +Their `copyleft' clauses impose some degree of reciprocity; for instance, if you +make changes and additions to such software, and you also distribute the result, +you must make those changes and additions available in source form. Other portions are subject to the Lucent Public or Vita Nuova `free for all' licence and do not impose `copyleft' conditions. diff --git a/Linux/386/bin/data2c b/Linux/386/bin/data2c Binary files differindex 8bebd48a..6d037e94 100755 --- a/Linux/386/bin/data2c +++ b/Linux/386/bin/data2c diff --git a/Linux/386/bin/mk b/Linux/386/bin/mk Binary files differindex 792062b5..c1f23218 100755 --- a/Linux/386/bin/mk +++ b/Linux/386/bin/mk diff --git a/Linux/386/bin/mkext b/Linux/386/bin/mkext Binary files differnew file mode 100644 index 00000000..586a1ea8 --- /dev/null +++ b/Linux/386/bin/mkext diff --git a/Linux/386/bin/yacc b/Linux/386/bin/yacc Binary files differindex 396cd46e..31082cf1 100755 --- a/Linux/386/bin/yacc +++ b/Linux/386/bin/yacc diff --git a/Linux/arm/include/fpuctl.h b/Linux/arm/include/fpuctl.h new file mode 100644 index 00000000..7903c04b --- /dev/null +++ b/Linux/arm/include/fpuctl.h @@ -0,0 +1,52 @@ +/* + * Linux arm fpu support + * Mimic Plan9 floating point support + */ + +#include <fenv.h> + +static void +setfcr(ulong fcr) +{ +} + +static ulong +getfcr(void) +{ + ulong fcr = 0; + return fcr; +} + +static ulong +getfsr(void) +{ + ulong fsr = -1; + return fsr; +} + +static void +setfsr(ulong fsr) +{ +} + +/* FCR */ +#define FPINEX (1<<5) +#define FPUNFL ((1<<4)|(1<<1)) +#define FPOVFL (1<<3) +#define FPZDIV (1<<2) +#define FPINVAL (1<<0) +#define FPRNR (0<<10) +#define FPRZ (3<<10) +#define FPRPINF (2<<10) +#define FPRNINF (1<<10) +#define FPRMASK (3<<10) +#define FPPEXT (3<<8) +#define FPPSGL (0<<8) +#define FPPDBL (2<<8) +#define FPPMASK (3<<8) +/* FSR */ +#define FPAINEX FPINEX +#define FPAOVFL FPOVFL +#define FPAUNFL FPUNFL +#define FPAZDIV FPZDIV +#define FPAINVAL FPINVAL diff --git a/Linux/arm/include/lib9.h b/Linux/arm/include/lib9.h new file mode 100644 index 00000000..afb40f7b --- /dev/null +++ b/Linux/arm/include/lib9.h @@ -0,0 +1,497 @@ +/* define _BSD_SOURCE to use ISO C, POSIX, and 4.3BSD things. */ +#ifndef _BSD_SOURCE +#define _BSD_SOURCE +#endif +#define _LARGEFILE_SOURCE 1 +#define _LARGEFILE64_SOURCE 1 +#define _FILE_OFFSET_BITS 64 +#include <features.h> +#include <sys/types.h> +#include <stdlib.h> +#include <stdarg.h> +#define sync __os_sync +#include <unistd.h> +#undef sync +#include <errno.h> +#define __NO_STRING_INLINES +#include <string.h> +#include "math.h" +#include <fcntl.h> +#include <setjmp.h> +#include <float.h> +#include <endian.h> + +#define getwd infgetwd + +#ifndef EMU +typedef struct Proc Proc; +#endif + +/* + * math module dtoa + * #define __LITTLE_ENDIAN /usr/include/endian.h under linux + */ + +#define nil ((void*)0) + +typedef unsigned char uchar; +typedef signed char schar; +typedef unsigned short Rune; +typedef long long int vlong; +typedef unsigned long long int uvlong; +typedef unsigned int u32int; +typedef unsigned int mpdigit; /* for /sys/include/mp.h */ +typedef unsigned short u16int; +typedef unsigned char u8int; +typedef unsigned long uintptr; + +#define USED(x) if(x){}else{} +#define SET(x) + +#undef nelem +#define nelem(x) (sizeof(x)/sizeof((x)[0])) +#undef offsetof +#define offsetof(s, m) (ulong)(&(((s*)0)->m)) +#undef assert +#define assert(x) if(x){}else _assert("x") + +/* + * most mem and string routines are declared by ANSI/POSIX files above + */ + +extern char* strecpy(char*, char*, char*); +extern char* strdup(const char*); +extern int cistrncmp(char*, char*, int); +extern int cistrcmp(char*, char*); +extern char* cistrstr(char*, char*); +extern int tokenize(char*, char**, int); + +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); + +/* + * malloc + */ +extern void* malloc(size_t); +extern void* mallocz(ulong, int); +extern void free(void*); +extern ulong msize(void*); +extern void* calloc(size_t, size_t); +extern void* realloc(void*, size_t); +extern void setmalloctag(void*, ulong); +extern void setrealloctag(void*, ulong); +extern ulong getmalloctag(void*); +extern ulong getrealloctag(void*); +extern void* malloctopoolblock(void*); + +/* + * print routines + */ +typedef struct Fmt Fmt; +struct Fmt{ + uchar 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; + ulong 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, + + FmtFlag = FmtByte << 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 Rune* runefmtstrflush(Fmt*); + +extern int fmtinstall(int, int (*)(Fmt*)); +extern int dofmt(Fmt*, char*); +extern int dorfmt(Fmt*, Rune*); +extern int fmtprint(Fmt*, char*, ...); +extern int fmtvprint(Fmt*, char*, va_list); +extern int fmtrune(Fmt*, int); +extern int fmtstrcpy(Fmt*, char*); +extern int fmtrunestrcpy(Fmt*, Rune*); +/* + * error string for %r + * supplied on per os basis, not part of fmt library + */ +extern int errfmt(Fmt *f); + +/* + * quoted strings + */ +extern char *unquotestrdup(char*); +extern Rune *unquoterunestrdup(Rune*); +extern char *quotestrdup(char*); +extern Rune *quoterunestrdup(Rune*); +extern int quotestrfmt(Fmt*); +extern int quoterunestrfmt(Fmt*); +extern void quotefmtinstall(void); +extern int (*doquote)(int); + +/* + * random number + */ +extern ulong truerand(void); +extern ulong ntruerand(ulong); + +/* + * math + */ +extern int isNaN(double); +extern int isInf(double, int); + +/* + * Time-of-day + */ + +typedef struct Tm Tm; +struct Tm { + int sec; + int min; + int hour; + int mday; + int mon; + int year; + int wday; + int yday; + char zone[4]; + int tzoff; +}; +extern vlong osnsec(void); +#define nsec osnsec + +/* + * one-of-a-kind + */ +extern void _assert(char*); +extern double charstod(int(*)(void*), void*); +extern char* cleanname(char*); +//extern ulong getcallerpc(void*); +extern int getfields(char*, char**, int, int, char*); +extern char* getuser(void); +extern char* getwd(char*, int); +extern double ipow10(int); +#define pow10 infpow10 +extern double pow10(int); +extern vlong strtoll(const char*, char**, int); +extern uvlong strtoull(const char*, char**, int); +extern void sysfatal(char*, ...); +extern int dec64(uchar*, int, char*, int); +extern int enc64(char*, int, uchar*, int); +extern int dec32(uchar*, int, char*, int); +extern int enc32(char*, int, uchar*, int); +extern int dec16(uchar*, int, char*, int); +extern int enc16(char*, int, uchar*, int); +extern int encodefmt(Fmt*); + +/* + * synchronization + */ +typedef +struct Lock { + ulong val; + int pid; +} Lock; + +extern ulong _tas(ulong*); + +extern void lock(Lock*); +extern void unlock(Lock*); +extern int canlock(Lock*); + +typedef struct QLock QLock; +struct QLock +{ + Lock use; /* to access Qlock structure */ + Proc *head; /* next process waiting for object */ + Proc *tail; /* last process waiting for object */ + int locked; /* flag */ +}; + +extern void qlock(QLock*); +extern void qunlock(QLock*); +extern int canqlock(QLock*); +extern void _qlockinit(ulong (*)(ulong, ulong)); /* called only by the thread library */ + +typedef +struct RWLock +{ + Lock l; /* Lock modify lock */ + QLock x; /* Mutual exclusion lock */ + QLock k; /* Lock for waiting writers */ + int readers; /* Count of readers in lock */ +} RWLock; + +extern int canrlock(RWLock*); +extern int canwlock(RWLock*); +extern void rlock(RWLock*); +extern void runlock(RWLock*); +extern void wlock(RWLock*); +extern void wunlock(RWLock*); + +/* + * network dialing + */ +#define NETPATHLEN 40 + +/* + * system calls + * + */ +#define STATMAX 65535U /* max length of machine-independent stat structure */ +#define DIRMAX (sizeof(Dir)+STATMAX) /* max length of Dir structure */ +#define ERRMAX 128 /* max length of error string */ + +#define MORDER 0x0003 /* mask for bits defining order of mounting */ +#define MREPL 0x0000 /* mount replaces object */ +#define MBEFORE 0x0001 /* mount goes before others in union directory */ +#define MAFTER 0x0002 /* mount goes after others in union directory */ +#define MCREATE 0x0004 /* permit creation in mounted directory */ +#define MCACHE 0x0010 /* cache some data */ +#define MMASK 0x0017 /* all bits on */ + +#define OREAD 0 /* open for read */ +#define OWRITE 1 /* write */ +#define ORDWR 2 /* read and write */ +#define OEXEC 3 /* execute, == read but check execute permission */ +#define OTRUNC 16 /* or'ed in (except for exec), truncate file first */ +#define OCEXEC 32 /* or'ed in, close on exec */ +#define ORCLOSE 64 /* or'ed in, remove on close */ +#define OEXCL 0x1000 /* or'ed in, exclusive use (create only) */ + +#define AEXIST 0 /* accessible: exists */ +#define AEXEC 1 /* execute access */ +#define AWRITE 2 /* write access */ +#define AREAD 4 /* read access */ + +/* bits in Qid.type */ +#define QTDIR 0x80 /* type bit for directories */ +#define QTAPPEND 0x40 /* type bit for append only files */ +#define QTEXCL 0x20 /* type bit for exclusive use files */ +#define QTMOUNT 0x10 /* type bit for mounted channel */ +#define QTAUTH 0x08 /* type bit for authentication file */ +#define QTFILE 0x00 /* plain file */ + +/* bits in Dir.mode */ +#define DMDIR 0x80000000 /* mode bit for directories */ +#define DMAPPEND 0x40000000 /* mode bit for append only files */ +#define DMEXCL 0x20000000 /* mode bit for exclusive use files */ +#define DMMOUNT 0x10000000 /* mode bit for mounted channel */ +#define DMAUTH 0x08000000 /* mode bit for authentication file */ +#define DMREAD 0x4 /* mode bit for read permission */ +#define DMWRITE 0x2 /* mode bit for write permission */ +#define DMEXEC 0x1 /* mode bit for execute permission */ + +typedef +struct Qid +{ + uvlong path; + ulong vers; + uchar type; +} Qid; + +typedef +struct Dir { + /* system-modified data */ + ushort type; /* server type */ + uint dev; /* server subtype */ + /* file data */ + Qid qid; /* unique id from server */ + ulong mode; /* permissions */ + ulong atime; /* last read time */ + ulong mtime; /* last write time */ + vlong length; /* file length */ + char *name; /* last element of path */ + char *uid; /* owner name */ + char *gid; /* group name */ + char *muid; /* last modifier name */ +} Dir; + +extern Dir* dirstat(char*); +extern Dir* dirfstat(int); +extern int dirwstat(char*, Dir*); +extern int dirfwstat(int, Dir*); +extern long dirread(int, Dir**); +extern void nulldir(Dir*); +extern long dirreadall(int, Dir**); + +typedef +struct Waitmsg +{ + int pid; /* of loved one */ + ulong time[3]; /* of loved one & descendants */ + char *msg; +} Waitmsg; + +extern void _exits(char*); + +extern void exits(char*); +extern int create(char*, int, int); +extern int errstr(char*, uint); + +extern void perror(const char*); +extern long readn(int, void*, long); +extern int remove(const char*); +extern void rerrstr(char*, uint); +extern vlong seek(int, vlong, int); +extern int segflush(void*, ulong); +extern void werrstr(char*, ...); + +extern char *argv0; +#define ARGBEGIN for((argv0||(argv0=*argv)),argv++,argc--;\ + argv[0] && argv[0][0]=='-' && argv[0][1];\ + argc--, argv++) {\ + char *_args, *_argt;\ + Rune _argc;\ + _args = &argv[0][1];\ + if(_args[0]=='-' && _args[1]==0){\ + argc--; argv++; break;\ + }\ + _argc = 0;\ + while(*_args && (_args += chartorune(&_argc, _args)))\ + switch(_argc) +#define ARGEND SET(_argt);USED(_argt);USED(_argc); USED(_args);}USED(argv); USED(argc); +#define ARGF() (_argt=_args, _args="",\ + (*_argt? _argt: argv[1]? (argc--, *++argv): 0)) +#define EARGF(x) (_argt=_args, _args="",\ + (*_argt? _argt: argv[1]? (argc--, *++argv): ((x), abort(), (char*)0))) + +#define ARGC() _argc + +/* + * Extensions for Inferno to basic libc.h + */ + +#define setbinmode() + +/* need the inline because the link register is not saved in a known location */ +static __inline ulong getcallerpc(void* dummy) { + ulong lr; + __asm__( "mov %0, %%lr;" + : "=r" (lr) + ); + return lr; +} + +/* + * Extensions for emu kernel emulation + */ +#ifdef EMU + +/* + * This structure must agree with FPsave and FPrestore asm routines + */ +typedef struct FPU FPU; +struct FPU +{ + uchar env[28]; +}; + +/* + * Later versions of Linux seemed to need large stack for gethostbyname() + * so we had this at 128k, which is excessive. More recently, we've + * reduced it again after testing stack usage by gethostbyname. + */ +#define KSTACK (16 * 1024) + +static __inline Proc *getup(void) { + Proc* p; + __asm__( "mov %0, %%sp;" + : "=r" (p) + ); + return *(Proc **)((unsigned long)p & ~(KSTACK - 1)); +}; + +#define up (getup()) + +typedef sigjmp_buf osjmpbuf; +#define ossetjmp(buf) sigsetjmp(buf, 1) + +#endif diff --git a/MacOSX/README b/MacOSX/README index 3fe0c7fc..6b450e6a 100644 --- a/MacOSX/README +++ b/MacOSX/README @@ -1,3 +1,9 @@ +This file is of historical interest only, but serves to note that +much of the work of the MacOSX ports was originally done by Corpus Callosum. +Bugs to support@vitanuova.com, though. + +March 2006: initial MacOSX 10.4/x86 port + 12-Dec-2003 Emu can use wm with Apple's X11R6 again. @@ -63,4 +69,4 @@ Some of the base libraries and utils will have *.pbproj files which were used to -"Mac OS X" and "Mac OS X Server" are trade marks of Apple Computer, Inc.
\ No newline at end of file +"Mac OS X" and "Mac OS X Server" are trade marks of Apple Computer, Inc. diff --git a/MacOSX/power/bin/data2c b/MacOSX/power/bin/data2c Binary files differindex 04622c35..079d983d 100755 --- a/MacOSX/power/bin/data2c +++ b/MacOSX/power/bin/data2c diff --git a/MacOSX/power/bin/mk b/MacOSX/power/bin/mk Binary files differindex 2be3415d..1f0818ae 100755 --- a/MacOSX/power/bin/mk +++ b/MacOSX/power/bin/mk diff --git a/MacOSX/power/bin/yacc b/MacOSX/power/bin/yacc Binary files differindex fbb0bc16..c0cf3b73 100755 --- a/MacOSX/power/bin/yacc +++ b/MacOSX/power/bin/yacc diff --git a/Nt/386/bin/c2l.exe b/Nt/386/bin/c2l.exe Binary files differindex 998edf79..173001da 100755 --- a/Nt/386/bin/c2l.exe +++ b/Nt/386/bin/c2l.exe diff --git a/Nt/386/bin/cp.exe b/Nt/386/bin/cp.exe Binary files differindex 9a314722..c8a8a7b1 100755 --- a/Nt/386/bin/cp.exe +++ b/Nt/386/bin/cp.exe diff --git a/Nt/386/bin/data2c.exe b/Nt/386/bin/data2c.exe Binary files differindex fe2a7819..310d0ebc 100755 --- a/Nt/386/bin/data2c.exe +++ b/Nt/386/bin/data2c.exe diff --git a/Nt/386/bin/echo.exe b/Nt/386/bin/echo.exe Binary files differindex 37e5def9..2d21d18e 100755 --- a/Nt/386/bin/echo.exe +++ b/Nt/386/bin/echo.exe diff --git a/Nt/386/bin/format.exe b/Nt/386/bin/format.exe Binary files differindex 30ab07e1..abd5d805 100755 --- a/Nt/386/bin/format.exe +++ b/Nt/386/bin/format.exe diff --git a/Nt/386/bin/mkdir.exe b/Nt/386/bin/mkdir.exe Binary files differindex 34810a39..2333454b 100755 --- a/Nt/386/bin/mkdir.exe +++ b/Nt/386/bin/mkdir.exe diff --git a/Nt/386/bin/mkext.exe b/Nt/386/bin/mkext.exe Binary files differindex c3bc6d0e..6082dea3 100755 --- a/Nt/386/bin/mkext.exe +++ b/Nt/386/bin/mkext.exe diff --git a/Nt/386/bin/mv.exe b/Nt/386/bin/mv.exe Binary files differindex 14d1955f..a0f1b4d0 100755 --- a/Nt/386/bin/mv.exe +++ b/Nt/386/bin/mv.exe diff --git a/Nt/386/bin/rm.exe b/Nt/386/bin/rm.exe Binary files differindex cce5adbf..49d67143 100755 --- a/Nt/386/bin/rm.exe +++ b/Nt/386/bin/rm.exe diff --git a/Nt/386/bin/sed.exe b/Nt/386/bin/sed.exe Binary files differindex 5926b70c..07fad4c2 100755 --- a/Nt/386/bin/sed.exe +++ b/Nt/386/bin/sed.exe diff --git a/Nt/386/bin/test.exe b/Nt/386/bin/test.exe Binary files differindex 5f88b8d3..20af903c 100755 --- a/Nt/386/bin/test.exe +++ b/Nt/386/bin/test.exe diff --git a/Nt/386/bin/tr.exe b/Nt/386/bin/tr.exe Binary files differindex b653c3dd..0e5e187c 100755 --- a/Nt/386/bin/tr.exe +++ b/Nt/386/bin/tr.exe diff --git a/Nt/386/bin/yacc.exe b/Nt/386/bin/yacc.exe Binary files differindex 0a833692..4a055df9 100755 --- a/Nt/386/bin/yacc.exe +++ b/Nt/386/bin/yacc.exe diff --git a/Nt/386/include/lib9.h b/Nt/386/include/lib9.h index 75dea8cc..4f66302a 100755 --- a/Nt/386/include/lib9.h +++ b/Nt/386/include/lib9.h @@ -1,4 +1,5 @@ #define _POSIX_SOURCE +#define _USE_32BIT_TIME_T #include <stdlib.h> #include <stdarg.h> #include <errno.h> @@ -34,8 +35,9 @@ typedef struct Proc Proc; * 4090 different volatile quals * 4554 operator precedence * 4146 unary - on unsigned type + * 4996 `deprecated' functions: they often suggest non-portable replacements */ -#pragma warning( disable : 4305 4244 4102 4761 4018 4245 4244 4068 4090 4554 4146) +#pragma warning( disable : 4305 4244 4102 4761 4018 4245 4244 4068 4090 4554 4146 4996) #define nil ((void*)0) diff --git a/Solaris/sparc/bin/data2c b/Solaris/sparc/bin/data2c Binary files differindex ceaab39e..f886c894 100755 --- a/Solaris/sparc/bin/data2c +++ b/Solaris/sparc/bin/data2c diff --git a/Solaris/sparc/bin/mk b/Solaris/sparc/bin/mk Binary files differindex a30757c1..7120627d 100755 --- a/Solaris/sparc/bin/mk +++ b/Solaris/sparc/bin/mk diff --git a/Solaris/sparc/bin/mkext b/Solaris/sparc/bin/mkext Binary files differindex 7c51ccbd..34a5424b 100755 --- a/Solaris/sparc/bin/mkext +++ b/Solaris/sparc/bin/mkext diff --git a/Solaris/sparc/bin/yacc b/Solaris/sparc/bin/yacc Binary files differindex 15ac558a..c1e33fef 100755 --- a/Solaris/sparc/bin/yacc +++ b/Solaris/sparc/bin/yacc diff --git a/acme/mail/Mailpop3.dis b/acme/mail/Mailpop3.dis Binary files differindex 256da17b..41a7de3f 100644 --- a/acme/mail/Mailpop3.dis +++ b/acme/mail/Mailpop3.dis diff --git a/appl/acme/acme/mail/src/Mailpop3.b b/appl/acme/acme/mail/src/Mailpop3.b index f267d737..4189cacf 100644 --- a/appl/acme/acme/mail/src/Mailpop3.b +++ b/appl/acme/acme/mail/src/Mailpop3.b @@ -648,7 +648,7 @@ nrunes(s : array of byte, nb : int) : int n = 0; for(i=0; i<nb; n++) { - (r, b, ok) := byte2char(s, i); + (nil, b, ok) := byte2char(s, i); if (!ok) error("help needed in nrunes()"); i += b; @@ -869,7 +869,7 @@ Win.wreadall(w : self ref Win) : string return s; } -None,Unknown,Ignore,CC,From,ReplyTo,Sender,Subject,Re,To, Date : con iota; +None, Unknown, Ignore, CC, From, ReplyTo, Sender, Subject, Re, To, Date, Received : con iota; NHeaders : con 200; Hdrs : adt { @@ -887,6 +887,7 @@ hdrs := array[NHeaders+1] of { Hdrs ( "Re:", Re ), Hdrs ( "To:", To ), Hdrs ( "Date:", Date), + Hdrs ( "Received:", Received), * => Hdrs ( "", 0 ), }; @@ -967,11 +968,14 @@ Mesg.read(b : ref Box) : ref Mesg s : string; n, typex : int; - s = b.readline(); - n = len s; - if(n <= 0) - return nil; - + for(;;){ + s = b.readline(); + n = len s; + if(n <= 0) + return nil; + if(n >= 5 && (s[0:5] == "From:" || s[0:5] == "From ")) + break; + } { if(n < 5 || (s[0:5] !="From " && s[0:5] != "From:")) raise("e"); @@ -1262,7 +1266,7 @@ Mesg.command(m : self ref Mesg, s : string) : int } if(len s >= 4 && s[0:4] == "Save"){ s = s[4:]; - while(s[0]==' ' || s[0]=='\t' || s[0]=='\n') + while(len s > 0 && (s[0]==' ' || s[0]=='\t' || s[0]=='\n')) s = s[1:]; if(s == nil) m.save("stored"); diff --git a/appl/charon/build.b b/appl/charon/build.b index cf3a0b09..92ba90aa 100644 --- a/appl/charon/build.b +++ b/appl/charon/build.b @@ -2772,6 +2772,10 @@ Tablerow.new(align: Align, bg: Background, flags: byte) : ref Tablerow Tablecell.new(cellid, rowspan, colspan: int, align: Align, wspec: Dimen, hspec: int, bg: Background, flags: byte) : ref Tablecell { + if(colspan < 0) + colspan = 0; + if(rowspan < 0) + rowspan = 0; return ref Tablecell(cellid, nil, -1, # content, layid rowspan, colspan, align, flags, wspec, hspec, bg, diff --git a/appl/charon/http.b b/appl/charon/http.b index 27c7d695..d1208091 100644 --- a/appl/charon/http.b +++ b/appl/charon/http.b @@ -478,7 +478,7 @@ writereq(nc: ref Netconn, bs: ref ByteSource) rv = sys->write(nc.conn.dfd, req.body, len req.body); } if(rv < 0) { - err = "error writing to host"; + err = sys->sprint("error writing to host: %r"); #constate("writereq", nc.conn); } if(err != "") { diff --git a/appl/charon/layout.b b/appl/charon/layout.b index 6db8f619..ee5c9064 100644 --- a/appl/charon/layout.b +++ b/appl/charon/layout.b @@ -2249,6 +2249,8 @@ drawtable(f : ref Frame, parentlay: ref Lay, torigin: Point, tab: ref Table) clay := f.sublays[c.layid]; if(clay == nil) continue; + if(c.col >= len tab.cols) + continue; cx := x + tab.cols[c.col].pos.x; cy := y + tab.rows[c.row].pos.y; wd := cellwidth(tab, c, hsep); @@ -3304,6 +3306,8 @@ Control.scrollset(c: self ref Control, v1, v2, vmax, nsteps, draw: int) breadth = sc.r.max.y - sc.r.min.y; } l := length - (2*breadth + MINSCR); + if(l <= 0) + l = 1; if(l < 0) CU->raisex("EXInternal: negative scrollbar trough"); sc.top = l*v1/vmax; diff --git a/appl/cmd/fortune.b b/appl/cmd/fortune.b index 7368e992..daf48185 100755 --- a/appl/cmd/fortune.b +++ b/appl/cmd/fortune.b @@ -52,7 +52,7 @@ init(nil: ref Draw->Context, args: list of string) if(ix != nil){ (nil, ixbuf) := sys->fstat(ix); (nil, fbuf) := sys->fstat(f.fd); - if(fbuf.mtime > ixbuf.mtime){ + if(fbuf.mtime >= ixbuf.mtime){ ix = nil; nix = sys->create(findex, Sys->OWRITE, 8r666); }else @@ -71,7 +71,7 @@ init(nil: ref Draw->Context, args: list of string) }else{ rand->init(truerand()); offs := 0; - g := bufio->fopen(ix, Bufio->ORDWR); + g := bufio->fopen(nix, Bufio->ORDWR); for(i := 1;; i++){ if(nix != nil) offs = int f.offset(); diff --git a/appl/cmd/limbo/com.b b/appl/cmd/limbo/com.b index bc977d0a..c14cd923 100644 --- a/appl/cmd/limbo/com.b +++ b/appl/cmd/limbo/com.b @@ -1140,7 +1140,7 @@ rewritecomm(n, comm, slot: ref Node): (ref Node, ref Node) } } if(n.right == comm && n.op == Oas && comm.op == Orcv - && sumark(n.left).addable < Rcant) + && sumark(n.left).addable < Rcant && (n.left.op != Oname || n.left.decl != nildecl)) adr = n.left; if(adr != nil){ p := genrawop(comm.left.src, ILEA, adr, nil, slot); diff --git a/appl/cmd/limbo/ecom.b b/appl/cmd/limbo/ecom.b index 978882ab..b8ca030f 100644 --- a/appl/cmd/limbo/ecom.b +++ b/appl/cmd/limbo/ecom.b @@ -557,7 +557,7 @@ sumark(n: ref Node): ref Node if(int n.flags & FNPTR){ if(int n.flags == FNPTR2) n.addable = Roff; - else if(int n.flags == FNPTR2|FNPTRN) + else if(int n.flags == (FNPTR2|FNPTRN)) n.addable = Rnoff; } else diff --git a/appl/cmd/limbo/lex.b b/appl/cmd/limbo/lex.b index ae87b4a9..0aca4925 100644 --- a/appl/cmd/limbo/lex.b +++ b/appl/cmd/limbo/lex.b @@ -95,6 +95,7 @@ keywords := array [] of Keywd("continue", Lcont), Keywd("cyclic", Lcyclic), Keywd("do", Ldo), + Keywd("dynamic", Ldynamic), Keywd("else", Lelse), Keywd("exception", Lexcept), Keywd("exit", Lexit), diff --git a/appl/cmd/limbo/limbo.b b/appl/cmd/limbo/limbo.b index c8f51779..969dbf8b 100644 --- a/appl/cmd/limbo/limbo.b +++ b/appl/cmd/limbo/limbo.b @@ -93,6 +93,7 @@ Lexit: con 57414; Lspawn: con 57415; Lraise: con 57416; Lfix: con 57417; +Ldynamic: con 57418; }; @@ -171,7 +172,7 @@ YYEOFCODE: con 1; YYERRCODE: con 2; YYMAXDEPTH: con 200; -#line 1630 "limbo.y" +#line 1631 "limbo.y" include "keyring.m"; @@ -526,7 +527,7 @@ yyexca := array[] of {-1, 1, 39, 88, 50, 62, 54, 88, - 98, 62, + 99, 62, -2, 252, -1, 211, 59, 29, @@ -554,7 +555,7 @@ yyexca := array[] of {-1, 1, -2, 0, -1, 380, 50, 62, - 98, 62, + 99, 62, -2, 252, -1, 381, 72, 175, @@ -601,7 +602,7 @@ yyexca := array[] of {-1, 1, -2, 113, -1, 452, 71, 279, - 98, 279, + 99, 279, -2, 163, -1, 469, 72, 175, @@ -614,7 +615,7 @@ yyexca := array[] of {-1, 1, -2, 0, -1, 486, 50, 126, - 98, 126, + 99, 126, -2, 239, -1, 491, 71, 276, @@ -715,7 +716,7 @@ yyexca := array[] of {-1, 1, 50, 62, 56, 171, 62, 171, - 98, 62, + 99, 62, -2, 252, }; YYNPROD: con 284; @@ -728,88 +729,88 @@ yyact := array[] of { 379, 591, 453, 364, 505, 384, 412, 310, 369, 314, 359, 451, 449, 185, 84, 83, 432, 298, 270, 15, 8, 49, 213, 102, 320, 12, 42, 110, 48, 78, - 79, 80, 4, 35, 198, 51, 23, 459, 363, 6, - 458, 3, 6, 544, 486, 491, 365, 14, 382, 21, - 14, 353, 400, 293, 350, 423, 225, 285, 118, 330, - 286, 226, 223, 46, 31, 112, 465, 11, 105, 517, - 566, 599, 308, 186, 164, 165, 166, 167, 168, 169, - 170, 171, 172, 173, 174, 175, 176, 43, 117, 309, - 182, 183, 184, 349, 71, 10, 349, 205, 10, 208, - 93, 286, 286, 422, 32, 37, 119, 114, 40, 294, - 349, 294, 32, 585, 44, 286, 119, 428, 427, 426, - 547, 430, 429, 431, 231, 232, 233, 234, 235, 236, - 237, 238, 239, 240, 241, 242, 485, 244, 245, 246, + 79, 80, 4, 35, 198, 51, 23, 544, 363, 6, + 423, 3, 6, 486, 459, 382, 365, 14, 458, 21, + 14, 353, 350, 293, 285, 491, 118, 225, 400, 330, + 286, 226, 31, 223, 46, 112, 465, 11, 105, 517, + 420, 419, 418, 186, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 43, 117, 422, + 182, 183, 184, 599, 71, 10, 286, 205, 10, 208, + 93, 349, 286, 601, 119, 349, 32, 114, 40, 349, + 294, 32, 294, 286, 44, 119, 428, 427, 426, 308, + 430, 429, 431, 585, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 309, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 186, - 6, 483, 273, 230, 482, 22, 481, 438, 14, 22, - 271, 424, 267, 210, 5, 409, 407, 565, 279, 187, - 513, 410, 284, 87, 420, 419, 418, 228, 94, 288, - 85, 312, 311, 90, 289, 99, 269, 415, 217, 202, + 6, 547, 273, 230, 37, 22, 194, 195, 14, 22, + 271, 485, 267, 210, 5, 483, 482, 565, 279, 481, + 513, 410, 284, 87, 438, 559, 424, 228, 409, 288, + 85, 407, 94, 90, 289, 99, 269, 415, 217, 202, 5, 415, 47, 92, 82, 22, 209, 26, 303, 25, - 212, 19, 24, 218, 229, 508, 10, 354, 96, 601, - 98, 95, 100, 595, 101, 88, 89, 86, 572, 194, - 195, 17, 87, 557, 553, 18, 297, 19, 536, 85, - 525, 77, 90, 313, 326, 305, 490, 13, 512, 112, - 323, 318, 92, 82, 468, 207, 399, 17, 87, 383, - 498, 18, 215, 23, 479, 85, 316, 467, 90, 6, - 398, 2, 500, 13, 88, 89, 86, 14, 92, 82, - 194, 195, 361, 186, 43, 282, 219, 340, 194, 195, - 77, 114, 193, 211, 487, 499, 338, 182, 500, 559, - 88, 89, 86, 336, 194, 195, 488, 535, 87, 324, - 341, 44, 87, 325, 580, 85, 77, 579, 90, 85, + 212, 19, 24, 218, 229, 566, 10, 354, 96, 595, + 98, 95, 100, 572, 101, 88, 89, 86, 557, 194, + 195, 17, 87, 312, 311, 18, 297, 19, 187, 85, + 553, 77, 90, 313, 326, 305, 536, 13, 512, 112, + 323, 318, 92, 82, 525, 207, 490, 17, 87, 468, + 399, 18, 383, 23, 508, 85, 316, 215, 90, 6, + 498, 2, 500, 13, 88, 89, 86, 14, 92, 82, + 194, 195, 479, 186, 43, 467, 398, 340, 194, 195, + 77, 114, 193, 361, 282, 499, 338, 182, 500, 535, + 88, 89, 86, 336, 194, 195, 219, 530, 87, 211, + 341, 44, 87, 324, 580, 85, 77, 325, 90, 85, 381, 348, 90, 206, 19, 10, 358, 357, 92, 82, - 214, 393, 92, 82, 604, 33, 389, 387, 391, 448, + 579, 393, 92, 82, 604, 214, 389, 387, 391, 448, 614, 194, 195, 402, 45, 539, 194, 195, 18, 392, 88, 89, 86, 356, 88, 89, 86, 321, 194, 195, - 192, 194, 195, 403, 404, 530, 77, 281, 317, 108, - 77, 416, 493, 19, 19, 421, 436, 495, 612, 186, - 301, 385, 604, 435, 564, 437, 507, 216, 603, 493, - 434, 441, 439, 115, 115, 600, 562, 116, 116, 452, - 543, 340, 183, 444, 443, 504, 414, 45, 316, 493, - 22, 18, 493, 480, 493, 597, 336, 493, 588, 70, - 574, 493, 63, 555, 540, 73, 473, 494, 469, 433, - 478, 442, 476, 76, 75, 69, 68, 74, 291, 18, - 54, 55, 62, 60, 61, 64, 87, 290, 268, 452, - 157, 91, 120, 85, 91, 104, 90, 65, 66, 67, - 159, 489, 507, 39, 497, 103, 92, 82, 194, 195, - 594, 510, 186, 77, 568, 477, 168, 487, 36, 518, - 523, 466, 522, 515, 516, 511, 406, 417, 88, 89, - 86, 87, 452, 527, 523, 529, 528, 408, 85, 329, - 533, 90, 593, 526, 77, 91, 224, 91, 532, 537, - 106, 92, 82, 34, 545, 91, 401, 177, 546, 541, - 523, 331, 552, 397, 335, 556, 91, 592, 299, 554, - 332, 300, 201, 88, 89, 86, 158, 200, 161, 197, - 162, 163, 560, 563, 441, 316, 179, 446, 445, 77, - 160, 159, 570, 328, 227, 577, 569, 575, 571, 573, - 81, 477, 181, 97, 177, 346, 180, 523, 178, 583, - 345, 41, 584, 203, 577, 606, 587, 138, 139, 140, - 137, 135, 586, 72, 561, 548, 386, 327, 414, 222, - 596, 221, 549, 73, 598, 477, 475, 577, 602, 605, - 91, 76, 75, 45, 607, 74, 611, 18, 474, 471, - 613, 425, 137, 135, 196, 477, 199, 91, 39, 188, - 91, 91, 19, 91, 204, 524, 243, 360, 538, 307, - 91, 183, 168, 287, 29, 220, 141, 142, 138, 139, - 140, 137, 135, 368, 91, 91, 30, 121, 1, 464, - 272, 274, 315, 477, 123, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, 134, 136, 542, 156, 155, + 192, 385, 72, 403, 404, 495, 77, 33, 317, 108, + 77, 416, 73, 19, 19, 421, 436, 301, 281, 186, + 76, 75, 45, 435, 74, 437, 18, 216, 487, 493, + 434, 441, 439, 115, 115, 612, 564, 116, 116, 452, + 488, 340, 183, 444, 443, 507, 414, 45, 316, 604, + 562, 18, 493, 543, 493, 603, 336, 493, 600, 70, + 597, 493, 63, 588, 504, 73, 473, 574, 469, 22, + 478, 442, 476, 76, 75, 69, 68, 74, 480, 18, + 54, 55, 62, 60, 61, 64, 87, 433, 291, 452, + 290, 91, 268, 85, 91, 157, 90, 65, 66, 67, + 120, 489, 493, 104, 497, 493, 92, 82, 555, 540, + 594, 494, 186, 77, 159, 477, 168, 194, 195, 103, + 523, 507, 522, 515, 516, 511, 406, 510, 88, 89, + 86, 87, 452, 527, 523, 529, 528, 487, 85, 518, + 533, 90, 593, 526, 77, 91, 39, 91, 532, 537, + 466, 92, 82, 417, 545, 91, 408, 568, 546, 541, + 523, 36, 552, 329, 224, 556, 91, 592, 299, 554, + 106, 300, 34, 88, 89, 86, 158, 401, 161, 397, + 162, 163, 560, 563, 441, 316, 335, 332, 201, 77, + 160, 159, 570, 200, 197, 577, 569, 575, 571, 573, + 81, 477, 177, 97, 181, 179, 331, 523, 180, 583, + 446, 177, 584, 445, 577, 178, 587, 141, 142, 138, + 139, 140, 137, 135, 561, 328, 227, 346, 414, 345, + 596, 41, 203, 606, 598, 477, 586, 577, 602, 605, + 91, 548, 386, 327, 607, 222, 611, 221, 549, 475, + 613, 474, 471, 425, 196, 477, 199, 91, 137, 135, + 91, 91, 39, 91, 204, 138, 139, 140, 137, 135, + 91, 183, 168, 188, 19, 220, 29, 27, 524, 243, + 360, 538, 307, 287, 91, 91, 368, 121, 30, 28, + 1, 464, 272, 477, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 136, 274, 156, 155, 154, 153, 152, 151, 149, 150, 145, 146, 147, 148, - 144, 143, 141, 142, 138, 139, 140, 137, 135, 582, - 343, 581, 413, 503, 502, 590, 27, 589, 91, 144, - 143, 141, 142, 138, 139, 140, 137, 135, 28, 283, - 16, 411, 306, 355, 91, 9, 551, 550, 521, 520, - 91, 7, 450, 337, 266, 506, 292, 371, 109, 295, - 296, 107, 113, 111, 20, 87, 38, 0, 0, 199, - 0, 91, 85, 0, 0, 90, 0, 99, 342, 0, - 0, 91, 91, 319, 322, 92, 82, 0, 0, 0, - 0, 87, 0, 0, 0, 91, 91, 0, 85, 91, - 96, 90, 98, 95, 0, 0, 0, 88, 89, 86, - 0, 92, 82, 0, 0, 0, 0, 0, 0, 0, - 0, 87, 282, 77, 0, 0, 0, 0, 85, 0, - 0, 90, 0, 88, 89, 86, 0, 333, 91, 0, - 455, 92, 82, 0, 0, 0, 0, 91, 0, 77, - 0, 91, 0, 347, 0, 50, 91, 0, 91, 351, - 0, 0, 0, 88, 89, 86, 0, 91, 0, 0, - 52, 53, 454, 91, 0, 0, 59, 72, 0, 77, + 144, 143, 141, 142, 138, 139, 140, 137, 135, 315, + 343, 542, 582, 581, 413, 503, 502, 590, 91, 144, + 143, 141, 142, 138, 139, 140, 137, 135, 589, 283, + 16, 411, 306, 355, 91, 9, 551, 87, 550, 521, + 91, 520, 7, 450, 85, 337, 292, 90, 266, 295, + 296, 506, 371, 109, 107, 87, 113, 92, 82, 199, + 111, 91, 85, 20, 38, 90, 0, 99, 282, 342, + 0, 91, 91, 319, 322, 92, 82, 0, 0, 88, + 89, 86, 0, 0, 0, 91, 91, 0, 0, 91, + 96, 0, 98, 95, 0, 77, 87, 88, 89, 86, + 0, 0, 0, 85, 0, 0, 90, 0, 0, 0, + 0, 0, 0, 77, 0, 0, 92, 82, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 333, 91, 0, + 455, 0, 0, 0, 0, 0, 0, 91, 88, 89, + 86, 91, 0, 347, 0, 50, 91, 0, 91, 351, + 0, 0, 0, 0, 77, 0, 0, 91, 0, 0, + 52, 53, 454, 91, 0, 0, 59, 72, 0, 0, 390, 57, 58, 0, 63, 0, 0, 73, 0, 0, 395, 396, 0, 0, 0, 76, 75, 69, 68, 74, 0, 18, 54, 55, 62, 60, 61, 64, 405, 0, @@ -1000,78 +1001,78 @@ yyact := array[] of { 141, 142, 138, 139, 140, 137, 135, }; yypact := array[] of { - 198,-1000, 351, 172,-1000, 140,-1000,-1000, 137, 135, - 692, 630, 14, 274, 463,-1000, 424, 530,-1000, 285, + 198,-1000, 370, 172,-1000, 140,-1000,-1000, 137, 135, + 633, 632, 12, 306, 482,-1000, 467, 550,-1000, 285, -35, 130,-1000,-1000,-1000,-1000,-1000,1507,1507,1507, -1507, 752, 583, 116, 144, 413, 396, -19, 460, 335, --1000, 351, 18,-1000,-1000,-1000, 393,-1000,2272,-1000, - 391, 497,1548,1548,1548,1548,1548,1548,1548,1548, -1548,1548,1548,1548,1548, 523, 501, 521,1548, 376, -1548,-1000,1507, 579,-1000,-1000,-1000, 580,2217,2162, -2107, 288,-1000,-1000,-1000, 752, 494, 752, 492, 487, - 530,-1000, 532,-1000,-1000, 752,1507, 251,1507, 134, - 223, 530, 260, 348, 530, 216, 752, 551, 549, -36, --1000, 456, 6, -37,-1000,-1000,-1000, 512,-1000, 285, +1507, 737, 595, 120, 144, 427, 404, -19, 480, 335, +-1000, 370, 16,-1000,-1000,-1000, 401,-1000,2272,-1000, + 396, 497,1548,1548,1548,1548,1548,1548,1548,1548, +1548,1548,1548,1548,1548, 530, 520, 523,1548, 376, +1548,-1000,1507, 583,-1000,-1000,-1000, 594,2217,2162, +2107, 288,-1000,-1000,-1000, 737, 509, 737, 508, 503, + 550,-1000, 551,-1000,-1000, 737,1507, 251,1507, 134, + 239, 550, 265, 348, 550, 236, 737, 567, 565, -36, +-1000, 474, 7, -38,-1000,-1000,-1000, 544,-1000, 285, -1000, 172,-1000,1507,1507,1507,1507,1507,1507,1507, -1507,1507,1507,1507,1507, 622,1507,1507,1507,1507, +1507,1507,1507,1507,1507, 635,1507,1507,1507,1507, 1507,1507,1507,1507,1507,1507,1507,1507,1507,1507, -1507,1507,1507,1507,1507,1507,1507,1507,1507, 389, - 544,1396,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, --1000,-1000,-1000,-1000,-1000,-1000,-1000,1452, 307, 215, - 752,1507,-1000,-1000,-1000, 17,2667,-1000,1507,-1000, --1000,-1000,-1000,1507, 388, 379, 415, 752, 13, 415, - 752, 752, 579, 452, 308,2052,-1000,1507,1997,-1000, - 752, 627, 2,-1000,-1000, 121, 285,-1000,-1000, 351, - 415,-1000,-1000, 334, 273, 273, 250,-1000,-1000,-1000, +1507,1507,1507,1507,1507,1507,1507,1507,1507, 393, + 323,1396,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, +-1000,-1000,-1000,-1000,-1000,-1000,-1000,1452, 318, 224, + 737,1507,-1000,-1000,-1000, 14,2667,-1000,1507,-1000, +-1000,-1000,-1000,1507, 391, 389, 424, 737, 13, 424, + 737, 737, 583, 452, 305,2052,-1000,1507,1997,-1000, + 737, 640, 49,-1000,-1000, 163, 285,-1000,-1000, 370, + 424,-1000,-1000, 334, 273, 273, 254,-1000,-1000,-1000, 172,2667,2667,2667,2667,2667,2667,2667,2667,2667, -2667,2667,2667,1507,2667, 575, 575, 575, 575, 543, - 543, 604, 604, 669, 669, 669, 669, 866, 866,1624, -1848,1794,1741,1741,1687,2688, 547, -38,-1000, 406, - 511, 449, -39,2667,-1000,1548, 476, 485, 752,2554, - 479,1548,1507, 415,2515,-1000,1507, 260, 650,1942, - 529, 524, 415,-1000, 752, 415, 415, 413, 12, 415, - 752,-1000,-1000,1887,-1000, 11, 146,-1000, 625, 212, -1121,-1000,-1000, 8, 188,-1000, 319, 546,-1000, 415, --1000,2277, 415,-1000,-1000,-1000,2667,-1000,-1000,1507, -1396,2273, 722, 415, 478, 200,-1000, 185, -46, 471, -2667,-1000,1507,-1000,-1000, 452, 452, 415,-1000, 407, --1000, 415,-1000, 104,-1000,-1000, 447, 103,-1000, 110, --1000, 351,-1000,-1000,-1000, 437, 114,-1000, 5, 99, - 572, 32, 370, 370,1507,1507,1507, 95,1507,2667, - 376,1051,-1000,-1000, 351,-1000,-1000,-1000, 752,-1000, - 415, 506, 505,2667,1548, 415, 415, 269, 808,-1000, -1507, 752,2630, -2, -5, 415, 752,-1000,1587,-1000, - -21,-1000,-1000,-1000, 431, 197, 183, 696,-1000,-1000, --1000, 981, 570, 752,-1000,1507, 569, 557,1329,1507, - 194, 354, 94,-1000, 92, 89,1832, 64,-1000, 4, --1000,-1000, 244,-1000,-1000,-1000,-1000, 415, 808, 175, - -53,-1000,2477, 365,1548,-1000, 415,-1000,-1000,-1000, - 415, 305, 752,1507,-1000, 190, 219, 403, 145, 911, - 420,1507, 176,2593,1507,1507, -17, 429,2424, 808, - 609,-1000,-1000,-1000,-1000,-1000,-1000, 193,-1000, 169, --1000, 808,1507, 808,1507,-1000, 293,1777, 351,1507, - 752, 235, 167, 626,-1000, 283, 368,-1000, 625,-1000, - 341, 3,-1000,1507,1329, 48, 545, 553,-1000, 808, - 163,-1000, 361,2477,1507,-1000,-1000,2667,-1000,2667, --1000,-1000, 162,1722, 227,-1000,-1000, 337, 327,-1000, - 325, 106, 0,-1000,-1000,1667, 426,1507,1329,1507, - 157,-1000, 358,-1000,1260,-1000,2371,-1000,-1000,-1000, - 255, 427,-1000, 252,-1000,-1000, 808,-1000,1329, 41, --1000, 542,-1000,1260,-1000, 356, 114,2477, 468,-1000, --1000, 152,-1000, 353,-1000,1507, -1, 333,-1000, 148, --1000, 326,-1000,-1000,-1000,-1000,1260,-1000, 535,-1000, --1000,-1000,1191,-1000, 468, 316,1329, 278, 114, 376, +2667,2667,2667,1507,2667, 581, 581, 581, 581, 591, + 591, 545, 545, 669, 669, 669, 669, 866, 866,1624, +1848,1794,1741,1741,1687,2688, 563, -39,-1000, 420, + 543, 473, -40,2667,-1000,1548, 521, 502, 737,2554, + 501,1548,1507, 424,2515,-1000,1507, 265, 650,1942, + 548, 546, 424,-1000, 737, 424, 424, 427, 10, 424, + 737,-1000,-1000,1887,-1000, 11, 146,-1000, 638, 223, +1121,-1000,-1000, 5, 191,-1000, 299, 562,-1000, 424, +-1000,2277, 424,-1000,-1000,-1000,2667,-1000,-1000,1507, +1396,2273, 678, 424, 494, 216,-1000, 189, -41, 492, +2667,-1000,1507,-1000,-1000, 452, 452, 424,-1000, 407, +-1000, 424,-1000, 119,-1000,-1000, 466, 116,-1000, 110, +-1000, 370,-1000,-1000,-1000, 463, 0,-1000, -10, 114, + 574, 31, 388, 388,1507,1507,1507, 112,1507,2667, + 376,1051,-1000,-1000, 370,-1000,-1000,-1000, 737,-1000, + 424, 531, 528,2667,1548, 424, 424, 269, 808,-1000, +1507, 737,2630, 6, 2, 424, 737,-1000,1587,-1000, + -21,-1000,-1000,-1000, 460, 215, 188, 696,-1000,-1000, +-1000, 981, 573, 737,-1000,1507, 572, 570,1329,1507, + 212, 379, 107,-1000, 104, 103,1832, 99,-1000, 3, +-1000,-1000, 338,-1000,-1000,-1000,-1000, 424, 808, 185, + -44,-1000,2477, 409,1548,-1000, 424,-1000,-1000,-1000, + 424, 293, 737,1507,-1000, 200, 219, 422, 194, 911, + 436,1507, 176,2593,1507,1507, -17, 449,2424, 808, + 622,-1000,-1000,-1000,-1000,-1000,-1000, 193,-1000, 183, +-1000, 808,1507, 808,1507,-1000, 235,1777, 370,1507, + 737, 227, 175, 639,-1000, 283, 413,-1000, 638,-1000, + 354, -3,-1000,1507,1329, 89, 561, 569,-1000, 808, + 169,-1000, 406,2477,1507,-1000,-1000,2667,-1000,2667, +-1000,-1000, 157,1722, 113,-1000,-1000, 351, 346,-1000, + 337, 106, 145,-1000,-1000,1667, 469,1507,1329,1507, + 152,-1000, 365,-1000,1260,-1000,2371,-1000,-1000,-1000, + 268, 447,-1000, 252,-1000,-1000, 808,-1000,1329, 51, +-1000, 556,-1000,1260,-1000, 361, 0,2477, 468,-1000, +-1000, 148,-1000, 358,-1000,1507, 21, 356,-1000, 32, +-1000, 353,-1000,-1000,-1000,-1000,1260,-1000, 553,-1000, +-1000,-1000,1191,-1000, 468, 333,1329, 278, 0, 376, 1548,-1000,-1000,-1000,-1000, }; yypgo := array[] of { - 0, 528, 736, 105, 33, 24, 419, 15, 14, 46, - 734, 733, 732, 34, 731, 728, 27, 727, 16, 4, - 725, 108, 8, 0, 21, 35, 13, 724, 723, 94, - 25, 67, 26, 12, 722, 11, 2, 38, 41, 32, - 721, 22, 3, 7, 719, 718, 717, 716, 715, 20, - 713, 712, 711, 10, 710, 697, 695, 1, 694, 693, - 692, 6, 5, 691, 689, 667, 19, 23, 652, 9, - 651, 18, 650, 649, 17, 648, 647, 643, 633, + 0, 528, 744, 164, 33, 24, 419, 15, 14, 46, + 743, 740, 736, 34, 734, 733, 27, 732, 16, 4, + 731, 108, 8, 0, 21, 35, 13, 728, 725, 94, + 25, 67, 26, 12, 723, 11, 2, 38, 41, 32, + 722, 22, 3, 7, 721, 719, 718, 716, 715, 20, + 713, 712, 711, 10, 710, 708, 697, 1, 696, 695, + 694, 6, 5, 693, 692, 691, 19, 23, 689, 9, + 667, 18, 652, 651, 17, 650, 647, 646, 643, }; yyr1 := array[] of { 0, 76, 75, 75, 38, 38, 39, 39, 39, 39, @@ -1139,15 +1140,15 @@ yychk := array[] of { -1000, -75, 73, -38, -39, 2, -37, -40, -49, -48, -29, -31, -30, 75, -9, -66, -54, 59, 63, 39, -10, -9, 59, -39, 72, 72, 72, 4, 16, 4, - 16, 50, 98, 61, 50, -4, 54, -3, -2, 39, - -21, 41, -32, -31, -29, 59, 98, 72, -23, -24, + 16, 50, 99, 61, 50, -4, 54, -3, -2, 39, + -21, 41, -32, -31, -29, 59, 99, 72, -23, -24, 17, -25, 32, 33, 64, 65, 34, 43, 44, 38, 67, 68, 66, 46, 69, 81, 82, 83, 60, 59, -6, -29, 39, 49, 61, 58, 57, 97, -23, -23, -23, -1, 60, -7, -8, 46, 83, 39, 81, 82, 49, -6, 59, -31, 72, 77, 74, -1, 76, 51, 78, 80, -67, 52, 59, 87, 50, -14, 34, -15, - -16, -11, -30, -12, -31, 59, 63, -9, 40, 98, + -16, -11, -30, -12, -31, 59, 63, -9, 40, 99, 59, -76, 72, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 38, 16, 37, 34, 35, 36, 32, 33, 31, 30, 26, 27, 28, 29, 24, @@ -1158,34 +1159,34 @@ yychk := array[] of { 72, 72, 72, 4, 53, 54, -1, 45, -13, -1, 45, 45, -21, 41, -1, -23, 72, 4, -23, 72, 39, 70, -21, -41, 70, 2, 39, -29, -21, 70, - -1, 40, 40, 98, 50, 50, 98, 42, -31, -29, + -1, 40, 40, 99, 50, 50, 99, 42, -31, -29, -38, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, 4, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -27, -26, 59, -25, -71, -22, -72, -23, -70, 60, 81, 82, 79, -23, - 42, 60, 70, -1, -23, 40, 98, -78, -23, -23, - 59, 59, -1, 40, 98, -1, -1, -4, -74, -1, + 42, 60, 70, -1, -23, 40, 99, -78, -23, -23, + 59, 59, -1, 40, 99, -1, -1, -4, -74, -1, 79, 72, 72, -23, 72, -13, -51, 2, 70, 87, -43, 71, 70, -32, -69, -68, -9, 34, -16, -1, -5, 84, -1, -5, 59, 63, -23, 40, 42, 50, - 98, 45, 45, -1, 42, 45, -24, -28, -26, 42, - -23, -41, 98, 40, 72, 41, 41, -1, -67, 98, + 99, 45, 45, -1, 42, 45, -24, -28, -26, 42, + -23, -41, 99, 40, 72, 41, 41, -1, -67, 99, 42, -1, 72, 40, 71, -50, -9, -49, -66, -53, 2, 70, 71, -37, -42, -9, 2, 70, -77, -22, 47, -17, 88, 92, 93, 95, 96, 94, 39, -23, 59, -43, 40, 71, -62, 62, 40, -7, 46, -8, -1, -22, -71, -23, 60, -1, -1, 45, 70, 71, - 98, 45, -23, -74, -74, -1, 79, 72, 50, 72, + 99, 45, -23, -74, -74, -1, 79, 72, 50, 72, 71, -52, -61, -60, -9, 91, -69, 50, 72, 71, - 70, -43, 98, 50, 72, 39, 87, 86, 85, 90, + 70, -43, 99, 50, 72, 39, 87, 86, 85, 90, 89, 91, -18, 59, -18, -22, -23, -22, 72, -26, 71, -61, -9, -7, -8, 42, 42, -1, 70, -33, -34, -35, -23, -36, 34, 2, -1, 40, 42, 42, -1, -1, 77, 76, -73, 87, 50, 70, 71, -43, 71, 39, -1, -23, 39, 39, -42, -9, -23, 70, 59, 72, 72, 72, 72, 72, 40, 50, 62, -33, - 71, 98, 55, 56, 62, 72, -1, -23, 70, 76, + 71, 99, 55, 56, 62, 72, -1, -23, 70, 76, 79, -1, -58, -59, 2, -19, -20, 59, 70, 71, 51, -26, 72, 4, 40, -22, -22, 86, 50, 70, -44, -45, -36, -23, 16, 71, -35, -23, -36, -23, @@ -1268,7 +1269,7 @@ yytok1 := array[] of { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 64, 3, 3, 3, 36, 23, 3, - 39, 40, 34, 32, 98, 33, 54, 35, 3, 3, + 39, 40, 34, 32, 99, 33, 54, 35, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 50, 72, 26, 4, 27, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, @@ -1286,7 +1287,7 @@ yytok2 := array[] of { 59, 60, 61, 62, 63, 66, 67, 68, 69, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, - 94, 95, 96, 97, + 94, 95, 96, 97, 98, }; yytok3 := array[] of { 0 @@ -1498,17 +1499,17 @@ yystack: case yym { 1=> -#line 151 "limbo.y" +#line 152 "limbo.y" { impmods = yys[yypt-1].yyv.ids; } 2=> -#line 154 "limbo.y" +#line 155 "limbo.y" { tree = rotater(yys[yypt-0].yyv.node); } 3=> -#line 158 "limbo.y" +#line 159 "limbo.y" { impmods = nil; tree = rotater(yys[yypt-0].yyv.node); @@ -1516,7 +1517,7 @@ yystack: 4=> yyval.node = yys[yyp+1].yyv.node; 5=> -#line 166 "limbo.y" +#line 167 "limbo.y" { if(yys[yypt-1].yyv.node == nil) yyval.node = yys[yypt-0].yyv.node; @@ -1526,7 +1527,7 @@ yyval.node = yys[yyp+1].yyv.node; yyval.node = mkbin(Oseq, yys[yypt-1].yyv.node, yys[yypt-0].yyv.node); } 6=> -#line 177 "limbo.y" +#line 178 "limbo.y" { yyval.node = nil; } @@ -1539,33 +1540,33 @@ yyval.node = yys[yyp+1].yyv.node; 10=> yyval.node = yys[yyp+1].yyv.node; 11=> -#line 185 "limbo.y" +#line 186 "limbo.y" { yyval.node = mkbin(Oas, yys[yypt-3].yyv.node, yys[yypt-1].yyv.node); } 12=> -#line 189 "limbo.y" +#line 190 "limbo.y" { yyval.node = mkbin(Oas, yys[yypt-3].yyv.node, yys[yypt-1].yyv.node); } 13=> -#line 193 "limbo.y" +#line 194 "limbo.y" { yyval.node = mkbin(Odas, yys[yypt-3].yyv.node, yys[yypt-1].yyv.node); } 14=> -#line 197 "limbo.y" +#line 198 "limbo.y" { yyval.node = mkbin(Odas, yys[yypt-3].yyv.node, yys[yypt-1].yyv.node); } 15=> -#line 201 "limbo.y" +#line 202 "limbo.y" { yyerror("illegal declaration"); yyval.node = nil; } 16=> -#line 206 "limbo.y" +#line 207 "limbo.y" { yyerror("illegal declaration"); yyval.node = nil; @@ -1573,68 +1574,68 @@ yyval.node = yys[yyp+1].yyv.node; 17=> yyval.node = yys[yyp+1].yyv.node; 18=> -#line 214 "limbo.y" +#line 215 "limbo.y" { yyval.node = mkbin(Oseq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 19=> -#line 220 "limbo.y" +#line 221 "limbo.y" { includef(yys[yypt-1].yyv.tok.v.idval); yyval.node = nil; } 20=> -#line 225 "limbo.y" +#line 226 "limbo.y" { yyval.node = typedecl(yys[yypt-4].yyv.ids, yys[yypt-1].yyv.ty); } 21=> -#line 229 "limbo.y" +#line 230 "limbo.y" { yyval.node = importdecl(yys[yypt-1].yyv.node, yys[yypt-4].yyv.ids); yyval.node.src.start = yys[yypt-4].yyv.ids.src.start; yyval.node.src.stop = yys[yypt-0].yyv.tok.src.stop; } 22=> -#line 235 "limbo.y" +#line 236 "limbo.y" { yyval.node = vardecl(yys[yypt-3].yyv.ids, yys[yypt-1].yyv.ty); } 23=> -#line 239 "limbo.y" +#line 240 "limbo.y" { yyval.node = mkbin(Ovardecli, vardecl(yys[yypt-5].yyv.ids, yys[yypt-3].yyv.ty), varinit(yys[yypt-5].yyv.ids, yys[yypt-1].yyv.node)); } 24=> -#line 243 "limbo.y" +#line 244 "limbo.y" { yyval.node = condecl(yys[yypt-4].yyv.ids, yys[yypt-1].yyv.node); } 25=> yyval.node = yys[yyp+1].yyv.node; 26=> -#line 250 "limbo.y" +#line 251 "limbo.y" { yyval.node = exdecl(yys[yypt-3].yyv.ids, nil); } 27=> -#line 254 "limbo.y" +#line 255 "limbo.y" { yyval.node = exdecl(yys[yypt-6].yyv.ids, revids(yys[yypt-2].yyv.ids)); } 28=> -#line 260 "limbo.y" +#line 261 "limbo.y" { yys[yypt-5].yyv.ids.src.stop = yys[yypt-0].yyv.tok.src.stop; yyval.node = moddecl(yys[yypt-5].yyv.ids, rotater(yys[yypt-1].yyv.node)); } 29=> -#line 267 "limbo.y" +#line 268 "limbo.y" { yyval.node = nil; } 30=> -#line 271 "limbo.y" +#line 272 "limbo.y" { if(yys[yypt-1].yyv.node == nil) yyval.node = yys[yypt-0].yyv.node; @@ -1644,31 +1645,31 @@ yyval.node = yys[yyp+1].yyv.node; yyval.node = mkn(Oseq, yys[yypt-1].yyv.node, yys[yypt-0].yyv.node); } 31=> -#line 280 "limbo.y" +#line 281 "limbo.y" { yyval.node = nil; } 32=> -#line 286 "limbo.y" +#line 287 "limbo.y" { yyval.node = fielddecl(Dglobal, typeids(yys[yypt-3].yyv.ids, yys[yypt-1].yyv.ty)); } 33=> yyval.node = yys[yyp+1].yyv.node; 34=> -#line 291 "limbo.y" +#line 292 "limbo.y" { yyval.node = typedecl(yys[yypt-4].yyv.ids, yys[yypt-1].yyv.ty); } 35=> -#line 295 "limbo.y" +#line 296 "limbo.y" { yyval.node = condecl(yys[yypt-4].yyv.ids, yys[yypt-1].yyv.node); } 36=> yyval.node = yys[yyp+1].yyv.node; 37=> -#line 302 "limbo.y" +#line 303 "limbo.y" { yys[yypt-7].yyv.ids.src.stop = yys[yypt-1].yyv.tok.src.stop; yyval.node = adtdecl(yys[yypt-7].yyv.ids, rotater(yys[yypt-2].yyv.node)); @@ -1676,7 +1677,7 @@ yyval.node = yys[yyp+1].yyv.node; yyval.node.ty.val = rotater(yys[yypt-0].yyv.node); } 38=> -#line 309 "limbo.y" +#line 310 "limbo.y" { yys[yypt-10].yyv.ids.src.stop = yys[yypt-0].yyv.tok.src.stop; yyval.node = adtdecl(yys[yypt-10].yyv.ids, rotater(yys[yypt-1].yyv.node)); @@ -1684,22 +1685,22 @@ yyval.node = yys[yyp+1].yyv.node; yyval.node.ty.val = rotater(yys[yypt-4].yyv.node); } 39=> -#line 318 "limbo.y" +#line 319 "limbo.y" { yyval.node = nil; } 40=> -#line 322 "limbo.y" +#line 323 "limbo.y" { yyval.node = yys[yypt-1].yyv.node; } 41=> -#line 328 "limbo.y" +#line 329 "limbo.y" { yyval.node = nil; } 42=> -#line 332 "limbo.y" +#line 333 "limbo.y" { if(yys[yypt-1].yyv.node == nil) yyval.node = yys[yypt-0].yyv.node; @@ -1709,7 +1710,7 @@ yyval.node = yys[yyp+1].yyv.node; yyval.node = mkn(Oseq, yys[yypt-1].yyv.node, yys[yypt-0].yyv.node); } 43=> -#line 341 "limbo.y" +#line 342 "limbo.y" { yyval.node = nil; } @@ -1718,17 +1719,17 @@ yyval.node = yys[yyp+1].yyv.node; 45=> yyval.node = yys[yyp+1].yyv.node; 46=> -#line 349 "limbo.y" +#line 350 "limbo.y" { yyval.node = condecl(yys[yypt-4].yyv.ids, yys[yypt-1].yyv.node); } 47=> -#line 355 "limbo.y" +#line 356 "limbo.y" { yyval.node = nil; } 48=> -#line 359 "limbo.y" +#line 360 "limbo.y" { if(yys[yypt-1].yyv.node == nil) yyval.node = yys[yypt-0].yyv.node; @@ -1738,159 +1739,159 @@ yyval.node = yys[yyp+1].yyv.node; yyval.node = mkn(Oseq, yys[yypt-1].yyv.node, yys[yypt-0].yyv.node); } 49=> -#line 370 "limbo.y" +#line 371 "limbo.y" { for(d := yys[yypt-4].yyv.ids; d != nil; d = d.next) d.cyc = byte 1; yyval.node = fielddecl(Dfield, typeids(yys[yypt-4].yyv.ids, yys[yypt-1].yyv.ty)); } 50=> -#line 376 "limbo.y" +#line 377 "limbo.y" { yyval.node = fielddecl(Dfield, typeids(yys[yypt-3].yyv.ids, yys[yypt-1].yyv.ty)); } 51=> -#line 382 "limbo.y" +#line 383 "limbo.y" { yyval.node = yys[yypt-1].yyv.node; } 52=> -#line 388 "limbo.y" +#line 389 "limbo.y" { yys[yypt-1].yyv.node.right.right = yys[yypt-0].yyv.node; yyval.node = yys[yypt-1].yyv.node; } 53=> -#line 393 "limbo.y" +#line 394 "limbo.y" { yyval.node = nil; } 54=> -#line 397 "limbo.y" +#line 398 "limbo.y" { yyval.node = nil; } 55=> -#line 403 "limbo.y" +#line 404 "limbo.y" { yyval.node = mkn(Opickdecl, nil, mkn(Oseq, fielddecl(Dtag, yys[yypt-1].yyv.ids), nil)); typeids(yys[yypt-1].yyv.ids, mktype(yys[yypt-1].yyv.ids.src.start, yys[yypt-1].yyv.ids.src.stop, Tadtpick, nil, nil)); } 56=> -#line 408 "limbo.y" +#line 409 "limbo.y" { yys[yypt-3].yyv.node.right.right = yys[yypt-2].yyv.node; yyval.node = mkn(Opickdecl, yys[yypt-3].yyv.node, mkn(Oseq, fielddecl(Dtag, yys[yypt-1].yyv.ids), nil)); typeids(yys[yypt-1].yyv.ids, mktype(yys[yypt-1].yyv.ids.src.start, yys[yypt-1].yyv.ids.src.stop, Tadtpick, nil, nil)); } 57=> -#line 414 "limbo.y" +#line 415 "limbo.y" { yyval.node = mkn(Opickdecl, nil, mkn(Oseq, fielddecl(Dtag, yys[yypt-1].yyv.ids), nil)); typeids(yys[yypt-1].yyv.ids, mktype(yys[yypt-1].yyv.ids.src.start, yys[yypt-1].yyv.ids.src.stop, Tadtpick, nil, nil)); } 58=> -#line 421 "limbo.y" +#line 422 "limbo.y" { yyval.ids = revids(yys[yypt-0].yyv.ids); } 59=> -#line 427 "limbo.y" +#line 428 "limbo.y" { yyval.ids = mkids(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval, nil, nil); } 60=> -#line 431 "limbo.y" +#line 432 "limbo.y" { yyval.ids = mkids(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval, nil, yys[yypt-2].yyv.ids); } 61=> -#line 437 "limbo.y" +#line 438 "limbo.y" { yyval.ids = revids(yys[yypt-0].yyv.ids); } 62=> -#line 443 "limbo.y" +#line 444 "limbo.y" { yyval.ids = mkids(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval, nil, nil); } 63=> -#line 447 "limbo.y" +#line 448 "limbo.y" { yyval.ids = mkids(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval, nil, yys[yypt-2].yyv.ids); } 64=> -#line 453 "limbo.y" +#line 454 "limbo.y" { yyval.ty = mktype(yys[yypt-5].yyv.tok.src.start, yys[yypt-0].yyv.tok.src.stop, Tfix, nil, nil); yyval.ty.val = mkbin(Oseq, yys[yypt-3].yyv.node, yys[yypt-1].yyv.node); } 65=> -#line 458 "limbo.y" +#line 459 "limbo.y" { yyval.ty = mktype(yys[yypt-3].yyv.tok.src.start, yys[yypt-0].yyv.tok.src.stop, Tfix, nil, nil); yyval.ty.val = yys[yypt-1].yyv.node; } 66=> -#line 465 "limbo.y" +#line 466 "limbo.y" { yyval.types = addtype(yys[yypt-0].yyv.ty, nil); } 67=> -#line 469 "limbo.y" +#line 470 "limbo.y" { yyval.types = addtype(yys[yypt-0].yyv.ty, nil); yys[yypt-0].yyv.ty.flags |= CYCLIC; } 68=> -#line 474 "limbo.y" +#line 475 "limbo.y" { yyval.types = addtype(yys[yypt-0].yyv.ty, yys[yypt-2].yyv.types); } 69=> -#line 478 "limbo.y" +#line 479 "limbo.y" { yyval.types = addtype(yys[yypt-0].yyv.ty, yys[yypt-3].yyv.types); yys[yypt-0].yyv.ty.flags |= CYCLIC; } 70=> -#line 485 "limbo.y" +#line 486 "limbo.y" { yyval.ty = mkidtype(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval); } 71=> -#line 489 "limbo.y" +#line 490 "limbo.y" { yyval.ty = yys[yypt-0].yyv.ty; } 72=> -#line 493 "limbo.y" +#line 494 "limbo.y" { yyval.ty = yys[yypt-0].yyv.ty; } 73=> -#line 497 "limbo.y" +#line 498 "limbo.y" { yyval.ty = mkarrowtype(yys[yypt-2].yyv.ty.src.start, yys[yypt-0].yyv.tok.src.stop, yys[yypt-2].yyv.ty, yys[yypt-0].yyv.tok.v.idval); } 74=> -#line 501 "limbo.y" +#line 502 "limbo.y" { yyval.ty = mkarrowtype(yys[yypt-5].yyv.ty.src.start, yys[yypt-3].yyv.tok.src.stop, yys[yypt-5].yyv.ty, yys[yypt-3].yyv.tok.v.idval); yyval.ty = mkinsttype(yys[yypt-5].yyv.ty.src, yyval.ty, yys[yypt-1].yyv.types); } 75=> -#line 506 "limbo.y" +#line 507 "limbo.y" { yyval.ty = mktype(yys[yypt-1].yyv.tok.src.start, yys[yypt-0].yyv.ty.src.stop, Tref, yys[yypt-0].yyv.ty, nil); } 76=> -#line 510 "limbo.y" +#line 511 "limbo.y" { yyval.ty = mktype(yys[yypt-2].yyv.tok.src.start, yys[yypt-0].yyv.ty.src.stop, Tchan, yys[yypt-0].yyv.ty, nil); } 77=> -#line 514 "limbo.y" +#line 515 "limbo.y" { if(yys[yypt-1].yyv.ids.next == nil) yyval.ty = yys[yypt-1].yyv.ids.ty; @@ -1898,17 +1899,17 @@ yyval.node = yys[yyp+1].yyv.node; yyval.ty = mktype(yys[yypt-2].yyv.tok.src.start, yys[yypt-0].yyv.tok.src.stop, Ttuple, nil, revids(yys[yypt-1].yyv.ids)); } 78=> -#line 521 "limbo.y" +#line 522 "limbo.y" { yyval.ty = mktype(yys[yypt-2].yyv.tok.src.start, yys[yypt-0].yyv.ty.src.stop, Tarray, yys[yypt-0].yyv.ty, nil); } 79=> -#line 525 "limbo.y" +#line 526 "limbo.y" { yyval.ty = mktype(yys[yypt-2].yyv.tok.src.start, yys[yypt-0].yyv.ty.src.stop, Tlist, yys[yypt-0].yyv.ty, nil); } 80=> -#line 529 "limbo.y" +#line 530 "limbo.y" { yys[yypt-1].yyv.ty.src.start = yys[yypt-3].yyv.tok.src.start; yys[yypt-1].yyv.ty.polys = yys[yypt-2].yyv.ids; @@ -1918,88 +1919,88 @@ yyval.node = yys[yyp+1].yyv.node; 81=> yyval.ty = yys[yyp+1].yyv.ty; 82=> -#line 549 "limbo.y" +#line 550 "limbo.y" { yyval.ty = mkidtype(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval); } 83=> -#line 553 "limbo.y" +#line 554 "limbo.y" { yyval.ty = mkinsttype(yys[yypt-3].yyv.tok.src, mkidtype(yys[yypt-3].yyv.tok.src, yys[yypt-3].yyv.tok.v.idval), yys[yypt-1].yyv.types); } 84=> -#line 559 "limbo.y" +#line 560 "limbo.y" { yyval.ty = mkdottype(yys[yypt-2].yyv.ty.src.start, yys[yypt-0].yyv.tok.src.stop, yys[yypt-2].yyv.ty, yys[yypt-0].yyv.tok.v.idval); } 85=> -#line 563 "limbo.y" +#line 564 "limbo.y" { yyval.ty = mkdottype(yys[yypt-5].yyv.ty.src.start, yys[yypt-3].yyv.tok.src.stop, yys[yypt-5].yyv.ty, yys[yypt-3].yyv.tok.v.idval); yyval.ty = mkinsttype(yys[yypt-5].yyv.ty.src, yyval.ty, yys[yypt-1].yyv.types); } 86=> -#line 570 "limbo.y" +#line 571 "limbo.y" { yyval.ids = mkids(yys[yypt-0].yyv.ty.src, nil, yys[yypt-0].yyv.ty, nil); } 87=> -#line 574 "limbo.y" +#line 575 "limbo.y" { yyval.ids = mkids(yys[yypt-2].yyv.ids.src, nil, yys[yypt-0].yyv.ty, yys[yypt-2].yyv.ids); } 88=> -#line 580 "limbo.y" +#line 581 "limbo.y" { yyval.ids = nil; } 89=> -#line 584 "limbo.y" +#line 585 "limbo.y" { yyval.ids = polydecl(yys[yypt-1].yyv.ids); } 90=> -#line 590 "limbo.y" +#line 591 "limbo.y" { yyval.ty = mktype(yys[yypt-2].yyv.tok.src.start, yys[yypt-0].yyv.tok.src.stop, Tfn, tnone, yys[yypt-1].yyv.ids); } 91=> -#line 594 "limbo.y" +#line 595 "limbo.y" { yyval.ty = mktype(yys[yypt-2].yyv.tok.src.start, yys[yypt-0].yyv.tok.src.stop, Tfn, tnone, nil); yyval.ty.varargs = byte 1; } 92=> -#line 599 "limbo.y" +#line 600 "limbo.y" { yyval.ty = mktype(yys[yypt-4].yyv.tok.src.start, yys[yypt-0].yyv.tok.src.stop, Tfn, tnone, yys[yypt-3].yyv.ids); yyval.ty.varargs = byte 1; } 93=> -#line 606 "limbo.y" +#line 607 "limbo.y" { yyval.ty = yys[yypt-0].yyv.ty; } 94=> -#line 610 "limbo.y" +#line 611 "limbo.y" { yys[yypt-2].yyv.ty.tof = yys[yypt-0].yyv.ty; yys[yypt-2].yyv.ty.src.stop = yys[yypt-0].yyv.ty.src.stop; yyval.ty = yys[yypt-2].yyv.ty; } 95=> -#line 618 "limbo.y" +#line 619 "limbo.y" { yyval.ty = yys[yypt-0].yyv.ty; } 96=> -#line 622 "limbo.y" +#line 623 "limbo.y" { yyval.ty = yys[yypt-4].yyv.ty; yyval.ty.val = rotater(yys[yypt-1].yyv.node); } 97=> -#line 629 "limbo.y" +#line 630 "limbo.y" { yyval.ids = nil; } @@ -2008,87 +2009,87 @@ yyval.ids = yys[yyp+1].yyv.ids; 99=> yyval.ids = yys[yyp+1].yyv.ids; 100=> -#line 637 "limbo.y" +#line 638 "limbo.y" { yyval.ids = appdecls(yys[yypt-2].yyv.ids, yys[yypt-0].yyv.ids); } 101=> -#line 643 "limbo.y" +#line 644 "limbo.y" { yyval.ids = typeids(yys[yypt-2].yyv.ids, yys[yypt-0].yyv.ty); } 102=> -#line 647 "limbo.y" +#line 648 "limbo.y" { yyval.ids = typeids(yys[yypt-2].yyv.ids, yys[yypt-0].yyv.ty); for(d := yyval.ids; d != nil; d = d.next) d.implicit = byte 1; } 103=> -#line 653 "limbo.y" +#line 654 "limbo.y" { yyval.ids = mkids(yys[yypt-2].yyv.node.src, enter("junk", 0), yys[yypt-0].yyv.ty, nil); yyval.ids.store = Darg; yyerror("illegal argument declaraion"); } 104=> -#line 659 "limbo.y" +#line 660 "limbo.y" { yyval.ids = mkids(yys[yypt-2].yyv.node.src, enter("junk", 0), yys[yypt-0].yyv.ty, nil); yyval.ids.store = Darg; yyerror("illegal argument declaraion"); } 105=> -#line 667 "limbo.y" +#line 668 "limbo.y" { yyval.ids = revids(yys[yypt-0].yyv.ids); } 106=> -#line 673 "limbo.y" +#line 674 "limbo.y" { yyval.ids = mkids(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval, nil, nil); yyval.ids.store = Darg; } 107=> -#line 678 "limbo.y" +#line 679 "limbo.y" { yyval.ids = mkids(yys[yypt-0].yyv.tok.src, nil, nil, nil); yyval.ids.store = Darg; } 108=> -#line 683 "limbo.y" +#line 684 "limbo.y" { yyval.ids = mkids(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval, nil, yys[yypt-2].yyv.ids); yyval.ids.store = Darg; } 109=> -#line 688 "limbo.y" +#line 689 "limbo.y" { yyval.ids = mkids(yys[yypt-0].yyv.tok.src, nil, nil, yys[yypt-2].yyv.ids); yyval.ids.store = Darg; } 110=> -#line 695 "limbo.y" +#line 696 "limbo.y" { yyval.ty = yys[yypt-0].yyv.ty; } 111=> -#line 699 "limbo.y" +#line 700 "limbo.y" { yyval.ty = mktype(yys[yypt-1].yyv.tok.src.start, yys[yypt-0].yyv.tok.src.stop, Tref, yys[yypt-0].yyv.ty, nil); } 112=> -#line 703 "limbo.y" +#line 704 "limbo.y" { yyval.ty = yys[yypt-0].yyv.ty; } 113=> -#line 707 "limbo.y" +#line 708 "limbo.y" { yyval.ty = mktype(yys[yypt-1].yyv.tok.src.start, yys[yypt-0].yyv.tok.src.stop, Tref, yys[yypt-0].yyv.ty, nil); } 114=> -#line 713 "limbo.y" +#line 714 "limbo.y" { yyval.node = fndecl(yys[yypt-3].yyv.node, yys[yypt-2].yyv.ty, yys[yypt-0].yyv.node); nfns++; @@ -2113,26 +2114,26 @@ yyval.ids = yys[yyp+1].yyv.ids; yyval.node.src = yys[yypt-3].yyv.node.src; } 115=> -#line 739 "limbo.y" +#line 740 "limbo.y" { yyval.node = mkn(Otuple, rotater(yys[yypt-1].yyv.node), nil); yyval.node.src.start = yys[yypt-3].yyv.tok.src.start; yyval.node.src.stop = yys[yypt-0].yyv.tok.src.stop; } 116=> -#line 745 "limbo.y" +#line 746 "limbo.y" { yyval.node = mkn(Otuple, mkunary(Oseq, yys[yypt-0].yyv.node), nil); yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; yyval.node.src.stop = yys[yypt-0].yyv.node.src.stop; } 117=> -#line 751 "limbo.y" +#line 752 "limbo.y" { yyval.node = nil; } 118=> -#line 757 "limbo.y" +#line 758 "limbo.y" { if(yys[yypt-1].yyv.node == nil){ yys[yypt-1].yyv.node = mkn(Onothing, nil, nil); @@ -2144,17 +2145,17 @@ yyval.ids = yys[yyp+1].yyv.ids; yyval.node.src.stop = yys[yypt-0].yyv.tok.src.stop; } 119=> -#line 768 "limbo.y" +#line 769 "limbo.y" { yyval.node = mkn(Onothing, nil, nil); } 120=> -#line 772 "limbo.y" +#line 773 "limbo.y" { yyval.node = mkn(Onothing, nil, nil); } 121=> -#line 778 "limbo.y" +#line 779 "limbo.y" { yyval.node = mkname(yys[yypt-1].yyv.tok.src, yys[yypt-1].yyv.tok.v.idval); if(yys[yypt-0].yyv.ids != nil){ @@ -2163,7 +2164,7 @@ yyval.ids = yys[yyp+1].yyv.ids; } } 122=> -#line 786 "limbo.y" +#line 787 "limbo.y" { yyval.node = mkbin(Odot, yys[yypt-3].yyv.node, mkname(yys[yypt-1].yyv.tok.src, yys[yypt-1].yyv.tok.v.idval)); if(yys[yypt-0].yyv.ids != nil){ @@ -2172,12 +2173,12 @@ yyval.ids = yys[yyp+1].yyv.ids; } } 123=> -#line 796 "limbo.y" +#line 797 "limbo.y" { yyval.node = nil; } 124=> -#line 800 "limbo.y" +#line 801 "limbo.y" { if(yys[yypt-1].yyv.node == nil) yyval.node = yys[yypt-0].yyv.node; @@ -2187,7 +2188,7 @@ yyval.ids = yys[yyp+1].yyv.ids; yyval.node = mkbin(Oseq, yys[yypt-1].yyv.node, yys[yypt-0].yyv.node); } 125=> -#line 809 "limbo.y" +#line 810 "limbo.y" { if(yys[yypt-1].yyv.node == nil) yyval.node = yys[yypt-0].yyv.node; @@ -2195,28 +2196,28 @@ yyval.ids = yys[yyp+1].yyv.ids; yyval.node = mkbin(Oseq, yys[yypt-1].yyv.node, yys[yypt-0].yyv.node); } 128=> -#line 822 "limbo.y" +#line 823 "limbo.y" { yyval.node = mkn(Onothing, nil, nil); yyval.node.src.start = curline(); yyval.node.src.stop = yyval.node.src.start; } 129=> -#line 828 "limbo.y" +#line 829 "limbo.y" { yyval.node = mkn(Onothing, nil, nil); yyval.node.src.start = curline(); yyval.node.src.stop = yyval.node.src.start; } 130=> -#line 834 "limbo.y" +#line 835 "limbo.y" { yyval.node = mkn(Onothing, nil, nil); yyval.node.src.start = curline(); yyval.node.src.stop = yyval.node.src.start; } 131=> -#line 840 "limbo.y" +#line 841 "limbo.y" { if(yys[yypt-1].yyv.node == nil){ yys[yypt-1].yyv.node = mkn(Onothing, nil, nil); @@ -2226,7 +2227,7 @@ yyval.ids = yys[yyp+1].yyv.ids; yyval.node = mkscope(rotater(yys[yypt-1].yyv.node)); } 132=> -#line 849 "limbo.y" +#line 850 "limbo.y" { yyerror("illegal declaration"); yyval.node = mkn(Onothing, nil, nil); @@ -2234,7 +2235,7 @@ yyval.ids = yys[yyp+1].yyv.ids; yyval.node.src.stop = yyval.node.src.start; } 133=> -#line 856 "limbo.y" +#line 857 "limbo.y" { yyerror("illegal declaration"); yyval.node = mkn(Onothing, nil, nil); @@ -2242,26 +2243,26 @@ yyval.ids = yys[yyp+1].yyv.ids; yyval.node.src.stop = yyval.node.src.start; } 134=> -#line 863 "limbo.y" +#line 864 "limbo.y" { yyval.node = yys[yypt-1].yyv.node; } 135=> -#line 867 "limbo.y" +#line 868 "limbo.y" { yyval.node = mkn(Oif, yys[yypt-2].yyv.node, mkunary(Oseq, yys[yypt-0].yyv.node)); yyval.node.src.start = yys[yypt-4].yyv.tok.src.start; yyval.node.src.stop = yys[yypt-0].yyv.node.src.stop; } 136=> -#line 873 "limbo.y" +#line 874 "limbo.y" { yyval.node = mkn(Oif, yys[yypt-4].yyv.node, mkbin(Oseq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node)); yyval.node.src.start = yys[yypt-6].yyv.tok.src.start; yyval.node.src.stop = yys[yypt-0].yyv.node.src.stop; } 137=> -#line 879 "limbo.y" +#line 880 "limbo.y" { yyval.node = mkunary(Oseq, yys[yypt-0].yyv.node); if(yys[yypt-2].yyv.node.op != Onothing) @@ -2272,7 +2273,7 @@ yyval.ids = yys[yyp+1].yyv.ids; yyval.node = mkbin(Oseq, yys[yypt-6].yyv.node, yyval.node); } 138=> -#line 889 "limbo.y" +#line 890 "limbo.y" { yyval.node = mkn(Ofor, yys[yypt-2].yyv.node, mkunary(Oseq, yys[yypt-0].yyv.node)); yyval.node.src.start = yys[yypt-4].yyv.tok.src.start; @@ -2280,7 +2281,7 @@ yyval.ids = yys[yyp+1].yyv.ids; yyval.node.decl = yys[yypt-5].yyv.ids; } 139=> -#line 896 "limbo.y" +#line 897 "limbo.y" { yyval.node = mkn(Odo, yys[yypt-2].yyv.node, yys[yypt-5].yyv.node); yyval.node.src.start = yys[yypt-6].yyv.tok.src.start; @@ -2288,21 +2289,21 @@ yyval.ids = yys[yyp+1].yyv.ids; yyval.node.decl = yys[yypt-7].yyv.ids; } 140=> -#line 903 "limbo.y" +#line 904 "limbo.y" { yyval.node = mkn(Obreak, nil, nil); yyval.node.decl = yys[yypt-1].yyv.ids; yyval.node.src = yys[yypt-2].yyv.tok.src; } 141=> -#line 909 "limbo.y" +#line 910 "limbo.y" { yyval.node = mkn(Ocont, nil, nil); yyval.node.decl = yys[yypt-1].yyv.ids; yyval.node.src = yys[yypt-2].yyv.tok.src; } 142=> -#line 915 "limbo.y" +#line 916 "limbo.y" { yyval.node = mkn(Oret, yys[yypt-1].yyv.node, nil); yyval.node.src = yys[yypt-2].yyv.tok.src; @@ -2312,35 +2313,35 @@ yyval.ids = yys[yyp+1].yyv.ids; yyval.node.src.stop = yys[yypt-1].yyv.node.src.stop; } 143=> -#line 924 "limbo.y" +#line 925 "limbo.y" { yyval.node = mkn(Ospawn, yys[yypt-1].yyv.node, nil); yyval.node.src.start = yys[yypt-2].yyv.tok.src.start; yyval.node.src.stop = yys[yypt-1].yyv.node.src.stop; } 144=> -#line 930 "limbo.y" +#line 931 "limbo.y" { yyval.node = mkn(Oraise, yys[yypt-1].yyv.node, nil); yyval.node.src.start = yys[yypt-2].yyv.tok.src.start; yyval.node.src.stop = yys[yypt-1].yyv.node.src.stop; } 145=> -#line 936 "limbo.y" +#line 937 "limbo.y" { yyval.node = mkn(Ocase, yys[yypt-3].yyv.node, caselist(yys[yypt-1].yyv.node, nil)); yyval.node.src = yys[yypt-3].yyv.node.src; yyval.node.decl = yys[yypt-5].yyv.ids; } 146=> -#line 942 "limbo.y" +#line 943 "limbo.y" { yyval.node = mkn(Oalt, caselist(yys[yypt-1].yyv.node, nil), nil); yyval.node.src = yys[yypt-3].yyv.tok.src; yyval.node.decl = yys[yypt-4].yyv.ids; } 147=> -#line 948 "limbo.y" +#line 949 "limbo.y" { yyval.node = mkn(Opick, mkbin(Odas, mkname(yys[yypt-5].yyv.tok.src, yys[yypt-5].yyv.tok.v.idval), yys[yypt-3].yyv.node), caselist(yys[yypt-1].yyv.node, nil)); yyval.node.src.start = yys[yypt-5].yyv.tok.src.start; @@ -2348,13 +2349,13 @@ yyval.ids = yys[yyp+1].yyv.ids; yyval.node.decl = yys[yypt-7].yyv.ids; } 148=> -#line 955 "limbo.y" +#line 956 "limbo.y" { yyval.node = mkn(Oexit, nil, nil); yyval.node.src = yys[yypt-1].yyv.tok.src; } 149=> -#line 960 "limbo.y" +#line 961 "limbo.y" { if(yys[yypt-6].yyv.node == nil){ yys[yypt-6].yyv.node = mkn(Onothing, nil, nil); @@ -2364,74 +2365,74 @@ yyval.ids = yys[yyp+1].yyv.ids; yyval.node = mkbin(Oexstmt, yys[yypt-6].yyv.node, mkn(Oexcept, yys[yypt-3].yyv.node, caselist(yys[yypt-1].yyv.node, nil))); } 150=> -#line 975 "limbo.y" +#line 976 "limbo.y" { yyval.ids = nil; } 151=> -#line 979 "limbo.y" +#line 980 "limbo.y" { if(yys[yypt-1].yyv.ids.next != nil) yyerror("only one identifier allowed in a label"); yyval.ids = yys[yypt-1].yyv.ids; } 152=> -#line 987 "limbo.y" +#line 988 "limbo.y" { yyval.ids = nil; } 153=> -#line 991 "limbo.y" +#line 992 "limbo.y" { yyval.ids = mkids(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval, nil, nil); } 154=> -#line 997 "limbo.y" +#line 998 "limbo.y" { yys[yypt-1].yyv.node.left.right.right = yys[yypt-0].yyv.node; yyval.node = yys[yypt-1].yyv.node; } 155=> -#line 1004 "limbo.y" +#line 1005 "limbo.y" { yyval.node = mkunary(Oseq, mkscope(mkunary(Olabel, rotater(yys[yypt-1].yyv.node)))); } 156=> -#line 1008 "limbo.y" +#line 1009 "limbo.y" { yys[yypt-3].yyv.node.left.right.right = yys[yypt-2].yyv.node; yyval.node = mkbin(Oseq, mkscope(mkunary(Olabel, rotater(yys[yypt-1].yyv.node))), yys[yypt-3].yyv.node); } 157=> -#line 1015 "limbo.y" +#line 1016 "limbo.y" { yys[yypt-1].yyv.node.left.right = mkscope(yys[yypt-0].yyv.node); yyval.node = yys[yypt-1].yyv.node; } 158=> -#line 1022 "limbo.y" +#line 1023 "limbo.y" { yyval.node = mkunary(Oseq, mkunary(Olabel, rotater(yys[yypt-1].yyv.node))); } 159=> -#line 1026 "limbo.y" +#line 1027 "limbo.y" { yys[yypt-3].yyv.node.left.right = mkscope(yys[yypt-2].yyv.node); yyval.node = mkbin(Oseq, mkunary(Olabel, rotater(yys[yypt-1].yyv.node)), yys[yypt-3].yyv.node); } 160=> -#line 1033 "limbo.y" +#line 1034 "limbo.y" { yys[yypt-1].yyv.node.left.right = mkscope(yys[yypt-0].yyv.node); yyval.node = yys[yypt-1].yyv.node; } 161=> -#line 1040 "limbo.y" +#line 1041 "limbo.y" { yyval.node = mkunary(Oseq, mkunary(Olabel, rotater(yys[yypt-1].yyv.node))); } 162=> -#line 1044 "limbo.y" +#line 1045 "limbo.y" { yys[yypt-3].yyv.node.left.right = mkscope(yys[yypt-2].yyv.node); yyval.node = mkbin(Oseq, mkunary(Olabel, rotater(yys[yypt-1].yyv.node)), yys[yypt-3].yyv.node); @@ -2439,70 +2440,70 @@ yyval.ids = yys[yyp+1].yyv.ids; 163=> yyval.node = yys[yyp+1].yyv.node; 164=> -#line 1052 "limbo.y" +#line 1053 "limbo.y" { yyval.node = mkbin(Orange, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 165=> -#line 1056 "limbo.y" +#line 1057 "limbo.y" { yyval.node = mkn(Owild, nil, nil); yyval.node.src = yys[yypt-0].yyv.tok.src; } 166=> -#line 1061 "limbo.y" +#line 1062 "limbo.y" { yyval.node = mkbin(Oseq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 167=> -#line 1065 "limbo.y" +#line 1066 "limbo.y" { yyval.node = mkn(Onothing, nil, nil); yyval.node.src.start = curline(); yyval.node.src.stop = yyval.node.src.start; } 168=> -#line 1073 "limbo.y" +#line 1074 "limbo.y" { yys[yypt-1].yyv.node.left.right = mkscope(yys[yypt-0].yyv.node); yyval.node = yys[yypt-1].yyv.node; } 169=> -#line 1080 "limbo.y" +#line 1081 "limbo.y" { yyval.node = mkunary(Oseq, mkunary(Olabel, rotater(yys[yypt-1].yyv.node))); } 170=> -#line 1084 "limbo.y" +#line 1085 "limbo.y" { yys[yypt-3].yyv.node.left.right = mkscope(yys[yypt-2].yyv.node); yyval.node = mkbin(Oseq, mkunary(Olabel, rotater(yys[yypt-1].yyv.node)), yys[yypt-3].yyv.node); } 171=> -#line 1091 "limbo.y" +#line 1092 "limbo.y" { yyval.node = mkname(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval); } 172=> -#line 1095 "limbo.y" +#line 1096 "limbo.y" { yyval.node = mkn(Owild, nil, nil); yyval.node.src = yys[yypt-0].yyv.tok.src; } 173=> -#line 1100 "limbo.y" +#line 1101 "limbo.y" { yyval.node = mkbin(Oseq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 174=> -#line 1104 "limbo.y" +#line 1105 "limbo.y" { yyval.node = mkn(Onothing, nil, nil); yyval.node.src.start = curline(); yyval.node.src.stop = yyval.node.src.start; } 175=> -#line 1112 "limbo.y" +#line 1113 "limbo.y" { yyval.node = mkn(Onothing, nil, nil); yyval.node.src.start = curline(); @@ -2513,77 +2514,77 @@ yyval.node = yys[yyp+1].yyv.node; 177=> yyval.node = yys[yyp+1].yyv.node; 178=> -#line 1122 "limbo.y" +#line 1123 "limbo.y" { yyval.node = mkbin(Oas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 179=> -#line 1126 "limbo.y" +#line 1127 "limbo.y" { yyval.node = mkbin(Oandas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 180=> -#line 1130 "limbo.y" +#line 1131 "limbo.y" { yyval.node = mkbin(Ooras, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 181=> -#line 1134 "limbo.y" +#line 1135 "limbo.y" { yyval.node = mkbin(Oxoras, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 182=> -#line 1138 "limbo.y" +#line 1139 "limbo.y" { yyval.node = mkbin(Olshas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 183=> -#line 1142 "limbo.y" +#line 1143 "limbo.y" { yyval.node = mkbin(Orshas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 184=> -#line 1146 "limbo.y" +#line 1147 "limbo.y" { yyval.node = mkbin(Oaddas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 185=> -#line 1150 "limbo.y" +#line 1151 "limbo.y" { yyval.node = mkbin(Osubas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 186=> -#line 1154 "limbo.y" +#line 1155 "limbo.y" { yyval.node = mkbin(Omulas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 187=> -#line 1158 "limbo.y" +#line 1159 "limbo.y" { yyval.node = mkbin(Odivas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 188=> -#line 1162 "limbo.y" +#line 1163 "limbo.y" { yyval.node = mkbin(Omodas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 189=> -#line 1166 "limbo.y" +#line 1167 "limbo.y" { yyval.node = mkbin(Oexpas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 190=> -#line 1170 "limbo.y" +#line 1171 "limbo.y" { yyval.node = mkbin(Osnd, yys[yypt-3].yyv.node, yys[yypt-0].yyv.node); } 191=> -#line 1174 "limbo.y" +#line 1175 "limbo.y" { yyval.node = mkbin(Odas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 192=> -#line 1178 "limbo.y" +#line 1179 "limbo.y" { yyval.node = mkn(Oload, yys[yypt-0].yyv.node, nil); yyval.node.src.start = yys[yypt-2].yyv.tok.src.start; @@ -2591,201 +2592,201 @@ yyval.node = yys[yyp+1].yyv.node; yyval.node.ty = mkidtype(yys[yypt-1].yyv.tok.src, yys[yypt-1].yyv.tok.v.idval); } 193=> -#line 1185 "limbo.y" +#line 1186 "limbo.y" { yyval.node = yyval.node = mkbin(Oexp, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 194=> -#line 1189 "limbo.y" +#line 1190 "limbo.y" { yyval.node = mkbin(Omul, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 195=> -#line 1193 "limbo.y" +#line 1194 "limbo.y" { yyval.node = mkbin(Odiv, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 196=> -#line 1197 "limbo.y" +#line 1198 "limbo.y" { yyval.node = mkbin(Omod, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 197=> -#line 1201 "limbo.y" +#line 1202 "limbo.y" { yyval.node = mkbin(Oadd, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 198=> -#line 1205 "limbo.y" +#line 1206 "limbo.y" { yyval.node = mkbin(Osub, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 199=> -#line 1209 "limbo.y" +#line 1210 "limbo.y" { yyval.node = mkbin(Orsh, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 200=> -#line 1213 "limbo.y" +#line 1214 "limbo.y" { yyval.node = mkbin(Olsh, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 201=> -#line 1217 "limbo.y" +#line 1218 "limbo.y" { yyval.node = mkbin(Olt, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 202=> -#line 1221 "limbo.y" +#line 1222 "limbo.y" { yyval.node = mkbin(Ogt, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 203=> -#line 1225 "limbo.y" +#line 1226 "limbo.y" { yyval.node = mkbin(Oleq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 204=> -#line 1229 "limbo.y" +#line 1230 "limbo.y" { yyval.node = mkbin(Ogeq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 205=> -#line 1233 "limbo.y" +#line 1234 "limbo.y" { yyval.node = mkbin(Oeq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 206=> -#line 1237 "limbo.y" +#line 1238 "limbo.y" { yyval.node = mkbin(Oneq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 207=> -#line 1241 "limbo.y" +#line 1242 "limbo.y" { yyval.node = mkbin(Oand, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 208=> -#line 1245 "limbo.y" +#line 1246 "limbo.y" { yyval.node = mkbin(Oxor, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 209=> -#line 1249 "limbo.y" +#line 1250 "limbo.y" { yyval.node = mkbin(Oor, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 210=> -#line 1253 "limbo.y" +#line 1254 "limbo.y" { yyval.node = mkbin(Ocons, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 211=> -#line 1257 "limbo.y" +#line 1258 "limbo.y" { yyval.node = mkbin(Oandand, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 212=> -#line 1261 "limbo.y" +#line 1262 "limbo.y" { yyval.node = mkbin(Ooror, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 213=> yyval.node = yys[yyp+1].yyv.node; 214=> -#line 1268 "limbo.y" +#line 1269 "limbo.y" { yys[yypt-0].yyv.node.src.start = yys[yypt-1].yyv.tok.src.start; yyval.node = yys[yypt-0].yyv.node; } 215=> -#line 1273 "limbo.y" +#line 1274 "limbo.y" { yyval.node = mkunary(Oneg, yys[yypt-0].yyv.node); yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; } 216=> -#line 1278 "limbo.y" +#line 1279 "limbo.y" { yyval.node = mkunary(Onot, yys[yypt-0].yyv.node); yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; } 217=> -#line 1283 "limbo.y" +#line 1284 "limbo.y" { yyval.node = mkunary(Ocomp, yys[yypt-0].yyv.node); yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; } 218=> -#line 1288 "limbo.y" +#line 1289 "limbo.y" { yyval.node = mkunary(Oind, yys[yypt-0].yyv.node); yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; } 219=> -#line 1293 "limbo.y" +#line 1294 "limbo.y" { yyval.node = mkunary(Opreinc, yys[yypt-0].yyv.node); yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; } 220=> -#line 1298 "limbo.y" +#line 1299 "limbo.y" { yyval.node = mkunary(Opredec, yys[yypt-0].yyv.node); yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; } 221=> -#line 1303 "limbo.y" +#line 1304 "limbo.y" { yyval.node = mkunary(Orcv, yys[yypt-0].yyv.node); yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; } 222=> -#line 1308 "limbo.y" +#line 1309 "limbo.y" { yyval.node = mkunary(Ohd, yys[yypt-0].yyv.node); yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; } 223=> -#line 1313 "limbo.y" +#line 1314 "limbo.y" { yyval.node = mkunary(Otl, yys[yypt-0].yyv.node); yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; } 224=> -#line 1318 "limbo.y" +#line 1319 "limbo.y" { yyval.node = mkunary(Olen, yys[yypt-0].yyv.node); yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; } 225=> -#line 1323 "limbo.y" +#line 1324 "limbo.y" { yyval.node = mkunary(Oref, yys[yypt-0].yyv.node); yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; } 226=> -#line 1328 "limbo.y" +#line 1329 "limbo.y" { yyval.node = mkunary(Otagof, yys[yypt-0].yyv.node); yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; } 227=> -#line 1333 "limbo.y" +#line 1334 "limbo.y" { yyval.node = mkn(Oarray, yys[yypt-3].yyv.node, nil); yyval.node.ty = mktype(yys[yypt-5].yyv.tok.src.start, yys[yypt-0].yyv.ty.src.stop, Tarray, yys[yypt-0].yyv.ty, nil); yyval.node.src = yyval.node.ty.src; } 228=> -#line 1339 "limbo.y" +#line 1340 "limbo.y" { yyval.node = mkn(Oarray, yys[yypt-5].yyv.node, yys[yypt-1].yyv.node); yyval.node.src.start = yys[yypt-7].yyv.tok.src.start; yyval.node.src.stop = yys[yypt-0].yyv.tok.src.stop; } 229=> -#line 1345 "limbo.y" +#line 1346 "limbo.y" { yyval.node = mkn(Onothing, nil, nil); yyval.node.src.start = yys[yypt-5].yyv.tok.src.start; @@ -2795,49 +2796,49 @@ yyval.node = yys[yyp+1].yyv.node; yyval.node.src.stop = yys[yypt-0].yyv.tok.src.stop; } 230=> -#line 1354 "limbo.y" +#line 1355 "limbo.y" { yyval.node = etolist(yys[yypt-1].yyv.node); yyval.node.src.start = yys[yypt-4].yyv.tok.src.start; yyval.node.src.stop = yys[yypt-0].yyv.tok.src.stop; } 231=> -#line 1360 "limbo.y" +#line 1361 "limbo.y" { yyval.node = mkn(Ochan, nil, nil); yyval.node.ty = mktype(yys[yypt-2].yyv.tok.src.start, yys[yypt-0].yyv.ty.src.stop, Tchan, yys[yypt-0].yyv.ty, nil); yyval.node.src = yyval.node.ty.src; } 232=> -#line 1366 "limbo.y" +#line 1367 "limbo.y" { yyval.node = mkn(Ochan, yys[yypt-3].yyv.node, nil); yyval.node.ty = mktype(yys[yypt-5].yyv.tok.src.start, yys[yypt-0].yyv.ty.src.stop, Tchan, yys[yypt-0].yyv.ty, nil); yyval.node.src = yyval.node.ty.src; } 233=> -#line 1372 "limbo.y" +#line 1373 "limbo.y" { yyval.node = mkunary(Ocast, yys[yypt-0].yyv.node); yyval.node.ty = mktype(yys[yypt-3].yyv.tok.src.start, yys[yypt-0].yyv.node.src.stop, Tarray, mkidtype(yys[yypt-1].yyv.tok.src, yys[yypt-1].yyv.tok.v.idval), nil); yyval.node.src = yyval.node.ty.src; } 234=> -#line 1378 "limbo.y" +#line 1379 "limbo.y" { yyval.node = mkunary(Ocast, yys[yypt-0].yyv.node); yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; yyval.node.ty = mkidtype(yyval.node.src, yys[yypt-1].yyv.tok.v.idval); } 235=> -#line 1384 "limbo.y" +#line 1385 "limbo.y" { yyval.node = mkunary(Ocast, yys[yypt-0].yyv.node); yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; yyval.node.ty = mkidtype(yyval.node.src, yys[yypt-1].yyv.tok.v.idval); } 236=> -#line 1390 "limbo.y" +#line 1391 "limbo.y" { yyval.node = mkunary(Ocast, yys[yypt-0].yyv.node); yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; @@ -2846,14 +2847,14 @@ yyval.node = yys[yyp+1].yyv.node; 237=> yyval.node = yys[yyp+1].yyv.node; 238=> -#line 1399 "limbo.y" +#line 1400 "limbo.y" { yyval.node = mkn(Ocall, yys[yypt-3].yyv.node, yys[yypt-1].yyv.node); yyval.node.src.start = yys[yypt-3].yyv.node.src.start; yyval.node.src.stop = yys[yypt-0].yyv.tok.src.stop; } 239=> -#line 1405 "limbo.y" +#line 1406 "limbo.y" { yyval.node = yys[yypt-1].yyv.node; if(yys[yypt-1].yyv.node.op == Oseq) @@ -2864,14 +2865,14 @@ yyval.node = yys[yyp+1].yyv.node; yyval.node.src.stop = yys[yypt-0].yyv.tok.src.stop; } 240=> -#line 1415 "limbo.y" +#line 1416 "limbo.y" { # n := mkdeclname($1, mkids($1, enter(".fn"+string nfnexp++, 0), nil, nil)); # $<node>$ = fndef(n, $2); # nfns++; } 241=> -#line 1420 "limbo.y" +#line 1421 "limbo.y" { # $$ = fnfinishdef($<node>3, $4); # $$ = mkdeclname($1, $$.left.decl); @@ -2879,23 +2880,23 @@ yyval.node = yys[yyp+1].yyv.node; yyval.node = nil; } 242=> -#line 1427 "limbo.y" +#line 1428 "limbo.y" { yyval.node = mkbin(Odot, yys[yypt-2].yyv.node, mkname(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval)); } 243=> -#line 1431 "limbo.y" +#line 1432 "limbo.y" { yyval.node = mkbin(Omdot, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 244=> -#line 1435 "limbo.y" +#line 1436 "limbo.y" { yyval.node = mkbin(Oindex, yys[yypt-3].yyv.node, yys[yypt-1].yyv.node); yyval.node.src.stop = yys[yypt-0].yyv.tok.src.stop; } 245=> -#line 1440 "limbo.y" +#line 1441 "limbo.y" { if(yys[yypt-3].yyv.node.op == Onothing) yys[yypt-3].yyv.node.src = yys[yypt-2].yyv.tok.src; @@ -2905,52 +2906,52 @@ yyval.node = yys[yyp+1].yyv.node; yyval.node.src.stop = yys[yypt-0].yyv.tok.src.stop; } 246=> -#line 1449 "limbo.y" +#line 1450 "limbo.y" { yyval.node = mkunary(Oinc, yys[yypt-1].yyv.node); yyval.node.src.stop = yys[yypt-0].yyv.tok.src.stop; } 247=> -#line 1454 "limbo.y" +#line 1455 "limbo.y" { yyval.node = mkunary(Odec, yys[yypt-1].yyv.node); yyval.node.src.stop = yys[yypt-0].yyv.tok.src.stop; } 248=> -#line 1459 "limbo.y" +#line 1460 "limbo.y" { yyval.node = mksconst(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval); } 249=> -#line 1463 "limbo.y" +#line 1464 "limbo.y" { yyval.node = mkconst(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.ival); if(yys[yypt-0].yyv.tok.v.ival > big 16r7fffffff || yys[yypt-0].yyv.tok.v.ival < big -16r7fffffff) yyval.node.ty = tbig; } 250=> -#line 1469 "limbo.y" +#line 1470 "limbo.y" { yyval.node = mkrconst(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.rval); } 251=> -#line 1473 "limbo.y" +#line 1474 "limbo.y" { yyval.node = mkbin(Oindex, yys[yypt-5].yyv.node, rotater(mkbin(Oseq, yys[yypt-3].yyv.node, yys[yypt-1].yyv.node))); yyval.node.src.stop = yys[yypt-0].yyv.tok.src.stop; } 252=> -#line 1480 "limbo.y" +#line 1481 "limbo.y" { yyval.node = mkname(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval); } 253=> -#line 1484 "limbo.y" +#line 1485 "limbo.y" { yyval.node = mknil(yys[yypt-0].yyv.tok.src); } 254=> -#line 1490 "limbo.y" +#line 1491 "limbo.y" { yyval.node = mkn(Otuple, rotater(yys[yypt-1].yyv.node), nil); yyval.node.src.start = yys[yypt-2].yyv.tok.src.start; @@ -2959,7 +2960,7 @@ yyval.node = yys[yyp+1].yyv.node; 255=> yyval.node = yys[yyp+1].yyv.node; 256=> -#line 1499 "limbo.y" +#line 1500 "limbo.y" { yyval.node = mkbin(Oseq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } @@ -2968,28 +2969,28 @@ yyval.node = yys[yyp+1].yyv.node; 258=> yyval.node = yys[yyp+1].yyv.node; 259=> -#line 1509 "limbo.y" +#line 1510 "limbo.y" { yyval.node = mkn(Otype, nil, nil); yyval.node.ty = mkidtype(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval); yyval.node.src = yyval.node.ty.src; } 260=> -#line 1515 "limbo.y" +#line 1516 "limbo.y" { yyval.node = mkn(Otype, nil, nil); yyval.node.ty = mktype(yys[yypt-2].yyv.tok.src.start, yys[yypt-0].yyv.ty.src.stop, Tarray, yys[yypt-0].yyv.ty, nil); yyval.node.src = yyval.node.ty.src; } 261=> -#line 1521 "limbo.y" +#line 1522 "limbo.y" { yyval.node = mkn(Otype, nil, nil); yyval.node.ty = mktype(yys[yypt-2].yyv.tok.src.start, yys[yypt-0].yyv.ty.src.stop, Tlist, yys[yypt-0].yyv.ty, nil); yyval.node.src = yyval.node.ty.src; } 262=> -#line 1527 "limbo.y" +#line 1528 "limbo.y" { yyval.node = mkn(Otype, nil ,nil); yyval.node.ty = yys[yypt-0].yyv.ty; @@ -2997,12 +2998,12 @@ yyval.node = yys[yyp+1].yyv.node; yyval.node.src = yyval.node.ty.src; } 263=> -#line 1536 "limbo.y" +#line 1537 "limbo.y" { yyval.node = mkname(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval); } 264=> -#line 1540 "limbo.y" +#line 1541 "limbo.y" { yyval.node = nil; } @@ -3011,22 +3012,22 @@ yyval.node = yys[yyp+1].yyv.node; 266=> yyval.node = yys[yyp+1].yyv.node; 267=> -#line 1548 "limbo.y" +#line 1549 "limbo.y" { yyval.node = mkbin(Oseq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 268=> -#line 1552 "limbo.y" +#line 1553 "limbo.y" { yyval.node = mkbin(Oseq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 269=> -#line 1558 "limbo.y" +#line 1559 "limbo.y" { yyval.node = nil; } 270=> -#line 1562 "limbo.y" +#line 1563 "limbo.y" { yyval.node = rotater(yys[yypt-0].yyv.node); } @@ -3037,40 +3038,40 @@ yyval.node = yys[yyp+1].yyv.node; 273=> yyval.node = yys[yyp+1].yyv.node; 274=> -#line 1573 "limbo.y" +#line 1574 "limbo.y" { yyval.node = mkbin(Oseq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 275=> -#line 1579 "limbo.y" +#line 1580 "limbo.y" { yyval.node = rotater(yys[yypt-0].yyv.node); } 276=> -#line 1583 "limbo.y" +#line 1584 "limbo.y" { yyval.node = rotater(yys[yypt-1].yyv.node); } 277=> yyval.node = yys[yyp+1].yyv.node; 278=> -#line 1590 "limbo.y" +#line 1591 "limbo.y" { yyval.node = mkbin(Oseq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 279=> -#line 1596 "limbo.y" +#line 1597 "limbo.y" { yyval.node = mkn(Oelem, nil, yys[yypt-0].yyv.node); yyval.node.src = yys[yypt-0].yyv.node.src; } 280=> -#line 1601 "limbo.y" +#line 1602 "limbo.y" { yyval.node = mkbin(Oelem, rotater(yys[yypt-2].yyv.node), yys[yypt-0].yyv.node); } 281=> -#line 1607 "limbo.y" +#line 1608 "limbo.y" { if(yys[yypt-1].yyv.node.op == Oseq) yys[yypt-1].yyv.node.right.left = rotater(yys[yypt-0].yyv.node); @@ -3079,12 +3080,12 @@ yyval.node = yys[yyp+1].yyv.node; yyval.node = yys[yypt-1].yyv.node; } 282=> -#line 1617 "limbo.y" +#line 1618 "limbo.y" { yyval.node = typedecl(yys[yypt-1].yyv.ids, mktype(yys[yypt-1].yyv.ids.src.start, yys[yypt-0].yyv.tok.src.stop, Tpoly, nil, nil)); } 283=> -#line 1621 "limbo.y" +#line 1622 "limbo.y" { if(yys[yypt-3].yyv.node.op == Oseq) yys[yypt-3].yyv.node.right.left = rotater(yys[yypt-2].yyv.node); diff --git a/appl/cmd/limbo/limbo.y b/appl/cmd/limbo/limbo.y index 0c56bd1b..c143923a 100644 --- a/appl/cmd/limbo/limbo.y +++ b/appl/cmd/limbo/limbo.y @@ -146,6 +146,7 @@ include "draw.m"; Ldo Lwhile Lfor Lbreak Lalt Lcase Lpick Lcont Lreturn Lexit Lspawn Lraise Lfix + Ldynamic %% prog : Limplement ids ';' { diff --git a/appl/cmd/limbo/typecheck.b b/appl/cmd/limbo/typecheck.b index fc0d43e4..0f1cbe7f 100644 --- a/appl/cmd/limbo/typecheck.b +++ b/appl/cmd/limbo/typecheck.b @@ -2116,12 +2116,12 @@ argncompat(n: ref Node, f: ref Decl, a: ref Node): int passimplicit(fname, args: ref Node): ref Node { t := fname.ty; + n := fname.left; if(t.ids == nil || t.ids.implicit == byte 0){ - if(hasside(fname.left, 1)) - nwarn(fname, "result of expression "+expconv(fname.left)+" ignored"); + if(!isfnrefty(t) && hasside(n, 1)) + nwarn(fname, "result of expression "+expconv(n)+" ignored"); return args; } - n := fname.left; if(n.op == Oname && n.decl.store == Dtype){ nerror(n, expconv(n)+" is a type and cannot be a self argument"); n = mkn(Onothing, nil, nil); diff --git a/appl/cmd/mk/mk.b b/appl/cmd/mk/mk.b index 49a5c1a2..7deadba5 100644 --- a/appl/cmd/mk/mk.b +++ b/appl/cmd/mk/mk.b @@ -18,8 +18,6 @@ include "bufio.m"; Iobuf: import bufio; include "libc0.m"; libc0: Libc0; -include "math.m"; - math: Math; include "regex.m"; regex: Regex; include "ar.m"; @@ -33,9 +31,9 @@ init(nil: ref Draw->Context, argl: list of string) sys = load Sys Sys->PATH; bufio = load Bufio Bufio->PATH; libc0 = load Libc0 Libc0->PATH; - math = load Math Math->PATH; regex = load Regex Regex->PATH; daytime = load Daytime Daytime->PATH; + sys->pctl(Sys->FORKNS, nil); main(len argl, libc0->ls2aab(argl)); } @@ -622,7 +620,7 @@ initbind() f := sys->sprint("/usr/%s/lib/mkbinds", getuser()); b := bufio->open(f, Bufio->OREAD); if(b == nil) - b = bufio->open("/appl/cmd/mk/mkbinds", Bufio->OREAD); + b = bufio->open("/lib/mk/binds", Bufio->OREAD); if(b == nil) return; while((s := b.gets('\n')) != nil){ @@ -3038,6 +3036,11 @@ readenv() w: ref Word; sys->pctl(Sys->FORKENV, nil); # use copy of the current environment variables + if(sys->open("/env/autoload", Sys->OREAD) == nil){ + fd := sys->create("/env/autoload", Sys->OWRITE, 8r666); + if(fd != nil) + sys->fprint(fd, "std"); + } envf = sys->open("/env", Sys->OREAD); if(envf == nil) return; diff --git a/appl/cmd/mkfile b/appl/cmd/mkfile index 2bbdb938..53e7be54 100644 --- a/appl/cmd/mkfile +++ b/appl/cmd/mkfile @@ -23,6 +23,7 @@ TARG=\ 9srvfs.dis\ 9win.dis\ B.dis\ + ar.dis\ archfs.dis\ auplay.dis\ auhdr.dis\ @@ -34,6 +35,7 @@ TARG=\ cal.dis\ cat.dis\ cd.dis\ + cddb.dis\ chgrp.dis\ chmod.dis\ cleanname.dis\ @@ -83,11 +85,11 @@ TARG=\ lockfs.dis\ logfile.dis\ look.dis\ - lookman.dis\ lc.dis\ ls.dis\ lstar.dis\ man.dis\ + man2html.dis\ man2txt.dis\ mathcalc.dis\ mc.dis\ @@ -128,7 +130,6 @@ TARG=\ sed.dis\ sendmail.dis\ sha1sum.dis\ - shutdown.dis\ sleep.dis\ sort.dis\ src.dis\ diff --git a/appl/cmd/os.b b/appl/cmd/os.b index c51faa2a..23f8b53c 100644 --- a/appl/cmd/os.b +++ b/appl/cmd/os.b @@ -26,12 +26,14 @@ init(nil: ref Draw->Context, args: list of string) fail(sys->sprint("cannot load %s: %r", Arg->PATH)); arg->init(args); - arg->setusage("os [-d dir] [-n] command [arg...]"); + arg->setusage("os [-d dir] [-m mount] [-n] [-N nice] [-b] command [arg...]"); nice := 0; nicearg: string; workdir := ""; mntpoint := ""; + foreground := 1; + while((opt := arg->opt()) != 0) { case opt { 'd' => @@ -43,6 +45,8 @@ init(nil: ref Draw->Context, args: list of string) 'N' => nice = 1; nicearg = sys->sprint(" %q", arg->earg()); + 'b' => + foreground = 0; * => arg->usage(); } @@ -78,32 +82,41 @@ init(nil: ref Draw->Context, args: list of string) if(workdir != nil && sys->fprint(cfd, "dir %s", workdir) < 0) fail(sys->sprint("cannot set cwd %q: %r", workdir)); - if(sys->fprint(cfd, "killonclose") < 0) + if(foreground && sys->fprint(cfd, "killonclose") < 0) sys->fprint(sys->fildes(2), "os: warning: cannot write killonclose: %r\n"); if(sys->fprint(cfd, "exec %s", str->quoted(args)) < 0) fail(sys->sprint("cannot exec: %r")); - if((tocmd := sys->open(dir+"/data", sys->OWRITE)) == nil) - fail(sys->sprint("canot open %s/data for writing: %r", dir)); - - if((fromcmd := sys->open(dir+"/data", sys->OREAD)) == nil) - fail(sys->sprint("cannot open %s/data for reading: %r", dir)); - - spawn copy(sync := chan of int, nil, sys->fildes(0), tocmd); - pid := <-sync; - sync = nil; - tocmd = nil; - - spawn copy(nil, done := chan of int, fromcmd, sys->fildes(1)); + if(foreground){ + if((tocmd := sys->open(dir+"/data", sys->OWRITE)) == nil) + fail(sys->sprint("canot open %s/data for writing: %r", dir)); + if((fromcmd := sys->open(dir+"/data", sys->OREAD)) == nil) + fail(sys->sprint("cannot open %s/data for reading: %r", dir)); + if((errcmd := sys->open(dir+"/stderr", sys->OREAD)) == nil) + fail(sys->sprint("cannot open %s/stderr for reading: %r", dir)); + + spawn copy(sync := chan of int, nil, sys->fildes(0), tocmd); + pid := <-sync; + tocmd = nil; + + spawn copy(sync, nil, errcmd, sys->fildes(2)); + epid := <-sync; + sync = nil; + errcmd = nil; + + spawn copy(nil, done := chan of int, fromcmd, sys->fildes(1)); + fromcmd = nil; - # cfd is still open, so if we're killgrp'ed and we're on a platform - # (e.g. windows) where the fromcmd read is uninterruptible, - # cfd will be closed, so the command will be killed (due to killonclose), and - # the fromcmd read should complete, allowing that process to be killed. + # cfd is still open, so if we're killgrp'ed and we're on a platform + # (e.g. windows) where the fromcmd read is uninterruptible, + # cfd will be closed, so the command will be killed (due to killonclose), and + # the fromcmd read should complete, allowing that process to be killed. - <-done; - kill(pid); + <-done; + kill(pid); + kill(epid); + } if(wfd != nil){ status := array[1024] of byte; diff --git a/appl/cmd/test.b b/appl/cmd/test.b index eb7bf46f..2095d0f7 100644 --- a/appl/cmd/test.b +++ b/appl/cmd/test.b @@ -1,193 +1,188 @@ implement Test; -# -# POSIX standard -# test expression -# [ expression ] -# -# translated Brazil /sys/src/cmd/test.c # -# print "true" on stdout iff the expression evaluates to true +# venerable +# test expression # include "sys.m"; -sys: Sys; -stderr: ref Sys->FD; + sys: Sys; + stderr: ref Sys->FD; include "draw.m"; +include "daytime.m"; + daytime: Daytime; + Test: module { init: fn(ctxt: ref Draw->Context, argv: list of string); }; -ap: int; -ac: int; -av: array of string; +gargs: list of string; -init(nil: ref Draw->Context, argl: list of string) +init(nil: ref Draw->Context, args: list of string) { - if(argl == nil) + if(args == nil) return; + gargs = tl args; sys = load Sys Sys->PATH; stderr = sys->fildes(2); - ac = len argl; - av = array [ac] of string; - for(i := 0; argl != nil; argl = tl argl) - av[i++] = hd argl; - - if(av[0] == "[") { - if(av[--ac] != "]") - synbad("] missing"); - } - - ap = 1; - if(ap<ac && e()) - sys->print("true"); -# exit; -# sys->raise "fail: false"; + if(gargs == nil) + raise "fail:usage"; + if(!e()) + raise "fail:false"; } -nxtarg(mt: int): string +nextarg(mt: int): string { - if(ap >= ac){ - if(mt){ - ap++; + if(gargs == nil){ + if(mt) return nil; - } synbad("argument expected"); } - return av[ap++]; + s := hd gargs; + gargs = tl gargs; + return s; } -nxtintarg(): (int, int) +nextintarg(): (int, int) { - if(ap<ac && isint(av[ap])) - return (1, int av[ap++]); + if(gargs != nil && isint(hd gargs)) + return (1, int nextarg(0)); return (0, 0); } +isnextarg(s: string): int +{ + if(gargs != nil && hd gargs == s){ + gargs = tl gargs; + return 1; + } + return 0; +} + e(): int { p1 := e1(); - if(nxtarg(1) == "-o") + if(isnextarg("-o")) return p1 || e(); - ap--; return p1; } e1(): int { p1 := e2(); - if(nxtarg(1) == "-a") + if(isnextarg("-a")) return p1 && e1(); - ap--; return p1; } e2(): int { - if(nxtarg(0) == "!") + if(isnextarg("!")) return !e2(); - ap--; return e3(); } e3(): int { - a := nxtarg(0); - if(a == "(") { + a := nextarg(0); + case a { + "(" => p1 := e(); - if(nxtarg(0) != ")") + if(nextarg(0) != ")") synbad(") expected"); return p1; - } - - if(a == "-f") - return filck(nxtarg(0), Topf); - - if(a == "-d") - return filck(nxtarg(0), Topd); - - if(a == "-r") - return filck(nxtarg(0), Topr); - - if(a == "-w") - return filck(nxtarg(0), Topw); - - if(a == "-x") - return filck(nxtarg(0), Topx); - - if(a == "-e") - return filck(nxtarg(0), Tope); - - if(a == "-c") - return 0; - - if(a == "-b") - return 0; - - if(a == "-u") - return 0; - - if(a == "-g") - return 0; - - if(a == "-s") - return filck(nxtarg(0), Tops); - - if(a == "-t") { - (ok, int1) := nxtintarg(); + "-A" => + return hasmode(nextarg(0), Sys->DMAPPEND); + "-L" => + return hasmode(nextarg(0), Sys->DMEXCL); + "-T" => + return hasmode(nextarg(0), Sys->DMTMP); + "-f" => + f := nextarg(0); + return exists(f) && !hasmode(f, Sys->DMDIR); + "-d" => + return hasmode(nextarg(0), Sys->DMDIR); + "-r" => + return sys->open(nextarg(0), Sys->OREAD) != nil; + "-w" => + return sys->open(nextarg(0), Sys->OWRITE) != nil; + "-x" => + fd := sys->open(nextarg(0), Sys->OREAD); + if(fd == nil) + return 0; + (ok, d) := sys->fstat(fd); + if(ok < 0) + return 0; + return (d.mode & 8r111) != 0; + "-e" => + return exists(nextarg(0)); + "-s" => + (ok, d) := sys->stat(nextarg(0)); + if(ok < 0) + return 0; + return d.length > big 0; + "-t" => + (ok, fd) := nextintarg(); if(!ok) - return isatty(1); - else - return isatty(int1); - } - - if(a == "-n") - return nxtarg(0) != ""; - if(a == "-z") - return nxtarg(0) == ""; - - p2 := nxtarg(1); - if (p2 == nil) - return a != nil; - if(p2 == "=") - return nxtarg(0) == a; - - if(p2 == "!=") - return nxtarg(0) != a; + return iscons(1); + return iscons(fd); + "-n" => + return nextarg(0) != ""; + "-z" => + return nextarg(0) == ""; + * => + p2 := nextarg(1); + if(p2 == nil) + return a != nil; + case p2 { + "=" => + return nextarg(0) == a; + "!=" => + return nextarg(0) != a; + "-older" => + return isolder(nextarg(0), a); + "-ot" => + return isolderthan(a, nextarg(0)); + "-nt" => + return isnewerthan(a, nextarg(0)); + } - if(!isint(a)) - return a != nil; - int1 := int a; + if(!isint(a)) + return a != nil; + + int1 := int a; + (ok, int2) := nextintarg(); + if(ok){ + case p2 { + "-eq" => + return int1 == int2; + "-ne" => + return int1 != int2; + "-gt" => + return int1 > int2; + "-lt" => + return int1 < int2; + "-ge" => + return int1 >= int2; + "-le" => + return int1 <= int2; + } + } - (ok, int2) := nxtintarg(); - if(ok){ - if(p2 == "-eq") - return int1 == int2; - if(p2 == "-ne") - return int1 != int2; - if(p2 == "-gt") - return int1 > int2; - if(p2 == "-lt") - return int1 < int2; - if(p2 == "-ge") - return int1 >= int2; - if(p2 == "-le") - return int1 <= int2; + synbad("unknown operator " + p2); + return 0; } - - synbad("unknown operator " + p2); - return 0; # to shut ken up } synbad(s: string) { sys->fprint(stderr, "test: bad syntax: %s\n", s); - exit; + raise "fail:bad syntax"; } isint(s: string): int @@ -200,79 +195,90 @@ isint(s: string): int return 1; } -Topr, -Topw, -Topx, -Tope, -Topf, -Topd, -Tops: con iota; - -filck(fname: string, Top: int): int +exists(f: string): int { - (ok, dir) := sys->stat(fname); - - if(ok >= 0) { - ok = 0; - case Top { - Topr => # readable - ok = permck(dir, 8r004); - Topw => # writable - ok = permck(dir, 8r002); - Topx => # executable - ok = permck(dir, 8r001); - Tope => # exists - ok = 1; - Topf => # is a regular file - ok = (dir.mode & Sys->DMDIR) == 0; - Topd => # is a directory - ok = (dir.mode & Sys->DMDIR) != 0; - Tops => # has length > 0 - ok = dir.length > big 0; - } - } + return sys->stat(f).t0 >= 0; +} - return ok > 0; +hasmode(f: string, m: int): int +{ + (ok, d) := sys->stat(f); + if(ok < 0) + return 0; + return (d.mode & m) != 0; } -uid, -gid: string; +iscons(fno: int): int +{ + fd := sys->fildes(fno); + if(fd == nil) + return 0; + s := sys->fd2path(fd); + n := len "/dev/cons"; + return s == "#c/cons" || len s >= n && s[len s-n:] == "/dev/cons"; +} -permck(dir: Sys->Dir, mask: int): int +isolder(t: string, f: string): int { - if(uid == nil) { - fd := sys->open("/dev/user", Sys->OREAD); - if(fd != nil) { - buf := array [28] of byte; - n := sys->read(fd, buf, len buf); - if(n > 0) - uid = string buf[:n]; + (ok, dir) := sys->stat(f); + if(ok < 0) + return 0; + + n := 0; + for(i := 0; i < len t;){ + for(j := i; j < len t; j++) + if(!(t[j] >= '0' && t[j] <= '9')) + break; + if(i == j) + synbad("bad time syntax, "+t); + m := int t[i:j]; + i = j; + if(i == len t){ + n = m; + break; + } + case t[i++] { + 'y' => n += m*12*30*24*3600; + 'M' => n += m*30*24*3600; + 'd' => n += m*24*3600; + 'h' => n += m*3600; + 'm' => n += m*60; + 's' => n += m; + * => synbad("bad time syntax, "+t); } - gid = nil; # how do I find out what my group is? } - - ok: int = 0; - - ok = dir.mode & mask<<0; - if(!ok && dir.gid == gid) - ok = dir.mode & mask<<3; - if(!ok && dir.uid == uid) - ok = dir.mode & mask<<6; - return ok > 0; + return dir.mtime+n < now(); } -isatty(fd: int): int +isolderthan(a: string, b: string): int { - d1, d2: Sys->Dir; + (aok, ad) := sys->stat(a); + if(aok < 0) + return 0; + (bok, bd) := sys->stat(b); + if(bok < 0) + return 0; + return ad.mtime < bd.mtime; +} - ok: int; - (ok, d1) = sys->fstat(sys->fildes(fd)); - if(ok < 0) +isnewerthan(a: string, b: string): int +{ + (aok, ad) := sys->stat(a); + if(aok < 0) return 0; - (ok, d2) = sys->stat("/dev/cons"); - if(ok < 0) + (bok, bd) := sys->stat(b); + if(bok < 0) return 0; + return ad.mtime > bd.mtime; +} - return d1.dtype==d2.dtype && d1.dev==d2.dev && d1.qid.path==d2.qid.path; +now(): int +{ + if(daytime == nil){ + daytime = load Daytime Daytime->PATH; + if(daytime == nil) + synbad(sys->sprint("can't load %s: %r", Daytime->PATH)); + } + return daytime->now(); } diff --git a/appl/lib/chanfill.b b/appl/lib/chanfill.b index 7e7d2685..6f326ea6 100644 --- a/appl/lib/chanfill.b +++ b/appl/lib/chanfill.b @@ -32,25 +32,21 @@ init(data: array of byte, f: int, c: Sys->Rwrite, r: ref Sys->FileIO, b: Bufio): fill(b: ref Iobuf): int { for (;;) { - alt { - (nil, data, f, c) := <-fio.write => - if (f != fid) { - if (c != nil) - c <-= (0, "file busy"); - continue; - } - if (c == nil) - return Bufio->EOF; - c <-= (len data, nil); - i := len data; - if (i == 0) - continue; - b.buffer[b.size:] = data; - b.size += i; - b.filpos += big i; - return i; - * => - return Bufio->EOF; + (nil, data, f, c) := <-fio.write; + if (f != fid) { + if (c != nil) + c <-= (0, "file busy"); + continue; } + if (c == nil) + return Bufio->EOF; + c <-= (len data, nil); + i := len data; + if (i == 0) + continue; + b.buffer[b.size:] = data; + b.size += i; + b.filpos += big i; + return i; } } diff --git a/appl/lib/dis.b b/appl/lib/dis.b index f64fd162..c907df61 100644 --- a/appl/lib/dis.b +++ b/appl/lib/dis.b @@ -318,7 +318,7 @@ loadobj(disfile: string): (ref Mod, string) reals := array[n] of real; for(i = 0; i < n; i++) reals[i] = math->bits64real(getl()); - dat = ref Data.Reals(op, n, offset, nil); + dat = ref Data.Reals(op, n, offset, reals); } else { disptr += 8*n; # skip it dat = ref Data.Reals(op, n, offset, nil); diff --git a/appl/lib/mkfile b/appl/lib/mkfile index 210e2f74..f414732d 100644 --- a/appl/lib/mkfile +++ b/appl/lib/mkfile @@ -25,6 +25,7 @@ TARG=\ cfgfile.dis\ chanfill.dis\ crc.dis\ + csv.dis\ daytime.dis\ db.dis\ dbm.dis\ @@ -221,3 +222,5 @@ dhcpclient.dis: $ROOT/module/dhcp.m ubfa.dis: $ROOT/module/ubfa.m secstore.dis: $ROOT/module/secstore.m ida.dis: $ROOT/module/ida.m +rfc822.dis: $ROOT/module/rfc822.m +csv.dis: $ROOT/module/csv.m diff --git a/appl/lib/newns.b b/appl/lib/newns.b index 7bca18dc..c0868b3c 100644 --- a/appl/lib/newns.b +++ b/appl/lib/newns.b @@ -39,6 +39,9 @@ include "factotum.m"; include "arg.m"; arg: Arg; +include "string.m"; + str: String; + newns(user: string, file: string): string { sys = load Sys Sys->PATH; @@ -63,6 +66,8 @@ newns(user: string, file: string): string if(err != nil) return "Auth->init: "+err; + str = load String String->PATH; # no check, because we'll live without it + if(file == nil){ file = "namespace"; if(sys->stat(file).t0 < 0) @@ -87,8 +92,11 @@ nsfile(b: ref Iobuf, facfd: ref Sys->FD): string { e := ""; while((l := b.gets('\n')) != nil){ - (n, slist) := sys->tokenize(l, " \t\n\r"); # should use str->unquote? - if(n <= 0) + if(str != nil) + slist := str->unquoted(l); + else + (nil, slist) = sys->tokenize(l, " \t\n\r"); # old way, in absence of String + if(slist == nil) continue; e = nsop(expand(slist), facfd); if(e != "") @@ -264,7 +272,7 @@ mount(argv: list of string, facfd: ref Sys->FD): string return ig(r, sys->sprint("cannot load %s: %r", Factotum->PATH)); factotum->init(); afd := sys->fauth(fd, spec); - ai := factotum->proxy(afd, facfd, "proto=p9any role=client"); + ai := factotum->proxy(afd, facfd, "proto=p9any role=client"); # TO DO: something with ai if(sys->mount(fd, afd, dir, r.flags, spec) < 0) return ig(r, sys->sprint("mount %q %q: %r", addr, dir)); return nil; @@ -343,7 +351,7 @@ import9(argv: list of string, facfd: ref Sys->FD): string } # TO DO: new style: impo aan|nofilter clear|ssl|tls\n afd := sys->fauth(fd, ""); - ai := factotum->proxy(afd, facfd, "proto=p9any role=client"); + ai := factotum->proxy(afd, facfd, "proto=p9any role=client"); # TO DO: something with ai if(sys->mount(fd, afd, dir, r.flags, "") < 0) return ig(r, sys->sprint("import %q %q: %r", addr, dir)); return nil; diff --git a/appl/lib/pop3.b b/appl/lib/pop3.b index 18e90525..4081b279 100644 --- a/appl/lib/pop3.b +++ b/appl/lib/pop3.b @@ -30,12 +30,9 @@ open(user, password, server : string): (int, string) } if (conn) return (-1, "connection is already open"); - if (server == nil) { - server = defaultserver(); - if (server == nil) - return (-1, "no default mail server"); - } - (ok, c) := sys->dial ("tcp!" + server + "!110", nil); + if (server == nil) + server = "$pop3"; + (ok, c) := sys->dial ("net!" + server + "!110", nil); if (ok < 0) return (-1, "dialup failed"); ibuf = bufio->fopen(c.dfd, Bufio->OREAD); @@ -256,11 +253,6 @@ mcmd(s : string) : (int, string) return (-1, r); } -defaultserver() : string -{ - return "$pop3"; -} - rev1(l1 : list of int) : list of int { l2 : list of int; diff --git a/appl/lib/sets.b b/appl/lib/sets.b index 22f25d7b..a770f31c 100644 --- a/appl/lib/sets.b +++ b/appl/lib/sets.b @@ -296,7 +296,7 @@ op(o: int, a, b: int): int 2r1010 => return a; 2r1011 => return a | ~b; 2r1100 => return b; - 2r1101 => return ~(a | b); + 2r1101 => return ~a | b; 2r1110 => return a | b; 2r1111 => return ~0; } diff --git a/appl/lib/sets32.b b/appl/lib/sets32.b index 01edea46..5deddbbe 100644 --- a/appl/lib/sets32.b +++ b/appl/lib/sets32.b @@ -218,7 +218,7 @@ op(o: int, a, b: int): int 2r1010 => return a; 2r1011 => return a | ~b; 2r1100 => return b; - 2r1101 => return ~(a | b); + 2r1101 => return ~a | b; 2r1110 => return a | b; 2r1111 => return ~0; } diff --git a/appl/lib/venti.b b/appl/lib/venti.b index ec9ec24e..d150f6f8 100644 --- a/appl/lib/venti.b +++ b/appl/lib/venti.b @@ -653,8 +653,8 @@ g48(f: array of byte, i: int): big g64(f: array of byte, i: int): big { - b0 := (((((int f[i+3] << 8) | int f[i+2]) << 8) | int f[i+1]) << 8) | int f[i]; - b1 := (((((int f[i+7] << 8) | int f[i+6]) << 8) | int f[i+5]) << 8) | int f[i+4]; - return (big b1 << 32) | (big b0 & 16rFFFFFFFF); + b0 := (((((int f[i+0] << 8) | int f[i+1]) << 8) | int f[i+2]) << 8) | int f[i+3]; + b1 := (((((int f[i+4] << 8) | int f[i+5]) << 8) | int f[i+6]) << 8) | int f[i+7]; + return (big b0 << 32) | (big b1 & 16rFFFFFFFF); } diff --git a/appl/lib/w3c/mkfile b/appl/lib/w3c/mkfile index 90f4d043..34901e32 100644 --- a/appl/lib/w3c/mkfile +++ b/appl/lib/w3c/mkfile @@ -2,6 +2,7 @@ TARG=\ css.dis\ + uris.dis\ xpointers.dis\ MODULES= @@ -10,6 +11,7 @@ SYSMODULES= \ sys.m\ bufio.m\ css.m\ + uris.m\ xpointers.m\ DISBIN=$ROOT/dis/lib/w3c diff --git a/appl/lib/w3c/xpointers.b b/appl/lib/w3c/xpointers.b index 0d7c231a..de208d54 100644 --- a/appl/lib/w3c/xpointers.b +++ b/appl/lib/w3c/xpointers.b @@ -1,7 +1,7 @@ implement Xpointers; # -# Copyright © 2005 Vita Nuova Holdings Oimited +# Copyright © 2005 Vita Nuova Holdings Limited # include "sys.m"; diff --git a/appl/lib/xml.b b/appl/lib/xml.b index 5e10608d..f93cad8a 100644 --- a/appl/lib/xml.b +++ b/appl/lib/xml.b @@ -94,16 +94,22 @@ blankparser: Parser; open(srcfile: string, warning: chan of (Locator, string), preelem: string): (ref Parser, string) { - x := ref blankparser; - x.in = bufio->open(srcfile, Bufio->OREAD); - if (x.in == nil) + fd := bufio->open(srcfile, Bufio->OREAD); + if(fd == nil) return (nil, sys->sprint("cannot open %s: %r", srcfile)); - # ignore utf16 intialisation character (yuck) + return fopen(fd, srcfile, warning, preelem); +} + +fopen(fd: ref Bufio->Iobuf, name: string, warning: chan of (Locator, string), preelem: string): (ref Parser, string) +{ + x := ref blankparser; + x.in = fd; + # ignore utf16 initialisation character (yuck) c := x.in.getc(); if (c != 16rfffe && c != 16rfeff) x.in.ungetc(); x.estack = nil; - x.loc = Locator(1, srcfile, ""); + x.loc = Locator(1, name, ""); x.warning = warning; x.preelem = preelem; return (x, ""); @@ -235,9 +241,8 @@ getparcel(x: ref Parser): ref Parcel if (p == nil) p = ref Parcel.EOF; return p; - } - exception e{ - "sax:*" => + }exception e{ + "sax:*" => return ref Parcel.Error(x.loc, x.errormsg); } } diff --git a/appl/svc/httpd/mkfile b/appl/svc/httpd/mkfile index caba5c47..216c7f23 100644 --- a/appl/svc/httpd/mkfile +++ b/appl/svc/httpd/mkfile @@ -37,8 +37,9 @@ DISBIN=$ROOT/dis/svc/httpd install:V: install-logs-$SHELLTYPE install-logs-rc install-logs-nt:V: - for (i in $LOGS) + for (i in $LOGS){ rm -f $ROOT/services/httpd/$i && cp $i $ROOT/services/httpd/$i + } # chmod 644 $ROOT/services/httpd/httpd.log install-logs-sh:V: diff --git a/appl/svc/webget/date.b b/appl/svc/webget/date.b index 71248954..8e5ab5d4 100644 --- a/appl/svc/webget/date.b +++ b/appl/svc/webget/date.b @@ -62,31 +62,36 @@ dateindex : fn(nil: string, nill:array of string): int; gmtm2sec : fn(tm: Tm): int; -yrsize(yr : int): array of int { +yrsize(yr : int): array of int +{ if(yr % 4 == 0 && (yr % 100 != 0 || yr % 400 == 0)) return ldmsize; else return dmsize; } -tolower(c: int): int { +tolower(c: int): int +{ if(c >= 'A' && c <= 'Z') return c - 'A' + 'a'; return c; } -isalpha(c: int): int{ +isalpha(c: int): int +{ return c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z'; } -isdig(c: int): int { +isdig(c: int): int +{ return c >= '0' && c <= '9'; } -dateconv(t: int): string { +dateconv(t: int): string +{ tm : ref Tm; tm = daytime->gmt(t); return sys->sprint("%s, %.2d %s %.4d %.2d:%.2d:%.2d GMT", @@ -132,7 +137,8 @@ datenum(date : string): (string, int){ # return 0 for a failure # could be big? -date2sec(date : string): int { +date2sec(date : string): int +{ tm : Tm; buf : string; @@ -210,14 +216,16 @@ date2sec(date : string): int { return gmtm2sec(tm); } -lowercase(name:string): string { +lowercase(name:string): string +{ p: string; for(i:=0;i<len name;i++) p[i]=tolower(name[i]); return p; } -dateindex(d : string, tab : array of string): int{ +dateindex(d : string, tab : array of string): int +{ for(i := 0; i < len tab; i++) if (lowercase(tab[i]) == d) return i; diff --git a/appl/svc/webget/http.b b/appl/svc/webget/http.b index 35b52966..0a4645ed 100644 --- a/appl/svc/webget/http.b +++ b/appl/svc/webget/http.b @@ -69,6 +69,7 @@ usecache := 1; cachedir: con "/services/webget/cache"; httpproxy: ref ParsedUrl; +noproxydoms: list of string; # domains that don't require proxy agent := "Inferno-webget/" + Version; responses := array[] of { @@ -137,17 +138,21 @@ readconfig() } if(line[0]=='#') continue; - (key, val) := S->splitl(line, " \t"); - val = S->take(S->drop(val, " \t"), "^\r\n"); - if(val == "") + (key, val) := S->splitl(line, " \t="); + val = S->take(S->drop(val, " \t="), "^\r\n"); + if(val == nil) continue; - if(key == "httpproxy" && val != "none") { - # val should be host or host:port - httpproxy = U->makeurl("http://" + val); - W->log(nil, "Using http proxy " + httpproxy.tostring()); - usecache = 0; - } - if(key == "agent") { + case key{ + "httpproxy" => + if(val != "none"){ + # val should be host or host:port + httpproxy = U->makeurl("http://" + val); + W->log(nil, "Using http proxy " + httpproxy.tostring()); + usecache = 0; + } + "noproxy" => + (nil, noproxydoms) = sys->tokenize(val, ";, \t"); + "agent" => agent = val; W->log(nil, sys->sprint("User agent specfied as '%s'\n", agent)); } @@ -155,6 +160,22 @@ readconfig() } } +need_proxy(h: string) : int +{ + doml := noproxydoms; + if(doml == nil) + return 1; # all domains need proxy + + lh := len h; + for(dom := hd doml; doml != nil; doml = tl doml) { + ld := len dom; + if(lh >= ld && h[lh-ld:] == dom) + return 0; # domain is on the noproxy list + } + + return 1; +} + connect(c: ref Fid, r: ref Req, donec: chan of ref Fid) { method := r.method; @@ -202,7 +223,7 @@ connect(c: ref Fid, r: ref Req, donec: chan of ref Fid) # Find the port and dial the network # dialu := u; - if(httpproxy != nil) + if(httpproxy != nil && need_proxy(u.host)) dialu = httpproxy; port := dialu.port; if(port == "") { @@ -237,7 +258,7 @@ connect(c: ref Fid, r: ref Req, donec: chan of ref Fid) # m := Msg.newmsg(); requ: string; - if(httpproxy != nil) + if(httpproxy != nil && need_proxy(u.host)) requ = u.tostring(); else { requ = u.pstart + u.path; @@ -259,7 +280,7 @@ connect(c: ref Fid, r: ref Req, donec: chan of ref Fid) m.body = r.body; m.bodylen = len m.body; m.addhdrs(Nameval("Content-Length", string (len r.body)) :: - Nameval("Content-type", "application/x-www-form-urlencoded") :: + Nameval("Content-type", "text/xml") :: # was application/x-www-form-urlencoded nil); } io = B->fopen(net.dfd, sys->ORDWR); @@ -400,7 +421,7 @@ connect(c: ref Fid, r: ref Req, donec: chan of ref Fid) getcode(status: string) : int { - (vers, scode) := S->splitl(status, " "); + (nil, scode) := S->splitl(status, " "); scode = S->drop(scode, " "); return int scode; } diff --git a/appl/svc/webget/webget.b b/appl/svc/webget/webget.b index 6821303f..c3c3aed8 100644 --- a/appl/svc/webget/webget.b +++ b/appl/svc/webget/webget.b @@ -197,7 +197,7 @@ start(ctl: chan of int) prefix = string data[0:i]; if(i+1 < ndata) { r.body = array[ndata-i-1] of byte; - r.body[0:] = data[i:ndata]; + r.body[0:] = data[i+1:ndata]; } break; } diff --git a/appl/svc/webget/wgutils.b b/appl/svc/webget/wgutils.b index fdf5c375..2094f7a3 100644 --- a/appl/svc/webget/wgutils.b +++ b/appl/svc/webget/wgutils.b @@ -41,6 +41,7 @@ mtypes := array[] of { T->StringInt ("application/pdf", ApplPdf), ("application/postscript", ApplPostscript), ("application/rtf", ApplRtf), + ("application/soap+xml", TextPlain), ("application/x-html", TextHtml), ("au", AudioBasic), ("audio/au", AudioBasic), @@ -67,6 +68,7 @@ mtypes := array[] of { T->StringInt ("text/html", TextHtml), ("text/plain", TextPlain), ("text/x-html", TextHtml), + ("text/xml", TextXml), ("tif", ImageTiff), ("tiff", ImageTiff), ("txt", TextPlain), @@ -91,7 +93,9 @@ mnames := array[] of { "image/x-xbitmap", "audio/basic", "video/mpeg", - "video/quicktime" + "video/quicktime", + "application/soap+xml", + "text/xml" }; init(m: Message, s: String, b: Bufio, u: Url, lfd: ref Sys->FD) @@ -121,7 +125,7 @@ init(m: Message, s: String, b: Bufio, u: Url, lfd: ref Sys->FD) usererr(r: ref Req, msg: string) : ref Msg { m := Msg.newmsg(); - m.prefixline = sys->sprint("ERROR %s %s", r.reqid, msg); + m.prefixline = sys->sprint("ERROR %s %s\n", r.reqid, msg); m.bodylen = 0; return m; } @@ -136,7 +140,7 @@ okprefix(r: ref Req, mrep: ref Msg) (nil, cloc) := mrep.fieldval("content-location"); if(cloc == "") cloc = "unknown"; - mrep.prefixline = "OK " + string mrep.bodylen + " " + r.reqid + " " + sctype + " " + cloc; + mrep.prefixline = "OK " + string mrep.bodylen + " " + r.reqid + " " + sctype + " " + cloc +"\n"; } canon_mtype(s: string) : string diff --git a/appl/svc/webget/wgutils.m b/appl/svc/webget/wgutils.m index 5b2458fe..8efb14c1 100644 --- a/appl/svc/webget/wgutils.m +++ b/appl/svc/webget/wgutils.m @@ -41,7 +41,7 @@ WebgetUtils: module ImageJpeg, ImageGif, ImageIef, ImageTiff, ImageXCompressed, ImageXCompressed2, ImageXXBitmap, AudioBasic, - VideoMpeg, VideoQuicktime: con iota; + VideoMpeg, VideoQuicktime, Soap, TextXml: con iota; init : fn(m: Message, s: String, b: Bufio, u: Url, logfd: ref Sys->FD); usererr: fn(r: ref Req, msg: string) : ref Message->Msg; diff --git a/appl/wm/sh.b b/appl/wm/sh.b index 159ce6bc..8f634329 100644 --- a/appl/wm/sh.b +++ b/appl/wm/sh.b @@ -92,6 +92,7 @@ shwin_cfg := array[] of { rdreq: list of Rdreq; menuindex := "0"; holding := 0; +haskbdfocus := 0; plumbed := 0; rawon := 0; rawinput := ""; @@ -260,16 +261,22 @@ main(ctxt: ref Draw->Context, argv: list of string) c := <-wm.ctl or c = <-t.wreq or c = <-titlectl => + (nil, flds) := sys->tokenize(c, " \t"); + if(flds != nil && hd flds == "haskbdfocus" && tl flds != nil){ + haskbdfocus = int hd tl flds; + setcols(t); + } tkclient->wmctl(t, c); ecmd := <-edit => editor(t, ecmd); sendinput(t); c := <-keys => - cut(t, 1); char := c[1]; if(char == '\\') char = c[2]; + if(char != ESC) + cut(t, 1); if(rawon){ if(int cmd(t, ".ft.t compare insert >= outpoint")){ rawinput[len rawinput] = char; @@ -488,14 +495,30 @@ setholding(t: ref Tk->Toplevel, hold: int) if(hold == holding) return; holding = hold; - color := "blue"; if(!holding){ - color = "black"; tkclient->settitle(t, winname); sendinput(t); }else tkclient->settitle(t, winname+" (holding)"); - cmd(t, ".ft.t configure -foreground "+color); + setcols(t); +} + +setcols(t: ref Tk->Toplevel) +{ + fgcol := "black"; + if(holding){ + if(haskbdfocus) + fgcol = "#000099FF"; # DMedblue + else + fgcol = "#005DBBFF"; # DGreyblue + }else{ + if(haskbdfocus) + fgcol = "black"; + else + fgcol = "#666666FF"; # dark grey + } + cmd(t, ".ft.t configure -foreground "+fgcol+" -selectforeground "+fgcol); + cmd(t, ".ft.t tag configure sel -foreground "+fgcol); } tkunquote(s: string): string diff --git a/appl/wm/unibrowse.b b/appl/wm/unibrowse.b index 50eefb40..e7a55426 100644 --- a/appl/wm/unibrowse.b +++ b/appl/wm/unibrowse.b @@ -205,17 +205,17 @@ init(drawctxt: ref Draw->Context, nil: list of string) keywordsearch(c); } - c := <-elements[BYNUMBER].cmd => + <-elements[BYNUMBER].cmd => txt := cmd(top, ".numfield.f get"); (n, nil) := str->toint(txt, 16); pop(BYNUMBER); push(TABLE); - setchar(n); + setchar(0, n); currpos = filltable(n); update(top); - c := <-elements[BYCATEGORY].cmd => + <-elements[BYCATEGORY].cmd => sel := cmd(top, ".cat.menu curselection"); (currpos, nil) = str->toint(cmd(top, ".cat.menu get "+sel), 16); pop(BYCATEGORY); @@ -231,23 +231,23 @@ init(drawctxt: ref Draw->Context, nil: list of string) "backw" => currpos = filltable(currpos - Tablerows * Tablecols); update(top); - * => # must be set <col> <row> + * => # must be set <col> <row> <raise> (nil, args) := sys->tokenize(c, " "); - setchar(currpos + int hd tl args + setchar(int hd tl tl tl args, currpos + int hd tl args + int hd tl tl args * Tablecols); } - c := <-elements[BYSEARCH].cmd => + <-elements[BYSEARCH].cmd => sel := cmd(top, ".srch.menu curselection"); (n, nil) := str->toint(cmd(top, ".srch.menu get "+sel), 16); pop(BYSEARCH); push(TABLE); - setchar(n); + setchar(0, n); currpos = filltable(n); update(top); - c := <-elements[BYFONT].cmd => + <-elements[BYFONT].cmd => sel := cmd(top, ".font.menu curselection"); (currpos, nil) = str->toint(cmd(top, ".font.menu get "+sel), 16); pop(BYFONT); @@ -264,9 +264,11 @@ sendentry(t: ref Tk->Toplevel, msg: string, where: chan of string) exit; } -setchar(c: int) +setchar(raisei: int, c: int) { s := ""; s[0] = c; + if(raisei) + inspchan <-= "raise"; inspchan <-= s; } @@ -370,6 +372,8 @@ inspector(ctxt: ref Draw->Context, cmdch: chan of string) inspector_setchar(t: ref Tk->Toplevel, c: int) { + if(t == nil) + return; line := look(unidata, ';', sys->sprint("%4.4X", c)); labelset(t, ".chdata.ch", sys->sprint("%c", c)); labelset(t, ".chdata.val", sys->sprint("%4.4X", c)); @@ -560,7 +564,9 @@ inittable() cmd(top, tkexpand("$label unicode "+cname +" -borderwidth 1 -relief raised")); cmd(top, "bind "+cname+" <ButtonRelease-1>" - +" {send tblcmd set "+string j +" "+string i+"}"); + +" {send tblcmd set "+string j+" "+string i+" 0}"); + cmd(top, "bind "+cname+" <Double-Button-1>" + +" {send tblcmd set "+string j+" "+string i+" 1}"); cmd(top, "grid "+cname+" -row "+string i+" -column "+string (j+1) + " -sticky ews"); } @@ -155,10 +155,10 @@ data : TOKDB expr ',' elist | TOKDF expr ',' TID { if(strcmp($4->name, "Inf") == 0 || strcmp($4->name, "Infinity") == 0) { - u.l = 0x7ff0000000000000; + u.l = (uvlong)0x7ff00000<<32; data(DEFF, $2, newi(dtocanon(u.d), nil)); } else if(strcmp($4->name, "NaN") == 0) { - u.l = 0x7fffffffffffffff; + u.l = ((uvlong)0x7fffffff<<32) | (uvlong)0xffffffffUL; data(DEFF, $2, newi(dtocanon(u.d), nil)); } else diag("bad value for real: %s", $4->name); @@ -174,7 +174,7 @@ data : TOKDB expr ',' elist | TOKDF expr ',' '-' TID { if(strcmp($5->name, "Inf") == 0 || strcmp($5->name, "Infinity") == 0) { - u.l = 0xfff0000000000000; + u.l = (uvlong)0xfff00000<<32; data(DEFF, $2, newi(dtocanon(u.d), nil)); } else diag("bad value for real: %s", $5->name); diff --git a/dis/ar.dis b/dis/ar.dis Binary files differnew file mode 100644 index 00000000..0c8193b5 --- /dev/null +++ b/dis/ar.dis diff --git a/dis/cddb.dis b/dis/cddb.dis Binary files differnew file mode 100644 index 00000000..7227eebb --- /dev/null +++ b/dis/cddb.dis diff --git a/dis/charon/build.dis b/dis/charon/build.dis Binary files differindex 1b737ddb..d879669a 100644 --- a/dis/charon/build.dis +++ b/dis/charon/build.dis diff --git a/dis/charon/http.dis b/dis/charon/http.dis Binary files differindex f7853ac0..28acaba0 100644 --- a/dis/charon/http.dis +++ b/dis/charon/http.dis diff --git a/dis/charon/layout.dis b/dis/charon/layout.dis Binary files differindex 0c6bcd52..72b8fafa 100644 --- a/dis/charon/layout.dis +++ b/dis/charon/layout.dis diff --git a/dis/ebook/ebook.dis b/dis/ebook/ebook.dis Binary files differindex ca57ff65..746eb09c 100644 --- a/dis/ebook/ebook.dis +++ b/dis/ebook/ebook.dis diff --git a/dis/ebook/oebpackage.dis b/dis/ebook/oebpackage.dis Binary files differindex 341dd0c8..cd69a00b 100644 --- a/dis/ebook/oebpackage.dis +++ b/dis/ebook/oebpackage.dis diff --git a/dis/fortune.dis b/dis/fortune.dis Binary files differindex 44461de7..968d83f6 100644 --- a/dis/fortune.dis +++ b/dis/fortune.dis diff --git a/dis/lib/chanfill.dis b/dis/lib/chanfill.dis Binary files differindex d2b814ec..6bfb586a 100644 --- a/dis/lib/chanfill.dis +++ b/dis/lib/chanfill.dis diff --git a/dis/lib/csv.dis b/dis/lib/csv.dis Binary files differnew file mode 100644 index 00000000..36b75f72 --- /dev/null +++ b/dis/lib/csv.dis diff --git a/dis/lib/dis.dis b/dis/lib/dis.dis Binary files differindex 2386e80c..6c3ebf7f 100644 --- a/dis/lib/dis.dis +++ b/dis/lib/dis.dis diff --git a/dis/lib/newns.dis b/dis/lib/newns.dis Binary files differindex c0527526..9d9a03cb 100644 --- a/dis/lib/newns.dis +++ b/dis/lib/newns.dis diff --git a/dis/lib/pop3.dis b/dis/lib/pop3.dis Binary files differindex 96035d7d..879ba962 100644 --- a/dis/lib/pop3.dis +++ b/dis/lib/pop3.dis diff --git a/dis/lib/rfc822.dis b/dis/lib/rfc822.dis Binary files differnew file mode 100644 index 00000000..74f6f6c8 --- /dev/null +++ b/dis/lib/rfc822.dis diff --git a/dis/lib/sets.dis b/dis/lib/sets.dis Binary files differindex 9a3e18c2..a5b6ced8 100644 --- a/dis/lib/sets.dis +++ b/dis/lib/sets.dis diff --git a/dis/lib/sets32.dis b/dis/lib/sets32.dis Binary files differindex 5f57f210..d69aae8d 100644 --- a/dis/lib/sets32.dis +++ b/dis/lib/sets32.dis diff --git a/dis/lib/w3c/uris.dis b/dis/lib/w3c/uris.dis Binary files differnew file mode 100644 index 00000000..8c4f250d --- /dev/null +++ b/dis/lib/w3c/uris.dis diff --git a/dis/lib/xml.dis b/dis/lib/xml.dis Binary files differindex 7e2c4c14..d7821ec8 100644 --- a/dis/lib/xml.dis +++ b/dis/lib/xml.dis diff --git a/dis/limbo.dis b/dis/limbo.dis Binary files differindex a1874755..5fbee7d1 100644 --- a/dis/limbo.dis +++ b/dis/limbo.dis diff --git a/dis/lookman b/dis/lookman new file mode 100644 index 00000000..edf8972b --- /dev/null +++ b/dis/lookman @@ -0,0 +1,18 @@ +#!/dis/sh +load std + +fn cmdform { + sed 's;/man/;; + s;(.*)/(.*);man \1 \2 # \2(\1);' +} +post=cmdform + +x=$* +~ $1 -f && { + post=cat + x=${tl $x} +} +x=`{echo $x|tr A-Z a-z|tr -dc 'a-z0-9_ \012'} # fold case, delete funny chars +~ $#x 0 && {echo Usage: lookman key ... >[1=2]; exit usage} + +look $x /man/index | sed 's/^.* //' |sort |uniq | $post diff --git a/dis/lookman.dis b/dis/lookman.dis Binary files differdeleted file mode 100644 index e09d33eb..00000000 --- a/dis/lookman.dis +++ /dev/null diff --git a/dis/man2html.dis b/dis/man2html.dis Binary files differBinary files differBinary files differnew file mode 100644 index 00000000..24a71104 --- /dev/null +++ b/dis/man2html.dis diff --git a/dis/shutdown b/dis/shutdown new file mode 100644 index 00000000..1f1f33a3 --- /dev/null +++ b/dis/shutdown @@ -0,0 +1,18 @@ +#!/dis/sh +load std +x=$* +{~ $#x 1 && ~ ${hd $x} -h -r} || {echo usage: shutdown -h or shutdown -r >[1=2]; exit usage} +# the following is a bit pointless until kfs has halt +#ftest -f /dis/disk/kfscmd.dis && { +# for(a in /chan/kfs.*.cmd){ +# b=${hd ${tl ${split '.' $a}}} +# ~ $b '*' || disk/kfscmd -n $b halt +# } +#} +if {~ $1 -r} { + echo reboot >/dev/sysctl +} {~ $1 -h} { + echo halt >/dev/sysctl +} {} +echo shutdown: failed: $status >[1=2] +exit failed diff --git a/dis/shutdown.dis b/dis/shutdown.dis Binary files differdeleted file mode 100644 index 22ce821e..00000000 --- a/dis/shutdown.dis +++ /dev/null diff --git a/dis/svc/webget/http.dis b/dis/svc/webget/http.dis Binary files differindex 43d20acc..337fd7e3 100644 --- a/dis/svc/webget/http.dis +++ b/dis/svc/webget/http.dis diff --git a/dis/svc/webget/webget.dis b/dis/svc/webget/webget.dis Binary files differindex c029eaf4..b2fd22fc 100644 --- a/dis/svc/webget/webget.dis +++ b/dis/svc/webget/webget.dis diff --git a/dis/svc/webget/wgutils.dis b/dis/svc/webget/wgutils.dis Binary files differindex 40682361..926059d7 100644 --- a/dis/svc/webget/wgutils.dis +++ b/dis/svc/webget/wgutils.dis diff --git a/dis/test.dis b/dis/test.dis Binary files differindex bc1a3b3f..91a959da 100644 --- a/dis/test.dis +++ b/dis/test.dis diff --git a/dis/wm/dmwm.dis b/dis/wm/dmwm.dis Binary files differindex 73cc81ce..bb694fa0 100644 --- a/dis/wm/dmwm.dis +++ b/dis/wm/dmwm.dis diff --git a/dis/wm/sh.dis b/dis/wm/sh.dis Binary files differindex 5cbca989..8ccbe8dd 100644 --- a/dis/wm/sh.dis +++ b/dis/wm/sh.dis diff --git a/dis/wm/unibrowse.dis b/dis/wm/unibrowse.dis Binary files differindex c6dba7df..4bdb41dc 100644 --- a/dis/wm/unibrowse.dis +++ b/dis/wm/unibrowse.dis diff --git a/doc/install.ms b/doc/install.ms index cdec392b..9fe8c4f9 100644 --- a/doc/install.ms +++ b/doc/install.ms @@ -1153,7 +1153,7 @@ for these IP based services, and the remote addresses are not filled in because they all represent listening services that are in the .CW Announced state. -In this example the fourth line shows a TCP service listening on port 6673. +In this example the third line shows a TCP service listening on port 6675. Examining .CW /lib/ndb/inferno with diff --git a/emu/FreeBSD/asm-386.S b/emu/FreeBSD/asm-386.S index 2d11c6da..35269c8f 100644 --- a/emu/FreeBSD/asm-386.S +++ b/emu/FreeBSD/asm-386.S @@ -95,10 +95,7 @@ FPrestore: .type getcallerpc,@function .global getcallerpc getcallerpc: - pushl %ebp - movl %esp, %ebp movl 4(%ebp), %eax - popl %ebp ret .type _tas,@function diff --git a/emu/FreeBSD/cmd.c b/emu/FreeBSD/cmd.c index 55ead029..ed4cabab 100644 --- a/emu/FreeBSD/cmd.c +++ b/emu/FreeBSD/cmd.c @@ -21,7 +21,7 @@ enum typedef struct Targ Targ; struct Targ { - int fd[2]; /* fd[0] is standard input, fd[1] is standard output */ + int fd[3]; /* fd[0] is standard input, fd[1] is standard output, fd[2] is standard error */ char** args; char* dir; int pid; @@ -43,15 +43,17 @@ childproc(Targ *t) nfd = getdtablesize(); for(i = 0; i < nfd; i++) - if(i != t->fd[0] && i != t->fd[1] && i != t->wfd) + if(i != t->fd[0] && i != t->fd[1] && i != t->fd[2] && i != t->wfd) close(i); dup2(t->fd[0], 0); dup2(t->fd[1], 1); - dup2(t->fd[1], 2); + dup2(t->fd[2], 2); close(t->fd[0]); close(t->fd[1]); + close(t->fd[2]); + /* should have an auth file to do host-specific authorisation? */ if(t->gid != -1){ if(setgid(t->gid) < 0 && getegid() == 0){ fprint(t->wfd, "can't set gid %d: %s", t->gid, strerror(errno)); @@ -82,10 +84,10 @@ childproc(Targ *t) } void* -oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) +oscmd(char **args, int nice, char *dir, int *fd) { Targ *t; - int r, fd0[2], fd1[2], wfd[2], n, pid; + int r, fd0[2], fd1[2], fd2[2], wfd[2], n, pid; t = mallocz(sizeof(*t), 1); if(t == nil) @@ -93,14 +95,16 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) fd0[0] = fd0[1] = -1; fd1[0] = fd1[1] = -1; + fd2[0] = fd2[1] = -1; wfd[0] = wfd[1] = -1; - if(pipe(fd0) < 0 || pipe(fd1) < 0 || pipe(wfd) < 0) + if(pipe(fd0) < 0 || pipe(fd1) < 0 || pipe(fd2) < 0 || pipe(wfd) < 0) goto Error; if(fcntl(wfd[1], F_SETFD, FD_CLOEXEC) < 0) /* close on exec to give end of file on success */ goto Error; t->fd[0] = fd0[0]; t->fd[1] = fd1[1]; + t->fd[2] = fd2[1]; t->wfd = wfd[1]; t->args = args; t->dir = dir; @@ -130,6 +134,7 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) close(fd0[0]); close(fd1[1]); + close(fd2[1]); close(wfd[1]); n = read(wfd[0], up->genbuf, sizeof(up->genbuf)-1); @@ -137,6 +142,7 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) if(n > 0){ close(fd0[1]); close(fd1[0]); + close(fd2[0]); free(t); up->genbuf[n] = 0; if(Debug) @@ -145,8 +151,9 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) return nil; } - *sfd = fd0[1]; - *rfd = fd1[0]; + fd[0] = fd0[1]; + fd[1] = fd1[0]; + fd[2] = fd2[0]; return t; Error: @@ -157,6 +164,8 @@ Error: close(fd0[1]); close(fd1[0]); close(fd1[1]); + close(fd2[0]); + close(fd2[1]); close(wfd[0]); close(wfd[1]); error(strerror(r)); diff --git a/emu/FreeBSD/ipif.c b/emu/FreeBSD/ipif.c index 491eff15..07065714 100644 --- a/emu/FreeBSD/ipif.c +++ b/emu/FreeBSD/ipif.c @@ -273,7 +273,8 @@ int so_gethostbyname(char *host, char**hostv, int n) { int i; - unsigned char buf[32], *p; + char buf[32]; + uchar *p; struct hostent *hp; hp = gethostbyname(host); @@ -282,7 +283,7 @@ so_gethostbyname(char *host, char**hostv, int n) for(i = 0; hp->h_addr_list[i] && i < n; i++) { p = hp->h_addr_list[i]; - sprint(buf, "%ud.%ud.%ud.%ud", p[0], p[1], p[2], p[3]); + snprint(buf, sizeof(buf), "%ud.%ud.%ud.%ud", p[0], p[1], p[2], p[3]); hostv[i] = strdup(buf); if(hostv[i] == 0) break; diff --git a/emu/Hp/cmd.c b/emu/Hp/cmd.c index 97e303ac..bff1f03b 100644 --- a/emu/Hp/cmd.c +++ b/emu/Hp/cmd.c @@ -21,7 +21,7 @@ enum typedef struct Targ Targ; struct Targ { - int fd[2]; /* fd[0] is standard input, fd[1] is standard output */ + int fd[3]; /* fd[0] is standard input, fd[1] is standard output, fd[2] is standard error */ char** args; char* dir; int pid; @@ -43,15 +43,17 @@ childproc(Targ *t) nfd = getdtablesize(); for(i = 0; i < nfd; i++) - if(i != t->fd[0] && i != t->fd[1] && i != t->wfd) + if(i != t->fd[0] && i != t->fd[1] && i != t->fd[2] && i != t->wfd) close(i); dup2(t->fd[0], 0); dup2(t->fd[1], 1); - dup2(t->fd[1], 2); + dup2(t->fd[2], 2); close(t->fd[0]); close(t->fd[1]); + close(t->fd[2]); + /* should have an auth file to do host-specific authorisation? */ if(t->gid != -1){ if(setgid(t->gid) < 0 && getegid() == 0){ fprint(t->wfd, "can't set gid %d: %s", t->gid, strerror(errno)); @@ -82,11 +84,10 @@ childproc(Targ *t) } void* -oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) +oscmd(char **args, int nice, char *dir, int *fd) { - Dir *d; Targ *t; - int r, fd0[2], fd1[2], wfd[2], n, pid; + int r, fd0[2], fd1[2], fd2[2], wfd[2], n, pid; t = mallocz(sizeof(*t), 1); if(t == nil) @@ -94,14 +95,16 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) fd0[0] = fd0[1] = -1; fd1[0] = fd1[1] = -1; + fd2[0] = fd2[1] = -1; wfd[0] = wfd[1] = -1; - if(pipe(fd0) < 0 || pipe(fd1) < 0 || pipe(wfd) < 0) + if(pipe(fd0) < 0 || pipe(fd1) < 0 || pipe(fd2) < 0 || pipe(wfd) < 0) goto Error; if(fcntl(wfd[1], F_SETFD, FD_CLOEXEC) < 0) /* close on exec to give end of file on success */ goto Error; t->fd[0] = fd0[0]; t->fd[1] = fd1[1]; + t->fd[2] = fd2[1]; t->wfd = wfd[1]; t->args = args; t->dir = dir; @@ -131,6 +134,7 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) close(fd0[0]); close(fd1[1]); + close(fd2[1]); close(wfd[1]); n = read(wfd[0], up->genbuf, sizeof(up->genbuf)-1); @@ -138,6 +142,7 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) if(n > 0){ close(fd0[1]); close(fd1[0]); + close(fd2[0]); free(t); up->genbuf[n] = 0; if(Debug) @@ -146,8 +151,9 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) return nil; } - *sfd = fd0[1]; - *rfd = fd1[0]; + fd[0] = fd0[1]; + fd[1] = fd1[0]; + fd[2] = fd2[0]; return t; Error: @@ -158,6 +164,8 @@ Error: close(fd0[1]); close(fd1[0]); close(fd1[1]); + close(fd2[0]); + close(fd2[1]); close(wfd[0]); close(wfd[1]); error(strerror(r)); diff --git a/emu/Irix/cmd.c b/emu/Irix/cmd.c index 97e303ac..bff1f03b 100644 --- a/emu/Irix/cmd.c +++ b/emu/Irix/cmd.c @@ -21,7 +21,7 @@ enum typedef struct Targ Targ; struct Targ { - int fd[2]; /* fd[0] is standard input, fd[1] is standard output */ + int fd[3]; /* fd[0] is standard input, fd[1] is standard output, fd[2] is standard error */ char** args; char* dir; int pid; @@ -43,15 +43,17 @@ childproc(Targ *t) nfd = getdtablesize(); for(i = 0; i < nfd; i++) - if(i != t->fd[0] && i != t->fd[1] && i != t->wfd) + if(i != t->fd[0] && i != t->fd[1] && i != t->fd[2] && i != t->wfd) close(i); dup2(t->fd[0], 0); dup2(t->fd[1], 1); - dup2(t->fd[1], 2); + dup2(t->fd[2], 2); close(t->fd[0]); close(t->fd[1]); + close(t->fd[2]); + /* should have an auth file to do host-specific authorisation? */ if(t->gid != -1){ if(setgid(t->gid) < 0 && getegid() == 0){ fprint(t->wfd, "can't set gid %d: %s", t->gid, strerror(errno)); @@ -82,11 +84,10 @@ childproc(Targ *t) } void* -oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) +oscmd(char **args, int nice, char *dir, int *fd) { - Dir *d; Targ *t; - int r, fd0[2], fd1[2], wfd[2], n, pid; + int r, fd0[2], fd1[2], fd2[2], wfd[2], n, pid; t = mallocz(sizeof(*t), 1); if(t == nil) @@ -94,14 +95,16 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) fd0[0] = fd0[1] = -1; fd1[0] = fd1[1] = -1; + fd2[0] = fd2[1] = -1; wfd[0] = wfd[1] = -1; - if(pipe(fd0) < 0 || pipe(fd1) < 0 || pipe(wfd) < 0) + if(pipe(fd0) < 0 || pipe(fd1) < 0 || pipe(fd2) < 0 || pipe(wfd) < 0) goto Error; if(fcntl(wfd[1], F_SETFD, FD_CLOEXEC) < 0) /* close on exec to give end of file on success */ goto Error; t->fd[0] = fd0[0]; t->fd[1] = fd1[1]; + t->fd[2] = fd2[1]; t->wfd = wfd[1]; t->args = args; t->dir = dir; @@ -131,6 +134,7 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) close(fd0[0]); close(fd1[1]); + close(fd2[1]); close(wfd[1]); n = read(wfd[0], up->genbuf, sizeof(up->genbuf)-1); @@ -138,6 +142,7 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) if(n > 0){ close(fd0[1]); close(fd1[0]); + close(fd2[0]); free(t); up->genbuf[n] = 0; if(Debug) @@ -146,8 +151,9 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) return nil; } - *sfd = fd0[1]; - *rfd = fd1[0]; + fd[0] = fd0[1]; + fd[1] = fd1[0]; + fd[2] = fd2[0]; return t; Error: @@ -158,6 +164,8 @@ Error: close(fd0[1]); close(fd1[0]); close(fd1[1]); + close(fd2[0]); + close(fd2[1]); close(wfd[0]); close(wfd[1]); error(strerror(r)); diff --git a/emu/Linux/asm-386.S b/emu/Linux/asm-386.S index caa1f79a..31946335 100644 --- a/emu/Linux/asm-386.S +++ b/emu/Linux/asm-386.S @@ -94,12 +94,6 @@ FPrestore: popl %ebp ret - .type getcallerpc,@function - .global getcallerpc -getcallerpc: - movl 4(%ebp), %eax - ret - .type _tas,@function .globl _tas _tas: diff --git a/emu/Linux/asm-arm.S b/emu/Linux/asm-arm.S new file mode 100644 index 00000000..1cdac444 --- /dev/null +++ b/emu/Linux/asm-arm.S @@ -0,0 +1,131 @@ + .file "asm-Linux-arm.S" +#include "syscall.h" + .text + +/* + * void executeonnewstack(void *tos, void (*tramp)(void *arg), void *arg) + */ + + .align 2 + .global executeonnewstack + .type executeonnewstack, %function +executeonnewstack: + @ args = 0, pretend = 0, frame = 12 + @ frame_needed = 1, uses_anonymous_args = 0 + mov ip, sp + stmfd sp!, {fp, ip, lr, pc} + sub fp, ip, #4 + sub sp, sp, #12 + str r0, [fp, #-16] /* store tos */ + str r1, [fp, #-20] /* store tramp */ + str r2, [fp, #-24] /* store arg */ + ldr r0, [fp, #-24] /* get arg */ + ldr r2, [fp, #-16] /* get tos */ + mov sp, r2 /* set new stack */ + mov lr, pc + blx r1 /* call tramp*/ + + /* if we return here, tramp didn't do it's job */ + swi SYS_exit + ldmea fp, {fp, sp, pc} + .size executeonnewstack, .-executeonnewstack + +/* + * void unlockandexit(int *key) + * + * NB: the return status may be garbaged if the stack is reused + * between the unlock and the system call, but this should + * not matter since no task is waiting for the result + */ + + .align 2 + .global unlockandexit + .type unlockandexit, %function +unlockandexit: + @ args = 0, pretend = 0, frame = 4 + @ frame_needed = 1, uses_anonymous_args = 0 + mov ip, sp + stmfd sp!, {fp, ip, lr, pc} + sub fp, ip, #4 + sub sp, sp, #4 + mov r1, #0 + str r1, [r0] + swi SYS_exit + ldmea fp, {fp, sp, pc} + .size unlockandexit, .-unlockandexit + +/* + * ulong umult(ulong m1, ulong m2, ulong *hi) + */ + + .align 2 + .global umult + .type umult, %function +umult: + @ args = 0, pretend = 0, frame = 12 + @ frame_needed = 1, uses_anonymous_args = 0 + mov ip, sp + stmfd sp!, {fp, ip, lr, pc} + sub fp, ip, #4 + sub sp, sp, #12 + str r0, [fp, #-16] + str r1, [fp, #-20] + str r2, [fp, #-24] + ldr r1, [fp, #-16] + ldr r2, [fp, #-20] + umull r0, r3, r1, r2 + ldr r1, [fp, #-24] + str r3, [r1] + ldmea fp, {fp, sp, pc} + .size umult, .-umult + +/* + * void FPsave(void*); + */ + + .align 2 + .global FPsave + .type FPsave, %function +FPsave: + @ args = 0, pretend = 0, frame = 4 + @ frame_needed = 1, uses_anonymous_args = 0 + mov ip, sp + stmfd sp!, {fp, ip, lr, pc} + sub fp, ip, #4 + sub sp, sp, #4 + str r0, [fp, #-16] + ldmea fp, {fp, sp, pc} + .size FPsave, .-FPsave + +/* + * void FPrestore(void*); + */ + .align 2 + .global FPrestore + .type FPrestore, %function +FPrestore: + @ args = 0, pretend = 0, frame = 4 + @ frame_needed = 1, uses_anonymous_args = 0 + mov ip, sp + stmfd sp!, {fp, ip, lr, pc} + sub fp, ip, #4 + sub sp, sp, #4 + str r0, [fp, #-16] + ldmea fp, {fp, sp, pc} + .size FPrestore, .-FPrestore + +/* + * ulong _tas(ulong*); + */ + .align 2 + .global _tas + .type _tas, %function +_tas: + @ args = 0, pretend = 0, frame = 0 + @ frame_needed = 0, uses_anonymous_args = 0 + @ link register save eliminated. + @ lr needed for prologue + mov r3, #1 + swp r0, r3, [r0] + mov pc, lr + .size _tas, .-_tas diff --git a/emu/Linux/asm-power.S b/emu/Linux/asm-power.S new file mode 100644 index 00000000..ff5f97cd --- /dev/null +++ b/emu/Linux/asm-power.S @@ -0,0 +1,72 @@ +#include <asm-ppc/reg.h> + + .file "asm-power.S" + .section ".text" + .align 2 + .globl FPsave + .type FPsave, @function +FPsave: + .set _framesize,0 + mffs f0 + stfd f0,0(r3) + blr + .size FPsave,.-FPsave + + .align 2 + .globl FPrestore +FPrestore: + lfd f0,0(r3) + mtfsf 0xff,f0 + blr + .size FPrestore, .-FPrestore + + .align 2 + .globl _tas +_tas: + sync + mr r4,r3 + addi r5,0,0x1 +1: + lwarx r3,0,r4 + cmpwi r3,0x0 + bne- 2f + stwcx. r5,0,r4 + bne- 1b /* Lost reservation, try again */ +2: + sync + blr + .size _tas,.-_tas + +/* + * void executeonnewstack(void *tos, void (*tramp)(void *arg), void *arg) + */ + .align 2 + .globl executeonnewstack: +executeonnewstack: + mr r1,r3 /* change stacks */ + stwu 1,-16(r1) /* save lr to aid the traceback */ + li r0,0 + stw r0,20(r1) + mr r3,r5 + mtctr r4 + bctrl /* tramp(arg) */ + br . /* failed */ + .size executeonnewstack,.-executeonnewstack + +/* + * void unlockandexit(int *key) + * + * NB: the return status may be garbaged if the stack is reused + * between the unlock and the system call, but this should + * not matter since no task is waiting for the result + */ + .align 2 + .globl unlockandexit +unlockandexit: + li r0,0x0 + stw r0,0(r3) /* unlock */ + li r0,1 /* sys exit; 234 is exit group */ + li r3,0 /* exit status */ + sc + br . /* not reached */ + .size unlockandexit,.-unlockandexit diff --git a/emu/Linux/cmd.c b/emu/Linux/cmd.c index 2f55c427..0b8c960b 100644 --- a/emu/Linux/cmd.c +++ b/emu/Linux/cmd.c @@ -21,7 +21,7 @@ enum typedef struct Targ Targ; struct Targ { - int fd[2]; /* fd[0] is standard input, fd[1] is standard output */ + int fd[3]; /* fd[0] is standard input, fd[1] is standard output, fd[2] is standard error */ char** args; char* dir; int pid; @@ -43,15 +43,17 @@ childproc(Targ *t) nfd = getdtablesize(); for(i = 0; i < nfd; i++) - if(i != t->fd[0] && i != t->fd[1] && i != t->wfd) + if(i != t->fd[0] && i != t->fd[1] && i != t->fd[2] && i != t->wfd) close(i); dup2(t->fd[0], 0); dup2(t->fd[1], 1); - dup2(t->fd[1], 2); + dup2(t->fd[2], 2); close(t->fd[0]); close(t->fd[1]); + close(t->fd[2]); + /* should have an auth file to do host-specific authorisation? */ if(t->gid != -1){ if(setgid(t->gid) < 0 && getegid() == 0){ fprint(t->wfd, "can't set gid %d: %s", t->gid, strerror(errno)); @@ -82,10 +84,10 @@ childproc(Targ *t) } void* -oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) +oscmd(char **args, int nice, char *dir, int *fd) { Targ *t; - int r, fd0[2], fd1[2], wfd[2], n, pid; + int r, fd0[2], fd1[2], fd2[2], wfd[2], n, pid; t = mallocz(sizeof(*t), 1); if(t == nil) @@ -93,14 +95,16 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) fd0[0] = fd0[1] = -1; fd1[0] = fd1[1] = -1; + fd2[0] = fd2[1] = -1; wfd[0] = wfd[1] = -1; - if(pipe(fd0) < 0 || pipe(fd1) < 0 || pipe(wfd) < 0) + if(pipe(fd0) < 0 || pipe(fd1) < 0 || pipe(fd2) < 0 || pipe(wfd) < 0) goto Error; if(fcntl(wfd[1], F_SETFD, FD_CLOEXEC) < 0) /* close on exec to give end of file on success */ goto Error; t->fd[0] = fd0[0]; t->fd[1] = fd1[1]; + t->fd[2] = fd2[1]; t->wfd = wfd[1]; t->args = args; t->dir = dir; @@ -130,6 +134,7 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) close(fd0[0]); close(fd1[1]); + close(fd2[1]); close(wfd[1]); n = read(wfd[0], up->genbuf, sizeof(up->genbuf)-1); @@ -137,6 +142,7 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) if(n > 0){ close(fd0[1]); close(fd1[0]); + close(fd2[0]); free(t); up->genbuf[n] = 0; if(Debug) @@ -145,19 +151,21 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) return nil; } - *sfd = fd0[1]; - *rfd = fd1[0]; + fd[0] = fd0[1]; + fd[1] = fd1[0]; + fd[2] = fd2[0]; return t; Error: r = errno; - free(t); if(Debug) print("oscmd: %q\n",strerror(r)); close(fd0[0]); close(fd0[1]); close(fd1[0]); close(fd1[1]); + close(fd2[0]); + close(fd2[1]); close(wfd[0]); close(wfd[1]); error(strerror(r)); diff --git a/emu/Linux/emu-g b/emu/Linux/emu-g new file mode 100644 index 00000000..8892d7a9 --- /dev/null +++ b/emu/Linux/emu-g @@ -0,0 +1,96 @@ +dev + root + cons + env + mnt + pipe + prog + prof + srv + dup + ssl + cap + fs + cmd cmd + indir + + ip ipif-posix ipaux + eia +# audio audio + mem + +lib + interp + math + keyring + sec + mp + + 9 + +link + +mod + sys + math + srv srv + keyring + loader + +port + alloc + cache + chan + dev + dial + dis + discall + env + error + errstr + exception + exportfs + inferno + latin1 + main + parse + pgrp + print + proc + qio + random + sysfile + uqid + +code + int dontcompile = 1; + int macjit = 1; + void setpointer(int x, int y){USED(x); USED(y);} + ulong strtochan(char *s){USED(s); return ~0;} + +init + emuinit + +root + /dev / + /fd / + /prog / + /net / + /net.alt / + /chan / + /nvfs / + /env / +# /chan +# /dev +# /dis +# /env +# /n +# /net +# /nvfs / +# /prog +# /icons +# /osinit.dis +# /dis/emuinit.dis +# /dis/lib/auth.dis +# /dis/lib/ssl.dis +# /n/local / diff --git a/emu/Linux/mkfile b/emu/Linux/mkfile index fd6e89e7..ee2152d0 100644 --- a/emu/Linux/mkfile +++ b/emu/Linux/mkfile @@ -1,8 +1,6 @@ SYSTARG=Linux -OBJTYPE=386 <../../mkconfig SYSTARG=Linux -OBJTYPE=386 #Configurable parameters diff --git a/emu/Linux/os.c b/emu/Linux/os.c index f541311f..336d0443 100644 --- a/emu/Linux/os.c +++ b/emu/Linux/os.c @@ -521,3 +521,15 @@ stackalloc(Proc *p, void **tos) *(Proc **)rv = p; return rv; } + +#ifdef LINUX_ARM +#define SYS_cacheflush __ARM_NR_cacheflush + +int +segflush(void *a, ulong n) +{ + if(n) + syscall(SYS_cacheflush, a, (char*)a+n-1, 1); + return 0; +} +#endif diff --git a/emu/Linux/segflush-power.c b/emu/Linux/segflush-power.c new file mode 100644 index 00000000..07f9a3cb --- /dev/null +++ b/emu/Linux/segflush-power.c @@ -0,0 +1,27 @@ +/* + * from geoff collyer's port + * invalidate instruction cache and write back data cache from a to a+n-1, + * at least. + */ +void +segflush(void *a, ulong n) +{ + ulong *p; + + // cache blocks are often eight words (32 bytes) long, sometimes 16 bytes. + // need to determine it dynamically? + for (p = (ulong *)((ulong)a & ~3UL); (char *)p < (char *)a + n; p++) + __asm__("dcbst 0,%0\n\t" // not dcbf, which writes back, then invalidates + "icbi 0,%0\n\t" + : // no output + : "ar" (p) + ); + __asm__("sync\n\t" + : // no output + : + ); + __asm__("isync\n\t" + : // no output + : + ); +} diff --git a/emu/MacOSX/NOTICE b/emu/MacOSX/NOTICE index cf4f254f..a14c52c9 100644 --- a/emu/MacOSX/NOTICE +++ b/emu/MacOSX/NOTICE @@ -1,2 +1,3 @@ MacOSX port Copyright © 2001-2003 Corpus Callosum Corporation, with portions Copyright © 2001-2003 Geoff Collyer +MacOSX-x86 Copyright © 2006 Corpus Callosum Corporation diff --git a/emu/MacOSX/asm-386.s b/emu/MacOSX/asm-386.s new file mode 100644 index 00000000..fc903bcb --- /dev/null +++ b/emu/MacOSX/asm-386.s @@ -0,0 +1,28 @@ +/* + * these are the same as on the PC (eg, Linux) +*/ + + .globl _FPsave +_FPsave: + pushl %ebp + movl %esp, %ebp + movl 8(%ebp), %eax + fstenv (%eax) + popl %ebp + ret + + .globl _FPrestore +_FPrestore: + pushl %ebp + movl %esp, %ebp + movl 8(%ebp), %eax + fldenv (%eax) + popl %ebp + ret + + .globl __tas +__tas: + movl $1, %eax + movl 4(%esp), %ecx + xchgl %eax, 0(%ecx) + ret diff --git a/emu/MacOSX/cmd.c b/emu/MacOSX/cmd.c index 49825f3c..58f6dba7 100644 --- a/emu/MacOSX/cmd.c +++ b/emu/MacOSX/cmd.c @@ -22,7 +22,7 @@ enum typedef struct Targ Targ; struct Targ { - int fd[2]; /* fd[0] is standard input, fd[1] is standard output */ + int fd[3]; /* fd[0] is standard input, fd[1] is standard output, fd[2] is standard error */ char** args; char* dir; int pid; @@ -44,15 +44,17 @@ childproc(Targ *t) nfd = getdtablesize(); for(i = 0; i < nfd; i++) - if(i != t->fd[0] && i != t->fd[1] && i != t->wfd) + if(i != t->fd[0] && i != t->fd[1] && i != t->fd[2] && i != t->wfd) close(i); dup2(t->fd[0], 0); dup2(t->fd[1], 1); - dup2(t->fd[1], 2); + dup2(t->fd[2], 2); close(t->fd[0]); close(t->fd[1]); + close(t->fd[2]); + /* should have an auth file to do host-specific authorisation? */ if(t->gid != -1){ if(setgid(t->gid) < 0 && getegid() == 0){ fprint(t->wfd, "can't set gid %d: %s", t->gid, strerror(errno)); @@ -83,10 +85,10 @@ childproc(Targ *t) } void* -oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) +oscmd(char **args, int nice, char *dir, int *fd) { Targ *t; - int r, fd0[2], fd1[2], wfd[2], n, pid; + int r, fd0[2], fd1[2], fd2[2], wfd[2], n, pid; t = mallocz(sizeof(*t), 1); if(t == nil) @@ -94,14 +96,16 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) fd0[0] = fd0[1] = -1; fd1[0] = fd1[1] = -1; + fd2[0] = fd2[1] = -1; wfd[0] = wfd[1] = -1; - if(pipe(fd0) < 0 || pipe(fd1) < 0 || pipe(wfd) < 0) + if(pipe(fd0) < 0 || pipe(fd1) < 0 || pipe(fd2) < 0 || pipe(wfd) < 0) goto Error; if(fcntl(wfd[1], F_SETFD, FD_CLOEXEC) < 0) /* close on exec to give end of file on success */ goto Error; t->fd[0] = fd0[0]; t->fd[1] = fd1[1]; + t->fd[2] = fd2[1]; t->wfd = wfd[1]; t->args = args; t->dir = dir; @@ -131,6 +135,7 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) close(fd0[0]); close(fd1[1]); + close(fd2[1]); close(wfd[1]); n = read(wfd[0], up->genbuf, sizeof(up->genbuf)-1); @@ -138,6 +143,7 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) if(n > 0){ close(fd0[1]); close(fd1[0]); + close(fd2[0]); free(t); up->genbuf[n] = 0; if(Debug) @@ -146,8 +152,9 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) return nil; } - *sfd = fd0[1]; - *rfd = fd1[0]; + fd[0] = fd0[1]; + fd[1] = fd1[0]; + fd[2] = fd2[0]; return t; Error: @@ -158,6 +165,8 @@ Error: close(fd0[1]); close(fd1[0]); close(fd1[1]); + close(fd2[0]); + close(fd2[1]); close(wfd[0]); close(wfd[1]); error(strerror(r)); diff --git a/emu/MacOSX/mkfile b/emu/MacOSX/mkfile index 693eaf33..25fb99c6 100644 --- a/emu/MacOSX/mkfile +++ b/emu/MacOSX/mkfile @@ -1,8 +1,8 @@ SYSTARG=MacOSX -OBJTYPE=power +#OBJTYPE=power <../../mkconfig SYSTARG=MacOSX -OBJTYPE=power +#OBJTYPE=power #Configurable parameters @@ -30,6 +30,7 @@ OBJ=\ HFILES=\ CFLAGS='-DROOT="'$ROOT'"'\ + '-DOBJTYPE="'$OBJTYPE'"'\ -DEMU -I. -I../port\ -I$ROOT/$SYSTARG/$OBJTYPE/include\ -I$ROOT/include -I$ROOT/libinterp\ diff --git a/emu/MacOSX/os.c b/emu/MacOSX/os.c index e246f625..3363b5ad 100644 --- a/emu/MacOSX/os.c +++ b/emu/MacOSX/os.c @@ -42,7 +42,7 @@ enum DELETE = 0x7F }; char *hosttype = "MacOSX"; -char *cputype = "power"; +char *cputype = OBJTYPE; static pthread_key_t prdakey; @@ -10,6 +10,7 @@ file such as NOTICE, LICENCE or COPYING. Portions Copyright © 1997-1999 Vita Nuova Limited Portions Copyright © 2000-2006 Vita Nuova Holdings Limited (www.vitanuova.com) Revisions Copyright © 2000-2006 Lucent Technologies Inc. and others + Portions Copyright © 2005 Russ Cox, MIT Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/emu/Nt/cmd.c b/emu/Nt/cmd.c index a03b949b..764d328b 100644 --- a/emu/Nt/cmd.c +++ b/emu/Nt/cmd.c @@ -104,11 +104,11 @@ exporthandle(HANDLE h, int close) /* TO DO: check that oserrstr will have the right text on error */ void* -oscmd(char **args, int nice, char *dir, int *rpfd, int *wpfd) +oscmd(char **args, int nice, char *dir, int *fd) { STARTUPINFO si; SECURITY_ATTRIBUTES sec; - HANDLE rh, wh, srh, swh; + HANDLE rh, wh, eh, srh, swh, seh; PROCESS_INFORMATION pinfo; char *cmd; wchar_t *wcmd, *wdir; @@ -126,35 +126,22 @@ oscmd(char **args, int nice, char *dir, int *rpfd, int *wpfd) sec.nLength = sizeof(sec); sec.lpSecurityDescriptor = 0; sec.bInheritHandle = 0; - if(!CreatePipe(&rh, &swh, &sec, 0)) { - print("can't create pipe\n"); - free(cmd); - free(wcmd); - free(wdir); - return nil; - } - if(!CreatePipe(&srh, &wh, &sec, 0)) { - print("can't create pipe\n"); - CloseHandle(rh); - CloseHandle(swh); - free(cmd); - free(wcmd); - free(wdir); - return nil; - } + rh = wh = eh = srh = swh = seh = nil; + if(!CreatePipe(&rh, &swh, &sec, 0)) + goto Error; + if(!CreatePipe(&srh, &wh, &sec, 0)) + goto Error; + if(!CreatePipe(&seh, &eh, &sec, 0)) + goto Error; rh = exporthandle(rh, 1); + if(rh == nil) + goto Error; wh = exporthandle(wh, 1); - if (rh == nil || wh == nil) { - print("can't dup pipes\n"); - CloseHandle(rh); - CloseHandle(swh); - CloseHandle(wh); - CloseHandle(srh); - free(cmd); - free(wcmd); - free(wdir); - return nil; - } + if(wh == nil) + goto Error; + eh = exporthandle(eh, 1); + if(eh == nil) + goto Error; memset(&si, 0, sizeof(si)); si.cb = sizeof(si); @@ -162,7 +149,7 @@ oscmd(char **args, int nice, char *dir, int *rpfd, int *wpfd) si.wShowWindow = SW_SHOW; si.hStdInput = rh; si.hStdOutput = wh; - si.hStdError = exporthandle(wh, 0); + si.hStdError = eh; prio = 0; if(nice){ @@ -175,21 +162,14 @@ oscmd(char **args, int nice, char *dir, int *rpfd, int *wpfd) if(!CreateProcess(nil/*wpath*/, wcmd, 0, 0, 1, CREATE_NEW_PROCESS_GROUP|CREATE_DEFAULT_ERROR_MODE|prio, 0 /*env*/, wdir, &si, &pinfo)){ - print("can't create process '%Q' %d\n", wcmd, GetLastError()); - CloseHandle(si.hStdInput); - CloseHandle(swh); - CloseHandle(si.hStdOutput); - CloseHandle(si.hStdError); - CloseHandle(srh); - free(cmd); - free(wcmd); - free(wdir); - return nil; + //print("can't create process '%Q' %d\n", wcmd, GetLastError()); + goto Error; } - *rpfd = nth2fd(srh); - *wpfd = nth2fd(swh); - if(*wpfd == 1 || *wpfd == 2) + fd[0] = nth2fd(swh); + fd[1] = nth2fd(srh); + fd[2] = nth2fd(seh); + if(fd[1] == 1 || fd[2] == 2) panic("invalid mapping of handle to fd"); CloseHandle(si.hStdInput); CloseHandle(si.hStdOutput); @@ -209,6 +189,24 @@ oscmd(char **args, int nice, char *dir, int *rpfd, int *wpfd) free(wcmd); free(wdir); return pinfo.hProcess; + +Error: + if(rh) + CloseHandle(rh); + if(wh) + CloseHandle(wh); + if(eh) + CloseHandle(eh); + if(srh) + CloseHandle(srh); + if(swh) + CloseHandle(swh); + if(seh) + CloseHandle(seh); + free(cmd); + free(wcmd); + free(wdir); + return nil; } int diff --git a/emu/Nt/os.c b/emu/Nt/os.c index 023d47c3..3f7156d9 100644 --- a/emu/Nt/os.c +++ b/emu/Nt/os.c @@ -64,24 +64,24 @@ pfree(Proc *p) } free(e->user); free(p->prog); + CloseHandle((HANDLE)p->os); free(p); } -static ulong erendezvous(void*, ulong); - void osblock(void) { - erendezvous(up, 0); + if(WaitForSingleObject((HANDLE)up->os, INFINITE) != WAIT_OBJECT_0) + panic("osblock failed"); } void osready(Proc *p) { - erendezvous(p, 0); + if(SetEvent((HANDLE)p->os) == FALSE) + panic("osready failed"); } - void pexit(char *msg, int t) { @@ -118,11 +118,9 @@ tramp(LPVOID p) up = p; up->func(up->arg); pexit("", 0); - // should never get here but tidy up anyway - _asm { - mov fs:[0],-1 - add esp, 8 - } + /* not reached */ + for(;;) + panic("tramp"); return 0; } @@ -140,6 +138,12 @@ kproc(char *name, void (*func)(void*), void *arg, int flags) print("out of kernel processes\n"); return -1; } + p->os = CreateEvent(NULL, FALSE, FALSE, NULL); + if(p->os == NULL){ + pfree(p); + print("can't allocate os event\n"); + return -1; + } if(flags & KPDUPPG) { pg = up->env->pgrp; @@ -429,7 +433,7 @@ libinit(char *imod) lasterror = GetLastError(); if(PlatformId == VER_PLATFORM_WIN32_NT || lasterror != ERROR_NOT_LOGGED_ON) print("cannot GetUserName: %d\n", lasterror); - } else { + }else{ uns = narrowen(wuname); snprint(uname, sizeof(uname), "%s", uns); free(uns); @@ -439,85 +443,6 @@ libinit(char *imod) emuinit(imod); } -enum -{ - NHLOG = 7, - NHASH = (1<<NHLOG) -}; - -typedef struct Tag Tag; -struct Tag -{ - void* tag; - ulong val; - HANDLE pid; - Tag* next; -}; - -static Tag* ht[NHASH]; -static Tag* ft; -static Lock hlock; -static int nsema; - -static ulong -erendezvous(void *tag, ulong value) -{ - int h; - ulong rval; - Tag *t, **l, *f; - - - h = (ulong)tag & (NHASH-1); - - lock(&hlock); - l = &ht[h]; - for(t = ht[h]; t; t = t->next) { - if(t->tag == tag) { - rval = t->val; - t->val = value; - t->tag = 0; - unlock(&hlock); - if(SetEvent(t->pid) == FALSE) - panic("Release failed\n"); - return rval; - } - } - - t = ft; - if(t == 0) { - t = malloc(sizeof(Tag)); - if(t == nil) - panic("rendezvous: no memory"); - t->pid = CreateEvent(0, 0, 0, 0); - } - else - ft = t->next; - - t->tag = tag; - t->val = value; - t->next = *l; - *l = t; - unlock(&hlock); - - if(WaitForSingleObject(t->pid, INFINITE) != WAIT_OBJECT_0) - panic("WaitForSingleObject failed\n"); - - lock(&hlock); - rval = t->val; - for(f = *l; f; f = f->next) { - if(f == t) { - *l = f->next; - break; - } - l = &f->next; - } - t->next = ft; - ft = t; - unlock(&hlock); - - return rval; -} - void FPsave(void *fptr) { diff --git a/emu/Nt/win.c b/emu/Nt/win.c index f9a6aa7d..2e984642 100644 --- a/emu/Nt/win.c +++ b/emu/Nt/win.c @@ -1,74 +1,42 @@ -#define Unknown win_Unknown +#define Unknown WUnknown +#define Colormap WColormap +#define Cursor WCursor +#define Display WDisplay +#define Drawable WDrawable +#define Font WFont +#define GC WGC +#define Point WPoint +#define Rectangle WRectangle +#define Screen WScreen +#define Visual WVisual +#define Window WWindow + #include <windows.h> + +#undef Colormap +#undef Cursor +#undef Display +#undef XDrawable +#undef Font +#undef GC +#undef Point +#undef Rectangle +#undef Screen +#undef Visual +#undef Window #undef Unknown + #include "dat.h" #include "fns.h" #include "error.h" - +#include <draw.h> #include "keyboard.h" #include "cursor.h" -/* - * image channel descriptors - copied from draw.h as it clashes with windows.h on many things - */ -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), - 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), -}; - extern ulong displaychan; -extern void drawend(void); - -/* - * defs for image types to overcome name conflicts - */ -typedef struct IPoint IPoint; -typedef struct IRectangle IRectangle; - -struct IPoint -{ - LONG x; - LONG y; -}; - -struct IRectangle -{ - IPoint min; - IPoint max; -}; - extern char* runestoutf(char*, Rune*, int); -extern int bytesperline(IRectangle, int); +extern int bytesperline(Rectangle, int); extern int main(int argc, char **argv); static void dprint(char*, ...); static DWORD WINAPI winproc(LPVOID); @@ -105,7 +73,7 @@ WinMain(HINSTANCE winst, HINSTANCE wprevinst, LPSTR cmdline, int wcmdshow) return 0; } -void +static void dprint(char *fmt, ...) { va_list arg; @@ -118,17 +86,6 @@ dprint(char *fmt, ...) OutputDebugString(buf); } -int -col(int v, int n) -{ - int i, c; - - c = 0; - for(i = 0; i < 8; i += n) - c |= v << (16-(n+i)); - return c >> 8; -} - static void graphicscmap(PALETTEENTRY *pal) { @@ -190,11 +147,13 @@ autochan(void) return CMAP8; if (bpp < 24) return RGB15; - return RGB24; + if (bpp < 32) + return RGB24; + return XRGB32; } uchar* -attachscreen(IRectangle *r, ulong *chan, int *d, int *width, int *softscreen) +attachscreen(Rectangle *r, ulong *chan, int *d, int *width, int *softscreen) { int i, k; ulong c; @@ -314,7 +273,7 @@ attachscreen(IRectangle *r, ulong *chan, int *d, int *width, int *softscreen) } void -flushmemscreen(IRectangle r) +flushmemscreen(Rectangle r) { RECT wr; @@ -385,11 +344,12 @@ WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) b |= 1; if(wparam & MK_MBUTTON) b |= 2; - if(wparam & MK_RBUTTON) + if(wparam & MK_RBUTTON) { if(wparam & MK_CONTROL) b |= 2; //simulate middle button else b |= 4; //right button + } mousetrack(b, x, y, 0); break; case WM_SYSKEYDOWN: @@ -590,8 +550,7 @@ winproc(LPVOID x) if(AdjustWindowRect(&size, ws, 0)) { maxxsize = size.right - size.left; maxysize = size.bottom - size.top; - } - else { + }else{ maxxsize = Xsize + 40; maxysize = Ysize + 40; } @@ -611,8 +570,7 @@ winproc(LPVOID x) inst, /* program handle */ NULL /* create parms */ ); - } - else { + }else{ window = CreateWindowExA( 0, /* extended style */ "inferno", /* class */ @@ -644,15 +602,13 @@ winproc(LPVOID x) TranslateMessage(&msg); DispatchMessageW(&msg); } - } - else { + }else{ while(GetMessageA(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessageA(&msg); } } attached = 0; - /* drawend(); */ ExitThread(msg.wParam); return 0; } @@ -663,7 +619,7 @@ setpointer(int x, int y) POINT pt; pt.x = x; pt.y = y; - ClientToScreen(window, (LPPOINT)&pt); + ClientToScreen(window, &pt); SetCursorPos(pt.x, pt.y); } @@ -671,7 +627,7 @@ void drawcursor(Drawcursor* c) { HCURSOR nh, oh; - IRectangle ir; + Rectangle ir; int i, h, j, bpl, ch, cw; uchar *bs, *bc, *and, *xor, *cand, *cxor; @@ -690,7 +646,6 @@ drawcursor(Drawcursor* c) ir.min.y = c->miny; ir.max.x = c->maxx; ir.max.y = c->maxy; - /* passing IRectangle to Rectangle is safe */ bpl = bytesperline(ir, 1); h = (c->maxy-c->miny)/2; @@ -728,8 +683,7 @@ drawcursor(Drawcursor* c) SendMessage(window, WM_SETCURSOR, (int)window, 0); if(oh != NULL) DestroyCursor(oh); - } - else { + }else{ print("CreateCursor error %d\n", GetLastError()); print("CXCURSOR=%d\n", GetSystemMetrics(SM_CXCURSOR)); print("CYCURSOR=%d\n", GetSystemMetrics(SM_CYCURSOR)); diff --git a/emu/Plan9/cmd.c b/emu/Plan9/cmd.c index d3822f50..8d311f2a 100644 --- a/emu/Plan9/cmd.c +++ b/emu/Plan9/cmd.c @@ -12,7 +12,7 @@ extern void vstack(void*); typedef struct Targ Targ; struct Targ { - int fd[2]; + int fd[3]; /* standard input, output and error */ int wfd; int* spin; char** args; @@ -41,18 +41,21 @@ exectramp(Targ *t) nfd = MAXNFD; /* TO DO: should read from /fd */ for(i = 0; i < nfd; i++) - if(i != fd[0] && i != fd[1] && i != t->wfd) + if(i != fd[0] && i != fd[1] && i != fd[2] && i != t->wfd) close(i); if(fd[0] != 0){ dup(fd[0], 0); close(fd[0]); } - if(fd[0] != 1){ + if(fd[1] != 1){ dup(fd[1], 1); close(fd[1]); } - dup(1, 2); + if(fd[2] != 2){ + dup(fd[2], 2); + close(fd[2]); + } if(t->dir != nil && chdir(t->dir) < 0){ if(t->wfd > 0) @@ -79,10 +82,10 @@ exectramp(Targ *t) } void* -oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) +oscmd(char **args, int nice, char *dir, int *fd) { Targ *t; - int spin, *spinptr, fd0[2], fd1[2], wfd[2], n; + int spin, *spinptr, fd0[2], fd1[2], fd2[2], wfd[2], n; Dir *d; up->genbuf[0] = 0; @@ -94,6 +97,7 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) t->nice = nice; fd0[0] = fd0[1] = -1; fd1[0] = fd1[1] = -1; + fd2[0] = fd2[1] = -1; wfd[0] = wfd[1] = -1; if(dir != nil){ d = dirstat(dir); @@ -101,7 +105,7 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) goto Error; free(d); } - if(pipe(fd0) < 0 || pipe(fd1) < 0 || pipe(wfd) < 0) + if(pipe(fd0) < 0 || pipe(fd1) < 0 || pipe(fd2) < 0 || pipe(wfd) < 0) goto Error; spinptr = &spin; @@ -109,6 +113,7 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) t->fd[0] = fd0[0]; t->fd[1] = fd1[1]; + t->fd[2] = fd2[1]; t->wfd = wfd[1]; t->spin = spinptr; switch(rfork(RFPROC|RFMEM|RFREND|RFNOTEG|RFFDG|RFNAMEG|RFENVG)) { @@ -128,20 +133,24 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) close(fd0[0]); close(fd1[1]); + close(fd2[1]); close(wfd[1]); + n = read(wfd[0], up->genbuf, sizeof(up->genbuf)-1); close(wfd[0]); if(n > 0){ close(fd0[1]); close(fd1[0]); + close(fd2[0]); up->genbuf[n] = 0; errstr(up->genbuf, sizeof(up->genbuf)); free(t); return nil; } - *sfd = fd0[1]; - *rfd = fd1[0]; + fd[0] = fd0[1]; + fd[1] = fd1[0]; + fd[2] = fd2[0]; return t; Error: @@ -150,6 +159,8 @@ Error: close(fd0[1]); close(fd1[0]); close(fd1[1]); + close(fd2[0]); + close(fd2[1]); close(wfd[0]); close(wfd[1]); free(t); diff --git a/emu/Plan9/win.c b/emu/Plan9/win.c index d86eea15..2f280853 100644 --- a/emu/Plan9/win.c +++ b/emu/Plan9/win.c @@ -16,14 +16,14 @@ enum extern Memimage *screenimage; -ulong* attachwindow(Rectangle*, ulong*, int*, int*); +static ulong* attachwindow(Rectangle*, ulong*, int*, int*); static void plan9readmouse(void*); static void plan9readkeybd(void*); static int mapspecials(char *s1, char *s2, int *n); -int pixels = 1; int usenewwin = 1; +int kbdiscons; static int truedepth; static int datafd; @@ -84,31 +84,35 @@ attachscreen(Rectangle *r, ulong *chan, int *d, int *width, int *softscreen) fprint(2, "attachscreen: can't mount window manager: %r\n"); return nil; } + if(bind("/mnt/wsys", "/dev", MBEFORE) < 0){ + fprint(2, "attachscreen: can't bind /mnt/wsys before /dev: %r\n"); + return nil; + } } - cursfd = open("/mnt/wsys/cursor", OWRITE); + cursfd = open("/dev/cursor", OWRITE); if(cursfd < 0) { fprint(2, "attachscreen: open cursor: %r\n"); return nil; } /* Set up graphics window console (chars->gkbdq) */ - keybdfd = open("/mnt/wsys/cons", OREAD); + keybdfd = open("/dev/cons", OREAD); if(keybdfd < 0) { fprint(2, "attachscreen: open keyboard: %r\n"); return nil; } - mousefd = open("/mnt/wsys/mouse", ORDWR); + mousefd = open("/dev/mouse", ORDWR); if(mousefd < 0){ fprint(2, "attachscreen: can't open mouse: %r\n"); return nil; } - if(usenewwin){ - fd = open("/mnt/wsys/consctl", OWRITE); + if(usenewwin || 1){ + fd = open("/dev/consctl", OWRITE); if(fd < 0) - fprint(2, "attachscreen: open /mnt/wsys/consctl: %r\n"); + fprint(2, "attachscreen: open /dev/consctl: %r\n"); if(write(fd, "rawon", 5) != 5) - fprint(2, "attachscreen: write /mnt/wsys/consctl: %r\n"); + fprint(2, "attachscreen: write /dev/consctl: %r\n"); } /* Set up graphics files */ @@ -148,11 +152,11 @@ attachscreen(Rectangle *r, ulong *chan, int *d, int *width, int *softscreen) mousepid = kproc("readmouse", plan9readmouse, nil, 0); keybdpid = kproc("readkbd", plan9readkeybd, nil, 0); - bind("/mnt/wsys", "/dev", MBEFORE); fd = open("/dev/label", OWRITE); - if (fd >= 0) { - write(fd, "inferno", 7); + if(fd >= 0){ + snprint(buf, sizeof(buf), "inferno %d", getpid()); + write(fd, buf, strlen(buf)); close(fd); } @@ -160,35 +164,7 @@ attachscreen(Rectangle *r, ulong *chan, int *d, int *width, int *softscreen) return (uchar*)data; } -static int -depthof(char *s) -{ - char *es; - int n, c, d; - - es = s+12; - while(s<es && *s==' ') - s++; - if(s == es) - return -1; - if('0'<=*s && *s<='9'){ - truedepth = 1<<atoi(s); - return truedepth; - } - - d = 0; - while(s<es && *s!=' '){ - c = *s++; /* skip letter */ - n = strtoul(s, &s, 10); - d += n; - if(c != 'r' && c != 'g' && c != 'b' && c != 'k' && c != 'm') - return -1; - } - truedepth = d; - return d; -} - -ulong* +static ulong* attachwindow(Rectangle *r, ulong *chan, int *d, int *width) { int n, fd, nb; @@ -231,7 +207,8 @@ attachwindow(Rectangle *r, ulong *chan, int *d, int *width) return nil; } imagechan = strtochan(buf+2*12); - if(depthof(buf+2*12) < 0){ + truedepth = chantodepth(imagechan); + if(truedepth == 0){ fprint(2, "attachwindow: cannot handle window depth specifier %.12s\n", buf+2*12); return nil; } @@ -272,7 +249,7 @@ attachwindow(Rectangle *r, ulong *chan, int *d, int *width) return data; } -int +static int plan9loadimage(Rectangle r, uchar *data, int ndata) { long dy; @@ -396,7 +373,7 @@ drawcursor(Drawcursor *c) write(cursfd, curs, sizeof curs); } -int +static int checkmouse(char *buf, int n) { int x, y, tick, b; @@ -453,12 +430,12 @@ plan9readmouse(void *v) } static void -plan9readkeybd(void *v) +plan9readkeybd(void*) { int n, partial; char buf[32]; char dbuf[32 * 3]; /* overestimate but safe */ - USED(v); + partial = 0; for(;;){ n = read(keybdfd, buf + partial, sizeof(buf) - partial); diff --git a/emu/Solaris/cmd.c b/emu/Solaris/cmd.c index 897490c7..bff1f03b 100644 --- a/emu/Solaris/cmd.c +++ b/emu/Solaris/cmd.c @@ -21,7 +21,7 @@ enum typedef struct Targ Targ; struct Targ { - int fd[2]; /* fd[0] is standard input, fd[1] is standard output */ + int fd[3]; /* fd[0] is standard input, fd[1] is standard output, fd[2] is standard error */ char** args; char* dir; int pid; @@ -43,15 +43,17 @@ childproc(Targ *t) nfd = getdtablesize(); for(i = 0; i < nfd; i++) - if(i != t->fd[0] && i != t->fd[1] && i != t->wfd) + if(i != t->fd[0] && i != t->fd[1] && i != t->fd[2] && i != t->wfd) close(i); dup2(t->fd[0], 0); dup2(t->fd[1], 1); - dup2(t->fd[1], 2); + dup2(t->fd[2], 2); close(t->fd[0]); close(t->fd[1]); + close(t->fd[2]); + /* should have an auth file to do host-specific authorisation? */ if(t->gid != -1){ if(setgid(t->gid) < 0 && getegid() == 0){ fprint(t->wfd, "can't set gid %d: %s", t->gid, strerror(errno)); @@ -82,11 +84,10 @@ childproc(Targ *t) } void* -oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) +oscmd(char **args, int nice, char *dir, int *fd) { - Dir *d; Targ *t; - int r, fd0[2], fd1[2], wfd[2], n, pid; + int r, fd0[2], fd1[2], fd2[2], wfd[2], n, pid; t = mallocz(sizeof(*t), 1); if(t == nil) @@ -94,14 +95,16 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) fd0[0] = fd0[1] = -1; fd1[0] = fd1[1] = -1; + fd2[0] = fd2[1] = -1; wfd[0] = wfd[1] = -1; - if(pipe(fd0) < 0 || pipe(fd1) < 0 || pipe(wfd) < 0) + if(pipe(fd0) < 0 || pipe(fd1) < 0 || pipe(fd2) < 0 || pipe(wfd) < 0) goto Error; if(fcntl(wfd[1], F_SETFD, FD_CLOEXEC) < 0) /* close on exec to give end of file on success */ goto Error; t->fd[0] = fd0[0]; t->fd[1] = fd1[1]; + t->fd[2] = fd2[1]; t->wfd = wfd[1]; t->args = args; t->dir = dir; @@ -113,7 +116,7 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) t->uid = uidnobody; signal(SIGCHLD, SIG_DFL); - switch(pid = fork1()) { + switch(pid = fork()) { case -1: goto Error; case 0: @@ -131,6 +134,7 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) close(fd0[0]); close(fd1[1]); + close(fd2[1]); close(wfd[1]); n = read(wfd[0], up->genbuf, sizeof(up->genbuf)-1); @@ -138,6 +142,7 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) if(n > 0){ close(fd0[1]); close(fd1[0]); + close(fd2[0]); free(t); up->genbuf[n] = 0; if(Debug) @@ -146,8 +151,9 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) return nil; } - *sfd = fd0[1]; - *rfd = fd1[0]; + fd[0] = fd0[1]; + fd[1] = fd1[0]; + fd[2] = fd2[0]; return t; Error: @@ -158,6 +164,8 @@ Error: close(fd0[1]); close(fd1[0]); close(fd1[1]); + close(fd2[0]); + close(fd2[1]); close(wfd[0]); close(wfd[1]); error(strerror(r)); diff --git a/emu/Unixware/cmd.c b/emu/Unixware/cmd.c index 897490c7..bff1f03b 100644 --- a/emu/Unixware/cmd.c +++ b/emu/Unixware/cmd.c @@ -21,7 +21,7 @@ enum typedef struct Targ Targ; struct Targ { - int fd[2]; /* fd[0] is standard input, fd[1] is standard output */ + int fd[3]; /* fd[0] is standard input, fd[1] is standard output, fd[2] is standard error */ char** args; char* dir; int pid; @@ -43,15 +43,17 @@ childproc(Targ *t) nfd = getdtablesize(); for(i = 0; i < nfd; i++) - if(i != t->fd[0] && i != t->fd[1] && i != t->wfd) + if(i != t->fd[0] && i != t->fd[1] && i != t->fd[2] && i != t->wfd) close(i); dup2(t->fd[0], 0); dup2(t->fd[1], 1); - dup2(t->fd[1], 2); + dup2(t->fd[2], 2); close(t->fd[0]); close(t->fd[1]); + close(t->fd[2]); + /* should have an auth file to do host-specific authorisation? */ if(t->gid != -1){ if(setgid(t->gid) < 0 && getegid() == 0){ fprint(t->wfd, "can't set gid %d: %s", t->gid, strerror(errno)); @@ -82,11 +84,10 @@ childproc(Targ *t) } void* -oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) +oscmd(char **args, int nice, char *dir, int *fd) { - Dir *d; Targ *t; - int r, fd0[2], fd1[2], wfd[2], n, pid; + int r, fd0[2], fd1[2], fd2[2], wfd[2], n, pid; t = mallocz(sizeof(*t), 1); if(t == nil) @@ -94,14 +95,16 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) fd0[0] = fd0[1] = -1; fd1[0] = fd1[1] = -1; + fd2[0] = fd2[1] = -1; wfd[0] = wfd[1] = -1; - if(pipe(fd0) < 0 || pipe(fd1) < 0 || pipe(wfd) < 0) + if(pipe(fd0) < 0 || pipe(fd1) < 0 || pipe(fd2) < 0 || pipe(wfd) < 0) goto Error; if(fcntl(wfd[1], F_SETFD, FD_CLOEXEC) < 0) /* close on exec to give end of file on success */ goto Error; t->fd[0] = fd0[0]; t->fd[1] = fd1[1]; + t->fd[2] = fd2[1]; t->wfd = wfd[1]; t->args = args; t->dir = dir; @@ -113,7 +116,7 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) t->uid = uidnobody; signal(SIGCHLD, SIG_DFL); - switch(pid = fork1()) { + switch(pid = fork()) { case -1: goto Error; case 0: @@ -131,6 +134,7 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) close(fd0[0]); close(fd1[1]); + close(fd2[1]); close(wfd[1]); n = read(wfd[0], up->genbuf, sizeof(up->genbuf)-1); @@ -138,6 +142,7 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) if(n > 0){ close(fd0[1]); close(fd1[0]); + close(fd2[0]); free(t); up->genbuf[n] = 0; if(Debug) @@ -146,8 +151,9 @@ oscmd(char **args, int nice, char *dir, int *rfd, int *sfd) return nil; } - *sfd = fd0[1]; - *rfd = fd1[0]; + fd[0] = fd0[1]; + fd[1] = fd1[0]; + fd[2] = fd2[0]; return t; Error: @@ -158,6 +164,8 @@ Error: close(fd0[1]); close(fd1[0]); close(fd1[1]); + close(fd2[0]); + close(fd2[1]); close(wfd[0]); close(wfd[1]); error(strerror(r)); @@ -8,7 +8,7 @@ nuke:V: nuke-$HOSTMODEL &-Posix:QV: echo "(cd $SYSTARG; mk $MKFLAGS $stem)" - (cd $SYSTARG; mk $MKFLAGS $stem) + (cd $SYSTARG; mk $MKFLAGS $stem) || exit 1 &-Nt:QV: echo '@{builtin cd' $SYSTARG '; mk $MKFLAGS $stem}' diff --git a/emu/port/chan.c b/emu/port/chan.c index 697d92c4..997cb876 100644 --- a/emu/port/chan.c +++ b/emu/port/chan.c @@ -1297,7 +1297,6 @@ if(c->umh != nil){ omode |= OTRUNC; goto Open; } - panic("namec: not reached"); default: panic("unknown namec access %d\n", amode); diff --git a/emu/port/dev.c b/emu/port/dev.c index 8bd1da5f..5df62ecc 100644 --- a/emu/port/dev.c +++ b/emu/port/dev.c @@ -249,8 +249,6 @@ devstat(Chan *c, uchar *db, int n, Dirtab *tab, int ntab, Devgen *gen) } break; } - error(Egreg); /* not reached? */ - return -1; } long diff --git a/emu/port/devcmd.c b/emu/port/devcmd.c index 4822c49a..f6cccf39 100644 --- a/emu/port/devcmd.c +++ b/emu/port/devcmd.c @@ -10,6 +10,7 @@ enum Qconvdir, Qconvbase, Qdata = Qconvbase, + Qstderr, Qctl, Qstatus, Qwait, @@ -25,10 +26,8 @@ struct Conv { int x; int inuse; - int wcount; - int rcount; - int rfd; - int wfd; + int fd[3]; /* stdin, stdout, and stderr */ + int count[3]; /* number of readers on stdin/stdout/stderr */ int perm; char* owner; char* state; @@ -69,6 +68,10 @@ cmd3gen(Chan *c, int i, Dir *dp) mkqid(&q, QID(CONV(c->qid), Qdata), 0, QTFILE); devdir(c, q, "data", 0, cv->owner, cv->perm, dp); return 1; + case Qstderr: + mkqid(&q, QID(CONV(c->qid), Qstderr), 0, QTFILE); + devdir(c, q, "stderr", 0, cv->owner, 0444, dp); + return 1; case Qctl: mkqid(&q, QID(CONV(c->qid), Qctl), 0, QTFILE); devdir(c, q, "ctl", 0, cv->owner, cv->perm, dp); @@ -143,6 +146,7 @@ cmdgen(Chan *c, char *name, Dirtab *d, int nd, int s, Dir *dp) case Qconvdir: return cmd3gen(c, Qconvbase+s, dp); case Qdata: + case Qstderr: case Qctl: case Qstatus: case Qwait: @@ -154,7 +158,7 @@ cmdgen(Chan *c, char *name, Dirtab *d, int nd, int s, Dir *dp) static void cmdinit(void) { - cmd.maxconv = 100; + cmd.maxconv = 1000; cmd.conv = mallocz(sizeof(Conv*)*(cmd.maxconv+1), 1); /* cmd.conv is checked by cmdattach, below */ } @@ -228,6 +232,7 @@ cmdopen(Chan *c, int omode) mkqid(&c->qid, QID(cv->x, Qctl), 0, QTFILE); break; case Qdata: + case Qstderr: case Qctl: case Qwait: qlock(&cmd.l); @@ -247,10 +252,14 @@ cmdopen(Chan *c, int omode) switch(TYPE(c->qid)){ case Qdata: if(omode == OWRITE || omode == ORDWR) - cv->wcount++; + cv->count[0]++; if(omode == OREAD || omode == ORDWR) - cv->rcount++; - c->mode = omode; + cv->count[1]++; + break; + case Qstderr: + if(omode != OREAD) + error(Eperm); + cv->count[2]++; break; case Qwait: if(cv->waitq == nil) @@ -269,7 +278,7 @@ cmdopen(Chan *c, int omode) qunlock(&cmd.l); break; } - c->mode = openmode(omode); + c->mode = omode; c->flag |= COPEN; c->offset = 0; return c; @@ -296,6 +305,15 @@ closeconv(Conv *c) } static void +cmdfdclose(Conv *c, int fd) +{ + if(--c->count[fd] == 0 && c->fd[fd] != -1){ + close(c->fd[fd]); + c->fd[fd] = -1; + } +} + +static void cmdclose(Chan *c) { Conv *cc; @@ -307,23 +325,17 @@ cmdclose(Chan *c) switch(TYPE(c->qid)) { case Qctl: case Qdata: + case Qstderr: case Qwait: cc = cmd.conv[CONV(c->qid)]; qlock(&cc->l); if(TYPE(c->qid) == Qdata){ - if(c->mode == OWRITE || c->mode == ORDWR){ - if(--cc->wcount == 0 && cc->wfd != -1){ - close(cc->wfd); - cc->wfd = -1; - } - } - if(c->mode == OREAD || c->mode == ORDWR){ - if(--cc->rcount == 0 && cc->rfd != -1){ - close(cc->rfd); - cc->rfd = -1; - } - } - } + if(c->mode == OWRITE || c->mode == ORDWR) + cmdfdclose(cc, 0); + if(c->mode == OREAD || c->mode == ORDWR) + cmdfdclose(cc, 1); + }else if(TYPE(c->qid) == Qstderr) + cmdfdclose(cc, 2); r = --cc->inuse; if(cc->child != nil){ @@ -345,6 +357,7 @@ cmdread(Chan *ch, void *a, long n, vlong offset) { Conv *c; char *p, *cmds; + int fd; USED(offset); @@ -368,15 +381,19 @@ cmdread(Chan *ch, void *a, long n, vlong offset) c->x, c->inuse, c->state, c->dir, cmds); return readstr(offset, p, n, up->genbuf); case Qdata: + case Qstderr: + fd = 1; + if(TYPE(ch->qid) == Qstderr) + fd = 2; c = cmd.conv[CONV(ch->qid)]; qlock(&c->l); - if(c->rfd == -1){ + if(c->fd[fd] == -1){ qunlock(&c->l); return 0; } qunlock(&c->l); osenter(); - n = read(c->rfd, a, n); + n = read(c->fd[fd], a, n); osleave(); if(n < 0) oserror(); @@ -393,7 +410,7 @@ cmdstarted(void *a) Conv *c; c = a; - return c->child != nil || c->error != nil; + return c->child != nil || c->error != nil || strcmp(c->state, "Execute") != 0; } enum @@ -417,7 +434,7 @@ Cmdtab cmdtab[] = { static long cmdwrite(Chan *ch, void *a, long n, vlong offset) { - int r; + int i, r; Conv *c; Cmdbuf *cb; Cmdtab *ct; @@ -447,8 +464,11 @@ cmdwrite(Chan *ch, void *a, long n, vlong offset) free(cb); nexterror(); } - if(c->child != nil || c->cmd != nil || c->wfd != -1 || c->rfd != -1) + if(c->child != nil || c->cmd != nil) error(Einuse); + for(i = 0; i < nelem(c->fd); i++) + if(c->fd[i] != -1) + error(Einuse); if(cb->nf < 1) error(Etoosmall); kproc("cmdproc", cmdproc, c, 0); /* cmdproc held back until unlock below */ @@ -490,13 +510,13 @@ cmdwrite(Chan *ch, void *a, long n, vlong offset) case Qdata: c = cmd.conv[CONV(ch->qid)]; qlock(&c->l); - if(c->wfd == -1){ + if(c->fd[0] == -1){ qunlock(&c->l); error(Ehungup); } qunlock(&c->l); osenter(); - r = write(c->wfd, a, n); + r = write(c->fd[0], a, n); osleave(); if(r == 0) error(Ehungup); @@ -520,6 +540,7 @@ cmdwstat(Chan *c, uchar *dp, int n) error(Eperm); case Qctl: case Qdata: + case Qstderr: d = malloc(sizeof(*d)+n); if(d == nil) error(Enomem); @@ -548,6 +569,7 @@ static Conv* cmdclone(char *user) { Conv *c, **pp, **ep; + int i; c = nil; ep = &cmd.conv[cmd.maxconv]; @@ -578,8 +600,8 @@ cmdclone(char *user) kstrdup(&c->dir, rootdir); c->perm = 0660; c->state = "Closed"; - c->rfd = -1; - c->wfd = -1; + for(i=0; i<nelem(c->fd); i++) + c->fd[i] = -1; qunlock(&c->l); return c; @@ -606,7 +628,7 @@ cmdproc(void *a) Wakeup(&c->startr); pexit("cmdproc", 0); } - t = oscmd(c->cmd->f+1, c->nice, c->dir, &c->rfd, &c->wfd); + t = oscmd(c->cmd->f+1, c->nice, c->dir, c->fd); if(t == nil) oserror(); c->child = t; /* to allow oscmdkill */ @@ -629,7 +651,7 @@ cmdproc(void *a) oscmdfree(t); if(Debug){ status[n]=0; - print("done %d %d: %q\n", c->rfd, c->wfd, status); + print("done %d %d %d: %q\n", c->fd[0], c->fd[1], c->fd[2], status); } if(c->inuse > 0){ c->state = "Done"; diff --git a/emu/port/devcons.c b/emu/port/devcons.c index efe49838..8e823839 100644 --- a/emu/port/devcons.c +++ b/emu/port/devcons.c @@ -107,11 +107,19 @@ kbdslave(void *a) USED(a); for(;;) { b = readkbd(); - if(kbd.raw == 0) - write(1, &b, 1); + if(kbd.raw == 0){ + switch(b){ + case 0x15: + write(1, "^U\n", 3); + break; + default: + write(1, &b, 1); + break; + } + } qproduce(kbdq, &b, 1); } - pexit("kbdslave", 0); + /* pexit("kbdslave", 0); */ /* not reached */ } void @@ -152,13 +160,13 @@ gkbdputc(Queue *q, int ch) void consinit(void) { - kbdq = qopen(512, 0, 0, 0); + kbdq = qopen(512, 0, nil, nil); if(kbdq == 0) panic("no memory"); - lineq = qopen(512, 0, 0, 0); + lineq = qopen(2*1024, 0, nil, nil); if(lineq == 0) panic("no memory"); - gkbdq = qopen(512, 0, 0, 0); + gkbdq = qopen(512, 0, nil, nil); if(gkbdq == 0) panic("no memory"); randominit(); @@ -178,9 +186,9 @@ consattach(char *spec) { static int kp; - if (kp == 0 && !dflag) { - kproc("kbd", kbdslave, 0, 0); + if(kp == 0 && !dflag) { kp = 1; + kproc("kbd", kbdslave, 0, 0); } return devattach('c', spec); } @@ -205,34 +213,37 @@ consopen(Chan *c, int omode) case Qconsctl: incref(&kbd.ctl); break; + case Qscancode: qlock(&kbd.gq); - if(gkscanq || !gkscanid) { + if(gkscanq != nil || gkscanid == nil) { qunlock(&kbd.q); c->flag &= ~COPEN; if(gkscanq) error(Einuse); else - error(Ebadarg); + error("not supported"); } gkscanq = qopen(256, 0, nil, nil); qunlock(&kbd.gq); break; + case Qkprint: wlock(&kprintq.l); - if(kprintq.q != nil){ + if(waserror()){ wunlock(&kprintq.l); c->flag &= ~COPEN; - error(Einuse); + nexterror(); } - kprintq.q = qopen(32*1024, 0, 0, 0); - if(kprintq.q == nil){ - wunlock(&kprintq.l); - c->flag &= ~COPEN; + if(kprintq.q != nil) + error(Einuse); + kprintq.q = qopen(32*1024, Qcoalesce, nil, nil); + if(kprintq.q == nil) error(Enomem); - } qnoblock(kprintq.q, 1); + poperror(); wunlock(&kprintq.l); + c->iounit = qiomaxatomic; break; } return c; @@ -246,17 +257,20 @@ consclose(Chan *c) switch((ulong)c->qid.path) { case Qconsctl: + /* last close of control file turns off raw */ if(decref(&kbd.ctl) == 0) kbd.raw = 0; break; + case Qscancode: qlock(&kbd.gq); if(gkscanq) { qfree(gkscanq); - gkscanq = 0; + gkscanq = nil; } qunlock(&kbd.gq); break; + case Qkprint: wlock(&kprintq.l); qfree(kprintq.q); @@ -267,62 +281,82 @@ consclose(Chan *c) } static long -consread(Chan *c, void *va, long count, vlong offset) +consread(Chan *c, void *va, long n, vlong offset) { - int i, n, ch, eol; - char *p, buf[64]; + ulong l; + int i, send; + char *p, buf[64], ch; if(c->qid.type & QTDIR) - return devdirread(c, va, count, contab, nelem(contab), devgen); + return devdirread(c, va, n, contab, nelem(contab), devgen); switch((ulong)c->qid.path) { default: error(Egreg); + case Qsysctl: - return readstr(offset, va, count, VERSION); + return readstr(offset, va, n, VERSION); + case Qsysname: if(ossysname == nil) return 0; - return readstr(offset, va, count, ossysname); + return readstr(offset, va, n, ossysname); + case Qrandom: - return randomread(va, count); + return randomread(va, n); + case Qnotquiterandom: - genrandom(va, count); - return count; + genrandom(va, n); + return n; + case Qpin: p = "pin set"; if(up->env->pgrp->pin == Nopin) p = "no pin"; - return readstr(offset, va, count, p); + return readstr(offset, va, n, p); + case Qhostowner: - return readstr(offset, va, count, eve); + return readstr(offset, va, n, eve); + case Qhoststdin: - return read(0, va, count); /* should be pread */ + return read(0, va, n); /* should be pread */ + case Quser: - return readstr(offset, va, count, up->env->user); + return readstr(offset, va, n, up->env->user); + case Qjit: snprint(buf, sizeof(buf), "%d", cflag); - return readstr(offset, va, count, buf); + return readstr(offset, va, n, buf); + case Qtime: snprint(buf, sizeof(buf), "%.lld", timeoffset + osusectime()); - return readstr(offset, va, count, buf); + return readstr(offset, va, n, buf); + case Qdrivers: p = malloc(READSTR); if(p == nil) error(Enomem); - n = 0; + l = 0; for(i = 0; devtab[i] != nil; i++) - n += snprint(p+n, READSTR-n, "#%C %s\n", devtab[i]->dc, devtab[i]->name); - n = readstr(offset, va, count, p); + l += snprint(p+l, READSTR-l, "#%C %s\n", devtab[i]->dc, devtab[i]->name); + if(waserror()){ + free(p); + nexterror(); + } + n = readstr(offset, va, n, p); + poperror(); free(p); return n; + case Qmemory: - return poolread(va, count, offset); + return poolread(va, n, offset); case Qnull: return 0; + case Qmsec: - return readnum(offset, va, count, osmillisec(), NUMSIZE); + return readnum(offset, va, n, osmillisec(), NUMSIZE); + case Qcons: qlock(&kbd.q); if(waserror()){ @@ -334,53 +368,60 @@ consread(Chan *c, void *va, long count, vlong offset) error(Enonexist); while(!qcanread(lineq)) { - qread(kbdq, &kbd.line[kbd.x], 1); - ch = kbd.line[kbd.x]; - if(kbd.raw){ - qiwrite(lineq, &kbd.line[kbd.x], 1); + if(qread(kbdq, &ch, 1) == 0) continue; - } - eol = 0; - switch(ch) { - case '\b': - if(kbd.x) - kbd.x--; - break; - case 0x15: - kbd.x = 0; - break; - case '\n': - case 0x04: - eol = 1; - default: + send = 0; + if(ch == 0){ + /* flush output on rawoff -> rawon */ + if(kbd.x > 0) + send = !qcanread(kbdq); + }else if(kbd.raw){ kbd.line[kbd.x++] = ch; - break; + send = !qcanread(kbdq); + }else{ + switch(ch){ + case '\b': + if(kbd.x) + kbd.x--; + break; + case 0x15: + kbd.x = 0; + break; + case 0x04: + send = 1; + break; + case '\n': + send = 1; + default: + kbd.line[kbd.x++] = ch; + break; + } } - if(kbd.x == sizeof(kbd.line) || eol){ - if(ch == 0x04) - kbd.x--; + if(send || kbd.x == sizeof kbd.line){ qwrite(lineq, kbd.line, kbd.x); kbd.x = 0; } } - n = qread(lineq, va, count); + n = qread(lineq, va, n); qunlock(&kbd.q); poperror(); return n; + case Qscancode: if(offset == 0) - return readstr(0, va, count, gkscanid); - else - return qread(gkscanq, va, count); + return readstr(0, va, n, gkscanid); + return qread(gkscanq, va, n); + case Qkeyboard: - return qread(gkbdq, va, count); + return qread(gkbdq, va, n); + case Qkprint: rlock(&kprintq.l); if(waserror()){ runlock(&kprintq.l); nexterror(); } - n = qread(kprintq.q, va, count); + n = qread(kprintq.q, va, n); poperror(); runlock(&kprintq.l); return n; @@ -388,19 +429,18 @@ consread(Chan *c, void *va, long count, vlong offset) } static long -conswrite(Chan *c, void *va, long count, vlong offset) +conswrite(Chan *c, void *va, long n, vlong offset) { - char buf[128]; + char buf[128], *a, ch; int x; - USED(offset); - if(c->qid.type & QTDIR) error(Eperm); switch((ulong)c->qid.path) { default: error(Egreg); + case Qcons: if(canrlock(&kprintq.l)){ if(kprintq.q != nil){ @@ -408,105 +448,129 @@ conswrite(Chan *c, void *va, long count, vlong offset) runlock(&kprintq.l); nexterror(); } - qwrite(kprintq.q, va, count); + qwrite(kprintq.q, va, n); poperror(); runlock(&kprintq.l); - return count; + return n; } runlock(&kprintq.l); } - return write(1, va, count); + return write(1, va, n); + case Qsysctl: - return sysconwrite(va, count); + return sysconwrite(va, n); + case Qconsctl: - if(count >= sizeof(buf)) - count = sizeof(buf)-1; - strncpy(buf, va, count); - buf[count] = 0; - if(strncmp(buf, "rawon", 5) == 0) { - kbd.raw = 1; - return count; - } - else - if(strncmp(buf, "rawoff", 6) == 0) { - kbd.raw = 0; - return count; + if(n >= sizeof(buf)) + n = sizeof(buf)-1; + strncpy(buf, va, n); + buf[n] = 0; + for(a = buf; a;){ + if(strncmp(a, "rawon", 5) == 0){ + kbd.raw = 1; + /* clumsy hack - wake up reader */ + ch = 0; + qwrite(kbdq, &ch, 1); + } else if(strncmp(buf, "rawoff", 6) == 0){ + kbd.raw = 0; + } + if((a = strchr(a, ' ')) != nil) + a++; } - error(Ebadctl); + break; + case Qkeyboard: - for(x=0; x<count; ) { + for(x=0; x<n; ) { Rune r; x += chartorune(&r, &((char*)va)[x]); gkbdputc(gkbdq, r); } - return count; + break; + case Qnull: - return count; + break; + case Qpin: if(up->env->pgrp->pin != Nopin) error("pin already set"); - if(count >= sizeof(buf)) - count = sizeof(buf)-1; - strncpy(buf, va, count); - buf[count] = '\0'; + if(n >= sizeof(buf)) + n = sizeof(buf)-1; + strncpy(buf, va, n); + buf[n] = '\0'; up->env->pgrp->pin = atoi(buf); - return count; + break; + case Qtime: - if(count >= sizeof(buf)) - count = sizeof(buf)-1; - strncpy(buf, va, count); - buf[count] = '\0'; + if(n >= sizeof(buf)) + n = sizeof(buf)-1; + strncpy(buf, va, n); + buf[n] = '\0'; timeoffset = strtoll(buf, 0, 0)-osusectime(); - return count; - case Quser: - if(count >= sizeof(buf)) + break; + + case Qhostowner: + if(!iseve()) + error(Eperm); + if(offset != 0 || n >= sizeof(buf)) error(Ebadarg); - strncpy(buf, va, count); - buf[count] = '\0'; - if(count > 0 && buf[count-1] == '\n') - buf[--count] = '\0'; - if(count == 0) + memmove(buf, va, n); + buf[n] = '\0'; + if(n > 0 && buf[n-1] == '\n') + buf[--n] = '\0'; + if(n == 0) error(Ebadarg); - if(strcmp(up->env->user, eve) != 0) + /* renameuser(eve, buf); */ + /* renameproguser(eve, buf); */ + kstrdup(&eve, buf); + kstrdup(&up->env->user, buf); + break; + + case Quser: + if(!iseve()) error(Eperm); - setid(buf, 0); - return count; - case Qhostowner: - if(count >= sizeof(buf)) + if(offset != 0) error(Ebadarg); - strncpy(buf, va, count); - buf[count] = '\0'; - if(count > 0 && buf[count-1] == '\n') - buf[--count] = '\0'; - if(count == 0) + if(n <= 0 || n >= sizeof(buf)) error(Ebadarg); - if(strcmp(up->env->user, eve) != 0) - error(Eperm); - kstrdup(&eve, buf); - return count; + strncpy(buf, va, n); + buf[n] = '\0'; + if(n > 0 && buf[n-1] == '\n') + buf[--n] = '\0'; + if(n == 0) + error(Ebadarg); + setid(buf, 0); + break; + case Qhoststdout: - return write(1, va, count); + return write(1, va, n); + case Qhoststderr: - return write(2, va, count); + return write(2, va, n); + case Qjit: - if(count >= sizeof(buf)) - count = sizeof(buf)-1; - strncpy(buf, va, count); - buf[count] = '\0'; + if(n >= sizeof(buf)) + n = sizeof(buf)-1; + strncpy(buf, va, n); + buf[n] = '\0'; x = atoi(buf); - if (x < 0 || x > 9) + if(x < 0 || x > 9) error(Ebadarg); cflag = x; - return count; + break; + case Qsysname: - if(count >= sizeof(buf)) - count = sizeof(buf)-1; - strncpy(buf, va, count); - buf[count] = '\0'; + if(offset != 0) + error(Ebadarg); + if(n < 0 || n >= sizeof(buf)) + error(Ebadarg); + strncpy(buf, va, n); + buf[n] = '\0'; + if(buf[n-1] == '\n') + buf[n-1] = 0; kstrdup(&ossysname, buf); - return count; + break; } - return 0; + return n; } static int diff --git a/emu/port/devmem.c b/emu/port/devmem.c index 6c09aaad..78f772c6 100644 --- a/emu/port/devmem.c +++ b/emu/port/devmem.c @@ -438,7 +438,6 @@ memread(Chan *c, void *va, long count, vlong offset) free(s); return count; } - return 0; } static long diff --git a/emu/port/devprof.c b/emu/port/devprof.c index f3a768c3..86d6d962 100644 --- a/emu/port/devprof.c +++ b/emu/port/devprof.c @@ -666,8 +666,6 @@ enum{ Mialloc, }; -#ifdef HEAP_ALIGN - static void memprof(int c, void *v, ulong n) { @@ -703,7 +701,7 @@ memprof(int c, void *v, ulong n) i = p-r->base; k = (r->id<<24) | i; if(c == Mhalloc){ - h->pad = k; + h->hprof = k; j = hmsize(h)-sizeof(Heap); } else if(c == Mmalloc){ @@ -721,7 +719,7 @@ memprof(int c, void *v, ulong n) else if(c == Mifree) k = ((ulong*)v)[1]; else - k = h->pad; + k = h->hprof; if((r = getrec(k>>24)) == nil){ unlock(&profile.l); return; @@ -766,18 +764,6 @@ memprof(int c, void *v, ulong n) unlock(&profile.l); } -#else - -static void -memprof(int c, void *v, ulong n) -{ - USED(c); - USED(v); - USED(n); -} - -#endif - /* main and image memory */ static void memprofmi(int c, ulong pc, ulong v, ulong n) diff --git a/emu/port/error.h b/emu/port/error.h index b1911397..e6d61d9d 100644 --- a/emu/port/error.h +++ b/emu/port/error.h @@ -32,9 +32,6 @@ extern char Ehungup[]; /* i/o on hungup channel */ extern char Ebadctl[]; /* bad process or channel control request */ extern char Enodev[]; /* no free devices */ extern char Enoenv[]; /* no free environment resources */ -extern char Emuxshutdown[]; /* mux server shut down */ -extern char Emuxbusy[]; /* all mux channels busy */ -extern char Emuxmsg[]; /* bad mux message format or mismatch */ extern char Ethread[]; /* thread exited */ extern char Enochild[]; /* no living children */ extern char Eioload[]; /* i/o error in demand load */ diff --git a/emu/port/exportfs.c b/emu/port/exportfs.c index e88c5ad3..1feae7ae 100644 --- a/emu/port/exportfs.c +++ b/emu/port/exportfs.c @@ -610,8 +610,6 @@ exslave(void *a) notkilled(); exfreeq(q); } - print("exslave %ld shut down", up->pid); /* not reached */ - pexit("exslave shut down", 0); } static void diff --git a/emu/port/fns.h b/emu/port/fns.h index 393a5c35..effdbe33 100644 --- a/emu/port/fns.h +++ b/emu/port/fns.h @@ -118,7 +118,7 @@ void nexterror(void); void notkilled(void); int openmode(ulong); void osblock(void); -void* oscmd(char**, int, char*, int*, int*); +void* oscmd(char**, int, char*, int*); int oscmdwait(void*, char*, int); int oscmdkill(void*); void oscmdfree(void*); diff --git a/emu/port/inferno.c b/emu/port/inferno.c index 736644be..1149d623 100644 --- a/emu/port/inferno.c +++ b/emu/port/inferno.c @@ -585,6 +585,7 @@ Sys_dial(void *fp) return; f->ret->t1.dfd = mkfd(f->ret->t0); + f->ret->t0 = 0; f->ret->t1.cfd = mkfd(cfd); retstr(dir, &f->ret->t1.dir); } @@ -608,6 +609,7 @@ Sys_announce(void *fp) return; f->ret->t1.cfd = mkfd(f->ret->t0); + f->ret->t0 = 0; retstr(dir, &f->ret->t1.dir); } @@ -631,6 +633,7 @@ Sys_listen(void *fp) return; f->ret->t1.cfd = mkfd(f->ret->t0); + f->ret->t0 = 0; retstr(dir, &f->ret->t1.dir); } diff --git a/fonts/LICENCE b/fonts/LICENCE new file mode 100644 index 00000000..78c22912 --- /dev/null +++ b/fonts/LICENCE @@ -0,0 +1,73 @@ +FONT LICENCE + +This applies only to those fonts that are copyright Bigelow & Holmes. + +You MAY NOT: + +- make an ADAPTATION of files that are copyright Bigelow & Holmes found in the directory +``/font'' and its various subdirectories (``FONT SOFTWARE''). +- distribute FONT SOFTWARE except as part of a larger software distribution +incorporating the Inferno system software (and any adaptations of it YOU may make) +provided that the distribution includes minimum sub-licence terms as specified below. + +The FONT SOFTWARE includes Fonts and Typefaces that are licensed from +Bigelow & Holmes Inc ("B&H"). YOU must include the following licence +terms when distributing the Fonts or Typefaces to any sublicensee and +impose the same restrictions on them in respect of any sublicence that +they may grant. + +1. Licence and Title +This FONT LICENCE conveys a limited right to use, reproduce and +distribute the Fonts and Typefaces in accordance with the terms and +conditions in this FONT LICENCE and the Inferno Binary and Limited +Source Licence Agreement but does not convey title or any other +licences or rights which are not expressly provided relating to the +Typefaces or Fonts to YOU, sublicensees or any other end users. YOU +acknowledge and agree that B&H owns all proprietary rights including +without limitation all intellectual property rights in the Typefaces +and Fonts and derivative works. + +2. B&H Trade Mark Ownership +YOU acknowledge that B&H owns the entire right, title and interest in +the trade marks "Lucida and Bigelow & Holmes". + +3. Notices +3.1 YOU agree that all advertising, promotion, marketing and +distribution in connection with this FONT LICENCE shall acknowledge +and use the trade marks of B&H in such a way as to protect such trade +marks. 3.2 YOU may not identify the Typefaces and Fonts by any trade +mark or trade name other than "Lucida". If YOU make any reference to +any of the Typefaces or Fonts in sales literature, advertising, +manuals and documentation, on equipment, visual displays, printed +output and image carrier labels and outer containers, such references +shall include the "Lucida" trade marks together with (i) the symbol ® +and (ii) the phrase + +"Lucida is a registered trade mark of Bigelow & Holmes Inc". 3.3 YOU +shall publish notices of B&H copyright and/or design patent rights on +the Image Carrier labels and diskette, tape or cartridge containers in +which the Typefaces and Fonts are packaged separately from the +LICENSED SOFTWARE, and in the header of files containing Typefaces or +Fonts. Such notices shall be inthe following form; "Lucida and +Pellucida are registered trademarks of Bigelow & Holmes Inc. Lucida® +digital fonts copyright © 1985, 1986 by Bigelow & Holmes Inc". + +4. B&H Rights in the Typeface Designs +4.1 YOU shall produce machine readable Raster Fonts only from Fonts provided by B&H. +4.2 YOU may not modify the Fonts or Typefaces represented by the Fonts +in Style (ie. the combination of typographic design characteristics +that distinguish one typeface from another), design features or in any +other respect, nor add additional characters without the prior written +consent of B&H. +4.3 YOU may permit the LICENSED SOFTWARE to make automatic +modifications of any Typeface or Font including scaling, rotating, +condensation, extension, obliquing, reversal, tinting, shadowing, +outlining, or other transformations which LICENSED SOFTWARE can +perform automatically. + +5. Protection Against Unauthorised Reproduction +5.1 YOU shall use due care in protecting the Typeface and Font digital +data YOU received against unauthorised use or reproduction. +5.2 YOU shall notify VITA NUOVA promptly in writing of any known or +suspected unauthorised reproduction, use or distribution of the Fonts +or Typefaces by Sublicensees, end users or others. diff --git a/fonts/README.FONTS b/fonts/README.FONTS deleted file mode 100644 index 5da5d979..00000000 --- a/fonts/README.FONTS +++ /dev/null @@ -1,2 +0,0 @@ -Most of the fonts must be obtained initially from the primary Inferno -distribution, because they are distributed under licence and are not Free. diff --git a/include/interp.h b/include/interp.h index e0571de1..ab417ae5 100644 --- a/include/interp.h +++ b/include/interp.h @@ -300,12 +300,13 @@ struct Modlink Modl links[1]; }; +/* must be a multiple of 8 bytes */ struct Heap { int color; /* Allocation color */ ulong ref; Type* t; - ulong pad; /* ensure double alignment; also used for heap profiling */ + ulong hprof; /* heap profiling */ }; struct Atidle diff --git a/include/version.h b/include/version.h index fe74f0b0..6c9695ad 100644 --- a/include/version.h +++ b/include/version.h @@ -1 +1 @@ -#define VERSION "Fourth Edition (20060303)" +#define VERSION "Fourth Edition (20061219)" diff --git a/lib/games/fortunes b/lib/games/fortunes index e69de29b..9b41dac0 100644 --- a/lib/games/fortunes +++ b/lib/games/fortunes @@ -0,0 +1,8 @@ +We are all interested in the future, for that is where you and I are going to spend the rest of our lives. --Criswell, Plan 9 from Outer Space +And remember my friend, future events such as these will affect you in the future. --Criswell, Plan 9 from Outer Space +We should all be concerned about the future because we will have to spend the rest of our lives there. --Charles F Kettering +For I dipped into the future far as human eye could see. Saw the vision of the world and all the wonder that would be. --Locksley Hall, Alfred, Lord Tennyson +Excess on occasion is exhilarating. It prevents moderation from acquiring the deadening effect of a habit. -- W Somerset Maugham +The instruction at "0x77fcae88" referenced memory at "0x63610073". The memory could not be "read". +A company formed ``for carrying on an undertaking of great advantage, but nobody to know what it is.'' --Charles Mackay, ``Memoirs of Extraordinary Popular Delusions and the Madness of Crowds'' +You should be glad that bridge fell down — I was planning to build 13 more to the same design. -- Remark attributed to I K Brunel, addressing the Directors of the Great Western Railway. diff --git a/lib/games/fortunes.index b/lib/games/fortunes.index Binary files differindex e69de29b..e54e0af8 100644 --- a/lib/games/fortunes.index +++ b/lib/games/fortunes.index diff --git a/lib/proto/FreeBSD b/lib/proto/FreeBSD index 4bc67beb..8fb07d0e 100644 --- a/lib/proto/FreeBSD +++ b/lib/proto/FreeBSD @@ -1,7 +1,7 @@ FreeBSD 386 bin - emu.new 0775 inferno inf /FreeBSD/386/bin/emu + emu.new 0775 inferno inferno /FreeBSD/386/bin/emu asm iar data2c @@ -11,6 +11,7 @@ FreeBSD limbo mk + mkext ndate inm yacc diff --git a/lib/proto/Hp b/lib/proto/Hp index 4b328a3c..27e6560a 100644 --- a/lib/proto/Hp +++ b/lib/proto/Hp @@ -1,7 +1,7 @@ Hp s800 bin - emu.new 0775 inferno inf /Linux/386/bin/emu + emu.new 0775 inferno inferno /Linux/386/bin/emu 0a 0c 0l diff --git a/lib/proto/Irix b/lib/proto/Irix index 074c3b08..4f991c48 100644 --- a/lib/proto/Irix +++ b/lib/proto/Irix @@ -1,7 +1,7 @@ Irix mips bin - emu.new 0775 inferno inf /Irix/mips/bin/emu + emu.new 0775 inferno inferno /Irix/mips/bin/emu 0a 0c 0l diff --git a/lib/proto/Linux b/lib/proto/Linux index a6ac4b8b..c2344974 100644 --- a/lib/proto/Linux +++ b/lib/proto/Linux @@ -1,7 +1,7 @@ Linux 386 bin - emu.new 0775 inferno inf /Linux/386/bin/emu + emu.new 0775 inferno inferno /Linux/386/bin/emu asm iar data2c @@ -11,8 +11,14 @@ Linux limbo mk + mkext ndate yacc include + lib + arm + bin + include + + + lib diff --git a/lib/proto/MacOSX b/lib/proto/MacOSX index 920deb23..5162298d 100644 --- a/lib/proto/MacOSX +++ b/lib/proto/MacOSX @@ -2,7 +2,7 @@ MacOSX README power bin - emu.new 0775 inferno inf /MacOSX/power/bin/emu + emu.new 0775 inferno inferno /MacOSX/power/bin/emu asm iar data2c @@ -12,6 +12,7 @@ MacOSX limbo mk + mkext ms2 ndate inm @@ -22,3 +23,25 @@ MacOSX + lib tcshrc + 386 + bin + emu.new 0775 inferno inferno /MacOSX/386/bin/emu + asm + iar + data2c + data2s + ksize + kstrip + + limbo + mk + mkext + ms2 + ndate + inm + sqz + srclist + yacc + include + + + lib diff --git a/lib/proto/Nt b/lib/proto/Nt index 03097920..03a7b101 100644 --- a/lib/proto/Nt +++ b/lib/proto/Nt @@ -1,7 +1,7 @@ Nt 386 bin - emu.new 0775 inferno inf /Nt/386/bin/emu.exe + emu.new 0775 inferno inferno /Nt/386/bin/emu.exe ie.exe 0a.exe 0c.exe diff --git a/lib/proto/Plan9 b/lib/proto/Plan9 index fb421bb9..7fd8ae74 100644 --- a/lib/proto/Plan9 +++ b/lib/proto/Plan9 @@ -1,7 +1,7 @@ Plan9 386 bin - emu.new 775 inferno inf /Plan9/386/bin/emu + emu.new 775 inferno inferno /Plan9/386/bin/emu 5a 5c 5l diff --git a/lib/proto/Solaris b/lib/proto/Solaris index 3d7a14ed..24d0f8ba 100644 --- a/lib/proto/Solaris +++ b/lib/proto/Solaris @@ -1,7 +1,7 @@ Solaris sparc bin - emu.new 0775 inferno inf /Solaris/sparc/bin/emu + emu.new 0775 inferno inferno /Solaris/sparc/bin/emu 0a 0c 0l diff --git a/lib/proto/inferno b/lib/proto/inferno index e11dfd0b..2dff9d00 100644 --- a/lib/proto/inferno +++ b/lib/proto/inferno @@ -339,6 +339,7 @@ appl 9export.b 9srvfs.b B.b + ar.b archfs.b auplay.b auth @@ -390,6 +391,7 @@ appl cal.b cat.b cd.b + cddb.b chgrp.b chmod.b cleanname.b @@ -593,10 +595,10 @@ appl lockfs.b logfile.b look.b - lookman.b ls.b lstar.b man.b + man2html.b man2txt.b manufacture.b mash @@ -708,7 +710,6 @@ appl test.b tk.b sha1sum.b - shutdown.b sleep.b sort.b spki @@ -894,6 +895,7 @@ appl ssl3.b sslsession.b x509.b + csv.b daytime.b db.b dbm.b @@ -993,6 +995,7 @@ appl regex.b regexutils.b registries.b + rfc822.b riff.b secstore.b scoretable.b @@ -1062,6 +1065,7 @@ appl w3c css.b mkfile + uris.b xpointers.b wait.b watchvars.b @@ -1387,6 +1391,7 @@ dis 9export.dis 9srvfs.dis 9win.dis + ar.dis archfs.dis B.dis acme @@ -1408,6 +1413,7 @@ dis cal.dis cat.dis cd.dis + cddb.dis charon + charon.dis @@ -1497,6 +1503,7 @@ dis crc.dis crypt + + csv.dis daytime.dis db.dis dbm.dis @@ -1578,6 +1585,7 @@ dis regex.dis regexutils.dis registries.dis + rfc822.dis riff.dis secstore.dis scoretable.dis @@ -1647,10 +1655,11 @@ dis lockfs.dis logfile.dis look.dis - lookman.dis + lookman ls.dis lstar.dis man.dis + man2html.dis man2txt.dis mash.dis math @@ -1708,7 +1717,7 @@ dis + sh.dis sha1sum.dis - shutdown.dis + shutdown sleep.dis sort.dis spki @@ -1881,6 +1890,9 @@ lib lego * mashinit + mimetype + mk + * ndb common dns 664 inferno inferno /lib/ndb/dns.dist @@ -2050,6 +2062,7 @@ module convcs.m crc.m css.m + csv.m cvsimages.m daytime.m db.m @@ -2094,6 +2107,7 @@ module srvbrowse.m hash.m html.m + ida.m imagefile.m inflate.m ip.m @@ -2135,6 +2149,7 @@ module regex.m regexutils.m registries.m + rfc822.m riff.m runt.m scoretable.m @@ -2173,6 +2188,7 @@ module translate.m ubfa.m unbundle.m + uris.m url.m usb.m venti.m diff --git a/lib/proto/utils b/lib/proto/utils index 380464a0..9decb6b6 100644 --- a/lib/proto/utils +++ b/lib/proto/utils @@ -39,7 +39,9 @@ lib9 getcallerpc-Hp-s800.s getcallerpc-Irix-mips.s getcallerpc-Linux-386.S + getcallerpc-Linux-arm.S getcallerpc-MacOSX-power.s + getcallerpc-MacOSX-386.s getcallerpc-Solaris-386.s getcallerpc-Solaris-sparc.s getcallerpc-Unixware-386.s @@ -399,6 +401,9 @@ utils cp cp.c mkfile + cvbit + cvbit.c + mkfile data2c data2c.c mkfile diff --git a/lib9/getcallerpc-Linux-386.S b/lib9/getcallerpc-Linux-386.S index 71b58781..ae817758 100644 --- a/lib9/getcallerpc-Linux-386.S +++ b/lib9/getcallerpc-Linux-386.S @@ -1,5 +1,4 @@ .file "getcallerpc-Linux-386.S" - .text .type getcallerpc,@function .global getcallerpc getcallerpc: diff --git a/lib9/utfecpy.c b/lib9/utfecpy.c index 8ccb841c..3a5e6b4c 100644 --- a/lib9/utfecpy.c +++ b/lib9/utfecpy.c @@ -9,7 +9,7 @@ utfecpy(char *to, char *e, char *from) return to; end = memccpy(to, from, '\0', e - to); if(end == nil){ - end = e-1; + end = e; while(end>to && (*--end&0xC0)==0x80) ; *end = '\0'; diff --git a/libinterp/ipint.c b/libinterp/ipint.c index 61c577fa..b7cb8af2 100644 --- a/libinterp/ipint.c +++ b/libinterp/ipint.c @@ -490,6 +490,163 @@ IPint_shr(void *fp) *f->ret = newIPint(ret); } +static void +mpand(mpint *b, mpint *m, mpint *res) +{ + int i; + + res->sign = b->sign; + if(b->top == 0 || m->top == 0){ + res->top = 0; + return; + } + mpbits(res, b->top*Dbits); + res->top = b->top; + for(i = b->top; --i >= 0;){ + if(i < m->top) + res->p[i] = b->p[i] & m->p[i]; + else + res->p[i] = 0; + } + mpnorm(res); +} + +static void +mpor(mpint *b1, mpint *b2, mpint *res) +{ + mpint *t; + int i; + + if(b2->top > b1->top){ + t = b1; + b1 = b2; + b2 = t; + } + if(b1->top == 0){ + mpassign(b2, res); + return; + } + if(b2->top == 0){ + mpassign(b1, res); + return; + } + mpassign(b1, res); + for(i = b2->top; --i >= 0;) + res->p[i] |= b2->p[i]; + mpnorm(res); +} + +static void +mpxor(mpint *b1, mpint *b2, mpint *res) +{ + mpint *t; + int i; + + if(b2->top > b1->top){ + t = b1; + b1 = b2; + b2 = t; + } + if(b1->top == 0){ + mpassign(b2, res); + return; + } + if(b2->top == 0){ + mpassign(b1, res); + return; + } + mpassign(b1, res); + for(i = b2->top; --i >= 0;) + res->p[i] ^= b2->p[i]; + mpnorm(res); +} + +static void +mpnot(mpint *b1, mpint *res) +{ + int i; + + mpbits(res, Dbits*b1->top); + res->sign = 1; + res->top = b1->top; + for(i = res->top; --i >= 0;) + res->p[i] = ~b1->p[i]; + mpnorm(res); +} + +/* bits */ +void +IPint_and(void *fp) +{ + F_IPint_and *f; + BigInt ret; + + f = fp; + destroy(*f->ret); + *f->ret = H; + + if(f->i1 == H || f->i2 == H) + error(exNilref); + ret = mpnew(0); + if(ret != nil) + mpand(MP(f->i1), MP(f->i2), ret); + *f->ret = newIPint(ret); +} + +void +IPint_ori(void *fp) +{ + F_IPint_ori *f; + BigInt ret; + + f = fp; + destroy(*f->ret); + *f->ret = H; + + if(f->i1 == H || f->i2 == H) + error(exNilref); + ret = mpnew(0); + if(ret != nil) + mpor(MP(f->i1), MP(f->i2), ret); + *f->ret = newIPint(ret); +} + +void +IPint_xor(void *fp) +{ + F_IPint_xor *f; + BigInt ret; + + f = fp; + destroy(*f->ret); + *f->ret = H; + + if(f->i1 == H || f->i2 == H) + error(exNilref); + ret = mpnew(0); + if(ret != nil) + mpxor(MP(f->i1), MP(f->i2), ret); + *f->ret = newIPint(ret); +} + +void +IPint_not(void *fp) +{ + F_IPint_not *f; + BigInt ret; + + f = fp; + destroy(*f->ret); + *f->ret = H; + + if(f->i1 == H) + error(exNilref); + ret = mpnew(0); + if(ret != nil) + mpnot(MP(f->i1), ret); + *f->ret = newIPint(ret); +} + /* * return a random number between a and b */ diff --git a/libinterp/keyring.h b/libinterp/keyring.h index f62ac800..0bea5171 100644 --- a/libinterp/keyring.h +++ b/libinterp/keyring.h @@ -3,6 +3,7 @@ Runtab Keyringmodtab[]={ "IPint.add",0xa47c1b24,IPint_add,40,2,{0x0,0xc0,}, "aescbc",0xac616ba,Keyring_aescbc,48,2,{0x0,0xc0,}, "aessetup",0x44452583,Keyring_aessetup,40,2,{0x0,0xc0,}, + "IPint.and",0xa47c1b24,IPint_and,40,2,{0x0,0xc0,}, "auth",0x9c576bb,Keyring_auth,48,2,{0x0,0xc0,}, "IPint.b64toip",0xa803ee03,IPint_b64toip,40,2,{0x0,0x80,}, "IPint.bebytestoip",0x6fa90725,IPint_bebytestoip,40,2,{0x0,0x80,}, @@ -41,6 +42,8 @@ Runtab Keyringmodtab[]={ "md5",0x7656377,Keyring_md5,48,2,{0x0,0xb0,}, "IPint.mul",0xa47c1b24,IPint_mul,40,2,{0x0,0xc0,}, "IPint.neg",0x491fbd11,IPint_neg,40,2,{0x0,0x80,}, + "IPint.not",0x491fbd11,IPint_not,40,2,{0x0,0x80,}, + "IPint.ori",0xa47c1b24,IPint_ori,40,2,{0x0,0xc0,}, "pktoattr",0xfb4e61ba,Keyring_pktoattr,40,2,{0x0,0x80,}, "pktostr",0xfb4e61ba,Keyring_pktostr,40,2,{0x0,0x80,}, "putbytearray",0x7cfef557,Keyring_putbytearray,48,2,{0x0,0xc0,}, @@ -70,6 +73,7 @@ Runtab Keyringmodtab[]={ "verify",0x8b5b9f76,Keyring_verify,48,2,{0x0,0xe0,}, "verifym",0x8b5b9f76,Keyring_verifym,48,2,{0x0,0xe0,}, "writeauthinfo",0x5ba03002,Keyring_writeauthinfo,40,2,{0x0,0xc0,}, + "IPint.xor",0xa47c1b24,IPint_xor,40,2,{0x0,0xc0,}, 0 }; -#define Keyringmodlen 70 +#define Keyringmodlen 74 diff --git a/libinterp/runt.h b/libinterp/runt.h index f7577f6a..e6e30924 100644 --- a/libinterp/runt.h +++ b/libinterp/runt.h @@ -3076,6 +3076,16 @@ struct F_Keyring_aessetup Array* key; Array* ivec; }; +void IPint_and(void*); +typedef struct F_IPint_and F_IPint_and; +struct F_IPint_and +{ + WORD regs[NREG-1]; + Keyring_IPint** ret; + uchar temps[12]; + Keyring_IPint* i1; + Keyring_IPint* i2; +}; void Keyring_auth(void*); typedef struct F_Keyring_auth F_Keyring_auth; struct F_Keyring_auth @@ -3459,6 +3469,25 @@ struct F_IPint_neg uchar temps[12]; Keyring_IPint* i; }; +void IPint_not(void*); +typedef struct F_IPint_not F_IPint_not; +struct F_IPint_not +{ + WORD regs[NREG-1]; + Keyring_IPint** ret; + uchar temps[12]; + Keyring_IPint* i1; +}; +void IPint_ori(void*); +typedef struct F_IPint_ori F_IPint_ori; +struct F_IPint_ori +{ + WORD regs[NREG-1]; + Keyring_IPint** ret; + uchar temps[12]; + Keyring_IPint* i1; + Keyring_IPint* i2; +}; void Keyring_pktoattr(void*); typedef struct F_Keyring_pktoattr F_Keyring_pktoattr; struct F_Keyring_pktoattr @@ -3749,6 +3778,16 @@ struct F_Keyring_writeauthinfo String* filename; Keyring_Authinfo* info; }; +void IPint_xor(void*); +typedef struct F_IPint_xor F_IPint_xor; +struct F_IPint_xor +{ + WORD regs[NREG-1]; + Keyring_IPint** ret; + uchar temps[12]; + Keyring_IPint* i1; + Keyring_IPint* i2; +}; #define Keyring_PATH "$Keyring" #define Keyring_Encrypt 0 #define Keyring_Decrypt 1 diff --git a/libkern/utfecpy.c b/libkern/utfecpy.c index 8ccb841c..3a5e6b4c 100644 --- a/libkern/utfecpy.c +++ b/libkern/utfecpy.c @@ -9,7 +9,7 @@ utfecpy(char *to, char *e, char *from) return to; end = memccpy(to, from, '\0', e - to); if(end == nil){ - end = e-1; + end = e; while(end>to && (*--end&0xC0)==0x80) ; *end = '\0'; diff --git a/liblogfs/NOTICE b/liblogfs/NOTICE index 3fbc79b8..022b8246 100644 --- a/liblogfs/NOTICE +++ b/liblogfs/NOTICE @@ -1,25 +1,5 @@ -This copyright NOTICE applies to all files in this directory and -subdirectories, unless another copyright notice appears in a given -file or subdirectory. If you take substantial code from this software to use in -other programs, you must somehow include with it an appropriate -copyright notice that includes the copyright notice and the other -notices below. It is fine (and often tidier) to do that in a separate -file such as NOTICE, LICENCE or COPYING. +Developed 2002, 2003 by Vita Nuova Holdings Limited. +Copyright © 2002, 2003 Vita Nuova Holdings Limited. -Copyright © 1995-1999 Lucent Technologies Inc. -Portions Copyright © 1997-2000 Vita Nuova Limited -Portions Copyright © 2000-2005 Vita Nuova Holdings Limited - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +The source and binary code for liblogfs may be used only as part of Inferno, +unless otherwise agreed with Vita Nuova. diff --git a/libmath/FPcontrol-MacOSX.c b/libmath/FPcontrol-MacOSX.c index e36a5e5b..9647ac18 100644 --- a/libmath/FPcontrol-MacOSX.c +++ b/libmath/FPcontrol-MacOSX.c @@ -2,21 +2,7 @@ #include "fpuctl.h" #include "mathi.h" -#include<stdio.h> - -void PPC_PrintFPSCR() -{ - ppc_fp_scr_t fpscr; - - fpscr = get_fp_scr(); - fprintf(stderr, "FPSCR = 0x%08x : 0x%08x\n", - ((unsigned int *)&fpscr)[0], - ((unsigned int *)&fpscr)[1]); - fprintf(stderr, "FPSCR[ve] = %d\n", fpscr.ve); - fprintf(stderr, "FPSCR[ze] = %d\n", fpscr.ze); - fprintf(stderr, "FPSCR[ue] = %d\n", fpscr.ue); - fprintf(stderr, "FPSCR[oe] = %d\n", fpscr.oe); -} +#include <stdio.h> void FPinit(void) diff --git a/libmemdraw/draw.c b/libmemdraw/draw.c index f70d4537..8fe88bce 100644 --- a/libmemdraw/draw.c +++ b/libmemdraw/draw.c @@ -2390,7 +2390,7 @@ DBG print("bsh %d\n", bsh); bx = -bsh-1; ex = -bsh-1-dx; - SET(bits); + bits = 0; v = par->sdval; /* make little endian */ diff --git a/libmp/port/mptouv.c b/libmp/port/mptouv.c index 1efdff95..cc04b029 100644 --- a/libmp/port/mptouv.c +++ b/libmp/port/mptouv.c @@ -43,7 +43,7 @@ mptouv(mpint *b) v = 0; for(s = 0; s < b->top; s++) - v |= b->p[s]<<(s*sizeof(mpdigit)*8); + v |= (uvlong)b->p[s]<<(s*sizeof(mpdigit)*8); return v; } diff --git a/libtk/textu.c b/libtk/textu.c index 854dc8d5..28642130 100644 --- a/libtk/textu.c +++ b/libtk/textu.c @@ -618,7 +618,7 @@ tktbbox(Tk *tk, TkTindex *ix) r.min.x = 0; r.min.y = 0; r.max.x = 0; - r.max.x = 0; + r.max.y = 0; return r; } diff --git a/libtk/textw.c b/libtk/textw.c index bf560d9f..f17c9edb 100644 --- a/libtk/textw.c +++ b/libtk/textw.c @@ -113,10 +113,10 @@ static TkEbind tktbinds[] = { {TkKey|CNTL('p'), "%W tkTextSetCursor {insert-1l}"}, {TkKey|Up, "%W tkTextSetCursor {insert-1l}"}, {TkKey|CNTL('u'), "%W tkTextDelIns -l"}, - {TkKey|CNTL('v'), "%W yview scroll 1 page"}, - {TkKey|Pgdown, "%W yview scroll 1 page"}, + {TkKey|CNTL('v'), "%W yview scroll 0.75 page"}, + {TkKey|Pgdown, "%W yview scroll 0.75 page"}, {TkKey|CNTL('w'), "%W tkTextDelIns -w"}, - {TkKey|Pgup, "%W yview scroll -1 page"}, + {TkKey|Pgup, "%W yview scroll -0.75 page"}, {TkFocusout, "%W tkTextCursor delete"}, {TkKey|APP|'\t', ""}, {TkKey|BackTab, ""}, @@ -1799,8 +1799,9 @@ tktview(Tk *tk, char *arg, char **val, int nl, int *posn, int max, int orient) } else if(strcmp(buf, "scroll") == 0) { - arg = tkword(tk->env->top, arg, buf, buf+sizeof(buf), nil); - amount = atoi(buf); + e = tkfracword(tk->env->top, &arg, &amount, nil); + if(e != nil) + return e; arg = tkskip(arg, " \t"); if(*arg == 'p') /* Pages */ amount *= nl; @@ -1811,6 +1812,7 @@ tktview(Tk *tk, char *arg, char **val, int nl, int *posn, int max, int orient) } else amount *= tk->env->wzero; + amount = TKF2I(amount); n = *posn + amount; if(n < 0) n = 0; diff --git a/libtk/tindx.c b/libtk/tindx.c index 8eeffc69..dd0807bf 100644 --- a/libtk/tindx.c +++ b/libtk/tindx.c @@ -517,7 +517,8 @@ tktindcompare(TkText *tkt, TkTindex *i1, int op, TkTindex *i2) ans = !eq && tktindbefore(i2, i1); break; default: - SET(ans); + ans = 0; /* not reached */ + break; }; return ans; diff --git a/libtk/utils.c b/libtk/utils.c index 4e86e40c..635bef9a 100644 --- a/libtk/utils.c +++ b/libtk/utils.c @@ -310,6 +310,7 @@ tkrgbashade(ulong rgba, int shade) return rgba; tkrgbavals(rgba, &R, &G, &B, &A); + h = s = v = 0; rgb2hsv(R, G, B, &h, &s, &v); if (v < MINDELTA) { diff --git a/libtk/windw.c b/libtk/windw.c index 4c9e608c..6f9fd78d 100644 --- a/libtk/windw.c +++ b/libtk/windw.c @@ -137,6 +137,7 @@ tkinwindow(Tk *tk, Point p, int descend) if (descend && tkmethod[tk->type]->inwindow != nil) f = tkmethod[tk->type]->inwindow(tk, &p); else { + q = p; for (f = tk->slave; f; f = f->next) { q.x = p.x - (f->act.x + f->borderwidth); q.y = p.y - (f->act.y + f->borderwidth); diff --git a/limbo/com.c b/limbo/com.c index d10f3775..1bc070a4 100644 --- a/limbo/com.c +++ b/limbo/com.c @@ -1211,7 +1211,7 @@ rewritecomm(Node *n, Node *comm, Node *tmp, Node *slot) } } if(n->right == comm && n->op == Oas && comm->op == Orcv - && sumark(n->left)->addable < Rcant) + && sumark(n->left)->addable < Rcant && (n->left->op != Oname || n->left->decl != nildecl)) adr = n->left; if(adr != nil){ p = genrawop(&comm->left->src, ILEA, adr, nil, slot); diff --git a/limbo/decls.c b/limbo/decls.c index 4edab461..222a1301 100644 --- a/limbo/decls.c +++ b/limbo/decls.c @@ -933,7 +933,7 @@ declconv(Fmt *f) d = va_arg(f->args, Decl*); if(d->sym == nil) - s = "<???>"; + s = "<nil>"; else s = d->sym->name; seprint(buf, buf+sizeof(buf), "%s %s", storename[d->store], s); diff --git a/limbo/ecom.c b/limbo/ecom.c index e19b51c0..2dfa2f68 100644 --- a/limbo/ecom.c +++ b/limbo/ecom.c @@ -657,7 +657,7 @@ sumark(Node *n) if(n->flags & FNPTR){ if(n->flags == FNPTR2) n->addable = Roff; - else if(n->flags == FNPTR2|FNPTRN) + else if(n->flags == (FNPTR2|FNPTRN)) n->addable = Rnoff; } else @@ -1793,7 +1793,7 @@ arraycom(Node *a, Node *elems) { Node tindex, fake, tmp, ri, *e, *n, *q, *body, *wild; Inst *top, *out; - Case *c; + /* Case *c; */ if(debug['A']) print("arraycom: %n %n\n", a, elems); diff --git a/limbo/lex.c b/limbo/lex.c index bbd6cb69..749f2a7a 100644 --- a/limbo/lex.c +++ b/limbo/lex.c @@ -61,6 +61,7 @@ static Keywd keywords[] = "continue", Lcont, "cyclic", Lcyclic, "do", Ldo, + "dynamic", Ldynamic, "else", Lelse, "exception", Lexcept, "exit", Lexit, diff --git a/limbo/limbo.y b/limbo/limbo.y index 7098cd5d..8ccea1ef 100644 --- a/limbo/limbo.y +++ b/limbo/limbo.y @@ -68,6 +68,7 @@ Ldo Lwhile Lfor Lbreak Lalt Lcase Lpick Lcont Lreturn Lexit Lspawn Lraise Lfix + Ldynamic %% prog : Limplement ids ';' { diff --git a/limbo/optim.c b/limbo/optim.c index a3ccdec3..c74f1432 100644 --- a/limbo/optim.c +++ b/limbo/optim.c @@ -699,7 +699,7 @@ static char* decname(Decl *d) { if(d->sym == nil) - return "<??>"; + return "<nil>"; return d->sym->name; } diff --git a/limbo/sbl.c b/limbo/sbl.c index fff80392..0a0bf52c 100644 --- a/limbo/sbl.c +++ b/limbo/sbl.c @@ -163,6 +163,7 @@ sblinst(Inst *inst, long ninst) sblblocks = allocmem(nblocks * sizeof *sblblocks); for(i = 0; i < nblocks; i++) sblblocks[i] = -1; + src = nosrc; for(in = inst; in != nil; in = in->next){ if(in->op == INOOP) continue; diff --git a/limbo/typecheck.c b/limbo/typecheck.c index 827aa1e1..0fcfbf4b 100644 --- a/limbo/typecheck.c +++ b/limbo/typecheck.c @@ -2406,7 +2406,7 @@ argcompat(Node *n, Decl *f, Node *a) /* * fn is Odot(adt, methid) * pass adt implicitly if needed - * if not, any side effect of adt will be ingored + * if not, any side effect of adt will be ignored */ Node* passimplicit(Node *fn, Node *args) @@ -2415,12 +2415,12 @@ passimplicit(Node *fn, Node *args) Type *t; t = fn->ty; + n = fn->left; if(t->ids == nil || !t->ids->implicit){ - if(hasside(fn->left, 1)) - nwarn(fn, "result of expression %V ignored", fn->left); + if(!isfnrefty(t) && hasside(n, 1)) + nwarn(fn, "result of expression %V ignored", n); return args; } - n = fn->left; if(n->op == Oname && n->decl->store == Dtype){ nerror(n, "%V is a type and cannot be a self argument", n); n = mkn(Onothing, nil, nil); diff --git a/limbo/types.c b/limbo/types.c index 449b53d7..04115207 100644 --- a/limbo/types.c +++ b/limbo/types.c @@ -4403,10 +4403,10 @@ ispow2(double x) } static int -round(double x, int n, int *m) +fround(double x, int n, int *m) { if(n != 31) - fatal("not 31 in round"); + fatal("not 31 in fround"); return nf(x, m); } @@ -4418,7 +4418,7 @@ fixmul2(double sx, double sy, double sr, int *rp, int *ra) alpha = (sx*sy)/sr; n = 31; - k = round(1/alpha, n, &a); + k = fround(1/alpha, n, &a); *rp = 1-k; *ra = 0; return IMULX; @@ -4432,7 +4432,7 @@ fixdiv2(double sx, double sy, double sr, int *rp, int *ra) beta = sx/(sy*sr); n = 31; - k = round(beta, n, &b); + k = fround(beta, n, &b); *rp = k-1; *ra = 0; return IDIVX; @@ -4449,7 +4449,7 @@ fixmul(double sx, double sy, double sr, int *rp, int *ra) if(ispow2(alpha)) return fixmul2(sx, sy, sr, rp, ra); n = 31; - k = round(1/alpha, n, &a); + k = fround(1/alpha, n, &a); m = n-k; if(m < -n-1) return IMOVW; /* result is zero whatever the values */ @@ -4480,7 +4480,7 @@ fixdiv(double sx, double sy, double sr, int *rp, int *ra) if(ispow2(beta)) return fixdiv2(sx, sy, sr, rp, ra); n = 31; - k = round(beta, n, &b); + k = fround(beta, n, &b); m = k-n; if(m <= -2*n) return IMOVW; /* result is zero whatever the values */ diff --git a/man/1/INDEX b/man/1/INDEX index 3c7c3d90..58815344 100644 --- a/man/1/INDEX +++ b/man/1/INDEX @@ -10,6 +10,7 @@ alphabet-grid alphabet-grid grid alphabet-grid alphabet-main alphabet-main main alphabet-main +ar ar asm asm disdump asm auhdr auplay @@ -103,6 +104,7 @@ look look ls ls lookman man man man +man2html man man2txt man wm/man man mash mash diff --git a/man/1/ar b/man/1/ar new file mode 100644 index 00000000..fcd68f98 --- /dev/null +++ b/man/1/ar @@ -0,0 +1,163 @@ +.TH AR 1 +.SH NAME +ar \- archive maintainer +.SH SYNOPSIS +.B ar +.I key +[ +.I posname +] +.I afile +[ +.I file ... +] +.SH DESCRIPTION +.I Ar +maintains groups of files +combined into a single archive file, +.IR afile . +The main use of +.I ar +is to produce and manipulate UNIX archive files, for instance to create +program packages for Debian Linux. +Note that only +.IR iar (10.1) +can manage archives used as object file libraries by the Inferno and Plan 9 loaders. +.PP +.I Key +is one character from the set +.BR drqtpmx , +optionally concatenated with +one or more of +.BR vuaibclo . +The +.I files +are constituents of the archive +.IR afile . +The meanings of the +.I key +characters are: +.TP +.B d +Delete +.I files +from the archive file. +.TP +.B r +Replace +.I files +in the archive file, or add them if missing. +Optional modifiers are +.RS +.PD0 +.TP +.B u +Replace only files with +modified dates later than that of +the archive. +.TP +.B a +Place new files after +.I posname +in the archive rather than at the end. +.TP +.BR b " or " i +Place new files before +.I posname +in the archive. +.RE +.PD +.TP +.B q +Quick. Append +.I files +to the end of the archive without checking for duplicates. +Avoids quadratic behavior in +.LR "for (i in *.v) ar r lib.a $i" . +.TP +.B t +List a table of contents of the archive. +If names are given, only those files are listed. +.TP +.B p +Print the named files in the archive. +.TP +.B m +Move the named files to the end or elsewhere, +specified as with +.LR r . +.TP +.B o +Preserve the access and modification times of files +extracted with the +.B x +command. +.TP +.B x +Extract the named files. +If no names are given, all files in the archive are +extracted. +In neither case does +.B x +alter the archive file. +.TP +.B v +Verbose. +Give a file-by-file +description of the making of a +new archive file from the old archive and the constituent files. +With +.BR p , +precede each file with a name. +With +.BR t , +give a long listing of all information about the files, +somewhat like a listing by +.IR ls (1), +showing +.br +.ns +.IP +.B + mode uid/gid size date name +.TP +.B c +Create. +Normally +.I ar +will create a new archive when +.I afile +does not exist, and give a warning. +Option +.B c +discards any old contents and suppresses the warning. +.SH EXAMPLE +.TP +.L +ar cr arch.a manifest *.tar.gz +Replace the contents of +.L arch.a +with the +.B manifest +file and all the +.IR gzip (1)'d +.I tar +files in the current directory. +.SH FILES +.TF /tmp/art.*.* +.TP +.B /tmp/art.*.* +temporaries +.SH SOURCE +.B /appl/cmd/ar.b +.SH "SEE ALSO" +.IR 2l (10.1), +.IR iar (10.1), +.IR ar (10.6) +.SH BUGS +If the same file is mentioned twice in an argument list, +it may be put in the archive twice. +.br +The file format used by this command is taken from UNIX, and +makes some invalid assumptions, +for instance that user IDs are numeric. @@ -1,6 +1,6 @@ .TH MAN 1 .SH NAME -man, wm/man, man2txt, lookman \- +man, wm/man, man2html, man2txt, lookman \- print or find manual pages .SH SYNOPSIS .B man @@ -21,6 +21,12 @@ print or find manual pages .B wm/man -f .I file ... .br +.B man2html +.I file +[ +.I section +] +.br .B man2txt [ .B -p @@ -31,6 +37,9 @@ print or find manual pages ] .br .B lookman +[ +.B -f +] .I keyword ... .SH DESCRIPTION Both @@ -72,9 +81,20 @@ some detail is lost in conversion to plain text. displays the pages in a graphical Wm window, providing a more faithful reproduction of the intended layout. .PP +.I Man2html +converts +.B "troff -man" +macro markup to an approximation in HTML on standard output. +Only one file is processed at a time. +It is assumed the input +.I file +is a manual page, in the given +.I section +(default: 1). +.PP .I Man2txt converts -.I "troff -man" +.B "troff -man" macro markup to plain text. Each file is processed separately. @@ -87,10 +107,27 @@ option to specifies the page width in characters. .PP .I Lookman -prints the file names of manual pages, from any section, that +finds the manual pages, in any section, that contain all of the .I keywords -given as arguments. +given as arguments, and prints +.I man +commands and manual references for them, one per line. +In a +.IR wm-sh (1) +window, +any of the +.I man +commands can be selected with mouse button 2 and +sent +as a command; a manual reference can simply be +.IR plumb (1)'d +using mouse button 3. +The +.B -f +option causes +.I lookman +just to list the file names. .SH FILES .TF /man/1/INDEX .TP @@ -118,7 +155,9 @@ index. .br .B /appl/cmd/man2txt.b .br -.B /appl/cmd/lookman.b +.B /dis/lookman +.IR sh (1) +script .br .B /appl/lib/parseman.b .SH "SEE ALSO" @@ -6,6 +6,8 @@ os \- interface to host OS commands (hosted Inferno only) .br .B os [ +.B -b +] [ .B -m .I mountpoint ] [ @@ -43,7 +45,10 @@ option causes the command to run in directory an error results and the command will not run if .I dir does not exist or is inaccessible. -The standard output and standard error of the command are merged on the standard output. +The standard output and standard error of the command appear on the standard output +and standard error streams of the +.I os +command itself. .I Os copies the standard input to the remote command's standard input; redirect .IR os 's @@ -56,6 +61,17 @@ terminates when does, and its exit status reflects the status of .I cmd (if available). +.PP +If the +.I os +command is killed or exits (eg, for lack of input and output), +the host's own process control operations are used to (attempt to) kill +.IR cmd , +if it is still running. +The +.B -b +(background) option suppresses that behaviour. +.PP The .B -n option causes @@ -588,6 +588,18 @@ for the module. If a load fails, a .B bad module exception is raised. +The environment variable +.B $autoload +can be set to a list of Shell modules that +each instance of +.I sh +should load automatically during its initialisation. +(More precisely, the modules are loaded +when a new +.B Sh->Context +is created: see +.IR sh (2) +for details.) .HP .BI unload " path..." .br diff --git a/man/1/sh-expr b/man/1/sh-expr index b640e339..976e6c04 100644 --- a/man/1/sh-expr +++ b/man/1/sh-expr @@ -18,23 +18,26 @@ expr, ntest \- shell module for simple arithmetic. .I num .br .SH DESCRIPTION -.B Expr +.I Expr is a loadable module for .IR sh (1) that provides support for simple integer arithmetic. It provides one command, -.BR ntest , +.IR ntest , which performs a simple boolean test on its integer argument, and the substitution operator -.BR expr , +.IR expr , which takes an expression in Reverse Polish notation, and yields its result. -.B Ntest +.PP +.I Ntest returns true if its argument .I num -is non-zero. -.B Expr +is non-zero, +and false otherwise. +.PP +.I Expr evaluates each .I arg in turn; if it is an integer it gets pushed onto @@ -50,7 +53,7 @@ yields 1, not -1. Alternative names are given for some operators; this is to avoid the necessity of quoting operators that contain -.I sh +.IR sh (1) metacharacters. All operations use 64-bit signed integers; integers are given in the same form acceptable to Limbo. The relational operators yield either @@ -59,10 +62,10 @@ to Limbo. The relational operators yield either option is given, .I radix specifies an output base for numbers yielded by -.BR expr . +.IR expr . Numbers are printed in a form suitable for re-interpretation by -.BR expr . +.IR expr . .PP When all its arguments have been evaluated, .B expr diff --git a/man/1/sh-std b/man/1/sh-std index efb650cc..87ed676b 100644 --- a/man/1/sh-std +++ b/man/1/sh-std @@ -76,13 +76,6 @@ std, if, while, ~, no, !, apply, getlines, status, pctl, fn, and, or, raise, res .B subfn .I name command .br -.B if -[ -.I condition action -]... [ -.I elseaction -] -.br .B while .I condition command .br diff --git a/man/1/sh-tk b/man/1/sh-tk index 8777dac7..e45bd9a6 100644 --- a/man/1/sh-tk +++ b/man/1/sh-tk @@ -41,6 +41,13 @@ tk, chan, send, recv, alt \- loadable tk module for sh. ] .B } .br +.B ${tk onscreen +.I winid +[ +.I how +] +.B } +.br .B ${tk .I winid tkcmd .B } @@ -128,6 +135,22 @@ the window manager arrive on this channel, and should be responded to appropriately using .BR "tk winctl" . .TP +.B tk onscreen +.B Tk onscreen +must be called to make window +.I winid +visible for the first time, the same as +.I onscreen +in +.IR tkclient (2). +.I How +is the same as for that call - if given, it must be one of +.BR place , +.BR onscreen +or +.BR exact . +.BR +.TP .B tk winctl .B Tk winctl is used to communicate requests to the window manager. @@ -241,6 +264,7 @@ sh load std tk pctl newpgrp wid=${tk window 'My window'} +tk onscreen $wid tk $wid update while {} {tk winctl $wid ${recv $wid}} & .EE @@ -252,5 +276,6 @@ while {} {tk winctl $wid ${recv $wid}} & .IR sh-expr (1), .IR tkcmd (1), .IR tk (2), +.IR tkclient (2), .IR wmlib (2), ``The Tk Reference Manual'' diff --git a/man/2/INDEX b/man/2/INDEX index 6c7d8e44..f12f0d3a 100644 --- a/man/2/INDEX +++ b/man/2/INDEX @@ -21,6 +21,7 @@ btos convcs convcs convcs stob convcs crc crc +csv csv daytime daytime filet daytime gmt daytime @@ -98,9 +99,7 @@ inflate filter-deflate filter-slip filter-slip slip filter-slip format format - fsproto fsproto -fsproto fsproto fsproto readprotofile fsproto readprotostring fsproto geodesy geodesy @@ -287,6 +286,7 @@ rand rand readdir readdir regex regex registries registries +rfc822 rfc822 scsi scsiio scsiio scsiio secstore secstore @@ -412,6 +412,7 @@ pctl sys-pctl sys-pctl sys-pctl pipe sys-pipe sys-pipe sys-pipe +aprint sys-print fprint sys-print print sys-print sprint sys-print @@ -479,6 +480,8 @@ virgil virgil volume volume w3c w3c-css w3c-css w3c-css +w3c w3c-uris +w3c-uris w3c-uris w3c w3c-xpointers w3c-xpointers w3c-xpointers wait wait diff --git a/man/2/csv b/man/2/csv new file mode 100644 index 00000000..00b10ffc --- /dev/null +++ b/man/2/csv @@ -0,0 +1,58 @@ +.TH CSV 2 +.SH NAME +csv \- comma-separated values +.SH SYNOPSIS +.EX +include "bufio.m"; +include "csv.m"; +csv := load CSV CSV->PATH; + +init: fn(bufio: Bufio); +getline: fn(fd: ref Bufio->Iobuf): list of string; +quote: fn(s: string): string; +.EE +.SH DESCRIPTION +.B CSV +provides a few functions to help read and write data in ``comma-separated value'' format. +The +.I csv +format has a sequence of fields on a line (terminated by a newline, carriage return, +or carriage return and newline). +Fields are separated by commas, and may be empty. +A field that starts with a double-quote is a quoted field, continuing +to the next lone double-quote character, including commas and line terminators, +but taking two double-quotes to represent one double-quote. +Any text following quoted text, up to the next comma or line terminator, is included +in the field value. +Note that in a field that does not start with a double-quote, double-quotes are not treated specially. +.PP +.B Init +must be called before any other operation of the module. +.I Bufio +is the instance of the +.IR bufio (2) +module that will provide the open files to be read. +.PP +.B Getline +reads a sequence of fields in +.I csv +format from +.B Iobuf +.IR fd , +unquotes fields as required, and returns them in order in a list. +It returns nil on end-of-file (or read error). +An empty line is regarded as containing a single empty field. +.PP +.B Quote +returns string +.I s +quoted as required by the +.I csv +format: +the result is quoted if +.I s +contains comma, newline, or a quote (and all embedded quotes are doubled). +.SH SOURCE +.B /appl/lib/csv.b +.SH SEE ALSO +.IR sh-csv (1) diff --git a/man/2/fsproto b/man/2/fsproto index 9f0c5487..d67368ef 100644 --- a/man/2/fsproto +++ b/man/2/fsproto @@ -1,6 +1,5 @@ .TH FSPROTO 2 .SH NAME -FSproto: FSproto: readprotofile, readprotostring \- read file system prototype file .SH SYNOPSIS .EX diff --git a/man/2/keyring-ipint b/man/2/keyring-ipint index 8a47c001..d5c3dd8a 100644 --- a/man/2/keyring-ipint +++ b/man/2/keyring-ipint @@ -31,6 +31,10 @@ IPint: adt cmp: fn(i1: self ref IPint, i2: ref IPint): int; shl: fn(i: self ref IPint, n: int): ref IPint; shr: fn(i: self ref IPint, n: int): ref IPint; + and: fn(i1: self ref IPint, i2: ref IPint): ref IPint; + ior: fn(i1: self ref IPint, i2: ref IPint): ref IPint; + not: fn(i: self ref IPint): ref IPint; + xor: fn(i1: self ref IPint, i2: ref IPint): ref IPint; }; .EE .SH DESCRIPTION @@ -145,3 +149,28 @@ Returns .IB i .shr( n ) Returns .IR i >> n +.TP +.IB i1 .and( i2 ) +Returns +.IR i & n , +bitwise AND +.TP +.IB i1 .ior( i2 ) +Returns +.IR i | n , +bitwise inclusive-OR +(it is +.B ior +because plain +.B or +is a Limbo keyword) +.TP +.IB i .not() +Returns +.RI ~ i , +bitwise ones-complement +.TP +.IB i1 .xor( i2 ) +Returns +.IR i ^ n , +bitwise exclusive-OR @@ -33,14 +33,9 @@ is .IR nil , .B open uses -.BR $POPSERVER , -and if that is not defined, it -uses -.BR $MAILSERVER , -the default mail server, if set up in -.LR /services/cs/db -(see -.IR db (6)). +.BR $pop3 , +which must be defined in +.IR ndb (6). The remaining functions assume a successfully opened connection. .PP .B Stat diff --git a/man/2/rfc822 b/man/2/rfc822 new file mode 100644 index 00000000..378d97e5 --- /dev/null +++ b/man/2/rfc822 @@ -0,0 +1,327 @@ +.TH RFC822 2 +.SH NAME +rfc822 \- RFC822 mail format helpers +.SH SYNOPSIS +.EX +include "bufio.m"; +include "rfc822.m"; +rfc822 := load RFC822 RFC822->PATH; +Content, Rfclex: import rfc822; + +Word, QString: con ...; +Maxrequest: con 16*1024; # more than enough for anything sensible + +init: fn(b: Bufio); + +Rfclex: adt { + tok: int; + wordval: string; + + mk: fn(a: array of byte): ref Rfclex; + getc: fn(p: self ref Rfclex): int; + ungetc: fn(p: self ref Rfclex); + lex: fn(p: self ref Rfclex): int; + unlex: fn(p: self ref Rfclex); + skipws: fn(p: self ref Rfclex): int; + + line: fn(p: self ref Rfclex): string; +}; + +readheaders: fn(fd: ref Bufio->Iobuf, limit: int): + array of (string, array of byte); +parseparams: fn(ps: ref Rfclex): list of (string, string); +parsecontent: fn(ps: ref Rfclex, multipart: int, + head: list of ref Content): list of ref Content; +mimefields: fn(ps: ref Rfclex): + list of (string, list of (string, string)); + +quotable: fn(s: string): int; +quote: fn(s: string): string; + +sec2date: fn(secs: int): string; +date2sec: fn(s: string): int; +now: fn(): int; +time: fn(): string; + +Content: adt{ + generic: string; + specific: string; + params: list of (string, string); + + mk: fn(specific: string, generic: string, + params: list of (string, string)): ref Content; + check: fn(c: self ref Content, oks: list of ref Content): int; + text: fn(c: self ref Content): string; +}; + +suffixclass: fn(name: string): (ref Content, ref Content); +dataclass: fn(a: array of byte): (ref Content, ref Content); +.EE +.SH DESCRIPTION +.B RFC822 +provides types and functions to help read and parse RFC822 e-mail headers +(following the more streamlined rules of RFC2822, which has replaced RFC822), +including some MIME extensions. +Currently the focus is on operations that support HTTP and other W3C protocols, +rather than mail reading. +.PP +.B Init +must be called before any other operation in the module. +It must be given an instance of the +.B Bufio +module (see +.IR bufio (2)). +.PP +.B Readheaders +reads a set of RFC822 header lines from +.IR fd , +ended by an empty line. +It returns an array of tuples +.BI ( fieldname,\ value ), +one per header line. +The string +.I fieldname +is the header line's field name, in lower case. +The +.I value +gives the rest of the line, after removing any initial white space and appending any continuation lines, uninterpreted, +as an array of bytes (not a string). +.I Limit +is the maximum allowed size of the header in bytes; +usually that is +.BR Maxrequest . +.B Readheaders +returns the tuple +.B (nil,\ nil) +on end of file or if the header size limit is exceeded. +.PP +.B Rfclex +takes a header line's +.I value +and produces a sequence of tokens. +It provides the following operations: +.TP +.BI Rfclex.mk( a ) +Return a reference to a new +.B Rfclex +value that will produce tokens from the array of byte +.IR a , +which is normally the +.I value +of one of the header lines returned by +.BR readheaders . +.TP +.IB rfl .getc() +Return the next character from the input stream, in the Latin-1 (ISO 8859-1) character set. +Return a negative value +.RB ( Bufio->EOF ) +on end-of-file. +.TP +.IB rfl .ungetc() +Put back the last character read, which will be returned again by the next call to +.IR rfl .getc . +.TP +.IB rfl .lex() +Return the next token from the input stream, ignoring any leading white space. +Most tokens are single characters representing themselves. +The token value is also assigned to +.IB rfl .tok . +There are two special token values: +.BR Word , +representing an unquoted word in the RFC2822 grammar; and +.BR QString , +representing a quoted string. +In both cases +.IB rfl .wordval +will contain the text of the word or string (without quotes). +.TP +.IB rfl .unlex() +Put back the last token read; the next call to +.IB rfl .lex +will return it again. +.TP +.IB rfl .skipws() +Skip over any white space at the current position; +return the initial character of the next token (which is not consumed). +.TP +.IB rfl .line() +Return a string giving the remainder of the input line. +.PP +Several functions take an +.B Rfclex +referring to a header line's value, parse it, and return a higher-level representation of its value. +.PP +.B Parseparams +parses a sequence of +.I parameter +settings of the form (\c +.BI ; attribute = value\c +)* +and returns a corresponding list of tuples +.BI ( attribute,\ value ) . +It returns nil if no parameters are found. +.PP +.B Parsecontent +parses the values of fields such as +.B Content-Type +and +.BR Accept . +The syntax is (loosely) a sequence of comma-separated elements of the form +.IR type , +.IB type /* , +or +.IB type / subtype +followed by an optional sequence of parameters of the form (\c +. BI ; attribute = value +)*. +The +.IB type / subtype +form is allowed only if +.I multipart +is true (non-zero). +It returns a corresponding list of +.B Content +values followed by the initial list +.IR head . +.PP +.B Mimefields +parses a sequence of comma-separated elements of the form +.IR word (\c +.BI ; attr = val +)* +as used for instance in the rule +.IR transfer-coding . +It returns a corresponding list of tuples +.BI ( word,\ l ) +where +.I l +is an optional list of tuples +.BI ( attr,\ val ) . +.PP +When producing an RFC822 header line, words must be quoted when they contain certain +special characters. +.B Quotable +returns true iff the string +.I s +contains any of those characters. +.B Quote +returns the value of +.I s +with quotes added as required. +.PP +RFC822 headers have a particular syntax for dates, different from that of +.IR daytime (2). +The function +.B sec2date +returns a string in RFC822 date format representing the time +.I secs +(in seconds from the Epoch). +.B Date2sec +takes a string in RFC822 date format and returns the time in seconds from the Epoch. +.B Now +returns the current time in seconds from the epoch +(it is equivalent to +.B Daytime->now() +from +.IR daytime (2)). +.B Time +returns the current time in RFC822's date format. +.PP +The Multipurpose Internet Mail Extensions (see RFC2045-7) include syntax +for describing different types of media, content, and content encodings. +.B Content +values represent those descriptions. +Its fields and operations are as follows: +.TP +.B generic +General class of content (eg, +.BR application , +.BR image , +.BR text , +etc) +.TP +.B specific +Optional particular type within that class +(eg, +.B octet-stream +within +.BR application , +or +.B plain +within +.BR text ) +.TP +.B params +Optional list of +.BI ( attr,\ value ) +pairs giving parameters to the content type or encoding. +The particular attribute +.B q +has a floating-point +.I value +that specifies the relative quality (utility) of a particular type or encoding to a client. +.TP +.BI mk( generic,\ specific,\ params ) +Return a reference to a new +.B Content +value, initialised with the given parameters. +.TP +.IB c .check( ok ) +Return true if +.I c +is acceptable content/media/encoding according to the list of allowable forms in +.IR ok . +.I C +is always acceptable if +.I ok +is nil (ie, there are no restrictions). +Otherwise, at least one of the +.B Content +values in +.I ok +must match +.IR c . +That is, an +.I ok +value must have the same generic and specific types as +.IR c , +or specify +.RB ` * ' +in one or both positions (to match any value in +.IR c ). +Any +.I params +are ignored. +.TP +.IB c .text() +Return the RFC822 syntax for +.IR c : +.IB generic / specific ; a\f5=\fIv\fR\&... +where the component words are quoted if necessary. +.PP +Given the +.I name +of a file, +.B suffixclass +returns a tuple +.BI ( type,\ enc ) +where +.I type +gives the MIME +.B Content-Type +of +.I name +(or nil, if its type is not known), and +.I enc +gives the MIME +.B Content-Encoding +of +.I name +(or nil, if it is not encoded). +.SH FILES +.TF /lib/mimetype +.TP +/lib/mimetype +map between file suffix and MIME content types +.SH SOURCE +.B /appl/lib/rfc822.b @@ -7,7 +7,7 @@ include "smtp.m"; smtp := load Smtp Smtp->PATH; open: fn(server: string): (int, string); -sendmail: fn(fromwho: string, +sendmail: fn(fromwhom: string, towhom: list of string, cc: list of string, msg: list of string): (int, string); @@ -26,11 +26,9 @@ is nil, .B open uses the default mail server -.B $MAILSERVER -if set up in -.BR /services/cs/db ; -see -.IR db (6). +.BR $smtp , +which must be defined in +.IR ndb (6). It returns -1 and an error message if the connection fails. .PP .B Sendmail diff --git a/man/2/sys-print b/man/2/sys-print index c499ad43..0fa21403 100644 --- a/man/2/sys-print +++ b/man/2/sys-print @@ -1,11 +1,12 @@ .TH SYS-PRINT 2 .SH NAME -print, fprint, sprint \- print formatted output +print, aprint, fprint, sprint \- print formatted output .SH SYNOPSIS .EX include "sys.m"; sys := load Sys Sys->PATH; +aprint: fn(format: string, *): array of byte; fprint: fn(fd: ref FD, format: string, *): int; print: fn(format: string, *): int; sprint: fn(format: string, *): string; @@ -22,6 +23,10 @@ file descriptor. .B Sprint places text in a string, which it returns. +.B Aprint +is similar but returns the text in +.IR utf (6) +representation as an array of bytes. .B Print and .B fprint diff --git a/man/2/w3c-uris b/man/2/w3c-uris new file mode 100644 index 00000000..d4dbb73d --- /dev/null +++ b/man/2/w3c-uris @@ -0,0 +1,242 @@ +.TH W3C-URIS 2 +.SH NAME +w3c-uris \- uniform resource identifiers +.SH SYNOPSIS +.EX +include "uris.m"; + +uris := load URIs URIs->PATH; +URI: import uris; + +URI: adt +{ + scheme: string; + userinfo: string; # authority, part I + host: string; # authority, part II + port: string; # authority, part III + path: string; # starts with / if absolute + query: string; # includes ? if not nil + fragment: string; # includes # if not nil + + parse: fn(s: string): ref URI; + text: fn(u: self ref URI): string; + addbase: fn(base: self ref URI, rel: ref URI): ref URI; + authority: fn(u: self ref URI): string; + copy: fn(u: self ref URI): ref URI; + eq: fn(u: self ref URI, v: ref URI): int; + hasauthority: fn(u: self ref URI): int; + isabsolute: fn(u: self ref URI): int; + nodots: fn(u: self ref URI): ref URI; + userpw: fn(u: self ref URI): (string, string); +}; + +init: fn(); +dec: fn(s: string): string; +enc: fn(s: string, safe: string): string; +.EE +.SH DESCRIPTION +.B URIs +supports the `generic syntax' for `Uniform' Resource Identifiers (URIs), defined by RFC3986. +Each URI can have up to five components in the general syntax: +.IP +.IB scheme : +.BI // authority / path +.BI ? query +.BI # fragment +.PP +where each component is optional, and can have scheme-specific substructure. +For instance, in the +.BR ftp , +.B http +schemes, and perhaps others, the +.I authority +component has the further syntax: +.IP +.IB userinfo @ host : port +.PP +The set of characters allowed in most components is also scheme-specific, as is their interpretation, and indeed the +interpretation of the component itself. +.PP +.B Init +must be called before any other operation in the module. +.PP +.B URI +represents a parse of a URI into its components, where the +.I authority +has been further split into the scheme-specific but common triple of +.IR userinfo , +.I host +and +.IR port . +(The function +.B URI.authority +will reproduce the original +.I authority +component if required.) +The +.B query +field starts with the +.RB ` ? ' +character that introduces the +.I query +component, so that an empty query is represented by the string +\f5"?"\fP, and the absence of a query component is represented by a nil value. +The +.B fragment +field is handled in a similar way with its delimiting +.RB ` # '. +The fields representing the other components do not include the delimiters in the syntax, +and all but +.B query +have percent-encoded characters decoded. +(The query string is an exception because the set of characters to escape is application-specific. +See below for decoding and encoding functions.) +.B URI +provides the following operations: +.TP +.BI parse( s ) +Return a +.B URI +value representing the results of parsing string +.I s +as a URI. +There is no error return. +The component values have percent-escapes decoded as discussed above. +The scheme name is converted to lower case. +.TP +.IB u .text() +Return the textual representation of +.I u +in the generic syntax, +adding percent-encoding as required to prevent characters +being misinterpreted as delimiters. +.TP +.IB u .addbase( b ) +Resolves URI reference +.I u +with respect to a base URI +.IR b , +including resolving all +.RB ` . ' +and +.RB ` .. ' +segments in the URI's path, +and returns the resulting +.B URI +value. +If +.I u +is an absolute URI reference or +.I b +is nil, the result is the same as +.I u +except that all +.RB ` . ' +and +.RB ` .. ' +segments have been resolved in the resulting path, and leading +instances of them removed. +.TP +.IB u .authority() +Returns the text of the +.I authority +component of +.IR u , +in the generic syntax, +created from its +.BR userinfo , +.B host +and +.B port +components. +.TP +.IB u .copy() +Return a reference to an independent copy of +.IR u . +.TP +.IB u .eq( v ) +Returns true if +.I u +and +.I v +are textually equal in all components except +.BR fragment . +Note that +.I u +and +.I v +are assumed to be in a canonical form for the scheme and application. +.TP +.IB u .eqf( v ) +Returns true if +.I u +and +.I v +are textually equal in all components including +.BR fragment . +.TP +.IB u .hasauthority() +Returns true if any of the authority subcomponents of +.I u +are not nil; returns false otherwise. +.TP +.IB u .isabsolute() +Returns true if +.I u +has a +.I scheme +component; returns false otherwise. +.TP +.IB u .nodots() +Returns a new +.B URI +value in which all +.RB ` . ' +and +.RB ` .. ' +segments have been resolved (equivalent to +.IB u .addbase(nil)\c +). +.TP +.IB u .userpw() +Returns a tuple +.BI ( username,\ password ) +derived from parsing the +.I userinfo +subcomponent of +.I authority +using the deprecated but depressingly still common convention that +.I userinfo +has the syntax ``\fIusername\fP\f5:\fP\fIpassword\fP''. +.PP +A reserved or otherwise special character that appears in a URI component must be +encoded using a sequence of one or more strings of the form +.BI % xx +where +.I xx +is the hexadecimal value of one byte of the character. +A string +.I s +containing such encodings can be decoded by the function +.BR dec . +A string +.I s +can be encoded by +.BR enc , +where the parameter +.I safe +lists the characters that need not be escaped (where +.I safe +may be nil or empty). +These functions are normally only needed to decode and encode the values of +.BR URI.query , +because +.B URI.parse +and +.B URI.text +above decode and encode the other fields. +.SH SOURCE +.B /appl/lib/w3c/uris.b +.SH SEE ALSO +.IR charon (1), +.IR httpd (8) @@ -11,6 +11,8 @@ Parser, Item, Location, Attributes, Mark: import xml; init: fn(): string; open: fn(f: string, warning: chan of (Locator, string), preelem: string): (ref Parser, string); +fopen: fn(iob: ref Bufio->Iobuf, f: string, warning: chan of (Locator, string), + preelem: string): (ref Parser, string); Parser: adt { fileoffset: int; @@ -79,8 +81,15 @@ A new parser instance is created by calling .BR open(\fIf\fP,\ \fIwarning\fP,\ \fIpreelem\fP) , which opens the file .I f -for parsing as an XML document. -It returns a tuple, say +for parsing as an XML document, +or +.BR fopen(\fIiob\fP,\ \fIname\fP,\ \fIwarning\fP,\ \fIpreelem\fP) , +which does the same for an already open +.B Iobuf +(the string +.I name +will be used in diagnostics). +Both functions return a tuple .RI ( p ,\ err ). If there is an error opening the document, .I p @@ -94,7 +103,7 @@ If is not nil, non-fatal errors encountered when parsing will be sent on this channel - a separate process will be needed to received them. Each error is represented -by a tuple, say +by a tuple .RI ( loc ,\ msg ), containing the location .IR loc , @@ -10,6 +10,8 @@ cmd \- interface to host operating system commands .br .BI /cmd/ n /data .br +.BI /cmd/ n /stderr +.br .BI /cmd/ n /status .br .BI /cmd/ n /wait @@ -69,9 +71,11 @@ Spawn a host process to run the with arguments as given. The write returns with an error, setting the error string, if anything prevents starting the command. -If write returns successfully, the command has started, and its input and +If write returns successfully, the command has started, and its standard input and output may be accessed through -.B data +.BR data , +and its error output accessed through +.B stderr (see below). If arguments containing white space are quoted (following the conventions of .IR sh (1) @@ -105,14 +109,17 @@ The file provides a connection to the input and output of a previously-started host command. It must be opened separately for reading and for writing. -When opened for reading, it returns data that the command writes to its standard output and standard error (the -streams are merged); when closed, further writes by the command will receive the host +When opened for reading, it returns data that the command writes to its standard output; when closed, further writes by the command will receive the host equivalent of `write to closed pipe'. When opened for writing, data written to the file can be read by the command on its standard input; when closed, further reads by the command will see the host equivalent of `end of file'. (Unfortunately there is no way to know when the command needs input.) .PP +The +.B stderr +file provides a similar read-only connection to the error output from the command. +.PP Once started, a host command runs until it terminates or until it is killed, by using the .B kill diff --git a/man/7/INDEX b/man/7/INDEX index 0fcedcaf..59cedaf0 100644 --- a/man/7/INDEX +++ b/man/7/INDEX @@ -1,3 +1,4 @@ intro 0intro +cddb cddb db db dbsrv dbsrv diff --git a/man/7/cddb b/man/7/cddb new file mode 100644 index 00000000..34c64f70 --- /dev/null +++ b/man/7/cddb @@ -0,0 +1,56 @@ +.TH CDDB 7 +.SH NAME +cddb \- CD database +.SH SYNOPSIS +.B cddb +[ +.B -DTt +] +[ +.B -s +.I server +] +.B query +.I diskid +.I ntracks +.I track0id +.I ... +.SH DESCRIPTION +.I Cddb +queries an Internet database to get a table of +contents and other details for audio CDs. +The CD has +.I ntracks +tracks, and +.I trackNid +is a hash value derived from the +.IR N 'th +track's characteristics; +.I diskid +is a hash of all the track IDs. +.PP +.I Cddb +takes 4 optional arguments. +The +.B -s server +option causes +.I cddb +to use a different server for the query +(default is +.IR freedb.freedb.org ). +The +.B -D +option causes the raw database response from the server to be dumped +to standard output. +The +.I -t +option causes the time of each track to be appended to the normal output. +.I -T +prints track times and +adds a line at the end with the total time. +.SH SOURCE +.B /appl/cmd/cddb.b +.SH SEE ALSO +.I 9660srv +(in +.IR dossrv (4)) diff --git a/man/8/httpd b/man/8/httpd index 414bb304..eca8bf25 100644 --- a/man/8/httpd +++ b/man/8/httpd @@ -4,11 +4,11 @@ httpd, echo, stats \- HTTP server .SH SYNOPSIS .B svc/httpd/httpd [ -.BI -c cachesize +.BI -a " addr" ] [ -.B -D +.BI -c " cachesize" ] [ -.BI -p port +.B -D ] .PP .BI svc/httpd/echo " meth vers uri search" @@ -17,9 +17,10 @@ httpd, echo, stats \- HTTP server .SH DESCRIPTION .I Httpd is a simple HTTP daemon, serving version 1.0 of the HTTP protocol. -It listens for incoming calls on a given TCP/IP -.I port -(default: 80). +It listens for incoming calls on a given +.I address +(default: +.BR tcp!*!80 ). It serves content rooted at .L /services/httpd/root in its name space. @@ -55,7 +56,13 @@ are provided (see below). .I Httpd has the following options: .TP -.BI -c cachesize +.BI -a " address" +Listen for calls on the given +.IR address , +expressed using the syntax of +.IR sys-dial (2). +.TP +.BI -c " cachesize" Set the size of the daemon's cache to .I cachesize kilobytes. The default is a five megabyte cache. @@ -63,10 +70,6 @@ kilobytes. The default is a five megabyte cache. .B -D Debugging information is written to the file .BR /services/httpd/httpd.debug . -.TP -.BI -p port -Listen for requests on the given -.IR port . .PP .I Echo is a trivial server that just returns the method, URI, any search, and the headers sent by the client. diff --git a/man/8/shutdown b/man/8/shutdown index 5385f91e..130cc14c 100644 --- a/man/8/shutdown +++ b/man/8/shutdown @@ -21,6 +21,10 @@ will be given the same options as were given it when it started. .SH FILES .B /dev/sysctl .SH SOURCE -.B /appl/cmd/shutdown.b +.TF /dis/shutdown +.TP +.B /dis/shutdown +.IR sh (1) +script .SH "SEE ALSO" .IR cons (3) @@ -140,6 +140,7 @@ 82543gc /man/10/plan9.ini 91cxx /man/10/plan9.ini 9660srv /man/4/dossrv +9660srv /man/7/cddb 9660srv /man/8/init 9660srv.b /man/4/dossrv 9999:noworld /man/4/kfs @@ -255,6 +256,7 @@ abs /man/2/w3c-xpointers absence /man/10/strcat absence /man/2/ir absence /man/2/prof +absence /man/2/w3c-uris absence /man/3/ip absence /man/8/dns absence /man/8/prep @@ -271,6 +273,7 @@ absolute /man/10/a.out absolute /man/10/conf absolute /man/2/math-fp absolute /man/2/sys-millisec +absolute /man/2/w3c-uris absolute /man/2/w3c-xpointers absolute /man/8/bootpd absolutely /man/1/chmod @@ -301,6 +304,7 @@ accept /man/10ti925/epocimg accept /man/2/arg accept /man/2/dhcpclient accept /man/2/ip +accept /man/2/rfc822 accept /man/2/sexprs accept /man/2/spree-gather accept /man/3/cmd @@ -319,6 +323,7 @@ acceptable /man/1/miniterm acceptable /man/1/sh-arg acceptable /man/1/sh-expr acceptable /man/1/telnet +acceptable /man/2/rfc822 acceptable /man/2/secstore acceptable /man/2/security-auth acceptable /man/2/spki-verifier @@ -413,6 +418,7 @@ access /man/1/0intro access /man/1/alphabet-abc access /man/1/alphabet-fs access /man/1/alphabet-grid +access /man/1/ar access /man/1/chmod access /man/1/collab access /man/1/ebook @@ -924,6 +930,7 @@ adaptec /man/10/plan9.ini adapter /man/10/plan9.ini adapters /man/10/plan9.ini adcs /man/3/audio +add /man/1/ar add /man/1/bind add /man/1/chmod add /man/1/grid-monitor @@ -967,6 +974,7 @@ add /man/9/canvas add /man/9/menu add /man/9/options add /man/9/text +addbase /man/2/w3c-uris addbuiltin /man/2/sh addclock0link /man/10/delay addclock0link /man/10/kbdputc @@ -993,6 +1001,7 @@ added /man/10/plan9.ini added /man/10/styxserver added /man/2/draw-display added /man/2/draw-image +added /man/2/rfc822 added /man/2/sets added /man/2/spree-cardlib added /man/3/sd @@ -1014,6 +1023,7 @@ adding /man/1/sh-alphabet adding /man/10/devattach adding /man/10/plan9.ini adding /man/10/strcat +adding /man/2/w3c-uris adding /man/3/pnp adding /man/6/dis adding /man/8/cs @@ -1101,6 +1111,7 @@ addr /man/4/acme addr /man/4/lockfs addr /man/7/db addr /man/8/cs +addr /man/8/httpd addr&amask /man/2/dis address /man/1/acme address /man/1/alphabet-abc @@ -1185,6 +1196,7 @@ address /man/8/cs address /man/8/dhcp address /man/8/dns address /man/8/getauthinfo +address /man/8/httpd address /man/8/prep address /man/8/rip address /man/8/styxchat @@ -1260,6 +1272,7 @@ adds /man/2/spree-cardlib adds /man/3/ip adds /man/3/logfs adds /man/4/registry +adds /man/7/cddb adds /man/8/ftl adds /man/8/prep addsbuiltin /man/2/sh @@ -1406,6 +1419,7 @@ adt /man/2/prefab-style adt /man/2/print adt /man/2/prof adt /man/2/registries +adt /man/2/rfc822 adt /man/2/scsiio adt /man/2/security-login adt /man/2/security-ssl @@ -1430,6 +1444,7 @@ adt /man/2/translate adt /man/2/ubfa adt /man/2/venti adt /man/2/w3c-css +adt /man/2/w3c-uris adt /man/2/w3c-xpointers adt /man/2/wmclient adt /man/2/wmsrv @@ -1520,6 +1535,7 @@ afid /man/2/styxservers afid /man/5/0intro afid /man/5/attach afid /man/8/styxchat +afile /man/1/ar afile /man/10/iar afollowing /man/2/w3c-xpointers afp /man/2/dis @@ -1877,6 +1893,7 @@ allow /man/9/text allow.b /man/2/spree-allow allow.m /man/2/spree-allow allowable /man/2/keyring-0intro +allowable /man/2/rfc822 allowable /man/9/canvas allowable /man/9/text allowance /man/2/prefab-compound @@ -2054,6 +2071,7 @@ alt /man/2/tkclient alt /man/2/wait alt /man/3/prog alt /man/6/keyboard +alter /man/1/ar alter /man/1/mash alter /man/1/wm-misc alter /man/10/iar @@ -2356,6 +2374,7 @@ appearing /man/1/wm-sh appearing /man/2/cfg appearing /man/9/scale append /man/1/acme +append /man/1/ar append /man/1/chmod append /man/1/limbo append /man/1/ls @@ -2396,12 +2415,14 @@ appended /man/2/security-0intro appended /man/2/tk appended /man/3/ssl appended /man/4/acme +appended /man/7/cddb appended /man/9/bind appended /man/9/scrollbar appending /man/1/asm appending /man/1/limbo appending /man/1/sh appending /man/2/attrdb +appending /man/2/rfc822 appending /man/2/security-0intro appending /man/8/prep appending /man/9/menu @@ -2422,6 +2443,7 @@ appl /man/1/alphabet-abc appl /man/1/alphabet-fs appl /man/1/alphabet-grid appl /man/1/alphabet-main +appl /man/1/ar appl /man/1/asm appl /man/1/auplay appl /man/1/avr @@ -2566,6 +2588,7 @@ appl /man/2/bufio appl /man/2/cfg appl /man/2/convcs appl /man/2/crc +appl /man/2/csv appl /man/2/daytime appl /man/2/dbm appl /man/2/debug @@ -2607,6 +2630,7 @@ appl /man/2/pslib appl /man/2/rand appl /man/2/readdir appl /man/2/regex +appl /man/2/rfc822 appl /man/2/scsiio appl /man/2/secstore appl /man/2/security-auth @@ -2638,6 +2662,7 @@ appl /man/2/venti appl /man/2/virgil appl /man/2/volume appl /man/2/w3c-css +appl /man/2/w3c-uris appl /man/2/w3c-xpointers appl /man/2/wmclient appl /man/2/wmlib @@ -2668,6 +2693,7 @@ appl /man/4/ramfile appl /man/4/registry appl /man/4/spree appl /man/4/tarfs +appl /man/7/cddb appl /man/7/db appl /man/7/dbsrv appl /man/8/applylog @@ -2696,7 +2722,6 @@ appl /man/8/rdbgsrv appl /man/8/register appl /man/8/rip appl /man/8/rstyxd -appl /man/8/shutdown appl /man/8/signer appl /man/8/sntp appl /man/8/srv @@ -2742,6 +2767,7 @@ application /man/2/popup application /man/2/prefab-element application /man/2/prefab-environ application /man/2/prefab-style +application /man/2/rfc822 application /man/2/security-0intro application /man/2/selectfile application /man/2/styxservers @@ -2752,6 +2778,7 @@ application /man/2/tk application /man/2/tkclient application /man/2/translate application /man/2/ubfa +application /man/2/w3c-uris application /man/2/wmclient application /man/2/wmlib application /man/3/draw @@ -2948,9 +2975,11 @@ approximate /man/1/sh-file2chan approximate /man/2/geodesy approximate /man/9/canvas approximately /man/2/bloomfilter +approximation /man/1/man approximation /man/3/fs apreceding /man/2/w3c-xpointers april /man/2/ida +aprint /man/2/sys-print aprvx /man/8/mkfs apx /man/10/2c aqid /man/10/styx @@ -2960,10 +2989,12 @@ aqid /man/5/attach aqid /man/8/styxchat aqua /man/9/types ar /man/1/alphabet-fs +ar /man/1/ar ar /man/1/fs ar /man/10/ar ar /man/10/iar ar /man/10/mk +ar.b /man/1/ar ar.h /man/10/ar arbitrarily /man/1/acme arbitrarily /man/2/dict @@ -3020,6 +3051,7 @@ arch /man/3/vga arch /man/4/archfs arch /man/4/namespace arch /man/8/mkfs +arch.a /man/1/ar arch.b /man/8/create archfile /man/4/archfs archfs /man/4/archfs @@ -3052,6 +3084,7 @@ archival /man/2/spree-gather archival /man/2/spree-objstore archival /man/2/venti archive /man/1/alphabet-fs +archive /man/1/ar archive /man/1/fs archive /man/1/gettar archive /man/10/0intro @@ -3078,6 +3111,7 @@ archived /man/4/tarfs archived /man/8/mkfs archived /man/8/prep archiveobj /man/2/spree-allow +archives /man/1/ar archives /man/1/gettar archives /man/10/2l archives /man/10/ar @@ -3326,6 +3360,7 @@ array /man/2/popup array /man/2/prof array /man/2/readdir array /man/2/regex +array /man/2/rfc822 array /man/2/scsiio array /man/2/secstore array /man/2/security-random @@ -3344,6 +3379,7 @@ array /man/2/sys-byte2char array /man/2/sys-dirread array /man/2/sys-file2chan array /man/2/sys-pipe +array /man/2/sys-print array /man/2/sys-read array /man/2/sys-utfbytes array /man/2/tabs @@ -3426,6 +3462,7 @@ arrows /man/1/ebook arrows /man/9/canvas arrows /man/9/scrollbar arrowshape /man/9/canvas +art /man/1/ar artifacts /man/6/colour artist /man/1/collab-clients artists /man/1/collab-clients @@ -3531,6 +3568,7 @@ assigned /man/1/yacc assigned /man/10/styxserver assigned /man/2/dhcpclient assigned /man/2/palmfile +assigned /man/2/rfc822 assigned /man/2/sys-0intro assigned /man/2/sys-dial assigned /man/2/sys-self @@ -3631,6 +3669,7 @@ assumed /man/1/collab-clients assumed /man/1/cprof assumed /man/1/du assumed /man/1/look +assumed /man/1/man assumed /man/1/mash assumed /man/1/mdb assumed /man/1/mprof @@ -3652,6 +3691,7 @@ assumed /man/2/spree assumed /man/2/spree-cardlib assumed /man/2/styx assumed /man/2/styxservers-nametree +assumed /man/2/w3c-uris assumed /man/3/boot assumed /man/3/ds assumed /man/3/gpio @@ -3684,6 +3724,7 @@ assuming /man/9/types assumption /man/1/disdep assumption /man/1/mdb assumption /man/10/2c +assumptions /man/1/ar assumptions /man/10/iar asterisk /man/1/sh-arg asterisk /man/1/sh-std @@ -3829,6 +3870,7 @@ attempt /man/1/charon attempt /man/1/dmview attempt /man/1/listen attempt /man/1/miniterm +attempt /man/1/os attempt /man/1/tiny attempt /man/1/touch attempt /man/1/wm @@ -3908,6 +3950,7 @@ attr /man/2/factotum attr /man/2/palmfile attr /man/2/plumbmsg attr /man/2/registries +attr /man/2/rfc822 attr /man/3/i82365 attr /man/3/sign attr /man/4/factotum @@ -3939,6 +3982,7 @@ attribute /man/2/cfg attribute /man/2/convcs attribute /man/2/plumbmsg attribute /man/2/registries +attribute /man/2/rfc822 attribute /man/2/spree attribute /man/2/spree-cardlib attribute /man/2/spree-objstore @@ -4016,6 +4060,7 @@ audio /man/3/kprof audio /man/3/mpeg audio /man/3/tv audio /man/6/audio +audio /man/7/cddb audio0 /man/10/plan9.ini audioctl /man/1/auplay audioctl /man/1/mux @@ -4224,6 +4269,7 @@ authority /man/2/security-0intro authority /man/2/security-login authority /man/2/spki authority /man/2/tk +authority /man/2/w3c-uris authority /man/6/auth authority /man/6/dis authority /man/6/keys @@ -4252,6 +4298,7 @@ autoconvert /man/1/sh-alphabet autodeclare /man/1/sh-alphabet autodetected /man/10/plan9.ini autoexec.bat /man/10/plan9.ini +autoload /man/1/sh automate /man/1/wm-sh automate /man/2/styxservers automatic /man/1/acme @@ -4384,6 +4431,7 @@ avoid /man/5/stat avoid /man/6/ndb avoid /man/9/text avoiding /man/4/ftpfs +avoids /man/1/ar avoids /man/1/sh-file2chan avoids /man/10/iar avoids /man/2/crc @@ -4422,6 +4470,7 @@ b64toip /man/2/keyring-ipint backed /man/2/palmfile backed /man/9/canvas background /man/1/cprof +background /man/1/os background /man/1/sh background /man/1/tiny background /man/1/tktester @@ -4564,6 +4613,7 @@ base /man/2/print base /man/2/sexprs base /man/2/string base /man/2/sys-dial +base /man/2/w3c-uris base /man/3/flash base /man/3/kprof base /man/3/pnp @@ -4755,6 +4805,7 @@ behaves /man/2/prefab-compound behaves /man/9/canvas behaves /man/9/menu behaves /man/9/text +behavior /man/1/ar behavior /man/10/iar behavior /man/10/plan9.ini behavior /man/2/draw-image @@ -4763,6 +4814,7 @@ behavior /man/5/open behaviour /man/1/acme behaviour /man/1/emu behaviour /man/1/ftree +behaviour /man/1/os behaviour /man/1/sh behaviour /man/1/sh-alphabet behaviour /man/1/wm-sh @@ -5237,6 +5289,7 @@ bitstring /man/2/asn1 bitwise /man/1/fc bitwise /man/1/mdb bitwise /man/1/sh-expr +bitwise /man/2/keyring-ipint bitwise /man/2/sets bitwise /man/2/tkclient bitwise /man/2/wmclient @@ -6037,22 +6090,27 @@ bufio /man/1/yacc bufio /man/2/attrdb bufio /man/2/bufio bufio /man/2/bufio-chanfill +bufio /man/2/csv bufio /man/2/format bufio /man/2/imagefile bufio /man/2/pslib +bufio /man/2/rfc822 bufio /man/2/sexprs bufio /man/2/spki bufio /man/2/sys-read bufio /man/2/sys-seek bufio /man/2/sys-self bufio /man/2/ubfa +bufio /man/2/xml bufio.b /man/2/bufio bufio.m /man/1/yacc bufio.m /man/2/attrdb bufio.m /man/2/bufio bufio.m /man/2/bufio-chanfill +bufio.m /man/2/csv bufio.m /man/2/format bufio.m /man/2/palmfile +bufio.m /man/2/rfc822 bufio.m /man/2/sexprs bufio.m /man/2/spki bufio.m /man/2/spki-verifier @@ -6068,6 +6126,7 @@ bug /man/10/ref buggy /man/3/sd bugs /man/1/9win bugs /man/1/acme +bugs /man/1/ar bugs /man/1/asm bugs /man/1/cal bugs /man/1/cat @@ -6340,6 +6399,7 @@ button /man/1/ftree button /man/1/grid-monitor button /man/1/grid-query button /man/1/keyboard +button /man/1/man button /man/1/mash-tk button /man/1/miniterm button /man/1/session @@ -6477,6 +6537,7 @@ byte /man/2/math-export byte /man/2/palmfile byte /man/2/plumbmsg byte /man/2/prof +byte /man/2/rfc822 byte /man/2/scsiio byte /man/2/secstore byte /man/2/security-random @@ -6491,10 +6552,12 @@ byte /man/2/styxservers byte /man/2/sys-0intro byte /man/2/sys-byte2char byte /man/2/sys-file2chan +byte /man/2/sys-print byte /man/2/sys-read byte /man/2/sys-utfbytes byte /man/2/ubfa byte /man/2/venti +byte /man/2/w3c-uris byte /man/2/wmsrv byte /man/3/arch byte /man/3/boot @@ -6617,6 +6680,7 @@ bytes /man/2/palmfile bytes /man/2/plumbmsg bytes /man/2/pop3 bytes /man/2/print +bytes /man/2/rfc822 bytes /man/2/scsiio bytes /man/2/secstore bytes /man/2/security-random @@ -6868,6 +6932,7 @@ canonical /man/2/draw-rect canonical /man/2/keyset canonical /man/2/sexprs canonical /man/2/spki +canonical /man/2/w3c-uris canonical /man/6/dis canonical /man/6/sexprs canonical /man/9/types @@ -6977,6 +7042,7 @@ carets /man/1/mash carets /man/1/sh carriage /man/1/deb carriage /man/1/mash +carriage /man/2/csv carriage /man/6/keyboard carriage /man/6/sexprs carriage /man/6/translate @@ -7017,6 +7083,7 @@ cases /man/2/0intro cases /man/2/dis cases /man/2/draw-0intro cases /man/2/draw-image +cases /man/2/rfc822 cases /man/2/security-auth cases /man/2/sys-dirread cases /man/2/w3c-xpointers @@ -7133,12 +7200,16 @@ cd /man/3/prog cd /man/3/sd cd /man/4/dossrv cd /man/6/namespace +cd /man/7/cddb cd.b /man/1/cd +cddb /man/7/cddb +cddb.b /man/7/cddb cdfile /man/4/dossrv cdfppqrtw /man/8/kfscmd cdir /man/10/styxserver cdroms /man/4/dossrv cds /man/1/tr +cds /man/7/cddb ce /man/10/srclist ceases /man/9/canvas ceases /man/9/text @@ -7535,6 +7606,7 @@ char /man/6/sexprs char /man/9/text char2byte /man/2/sys-byte2char character /man/1/acme +character /man/1/ar character /man/1/bind character /man/1/brutus character /man/1/charon @@ -7583,6 +7655,7 @@ character /man/2/asn1 character /man/2/bufio character /man/2/cfg character /man/2/convcs +character /man/2/csv character /man/2/debug character /man/2/draw-0intro character /man/2/draw-font @@ -7594,6 +7667,7 @@ character /man/2/keyring-getmsg character /man/2/palmfile character /man/2/prof character /man/2/regex +character /man/2/rfc822 character /man/2/sexprs character /man/2/spree-cardlib character /man/2/string @@ -7604,6 +7678,7 @@ character /man/2/sys-tokenize character /man/2/tftp character /man/2/ubfa character /man/2/w3c-css +character /man/2/w3c-uris character /man/2/w3c-xpointers character /man/2/wmsrv character /man/3/0intro @@ -7648,11 +7723,13 @@ characteristics /man/3/flash characteristics /man/3/ip characteristics /man/6/audio characteristics /man/6/colour +characteristics /man/7/cddb characteristics /man/7/db characteristics /man/8/ftl characterized /man/9/canvas characters /man/1/acme characters /man/1/alphabet-fs +characters /man/1/ar characters /man/1/bind characters /man/1/charon characters /man/1/dd @@ -7707,6 +7784,7 @@ characters /man/2/filepat characters /man/2/filter-deflate characters /man/2/filter-slip characters /man/2/palmfile +characters /man/2/rfc822 characters /man/2/sexprs characters /man/2/sh characters /man/2/spree @@ -7718,6 +7796,7 @@ characters /man/2/sys-print characters /man/2/sys-tokenize characters /man/2/sys-utfbytes characters /man/2/w3c-css +characters /man/2/w3c-uris characters /man/3/0intro characters /man/3/cap characters /man/3/cons @@ -7763,6 +7842,7 @@ charon /man/1/charon charon /man/1/miniterm charon /man/1/webgrab charon /man/1/wm-misc +charon /man/2/w3c-uris charon.cfg /man/1/charon chars /man/9/text charset /man/2/convcs @@ -7810,6 +7890,7 @@ check /man/10/styxserver check /man/2/crc check /man/2/format check /man/2/keyring-crypt +check /man/2/rfc822 check /man/2/security-0intro check /man/2/styxservers check /man/2/styxservers-nametree @@ -7849,6 +7930,7 @@ checked /man/8/changelogin checked /man/8/kfscmd checking /man/1/acme checking /man/1/alphabet-main +checking /man/1/ar checking /man/1/ftest checking /man/1/limbo checking /man/1/listen @@ -8061,6 +8143,7 @@ class /man/1/sh-string class /man/2/0intro class /man/2/asn1 class /man/2/ip +class /man/2/rfc822 class /man/2/string class /man/2/w3c-css class /man/3/arch @@ -8212,6 +8295,7 @@ client /man/2/factotum client /man/2/format client /man/2/keyring-auth client /man/2/plumbmsg +client /man/2/rfc822 client /man/2/security-0intro client /man/2/security-auth client /man/2/security-login @@ -8481,6 +8565,7 @@ cmd /man/1/alphabet-abc cmd /man/1/alphabet-fs cmd /man/1/alphabet-grid cmd /man/1/alphabet-main +cmd /man/1/ar cmd /man/1/asm cmd /man/1/auplay cmd /man/1/avr @@ -8619,6 +8704,7 @@ cmd /man/4/ramfile cmd /man/4/registry cmd /man/4/spree cmd /man/4/tarfs +cmd /man/7/cddb cmd /man/7/dbsrv cmd /man/8/applylog cmd /man/8/bootpd @@ -8642,7 +8728,6 @@ cmd /man/8/plumber cmd /man/8/prep cmd /man/8/rip cmd /man/8/rstyxd -cmd /man/8/shutdown cmd /man/8/signer cmd /man/8/sntp cmd /man/8/styxchat @@ -8750,6 +8835,7 @@ codes /man/2/ir codes /man/2/scsiio codes /man/3/cons codes /man/6/scancode +coding /man/2/rfc822 coding /man/2/security-0intro coff /man/10/5coff coffee /man/1/wm-misc @@ -8957,6 +9043,7 @@ combine /man/2/draw-rect combine /man/3/draw combine /man/3/ssl combine /man/9/bind +combined /man/1/ar combined /man/10/iar combined /man/2/bloomfilter combined /man/2/draw-0intro @@ -8978,6 +9065,8 @@ comm.b /man/1/comm comma /man/1/charon comma /man/1/mc comma /man/1/sh-csv +comma /man/2/csv +comma /man/2/rfc822 comma /man/6/users command's /man/1/mash command's /man/1/mash-tk @@ -8991,6 +9080,7 @@ command2 /man/1/mash commas /man/10/acid commas /man/10/plan9.ini commas /man/10/print +commas /man/2/csv commas /man/2/sys-print commas /man/9/grid commence /man/1/session @@ -9055,6 +9145,7 @@ common /man/2/spree-gather common /man/2/styxservers common /man/2/sys-dial common /man/2/ubfa +common /man/2/w3c-uris common /man/2/w3c-xpointers common /man/2/xml common /man/3/cons @@ -9295,6 +9386,7 @@ complement /man/1/sh-expr complement /man/1/tr complement /man/2/bufio complement /man/2/draw-display +complement /man/2/keyring-ipint complement /man/3/audio complement /man/6/audio complement /man/6/dis @@ -9419,6 +9511,7 @@ component /man/2/names component /man/2/palmfile component /man/2/prefab-element component /man/2/print +component /man/2/rfc822 component /man/2/secstore component /man/2/security-0intro component /man/2/security-login @@ -9426,6 +9519,7 @@ component /man/2/styxservers-nametree component /man/2/sys-dial component /man/2/sys-fd2path component /man/2/ubfa +component /man/2/w3c-uris component /man/3/tv component /man/6/colour component /man/6/ndb @@ -9460,6 +9554,7 @@ components /man/2/prefab-element components /man/2/print components /man/2/ubfa components /man/2/w3c-css +components /man/2/w3c-uris components /man/2/w3c-xpointers components /man/5/0intro components /man/6/colour @@ -9604,6 +9699,7 @@ con /man/2/prefab-element con /man/2/print con /man/2/prof con /man/2/readdir +con /man/2/rfc822 con /man/2/scsiio con /man/2/secstore con /man/2/styx @@ -9615,6 +9711,7 @@ con /man/2/wmclient concatblock /man/10/allocb concatenate /man/1/cat concatenate /man/1/mash +concatenated /man/1/ar concatenated /man/1/mash concatenated /man/1/sh concatenated /man/1/sh-string @@ -10342,12 +10439,14 @@ constants /man/5/0intro constants /man/6/ubfa constants /man/8/httpd constants /man/8/prep +constituent /man/1/ar constituent /man/1/sh-regex constituent /man/10/ar constituent /man/10/iar constituent /man/2/prefab-element constituent /man/2/sys-bind constituent /man/2/sys-open +constituents /man/1/ar constituents /man/10/iar constr /man/2/asn1 constrained /man/2/asn1 @@ -10408,6 +10507,7 @@ consume /man/9/pack consumed /man/10/styxserver consumed /man/2/convcs consumed /man/2/filter +consumed /man/2/rfc822 consumed /man/2/sys-byte2char consumed /man/2/wmclient consumed /man/2/wmsrv @@ -10494,6 +10594,7 @@ contains /man/10/styxserver contains /man/2/alphabet-intro contains /man/2/asn1 contains /man/2/attrdb +contains /man/2/csv contains /man/2/dbm contains /man/2/debug contains /man/2/dhcpclient @@ -10519,6 +10620,7 @@ contains /man/2/prefab-element contains /man/2/print contains /man/2/prof contains /man/2/registries +contains /man/2/rfc822 contains /man/2/secstore contains /man/2/security-login contains /man/2/security-ssl @@ -10614,6 +10716,7 @@ content /man/2/dbm content /man/2/format content /man/2/keyring-getmsg content /man/2/palmfile +content /man/2/rfc822 content /man/2/sys-stat content /man/2/venti content /man/2/w3c-css @@ -10690,6 +10793,7 @@ continually /man/2/sys-read continuation /man/1/mash continuation /man/1/strings continuation /man/10/atoi +continuation /man/2/rfc822 continue /man/1/blur continue /man/1/deb continue /man/1/mc @@ -10719,6 +10823,7 @@ continues /man/9/0intro continues /man/9/text continuing /man/1/acme continuing /man/1/tiny +continuing /man/2/csv continuous /man/6/colour continuously /man/2/sys-millisec continuously /man/9/options @@ -10742,6 +10847,7 @@ control /man/1/mc control /man/1/miniterm control /man/1/mk control /man/1/mux +control /man/1/os control /man/1/sh control /man/1/sh-std control /man/1/tktester @@ -10929,6 +11035,7 @@ convention /man/2/math-linalg convention /man/2/sh convention /man/2/sys-0intro convention /man/2/sys-dial +convention /man/2/w3c-uris convention /man/2/w3c-xpointers convention /man/3/sd convention /man/5/0intro @@ -11119,6 +11226,7 @@ converted /man/2/spki converted /man/2/spree converted /man/2/sys-print converted /man/2/w3c-css +converted /man/2/w3c-uris converted /man/2/w3c-xpointers converted /man/2/xml converted /man/3/mnt @@ -11365,6 +11473,7 @@ copy /man/2/sh copy /man/2/styxservers copy /man/2/sys-pctl copy /man/2/sys-tokenize +copy /man/2/w3c-uris copy /man/3/env copy /man/3/ether copy /man/3/flash @@ -11698,6 +11807,7 @@ cpu.b /man/1/cpu cpu.b /man/4/cpu cpus /man/10/mk cputype /man/3/arch +cr /man/1/ar cr /man/10/iar crackerbarrel /man/1/math-misc crackerbarrel.b /man/1/math-misc @@ -11721,6 +11831,7 @@ create /man/1/alphabet-abc create /man/1/alphabet-fs create /man/1/alphabet-grid create /man/1/alphabet-main +create /man/1/ar create /man/1/bind create /man/1/blur create /man/1/fs @@ -11867,6 +11978,7 @@ created /man/2/sys-open created /man/2/tabs created /man/2/tk created /man/2/tkclient +created /man/2/w3c-uris created /man/2/wmclient created /man/2/wmlib created /man/2/wmsrv @@ -12115,10 +12227,8 @@ cs /man/1/secstore cs /man/1/tr cs /man/1/webgrab cs /man/2/convcs -cs /man/2/pop3 cs /man/2/secstore cs /man/2/security-login -cs /man/2/smtp cs /man/2/srv cs /man/2/sys-dial cs /man/2/virgil @@ -12148,7 +12258,10 @@ css.m /man/2/w3c-css css21 /man/2/w3c-css csv /man/1/sh csv /man/1/sh-csv +csv /man/2/csv csv.b /man/1/sh-csv +csv.b /man/2/csv +csv.m /man/2/csv ct65545 /man/3/vga ct65545hwgc /man/3/vga ctime /man/2/daytime @@ -12241,6 +12354,7 @@ currency /man/1/units currency /man/6/keyboard current /man/1/acme current /man/1/alphabet-fs +current /man/1/ar current /man/1/basename current /man/1/bind current /man/1/blur @@ -12335,6 +12449,7 @@ current /man/2/keyring-sha1 current /man/2/newns current /man/2/popup current /man/2/registries +current /man/2/rfc822 current /man/2/scsiio current /man/2/security-auth current /man/2/sh @@ -12611,6 +12726,7 @@ data /man/2/bufio data /man/2/bufio-chanfill data /man/2/convcs data /man/2/crc +data /man/2/csv data /man/2/dbm data /man/2/debug data /man/2/devpointer @@ -12777,6 +12893,7 @@ database /man/4/dbfs database /man/4/registry database /man/6/attrdb database /man/6/ndb +database /man/7/cddb database /man/7/db database /man/7/dbsrv database /man/8/bootpd @@ -12790,6 +12907,7 @@ databases /man/2/attrdb databases /man/2/dbm databases /man/7/0intro databook /man/3/i82365 +dataclass /man/2/rfc822 datafd /man/7/db datafile /man/1/calendar datafile /man/1/idea @@ -12805,6 +12923,7 @@ datasource /man/10/odbc datatype /man/2/venti dataxx /man/2/plumbmsg date /man/1/acme +date /man/1/ar date /man/1/date date /man/1/deb date /man/1/emu @@ -12820,6 +12939,7 @@ date /man/10/iar date /man/10/mk date /man/2/command date /man/2/keyring-0intro +date /man/2/rfc822 date /man/2/tk date /man/8/changelogin date /man/8/collabsrv @@ -12833,7 +12953,10 @@ date.b /man/1/date date.b /man/1/wm-misc date.dis /man/2/command date2epoch /man/2/spki +date2sec /man/2/rfc822 +dates /man/1/ar dates /man/10/iar +dates /man/2/rfc822 dates /man/2/sys-0intro dates /man/8/mkfs datops /man/2/draw-image @@ -12848,6 +12971,7 @@ dawes /man/2/format daytime /man/1/date daytime /man/2/daytime daytime /man/2/palmfile +daytime /man/2/rfc822 daytime /man/8/createsignerkey daytime.b /man/2/daytime daytime.m /man/2/daytime @@ -12859,8 +12983,6 @@ db /man/10/devattach db /man/10/odbc db /man/2/attrdb db /man/2/dbm -db /man/2/pop3 -db /man/2/smtp db /man/2/sys-dial db /man/7/db db /man/7/dbsrv @@ -12970,6 +13092,7 @@ deb /man/6/sbl deb.b /man/1/deb debate /man/1/diff debdata.b /man/1/deb +debian /man/1/ar debsrc.b /man/1/deb debug /man/1/0intro debug /man/1/deb @@ -13043,6 +13166,7 @@ debugging /man/9/text debugon /man/3/draw dec /man/10/a.out dec /man/2/encoding +dec /man/2/w3c-uris decakilometre /man/2/geodesy decametre /man/2/geodesy decendants /man/9/destroy @@ -13177,11 +13301,13 @@ decode /man/1/uuencode decode /man/2/asn1 decode /man/2/filter-slip decode /man/2/palmfile +decode /man/2/w3c-uris decoded /man/1/uuencode decoded /man/10/rune decoded /man/2/asn1 decoded /man/2/dis decoded /man/2/w3c-css +decoded /man/2/w3c-uris decoded /man/6/sexprs decoder /man/3/mpeg decoders /man/10/ms2 @@ -13195,6 +13321,7 @@ decoding /man/2/encoding decoding /man/2/filter-slip decoding /man/2/ubfa decoding /man/2/w3c-css +decoding /man/2/w3c-uris decoding /man/3/tls decompress /man/10/5cv decompresses /man/10/5cv @@ -13284,6 +13411,7 @@ default /man/1/limbo default /man/1/listen default /man/1/logon default /man/1/look +default /man/1/man default /man/1/mash default /man/1/mash-tk default /man/1/math-misc @@ -13354,7 +13482,6 @@ default /man/2/geodesy default /man/2/keyring-auth default /man/2/keyset default /man/2/math-fp -default /man/2/pop3 default /man/2/prefab-compound default /man/2/print default /man/2/prof @@ -13409,6 +13536,7 @@ default /man/6/man default /man/6/namespace default /man/6/ndb default /man/6/translate +default /man/7/cddb default /man/7/db default /man/7/dbsrv default /man/8/applylog @@ -13586,6 +13714,7 @@ defined /man/2/secstore defined /man/2/sets defined /man/2/sexprs defined /man/2/sh +defined /man/2/smtp defined /man/2/spki defined /man/2/spki-verifier defined /man/2/styx @@ -13598,6 +13727,7 @@ defined /man/2/sys-self defined /man/2/sys-stat defined /man/2/translate defined /man/2/ubfa +defined /man/2/w3c-uris defined /man/2/w3c-xpointers defined /man/3/cons defined /man/3/draw @@ -13806,6 +13936,7 @@ delegate /man/2/spki delegated /man/6/ndb delegation /man/2/spki delete /man/1/acme +delete /man/1/ar delete /man/1/brutus delete /man/1/secstore delete /man/1/tktester @@ -13921,8 +14052,10 @@ delimiter /man/2/sys-tokenize delimiter /man/6/regexp delimiters /man/1/acme delimiters /man/10/getfields +delimiters /man/2/w3c-uris delimiters /man/2/w3c-xpointers delimiters /man/3/ssl +delimiting /man/2/w3c-uris delims /man/10/getfields delindex /man/2/spree-cardlib deliver /man/1/tail @@ -14076,8 +14209,10 @@ depends /man/9/text deprecated /man/10/ms2 deprecated /man/10/plan9.ini deprecated /man/10/print +deprecated /man/2/w3c-uris deprecated /man/3/ip deprecated /man/9/scrollbar +depressingly /man/2/w3c-uris depth /man/1/alphabet-fs depth /man/1/fs depth /man/1/wm-misc @@ -14105,6 +14240,8 @@ derived /man/10/0intro derived /man/10/c2l derived /man/2/styxservers derived /man/2/w3c-css +derived /man/2/w3c-uris +derived /man/7/cddb derived /man/9/0intro derived /man/9/1copyright des /man/2/keyring-0intro @@ -14315,6 +14452,7 @@ describing /man/2/convcs describing /man/2/dbm describing /man/2/dis describing /man/2/filter +describing /man/2/rfc822 describing /man/2/security-ssl describing /man/2/spree-allow describing /man/2/styxservers-nametree @@ -14339,6 +14477,7 @@ descriptions /man/1/sh-std descriptions /man/1/unicode descriptions /man/10/qio descriptions /man/2/draw-font +descriptions /man/2/rfc822 descriptions /man/2/security-0intro descriptions /man/4/registry descriptions /man/5/0intro @@ -14629,6 +14768,7 @@ details /man/3/prog details /man/4/archfs details /man/6/colour details /man/6/image +details /man/7/cddb details /man/8/dhcp details /man/9/bind details /man/9/canvas @@ -15313,6 +15453,7 @@ diagnostics /man/2/sys-iounit diagnostics /man/2/sys-pipe diagnostics /man/2/virgil diagnostics /man/2/w3c-css +diagnostics /man/2/xml diagnostics /man/3/boot diagnostics /man/3/cap diagnostics /man/3/cmd @@ -15356,6 +15497,7 @@ dial /man/4/cpu dial /man/4/export dial /man/8/collabsrv dial /man/8/cs +dial /man/8/httpd dial /man/8/ping dial /man/8/rstyxd dial /man/8/styxchat @@ -15802,6 +15944,7 @@ directories /man/8/mkfs directory /man/1/0intro directory /man/1/acme directory /man/1/alphabet-fs +directory /man/1/ar directory /man/1/basename directory /man/1/bind directory /man/1/blur @@ -16020,6 +16163,7 @@ dis /man/1/emu dis /man/1/fs dis /man/1/grid-ns dis /man/1/limbo +dis /man/1/man dis /man/1/mash dis /man/1/mash-make dis /man/1/mk @@ -16061,6 +16205,7 @@ dis /man/6/proto dis /man/6/sbl dis /man/8/collabsrv dis /man/8/init +dis /man/8/shutdown dis /man/8/srv dis /man/8/svc dis.b /man/2/dis @@ -16168,6 +16313,7 @@ discarded /man/8/changelogin discarded /man/9/send discarding /man/1/charon discarding /man/2/bufio +discards /man/1/ar discards /man/10/allocb discards /man/10/iar discards /man/10/plan9.ini @@ -16203,6 +16349,7 @@ discussed /man/10/qio discussed /man/2/bufio discussed /man/2/keyring-0intro discussed /man/2/sys-stat +discussed /man/2/w3c-uris discussion /man/10/2c discussion /man/2/draw-image discussion /man/3/draw @@ -16244,6 +16391,7 @@ diskblocks.b /man/2/diskblocks diskblocks.m /man/2/diskblocks diskette /man/8/prep diskettes /man/8/prep +diskid /man/7/cddb disks /man/10/9load disks /man/2/disks disks /man/2/scsiio @@ -16813,6 +16961,7 @@ dossrv /man/10/9load dossrv /man/3/ds dossrv /man/4/0intro dossrv /man/4/dossrv +dossrv /man/7/cddb dossrv /man/8/init dossrv /man/8/prep dossrv.b /man/4/dossrv @@ -16847,6 +16996,7 @@ double /man/10/c2l double /man/10/print double /man/10/sleep double /man/2/cfg +double /man/2/csv double /man/2/math-export double /man/2/math-fp double /man/6/attrdb @@ -16856,6 +17006,7 @@ double /man/8/prep double /man/9/bind double /man/9/entry double /man/9/text +doubled /man/2/csv doubled /man/2/string doubled /man/9/bind doublequote /man/1/sh @@ -17152,6 +17303,7 @@ dropped /man/3/pbus dropping /man/1/wm-misc drops /man/3/eia drops /man/3/ip +drqtpmx /man/1/ar drqtpmx /man/10/iar ds /man/1/units ds /man/3/ds @@ -17182,6 +17334,7 @@ dt /man/6/man dtag /man/9/canvas dtop /man/2/spree-cardlib dtr /man/3/eia +dtt /man/7/cddb dtype /man/2/disks dtype /man/2/palmfile dtype /man/2/styxservers @@ -17213,6 +17366,7 @@ dump /man/10/acid dump /man/4/acme dump /man/8/styxchat dumpdir /man/4/acme +dumped /man/7/cddb dumping /man/1/xd dumps /man/1/xd dumps /man/10/panic @@ -17237,6 +17391,7 @@ duplicated /man/1/uniq duplicated /man/10/9load duplicated /man/2/readdir duplicated /man/8/kfscmd +duplicates /man/1/ar duplicates /man/1/disdep duplicates /man/10/iar duplicates /man/4/registry @@ -17553,6 +17708,7 @@ efr /man/1/cprof eg /man/1/keyboard eg /man/1/kill eg /man/1/netstat +eg /man/1/os eg /man/1/timestamp eg /man/1/tiny eg /man/1/webgrab @@ -17585,6 +17741,7 @@ eg /man/2/palmfile eg /man/2/plumbmsg eg /man/2/print eg /man/2/registries +eg /man/2/rfc822 eg /man/2/secstore eg /man/2/security-login eg /man/2/srv @@ -17745,6 +17902,7 @@ els /man/2/names els /man/2/sexprs els /man/2/ubfa elseaction /man/1/sh-std +elsewhere /man/1/ar elsewhere /man/1/dmview elsewhere /man/1/session elsewhere /man/1/sh @@ -17762,6 +17920,7 @@ email /man/1/mux emanating /man/1/sh-file2chan embedded /man/1/ebook embedded /man/2/asn1 +embedded /man/2/csv embedded /man/2/ip embedded /man/2/math-0intro embedded /man/9/panel @@ -17953,6 +18112,8 @@ ename /man/5/error ename /man/8/styxchat enc /man/2/encoding enc /man/2/ida +enc /man/2/rfc822 +enc /man/2/w3c-uris enc /man/3/audio enc /man/3/tls enc /man/6/audio @@ -17993,6 +18154,7 @@ encode /man/2/encoding encode /man/2/filter-slip encode /man/2/keyring-0intro encode /man/2/palmfile +encode /man/2/w3c-uris encode /man/3/tls encode /man/6/dis encode /man/6/image @@ -18014,6 +18176,8 @@ encoded /man/2/keyring-crypt encoded /man/2/keyring-ipint encoded /man/2/math-export encoded /man/2/palmfile +encoded /man/2/rfc822 +encoded /man/2/w3c-uris encoded /man/2/wmsrv encoded /man/3/tls encoded /man/3/tv @@ -18053,10 +18217,12 @@ encoding /man/2/keyring-0intro encoding /man/2/keyring-getmsg encoding /man/2/palmfile encoding /man/2/plumbmsg +encoding /man/2/rfc822 encoding /man/2/secstore encoding /man/2/sexprs encoding /man/2/sys-print encoding /man/2/ubfa +encoding /man/2/w3c-uris encoding /man/3/cons encoding /man/5/stat encoding /man/6/audio @@ -18071,7 +18237,9 @@ encoding.m /man/2/encoding encodings /man/1/charon encodings /man/2/asn1 encodings /man/2/encoding +encodings /man/2/rfc822 encodings /man/2/sexprs +encodings /man/2/w3c-uris encodings /man/6/sexprs encountering /man/10/9load encountering /man/2/bufio @@ -18145,6 +18313,7 @@ endarrow /man/2/draw-image endcontrol /man/1/wm enddisc /man/2/draw-image ended /man/10/error +ended /man/2/rfc822 ended /man/2/wait ended /man/3/pointer endian /man/1/auplay @@ -18610,6 +18779,7 @@ eo /man/1/itest eoc /man/2/asn1 eof /man/2/bufio eof /man/2/ir +eof /man/2/rfc822 eof /man/4/spree eoff /man/2/dis eol /man/2/regex @@ -18635,6 +18805,7 @@ epoch /man/1/timestamp epoch /man/10/seconds epoch /man/2/daytime epoch /man/2/palmfile +epoch /man/2/rfc822 epoch /man/2/sys-millisec epoch /man/2/sys-stat epoch /man/3/cons @@ -18660,9 +18831,11 @@ eq /man/2/sexprs eq /man/2/spki eq /man/2/ubfa eq /man/2/venti +eq /man/2/w3c-uris eq /man/6/man eqaddr /man/2/ether eqchan /man/10/newchan +eqf /man/2/w3c-uris eqn /man/6/man eqqid /man/10/newchan equal /man/1/diff @@ -18690,6 +18863,7 @@ equal /man/2/stringinttab equal /man/2/styxservers-nametree equal /man/2/sys-pctl equal /man/2/ubfa +equal /man/2/w3c-uris equal /man/3/dbg equal /man/3/ssl equal /man/5/read @@ -18743,10 +18917,12 @@ equivalent /man/2/geodesy equivalent /man/2/ir equivalent /man/2/keyring-rc4 equivalent /man/2/math-export +equivalent /man/2/rfc822 equivalent /man/2/secstore equivalent /man/2/sexprs equivalent /man/2/sys-dirread equivalent /man/2/sys-read +equivalent /man/2/w3c-uris equivalent /man/2/wmsrv equivalent /man/3/cmd equivalent /man/3/draw @@ -18891,6 +19067,7 @@ error /man/2/bloomfilter error /man/2/bufio error /man/2/cfg error /man/2/convcs +error /man/2/csv error /man/2/dbm error /man/2/debug error /man/2/dhcpclient @@ -18954,6 +19131,7 @@ error /man/2/translate error /man/2/ubfa error /man/2/venti error /man/2/w3c-css +error /man/2/w3c-uris error /man/2/w3c-xpointers error /man/2/wait error /man/2/wmsrv @@ -19068,6 +19246,7 @@ escape /man/1/xd escape /man/10/acid escape /man/2/filter-slip escape /man/2/sexprs +escape /man/2/w3c-uris escape /man/6/keyboard escape /man/6/sexprs escape /man/6/translate @@ -19075,9 +19254,11 @@ escape /man/9/0intro escaped /man/1/mash escaped /man/1/mdb escaped /man/2/tk +escaped /man/2/w3c-uris escaped /man/9/0intro escaped /man/9/bind escapes /man/10/atoi +escapes /man/2/w3c-uris escapes /man/6/sexprs escaping /man/1/mash eschews /man/6/keyboard @@ -19165,6 +19346,7 @@ etc /man/2/draw-image etc /man/2/ir etc /man/2/math-elem etc /man/2/prefab-element +etc /man/2/rfc822 etc /man/2/spree etc /man/2/styx etc /man/2/styxservers @@ -19365,6 +19547,7 @@ ex /man/6/man exact /man/1/0intro exact /man/1/look exact /man/1/sh-std +exact /man/1/sh-tk exact /man/1/wm exact /man/2/asn1 exact /man/2/tkclient @@ -19459,6 +19642,7 @@ exceed /man/2/diskblocks exceed /man/8/prep exceeded /man/1/charon exceeded /man/10/qio +exceeded /man/2/rfc822 exceeded /man/3/ip exceeds /man/1/charon exceeds /man/10/dmainit @@ -19527,6 +19711,7 @@ except /man/2/sys-dial except /man/2/sys-pctl except /man/2/sys-print except /man/2/sys-stat +except /man/2/w3c-uris except /man/2/wmsrv except /man/3/cmd except /man/3/flash @@ -19575,6 +19760,7 @@ exception /man/2/math-0intro exception /man/2/math-fp exception /man/2/sh exception /man/2/sys-pipe +exception /man/2/w3c-uris exception /man/2/xml exception /man/3/pipe exception /man/3/prog @@ -19690,6 +19876,7 @@ exclusive /man/1/mathcalc exclusive /man/10/ar exclusive /man/10/dev exclusive /man/10/qlock +exclusive /man/2/keyring-ipint exclusive /man/2/lock exclusive /man/2/spree-cardlib exclusive /man/2/sys-export @@ -19910,6 +20097,7 @@ exhaustively /man/2/asn1 exist /man/1/0intro exist /man/1/acme exist /man/1/alphabet-fs +exist /man/1/ar exist /man/1/calendar exist /man/1/charon exist /man/1/cprof @@ -20147,6 +20335,7 @@ exits /man/1/listen exits /man/1/mathcalc exits /man/1/mk exits /man/1/netkey +exits /man/1/os exits /man/1/sh exits /man/1/wm-sh exits /man/10/mk @@ -20429,6 +20618,7 @@ expressed /man/3/pnp expressed /man/3/rtc expressed /man/6/sexprs expressed /man/8/cs +expressed /man/8/httpd expresses /man/2/spki expression /man/1/acme expression /man/1/alphabet-abc @@ -20542,6 +20732,7 @@ extension /man/4/dossrv extension /man/6/dis extensions /man/1/limbo extensions /man/10/2c +extensions /man/2/rfc822 extensions /man/3/cons extensions /man/4/dossrv extensive /man/10/9load @@ -20622,6 +20813,7 @@ extra /man/9/grid extra /man/9/options extra /man/9/pack extra /man/9/text +extract /man/1/ar extract /man/1/gettar extract /man/1/secstore extract /man/1/sh-arg @@ -20633,6 +20825,7 @@ extract /man/2/convcs extract /man/2/disks extract /man/2/print extract /man/2/sexprs +extracted /man/1/ar extracted /man/1/gettar extracted /man/1/sh-arg extracted /man/10/iar @@ -20853,6 +21046,7 @@ false /man/2/palmfile false /man/2/secstore false /man/2/sh false /man/2/styxservers +false /man/2/w3c-uris false /man/9/checkbutton false /man/9/grid false /man/9/options @@ -20956,6 +21150,7 @@ fd /man/10/print fd /man/10/styxserver fd /man/2/attrdb fd /man/2/bufio +fd /man/2/csv fd /man/2/dhcpclient fd /man/2/diskblocks fd /man/2/disks @@ -20972,6 +21167,7 @@ fd /man/2/keyring-sha1 fd /man/2/print fd /man/2/readdir fd /man/2/registries +fd /man/2/rfc822 fd /man/2/scsiio fd /man/2/security-auth fd /man/2/security-ssl @@ -21123,6 +21319,7 @@ fids /man/2/styxservers fids /man/5/0intro fids /man/5/version field's /man/2/format +fieldname /man/2/rfc822 fields /man/1/alphabet-fs fields /man/1/fs fields /man/1/gettar @@ -21142,6 +21339,7 @@ fields /man/10/parsecmd fields /man/10/styx fields /man/10/styxserver fields /man/2/crc +fields /man/2/csv fields /man/2/dhcpclient fields /man/2/draw-screen fields /man/2/format @@ -21151,8 +21349,10 @@ fields /man/2/plumbmsg fields /man/2/prefab-element fields /man/2/print fields /man/2/prof +fields /man/2/rfc822 fields /man/2/spki fields /man/2/sys-stat +fields /man/2/w3c-uris fields /man/3/arch fields /man/3/cmd fields /man/3/cons @@ -21191,6 +21391,7 @@ file /man/1/0intro file /man/1/acme file /man/1/alphabet-fs file /man/1/alphabet-main +file /man/1/ar file /man/1/asm file /man/1/auplay file /man/1/avr @@ -21340,6 +21541,7 @@ file /man/2/cfg file /man/2/command file /man/2/convcs file /man/2/crc +file /man/2/csv file /man/2/daytime file /man/2/dbm file /man/2/debug @@ -21377,6 +21579,7 @@ file /man/2/prof file /man/2/pslib file /man/2/readdir file /man/2/registries +file /man/2/rfc822 file /man/2/scsiio file /man/2/secstore file /man/2/security-auth @@ -21666,6 +21869,7 @@ files /man/1/0intro files /man/1/9win files /man/1/acme files /man/1/alphabet-fs +files /man/1/ar files /man/1/auplay files /man/1/bind files /man/1/blur @@ -21778,6 +21982,7 @@ files /man/2/alphabet-intro files /man/2/attrdb files /man/2/bufio files /man/2/convcs +files /man/2/csv files /man/2/dbm files /man/2/debug files /man/2/devpointer @@ -21800,6 +22005,7 @@ files /man/2/plumbmsg files /man/2/print files /man/2/prof files /man/2/readdir +files /man/2/rfc822 files /man/2/scsiio files /man/2/secstore files /man/2/security-0intro @@ -22095,6 +22301,7 @@ findpair /man/2/attrdb finds /man/1/acme finds /man/1/diff finds /man/1/disdep +finds /man/1/man finds /man/1/sh-alphabet finds /man/1/strings finds /man/10/9load @@ -22320,6 +22527,7 @@ floating /man/10/print floating /man/2/math-0intro floating /man/2/math-export floating /man/2/math-fp +floating /man/2/rfc822 floating /man/2/sys-print floating /man/9/canvas floating /man/9/text @@ -22417,6 +22625,7 @@ fn /man/2/cfg fn /man/2/command fn /man/2/convcs fn /man/2/crc +fn /man/2/csv fn /man/2/daytime fn /man/2/dbm fn /man/2/debug @@ -22488,6 +22697,7 @@ fn /man/2/rand fn /man/2/readdir fn /man/2/regex fn /man/2/registries +fn /man/2/rfc822 fn /man/2/scsiio fn /man/2/secstore fn /man/2/security-auth @@ -22549,6 +22759,7 @@ fn /man/2/venti fn /man/2/virgil fn /man/2/volume fn /man/2/w3c-css +fn /man/2/w3c-uris fn /man/2/w3c-xpointers fn /man/2/wait fn /man/2/wmclient @@ -22568,6 +22779,7 @@ fnn /man/1/mux fns.h /man/10/0intro fnvram /man/3/tinyfs focus /man/1/wm +focus /man/2/rfc822 focus /man/9/0intro focus /man/9/bind focus /man/9/button @@ -22683,6 +22895,7 @@ footypes.b /man/2/alphabet-intro footypes.m /man/2/alphabet-intro fopen /man/1/yacc fopen /man/2/bufio +fopen /man/2/xml force100 /man/10/plan9.ini forced /man/10/delay forces /man/1/charon @@ -22747,6 +22960,7 @@ format /man/1/0intro format /man/1/acme format /man/1/alphabet-fs format /man/1/alphabet-main +format /man/1/ar format /man/1/auplay format /man/1/avr format /man/1/brutus @@ -22801,6 +23015,7 @@ format /man/2/attrdb format /man/2/bufio format /man/2/cfg format /man/2/convcs +format /man/2/csv format /man/2/daytime format /man/2/devpointer format /man/2/dis @@ -22824,6 +23039,7 @@ format /man/2/palmfile format /man/2/plumbmsg format /man/2/prefab-element format /man/2/print +format /man/2/rfc822 format /man/2/sets format /man/2/smtp format /man/2/styx @@ -23003,6 +23219,7 @@ forms /man/10/conf forms /man/2/dhcpclient forms /man/2/ip forms /man/2/math-0intro +forms /man/2/rfc822 forms /man/2/sexprs forms /man/2/spki forms /man/2/styxservers-nametree @@ -23109,6 +23326,7 @@ fractions /man/9/text frag /man/2/ida fragment /man/2/ida fragment /man/2/plumbmsg +fragment /man/2/w3c-uris fragments /man/2/ida frags /man/2/ida frame /man/1/charon @@ -23166,6 +23384,7 @@ freed /man/2/registries freed /man/3/cons freed /man/3/draw freed /man/5/version +freedb.freedb.org /man/7/cddb freedom /man/1/sh freeing /man/1/mprof freeing /man/10/allocb @@ -23207,7 +23426,7 @@ fromfile /man/1/mv fromfiles /man/1/cp fromid /man/2/spree fromuser /man/3/cap -fromwho /man/2/smtp +fromwhom /man/2/smtp fronly /man/2/palmfile front /man/1/acme front /man/1/deb @@ -23271,6 +23490,7 @@ ftlctl /man/3/ftl ftldata /man/3/ftl ftldata /man/8/ftl ftp /man/1/charon +ftp /man/2/w3c-uris ftp /man/4/9srvfs ftp /man/4/ftpfs ftp.vitanuova.com /man/4/ftpfs @@ -23404,6 +23624,7 @@ further /man/2/sexprs further /man/2/spki further /man/2/spki-verifier further /man/2/styxservers +further /man/2/w3c-uris further /man/3/cap further /man/3/cmd further /man/3/draw @@ -23630,6 +23851,8 @@ generic /man/10/plan9.ini generic /man/2/alphabet-intro generic /man/2/convcs generic /man/2/disks +generic /man/2/rfc822 +generic /man/2/w3c-uris generic /man/2/xml generic /man/6/proto generic /man/8/mkfs @@ -23684,6 +23907,7 @@ getb /man/2/bufio getbtos /man/2/convcs getbytearray /man/2/keyring-getstring getc /man/2/bufio +getc /man/2/rfc822 getcard /man/2/spree-cardlib getcards /man/2/spree-cardlib getcsv /man/1/sh-csv @@ -23703,6 +23927,7 @@ getip /man/2/dhcpclient getips /man/2/dhcpclient getkeys /man/2/cfg getline /man/1/read +getline /man/2/csv getlines /man/1/sh-csv getlines /man/1/sh-sexprs getlines /man/1/sh-std @@ -23738,6 +23963,7 @@ gfer /man/3/gpio gg /man/9/types gh /man/3/tv ghost /man/10/panic +gid /man/1/ar gid /man/10/ar gid /man/10/devattach gid /man/10/iar @@ -23850,6 +24076,7 @@ gradually /man/10/panic grained /man/1/wm-misc gram.y /man/10/mk grammar /man/1/yacc +grammar /man/2/rfc822 grammar /man/2/w3c-css grammar /man/2/w3c-xpointers grammar /man/6/ubfa @@ -24036,6 +24263,7 @@ grouping /man/1/mash grouping /man/1/mc grouping /man/1/units grouping /man/9/menu +groups /man/1/ar groups /man/1/ls groups /man/10/iar groups /man/2/attrdb @@ -24113,6 +24341,7 @@ gux /man/1/cp gw /man/3/ip gwip /man/3/ip gz /man/1/gzip +gzip /man/1/ar gzip /man/1/gzip gzip /man/10/5cv gzip /man/10/9load @@ -24168,6 +24397,7 @@ handled /man/10/conf handled /man/10/qio handled /man/2/cfg handled /man/2/sys-export +handled /man/2/w3c-uris handled /man/3/cons handled /man/3/ds handled /man/5/flush @@ -24278,6 +24508,7 @@ hardware /man/3/vga hardware /man/3/vid hardware /man/8/bootpd hasattr /man/2/attrdb +hasauthority /man/2/w3c-uris hasexcept /man/6/dis hash /man/1/alphabet-main hash /man/1/secstore @@ -24311,6 +24542,7 @@ hash /man/6/dis hash /man/6/keys hash /man/6/keytext hash /man/6/login +hash /man/7/cddb hash.b /man/2/hash hash.m /man/2/hash hashalg /man/3/tls @@ -24384,6 +24616,7 @@ header /man/2/asn1 header /man/2/dis header /man/2/filter-deflate header /man/2/keyring-getmsg +header /man/2/rfc822 header /man/2/spree header /man/3/ether header /man/3/ftl @@ -24401,6 +24634,7 @@ header /man/8/create headerless /man/10/5cv headers /man/10/allocb headers /man/10/inm +headers /man/2/rfc822 headers /man/2/secstore headers /man/3/ip headers /man/3/pbus @@ -24482,6 +24716,7 @@ helmert /man/2/geodesy help.html /man/1/charon helper /man/2/alphabet-intro helper /man/2/wmsrv +helpers /man/2/rfc822 helpful /man/1/unicode helpful /man/8/cs helpful /man/8/rip @@ -24533,6 +24768,7 @@ hexadecimal /man/2/registries hexadecimal /man/2/sets hexadecimal /man/2/sexprs hexadecimal /man/2/sys-print +hexadecimal /man/2/w3c-uris hexadecimal /man/3/arch hexadecimal /man/3/dbg hexadecimal /man/3/ether @@ -24625,6 +24861,7 @@ higher /man/10/lock higher /man/10/xalloc higher /man/2/draw-0intro higher /man/2/draw-image +higher /man/2/rfc822 higher /man/2/sets higher /man/2/wmlib higher /man/3/flash @@ -24860,6 +25097,7 @@ host /man/2/srv host /man/2/sys-dial host /man/2/tftp host /man/2/virgil +host /man/2/w3c-uris host /man/3/audio host /man/3/boot host /man/3/cap @@ -24893,6 +25131,7 @@ host /man/8/rdbgsrv host /man/8/register host /man/8/signer host /man/8/svc +host's /man/1/os host's /man/2/ip host's /man/2/sys-dial host's /man/3/cmd @@ -24942,19 +25181,23 @@ ht /man/2/hash html /man/1/charon html /man/1/cook html /man/1/ebook +html /man/1/man html /man/1/webgrab html /man/2/stringinttab http /man/1/charon http /man/1/webgrab http /man/2/dhcpclient +http /man/2/rfc822 http /man/2/sexprs http /man/2/w3c-css +http /man/2/w3c-uris http /man/2/w3c-xpointers http /man/2/xml http /man/6/ubfa http /man/8/httpd http.suff /man/8/httpd http1.0 /man/1/charon +httpd /man/2/w3c-uris httpd /man/8/httpd httpd.debug /man/8/httpd httpd.log /man/8/httpd @@ -25022,6 +25265,7 @@ ia5string /man/2/asn1 iallocb /man/10/allocb ialt /man/2/dis iamax /man/2/math-linalg +iar /man/1/ar iar /man/10/2l iar /man/10/ar iar /man/10/iar @@ -25231,6 +25475,7 @@ identifier /man/8/bootpd identifiers /man/2/0intro identifiers /man/2/asn1 identifiers /man/2/spree +identifiers /man/2/w3c-uris identifiers /man/3/draw identifiers /man/3/prog identifiers /man/4/spree @@ -25315,6 +25560,7 @@ idiomatic /man/2/command idioms /man/1/acme idiosyncratic /man/6/keyboard idle /man/10/dmainit +ids /man/1/ar ids /man/1/deb ids /man/1/kill ids /man/10/iar @@ -25329,6 +25575,7 @@ ids /man/3/tinyfs ids /man/4/acme ids /man/4/kfs ids /man/4/tarfs +ids /man/7/cddb ids /man/8/create ids /man/9/canvas idstring /man/3/pnp @@ -25352,6 +25599,7 @@ ie /man/2/ip ie /man/2/palmfile ie /man/2/plumbmsg ie /man/2/registries +ie /man/2/rfc822 ie /man/2/secstore ie /man/2/sexprs ie /man/2/spki @@ -25386,6 +25634,7 @@ ifcdir /man/8/dhcp ifdef /man/10/2c iff /man/2/ether iff /man/2/names +iff /man/2/rfc822 iff /man/2/sexprs iff /man/2/spki iff /man/6/dis @@ -25428,10 +25677,13 @@ ignoring /man/10/2c ignoring /man/10/newchan ignoring /man/2/draw-0intro ignoring /man/2/prefab-compound +ignoring /man/2/rfc822 ignoring /man/3/draw ignoring /man/8/prep +ii /man/2/w3c-uris iic.c /man/3/i2c iii /man/10/plan9.ini +iii /man/2/w3c-uris il /man/1/netstat il /man/3/ip il /man/6/ndb @@ -25493,6 +25745,7 @@ image /man/2/prefab-element image /man/2/prefab-style image /man/2/print image /man/2/pslib +image /man/2/rfc822 image /man/2/selectfile image /man/2/tk image /man/2/wmclient @@ -25810,6 +26063,7 @@ import /man/2/ip import /man/2/itslib import /man/2/math-export import /man/2/plumbmsg +import /man/2/rfc822 import /man/2/sets import /man/2/sh import /man/2/spki-verifier @@ -25825,6 +26079,7 @@ import /man/2/tk import /man/2/translate import /man/2/venti import /man/2/w3c-css +import /man/2/w3c-uris import /man/2/w3c-xpointers import /man/2/wmsrv import /man/2/xml @@ -25945,6 +26200,7 @@ include /man/2/cfg include /man/2/command include /man/2/convcs include /man/2/crc +include /man/2/csv include /man/2/daytime include /man/2/dbm include /man/2/debug @@ -26021,6 +26277,7 @@ include /man/2/rand include /man/2/readdir include /man/2/regex include /man/2/registries +include /man/2/rfc822 include /man/2/scsiio include /man/2/secstore include /man/2/security-0intro @@ -26085,6 +26342,7 @@ include /man/2/venti include /man/2/virgil include /man/2/volume include /man/2/w3c-css +include /man/2/w3c-uris include /man/2/w3c-xpointers include /man/2/wmclient include /man/2/wmlib @@ -26141,6 +26399,7 @@ included /man/10/kproc included /man/10/mk included /man/10/plan9.ini included /man/2/cfg +included /man/2/csv included /man/2/encoding included /man/2/keyring-sha1 included /man/2/prefab-compound @@ -26179,6 +26438,7 @@ includes /man/2/keyring-ipint includes /man/2/security-0intro includes /man/2/sys-print includes /man/2/w3c-css +includes /man/2/w3c-uris includes /man/3/0intro includes /man/3/eia includes /man/3/pbus @@ -26197,6 +26457,7 @@ inclusion /man/2/prefab-element inclusive /man/1/mc inclusive /man/1/strings inclusive /man/10/plan9.ini +inclusive /man/2/keyring-ipint inclusive /man/2/sets inclusive /man/2/spree-cardlib inclusive /man/2/string @@ -26311,6 +26572,7 @@ indeed /man/1/0intro indeed /man/10/intrenable indeed /man/2/security-0intro indeed /man/2/sys-fd2path +indeed /man/2/w3c-uris indeed /man/3/srv9 indeed /man/4/9srvfs indeed /man/4/ramfile @@ -26343,6 +26605,7 @@ independent /man/2/draw-display independent /man/2/draw-image independent /man/2/styx independent /man/2/sys-0intro +independent /man/2/w3c-uris independent /man/3/audio independent /man/3/draw independent /man/3/env @@ -26606,6 +26869,7 @@ infer /man/2/ir inferface /man/1/wm inferno /man/1/0intro inferno /man/1/9win +inferno /man/1/ar inferno /man/1/auplay inferno /man/1/avr inferno /man/1/bind @@ -26842,6 +27106,7 @@ init /man/2/cfg init /man/2/command init /man/2/convcs init /man/2/crc +init /man/2/csv init /man/2/dbm init /man/2/debug init /man/2/devpointer @@ -26878,6 +27143,7 @@ init /man/2/pslib init /man/2/rand init /man/2/readdir init /man/2/registries +init /man/2/rfc822 init /man/2/scsiio init /man/2/secstore init /man/2/security-auth @@ -26906,6 +27172,7 @@ init /man/2/translate init /man/2/ubfa init /man/2/venti init /man/2/w3c-css +init /man/2/w3c-uris init /man/2/w3c-xpointers init /man/2/wait init /man/2/wmclient @@ -26924,6 +27191,7 @@ init /man/4/namespace init /man/8/init initbuiltin /man/2/sh initialisation /man/1/emu +initialisation /man/1/sh initialisation /man/1/toolbar initialisation /man/10/9load initialisation /man/10/allocb @@ -26994,6 +27262,7 @@ initialised /man/2/draw-context initialised /man/2/draw-display initialised /man/2/itslib initialised /man/2/pslib +initialised /man/2/rfc822 initialised /man/2/sh initialised /man/2/spree initialised /man/2/sys-stat @@ -27210,6 +27479,7 @@ input /man/2/ir input /man/2/keyring-getstring input /man/2/math-export input /man/2/plumbmsg +input /man/2/rfc822 input /man/2/sexprs input /man/2/styx input /man/2/sys-0intro @@ -27404,6 +27674,7 @@ installs /man/8/create installs /man/8/prep instance /man/1/acme instance /man/1/alphabet-fs +instance /man/1/ar instance /man/1/calendar instance /man/1/collab instance /man/1/collab-clients @@ -27441,6 +27712,7 @@ instance /man/2/asn1 instance /man/2/bufio instance /man/2/bufio-chanfill instance /man/2/command +instance /man/2/csv instance /man/2/dhcpclient instance /man/2/dialog instance /man/2/draw-0intro @@ -27455,6 +27727,7 @@ instance /man/2/keyset instance /man/2/palmfile instance /man/2/print instance /man/2/registries +instance /man/2/rfc822 instance /man/2/secstore instance /man/2/security-auth instance /man/2/selectfile @@ -27474,6 +27747,7 @@ instance /man/2/sys-print instance /man/2/sys-self instance /man/2/sys-stat instance /man/2/ubfa +instance /man/2/w3c-uris instance /man/2/wait instance /man/2/xml instance /man/3/dbg @@ -27511,6 +27785,7 @@ instances /man/10/error instances /man/2/filter instances /man/2/styxservers instances /man/2/sys-dup +instances /man/2/w3c-uris instances /man/3/draw instances /man/3/ip instances /man/3/srv @@ -27666,6 +27941,7 @@ int /man/2/rand int /man/2/readdir int /man/2/regex int /man/2/registries +int /man/2/rfc822 int /man/2/scsiio int /man/2/secstore int /man/2/security-auth @@ -27719,6 +27995,7 @@ int /man/2/ubfa int /man/2/venti int /man/2/volume int /man/2/w3c-css +int /man/2/w3c-uris int /man/2/w3c-xpointers int /man/2/wait int /man/2/wmclient @@ -28227,12 +28504,14 @@ internet /man/1/mux internet /man/2/dhcpclient internet /man/2/ip internet /man/2/keyring-sha1 +internet /man/2/rfc822 internet /man/2/sexprs internet /man/2/srv internet /man/2/tftp internet /man/3/ip internet /man/6/ndb internet /man/6/sexprs +internet /man/7/cddb internet /man/8/bootpd internet /man/8/cs internet /man/8/dns @@ -28273,6 +28552,7 @@ interpretation /man/2/names interpretation /man/2/registries interpretation /man/2/styxservers-nametree interpretation /man/2/sys-fversion +interpretation /man/2/w3c-uris interpretation /man/3/cmd interpretation /man/3/fpga interpretation /man/3/ip @@ -28497,6 +28777,7 @@ introduced /man/1/mc introduced /man/2/cfg introduced /man/2/w3c-css introduces /man/2/0intro +introduces /man/2/w3c-uris introduction /man/1/0intro introduction /man/10/0intro introduction /man/2/0intro @@ -28521,6 +28802,7 @@ ints /man/3/prog inttoip /man/2/keyring-ipint inval /man/2/math-fp inval /man/3/dbg +invalid /man/1/ar invalid /man/1/sh invalid /man/1/sh-std invalid /man/10/c2l @@ -28718,22 +29000,27 @@ io /man/3/i2c io.h /man/10/0intro ioalloc /man/3/arch iob /man/2/format +iob /man/2/xml iob /man/3/arch iobfd /man/3/arch iobuf /man/1/yacc iobuf /man/2/attrdb iobuf /man/2/bufio iobuf /man/2/bufio-chanfill +iobuf /man/2/csv iobuf /man/2/format iobuf /man/2/imagefile iobuf /man/2/pslib +iobuf /man/2/rfc822 iobuf /man/2/sexprs iobuf /man/2/ubfa +iobuf /man/2/xml iobuf.gets /man/6/dis ioexclude /man/10/plan9.ini iohdrsz /man/10/styx iohdrsz /man/2/styx iol /man/3/arch +ior /man/2/keyring-ipint iostats /man/4/iostats iostats.b /man/4/iostats iostats.out /man/4/iostats @@ -28778,7 +29065,6 @@ ip /man/8/cs ip /man/8/dhcp ip /man/8/dns ip /man/8/fpgaload -ip /man/8/httpd ip /man/8/init ip /man/8/logind ip /man/8/ping @@ -28889,6 +29175,7 @@ isa /man/10/dmainit isa /man/10/plan9.ini isa /man/3/pnp isa.h /man/6/dis +isabsolute /man/2/w3c-uris isaconfig /man/10/inb isatom /man/2/ubfa isbinary /man/2/ubfa @@ -28929,6 +29216,7 @@ isn't /man/9/text isnan /man/2/math-fp iso /man/1/charon iso /man/2/palmfile +iso /man/2/rfc822 iso /man/4/dossrv iso /man/6/utf iso11172 /man/3/mpeg @@ -29307,6 +29595,7 @@ kexec /man/2/tftp kexec /man/3/boot key /man/1/acme key /man/1/alphabet-main +key /man/1/ar key /man/1/charon key /man/1/crypt key /man/1/idea @@ -29577,6 +29866,7 @@ keytext /man/6/auth keytext /man/6/keytext keyword /man/1/man keyword /man/1/mc +keyword /man/2/keyring-ipint keywords /man/1/man keywords /man/1/mash keywords /man/10/c2l @@ -29615,6 +29905,7 @@ kids /man/2/prefab-element kill /man/1/acme kill /man/1/grid-monitor kill /man/1/kill +kill /man/1/os kill /man/1/ps kill /man/1/wm-misc kill /man/10/acid @@ -29634,6 +29925,7 @@ kill /man/8/cs kill.b /man/1/kill killed /man/1/deb killed /man/1/grid-monitor +killed /man/1/os killed /man/10/kproc killed /man/3/cmd killed /man/3/prog @@ -29766,6 +30058,7 @@ labour /man/1/alphabet-abc labour /man/1/alphabet-grid labs /man/10/0intro labs /man/2/dialog +lack /man/1/os lack /man/1/sh lack /man/8/dns lack /man/8/ping @@ -29873,6 +30166,7 @@ latexslides /man/1/cook latexslides /man/2/stringinttab latin /man/10/kbdputc latin /man/2/palmfile +latin /man/2/rfc822 latin /man/2/sys-0intro latin /man/6/keyboard latin1 /man/2/convcs @@ -29984,7 +30278,9 @@ leading /man/1/uuencode leading /man/10/atoi leading /man/2/ip leading /man/2/math-linalg +leading /man/2/rfc822 leading /man/2/string +leading /man/2/w3c-uris leading /man/2/xml leading /man/3/cons leading /man/3/ether @@ -30279,6 +30575,7 @@ level /man/2/filter-deflate level /man/2/ida level /man/2/itslib level /man/2/prefab-compound +level /man/2/rfc822 level /man/2/scsiio level /man/2/security-0intro level /man/2/sh @@ -30350,6 +30647,7 @@ levels /man/2/keyring-0intro levels /man/2/security-0intro levels /man/2/venti lex /man/1/yacc +lex /man/2/rfc822 lex.c /man/10/mk lex.lval.v /man/1/yacc lex.o /man/10/mk @@ -30408,6 +30706,7 @@ lib /man/2/bufio lib /man/2/cfg lib /man/2/convcs lib /man/2/crc +lib /man/2/csv lib /man/2/daytime lib /man/2/dbm lib /man/2/debug @@ -30448,6 +30747,7 @@ lib /man/2/pslib lib /man/2/rand lib /man/2/readdir lib /man/2/regex +lib /man/2/rfc822 lib /man/2/scsiio lib /man/2/secstore lib /man/2/security-auth @@ -30477,6 +30777,7 @@ lib /man/2/venti lib /man/2/virgil lib /man/2/volume lib /man/2/w3c-css +lib /man/2/w3c-uris lib /man/2/w3c-xpointers lib /man/2/wmclient lib /man/2/wmlib @@ -30504,6 +30805,7 @@ lib /man/8/plumber lib /man/8/srv lib /man/8/styxmon lib /man/8/svc +lib.a /man/1/ar lib.a /man/10/iar lib.h /man/10/0intro lib9 /man/10/getfields @@ -30577,6 +30879,7 @@ libprefab /man/2/prefab-element libprefab /man/2/prefab-environ libprefab /man/2/prefab-style libprefab /man/4/namespace +libraries /man/1/ar libraries /man/10/0intro libraries /man/10/2c libraries /man/10/2l @@ -30745,6 +31048,7 @@ limit /man/10/lock limit /man/10/plan9.ini limit /man/10/qio limit /man/2/0intro +limit /man/2/rfc822 limit /man/2/sets limit /man/2/styx limit /man/3/cons @@ -30801,6 +31105,7 @@ linalg /man/2/0intro linalg /man/2/math-0intro linalg /man/2/math-linalg line's /man/2/attrdb +line's /man/2/rfc822 line's /man/9/text line.char /man/9/text linear /man/1/mash @@ -30861,6 +31166,7 @@ lines /man/2/plumbmsg lines /man/2/prefab-compound lines /man/2/print lines /man/2/prof +lines /man/2/rfc822 lines /man/2/secstore lines /man/2/smtp lines /man/3/audio @@ -30934,6 +31240,7 @@ links /man/2/wmsrv links /man/4/ftpfs links /man/6/sexprs linksys /man/10/plan9.ini +linux /man/1/ar linux /man/10/conf linux /man/10/styxserver linux /man/4/namespace @@ -30943,6 +31250,7 @@ linuxswap /man/8/prep lisp /man/2/sexprs lisp's /man/2/sexprs list /man/1/acme +list /man/1/ar list /man/1/blur list /man/1/charon list /man/1/cook @@ -31014,6 +31322,7 @@ list /man/2/attrdb list /man/2/cfg list /man/2/command list /man/2/convcs +list /man/2/csv list /man/2/debug list /man/2/dhcpclient list /man/2/dialog @@ -31041,6 +31350,7 @@ list /man/2/prefab-element list /man/2/print list /man/2/prof list /man/2/registries +list /man/2/rfc822 list /man/2/scsiio list /man/2/secstore list /man/2/security-auth @@ -31139,6 +31449,7 @@ listbox /man/9/listbox listbox's /man/9/listbox listboxes /man/1/tktester listboxes /man/9/listbox +listed /man/1/ar listed /man/1/ftree listed /man/1/grid-ns listed /man/1/grid-register @@ -31214,6 +31525,7 @@ listens /man/8/httpd listens /man/8/srv listens /man/8/svc listing /man/1/acme +listing /man/1/ar listing /man/1/asm listing /man/1/env listing /man/1/gettar @@ -31265,6 +31577,7 @@ lists /man/2/registries lists /man/2/sexprs lists /man/2/sh lists /man/2/w3c-css +lists /man/2/w3c-uris lists /man/2/w3c-xpointers lists /man/3/dynld lists /man/3/indir @@ -31364,6 +31677,7 @@ load /man/2/cfg load /man/2/command load /man/2/convcs load /man/2/crc +load /man/2/csv load /man/2/daytime load /man/2/dbm load /man/2/debug @@ -31440,6 +31754,7 @@ load /man/2/rand load /man/2/readdir load /man/2/regex load /man/2/registries +load /man/2/rfc822 load /man/2/scsiio load /man/2/secstore load /man/2/security-auth @@ -31503,6 +31818,7 @@ load /man/2/venti load /man/2/virgil load /man/2/volume load /man/2/w3c-css +load /man/2/w3c-uris load /man/2/w3c-xpointers load /man/2/wait load /man/2/wmclient @@ -31589,6 +31905,7 @@ loader /man/10/5cv loader /man/10/dynld loader /man/2/dis loader /man/6/dis +loaders /man/1/ar loaders /man/10/2c loaders /man/10/2l loaders /man/10/9load @@ -31852,6 +32169,7 @@ logwindow /man/1/logwindow logwindow /man/4/logfile logwindow.b /man/1/logwindow log₂ /man/2/bloomfilter +lone /man/2/csv longer /man/1/acme longer /man/1/miniterm longer /man/1/prof @@ -31904,7 +32222,6 @@ looking /man/2/spree-objstore looking /man/6/ndb looking /man/8/httpd lookman /man/1/man -lookman.b /man/1/man looks /man/1/0intro looks /man/1/ps looks /man/1/sh @@ -31952,6 +32269,7 @@ loops /man/10/lock loops /man/2/math-linalg loops /man/6/colour loosely /man/1/sh +loosely /man/2/rfc822 lose /man/1/wm loses /man/2/filepat losing /man/2/sh @@ -32005,6 +32323,7 @@ lower /man/10/error lower /man/2/convcs lower /man/2/draw-rect lower /man/2/encoding +lower /man/2/rfc822 lower /man/2/security-0intro lower /man/2/sexprs lower /man/2/sh @@ -32014,6 +32333,7 @@ lower /man/2/sys-fversion lower /man/2/sys-print lower /man/2/tk lower /man/2/w3c-css +lower /man/2/w3c-uris lower /man/3/tv lower /man/6/keyboard lower /man/6/man @@ -32056,6 +32376,7 @@ lpt?raw /man/10ti925/tihost lr /man/1/yacc lr /man/6/man ls /man/1/alphabet-fs +ls /man/1/ar ls /man/1/chgrp ls /man/1/chmod ls /man/1/fs @@ -32230,6 +32551,7 @@ mail /man/2/dhcpclient mail /man/2/encoding mail /man/2/keyring-0intro mail /man/2/pop3 +mail /man/2/rfc822 mail /man/2/smtp mail /man/2/translate mail /man/4/ftpfs @@ -32240,12 +32562,11 @@ mailbox /man/2/pop3 mailboxes /man/4/namespace mailpop3 /man/1/acme mailserver /man/1/sendmail -mailserver /man/2/pop3 -mailserver /man/2/smtp main /man/1/alphabet-abc main /man/1/alphabet-fs main /man/1/alphabet-grid main /man/1/alphabet-main +main /man/1/ar main /man/1/charon main /man/1/deb main /man/1/emu @@ -32323,12 +32644,14 @@ maintained /man/2/wmlib maintained /man/3/logfs maintained /man/4/dbfs maintained /man/4/memfs +maintainer /man/1/ar maintainer /man/10/iar maintaining /man/2/convcs maintaining /man/3/draw maintaining /man/4/factotum maintaining /man/8/dhcp maintains /man/1/acme +maintains /man/1/ar maintains /man/10/devattach maintains /man/10/iar maintains /man/10/plan9.ini @@ -32369,9 +32692,11 @@ malloc /man/10/xalloc mallocz /man/10/error mallocz /man/10/malloc man.b /man/1/man +man2html /man/1/man man2txt /man/1/man man2txt.b /man/1/man manage /man/1/0intro +manage /man/1/ar manage /man/1/gettar manage /man/1/wm manage /man/1/wm-sh @@ -32465,7 +32790,9 @@ manga /man/8/mangaload mangaload /man/8/mangaload mangaload.b /man/8/mangaload manga™ /man/8/mangaload +manifest /man/1/ar manifestation /man/6/utf +manipulate /man/1/ar manipulate /man/1/blur manipulate /man/10/dev manipulate /man/10/odbc @@ -32589,6 +32916,7 @@ map /man/2/draw-0intro map /man/2/draw-display map /man/2/imagefile map /man/2/print +map /man/2/rfc822 map /man/3/draw map /man/3/fs map /man/3/ip @@ -32789,6 +33117,7 @@ match /man/2/filter match /man/2/keyring-0intro match /man/2/popup match /man/2/regex +match /man/2/rfc822 match /man/2/security-0intro match /man/2/selectfile match /man/2/spree-allow @@ -32971,6 +33300,7 @@ maximum /man/2/factotum maximum /man/2/keyring-0intro maximum /man/2/math-fp maximum /man/2/palmfile +maximum /man/2/rfc822 maximum /man/2/spree-gather maximum /man/2/styx maximum /man/2/sys-fversion @@ -33003,6 +33333,7 @@ maxmembers /man/2/spree-gather maxn /man/2/venti maxpkt /man/3/usb maxraint /man/2/ip +maxrequest /man/2/rfc822 maxrpc /man/2/styx maxsd53c8xx /man/10/plan9.ini maxsize /man/1/emu @@ -33081,6 +33412,7 @@ meaningful /man/1/charon meaningful /man/1/tktester meaningful /man/2/wmsrv meaningless /man/1/acme +meanings /man/1/ar meanings /man/10/iar meanings /man/10ti925/tihost meant /man/1/cpu @@ -33132,6 +33464,7 @@ mechanisms /man/9/canvas medblue /man/2/draw-display medgreen /man/2/draw-display media /man/10/plan9.ini +media /man/2/rfc822 media /man/2/scsiio media /man/2/w3c-css media /man/3/ip @@ -33296,6 +33629,7 @@ memsize /man/6/dis memstart /man/2/prof memstats /man/2/prof mention /man/10/2l +mentioned /man/1/ar mentioned /man/1/sendmail mentioned /man/1/sh mentioned /man/10/2l @@ -33359,9 +33693,7 @@ merge /man/1/alphabet-fs merge /man/1/fs merge /man/1/sh-string merge /man/9/grid -merged /man/1/os merged /man/2/spree -merged /man/3/cmd merging /man/1/alphabet-fs merging /man/1/fs mersenne /man/1/math-misc @@ -33663,7 +33995,10 @@ millliseconds /man/10/sleep mime /man/1/charon mime /man/2/encoding mime /man/2/keyring-0intro +mime /man/2/rfc822 mime /man/6/sexprs +mimefields /man/2/rfc822 +mimetype /man/2/rfc822 mimic /man/1/ebook mimic /man/2/sys-werrstr mimicked /man/1/tiny @@ -33773,10 +34108,12 @@ miscellaneous /man/1/wm-misc miscellaneous /man/3/cons miscellany /man/1/acme mishandled /man/3/draw +misinterpreted /man/2/w3c-uris misleading /man/8/rip mismatch /man/10/2c mismatches /man/2/sys-stat missing /man/1/acme +missing /man/1/ar missing /man/1/look missing /man/1/mk missing /man/1/mkdir @@ -33811,6 +34148,7 @@ mk /man/10/acid mk /man/10/conf mk /man/10/mk mk /man/2/draw-display +mk /man/2/rfc822 mk /man/4/namespace mk's /man/1/mk mk's /man/10/mk @@ -33906,6 +34244,7 @@ mod.dis /man/1/limbo mod.types /man/2/dis mode /man/1/9win mode /man/1/alphabet-fs +mode /man/1/ar mode /man/1/chmod mode /man/1/cp mode /man/1/crypt @@ -34005,6 +34344,7 @@ modes /man/9/listbox modes /man/9/text modf /man/2/math-fp modification /man/1/alphabet-fs +modification /man/1/ar modification /man/1/bind modification /man/1/du modification /man/1/fs @@ -34039,6 +34379,7 @@ modifications /man/9/entry modifications /man/9/text modified /man/1/acme modified /man/1/alphabet-fs +modified /man/1/ar modified /man/1/charon modified /man/1/cp modified /man/1/du @@ -34071,6 +34412,7 @@ modified /man/9/text modifier /man/10/devattach modifier /man/2/sys-stat modifier /man/9/text +modifiers /man/1/ar modifiers /man/10/iar modifiers /man/9/text modifies /man/2/command @@ -34184,6 +34526,7 @@ module /man/2/cfg module /man/2/command module /man/2/convcs module /man/2/crc +module /man/2/csv module /man/2/dbm module /man/2/debug module /man/2/dhcpclient @@ -34222,6 +34565,7 @@ module /man/2/prof module /man/2/pslib module /man/2/regex module /man/2/registries +module /man/2/rfc822 module /man/2/scsiio module /man/2/secstore module /man/2/security-0intro @@ -34254,6 +34598,7 @@ module /man/2/translate module /man/2/ubfa module /man/2/venti module /man/2/w3c-css +module /man/2/w3c-uris module /man/2/w3c-xpointers module /man/2/wait module /man/2/wmclient @@ -34547,6 +34892,7 @@ mouse /man/1/collab-clients mouse /man/1/emu mouse /man/1/keyboard mouse /man/1/logon +mouse /man/1/man mouse /man/1/mash-tk mouse /man/1/miniterm mouse /man/1/session @@ -34584,6 +34930,7 @@ mouse /man/9/text mouse /man/9/update mouseport /man/10/plan9.ini move /man/1/acme +move /man/1/ar move /man/1/cprof move /man/1/ebook move /man/1/ftree @@ -34763,6 +35110,7 @@ multicast /man/3/ether multicast /man/3/ip multiflag /man/10/getfields multimaster /man/10/plan9.ini +multipart /man/2/rfc822 multiples /man/10/devattach multiples /man/2/diskblocks multiples /man/2/spree-cardlib @@ -34798,6 +35146,7 @@ multiprocessor /man/10/lock multiprocessor /man/10/plan9.ini multiprocessor /man/10/sleep multiprocessors /man/10/splhi +multipurpose /man/2/rfc822 multisync135 /man/10/plan9.ini musicam,i /man/3/mpeg musicam,ii /man/3/mpeg @@ -34867,6 +35216,7 @@ names /man/1/0intro names /man/1/acme names /man/1/alphabet-fs names /man/1/alphabet-main +names /man/1/ar names /man/1/basename names /man/1/charon names /man/1/cleanname @@ -35140,6 +35490,8 @@ ndb /man/1/grid-localreg ndb /man/10/9load ndb /man/2/attrdb ndb /man/2/dhcpclient +ndb /man/2/pop3 +ndb /man/2/smtp ndb /man/4/namespace ndb /man/4/registry ndb /man/6/attrdb @@ -35213,6 +35565,7 @@ necessary /man/2/keyring-0intro necessary /man/2/palmfile necessary /man/2/prefab-element necessary /man/2/prefab-environ +necessary /man/2/rfc822 necessary /man/2/security-0intro necessary /man/2/spki necessary /man/2/styxpersist @@ -35271,6 +35624,7 @@ needed /man/2/spree needed /man/2/styxservers needed /man/2/sys-dirread needed /man/2/sys-pctl +needed /man/2/w3c-uris needed /man/2/xml needed /man/3/dbg needed /man/3/ip @@ -35341,6 +35695,7 @@ negative /man/2/math-fp negative /man/2/plumbmsg negative /man/2/prof negative /man/2/rand +negative /man/2/rfc822 negative /man/2/secstore negative /man/2/sets negative /man/2/styxservers @@ -35379,6 +35734,7 @@ negotiation /man/4/import negotiation /man/7/db neighbour /man/9/text neither /man/1/alphabet-fs +neither /man/1/ar neither /man/1/charon neither /man/1/cprof neither /man/1/fs @@ -35615,6 +35971,7 @@ newline /man/10/panic newline /man/2/arg newline /man/2/asn1 newline /man/2/bufio +newline /man/2/csv newline /man/2/dialog newline /man/2/keyring-certtostr newline /man/2/keyring-getmsg @@ -35747,6 +36104,7 @@ nil /man/2/bufio nil /man/2/cfg nil /man/2/command nil /man/2/convcs +nil /man/2/csv nil /man/2/dbm nil /man/2/debug nil /man/2/devpointer @@ -35793,6 +36151,7 @@ nil /man/2/prefab-compound nil /man/2/prefab-element nil /man/2/regex nil /man/2/registries +nil /man/2/rfc822 nil /man/2/scsiio nil /man/2/secstore nil /man/2/security-auth @@ -35834,6 +36193,7 @@ nil /man/2/translate nil /man/2/ubfa nil /man/2/virgil nil /man/2/w3c-css +nil /man/2/w3c-uris nil /man/2/w3c-xpointers nil /man/2/wait nil /man/2/wmclient @@ -35881,6 +36241,7 @@ nodev /man/6/namespace nodevs /man/1/sh-std nodevs /man/2/sys-pctl nodevs /man/6/namespace +nodots /man/2/w3c-uris nodummyrr /man/10/plan9.ini noecho /man/4/acme noerror /man/1/dd @@ -35972,6 +36333,7 @@ non /man/2/print non /man/2/rand non /man/2/regex non /man/2/registries +non /man/2/rfc822 non /man/2/scsiio non /man/2/security-auth non /man/2/sets @@ -36185,6 +36547,7 @@ notation /man/9/types notbefore /man/2/spki note /man/1/acme note /man/1/alphabet-fs +note /man/1/ar note /man/1/bind note /man/1/fc note /man/1/fs @@ -36217,6 +36580,7 @@ note /man/2/bufio note /man/2/cfg note /man/2/command note /man/2/convcs +note /man/2/csv note /man/2/daytime note /man/2/geodesy note /man/2/palmfile @@ -36233,6 +36597,7 @@ note /man/2/styxservers-nametree note /man/2/sys-dial note /man/2/sys-self note /man/2/translate +note /man/2/w3c-uris note /man/2/wmsrv note /man/2/xml note /man/3/dbg @@ -36375,6 +36740,7 @@ ntfs /man/3/fs ntfs /man/8/prep nthreads /man/1/charon ntp /man/8/sntp +ntracks /man/7/cddb ntsc /man/2/draw-image ntsc /man/3/tv ntsc /man/3/vid @@ -36459,6 +36825,7 @@ numblocks /man/1/zeros numeral /man/1/acme numeral /man/2/ir numerator /man/6/keyboard +numeric /man/1/ar numeric /man/1/charon numeric /man/1/kill numeric /man/1/look @@ -36531,6 +36898,7 @@ obj /man/2/spree obj /man/2/spree-allow obj /man/2/spree-cardlib obj /man/2/ubfa +object /man/1/ar object /man/1/asm object /man/1/bind object /man/1/disdep @@ -36830,6 +37198,7 @@ octal /man/6/proto octal /man/6/sexprs octal /man/8/kfscmd octet /man/2/asn1 +octet /man/2/rfc822 octet /man/8/httpd octets /man/2/asn1 octetstring /man/2/asn1 @@ -36963,6 +37332,7 @@ ok /man/1/sh-test ok /man/1/tktester ok /man/2/ip ok /man/2/itslib +ok /man/2/rfc822 ok /man/2/security-auth ok /man/2/tkclient ok /man/2/venti @@ -36971,6 +37341,7 @@ ok /man/4/factotum ok /man/4/keyfs ok /man/8/rdbgsrv ok /man/9/canvas +oks /man/2/rfc822 old.bundle /man/1/alphabet-fs old.bundle /man/1/fs old.index.html /man/1/webgrab @@ -37055,6 +37426,7 @@ ones /man/10/plan9.ini ones /man/2/0intro ones /man/2/draw-display ones /man/2/ip +ones /man/2/keyring-ipint ones /man/2/translate ones /man/3/cons ones /man/3/ds @@ -37067,6 +37439,7 @@ ones /man/8/styxchat ones /man/9/text onetbiosns /man/2/dhcpclient onodetype /man/2/w3c-xpointers +onscreen /man/1/sh-tk onscreen /man/1/wm onscreen /man/2/tkclient onscreen /man/2/wmclient @@ -37316,6 +37689,7 @@ operation /man/10/dmainit operation /man/10/plan9.ini operation /man/10/qio operation /man/10/styxserver +operation /man/2/csv operation /man/2/dbm operation /man/2/dhcpclient operation /man/2/dis @@ -37332,6 +37706,7 @@ operation /man/2/keyring-ipint operation /man/2/math-export operation /man/2/math-fp operation /man/2/prefab-element +operation /man/2/rfc822 operation /man/2/scsiio operation /man/2/secstore operation /man/2/sexprs @@ -37343,6 +37718,7 @@ operation /man/2/sys-open operation /man/2/sys-stat operation /man/2/ubfa operation /man/2/w3c-css +operation /man/2/w3c-uris operation /man/2/w3c-xpointers operation /man/3/dbg operation /man/3/dup @@ -37359,6 +37735,7 @@ operations /man/1/mash operations /man/1/mash-make operations /man/1/mprof operations /man/1/nsbuild +operations /man/1/os operations /man/1/secstore operations /man/1/sh operations /man/1/sh-alphabet @@ -37393,6 +37770,7 @@ operations /man/2/math-0intro operations /man/2/names operations /man/2/prefab-0intro operations /man/2/registries +operations /man/2/rfc822 operations /man/2/scsiio operations /man/2/sets operations /man/2/sexprs @@ -37407,6 +37785,7 @@ operations /man/2/sys-bind operations /man/2/sys-export operations /man/2/sys-iounit operations /man/2/ubfa +operations /man/2/w3c-uris operations /man/2/wmsrv operations /man/3/dbg operations /man/3/draw @@ -37513,6 +37892,7 @@ option /man/1/9win option /man/1/acme option /man/1/alphabet-fs option /man/1/alphabet-main +option /man/1/ar option /man/1/asm option /man/1/auplay option /man/1/avr @@ -37629,6 +38009,7 @@ option /man/4/ramfile option /man/4/registry option /man/6/namespace option /man/6/sbl +option /man/7/cddb option /man/8/applylog option /man/8/bootpd option /man/8/changelogin @@ -37674,6 +38055,7 @@ option's /man/1/sh-arg option's /man/9/options option's /man/9/text optional /man/1/acme +optional /man/1/ar optional /man/1/bind optional /man/1/calendar optional /man/1/charon @@ -37708,8 +38090,10 @@ optional /man/2/factotum optional /man/2/geodesy optional /man/2/math-linalg optional /man/2/palmfile +optional /man/2/rfc822 optional /man/2/spki optional /man/2/w3c-css +optional /man/2/w3c-uris optional /man/2/w3c-xpointers optional /man/3/cmd optional /man/3/cons @@ -37728,6 +38112,7 @@ optional /man/6/proto optional /man/6/sbl optional /man/6/sexprs optional /man/6/translate +optional /man/7/cddb optional /man/8/create optional /man/8/cs optional /man/9/bind @@ -37735,6 +38120,7 @@ optional /man/9/frame optional /man/9/text optional /man/9/types optionally /man/1/alphabet-main +optionally /man/1/ar optionally /man/1/cprof optionally /man/1/du optionally /man/1/echo @@ -38035,6 +38421,7 @@ original /man/2/sys-fd2path original /man/2/sys-fversion original /man/2/translate original /man/2/w3c-css +original /man/2/w3c-uris original /man/3/srv original /man/5/0intro original /man/6/sbl @@ -38331,6 +38718,7 @@ output /man/4/cpu output /man/4/iostats output /man/6/colour output /man/6/man +output /man/7/cddb output /man/8/applylog output /man/8/bootpd output /man/8/create @@ -38576,6 +38964,7 @@ package /man/6/man package /man/8/create package.tgz /man/4/ftpfs packaged /man/2/prefab-element +packages /man/1/ar packages /man/1/man packages /man/8/create packblock /man/10/allocb @@ -38782,6 +39171,7 @@ pairs /man/2/keyring-0intro pairs /man/2/plumbmsg pairs /man/2/pop3 pairs /man/2/registries +pairs /man/2/rfc822 pairs /man/2/spree pairs /man/2/stringinttab pairs /man/2/styxpersist @@ -38919,6 +39309,7 @@ parameter /man/2/ida parameter /man/2/keyring-sha1 parameter /man/2/plumbmsg parameter /man/2/popup +parameter /man/2/rfc822 parameter /man/2/secstore parameter /man/2/styx parameter /man/2/styxservers @@ -38927,6 +39318,7 @@ parameter /man/2/sys-read parameter /man/2/sys-self parameter /man/2/ubfa parameter /man/2/w3c-css +parameter /man/2/w3c-uris parameter /man/2/w3c-xpointers parameter /man/3/0intro parameter /man/3/dbg @@ -38960,6 +39352,7 @@ parameters /man/2/keyring-0intro parameters /man/2/keyring-auth parameters /man/2/keyring-gensk parameters /man/2/math-linalg +parameters /man/2/rfc822 parameters /man/2/security-0intro parameters /man/2/security-login parameters /man/2/sexprs @@ -38981,6 +39374,7 @@ parameters /man/6/ndb parameters /man/8/dhcp params /man/10/plan9.ini params /man/2/factotum +params /man/2/rfc822 params /man/2/xml parcel /man/9/pack parent /man/1/0intro @@ -39053,12 +39447,14 @@ parse /man/2/dhcpclient parse /man/2/ether parse /man/2/ip parse /man/2/math-0intro +parse /man/2/rfc822 parse /man/2/sexprs parse /man/2/sh parse /man/2/spki parse /man/2/styxservers parse /man/2/venti parse /man/2/w3c-css +parse /man/2/w3c-uris parse /man/2/w3c-xpointers parse /man/2/wait parse /man/5/stat @@ -39069,6 +39465,7 @@ parsecidr /man/2/ip parsecmd /man/10/parsecmd parsecmd /man/3/cmd parsecompound /man/2/spki +parsecontent /man/2/rfc822 parsed /man/1/mash parsed /man/1/sh-arg parsed /man/1/tiny @@ -39088,6 +39485,7 @@ parseline /man/2/attrdb parseman.b /man/1/man parsemask /man/2/ip parsename /man/2/spki +parseparams /man/2/rfc822 parser /man/1/yacc parser /man/2/asn1 parser /man/2/cfg @@ -39105,6 +39503,7 @@ parses /man/10/parsecmd parses /man/2/arg parses /man/2/cfg parses /man/2/disks +parses /man/2/rfc822 parses /man/2/spki parses /man/2/spree parses /man/2/w3c-css @@ -39121,6 +39520,7 @@ parsing /man/10/mk parsing /man/2/spki parsing /man/2/spree parsing /man/2/w3c-css +parsing /man/2/w3c-uris parsing /man/2/xml parsing /man/6/sexprs partial /man/1/cprof @@ -39181,6 +39581,7 @@ particular /man/2/plumbmsg particular /man/2/prof particular /man/2/readdir particular /man/2/registries +particular /man/2/rfc822 particular /man/2/security-auth particular /man/2/sh particular /man/2/spki @@ -39375,6 +39776,7 @@ password /man/2/pop3 password /man/2/secstore password /man/2/security-0intro password /man/2/security-login +password /man/2/w3c-uris password /man/4/factotum password /man/4/ftpfs password /man/6/keys @@ -39443,6 +39845,7 @@ path /man/2/cfg path /man/2/command path /man/2/convcs path /man/2/crc +path /man/2/csv path /man/2/daytime path /man/2/dbm path /man/2/debug @@ -39516,6 +39919,7 @@ path /man/2/rand path /man/2/readdir path /man/2/regex path /man/2/registries +path /man/2/rfc822 path /man/2/scsiio path /man/2/secstore path /man/2/security-auth @@ -39578,6 +39982,7 @@ path /man/2/venti path /man/2/virgil path /man/2/volume path /man/2/w3c-css +path /man/2/w3c-uris path /man/2/w3c-xpointers path /man/2/wait path /man/2/wmclient @@ -39834,6 +40239,7 @@ perceived /man/1/tiny percent /man/1/mk percent /man/10/mk percent /man/2/w3c-css +percent /man/2/w3c-uris percent /man/9/bind percentage /man/1/collab-clients percentage /man/1/prof @@ -40353,6 +40759,8 @@ plain /man/1/man plain /man/1/wish plain /man/10/print plain /man/2/disks +plain /man/2/keyring-ipint +plain /man/2/rfc822 plain /man/2/sys-print plain /man/2/tkclient plain /man/2/w3c-css @@ -40367,6 +40775,7 @@ plain /man/8/dhcp plaintext /man/2/security-0intro plan /man/1/0intro plan /man/1/9win +plan /man/1/ar plan /man/1/bind plan /man/1/crypt plan /man/1/diff @@ -40491,6 +40900,7 @@ plot /man/1/wm-misc plotted /man/1/wm-misc plug /man/1/miniterm plug /man/3/pnp +plumb /man/1/man plumb /man/1/plumb plumb /man/1/wm-sh plumb /man/2/plumbmsg @@ -40747,7 +41157,6 @@ pops /man/2/dialog pops /man/2/popup pops /man/4/factotum pops /man/6/dis -popserver /man/2/pop3 popt /man/2/print popts.cfg /man/2/print popular /man/1/wm-misc @@ -40799,6 +41208,7 @@ port /man/2/sys-file2chan port /man/2/sys-iounit port /man/2/sys-print port /man/2/virgil +port /man/2/w3c-uris port /man/3/arch port /man/3/audio port /man/3/boot @@ -40843,7 +41253,6 @@ port /man/6/plumbing port /man/7/db port /man/8/bootpd port /man/8/cs -port /man/8/httpd port /man/8/logind port /man/8/mangaload port /man/8/plumber @@ -40920,6 +41329,7 @@ positions /man/2/draw-pointer positions /man/2/math-fp positions /man/2/prof positions /man/2/regex +positions /man/2/rfc822 positions /man/2/sexprs positions /man/3/pointer positions /man/6/sbl @@ -40944,6 +41354,7 @@ posix /man/4/tarfs posix.1 /man/1/gettar posix.c /man/3/fs posn /man/2/devpointer +posname /man/1/ar posname /man/10/iar possess /man/2/keyring-0intro possess /man/4/registry @@ -41053,6 +41464,7 @@ pre /man/2/string pre /man/9/types pread /man/1/cp pread /man/2/sys-read +precede /man/1/ar precede /man/1/deb precede /man/1/grep precede /man/10/error @@ -41091,6 +41503,7 @@ preceeding /man/2/cfg precise /man/2/math-fp precise /man/2/sexprs precise /man/3/mpeg +precisely /man/1/sh precisely /man/3/sign precision /man/1/fc precision /man/10/print @@ -41289,6 +41702,7 @@ presents /man/2/sh presents /man/2/sys-0intro presents /man/2/sys-file2chan presents /man/3/arch +preserve /man/1/ar preserve /man/1/dd preserve /man/10/iar preserve /man/2/keyring-getmsg @@ -41365,6 +41779,7 @@ prevent /man/2/disks prevent /man/2/security-0intro prevent /man/2/sys-chdir prevent /man/2/sys-pctl +prevent /man/2/w3c-uris prevent /man/3/cap prevent /man/3/cmd prevent /man/9/bind @@ -41492,6 +41907,7 @@ prinormal /man/10/kproc print /man/1/acme print /man/1/alphabet-fs print /man/1/alphabet-main +print /man/1/ar print /man/1/cal print /man/1/cmp print /man/1/comm @@ -41715,6 +42131,7 @@ prints /man/2/sys-byte2char prints /man/2/sys-print prints /man/3/cons prints /man/4/registry +prints /man/7/cddb prints /man/8/bootpd prints /man/8/create prints /man/8/cs @@ -41841,6 +42258,7 @@ process /man/1/listen process /man/1/mc process /man/1/mk process /man/1/nsbuild +process /man/1/os process /man/1/ps process /man/1/sh process /man/1/sh-file2chan @@ -42068,6 +42486,7 @@ prod /man/10/qio produce /man/1/acme produce /man/1/alphabet-abc produce /man/1/alphabet-grid +produce /man/1/ar produce /man/1/cook produce /man/1/ls produce /man/1/mash-make @@ -42082,6 +42501,7 @@ produce /man/10/mk produce /man/2/keyring-0intro produce /man/2/keyring-certtostr produce /man/2/keyring-sha1 +produce /man/2/rfc822 produce /man/2/scsiio produce /man/2/styx produce /man/2/sys-pipe @@ -42141,6 +42561,7 @@ produces /man/10/print produces /man/2/draw-image produces /man/2/keyring-certtostr produces /man/2/keyring-sha1 +produces /man/2/rfc822 produces /man/2/sets produces /man/2/sys-print produces /man/3/ip @@ -42151,6 +42572,7 @@ produces /man/8/applylog produces /man/8/cs producing /man/1/acme producing /man/10/print +producing /man/2/rfc822 producing /man/2/sys-print producing /man/2/translate producing /man/4/logfile @@ -42565,6 +42987,7 @@ protocols /man/1/charon protocols /man/10/allocb protocols /man/10/conf protocols /man/2/keyring-getmsg +protocols /man/2/rfc822 protocols /man/2/security-0intro protocols /man/2/sys-open protocols /man/3/ip @@ -42611,6 +43034,7 @@ provide /man/10/sleep provide /man/10/splhi provide /man/2/0intro provide /man/2/alphabet-intro +provide /man/2/csv provide /man/2/dhcpclient provide /man/2/draw-0intro provide /man/2/draw-context @@ -42790,6 +43214,7 @@ provides /man/2/bufio provides /man/2/command provides /man/2/convcs provides /man/2/crc +provides /man/2/csv provides /man/2/debug provides /man/2/devpointer provides /man/2/dhcpclient @@ -42827,6 +43252,7 @@ provides /man/2/print provides /man/2/prof provides /man/2/readdir provides /man/2/registries +provides /man/2/rfc822 provides /man/2/scsiio provides /man/2/security-0intro provides /man/2/security-ssl @@ -42856,6 +43282,7 @@ provides /man/2/ubfa provides /man/2/venti provides /man/2/virgil provides /man/2/volume +provides /man/2/w3c-uris provides /man/2/wait provides /man/2/wmclient provides /man/2/wmlib @@ -42938,6 +43365,7 @@ ps /man/1/ps ps /man/1/stack ps /man/1/time ps /man/2/print +ps /man/2/rfc822 ps.b /man/1/ps ps2 /man/10/plan9.ini ps2intellimouse /man/10/plan9.ini @@ -43173,6 +43601,7 @@ qreopen /man/10/qio qroot /man/10/styxserver qroot /man/2/styxservers-nametree qsetlimit /man/10/qio +qstring /man/2/rfc822 qtappend /man/2/sys-stat qtappend /man/5/0intro qtappend /man/8/styxchat @@ -43196,6 +43625,7 @@ qtfile /man/5/0intro qtmount /man/10/devattach qtype /man/2/styxservers qtype /man/2/sys-stat +quadratic /man/1/ar quadratic /man/10/iar quadratic /man/2/draw-image qualified /man/1/acme @@ -43217,6 +43647,7 @@ qualify /man/2/0intro qualify /man/6/ndb qualifying /man/1/sh quality /man/2/rand +quality /man/2/rfc822 quantisation /man/1/du quantised /man/1/du quantities /man/1/units @@ -43236,6 +43667,7 @@ queried /man/9/variable queries /man/2/bloomfilter queries /man/2/styxservers queries /man/4/registry +queries /man/7/cddb queries /man/8/cs queries /man/8/dns queries /man/8/httpd @@ -43246,8 +43678,10 @@ query /man/1/grid-query query /man/1/session query /man/2/filepat query /man/2/sh +query /man/2/w3c-uris query /man/3/prog query /man/4/factotum +query /man/7/cddb query /man/8/cs query /man/8/dns query /man/9/button @@ -43293,6 +43727,7 @@ queues /man/10/qio queues /man/3/eia queues /man/3/pipe queuing /man/2/wmlib +quick /man/1/ar quick /man/10/iar quick /man/4/namespace quickly /man/1/charon @@ -43314,6 +43749,7 @@ quiz /man/1/collab-clients qunlock /man/10/error qunlock /man/10/qlock quota /man/10/allocb +quotable /man/2/rfc822 quotation /man/1/mash quotation /man/1/sh quote /man/1/mash @@ -43324,6 +43760,8 @@ quote /man/1/sh-regex quote /man/1/tiny quote /man/1/wm-sh quote /man/2/attrdb +quote /man/2/csv +quote /man/2/rfc822 quote /man/2/string quote /man/2/tk quote /man/4/registry @@ -43352,7 +43790,9 @@ quoted /man/10/getfields quoted /man/10/mk quoted /man/10/parsecmd quoted /man/2/cfg +quoted /man/2/csv quoted /man/2/draw-context +quoted /man/2/rfc822 quoted /man/2/string quoted /man/2/sys-print quoted /man/2/tk @@ -43380,6 +43820,8 @@ quotes /man/10/c2l quotes /man/10/getfields quotes /man/10/mk quotes /man/2/cfg +quotes /man/2/csv +quotes /man/2/rfc822 quotes /man/2/string quotes /man/2/sys-print quotes /man/4/registry @@ -43651,6 +44093,7 @@ raw /man/3/pnp raw /man/3/sd raw /man/3/touch raw /man/6/sexprs +raw /man/7/cddb raw /man/8/fpgaload raw /man/8/ftl raw /man/8/prep @@ -43820,6 +44263,7 @@ read /man/10/readnum read /man/10/styxserver read /man/2/bufio read /man/2/bufio-chanfill +read /man/2/csv read /man/2/debug read /man/2/devpointer read /man/2/dis @@ -43845,6 +44289,7 @@ read /man/2/prefab-0intro read /man/2/prefab-element read /man/2/readdir read /man/2/registries +read /man/2/rfc822 read /man/2/secstore read /man/2/security-0intro read /man/2/security-ssl @@ -44003,6 +44448,7 @@ readgif /man/2/imagefile readgif.b /man/2/imagefile readgifpath /man/2/imagefile readheader /man/2/spree +readheaders /man/2/rfc822 readid /man/2/palmfile readimage /man/2/draw-display readiness /man/2/crc @@ -44037,6 +44483,7 @@ reading /man/2/math-0intro reading /man/2/palmfile reading /man/2/print reading /man/2/readdir +reading /man/2/rfc822 reading /man/2/security-0intro reading /man/2/styx reading /man/2/styxservers @@ -44149,6 +44596,7 @@ reads /man/1/wish reads /man/10/odbc reads /man/10/plan9.ini reads /man/10/qio +reads /man/2/csv reads /man/2/devpointer reads /man/2/dis reads /man/2/disks @@ -44162,6 +44610,7 @@ reads /man/2/keyring-getstring reads /man/2/newns reads /man/2/plumbmsg reads /man/2/readdir +reads /man/2/rfc822 reads /man/2/scsiio reads /man/2/styx reads /man/2/styxpersist @@ -44780,6 +45229,7 @@ ref /man/2/bufio-chanfill ref /man/2/cfg ref /man/2/command ref /man/2/crc +ref /man/2/csv ref /man/2/daytime ref /man/2/dbm ref /man/2/debug @@ -44834,6 +45284,7 @@ ref /man/2/prof ref /man/2/pslib ref /man/2/readdir ref /man/2/registries +ref /man/2/rfc822 ref /man/2/scsiio ref /man/2/secstore ref /man/2/security-auth @@ -44881,6 +45332,7 @@ ref /man/2/ubfa ref /man/2/venti ref /man/2/volume ref /man/2/w3c-css +ref /man/2/w3c-uris ref /man/2/w3c-xpointers ref /man/2/wait ref /man/2/wmclient @@ -44926,6 +45378,7 @@ refer /man/9/text reference /man/1/0intro reference /man/1/charon reference /man/1/limbo +reference /man/1/man reference /man/1/mk reference /man/1/sh-tk reference /man/1/yacc @@ -44962,6 +45415,7 @@ reference /man/2/keyring-ipint reference /man/2/lock reference /man/2/palmfile reference /man/2/plumbmsg +reference /man/2/rfc822 reference /man/2/scsiio reference /man/2/secstore reference /man/2/security-login @@ -44974,6 +45428,7 @@ reference /man/2/sys-open reference /man/2/sys-self reference /man/2/translate reference /man/2/w3c-css +reference /man/2/w3c-uris reference /man/3/draw reference /man/3/prog reference /man/3/touch @@ -44997,6 +45452,7 @@ referenced /man/4/mntgen referenced /man/6/sbl referenced /man/8/mkfs references /man/1/limbo +references /man/1/man references /man/1/mash references /man/1/mash-tk references /man/1/mk @@ -45034,6 +45490,7 @@ referring /man/1/mash referring /man/10/conf referring /man/2/arg referring /man/2/diskblocks +referring /man/2/rfc822 referring /man/2/spree-objstore referring /man/2/styxservers referring /man/2/sys-dup @@ -45123,6 +45580,7 @@ reg /man/2/registries reg /man/3/gpio reg /man/6/ubfa regard /man/10/qio +regarded /man/2/csv regarded /man/2/itslib regarded /man/2/sys-read regarded /man/4/registry @@ -45303,6 +45761,7 @@ rejected /man/8/getauthinfo rejecting /man/3/ip rejecting /man/3/usb rejects /man/4/palmsrv +rel /man/2/w3c-uris relate /man/1/ls related /man/1/acme related /man/1/mk @@ -45348,6 +45807,7 @@ relative /man/2/dis relative /man/2/disks relative /man/2/fsproto relative /man/2/names +relative /man/2/rfc822 relative /man/2/spree relative /man/2/sys-export relative /man/2/tk @@ -45491,6 +45951,7 @@ remainder /man/10/5cv remainder /man/10/plan9.ini remainder /man/10/qio remainder /man/2/math-fp +remainder /man/2/rfc822 remainder /man/3/audio remainder /man/3/cons remainder /man/3/kprof @@ -45700,6 +46161,7 @@ removed /man/2/styxservers removed /man/2/sys-fd2path removed /man/2/sys-print removed /man/2/timers +removed /man/2/w3c-uris removed /man/3/cap removed /man/3/flash removed /man/3/fs @@ -45748,6 +46210,7 @@ removes /man/9/pack removes /man/9/text removesbuiltin /man/2/sh removing /man/1/rm +removing /man/2/rfc822 removing /man/3/env removing /man/4/dbfs removing /man/4/registry @@ -45832,6 +46295,7 @@ repl /man/2/draw-display repl /man/2/draw-image repl /man/3/draw replace /man/1/acme +replace /man/1/ar replace /man/1/bind replace /man/1/brutus replace /man/1/secstore @@ -45866,6 +46330,7 @@ replaced /man/2/asn1 replaced /man/2/ip replaced /man/2/keyring-getmsg replaced /man/2/math-0intro +replaced /man/2/rfc822 replaced /man/2/sh replaced /man/2/sys-dial replaced /man/2/sys-print @@ -46032,6 +46497,7 @@ represent /man/10/lock represent /man/10/newchan represent /man/10/rune represent /man/2/asn1 +represent /man/2/csv represent /man/2/debug represent /man/2/disks represent /man/2/draw-display @@ -46040,6 +46506,7 @@ represent /man/2/draw-pointer represent /man/2/ida represent /man/2/prefab-element represent /man/2/registries +represent /man/2/rfc822 represent /man/2/scsiio represent /man/2/sexprs represent /man/2/sh @@ -46087,6 +46554,7 @@ representation /man/2/keyring-rc4 representation /man/2/keyset representation /man/2/math-export representation /man/2/palmfile +representation /man/2/rfc822 representation /man/2/sexprs representation /man/2/spki representation /man/2/spree-allow @@ -46094,7 +46562,9 @@ representation /man/2/spree-cardlib representation /man/2/styx representation /man/2/styxservers representation /man/2/sys-0intro +representation /man/2/sys-print representation /man/2/ubfa +representation /man/2/w3c-uris representation /man/2/w3c-xpointers representation /man/2/workdir representation /man/3/cons @@ -46152,6 +46622,7 @@ representing /man/2/keyring-ipint representing /man/2/plumbmsg representing /man/2/prefab-element representing /man/2/registries +representing /man/2/rfc822 representing /man/2/secstore representing /man/2/sets representing /man/2/sexprs @@ -46164,6 +46635,7 @@ representing /man/2/sys-fversion representing /man/2/sys-pipe representing /man/2/sys-utfbytes representing /man/2/w3c-css +representing /man/2/w3c-uris representing /man/2/w3c-xpointers representing /man/3/0intro representing /man/3/boot @@ -46235,6 +46707,7 @@ represents /man/2/translate represents /man/2/ubfa represents /man/2/venti represents /man/2/w3c-css +represents /man/2/w3c-uris represents /man/2/w3c-xpointers represents /man/2/wmsrv represents /man/2/xml @@ -46261,6 +46734,7 @@ represents /man/8/styxchat represents /man/9/bind represents /man/9/grid represents /man/9/text +reproduce /man/2/w3c-uris reproduced /man/2/sexprs reproduced /man/5/0intro reproduced /man/6/sexprs @@ -46496,6 +46970,7 @@ required /man/10/styx required /man/10/styxserver required /man/2/alphabet-intro required /man/2/asn1 +required /man/2/csv required /man/2/dhcpclient required /man/2/disks required /man/2/encoding @@ -46509,6 +46984,7 @@ required /man/2/palmfile required /man/2/print required /man/2/prof required /man/2/registries +required /man/2/rfc822 required /man/2/sexprs required /man/2/styx required /man/2/styxconv @@ -46517,6 +46993,7 @@ required /man/2/sys-print required /man/2/tk required /man/2/tkclient required /man/2/w3c-css +required /man/2/w3c-uris required /man/2/wmclient required /man/3/env required /man/3/flash @@ -46633,6 +47110,7 @@ reserve /man/8/ftl reserved /man/10/dev reserved /man/10/devattach reserved /man/10/plan9.ini +reserved /man/2/w3c-uris reserved /man/6/dis reserved /man/8/prep reserves /man/10/odbc @@ -46720,15 +47198,18 @@ resolve /man/8/applylog resolved /man/1/alphabet-fs resolved /man/1/fs resolved /man/2/virgil +resolved /man/2/w3c-uris resolver /man/2/virgil resolver /man/6/ndb resolver /man/8/dns resolvers /man/6/ndb resolvers /man/8/dns resolves /man/2/draw-image +resolves /man/2/w3c-uris resolves /man/3/draw resolves /man/8/prep resolving /man/1/tiny +resolving /man/2/w3c-uris resolving /man/6/ndb resorting /man/8/dns resource /man/1/charon @@ -46743,6 +47224,7 @@ resource /man/10/lock resource /man/10/qlock resource /man/2/palmfile resource /man/2/sys-pctl +resource /man/2/w3c-uris resource /man/3/draw resource /man/4/cpu resources /man/1/0intro @@ -46771,6 +47253,7 @@ respect /man/10/mk respect /man/2/draw-display respect /man/2/format respect /man/2/tkclient +respect /man/2/w3c-uris respect /man/2/wmclient respect /man/8/create respect /man/9/panel @@ -46820,6 +47303,7 @@ response /man/5/0intro response /man/5/flush response /man/5/version response /man/6/colour +response /man/7/cddb response /man/8/plumber response /man/8/rstyxd response /man/8/signer @@ -46852,6 +47336,7 @@ rest /man/1/sh-tk rest /man/2/arg rest /man/2/filter-deflate rest /man/2/prefab-element +rest /man/2/rfc822 rest /man/2/sets rest /man/2/sexprs rest /man/2/sh @@ -46932,6 +47417,7 @@ restrictions /man/10/intrenable restrictions /man/10/mk restrictions /man/10/xalloc restrictions /man/2/draw-display +restrictions /man/2/rfc822 restrictions /man/2/security-0intro restrictions /man/3/flash restrictions /man/3/ftl @@ -46995,6 +47481,7 @@ resulting /man/2/sys-dirread resulting /man/2/sys-fd2path resulting /man/2/sys-tokenize resulting /man/2/tk +resulting /man/2/w3c-uris resulting /man/2/wait resulting /man/2/xml resulting /man/3/i2c @@ -47041,6 +47528,7 @@ results /man/2/srv results /man/2/sys-0intro results /man/2/sys-print results /man/2/sys-utfbytes +results /man/2/w3c-uris results /man/3/cons results /man/3/dup results /man/3/ftl @@ -47171,6 +47659,7 @@ return /man/2/bufio-chanfill return /man/2/cfg return /man/2/command return /man/2/convcs +return /man/2/csv return /man/2/dbm return /man/2/debug return /man/2/dhcpclient @@ -47196,6 +47685,7 @@ return /man/2/prefab-compound return /man/2/prof return /man/2/rand return /man/2/registries +return /man/2/rfc822 return /man/2/scsiio return /man/2/security-random return /man/2/sexprs @@ -47227,6 +47717,7 @@ return /man/2/sys-stat return /man/2/tk return /man/2/translate return /man/2/ubfa +return /man/2/w3c-uris return /man/2/wmsrv return /man/2/xml return /man/3/arch @@ -47322,6 +47813,7 @@ returned /man/2/popup returned /man/2/prefab-compound returned /man/2/prof returned /man/2/readdir +returned /man/2/rfc822 returned /man/2/scsiio returned /man/2/secstore returned /man/2/security-login @@ -47466,6 +47958,7 @@ returns /man/2/bufio-chanfill returns /man/2/cfg returns /man/2/convcs returns /man/2/crc +returns /man/2/csv returns /man/2/daytime returns /man/2/dbm returns /man/2/debug @@ -47522,6 +48015,7 @@ returns /man/2/prof returns /man/2/readdir returns /man/2/regex returns /man/2/registries +returns /man/2/rfc822 returns /man/2/scsiio returns /man/2/secstore returns /man/2/security-0intro @@ -47577,6 +48071,7 @@ returns /man/2/ubfa returns /man/2/venti returns /man/2/virgil returns /man/2/w3c-css +returns /man/2/w3c-uris returns /man/2/w3c-xpointers returns /man/2/wait returns /man/2/wmclient @@ -47738,13 +48233,23 @@ rfc1055 /man/2/filter-slip rfc1058 /man/8/rip rfc1361 /man/8/sntp rfc1942 /man/1/charon +rfc2045 /man/2/rfc822 rfc2104 /man/2/keyring-sha1 rfc2131 /man/2/dhcpclient rfc2373 /man/2/ip rfc2453 /man/8/rip +rfc2822 /man/2/rfc822 rfc3548 /man/2/encoding +rfc3986 /man/2/w3c-uris +rfc822 /man/2/rfc822 +rfc822's /man/2/rfc822 +rfc822.b /man/2/rfc822 +rfc822.m /man/2/rfc822 rfc854 /man/1/telnet +rfclex /man/2/rfc822 +rfclex.mk /man/2/rfc822 rfcs /man/1/telnet +rfl /man/2/rfc822 rflush /man/5/0intro rflush /man/5/flush rflush /man/8/styxchat @@ -48165,6 +48670,7 @@ rule /man/1/mash-make rule /man/1/mk rule /man/10/mk rule /man/2/draw-image +rule /man/2/rfc822 rule /man/2/sys-0intro rule /man/2/w3c-xpointers rule /man/3/draw @@ -48201,6 +48707,7 @@ rules /man/2/command rules /man/2/draw-display rules /man/2/math-0intro rules /man/2/plumbmsg +rules /man/2/rfc822 rules /man/2/spree rules /man/2/styx rules /man/2/w3c-css @@ -48344,6 +48851,7 @@ running /man/1/emu running /man/1/grid-query running /man/1/kill running /man/1/mux +running /man/1/os running /man/1/ps running /man/1/sendmail running /man/1/sh @@ -48497,6 +49005,7 @@ safe /man/1/0intro safe /man/1/charon safe /man/10/intrenable safe /man/2/styxservers +safe /man/2/w3c-uris safe /man/6/sexprs safely /man/10/malloc safely /man/10/parsecmd @@ -48675,6 +49184,7 @@ scheme /man/2/convcs scheme /man/2/ida scheme /man/2/spree scheme /man/2/spree-cardlib +scheme /man/2/w3c-uris scheme /man/2/w3c-xpointers scheme /man/3/ip scheme /man/3/mnt @@ -48684,6 +49194,7 @@ scheme /man/9/canvas scheme /man/9/text schemes /man/2/convcs schemes /man/2/sexprs +schemes /man/2/w3c-uris schemes /man/2/w3c-xpointers schemes /man/6/sexprs schneier /man/2/keyring-0intro @@ -48795,6 +49306,7 @@ script /man/1/charon script /man/1/diff script /man/1/grid-ns script /man/1/itest +script /man/1/man script /man/1/mk script /man/1/plumb script /man/1/sh @@ -48810,6 +49322,7 @@ script /man/2/sh script /man/4/cpu script /man/6/keyboard script /man/8/plumber +script /man/8/shutdown script /man/9/bind script /man/9/canvas script /man/9/menu @@ -48960,6 +49473,7 @@ searching /man/8/dns searchspec /man/9/canvas sec /man/2/daytime sec /man/2/keyring-crypt +sec2date /man/2/rfc822 seckey /man/2/secstore secondary /man/6/colour secondary /man/6/man @@ -48979,6 +49493,7 @@ seconds /man/2/daytime seconds /man/2/dhcpclient seconds /man/2/geodesy seconds /man/2/palmfile +seconds /man/2/rfc822 seconds /man/2/sys-stat seconds /man/2/virgil seconds /man/2/volume @@ -49031,6 +49546,7 @@ secrets /man/4/namespace secrets /man/6/keys secrets /man/8/svc secs /man/2/disks +secs /man/2/rfc822 secs2time /man/2/spki secsize /man/2/disks secsize /man/8/ftl @@ -49247,6 +49763,7 @@ segments /man/10/a.out segments /man/10/ksize segments /man/10/kstrip segments /man/10ti925/tihost +segments /man/2/w3c-uris segments /man/3/draw segments /man/3/flash segments /man/3/ip @@ -49323,6 +49840,7 @@ selected /man/1/grid-ns selected /man/1/keyboard selected /man/1/logon selected /man/1/ls +selected /man/1/man selected /man/1/mash-tk selected /man/1/mux selected /man/1/session @@ -49492,6 +50010,7 @@ self /man/2/plumbmsg self /man/2/prefab-compound self /man/2/prefab-element self /man/2/registries +self /man/2/rfc822 self /man/2/scsiio self /man/2/sets self /man/2/sexprs @@ -49507,6 +50026,7 @@ self /man/2/timers self /man/2/translate self /man/2/ubfa self /man/2/venti +self /man/2/w3c-uris self /man/2/w3c-xpointers self /man/2/wmclient self /man/2/wmsrv @@ -49670,6 +50190,7 @@ sends /man/9/send sendtext /man/1/wm-sh sendtextfd /man/2/print sensible /man/2/prefab-element +sensible /man/2/rfc822 sensible /man/2/sys-fversion sensible /man/8/getauthinfo sensible /man/8/prep @@ -49682,6 +50203,7 @@ sensitive /man/9/grab sent /man/1/acme sent /man/1/collab-clients sent /man/1/idea +sent /man/1/man sent /man/1/mash sent /man/1/miniterm sent /man/1/plumb @@ -49973,6 +50495,7 @@ server /man/5/walk server /man/6/keys server /man/6/ndb server /man/6/users +server /man/7/cddb server /man/7/db server /man/7/dbsrv server /man/8/applylog @@ -50129,10 +50652,8 @@ services /man/1/ns services /man/1/webgrab services /man/10/ntsrv services /man/2/0intro -services /man/2/pop3 services /man/2/registries services /man/2/security-0intro -services /man/2/smtp services /man/2/srv services /man/2/sys-pctl services /man/3/cmd @@ -50269,6 +50790,7 @@ settings /man/10/plan9.ini settings /man/2/exception settings /man/2/geodesy settings /man/2/print +settings /man/2/rfc822 settings /man/3/draw settings /man/3/eia settings /man/3/fs @@ -50350,6 +50872,7 @@ sh /man/1/fs sh /man/1/ftest sh /man/1/itest sh /man/1/listen +sh /man/1/man sh /man/1/mk sh /man/1/rcmd sh /man/1/read @@ -50376,6 +50899,7 @@ sh /man/10/parsecmd sh /man/2/0intro sh /man/2/arg sh /man/2/command +sh /man/2/csv sh /man/2/itslib sh /man/2/sh sh /man/2/string @@ -50397,6 +50921,7 @@ sh /man/6/proto sh /man/6/regexp sh /man/8/kfscmd sh /man/8/rstyxd +sh /man/8/shutdown sh /man/8/srv sh /man/8/styxchat sh /man/8/svc @@ -50632,6 +51157,7 @@ shorthand /man/5/0intro shorthands /man/6/keyboard shortly /man/2/ip shorts /man/10/inb +showing /man/1/ar showing /man/1/asm showing /man/1/blur showing /man/1/collab-clients @@ -50719,7 +51245,6 @@ shutdown /man/2/plumbmsg shutdown /man/2/sys-open shutdown /man/2/timers shutdown /man/8/shutdown -shutdown.b /man/8/shutdown shuts /man/2/drawmux shuts /man/2/plumbmsg shutting /man/2/drawmux @@ -50995,8 +51520,10 @@ similar /man/2/sys-0intro similar /man/2/sys-print similar /man/2/translate similar /man/2/ubfa +similar /man/2/w3c-uris similar /man/2/wmsrv similar /man/3/audio +similar /man/3/cmd similar /man/3/dbg similar /man/3/ftl similar /man/3/srv9 @@ -51065,6 +51592,7 @@ simply /man/1/cprof simply /man/1/deb simply /man/1/grid-monitor simply /man/1/idea +simply /man/1/man simply /man/1/mc simply /man/1/mv simply /man/1/sh @@ -51152,6 +51680,7 @@ six /man/6/man sixteen /man/5/walk sixth /man/3/kprof size /man/1/alphabet-fs +size /man/1/ar size /man/1/blur size /man/1/brutus size /man/1/cook @@ -51213,6 +51742,7 @@ size /man/2/prefab-element size /man/2/print size /man/2/pslib size /man/2/readdir +size /man/2/rfc822 size /man/2/secstore size /man/2/security-0intro size /man/2/sexprs @@ -51329,6 +51859,7 @@ sk /man/2/spki sk /man/6/auth skeleton /man/4/namespace skip /man/1/dd +skip /man/2/rfc822 skipped /man/1/tiny skipped /man/4/archfs skipped /man/5/0intro @@ -51336,6 +51867,7 @@ skipping /man/5/0intro skips /man/2/keyring-rc4 skips /man/2/sys-tokenize skips /man/9/canvas +skipws /man/2/rfc822 sktopk /man/2/keyring-gensk sktostr /man/2/keyring-certtostr sku /man/2/keyring-auth @@ -51577,6 +52109,7 @@ sometimes /man/6/keyboard sometimes /man/6/sexprs sometimes /man/6/utf sometimes /man/9/canvas +somewhat /man/1/ar somewhat /man/1/sh somewhat /man/10/iar somewhat /man/2/dividers @@ -51653,6 +52186,7 @@ source /man/1/alphabet-abc source /man/1/alphabet-fs source /man/1/alphabet-grid source /man/1/alphabet-main +source /man/1/ar source /man/1/asm source /man/1/auplay source /man/1/avr @@ -51844,6 +52378,7 @@ source /man/2/bufio source /man/2/cfg source /man/2/convcs source /man/2/crc +source /man/2/csv source /man/2/daytime source /man/2/dbm source /man/2/debug @@ -51905,6 +52440,7 @@ source /man/2/pslib source /man/2/rand source /man/2/readdir source /man/2/regex +source /man/2/rfc822 source /man/2/scsiio source /man/2/secstore source /man/2/security-auth @@ -51945,6 +52481,7 @@ source /man/2/venti source /man/2/virgil source /man/2/volume source /man/2/w3c-css +source /man/2/w3c-uris source /man/2/w3c-xpointers source /man/2/wmclient source /man/2/wmlib @@ -52031,6 +52568,7 @@ source /man/6/plumbing source /man/6/proto source /man/6/sbl source /man/6/translate +source /man/7/cddb source /man/7/db source /man/7/dbsrv source /man/8/applylog @@ -52147,6 +52685,7 @@ space /man/2/palmfile space /man/2/prefab-compound space /man/2/prefab-element space /man/2/registries +space /man/2/rfc822 space /man/2/secstore space /man/2/sexprs space /man/2/spki @@ -52357,6 +52896,7 @@ specially /man/1/sh-std specially /man/1/tiny specially /man/10/allocb specially /man/10/mk +specially /man/2/csv specially /man/2/dialog specially /man/3/cons specially /man/8/cs @@ -52386,6 +52926,7 @@ specific /man/2/palmfile specific /man/2/prefab-element specific /man/2/print specific /man/2/prof +specific /man/2/rfc822 specific /man/2/sexprs specific /man/2/sh specific /man/2/spree-allow @@ -52393,6 +52934,7 @@ specific /man/2/spree-cardlib specific /man/2/sys-iounit specific /man/2/tabs specific /man/2/ubfa +specific /man/2/w3c-uris specific /man/3/arch specific /man/3/cons specific /man/3/ether @@ -52516,6 +53058,7 @@ specifies /man/2/prefab-element specifies /man/2/prefab-environ specifies /man/2/prefab-style specifies /man/2/print +specifies /man/2/rfc822 specifies /man/2/sh specifies /man/2/spree-cardlib specifies /man/2/sys-byte2char @@ -52588,6 +53131,7 @@ specify /man/2/format specify /man/2/keyring-0intro specify /man/2/prefab-0intro specify /man/2/prefab-environ +specify /man/2/rfc822 specify /man/2/spree-cardlib specify /man/2/sys-print specify /man/3/draw @@ -52677,6 +53221,7 @@ split /man/10/dmainit split /man/10/qio split /man/2/imagefile split /man/2/sys-tokenize +split /man/2/w3c-uris split /man/3/pipe split /man/3/sd split /man/6/namespace @@ -53041,6 +53586,7 @@ standard /man/4/namespace standard /man/4/registry standard /man/6/sexprs standard /man/6/utf +standard /man/7/cddb standard /man/8/applylog standard /man/8/bootpd standard /man/8/create @@ -53189,6 +53735,7 @@ starts /man/10/dmainit starts /man/10/kbdputc starts /man/10/ntsrv starts /man/10ti925/tihost +starts /man/2/csv starts /man/2/debug starts /man/2/draw-0intro starts /man/2/draw-image @@ -53199,6 +53746,7 @@ starts /man/2/prof starts /man/2/styxpersist starts /man/2/sys-pctl starts /man/2/timers +starts /man/2/w3c-uris starts /man/2/w3c-xpointers starts /man/2/wait starts /man/2/wmsrv @@ -53456,6 +54004,7 @@ stderr /man/1/sh stderr /man/1/sh-std stderr /man/1/yacc stderr /man/2/security-auth +stderr /man/3/cmd stdin /man/1/grid-monitor stdin /man/1/grid-ns stdin /man/1/grid-register @@ -53803,6 +54352,7 @@ stream /man/2/filter-deflate stream /man/2/filter-slip stream /man/2/imagefile stream /man/2/keyring-rc4 +stream /man/2/rfc822 stream /man/2/spree stream /man/2/sys-print stream /man/2/sys-read @@ -53822,6 +54372,8 @@ stream.b /man/1/stream streamed /man/2/convcs streamers /man/1/stream streaming /man/1/stream +streamlined /man/2/rfc822 +streams /man/1/os streams /man/1/stream streams /man/2/convcs streams /man/2/keyring-getmsg @@ -53829,7 +54381,6 @@ streams /man/2/keyring-getstring streams /man/2/sys-stat streams /man/2/wmlib streams /man/3/audio -streams /man/3/cmd streams /man/6/ubfa streams /man/6/utf streams /man/7/db @@ -53915,6 +54466,7 @@ string /man/2/bufio string /man/2/cfg string /man/2/command string /man/2/convcs +string /man/2/csv string /man/2/daytime string /man/2/dbm string /man/2/debug @@ -53975,6 +54527,7 @@ string /man/2/pslib string /man/2/readdir string /man/2/regex string /man/2/registries +string /man/2/rfc822 string /man/2/scsiio string /man/2/secstore string /man/2/security-0intro @@ -54026,6 +54579,7 @@ string /man/2/venti string /man/2/virgil string /man/2/volume string /man/2/w3c-css +string /man/2/w3c-uris string /man/2/w3c-xpointers string /man/2/wait string /man/2/wmclient @@ -54158,6 +54712,7 @@ strings /man/2/sys-fversion strings /man/2/sys-print strings /man/2/tk strings /man/2/ubfa +strings /man/2/w3c-uris strings /man/3/audio strings /man/3/cons strings /man/3/draw @@ -54574,8 +55129,10 @@ subcommand /man/1/tktester subcommands /man/1/mash-tk subcommands /man/1/tktester subcomponent /man/10/conf +subcomponent /man/2/w3c-uris subcomponents /man/1/webgrab subcomponents /man/2/ubfa +subcomponents /man/2/w3c-uris subcube /man/6/colour subcubes /man/6/colour subdirectories /man/1/acme @@ -54750,6 +55307,7 @@ substrings /man/6/plumbing substructure /man/1/gettar substructure /man/1/rm substructure /man/10/2c +substructure /man/2/w3c-uris substructures /man/10/2c subsumes /man/9/grid subsystem /man/3/fpga @@ -54767,6 +55325,7 @@ subtraction /man/1/sh-expr subtree /man/9/grab subtrees /man/8/applylog subtype /man/10/devattach +subtype /man/2/rfc822 subtype /man/2/sys-self subtype /man/2/sys-stat subtypes /man/2/xml @@ -54949,6 +55508,7 @@ suffix /man/2/dbm suffix /man/2/disks suffix /man/2/draw-image suffix /man/2/names +suffix /man/2/rfc822 suffix /man/2/spki suffix /man/2/w3c-css suffix /man/5/version @@ -54959,6 +55519,7 @@ suffix /man/8/prep suffix /man/9/types suffix1 /man/1/webgrab suffix2 /man/1/webgrab +suffixclass /man/2/rfc822 suffixed /man/1/du suffixed /man/1/tiny suffixed /man/10/atoi @@ -55135,6 +55696,7 @@ support /man/2/imagefile support /man/2/keyring-ipint support /man/2/print support /man/2/prof +support /man/2/rfc822 support /man/2/spki-verifier support /man/2/spree-cardlib support /man/2/spree-gather @@ -55224,6 +55786,7 @@ supports /man/2/security-0intro supports /man/2/spki-verifier supports /man/2/sys-open supports /man/2/ubfa +supports /man/2/w3c-uris supports /man/3/audio supports /man/3/i82365 supports /man/3/sd @@ -55247,10 +55810,12 @@ suppress /man/6/man suppress /man/8/kfscmd suppress /man/8/ping suppressed /man/1/sh +suppresses /man/1/ar suppresses /man/1/comm suppresses /man/1/echo suppresses /man/1/limbo suppresses /man/1/mash-tk +suppresses /man/1/os suppresses /man/1/yacc suppresses /man/10/acid suppresses /man/10/iar @@ -55473,8 +56038,10 @@ syntax /man/2/attrdb syntax /man/2/draw-display syntax /man/2/ip syntax /man/2/names +syntax /man/2/rfc822 syntax /man/2/tk syntax /man/2/w3c-css +syntax /man/2/w3c-uris syntax /man/2/w3c-xpointers syntax /man/3/cmd syntax /man/3/flash @@ -55484,6 +56051,7 @@ syntax /man/6/regexp syntax /man/6/sexprs syntax /man/6/translate syntax /man/6/ubfa +syntax /man/8/httpd syntax /man/8/ping syntax /man/9/bind syntax /man/9/canvas @@ -55675,6 +56243,7 @@ sys /man/7/db sys /man/8/bootpd sys /man/8/collabsrv sys /man/8/cs +sys /man/8/httpd sys /man/8/ping sys /man/8/rstyxd sys /man/8/styxchat @@ -55819,6 +56388,7 @@ tab /man/6/translate tab /man/6/ubfa tab /man/9/text tabbed /man/2/tabs +table /man/1/ar table /man/1/charon table /man/1/cprof table /man/1/fortune @@ -55865,6 +56435,7 @@ table /man/6/dis table /man/6/keyboard table /man/6/man table /man/6/sbl +table /man/7/cddb table /man/8/prep table /man/8/rip table /man/9/grid @@ -56056,6 +56627,7 @@ takes /man/2/plumbmsg takes /man/2/prefab-compound takes /man/2/prefab-element takes /man/2/prof +takes /man/2/rfc822 takes /man/2/secstore takes /man/2/security-0intro takes /man/2/sh @@ -56070,6 +56642,7 @@ takes /man/2/wait takes /man/3/ftl takes /man/3/prog takes /man/6/colour +takes /man/7/cddb takes /man/8/applylog takes /man/8/dhcp takes /man/8/getauthinfo @@ -56081,6 +56654,7 @@ taking /man/1/blur taking /man/1/fs taking /man/1/mash-make taking /man/2/bufio +taking /man/2/csv taking /man/2/draw-example taking /man/2/sh taking /man/2/styxservers @@ -56103,8 +56677,10 @@ tanh /man/2/math-elem tape /man/1/dd tape /man/1/mux tapping /man/1/wm-misc +tar /man/1/ar tar /man/1/gettar tar /man/4/tarfs +tar.gz /man/1/ar tarfile /man/4/tarfs tarfs /man/1/gettar tarfs /man/4/archfs @@ -56296,6 +56872,7 @@ template /man/1/tktester template /man/4/factotum templates /man/1/tktester templates /man/4/factotum +temporaries /man/1/ar temporaries /man/10/iar temporarily /man/1/acme temporarily /man/10/lock @@ -56366,6 +56943,8 @@ termination /man/1/tiny termination /man/10/acid termination /man/10/kproc terminator /man/1/tiny +terminator /man/2/csv +terminators /man/2/csv terminology /man/2/draw-0intro terms /man/1/charon terms /man/1/math-misc @@ -56480,6 +57059,7 @@ text /man/2/alphabet-intro text /man/2/asn1 text /man/2/bufio text /man/2/convcs +text /man/2/csv text /man/2/daytime text /man/2/disks text /man/2/draw-0intro @@ -56501,6 +57081,7 @@ text /man/2/prefab-compound text /man/2/prefab-element text /man/2/prefab-style text /man/2/print +text /man/2/rfc822 text /man/2/secstore text /man/2/sexprs text /man/2/smtp @@ -56515,6 +57096,7 @@ text /man/2/translate text /man/2/ubfa text /man/2/venti text /man/2/w3c-css +text /man/2/w3c-uris text /man/2/w3c-xpointers text /man/2/xml text /man/3/dbg @@ -56607,6 +57189,7 @@ textual /man/2/scsiio textual /man/2/secstore textual /man/2/sexprs textual /man/2/spki +textual /man/2/w3c-uris textual /man/2/w3c-xpointers textual /man/3/arch textual /man/3/cmd @@ -56644,6 +57227,7 @@ textual /man/9/text textually /man/1/acme textually /man/2/ip textually /man/2/keyring-ipint +textually /man/2/w3c-uris textually /man/3/dbg textually /man/3/pnp textually /man/8/signer @@ -56676,6 +57260,7 @@ th /man/2/regex th /man/2/spree-cardlib th /man/6/colour th /man/6/man +th /man/7/cddb th /man/9/choicebutton th /man/9/grid th /man/9/text @@ -56850,6 +57435,7 @@ time /man/1/grid-register time /man/1/itest time /man/1/limbo time /man/1/ls +time /man/1/man time /man/1/mash time /man/1/math-misc time /man/1/mk @@ -56859,6 +57445,7 @@ time /man/1/ps time /man/1/sh time /man/1/sh-file2chan time /man/1/sh-std +time /man/1/sh-tk time /man/1/time time /man/1/timestamp time /man/1/touch @@ -56900,6 +57487,7 @@ time /man/2/palmfile time /man/2/prof time /man/2/readdir time /man/2/registries +time /man/2/rfc822 time /man/2/scsiio time /man/2/secstore time /man/2/security-0intro @@ -56942,6 +57530,7 @@ time /man/6/keys time /man/6/keytext time /man/6/ndb time /man/6/utf +time /man/7/cddb time /man/8/applylog time /man/8/bootpd time /man/8/changelogin @@ -56990,6 +57579,7 @@ timer.start /man/2/timers timers /man/2/timers timers.m /man/2/timers times /man/1/acme +times /man/1/ar times /man/1/cprof times /man/1/itest times /man/1/mash-make @@ -57012,6 +57602,7 @@ times /man/3/tls times /man/4/kfs times /man/5/0intro times /man/6/translate +times /man/7/cddb times /man/8/changelogin times /man/8/mkfs times /man/9/text @@ -57147,6 +57738,7 @@ tk.m /man/2/wmclient tk2ms /man/10/seconds tk2sec /man/10/seconds tkarg /man/1/tkcmd +tkclient /man/1/sh-tk tkclient /man/1/toolbar tkclient /man/1/wm tkclient /man/2/draw-context @@ -57181,6 +57773,7 @@ tmget /man/3/dbg tmp /man/1/alphabet-abc tmp /man/1/alphabet-fs tmp /man/1/alphabet-grid +tmp /man/1/ar tmp /man/1/blur tmp /man/1/diff tmp /man/1/fs @@ -57246,7 +57839,9 @@ toggles /man/9/listbox toggles /man/9/menu toggling /man/9/menu toint /man/2/string +tok /man/2/rfc822 token /man/1/yacc +token /man/2/rfc822 token /man/2/sexprs token /man/2/sys-dial token /man/6/sexprs @@ -57259,6 +57854,7 @@ tokenize /man/2/sys-tokenize tokenize.c /man/10/getfields tokens /man/1/yacc tokens /man/10/getfields +tokens /man/2/rfc822 tokens /man/2/sexprs tokens /man/2/spree tokens /man/2/wmsrv @@ -57356,6 +57952,7 @@ total /man/3/prog total /man/4/factotum total /man/4/iostats total /man/5/stat +total /man/7/cddb total /man/8/prep total /man/9/canvas total /man/9/listbox @@ -57429,11 +58026,16 @@ track /man/1/blur track /man/2/disks track /man/4/dossrv track /man/4/spree +track /man/7/cddb track /man/8/plumber track /man/8/prep track /man/9/menu track /man/9/text +track's /man/7/cddb +track0id /man/7/cddb trackballs /man/2/draw-0intro +tracknid /man/7/cddb +tracks /man/7/cddb trademark /man/6/man traditional /man/10/plan9.ini traditional /man/2/arg @@ -57469,6 +58071,7 @@ transfer /man/10/error transfer /man/10/inb transfer /man/10ti925/tihost transfer /man/2/keyring-0intro +transfer /man/2/rfc822 transfer /man/2/smtp transfer /man/2/spree transfer /man/2/spree-cardlib @@ -57786,6 +58389,7 @@ trip /man/8/ping triple /man/2/draw-display triple /man/2/exception triple /man/2/w3c-css +triple /man/2/w3c-uris triple /man/6/colour triplets /man/2/draw-0intro trivial /man/2/tftp @@ -57908,6 +58512,7 @@ tuple /man/2/prefab-compound tuple /man/2/readdir tuple /man/2/regex tuple /man/2/registries +tuple /man/2/rfc822 tuple /man/2/secstore tuple /man/2/security-ssl tuple /man/2/sexprs @@ -57932,6 +58537,7 @@ tuple /man/2/translate tuple /man/2/ubfa tuple /man/2/venti tuple /man/2/w3c-css +tuple /man/2/w3c-uris tuple /man/2/w3c-xpointers tuple /man/2/wait tuple /man/2/wmlib @@ -57949,6 +58555,7 @@ tuples /man/2/convcs tuples /man/2/keyset tuples /man/2/pop3 tuples /man/2/registries +tuples /man/2/rfc822 tuples /man/2/sh tuples /man/2/sys-0intro tuples /man/2/sys-file2chan @@ -57998,6 +58605,7 @@ twelve /man/2/ether twelve /man/3/cons twelve /man/3/ether twelve /man/6/image +twice /man/1/ar twice /man/1/charon twice /man/10/iar twice /man/2/cfg @@ -58096,6 +58704,7 @@ type /man/2/prefab-style type /man/2/print type /man/2/prof type /man/2/registries +type /man/2/rfc822 type /man/2/selectfile type /man/2/sexprs type /man/2/sh @@ -58229,6 +58838,7 @@ types /man/2/prefab-0intro types /man/2/prefab-element types /man/2/prefab-environ types /man/2/print +types /man/2/rfc822 types /man/2/security-0intro types /man/2/spki types /man/2/styx @@ -58437,6 +59047,7 @@ udpmsg /man/3/ip uexp /man/1/yacc ugo /man/1/chmod uhci /man/10/plan9.ini +uid /man/1/ar uid /man/10/ar uid /man/10/devattach uid /man/10/iar @@ -58699,6 +59310,7 @@ unfortunately /man/3/cmd unfreeze /man/3/tv ungetb /man/2/bufio ungetc /man/2/bufio +ungetc /man/2/rfc822 unhandled /man/2/0intro unibrowse /man/1/wm-misc unibrowse.b /man/1/wm-misc @@ -58736,6 +59348,7 @@ unicode.9.font /man/9/types unicode.b /man/1/unicode unicoderange /man/2/w3c-css unidata /man/1/wm-misc +uniform /man/2/w3c-uris uniformly /man/1/acme uniformly /man/6/colour uniformly /man/9/pack @@ -58751,6 +59364,7 @@ uninitialized /man/5/attach uninitialized /man/5/version unintercepted /man/2/security-0intro uninterpreted /man/1/sh-alphabet +uninterpreted /man/2/rfc822 uninterpreted /man/2/w3c-css uninterpreted /man/6/utf uninterrupted /man/2/spree @@ -58873,6 +59487,7 @@ universalstring /man/2/asn1 university /man/9/0intro university /man/9/1copyright unix /man/1/0intro +unix /man/1/ar unix /man/1/diff unix /man/1/gzip unix /man/1/mash @@ -58965,6 +59580,7 @@ unless /man/9/menu unless /man/9/pack unless /man/9/radiobutton unless /man/9/text +unlex /man/2/rfc822 unlike /man/1/sh-std unlike /man/1/sh-string unlike /man/10/plan9.ini @@ -59073,9 +59689,11 @@ unquoted /man/1/mk unquoted /man/1/sh unquoted /man/1/wm-sh unquoted /man/10/mk +unquoted /man/2/rfc822 unquoted /man/2/sexprs unquoted /man/2/string unquoted /man/6/sexprs +unquotes /man/2/csv unreachable /man/3/ip unread /man/1/wm-sh unread /man/10/allocb @@ -59286,8 +59904,17 @@ ureg /man/3/dbg ureg.h /man/10/0intro ureg.h /man/10/intrenable uri /man/2/w3c-css +uri /man/2/w3c-uris uri /man/2/w3c-xpointers uri /man/8/httpd +uri's /man/2/w3c-uris +uri.authority /man/2/w3c-uris +uri.parse /man/2/w3c-uris +uri.query /man/2/w3c-uris +uri.text /man/2/w3c-uris +uris /man/2/w3c-uris +uris.b /man/2/w3c-uris +uris.m /man/2/w3c-uris url /man/1/charon url /man/1/webgrab url /man/2/w3c-css @@ -59338,6 +59965,7 @@ user /man/1/0intro user /man/1/acme user /man/1/alphabet-fs user /man/1/alphabet-main +user /man/1/ar user /man/1/bind user /man/1/cd user /man/1/charon @@ -59509,14 +60137,17 @@ user's /man/6/proto user's /man/8/getauthinfo userdir /man/1/charon userid /man/8/virgild +userinfo /man/2/w3c-uris username /man/1/deb username /man/1/rcmd username /man/1/toolbar username /man/10/odbc +username /man/2/w3c-uris username /man/3/ip username /man/7/db username /man/8/getauthinfo usernames /man/10/eve +userpw /man/2/w3c-uris users /man/1/0intro users /man/1/collab-clients users /man/1/emu @@ -59674,6 +60305,7 @@ using /man/2/timers using /man/2/tk using /man/2/translate using /man/2/ubfa +using /man/2/w3c-uris using /man/2/w3c-xpointers using /man/2/wmsrv using /man/3/arch @@ -59880,6 +60512,7 @@ utility /man/10/0intro utility /man/10/styxserver utility /man/2/exception utility /man/2/keyring-ipint +utility /man/2/rfc822 utility /man/2/sh utility /man/2/styxservers utils /man/1/idea @@ -59949,6 +60582,7 @@ val /man/2/format val /man/2/hash val /man/2/plumbmsg val /man/2/registries +val /man/2/rfc822 val /man/2/spree val /man/2/stringinttab val /man/2/ubfa @@ -60108,6 +60742,7 @@ value /man/2/bufio value /man/2/cfg value /man/2/convcs value /man/2/crc +value /man/2/csv value /man/2/dbm value /man/2/debug value /man/2/dhcpclient @@ -60145,6 +60780,7 @@ value /man/2/prof value /man/2/pslib value /man/2/readdir value /man/2/registries +value /man/2/rfc822 value /man/2/scsiio value /man/2/secstore value /man/2/security-0intro @@ -60181,6 +60817,7 @@ value /man/2/sys-werrstr value /man/2/timers value /man/2/ubfa value /man/2/w3c-css +value /man/2/w3c-uris value /man/2/w3c-xpointers value /man/2/wait value /man/2/wmsrv @@ -60234,6 +60871,7 @@ value /man/6/sbl value /man/6/sexprs value /man/6/ubfa value /man/6/utf +value /man/7/cddb value /man/7/db value /man/8/bootpd value /man/8/changelogin @@ -60344,6 +60982,7 @@ values /man/2/attrdb values /man/2/bufio-chanfill values /man/2/cfg values /man/2/convcs +values /man/2/csv values /man/2/daytime values /man/2/dbm values /man/2/dhcpclient @@ -60365,6 +61004,7 @@ values /man/2/palmfile values /man/2/popup values /man/2/readdir values /man/2/registries +values /man/2/rfc822 values /man/2/secstore values /man/2/security-0intro values /man/2/sexprs @@ -60381,6 +61021,7 @@ values /man/2/sys-stat values /man/2/ubfa values /man/2/volume values /man/2/w3c-css +values /man/2/w3c-uris values /man/2/w3c-xpointers values /man/3/audio values /man/3/cons @@ -60700,6 +61341,7 @@ verbatim /man/1/alphabet-abc verbatim /man/1/alphabet-grid verbatim /man/6/sexprs verbatim /man/9/1copyright +verbose /man/1/ar verbose /man/1/secstore verbose /man/10/iar verbose /man/2/filter-deflate @@ -61004,6 +61646,7 @@ visible /man/1/cpu visible /man/1/listen visible /man/1/mash-tk visible /man/1/mk +visible /man/1/sh-tk visible /man/10/2c visible /man/10/kproc visible /man/10/mk @@ -61153,12 +61796,15 @@ vseprint /man/10/print vsmprint /man/10/print vsnprint /man/10/print vsync /man/3/vga +vuaibclo /man/1/ar vuaibclo /man/10/iar vulnerable /man/2/security-0intro vv /man/1/webgrab vxxxx /man/10/iar vy1 /man/3/tv +w3c /man/2/rfc822 w3c /man/2/w3c-css +w3c /man/2/w3c-uris w3c /man/2/w3c-xpointers wait /man/1/charon wait /man/1/mash @@ -61248,6 +61894,7 @@ wants /man/2/sh warn /man/10/2c warn /man/2/itslib warning /man/1/acme +warning /man/1/ar warning /man/1/limbo warning /man/1/mkdir warning /man/10/2c @@ -61906,6 +62553,7 @@ won't /man/9/image won't /man/9/scale wordend /man/9/text wordstart /man/9/text +wordval /man/2/rfc822 wordy /man/1/alphabet-abc wordy /man/1/alphabet-grid workdir /man/1/plumb @@ -62024,6 +62672,7 @@ write /man/10/qlock write /man/10/styxserver write /man/2/bufio write /man/2/bufio-chanfill +write /man/2/csv write /man/2/dbm write /man/2/diskblocks write /man/2/draw-context @@ -62479,6 +63128,7 @@ xoff /man/3/eia xon /man/3/eia xor /man/1/fc xor /man/1/sh-expr +xor /man/2/keyring-ipint xor /man/8/signer xored /man/2/crc xorigin /man/9/canvas @@ -62517,6 +63167,7 @@ xview /man/9/scrollbar xview /man/9/text xx /man/1/fc xx /man/2/draw-example +xx /man/2/w3c-uris xx /man/6/man xx,yy /man/2/draw-example xxx /man/10/plan9.ini @@ -72,7 +72,7 @@ nukedist:V: nuke for j in $DIRS utils tools do echo "(cd $j; mk $MKFLAGS $stem)" - (cd $j; mk $MKFLAGS $stem) + (cd $j; mk $MKFLAGS $stem) || exit 1 done &-Nt:QV: @@ -100,7 +100,7 @@ emu/&-Posix:QV: for j in $EMUDIRS do echo "(cd $j; mk $MKFLAGS $stem)" - (cd $j; mk $MKFLAGS $stem) + (cd $j; mk $MKFLAGS $stem) || exit 1 done emu/&-Nt:QV: @@ -121,7 +121,7 @@ kernel/&-Posix:QV: for j in $KERNEL_DIRS do echo "(cd $j; mk $MKFLAGS $stem)" - (cd $j; mk $MKFLAGS $stem) + (cd $j; mk $MKFLAGS $stem) || exit 1 done kernel/&-Nt:QV: diff --git a/mkfiles/mkfile-FreeBSD-386 b/mkfiles/mkfile-FreeBSD-386 index f7846a76..8ac7d34b 100644 --- a/mkfiles/mkfile-FreeBSD-386 +++ b/mkfiles/mkfile-FreeBSD-386 @@ -6,7 +6,7 @@ O= o OS= o AR= ar -ARFLAGS= crvs +ARFLAGS= ruvs AS= cc -c ASFLAGS= diff --git a/mkfiles/mkfile-Linux-386 b/mkfiles/mkfile-Linux-386 index fbbbc766..e772df87 100644 --- a/mkfiles/mkfile-Linux-386 +++ b/mkfiles/mkfile-Linux-386 @@ -6,7 +6,7 @@ O= o OS= o AR= ar -ARFLAGS= crvs +ARFLAGS= ruvs AS= cc -c -m32 ASFLAGS= diff --git a/mkfiles/mkfile-MacOSX-power b/mkfiles/mkfile-MacOSX-power index df29d6a4..de1b29db 100644 --- a/mkfiles/mkfile-MacOSX-power +++ b/mkfiles/mkfile-MacOSX-power @@ -6,10 +6,10 @@ O= o OS= o AR= ar -ARFLAGS= crvs +ARFLAGS= ruvs A= a -AS= cc -c +AS= cc -c -arch ppc ASFLAGS= CC= cc -c @@ -23,7 +23,7 @@ COPTFLAGS= -O2 CDEBFLAGS= -g CTHREADFLAGS= -LD= cc +LD= cc -arch ppc LDFLAGS= -multiply_defined suppress SYSLIBS= diff --git a/mkfiles/mkfile-Unixware-386 b/mkfiles/mkfile-Unixware-386 index 28a183c8..b92d16b5 100644 --- a/mkfiles/mkfile-Unixware-386 +++ b/mkfiles/mkfile-Unixware-386 @@ -10,7 +10,7 @@ OS= o AR= ar -ARFLAGS= crvs +ARFLAGS= ruvs AS= cc -c ASFLAGS= diff --git a/mkfiles/mklibsubdirs b/mkfiles/mklibsubdirs index 2a0424a7..09949cad 100644 --- a/mkfiles/mklibsubdirs +++ b/mkfiles/mklibsubdirs @@ -20,6 +20,6 @@ clean:V: clean-$SHELLTYPE do if test -d $j; then echo "(cd $j; mk $MKFLAGS SYSTARG=$SYSTARG OBJTYPE=$OBJTYPE $stem)" - (cd $j; mk $MKFLAGS 'SYSTARG='$SYSTARG 'OBJTYPE='$OBJTYPE $stem) + (cd $j; mk $MKFLAGS 'SYSTARG='$SYSTARG 'OBJTYPE='$OBJTYPE $stem) || exit 1 fi || test ! -e $j done diff --git a/mkfiles/mksubdirs b/mkfiles/mksubdirs index 3192320e..7e1efe05 100644 --- a/mkfiles/mksubdirs +++ b/mkfiles/mksubdirs @@ -20,6 +20,6 @@ clean:V: clean-$SHELLTYPE do if test -d $j; then echo "(cd $j; mk $MKFLAGS $stem)" - (cd $j; mk $MKFLAGS $stem) + (cd $j; mk $MKFLAGS $stem) || exit 1 fi || test ! -e $j done diff --git a/module/keyring.m b/module/keyring.m index 753aea12..08a3ef94 100644 --- a/module/keyring.m +++ b/module/keyring.m @@ -41,6 +41,12 @@ Keyring: module # shifts shl: fn(i: self ref IPint, n: int): ref IPint; shr: fn(i: self ref IPint, n: int): ref IPint; + + # bitwise + and: fn(i1: self ref IPint, i2: ref IPint): ref IPint; + ori: fn(i1: self ref IPint, i2: ref IPint): ref IPint; + xor: fn(i1: self ref IPint, i2: ref IPint): ref IPint; + not: fn(i1: self ref IPint): ref IPint; }; # signature algorithm diff --git a/module/xml.m b/module/xml.m index ee83a0c1..a6d8e09e 100644 --- a/module/xml.m +++ b/module/xml.m @@ -75,4 +75,5 @@ Xml: module { }; init: fn(): string; open: fn(f: string, warning: chan of (Locator, string), preelem: string): (ref Parser, string); + fopen: fn(f: ref Bufio->Iobuf, srcname: string, warning: chan of (Locator, string), preelem: string): (ref Parser, string); }; @@ -5,10 +5,10 @@ ipaq1110 arm Strongarm SA1110 native kernel for Compaq iPAQ 36xx sa1110 arm SA1110 code common to most/all SA1110 platforms (eg, ipaq, cerf) cerf250 arm Intrinsyc Cerfboard250 (PXA250) -gum arm Gumstix PXA255 +gum arm Gumstix PXA255 not yet ready for distribution pxa arm general PXA support -js sparc original port to Javastation-1, not recently tested +js sparc original port to Javastation-1, included as sparc example but will not build ks32 arm ARM Evaluator 7t demo diff --git a/os/ip/loopbackmedium.c b/os/ip/loopbackmedium.c index 69d87449..d2509d95 100644 --- a/os/ip/loopbackmedium.c +++ b/os/ip/loopbackmedium.c @@ -34,7 +34,7 @@ loopbackbind(Ipifc *ifc, int, char**) ifc->arg = lb; ifc->mbps = 1000; - kproc("loopbackread", loopbackread, ifc); + kproc("loopbackread", loopbackread, ifc, 0); } diff --git a/os/ip/rudp.c b/os/ip/rudp.c index ce431333..a1a70e9b 100644 --- a/os/ip/rudp.c +++ b/os/ip/rudp.c @@ -205,7 +205,7 @@ rudpstartackproc(Proto *rudp) qlock(&rpriv->apl); if(rpriv->ackprocstarted == 0){ sprint(kpname, "#I%drudpack", rudp->f->dev); - kproc(kpname, relackproc, rudp); + kproc(kpname, relackproc, rudp, 0); rpriv->ackprocstarted = 1; } qunlock(&rpriv->apl); diff --git a/os/ipaq1110/NOTICE b/os/ipaq1110/NOTICE index 11f5df58..c0c5d4c1 100644 --- a/os/ipaq1110/NOTICE +++ b/os/ipaq1110/NOTICE @@ -1,6 +1,6 @@ Inferno® Copyright © 1996-1999 Lucent Technologies Inc. All rights reserved. iPAQ 36xx Inferno port Copyright © 2000-2003 Vita Nuova Holdings Limited. All rights reserved. -This software is subject to the Vita Nuova Liberal Source Licence, except for the following: +This software is subject to the terms of ../NOTICE, except for the following: devaudio.c came from Plan 9 and is covered by the Lucent Public License 1.02 The etherwavelan.c driver was contributed to Plan 9 by nemo@gsyc.escet.urjc.es diff --git a/os/port/devprof.c b/os/port/devprof.c index f0ee3ba8..d9603b6e 100644 --- a/os/port/devprof.c +++ b/os/port/devprof.c @@ -640,7 +640,7 @@ memprof(int c, Heap *h, ulong n) i = p-r->base; k = (r->id<<24) | i; if(c == 0){ - h->pad = k; + h->hprof = k; k = sizeof(Heap); } else{ @@ -657,7 +657,7 @@ memprof(int c, Heap *h, ulong n) if(c == 3) k = *(ulong*)h; else - k = h->pad; + k = h->hprof; if((r = getrec(k>>24)) == nil){ unlock(&profile.l); return; diff --git a/os/port/error.h b/os/port/error.h index 5d5c2f66..88492770 100644 --- a/os/port/error.h +++ b/os/port/error.h @@ -30,9 +30,6 @@ extern char Ehungup[]; /* i/o on hungup channel */ extern char Ebadctl[]; /* bad process or channel control request */ extern char Enodev[]; /* no free devices */ extern char Enoenv[]; /* no free environment resources */ -extern char Emuxshutdown[]; /* mux server shut down */ -extern char Emuxbusy[]; /* all mux channels busy */ -extern char Emuxmsg[]; /* bad mux message format or mismatch */ extern char Ethread[]; /* thread exited */ extern char Estopped[]; /* thread must be stopped */ extern char Enochild[]; /* no living children */ diff --git a/os/port/exportfs.c b/os/port/exportfs.c index 354574ef..c8755fa8 100644 --- a/os/port/exportfs.c +++ b/os/port/exportfs.c @@ -511,6 +511,7 @@ exslave(void*) Export *fs; Exq *q, *t, *fq, **last; char *err; + int nstat; for(;;){ qlock(&exq.qwait); @@ -569,7 +570,11 @@ exslave(void*) break; case Tstat: q->out.stat = q->buf + MSGHDRSZ + BIT16SZ; /* leaves it just where we want it */ - q->out.nstat = q->bsize-(MSGHDRSZ+BIT16SZ); + nstat = q->bsize; + if(nstat > STATMAX) + nstat = STATMAX; + nstat -= MSGHDRSZ+BIT16SZ; + q->out.nstat = nstat; break; } err = (*fcalls[q->in.type])(fs, &q->in, &q->out); diff --git a/os/port/inferno.c b/os/port/inferno.c index de9ea600..82de83d6 100644 --- a/os/port/inferno.c +++ b/os/port/inferno.c @@ -586,6 +586,7 @@ Sys_dial(void *fp) return; f->ret->t1.dfd = mkfd(f->ret->t0); + f->ret->t0 = 0; f->ret->t1.cfd = mkfd(cfd); retstr(dir, &f->ret->t1.dir); } @@ -609,6 +610,7 @@ Sys_announce(void *fp) return; f->ret->t1.cfd = mkfd(f->ret->t0); + f->ret->t0 = 0; retstr(dir, &f->ret->t1.dir); } @@ -632,6 +634,7 @@ Sys_listen(void *fp) return; f->ret->t1.cfd = mkfd(f->ret->t0); + f->ret->t0 = 0; retstr(dir, &f->ret->t1.dir); } diff --git a/os/port/portmkfile b/os/port/portmkfile index 9ee9a7f7..111cc81f 100644 --- a/os/port/portmkfile +++ b/os/port/portmkfile @@ -20,9 +20,6 @@ CLEANEXTRA= %.$O: ../ip/%.c $CC $CFLAGS -I. ../ip/$stem.c -%.$O: ../kfs/%.c - $CC $CFLAGS -I. ../kfs/$stem.c - &.$O: $HFILES $PORTHFILES $INSTALLDIR/%: % diff --git a/utils/0c/peep.c b/utils/0c/peep.c index a9a43da4..a7a60403 100644 --- a/utils/0c/peep.c +++ b/utils/0c/peep.c @@ -403,6 +403,7 @@ copy1(Adr *v1, Adr *v2, Reg *r, int f) * 4 if set and used * 0 otherwise (not touched) */ +int copyu(Prog *p, Adr *v, Adr *s) { @@ -410,7 +411,7 @@ copyu(Prog *p, Adr *v, Adr *s) default: if(debug['P']) - print(" (???)"); + print(" (?)"); return 2; diff --git a/utils/0c/reg.c b/utils/0c/reg.c index 0ed8d696..813ace1a 100644 --- a/utils/0c/reg.c +++ b/utils/0c/reg.c @@ -1115,6 +1115,7 @@ RtoB(int r) return 1L << (r-3); } +int BtoR(long b) { diff --git a/utils/5c/peep.c b/utils/5c/peep.c index 4eded1dc..ba22e40d 100644 --- a/utils/5c/peep.c +++ b/utils/5c/peep.c @@ -884,7 +884,7 @@ copyu(Prog *p, Adr *v, Adr *s) default: if(debug['P']) - print(" (???)"); + print(" (?)"); return 2; case AMOVM: diff --git a/utils/5c/txt.c b/utils/5c/txt.c index d1025e7f..af53e1de 100644 --- a/utils/5c/txt.c +++ b/utils/5c/txt.c @@ -1079,6 +1079,7 @@ gopcode(int o, Node *f1, Node *f2, Node *t) print("%P\n", p); } +int samaddr(Node *f, Node *t) { diff --git a/utils/5l/obj.c b/utils/5l/obj.c index f70f7356..af9380dc 100644 --- a/utils/5l/obj.c +++ b/utils/5l/obj.c @@ -1417,6 +1417,7 @@ nuxiinit(void) Bflush(&bso); } +int find1(long l, int c) { char *p; diff --git a/utils/acid/os-Nt.c b/utils/acid/os-Nt.c index 5966d718..89358db2 100644 --- a/utils/acid/os-Nt.c +++ b/utils/acid/os-Nt.c @@ -168,6 +168,7 @@ runcmd(char *cmd) void (*notefunc)(int); +void os_notify(void (*func)(int)) { notefunc = func; diff --git a/utils/acid/os-Posix.c b/utils/acid/os-Posix.c index 58b4b255..3729db69 100644 --- a/utils/acid/os-Posix.c +++ b/utils/acid/os-Posix.c @@ -104,6 +104,7 @@ runcmd(char *cmd) void (*notefunc)(int); +void os_notify(void (*func)(int)) { notefunc = func; diff --git a/utils/c2l/cc.h b/utils/c2l/cc.h index 3900506d..2d16efb7 100644 --- a/utils/c2l/cc.h +++ b/utils/c2l/cc.h @@ -634,6 +634,7 @@ void pdecl(int, Type*, Sym*); Decl* push(void); Decl* push1(Sym*); Node* revertdcl(void); +#undef round #define round ccround long round(long, int); int rsametype(Type*, Type*, int, int); diff --git a/utils/data2s/data2s.c b/utils/data2s/data2s.c index 97244fb1..56b2aadd 100644 --- a/utils/data2s/data2s.c +++ b/utils/data2s/data2s.c @@ -25,7 +25,10 @@ main(int argc, char *argv[]) Bprint(&bout, "\\z"); Bprint(&bout, "\"\n"); } - Bprint(&bout, "GLOBL %scode+0(SB), $%ld\n", argv[1], len); + if(len == 0) + Bprint(&bout, "GLOBL %scode+0(SB), $1\n", argv[1]); + else + Bprint(&bout, "GLOBL %scode+0(SB), $%ld\n", argv[1], len); Bprint(&bout, "GLOBL %slen+0(SB), $4\n", argv[1]); Bprint(&bout, "DATA %slen+0(SB)/4, $%ld\n", argv[1], len); exits(0); diff --git a/utils/kc/peep.c b/utils/kc/peep.c index da6c1449..541281d0 100644 --- a/utils/kc/peep.c +++ b/utils/kc/peep.c @@ -147,6 +147,7 @@ uniqs(Reg *r) return r1; } +int regzer(Adr *a) { @@ -160,6 +161,7 @@ regzer(Adr *a) return 0; } +int regtyp(Adr *a) { @@ -312,6 +314,7 @@ copyprop(Reg *r0) return copy1(v1, v2, r0->s1, 0); } +int copy1(Adr *v1, Adr *v2, Reg *r, int f) { int t; @@ -404,7 +407,7 @@ copyu(Prog *p, Adr *v, Adr *s) default: if(debug['P']) - print(" (???)"); + print(" (?)"); return 2; diff --git a/utils/kc/reg.c b/utils/kc/reg.c index 35c2e7db..309827f7 100644 --- a/utils/kc/reg.c +++ b/utils/kc/reg.c @@ -1111,6 +1111,7 @@ FtoB(int f) return 1L << (f/2 + 20); } +int BtoF(long b) { diff --git a/utils/kc/txt.c b/utils/kc/txt.c index 71f804ba..d377859a 100644 --- a/utils/kc/txt.c +++ b/utils/kc/txt.c @@ -1111,6 +1111,7 @@ gopcode(int o, Node *f1, Node *f2, Node *t) print("%P\n", p); } +int samaddr(Node *f, Node *t) { diff --git a/utils/lib/yaccpar b/utils/lib/yaccpar index efc1da06..79a8d4e0 100644 --- a/utils/lib/yaccpar +++ b/utils/lib/yaccpar @@ -21,7 +21,7 @@ extern int sprint(char*, char*, ...); char* yytokname(int yyc) { - static char x[10]; + static char x[16]; if(yyc > 0 && yyc <= sizeof(yytoknames)/sizeof(yytoknames[0])) if(yytoknames[yyc-1]) @@ -33,7 +33,7 @@ yytokname(int yyc) char* yystatname(int yys) { - static char x[10]; + static char x[16]; if(yys >= 0 && yys < sizeof(yystates)/sizeof(yystates[0])) if(yystates[yys]) diff --git a/utils/libmach/5db.c b/utils/libmach/5db.c index 1a125042..8312487c 100644 --- a/utils/libmach/5db.c +++ b/utils/libmach/5db.c @@ -689,7 +689,7 @@ armfmov(Map *map, Rgetter rget, Instr *i, ulong pc) /* LDR */ /* BUG: Needs LDH/B, too */ - if((i->w>>26)&0x3 == 1) { + if(((i->w>>26)&0x3) == 1) { if(get4(map, armaddr(map, rget, i), (long*)&v) < 0) { werrstr("can't read instruction: %r"); return pc+4; @@ -698,9 +698,7 @@ armfmov(Map *map, Rgetter rget, Instr *i, ulong pc) } /* MOV */ - v = armshiftval(map, rget, i); - - return v; + return armshiftval(map, rget, i); } static Opcode opcodes[] = diff --git a/utils/mk/graph.c b/utils/mk/graph.c index 018e4aea..a6886d8d 100644 --- a/utils/mk/graph.c +++ b/utils/mk/graph.c @@ -132,7 +132,7 @@ togo(Node *node) } } -static +static int vacuous(Node *node) { Arc *la, *a; diff --git a/utils/mk/mk.c b/utils/mk/mk.c index 98d76623..ba257d7c 100644 --- a/utils/mk/mk.c +++ b/utils/mk/mk.c @@ -183,7 +183,7 @@ update(int fake, Node *node) /* print("----node %s time=%ld flags=0x%x\n", node->name, node->time, node->flags);/**/ } -static +static int pcmp(char *prog, char *p, char *q) { char buf[3*NAMEBLOCK]; diff --git a/utils/mkfile b/utils/mkfile index c70e52d4..cf6bdf0d 100644 --- a/utils/mkfile +++ b/utils/mkfile @@ -99,7 +99,7 @@ nuke:QV: nuke-$TARGMODEL do test -d $j || continue echo "(cd $j; mk $MKFLAGS $stem)" - (cd $j; mk $MKFLAGS $stem) + (cd $j; mk $MKFLAGS $stem) || exit 1 done %-Nt:QV: diff --git a/utils/qa/lex.c b/utils/qa/lex.c index 228ec4e1..e711a5c6 100644 --- a/utils/qa/lex.c +++ b/utils/qa/lex.c @@ -662,6 +662,7 @@ zaddr(Gen *a, int s) case D_OPT: break; + case D_DCR: case D_SPR: case D_OREG: case D_CONST: diff --git a/utils/qc/peep.c b/utils/qc/peep.c index bb9a2b4f..69d021be 100644 --- a/utils/qc/peep.c +++ b/utils/qc/peep.c @@ -309,6 +309,7 @@ uniqs(Reg *r) * if the system forces R0 to be zero, * convert references to $0 to references to R0. */ +int regzer(Adr *a) { if(R0ISZERO) { @@ -323,6 +324,7 @@ regzer(Adr *a) return 0; } +int regtyp(Adr *a) { @@ -490,6 +492,7 @@ copyprop(Reg *r0) return copy1(v1, v2, r0->s1, 0); } +int copy1(Adr *v1, Adr *v2, Reg *r, int f) { int t; @@ -582,7 +585,7 @@ copyu(Prog *p, Adr *v, Adr *s) default: if(debug['P']) - print(" (???)"); + print(" (?)"); return 2; diff --git a/utils/ql/asm.c b/utils/ql/asm.c index 6887a12b..0c546ee3 100644 --- a/utils/ql/asm.c +++ b/utils/ql/asm.c @@ -167,22 +167,22 @@ asmb(void) lput(lcsize); break; case 1: - lput(0x4a6f7921); /* Joy! */ - lput(0x70656666); /* peff */ - lput(0x70777063); /* pwpc */ + lput(0x4a6f7921); /* Joy! */ + lput(0x70656666); /* peff */ + lput(0x70777063); /* pwpc */ lput(1); lput(0); lput(0); lput(0); lput(0); - lput(0x30002); /*YY*/ + lput(0x30002); /*YY*/ lput(0); lput(~0); lput(0); lput(textsize+datsize); lput(textsize+datsize); lput(textsize+datsize); - lput(0xd0); /* header size */ + lput(0xd0); /* header size */ lput(0x10400); lput(~0); lput(0); @@ -215,16 +215,16 @@ asmb(void) lput(0); lput(0); lput(0); - lput(0x3100); /* load address */ + lput(0x3100); /* load address */ lput(0); lput(0); - lput(0); /* whew! */ + lput(0); /* whew! */ break; case 2: if(dlm) lput(0x80000000 | (4*21*21+7)); /* magic */ else - lput(4*21*21+7); /* magic */ + lput(4*21*21+7); /* magic */ lput(textsize); /* sizes */ lput(datsize); lput(bsssize); @@ -242,21 +242,21 @@ asmb(void) lput(symsize); /* nsyms */ lput((0x48L<<16)|15L); /* size of optional hdr and flags */ - lput((0413<<16)|01L); /* magic and version */ + lput((0413<<16)|01L); /* magic and version */ lput(textsize); /* sizes */ lput(datsize); lput(bsssize); lput(entryvalue()); /* va of entry */ lput(INITTEXT); /* va of base of text */ lput(INITDAT); /* va of base of data */ - lput(INITDAT); /* address of TOC */ - lput((1L<<16)|1); /* sn(entry) | sn(text) */ + lput(INITDAT); /* address of TOC */ + lput((1L<<16)|1); /* sn(entry) | sn(text) */ lput((2L<<16)|1); /* sn(data) | sn(toc) */ lput((0L<<16)|3); /* sn(loader) | sn(bss) */ lput((3L<<16)|3); /* maxalign(text) | maxalign(data) */ lput(('1'<<24)|('L'<<16)|0); /* type field, and reserved */ - lput(0); /* max stack allowed */ - lput(0); /* max data allowed */ + lput(0); /* max stack allowed */ + lput(0); /* max data allowed */ lput(0); lput(0); lput(0); /* reserved */ strnput(".text", 8); /* text segment */ @@ -273,7 +273,7 @@ asmb(void) lput(INITDAT); /* address */ lput(INITDAT); lput(datsize); - lput(rnd(HEADR+textsize, 4096)); /* sizes */ + lput(rnd(HEADR+textsize, 4096));/* sizes */ lput(0L); lput(0L); lput(0L); @@ -291,46 +291,46 @@ asmb(void) break; case 5: strnput("\177ELF", 4); /* e_ident */ - CPUT(1); /* class = 32 bit */ - CPUT(2); /* data = MSB */ - CPUT(1); /* version = CURRENT */ + CPUT(1); /* class = 32 bit */ + CPUT(2); /* data = MSB */ + CPUT(1); /* version = CURRENT */ strnput("", 9); - lput((2L<<16)|20L); /* type = EXEC; machine = PowerPC */ - lput(1L); /* version = CURRENT */ + lput((2L<<16)|20L); /* type = EXEC; machine = PowerPC */ + lput(1L); /* version = CURRENT */ lput(entryvalue() & ~KMASK); /* entry vaddr */ - lput(52L); /* offset to first phdr */ - lput(0L); /* offset to first shdr */ - lput(0L); /* flags = PPC */ - lput((52L<<16)|32L); /* Ehdr & Phdr sizes*/ - lput((3L<<16)|0L); /* # Phdrs & Shdr size */ - lput((0L<<16)|0L); /* # Shdrs & shdr string size */ - - lput(1L); /* text - type = PT_LOAD */ - lput(HEADR); /* file offset */ - lput(INITTEXT & ~KMASK); /* vaddr */ - lput(INITTEXT); /* paddr */ - lput(textsize); /* file size */ - lput(textsize); /* memory size */ - lput(0x05L); /* protections = RX */ - lput(0x10000L); /* alignment code?? */ - - lput(1L); /* data - type = PT_LOAD */ + lput(52L); /* offset to first phdr */ + lput(0L); /* offset to first shdr */ + lput(0L); /* flags = PPC */ + lput((52L<<16)|32L); /* Ehdr & Phdr sizes*/ + lput((3L<<16)|0L); /* # Phdrs & Shdr size */ + lput((0L<<16)|0L); /* # Shdrs & shdr string size */ + + lput(1L); /* text - type = PT_LOAD */ + lput(HEADR); /* file offset */ + lput(INITTEXT & ~KMASK); /* vaddr */ + lput(INITTEXT); /* paddr */ + lput(textsize); /* file size */ + lput(textsize); /* memory size */ + lput(0x05L); /* protections = RX */ + lput(0x10000L); /* alignment */ + + lput(1L); /* data - type = PT_LOAD */ lput(HEADR+textsize); /* file offset */ lput(INITDAT & ~KMASK); /* vaddr */ - lput(INITDAT); /* paddr */ - lput(datsize); /* file size */ - lput(datsize); /* memory size */ - lput(0x07L); /* protections = RWX */ - lput(0x10000L); /* alignment code?? */ + lput(INITDAT); /* paddr */ + lput(datsize); /* file size */ + lput(datsize); /* memory size */ + lput(0x07L); /* protections = RWX */ + lput(0x10000L); /* alignment */ - lput(0L); /* data - type = PT_NULL */ + lput(0L); /* data - type = PT_NULL */ lput(HEADR+textsize+datsize); /* file offset */ lput(0L); lput(0L); - lput(symsize); /* symbol table size */ - lput(lcsize); /* line number size */ - lput(0x04L); /* protections = R */ - lput(0x04L); /* alignment code?? */ + lput(symsize); /* symbol table size */ + lput(lcsize); /* line number size */ + lput(0x04L); /* protections = R */ + lput(0x04L); /* alignment code?? */ break; } cflush(); diff --git a/utils/ql/l.h b/utils/ql/l.h index 7ec4aa60..34cb742f 100644 --- a/utils/ql/l.h +++ b/utils/ql/l.h @@ -49,7 +49,7 @@ struct Prog short line; short mark; short optab; /* could be uchar */ - uchar as; + ushort as; char reg; }; struct Sym @@ -74,7 +74,7 @@ struct Autom }; struct Optab { - uchar as; + ushort as; char a1; char a2; char a3; diff --git a/utils/sqz/sqz.c b/utils/sqz/sqz.c index cf399e45..d5777a26 100644 --- a/utils/sqz/sqz.c +++ b/utils/sqz/sqz.c @@ -41,12 +41,10 @@ static Word* hash2[HSIZE]; static Sqhdr sqhdr; static ulong chksum; -static int aflag; /* all: both text (squeezed) and data (not) */ static int dflag; /* squeeze data, not text */ static int tflag; /* squeeze text, leave data as-is */ static int qflag = 1; /* enable powerpc option */ static int wflag; /* write output */ -static int zflag; /* use top==0 for data segment */ static int islittle; /* object code uses little-endian byte order */ static int debug; static char* fname; diff --git a/utils/tc/peep.c b/utils/tc/peep.c index 2842b3e3..e53b0cdd 100644 --- a/utils/tc/peep.c +++ b/utils/tc/peep.c @@ -442,7 +442,7 @@ copyu(Prog *p, Adr *v, Adr *s) default: if(debug['P']) - print(" (???)"); + print(" (?)"); return 2; case AMOVM: diff --git a/utils/vc/peep.c b/utils/vc/peep.c index a9a43da4..1feff699 100644 --- a/utils/vc/peep.c +++ b/utils/vc/peep.c @@ -410,7 +410,7 @@ copyu(Prog *p, Adr *v, Adr *s) default: if(debug['P']) - print(" (???)"); + print(" (?)"); return 2; diff --git a/utils/vc/reg.c b/utils/vc/reg.c index c0d294c9..bde52df0 100644 --- a/utils/vc/reg.c +++ b/utils/vc/reg.c @@ -1112,6 +1112,7 @@ RtoB(int r) return 1L << (r-3); } +int BtoR(long b) { diff --git a/utils/vl/obj.c b/utils/vl/obj.c index 26c80683..4c9cafb7 100644 --- a/utils/vl/obj.c +++ b/utils/vl/obj.c @@ -1268,6 +1268,7 @@ nuxiinit(void) Bflush(&bso); } +int find1(long l, int c) { char *p; diff --git a/utils/vl/span.c b/utils/vl/span.c index 706d8b0e..488c93d3 100644 --- a/utils/vl/span.c +++ b/utils/vl/span.c @@ -179,6 +179,7 @@ regoff(Adr *a) return instoffset; } +int aclass(Adr *a) { Sym *s; diff --git a/utils/yacc/yaccpar b/utils/yacc/yaccpar index efc1da06..79a8d4e0 100644 --- a/utils/yacc/yaccpar +++ b/utils/yacc/yaccpar @@ -21,7 +21,7 @@ extern int sprint(char*, char*, ...); char* yytokname(int yyc) { - static char x[10]; + static char x[16]; if(yyc > 0 && yyc <= sizeof(yytoknames)/sizeof(yytoknames[0])) if(yytoknames[yyc-1]) @@ -33,7 +33,7 @@ yytokname(int yyc) char* yystatname(int yys) { - static char x[10]; + static char x[16]; if(yys >= 0 && yys < sizeof(yystates)/sizeof(yystates[0])) if(yystates[yys]) |