changelog shortlog tags branches files raw gz bz2 help

Mercurial > hg > plan9front / changeset: Import sources from 2011-03-30 iso image - sys/lib

changeset 3: 3ccda4f00502
parent 2: ee18c165c460
child 4: efddda59690a
author: Taru Karttunen <taruti@taruti.net>
date: Wed, 30 Mar 2011 16:53:33 +0300
files: sys/lib/acid/386 sys/lib/acid/68020 sys/lib/acid/acme sys/lib/acid/alef sys/lib/acid/alpha sys/lib/acid/arm sys/lib/acid/coverage sys/lib/acid/kernel sys/lib/acid/leak sys/lib/acid/mips sys/lib/acid/network sys/lib/acid/pool sys/lib/acid/port sys/lib/acid/power sys/lib/acid/sparc sys/lib/acid/sparc64 sys/lib/acid/syscall sys/lib/acid/thread sys/lib/acid/transcript sys/lib/acid/trump sys/lib/acid/truss sys/lib/acid/window sys/lib/agent.config sys/lib/amspell sys/lib/antiword/8859-1.txt sys/lib/antiword/8859-10.txt sys/lib/antiword/8859-13.txt sys/lib/antiword/8859-14.txt sys/lib/antiword/8859-15.txt sys/lib/antiword/8859-16.txt sys/lib/antiword/8859-2.txt sys/lib/antiword/8859-3.txt sys/lib/antiword/8859-4.txt sys/lib/antiword/8859-5.txt sys/lib/antiword/8859-6.txt sys/lib/antiword/8859-7.txt sys/lib/antiword/8859-8.txt sys/lib/antiword/8859-9.txt sys/lib/antiword/Default sys/lib/antiword/Example sys/lib/antiword/MacRoman.txt sys/lib/antiword/UTF-8.txt sys/lib/antiword/Unicode01 sys/lib/antiword/Unicode15 sys/lib/antiword/cp1250.txt sys/lib/antiword/cp1251.txt sys/lib/antiword/cp1252.txt sys/lib/antiword/cp437.txt sys/lib/antiword/cp850.txt sys/lib/antiword/cp852.txt sys/lib/antiword/cp862.txt sys/lib/antiword/cp866.txt sys/lib/antiword/fontnames sys/lib/antiword/fontnames.russian sys/lib/antiword/koi8-r.txt sys/lib/antiword/koi8-u.txt sys/lib/antiword/roman.txt sys/lib/astar/a100i.cp sys/lib/astar/a100p.cp sys/lib/backup/backup sys/lib/backup/backuparenas sys/lib/backup/dupdisc sys/lib/backup/funcs sys/lib/backup/mkfile sys/lib/backup/restore sys/lib/backup/tobackup sys/lib/bclib sys/lib/brspell sys/lib/dist/cdstub/bootdisk.img sys/lib/dist/cmd/bargraph.c sys/lib/dist/cmd/bflz.c sys/lib/dist/cmd/bzfs/bzfs.h sys/lib/dist/cmd/bzfs/mkext.c sys/lib/dist/cmd/bzfs/mkfile sys/lib/dist/cmd/bzfs/oramfs.c sys/lib/dist/cmd/bzfs/unbflz.c sys/lib/dist/cmd/bzfs/unbzip.c sys/lib/dist/cmd/cdsh.c sys/lib/dist/cmd/clog.c sys/lib/dist/cmd/mkfile sys/lib/dist/cmd/multi/mkfile sys/lib/dist/cmd/multi/mkmulti sys/lib/dist/cmd/multi/multi.c sys/lib/dist/cmd/tailfsrv.c sys/lib/dist/cmd/touchfs.c sys/lib/dist/cmd/unbflz.c sys/lib/dist/logcompress.awk sys/lib/dist/logtime.awk sys/lib/dist/mkfile sys/lib/dist/pc/cd0.proto sys/lib/dist/pc/emptyfile sys/lib/dist/pc/glenda/bin/rc/riostart sys/lib/dist/pc/glenda/lib/first.window sys/lib/dist/pc/glenda/lib/profile sys/lib/dist/pc/inst/bootfloppy sys/lib/dist/pc/inst/bootplan9 sys/lib/dist/pc/inst/bootsetup sys/lib/dist/pc/inst/bootwin9x sys/lib/dist/pc/inst/bootwinnt sys/lib/dist/pc/inst/configarch sys/lib/dist/pc/inst/configdist sys/lib/dist/pc/inst/configether sys/lib/dist/pc/inst/configfs sys/lib/dist/pc/inst/configip sys/lib/dist/pc/inst/confignet sys/lib/dist/pc/inst/configppp sys/lib/dist/pc/inst/copydist sys/lib/dist/pc/inst/defs sys/lib/dist/pc/inst/download sys/lib/dist/pc/inst/finish sys/lib/dist/pc/inst/fmtfossil sys/lib/dist/pc/inst/fmtventi sys/lib/dist/pc/inst/gui sys/lib/dist/pc/inst/halt sys/lib/dist/pc/inst/hasmbr sys/lib/dist/pc/inst/hdrs sys/lib/dist/pc/inst/is9660 sys/lib/dist/pc/inst/isext2 sys/lib/dist/pc/inst/isfat sys/lib/dist/pc/inst/isfossil sys/lib/dist/pc/inst/isventi sys/lib/dist/pc/inst/isventiarenas sys/lib/dist/pc/inst/isventiisect sys/lib/dist/pc/inst/main sys/lib/dist/pc/inst/mainloop sys/lib/dist/pc/inst/mkini.awk sys/lib/dist/pc/inst/mountdist sys/lib/dist/pc/inst/mountfossil sys/lib/dist/pc/inst/mountfs sys/lib/dist/pc/inst/moveoldfs sys/lib/dist/pc/inst/partdisk sys/lib/dist/pc/inst/prepdisk sys/lib/dist/pc/inst/replcfg sys/lib/dist/pc/inst/startether sys/lib/dist/pc/inst/startppp sys/lib/dist/pc/inst/startwin sys/lib/dist/pc/inst/stop sys/lib/dist/pc/inst/stopether sys/lib/dist/pc/inst/stopppp sys/lib/dist/pc/inst/textonly sys/lib/dist/pc/inst/watchfd sys/lib/dist/pc/inst/xxx sys/lib/dist/pc/mkfile sys/lib/dist/pc/plan9.ini sys/lib/dist/pc/plan9.ini.blank sys/lib/dist/pc/plan9.ini.cd sys/lib/dist/pc/plan9.ini.vmware sys/lib/dist/pc/proto sys/lib/dist/pc/sub/D003753 sys/lib/dist/pc/sub/F004116 sys/lib/dist/pc/sub/bind sys/lib/dist/pc/sub/bunzip2 sys/lib/dist/pc/sub/common sys/lib/dist/pc/sub/compactdb sys/lib/dist/pc/sub/local sys/lib/dist/pc/sub/mkdir sys/lib/dist/pc/sub/ndist sys/lib/dist/pc/sub/pci sys/lib/dist/pc/sub/pwd sys/lib/dist/pc/sub/ramfs sys/lib/dist/pc/sub/sleep sys/lib/dist/pc/sub/termrc sys/lib/dist/pc/sub/unmount sys/lib/dist/pc/sub/users sys/lib/dist/pc/sub/vmware sys/lib/dist/pc/subst/plan9.ini sys/lib/dist/setup sys/lib/eqnchar sys/lib/fax/faxgoose sys/lib/fax/faxtickle sys/lib/fax/faxtry sys/lib/fax/h.ps sys/lib/fax/header sys/lib/fax/receiverc sys/lib/ghostscript/EndOfTask.ps sys/lib/ghostscript/Fontmap.bak sys/lib/ghostscript/Fontmap.gs sys/lib/ghostscript/PDFX_def.ps sys/lib/ghostscript/_Fontmap sys/lib/ghostscript/acctest.ps sys/lib/ghostscript/addxchar.ps sys/lib/ghostscript/align.ps sys/lib/ghostscript/bdftops.ps sys/lib/ghostscript/caption.ps sys/lib/ghostscript/cid2code.ps sys/lib/ghostscript/cidfmap sys/lib/ghostscript/decrypt.ps sys/lib/ghostscript/docie.ps sys/lib/ghostscript/dumphint.ps sys/lib/ghostscript/errpage.ps sys/lib/ghostscript/font/Fontmap sys/lib/ghostscript/font/Fontmap.GS sys/lib/ghostscript/font/README sys/lib/ghostscript/font/a010013l.afm sys/lib/ghostscript/font/a010013l.pfb sys/lib/ghostscript/font/a010013l.pfm sys/lib/ghostscript/font/a010015l.afm sys/lib/ghostscript/font/a010015l.pfb sys/lib/ghostscript/font/a010015l.pfm sys/lib/ghostscript/font/a010033l.afm sys/lib/ghostscript/font/a010033l.pfb sys/lib/ghostscript/font/a010033l.pfm sys/lib/ghostscript/font/a010035l.afm sys/lib/ghostscript/font/a010035l.pfb sys/lib/ghostscript/font/a010035l.pfm sys/lib/ghostscript/font/b018012l.afm sys/lib/ghostscript/font/b018012l.pfb sys/lib/ghostscript/font/b018012l.pfm sys/lib/ghostscript/font/b018015l.afm sys/lib/ghostscript/font/b018015l.pfb sys/lib/ghostscript/font/b018015l.pfm sys/lib/ghostscript/font/b018032l.afm sys/lib/ghostscript/font/b018032l.pfb sys/lib/ghostscript/font/b018032l.pfm sys/lib/ghostscript/font/b018035l.afm sys/lib/ghostscript/font/b018035l.pfb sys/lib/ghostscript/font/b018035l.pfm sys/lib/ghostscript/font/c059013l.afm sys/lib/ghostscript/font/c059013l.pfb sys/lib/ghostscript/font/c059013l.pfm sys/lib/ghostscript/font/c059016l.afm sys/lib/ghostscript/font/c059016l.pfb sys/lib/ghostscript/font/c059016l.pfm sys/lib/ghostscript/font/c059033l.afm sys/lib/ghostscript/font/c059033l.pfb sys/lib/ghostscript/font/c059033l.pfm sys/lib/ghostscript/font/c059036l.afm sys/lib/ghostscript/font/c059036l.pfb sys/lib/ghostscript/font/c059036l.pfm sys/lib/ghostscript/font/d050000l.afm sys/lib/ghostscript/font/d050000l.pfb sys/lib/ghostscript/font/d050000l.pfm sys/lib/ghostscript/font/mkfile sys/lib/ghostscript/font/n019003l.afm sys/lib/ghostscript/font/n019003l.pfb sys/lib/ghostscript/font/n019003l.pfm sys/lib/ghostscript/font/n019004l.afm sys/lib/ghostscript/font/n019004l.pfb sys/lib/ghostscript/font/n019004l.pfm sys/lib/ghostscript/font/n019023l.afm sys/lib/ghostscript/font/n019023l.pfb sys/lib/ghostscript/font/n019023l.pfm sys/lib/ghostscript/font/n019024l.afm sys/lib/ghostscript/font/n019024l.pfb sys/lib/ghostscript/font/n019024l.pfm sys/lib/ghostscript/font/n019043l.afm sys/lib/ghostscript/font/n019043l.pfb sys/lib/ghostscript/font/n019043l.pfm sys/lib/ghostscript/font/n019044l.afm sys/lib/ghostscript/font/n019044l.pfb sys/lib/ghostscript/font/n019044l.pfm sys/lib/ghostscript/font/n019063l.afm sys/lib/ghostscript/font/n019063l.pfb sys/lib/ghostscript/font/n019063l.pfm sys/lib/ghostscript/font/n019064l.afm sys/lib/ghostscript/font/n019064l.pfb sys/lib/ghostscript/font/n019064l.pfm sys/lib/ghostscript/font/n021003l.afm sys/lib/ghostscript/font/n021003l.pfb sys/lib/ghostscript/font/n021003l.pfm sys/lib/ghostscript/font/n021004l.afm sys/lib/ghostscript/font/n021004l.pfb sys/lib/ghostscript/font/n021004l.pfm sys/lib/ghostscript/font/n021023l.afm sys/lib/ghostscript/font/n021023l.pfb sys/lib/ghostscript/font/n021023l.pfm sys/lib/ghostscript/font/n021024l.afm sys/lib/ghostscript/font/n021024l.pfb sys/lib/ghostscript/font/n021024l.pfm sys/lib/ghostscript/font/n022003l.afm sys/lib/ghostscript/font/n022003l.pfb sys/lib/ghostscript/font/n022003l.pfm sys/lib/ghostscript/font/n022004l.afm sys/lib/ghostscript/font/n022004l.pfb sys/lib/ghostscript/font/n022004l.pfm sys/lib/ghostscript/font/n022023l.afm sys/lib/ghostscript/font/n022023l.pfb sys/lib/ghostscript/font/n022023l.pfm sys/lib/ghostscript/font/n022024l.afm sys/lib/ghostscript/font/n022024l.pfb sys/lib/ghostscript/font/n022024l.pfm sys/lib/ghostscript/font/p052003l.afm sys/lib/ghostscript/font/p052003l.pfb sys/lib/ghostscript/font/p052003l.pfm sys/lib/ghostscript/font/p052004l.afm sys/lib/ghostscript/font/p052004l.pfb sys/lib/ghostscript/font/p052004l.pfm sys/lib/ghostscript/font/p052023l.afm sys/lib/ghostscript/font/p052023l.pfb sys/lib/ghostscript/font/p052023l.pfm sys/lib/ghostscript/font/p052024l.afm sys/lib/ghostscript/font/p052024l.pfb sys/lib/ghostscript/font/p052024l.pfm sys/lib/ghostscript/font/s050000l.afm sys/lib/ghostscript/font/s050000l.pfb sys/lib/ghostscript/font/s050000l.pfm sys/lib/ghostscript/font/z003034l.afm sys/lib/ghostscript/font/z003034l.pfb sys/lib/ghostscript/font/z003034l.pfm sys/lib/ghostscript/font2c.ps sys/lib/ghostscript/font2pcl.ps sys/lib/ghostscript/gs_agl.ps sys/lib/ghostscript/gs_btokn.ps sys/lib/ghostscript/gs_ccfnt.ps sys/lib/ghostscript/gs_ce_e.ps sys/lib/ghostscript/gs_cff.ps sys/lib/ghostscript/gs_cidcm.ps sys/lib/ghostscript/gs_ciddc.ps sys/lib/ghostscript/gs_cidfm.ps sys/lib/ghostscript/gs_cidfn.ps sys/lib/ghostscript/gs_cidtt.ps sys/lib/ghostscript/gs_ciecs2.ps sys/lib/ghostscript/gs_ciecs3.ps sys/lib/ghostscript/gs_cmap.ps sys/lib/ghostscript/gs_cmdl.ps sys/lib/ghostscript/gs_cspace.ps sys/lib/ghostscript/gs_css_e.ps sys/lib/ghostscript/gs_dbt_e.ps sys/lib/ghostscript/gs_devcs.ps sys/lib/ghostscript/gs_devn.ps sys/lib/ghostscript/gs_devpxl.ps sys/lib/ghostscript/gs_diskf.ps sys/lib/ghostscript/gs_diskn.ps sys/lib/ghostscript/gs_dpnxt.ps sys/lib/ghostscript/gs_dps.ps sys/lib/ghostscript/gs_dps1.ps sys/lib/ghostscript/gs_dps2.ps sys/lib/ghostscript/gs_dscp.ps sys/lib/ghostscript/gs_epsf.ps sys/lib/ghostscript/gs_fapi.ps sys/lib/ghostscript/gs_fform.ps sys/lib/ghostscript/gs_fntem.ps sys/lib/ghostscript/gs_fonts.ps sys/lib/ghostscript/gs_frsd.ps sys/lib/ghostscript/gs_icc.ps sys/lib/ghostscript/gs_il1_e.ps sys/lib/ghostscript/gs_il2_e.ps sys/lib/ghostscript/gs_img.ps sys/lib/ghostscript/gs_indxd.ps sys/lib/ghostscript/gs_init.ps sys/lib/ghostscript/gs_iso_e.ps sys/lib/ghostscript/gs_kanji.ps sys/lib/ghostscript/gs_ksb_e.ps sys/lib/ghostscript/gs_l2img.ps sys/lib/ghostscript/gs_lev2.ps sys/lib/ghostscript/gs_lgo_e.ps sys/lib/ghostscript/gs_lgx_e.ps sys/lib/ghostscript/gs_ll3.ps sys/lib/ghostscript/gs_mex_e.ps sys/lib/ghostscript/gs_mgl_e.ps sys/lib/ghostscript/gs_mro_e.ps sys/lib/ghostscript/gs_patrn.ps sys/lib/ghostscript/gs_pdf_e.ps sys/lib/ghostscript/gs_pdfwr.ps sys/lib/ghostscript/gs_pfile.ps sys/lib/ghostscript/gs_rdlin.ps sys/lib/ghostscript/gs_res.ps sys/lib/ghostscript/gs_resmp.ps sys/lib/ghostscript/gs_resst.ps sys/lib/ghostscript/gs_sepr.ps sys/lib/ghostscript/gs_setpd.ps sys/lib/ghostscript/gs_statd.ps sys/lib/ghostscript/gs_std_e.ps sys/lib/ghostscript/gs_stres.ps sys/lib/ghostscript/gs_sym_e.ps sys/lib/ghostscript/gs_trap.ps sys/lib/ghostscript/gs_ttf.ps sys/lib/ghostscript/gs_typ32.ps sys/lib/ghostscript/gs_typ42.ps sys/lib/ghostscript/gs_type1.ps sys/lib/ghostscript/gs_wan_e.ps sys/lib/ghostscript/gs_wl1_e.ps sys/lib/ghostscript/gs_wl2_e.ps sys/lib/ghostscript/gs_wl5_e.ps sys/lib/ghostscript/gslp.ps sys/lib/ghostscript/gsnup.ps sys/lib/ghostscript/ht_ccbnm.ps sys/lib/ghostscript/ht_ccsto.ps sys/lib/ghostscript/image-qa.ps sys/lib/ghostscript/impath.ps sys/lib/ghostscript/jispaper.ps sys/lib/ghostscript/landscap.ps sys/lib/ghostscript/level1.ps sys/lib/ghostscript/lines.ps sys/lib/ghostscript/markhint.ps sys/lib/ghostscript/markpath.ps sys/lib/ghostscript/mkcidfm.ps sys/lib/ghostscript/opdfread.ps sys/lib/ghostscript/packfile.ps sys/lib/ghostscript/pcharstr.ps sys/lib/ghostscript/pdf2dsc.ps sys/lib/ghostscript/pdf_base.ps sys/lib/ghostscript/pdf_draw.ps sys/lib/ghostscript/pdf_font.ps sys/lib/ghostscript/pdf_main.ps sys/lib/ghostscript/pdf_ops.ps sys/lib/ghostscript/pdf_rbld.ps sys/lib/ghostscript/pdf_sec-ps.bak sys/lib/ghostscript/pdf_sec.ps sys/lib/ghostscript/pdfeof.ps sys/lib/ghostscript/pdfopt.ps sys/lib/ghostscript/pdfwrite.ps sys/lib/ghostscript/pf2afm.ps sys/lib/ghostscript/pfbtopfa.ps sys/lib/ghostscript/ppath.ps sys/lib/ghostscript/pphs.ps sys/lib/ghostscript/prfont.ps sys/lib/ghostscript/printafm.ps sys/lib/ghostscript/ps2ai.ps sys/lib/ghostscript/ps2ascii.ps sys/lib/ghostscript/ps2epsi.ps sys/lib/ghostscript/quit.ps sys/lib/ghostscript/rollconv.ps sys/lib/ghostscript/showchar.ps sys/lib/ghostscript/showpage.ps sys/lib/ghostscript/stcinfo.ps sys/lib/ghostscript/stcolor.ps sys/lib/ghostscript/stocht.ps sys/lib/ghostscript/tempfilename sys/lib/ghostscript/traceimg.ps sys/lib/ghostscript/traceop.ps sys/lib/ghostscript/type1enc.ps sys/lib/ghostscript/type1ops.ps sys/lib/ghostscript/uninfo.ps sys/lib/ghostscript/unprot.ps sys/lib/ghostscript/viewcmyk.ps sys/lib/ghostscript/viewgif.ps sys/lib/ghostscript/viewjpeg.ps sys/lib/ghostscript/viewmiff.ps sys/lib/ghostscript/viewpbm.ps sys/lib/ghostscript/viewpcx.ps sys/lib/ghostscript/viewps2a.ps sys/lib/ghostscript/wftopfa.ps sys/lib/ghostscript/winmaps.ps sys/lib/ghostscript/wrfont.ps sys/lib/ghostscript/xlatmap sys/lib/ghostscript/zeroline.ps sys/lib/grap.defines sys/lib/httpd.rewrite sys/lib/kbmap/ascii sys/lib/kbmap/azerty sys/lib/kbmap/bg sys/lib/kbmap/de sys/lib/kbmap/dvorak sys/lib/kbmap/dvorakl sys/lib/kbmap/dvorakr sys/lib/kbmap/ee sys/lib/kbmap/es sys/lib/kbmap/fi sys/lib/kbmap/it sys/lib/kbmap/jp sys/lib/kbmap/mouse-csa sys/lib/kbmap/mouse-fn sys/lib/kbmap/n97 sys/lib/kbmap/no sys/lib/kbmap/ru sys/lib/kbmap/svorak sys/lib/kbmap/ua sys/lib/kbmap/uk sys/lib/kbmap/us sys/lib/lex/ncform sys/lib/lp/bin/UNLOCK sys/lib/lp/bin/kill_xerox-4512 sys/lib/lp/bin/lpscratch sys/lib/lp/bin/lpsend.rc sys/lib/lp/bin/true sys/lib/lp/daemon/appletalk sys/lib/lp/daemon/dkcat sys/lib/lp/daemon/dumb sys/lib/lp/daemon/generic sys/lib/lp/daemon/hp sys/lib/lp/daemon/justsend sys/lib/lp/daemon/lpd-tek sys/lib/lp/daemon/lpddaemon sys/lib/lp/daemon/lpdpost sys/lib/lp/daemon/lps sys/lib/lp/daemon/pcclone sys/lib/lp/daemon/post sys/lib/lp/daemon/post.warn sys/lib/lp/daemon/tcppost sys/lib/lp/daemon/tektronix sys/lib/lp/daemon/xante sys/lib/lp/daemon/xerox sys/lib/lp/daemon/xerox-4517 sys/lib/lp/daemon/xerox-N32 sys/lib/lp/devices sys/lib/lp/kill/generic sys/lib/lp/kill/xerox sys/lib/lp/kill/xerox-4512 sys/lib/lp/kill/xerox-4517 sys/lib/lp/process/dpost sys/lib/lp/process/dvipost sys/lib/lp/process/g3post sys/lib/lp/process/generic sys/lib/lp/process/gifpost sys/lib/lp/process/gspipe sys/lib/lp/process/gspipeijs sys/lib/lp/process/hpost sys/lib/lp/process/jpgpost sys/lib/lp/process/noproc sys/lib/lp/process/p9bitpost sys/lib/lp/process/pdfgs sys/lib/lp/process/pdfgsijs sys/lib/lp/process/pdfpost sys/lib/lp/process/pngpost sys/lib/lp/process/post sys/lib/lp/process/ppost sys/lib/lp/process/psextract sys/lib/lp/process/testpost sys/lib/lp/process/tiffpost sys/lib/lp/process/tr2post sys/lib/lp/sched/FIFO sys/lib/lp/spooler/generic sys/lib/lp/spooler/lpdspool sys/lib/lp/spooler/lpdspool+fonts sys/lib/lp/spooler/mhcc sys/lib/lp/spooler/nospool sys/lib/lp/spooler/nt sys/lib/lp/spooler/nt-tekphaser350 sys/lib/lp/spooler/pcclone sys/lib/lp/spooler/pcclone.new sys/lib/lp/spooler/ps630 sys/lib/lp/stat/generic sys/lib/lp/stat/hp sys/lib/lp/stat/lpd sys/lib/lp/stat/mhcc sys/lib/lp/stat/tektronix sys/lib/lp/stat/xante sys/lib/lp/stat/xerox sys/lib/lp/stat/xerox-4512 sys/lib/lp/stat/xerox-4517 sys/lib/lp/stat/xerox-N32 sys/lib/man/checkman.awk sys/lib/man/colophon sys/lib/man/lookman/index sys/lib/man/lookman/junkwords sys/lib/man/lookman/mkindex sys/lib/man/mkhtmlindex sys/lib/man/mksearchindex sys/lib/man/permind/bfile sys/lib/man/permind/dopermind sys/lib/man/permind/dup1.awk sys/lib/man/permind/dup2.awk sys/lib/man/permind/eign sys/lib/man/permind/ignore sys/lib/man/permind/mac sys/lib/man/permind/makind1 sys/lib/man/permind/mkfile sys/lib/man/permind/out sys/lib/man/permind/permindex sys/lib/man/permind/ptx.1 sys/lib/man/permind/ptx1.c sys/lib/man/permind/toc sys/lib/man/preface sys/lib/man/preface3 sys/lib/man/preface4 sys/lib/man/secindex sys/lib/man/title sys/lib/man/trademarks sys/lib/mimetype sys/lib/music/icon/cross.bit sys/lib/music/icon/down.bit sys/lib/music/icon/exit.bit sys/lib/music/icon/grey.bit sys/lib/music/icon/minus.bit sys/lib/music/icon/next.bit sys/lib/music/icon/pause.bit sys/lib/music/icon/play.bit sys/lib/music/icon/prev.bit sys/lib/music/icon/question.bit sys/lib/music/icon/root.bit sys/lib/music/icon/select.bit sys/lib/music/icon/skull.bit sys/lib/music/icon/stop.bit sys/lib/music/icon/trash.bit sys/lib/music/icon/up.bit sys/lib/music/icon/volume.bit sys/lib/newuser sys/lib/plumb/basic sys/lib/plumb/fileaddr sys/lib/postscript/font/LucidaSans-Demi sys/lib/postscript/font/LucidaSans-Italic sys/lib/postscript/font/LucidaSans-Typewriter83 sys/lib/postscript/font/LucidaTypewriter sys/lib/postscript/font/NOTICE sys/lib/postscript/font/ams/READ.ME sys/lib/postscript/font/ams/cmbsy5.pfa sys/lib/postscript/font/ams/cmbsy5.pfb sys/lib/postscript/font/ams/cmbsy7.pfa sys/lib/postscript/font/ams/cmbsy7.pfb sys/lib/postscript/font/ams/cmmib5.pfa sys/lib/postscript/font/ams/cmmib5.pfb sys/lib/postscript/font/ams/cmmib7.pfa sys/lib/postscript/font/ams/cmmib7.pfb sys/lib/postscript/font/ams/euex10.pfa sys/lib/postscript/font/ams/euex10.pfb sys/lib/postscript/font/ams/eufb10.pfa sys/lib/postscript/font/ams/eufb10.pfb sys/lib/postscript/font/ams/eufb5.pfa sys/lib/postscript/font/ams/eufb5.pfb sys/lib/postscript/font/ams/eufb7.pfa sys/lib/postscript/font/ams/eufb7.pfb sys/lib/postscript/font/ams/eufm10.pfa sys/lib/postscript/font/ams/eufm10.pfb sys/lib/postscript/font/ams/eufm5.pfa sys/lib/postscript/font/ams/eufm5.pfb sys/lib/postscript/font/ams/eufm7.pfa sys/lib/postscript/font/ams/eufm7.pfb sys/lib/postscript/font/ams/eurb10.pfa sys/lib/postscript/font/ams/eurb10.pfb sys/lib/postscript/font/ams/eurb5.pfa sys/lib/postscript/font/ams/eurb5.pfb sys/lib/postscript/font/ams/eurb7.pfa sys/lib/postscript/font/ams/eurb7.pfb sys/lib/postscript/font/ams/eurm10.pfa sys/lib/postscript/font/ams/eurm10.pfb sys/lib/postscript/font/ams/eurm5.pfa sys/lib/postscript/font/ams/eurm5.pfb sys/lib/postscript/font/ams/eurm7.pfa sys/lib/postscript/font/ams/eurm7.pfb sys/lib/postscript/font/ams/eusb10.pfa sys/lib/postscript/font/ams/eusb10.pfb sys/lib/postscript/font/ams/eusb5.pfa sys/lib/postscript/font/ams/eusb5.pfb sys/lib/postscript/font/ams/eusb7.pfa sys/lib/postscript/font/ams/eusb7.pfb sys/lib/postscript/font/ams/eusm10.pfa sys/lib/postscript/font/ams/eusm10.pfb sys/lib/postscript/font/ams/eusm5.pfa sys/lib/postscript/font/ams/eusm5.pfb sys/lib/postscript/font/ams/eusm7.pfa sys/lib/postscript/font/ams/eusm7.pfb sys/lib/postscript/font/ams/msam10.pfa sys/lib/postscript/font/ams/msam10.pfb sys/lib/postscript/font/ams/msam5.pfa sys/lib/postscript/font/ams/msam5.pfb sys/lib/postscript/font/ams/msam7.pfa sys/lib/postscript/font/ams/msam7.pfb sys/lib/postscript/font/ams/msbm10.pfa sys/lib/postscript/font/ams/msbm10.pfb sys/lib/postscript/font/ams/msbm5.pfa sys/lib/postscript/font/ams/msbm5.pfb sys/lib/postscript/font/ams/msbm7.pfa sys/lib/postscript/font/ams/msbm7.pfb sys/lib/postscript/font/ams/wncyb10.pfa sys/lib/postscript/font/ams/wncyb10.pfb sys/lib/postscript/font/ams/wncyi10.pfa sys/lib/postscript/font/ams/wncyi10.pfb sys/lib/postscript/font/ams/wncyr10.pfa sys/lib/postscript/font/ams/wncyr10.pfb sys/lib/postscript/font/ams/wncysc10.pfa sys/lib/postscript/font/ams/wncysc10.pfb sys/lib/postscript/font/ams/wncyss10.pfa sys/lib/postscript/font/ams/wncyss10.pfb sys/lib/postscript/font/cm/READ.ME sys/lib/postscript/font/cm/cmb10.pfa sys/lib/postscript/font/cm/cmb10.pfb sys/lib/postscript/font/cm/cmbsy10.pfa sys/lib/postscript/font/cm/cmbsy10.pfb sys/lib/postscript/font/cm/cmbx10.pfa sys/lib/postscript/font/cm/cmbx10.pfb sys/lib/postscript/font/cm/cmbx12.pfa sys/lib/postscript/font/cm/cmbx12.pfb sys/lib/postscript/font/cm/cmbx5.pfa sys/lib/postscript/font/cm/cmbx5.pfb sys/lib/postscript/font/cm/cmbx6.pfa sys/lib/postscript/font/cm/cmbx6.pfb sys/lib/postscript/font/cm/cmbx7.pfa sys/lib/postscript/font/cm/cmbx7.pfb sys/lib/postscript/font/cm/cmbx8.pfa sys/lib/postscript/font/cm/cmbx8.pfb sys/lib/postscript/font/cm/cmbx9.pfa sys/lib/postscript/font/cm/cmbx9.pfb sys/lib/postscript/font/cm/cmbxsl10.pfa sys/lib/postscript/font/cm/cmbxsl10.pfb sys/lib/postscript/font/cm/cmbxti10.pfa sys/lib/postscript/font/cm/cmbxti10.pfb sys/lib/postscript/font/cm/cmcsc10.pfa sys/lib/postscript/font/cm/cmcsc10.pfb sys/lib/postscript/font/cm/cmdunh10.pfa sys/lib/postscript/font/cm/cmdunh10.pfb sys/lib/postscript/font/cm/cmex10.pfa sys/lib/postscript/font/cm/cmex10.pfb sys/lib/postscript/font/cm/cmff10.pfa sys/lib/postscript/font/cm/cmff10.pfb sys/lib/postscript/font/cm/cmfi10.pfa sys/lib/postscript/font/cm/cmfi10.pfb sys/lib/postscript/font/cm/cmfib8.pfa sys/lib/postscript/font/cm/cmfib8.pfb sys/lib/postscript/font/cm/cminch.pfa sys/lib/postscript/font/cm/cminch.pfb sys/lib/postscript/font/cm/cmitt10.pfa sys/lib/postscript/font/cm/cmitt10.pfb sys/lib/postscript/font/cm/cmmi10.pfa sys/lib/postscript/font/cm/cmmi10.pfb sys/lib/postscript/font/cm/cmmi12.pfa sys/lib/postscript/font/cm/cmmi12.pfb sys/lib/postscript/font/cm/cmmi5.pfa sys/lib/postscript/font/cm/cmmi5.pfb sys/lib/postscript/font/cm/cmmi6.pfa sys/lib/postscript/font/cm/cmmi6.pfb sys/lib/postscript/font/cm/cmmi7.pfa sys/lib/postscript/font/cm/cmmi7.pfb sys/lib/postscript/font/cm/cmmi8.pfa sys/lib/postscript/font/cm/cmmi8.pfb sys/lib/postscript/font/cm/cmmi9.pfa sys/lib/postscript/font/cm/cmmi9.pfb sys/lib/postscript/font/cm/cmmib10.pfa sys/lib/postscript/font/cm/cmmib10.pfb sys/lib/postscript/font/cm/cmr10.pfa sys/lib/postscript/font/cm/cmr10.pfb sys/lib/postscript/font/cm/cmr12.pfa sys/lib/postscript/font/cm/cmr12.pfb sys/lib/postscript/font/cm/cmr17.pfa sys/lib/postscript/font/cm/cmr17.pfb sys/lib/postscript/font/cm/cmr5.pfa sys/lib/postscript/font/cm/cmr5.pfb sys/lib/postscript/font/cm/cmr6.pfa sys/lib/postscript/font/cm/cmr6.pfb sys/lib/postscript/font/cm/cmr7.pfa sys/lib/postscript/font/cm/cmr7.pfb sys/lib/postscript/font/cm/cmr8.pfa sys/lib/postscript/font/cm/cmr8.pfb sys/lib/postscript/font/cm/cmr9.pfa sys/lib/postscript/font/cm/cmr9.pfb sys/lib/postscript/font/cm/cmsl10.pfa sys/lib/postscript/font/cm/cmsl10.pfb sys/lib/postscript/font/cm/cmsl12.pfa sys/lib/postscript/font/cm/cmsl12.pfb sys/lib/postscript/font/cm/cmsl8.pfa sys/lib/postscript/font/cm/cmsl8.pfb sys/lib/postscript/font/cm/cmsl9.pfa sys/lib/postscript/font/cm/cmsl9.pfb sys/lib/postscript/font/cm/cmsltt10.pfa sys/lib/postscript/font/cm/cmsltt10.pfb sys/lib/postscript/font/cm/cmss10.pfa sys/lib/postscript/font/cm/cmss10.pfb sys/lib/postscript/font/cm/cmss12.pfa sys/lib/postscript/font/cm/cmss12.pfb sys/lib/postscript/font/cm/cmss17.pfa sys/lib/postscript/font/cm/cmss17.pfb sys/lib/postscript/font/cm/cmss8.pfa sys/lib/postscript/font/cm/cmss8.pfb sys/lib/postscript/font/cm/cmss9.pfa sys/lib/postscript/font/cm/cmss9.pfb sys/lib/postscript/font/cm/cmssbx10.pfa sys/lib/postscript/font/cm/cmssbx10.pfb sys/lib/postscript/font/cm/cmssdc10.pfa sys/lib/postscript/font/cm/cmssdc10.pfb sys/lib/postscript/font/cm/cmssi10.pfa sys/lib/postscript/font/cm/cmssi10.pfb sys/lib/postscript/font/cm/cmssi12.pfa sys/lib/postscript/font/cm/cmssi12.pfb sys/lib/postscript/font/cm/cmssi17.pfa sys/lib/postscript/font/cm/cmssi17.pfb sys/lib/postscript/font/cm/cmssi8.pfa sys/lib/postscript/font/cm/cmssi8.pfb sys/lib/postscript/font/cm/cmssi9.pfa sys/lib/postscript/font/cm/cmssi9.pfb sys/lib/postscript/font/cm/cmssq8.pfa sys/lib/postscript/font/cm/cmssq8.pfb sys/lib/postscript/font/cm/cmssqi8.pfa sys/lib/postscript/font/cm/cmssqi8.pfb sys/lib/postscript/font/cm/cmsy10.pfa sys/lib/postscript/font/cm/cmsy10.pfb sys/lib/postscript/font/cm/cmsy5.pfa sys/lib/postscript/font/cm/cmsy5.pfb sys/lib/postscript/font/cm/cmsy6.pfa sys/lib/postscript/font/cm/cmsy6.pfb sys/lib/postscript/font/cm/cmsy7.pfa sys/lib/postscript/font/cm/cmsy7.pfb sys/lib/postscript/font/cm/cmsy8.pfa sys/lib/postscript/font/cm/cmsy8.pfb sys/lib/postscript/font/cm/cmsy9.pfa sys/lib/postscript/font/cm/cmsy9.pfb sys/lib/postscript/font/cm/cmtcsc10.pfa sys/lib/postscript/font/cm/cmtcsc10.pfb sys/lib/postscript/font/cm/cmtex10.pfa sys/lib/postscript/font/cm/cmtex10.pfb sys/lib/postscript/font/cm/cmtex8.pfa sys/lib/postscript/font/cm/cmtex8.pfb sys/lib/postscript/font/cm/cmtex9.pfa sys/lib/postscript/font/cm/cmtex9.pfb sys/lib/postscript/font/cm/cmti10.pfa sys/lib/postscript/font/cm/cmti10.pfb sys/lib/postscript/font/cm/cmti12.pfa sys/lib/postscript/font/cm/cmti12.pfb sys/lib/postscript/font/cm/cmti7.pfa sys/lib/postscript/font/cm/cmti7.pfb sys/lib/postscript/font/cm/cmti8.pfa sys/lib/postscript/font/cm/cmti8.pfb sys/lib/postscript/font/cm/cmti9.pfa sys/lib/postscript/font/cm/cmti9.pfb sys/lib/postscript/font/cm/cmtt10.pfa sys/lib/postscript/font/cm/cmtt10.pfb sys/lib/postscript/font/cm/cmtt12.pfa sys/lib/postscript/font/cm/cmtt12.pfb sys/lib/postscript/font/cm/cmtt8.pfa sys/lib/postscript/font/cm/cmtt8.pfb sys/lib/postscript/font/cm/cmtt9.pfa sys/lib/postscript/font/cm/cmtt9.pfb sys/lib/postscript/font/cm/cmu10.pfa sys/lib/postscript/font/cm/cmu10.pfb sys/lib/postscript/font/cm/cmvtt10.pfa sys/lib/postscript/font/cm/cmvtt10.pfb sys/lib/postscript/font/cm/lasy10.pfa sys/lib/postscript/font/cm/lasy10.pfb sys/lib/postscript/font/cm/lasy5.pfa sys/lib/postscript/font/cm/lasy5.pfb sys/lib/postscript/font/cm/lasy6.pfa sys/lib/postscript/font/cm/lasy6.pfb sys/lib/postscript/font/cm/lasy7.pfa sys/lib/postscript/font/cm/lasy7.pfb sys/lib/postscript/font/cm/lasy8.pfa sys/lib/postscript/font/cm/lasy8.pfb sys/lib/postscript/font/cm/lasy9.pfa sys/lib/postscript/font/cm/lasy9.pfb sys/lib/postscript/font/cm/lasyb10.pfa sys/lib/postscript/font/cm/lasyb10.pfb sys/lib/postscript/font/cm/lcircle1.pfa sys/lib/postscript/font/cm/lcircle1.pfb sys/lib/postscript/font/cm/lcirclew.pfa sys/lib/postscript/font/cm/lcirclew.pfb sys/lib/postscript/font/cm/lcmss8.pfa sys/lib/postscript/font/cm/lcmss8.pfb sys/lib/postscript/font/cm/lcmssb8.pfa sys/lib/postscript/font/cm/lcmssb8.pfb sys/lib/postscript/font/cm/lcmssi8.pfa sys/lib/postscript/font/cm/lcmssi8.pfb sys/lib/postscript/font/cm/line10.pfa sys/lib/postscript/font/cm/line10.pfb sys/lib/postscript/font/cm/linew10.pfa sys/lib/postscript/font/cm/linew10.pfb sys/lib/postscript/font/cm/logo10.pfa sys/lib/postscript/font/cm/logo10.pfb sys/lib/postscript/font/cm/logo8.pfa sys/lib/postscript/font/cm/logo8.pfb sys/lib/postscript/font/cm/logo9.pfa sys/lib/postscript/font/cm/logo9.pfb sys/lib/postscript/font/cm/logobf10.pfa sys/lib/postscript/font/cm/logobf10.pfb sys/lib/postscript/font/cm/logosl10.pfa sys/lib/postscript/font/cm/logosl10.pfb sys/lib/postscript/font/fontmap sys/lib/postscript/font/lino sys/lib/postscript/font/lsunr00.pfa sys/lib/postscript/font/lsunr01.pfa sys/lib/postscript/font/lsunr02.pfa sys/lib/postscript/font/lsunr03.pfa sys/lib/postscript/font/lsunr04.pfa sys/lib/postscript/font/lsunr05.pfa sys/lib/postscript/font/lsunr20.pfa sys/lib/postscript/font/lsunr21.pfa sys/lib/postscript/font/lsunr22.pfa sys/lib/postscript/font/lsunr24.pfa sys/lib/postscript/font/lsunr25.pfa sys/lib/postscript/font/lw+ sys/lib/postscript/prologues/Default.enc sys/lib/postscript/prologues/Latin1.enc sys/lib/postscript/prologues/Nroundpage.ps sys/lib/postscript/prologues/UTF.enc sys/lib/postscript/prologues/aps.ps sys/lib/postscript/prologues/banner.ps sys/lib/postscript/prologues/baseline.ps sys/lib/postscript/prologues/color.ps sys/lib/postscript/prologues/cropmarks.ps sys/lib/postscript/prologues/dpost.ps sys/lib/postscript/prologues/draw.ps sys/lib/postscript/prologues/duplex.ps sys/lib/postscript/prologues/fatcourier.ps sys/lib/postscript/prologues/forms.ps sys/lib/postscript/prologues/grabit.ps sys/lib/postscript/prologues/hardcopy.ps sys/lib/postscript/prologues/hp4simx.ps sys/lib/postscript/prologues/patch.err.ps sys/lib/postscript/prologues/patch.xon.ps sys/lib/postscript/prologues/pjw.char.ps sys/lib/postscript/prologues/postdmd.ps sys/lib/postscript/prologues/postgif.ps sys/lib/postscript/prologues/postp9bit.ps sys/lib/postscript/prologues/postprint.ps sys/lib/postscript/prologues/posttek.ps sys/lib/postscript/prologues/printfont.ps sys/lib/postscript/prologues/ps.requests sys/lib/postscript/prologues/roundpage.ps sys/lib/postscript/prologues/set_ip.ps sys/lib/postscript/prologues/shade.ps sys/lib/postscript/prologues/unbind.ps sys/lib/postscript/troff/AB sys/lib/postscript/troff/AI sys/lib/postscript/troff/AR sys/lib/postscript/troff/B sys/lib/postscript/troff/BI sys/lib/postscript/troff/C sys/lib/postscript/troff/CB sys/lib/postscript/troff/CI sys/lib/postscript/troff/CW sys/lib/postscript/troff/CX sys/lib/postscript/troff/H sys/lib/postscript/troff/HB sys/lib/postscript/troff/HI sys/lib/postscript/troff/HL sys/lib/postscript/troff/HX sys/lib/postscript/troff/Hx sys/lib/postscript/troff/I sys/lib/postscript/troff/Jp sys/lib/postscript/troff/KB sys/lib/postscript/troff/KI sys/lib/postscript/troff/KR sys/lib/postscript/troff/KX sys/lib/postscript/troff/LucidaCW sys/lib/postscript/troff/LucidaSans sys/lib/postscript/troff/LucidaSansB sys/lib/postscript/troff/LucidaSansCW sys/lib/postscript/troff/LucidaSansCW83 sys/lib/postscript/troff/LucidaSansI sys/lib/postscript/troff/NB sys/lib/postscript/troff/NI sys/lib/postscript/troff/NR sys/lib/postscript/troff/NX sys/lib/postscript/troff/PA sys/lib/postscript/troff/PB sys/lib/postscript/troff/PI sys/lib/postscript/troff/PX sys/lib/postscript/troff/R sys/lib/postscript/troff/R.nomath sys/lib/postscript/troff/S sys/lib/postscript/troff/S1 sys/lib/postscript/troff/Syntax sys/lib/postscript/troff/SyntaxB sys/lib/postscript/troff/SyntaxI sys/lib/postscript/troff/ZD sys/lib/postscript/troff/ZI sys/lib/samsave sys/lib/scribble/classifiers/digits.cl sys/lib/scribble/classifiers/letters.cl sys/lib/scribble/classifiers/punc.cl sys/lib/scsicodes sys/lib/subscribers sys/lib/sysconfig/auth/authproto sys/lib/sysconfig/auth/boundary/auth sys/lib/sysconfig/auth/boundary/consoledb sys/lib/sysconfig/auth/boundary/cpurc sys/lib/sysconfig/auth/boundary/httppasswords sys/lib/sysconfig/auth/boundary/keys sys/lib/sysconfig/auth/boundary/keys.who sys/lib/sysconfig/auth/boundary/lib.ndb.mkfile sys/lib/sysconfig/auth/boundary/namespace.boundary sys/lib/sysconfig/auth/boundary/netkeys sys/lib/sysconfig/auth/boundary/netkeys.who sys/lib/sysconfig/auth/boundary/plan9.ini sys/lib/sysconfig/auth/boundary/plan9.nvr sys/lib/sysconfig/auth/boundary/sys.log.mkfile sys/lib/sysconfig/auth/boundary/warn.keys sys/lib/sysconfig/auth/boundary/warn.netkeys sys/lib/sysconfig/auth/files/adm.mkfile sys/lib/sysconfig/auth/files/empty sys/lib/sysconfig/auth/files/il566 sys/lib/sysconfig/auth/files/mail.lib.mkfile sys/lib/sysconfig/auth/files/namespace sys/lib/sysconfig/auth/files/rewrite sys/lib/sysconfig/auth/files/tcp566 sys/lib/sysconfig/auth/files/tcp567 sys/lib/sysconfig/auth/mkfile sys/lib/sysconfig/blast/boot sys/lib/sysconfig/proto/allproto sys/lib/sysconfig/proto/armpaqproto sys/lib/sysconfig/proto/portproto sys/lib/sysconfig/proto/standalone sys/lib/sysconfig/proto/tmponlyproto sys/lib/sysconfig/proto/unicode sys/lib/sysconfig/proto/usrproto sys/lib/texmf/tex/generic/hyphen/hyphen.tex sys/lib/tls/README sys/lib/tls/mail sys/lib/tls/mail.exclude sys/lib/tmac/complet.1127 sys/lib/tmac/cover.1127 sys/lib/tmac/mmn sys/lib/tmac/mmt sys/lib/tmac/name.sed sys/lib/tmac/sendcover sys/lib/tmac/strings.mm sys/lib/tmac/tmac.an sys/lib/tmac/tmac.anhtml sys/lib/tmac/tmac.antimes sys/lib/tmac/tmac.bits sys/lib/tmac/tmac.cs sys/lib/tmac/tmac.e sys/lib/tmac/tmac.html sys/lib/tmac/tmac.jsdisp sys/lib/tmac/tmac.m sys/lib/tmac/tmac.mcs sys/lib/tmac/tmac.nihongo sys/lib/tmac/tmac.org sys/lib/tmac/tmac.pictures sys/lib/tmac/tmac.psychrefs sys/lib/tmac/tmac.ptx sys/lib/tmac/tmac.rscover sys/lib/tmac/tmac.s sys/lib/tmac/tmac.scover sys/lib/tmac/tmac.sdisp sys/lib/tmac/tmac.skeep sys/lib/tmac/tmac.soft sys/lib/tmac/tmac.spe sys/lib/tmac/tmac.srefs sys/lib/tmac/tmac.twb sys/lib/tmac/tmac.uni sys/lib/tmac/tmac.v sys/lib/troff/font/devutf/0100to25ff sys/lib/troff/font/devutf/AB sys/lib/troff/font/devutf/AI sys/lib/troff/font/devutf/AR sys/lib/troff/font/devutf/AX sys/lib/troff/font/devutf/B sys/lib/troff/font/devutf/BI sys/lib/troff/font/devutf/C sys/lib/troff/font/devutf/CB sys/lib/troff/font/devutf/CI sys/lib/troff/font/devutf/CO sys/lib/troff/font/devutf/CW sys/lib/troff/font/devutf/CX sys/lib/troff/font/devutf/CY sys/lib/troff/font/devutf/DESC sys/lib/troff/font/devutf/GR sys/lib/troff/font/devutf/H sys/lib/troff/font/devutf/HB sys/lib/troff/font/devutf/HI sys/lib/troff/font/devutf/HK sys/lib/troff/font/devutf/HL sys/lib/troff/font/devutf/HM sys/lib/troff/font/devutf/HX sys/lib/troff/font/devutf/Hb sys/lib/troff/font/devutf/Hi sys/lib/troff/font/devutf/Hr sys/lib/troff/font/devutf/Hx sys/lib/troff/font/devutf/I sys/lib/troff/font/devutf/Jp sys/lib/troff/font/devutf/KB sys/lib/troff/font/devutf/KI sys/lib/troff/font/devutf/KR sys/lib/troff/font/devutf/KX sys/lib/troff/font/devutf/LINKFILE sys/lib/troff/font/devutf/LucidaCW sys/lib/troff/font/devutf/LucidaSans sys/lib/troff/font/devutf/LucidaSansB sys/lib/troff/font/devutf/LucidaSansCW83 sys/lib/troff/font/devutf/LucidaSansI sys/lib/troff/font/devutf/NB sys/lib/troff/font/devutf/NI sys/lib/troff/font/devutf/NR sys/lib/troff/font/devutf/NX sys/lib/troff/font/devutf/PA sys/lib/troff/font/devutf/PB sys/lib/troff/font/devutf/PI sys/lib/troff/font/devutf/PX sys/lib/troff/font/devutf/R sys/lib/troff/font/devutf/R.nomath sys/lib/troff/font/devutf/S sys/lib/troff/font/devutf/S1 sys/lib/troff/font/devutf/Syntax sys/lib/troff/font/devutf/SyntaxB sys/lib/troff/font/devutf/SyntaxI sys/lib/troff/font/devutf/UnivMath1 sys/lib/troff/font/devutf/UnivMath2 sys/lib/troff/font/devutf/UnivMath3 sys/lib/troff/font/devutf/UnivMath4 sys/lib/troff/font/devutf/UnivMath5 sys/lib/troff/font/devutf/UnivMath6 sys/lib/troff/font/devutf/ZD sys/lib/troff/font/devutf/ZI sys/lib/troff/font/devutf/charlib/12 sys/lib/troff/font/devutf/charlib/14 sys/lib/troff/font/devutf/charlib/34 sys/lib/troff/font/devutf/charlib/DG sys/lib/troff/font/devutf/charlib/FA sys/lib/troff/font/devutf/charlib/Fi sys/lib/troff/font/devutf/charlib/Fl sys/lib/troff/font/devutf/charlib/L1 sys/lib/troff/font/devutf/charlib/LA sys/lib/troff/font/devutf/charlib/LH sys/lib/troff/font/devutf/charlib/LH.example sys/lib/troff/font/devutf/charlib/LV sys/lib/troff/font/devutf/charlib/PC sys/lib/troff/font/devutf/charlib/RC sys/lib/troff/font/devutf/charlib/README sys/lib/troff/font/devutf/charlib/Sl sys/lib/troff/font/devutf/charlib/bx sys/lib/troff/font/devutf/charlib/ci sys/lib/troff/font/devutf/charlib/ff sys/lib/troff/font/devutf/charlib/lH sys/lib/troff/font/devutf/charlib/lc sys/lib/troff/font/devutf/charlib/lf sys/lib/troff/font/devutf/charlib/lh sys/lib/troff/font/devutf/charlib/ob sys/lib/troff/font/devutf/charlib/pw sys/lib/troff/font/devutf/charlib/rH sys/lib/troff/font/devutf/charlib/rc sys/lib/troff/font/devutf/charlib/rf sys/lib/troff/font/devutf/charlib/rh sys/lib/troff/font/devutf/charlib/sq sys/lib/troff/font/devutf/charlib/~= sys/lib/troff/font/devutf/charlib/☺ sys/lib/troff/font/devutf/mkMAP sys/lib/troff/font/devutf/shell.lib sys/lib/troff/font/devutf/utfmap sys/lib/troff/term/tab.37 sys/lib/troff/term/tab.450 sys/lib/troff/term/tab.450-12 sys/lib/troff/term/tab.dumb sys/lib/troff/term/tab.i300 sys/lib/troff/term/tab.lp sys/lib/troff/term/tab.post sys/lib/troff/term/tab.think sys/lib/troff/term/tab.thinkbold sys/lib/troff/term/tab.thinksmall sys/lib/troff/term/tab.utf sys/lib/webls.denied sys/lib/wiki/d/0 sys/lib/wiki/d/0.hist sys/lib/wiki/d/1 sys/lib/wiki/d/1.hist sys/lib/wiki/d/2 sys/lib/wiki/d/2.hist sys/lib/wiki/d/3 sys/lib/wiki/d/3.hist sys/lib/wiki/d/L.0 sys/lib/wiki/d/L.1 sys/lib/wiki/d/L.2 sys/lib/wiki/d/L.3 sys/lib/wiki/d/L.map sys/lib/wiki/d/map sys/lib/wiki/diff.html sys/lib/wiki/edit.html sys/lib/wiki/history.html sys/lib/wiki/mkfile sys/lib/wiki/oldpage.html sys/lib/wiki/oldpage.txt sys/lib/wiki/page.html sys/lib/wiki/page.txt sys/lib/wiki/sandbox sys/lib/wiki/werror.html sys/lib/yaccpar sys/lib/yaccpars
description: Import sources from 2011-03-30 iso image - sys/lib
     1.1new file mode 100755
     1.2--- /dev/null
     1.3+++ b/sys/lib/acid/386
     1.4@@ -0,0 +1,163 @@
     1.5+// 386 support
     1.6+
     1.7+defn acidinit()			// Called after all the init modules are loaded
     1.8+{
     1.9+	bplist = {};
    1.10+	bpfmt = 'b';
    1.11+
    1.12+	srcpath = {
    1.13+		"./",
    1.14+		"/sys/src/libc/port/",
    1.15+		"/sys/src/libc/9sys/",
    1.16+		"/sys/src/libc/386/"
    1.17+	};
    1.18+
    1.19+	srcfiles = {};			// list of loaded files
    1.20+	srctext = {};			// the text of the files
    1.21+}
    1.22+
    1.23+defn linkreg(addr)
    1.24+{
    1.25+	return 0;
    1.26+}
    1.27+
    1.28+defn stk()				// trace
    1.29+{
    1.30+	_stk(*PC, *SP, 0, 0);
    1.31+}
    1.32+
    1.33+defn lstk()				// trace with locals
    1.34+{
    1.35+	_stk(*PC, *SP, 0, 1);
    1.36+}
    1.37+
    1.38+defn gpr()		// print general(hah hah!) purpose registers
    1.39+{
    1.40+	print("AX\t", *AX, " BX\t", *BX, " CX\t", *CX, " DX\t", *DX, "\n");
    1.41+	print("DI\t", *DI, " SI\t", *SI, " BP\t", *BP, "\n");
    1.42+}
    1.43+
    1.44+defn spr()				// print special processor registers
    1.45+{
    1.46+	local pc;
    1.47+	local cause;
    1.48+
    1.49+	pc = *PC;
    1.50+	print("PC\t", pc, " ", fmt(pc, 'a'), "  ");
    1.51+	pfl(pc);
    1.52+	print("SP\t", *SP, " ECODE ", *ECODE, " EFLAG ", *EFLAGS, "\n");
    1.53+	print("CS\t", *CS, " DS\t ", *DS, " SS\t", *SS, "\n");
    1.54+	print("GS\t", *GS, " FS\t ", *FS, " ES\t", *ES, "\n");
    1.55+	
    1.56+	cause = *TRAP;
    1.57+	print("TRAP\t", cause, " ", reason(cause), "\n");
    1.58+}
    1.59+
    1.60+defn regs()				// print all registers
    1.61+{
    1.62+	spr();
    1.63+	gpr();
    1.64+}
    1.65+
    1.66+defn fpr()
    1.67+{
    1.68+	print("F0\t",  *F0, "\n");
    1.69+	print("F1\t",  *F1, "\n");
    1.70+	print("F2\t",  *F2, "\n");
    1.71+	print("F3\t",  *F3, "\n");
    1.72+	print("F4\t",  *F4, "\n");
    1.73+	print("F5\t",  *F5, "\n");
    1.74+	print("F6\t",  *F6, "\n");
    1.75+	print("F7\t",  *F7, "\n");
    1.76+	print("control\t", *fmt(E0, 'x'), "\n");
    1.77+	print("status\t", *fmt(E1, 'x'), "\n");
    1.78+	print("tag\t", *fmt(E2, 'x'), "\n");
    1.79+	print("ip offset\t", *fmt(E3, 'X'), "\n");
    1.80+	print("cs selector\t", *fmt(E4, 'x'), "\n");
    1.81+	print("opcode\t", *fmt(E4>>8, 'x'), "\n");
    1.82+	print("data operand offset\t", *fmt(E5, 'x'), "\n");
    1.83+	print("operand selector\t", *fmt(E6, 'x'), "\n");
    1.84+}
    1.85+
    1.86+defn mmregs()
    1.87+{
    1.88+	print("MM0\t", *MM0, " MM1\t", *MM1, "\n");
    1.89+	print("MM2\t", *MM2, " MM3\t", *MM3, "\n");
    1.90+	print("MM4\t", *MM4, " MM5\t", *MM5, "\n");
    1.91+	print("MM6\t", *MM6, " MM7\t", *MM7, "\n");
    1.92+}
    1.93+
    1.94+defn pstop(pid)
    1.95+{
    1.96+	local l;
    1.97+	local pc;
    1.98+
    1.99+	pc = *PC;
   1.100+
   1.101+	print(pid,": ", reason(*TRAP), "\t");
   1.102+	print(fmt(pc, 'a'), "\t", fmt(pc, 'i'), "\n");
   1.103+
   1.104+	if notes then {
   1.105+		if notes[0] != "sys: breakpoint" then {
   1.106+			print("Notes pending:\n");
   1.107+			l = notes;
   1.108+			while l do {
   1.109+				print("\t", head l, "\n");
   1.110+				l = tail l;
   1.111+			}
   1.112+		}
   1.113+	}
   1.114+}
   1.115+
   1.116+aggr Ureg
   1.117+{
   1.118+	'X' 0 di;
   1.119+	'X' 4 si;
   1.120+	'X' 8 bp;
   1.121+	'X' 12 nsp;
   1.122+	'X' 16 bx;
   1.123+	'X' 20 dx;
   1.124+	'X' 24 cx;
   1.125+	'X' 28 ax;
   1.126+	'X' 32 gs;
   1.127+	'X' 36 fs;
   1.128+	'X' 40 es;
   1.129+	'X' 44 ds;
   1.130+	'X' 48 trap;
   1.131+	'X' 52 ecode;
   1.132+	'X' 56 pc;
   1.133+	'X' 60 cs;
   1.134+	'X' 64 flags;
   1.135+	{
   1.136+	'X' 68 usp;
   1.137+	'X' 68 sp;
   1.138+	};
   1.139+	'X' 72 ss;
   1.140+};
   1.141+
   1.142+defn
   1.143+Ureg(addr) {
   1.144+	complex Ureg addr;
   1.145+	print("	di	", addr.di, "\n");
   1.146+	print("	si	", addr.si, "\n");
   1.147+	print("	bp	", addr.bp, "\n");
   1.148+	print("	nsp	", addr.nsp, "\n");
   1.149+	print("	bx	", addr.bx, "\n");
   1.150+	print("	dx	", addr.dx, "\n");
   1.151+	print("	cx	", addr.cx, "\n");
   1.152+	print("	ax	", addr.ax, "\n");
   1.153+	print("	gs	", addr.gs, "\n");
   1.154+	print("	fs	", addr.fs, "\n");
   1.155+	print("	es	", addr.es, "\n");
   1.156+	print("	ds	", addr.ds, "\n");
   1.157+	print("	trap	", addr.trap, "\n");
   1.158+	print("	ecode	", addr.ecode, "\n");
   1.159+	print("	pc	", addr.pc, "\n");
   1.160+	print("	cs	", addr.cs, "\n");
   1.161+	print("	flags	", addr.flags, "\n");
   1.162+	print("	sp	", addr.sp, "\n");
   1.163+	print("	ss	", addr.ss, "\n");
   1.164+};
   1.165+sizeofUreg = 76;
   1.166+
   1.167+print("/sys/lib/acid/386");
     2.1new file mode 100755
     2.2--- /dev/null
     2.3+++ b/sys/lib/acid/68020
     2.4@@ -0,0 +1,137 @@
     2.5+// 68020 support
     2.6+
     2.7+defn acidinit()			// Called after all the init modules are loaded
     2.8+{
     2.9+	bplist = {};
    2.10+	bpfmt = 'x';
    2.11+
    2.12+	srcpath = {
    2.13+		"./",
    2.14+		"/sys/src/libc/port/",
    2.15+		"/sys/src/libc/9sys/",
    2.16+		"/sys/src/libc/68020/"
    2.17+	};
    2.18+
    2.19+	srcfiles = {};			// list of loaded files
    2.20+	srctext = {};			// the text of the files
    2.21+}
    2.22+
    2.23+defn linkreg(addr)
    2.24+{
    2.25+	return 0;
    2.26+}
    2.27+
    2.28+defn stk()				// trace
    2.29+{
    2.30+	_stk(*PC, *A7, 0, 0);
    2.31+}
    2.32+
    2.33+defn lstk()				// trace with locals
    2.34+{
    2.35+	_stk(*PC, *A7, 0, 1);
    2.36+}
    2.37+
    2.38+defn gpr()				// print general purpose registers
    2.39+{
    2.40+	print("R0\t", *R0, "R1\t", *R1, "R2\t", *R2, "R3\t", *R3, "\n");
    2.41+	print("R4\t", *R4, "R5\t", *R5, "R6\t", *R6, "R7\t", *R7, "\n");
    2.42+	print("A0\t", *A0, "A1\t", *A1, "A2\t", *A2, "A3\t", *A3, "\n");
    2.43+	print("A4\t", *A4, "A5\t", *A5, "A6\t", *A6, "A7\t", *A7, "\n");
    2.44+}
    2.45+
    2.46+defn spr()				// print special processor registers
    2.47+{
    2.48+	local pc;
    2.49+	local cause;
    2.50+
    2.51+	pc = *PC;
    2.52+	print("PC\t", pc, " ", fmt(pc, 'a'), "  ");
    2.53+	pfl(pc);
    2.54+	print("SP\t", *A7, " MAGIC\t", *MAGIC, "\n");
    2.55+
    2.56+	cause = *VO;
    2.57+	print("SR\t", *SR, "VO ", cause, " ", reason(cause), "\n");
    2.58+}
    2.59+
    2.60+defn regs()				// print all registers
    2.61+{
    2.62+	spr();
    2.63+	gpr();
    2.64+}
    2.65+
    2.66+defn pstop(pid)
    2.67+{
    2.68+	local l;
    2.69+	local pc;
    2.70+
    2.71+	pc = *PC;
    2.72+
    2.73+	print(pid,": ", reason(*VO), "\t");
    2.74+	print(fmt(pc, 'a'), "\t", fmt(pc, 'i'), "\n");
    2.75+
    2.76+	if notes then {
    2.77+		if notes[0] != "sys: breakpoint" then {
    2.78+			print("Notes pending:\n");
    2.79+			l = notes;
    2.80+			while l do {
    2.81+				print("\t", head l, "\n");
    2.82+				l = tail l;
    2.83+			}
    2.84+		}
    2.85+	}
    2.86+}
    2.87+
    2.88+aggr Ureg
    2.89+{
    2.90+	'U' 0 r0;
    2.91+	'U' 4 r1;
    2.92+	'U' 8 r2;
    2.93+	'U' 12 r3;
    2.94+	'U' 16 r4;
    2.95+	'U' 20 r5;
    2.96+	'U' 24 r6;
    2.97+	'U' 28 r7;
    2.98+	'U' 32 a0;
    2.99+	'U' 36 a1;
   2.100+	'U' 40 a2;
   2.101+	'U' 44 a3;
   2.102+	'U' 48 a4;
   2.103+	'U' 52 a5;
   2.104+	'U' 56 a6;
   2.105+	'U' 60 sp;
   2.106+	'U' 64 usp;
   2.107+	'U' 68 magic;
   2.108+	'u' 72 sr;
   2.109+	'U' 74 pc;
   2.110+	'u' 78 vo;
   2.111+	'a' 80 microstate;
   2.112+};
   2.113+
   2.114+defn
   2.115+Ureg(addr) {
   2.116+	complex Ureg addr;
   2.117+	print("	r0	", addr.r0, "\n");
   2.118+	print("	r1	", addr.r1, "\n");
   2.119+	print("	r2	", addr.r2, "\n");
   2.120+	print("	r3	", addr.r3, "\n");
   2.121+	print("	r4	", addr.r4, "\n");
   2.122+	print("	r5	", addr.r5, "\n");
   2.123+	print("	r6	", addr.r6, "\n");
   2.124+	print("	r7	", addr.r7, "\n");
   2.125+	print("	a0	", addr.a0, "\n");
   2.126+	print("	a1	", addr.a1, "\n");
   2.127+	print("	a2	", addr.a2, "\n");
   2.128+	print("	a3	", addr.a3, "\n");
   2.129+	print("	a4	", addr.a4, "\n");
   2.130+	print("	a5	", addr.a5, "\n");
   2.131+	print("	a6	", addr.a6, "\n");
   2.132+	print("	sp	", addr.sp, "\n");
   2.133+	print("	usp	", addr.usp, "\n");
   2.134+	print("	magic	", addr.magic, "\n");
   2.135+	print("	sr	", addr.sr, "\n");
   2.136+	print("	pc	", addr.pc, "\n");
   2.137+	print("	vo	", addr.vo, "\n");
   2.138+	print("	microstate	", addr.microstate, "\n");
   2.139+};
   2.140+
   2.141+print("/sys/lib/acid/68020");
     3.1new file mode 100755
     3.2--- /dev/null
     3.3+++ b/sys/lib/acid/acme
     3.4@@ -0,0 +1,133 @@
     3.5+// support for acme; acid must be run with /acme/acid/$cputype/Acid
     3.6+
     3.7+
     3.8+defn w(*code)
     3.9+{
    3.10+	local dir;
    3.11+
    3.12+	printto("/tmp/acme.acid", eval code);
    3.13+	rc("cat /tmp/acme.acid | wnew -d "+"Acid/-stk'("+itoa(pid)+")'");
    3.14+}
    3.15+
    3.16+defn procstk(pid, name)
    3.17+{
    3.18+	local dir;
    3.19+
    3.20+	printto("/tmp/acme.acid", stk());
    3.21+	rc("cat /tmp/acme.acid | wnew -d "+"Acid/-'"+name+"("+itoa(pid)+")'");
    3.22+}
    3.23+
    3.24+defn taskstk(tid, name)
    3.25+{
    3.26+	local dir;
    3.27+
    3.28+	printto("/tmp/acme.acid", threadstk(tid));
    3.29+	rc("cat /tmp/acme.acid | wnew -d "+"Acid/-"+name+"'("+itoa(pid)+")'");
    3.30+}
    3.31+
    3.32+defn _stk(pc, sp, link, dolocals)
    3.33+{
    3.34+	local stk;
    3.35+
    3.36+	print("At pc:", pc, ":", fmt(pc, 'a'), " ");
    3.37+	pfl(pc);
    3.38+
    3.39+	stk = strace(pc, sp, link);
    3.40+
    3.41+	while stk do {
    3.42+		frame = head stk;
    3.43+		print(fmt(frame[0], 'a'), "(");
    3.44+		params(frame[2], frame[0]);
    3.45+		print(") ");
    3.46+		print("\n\tcalled from ", fmt(frame[1], 'a'), " ");
    3.47+		pfl(frame[1]);
    3.48+		stk = tail stk;
    3.49+		if dolocals then
    3.50+			locals(frame[3], frame[0]);
    3.51+	}
    3.52+}
    3.53+
    3.54+//defn _stk(pc, sp, dolocals)
    3.55+//{
    3.56+//	w(__stk(pc, sp, dolocals));
    3.57+//}
    3.58+
    3.59+
    3.60+defn params(param, name)
    3.61+{
    3.62+	while param do {
    3.63+		sym = head param;
    3.64+		print("*", fmt(name, 'a'), ":", sym[0], "=", sym[1]);
    3.65+		param = tail param;
    3.66+		if param then
    3.67+			print (",");
    3.68+	}	
    3.69+}
    3.70+
    3.71+defn locals(l, name)
    3.72+{
    3.73+	local sym;
    3.74+
    3.75+	while l do {
    3.76+		sym = head l;
    3.77+		print("\t*", fmt(name, 'a'), ":", sym[0], "=", sym[1], "\n");
    3.78+		l = tail l;
    3.79+	}	
    3.80+}
    3.81+
    3.82+defn bptab()					// print a table of breakpoints
    3.83+{
    3.84+	local lst, addr;
    3.85+
    3.86+	lst = bplist;
    3.87+	while lst do {
    3.88+		addr = head lst;
    3.89+		print("\tbpdel(", fmt(addr, 'a'), ")\n");
    3.90+		lst = tail lst;
    3.91+	}
    3.92+}
    3.93+
    3.94+defn procs()			// print status of processes
    3.95+{
    3.96+	local c, lst, cpid;
    3.97+
    3.98+	cpid = pid;
    3.99+	lst = proclist;
   3.100+	while lst do {
   3.101+		np = head lst;
   3.102+		setproc(np);
   3.103+		if np == cpid then
   3.104+			print(">");
   3.105+		print("\t", "setproc(", np, ")\t", status(np), " at ", fmt(*PC, 'a'), "\n");
   3.106+		lst = tail lst;
   3.107+	}
   3.108+	pid = cpid;
   3.109+	if pid != 0 then
   3.110+		setproc(pid);
   3.111+}
   3.112+
   3.113+defn allstacks()			// print stacks of processes and threads
   3.114+{
   3.115+	complex Proc P;
   3.116+	local T, Tq;
   3.117+	local c, lst, cpid;
   3.118+
   3.119+	cpid = pid;
   3.120+	P = (Proc)pq.$head;
   3.121+	while P != 0 do{
   3.122+		Tq = (Tqueue)P.threads;
   3.123+		T = (Thread)Tq.$head;
   3.124+		setproc(P.pid);
   3.125+		while T != 0 do{
   3.126+			if(T.cmdname == 0) then taskstk(T, "unknown");
   3.127+			else taskstk(T, *(T.cmdname\s));
   3.128+			T = T.nextt;
   3.129+		}
   3.130+		P = P.next;
   3.131+	}
   3.132+	pid = cpid;
   3.133+	if pid != 0 then
   3.134+		setproc(pid);
   3.135+}
   3.136+
   3.137+print("/sys/lib/acid/acme");
     4.1new file mode 100755
     4.2--- /dev/null
     4.3+++ b/sys/lib/acid/alef
     4.4@@ -0,0 +1,147 @@
     4.5+// runtime library definitions
     4.6+if objtype=="mips2" then objtype="mips";
     4.7+
     4.8+include("/sys/src/alef/lib/"+objtype+"/acid");
     4.9+
    4.10+defn
    4.11+pchan(addr)
    4.12+{
    4.13+	local l, n;
    4.14+
    4.15+	complex Chan addr;
    4.16+
    4.17+	if addr.sva then
    4.18+		print("Sender waiting: buffer ", addr.sva, "\n");
    4.19+	else
    4.20+		print("No sender\n");
    4.21+
    4.22+	if addr.rva then
    4.23+		print("Receiver waiting: buffer ", addr.rva, "\n");
    4.24+	else
    4.25+		print("No receiver\n");
    4.26+
    4.27+	if addr.async then {
    4.28+		n = 0;
    4.29+		l = addr.qh;
    4.30+		while l do {
    4.31+			n = n+1;
    4.32+			l = l.next;
    4.33+		}
    4.34+		print("Async channel\n\t", n\D, " messsages queued\n\t");
    4.35+		l = addr.free;
    4.36+		while l do {
    4.37+			n = n+1;
    4.38+			l = l.next;
    4.39+		}
    4.40+		print(n\D, " free buffers\n");
    4.41+	}
    4.42+		
    4.43+	if addr.selt then {
    4.44+		l = "send";
    4.45+		if addr.selt then
    4.46+			l = "receive";
    4.47+		print("In select ", l, ": task ", addr.selt\X, "\n");
    4.48+		labstk(addr.selt);
    4.49+	}
    4.50+}
    4.51+
    4.52+defn
    4.53+tdb()
    4.54+{
    4.55+	local ta, tq;
    4.56+
    4.57+	// Private proc tdb pointer
    4.58+	ta = *{	0x7fffe000,
    4.59+		0x0ffdf000,
    4.60+		0xbfff5000 }[match(objtype, {"mips", "sparc", "386"})];
    4.61+
    4.62+	complex Tdb ta;
    4.63+
    4.64+	print("tdb ", ta.ntask, " tasks:");
    4.65+ 	if *ta then
    4.66+		print("locked\n");
    4.67+	else
    4.68+		print("unlocked\n");
    4.69+
    4.70+	if ta.ctask then {
    4.71+		print("current task ", ta.ctask, "\n");
    4.72+		Task(ta.ctask);
    4.73+	}
    4.74+	else
    4.75+		print("proc is idle\n");
    4.76+
    4.77+	tq = (Task)ta.runhd;
    4.78+	if tq == 0 then
    4.79+		return {};
    4.80+
    4.81+	print("Tasks ready to run:\n");
    4.82+	while tq != 0 do {
    4.83+		print("Task(", tq, ")\n");
    4.84+		tq = tq.link;		
    4.85+	}
    4.86+}
    4.87+
    4.88+defn
    4.89+lselect(addr)
    4.90+{
    4.91+	local c;
    4.92+
    4.93+	complex Task addr;
    4.94+	complex Chan c;
    4.95+
    4.96+	c = addr.slist;
    4.97+	if c == 0 then {
    4.98+		print("No select pending\n");
    4.99+		return {};
   4.100+	}
   4.101+	while c do {
   4.102+		print("pchan(", c\X, ")\n");
   4.103+		c = c.sellink;
   4.104+	}
   4.105+}
   4.106+
   4.107+defn
   4.108+pqlock(addr)
   4.109+{
   4.110+	local t;
   4.111+
   4.112+	complex QLock addr;
   4.113+
   4.114+	if *addr then
   4.115+		print("QLock is under modification\n");
   4.116+	if addr.used == 0 then
   4.117+		return {};
   4.118+
   4.119+	print("QLock is held\n");
   4.120+	t = addr.queue;
   4.121+	complex Task t;
   4.122+	if t == 0 then {
   4.123+		print("No tasks waiting\n");
   4.124+		return {};
   4.125+	}
   4.126+	print("Tasks waiting:\n");
   4.127+	while t do {
   4.128+		print("Task(", t, ")\n");
   4.129+		tq = tq.qlink;		
   4.130+	}
   4.131+}
   4.132+
   4.133+srcpath = {
   4.134+	"./",
   4.135+	"/sys/src/alef/lib/port/",
   4.136+	"/sys/src/alef/lib/p9/",
   4.137+	"/sys/src/alef/lib/"+objtype+"/"
   4.138+};
   4.139+
   4.140+defn labstk(l)
   4.141+{
   4.142+	if objtype == "386" then
   4.143+		_stk(ALEF_switch, *l, linkreg(0), 0);
   4.144+	else
   4.145+		_stk(*(l+4), *l, linkreg(0), 0);
   4.146+}
   4.147+
   4.148+print("/sys/lib/acid/alef");
   4.149+
   4.150+include("/sys/src/alef/lib/port/acid."+objtype);
   4.151+include("/sys/src/alef/lib/p9/acid."+objtype);
     5.1new file mode 100755
     5.2--- /dev/null
     5.3+++ b/sys/lib/acid/alpha
     5.4@@ -0,0 +1,205 @@
     5.5+// Alpha support
     5.6+
     5.7+defn acidinit()			// Called after all the init modules are loaded
     5.8+{
     5.9+	bplist = {};
    5.10+	bpfmt = 'X';
    5.11+
    5.12+	srcpath = {
    5.13+		"./",
    5.14+		"/sys/src/libc/port/",
    5.15+		"/sys/src/libc/9sys/",
    5.16+		"/sys/src/libc/alpha/"
    5.17+	};
    5.18+
    5.19+	srcfiles = {};		// list of loaded files
    5.20+	srctext = {};		// the text of the files
    5.21+}
    5.22+
    5.23+defn stk()			// trace
    5.24+{
    5.25+	_stk(*PC, *SP, linkreg(0), 0);
    5.26+}
    5.27+
    5.28+defn lstk()			// trace with locals
    5.29+{
    5.30+	_stk(*PC, *SP, linkreg(0), 1);
    5.31+}
    5.32+
    5.33+defn gpr()			// print general purpose registers
    5.34+{
    5.35+	print("R0\t", *R0, "\n");
    5.36+	print("R1\t", *R1, " R2\t", *R2, " R3\t", *R3, "\n");
    5.37+	print("R4\t", *R4, " R5\t", *R5, " R6\t", *R6, "\n");
    5.38+	print("R7\t", *R7, " R8\t", *R8, " R9\t", *R9, "\n");
    5.39+	print("R10\t", *R10, " R11\t", *R11, " R12\t", *R12, "\n");
    5.40+	print("R13\t", *R13, " R14\t", *R14, " R15\t", *R15, "\n");
    5.41+	print("R16\t", *R16, " R17\t", *R17, " R18\t", *R18, "\n");
    5.42+	print("R19\t", *R19, " R20\t", *R20, " R21\t", *R21, "\n");
    5.43+	print("R22\t", *R22, " R23\t", *R23, " R24\t", *R24, "\n");
    5.44+	print("R25\t", *R25, " R26\t", *R26, " R27\t", *R27, "\n");
    5.45+	print("R28\t", *R28, " R29\t", *R29, " R30\t", *SP\Y, "\n");
    5.46+}
    5.47+
    5.48+defn fpr()
    5.49+{
    5.50+	print("F0\t",  *fmt(F0, 'G'),  "\tF1\t",  *fmt(F1, 'G'), "\n");
    5.51+	print("F2\t",  *fmt(F2, 'G'),  "\tF3\t",  *fmt(F3, 'G'), "\n");
    5.52+	print("F4\t",  *fmt(F4, 'G'),  "\tF5\t",  *fmt(F5, 'G'), "\n");
    5.53+	print("F6\t",  *fmt(F6, 'G'),  "\tF7\t",  *fmt(F7, 'G'), "\n");
    5.54+	print("F8\t",  *fmt(F8, 'G'),  "\tF9\t",  *fmt(F9, 'G'), "\n");
    5.55+	print("F10\t", *fmt(F10, 'G'), "\tF11\t", *fmt(F11, 'G'), "\n");
    5.56+	print("F12\t", *fmt(F12, 'G'), "\tF13\t", *fmt(F13, 'G'), "\n");
    5.57+	print("F14\t", *fmt(F14, 'G'), "\tF15\t", *fmt(F15, 'G'), "\n");
    5.58+	print("F16\t", *fmt(F16, 'G'), "\tF17\t", *fmt(F17, 'G'), "\n");
    5.59+	print("F18\t", *fmt(F18, 'G'), "\tF19\t", *fmt(F19, 'G'), "\n");
    5.60+	print("F20\t", *fmt(F20, 'G'), "\tF21\t", *fmt(F21, 'G'), "\n");
    5.61+	print("F22\t", *fmt(F22, 'G'), "\tF23\t", *fmt(F23, 'G'), "\n");
    5.62+	print("F24\t", *fmt(F24, 'G'), "\tF25\t", *fmt(F25, 'G'), "\n");
    5.63+	print("F26\t", *fmt(F26, 'G'), "\tF27\t", *fmt(F27, 'G'), "\n");
    5.64+	print("F28\t", *fmt(F28, 'G'), "\tF29\t", *fmt(F29, 'G'), "\n");
    5.65+	print("F30\t", *fmt(F30, 'G'), "\tF31\t", *fmt(F31, 'G'), "\n");
    5.66+}
    5.67+
    5.68+defn spr()				// print special processor registers
    5.69+{
    5.70+	local pc, link, cause;
    5.71+
    5.72+	pc = *PC;
    5.73+	print("PC\t", pc, " ", fmt(pc, 'a'), "  ");
    5.74+	pfl(pc);
    5.75+
    5.76+	link = *R26;
    5.77+	print("SP\t", *SP, "\tLINK\t", link, " ", fmt(link, 'a'), " ");
    5.78+	pfl(link);
    5.79+
    5.80+	cause = *TYPE;
    5.81+	print("STATUS\t", *STATUS, "\tTYPE\t", cause, " ", reason(cause), "\n");
    5.82+	print("A0\t", *A0, " A1\t", *A1, " A2\t", *A2, "\n");
    5.83+}
    5.84+
    5.85+defn regs()				// print all registers
    5.86+{
    5.87+	spr();
    5.88+	gpr();
    5.89+}
    5.90+
    5.91+defn pstop(pid)
    5.92+{
    5.93+	local l, pc;
    5.94+
    5.95+	pc = *PC;
    5.96+
    5.97+	print(pid,": ", reason(*TYPE), "\t");
    5.98+	print(fmt(pc, 'a'), "\t", fmt(pc, 'i'), "\n");
    5.99+
   5.100+	if notes then {
   5.101+		if notes[0] != "sys: breakpoint" then {
   5.102+			print("Notes pending:\n");
   5.103+			l = notes;
   5.104+			while l do {
   5.105+				print("\t", head l, "\n");
   5.106+				l = tail l;
   5.107+			}
   5.108+		}
   5.109+	}
   5.110+}
   5.111+
   5.112+sizeofUreg = 296;
   5.113+aggr Ureg
   5.114+{
   5.115+	'W' 0 type;
   5.116+	'W' 8 a0;
   5.117+	'W' 16 a1;
   5.118+	'W' 24 a2;
   5.119+	'W' 32 r0;
   5.120+	'W' 40 r1;
   5.121+	'W' 48 r2;
   5.122+	'W' 56 r3;
   5.123+	'W' 64 r4;
   5.124+	'W' 72 r5;
   5.125+	'W' 80 r6;
   5.126+	'W' 88 r7;
   5.127+	'W' 96 r8;
   5.128+	'W' 104 r9;
   5.129+	'W' 112 r10;
   5.130+	'W' 120 r11;
   5.131+	'W' 128 r12;
   5.132+	'W' 136 r13;
   5.133+	'W' 144 r14;
   5.134+	'W' 152 r15;
   5.135+	'W' 160 r19;
   5.136+	'W' 168 r20;
   5.137+	'W' 176 r21;
   5.138+	'W' 184 r22;
   5.139+	'W' 192 r23;
   5.140+	'W' 200 r24;
   5.141+	'W' 208 r25;
   5.142+	'W' 216 r26;
   5.143+	'W' 224 r27;
   5.144+	'W' 232 r28;
   5.145+	{
   5.146+	'W' 240 r30;
   5.147+	'W' 240 usp;
   5.148+	'W' 240 sp;
   5.149+	};
   5.150+	'W' 248 status;
   5.151+	'W' 256 pc;
   5.152+	'W' 264 r29;
   5.153+	'W' 272 r16;
   5.154+	'W' 280 r17;
   5.155+	'W' 288 r18;
   5.156+};
   5.157+
   5.158+defn
   5.159+Ureg(addr) {
   5.160+	complex Ureg addr;
   5.161+	print("	type	", addr.type, "\n");
   5.162+	print("	a0	", addr.a0, "\n");
   5.163+	print("	a1	", addr.a1, "\n");
   5.164+	print("	a2	", addr.a2, "\n");
   5.165+	print("	r0	", addr.r0, "\n");
   5.166+	print("	r1	", addr.r1, "\n");
   5.167+	print("	r2	", addr.r2, "\n");
   5.168+	print("	r3	", addr.r3, "\n");
   5.169+	print("	r4	", addr.r4, "\n");
   5.170+	print("	r5	", addr.r5, "\n");
   5.171+	print("	r6	", addr.r6, "\n");
   5.172+	print("	r7	", addr.r7, "\n");
   5.173+	print("	r8	", addr.r8, "\n");
   5.174+	print("	r9	", addr.r9, "\n");
   5.175+	print("	r10	", addr.r10, "\n");
   5.176+	print("	r11	", addr.r11, "\n");
   5.177+	print("	r12	", addr.r12, "\n");
   5.178+	print("	r13	", addr.r13, "\n");
   5.179+	print("	r14	", addr.r14, "\n");
   5.180+	print("	r15	", addr.r15, "\n");
   5.181+	print("	r19	", addr.r19, "\n");
   5.182+	print("	r20	", addr.r20, "\n");
   5.183+	print("	r21	", addr.r21, "\n");
   5.184+	print("	r22	", addr.r22, "\n");
   5.185+	print("	r23	", addr.r23, "\n");
   5.186+	print("	r24	", addr.r24, "\n");
   5.187+	print("	r25	", addr.r25, "\n");
   5.188+	print("	r26	", addr.r26, "\n");
   5.189+	print("	r27	", addr.r27, "\n");
   5.190+	print("	r28	", addr.r28, "\n");
   5.191+	print("_12_ {\n");
   5.192+		_12_(addr+240);
   5.193+	print("}\n");
   5.194+	print("	status	", addr.status, "\n");
   5.195+	print("	pc	", addr.pc, "\n");
   5.196+	print("	r29	", addr.r29, "\n");
   5.197+	print("	r16	", addr.r16, "\n");
   5.198+	print("	r17	", addr.r17, "\n");
   5.199+	print("	r18	", addr.r18, "\n");
   5.200+};
   5.201+
   5.202+defn linkreg(addr)
   5.203+{
   5.204+	complex Ureg addr;
   5.205+	return addr.r26\X;
   5.206+}
   5.207+
   5.208+print("/sys/lib/acid/alpha");
   5.209+
     6.1new file mode 100755
     6.2--- /dev/null
     6.3+++ b/sys/lib/acid/arm
     6.4@@ -0,0 +1,116 @@
     6.5+// ARM support
     6.6+
     6.7+defn acidinit()			// Called after all the init modules are loaded
     6.8+{
     6.9+	bplist = {};
    6.10+	bpfmt = 'X';
    6.11+
    6.12+	srcpath = {
    6.13+		"./",
    6.14+		"/sys/src/libc/port/",
    6.15+		"/sys/src/libc/9sys/",
    6.16+		"/sys/src/libc/arm/"
    6.17+	};
    6.18+
    6.19+	srcfiles = {};			// list of loaded files
    6.20+	srctext = {};			// the text of the files
    6.21+}
    6.22+
    6.23+defn linkreg(addr)
    6.24+{
    6.25+	return *R14;
    6.26+}
    6.27+
    6.28+defn stk()				// trace
    6.29+{
    6.30+	_stk(*PC, *SP, linkreg(0), 0);
    6.31+}
    6.32+
    6.33+defn lstk()				// trace with locals
    6.34+{
    6.35+	_stk(*PC, *SP, linkreg(0), 1);
    6.36+}
    6.37+
    6.38+defn gpr()			// print general purpose registers
    6.39+{
    6.40+	print("R0\t", *R0, " R1\t", *R1, " R2\t", *R2, "\n");
    6.41+	print("R3\t", *R3, " R4\t", *R4, " R5\t", *R5, "\n");
    6.42+	print("R6\t", *R6, " R7\t", *R7, " R8\t", *R8, "\n");
    6.43+	print("R9\t", *R9, " R10\t", *R10, " R11\t", *R11, "\n");
    6.44+	print("R12\t", *R12, " R13\t", *R13, " R14\t", *R14, "\n");
    6.45+	print("R15\t", *R15, "\n");
    6.46+}
    6.47+
    6.48+defn regs()				// print all registers
    6.49+{
    6.50+	gpr();
    6.51+}
    6.52+
    6.53+defn pstop(pid)
    6.54+{
    6.55+	local l;
    6.56+	local pc;
    6.57+
    6.58+	pc = *PC;
    6.59+
    6.60+	print(pid,": ", reason(*TYPE), "\t");
    6.61+	print(fmt(pc, 'a'), "\t", fmt(pc, 'i'), "\n");
    6.62+
    6.63+	if notes then {
    6.64+		if notes[0] != "sys: breakpoint" then {
    6.65+			print("Notes pending:\n");
    6.66+			l = notes;
    6.67+			while l do {
    6.68+				print("\t", head l, "\n");
    6.69+				l = tail l;
    6.70+			}
    6.71+		}
    6.72+	}
    6.73+}
    6.74+
    6.75+aggr Ureg
    6.76+{
    6.77+	'U' 0 r0;
    6.78+	'U' 4 r1;
    6.79+	'U' 8 r2;
    6.80+	'U' 12 r3;
    6.81+	'U' 16 r4;
    6.82+	'U' 20 r5;
    6.83+	'U' 24 r6;
    6.84+	'U' 28 r7;
    6.85+	'U' 32 r8;
    6.86+	'U' 36 r9;
    6.87+	'U' 40 r10;
    6.88+	'U' 44 r11;
    6.89+	'U' 48 r12;
    6.90+	'U' 52 r13;
    6.91+	'U' 56 r14;
    6.92+	'U' 60 type;
    6.93+	'U' 64 psr;
    6.94+	'U' 68 pc;
    6.95+};
    6.96+
    6.97+defn
    6.98+Ureg(addr) {
    6.99+	complex Ureg addr;
   6.100+	print("	r0	", addr.r0, "\n");
   6.101+	print("	r1	", addr.r1, "\n");
   6.102+	print("	r2	", addr.r2, "\n");
   6.103+	print("	r3	", addr.r3, "\n");
   6.104+	print("	r4	", addr.r4, "\n");
   6.105+	print("	r5	", addr.r5, "\n");
   6.106+	print("	r6	", addr.r6, "\n");
   6.107+	print("	r7	", addr.r7, "\n");
   6.108+	print("	r8	", addr.r8, "\n");
   6.109+	print("	r9	", addr.r9, "\n");
   6.110+	print("	r10	", addr.r10, "\n");
   6.111+	print("	r11	", addr.r11, "\n");
   6.112+	print("	r12	", addr.r12, "\n");
   6.113+	print("	r13	", addr.r13, "\n");
   6.114+	print("	r14	", addr.r14, "\n");
   6.115+	print("	type	", addr.type, "\n");
   6.116+	print("	psr	", addr.psr, "\n");
   6.117+	print("	pc	", addr.pc, "\n");
   6.118+};
   6.119+
   6.120+print("/sys/lib/acid/arm");
     7.1new file mode 100755
     7.2--- /dev/null
     7.3+++ b/sys/lib/acid/coverage
     7.4@@ -0,0 +1,128 @@
     7.5+// Coverage library
     7.6+
     7.7+defn coverage()
     7.8+{
     7.9+	local lmap, lp, e, pc, n, l;
    7.10+
    7.11+	new();
    7.12+
    7.13+	bblock = {};
    7.14+
    7.15+	// find the first location in the text
    7.16+	e = (map()[0][1])\i;
    7.17+
    7.18+	while e < etext-4 do {
    7.19+		l = follow(e);
    7.20+		if tail l != {} then {
    7.21+			if match(l[0], bblock) < 0 then
    7.22+				bblock = append bblock, l[0];
    7.23+			if match(l[1], bblock) < 0 then
    7.24+				bblock = append bblock, l[1];
    7.25+		}
    7.26+		e++;
    7.27+	}
    7.28+
    7.29+	l = bblock;
    7.30+	while l != {} do {
    7.31+		*fmt(head l, bpfmt) = bpinst;
    7.32+		l = tail l;
    7.33+	}
    7.34+
    7.35+	while 1 do {
    7.36+		cont();
    7.37+		pc = *PC;
    7.38+		n = match(pc, bblock);
    7.39+		if n >= 0 then {
    7.40+			pc = fmt(pc, bpfmt);
    7.41+			*pc = @pc;
    7.42+			bblock = delete bblock, n;
    7.43+		}
    7.44+		else {
    7.45+			pstop(pid);
    7.46+			return {};
    7.47+		}
    7.48+	}
    7.49+}
    7.50+
    7.51+defn eblock(addr)
    7.52+{
    7.53+	addr = addr\i;
    7.54+
    7.55+	while addr < etext do {
    7.56+		if (tail follow(addr)) != {} then
    7.57+			return pcline(addr);
    7.58+		addr++;
    7.59+	}
    7.60+	return 0;
    7.61+}
    7.62+
    7.63+defn basic(stsrc, ensrc, file)
    7.64+{
    7.65+	local src, text;
    7.66+
    7.67+	if stsrc >= ensrc then
    7.68+		return {};
    7.69+
    7.70+	print(file, ":", stsrc, ",", ensrc, "\n");
    7.71+	src = match(file, srcfiles);
    7.72+
    7.73+	if src >= 0 then
    7.74+		src = srctext[src];
    7.75+	else
    7.76+		src = findsrc(file);
    7.77+
    7.78+	if src == {} then
    7.79+		print("no source for ", file, "\n");
    7.80+	else {
    7.81+		while stsrc <= ensrc do {
    7.82+			text = src[stsrc];
    7.83+			if text != {} then
    7.84+				print("\t", stsrc, ":", text, "\n");
    7.85+			stsrc = stsrc+1;
    7.86+		}
    7.87+	}
    7.88+}
    7.89+
    7.90+defn analyse(fnaddr)
    7.91+{
    7.92+	local addr, l, tfn;
    7.93+
    7.94+	new();
    7.95+
    7.96+	tfn = fnbound(fnaddr);
    7.97+
    7.98+	l = bblock;
    7.99+	while l do {
   7.100+		addr = head l;
   7.101+
   7.102+		if addr >= tfn[0] && addr < tfn[1] then
   7.103+			basic(pcline(addr), eblock(addr), pcfile(addr));
   7.104+		
   7.105+		l = tail l;
   7.106+	}
   7.107+	kill(pid);
   7.108+}
   7.109+
   7.110+defn report()
   7.111+{
   7.112+	local addr, l;
   7.113+
   7.114+	new();
   7.115+
   7.116+	l = bblock;
   7.117+	while l do {
   7.118+		addr = head l;
   7.119+
   7.120+		basic(pcline(addr), eblock(addr), pcfile(addr));
   7.121+		
   7.122+		l = tail l;
   7.123+	}
   7.124+	kill(pid);
   7.125+}
   7.126+
   7.127+defn stopped(pid)
   7.128+{
   7.129+	return {};
   7.130+}
   7.131+
   7.132+print("/sys/lib/acid/coverage");
     8.1new file mode 100755
     8.2--- /dev/null
     8.3+++ b/sys/lib/acid/kernel
     8.4@@ -0,0 +1,387 @@
     8.5+include("/sys/lib/acid/syscall");
     8.6+
     8.7+// print various /proc files
     8.8+defn fd() {
     8.9+	rc("cat /proc/"+itoa(pid)+"/fd");
    8.10+}
    8.11+
    8.12+defn segment() {
    8.13+	rc("cat /proc/"+itoa(pid)+"/segment");
    8.14+}
    8.15+
    8.16+defn ns() {
    8.17+	rc("cat /proc/"+itoa(pid)+"/ns");
    8.18+}
    8.19+
    8.20+defn qid(qid) {
    8.21+	complex Qid qid;
    8.22+	return itoa(qid.path\X)+"."+itoa(qid.vers\X);
    8.23+}
    8.24+
    8.25+defn path(p) {
    8.26+	complex Path p;
    8.27+	if p != 0 then {
    8.28+		return *(p.s\s);
    8.29+	} else
    8.30+		return "<null>";
    8.31+}
    8.32+
    8.33+// print Image cache contents
    8.34+// requires include("/sys/src/9/xxx/segment.acid")
    8.35+IHASHSIZE = 64;
    8.36+defn imagecacheline(h) {
    8.37+	while h != 0 do {
    8.38+		complex Image h;
    8.39+		print (h\X, " ", qid(h.qid), " type ", h.type\D, " ref ", h.ref, " next ", h.next\X, " ", cname(h.c.name), "\n");
    8.40+		h = h.hash;
    8.41+	}
    8.42+}
    8.43+
    8.44+defn imagecache() {
    8.45+	local i;
    8.46+
    8.47+	i=0; loop 1,IHASHSIZE do {
    8.48+		imagecacheline(imagealloc.free[i]);
    8.49+		i = i+1;
    8.50+	}
    8.51+}
    8.52+
    8.53+// dump channels
    8.54+defn chan(c) {
    8.55+	local d, q;
    8.56+
    8.57+	c = (Chan)c;
    8.58+	d=(Dev)(*(devtab+4*c.type));
    8.59+	q=c.qid;
    8.60+	print("chan(", c\X, "): ref=", c.ref\D, " #", d.dc\r, c.dev\D, " (", q.path, " ", q.vers\D, " ", q.type\X, ")");
    8.61+	print(" fid=", c.fid\D, " iounit=", c.iounit\D);
    8.62+	if c.ref != 0 then {
    8.63+		print(" ", cname(c.name), " mchan=", c.mchan\X);
    8.64+		if c.mchan != 0 then {
    8.65+			print(" ", cname(c.mchan.name));
    8.66+		}
    8.67+	}
    8.68+	print("\n");
    8.69+}
    8.70+
    8.71+defn chans() {
    8.72+	local c;
    8.73+
    8.74+	c = (Chan)chanalloc.list;
    8.75+	while c != 0 do {
    8.76+		if c.ref != 0 then
    8.77+			chan(c);
    8.78+		c=(Chan)c.link;
    8.79+	}
    8.80+}
    8.81+
    8.82+defn nchans() {
    8.83+	local c, n;
    8.84+	
    8.85+	n = 0;
    8.86+	c = (Chan)chanalloc.list;
    8.87+	while c != 0 do {
    8.88+		if c.ref != 0 then
    8.89+			n++;
    8.90+		c = (Chan)c.link;
    8.91+	}
    8.92+	return n;
    8.93+}
    8.94+
    8.95+defn activechanlist() {
    8.96+	local l, n;
    8.97+	
    8.98+	l = {};
    8.99+	c = (Chan)chanalloc.list;
   8.100+	while c != 0 do {
   8.101+		if c.ref != 0 then
   8.102+			l = append l,c;
   8.103+		c = (Chan)c.link;
   8.104+	}
   8.105+	return l;
   8.106+}
   8.107+
   8.108+defn difflist(a, b) {
   8.109+	local l, x;
   8.110+	
   8.111+	l = {};
   8.112+	while a != {} do {
   8.113+		x = head a;
   8.114+		if match(x, b) == -1 then
   8.115+			l = append l, x;
   8.116+		a = tail a;
   8.117+	}
   8.118+	return l;
   8.119+}
   8.120+
   8.121+_active_chan_list = {};
   8.122+defn newchans() {
   8.123+	local l, new;
   8.124+	
   8.125+	l = activechanlist();
   8.126+	if _active_chan_list != {} then
   8.127+		newerchans(_active_chan_list);
   8.128+	_active_chan_list = l;
   8.129+}
   8.130+
   8.131+defn newerchans(oldlist){
   8.132+	local new;
   8.133+	
   8.134+	new = difflist(activechanlist(), oldlist);
   8.135+	while new != {} do {
   8.136+		chan(head new);
   8.137+		new = tail new;
   8.138+	}
   8.139+}
   8.140+
   8.141+// look for channels that refer to themselves
   8.142+defn badchans() {
   8.143+	local bad, c, i, len, mtpt, p;
   8.144+	
   8.145+	c = (Chan)chanalloc.list;
   8.146+	while c != 0 do {
   8.147+		if c.ref != 0 then {
   8.148+			bad = "";
   8.149+			p = (Path)c.path;
   8.150+			if p != 0 then {
   8.151+				path(p);
   8.152+				mtpt = p.mtpt;
   8.153+				len = p.mlen;
   8.154+				i=0; loop 1,len do {
   8.155+					if mtpt[i] == c then
   8.156+						bad = bad+" mtpt self-ref";
   8.157+					i = i+1;
   8.158+				}
   8.159+			}
   8.160+			if bad != "" then
   8.161+				print("chan(", c\X, "):", bad, "\n");
   8.162+		}
   8.163+		c = (Chan)c.link;
   8.164+	}
   8.165+}
   8.166+
   8.167+// manipulate processes
   8.168+defn proctab(x) {
   8.169+	return procalloc.arena+sizeofProc*x;
   8.170+}
   8.171+
   8.172+defn proc(p) {
   8.173+	complex Proc p;
   8.174+	local s, i;
   8.175+
   8.176+	if p.state != 0 && p.pid != 0 && p.text != 0 then {	// 0 is Dead
   8.177+		s = p.psstate;
   8.178+		if s == 0 then {
   8.179+			s = "kproc";
   8.180+		} else {
   8.181+			s = *(s\s);
   8.182+		}
   8.183+		print(p\X, " ", p.pid, ": ", *(p.text\s), " ", *(p.user\s), " pc ", p.pc\X, " ", s, " (", *(statename[p.state]\s), ") ut ", p.time[0]\D, " st ", p.time[1]\D, " qpc ", p.qpc\X, "\n");
   8.184+	}
   8.185+}
   8.186+
   8.187+defn procenv(p) {
   8.188+	complex Proc p;
   8.189+	local e, v;
   8.190+
   8.191+	e = p.egrp;
   8.192+	complex Egrp e;
   8.193+	v = e.entries;
   8.194+	while v != 0 do {
   8.195+		complex Evalue v;
   8.196+		print(*(v.name\s), "=");
   8.197+		printstringn(v.value, v.len);
   8.198+		print("\n");
   8.199+		v = v.link;
   8.200+	}
   8.201+}
   8.202+
   8.203+KSTACK=4096;
   8.204+
   8.205+defn procstksize(p) {
   8.206+	complex Proc p;
   8.207+	local top, sp;
   8.208+
   8.209+	if p.state != 0 then {	// 0 is Dead
   8.210+		top = p.kstack+KSTACK;
   8.211+		sp = *p.sched;
   8.212+		print(top-sp\D, "\n");
   8.213+	}
   8.214+}
   8.215+
   8.216+defn procstk(p) {
   8.217+	complex Proc p;
   8.218+	local l;
   8.219+
   8.220+	if p.state != 0 then {	// 0 is Dead
   8.221+		l = p.sched;
   8.222+		if objtype=="386" then
   8.223+			_stk(gotolabel, *l, linkreg(0), 0);
   8.224+		else
   8.225+			_stk(*(l+4), *l, linkreg(0), 0);
   8.226+	}
   8.227+}
   8.228+
   8.229+defn procs() {
   8.230+	local i;
   8.231+
   8.232+	i=0; loop 1,conf.nproc do {
   8.233+		proc(proctab(i));
   8.234+		i = i+1;
   8.235+	}
   8.236+}
   8.237+
   8.238+defn stacks() {
   8.239+	local i, p;
   8.240+
   8.241+	i=0; loop 1,conf.nproc do {
   8.242+		p = (Proc)proctab(i);
   8.243+		if p.state != 0 then {
   8.244+			print("=========================================================\n");
   8.245+			proc(p);
   8.246+			procstk(p);
   8.247+		}
   8.248+		i = i+1;
   8.249+	}
   8.250+}
   8.251+
   8.252+defn stacksizes() {
   8.253+	local i;
   8.254+
   8.255+	i=0; loop 1,conf.nproc do {
   8.256+		procstksize(proctab(i));
   8.257+		i = i+1;
   8.258+	}
   8.259+}
   8.260+
   8.261+// segment-related
   8.262+defn procsegs(p) {
   8.263+	complex Proc p;
   8.264+	local i;
   8.265+
   8.266+	i=0; loop 1,NSEG do {
   8.267+		psegment(p.seg[i]);
   8.268+		i = i+1;
   8.269+	}
   8.270+}
   8.271+
   8.272+segtypes = { "text", "data", "bss", "stack", "shared", "physical", "shdata", "map" };
   8.273+defn psegment(s) {
   8.274+	complex Segment s;
   8.275+
   8.276+	if s != 0 then {
   8.277+		print(s\X, " ", segtypes[s.type&SG_TYPE], " ", s.base\X, "-", s.top\X, " image ", s.image\X, "\n");
   8.278+	}
   8.279+}
   8.280+
   8.281+// find physical address for an address in a given process
   8.282+defn procaddr(p, a) {
   8.283+	complex Proc p;
   8.284+	local i, s, r;
   8.285+
   8.286+	r = 0;
   8.287+	i=0; loop 1,NSEG do {
   8.288+		s = p.seg[i];
   8.289+		if s != 0 then {
   8.290+			complex Segment s;
   8.291+			if s.base <= a && a < s.top then {
   8.292+				r = segaddr(s, a);
   8.293+			}
   8.294+		}
   8.295+		i = i+1;
   8.296+	}
   8.297+	return r;
   8.298+}
   8.299+
   8.300+// find an address in a given segment
   8.301+defn segaddr(s, a) {
   8.302+	complex Segment s;
   8.303+	local pte, pg;
   8.304+
   8.305+	a = a - s.base;
   8.306+	if s.map == 0 || s.mapsize < a/PTEMAPMEM then {
   8.307+		return 0;
   8.308+	}
   8.309+
   8.310+	pte = s.map[a/PTEMAPMEM];
   8.311+	if pte == 0 then {
   8.312+		return 0;
   8.313+	}
   8.314+
   8.315+	complex Pte pte;
   8.316+	pg = pte.pages[(a%PTEMAPMEM)/BY2PG];
   8.317+	if pg == 0 then {
   8.318+		return 0;
   8.319+	}
   8.320+
   8.321+	if pg & 1 then {	// swapped out, return disk address
   8.322+		return pg&~1;
   8.323+	}
   8.324+
   8.325+	complex Page pg;
   8.326+	return (KZERO|(pg.pa+(a%BY2PG)))\X;
   8.327+}
   8.328+
   8.329+defn kzero() {
   8.330+	return main - (main & 0x0FFFFFFF);
   8.331+}
   8.332+
   8.333+// PC only
   8.334+PTEMAPMEM = (1024*1024);
   8.335+BY2PG = 4096;
   8.336+PTEPERTAB = (PTEMAPMEM/BY2PG);
   8.337+defn up() {
   8.338+	local mach;
   8.339+
   8.340+	MACHADDR = KZERO+0x4000;
   8.341+	mach = MACHADDR;
   8.342+	complex Mach mach;
   8.343+	return mach.externup;
   8.344+}
   8.345+
   8.346+defn intrcount() {
   8.347+	local p, pp, t, i, j;
   8.348+
   8.349+	p = intrtimes;
   8.350+	i=0;
   8.351+	loop 1,256 do {
   8.352+		pp = p[i];
   8.353+		i=i+1;
   8.354+		if pp != 0 then {
   8.355+			j=0;
   8.356+			t=0;
   8.357+			loop 1,1000 do {
   8.358+				t = t+pp[j];
   8.359+				j=j+1;
   8.360+			}
   8.361+			print(itoa(i, "%5d"), " ", itoa(t, "%11d"), "\n");
   8.362+		}
   8.363+	}
   8.364+}
   8.365+
   8.366+print("/sys/lib/acid/kernel");
   8.367+
   8.368+defn needacid(s){
   8.369+	print("\trc(\"cd /sys/src/9/", kdir, "; mk ", s, ".acid\")\n");
   8.370+	print("\tinclude(\"/sys/src/9/", kdir, "/", s, ".acid\")\n");
   8.371+}
   8.372+
   8.373+defn kinit() {
   8.374+if (map()[2]) != {} then {	// map has more than two elements -> active proc
   8.375+	kdir = "unknown";
   8.376+	KZERO = kzero();
   8.377+	
   8.378+	if objtype == "386" then {
   8.379+		map({"*data", KZERO, 0xffffffff, KZERO});
   8.380+		kdir="pc";
   8.381+	}
   8.382+	if (objtype == "mips" || objtype == "mips2") then {
   8.383+		kdir = "ch";
   8.384+	}
   8.385+	if objtype == "alpha" then {
   8.386+		map({"*data", KZERO, 0xffffffff, KZERO});
   8.387+		kdir = "alpha";
   8.388+	}
   8.389+	needacid("proc");
   8.390+}
   8.391+}
     9.1new file mode 100755
     9.2--- /dev/null
     9.3+++ b/sys/lib/acid/leak
     9.4@@ -0,0 +1,188 @@
     9.5+//
     9.6+// usage: acid -l pool -l leak
     9.7+//
     9.8+include("/sys/src/libc/port/pool.acid");
     9.9+
    9.10+defn
    9.11+dumppool(p, sum)
    9.12+{
    9.13+	complex Pool p;
    9.14+	a = p.arenalist;
    9.15+
    9.16+	print("A: ", p.arenalist\X, "\n");
    9.17+	while a != 0 && a < 0xff000000 do {
    9.18+		complex Arena a;
    9.19+		dumparena(a, sum);
    9.20+		a = a.down;
    9.21+	}
    9.22+}
    9.23+
    9.24+defn
    9.25+dumparena(arena, sum)
    9.26+{
    9.27+	local atail, b, nb;
    9.28+
    9.29+	atail = A2TB(arena);
    9.30+	complex Bhdr arena;
    9.31+	b = a;
    9.32+	print("B: ", b\X, " ", atail\X, "\n");
    9.33+	while b < atail && b.magic != ARENATAIL_MAGIC do {
    9.34+		dumpblock(b, sum);
    9.35+		nb = B2NB(b);
    9.36+		if nb == b then {
    9.37+			print("B2NB(", b\X, ") = b\n");
    9.38+			b = atail;	// end loop
    9.39+		}
    9.40+		if nb > atail then {
    9.41+			b = (Bhdr)(b+4);
    9.42+			print("lost at block ", (b-4)\X, ", scanning forward\n");
    9.43+			while b < atail && b.magic != ALLOC_MAGIC && b.magic != FREE_MAGIC do
    9.44+				b = (Bhdr)(b+4);
    9.45+			print("stopped at ", b\X, " ", *b\X, "\n");
    9.46+		}else
    9.47+			b = nb;
    9.48+	}
    9.49+	if b != atail then
    9.50+		print("found wrong tail to arena ", arena\X, " wanted ", atail\X, "\n");
    9.51+}
    9.52+
    9.53+defn
    9.54+isptr(a)
    9.55+{
    9.56+	if end <= a && a < xbloc then
    9.57+		return 1;
    9.58+	if 0xdefff000 <= a && a < 0xdffff000 then
    9.59+		return 1;
    9.60+	return 0;
    9.61+}
    9.62+
    9.63+lastalloc = 0;
    9.64+lastcount = 0;
    9.65+lastsize = 0;
    9.66+defn
    9.67+emitsum()
    9.68+{
    9.69+	if lastalloc then
    9.70+		print("summary ", lastalloc\a, " ", lastcount\D, " ", lastsize\D, "\n");
    9.71+	lastalloc = 0;
    9.72+	lastcount = 0;
    9.73+	lastsize = 0;
    9.74+}
    9.75+
    9.76+defn
    9.77+dumpblock(addr, sum)
    9.78+{
    9.79+	complex Bhdr addr;
    9.80+
    9.81+	if addr.magic == ALLOC_MAGIC || (!sum && addr.magic == FREE_MAGIC) then {
    9.82+		local a, x, s;
    9.83+
    9.84+		a = addr;
    9.85+		complex Alloc a;
    9.86+
    9.87+		x = addr+8;
    9.88+		if sum then {
    9.89+			if *(addr+8) != lastalloc then {
    9.90+				emitsum();
    9.91+				lastalloc = *(addr+8);
    9.92+			}
    9.93+			lastcount = lastcount+1;
    9.94+			lastsize = lastsize+a.size;
    9.95+		}else{
    9.96+			if addr.magic == ALLOC_MAGIC then
    9.97+				s = "block";
    9.98+			else
    9.99+				s = "free";
   9.100+			print(s, " ", addr\X, " ", a.size\X, " ");
   9.101+			print(*(addr+8)\X, " ", *(addr+12)\X, " ",
   9.102+				*(addr+8)\a, " ", *(addr+12)\a, "\n");
   9.103+		}
   9.104+	}
   9.105+}
   9.106+
   9.107+defn
   9.108+dumprange(s, e, type)
   9.109+{
   9.110+	local x, y;
   9.111+
   9.112+	print("range ", type, " ", s\X, " ", e\X, "\n");
   9.113+	x = s;
   9.114+	while x < e do {
   9.115+		y = *(x\X);
   9.116+		if isptr(y) then print("data ", x\X, " ", y\X, " ", type, "\n");
   9.117+		x = x + 4;
   9.118+	}
   9.119+}
   9.120+
   9.121+defn
   9.122+stacktop()
   9.123+{
   9.124+	local e, m;
   9.125+	
   9.126+	m = map();
   9.127+	while m != {} do {
   9.128+		e = head m;
   9.129+		if e[0] == "*data" then
   9.130+			return e[2];
   9.131+		m = tail m;
   9.132+	}
   9.133+	return 0xdffff000;
   9.134+}
   9.135+			
   9.136+defn
   9.137+dumpmem()
   9.138+{
   9.139+	local s, top;
   9.140+
   9.141+	xbloc = *bloc;
   9.142+	// assume map()[1] is "data" 
   9.143+	dumprange(map()[1][1], end, "bss");	// bss
   9.144+	dumprange(end, xbloc, "alloc");	// allocated
   9.145+
   9.146+	top = stacktop() - 8;
   9.147+	if top-0x01000000 < *SP && *SP < top then
   9.148+		s = *SP;
   9.149+	else
   9.150+		s = top-32*1024;
   9.151+
   9.152+	dumprange(s, top, "stack");
   9.153+}
   9.154+
   9.155+defn
   9.156+dumpregs()
   9.157+{
   9.158+	dumprange(0, sizeofUreg, "reg");
   9.159+}
   9.160+
   9.161+
   9.162+defn
   9.163+leakdump(l)
   9.164+{
   9.165+	print("==LEAK BEGIN==\n");
   9.166+	dumppool(*mainmem, 0);
   9.167+	dumpmem();
   9.168+	dumpregs();
   9.169+	while l != {} do {
   9.170+		setproc(head l);
   9.171+		dumpregs();
   9.172+		l = tail l;
   9.173+	}
   9.174+	print("==LEAK END==\n");
   9.175+}
   9.176+
   9.177+defn
   9.178+blockdump()
   9.179+{
   9.180+	print("==BLOCK BEGIN==\n");
   9.181+	dumppool(*mainmem, 0);
   9.182+	print("==BLOCK END==\n");
   9.183+}
   9.184+
   9.185+defn
   9.186+blocksummary()
   9.187+{
   9.188+	print("==BLOCK BEGIN==\n");
   9.189+	dumppool(*mainmem, 1);
   9.190+	emitsum();
   9.191+	print("==BLOCK END==\n");
   9.192+}
    10.1new file mode 100755
    10.2--- /dev/null
    10.3+++ b/sys/lib/acid/mips
    10.4@@ -0,0 +1,217 @@
    10.5+// Mips support
    10.6+
    10.7+defn acidinit()			// Called after all the init modules are loaded
    10.8+{
    10.9+	bplist = {};
   10.10+	bpfmt = 'X';
   10.11+
   10.12+	srcpath = {
   10.13+		"./",
   10.14+		"/sys/src/libc/port/",
   10.15+		"/sys/src/libc/9sys/",
   10.16+		"/sys/src/libc/mips/"
   10.17+	};
   10.18+
   10.19+	srcfiles = {};		// list of loaded files
   10.20+	srctext = {};		// the text of the files
   10.21+}
   10.22+
   10.23+defn stk()			// trace
   10.24+{
   10.25+	_stk(*PC, *SP, linkreg(0), 0);
   10.26+}
   10.27+
   10.28+defn lstk()			// trace with locals
   10.29+{
   10.30+	_stk(*PC, *SP, linkreg(0), 1);
   10.31+}
   10.32+
   10.33+defn gpr()			// print general purpose registers
   10.34+{
   10.35+	print("R1\t", *R1, " R2\t", *R2, " R3\t", *R3, "\n");
   10.36+	print("R4\t", *R4, " R5\t", *R5, " R6\t", *R6, "\n");
   10.37+	print("R7\t", *R7, " R8\t", *R8, " R9\t", *R9, "\n");
   10.38+	print("R10\t", *R10, " R11\t", *R11, " R12\t", *R12, "\n");
   10.39+	print("R13\t", *R13, " R14\t", *R14, " R15\t", *R15, "\n");
   10.40+	print("R16\t", *R16, " R17\t", *R17, " R18\t", *R18, "\n");
   10.41+	print("R19\t", *R19, " R20\t", *R20, " R21\t", *R21, "\n");
   10.42+	print("R22\t", *R22, " R23\t", *R23, " R24\t", *R24, "\n");
   10.43+	print("R25\t", *R25, " R26\t", *R26, " R27\t", *R27, "\n");
   10.44+	print("R28\t", *R28, " R29\t", *SP, " R30\t", *R30, "\n");
   10.45+	print("R31\t", *R31, "\n");
   10.46+}
   10.47+
   10.48+defn Fpr()
   10.49+{
   10.50+	print("F0\t",  *fmt(F0, 'G'),  "\tF2\t",  *fmt(F2, 'G'), "\n");
   10.51+	print("F4\t",  *fmt(F4, 'G'),  "\tF6\t",  *fmt(F6, 'G'), "\n");
   10.52+	print("F8\t",  *fmt(F8, 'G'),  "\tF10\t", *fmt(F10, 'G'), "\n");
   10.53+	print("F12\t", *fmt(F12, 'G'), "\tF14\t", *fmt(F14, 'G'), "\n");
   10.54+	print("F16\t", *fmt(F16, 'G'), "\tF18\t", *fmt(F18, 'G'), "\n");
   10.55+	print("F20\t", *fmt(F20, 'G'), "\tF22\t", *fmt(F22, 'G'), "\n");
   10.56+	print("F24\t", *fmt(F24, 'G'), "\tF26\t", *fmt(F26, 'G'), "\n");
   10.57+	print("F28\t", *fmt(F28, 'G'), "\tF30\t", *fmt(F30, 'G'), "\n");
   10.58+}
   10.59+
   10.60+defn fpr()
   10.61+{
   10.62+	print("F0\t",  *fmt(F0, 'g'),  "\tF1\t",  *fmt(F1, 'g'), "\n");
   10.63+	print("F2\t",  *fmt(F2, 'g'),  "\tF3\t",  *fmt(F3, 'g'), "\n");
   10.64+	print("F4\t",  *fmt(F4, 'g'),  "\tF5\t",  *fmt(F5, 'g'), "\n");
   10.65+	print("F6\t",  *fmt(F6, 'g'),  "\tF7\t",  *fmt(F7, 'g'), "\n");
   10.66+	print("F8\t",  *fmt(F8, 'g'),  "\tF9\t",  *fmt(F9, 'g'), "\n");
   10.67+	print("F10\t", *fmt(F10, 'g'), "\tF11\t", *fmt(F11, 'g'), "\n");
   10.68+	print("F12\t", *fmt(F12, 'g'), "\tF13\t", *fmt(F13, 'g'), "\n");
   10.69+	print("F14\t", *fmt(F14, 'g'), "\tF15\t", *fmt(F15, 'g'), "\n");
   10.70+	print("F16\t", *fmt(F16, 'g'), "\tF17\t", *fmt(F17, 'g'), "\n");
   10.71+	print("F18\t", *fmt(F18, 'g'), "\tF19\t", *fmt(F19, 'g'), "\n");
   10.72+	print("F20\t", *fmt(F20, 'g'), "\tF21\t", *fmt(F21, 'g'), "\n");
   10.73+	print("F22\t", *fmt(F22, 'g'), "\tF23\t", *fmt(F23, 'g'), "\n");
   10.74+	print("F24\t", *fmt(F24, 'g'), "\tF25\t", *fmt(F25, 'g'), "\n");
   10.75+	print("F26\t", *fmt(F26, 'g'), "\tF27\t", *fmt(F27, 'g'), "\n");
   10.76+	print("F28\t", *fmt(F28, 'g'), "\tF29\t", *fmt(F29, 'g'), "\n");
   10.77+	print("F30\t", *fmt(F30, 'g'), "\tF31\t", *fmt(F31, 'g'), "\n");
   10.78+}
   10.79+
   10.80+defn spr()				// print special processor registers
   10.81+{
   10.82+	local pc, link, cause;
   10.83+
   10.84+	pc = *PC;
   10.85+	print("PC\t", pc, " ", fmt(pc, 'a'), "  ");
   10.86+	pfl(pc);
   10.87+
   10.88+	link = *R31;
   10.89+	print("SP\t", *SP, "\tLINK\t", link, " ", fmt(link, 'a'), " ");
   10.90+	pfl(link);
   10.91+
   10.92+	cause = *CAUSE;
   10.93+	print("STATUS\t", *STATUS, "\tCAUSE\t", cause, " ", reason(cause), "\n");
   10.94+	print("TLBVIR\t", *TLBVIRT, "\tBADVADR\t", *BADVADDR, "\n");
   10.95+
   10.96+	print("HI\t", *HI, "\tLO\t", *LO, "\n");
   10.97+}
   10.98+
   10.99+defn regs()				// print all registers
  10.100+{
  10.101+	spr();
  10.102+	gpr();
  10.103+}
  10.104+
  10.105+defn pstop(pid)
  10.106+{
  10.107+	local l, pc;
  10.108+
  10.109+	pc = *PC;
  10.110+
  10.111+	print(pid,": ", reason(*CAUSE), "\t");
  10.112+	print(fmt(pc, 'a'), "\t", fmt(pc, 'i'), "\n");
  10.113+
  10.114+	if notes then {
  10.115+		if notes[0] != "sys: breakpoint" then {
  10.116+			print("Notes pending:\n");
  10.117+			l = notes;
  10.118+			while l do {
  10.119+				print("\t", head l, "\n");
  10.120+				l = tail l;
  10.121+			}
  10.122+		}
  10.123+	}
  10.124+}
  10.125+
  10.126+sizeofUreg = 152;
  10.127+aggr Ureg
  10.128+{
  10.129+	'X' 0 status;
  10.130+	'X' 4 pc;
  10.131+	{
  10.132+	'X' 8 sp;
  10.133+	'X' 8 usp;
  10.134+	};
  10.135+	'X' 12 cause;
  10.136+	'X' 16 badvaddr;
  10.137+	'X' 20 tlbvirt;
  10.138+	'X' 24 hi;
  10.139+	'X' 28 lo;
  10.140+	'X' 32 r31;
  10.141+	'X' 36 r30;
  10.142+	'X' 40 r28;
  10.143+	'X' 44 r27;
  10.144+	'X' 48 r26;
  10.145+	'X' 52 r25;
  10.146+	'X' 56 r24;
  10.147+	'X' 60 r23;
  10.148+	'X' 64 r22;
  10.149+	'X' 68 r21;
  10.150+	'X' 72 r20;
  10.151+	'X' 76 r19;
  10.152+	'X' 80 r18;
  10.153+	'X' 84 r17;
  10.154+	'X' 88 r16;
  10.155+	'X' 92 r15;
  10.156+	'X' 96 r14;
  10.157+	'X' 100 r13;
  10.158+	'X' 104 r12;
  10.159+	'X' 108 r11;
  10.160+	'X' 112 r10;
  10.161+	'X' 116 r9;
  10.162+	'X' 120 r8;
  10.163+	'X' 124 r7;
  10.164+	'X' 128 r6;
  10.165+	'X' 132 r5;
  10.166+	'X' 136 r4;
  10.167+	'X' 140 r3;
  10.168+	'X' 144 r2;
  10.169+	'X' 148 r1;
  10.170+};
  10.171+
  10.172+defn
  10.173+Ureg(addr) {
  10.174+	complex Ureg addr;
  10.175+	print("	status	", addr.status, "\n");
  10.176+	print("	pc	", addr.pc, "\n");
  10.177+	print("	sp	", addr.sp, "\n");
  10.178+	print("	cause	", addr.cause, "\n");
  10.179+	print("	badvaddr	", addr.badvaddr, "\n");
  10.180+	print("	tlbvirt	", addr.tlbvirt, "\n");
  10.181+	print("	hi	", addr.hi, "\n");
  10.182+	print("	lo	", addr.lo, "\n");
  10.183+	print("	r31	", addr.r31, "\n");
  10.184+	print("	r30	", addr.r30, "\n");
  10.185+	print("	r28	", addr.r28, "\n");
  10.186+	print("	r27	", addr.r27, "\n");
  10.187+	print("	r26	", addr.r26, "\n");
  10.188+	print("	r25	", addr.r25, "\n");
  10.189+	print("	r24	", addr.r24, "\n");
  10.190+	print("	r23	", addr.r23, "\n");
  10.191+	print("	r22	", addr.r22, "\n");
  10.192+	print("	r21	", addr.r21, "\n");
  10.193+	print("	r20	", addr.r20, "\n");
  10.194+	print("	r19	", addr.r19, "\n");
  10.195+	print("	r18	", addr.r18, "\n");
  10.196+	print("	r17	", addr.r17, "\n");
  10.197+	print("	r16	", addr.r16, "\n");
  10.198+	print("	r15	", addr.r15, "\n");
  10.199+	print("	r14	", addr.r14, "\n");
  10.200+	print("	r13	", addr.r13, "\n");
  10.201+	print("	r12	", addr.r12, "\n");
  10.202+	print("	r11	", addr.r11, "\n");
  10.203+	print("	r10	", addr.r10, "\n");
  10.204+	print("	r9	", addr.r9, "\n");
  10.205+	print("	r8	", addr.r8, "\n");
  10.206+	print("	r7	", addr.r7, "\n");
  10.207+	print("	r6	", addr.r6, "\n");
  10.208+	print("	r5	", addr.r5, "\n");
  10.209+	print("	r4	", addr.r4, "\n");
  10.210+	print("	r3	", addr.r3, "\n");
  10.211+	print("	r2	", addr.r2, "\n");
  10.212+	print("	r1	", addr.r1, "\n");
  10.213+};
  10.214+
  10.215+defn linkreg(addr)
  10.216+{
  10.217+	complex Ureg addr;
  10.218+	return addr.r31\X;
  10.219+}
  10.220+
  10.221+print("/sys/lib/acid/mips");
    11.1new file mode 100755
    11.2--- /dev/null
    11.3+++ b/sys/lib/acid/network
    11.4@@ -0,0 +1,169 @@
    11.5+_ni=0;	// network indent level
    11.6+
    11.7+defn
    11.8+_ni() {
    11.9+	loop 1,_ni do {
   11.10+		print("\t");
   11.11+	}
   11.12+}
   11.13+
   11.14+defn
   11.15+ipdev(n) {
   11.16+	_ipfs(*(ipfs+4*n));
   11.17+}
   11.18+
   11.19+// the funny _foo/foo pairs exist so that if we get
   11.20+// interrupted in the middle of one of these, _ni will 
   11.21+// get reset to 0 next time an external call happens.
   11.22+
   11.23+defn
   11.24+_ipfs(fs) {
   11.25+	complex Fs fs;
   11.26+	local i;
   11.27+
   11.28+	print("ipfs(", fs\X, ")  #I", fs.dev\D, "\n");
   11.29+	i=0;
   11.30+	_ni = _ni+1;
   11.31+	while i < fs.np do {
   11.32+		_proto(*(fs.p+i*4));
   11.33+		i = i + 1;
   11.34+	}
   11.35+	_ni = _ni-1;
   11.36+}
   11.37+
   11.38+defn
   11.39+ipfs(fs) {
   11.40+	_ni = 0;
   11.41+	_ipfs(fs);
   11.42+}
   11.43+
   11.44+defn
   11.45+_proto(p) {
   11.46+	local c;
   11.47+	complex Proto p;
   11.48+	_ni();
   11.49+	print("proto(", p\X, ") ", *(p.name\s), "\n");
   11.50+	_ni = _ni+1;
   11.51+	local i;
   11.52+	i = 0;
   11.53+	while i < p.nc do {
   11.54+		c = *(p.conv+i*4);
   11.55+		complex Conv c;
   11.56+		if c != 0 && c.inuse then 
   11.57+			_conv(*(p.conv+i*4));
   11.58+		i = i + 1;
   11.59+	}
   11.60+	_ni = _ni - 1;
   11.61+}
   11.62+
   11.63+defn
   11.64+proto(p) {
   11.65+	_ni = 0;
   11.66+	_proto(p);
   11.67+}
   11.68+
   11.69+defn
   11.70+_conv(c) {
   11.71+	complex Conv c;
   11.72+	_ni();
   11.73+	local p;
   11.74+	p = c.p;
   11.75+	complex Proto p;
   11.76+	print("conv(", c\X, ") ", *(p.name\s), "/", c.x\D, " ", 
   11.77+		iptostr(*(c.laddr+12)), "!", c.lport\D, " ", iptostr(*(c.raddr+12)), 
   11.78+		"!", c.rport\D, " rq ", qtostr(c.rq), " wq ", qtostr(c.wq), 
   11.79+		" eq ", qtostr(c.eq), "\n");
   11.80+}
   11.81+
   11.82+defn
   11.83+conv(c) {
   11.84+	_ni = 0;
   11.85+	_conv(c);
   11.86+}
   11.87+
   11.88+defn
   11.89+iptostr(a)
   11.90+{
   11.91+	// BUG: little endian
   11.92+	return itoa(a&0xFF)+"."+itoa((a>>8)&0xFF)+"."+itoa((a>>16)&0xFF)+"."+itoa((a>>24)&0xFF);
   11.93+}
   11.94+
   11.95+defn
   11.96+qtostr(q)
   11.97+{
   11.98+	complex Queue q;
   11.99+
  11.100+	return "queue("+itoa(q, "%lux")+") ["+itoa(q.len, "%d")+","+itoa(q.dlen, "%d")+","+itoa(qblocks(q), "%d")+"]";
  11.101+}
  11.102+
  11.103+defn
  11.104+qblocks(q)
  11.105+{
  11.106+	complex Queue q;
  11.107+	local b, n;
  11.108+
  11.109+	b = q.bfirst;
  11.110+	n = 0;
  11.111+	while b != 0 do { 
  11.112+		n = n + 1;
  11.113+		complex Block b;
  11.114+		b = b.next;
  11.115+	}
  11.116+	return n;
  11.117+}
  11.118+
  11.119+defn
  11.120+_queue(q)
  11.121+{
  11.122+	complex Queue q;
  11.123+	local b;
  11.124+
  11.125+	print("queue(", q\X, ") len ", q.len\D, " dlen ", q.dlen\D, " limit ", q.limit\D, " nblocks ", qblocks(q)\D);
  11.126+	if q.state & Qstarve then 
  11.127+		print(" starve");
  11.128+	if q.state & Qmsg then
  11.129+		print(" msg");
  11.130+	if q.state & Qclosed then
  11.131+		print(" closed");
  11.132+	if q.state & Qflow then
  11.133+		print(" flow");
  11.134+	if q.state & Qcoalesce then
  11.135+		print(" coalesce");
  11.136+	print("\n");
  11.137+
  11.138+	b = q.bfirst;
  11.139+	_ni = _ni+1;
  11.140+	while b != 0 do {
  11.141+		_block(b);
  11.142+		complex Block b;
  11.143+		b = b.next;
  11.144+	}
  11.145+	_ni = _ni - 1;
  11.146+}
  11.147+
  11.148+defn
  11.149+queue(q)
  11.150+{
  11.151+	_ni = 0;
  11.152+	_queue(q);
  11.153+}
  11.154+
  11.155+defn
  11.156+_block(b)
  11.157+{
  11.158+	complex Block b;
  11.159+
  11.160+	_ni();
  11.161+	print("block(", b\X, ") base ", b.base\X, " rp ", b.rp\X, "/", b.rp-b.base\D, " wp ", b.wp\X, "/", b.wp-b.base\D, " lim ", b.lim\X, "/", b.lim-b.base\D, "\n");
  11.162+}
  11.163+
  11.164+defn
  11.165+block(b)
  11.166+{
  11.167+	_ni = 0;
  11.168+	block(b);
  11.169+}
  11.170+
  11.171+print("/sys/lib/acid/network");
  11.172+needacid("tcp");
  11.173+needacid("qio");
    12.1new file mode 100755
    12.2--- /dev/null
    12.3+++ b/sys/lib/acid/pool
    12.4@@ -0,0 +1,306 @@
    12.5+include("/sys/src/libc/port/pool.acid");
    12.6+
    12.7+aggr Byte {
    12.8+	'b' 0 byte;
    12.9+};
   12.10+
   12.11+defn
   12.12+byteat(addr)
   12.13+{
   12.14+	local x;
   12.15+	complex Byte addr;
   12.16+	x = addr.byte;
   12.17+	return x\d;
   12.18+}
   12.19+
   12.20+defn
   12.21+B2T(addr) {
   12.22+	complex Bhdr addr;
   12.23+	addr = addr+addr.size-sizeofBtail;
   12.24+	complex Btail addr;
   12.25+	return addr;
   12.26+}
   12.27+
   12.28+defn
   12.29+B2D(addr) {
   12.30+	local x;
   12.31+	x = addr+sizeofBhdr;
   12.32+	return x\X;
   12.33+}
   12.34+
   12.35+defn
   12.36+D2B(addr) {
   12.37+	local x;
   12.38+	x = addr-sizeofBhdr;
   12.39+	complex Bhdr x;
   12.40+	return x;
   12.41+}
   12.42+
   12.43+defn
   12.44+B2NB(addr) {
   12.45+	complex Bhdr addr;
   12.46+	addr = addr+addr.size;
   12.47+	complex Bhdr addr;
   12.48+	return addr;
   12.49+}
   12.50+
   12.51+defn
   12.52+A2TB(addr) {
   12.53+	local b;
   12.54+	complex Arena addr;
   12.55+	b = addr+addr.asize-sizeofBhdr;
   12.56+	complex Bhdr b;
   12.57+	return b;
   12.58+}
   12.59+
   12.60+defn
   12.61+A2B(addr) {
   12.62+	return B2NB(addr);
   12.63+}
   12.64+
   12.65+defn
   12.66+B2PT(addr) {
   12.67+	complex Bhdr addr;
   12.68+	addr = addr-sizeofBtail;
   12.69+	complex Btail addr;
   12.70+	return addr;
   12.71+}
   12.72+
   12.73+defn
   12.74+SHORT(addr) {
   12.75+	local hi, lo;
   12.76+
   12.77+	hi = byteat(addr);
   12.78+	lo = byteat(addr+1);
   12.79+	return lo+hi*256;
   12.80+}
   12.81+
   12.82+defn
   12.83+Btail(addr) {
   12.84+	complex Btail addr;
   12.85+	print("	magic0	", addr.magic0, "\n");
   12.86+	print("	datadiff	", SHORT(addr.datasize), "\n");
   12.87+	print("	magic1	", addr.magic1, "\n");
   12.88+	print("	size	", addr.size\X, "\n");
   12.89+	print("	hdr	", addr+sizeofBtail-addr.size\X, "\n");
   12.90+};
   12.91+
   12.92+defn
   12.93+Tail(addr)
   12.94+{
   12.95+	print("	", B2T(addr)\X, "\n");
   12.96+	Btail(B2T(addr));
   12.97+}
   12.98+
   12.99+defn
  12.100+Magic(m)
  12.101+{
  12.102+	if m == FREE_MAGIC then
  12.103+		return "free";
  12.104+	if m == ARENA_MAGIC then
  12.105+		return "arena";
  12.106+	if m == UNKEMPT_MAGIC then
  12.107+		return "unkempt";
  12.108+	if m == KEMPT_MAGIC then
  12.109+		return "kempt";
  12.110+	if m == ARENATAIL_MAGIC then
  12.111+		return "arenatail";
  12.112+	if m == DEAD_MAGIC then
  12.113+		return "dead";
  12.114+	return "unknown magic";
  12.115+}
  12.116+
  12.117+defn
  12.118+Block(addr)
  12.119+{
  12.120+	complex Bhdr addr;
  12.121+	print("	", Magic(addr.magic), "\n");
  12.122+	print("	data ", B2D(addr), "\n");
  12.123+	print("	datasize ", getdsize(addr), "\n");
  12.124+	Bhdr(addr);
  12.125+	Tail(addr);
  12.126+}
  12.127+
  12.128+defn
  12.129+getdsize(addr)
  12.130+{
  12.131+	complex Bhdr addr;
  12.132+	local x;
  12.133+
  12.134+	x = addr.size\d;
  12.135+	x = x-SHORT(B2T(addr).datasize);
  12.136+	return x\d;
  12.137+}
  12.138+
  12.139+defn
  12.140+datamagic(x)
  12.141+{
  12.142+	x = x%4;
  12.143+	if x == 0 then return 0xFE;
  12.144+	if x == 1 then return 0xF1;
  12.145+	if x == 2 then return 0xF0;
  12.146+	if x == 3 then return 0xFA;
  12.147+}
  12.148+
  12.149+defn
  12.150+checkblock(addr)
  12.151+{
  12.152+	local badmagic, datamagic, a, b, t, q, n, dsize, taddr, checked;
  12.153+	complex Bhdr addr;
  12.154+	taddr = B2T(addr);
  12.155+	complex Btail taddr;
  12.156+
  12.157+	if addr.magic == FREE_MAGIC || addr.magic == UNKEMPT_MAGIC then {
  12.158+		if taddr.magic0 != TAIL_MAGIC0 || taddr.magic1 != TAIL_MAGIC1 then
  12.159+			print(addr\X, " corrupt tail magic\n");
  12.160+		if taddr.size != addr.size then
  12.161+			print(addr\X, " corrupt tail header pointer\n");
  12.162+	}
  12.163+
  12.164+	if addr.magic == ARENA_MAGIC then {
  12.165+		taddr = A2TB(addr);
  12.166+		if taddr.magic != ARENATAIL_MAGIC then
  12.167+			print(addr\X, " arena with bad tail block\n");
  12.168+		else
  12.169+			addr = taddr;
  12.170+	}
  12.171+
  12.172+	if addr.magic == ARENATAIL_MAGIC then {
  12.173+		if addr.size != 0 then
  12.174+			print(addr\X, " bad size in arena tail\n");
  12.175+	}
  12.176+
  12.177+	if addr.magic == KEMPT_MAGIC then {
  12.178+		a = addr;
  12.179+		complex Alloc a;
  12.180+		if a.size > 1024*1024*1024 then 
  12.181+			print(addr\X, " block ridiculously large\n");
  12.182+		t = B2T(addr);
  12.183+		if t.magic0 != TAIL_MAGIC0 || t.magic1 != TAIL_MAGIC1 then
  12.184+			print(addr\X, " bad tail magic\n");
  12.185+		if t.size != addr.size then
  12.186+			print(addr\X, " bad tail pointer\n");
  12.187+		dsize = getdsize(a);
  12.188+		if dsize > a.size then
  12.189+			print(addr\X, " too much data in block\n");
  12.190+		q = B2D(a)\X+dsize;
  12.191+		n = 4;
  12.192+		if q+4 > t then
  12.193+			n = t-q;
  12.194+		badmagic = 0;
  12.195+		loop 0,n-1 do {
  12.196+			if byteat(q) != datamagic(q) then {
  12.197+				badmagic=1;
  12.198+			}
  12.199+			q = q+1;
  12.200+		}
  12.201+		if badmagic then
  12.202+			print(addr\X, " size ", dsize, " user has overwritten boundary\n");
  12.203+	}
  12.204+}
  12.205+
  12.206+defn
  12.207+checkarena(arena)
  12.208+{
  12.209+	local atail, b;
  12.210+
  12.211+	atail = A2TB(arena);
  12.212+	complex Bhdr arena;
  12.213+	b = arena;
  12.214+	while b.magic != ARENATAIL_MAGIC && b < atail do {
  12.215+		checkblock(b);
  12.216+		if B2NB(b) == b then {
  12.217+			print("B2NB(", b\X, ") = b\n");
  12.218+			b = atail;	// end loop
  12.219+		}
  12.220+		b = B2NB(b);
  12.221+	}
  12.222+
  12.223+	checkblock(b);
  12.224+	if b != atail then
  12.225+		print("found wrong tail to arena ", arena\X, "\n");
  12.226+}
  12.227+
  12.228+defn
  12.229+checkpool(p)
  12.230+{
  12.231+	complex Pool p;
  12.232+	local a;
  12.233+	a = p.arenalist;
  12.234+
  12.235+	while a != 0 do {
  12.236+		complex Arena a;
  12.237+		checkarena(a);
  12.238+		a = a.down;
  12.239+	}
  12.240+}
  12.241+
  12.242+defn
  12.243+gendumptree(f, in, s)
  12.244+{
  12.245+	complex Free f;
  12.246+
  12.247+	loop 1,in do {print(" ");}
  12.248+	print(s, " size ", f.size\D, " left ", f.left\X, " right ", f.right\X, "\n");
  12.249+	if f.left != 0 && f.left < 0x7FFFFFFF then
  12.250+		gendumptree(f.left, in+1, "l");
  12.251+	if f.right != 0 && f.right < 0x7FFFFFFF then
  12.252+		gendumptree(f.right, in+1, "r");
  12.253+}
  12.254+
  12.255+defn
  12.256+dumptree(f)
  12.257+{
  12.258+	gendumptree(f, 0, "*");
  12.259+}
  12.260+
  12.261+defn
  12.262+poolwhopointsat(p, addr)
  12.263+{
  12.264+	complex Pool p;
  12.265+	local a;
  12.266+
  12.267+	a = p.arenalist;
  12.268+	while a != 0 do {
  12.269+		complex Arena a;
  12.270+		arenawhopointsat(a, addr);
  12.271+		a = a.down;
  12.272+	}
  12.273+}
  12.274+
  12.275+defn 
  12.276+arenawhopointsat(arena, addr)
  12.277+{
  12.278+	local atail, b;
  12.279+
  12.280+	atail = A2TB(arena);
  12.281+	complex Bhdr arena;
  12.282+	b = arena;
  12.283+	while b < atail do {
  12.284+		if *b == addr then 
  12.285+			print(b\X, "\n");
  12.286+		b = b+4;
  12.287+	}
  12.288+}
  12.289+
  12.290+defn
  12.291+whopointsat(addr)
  12.292+{
  12.293+	poolwhopointsat(*mainmem, addr);
  12.294+}
  12.295+
  12.296+defn
  12.297+blockhdr(addr)
  12.298+{
  12.299+	addr = addr & ~3;
  12.300+
  12.301+	while *addr != FREE_MAGIC 
  12.302+		&& *addr !=  ARENA_MAGIC
  12.303+		&& *addr != UNKEMPT_MAGIC
  12.304+		&& *addr != KEMPT_MAGIC
  12.305+		&& *addr != ARENATAIL_MAGIC
  12.306+	do
  12.307+		addr = addr-4;
  12.308+	return addr;
  12.309+}
  12.310+
    13.1new file mode 100755
    13.2--- /dev/null
    13.3+++ b/sys/lib/acid/port
    13.4@@ -0,0 +1,574 @@
    13.5+// portable acid for all architectures
    13.6+
    13.7+defn pfl(addr)
    13.8+{
    13.9+	print(pcfile(addr), ":", pcline(addr), "\n");
   13.10+}
   13.11+
   13.12+defn
   13.13+notestk(addr)
   13.14+{
   13.15+	local pc, sp;
   13.16+	complex Ureg addr;
   13.17+
   13.18+	pc = addr.pc\X;
   13.19+	sp = addr.sp\X;
   13.20+
   13.21+	print("Note pc:", pc, " sp:", sp, " ", fmt(pc, 'a'), " ");
   13.22+	pfl(pc);
   13.23+	_stk(pc, sp, linkreg(addr), 1);
   13.24+}
   13.25+
   13.26+defn
   13.27+notelstk(addr)
   13.28+{
   13.29+	local pc, sp;
   13.30+	complex Ureg addr;
   13.31+
   13.32+	pc = addr.pc\X;
   13.33+	sp = addr.sp\X;
   13.34+
   13.35+	print("Note pc:", pc, " sp:", sp, " ", fmt(pc, 'a'), " ");
   13.36+	pfl(pc);
   13.37+	_stk(pc, sp, linkreg(addr), 1);
   13.38+}
   13.39+
   13.40+defn labstk(l)				// trace from a label
   13.41+{
   13.42+	_stk(*(l+4), *l, linkreg(0), 0);
   13.43+}
   13.44+
   13.45+defn params(param)
   13.46+{
   13.47+	while param do {
   13.48+		sym = head param;
   13.49+		print(sym[0], "=", itoa(sym[1], "%ux"));
   13.50+		param = tail param;
   13.51+		if param then
   13.52+			print (",");
   13.53+	}	
   13.54+}
   13.55+
   13.56+stkprefix = "";
   13.57+stkignore = {};
   13.58+stkend = 0;
   13.59+
   13.60+defn locals(l)
   13.61+{
   13.62+	local sym;
   13.63+
   13.64+	while l do {
   13.65+		sym = head l;
   13.66+		print(stkprefix, "\t", sym[0], "=", itoa(sym[1], "%ux"), "\n");
   13.67+		l = tail l;
   13.68+	}	
   13.69+}
   13.70+
   13.71+defn _stkign(file)
   13.72+{
   13.73+	s = stkignore;
   13.74+	while s do {
   13.75+		if regexp(head s, file) then
   13.76+			return 1;
   13.77+		s = tail s;
   13.78+	}
   13.79+	return 0;
   13.80+}
   13.81+
   13.82+// print a stack trace
   13.83+//
   13.84+// in a run of leading frames in files matched by regexps in stkignore,
   13.85+// only print the last one.
   13.86+defn _stk(pc, sp, link, dolocals)
   13.87+{
   13.88+	local stk, ign, last, lastpc;
   13.89+
   13.90+	stk = strace(pc, sp, link);
   13.91+	if stkignore then
   13.92+		ign = 1;
   13.93+	else
   13.94+		ign = 0;
   13.95+	last = stk;
   13.96+	lastpc = pc;
   13.97+	while stk do {
   13.98+		if ign then {
   13.99+			if !_stkign(pcfile(pc)) then {
  13.100+				ign = 0;
  13.101+				stk = last;
  13.102+				pc = lastpc;
  13.103+			}
  13.104+		}
  13.105+		frame = head stk;
  13.106+		if !ign then {
  13.107+			print(stkprefix, fmt(frame[0], 'a'), "(");
  13.108+			params(frame[2]);
  13.109+			print(")+", itoa(pc-frame[0], "%ux"), " ");
  13.110+			pfl(pc);
  13.111+			if dolocals then
  13.112+				locals(frame[3]);
  13.113+		}
  13.114+		last = stk;
  13.115+		lastpc = pc;
  13.116+		stk = tail stk;
  13.117+		pc = frame[1];
  13.118+	}
  13.119+	print(stkprefix, fmt(pc, 'a'), " ");
  13.120+	pfl(pc);
  13.121+}
  13.122+
  13.123+defn findsrc(file)
  13.124+{
  13.125+	local lst, src;
  13.126+
  13.127+	if file[0] == '/' then {
  13.128+		src = file(file);
  13.129+		if src != {} then {
  13.130+			srcfiles = append srcfiles, file;
  13.131+			srctext = append srctext, src;
  13.132+			return src;
  13.133+		}
  13.134+		return {};
  13.135+	}
  13.136+
  13.137+	lst = srcpath;
  13.138+	while head lst do {
  13.139+		src = file(head lst+file);
  13.140+		if src != {} then {
  13.141+			srcfiles = append srcfiles, file;
  13.142+			srctext = append srctext, src;
  13.143+			return src;
  13.144+		}
  13.145+		lst = tail lst;
  13.146+	}
  13.147+}
  13.148+
  13.149+defn line(addr)
  13.150+{
  13.151+	local src, file;
  13.152+
  13.153+	file = pcfile(addr);
  13.154+	src = match(file, srcfiles);
  13.155+
  13.156+	if src >= 0 then
  13.157+		src = srctext[src];
  13.158+	else
  13.159+		src = findsrc(file);
  13.160+
  13.161+	if src == {} then {
  13.162+		print("no source for ", file, "\n");
  13.163+		return {};
  13.164+	}
  13.165+	line = pcline(addr)-1;
  13.166+	print(file, ":", src[line], "\n");
  13.167+}
  13.168+
  13.169+defn addsrcdir(dir)
  13.170+{
  13.171+	dir = dir+"/";
  13.172+
  13.173+	if match(dir, srcpath) >= 0 then {
  13.174+		print("already in srcpath\n");
  13.175+		return {};
  13.176+	}
  13.177+
  13.178+	srcpath = {dir}+srcpath;
  13.179+}
  13.180+
  13.181+defn source()
  13.182+{
  13.183+	local l;
  13.184+
  13.185+	l = srcpath;
  13.186+	while l do {
  13.187+		print(head l, "\n");
  13.188+		l = tail l;
  13.189+	}
  13.190+	l = srcfiles;
  13.191+
  13.192+	while l do {
  13.193+		print("\t", head l, "\n");
  13.194+		l = tail l;
  13.195+	}
  13.196+}
  13.197+
  13.198+defn Bsrc(addr)
  13.199+{
  13.200+	local lst;
  13.201+
  13.202+	lst = srcpath;
  13.203+	file = pcfile(addr);
  13.204+	if file[0] == '/' && access(file) then {
  13.205+		rc("B "+file+":"+itoa(pcline(addr)));
  13.206+		return {};
  13.207+	}
  13.208+	while head lst do {
  13.209+		name = head lst+file;
  13.210+		if access(name) then {
  13.211+			rc("B "+name+":"+itoa(pcline(addr)));
  13.212+			return {};
  13.213+		}
  13.214+		lst = tail lst;
  13.215+	}
  13.216+	print("no source for ", file, "\n");
  13.217+}
  13.218+
  13.219+defn srcline(addr)
  13.220+{
  13.221+	local text, cline, line, file, src;
  13.222+	file = pcfile(addr);
  13.223+	src = match(file,srcfiles);
  13.224+	if (src>=0) then
  13.225+		src = srctext[src];
  13.226+	else
  13.227+		src = findsrc(file);
  13.228+	if (src=={}) then
  13.229+	{
  13.230+		return "(no source)";
  13.231+	}
  13.232+	return src[pcline(addr)-1];
  13.233+}
  13.234+
  13.235+defn src(addr)
  13.236+{
  13.237+	local src, file, line, cline, text;
  13.238+
  13.239+	file = pcfile(addr);
  13.240+	src = match(file, srcfiles);
  13.241+
  13.242+	if src >= 0 then
  13.243+		src = srctext[src];
  13.244+	else
  13.245+		src = findsrc(file);
  13.246+
  13.247+	if src == {} then {
  13.248+		print("no source for ", file, "\n");
  13.249+		return {};
  13.250+	}
  13.251+
  13.252+	cline = pcline(addr)-1;
  13.253+	print(file, ":", cline+1, "\n");
  13.254+	line = cline-5;
  13.255+	loop 0,10 do {
  13.256+		if line >= 0 then {
  13.257+			text = src[line];
  13.258+			if text == {} then
  13.259+				return {};
  13.260+			if line == cline then
  13.261+				print(">");
  13.262+			else
  13.263+				print(" ");
  13.264+			print(line+1, "\t", text, "\n");
  13.265+		}
  13.266+		line = line+1;
  13.267+	}	
  13.268+}
  13.269+
  13.270+defn step()					// single step the process
  13.271+{
  13.272+	local lst, lpl, addr, bput;
  13.273+
  13.274+	bput = 0;
  13.275+	if match(*PC, bplist) >= 0 then {	// Sitting on a breakpoint
  13.276+		bput = fmt(*PC, bpfmt);
  13.277+		*bput = @bput;
  13.278+	}
  13.279+
  13.280+	lst = follow(*PC);
  13.281+
  13.282+	lpl = lst;
  13.283+	while lpl do {				// place break points
  13.284+		*(head lpl) = bpinst;
  13.285+		lpl = tail lpl;
  13.286+	}
  13.287+
  13.288+	startstop(pid);				// do the step
  13.289+
  13.290+	while lst do {				// remove the breakpoints
  13.291+		addr = fmt(head lst, bpfmt);
  13.292+		*addr = @addr;
  13.293+		lst = tail lst;
  13.294+	}
  13.295+	if bput != 0 then
  13.296+		*bput = bpinst;
  13.297+}
  13.298+
  13.299+defn bpset(addr)				// set a breakpoint
  13.300+{
  13.301+	if status(pid) != "Stopped" then {
  13.302+		print("Waiting...\n");
  13.303+		stop(pid);
  13.304+	}
  13.305+	if match(addr, bplist) >= 0 then
  13.306+		print("breakpoint already set at ", fmt(addr, 'a'), "\n");
  13.307+	else {
  13.308+		*fmt(addr, bpfmt) = bpinst;
  13.309+		bplist = append bplist, addr;
  13.310+	}
  13.311+}
  13.312+
  13.313+defn bptab()					// print a table of breakpoints
  13.314+{
  13.315+	local lst, addr;
  13.316+
  13.317+	lst = bplist;
  13.318+	while lst do {
  13.319+		addr = head lst;
  13.320+		print("\t", fmt(addr, 'X'), " ", fmt(addr, 'a'), "  ", fmt(addr, 'i'), "\n");
  13.321+		lst = tail lst;
  13.322+	}
  13.323+}
  13.324+
  13.325+defn bpdel(addr)				// delete a breakpoint
  13.326+{
  13.327+	local n, pc, nbplist;
  13.328+
  13.329+	n = match(addr, bplist);
  13.330+	if n < 0  then {
  13.331+		print("no breakpoint at ", fmt(addr, 'a'), "\n");
  13.332+		return {};
  13.333+	}
  13.334+
  13.335+	addr = fmt(addr, bpfmt);
  13.336+	*addr = @addr;
  13.337+
  13.338+	nbplist = {};				// delete from list
  13.339+	while bplist do {
  13.340+		pc = head bplist;
  13.341+		if pc != addr then
  13.342+			nbplist = append nbplist, pc;
  13.343+		bplist = tail bplist;
  13.344+	}
  13.345+	bplist = nbplist;			// delete from memory
  13.346+}
  13.347+
  13.348+defn cont()					// continue execution
  13.349+{
  13.350+	local addr;
  13.351+
  13.352+	addr = fmt(*PC, bpfmt);
  13.353+	if match(addr, bplist) >= 0 then {	// Sitting on a breakpoint
  13.354+		*addr = @addr;
  13.355+		step();				// Step over
  13.356+		*addr = bpinst;
  13.357+	}
  13.358+	startstop(pid);				// Run
  13.359+}
  13.360+
  13.361+defn stopped(pid)		// called from acid when a process changes state
  13.362+{
  13.363+	pstop(pid);		// stub so this is easy to replace
  13.364+}
  13.365+
  13.366+defn procs()			// print status of processes
  13.367+{
  13.368+	local c, lst, cpid;
  13.369+
  13.370+	cpid = pid;
  13.371+	lst = proclist;
  13.372+	while lst do {
  13.373+		np = head lst;
  13.374+		setproc(np);
  13.375+		if np == cpid then
  13.376+			c = '>';
  13.377+		else
  13.378+			c = ' ';
  13.379+		print(fmt(c, 'c'), np, ": ", status(np), " at ", fmt(*PC, 'a'), " setproc(", np, ")\n");
  13.380+		lst = tail lst;
  13.381+	}
  13.382+	pid = cpid;
  13.383+	if pid != 0 then
  13.384+		setproc(pid);
  13.385+}
  13.386+
  13.387+_asmlines = 30;
  13.388+
  13.389+defn asm(addr)
  13.390+{
  13.391+	local bound;
  13.392+
  13.393+	bound = fnbound(addr);
  13.394+
  13.395+	addr = fmt(addr, 'i');
  13.396+	loop 1,_asmlines do {
  13.397+		print(fmt(addr, 'a'), " ", fmt(addr, 'X'));
  13.398+		print("\t", @addr++, "\n");
  13.399+		if bound != {} && addr > bound[1] then {
  13.400+			lasmaddr = addr;
  13.401+			return {};
  13.402+		}
  13.403+	}
  13.404+	lasmaddr = addr;
  13.405+}
  13.406+
  13.407+defn casm()
  13.408+{
  13.409+	asm(lasmaddr);
  13.410+}
  13.411+
  13.412+defn win()
  13.413+{
  13.414+	local npid, estr;
  13.415+
  13.416+	bplist = {};
  13.417+	notes = {};
  13.418+
  13.419+	estr = "/sys/lib/acid/window '0 0 600 400' "+textfile;
  13.420+	if progargs != "" then
  13.421+		estr = estr+" "+progargs;
  13.422+
  13.423+	npid = rc(estr);
  13.424+	npid = atoi(npid);
  13.425+	if npid == 0 then
  13.426+		error("win failed to create process");
  13.427+
  13.428+	setproc(npid);
  13.429+	stopped(npid);
  13.430+}
  13.431+
  13.432+defn win2()
  13.433+{
  13.434+	local npid, estr;
  13.435+
  13.436+	bplist = {};
  13.437+	notes = {};
  13.438+
  13.439+	estr = "/sys/lib/acid/transcript '0 0 600 400' '100 100 700 500' "+textfile;
  13.440+	if progargs != "" then
  13.441+		estr = estr+" "+progargs;
  13.442+
  13.443+	npid = rc(estr);
  13.444+	npid = atoi(npid);
  13.445+	if npid == 0 then
  13.446+		error("win failed to create process");
  13.447+
  13.448+	setproc(npid);
  13.449+	stopped(npid);
  13.450+}
  13.451+
  13.452+defn new()
  13.453+{
  13.454+	bplist = {};
  13.455+	newproc(progargs);
  13.456+	// Dont miss the delay slot calls
  13.457+	bpset(follow(main)[0]);
  13.458+	cont();
  13.459+	bpdel(*PC);
  13.460+}
  13.461+
  13.462+defn stmnt()			// step one statement
  13.463+{
  13.464+	local line;
  13.465+
  13.466+	line = pcline(*PC);
  13.467+	while 1 do {
  13.468+		step();
  13.469+		if line != pcline(*PC) then {
  13.470+			src(*PC);
  13.471+			return {};
  13.472+		}
  13.473+	}
  13.474+}
  13.475+
  13.476+defn func()			// step until we leave the current function
  13.477+{
  13.478+	local bound, end, start, pc;
  13.479+
  13.480+	bound = fnbound(*PC);
  13.481+	if bound == {} then {
  13.482+		print("cannot locate text symbol\n");
  13.483+		return {};
  13.484+	}
  13.485+
  13.486+	pc = *PC;
  13.487+	start = bound[0];
  13.488+	end = bound[1];
  13.489+	while pc >= start && pc < end do {
  13.490+		step();
  13.491+		pc = *PC;
  13.492+	}
  13.493+}
  13.494+
  13.495+defn next()
  13.496+{
  13.497+	local sp, bound;
  13.498+
  13.499+	sp = *SP;
  13.500+	bound = fnbound(*PC);
  13.501+	stmnt();
  13.502+	pc = *PC;
  13.503+	if pc >= bound[0] && pc < bound[1] then
  13.504+		return {};
  13.505+
  13.506+	while (pc < bound[0] || pc > bound[1]) && sp >= *SP do {
  13.507+		step();
  13.508+		pc = *PC;
  13.509+	}
  13.510+	src(*PC);
  13.511+}
  13.512+
  13.513+defn dump(addr, n, fmt)
  13.514+{
  13.515+	// see definition of dump in acid manual: it does n+1 iterations
  13.516+	loop 0, n do {
  13.517+		print(fmt(addr, 'X'), ": ");
  13.518+		addr = mem(addr, fmt);
  13.519+	}
  13.520+}
  13.521+
  13.522+defn mem(addr, fmt)
  13.523+{
  13.524+
  13.525+	local i, c, n;
  13.526+
  13.527+	i = 0;
  13.528+	while fmt[i] != 0 do {
  13.529+		c = fmt[i];
  13.530+		n = 0;
  13.531+		while '0' <= fmt[i] && fmt[i] <= '9' do {
  13.532+			n = 10*n + fmt[i]-'0';
  13.533+			i = i+1;
  13.534+		}
  13.535+		if n <= 0 then n = 1;
  13.536+		addr = fmt(addr, fmt[i]);
  13.537+		while n > 0 do {
  13.538+			print(*addr++, " ");
  13.539+			n = n-1;
  13.540+		}
  13.541+		i = i+1;
  13.542+	}
  13.543+	print("\n");
  13.544+	return addr;
  13.545+}
  13.546+
  13.547+defn symbols(pattern)
  13.548+{
  13.549+	local l, s;
  13.550+
  13.551+	l = symbols;
  13.552+	while l do {
  13.553+		s = head l;
  13.554+		if regexp(pattern, s[0]) then
  13.555+			print(s[0], "\t", s[1], "\t", s[2], "\n");
  13.556+		l = tail l;
  13.557+	}
  13.558+}
  13.559+
  13.560+defn spsrch(len)
  13.561+{
  13.562+	local addr, a, s, e;
  13.563+
  13.564+	addr = *SP;
  13.565+	s = origin & 0x7fffffff;
  13.566+	e = etext & 0x7fffffff;
  13.567+	loop 1, len do {
  13.568+		a = *addr++;
  13.569+		c = a & 0x7fffffff;
  13.570+		if c > s && c < e then {
  13.571+			print("src(", a, ")\n");
  13.572+			pfl(a);
  13.573+		}			
  13.574+	}
  13.575+}
  13.576+
  13.577+progargs="";
  13.578+print("/sys/lib/acid/port");
    14.1new file mode 100755
    14.2--- /dev/null
    14.3+++ b/sys/lib/acid/power
    14.4@@ -0,0 +1,120 @@
    14.5+// Power PC support
    14.6+
    14.7+defn acidinit()			// Called after all the init modules are loaded
    14.8+{
    14.9+	bplist = {};
   14.10+	bpfmt = 'X';
   14.11+
   14.12+	srcpath = {
   14.13+		"./",
   14.14+		"/sys/src/libc/port/",
   14.15+		"/sys/src/libc/9sys/",
   14.16+		"/sys/src/libc/power/"
   14.17+	};
   14.18+
   14.19+	srcfiles = {};		// list of loaded files
   14.20+	srctext = {};		// the text of the files
   14.21+}
   14.22+
   14.23+defn stk()			// trace
   14.24+{
   14.25+	_stk(*PC, *SP, linkreg(0), 0);
   14.26+}
   14.27+
   14.28+defn lstk()			// trace with locals
   14.29+{
   14.30+	_stk(*PC, *SP, linkreg(0), 1);
   14.31+}
   14.32+
   14.33+defn gpr()			// print general purpose registers
   14.34+{
   14.35+	print("SP\t", *SP, " R2\t", *R2, " R3\t", *R3, "\n");
   14.36+	print("R4\t", *R4, " R5\t", *R5, " R6\t", *R6, "\n");
   14.37+	print("R7\t", *R7, " R8\t", *R8, " R9\t", *R9, "\n");
   14.38+	print("R10\t", *R10, " R11\t", *R11, " R12\t", *R12, "\n");
   14.39+	print("R13\t", *R13, " R14\t", *R14, " R15\t", *R15, "\n");
   14.40+	print("R16\t", *R16, " R17\t", *R17, " R18\t", *R18, "\n");
   14.41+	print("R19\t", *R19, " R20\t", *R20, " R21\t", *R21, "\n");
   14.42+	print("R22\t", *R22, " R23\t", *R23, " R24\t", *R24, "\n");
   14.43+	print("R25\t", *R25, " R26\t", *R26, " R27\t", *R27, "\n");
   14.44+	print("R28\t", *R28, " R29\t", *R29, " R30\t", *R30, "\n");
   14.45+	print("R31\t", *R31, "\n");
   14.46+}
   14.47+
   14.48+defn Fpr()
   14.49+{
   14.50+	fpr();
   14.51+}
   14.52+
   14.53+defn fpr()
   14.54+{
   14.55+	print("F0\t",  *fmt(F0, 'G'),  "\tF1\t",  *fmt(F1, 'G'), "\n");
   14.56+	print("F2\t",  *fmt(F2, 'G'),  "\tF3\t",  *fmt(F3, 'G'), "\n");
   14.57+	print("F4\t",  *fmt(F4, 'G'),  "\tF5\t",  *fmt(F5, 'G'), "\n");
   14.58+	print("F6\t",  *fmt(F6, 'G'),  "\tF7\t",  *fmt(F7, 'G'), "\n");
   14.59+	print("F8\t",  *fmt(F8, 'G'),  "\tF9\t",  *fmt(F9, 'G'), "\n");
   14.60+	print("F10\t", *fmt(F10, 'G'), "\tF11\t", *fmt(F11, 'G'), "\n");
   14.61+	print("F12\t", *fmt(F12, 'G'), "\tF13\t", *fmt(F13, 'G'), "\n");
   14.62+	print("F14\t", *fmt(F14, 'G'), "\tF15\t", *fmt(F15, 'G'), "\n");
   14.63+	print("F16\t", *fmt(F16, 'G'), "\tF17\t", *fmt(F17, 'G'), "\n");
   14.64+	print("F18\t", *fmt(F18, 'G'), "\tF19\t", *fmt(F19, 'G'), "\n");
   14.65+	print("F20\t", *fmt(F20, 'G'), "\tF21\t", *fmt(F21, 'G'), "\n");
   14.66+	print("F22\t", *fmt(F22, 'G'), "\tF23\t", *fmt(F23, 'G'), "\n");
   14.67+	print("F24\t", *fmt(F24, 'G'), "\tF25\t", *fmt(F25, 'G'), "\n");
   14.68+	print("F26\t", *fmt(F26, 'G'), "\tF27\t", *fmt(F27, 'G'), "\n");
   14.69+	print("F28\t", *fmt(F28, 'G'), "\tF29\t", *fmt(F29, 'G'), "\n");
   14.70+	print("F30\t", *fmt(F30, 'G'), "\tF31\t", *fmt(F31, 'G'), "\n");
   14.71+}
   14.72+
   14.73+defn spr()				// print special processor registers
   14.74+{
   14.75+	local pc, link, cause;
   14.76+
   14.77+	pc = *PC;
   14.78+	print("PC\t", pc, " ", fmt(pc, 'a'), "  ");
   14.79+	pfl(pc);
   14.80+
   14.81+	link = *R31;
   14.82+	print("SP\t", *SP, "\tLINK\t", link, " ", fmt(link, 'a'), " ");
   14.83+	pfl(link);
   14.84+
   14.85+	cause = *CAUSE;
   14.86+	print("SRR1\t", *SRR1, "\tCAUSE\t", cause, " ", reason(cause), "\n");
   14.87+	print("LR\t", *LR, "\tCR\t", *CR, "\n");
   14.88+
   14.89+	print("XER\t", *XER, "\tCTR\t", *CTR, "\n");
   14.90+}
   14.91+
   14.92+defn regs()				// print all registers
   14.93+{
   14.94+	spr();
   14.95+	gpr();
   14.96+}
   14.97+
   14.98+defn pstop(pid)
   14.99+{
  14.100+	local l, pc;
  14.101+
  14.102+	pc = *PC;
  14.103+
  14.104+	print(pid,": ", reason(*CAUSE), "\t");
  14.105+	print(fmt(pc, 'a'), "\t", fmt(pc, 'i'), "\n");
  14.106+
  14.107+	if notes then {
  14.108+		if notes[0] != "sys: breakpoint" then {
  14.109+			print("Notes pending:\n");
  14.110+			l = notes;
  14.111+			while l do {
  14.112+				print("\t", head l, "\n");
  14.113+				l = tail l;
  14.114+			}
  14.115+		}
  14.116+	}
  14.117+}
  14.118+
  14.119+defn linkreg(addr)
  14.120+{
  14.121+	return *LR;
  14.122+}
  14.123+
  14.124+print("/sys/lib/acid/power");
    15.1new file mode 100755
    15.2--- /dev/null
    15.3+++ b/sys/lib/acid/sparc
    15.4@@ -0,0 +1,218 @@
    15.5+// Sparc support
    15.6+
    15.7+defn acidinit()			// Called after all the init modules are loaded
    15.8+{
    15.9+	bplist = {};
   15.10+	bpfmt = 'X';
   15.11+
   15.12+	srcpath = {
   15.13+		"./",
   15.14+		"/sys/src/libc/port/",
   15.15+		"/sys/src/libc/9sys/",
   15.16+		"/sys/src/libc/sparc/"
   15.17+	};
   15.18+
   15.19+	srcfiles = {};		// list of loaded files
   15.20+	srctext = {};		// the text of the files
   15.21+}
   15.22+
   15.23+defn stk()			// trace
   15.24+{
   15.25+	_stk(*PC, *R1, linkreg(0), 0);
   15.26+}
   15.27+
   15.28+defn lstk()			// trace with locals
   15.29+{
   15.30+	_stk(*PC, *R1, linkreg(0), 1);
   15.31+}
   15.32+
   15.33+defn gpr()			// print general purpose registers
   15.34+{
   15.35+	print("R1\t", *R1, "R2\t", *R2, "R3\t", *R3, "\n");
   15.36+	print("R4\t", *R4, "R5\t", *R5, "R6\t", *R6, "\n");
   15.37+	print("R7\t", *R7, "R8\t", *R8, "R9\t", *R9, "\n");
   15.38+	print("R10\t", *R10, "R11\t", *R11, "R12\t", *R12, "\n");
   15.39+	print("R13\t", *R13, "R14\t", *R14, "R15\t", *R15, "\n");
   15.40+	print("R16\t", *R16, "R17\t", *R17, "R18\t", *R18, "\n");
   15.41+	print("R19\t", *R19, "R20\t", *R20, "R21\t", *R21, "\n");
   15.42+	print("R22\t", *R22, "R23\t", *R23, "R24\t", *R24, "\n");
   15.43+	print("R25\t", *R25, "R26\t", *R26, "R27\t", *R27, "\n");
   15.44+	print("R28\t", *R28, "R29\t", *R29, "R30\t", *R30, "\n");
   15.45+	print("R31\t", *R31, "\n");
   15.46+}
   15.47+
   15.48+defn spr()				// print special processor registers
   15.49+{
   15.50+	local pc;
   15.51+	local link;
   15.52+	local cause;
   15.53+
   15.54+	pc = *PC;
   15.55+	print("PC\t", pc, " ", fmt(pc, 'a'), "  ");
   15.56+	pfl(pc);
   15.57+	print("PSR\t", *PSR, "\n");
   15.58+
   15.59+	link = *R15;
   15.60+	print("SP\t", *R1, "\tLINK\t\t", link, " ", fmt(link, 'a'));
   15.61+	pfl(link);
   15.62+
   15.63+	cause = *TBR;
   15.64+	print("Y\t", *Y, "\tCAUSE\t", *Y, cause, " ", reason(cause), "\n");
   15.65+}
   15.66+
   15.67+defn Fpr()
   15.68+{
   15.69+	print("F0\t",  *fmt(F0, 'G'),  "\tF2\t",  *fmt(F2, 'G'), "\n");
   15.70+	print("F4\t",  *fmt(F4, 'G'),  "\tF6\t",  *fmt(F6, 'G'), "\n");
   15.71+	print("F8\t",  *fmt(F8, 'G'),  "\tF10\t", *fmt(F10, 'G'), "\n");
   15.72+	print("F12\t", *fmt(F12, 'G'), "\tF14\t", *fmt(F14, 'G'), "\n");
   15.73+	print("F16\t", *fmt(F16, 'G'), "\tF18\t", *fmt(F18, 'G'), "\n");
   15.74+	print("F20\t", *fmt(F20, 'G'), "\tF22\t", *fmt(F22, 'G'), "\n");
   15.75+	print("F24\t", *fmt(F24, 'G'), "\tF26\t", *fmt(F26, 'G'), "\n");
   15.76+	print("F28\t", *fmt(F28, 'G'), "\tF30\t", *fmt(F30, 'G'), "\n");
   15.77+}
   15.78+
   15.79+defn fpr()
   15.80+{
   15.81+	print("F0\t",  *fmt(F0, 'g'),  "\tF1\t",  *fmt(F1, 'g'), "\n");
   15.82+	print("F2\t",  *fmt(F2, 'g'),  "\tF3\t",  *fmt(F3, 'g'), "\n");
   15.83+	print("F4\t",  *fmt(F4, 'g'),  "\tF5\t",  *fmt(F5, 'g'), "\n");
   15.84+	print("F6\t",  *fmt(F6, 'g'),  "\tF7\t",  *fmt(F7, 'g'), "\n");
   15.85+	print("F8\t",  *fmt(F8, 'g'),  "\tF9\t",  *fmt(F9, 'g'), "\n");
   15.86+	print("F10\t", *fmt(F10, 'g'), "\tF11\t", *fmt(F11, 'g'), "\n");
   15.87+	print("F12\t", *fmt(F12, 'g'), "\tF13\t", *fmt(F13, 'g'), "\n");
   15.88+	print("F14\t", *fmt(F14, 'g'), "\tF15\t", *fmt(F15, 'g'), "\n");
   15.89+	print("F16\t", *fmt(F16, 'g'), "\tF17\t", *fmt(F17, 'g'), "\n");
   15.90+	print("F18\t", *fmt(F18, 'g'), "\tF19\t", *fmt(F19, 'g'), "\n");
   15.91+	print("F20\t", *fmt(F20, 'g'), "\tF21\t", *fmt(F21, 'g'), "\n");
   15.92+	print("F22\t", *fmt(F22, 'g'), "\tF23\t", *fmt(F23, 'g'), "\n");
   15.93+	print("F24\t", *fmt(F24, 'g'), "\tF25\t", *fmt(F25, 'g'), "\n");
   15.94+	print("F26\t", *fmt(F26, 'g'), "\tF27\t", *fmt(F27, 'g'), "\n");
   15.95+	print("F28\t", *fmt(F28, 'g'), "\tF29\t", *fmt(F29, 'g'), "\n");
   15.96+	print("F30\t", *fmt(F30, 'g'), "\tF31\t", *fmt(F31, 'g'), "\n");
   15.97+}
   15.98+
   15.99+defn regs()				// print all registers
  15.100+{
  15.101+	spr();
  15.102+	gpr();
  15.103+}
  15.104+
  15.105+defn pstop(pid)
  15.106+{
  15.107+	local l;
  15.108+	local pc;
  15.109+
  15.110+	pc = *PC;
  15.111+
  15.112+	print(pid,": ", reason(*TBR), "\t");
  15.113+	print(fmt(pc, 'a'), "\t", fmt(pc, 'i'), "\n");
  15.114+
  15.115+	if notes then {
  15.116+		if notes[0] != "sys: breakpoint" then {
  15.117+			print("Notes pending:\n");
  15.118+			l = notes;
  15.119+			while l do {
  15.120+				print("\t", head l, "\n");
  15.121+				l = tail l;
  15.122+			}
  15.123+		}
  15.124+	}
  15.125+}
  15.126+
  15.127+aggr Ureg
  15.128+{
  15.129+	'U' 0 r0;
  15.130+	{
  15.131+	'U' 4 sp;
  15.132+	'U' 4 usp;
  15.133+	'U' 4 r1;
  15.134+	};
  15.135+	'U' 8 r2;
  15.136+	'U' 12 r3;
  15.137+	'U' 16 r4;
  15.138+	'U' 20 r5;
  15.139+	'U' 24 r6;
  15.140+	'U' 28 r7;
  15.141+	'U' 32 r8;
  15.142+	'U' 36 r9;
  15.143+	'U' 40 r10;
  15.144+	'U' 44 r11;
  15.145+	'U' 48 r12;
  15.146+	'U' 52 r13;
  15.147+	'U' 56 r14;
  15.148+	'U' 60 r15;
  15.149+	'U' 64 r16;
  15.150+	'U' 68 r17;
  15.151+	'U' 72 r18;
  15.152+	'U' 76 r19;
  15.153+	'U' 80 r20;
  15.154+	'U' 84 r21;
  15.155+	'U' 88 r22;
  15.156+	'U' 92 r23;
  15.157+	'U' 96 r24;
  15.158+	'U' 100 r25;
  15.159+	'U' 104 r26;
  15.160+	'U' 108 r27;
  15.161+	'U' 112 r28;
  15.162+	'U' 116 r29;
  15.163+	'U' 120 r30;
  15.164+	'U' 124 r31;
  15.165+	'U' 128 y;
  15.166+	'U' 132 tbr;
  15.167+	'U' 136 psr;
  15.168+	'U' 140 npc;
  15.169+	'U' 144 pc;
  15.170+	'U' 148 pad;
  15.171+};
  15.172+
  15.173+defn
  15.174+Ureg(addr) {
  15.175+	complex Ureg addr;
  15.176+	print("	r0	", addr.r0, "\n");
  15.177+	print("	sp	", addr.sp, "\n");
  15.178+	print("	r2	", addr.r2, "\n");
  15.179+	print("	r3	", addr.r3, "\n");
  15.180+	print("	r4	", addr.r4, "\n");
  15.181+	print("	r5	", addr.r5, "\n");
  15.182+	print("	r6	", addr.r6, "\n");
  15.183+	print("	r7	", addr.r7, "\n");
  15.184+	print("	r8	", addr.r8, "\n");
  15.185+	print("	r9	", addr.r9, "\n");
  15.186+	print("	r10	", addr.r10, "\n");
  15.187+	print("	r11	", addr.r11, "\n");
  15.188+	print("	r12	", addr.r12, "\n");
  15.189+	print("	r13	", addr.r13, "\n");
  15.190+	print("	r14	", addr.r14, "\n");
  15.191+	print("	r15	", addr.r15, "\n");
  15.192+	print("	r16	", addr.r16, "\n");
  15.193+	print("	r17	", addr.r17, "\n");
  15.194+	print("	r18	", addr.r18, "\n");
  15.195+	print("	r19	", addr.r19, "\n");
  15.196+	print("	r20	", addr.r20, "\n");
  15.197+	print("	r21	", addr.r21, "\n");
  15.198+	print("	r22	", addr.r22, "\n");
  15.199+	print("	r23	", addr.r23, "\n");
  15.200+	print("	r24	", addr.r24, "\n");
  15.201+	print("	r25	", addr.r25, "\n");
  15.202+	print("	r26	", addr.r26, "\n");
  15.203+	print("	r27	", addr.r27, "\n");
  15.204+	print("	r28	", addr.r28, "\n");
  15.205+	print("	r29	", addr.r29, "\n");
  15.206+	print("	r30	", addr.r30, "\n");
  15.207+	print("	r31	", addr.r31, "\n");
  15.208+	print("	y	", addr.y, "\n");
  15.209+	print("	tbr	", addr.tbr, "\n");
  15.210+	print("	psr	", addr.psr, "\n");
  15.211+	print("	npc	", addr.npc, "\n");
  15.212+	print("	pc	", addr.pc, "\n");
  15.213+	print("	pad	", addr.pad, "\n");
  15.214+};
  15.215+
  15.216+defn linkreg(addr)
  15.217+{
  15.218+	complex Ureg addr;
  15.219+	return addr.r15\X;
  15.220+}
  15.221+
  15.222+print("/sys/lib/acid/sparc");
    16.1new file mode 100755
    16.2--- /dev/null
    16.3+++ b/sys/lib/acid/sparc64
    16.4@@ -0,0 +1,222 @@
    16.5+// Sparc64 support
    16.6+
    16.7+defn acidinit()			// Called after all the init modules are loaded
    16.8+{
    16.9+	bplist = {};
   16.10+	bpfmt = 'X';
   16.11+
   16.12+	srcpath = {
   16.13+		"./",
   16.14+		"/sys/src/libc/port/",
   16.15+		"/sys/src/libc/9sys/",
   16.16+		"/sys/src/libc/sparc64/"
   16.17+	};
   16.18+
   16.19+	srcfiles = {};		// list of loaded files
   16.20+	srctext = {};		// the text of the files
   16.21+}
   16.22+
   16.23+defn linkreg(addr)
   16.24+{
   16.25+	complex Ureg addr;
   16.26+	return addr.r15\X;
   16.27+}
   16.28+
   16.29+defn stk()			// trace
   16.30+{
   16.31+	_stk(*PC, *SP, linkreg(0), 0);
   16.32+}
   16.33+
   16.34+defn lstk()			// trace with locals
   16.35+{
   16.36+	_stk(*PC, *SP, linkreg(0), 1);
   16.37+}
   16.38+
   16.39+defn gpr()			// print general purpose registers
   16.40+{
   16.41+	print("SP\t", *SP, "R2\t", *R2, "R3\t", *R3, "\n");
   16.42+	print("R4\t", *R4, "R5\t", *R5, "R6\t", *R6, "\n");
   16.43+	print("R7\t", *R7, "R8\t", *R8, "R9\t", *R9, "\n");
   16.44+	print("R10\t", *R10, "R11\t", *R11, "R12\t", *R12, "\n");
   16.45+	print("R13\t", *R13, "R14\t", *R14, "R15\t", *R15, "\n");
   16.46+	print("R16\t", *R16, "R17\t", *R17, "R18\t", *R18, "\n");
   16.47+	print("R19\t", *R19, "R20\t", *R20, "R21\t", *R21, "\n");
   16.48+	print("R22\t", *R22, "R23\t", *R23, "R24\t", *R24, "\n");
   16.49+	print("R25\t", *R25, "R26\t", *R26, "R27\t", *R27, "\n");
   16.50+	print("R28\t", *R28, "R29\t", *R29, "R30\t", *R30, "\n");
   16.51+	print("R31\t", *R31, "\n");
   16.52+}
   16.53+
   16.54+defn spr()				// print special processor registers
   16.55+{
   16.56+	local pc;
   16.57+	local link;
   16.58+	local cause;
   16.59+
   16.60+	pc = *PC;
   16.61+	npc = *NPC;
   16.62+	print("PC\t", pc, " ", fmt(pc, 'a'), "  ");
   16.63+	pfl(pc);
   16.64+	print("NPC\t", npc, " ", fmt(npc, 'a'), "  ");
   16.65+	pfl(npc);
   16.66+	print("PSTATE\t", *PSTATE, "\n");
   16.67+
   16.68+	link = *R15;
   16.69+	print("SP\t", *SP, "\tLINK\t\t", link, " ", fmt(link, 'a'));
   16.70+	pfl(link);
   16.71+
   16.72+	cause = *TT;
   16.73+	print("Y\t", *Y, "\tCAUSE\t", cause, " ", reason(cause), "\n");
   16.74+}
   16.75+
   16.76+defn Fpr()
   16.77+{
   16.78+	print("F0\t",  *fmt(F0, 'G'),  "\tF2\t",  *fmt(F2, 'G'), "\n");
   16.79+	print("F4\t",  *fmt(F4, 'G'),  "\tF6\t",  *fmt(F6, 'G'), "\n");
   16.80+	print("F8\t",  *fmt(F8, 'G'),  "\tF10\t", *fmt(F10, 'G'), "\n");
   16.81+	print("F12\t", *fmt(F12, 'G'), "\tF14\t", *fmt(F14, 'G'), "\n");
   16.82+	print("F16\t", *fmt(F16, 'G'), "\tF18\t", *fmt(F18, 'G'), "\n");
   16.83+	print("F20\t", *fmt(F20, 'G'), "\tF22\t", *fmt(F22, 'G'), "\n");
   16.84+	print("F24\t", *fmt(F24, 'G'), "\tF26\t", *fmt(F26, 'G'), "\n");
   16.85+	print("F28\t", *fmt(F28, 'G'), "\tF30\t", *fmt(F30, 'G'), "\n");
   16.86+}
   16.87+
   16.88+defn fpr()
   16.89+{
   16.90+	print("F0\t",  *fmt(F0, 'g'),  "\tF1\t",  *fmt(F1, 'g'), "\n");
   16.91+	print("F2\t",  *fmt(F2, 'g'),  "\tF3\t",  *fmt(F3, 'g'), "\n");
   16.92+	print("F4\t",  *fmt(F4, 'g'),  "\tF5\t",  *fmt(F5, 'g'), "\n");
   16.93+	print("F6\t",  *fmt(F6, 'g'),  "\tF7\t",  *fmt(F7, 'g'), "\n");
   16.94+	print("F8\t",  *fmt(F8, 'g'),  "\tF9\t",  *fmt(F9, 'g'), "\n");
   16.95+	print("F10\t", *fmt(F10, 'g'), "\tF11\t", *fmt(F11, 'g'), "\n");
   16.96+	print("F12\t", *fmt(F12, 'g'), "\tF13\t", *fmt(F13, 'g'), "\n");
   16.97+	print("F14\t", *fmt(F14, 'g'), "\tF15\t", *fmt(F15, 'g'), "\n");
   16.98+	print("F16\t", *fmt(F16, 'g'), "\tF17\t", *fmt(F17, 'g'), "\n");
   16.99+	print("F18\t", *fmt(F18, 'g'), "\tF19\t", *fmt(F19, 'g'), "\n");
  16.100+	print("F20\t", *fmt(F20, 'g'), "\tF21\t", *fmt(F21, 'g'), "\n");
  16.101+	print("F22\t", *fmt(F22, 'g'), "\tF23\t", *fmt(F23, 'g'), "\n");
  16.102+	print("F24\t", *fmt(F24, 'g'), "\tF25\t", *fmt(F25, 'g'), "\n");
  16.103+	print("F26\t", *fmt(F26, 'g'), "\tF27\t", *fmt(F27, 'g'), "\n");
  16.104+	print("F28\t", *fmt(F28, 'g'), "\tF29\t", *fmt(F29, 'g'), "\n");
  16.105+	print("F30\t", *fmt(F30, 'g'), "\tF31\t", *fmt(F31, 'g'), "\n");
  16.106+}
  16.107+
  16.108+defn regs()				// print all registers
  16.109+{
  16.110+	spr();
  16.111+	gpr();
  16.112+}
  16.113+
  16.114+defn pstop(pid)
  16.115+{
  16.116+	local l;
  16.117+	local pc;
  16.118+
  16.119+	pc = *PC;
  16.120+
  16.121+	print(pid,": ", reason(*TT), "\t");
  16.122+	print(fmt(pc, 'a'), "\t", fmt(pc, 'i'), "\n");
  16.123+
  16.124+	if notes then {
  16.125+		if notes[0] != "sys: breakpoint" then {
  16.126+			print("Notes pending:\n");
  16.127+			l = notes;
  16.128+			while l do {
  16.129+				print("\t", head l, "\n");
  16.130+				l = tail l;
  16.131+			}
  16.132+		}
  16.133+	}
  16.134+}
  16.135+
  16.136+aggr Ureg
  16.137+{
  16.138+	'U' 0 r0;
  16.139+	{
  16.140+	'U' 4 sp;
  16.141+	'U' 4 usp;
  16.142+	'U' 4 r1;
  16.143+	};
  16.144+	'U' 8 r2;
  16.145+	'U' 12 r3;
  16.146+	'U' 16 r4;
  16.147+	'U' 20 r5;
  16.148+	'U' 24 r6;
  16.149+	'U' 28 r7;
  16.150+	'U' 32 r8;
  16.151+	'U' 36 r9;
  16.152+	'U' 40 r10;
  16.153+	'U' 44 r11;
  16.154+	'U' 48 r12;
  16.155+	'U' 52 r13;
  16.156+	'U' 56 r14;
  16.157+	'U' 60 r15;
  16.158+	'U' 64 r16;
  16.159+	'U' 68 r17;
  16.160+	'U' 72 r18;
  16.161+	'U' 76 r19;
  16.162+	'U' 80 r20;
  16.163+	'U' 84 r21;
  16.164+	'U' 88 r22;
  16.165+	'U' 92 r23;
  16.166+	'U' 96 r24;
  16.167+	'U' 100 r25;
  16.168+	'U' 104 r26;
  16.169+	'U' 108 r27;
  16.170+	'U' 112 r28;
  16.171+	'U' 116 r29;
  16.172+	'U' 120 r30;
  16.173+	'U' 124 r31;
  16.174+	'U' 128 y;
  16.175+	'U' 132 tt;
  16.176+	'U' 136 pstate;
  16.177+	'U' 140 npc;
  16.178+	'U' 144 pc;
  16.179+	'U' 148 pad;
  16.180+};
  16.181+
  16.182+defn
  16.183+Ureg(addr) {
  16.184+	complex Ureg addr;
  16.185+	print("	r0	", addr.r0, "\n");
  16.186+	print("	sp	", addr.sp, "\n");
  16.187+	print("	r2	", addr.r2, "\n");
  16.188+	print("	r3	", addr.r3, "\n");
  16.189+	print("	r4	", addr.r4, "\n");
  16.190+	print("	r5	", addr.r5, "\n");
  16.191+	print("	r6	", addr.r6, "\n");
  16.192+	print("	r7	", addr.r7, "\n");
  16.193+	print("	r8	", addr.r8, "\n");
  16.194+	print("	r9	", addr.r9, "\n");
  16.195+	print("	r10	", addr.r10, "\n");
  16.196+	print("	r11	", addr.r11, "\n");
  16.197+	print("	r12	", addr.r12, "\n");
  16.198+	print("	r13	", addr.r13, "\n");
  16.199+	print("	r14	", addr.r14, "\n");
  16.200+	print("	r15	", addr.r15, "\n");
  16.201+	print("	r16	", addr.r16, "\n");
  16.202+	print("	r17	", addr.r17, "\n");
  16.203+	print("	r18	", addr.r18, "\n");
  16.204+	print("	r19	", addr.r19, "\n");
  16.205+	print("	r20	", addr.r20, "\n");
  16.206+	print("	r21	", addr.r21, "\n");
  16.207+	print("	r22	", addr.r22, "\n");
  16.208+	print("	r23	", addr.r23, "\n");
  16.209+	print("	r24	", addr.r24, "\n");
  16.210+	print("	r25	", addr.r25, "\n");
  16.211+	print("	r26	", addr.r26, "\n");
  16.212+	print("	r27	", addr.r27, "\n");
  16.213+	print("	r28	", addr.r28, "\n");
  16.214+	print("	r29	", addr.r29, "\n");
  16.215+	print("	r30	", addr.r30, "\n");
  16.216+	print("	r31	", addr.r31, "\n");
  16.217+	print("	y	", addr.y, "\n");
  16.218+	print("	tt	", addr.tt, "\n");
  16.219+	print("	pstate	", addr.pstate, "\n");
  16.220+	print("	npc	", addr.npc, "\n");
  16.221+	print("	pc	", addr.pc, "\n");
  16.222+	print("	pad	", addr.pad, "\n");
  16.223+};
  16.224+sizeofUreg = 152;
  16.225+
  16.226+print("/sys/lib/acid/sparc64");
    17.1new file mode 100755
    17.2--- /dev/null
    17.3+++ b/sys/lib/acid/syscall
    17.4@@ -0,0 +1,196 @@
    17.5+// print system calls
    17.6+defn printstring(s)
    17.7+{
    17.8+	print("\"", s, "\"");
    17.9+}
   17.10+
   17.11+defn printtextordata(addr, n)
   17.12+{
   17.13+	local a, i;
   17.14+
   17.15+	a = addr\c;
   17.16+	i = 0;
   17.17+	loop 1, n do {
   17.18+		if (a[i]>=127) then {
   17.19+			print(fmt(addr, 'X'), ", ", n\D);
   17.20+			return {};
   17.21+		}
   17.22+		i = i+1;
   17.23+	}
   17.24+
   17.25+	print("\"");
   17.26+	printstringn(addr, n);
   17.27+	print("\"");
   17.28+}
   17.29+
   17.30+defn printstringn(s, n)
   17.31+{
   17.32+	local m;
   17.33+
   17.34+	m = n;
   17.35+	if (m > 100) then m = 100;
   17.36+	loop 1,m do {
   17.37+		print(*(s\c)); s=s+1;
   17.38+	}
   17.39+	if(m != n) then print("...");
   17.40+}
   17.41+
   17.42+defn printsyscall(name, fmt, arg) {
   17.43+	local f, i, a, argp, sl;
   17.44+
   17.45+	print(name, "(");
   17.46+	i = 0;
   17.47+	a = eval arg;
   17.48+	while fmt[i] != 0 do {
   17.49+		if fmt[i] == 's' then {
   17.50+			if *a == 0 then
   17.51+				print("nil");
   17.52+			else
   17.53+				printstring(*(*a\s));
   17.54+		} else if fmt[i] == 'S' then {
   17.55+			argp = *a;
   17.56+			argl = {};
   17.57+			while *argp != 0 do {
   17.58+				argl = append argl, *(*argp\s);
   17.59+				argp++;
   17.60+			}
   17.61+			print(argl);
   17.62+		} else if (fmt[i] == 'Z') && (~*a == 0) then {
   17.63+			print("-1");
   17.64+			a++;	// advance extra word for quadword
   17.65+		} else if (fmt[i] == 'Y') || (fmt[i] == 'V') then {
   17.66+			print(fmt(*a, fmt[i]));
   17.67+			a++;	// advance extra word for quadword
   17.68+		} else if (fmt[i] == 'T') then {
   17.69+			if *a == 0 then
   17.70+				print("nil");
   17.71+			else
   17.72+				printtextordata(*a, a[1]);
   17.73+		} else
   17.74+			print(fmt(*a, fmt[i]));
   17.75+		if fmt[i+1] != 0 then
   17.76+			print(", ");
   17.77+		i = i+1;
   17.78+		a++;
   17.79+	}
   17.80+	print(")\n");
   17.81+}
   17.82+
   17.83+defn code(*e) { return e; }
   17.84+
   17.85+syscalls = {
   17.86+	{ 0, {"sysr1",		"s",		code(0)}},
   17.87+	{ 1, {"_errstr",		"s",		code(*sys_errstr:arg)}},
   17.88+	{ 2, {"bind",		"ssX",		code(*sysbind:arg)}},
   17.89+	{ 3, {"chdir",		"s",		code(*sysbind:arg)}},
   17.90+	{ 4, {"close",		"D",		code(*sysclose:arg)}},
   17.91+	{ 5, {"dup",		"DD",		code(*sysdup:arg)}},
   17.92+	{ 6, {"alarm",		"D",		code(*sysalarm:arg)}},
   17.93+	{ 7, {"exec",		"sS",		code(*sysexec:arg)}},
   17.94+	{ 8, {"exits",		"s",		code(*sysexits:arg)}},
   17.95+	{ 9, {"_fsession",	"DX",		code(*sys_fsession:arg)}},
   17.96+	{10, {"fauth",		"DX",		code(*sysfauth:arg)}},
   17.97+	{11, {"_fstat",		"DX",		code(*sys_fstat:arg)}},
   17.98+	{12, {"segbrk",		"XX",		code(*syssegbrk:arg)}},
   17.99+	{13, {"_mount",		"DsXs",		code(*sys_mount:arg)}},
  17.100+	{14, {"open",		"sD",		code(*sysopen:arg)}},
  17.101+	{15, {"_read",		"DXD",		code(*sys_read:arg)}},
  17.102+	{16, {"oseek",		"DDD",		code(*sysoseek:arg)}},
  17.103+	{17, {"sleep",		"D",		code(*syssleep:arg)}},
  17.104+	{18, {"_stat",		"sX",		code(*sys_stat:arg)}},
  17.105+	{19, {"rfork",		"X",		code(*sysstat:arg)}},
  17.106+	{20, {"_write",		"DXD",		code(*sys_write:arg)}},
  17.107+	{21, {"pipe",		"X",		code(*syspipe:arg)}},
  17.108+	{22, {"create",		"sDO",		code(*syscreate:arg)}},
  17.109+	{23, {"fd2path",	"DXD",		code(*sysfd2path:arg)}},
  17.110+	{24, {"brk_",		"X",		code(*sysbrk_:arg)}},
  17.111+	{25, {"remove",		"s",		code(*sysremove:arg)}},
  17.112+	{26, {"_wstat",		"sX",		code(*sys_wstat:arg)}},
  17.113+	{27, {"_fwstat",		"DX",		code(*sys_fwstat:arg)}},
  17.114+	{28, {"notify",		"X",		code(*sysnotify:arg)}},
  17.115+	{29, {"noted",		"D",		code(*sysnoted:arg)}},
  17.116+	{30, {"segattach",	"DsXD",		code(*syssegattach:arg)}},
  17.117+	{31, {"segdetach",	"X",		code(*syssegdetach:arg)}},
  17.118+	{32, {"segfree",	"XD",		code(*syssegfree:arg)}},
  17.119+	{33, {"segflush",	"XD",		code(*syssegflush:arg)}},
  17.120+	{34, {"rendezvous",	"XX",		code(*sysrendezvous:arg)}},
  17.121+	{35, {"unmount",	"ss",		code(*sysunmount:arg)}},
  17.122+	{36, {"_wait",		"X",		code(*sys_wait:arg)}},
  17.123+	{39, {"seek",		"XDVD",		code(*sysseek:arg)}},
  17.124+	{40, {"fversion",	"DDsD",		code(*sysfversion:arg)}},
  17.125+	{41, {"errstr",		"TD",		code(*syserrstr:arg)}},
  17.126+	{42, {"stat",		"sXD",		code(*sysstat:arg)}},
  17.127+	{43, {"fstat",		"DXD",		code(*sysfstat:arg)}},
  17.128+	{44, {"wstat",		"sXD",		code(*syswstat:arg)}},
  17.129+	{45, {"fwstat",		"DXD",		code(*sysfwstat:arg)}},
  17.130+	{46, {"mount",		"DDsXs",		code(*sysmount:arg)}},
  17.131+	{47, {"await",		"TD",		code(*sysawait:arg)}},
  17.132+	{50, {"pread",		"DXDZ",		code(*syspread:arg)}},
  17.133+	{51, {"pwrite",		"DTDZ",		code(*syspwrite:arg)}},
  17.134+};
  17.135+
  17.136+defn syscall() {
  17.137+	local n, sl, h, p;
  17.138+
  17.139+	map({"*data", 0, 0xffffffff, 0});
  17.140+	n = *syscall:scallnr;
  17.141+	sl = syscalls;
  17.142+	while sl != {} do {
  17.143+		h = head sl;
  17.144+		sl = tail sl;
  17.145+
  17.146+		if n == h[0] then {
  17.147+			p = h[1];
  17.148+			printsyscall(p[0], p[1], p[2]);
  17.149+		}
  17.150+	}
  17.151+}
  17.152+
  17.153+defn UPCSPRET() {
  17.154+	// return sys call number, address of first argument, location of syscall return value
  17.155+	if objtype == "386" then 
  17.156+		return { code(*(*PC-4)), code(*SP+4), code(*AX) };
  17.157+	if (objtype == "mips") || (objtype == "mips2") then
  17.158+		return { code(*(*PC-4) & 0xffff), code(*SP+4), code(*R1) };
  17.159+	if objtype == "arm" then
  17.160+		return { code(*(*PC-4) & 0xffff), code(*SP+4), code(*R0) };	// untested
  17.161+	if objtype == "alpha" then
  17.162+		return { code(*(*PC-4) & 0xffff), code(*SP+4), code(*R0) };	// untested
  17.163+}
  17.164+
  17.165+defn trapoffset() {
  17.166+	// return offset from entry point to trap instr
  17.167+	if objtype == "386" then return 5;
  17.168+	if objtype == "mips" then return 8;
  17.169+	if objtype == "mips2" then return 8;
  17.170+	if objtype == "arm" then return 8;	// untested
  17.171+	if objtype == "alpha" then return 8;	// untested
  17.172+}	
  17.173+
  17.174+defn trapreason() {
  17.175+	// return reason for trap
  17.176+	if objtype == "386" then return reason(*TRAP);
  17.177+	if objtype == "mips" then return reason(*CAUSE);
  17.178+	if objtype == "mips2" then return reason(*CAUSE);
  17.179+	if objtype == "arm" then return "unknown trap";	// untested
  17.180+	if objtype == "alpha" then return reason(cause);	// untested
  17.181+}
  17.182+
  17.183+
  17.184+defn usyscall() {	// gives args for system call in user level; not useful with -k
  17.185+	local n, sl, h, p;
  17.186+
  17.187+	// stopped at TRAP instruction in system call library
  17.188+	pcsp = UPCSPRET();
  17.189+	n = eval pcsp[0];
  17.190+	sl = syscalls;
  17.191+	while sl != {} do {
  17.192+		h = head sl;
  17.193+		sl = tail sl;
  17.194+
  17.195+		if n == h[0] then {
  17.196+			p = h[1];
  17.197+			printsyscall(p[0], p[1], pcsp[1]);
  17.198+		}
  17.199+	}
  17.200+}
    18.1new file mode 100755
    18.2--- /dev/null
    18.3+++ b/sys/lib/acid/thread
    18.4@@ -0,0 +1,374 @@
    18.5+include("/sys/src/libthread/sched.acid");
    18.6+
    18.7+defn labpc(l)
    18.8+{
    18.9+	if objtype == "386" then
   18.10+		return longjmp;
   18.11+	return *(l+4);
   18.12+}
   18.13+
   18.14+defn labsp(l)
   18.15+{
   18.16+	return *l;
   18.17+}
   18.18+
   18.19+defn labstk(l)
   18.20+{
   18.21+	_stk(labpc(l), labsp(l), 0, 0);
   18.22+}
   18.23+
   18.24+defn lablstk(l)
   18.25+{
   18.26+	_stk(labpc(l), labsp(l), 0, 1);
   18.27+}
   18.28+
   18.29+defn altfmt(A){
   18.30+	local i, s, yes;
   18.31+	complex Alt A;
   18.32+
   18.33+	s = "alt(";
   18.34+	s = s + "tag(*" + itoa(A.tag, "%x") + "=" + itoa(*A.tag, "%x") + ") ";
   18.35+	i = 0;
   18.36+	yes = 0;
   18.37+	while A.op != CHANEND && A.op != CHANNOBLK do{
   18.38+		if A.op != CHANNOP then{
   18.39+			if yes then s = s + " ";
   18.40+			s = s + itoa(i, "%d");
   18.41+			s = s + ":";
   18.42+			if A.op == CHANSND then s = s + "send";
   18.43+			if A.op == CHANRCV then s = s + "recv";
   18.44+			s = s + "(channel(";
   18.45+			s = s + itoa(A.c, "%x");
   18.46+			s = s + "))";
   18.47+			yes = 1;
   18.48+		}
   18.49+		i = i + 1;
   18.50+		A = (Alt)(A + sizeofAlt);
   18.51+	}
   18.52+	if A.op==CHANNOBLK then{
   18.53+		if yes then s = s + " ";
   18.54+		s = s + "noblock";
   18.55+	}
   18.56+	s = s + ")";
   18.57+	return s;
   18.58+}
   18.59+
   18.60+defn alt(A){
   18.61+	print(altfmt(A), "\n");
   18.62+}
   18.63+
   18.64+threadignsrc = {
   18.65+	"^/sys/src/libc",
   18.66+	"^/sys/src/libthread",
   18.67+};
   18.68+
   18.69+defn fnname(a){
   18.70+	local sym, s;
   18.71+
   18.72+	s = symbols;
   18.73+	while s do {
   18.74+		sym = head s;
   18.75+		if sym[2] == a then
   18.76+			return sym[0];
   18.77+		s = tail s;
   18.78+	}
   18.79+	if a == {} then
   18.80+		return "{}";
   18.81+	return itoa(a\X, "%x");
   18.82+}
   18.83+
   18.84+stkignorelist = {};
   18.85+
   18.86+defn stkignore(s){
   18.87+	append stkignorelist, s;
   18.88+}
   18.89+
   18.90+defn threadstkline(T){
   18.91+	local ostk, stk, frame, pc, pc0, file, lastpc0, s, sym, i, stop;
   18.92+
   18.93+	if T.state == Running then{
   18.94+		pc = *PC;
   18.95+		stk = strace(*PC, *SP, linkreg(0));
   18.96+	}else{
   18.97+		pc = labpc(T.sched);
   18.98+		stk = strace(labpc(T.sched), labsp(T.sched), 0);
   18.99+	}
  18.100+	firstpc = pc;
  18.101+	lastpc0 = 0;
  18.102+	pc0 = 0;
  18.103+	stop = 0;
  18.104+	ostk = stk;
  18.105+	while stk && !stop do {
  18.106+		file = pcfile(pc);
  18.107+		if !regexp("^/sys/src/libc/", file)
  18.108+		&& !regexp("^/sys/src/libthread/", file) 
  18.109+		&& match(file, stkignore)==-1 then
  18.110+			stop = 1;
  18.111+		else if stk[0][1] == 0xfefefefe then {
  18.112+			pc = ostk[0][1];
  18.113+			pc0 = ostk[1][0];
  18.114+			stop = 1;
  18.115+		}else{
  18.116+			lastpc0 = pc0;
  18.117+			frame = head stk;
  18.118+			stk = tail stk;
  18.119+			nextframe = head stk;
  18.120+			pc = frame[1];
  18.121+			pc0 = nextframe[0];
  18.122+		}
  18.123+	}
  18.124+	file = pcfile(pc);
  18.125+	s = file+":"+itoa(pcline(pc), "%d");
  18.126+	if pc0 != 0 then 
  18.127+		s = s + " "+fnname(pc0);
  18.128+	return s;
  18.129+}
  18.130+
  18.131+defn threadfmt(T){
  18.132+	complex Thread T;
  18.133+	local A, yes, i, P, s;
  18.134+
  18.135+	P = (Proc)T.proc;
  18.136+	s = "t=(Thread)"+itoa(T, "%-10x")+" ";
  18.137+
  18.138+	if T.state == Running then
  18.139+		s = s + "Running    ";
  18.140+	else if T.state == Ready then
  18.141+		s = s + "Ready      ";
  18.142+	else if T.state == Rendezvous then
  18.143+		s = s + "Rendez     ";
  18.144+	else
  18.145+		s = s + "Bad state "+itoa(T.state, "%x")+" ";
  18.146+
  18.147+	A = (Alt)T.alt;
  18.148+	if 1 then
  18.149+		s = s + threadstkline(T);
  18.150+	else if T.chan == Chanalt then
  18.151+		s = s + altfmt(T.alt);
  18.152+	else if T.chan == Chansend then
  18.153+		s = s + "send(Channel("+itoa(A.c, "%x")+"))";
  18.154+	else if T.chan == Chanrecv then
  18.155+		s = s + "recv(Channel("+itoa(A.c, "%x")+"))";
  18.156+	else
  18.157+		s = s + threadstkline(T);
  18.158+
  18.159+	if T.moribund == 1 then
  18.160+		s = s + " Moribund";
  18.161+	if T.cmdname != 0 then
  18.162+		s = s + " ["+*(T.cmdname\s)+"]";
  18.163+	return s;
  18.164+}
  18.165+
  18.166+defn thread(T){
  18.167+	print(threadfmt(T), "\n");
  18.168+}
  18.169+
  18.170+defn pthreads(P){
  18.171+	complex Proc P;
  18.172+	local T, Tq, mainpid;
  18.173+
  18.174+	mainpid = pid;
  18.175+	setproc(P.pid);
  18.176+	Tq = (Tqueue)P.threads;
  18.177+	T = (Thread)Tq.$head;
  18.178+	while T != 0 do{
  18.179+		print("\t");
  18.180+		thread(T);
  18.181+		T = T.nextt;
  18.182+	}
  18.183+	setproc(mainpid);
  18.184+}
  18.185+
  18.186+defn threads(){
  18.187+	local P;
  18.188+
  18.189+	P = (Proc)_threadpq.$head;
  18.190+	while P != 0 do{
  18.191+		if P != (Proc)_threadpq.$head then print("\n");
  18.192+		lproc(P);
  18.193+		P = P.next;
  18.194+	}
  18.195+}
  18.196+
  18.197+defn stacks(){
  18.198+	local P, mainpid;
  18.199+
  18.200+	mainpid = pid;
  18.201+	P = (Proc)_threadpq.$head;
  18.202+	while P != 0 do{
  18.203+		proc(P);
  18.204+	//	setproc(P.pid);
  18.205+	//	if P.thread==0 then{
  18.206+	//		print("=== thread scheduler stack\n");
  18.207+	//		stk();
  18.208+	//	}
  18.209+	//	print("threadstks(", P\X, ")\n");
  18.210+		threadstks(P);
  18.211+		P = P.next;
  18.212+		print("\n");
  18.213+	}
  18.214+	setproc(mainpid);
  18.215+}
  18.216+
  18.217+defn stacksizes(){
  18.218+	local P, T, Tq, top, sp, mainpid;
  18.219+
  18.220+	mainpid = pid;
  18.221+	P = (Proc)_threadpq.$head;
  18.222+	while P != 0 do{
  18.223+		P = (Proc)P;
  18.224+		Tq = (Tqueue)P.threads;
  18.225+		T = (Thread)Tq.$head;
  18.226+		while T != 0 do{
  18.227+			top = T.stk+T.stksize;
  18.228+			if T.state==Running then {
  18.229+				sp = *SP;
  18.230+			}else{
  18.231+				sp = *(T.sched);
  18.232+			}
  18.233+			sp = *(T.sched);
  18.234+			print(top-sp\D, " / ", T.stksize\D, "\n");
  18.235+			T = T.nextt;
  18.236+		}
  18.237+		P = P.next;
  18.238+	}
  18.239+	setproc(mainpid);
  18.240+}
  18.241+
  18.242+defn lproc(P){
  18.243+	proc(P);
  18.244+	pthreads(P);
  18.245+}
  18.246+
  18.247+defn threadstks(P){
  18.248+	complex Proc P;
  18.249+	local T, Tq, mainpid, pref, ign;
  18.250+
  18.251+	mainpid = pid;
  18.252+	pref = stkprefix;
  18.253+	stkprefix = pref+"\t\t";
  18.254+	ign = stkignore;
  18.255+	stkignore = {
  18.256+		"^/sys/src/libthread/",
  18.257+		"^/sys/src/libc/(386|arm|alpha|sparc|power|mips)/"
  18.258+	};
  18.259+	setproc(P.pid);
  18.260+	Tq = (Tqueue)P.threads;
  18.261+	T = (Thread)Tq.$head;
  18.262+	while T != 0 do{
  18.263+	//	print("=============================\n");
  18.264+	//	print("  thread(", T\X, ")\n");
  18.265+		print("\t");
  18.266+		thread(T);
  18.267+		threadstk(T);
  18.268+		T = T.nextt;
  18.269+		print("\n");
  18.270+	}
  18.271+	setproc(mainpid);
  18.272+	stkprefix = pref;
  18.273+	stkignore = ign;
  18.274+}
  18.275+
  18.276+defn proc(P){
  18.277+	complex Proc P;
  18.278+
  18.279+	print("p=(Proc)", itoa(P, "%-10x"), " pid ", P.pid\D, " ");
  18.280+	if P.thread==0 then
  18.281+		print(" Sched");
  18.282+	else
  18.283+		print(" Running");
  18.284+	print("\n");
  18.285+}
  18.286+
  18.287+defn procs(){
  18.288+	local P;
  18.289+
  18.290+	P = (Proc)_threadpq.$head;
  18.291+	while P != 0 do{
  18.292+		proc(P);
  18.293+		P = P.next;
  18.294+	}
  18.295+}
  18.296+
  18.297+defn threadlstk(T){
  18.298+	complex Thread T;
  18.299+	local P, mainpid;
  18.300+
  18.301+	P = (Proc)T.proc;
  18.302+	mainpid = pid;
  18.303+	setproc(P.pid);
  18.304+
  18.305+	if T.state == Running then{
  18.306+		lstk();
  18.307+	} else {
  18.308+		lablstk(T.sched);
  18.309+	}
  18.310+	setproc(mainpid);
  18.311+}
  18.312+
  18.313+defn threadstk(T){
  18.314+	complex Thread T;
  18.315+	local P, mainpid;
  18.316+
  18.317+	P = (Proc)T.proc;
  18.318+	mainpid = pid;
  18.319+	setproc(P.pid);
  18.320+
  18.321+	if T.state == Running then{
  18.322+		stk();
  18.323+	} else {
  18.324+		labstk(T.sched);
  18.325+	}
  18.326+	setproc(mainpid);
  18.327+}
  18.328+
  18.329+defn tqueue(Q) {
  18.330+	complex Tqueue Q;
  18.331+
  18.332+	while Q != 0 do {
  18.333+		print(Q.$head\X, " ");
  18.334+		Q = *(Q.$tail);
  18.335+	
  18.336+	}
  18.337+	print("#\n");
  18.338+}
  18.339+
  18.340+defn channel(C) {
  18.341+	complex Channel C;
  18.342+	local i, p;
  18.343+
  18.344+	print("channel ", C\X);
  18.345+	if C.freed then {
  18.346+		print(" (moribund)");
  18.347+	}
  18.348+	print("\n");
  18.349+	print("\telementsize=", C.e\D, " buffersize=", C.s, "\n");
  18.350+	if C.s then {
  18.351+		print("\t", C.n\D, " values in channel:\n");
  18.352+		print("\t");
  18.353+		p = C.v+C.e*(C.f%C.s);
  18.354+		loop 1,C.n do {
  18.355+			if C.e==4 then {
  18.356+				print((*p)\X, " ");
  18.357+			}else {
  18.358+				print("data(", (*p)\X, ") ");
  18.359+			}
  18.360+			p = p+C.e;
  18.361+			if p == C.v+C.s*C.e then {
  18.362+				p = C.v;
  18.363+			}
  18.364+		}
  18.365+	}
  18.366+	print("\n");
  18.367+	print(C.nentry\D, " queue slots:\n");
  18.368+	i=0;
  18.369+	loop 1,C.nentry do {
  18.370+		if C.qentry[i] then
  18.371+			print("\t", altfmt(C.qentry[i]), "\n");
  18.372+		else
  18.373+			print("\t<empty>\n");
  18.374+		i=i+1;
  18.375+	}
  18.376+}
  18.377+
  18.378+print("/sys/lib/acid/thread");
    19.1new file mode 100755
    19.2--- /dev/null
    19.3+++ b/sys/lib/acid/transcript
    19.4@@ -0,0 +1,33 @@
    19.5+#!/bin/rc
    19.6+switch($#*){
    19.7+case 0 1 2
    19.8+	echo usage: window '''minx miny maxx maxy''' '''minx miny maxx maxy''' cmd args ...
    19.9+	exit usage
   19.10+}
   19.11+
   19.12+rfork ns
   19.13+
   19.14+if(mount $wsys /mnt/acid N`{{echo $pid $1 }| sed 's/^ //g;s/ +/,/g'}){
   19.15+	winid=`{cat /dev/winid}
   19.16+	echo transcript > /mnt/acid/label
   19.17+	echo transcript > /mnt/acid/cons
   19.18+	shift
   19.19+}
   19.20+if not exit 0
   19.21+
   19.22+if(mount $wsys /mnt/wsys N`{{echo $pid $1 }| sed 's/^ //g;s/ +/,/g'}){
   19.23+	shift
   19.24+	bind -b /mnt/wsys /dev
   19.25+}
   19.26+if not exit 0
   19.27+
   19.28+echo -n `{basename $1} > /dev/label >[2] /dev/null
   19.29+@{
   19.30+	echo hang > /proc/^`{cat /dev/ppid}^/ctl
   19.31+	$* < /dev/$winid/cons > /dev/$winid/cons >[2] /dev/$winid/cons &
   19.32+	exit $apid
   19.33+}
   19.34+ostatus = `{echo $status | sed 's/.*://'}
   19.35+echo waitstop > /proc/$ostatus/ctl
   19.36+echo nohang > /proc/$ostatus/ctl
   19.37+exit $ostatus
    20.1new file mode 100755
    20.2--- /dev/null
    20.3+++ b/sys/lib/acid/trump
    20.4@@ -0,0 +1,171 @@
    20.5+// trace user malloc pool - trace malloc, realloc, and free calls
    20.6+// if trumpsbrk is set, we trace sbrkalloc and sbrkmerge too.
    20.7+
    20.8+_stoprunning = 0;
    20.9+trumphexaddrs = 0;
   20.10+trumpsbrk = 0;
   20.11+
   20.12+defn stopped(pid) {
   20.13+	local l;
   20.14+	local pc;
   20.15+	pc = *PC;
   20.16+	if notes then {
   20.17+		if (notes[0]!="sys: breakpoint") then
   20.18+		{
   20.19+			print(pid,": ",reason(*TRAP),"\t");
   20.20+			print(fmt(pc,97),"\t",fmt(pc,105),"\n");
   20.21+			print("Notes pending:\n");
   20.22+			l = notes;
   20.23+			while l do
   20.24+			{
   20.25+				print("\t",head l,"\n");
   20.26+				l = tail l;
   20.27+			}
   20.28+			_stoprunning = 1;
   20.29+		}
   20.30+	}
   20.31+}
   20.32+
   20.33+defn printstack() {
   20.34+	local frame, stk, pcs, lst, x;
   20.35+
   20.36+	pcs = {*PC};
   20.37+	stk = strace(*PC,*SP,0);
   20.38+	while stk do {
   20.39+		pcs = append pcs, stk[0][1];
   20.40+		stk = tail stk;
   20.41+	}
   20.42+
   20.43+	print(" #");
   20.44+	lst = pcs;
   20.45+	while lst do {
   20.46+		if trumphexaddrs != 0 then
   20.47+			x = lst[0]\X;
   20.48+		else
   20.49+			x = lst[0]\a;
   20.50+		print(" src(", x, ");");
   20.51+		lst = tail lst;
   20.52+	}
   20.53+	print("\n");
   20.54+}
   20.55+
   20.56+defn setuptrump() {
   20.57+	mallocPC = malloc;
   20.58+	malloczPC = mallocz;
   20.59+	freePC = free;
   20.60+	reallocPC = realloc;
   20.61+	sbrkallocPC = sbrkalloc;
   20.62+	sbrkmergePC = sbrkmerge;
   20.63+
   20.64+	// linker might fill delay slot with first instruction
   20.65+	if objtype == "mips" then {
   20.66+		mallocPC = mallocPC+4;
   20.67+		malloczPC = malloczPC+4;
   20.68+		freePC = freePC+4;
   20.69+		reallocPC = reallocPC+4;
   20.70+		sbrkallocPC = sbrkallocPC+4;
   20.71+		sbrkmergePC = sbrkmergePC+4;
   20.72+	}
   20.73+
   20.74+	bpset(mallocPC);
   20.75+	bpset(malloczPC);
   20.76+	bpset(freePC);
   20.77+	bpset(reallocPC);
   20.78+	if trumpsbrk then {
   20.79+		bpset(sbrkallocPC);
   20.80+		bpset(sbrkmergePC);
   20.81+	}
   20.82+}
   20.83+
   20.84+defn cleantrump() {
   20.85+	stop(pid);
   20.86+
   20.87+	bpdel(mallocPC);
   20.88+	bpdel(malloczPC);
   20.89+	bpdel(freePC);
   20.90+	bpdel(reallocPC);
   20.91+	bpdel(sbrkallocPC);
   20.92+	bpdel(sbrkmergePC);
   20.93+}
   20.94+
   20.95+defn trumpflush() {
   20.96+	stop(pid);		// already stopped, but flushes output
   20.97+}
   20.98+
   20.99+defn new() {
  20.100+	bplist = {};
  20.101+	newproc(progargs);
  20.102+	bpset(follow(main)[0]);
  20.103+	cont();
  20.104+	bpdel(*PC);
  20.105+	// clear the hang bit, which is left set by newproc, so programs we fork/exec don't hang
  20.106+	printto("/proc/"+itoa(pid)+"/ctl", "nohang");
  20.107+}
  20.108+
  20.109+defn trumpfninfo() {
  20.110+	local arg0, arg1, stk, retpc, params;
  20.111+
  20.112+	stk = strace(*PC, *SP, 0);
  20.113+	retpc = stk[0][1];
  20.114+	params = stk[0][2];
  20.115+	arg0 = params[0][1];
  20.116+	arg1 = 0;
  20.117+	if tail params != {} then
  20.118+		arg1 = params[1][1];
  20.119+	return {arg0, arg1, retpc};
  20.120+}
  20.121+
  20.122+defn trumpretval() {
  20.123+	if objtype=="386" then
  20.124+		return *AX;
  20.125+	if objtype=="mips" then
  20.126+		return *R1;
  20.127+	if objtype=="power" || objtype=="alpha" then
  20.128+		return *R0;
  20.129+}
  20.130+
  20.131+defn trump() {
  20.132+	local arg0, arg1, pc, ret, x;
  20.133+
  20.134+	stop(pid);
  20.135+	_stoprunning = 0;
  20.136+	setuptrump();
  20.137+	while !_stoprunning do {
  20.138+		cont();
  20.139+		if notes[0]!="sys: breakpoint" then {
  20.140+			cleantrump();
  20.141+			return {};
  20.142+		}
  20.143+
  20.144+		pc = *PC;
  20.145+		x = trumpfninfo();
  20.146+		arg0 = x[0];
  20.147+		if pc == reallocPC || pc == sbrkmergePC then 
  20.148+			arg1 = x[1];
  20.149+		bpset(x[2]);
  20.150+		cont();
  20.151+		bpdel(x[2]);
  20.152+		ret = trumpretval();
  20.153+		if pc == mallocPC then
  20.154+			print(ret\X, " malloc ", arg0\D);
  20.155+		if pc == malloczPC then
  20.156+			print(ret\X, " mallocz ", arg0\D);
  20.157+		if pc == freePC then
  20.158+			print(arg0\X, " free");
  20.159+		if pc == reallocPC then
  20.160+			print(ret\X, " realloc ", arg0\X, " ", arg1\D);
  20.161+		if pc == sbrkallocPC then
  20.162+			print(ret\X, " sbrkalloc ", arg0\D);
  20.163+		if pc == sbrkmergePC then
  20.164+			print("sbrkmerge ", arg0\X, " ", arg1\X, " = ", ret\D);
  20.165+		printstack();
  20.166+		trumpflush();
  20.167+	}
  20.168+}
  20.169+
  20.170+defn untrump() {
  20.171+	cleantrump();
  20.172+	start(pid);
  20.173+}
  20.174+
  20.175+print("/sys/lib/acid/trump");
    21.1new file mode 100755
    21.2--- /dev/null
    21.3+++ b/sys/lib/acid/truss
    21.4@@ -0,0 +1,283 @@
    21.5+// poor emulation of SVR5 truss command - traces system calls
    21.6+
    21.7+include("/sys/lib/acid/syscall");
    21.8+
    21.9+_stoprunning = 0;
   21.10+
   21.11+defn stopped(pid) {
   21.12+	local l;
   21.13+	local pc;
   21.14+	pc = *PC;
   21.15+	if notes then {
   21.16+		if (notes[0]!="sys: breakpoint") then
   21.17+		{
   21.18+			print(pid,": ",trapreason(),"\t");
   21.19+			print(fmt(pc,97),"\t",fmt(pc,105),"\n");
   21.20+			print("Notes pending:\n");
   21.21+			l = notes;
   21.22+			while l do
   21.23+			{
   21.24+				print("\t",head l,"\n");
   21.25+				l = tail l;
   21.26+			}
   21.27+			_stoprunning = 1;
   21.28+		}
   21.29+	}
   21.30+}
   21.31+
   21.32+defn _addressof(pattern) {
   21.33+	local s, l;
   21.34+	l = symbols;
   21.35+	pattern = "^\\$*"+pattern+"$";
   21.36+	while l do
   21.37+	{
   21.38+		s = head l;
   21.39+		if regexp(pattern, s[0]) && ((s[1] == 'T') || (s[1] == 'L')) then
   21.40+			return s[2];
   21.41+		l = tail l;
   21.42+	}
   21.43+	return 0;
   21.44+}
   21.45+
   21.46+stopPC = {};
   21.47+readPC = {};
   21.48+fd2pathPC = {};
   21.49+errstrPC = {};
   21.50+awaitPC = {};
   21.51+_waitPC = {};
   21.52+_errstrPC = {};
   21.53+trusscalls = {
   21.54+		"sysr1",
   21.55+		"_errstr",
   21.56+		"bind",
   21.57+		"chdir",
   21.58+		"close",
   21.59+		"dup",
   21.60+		"alarm",
   21.61+		"exec",
   21.62+		"_exits",
   21.63+		"_fsession",
   21.64+		"fauth",
   21.65+		"_fstat",
   21.66+		"segbrk",
   21.67+		"_mount",
   21.68+		"open",
   21.69+		"_read",
   21.70+		"oseek",
   21.71+		"sleep",
   21.72+		"_stat",
   21.73+		"rfork",
   21.74+		"_write",
   21.75+		"pipe",
   21.76+		"create",
   21.77+		"fd2path",
   21.78+		"brk_",
   21.79+		"remove",
   21.80+		"_wstat",
   21.81+		"_fwstat",
   21.82+		"notify",
   21.83+		"noted",
   21.84+		"segattach",
   21.85+		"segdetach",
   21.86+		"segfree",
   21.87+		"segflush",
   21.88+		"rendezvous",
   21.89+		"unmount",
   21.90+		"_wait",
   21.91+		"seek",
   21.92+		"fversion",
   21.93+		"errstr",
   21.94+		"stat",
   21.95+		"fstat",
   21.96+		"wstat",
   21.97+		"fwstat",
   21.98+		"mount",
   21.99+		"await",
  21.100+		"pread",
  21.101+		"pwrite",
  21.102+	};
  21.103+
  21.104+trussapecalls = {
  21.105+		"_SYSR1",
  21.106+		"__ERRSTR",
  21.107+		"_BIND",
  21.108+		"_CHDIR",
  21.109+		"_CLOSE",
  21.110+		"_DUP",
  21.111+		"_ALARM",
  21.112+		"_EXEC",
  21.113+		"_EXITS",
  21.114+		"__FSESSION",
  21.115+		"_FAUTH",
  21.116+		"__FSTAT",
  21.117+		"_SEGBRK",
  21.118+		"__MOUNT",
  21.119+		"_OPEN",
  21.120+		"__READ",
  21.121+		"_OSEEK",
  21.122+		"_SLEEP",
  21.123+		"__STAT",
  21.124+		"_RFORK",
  21.125+		"__WRITE",
  21.126+		"_PIPE",
  21.127+		"_CREATE",
  21.128+		"_FD2PATH",
  21.129+		"_BRK_",
  21.130+		"_REMOVE",
  21.131+		"__WSTAT",
  21.132+		"__FWSTAT",
  21.133+		"_NOTIFY",
  21.134+		"_NOTED",
  21.135+		"_SEGATTACH",
  21.136+		"_SEGDETACH",
  21.137+		"_SEGFREE",
  21.138+		"_SEGFLUSH",
  21.139+		"_RENDEZVOUS",
  21.140+		"_UNMOUNT",
  21.141+		"__WAIT",
  21.142+		"_SEEK",
  21.143+		"__NFVERSION",
  21.144+		"__NERRSTR",
  21.145+		"_STAT",
  21.146+		"__NFSTAT",
  21.147+		"__NWSTAT",
  21.148+		"__NFWSTAT",
  21.149+		"__NMOUNT",
  21.150+		"__NAWAIT",
  21.151+		"_PREAD",
  21.152+		"_PWRITE",
  21.153+	};
  21.154+
  21.155+defn addressof(pattern) {
  21.156+	// translate to ape system calls if we have an ape binary
  21.157+	if _addressof("_EXITS") == 0 then
  21.158+		return _addressof(pattern);
  21.159+	return _addressof(trussapecalls[match(pattern, trusscalls)]);
  21.160+}
  21.161+
  21.162+defn setuptruss() {
  21.163+	local lst, offset, name, addr;
  21.164+
  21.165+	trussbpt = {};
  21.166+	offset = trapoffset();
  21.167+	lst = trusscalls;
  21.168+	while lst do
  21.169+	{
  21.170+		name = head lst;
  21.171+		lst = tail lst;
  21.172+		addr = addressof(name);
  21.173+		if addr then
  21.174+		{
  21.175+			bpset(addr+offset);
  21.176+			trussbpt = append trussbpt, (addr+offset);
  21.177+			// sometimes _exits is renamed $_exits
  21.178+			if(regexp("exits|exec", name)) then stopPC = append stopPC, (addr+offset);
  21.179+			if(regexp("read", name)) then readPC = append readPC, (addr+offset);
  21.180+			if(regexp("fd2path", name)) then fd2pathPC = append fd2pathPC, (addr+offset);
  21.181+			if(regexp("^\\$*await", name)) then awaitPC = append awaitPC, (addr+offset);
  21.182+			if(regexp("^\\$*errstr", name)) then errstrPC = append errstrPC, (addr+offset);
  21.183+			// compatibility hacks for old kernel
  21.184+			if(regexp("_wait", name)) then _waitPC = append _waitPC, (addr+offset);
  21.185+			if(regexp("_errstr", name)) then _errstrPC = append _errstrPC, (addr+offset);
  21.186+		}
  21.187+	}
  21.188+}
  21.189+
  21.190+defn trussflush() {
  21.191+	stop(pid);		// already stopped, but flushes output
  21.192+}
  21.193+
  21.194+defn new() {
  21.195+	bplist = {};
  21.196+	newproc(progargs);
  21.197+	bpset(follow(main)[0]);
  21.198+	cont();
  21.199+	bpdel(*PC);
  21.200+	// clear the hang bit, which is left set by newproc, so programs we fork/exec don't hang
  21.201+	printto("/proc/"+itoa(pid)+"/ctl", "nohang");
  21.202+}
  21.203+
  21.204+defn truss() {
  21.205+	local pc, lst, offset, prevpc, pcspret, ret;
  21.206+
  21.207+	offset = trapoffset();
  21.208+
  21.209+	stop(pid);
  21.210+	_stoprunning = 0;
  21.211+	setuptruss();
  21.212+	pcspret = UPCSPRET();
  21.213+
  21.214+	while !_stoprunning do {
  21.215+		cont();
  21.216+		if notes[0]!="sys: breakpoint" then {
  21.217+			cleantruss();
  21.218+			return {};
  21.219+		}
  21.220+		pc = *PC;
  21.221+		if match(*PC, stopPC)>=0 then {
  21.222+			print(pid,": ",trapreason(),"\t");
  21.223+			print(fmt(pc,'a'),"\t",fmt(pc,'i'),"\n");
  21.224+			cleantruss();
  21.225+			return {};
  21.226+		}
  21.227+		if match(*PC, trussbpt)>=0 then {
  21.228+			usyscall();
  21.229+			trussflush();
  21.230+			prevpc = *PC;
  21.231+			step();
  21.232+			ret = eval pcspret[2];
  21.233+			print("\treturn value: ", ret\D, "\n");
  21.234+			if (ret>=0) && (match(prevpc, readPC)>=0) then {
  21.235+				print("\tdata: ");
  21.236+				printtextordata(*((eval pcspret[1])+4), ret);
  21.237+				print("\n");
  21.238+			}
  21.239+			if (ret>=0) && (match(prevpc, fd2pathPC)>=0) then {
  21.240+				print("\tdata: \"", *(*((eval pcspret[1])+4)\s), "\"\n");
  21.241+			}
  21.242+			if (ret>=0) && (match(prevpc, errstrPC)>=0) then {
  21.243+				print("\tdata: \"", *(*(eval pcspret[1])\s), "\"\n");
  21.244+			}
  21.245+			if (ret>=0) && (match(prevpc, awaitPC)>=0) then {
  21.246+				print("\tdata: ");
  21.247+				printtextordata(*(eval pcspret[1]), ret);
  21.248+				print("\n");
  21.249+			}
  21.250+			// compatibility hacks for old kernel:
  21.251+			if (ret>=0) && (match(prevpc, _waitPC)>=0) then {
  21.252+				print("\tdata: ");
  21.253+				printtextordata(*(eval pcspret[1]), 12+3*12+64);
  21.254+				print("\n");
  21.255+			}
  21.256+			if (ret>=0) && (match(prevpc, _errstrPC)>=0) then {
  21.257+				print("\tdata: ");
  21.258+				printtextordata(*(eval pcspret[1]), 64);
  21.259+				print("\n");
  21.260+			}
  21.261+		}
  21.262+		trussflush();
  21.263+	}
  21.264+}
  21.265+
  21.266+defn cleantruss() {
  21.267+	local lst, offset, addr;
  21.268+
  21.269+	stop(pid);
  21.270+	offset = trapoffset();
  21.271+	lst = trussbpt;
  21.272+	while lst do
  21.273+	{
  21.274+		addr = head lst;
  21.275+		lst = tail lst;
  21.276+		bpdel(addr);
  21.277+	}
  21.278+	trussbpt = {};
  21.279+	**PC = @*PC;	// repair current instruction
  21.280+}
  21.281+
  21.282+defn untruss() {
  21.283+	cleantruss();
  21.284+	start(pid);
  21.285+}
  21.286+
  21.287+print("/sys/lib/acid/truss");
    22.1new file mode 100755
    22.2--- /dev/null
    22.3+++ b/sys/lib/acid/window
    22.4@@ -0,0 +1,23 @@
    22.5+#!/bin/rc
    22.6+switch($#*){
    22.7+case 0 1
    22.8+	echo usage: window '''minx miny maxx maxy''' cmd args ...
    22.9+	exit usage
   22.10+}
   22.11+
   22.12+rfork ns
   22.13+if(mount $wsys /mnt/wsys N`{{echo $pid $1 }| sed 's/^ //g;s/ +/,/g'}){
   22.14+	shift
   22.15+	bind -b /mnt/wsys /dev
   22.16+	echo -n `{basename $1} > /dev/label >[2] /dev/null
   22.17+	@{
   22.18+		echo hang > /proc/^`{cat /dev/ppid}^/ctl
   22.19+		$* < /dev/cons > /dev/cons >[2] /dev/cons &
   22.20+		exit $apid
   22.21+	}
   22.22+	ostatus = `{echo $status | sed 's/.*://'}
   22.23+	echo waitstop > /proc/$ostatus/ctl
   22.24+	echo nohang > /proc/$ostatus/ctl
   22.25+	exit $ostatus
   22.26+}
   22.27+exit 0
    23.1new file mode 100755
    23.2--- /dev/null
    23.3+++ b/sys/lib/agent.config
    23.4@@ -0,0 +1,36 @@
    23.5+# an ssh key, as in the .secret file produced by aux/ssh_genkey
    23.6+sshkey="1024 2D 5FD276869B5257F506CD32A5EF9CC8D5F691B1B15B17E59ED01691160828D1E0DF192AB82451684DBC74668874C557C81C89396C5EFCA155FE88E1AD6A3C27BFD34B6F6D0A30958B79872CA73A10401B3B85F8E430646B7FD3F36C2BFA47B0581FF101C207E654F1FF23E37BFEAA36D8381FC17315BC77292A6D4E46B68CEE64 A5D892105B985D28159E3A1F3267F9238D373D64315A97441962227EBF5A578F0BFA53C88DA096FCB27AB176052E2B9F4514E362F32B660124D937D386A3311C6DB5497DEF131A1BE5BFA7C88C204D25DB6F6C8181D4826239E52788745B0801F7CB86725A5137E358FEE99852CD50B1B470BA413C35333C26F5D8A3B9D57DF2 A322062C0B47115FBE09721ABBB027719F09C87ED29664AB5A1777D97CBCB099D00A305C8E895C1065DC397D0777DEFB4E216C602A5F4098E6E71701804050B0 10441EEC665DA685E72E9CADB27054098CB879C9F2068ED8104A860C55049A63217DB493247F448CDA5DABA13750775402C8E7F1009C0FD0362EF1C9DFDA141E2 1D005C1E95EA803E882F30BACC088F8BAA7EE510DB7B729B9E3D0F9E218DA23D7A5174AFBE514EF1D93837BB3487169313942A05B7E36C31F029152816CCDB24 2E449C3A06BABD389CF65CF3C2AB99B4C378D1E366790DC74AC899BCAD8FF008E7CBF641D3E72963232C92DBA30703C7245D996EF0AAD7A5946EC6827CBBF4F4 9E0E0FE3DAA204E387DD556667CC3B431B01084DDA9AF5461EBE8700BC213F7D2DEF799915B17B596172CB6859E9775AC902D0A285E0D9491ED2642DF6D818DF"
    23.7+
    23.8+# plan 9 password
    23.9+plan9password = "secret"
   23.10+
   23.11+# inferno/pop password
   23.12+apoppassword = "terces"
   23.13+
   23.14+# plaintext non-secure password
   23.15+plaintext = "guessme"
   23.16+
   23.17+# serve your ssh key
   23.18+file /ssh/you
   23.19+protocol ssh-rsa
   23.20+data $sshkey
   23.21+
   23.22+# make "rdwr /mnt/auth/netkey/your.host/you" a workalike for netkey.
   23.23+file /netkey/your.host/you
   23.24+protocol netkey
   23.25+data $plan9password
   23.26+
   23.27+# md5 apop challenge-response
   23.28+file /apop/your.host/you
   23.29+protocol apop
   23.30+data $apoppassword
   23.31+
   23.32+# raw access to password for pop or imap
   23.33+file /pop/your.host/you
   23.34+protocol raw
   23.35+data $plaintext
   23.36+
   23.37+file /imap/your.host/you
   23.38+protocol raw
   23.39+data $plaintext
   23.40+
    24.1new file mode 100755
    24.2index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c7b0023b40604bab2e51622b477628d372a6767f
    24.3GIT binary patch
literal 169218
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%0A3$=)Md*Pe6XiAPK5e!HLoP
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%0AtQtt@Cq$X6BSI1
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

    25.1new file mode 100755
    25.2--- /dev/null
    25.3+++ b/sys/lib/antiword/8859-1.txt
    25.4@@ -0,0 +1,303 @@
    25.5+#
    25.6+#	Name:             ISO/IEC 8859-1:1998 to Unicode
    25.7+#	Unicode version:  3.0
    25.8+#	Table version:    1.0
    25.9+#	Table format:     Format A
   25.10+#	Date:             1999 July 27
   25.11+#	Authors:          Ken Whistler <kenw@sybase.com>
   25.12+#
   25.13+#	Copyright (c) 1991-1999 Unicode, Inc.  All Rights reserved.
   25.14+#
   25.15+#	This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
   25.16+#	No claims are made as to fitness for any particular purpose.  No
   25.17+#	warranties of any kind are expressed or implied.  The recipient
   25.18+#	agrees to determine applicability of information provided.  If this
   25.19+#	file has been provided on optical media by Unicode, Inc., the sole
   25.20+#	remedy for any claim will be exchange of defective media within 90
   25.21+#	days of receipt.
   25.22+#
   25.23+#	Unicode, Inc. hereby grants the right to freely use the information
   25.24+#	supplied in this file in the creation of products supporting the
   25.25+#	Unicode Standard, and to make copies of this file in any form for
   25.26+#	internal or external distribution as long as this notice remains
   25.27+#	attached.
   25.28+#
   25.29+#	General notes:
   25.30+#
   25.31+#	This table contains the data the Unicode Consortium has on how
   25.32+#       ISO/IEC 8859-1:1998 characters map into Unicode.
   25.33+#
   25.34+#	Format:  Three tab-separated columns
   25.35+#		 Column #1 is the ISO/IEC 8859-1 code (in hex as 0xXX)
   25.36+#		 Column #2 is the Unicode (in hex as 0xXXXX)
   25.37+#		 Column #3 the Unicode name (follows a comment sign, '#')
   25.38+#
   25.39+#	The entries are in ISO/IEC 8859-1 order.
   25.40+#
   25.41+#	Version history
   25.42+#	1.0 version updates 0.1 version by adding mappings for all
   25.43+#	control characters.
   25.44+#
   25.45+#	Updated versions of this file may be found in:
   25.46+#		<ftp://ftp.unicode.org/Public/MAPPINGS/>
   25.47+#
   25.48+#	Any comments or problems, contact <errata@unicode.org>
   25.49+#	Please note that <errata@unicode.org> is an archival address;
   25.50+#	notices will be checked, but do not expect an immediate response.
   25.51+#
   25.52+0x00	0x0000	#	NULL
   25.53+0x01	0x0001	#	START OF HEADING
   25.54+0x02	0x0002	#	START OF TEXT
   25.55+0x03	0x0003	#	END OF TEXT
   25.56+0x04	0x0004	#	END OF TRANSMISSION
   25.57+0x05	0x0005	#	ENQUIRY
   25.58+0x06	0x0006	#	ACKNOWLEDGE
   25.59+0x07	0x0007	#	BELL
   25.60+0x08	0x0008	#	BACKSPACE
   25.61+0x09	0x0009	#	HORIZONTAL TABULATION
   25.62+0x0A	0x000A	#	LINE FEED
   25.63+0x0B	0x000B	#	VERTICAL TABULATION
   25.64+0x0C	0x000C	#	FORM FEED
   25.65+0x0D	0x000D	#	CARRIAGE RETURN
   25.66+0x0E	0x000E	#	SHIFT OUT
   25.67+0x0F	0x000F	#	SHIFT IN
   25.68+0x10	0x0010	#	DATA LINK ESCAPE
   25.69+0x11	0x0011	#	DEVICE CONTROL ONE
   25.70+0x12	0x0012	#	DEVICE CONTROL TWO
   25.71+0x13	0x0013	#	DEVICE CONTROL THREE
   25.72+0x14	0x0014	#	DEVICE CONTROL FOUR
   25.73+0x15	0x0015	#	NEGATIVE ACKNOWLEDGE
   25.74+0x16	0x0016	#	SYNCHRONOUS IDLE
   25.75+0x17	0x0017	#	END OF TRANSMISSION BLOCK
   25.76+0x18	0x0018	#	CANCEL
   25.77+0x19	0x0019	#	END OF MEDIUM
   25.78+0x1A	0x001A	#	SUBSTITUTE
   25.79+0x1B	0x001B	#	ESCAPE
   25.80+0x1C	0x001C	#	FILE SEPARATOR
   25.81+0x1D	0x001D	#	GROUP SEPARATOR
   25.82+0x1E	0x001E	#	RECORD SEPARATOR
   25.83+0x1F	0x001F	#	UNIT SEPARATOR
   25.84+0x20	0x0020	#	SPACE
   25.85+0x21	0x0021	#	EXCLAMATION MARK
   25.86+0x22	0x0022	#	QUOTATION MARK
   25.87+0x23	0x0023	#	NUMBER SIGN
   25.88+0x24	0x0024	#	DOLLAR SIGN
   25.89+0x25	0x0025	#	PERCENT SIGN
   25.90+0x26	0x0026	#	AMPERSAND
   25.91+0x27	0x0027	#	APOSTROPHE
   25.92+0x28	0x0028	#	LEFT PARENTHESIS
   25.93+0x29	0x0029	#	RIGHT PARENTHESIS
   25.94+0x2A	0x002A	#	ASTERISK
   25.95+0x2B	0x002B	#	PLUS SIGN
   25.96+0x2C	0x002C	#	COMMA
   25.97+0x2D	0x002D	#	HYPHEN-MINUS
   25.98+0x2E	0x002E	#	FULL STOP
   25.99+0x2F	0x002F	#	SOLIDUS
  25.100+0x30	0x0030	#	DIGIT ZERO
  25.101+0x31	0x0031	#	DIGIT ONE
  25.102+0x32	0x0032	#	DIGIT TWO
  25.103+0x33	0x0033	#	DIGIT THREE
  25.104+0x34	0x0034	#	DIGIT FOUR
  25.105+0x35	0x0035	#	DIGIT FIVE
  25.106+0x36	0x0036	#	DIGIT SIX
  25.107+0x37	0x0037	#	DIGIT SEVEN
  25.108+0x38	0x0038	#	DIGIT EIGHT
  25.109+0x39	0x0039	#	DIGIT NINE
  25.110+0x3A	0x003A	#	COLON
  25.111+0x3B	0x003B	#	SEMICOLON
  25.112+0x3C	0x003C	#	LESS-THAN SIGN
  25.113+0x3D	0x003D	#	EQUALS SIGN
  25.114+0x3E	0x003E	#	GREATER-THAN SIGN
  25.115+0x3F	0x003F	#	QUESTION MARK
  25.116+0x40	0x0040	#	COMMERCIAL AT
  25.117+0x41	0x0041	#	LATIN CAPITAL LETTER A
  25.118+0x42	0x0042	#	LATIN CAPITAL LETTER B
  25.119+0x43	0x0043	#	LATIN CAPITAL LETTER C
  25.120+0x44	0x0044	#	LATIN CAPITAL LETTER D
  25.121+0x45	0x0045	#	LATIN CAPITAL LETTER E
  25.122+0x46	0x0046	#	LATIN CAPITAL LETTER F
  25.123+0x47	0x0047	#	LATIN CAPITAL LETTER G
  25.124+0x48	0x0048	#	LATIN CAPITAL LETTER H
  25.125+0x49	0x0049	#	LATIN CAPITAL LETTER I
  25.126+0x4A	0x004A	#	LATIN CAPITAL LETTER J
  25.127+0x4B	0x004B	#	LATIN CAPITAL LETTER K
  25.128+0x4C	0x004C	#	LATIN CAPITAL LETTER L
  25.129+0x4D	0x004D	#	LATIN CAPITAL LETTER M
  25.130+0x4E	0x004E	#	LATIN CAPITAL LETTER N
  25.131+0x4F	0x004F	#	LATIN CAPITAL LETTER O
  25.132+0x50	0x0050	#	LATIN CAPITAL LETTER P
  25.133+0x51	0x0051	#	LATIN CAPITAL LETTER Q
  25.134+0x52	0x0052	#	LATIN CAPITAL LETTER R
  25.135+0x53	0x0053	#	LATIN CAPITAL LETTER S
  25.136+0x54	0x0054	#	LATIN CAPITAL LETTER T
  25.137+0x55	0x0055	#	LATIN CAPITAL LETTER U
  25.138+0x56	0x0056	#	LATIN CAPITAL LETTER V
  25.139+0x57	0x0057	#	LATIN CAPITAL LETTER W
  25.140+0x58	0x0058	#	LATIN CAPITAL LETTER X
  25.141+0x59	0x0059	#	LATIN CAPITAL LETTER Y
  25.142+0x5A	0x005A	#	LATIN CAPITAL LETTER Z
  25.143+0x5B	0x005B	#	LEFT SQUARE BRACKET
  25.144+0x5C	0x005C	#	REVERSE SOLIDUS
  25.145+0x5D	0x005D	#	RIGHT SQUARE BRACKET
  25.146+0x5E	0x005E	#	CIRCUMFLEX ACCENT
  25.147+0x5F	0x005F	#	LOW LINE
  25.148+0x60	0x0060	#	GRAVE ACCENT
  25.149+0x61	0x0061	#	LATIN SMALL LETTER A
  25.150+0x62	0x0062	#	LATIN SMALL LETTER B
  25.151+0x63	0x0063	#	LATIN SMALL LETTER C
  25.152+0x64	0x0064	#	LATIN SMALL LETTER D
  25.153+0x65	0x0065	#	LATIN SMALL LETTER E
  25.154+0x66	0x0066	#	LATIN SMALL LETTER F
  25.155+0x67	0x0067	#	LATIN SMALL LETTER G
  25.156+0x68	0x0068	#	LATIN SMALL LETTER H
  25.157+0x69	0x0069	#	LATIN SMALL LETTER I
  25.158+0x6A	0x006A	#	LATIN SMALL LETTER J
  25.159+0x6B	0x006B	#	LATIN SMALL LETTER K
  25.160+0x6C	0x006C	#	LATIN SMALL LETTER L
  25.161+0x6D	0x006D	#	LATIN SMALL LETTER M
  25.162+0x6E	0x006E	#	LATIN SMALL LETTER N
  25.163+0x6F	0x006F	#	LATIN SMALL LETTER O
  25.164+0x70	0x0070	#	LATIN SMALL LETTER P
  25.165+0x71	0x0071	#	LATIN SMALL LETTER Q
  25.166+0x72	0x0072	#	LATIN SMALL LETTER R
  25.167+0x73	0x0073	#	LATIN SMALL LETTER S
  25.168+0x74	0x0074	#	LATIN SMALL LETTER T
  25.169+0x75	0x0075	#	LATIN SMALL LETTER U
  25.170+0x76	0x0076	#	LATIN SMALL LETTER V
  25.171+0x77	0x0077	#	LATIN SMALL LETTER W
  25.172+0x78	0x0078	#	LATIN SMALL LETTER X
  25.173+0x79	0x0079	#	LATIN SMALL LETTER Y
  25.174+0x7A	0x007A	#	LATIN SMALL LETTER Z
  25.175+0x7B	0x007B	#	LEFT CURLY BRACKET
  25.176+0x7C	0x007C	#	VERTICAL LINE
  25.177+0x7D	0x007D	#	RIGHT CURLY BRACKET
  25.178+0x7E	0x007E	#	TILDE
  25.179+0x7F	0x007F	#	DELETE
  25.180+0x80	0x0080	#	<control>
  25.181+0x81	0x0081	#	<control>
  25.182+0x82	0x0082	#	<control>
  25.183+0x83	0x0083	#	<control>
  25.184+0x84	0x0084	#	<control>
  25.185+0x85	0x0085	#	<control>
  25.186+0x86	0x0086	#	<control>
  25.187+0x87	0x0087	#	<control>
  25.188+0x88	0x0088	#	<control>
  25.189+0x89	0x0089	#	<control>
  25.190+0x8A	0x008A	#	<control>
  25.191+0x8B	0x008B	#	<control>
  25.192+0x8C	0x008C	#	<control>
  25.193+0x8D	0x008D	#	<control>
  25.194+0x8E	0x008E	#	<control>
  25.195+0x8F	0x008F	#	<control>
  25.196+0x90	0x0090	#	<control>
  25.197+0x91	0x0091	#	<control>
  25.198+0x92	0x0092	#	<control>
  25.199+0x93	0x0093	#	<control>
  25.200+0x94	0x0094	#	<control>
  25.201+0x95	0x0095	#	<control>
  25.202+0x96	0x0096	#	<control>
  25.203+0x97	0x0097	#	<control>
  25.204+0x98	0x0098	#	<control>
  25.205+0x99	0x0099	#	<control>
  25.206+0x9A	0x009A	#	<control>
  25.207+0x9B	0x009B	#	<control>
  25.208+0x9C	0x009C	#	<control>
  25.209+0x9D	0x009D	#	<control>
  25.210+0x9E	0x009E	#	<control>
  25.211+0x9F	0x009F	#	<control>
  25.212+0xA0	0x00A0	#	NO-BREAK SPACE
  25.213+0xA1	0x00A1	#	INVERTED EXCLAMATION MARK
  25.214+0xA2	0x00A2	#	CENT SIGN
  25.215+0xA3	0x00A3	#	POUND SIGN
  25.216+0xA4	0x00A4	#	CURRENCY SIGN
  25.217+0xA5	0x00A5	#	YEN SIGN
  25.218+0xA6	0x00A6	#	BROKEN BAR
  25.219+0xA7	0x00A7	#	SECTION SIGN
  25.220+0xA8	0x00A8	#	DIAERESIS
  25.221+0xA9	0x00A9	#	COPYRIGHT SIGN
  25.222+0xAA	0x00AA	#	FEMININE ORDINAL INDICATOR
  25.223+0xAB	0x00AB	#	LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
  25.224+0xAC	0x00AC	#	NOT SIGN
  25.225+0xAD	0x00AD	#	SOFT HYPHEN
  25.226+0xAE	0x00AE	#	REGISTERED SIGN
  25.227+0xAF	0x00AF	#	MACRON
  25.228+0xB0	0x00B0	#	DEGREE SIGN
  25.229+0xB1	0x00B1	#	PLUS-MINUS SIGN
  25.230+0xB2	0x00B2	#	SUPERSCRIPT TWO
  25.231+0xB3	0x00B3	#	SUPERSCRIPT THREE
  25.232+0xB4	0x00B4	#	ACUTE ACCENT
  25.233+0xB5	0x00B5	#	MICRO SIGN
  25.234+0xB6	0x00B6	#	PILCROW SIGN
  25.235+0xB7	0x00B7	#	MIDDLE DOT
  25.236+0xB8	0x00B8	#	CEDILLA
  25.237+0xB9	0x00B9	#	SUPERSCRIPT ONE
  25.238+0xBA	0x00BA	#	MASCULINE ORDINAL INDICATOR
  25.239+0xBB	0x00BB	#	RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
  25.240+0xBC	0x00BC	#	VULGAR FRACTION ONE QUARTER
  25.241+0xBD	0x00BD	#	VULGAR FRACTION ONE HALF
  25.242+0xBE	0x00BE	#	VULGAR FRACTION THREE QUARTERS
  25.243+0xBF	0x00BF	#	INVERTED QUESTION MARK
  25.244+0xC0	0x00C0	#	LATIN CAPITAL LETTER A WITH GRAVE
  25.245+0xC1	0x00C1	#	LATIN CAPITAL LETTER A WITH ACUTE
  25.246+0xC2	0x00C2	#	LATIN CAPITAL LETTER A WITH CIRCUMFLEX
  25.247+0xC3	0x00C3	#	LATIN CAPITAL LETTER A WITH TILDE
  25.248+0xC4	0x00C4	#	LATIN CAPITAL LETTER A WITH DIAERESIS
  25.249+0xC5	0x00C5	#	LATIN CAPITAL LETTER A WITH RING ABOVE
  25.250+0xC6	0x00C6	#	LATIN CAPITAL LETTER AE
  25.251+0xC7	0x00C7	#	LATIN CAPITAL LETTER C WITH CEDILLA
  25.252+0xC8	0x00C8	#	LATIN CAPITAL LETTER E WITH GRAVE
  25.253+0xC9	0x00C9	#	LATIN CAPITAL LETTER E WITH ACUTE
  25.254+0xCA	0x00CA	#	LATIN CAPITAL LETTER E WITH CIRCUMFLEX
  25.255+0xCB	0x00CB	#	LATIN CAPITAL LETTER E WITH DIAERESIS
  25.256+0xCC	0x00CC	#	LATIN CAPITAL LETTER I WITH GRAVE
  25.257+0xCD	0x00CD	#	LATIN CAPITAL LETTER I WITH ACUTE
  25.258+0xCE	0x00CE	#	LATIN CAPITAL LETTER I WITH CIRCUMFLEX
  25.259+0xCF	0x00CF	#	LATIN CAPITAL LETTER I WITH DIAERESIS
  25.260+0xD0	0x00D0	#	LATIN CAPITAL LETTER ETH (Icelandic)
  25.261+0xD1	0x00D1	#	LATIN CAPITAL LETTER N WITH TILDE
  25.262+0xD2	0x00D2	#	LATIN CAPITAL LETTER O WITH GRAVE
  25.263+0xD3	0x00D3	#	LATIN CAPITAL LETTER O WITH ACUTE
  25.264+0xD4	0x00D4	#	LATIN CAPITAL LETTER O WITH CIRCUMFLEX
  25.265+0xD5	0x00D5	#	LATIN CAPITAL LETTER O WITH TILDE
  25.266+0xD6	0x00D6	#	LATIN CAPITAL LETTER O WITH DIAERESIS
  25.267+0xD7	0x00D7	#	MULTIPLICATION SIGN
  25.268+0xD8	0x00D8	#	LATIN CAPITAL LETTER O WITH STROKE
  25.269+0xD9	0x00D9	#	LATIN CAPITAL LETTER U WITH GRAVE
  25.270+0xDA	0x00DA	#	LATIN CAPITAL LETTER U WITH ACUTE
  25.271+0xDB	0x00DB	#	LATIN CAPITAL LETTER U WITH CIRCUMFLEX
  25.272+0xDC	0x00DC	#	LATIN CAPITAL LETTER U WITH DIAERESIS
  25.273+0xDD	0x00DD	#	LATIN CAPITAL LETTER Y WITH ACUTE
  25.274+0xDE	0x00DE	#	LATIN CAPITAL LETTER THORN (Icelandic)
  25.275+0xDF	0x00DF	#	LATIN SMALL LETTER SHARP S (German)
  25.276+0xE0	0x00E0	#	LATIN SMALL LETTER A WITH GRAVE
  25.277+0xE1	0x00E1	#	LATIN SMALL LETTER A WITH ACUTE
  25.278+0xE2	0x00E2	#	LATIN SMALL LETTER A WITH CIRCUMFLEX
  25.279+0xE3	0x00E3	#	LATIN SMALL LETTER A WITH TILDE
  25.280+0xE4	0x00E4	#	LATIN SMALL LETTER A WITH DIAERESIS
  25.281+0xE5	0x00E5	#	LATIN SMALL LETTER A WITH RING ABOVE
  25.282+0xE6	0x00E6	#	LATIN SMALL LETTER AE
  25.283+0xE7	0x00E7	#	LATIN SMALL LETTER C WITH CEDILLA
  25.284+0xE8	0x00E8	#	LATIN SMALL LETTER E WITH GRAVE
  25.285+0xE9	0x00E9	#	LATIN SMALL LETTER E WITH ACUTE
  25.286+0xEA	0x00EA	#	LATIN SMALL LETTER E WITH CIRCUMFLEX
  25.287+0xEB	0x00EB	#	LATIN SMALL LETTER E WITH DIAERESIS
  25.288+0xEC	0x00EC	#	LATIN SMALL LETTER I WITH GRAVE
  25.289+0xED	0x00ED	#	LATIN SMALL LETTER I WITH ACUTE
  25.290+0xEE	0x00EE	#	LATIN SMALL LETTER I WITH CIRCUMFLEX
  25.291+0xEF	0x00EF	#	LATIN SMALL LETTER I WITH DIAERESIS
  25.292+0xF0	0x00F0	#	LATIN SMALL LETTER ETH (Icelandic)
  25.293+0xF1	0x00F1	#	LATIN SMALL LETTER N WITH TILDE
  25.294+0xF2	0x00F2	#	LATIN SMALL LETTER O WITH GRAVE
  25.295+0xF3	0x00F3	#	LATIN SMALL LETTER O WITH ACUTE
  25.296+0xF4	0x00F4	#	LATIN SMALL LETTER O WITH CIRCUMFLEX
  25.297+0xF5	0x00F5	#	LATIN SMALL LETTER O WITH TILDE
  25.298+0xF6	0x00F6	#	LATIN SMALL LETTER O WITH DIAERESIS
  25.299+0xF7	0x00F7	#	DIVISION SIGN
  25.300+0xF8	0x00F8	#	LATIN SMALL LETTER O WITH STROKE
  25.301+0xF9	0x00F9	#	LATIN SMALL LETTER U WITH GRAVE
  25.302+0xFA	0x00FA	#	LATIN SMALL LETTER U WITH ACUTE
  25.303+0xFB	0x00FB	#	LATIN SMALL LETTER U WITH CIRCUMFLEX
  25.304+0xFC	0x00FC	#	LATIN SMALL LETTER U WITH DIAERESIS
  25.305+0xFD	0x00FD	#	LATIN SMALL LETTER Y WITH ACUTE
  25.306+0xFE	0x00FE	#	LATIN SMALL LETTER THORN (Icelandic)
  25.307+0xFF	0x00FF	#	LATIN SMALL LETTER Y WITH DIAERESIS
    26.1new file mode 100755
    26.2--- /dev/null
    26.3+++ b/sys/lib/antiword/8859-10.txt
    26.4@@ -0,0 +1,303 @@
    26.5+#
    26.6+#	Name:             ISO/IEC 8859-10:1998 to Unicode
    26.7+#	Unicode version:  3.0
    26.8+#	Table version:    1.1
    26.9+#	Table format:     Format A
   26.10+#	Date:             1999 October 11
   26.11+#	Authors:          Ken Whistler <kenw@sybase.com>
   26.12+#
   26.13+#	Copyright (c) 1999 Unicode, Inc.  All Rights reserved.
   26.14+#
   26.15+#	This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
   26.16+#	No claims are made as to fitness for any particular purpose.  No
   26.17+#	warranties of any kind are expressed or implied.  The recipient
   26.18+#	agrees to determine applicability of information provided.  If this
   26.19+#	file has been provided on optical media by Unicode, Inc., the sole
   26.20+#	remedy for any claim will be exchange of defective media within 90
   26.21+#	days of receipt.
   26.22+#
   26.23+#	Unicode, Inc. hereby grants the right to freely use the information
   26.24+#	supplied in this file in the creation of products supporting the
   26.25+#	Unicode Standard, and to make copies of this file in any form for
   26.26+#	internal or external distribution as long as this notice remains
   26.27+#	attached.
   26.28+#
   26.29+#	General notes:
   26.30+#
   26.31+#	This table contains the data the Unicode Consortium has on how
   26.32+#       ISO/IEC 8859-10:1998 characters map into Unicode.
   26.33+#
   26.34+#	Format:  Three tab-separated columns
   26.35+#		 Column #1 is the ISO/IEC 8859-10 code (in hex as 0xXX)
   26.36+#		 Column #2 is the Unicode (in hex as 0xXXXX)
   26.37+#		 Column #3 the Unicode name (follows a comment sign, '#')
   26.38+#
   26.39+#	The entries are in ISO/IEC 8859-10 order.
   26.40+#
   26.41+#	Version history
   26.42+#	1.0 version new.
   26.43+#       1.1 corrected mistake in mapping of 0xA4
   26.44+#
   26.45+#	Updated versions of this file may be found in:
   26.46+#		<ftp://ftp.unicode.org/Public/MAPPINGS/>
   26.47+#
   26.48+#	Any comments or problems, contact <errata@unicode.org>
   26.49+#	Please note that <errata@unicode.org> is an archival address;
   26.50+#	notices will be checked, but do not expect an immediate response.
   26.51+#
   26.52+0x00	0x0000	#	NULL
   26.53+0x01	0x0001	#	START OF HEADING
   26.54+0x02	0x0002	#	START OF TEXT
   26.55+0x03	0x0003	#	END OF TEXT
   26.56+0x04	0x0004	#	END OF TRANSMISSION
   26.57+0x05	0x0005	#	ENQUIRY
   26.58+0x06	0x0006	#	ACKNOWLEDGE
   26.59+0x07	0x0007	#	BELL
   26.60+0x08	0x0008	#	BACKSPACE
   26.61+0x09	0x0009	#	HORIZONTAL TABULATION
   26.62+0x0A	0x000A	#	LINE FEED
   26.63+0x0B	0x000B	#	VERTICAL TABULATION
   26.64+0x0C	0x000C	#	FORM FEED
   26.65+0x0D	0x000D	#	CARRIAGE RETURN
   26.66+0x0E	0x000E	#	SHIFT OUT
   26.67+0x0F	0x000F	#	SHIFT IN
   26.68+0x10	0x0010	#	DATA LINK ESCAPE
   26.69+0x11	0x0011	#	DEVICE CONTROL ONE
   26.70+0x12	0x0012	#	DEVICE CONTROL TWO
   26.71+0x13	0x0013	#	DEVICE CONTROL THREE
   26.72+0x14	0x0014	#	DEVICE CONTROL FOUR
   26.73+0x15	0x0015	#	NEGATIVE ACKNOWLEDGE
   26.74+0x16	0x0016	#	SYNCHRONOUS IDLE
   26.75+0x17	0x0017	#	END OF TRANSMISSION BLOCK
   26.76+0x18	0x0018	#	CANCEL
   26.77+0x19	0x0019	#	END OF MEDIUM
   26.78+0x1A	0x001A	#	SUBSTITUTE
   26.79+0x1B	0x001B	#	ESCAPE
   26.80+0x1C	0x001C	#	FILE SEPARATOR
   26.81+0x1D	0x001D	#	GROUP SEPARATOR
   26.82+0x1E	0x001E	#	RECORD SEPARATOR
   26.83+0x1F	0x001F	#	UNIT SEPARATOR
   26.84+0x20	0x0020	#	SPACE
   26.85+0x21	0x0021	#	EXCLAMATION MARK
   26.86+0x22	0x0022	#	QUOTATION MARK
   26.87+0x23	0x0023	#	NUMBER SIGN
   26.88+0x24	0x0024	#	DOLLAR SIGN
   26.89+0x25	0x0025	#	PERCENT SIGN
   26.90+0x26	0x0026	#	AMPERSAND
   26.91+0x27	0x0027	#	APOSTROPHE
   26.92+0x28	0x0028	#	LEFT PARENTHESIS
   26.93+0x29	0x0029	#	RIGHT PARENTHESIS
   26.94+0x2A	0x002A	#	ASTERISK
   26.95+0x2B	0x002B	#	PLUS SIGN
   26.96+0x2C	0x002C	#	COMMA
   26.97+0x2D	0x002D	#	HYPHEN-MINUS
   26.98+0x2E	0x002E	#	FULL STOP
   26.99+0x2F	0x002F	#	SOLIDUS
  26.100+0x30	0x0030	#	DIGIT ZERO
  26.101+0x31	0x0031	#	DIGIT ONE
  26.102+0x32	0x0032	#	DIGIT TWO
  26.103+0x33	0x0033	#	DIGIT THREE
  26.104+0x34	0x0034	#	DIGIT FOUR
  26.105+0x35	0x0035	#	DIGIT FIVE
  26.106+0x36	0x0036	#	DIGIT SIX
  26.107+0x37	0x0037	#	DIGIT SEVEN
  26.108+0x38	0x0038	#	DIGIT EIGHT
  26.109+0x39	0x0039	#	DIGIT NINE
  26.110+0x3A	0x003A	#	COLON
  26.111+0x3B	0x003B	#	SEMICOLON
  26.112+0x3C	0x003C	#	LESS-THAN SIGN
  26.113+0x3D	0x003D	#	EQUALS SIGN
  26.114+0x3E	0x003E	#	GREATER-THAN SIGN
  26.115+0x3F	0x003F	#	QUESTION MARK
  26.116+0x40	0x0040	#	COMMERCIAL AT
  26.117+0x41	0x0041	#	LATIN CAPITAL LETTER A
  26.118+0x42	0x0042	#	LATIN CAPITAL LETTER B
  26.119+0x43	0x0043	#	LATIN CAPITAL LETTER C
  26.120+0x44	0x0044	#	LATIN CAPITAL LETTER D
  26.121+0x45	0x0045	#	LATIN CAPITAL LETTER E
  26.122+0x46	0x0046	#	LATIN CAPITAL LETTER F
  26.123+0x47	0x0047	#	LATIN CAPITAL LETTER G
  26.124+0x48	0x0048	#	LATIN CAPITAL LETTER H
  26.125+0x49	0x0049	#	LATIN CAPITAL LETTER I
  26.126+0x4A	0x004A	#	LATIN CAPITAL LETTER J
  26.127+0x4B	0x004B	#	LATIN CAPITAL LETTER K
  26.128+0x4C	0x004C	#	LATIN CAPITAL LETTER L
  26.129+0x4D	0x004D	#	LATIN CAPITAL LETTER M
  26.130+0x4E	0x004E	#	LATIN CAPITAL LETTER N
  26.131+0x4F	0x004F	#	LATIN CAPITAL LETTER O
  26.132+0x50	0x0050	#	LATIN CAPITAL LETTER P
  26.133+0x51	0x0051	#	LATIN CAPITAL LETTER Q
  26.134+0x52	0x0052	#	LATIN CAPITAL LETTER R
  26.135+0x53	0x0053	#	LATIN CAPITAL LETTER S
  26.136+0x54	0x0054	#	LATIN CAPITAL LETTER T
  26.137+0x55	0x0055	#	LATIN CAPITAL LETTER U
  26.138+0x56	0x0056	#	LATIN CAPITAL LETTER V
  26.139+0x57	0x0057	#	LATIN CAPITAL LETTER W
  26.140+0x58	0x0058	#	LATIN CAPITAL LETTER X
  26.141+0x59	0x0059	#	LATIN CAPITAL LETTER Y
  26.142+0x5A	0x005A	#	LATIN CAPITAL LETTER Z
  26.143+0x5B	0x005B	#	LEFT SQUARE BRACKET
  26.144+0x5C	0x005C	#	REVERSE SOLIDUS
  26.145+0x5D	0x005D	#	RIGHT SQUARE BRACKET
  26.146+0x5E	0x005E	#	CIRCUMFLEX ACCENT
  26.147+0x5F	0x005F	#	LOW LINE
  26.148+0x60	0x0060	#	GRAVE ACCENT
  26.149+0x61	0x0061	#	LATIN SMALL LETTER A
  26.150+0x62	0x0062	#	LATIN SMALL LETTER B
  26.151+0x63	0x0063	#	LATIN SMALL LETTER C
  26.152+0x64	0x0064	#	LATIN SMALL LETTER D
  26.153+0x65	0x0065	#	LATIN SMALL LETTER E
  26.154+0x66	0x0066	#	LATIN SMALL LETTER F
  26.155+0x67	0x0067	#	LATIN SMALL LETTER G
  26.156+0x68	0x0068	#	LATIN SMALL LETTER H
  26.157+0x69	0x0069	#	LATIN SMALL LETTER I
  26.158+0x6A	0x006A	#	LATIN SMALL LETTER J
  26.159+0x6B	0x006B	#	LATIN SMALL LETTER K
  26.160+0x6C	0x006C	#	LATIN SMALL LETTER L
  26.161+0x6D	0x006D	#	LATIN SMALL LETTER M
  26.162+0x6E	0x006E	#	LATIN SMALL LETTER N
  26.163+0x6F	0x006F	#	LATIN SMALL LETTER O
  26.164+0x70	0x0070	#	LATIN SMALL LETTER P
  26.165+0x71	0x0071	#	LATIN SMALL LETTER Q
  26.166+0x72	0x0072	#	LATIN SMALL LETTER R
  26.167+0x73	0x0073	#	LATIN SMALL LETTER S
  26.168+0x74	0x0074	#	LATIN SMALL LETTER T
  26.169+0x75	0x0075	#	LATIN SMALL LETTER U
  26.170+0x76	0x0076	#	LATIN SMALL LETTER V
  26.171+0x77	0x0077	#	LATIN SMALL LETTER W
  26.172+0x78	0x0078	#	LATIN SMALL LETTER X
  26.173+0x79	0x0079	#	LATIN SMALL LETTER Y
  26.174+0x7A	0x007A	#	LATIN SMALL LETTER Z
  26.175+0x7B	0x007B	#	LEFT CURLY BRACKET
  26.176+0x7C	0x007C	#	VERTICAL LINE
  26.177+0x7D	0x007D	#	RIGHT CURLY BRACKET
  26.178+0x7E	0x007E	#	TILDE
  26.179+0x7F	0x007F	#	DELETE
  26.180+0x80	0x0080	#	<control>
  26.181+0x81	0x0081	#	<control>
  26.182+0x82	0x0082	#	<control>
  26.183+0x83	0x0083	#	<control>
  26.184+0x84	0x0084	#	<control>
  26.185+0x85	0x0085	#	<control>
  26.186+0x86	0x0086	#	<control>
  26.187+0x87	0x0087	#	<control>
  26.188+0x88	0x0088	#	<control>
  26.189+0x89	0x0089	#	<control>
  26.190+0x8A	0x008A	#	<control>
  26.191+0x8B	0x008B	#	<control>
  26.192+0x8C	0x008C	#	<control>
  26.193+0x8D	0x008D	#	<control>
  26.194+0x8E	0x008E	#	<control>
  26.195+0x8F	0x008F	#	<control>
  26.196+0x90	0x0090	#	<control>
  26.197+0x91	0x0091	#	<control>
  26.198+0x92	0x0092	#	<control>
  26.199+0x93	0x0093	#	<control>
  26.200+0x94	0x0094	#	<control>
  26.201+0x95	0x0095	#	<control>
  26.202+0x96	0x0096	#	<control>
  26.203+0x97	0x0097	#	<control>
  26.204+0x98	0x0098	#	<control>
  26.205+0x99	0x0099	#	<control>
  26.206+0x9A	0x009A	#	<control>
  26.207+0x9B	0x009B	#	<control>
  26.208+0x9C	0x009C	#	<control>
  26.209+0x9D	0x009D	#	<control>
  26.210+0x9E	0x009E	#	<control>
  26.211+0x9F	0x009F	#	<control>
  26.212+0xA0	0x00A0	#	NO-BREAK SPACE
  26.213+0xA1	0x0104	#	LATIN CAPITAL LETTER A WITH OGONEK
  26.214+0xA2	0x0112	#	LATIN CAPITAL LETTER E WITH MACRON
  26.215+0xA3	0x0122	#	LATIN CAPITAL LETTER G WITH CEDILLA
  26.216+0xA4	0x012A	#	LATIN CAPITAL LETTER I WITH MACRON
  26.217+0xA5	0x0128	#	LATIN CAPITAL LETTER I WITH TILDE
  26.218+0xA6	0x0136	#	LATIN CAPITAL LETTER K WITH CEDILLA
  26.219+0xA7	0x00A7	#	SECTION SIGN
  26.220+0xA8	0x013B	#	LATIN CAPITAL LETTER L WITH CEDILLA
  26.221+0xA9	0x0110	#	LATIN CAPITAL LETTER D WITH STROKE
  26.222+0xAA	0x0160	#	LATIN CAPITAL LETTER S WITH CARON
  26.223+0xAB	0x0166	#	LATIN CAPITAL LETTER T WITH STROKE
  26.224+0xAC	0x017D	#	LATIN CAPITAL LETTER Z WITH CARON
  26.225+0xAD	0x00AD	#	SOFT HYPHEN
  26.226+0xAE	0x016A	#	LATIN CAPITAL LETTER U WITH MACRON
  26.227+0xAF	0x014A	#	LATIN CAPITAL LETTER ENG
  26.228+0xB0	0x00B0	#	DEGREE SIGN
  26.229+0xB1	0x0105	#	LATIN SMALL LETTER A WITH OGONEK
  26.230+0xB2	0x0113	#	LATIN SMALL LETTER E WITH MACRON
  26.231+0xB3	0x0123	#	LATIN SMALL LETTER G WITH CEDILLA
  26.232+0xB4	0x012B	#	LATIN SMALL LETTER I WITH MACRON
  26.233+0xB5	0x0129	#	LATIN SMALL LETTER I WITH TILDE
  26.234+0xB6	0x0137	#	LATIN SMALL LETTER K WITH CEDILLA
  26.235+0xB7	0x00B7	#	MIDDLE DOT
  26.236+0xB8	0x013C	#	LATIN SMALL LETTER L WITH CEDILLA
  26.237+0xB9	0x0111	#	LATIN SMALL LETTER D WITH STROKE
  26.238+0xBA	0x0161	#	LATIN SMALL LETTER S WITH CARON
  26.239+0xBB	0x0167	#	LATIN SMALL LETTER T WITH STROKE
  26.240+0xBC	0x017E	#	LATIN SMALL LETTER Z WITH CARON
  26.241+0xBD	0x2015	#	HORIZONTAL BAR
  26.242+0xBE	0x016B	#	LATIN SMALL LETTER U WITH MACRON
  26.243+0xBF	0x014B	#	LATIN SMALL LETTER ENG
  26.244+0xC0	0x0100	#	LATIN CAPITAL LETTER A WITH MACRON
  26.245+0xC1	0x00C1	#	LATIN CAPITAL LETTER A WITH ACUTE
  26.246+0xC2	0x00C2	#	LATIN CAPITAL LETTER A WITH CIRCUMFLEX
  26.247+0xC3	0x00C3	#	LATIN CAPITAL LETTER A WITH TILDE
  26.248+0xC4	0x00C4	#	LATIN CAPITAL LETTER A WITH DIAERESIS
  26.249+0xC5	0x00C5	#	LATIN CAPITAL LETTER A WITH RING ABOVE
  26.250+0xC6	0x00C6	#	LATIN CAPITAL LETTER AE
  26.251+0xC7	0x012E	#	LATIN CAPITAL LETTER I WITH OGONEK
  26.252+0xC8	0x010C	#	LATIN CAPITAL LETTER C WITH CARON
  26.253+0xC9	0x00C9	#	LATIN CAPITAL LETTER E WITH ACUTE
  26.254+0xCA	0x0118	#	LATIN CAPITAL LETTER E WITH OGONEK
  26.255+0xCB	0x00CB	#	LATIN CAPITAL LETTER E WITH DIAERESIS
  26.256+0xCC	0x0116	#	LATIN CAPITAL LETTER E WITH DOT ABOVE
  26.257+0xCD	0x00CD	#	LATIN CAPITAL LETTER I WITH ACUTE
  26.258+0xCE	0x00CE	#	LATIN CAPITAL LETTER I WITH CIRCUMFLEX
  26.259+0xCF	0x00CF	#	LATIN CAPITAL LETTER I WITH DIAERESIS
  26.260+0xD0	0x00D0	#	LATIN CAPITAL LETTER ETH (Icelandic)
  26.261+0xD1	0x0145	#	LATIN CAPITAL LETTER N WITH CEDILLA
  26.262+0xD2	0x014C	#	LATIN CAPITAL LETTER O WITH MACRON
  26.263+0xD3	0x00D3	#	LATIN CAPITAL LETTER O WITH ACUTE
  26.264+0xD4	0x00D4	#	LATIN CAPITAL LETTER O WITH CIRCUMFLEX
  26.265+0xD5	0x00D5	#	LATIN CAPITAL LETTER O WITH TILDE
  26.266+0xD6	0x00D6	#	LATIN CAPITAL LETTER O WITH DIAERESIS
  26.267+0xD7	0x0168	#	LATIN CAPITAL LETTER U WITH TILDE
  26.268+0xD8	0x00D8	#	LATIN CAPITAL LETTER O WITH STROKE
  26.269+0xD9	0x0172	#	LATIN CAPITAL LETTER U WITH OGONEK
  26.270+0xDA	0x00DA	#	LATIN CAPITAL LETTER U WITH ACUTE
  26.271+0xDB	0x00DB	#	LATIN CAPITAL LETTER U WITH CIRCUMFLEX
  26.272+0xDC	0x00DC	#	LATIN CAPITAL LETTER U WITH DIAERESIS
  26.273+0xDD	0x00DD	#	LATIN CAPITAL LETTER Y WITH ACUTE
  26.274+0xDE	0x00DE	#	LATIN CAPITAL LETTER THORN (Icelandic)
  26.275+0xDF	0x00DF	#	LATIN SMALL LETTER SHARP S (German)
  26.276+0xE0	0x0101	#	LATIN SMALL LETTER A WITH MACRON
  26.277+0xE1	0x00E1	#	LATIN SMALL LETTER A WITH ACUTE
  26.278+0xE2	0x00E2	#	LATIN SMALL LETTER A WITH CIRCUMFLEX
  26.279+0xE3	0x00E3	#	LATIN SMALL LETTER A WITH TILDE
  26.280+0xE4	0x00E4	#	LATIN SMALL LETTER A WITH DIAERESIS
  26.281+0xE5	0x00E5	#	LATIN SMALL LETTER A WITH RING ABOVE
  26.282+0xE6	0x00E6	#	LATIN SMALL LETTER AE
  26.283+0xE7	0x012F	#	LATIN SMALL LETTER I WITH OGONEK
  26.284+0xE8	0x010D	#	LATIN SMALL LETTER C WITH CARON
  26.285+0xE9	0x00E9	#	LATIN SMALL LETTER E WITH ACUTE
  26.286+0xEA	0x0119	#	LATIN SMALL LETTER E WITH OGONEK
  26.287+0xEB	0x00EB	#	LATIN SMALL LETTER E WITH DIAERESIS
  26.288+0xEC	0x0117	#	LATIN SMALL LETTER E WITH DOT ABOVE
  26.289+0xED	0x00ED	#	LATIN SMALL LETTER I WITH ACUTE
  26.290+0xEE	0x00EE	#	LATIN SMALL LETTER I WITH CIRCUMFLEX
  26.291+0xEF	0x00EF	#	LATIN SMALL LETTER I WITH DIAERESIS
  26.292+0xF0	0x00F0	#	LATIN SMALL LETTER ETH (Icelandic)
  26.293+0xF1	0x0146	#	LATIN SMALL LETTER N WITH CEDILLA
  26.294+0xF2	0x014D	#	LATIN SMALL LETTER O WITH MACRON
  26.295+0xF3	0x00F3	#	LATIN SMALL LETTER O WITH ACUTE
  26.296+0xF4	0x00F4	#	LATIN SMALL LETTER O WITH CIRCUMFLEX
  26.297+0xF5	0x00F5	#	LATIN SMALL LETTER O WITH TILDE
  26.298+0xF6	0x00F6	#	LATIN SMALL LETTER O WITH DIAERESIS
  26.299+0xF7	0x0169	#	LATIN SMALL LETTER U WITH TILDE
  26.300+0xF8	0x00F8	#	LATIN SMALL LETTER O WITH STROKE
  26.301+0xF9	0x0173	#	LATIN SMALL LETTER U WITH OGONEK
  26.302+0xFA	0x00FA	#	LATIN SMALL LETTER U WITH ACUTE
  26.303+0xFB	0x00FB	#	LATIN SMALL LETTER U WITH CIRCUMFLEX
  26.304+0xFC	0x00FC	#	LATIN SMALL LETTER U WITH DIAERESIS
  26.305+0xFD	0x00FD	#	LATIN SMALL LETTER Y WITH ACUTE
  26.306+0xFE	0x00FE	#	LATIN SMALL LETTER THORN (Icelandic)
  26.307+0xFF	0x0138	#	LATIN SMALL LETTER KRA
    27.1new file mode 100755
    27.2--- /dev/null
    27.3+++ b/sys/lib/antiword/8859-13.txt
    27.4@@ -0,0 +1,299 @@
    27.5+#
    27.6+#	Name:             ISO/IEC 8859-13:1998  to Unicode
    27.7+#	Unicode version:  3.0
    27.8+#	Table version:    1.0
    27.9+#	Table format:     Format A
   27.10+#	Date:             1999 July 27
   27.11+#	Authors:          Ken Whistler <kenw@sybase.com>
   27.12+#
   27.13+#	Copyright (c) 1998 - 1999 Unicode, Inc.  All Rights reserved.
   27.14+#
   27.15+#	This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
   27.16+#	No claims are made as to fitness for any particular purpose.  No
   27.17+#	warranties of any kind are expressed or implied.  The recipient
   27.18+#	agrees to determine applicability of information provided.  If this
   27.19+#	file has been provided on optical media by Unicode, Inc., the sole
   27.20+#	remedy for any claim will be exchange of defective media within 90
   27.21+#	days of receipt.
   27.22+#
   27.23+#	Unicode, Inc. hereby grants the right to freely use the information
   27.24+#	supplied in this file in the creation of products supporting the
   27.25+#	Unicode Standard, and to make copies of this file in any form for
   27.26+#	internal or external distribution as long as this notice remains
   27.27+#	attached.
   27.28+#
   27.29+#	General notes:
   27.30+#
   27.31+#	This table contains the data the Unicode Consortium has on how
   27.32+#       ISO/IEC 8859-13:1998 characters map into Unicode.
   27.33+#
   27.34+#	Format:  Three tab-separated columns
   27.35+#		 Column #1 is the ISO/IEC 8859-13 code (in hex as 0xXX)
   27.36+#		 Column #2 is the Unicode (in hex as 0xXXXX)
   27.37+#		 Column #3 the Unicode name (follows a comment sign, '#')
   27.38+#
   27.39+#	The entries are in ISO/IEC 8859-13 order.
   27.40+#
   27.41+#	Updated versions of this file may be found in:
   27.42+#		<ftp://ftp.unicode.org/Public/MAPPINGS/>
   27.43+#
   27.44+#	Any comments or problems, contact <errata@unicode.org>
   27.45+#	Please note that <errata@unicode.org> is an archival address;
   27.46+#	notices will be checked, but do not expect an immediate response.
   27.47+#
   27.48+0x00	0x0000	#	NULL
   27.49+0x01	0x0001	#	START OF HEADING
   27.50+0x02	0x0002	#	START OF TEXT
   27.51+0x03	0x0003	#	END OF TEXT
   27.52+0x04	0x0004	#	END OF TRANSMISSION
   27.53+0x05	0x0005	#	ENQUIRY
   27.54+0x06	0x0006	#	ACKNOWLEDGE
   27.55+0x07	0x0007	#	BELL
   27.56+0x08	0x0008	#	BACKSPACE
   27.57+0x09	0x0009	#	HORIZONTAL TABULATION
   27.58+0x0A	0x000A	#	LINE FEED
   27.59+0x0B	0x000B	#	VERTICAL TABULATION
   27.60+0x0C	0x000C	#	FORM FEED
   27.61+0x0D	0x000D	#	CARRIAGE RETURN
   27.62+0x0E	0x000E	#	SHIFT OUT
   27.63+0x0F	0x000F	#	SHIFT IN
   27.64+0x10	0x0010	#	DATA LINK ESCAPE
   27.65+0x11	0x0011	#	DEVICE CONTROL ONE
   27.66+0x12	0x0012	#	DEVICE CONTROL TWO
   27.67+0x13	0x0013	#	DEVICE CONTROL THREE
   27.68+0x14	0x0014	#	DEVICE CONTROL FOUR
   27.69+0x15	0x0015	#	NEGATIVE ACKNOWLEDGE
   27.70+0x16	0x0016	#	SYNCHRONOUS IDLE
   27.71+0x17	0x0017	#	END OF TRANSMISSION BLOCK
   27.72+0x18	0x0018	#	CANCEL
   27.73+0x19	0x0019	#	END OF MEDIUM
   27.74+0x1A	0x001A	#	SUBSTITUTE
   27.75+0x1B	0x001B	#	ESCAPE
   27.76+0x1C	0x001C	#	FILE SEPARATOR
   27.77+0x1D	0x001D	#	GROUP SEPARATOR
   27.78+0x1E	0x001E	#	RECORD SEPARATOR
   27.79+0x1F	0x001F	#	UNIT SEPARATOR
   27.80+0x20	0x0020	#	SPACE
   27.81+0x21	0x0021	#	EXCLAMATION MARK
   27.82+0x22	0x0022	#	QUOTATION MARK
   27.83+0x23	0x0023	#	NUMBER SIGN
   27.84+0x24	0x0024	#	DOLLAR SIGN
   27.85+0x25	0x0025	#	PERCENT SIGN
   27.86+0x26	0x0026	#	AMPERSAND
   27.87+0x27	0x0027	#	APOSTROPHE
   27.88+0x28	0x0028	#	LEFT PARENTHESIS
   27.89+0x29	0x0029	#	RIGHT PARENTHESIS
   27.90+0x2A	0x002A	#	ASTERISK
   27.91+0x2B	0x002B	#	PLUS SIGN
   27.92+0x2C	0x002C	#	COMMA
   27.93+0x2D	0x002D	#	HYPHEN-MINUS
   27.94+0x2E	0x002E	#	FULL STOP
   27.95+0x2F	0x002F	#	SOLIDUS
   27.96+0x30	0x0030	#	DIGIT ZERO
   27.97+0x31	0x0031	#	DIGIT ONE
   27.98+0x32	0x0032	#	DIGIT TWO
   27.99+0x33	0x0033	#	DIGIT THREE
  27.100+0x34	0x0034	#	DIGIT FOUR
  27.101+0x35	0x0035	#	DIGIT FIVE
  27.102+0x36	0x0036	#	DIGIT SIX
  27.103+0x37	0x0037	#	DIGIT SEVEN
  27.104+0x38	0x0038	#	DIGIT EIGHT
  27.105+0x39	0x0039	#	DIGIT NINE
  27.106+0x3A	0x003A	#	COLON
  27.107+0x3B	0x003B	#	SEMICOLON
  27.108+0x3C	0x003C	#	LESS-THAN SIGN
  27.109+0x3D	0x003D	#	EQUALS SIGN
  27.110+0x3E	0x003E	#	GREATER-THAN SIGN
  27.111+0x3F	0x003F	#	QUESTION MARK
  27.112+0x40	0x0040	#	COMMERCIAL AT
  27.113+0x41	0x0041	#	LATIN CAPITAL LETTER A
  27.114+0x42	0x0042	#	LATIN CAPITAL LETTER B
  27.115+0x43	0x0043	#	LATIN CAPITAL LETTER C
  27.116+0x44	0x0044	#	LATIN CAPITAL LETTER D
  27.117+0x45	0x0045	#	LATIN CAPITAL LETTER E
  27.118+0x46	0x0046	#	LATIN CAPITAL LETTER F
  27.119+0x47	0x0047	#	LATIN CAPITAL LETTER G
  27.120+0x48	0x0048	#	LATIN CAPITAL LETTER H
  27.121+0x49	0x0049	#	LATIN CAPITAL LETTER I
  27.122+0x4A	0x004A	#	LATIN CAPITAL LETTER J
  27.123+0x4B	0x004B	#	LATIN CAPITAL LETTER K
  27.124+0x4C	0x004C	#	LATIN CAPITAL LETTER L
  27.125+0x4D	0x004D	#	LATIN CAPITAL LETTER M
  27.126+0x4E	0x004E	#	LATIN CAPITAL LETTER N
  27.127+0x4F	0x004F	#	LATIN CAPITAL LETTER O
  27.128+0x50	0x0050	#	LATIN CAPITAL LETTER P
  27.129+0x51	0x0051	#	LATIN CAPITAL LETTER Q
  27.130+0x52	0x0052	#	LATIN CAPITAL LETTER R
  27.131+0x53	0x0053	#	LATIN CAPITAL LETTER S
  27.132+0x54	0x0054	#	LATIN CAPITAL LETTER T
  27.133+0x55	0x0055	#	LATIN CAPITAL LETTER U
  27.134+0x56	0x0056	#	LATIN CAPITAL LETTER V
  27.135+0x57	0x0057	#	LATIN CAPITAL LETTER W
  27.136+0x58	0x0058	#	LATIN CAPITAL LETTER X
  27.137+0x59	0x0059	#	LATIN CAPITAL LETTER Y
  27.138+0x5A	0x005A	#	LATIN CAPITAL LETTER Z
  27.139+0x5B	0x005B	#	LEFT SQUARE BRACKET
  27.140+0x5C	0x005C	#	REVERSE SOLIDUS
  27.141+0x5D	0x005D	#	RIGHT SQUARE BRACKET
  27.142+0x5E	0x005E	#	CIRCUMFLEX ACCENT
  27.143+0x5F	0x005F	#	LOW LINE
  27.144+0x60	0x0060	#	GRAVE ACCENT
  27.145+0x61	0x0061	#	LATIN SMALL LETTER A
  27.146+0x62	0x0062	#	LATIN SMALL LETTER B
  27.147+0x63	0x0063	#	LATIN SMALL LETTER C
  27.148+0x64	0x0064	#	LATIN SMALL LETTER D
  27.149+0x65	0x0065	#	LATIN SMALL LETTER E
  27.150+0x66	0x0066	#	LATIN SMALL LETTER F
  27.151+0x67	0x0067	#	LATIN SMALL LETTER G
  27.152+0x68	0x0068	#	LATIN SMALL LETTER H
  27.153+0x69	0x0069	#	LATIN SMALL LETTER I
  27.154+0x6A	0x006A	#	LATIN SMALL LETTER J
  27.155+0x6B	0x006B	#	LATIN SMALL LETTER K
  27.156+0x6C	0x006C	#	LATIN SMALL LETTER L
  27.157+0x6D	0x006D	#	LATIN SMALL LETTER M
  27.158+0x6E	0x006E	#	LATIN SMALL LETTER N
  27.159+0x6F	0x006F	#	LATIN SMALL LETTER O
  27.160+0x70	0x0070	#	LATIN SMALL LETTER P
  27.161+0x71	0x0071	#	LATIN SMALL LETTER Q
  27.162+0x72	0x0072	#	LATIN SMALL LETTER R
  27.163+0x73	0x0073	#	LATIN SMALL LETTER S
  27.164+0x74	0x0074	#	LATIN SMALL LETTER T
  27.165+0x75	0x0075	#	LATIN SMALL LETTER U
  27.166+0x76	0x0076	#	LATIN SMALL LETTER V
  27.167+0x77	0x0077	#	LATIN SMALL LETTER W
  27.168+0x78	0x0078	#	LATIN SMALL LETTER X
  27.169+0x79	0x0079	#	LATIN SMALL LETTER Y
  27.170+0x7A	0x007A	#	LATIN SMALL LETTER Z
  27.171+0x7B	0x007B	#	LEFT CURLY BRACKET
  27.172+0x7C	0x007C	#	VERTICAL LINE
  27.173+0x7D	0x007D	#	RIGHT CURLY BRACKET
  27.174+0x7E	0x007E	#	TILDE
  27.175+0x7F	0x007F	#	DELETE
  27.176+0x80	0x0080	#	<control>
  27.177+0x81	0x0081	#	<control>
  27.178+0x82	0x0082	#	<control>
  27.179+0x83	0x0083	#	<control>
  27.180+0x84	0x0084	#	<control>
  27.181+0x85	0x0085	#	<control>
  27.182+0x86	0x0086	#	<control>
  27.183+0x87	0x0087	#	<control>
  27.184+0x88	0x0088	#	<control>
  27.185+0x89	0x0089	#	<control>
  27.186+0x8A	0x008A	#	<control>
  27.187+0x8B	0x008B	#	<control>
  27.188+0x8C	0x008C	#	<control>
  27.189+0x8D	0x008D	#	<control>
  27.190+0x8E	0x008E	#	<control>
  27.191+0x8F	0x008F	#	<control>
  27.192+0x90	0x0090	#	<control>
  27.193+0x91	0x0091	#	<control>
  27.194+0x92	0x0092	#	<control>
  27.195+0x93	0x0093	#	<control>
  27.196+0x94	0x0094	#	<control>
  27.197+0x95	0x0095	#	<control>
  27.198+0x96	0x0096	#	<control>
  27.199+0x97	0x0097	#	<control>
  27.200+0x98	0x0098	#	<control>
  27.201+0x99	0x0099	#	<control>
  27.202+0x9A	0x009A	#	<control>
  27.203+0x9B	0x009B	#	<control>
  27.204+0x9C	0x009C	#	<control>
  27.205+0x9D	0x009D	#	<control>
  27.206+0x9E	0x009E	#	<control>
  27.207+0x9F	0x009F	#	<control>
  27.208+0xA0	0x00A0	#	NO-BREAK SPACE
  27.209+0xA1	0x201D	#	RIGHT DOUBLE QUOTATION MARK
  27.210+0xA2	0x00A2	#	CENT SIGN
  27.211+0xA3	0x00A3	#	POUND SIGN
  27.212+0xA4	0x00A4	#	CURRENCY SIGN
  27.213+0xA5	0x201E	#	DOUBLE LOW-9 QUOTATION MARK
  27.214+0xA6	0x00A6	#	BROKEN BAR
  27.215+0xA7	0x00A7	#	SECTION SIGN
  27.216+0xA8	0x00D8	#	LATIN CAPITAL LETTER O WITH STROKE
  27.217+0xA9	0x00A9	#	COPYRIGHT SIGN
  27.218+0xAA	0x0156	#	LATIN CAPITAL LETTER R WITH CEDILLA
  27.219+0xAB	0x00AB	#	LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
  27.220+0xAC	0x00AC	#	NOT SIGN
  27.221+0xAD	0x00AD	#	SOFT HYPHEN
  27.222+0xAE	0x00AE	#	REGISTERED SIGN
  27.223+0xAF	0x00C6	#	LATIN CAPITAL LETTER AE
  27.224+0xB0	0x00B0	#	DEGREE SIGN
  27.225+0xB1	0x00B1	#	PLUS-MINUS SIGN
  27.226+0xB2	0x00B2	#	SUPERSCRIPT TWO
  27.227+0xB3	0x00B3	#	SUPERSCRIPT THREE
  27.228+0xB4	0x201C	#	LEFT DOUBLE QUOTATION MARK
  27.229+0xB5	0x00B5	#	MICRO SIGN
  27.230+0xB6	0x00B6	#	PILCROW SIGN
  27.231+0xB7	0x00B7	#	MIDDLE DOT
  27.232+0xB8	0x00F8	#	LATIN SMALL LETTER O WITH STROKE
  27.233+0xB9	0x00B9	#	SUPERSCRIPT ONE
  27.234+0xBA	0x0157	#	LATIN SMALL LETTER R WITH CEDILLA
  27.235+0xBB	0x00BB	#	RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
  27.236+0xBC	0x00BC	#	VULGAR FRACTION ONE QUARTER
  27.237+0xBD	0x00BD	#	VULGAR FRACTION ONE HALF
  27.238+0xBE	0x00BE	#	VULGAR FRACTION THREE QUARTERS
  27.239+0xBF	0x00E6	#	LATIN SMALL LETTER AE
  27.240+0xC0	0x0104	#	LATIN CAPITAL LETTER A WITH OGONEK
  27.241+0xC1	0x012E	#	LATIN CAPITAL LETTER I WITH OGONEK
  27.242+0xC2	0x0100	#	LATIN CAPITAL LETTER A WITH MACRON
  27.243+0xC3	0x0106	#	LATIN CAPITAL LETTER C WITH ACUTE
  27.244+0xC4	0x00C4	#	LATIN CAPITAL LETTER A WITH DIAERESIS
  27.245+0xC5	0x00C5	#	LATIN CAPITAL LETTER A WITH RING ABOVE
  27.246+0xC6	0x0118	#	LATIN CAPITAL LETTER E WITH OGONEK
  27.247+0xC7	0x0112	#	LATIN CAPITAL LETTER E WITH MACRON
  27.248+0xC8	0x010C	#	LATIN CAPITAL LETTER C WITH CARON
  27.249+0xC9	0x00C9	#	LATIN CAPITAL LETTER E WITH ACUTE
  27.250+0xCA	0x0179	#	LATIN CAPITAL LETTER Z WITH ACUTE
  27.251+0xCB	0x0116	#	LATIN CAPITAL LETTER E WITH DOT ABOVE
  27.252+0xCC	0x0122	#	LATIN CAPITAL LETTER G WITH CEDILLA
  27.253+0xCD	0x0136	#	LATIN CAPITAL LETTER K WITH CEDILLA
  27.254+0xCE	0x012A	#	LATIN CAPITAL LETTER I WITH MACRON
  27.255+0xCF	0x013B	#	LATIN CAPITAL LETTER L WITH CEDILLA
  27.256+0xD0	0x0160	#	LATIN CAPITAL LETTER S WITH CARON
  27.257+0xD1	0x0143	#	LATIN CAPITAL LETTER N WITH ACUTE
  27.258+0xD2	0x0145	#	LATIN CAPITAL LETTER N WITH CEDILLA
  27.259+0xD3	0x00D3	#	LATIN CAPITAL LETTER O WITH ACUTE
  27.260+0xD4	0x014C	#	LATIN CAPITAL LETTER O WITH MACRON
  27.261+0xD5	0x00D5	#	LATIN CAPITAL LETTER O WITH TILDE
  27.262+0xD6	0x00D6	#	LATIN CAPITAL LETTER O WITH DIAERESIS
  27.263+0xD7	0x00D7	#	MULTIPLICATION SIGN
  27.264+0xD8	0x0172	#	LATIN CAPITAL LETTER U WITH OGONEK
  27.265+0xD9	0x0141	#	LATIN CAPITAL LETTER L WITH STROKE
  27.266+0xDA	0x015A	#	LATIN CAPITAL LETTER S WITH ACUTE
  27.267+0xDB	0x016A	#	LATIN CAPITAL LETTER U WITH MACRON
  27.268+0xDC	0x00DC	#	LATIN CAPITAL LETTER U WITH DIAERESIS
  27.269+0xDD	0x017B	#	LATIN CAPITAL LETTER Z WITH DOT ABOVE
  27.270+0xDE	0x017D	#	LATIN CAPITAL LETTER Z WITH CARON
  27.271+0xDF	0x00DF	#	LATIN SMALL LETTER SHARP S (German)
  27.272+0xE0	0x0105	#	LATIN SMALL LETTER A WITH OGONEK
  27.273+0xE1	0x012F	#	LATIN SMALL LETTER I WITH OGONEK
  27.274+0xE2	0x0101	#	LATIN SMALL LETTER A WITH MACRON
  27.275+0xE3	0x0107	#	LATIN SMALL LETTER C WITH ACUTE
  27.276+0xE4	0x00E4	#	LATIN SMALL LETTER A WITH DIAERESIS
  27.277+0xE5	0x00E5	#	LATIN SMALL LETTER A WITH RING ABOVE
  27.278+0xE6	0x0119	#	LATIN SMALL LETTER E WITH OGONEK
  27.279+0xE7	0x0113	#	LATIN SMALL LETTER E WITH MACRON
  27.280+0xE8	0x010D	#	LATIN SMALL LETTER C WITH CARON
  27.281+0xE9	0x00E9	#	LATIN SMALL LETTER E WITH ACUTE
  27.282+0xEA	0x017A	#	LATIN SMALL LETTER Z WITH ACUTE
  27.283+0xEB	0x0117	#	LATIN SMALL LETTER E WITH DOT ABOVE
  27.284+0xEC	0x0123	#	LATIN SMALL LETTER G WITH CEDILLA
  27.285+0xED	0x0137	#	LATIN SMALL LETTER K WITH CEDILLA
  27.286+0xEE	0x012B	#	LATIN SMALL LETTER I WITH MACRON
  27.287+0xEF	0x013C	#	LATIN SMALL LETTER L WITH CEDILLA
  27.288+0xF0	0x0161	#	LATIN SMALL LETTER S WITH CARON
  27.289+0xF1	0x0144	#	LATIN SMALL LETTER N WITH ACUTE
  27.290+0xF2	0x0146	#	LATIN SMALL LETTER N WITH CEDILLA
  27.291+0xF3	0x00F3	#	LATIN SMALL LETTER O WITH ACUTE
  27.292+0xF4	0x014D	#	LATIN SMALL LETTER O WITH MACRON
  27.293+0xF5	0x00F5	#	LATIN SMALL LETTER O WITH TILDE
  27.294+0xF6	0x00F6	#	LATIN SMALL LETTER O WITH DIAERESIS
  27.295+0xF7	0x00F7	#	DIVISION SIGN
  27.296+0xF8	0x0173	#	LATIN SMALL LETTER U WITH OGONEK
  27.297+0xF9	0x0142	#	LATIN SMALL LETTER L WITH STROKE
  27.298+0xFA	0x015B	#	LATIN SMALL LETTER S WITH ACUTE
  27.299+0xFB	0x016B	#	LATIN SMALL LETTER U WITH MACRON
  27.300+0xFC	0x00FC	#	LATIN SMALL LETTER U WITH DIAERESIS
  27.301+0xFD	0x017C	#	LATIN SMALL LETTER Z WITH DOT ABOVE
  27.302+0xFE	0x017E	#	LATIN SMALL LETTER Z WITH CARON
  27.303+0xFF	0x2019	#	RIGHT SINGLE QUOTATION MARK
    28.1new file mode 100755
    28.2--- /dev/null
    28.3+++ b/sys/lib/antiword/8859-14.txt
    28.4@@ -0,0 +1,301 @@
    28.5+#
    28.6+#	Name:             ISO/IEC 8859-14:1998 to Unicode
    28.7+#	Unicode version:  3.0
    28.8+#	Table version:    1.0
    28.9+#	Table format:     Format A
   28.10+#	Date:             1999 July 27
   28.11+#	Authors:          Markus Kuhn <mkuhn@acm.org>
   28.12+#			  Ken Whistler <kenw@sybase.com>
   28.13+#
   28.14+#	Copyright (c) 1998 - 1999 Unicode, Inc.  All Rights reserved.
   28.15+#
   28.16+#	This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
   28.17+#	No claims are made as to fitness for any particular purpose.  No
   28.18+#	warranties of any kind are expressed or implied.  The recipient
   28.19+#	agrees to determine applicability of information provided.  If this
   28.20+#	file has been provided on optical media by Unicode, Inc., the sole
   28.21+#	remedy for any claim will be exchange of defective media within 90
   28.22+#	days of receipt.
   28.23+#
   28.24+#	Unicode, Inc. hereby grants the right to freely use the information
   28.25+#	supplied in this file in the creation of products supporting the
   28.26+#	Unicode Standard, and to make copies of this file in any form for
   28.27+#	internal or external distribution as long as this notice remains
   28.28+#	attached.
   28.29+#
   28.30+#	General notes:
   28.31+#
   28.32+#	This table contains the data the Unicode Consortium has on how
   28.33+#       ISO/IEC 8859-14:1998 characters map into Unicode.
   28.34+#
   28.35+#	Format:  Three tab-separated columns
   28.36+#		 Column #1 is the ISO/IEC 8859-14 code (in hex as 0xXX)
   28.37+#		 Column #2 is the Unicode (in hex as 0xXXXX)
   28.38+#		 Column #3 the Unicode name (follows a comment sign, '#')
   28.39+#
   28.40+#	The entries are in ISO/IEC 8859-14 order.
   28.41+#
   28.42+#	Updated versions of this file may be found in:
   28.43+#		<ftp://ftp.unicode.org/Public/MAPPINGS/>
   28.44+#
   28.45+#	Any comments or problems, contact <errata@unicode.org>
   28.46+#	Please note that <errata@unicode.org> is an archival address;
   28.47+#	notices will be checked, but do not expect an immediate response.
   28.48+#
   28.49+0x00	0x0000	#	NULL
   28.50+0x01	0x0001	#	START OF HEADING
   28.51+0x02	0x0002	#	START OF TEXT
   28.52+0x03	0x0003	#	END OF TEXT
   28.53+0x04	0x0004	#	END OF TRANSMISSION
   28.54+0x05	0x0005	#	ENQUIRY
   28.55+0x06	0x0006	#	ACKNOWLEDGE
   28.56+0x07	0x0007	#	BELL
   28.57+0x08	0x0008	#	BACKSPACE
   28.58+0x09	0x0009	#	HORIZONTAL TABULATION
   28.59+0x0A	0x000A	#	LINE FEED
   28.60+0x0B	0x000B	#	VERTICAL TABULATION
   28.61+0x0C	0x000C	#	FORM FEED
   28.62+0x0D	0x000D	#	CARRIAGE RETURN
   28.63+0x0E	0x000E	#	SHIFT OUT
   28.64+0x0F	0x000F	#	SHIFT IN
   28.65+0x10	0x0010	#	DATA LINK ESCAPE
   28.66+0x11	0x0011	#	DEVICE CONTROL ONE
   28.67+0x12	0x0012	#	DEVICE CONTROL TWO
   28.68+0x13	0x0013	#	DEVICE CONTROL THREE
   28.69+0x14	0x0014	#	DEVICE CONTROL FOUR
   28.70+0x15	0x0015	#	NEGATIVE ACKNOWLEDGE
   28.71+0x16	0x0016	#	SYNCHRONOUS IDLE
   28.72+0x17	0x0017	#	END OF TRANSMISSION BLOCK
   28.73+0x18	0x0018	#	CANCEL
   28.74+0x19	0x0019	#	END OF MEDIUM
   28.75+0x1A	0x001A	#	SUBSTITUTE
   28.76+0x1B	0x001B	#	ESCAPE
   28.77+0x1C	0x001C	#	FILE SEPARATOR
   28.78+0x1D	0x001D	#	GROUP SEPARATOR
   28.79+0x1E	0x001E	#	RECORD SEPARATOR
   28.80+0x1F	0x001F	#	UNIT SEPARATOR
   28.81+0x20	0x0020	#	SPACE
   28.82+0x21	0x0021	#	EXCLAMATION MARK
   28.83+0x22	0x0022	#	QUOTATION MARK
   28.84+0x23	0x0023	#	NUMBER SIGN
   28.85+0x24	0x0024	#	DOLLAR SIGN
   28.86+0x25	0x0025	#	PERCENT SIGN
   28.87+0x26	0x0026	#	AMPERSAND
   28.88+0x27	0x0027	#	APOSTROPHE
   28.89+0x28	0x0028	#	LEFT PARENTHESIS
   28.90+0x29	0x0029	#	RIGHT PARENTHESIS
   28.91+0x2A	0x002A	#	ASTERISK
   28.92+0x2B	0x002B	#	PLUS SIGN
   28.93+0x2C	0x002C	#	COMMA
   28.94+0x2D	0x002D	#	HYPHEN-MINUS
   28.95+0x2E	0x002E	#	FULL STOP
   28.96+0x2F	0x002F	#	SOLIDUS
   28.97+0x30	0x0030	#	DIGIT ZERO
   28.98+0x31	0x0031	#	DIGIT ONE
   28.99+0x32	0x0032	#	DIGIT TWO
  28.100+0x33	0x0033	#	DIGIT THREE
  28.101+0x34	0x0034	#	DIGIT FOUR
  28.102+0x35	0x0035	#	DIGIT FIVE
  28.103+0x36	0x0036	#	DIGIT SIX
  28.104+0x37	0x0037	#	DIGIT SEVEN
  28.105+0x38	0x0038	#	DIGIT EIGHT
  28.106+0x39	0x0039	#	DIGIT NINE
  28.107+0x3A	0x003A	#	COLON
  28.108+0x3B	0x003B	#	SEMICOLON
  28.109+0x3C	0x003C	#	LESS-THAN SIGN
  28.110+0x3D	0x003D	#	EQUALS SIGN
  28.111+0x3E	0x003E	#	GREATER-THAN SIGN
  28.112+0x3F	0x003F	#	QUESTION MARK
  28.113+0x40	0x0040	#	COMMERCIAL AT
  28.114+0x41	0x0041	#	LATIN CAPITAL LETTER A
  28.115+0x42	0x0042	#	LATIN CAPITAL LETTER B
  28.116+0x43	0x0043	#	LATIN CAPITAL LETTER C
  28.117+0x44	0x0044	#	LATIN CAPITAL LETTER D
  28.118+0x45	0x0045	#	LATIN CAPITAL LETTER E
  28.119+0x46	0x0046	#	LATIN CAPITAL LETTER F
  28.120+0x47	0x0047	#	LATIN CAPITAL LETTER G
  28.121+0x48	0x0048	#	LATIN CAPITAL LETTER H
  28.122+0x49	0x0049	#	LATIN CAPITAL LETTER I
  28.123+0x4A	0x004A	#	LATIN CAPITAL LETTER J
  28.124+0x4B	0x004B	#	LATIN CAPITAL LETTER K
  28.125+0x4C	0x004C	#	LATIN CAPITAL LETTER L
  28.126+0x4D	0x004D	#	LATIN CAPITAL LETTER M
  28.127+0x4E	0x004E	#	LATIN CAPITAL LETTER N
  28.128+0x4F	0x004F	#	LATIN CAPITAL LETTER O
  28.129+0x50	0x0050	#	LATIN CAPITAL LETTER P
  28.130+0x51	0x0051	#	LATIN CAPITAL LETTER Q
  28.131+0x52	0x0052	#	LATIN CAPITAL LETTER R
  28.132+0x53	0x0053	#	LATIN CAPITAL LETTER S
  28.133+0x54	0x0054	#	LATIN CAPITAL LETTER T
  28.134+0x55	0x0055	#	LATIN CAPITAL LETTER U
  28.135+0x56	0x0056	#	LATIN CAPITAL LETTER V
  28.136+0x57	0x0057	#	LATIN CAPITAL LETTER W
  28.137+0x58	0x0058	#	LATIN CAPITAL LETTER X
  28.138+0x59	0x0059	#	LATIN CAPITAL LETTER Y
  28.139+0x5A	0x005A	#	LATIN CAPITAL LETTER Z
  28.140+0x5B	0x005B	#	LEFT SQUARE BRACKET
  28.141+0x5C	0x005C	#	REVERSE SOLIDUS
  28.142+0x5D	0x005D	#	RIGHT SQUARE BRACKET
  28.143+0x5E	0x005E	#	CIRCUMFLEX ACCENT
  28.144+0x5F	0x005F	#	LOW LINE
  28.145+0x60	0x0060	#	GRAVE ACCENT
  28.146+0x61	0x0061	#	LATIN SMALL LETTER A
  28.147+0x62	0x0062	#	LATIN SMALL LETTER B
  28.148+0x63	0x0063	#	LATIN SMALL LETTER C
  28.149+0x64	0x0064	#	LATIN SMALL LETTER D
  28.150+0x65	0x0065	#	LATIN SMALL LETTER E
  28.151+0x66	0x0066	#	LATIN SMALL LETTER F
  28.152+0x67	0x0067	#	LATIN SMALL LETTER G
  28.153+0x68	0x0068	#	LATIN SMALL LETTER H
  28.154+0x69	0x0069	#	LATIN SMALL LETTER I
  28.155+0x6A	0x006A	#	LATIN SMALL LETTER J
  28.156+0x6B	0x006B	#	LATIN SMALL LETTER K
  28.157+0x6C	0x006C	#	LATIN SMALL LETTER L
  28.158+0x6D	0x006D	#	LATIN SMALL LETTER M
  28.159+0x6E	0x006E	#	LATIN SMALL LETTER N
  28.160+0x6F	0x006F	#	LATIN SMALL LETTER O
  28.161+0x70	0x0070	#	LATIN SMALL LETTER P
  28.162+0x71	0x0071	#	LATIN SMALL LETTER Q
  28.163+0x72	0x0072	#	LATIN SMALL LETTER R
  28.164+0x73	0x0073	#	LATIN SMALL LETTER S
  28.165+0x74	0x0074	#	LATIN SMALL LETTER T
  28.166+0x75	0x0075	#	LATIN SMALL LETTER U
  28.167+0x76	0x0076	#	LATIN SMALL LETTER V
  28.168+0x77	0x0077	#	LATIN SMALL LETTER W
  28.169+0x78	0x0078	#	LATIN SMALL LETTER X
  28.170+0x79	0x0079	#	LATIN SMALL LETTER Y
  28.171+0x7A	0x007A	#	LATIN SMALL LETTER Z
  28.172+0x7B	0x007B	#	LEFT CURLY BRACKET
  28.173+0x7C	0x007C	#	VERTICAL LINE
  28.174+0x7D	0x007D	#	RIGHT CURLY BRACKET
  28.175+0x7E	0x007E	#	TILDE
  28.176+0x7F	0x007F	#	DELETE
  28.177+0x80	0x0080	#	<control>
  28.178+0x81	0x0081	#	<control>
  28.179+0x82	0x0082	#	<control>
  28.180+0x83	0x0083	#	<control>
  28.181+0x84	0x0084	#	<control>
  28.182+0x85	0x0085	#	<control>
  28.183+0x86	0x0086	#	<control>
  28.184+0x87	0x0087	#	<control>
  28.185+0x88	0x0088	#	<control>
  28.186+0x89	0x0089	#	<control>
  28.187+0x8A	0x008A	#	<control>
  28.188+0x8B	0x008B	#	<control>
  28.189+0x8C	0x008C	#	<control>
  28.190+0x8D	0x008D	#	<control>
  28.191+0x8E	0x008E	#	<control>
  28.192+0x8F	0x008F	#	<control>
  28.193+0x90	0x0090	#	<control>
  28.194+0x91	0x0091	#	<control>
  28.195+0x92	0x0092	#	<control>
  28.196+0x93	0x0093	#	<control>
  28.197+0x94	0x0094	#	<control>
  28.198+0x95	0x0095	#	<control>
  28.199+0x96	0x0096	#	<control>
  28.200+0x97	0x0097	#	<control>
  28.201+0x98	0x0098	#	<control>
  28.202+0x99	0x0099	#	<control>
  28.203+0x9A	0x009A	#	<control>
  28.204+0x9B	0x009B	#	<control>
  28.205+0x9C	0x009C	#	<control>
  28.206+0x9D	0x009D	#	<control>
  28.207+0x9E	0x009E	#	<control>
  28.208+0x9F	0x009F	#	<control>
  28.209+0xA0	0x00A0	#	NO-BREAK SPACE
  28.210+0xA1	0x1E02	#	LATIN CAPITAL LETTER B WITH DOT ABOVE
  28.211+0xA2	0x1E03	#	LATIN SMALL LETTER B WITH DOT ABOVE
  28.212+0xA3	0x00A3	#	POUND SIGN
  28.213+0xA4	0x010A	#	LATIN CAPITAL LETTER C WITH DOT ABOVE
  28.214+0xA5	0x010B	#	LATIN SMALL LETTER C WITH DOT ABOVE
  28.215+0xA6	0x1E0A	#	LATIN CAPITAL LETTER D WITH DOT ABOVE
  28.216+0xA7	0x00A7	#	SECTION SIGN
  28.217+0xA8	0x1E80	#	LATIN CAPITAL LETTER W WITH GRAVE
  28.218+0xA9	0x00A9	#	COPYRIGHT SIGN
  28.219+0xAA	0x1E82	#	LATIN CAPITAL LETTER W WITH ACUTE
  28.220+0xAB	0x1E0B	#	LATIN SMALL LETTER D WITH DOT ABOVE
  28.221+0xAC	0x1EF2	#	LATIN CAPITAL LETTER Y WITH GRAVE
  28.222+0xAD	0x00AD	#	SOFT HYPHEN
  28.223+0xAE	0x00AE	#	REGISTERED SIGN
  28.224+0xAF	0x0178	#	LATIN CAPITAL LETTER Y WITH DIAERESIS
  28.225+0xB0	0x1E1E	#	LATIN CAPITAL LETTER F WITH DOT ABOVE
  28.226+0xB1	0x1E1F	#	LATIN SMALL LETTER F WITH DOT ABOVE
  28.227+0xB2	0x0120	#	LATIN CAPITAL LETTER G WITH DOT ABOVE
  28.228+0xB3	0x0121	#	LATIN SMALL LETTER G WITH DOT ABOVE
  28.229+0xB4	0x1E40	#	LATIN CAPITAL LETTER M WITH DOT ABOVE
  28.230+0xB5	0x1E41	#	LATIN SMALL LETTER M WITH DOT ABOVE
  28.231+0xB6	0x00B6	#	PILCROW SIGN
  28.232+0xB7	0x1E56	#	LATIN CAPITAL LETTER P WITH DOT ABOVE
  28.233+0xB8	0x1E81	#	LATIN SMALL LETTER W WITH GRAVE
  28.234+0xB9	0x1E57	#	LATIN SMALL LETTER P WITH DOT ABOVE
  28.235+0xBA	0x1E83	#	LATIN SMALL LETTER W WITH ACUTE
  28.236+0xBB	0x1E60	#	LATIN CAPITAL LETTER S WITH DOT ABOVE
  28.237+0xBC	0x1EF3	#	LATIN SMALL LETTER Y WITH GRAVE
  28.238+0xBD	0x1E84	#	LATIN CAPITAL LETTER W WITH DIAERESIS
  28.239+0xBE	0x1E85	#	LATIN SMALL LETTER W WITH DIAERESIS
  28.240+0xBF	0x1E61	#	LATIN SMALL LETTER S WITH DOT ABOVE
  28.241+0xC0	0x00C0	#	LATIN CAPITAL LETTER A WITH GRAVE
  28.242+0xC1	0x00C1	#	LATIN CAPITAL LETTER A WITH ACUTE
  28.243+0xC2	0x00C2	#	LATIN CAPITAL LETTER A WITH CIRCUMFLEX
  28.244+0xC3	0x00C3	#	LATIN CAPITAL LETTER A WITH TILDE
  28.245+0xC4	0x00C4	#	LATIN CAPITAL LETTER A WITH DIAERESIS
  28.246+0xC5	0x00C5	#	LATIN CAPITAL LETTER A WITH RING ABOVE
  28.247+0xC6	0x00C6	#	LATIN CAPITAL LETTER AE
  28.248+0xC7	0x00C7	#	LATIN CAPITAL LETTER C WITH CEDILLA
  28.249+0xC8	0x00C8	#	LATIN CAPITAL LETTER E WITH GRAVE
  28.250+0xC9	0x00C9	#	LATIN CAPITAL LETTER E WITH ACUTE
  28.251+0xCA	0x00CA	#	LATIN CAPITAL LETTER E WITH CIRCUMFLEX
  28.252+0xCB	0x00CB	#	LATIN CAPITAL LETTER E WITH DIAERESIS
  28.253+0xCC	0x00CC	#	LATIN CAPITAL LETTER I WITH GRAVE
  28.254+0xCD	0x00CD	#	LATIN CAPITAL LETTER I WITH ACUTE
  28.255+0xCE	0x00CE	#	LATIN CAPITAL LETTER I WITH CIRCUMFLEX
  28.256+0xCF	0x00CF	#	LATIN CAPITAL LETTER I WITH DIAERESIS
  28.257+0xD0	0x0174	#	LATIN CAPITAL LETTER W WITH CIRCUMFLEX
  28.258+0xD1	0x00D1	#	LATIN CAPITAL LETTER N WITH TILDE
  28.259+0xD2	0x00D2	#	LATIN CAPITAL LETTER O WITH GRAVE
  28.260+0xD3	0x00D3	#	LATIN CAPITAL LETTER O WITH ACUTE
  28.261+0xD4	0x00D4	#	LATIN CAPITAL LETTER O WITH CIRCUMFLEX
  28.262+0xD5	0x00D5	#	LATIN CAPITAL LETTER O WITH TILDE
  28.263+0xD6	0x00D6	#	LATIN CAPITAL LETTER O WITH DIAERESIS
  28.264+0xD7	0x1E6A	#	LATIN CAPITAL LETTER T WITH DOT ABOVE
  28.265+0xD8	0x00D8	#	LATIN CAPITAL LETTER O WITH STROKE
  28.266+0xD9	0x00D9	#	LATIN CAPITAL LETTER U WITH GRAVE
  28.267+0xDA	0x00DA	#	LATIN CAPITAL LETTER U WITH ACUTE
  28.268+0xDB	0x00DB	#	LATIN CAPITAL LETTER U WITH CIRCUMFLEX
  28.269+0xDC	0x00DC	#	LATIN CAPITAL LETTER U WITH DIAERESIS
  28.270+0xDD	0x00DD	#	LATIN CAPITAL LETTER Y WITH ACUTE
  28.271+0xDE	0x0176	#	LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
  28.272+0xDF	0x00DF	#	LATIN SMALL LETTER SHARP S
  28.273+0xE0	0x00E0	#	LATIN SMALL LETTER A WITH GRAVE
  28.274+0xE1	0x00E1	#	LATIN SMALL LETTER A WITH ACUTE
  28.275+0xE2	0x00E2	#	LATIN SMALL LETTER A WITH CIRCUMFLEX
  28.276+0xE3	0x00E3	#	LATIN SMALL LETTER A WITH TILDE
  28.277+0xE4	0x00E4	#	LATIN SMALL LETTER A WITH DIAERESIS
  28.278+0xE5	0x00E5	#	LATIN SMALL LETTER A WITH RING ABOVE
  28.279+0xE6	0x00E6	#	LATIN SMALL LETTER AE
  28.280+0xE7	0x00E7	#	LATIN SMALL LETTER C WITH CEDILLA
  28.281+0xE8	0x00E8	#	LATIN SMALL LETTER E WITH GRAVE
  28.282+0xE9	0x00E9	#	LATIN SMALL LETTER E WITH ACUTE
  28.283+0xEA	0x00EA	#	LATIN SMALL LETTER E WITH CIRCUMFLEX
  28.284+0xEB	0x00EB	#	LATIN SMALL LETTER E WITH DIAERESIS
  28.285+0xEC	0x00EC	#	LATIN SMALL LETTER I WITH GRAVE
  28.286+0xED	0x00ED	#	LATIN SMALL LETTER I WITH ACUTE
  28.287+0xEE	0x00EE	#	LATIN SMALL LETTER I WITH CIRCUMFLEX
  28.288+0xEF	0x00EF	#	LATIN SMALL LETTER I WITH DIAERESIS
  28.289+0xF0	0x0175	#	LATIN SMALL LETTER W WITH CIRCUMFLEX
  28.290+0xF1	0x00F1	#	LATIN SMALL LETTER N WITH TILDE
  28.291+0xF2	0x00F2	#	LATIN SMALL LETTER O WITH GRAVE
  28.292+0xF3	0x00F3	#	LATIN SMALL LETTER O WITH ACUTE
  28.293+0xF4	0x00F4	#	LATIN SMALL LETTER O WITH CIRCUMFLEX
  28.294+0xF5	0x00F5	#	LATIN SMALL LETTER O WITH TILDE
  28.295+0xF6	0x00F6	#	LATIN SMALL LETTER O WITH DIAERESIS
  28.296+0xF7	0x1E6B	#	LATIN SMALL LETTER T WITH DOT ABOVE
  28.297+0xF8	0x00F8	#	LATIN SMALL LETTER O WITH STROKE
  28.298+0xF9	0x00F9	#	LATIN SMALL LETTER U WITH GRAVE
  28.299+0xFA	0x00FA	#	LATIN SMALL LETTER U WITH ACUTE
  28.300+0xFB	0x00FB	#	LATIN SMALL LETTER U WITH CIRCUMFLEX
  28.301+0xFC	0x00FC	#	LATIN SMALL LETTER U WITH DIAERESIS
  28.302+0xFD	0x00FD	#	LATIN SMALL LETTER Y WITH ACUTE
  28.303+0xFE	0x0177	#	LATIN SMALL LETTER Y WITH CIRCUMFLEX
  28.304+0xFF	0x00FF	#	LATIN SMALL LETTER Y WITH DIAERESIS
  28.305+
    29.1new file mode 100755
    29.2--- /dev/null
    29.3+++ b/sys/lib/antiword/8859-15.txt
    29.4@@ -0,0 +1,303 @@
    29.5+#
    29.6+#	Name:             ISO/IEC 8859-15:1999 to Unicode
    29.7+#	Unicode version:  3.0
    29.8+#	Table version:    1.0
    29.9+#	Table format:     Format A
   29.10+#	Date:             1999 July 27
   29.11+#	Authors:          Markus Kuhn <mkuhn@acm.org>
   29.12+#			  Ken Whistler <kenw@sybase.com>
   29.13+#
   29.14+#	Copyright (c) 1998 - 1999 Unicode, Inc.  All Rights reserved.
   29.15+#
   29.16+#	This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
   29.17+#	No claims are made as to fitness for any particular purpose.  No
   29.18+#	warranties of any kind are expressed or implied.  The recipient
   29.19+#	agrees to determine applicability of information provided.  If this
   29.20+#	file has been provided on optical media by Unicode, Inc., the sole
   29.21+#	remedy for any claim will be exchange of defective media within 90
   29.22+#	days of receipt.
   29.23+#
   29.24+#	Unicode, Inc. hereby grants the right to freely use the information
   29.25+#	supplied in this file in the creation of products supporting the
   29.26+#	Unicode Standard, and to make copies of this file in any form for
   29.27+#	internal or external distribution as long as this notice remains
   29.28+#	attached.
   29.29+#
   29.30+#	General notes:
   29.31+#
   29.32+#	This table contains the data the Unicode Consortium has on how
   29.33+#       ISO/IEC 8859-15:1999 characters map into Unicode.
   29.34+#
   29.35+#	Format:  Three tab-separated columns
   29.36+#		 Column #1 is the ISO/IEC 8859-15 code (in hex as 0xXX)
   29.37+#		 Column #2 is the Unicode (in hex as 0xXXXX)
   29.38+#		 Column #3 the Unicode name (follows a comment sign, '#')
   29.39+#
   29.40+#	The entries are in ISO/IEC 8859-15 order.
   29.41+#
   29.42+#	Version history
   29.43+#
   29.44+#	Updated versions of this file may be found in:
   29.45+#		<ftp://ftp.unicode.org/Public/MAPPINGS/>
   29.46+#
   29.47+#	Any comments or problems, contact <errata@unicode.org>
   29.48+#	Please note that <errata@unicode.org> is an archival address;
   29.49+#	notices will be checked, but do not expect an immediate response.
   29.50+#
   29.51+0x00	0x0000	#	NULL
   29.52+0x01	0x0001	#	START OF HEADING
   29.53+0x02	0x0002	#	START OF TEXT
   29.54+0x03	0x0003	#	END OF TEXT
   29.55+0x04	0x0004	#	END OF TRANSMISSION
   29.56+0x05	0x0005	#	ENQUIRY
   29.57+0x06	0x0006	#	ACKNOWLEDGE
   29.58+0x07	0x0007	#	BELL
   29.59+0x08	0x0008	#	BACKSPACE
   29.60+0x09	0x0009	#	HORIZONTAL TABULATION
   29.61+0x0A	0x000A	#	LINE FEED
   29.62+0x0B	0x000B	#	VERTICAL TABULATION
   29.63+0x0C	0x000C	#	FORM FEED
   29.64+0x0D	0x000D	#	CARRIAGE RETURN
   29.65+0x0E	0x000E	#	SHIFT OUT
   29.66+0x0F	0x000F	#	SHIFT IN
   29.67+0x10	0x0010	#	DATA LINK ESCAPE
   29.68+0x11	0x0011	#	DEVICE CONTROL ONE
   29.69+0x12	0x0012	#	DEVICE CONTROL TWO
   29.70+0x13	0x0013	#	DEVICE CONTROL THREE
   29.71+0x14	0x0014	#	DEVICE CONTROL FOUR
   29.72+0x15	0x0015	#	NEGATIVE ACKNOWLEDGE
   29.73+0x16	0x0016	#	SYNCHRONOUS IDLE
   29.74+0x17	0x0017	#	END OF TRANSMISSION BLOCK
   29.75+0x18	0x0018	#	CANCEL
   29.76+0x19	0x0019	#	END OF MEDIUM
   29.77+0x1A	0x001A	#	SUBSTITUTE
   29.78+0x1B	0x001B	#	ESCAPE
   29.79+0x1C	0x001C	#	FILE SEPARATOR
   29.80+0x1D	0x001D	#	GROUP SEPARATOR
   29.81+0x1E	0x001E	#	RECORD SEPARATOR
   29.82+0x1F	0x001F	#	UNIT SEPARATOR
   29.83+0x20	0x0020	#	SPACE
   29.84+0x21	0x0021	#	EXCLAMATION MARK
   29.85+0x22	0x0022	#	QUOTATION MARK
   29.86+0x23	0x0023	#	NUMBER SIGN
   29.87+0x24	0x0024	#	DOLLAR SIGN
   29.88+0x25	0x0025	#	PERCENT SIGN
   29.89+0x26	0x0026	#	AMPERSAND
   29.90+0x27	0x0027	#	APOSTROPHE
   29.91+0x28	0x0028	#	LEFT PARENTHESIS
   29.92+0x29	0x0029	#	RIGHT PARENTHESIS
   29.93+0x2A	0x002A	#	ASTERISK
   29.94+0x2B	0x002B	#	PLUS SIGN
   29.95+0x2C	0x002C	#	COMMA
   29.96+0x2D	0x002D	#	HYPHEN-MINUS
   29.97+0x2E	0x002E	#	FULL STOP
   29.98+0x2F	0x002F	#	SOLIDUS
   29.99+0x30	0x0030	#	DIGIT ZERO
  29.100+0x31	0x0031	#	DIGIT ONE
  29.101+0x32	0x0032	#	DIGIT TWO
  29.102+0x33	0x0033	#	DIGIT THREE
  29.103+0x34	0x0034	#	DIGIT FOUR
  29.104+0x35	0x0035	#	DIGIT FIVE
  29.105+0x36	0x0036	#	DIGIT SIX
  29.106+0x37	0x0037	#	DIGIT SEVEN
  29.107+0x38	0x0038	#	DIGIT EIGHT
  29.108+0x39	0x0039	#	DIGIT NINE
  29.109+0x3A	0x003A	#	COLON
  29.110+0x3B	0x003B	#	SEMICOLON
  29.111+0x3C	0x003C	#	LESS-THAN SIGN
  29.112+0x3D	0x003D	#	EQUALS SIGN
  29.113+0x3E	0x003E	#	GREATER-THAN SIGN
  29.114+0x3F	0x003F	#	QUESTION MARK
  29.115+0x40	0x0040	#	COMMERCIAL AT
  29.116+0x41	0x0041	#	LATIN CAPITAL LETTER A
  29.117+0x42	0x0042	#	LATIN CAPITAL LETTER B
  29.118+0x43	0x0043	#	LATIN CAPITAL LETTER C
  29.119+0x44	0x0044	#	LATIN CAPITAL LETTER D
  29.120+0x45	0x0045	#	LATIN CAPITAL LETTER E
  29.121+0x46	0x0046	#	LATIN CAPITAL LETTER F
  29.122+0x47	0x0047	#	LATIN CAPITAL LETTER G
  29.123+0x48	0x0048	#	LATIN CAPITAL LETTER H
  29.124+0x49	0x0049	#	LATIN CAPITAL LETTER I
  29.125+0x4A	0x004A	#	LATIN CAPITAL LETTER J
  29.126+0x4B	0x004B	#	LATIN CAPITAL LETTER K
  29.127+0x4C	0x004C	#	LATIN CAPITAL LETTER L
  29.128+0x4D	0x004D	#	LATIN CAPITAL LETTER M
  29.129+0x4E	0x004E	#	LATIN CAPITAL LETTER N
  29.130+0x4F	0x004F	#	LATIN CAPITAL LETTER O
  29.131+0x50	0x0050	#	LATIN CAPITAL LETTER P
  29.132+0x51	0x0051	#	LATIN CAPITAL LETTER Q
  29.133+0x52	0x0052	#	LATIN CAPITAL LETTER R
  29.134+0x53	0x0053	#	LATIN CAPITAL LETTER S
  29.135+0x54	0x0054	#	LATIN CAPITAL LETTER T
  29.136+0x55	0x0055	#	LATIN CAPITAL LETTER U
  29.137+0x56	0x0056	#	LATIN CAPITAL LETTER V
  29.138+0x57	0x0057	#	LATIN CAPITAL LETTER W
  29.139+0x58	0x0058	#	LATIN CAPITAL LETTER X
  29.140+0x59	0x0059	#	LATIN CAPITAL LETTER Y
  29.141+0x5A	0x005A	#	LATIN CAPITAL LETTER Z
  29.142+0x5B	0x005B	#	LEFT SQUARE BRACKET
  29.143+0x5C	0x005C	#	REVERSE SOLIDUS
  29.144+0x5D	0x005D	#	RIGHT SQUARE BRACKET
  29.145+0x5E	0x005E	#	CIRCUMFLEX ACCENT
  29.146+0x5F	0x005F	#	LOW LINE
  29.147+0x60	0x0060	#	GRAVE ACCENT
  29.148+0x61	0x0061	#	LATIN SMALL LETTER A
  29.149+0x62	0x0062	#	LATIN SMALL LETTER B
  29.150+0x63	0x0063	#	LATIN SMALL LETTER C
  29.151+0x64	0x0064	#	LATIN SMALL LETTER D
  29.152+0x65	0x0065	#	LATIN SMALL LETTER E
  29.153+0x66	0x0066	#	LATIN SMALL LETTER F
  29.154+0x67	0x0067	#	LATIN SMALL LETTER G
  29.155+0x68	0x0068	#	LATIN SMALL LETTER H
  29.156+0x69	0x0069	#	LATIN SMALL LETTER I
  29.157+0x6A	0x006A	#	LATIN SMALL LETTER J
  29.158+0x6B	0x006B	#	LATIN SMALL LETTER K
  29.159+0x6C	0x006C	#	LATIN SMALL LETTER L
  29.160+0x6D	0x006D	#	LATIN SMALL LETTER M
  29.161+0x6E	0x006E	#	LATIN SMALL LETTER N
  29.162+0x6F	0x006F	#	LATIN SMALL LETTER O
  29.163+0x70	0x0070	#	LATIN SMALL LETTER P
  29.164+0x71	0x0071	#	LATIN SMALL LETTER Q
  29.165+0x72	0x0072	#	LATIN SMALL LETTER R
  29.166+0x73	0x0073	#	LATIN SMALL LETTER S
  29.167+0x74	0x0074	#	LATIN SMALL LETTER T
  29.168+0x75	0x0075	#	LATIN SMALL LETTER U
  29.169+0x76	0x0076	#	LATIN SMALL LETTER V
  29.170+0x77	0x0077	#	LATIN SMALL LETTER W
  29.171+0x78	0x0078	#	LATIN SMALL LETTER X
  29.172+0x79	0x0079	#	LATIN SMALL LETTER Y
  29.173+0x7A	0x007A	#	LATIN SMALL LETTER Z
  29.174+0x7B	0x007B	#	LEFT CURLY BRACKET
  29.175+0x7C	0x007C	#	VERTICAL LINE
  29.176+0x7D	0x007D	#	RIGHT CURLY BRACKET
  29.177+0x7E	0x007E	#	TILDE
  29.178+0x7F	0x007F	#	DELETE
  29.179+0x80	0x0080	#	<control>
  29.180+0x81	0x0081	#	<control>
  29.181+0x82	0x0082	#	<control>
  29.182+0x83	0x0083	#	<control>
  29.183+0x84	0x0084	#	<control>
  29.184+0x85	0x0085	#	<control>
  29.185+0x86	0x0086	#	<control>
  29.186+0x87	0x0087	#	<control>
  29.187+0x88	0x0088	#	<control>
  29.188+0x89	0x0089	#	<control>
  29.189+0x8A	0x008A	#	<control>
  29.190+0x8B	0x008B	#	<control>
  29.191+0x8C	0x008C	#	<control>
  29.192+0x8D	0x008D	#	<control>
  29.193+0x8E	0x008E	#	<control>
  29.194+0x8F	0x008F	#	<control>
  29.195+0x90	0x0090	#	<control>
  29.196+0x91	0x0091	#	<control>
  29.197+0x92	0x0092	#	<control>
  29.198+0x93	0x0093	#	<control>
  29.199+0x94	0x0094	#	<control>
  29.200+0x95	0x0095	#	<control>
  29.201+0x96	0x0096	#	<control>
  29.202+0x97	0x0097	#	<control>
  29.203+0x98	0x0098	#	<control>
  29.204+0x99	0x0099	#	<control>
  29.205+0x9A	0x009A	#	<control>
  29.206+0x9B	0x009B	#	<control>
  29.207+0x9C	0x009C	#	<control>
  29.208+0x9D	0x009D	#	<control>
  29.209+0x9E	0x009E	#	<control>
  29.210+0x9F	0x009F	#	<control>
  29.211+0xA0	0x00A0	#	NO-BREAK SPACE
  29.212+0xA1	0x00A1	#	INVERTED EXCLAMATION MARK
  29.213+0xA2	0x00A2	#	CENT SIGN
  29.214+0xA3	0x00A3	#	POUND SIGN
  29.215+0xA4	0x20AC	#	EURO SIGN
  29.216+0xA5	0x00A5	#	YEN SIGN
  29.217+0xA6	0x0160	#	LATIN CAPITAL LETTER S WITH CARON
  29.218+0xA7	0x00A7	#	SECTION SIGN
  29.219+0xA8	0x0161	#	LATIN SMALL LETTER S WITH CARON
  29.220+0xA9	0x00A9	#	COPYRIGHT SIGN
  29.221+0xAA	0x00AA	#	FEMININE ORDINAL INDICATOR
  29.222+0xAB	0x00AB	#	LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
  29.223+0xAC	0x00AC	#	NOT SIGN
  29.224+0xAD	0x00AD	#	SOFT HYPHEN
  29.225+0xAE	0x00AE	#	REGISTERED SIGN
  29.226+0xAF	0x00AF	#	MACRON
  29.227+0xB0	0x00B0	#	DEGREE SIGN
  29.228+0xB1	0x00B1	#	PLUS-MINUS SIGN
  29.229+0xB2	0x00B2	#	SUPERSCRIPT TWO
  29.230+0xB3	0x00B3	#	SUPERSCRIPT THREE
  29.231+0xB4	0x017D	#	LATIN CAPITAL LETTER Z WITH CARON
  29.232+0xB5	0x00B5	#	MICRO SIGN
  29.233+0xB6	0x00B6	#	PILCROW SIGN
  29.234+0xB7	0x00B7	#	MIDDLE DOT
  29.235+0xB8	0x017E	#	LATIN SMALL LETTER Z WITH CARON
  29.236+0xB9	0x00B9	#	SUPERSCRIPT ONE
  29.237+0xBA	0x00BA	#	MASCULINE ORDINAL INDICATOR
  29.238+0xBB	0x00BB	#	RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
  29.239+0xBC	0x0152	#	LATIN CAPITAL LIGATURE OE
  29.240+0xBD	0x0153	#	LATIN SMALL LIGATURE OE
  29.241+0xBE	0x0178	#	LATIN CAPITAL LETTER Y WITH DIAERESIS
  29.242+0xBF	0x00BF	#	INVERTED QUESTION MARK
  29.243+0xC0	0x00C0	#	LATIN CAPITAL LETTER A WITH GRAVE
  29.244+0xC1	0x00C1	#	LATIN CAPITAL LETTER A WITH ACUTE
  29.245+0xC2	0x00C2	#	LATIN CAPITAL LETTER A WITH CIRCUMFLEX
  29.246+0xC3	0x00C3	#	LATIN CAPITAL LETTER A WITH TILDE
  29.247+0xC4	0x00C4	#	LATIN CAPITAL LETTER A WITH DIAERESIS
  29.248+0xC5	0x00C5	#	LATIN CAPITAL LETTER A WITH RING ABOVE
  29.249+0xC6	0x00C6	#	LATIN CAPITAL LETTER AE
  29.250+0xC7	0x00C7	#	LATIN CAPITAL LETTER C WITH CEDILLA
  29.251+0xC8	0x00C8	#	LATIN CAPITAL LETTER E WITH GRAVE
  29.252+0xC9	0x00C9	#	LATIN CAPITAL LETTER E WITH ACUTE
  29.253+0xCA	0x00CA	#	LATIN CAPITAL LETTER E WITH CIRCUMFLEX
  29.254+0xCB	0x00CB	#	LATIN CAPITAL LETTER E WITH DIAERESIS
  29.255+0xCC	0x00CC	#	LATIN CAPITAL LETTER I WITH GRAVE
  29.256+0xCD	0x00CD	#	LATIN CAPITAL LETTER I WITH ACUTE
  29.257+0xCE	0x00CE	#	LATIN CAPITAL LETTER I WITH CIRCUMFLEX
  29.258+0xCF	0x00CF	#	LATIN CAPITAL LETTER I WITH DIAERESIS
  29.259+0xD0	0x00D0	#	LATIN CAPITAL LETTER ETH
  29.260+0xD1	0x00D1	#	LATIN CAPITAL LETTER N WITH TILDE
  29.261+0xD2	0x00D2	#	LATIN CAPITAL LETTER O WITH GRAVE
  29.262+0xD3	0x00D3	#	LATIN CAPITAL LETTER O WITH ACUTE
  29.263+0xD4	0x00D4	#	LATIN CAPITAL LETTER O WITH CIRCUMFLEX
  29.264+0xD5	0x00D5	#	LATIN CAPITAL LETTER O WITH TILDE
  29.265+0xD6	0x00D6	#	LATIN CAPITAL LETTER O WITH DIAERESIS
  29.266+0xD7	0x00D7	#	MULTIPLICATION SIGN
  29.267+0xD8	0x00D8	#	LATIN CAPITAL LETTER O WITH STROKE
  29.268+0xD9	0x00D9	#	LATIN CAPITAL LETTER U WITH GRAVE
  29.269+0xDA	0x00DA	#	LATIN CAPITAL LETTER U WITH ACUTE
  29.270+0xDB	0x00DB	#	LATIN CAPITAL LETTER U WITH CIRCUMFLEX
  29.271+0xDC	0x00DC	#	LATIN CAPITAL LETTER U WITH DIAERESIS
  29.272+0xDD	0x00DD	#	LATIN CAPITAL LETTER Y WITH ACUTE
  29.273+0xDE	0x00DE	#	LATIN CAPITAL LETTER THORN
  29.274+0xDF	0x00DF	#	LATIN SMALL LETTER SHARP S
  29.275+0xE0	0x00E0	#	LATIN SMALL LETTER A WITH GRAVE
  29.276+0xE1	0x00E1	#	LATIN SMALL LETTER A WITH ACUTE
  29.277+0xE2	0x00E2	#	LATIN SMALL LETTER A WITH CIRCUMFLEX
  29.278+0xE3	0x00E3	#	LATIN SMALL LETTER A WITH TILDE
  29.279+0xE4	0x00E4	#	LATIN SMALL LETTER A WITH DIAERESIS
  29.280+0xE5	0x00E5	#	LATIN SMALL LETTER A WITH RING ABOVE
  29.281+0xE6	0x00E6	#	LATIN SMALL LETTER AE
  29.282+0xE7	0x00E7	#	LATIN SMALL LETTER C WITH CEDILLA
  29.283+0xE8	0x00E8	#	LATIN SMALL LETTER E WITH GRAVE
  29.284+0xE9	0x00E9	#	LATIN SMALL LETTER E WITH ACUTE
  29.285+0xEA	0x00EA	#	LATIN SMALL LETTER E WITH CIRCUMFLEX
  29.286+0xEB	0x00EB	#	LATIN SMALL LETTER E WITH DIAERESIS
  29.287+0xEC	0x00EC	#	LATIN SMALL LETTER I WITH GRAVE
  29.288+0xED	0x00ED	#	LATIN SMALL LETTER I WITH ACUTE
  29.289+0xEE	0x00EE	#	LATIN SMALL LETTER I WITH CIRCUMFLEX
  29.290+0xEF	0x00EF	#	LATIN SMALL LETTER I WITH DIAERESIS
  29.291+0xF0	0x00F0	#	LATIN SMALL LETTER ETH
  29.292+0xF1	0x00F1	#	LATIN SMALL LETTER N WITH TILDE
  29.293+0xF2	0x00F2	#	LATIN SMALL LETTER O WITH GRAVE
  29.294+0xF3	0x00F3	#	LATIN SMALL LETTER O WITH ACUTE
  29.295+0xF4	0x00F4	#	LATIN SMALL LETTER O WITH CIRCUMFLEX
  29.296+0xF5	0x00F5	#	LATIN SMALL LETTER O WITH TILDE
  29.297+0xF6	0x00F6	#	LATIN SMALL LETTER O WITH DIAERESIS
  29.298+0xF7	0x00F7	#	DIVISION SIGN
  29.299+0xF8	0x00F8	#	LATIN SMALL LETTER O WITH STROKE
  29.300+0xF9	0x00F9	#	LATIN SMALL LETTER U WITH GRAVE
  29.301+0xFA	0x00FA	#	LATIN SMALL LETTER U WITH ACUTE
  29.302+0xFB	0x00FB	#	LATIN SMALL LETTER U WITH CIRCUMFLEX
  29.303+0xFC	0x00FC	#	LATIN SMALL LETTER U WITH DIAERESIS
  29.304+0xFD	0x00FD	#	LATIN SMALL LETTER Y WITH ACUTE
  29.305+0xFE	0x00FE	#	LATIN SMALL LETTER THORN
  29.306+0xFF	0x00FF	#	LATIN SMALL LETTER Y WITH DIAERESIS
  29.307+
    30.1new file mode 100755
    30.2--- /dev/null
    30.3+++ b/sys/lib/antiword/8859-16.txt
    30.4@@ -0,0 +1,299 @@
    30.5+#
    30.6+#	Name:             ISO/IEC 8859-16:2001 to Unicode
    30.7+#	Unicode version:  3.0
    30.8+#	Table version:    1.0
    30.9+#	Table format:     Format A
   30.10+#	Date:             2001 July 26
   30.11+#	Authors:          Markus Kuhn <mkuhn@acm.org>
   30.12+#
   30.13+#	Copyright (c) 1999-2001 Unicode, Inc.  All Rights reserved.
   30.14+#
   30.15+#	This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
   30.16+#	No claims are made as to fitness for any particular purpose.  No
   30.17+#	warranties of any kind are expressed or implied.  The recipient
   30.18+#	agrees to determine applicability of information provided.  If this
   30.19+#	file has been provided on optical media by Unicode, Inc., the sole
   30.20+#	remedy for any claim will be exchange of defective media within 90
   30.21+#	days of receipt.
   30.22+#
   30.23+#	Unicode, Inc. hereby grants the right to freely use the information
   30.24+#	supplied in this file in the creation of products supporting the
   30.25+#	Unicode Standard, and to make copies of this file in any form for
   30.26+#	internal or external distribution as long as this notice remains
   30.27+#	attached.
   30.28+#
   30.29+#	General notes:
   30.30+#
   30.31+#	This table contains the data the Unicode Consortium has on how
   30.32+#       ISO/IEC 8859-16:2001 characters map into Unicode.
   30.33+#
   30.34+#	Format:  Three tab-separated columns
   30.35+#		 Column #1 is the ISO/IEC 8859-16 code (in hex as 0xXX)
   30.36+#		 Column #2 is the Unicode (in hex as 0xXXXX)
   30.37+#		 Column #3 the Unicode name (follows a comment sign, '#')
   30.38+#
   30.39+#	The entries are in ISO/IEC 8859-16 order.
   30.40+#
   30.41+#	Updated versions of this file may be found in:
   30.42+#		<ftp://ftp.unicode.org/Public/MAPPINGS/>
   30.43+#
   30.44+#	Any comments or problems, contact <errata@unicode.org>
   30.45+#	Please note that <errata@unicode.org> is an archival address;
   30.46+#	notices will be checked, but do not expect an immediate response.
   30.47+#
   30.48+0x00	0x0000	#	NULL
   30.49+0x01	0x0001	#	START OF HEADING
   30.50+0x02	0x0002	#	START OF TEXT
   30.51+0x03	0x0003	#	END OF TEXT
   30.52+0x04	0x0004	#	END OF TRANSMISSION
   30.53+0x05	0x0005	#	ENQUIRY
   30.54+0x06	0x0006	#	ACKNOWLEDGE
   30.55+0x07	0x0007	#	BELL
   30.56+0x08	0x0008	#	BACKSPACE
   30.57+0x09	0x0009	#	HORIZONTAL TABULATION
   30.58+0x0A	0x000A	#	LINE FEED
   30.59+0x0B	0x000B	#	VERTICAL TABULATION
   30.60+0x0C	0x000C	#	FORM FEED
   30.61+0x0D	0x000D	#	CARRIAGE RETURN
   30.62+0x0E	0x000E	#	SHIFT OUT
   30.63+0x0F	0x000F	#	SHIFT IN
   30.64+0x10	0x0010	#	DATA LINK ESCAPE
   30.65+0x11	0x0011	#	DEVICE CONTROL ONE
   30.66+0x12	0x0012	#	DEVICE CONTROL TWO
   30.67+0x13	0x0013	#	DEVICE CONTROL THREE
   30.68+0x14	0x0014	#	DEVICE CONTROL FOUR
   30.69+0x15	0x0015	#	NEGATIVE ACKNOWLEDGE
   30.70+0x16	0x0016	#	SYNCHRONOUS IDLE
   30.71+0x17	0x0017	#	END OF TRANSMISSION BLOCK
   30.72+0x18	0x0018	#	CANCEL
   30.73+0x19	0x0019	#	END OF MEDIUM
   30.74+0x1A	0x001A	#	SUBSTITUTE
   30.75+0x1B	0x001B	#	ESCAPE
   30.76+0x1C	0x001C	#	FILE SEPARATOR
   30.77+0x1D	0x001D	#	GROUP SEPARATOR
   30.78+0x1E	0x001E	#	RECORD SEPARATOR
   30.79+0x1F	0x001F	#	UNIT SEPARATOR
   30.80+0x20	0x0020	#	SPACE
   30.81+0x21	0x0021	#	EXCLAMATION MARK
   30.82+0x22	0x0022	#	QUOTATION MARK
   30.83+0x23	0x0023	#	NUMBER SIGN
   30.84+0x24	0x0024	#	DOLLAR SIGN
   30.85+0x25	0x0025	#	PERCENT SIGN
   30.86+0x26	0x0026	#	AMPERSAND
   30.87+0x27	0x0027	#	APOSTROPHE
   30.88+0x28	0x0028	#	LEFT PARENTHESIS
   30.89+0x29	0x0029	#	RIGHT PARENTHESIS
   30.90+0x2A	0x002A	#	ASTERISK
   30.91+0x2B	0x002B	#	PLUS SIGN
   30.92+0x2C	0x002C	#	COMMA
   30.93+0x2D	0x002D	#	HYPHEN-MINUS
   30.94+0x2E	0x002E	#	FULL STOP
   30.95+0x2F	0x002F	#	SOLIDUS
   30.96+0x30	0x0030	#	DIGIT ZERO
   30.97+0x31	0x0031	#	DIGIT ONE
   30.98+0x32	0x0032	#	DIGIT TWO
   30.99+0x33	0x0033	#	DIGIT THREE
  30.100+0x34	0x0034	#	DIGIT FOUR
  30.101+0x35	0x0035	#	DIGIT FIVE
  30.102+0x36	0x0036	#	DIGIT SIX
  30.103+0x37	0x0037	#	DIGIT SEVEN
  30.104+0x38	0x0038	#	DIGIT EIGHT
  30.105+0x39	0x0039	#	DIGIT NINE
  30.106+0x3A	0x003A	#	COLON
  30.107+0x3B	0x003B	#	SEMICOLON
  30.108+0x3C	0x003C	#	LESS-THAN SIGN
  30.109+0x3D	0x003D	#	EQUALS SIGN
  30.110+0x3E	0x003E	#	GREATER-THAN SIGN
  30.111+0x3F	0x003F	#	QUESTION MARK
  30.112+0x40	0x0040	#	COMMERCIAL AT
  30.113+0x41	0x0041	#	LATIN CAPITAL LETTER A
  30.114+0x42	0x0042	#	LATIN CAPITAL LETTER B
  30.115+0x43	0x0043	#	LATIN CAPITAL LETTER C
  30.116+0x44	0x0044	#	LATIN CAPITAL LETTER D
  30.117+0x45	0x0045	#	LATIN CAPITAL LETTER E
  30.118+0x46	0x0046	#	LATIN CAPITAL LETTER F
  30.119+0x47	0x0047	#	LATIN CAPITAL LETTER G
  30.120+0x48	0x0048	#	LATIN CAPITAL LETTER H
  30.121+0x49	0x0049	#	LATIN CAPITAL LETTER I
  30.122+0x4A	0x004A	#	LATIN CAPITAL LETTER J
  30.123+0x4B	0x004B	#	LATIN CAPITAL LETTER K
  30.124+0x4C	0x004C	#	LATIN CAPITAL LETTER L
  30.125+0x4D	0x004D	#	LATIN CAPITAL LETTER M
  30.126+0x4E	0x004E	#	LATIN CAPITAL LETTER N
  30.127+0x4F	0x004F	#	LATIN CAPITAL LETTER O
  30.128+0x50	0x0050	#	LATIN CAPITAL LETTER P
  30.129+0x51	0x0051	#	LATIN CAPITAL LETTER Q
  30.130+0x52	0x0052	#	LATIN CAPITAL LETTER R
  30.131+0x53	0x0053	#	LATIN CAPITAL LETTER S
  30.132+0x54	0x0054	#	LATIN CAPITAL LETTER T
  30.133+0x55	0x0055	#	LATIN CAPITAL LETTER U
  30.134+0x56	0x0056	#	LATIN CAPITAL LETTER V
  30.135+0x57	0x0057	#	LATIN CAPITAL LETTER W
  30.136+0x58	0x0058	#	LATIN CAPITAL LETTER X
  30.137+0x59	0x0059	#	LATIN CAPITAL LETTER Y
  30.138+0x5A	0x005A	#	LATIN CAPITAL LETTER Z
  30.139+0x5B	0x005B	#	LEFT SQUARE BRACKET
  30.140+0x5C	0x005C	#	REVERSE SOLIDUS
  30.141+0x5D	0x005D	#	RIGHT SQUARE BRACKET
  30.142+0x5E	0x005E	#	CIRCUMFLEX ACCENT
  30.143+0x5F	0x005F	#	LOW LINE
  30.144+0x60	0x0060	#	GRAVE ACCENT
  30.145+0x61	0x0061	#	LATIN SMALL LETTER A
  30.146+0x62	0x0062	#	LATIN SMALL LETTER B
  30.147+0x63	0x0063	#	LATIN SMALL LETTER C
  30.148+0x64	0x0064	#	LATIN SMALL LETTER D
  30.149+0x65	0x0065	#	LATIN SMALL LETTER E
  30.150+0x66	0x0066	#	LATIN SMALL LETTER F
  30.151+0x67	0x0067	#	LATIN SMALL LETTER G
  30.152+0x68	0x0068	#	LATIN SMALL LETTER H
  30.153+0x69	0x0069	#	LATIN SMALL LETTER I
  30.154+0x6A	0x006A	#	LATIN SMALL LETTER J
  30.155+0x6B	0x006B	#	LATIN SMALL LETTER K
  30.156+0x6C	0x006C	#	LATIN SMALL LETTER L
  30.157+0x6D	0x006D	#	LATIN SMALL LETTER M
  30.158+0x6E	0x006E	#	LATIN SMALL LETTER N
  30.159+0x6F	0x006F	#	LATIN SMALL LETTER O
  30.160+0x70	0x0070	#	LATIN SMALL LETTER P
  30.161+0x71	0x0071	#	LATIN SMALL LETTER Q
  30.162+0x72	0x0072	#	LATIN SMALL LETTER R
  30.163+0x73	0x0073	#	LATIN SMALL LETTER S
  30.164+0x74	0x0074	#	LATIN SMALL LETTER T
  30.165+0x75	0x0075	#	LATIN SMALL LETTER U
  30.166+0x76	0x0076	#	LATIN SMALL LETTER V
  30.167+0x77	0x0077	#	LATIN SMALL LETTER W
  30.168+0x78	0x0078	#	LATIN SMALL LETTER X
  30.169+0x79	0x0079	#	LATIN SMALL LETTER Y
  30.170+0x7A	0x007A	#	LATIN SMALL LETTER Z
  30.171+0x7B	0x007B	#	LEFT CURLY BRACKET
  30.172+0x7C	0x007C	#	VERTICAL LINE
  30.173+0x7D	0x007D	#	RIGHT CURLY BRACKET
  30.174+0x7E	0x007E	#	TILDE
  30.175+0x7F	0x007F	#	DELETE
  30.176+0x80	0x0080	#	<control>
  30.177+0x81	0x0081	#	<control>
  30.178+0x82	0x0082	#	<control>
  30.179+0x83	0x0083	#	<control>
  30.180+0x84	0x0084	#	<control>
  30.181+0x85	0x0085	#	<control>
  30.182+0x86	0x0086	#	<control>
  30.183+0x87	0x0087	#	<control>
  30.184+0x88	0x0088	#	<control>
  30.185+0x89	0x0089	#	<control>
  30.186+0x8A	0x008A	#	<control>
  30.187+0x8B	0x008B	#	<control>
  30.188+0x8C	0x008C	#	<control>
  30.189+0x8D	0x008D	#	<control>
  30.190+0x8E	0x008E	#	<control>
  30.191+0x8F	0x008F	#	<control>
  30.192+0x90	0x0090	#	<control>
  30.193+0x91	0x0091	#	<control>
  30.194+0x92	0x0092	#	<control>
  30.195+0x93	0x0093	#	<control>
  30.196+0x94	0x0094	#	<control>
  30.197+0x95	0x0095	#	<control>
  30.198+0x96	0x0096	#	<control>
  30.199+0x97	0x0097	#	<control>
  30.200+0x98	0x0098	#	<control>
  30.201+0x99	0x0099	#	<control>
  30.202+0x9A	0x009A	#	<control>
  30.203+0x9B	0x009B	#	<control>
  30.204+0x9C	0x009C	#	<control>
  30.205+0x9D	0x009D	#	<control>
  30.206+0x9E	0x009E	#	<control>
  30.207+0x9F	0x009F	#	<control>
  30.208+0xA0	0x00A0	#	NO-BREAK SPACE
  30.209+0xA1	0x0104	#	LATIN CAPITAL LETTER A WITH OGONEK
  30.210+0xA2	0x0105	#	LATIN SMALL LETTER A WITH OGONEK
  30.211+0xA3	0x0141	#	LATIN CAPITAL LETTER L WITH STROKE
  30.212+0xA4	0x20AC	#	EURO SIGN
  30.213+0xA5	0x201E	#	DOUBLE LOW-9 QUOTATION MARK
  30.214+0xA6	0x0160	#	LATIN CAPITAL LETTER S WITH CARON
  30.215+0xA7	0x00A7	#	SECTION SIGN
  30.216+0xA8	0x0161	#	LATIN SMALL LETTER S WITH CARON
  30.217+0xA9	0x00A9	#	COPYRIGHT SIGN
  30.218+0xAA	0x0218	#	LATIN CAPITAL LETTER S WITH COMMA BELOW
  30.219+0xAB	0x00AB	#	LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
  30.220+0xAC	0x0179	#	LATIN CAPITAL LETTER Z WITH ACUTE
  30.221+0xAD	0x00AD	#	SOFT HYPHEN
  30.222+0xAE	0x017A	#	LATIN SMALL LETTER Z WITH ACUTE
  30.223+0xAF	0x017B	#	LATIN CAPITAL LETTER Z WITH DOT ABOVE
  30.224+0xB0	0x00B0	#	DEGREE SIGN
  30.225+0xB1	0x00B1	#	PLUS-MINUS SIGN
  30.226+0xB2	0x010C	#	LATIN CAPITAL LETTER C WITH CARON
  30.227+0xB3	0x0142	#	LATIN SMALL LETTER L WITH STROKE
  30.228+0xB4	0x017D	#	LATIN CAPITAL LETTER Z WITH CARON
  30.229+0xB5	0x201D	#	RIGHT DOUBLE QUOTATION MARK
  30.230+0xB6	0x00B6	#	PILCROW SIGN
  30.231+0xB7	0x00B7	#	MIDDLE DOT
  30.232+0xB8	0x017E	#	LATIN SMALL LETTER Z WITH CARON
  30.233+0xB9	0x010D	#	LATIN SMALL LETTER C WITH CARON
  30.234+0xBA	0x0219	#	LATIN SMALL LETTER S WITH COMMA BELOW
  30.235+0xBB	0x00BB	#	RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
  30.236+0xBC	0x0152	#	LATIN CAPITAL LIGATURE OE
  30.237+0xBD	0x0153	#	LATIN SMALL LIGATURE OE
  30.238+0xBE	0x0178	#	LATIN CAPITAL LETTER Y WITH DIAERESIS
  30.239+0xBF	0x017C	#	LATIN SMALL LETTER Z WITH DOT ABOVE
  30.240+0xC0	0x00C0	#	LATIN CAPITAL LETTER A WITH GRAVE
  30.241+0xC1	0x00C1	#	LATIN CAPITAL LETTER A WITH ACUTE
  30.242+0xC2	0x00C2	#	LATIN CAPITAL LETTER A WITH CIRCUMFLEX
  30.243+0xC3	0x0102	#	LATIN CAPITAL LETTER A WITH BREVE
  30.244+0xC4	0x00C4	#	LATIN CAPITAL LETTER A WITH DIAERESIS
  30.245+0xC5	0x0106	#	LATIN CAPITAL LETTER C WITH ACUTE
  30.246+0xC6	0x00C6	#	LATIN CAPITAL LETTER AE
  30.247+0xC7	0x00C7	#	LATIN CAPITAL LETTER C WITH CEDILLA
  30.248+0xC8	0x00C8	#	LATIN CAPITAL LETTER E WITH GRAVE
  30.249+0xC9	0x00C9	#	LATIN CAPITAL LETTER E WITH ACUTE
  30.250+0xCA	0x00CA	#	LATIN CAPITAL LETTER E WITH CIRCUMFLEX
  30.251+0xCB	0x00CB	#	LATIN CAPITAL LETTER E WITH DIAERESIS
  30.252+0xCC	0x00CC	#	LATIN CAPITAL LETTER I WITH GRAVE
  30.253+0xCD	0x00CD	#	LATIN CAPITAL LETTER I WITH ACUTE
  30.254+0xCE	0x00CE	#	LATIN CAPITAL LETTER I WITH CIRCUMFLEX
  30.255+0xCF	0x00CF	#	LATIN CAPITAL LETTER I WITH DIAERESIS
  30.256+0xD0	0x0110	#	LATIN CAPITAL LETTER D WITH STROKE
  30.257+0xD1	0x0143	#	LATIN CAPITAL LETTER N WITH ACUTE
  30.258+0xD2	0x00D2	#	LATIN CAPITAL LETTER O WITH GRAVE
  30.259+0xD3	0x00D3	#	LATIN CAPITAL LETTER O WITH ACUTE
  30.260+0xD4	0x00D4	#	LATIN CAPITAL LETTER O WITH CIRCUMFLEX
  30.261+0xD5	0x0150	#	LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
  30.262+0xD6	0x00D6	#	LATIN CAPITAL LETTER O WITH DIAERESIS
  30.263+0xD7	0x015A	#	LATIN CAPITAL LETTER S WITH ACUTE
  30.264+0xD8	0x0170	#	LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
  30.265+0xD9	0x00D9	#	LATIN CAPITAL LETTER U WITH GRAVE
  30.266+0xDA	0x00DA	#	LATIN CAPITAL LETTER U WITH ACUTE
  30.267+0xDB	0x00DB	#	LATIN CAPITAL LETTER U WITH CIRCUMFLEX
  30.268+0xDC	0x00DC	#	LATIN CAPITAL LETTER U WITH DIAERESIS
  30.269+0xDD	0x0118	#	LATIN CAPITAL LETTER E WITH OGONEK
  30.270+0xDE	0x021A	#	LATIN CAPITAL LETTER T WITH COMMA BELOW
  30.271+0xDF	0x00DF	#	LATIN SMALL LETTER SHARP S
  30.272+0xE0	0x00E0	#	LATIN SMALL LETTER A WITH GRAVE
  30.273+0xE1	0x00E1	#	LATIN SMALL LETTER A WITH ACUTE
  30.274+0xE2	0x00E2	#	LATIN SMALL LETTER A WITH CIRCUMFLEX
  30.275+0xE3	0x0103	#	LATIN SMALL LETTER A WITH BREVE
  30.276+0xE4	0x00E4	#	LATIN SMALL LETTER A WITH DIAERESIS
  30.277+0xE5	0x0107	#	LATIN SMALL LETTER C WITH ACUTE
  30.278+0xE6	0x00E6	#	LATIN SMALL LETTER AE
  30.279+0xE7	0x00E7	#	LATIN SMALL LETTER C WITH CEDILLA
  30.280+0xE8	0x00E8	#	LATIN SMALL LETTER E WITH GRAVE
  30.281+0xE9	0x00E9	#	LATIN SMALL LETTER E WITH ACUTE
  30.282+0xEA	0x00EA	#	LATIN SMALL LETTER E WITH CIRCUMFLEX
  30.283+0xEB	0x00EB	#	LATIN SMALL LETTER E WITH DIAERESIS
  30.284+0xEC	0x00EC	#	LATIN SMALL LETTER I WITH GRAVE
  30.285+0xED	0x00ED	#	LATIN SMALL LETTER I WITH ACUTE
  30.286+0xEE	0x00EE	#	LATIN SMALL LETTER I WITH CIRCUMFLEX
  30.287+0xEF	0x00EF	#	LATIN SMALL LETTER I WITH DIAERESIS
  30.288+0xF0	0x0111	#	LATIN SMALL LETTER D WITH STROKE
  30.289+0xF1	0x0144	#	LATIN SMALL LETTER N WITH ACUTE
  30.290+0xF2	0x00F2	#	LATIN SMALL LETTER O WITH GRAVE
  30.291+0xF3	0x00F3	#	LATIN SMALL LETTER O WITH ACUTE
  30.292+0xF4	0x00F4	#	LATIN SMALL LETTER O WITH CIRCUMFLEX
  30.293+0xF5	0x0151	#	LATIN SMALL LETTER O WITH DOUBLE ACUTE
  30.294+0xF6	0x00F6	#	LATIN SMALL LETTER O WITH DIAERESIS
  30.295+0xF7	0x015B	#	LATIN SMALL LETTER S WITH ACUTE
  30.296+0xF8	0x0171	#	LATIN SMALL LETTER U WITH DOUBLE ACUTE
  30.297+0xF9	0x00F9	#	LATIN SMALL LETTER U WITH GRAVE
  30.298+0xFA	0x00FA	#	LATIN SMALL LETTER U WITH ACUTE
  30.299+0xFB	0x00FB	#	LATIN SMALL LETTER U WITH CIRCUMFLEX
  30.300+0xFC	0x00FC	#	LATIN SMALL LETTER U WITH DIAERESIS
  30.301+0xFD	0x0119	#	LATIN SMALL LETTER E WITH OGONEK
  30.302+0xFE	0x021B	#	LATIN SMALL LETTER T WITH COMMA BELOW
  30.303+0xFF	0x00FF	#	LATIN SMALL LETTER Y WITH DIAERESIS
    31.1new file mode 100755
    31.2--- /dev/null
    31.3+++ b/sys/lib/antiword/8859-2.txt
    31.4@@ -0,0 +1,303 @@
    31.5+#
    31.6+#	Name:             ISO 8859-2:1999 to Unicode
    31.7+#	Unicode version:  3.0
    31.8+#	Table version:    1.0
    31.9+#	Table format:     Format A
   31.10+#	Date:             1999 July 27
   31.11+#	Authors:          Ken Whistler <kenw@sybase.com>
   31.12+#
   31.13+#	Copyright (c) 1991-1999 Unicode, Inc.  All Rights reserved.
   31.14+#
   31.15+#	This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
   31.16+#	No claims are made as to fitness for any particular purpose.  No
   31.17+#	warranties of any kind are expressed or implied.  The recipient
   31.18+#	agrees to determine applicability of information provided.  If this
   31.19+#	file has been provided on optical media by Unicode, Inc., the sole
   31.20+#	remedy for any claim will be exchange of defective media within 90
   31.21+#	days of receipt.
   31.22+#
   31.23+#	Unicode, Inc. hereby grants the right to freely use the information
   31.24+#	supplied in this file in the creation of products supporting the
   31.25+#	Unicode Standard, and to make copies of this file in any form for
   31.26+#	internal or external distribution as long as this notice remains
   31.27+#	attached.
   31.28+#
   31.29+#	General notes:
   31.30+#
   31.31+#	This table contains the data the Unicode Consortium has on how
   31.32+#       ISO/IEC 8859-2:1999 characters map into Unicode.
   31.33+#
   31.34+#	Format:  Three tab-separated columns
   31.35+#		 Column #1 is the ISO/IEC 8859-2 code (in hex as 0xXX)
   31.36+#		 Column #2 is the Unicode (in hex as 0xXXXX)
   31.37+#		 Column #3 the Unicode name (follows a comment sign, '#')
   31.38+#
   31.39+#	The entries are in ISO/IEC 8859-2 order.
   31.40+#
   31.41+#	Version history
   31.42+#	1.0 version updates 0.1 version by adding mappings for all
   31.43+#	control characters.
   31.44+#
   31.45+#	Updated versions of this file may be found in:
   31.46+#		<ftp://ftp.unicode.org/Public/MAPPINGS/>
   31.47+#
   31.48+#	Any comments or problems, contact <errata@unicode.org>
   31.49+#	Please note that <errata@unicode.org> is an archival address;
   31.50+#	notices will be checked, but do not expect an immediate response.
   31.51+#
   31.52+0x00	0x0000	#	NULL
   31.53+0x01	0x0001	#	START OF HEADING
   31.54+0x02	0x0002	#	START OF TEXT
   31.55+0x03	0x0003	#	END OF TEXT
   31.56+0x04	0x0004	#	END OF TRANSMISSION
   31.57+0x05	0x0005	#	ENQUIRY
   31.58+0x06	0x0006	#	ACKNOWLEDGE
   31.59+0x07	0x0007	#	BELL
   31.60+0x08	0x0008	#	BACKSPACE
   31.61+0x09	0x0009	#	HORIZONTAL TABULATION
   31.62+0x0A	0x000A	#	LINE FEED
   31.63+0x0B	0x000B	#	VERTICAL TABULATION
   31.64+0x0C	0x000C	#	FORM FEED
   31.65+0x0D	0x000D	#	CARRIAGE RETURN
   31.66+0x0E	0x000E	#	SHIFT OUT
   31.67+0x0F	0x000F	#	SHIFT IN
   31.68+0x10	0x0010	#	DATA LINK ESCAPE
   31.69+0x11	0x0011	#	DEVICE CONTROL ONE
   31.70+0x12	0x0012	#	DEVICE CONTROL TWO
   31.71+0x13	0x0013	#	DEVICE CONTROL THREE
   31.72+0x14	0x0014	#	DEVICE CONTROL FOUR
   31.73+0x15	0x0015	#	NEGATIVE ACKNOWLEDGE
   31.74+0x16	0x0016	#	SYNCHRONOUS IDLE
   31.75+0x17	0x0017	#	END OF TRANSMISSION BLOCK
   31.76+0x18	0x0018	#	CANCEL
   31.77+0x19	0x0019	#	END OF MEDIUM
   31.78+0x1A	0x001A	#	SUBSTITUTE
   31.79+0x1B	0x001B	#	ESCAPE
   31.80+0x1C	0x001C	#	FILE SEPARATOR
   31.81+0x1D	0x001D	#	GROUP SEPARATOR
   31.82+0x1E	0x001E	#	RECORD SEPARATOR
   31.83+0x1F	0x001F	#	UNIT SEPARATOR
   31.84+0x20	0x0020	#	SPACE
   31.85+0x21	0x0021	#	EXCLAMATION MARK
   31.86+0x22	0x0022	#	QUOTATION MARK
   31.87+0x23	0x0023	#	NUMBER SIGN
   31.88+0x24	0x0024	#	DOLLAR SIGN
   31.89+0x25	0x0025	#	PERCENT SIGN
   31.90+0x26	0x0026	#	AMPERSAND
   31.91+0x27	0x0027	#	APOSTROPHE
   31.92+0x28	0x0028	#	LEFT PARENTHESIS
   31.93+0x29	0x0029	#	RIGHT PARENTHESIS
   31.94+0x2A	0x002A	#	ASTERISK
   31.95+0x2B	0x002B	#	PLUS SIGN
   31.96+0x2C	0x002C	#	COMMA
   31.97+0x2D	0x002D	#	HYPHEN-MINUS
   31.98+0x2E	0x002E	#	FULL STOP
   31.99+0x2F	0x002F	#	SOLIDUS
  31.100+0x30	0x0030	#	DIGIT ZERO
  31.101+0x31	0x0031	#	DIGIT ONE
  31.102+0x32	0x0032	#	DIGIT TWO
  31.103+0x33	0x0033	#	DIGIT THREE
  31.104+0x34	0x0034	#	DIGIT FOUR
  31.105+0x35	0x0035	#	DIGIT FIVE
  31.106+0x36	0x0036	#	DIGIT SIX
  31.107+0x37	0x0037	#	DIGIT SEVEN
  31.108+0x38	0x0038	#	DIGIT EIGHT
  31.109+0x39	0x0039	#	DIGIT NINE
  31.110+0x3A	0x003A	#	COLON
  31.111+0x3B	0x003B	#	SEMICOLON
  31.112+0x3C	0x003C	#	LESS-THAN SIGN
  31.113+0x3D	0x003D	#	EQUALS SIGN
  31.114+0x3E	0x003E	#	GREATER-THAN SIGN
  31.115+0x3F	0x003F	#	QUESTION MARK
  31.116+0x40	0x0040	#	COMMERCIAL AT
  31.117+0x41	0x0041	#	LATIN CAPITAL LETTER A
  31.118+0x42	0x0042	#	LATIN CAPITAL LETTER B
  31.119+0x43	0x0043	#	LATIN CAPITAL LETTER C
  31.120+0x44	0x0044	#	LATIN CAPITAL LETTER D
  31.121+0x45	0x0045	#	LATIN CAPITAL LETTER E
  31.122+0x46	0x0046	#	LATIN CAPITAL LETTER F
  31.123+0x47	0x0047	#	LATIN CAPITAL LETTER G
  31.124+0x48	0x0048	#	LATIN CAPITAL LETTER H
  31.125+0x49	0x0049	#	LATIN CAPITAL LETTER I
  31.126+0x4A	0x004A	#	LATIN CAPITAL LETTER J
  31.127+0x4B	0x004B	#	LATIN CAPITAL LETTER K
  31.128+0x4C	0x004C	#	LATIN CAPITAL LETTER L
  31.129+0x4D	0x004D	#	LATIN CAPITAL LETTER M
  31.130+0x4E	0x004E	#	LATIN CAPITAL LETTER N
  31.131+0x4F	0x004F	#	LATIN CAPITAL LETTER O
  31.132+0x50	0x0050	#	LATIN CAPITAL LETTER P
  31.133+0x51	0x0051	#	LATIN CAPITAL LETTER Q
  31.134+0x52	0x0052	#	LATIN CAPITAL LETTER R
  31.135+0x53	0x0053	#	LATIN CAPITAL LETTER S
  31.136+0x54	0x0054	#	LATIN CAPITAL LETTER T
  31.137+0x55	0x0055	#	LATIN CAPITAL LETTER U
  31.138+0x56	0x0056	#	LATIN CAPITAL LETTER V
  31.139+0x57	0x0057	#	LATIN CAPITAL LETTER W
  31.140+0x58	0x0058	#	LATIN CAPITAL LETTER X
  31.141+0x59	0x0059	#	LATIN CAPITAL LETTER Y
  31.142+0x5A	0x005A	#	LATIN CAPITAL LETTER Z
  31.143+0x5B	0x005B	#	LEFT SQUARE BRACKET
  31.144+0x5C	0x005C	#	REVERSE SOLIDUS
  31.145+0x5D	0x005D	#	RIGHT SQUARE BRACKET
  31.146+0x5E	0x005E	#	CIRCUMFLEX ACCENT
  31.147+0x5F	0x005F	#	LOW LINE
  31.148+0x60	0x0060	#	GRAVE ACCENT
  31.149+0x61	0x0061	#	LATIN SMALL LETTER A
  31.150+0x62	0x0062	#	LATIN SMALL LETTER B
  31.151+0x63	0x0063	#	LATIN SMALL LETTER C
  31.152+0x64	0x0064	#	LATIN SMALL LETTER D
  31.153+0x65	0x0065	#	LATIN SMALL LETTER E
  31.154+0x66	0x0066	#	LATIN SMALL LETTER F
  31.155+0x67	0x0067	#	LATIN SMALL LETTER G
  31.156+0x68	0x0068	#	LATIN SMALL LETTER H
  31.157+0x69	0x0069	#	LATIN SMALL LETTER I
  31.158+0x6A	0x006A	#	LATIN SMALL LETTER J
  31.159+0x6B	0x006B	#	LATIN SMALL LETTER K
  31.160+0x6C	0x006C	#	LATIN SMALL LETTER L
  31.161+0x6D	0x006D	#	LATIN SMALL LETTER M
  31.162+0x6E	0x006E	#	LATIN SMALL LETTER N
  31.163+0x6F	0x006F	#	LATIN SMALL LETTER O
  31.164+0x70	0x0070	#	LATIN SMALL LETTER P
  31.165+0x71	0x0071	#	LATIN SMALL LETTER Q
  31.166+0x72	0x0072	#	LATIN SMALL LETTER R
  31.167+0x73	0x0073	#	LATIN SMALL LETTER S
  31.168+0x74	0x0074	#	LATIN SMALL LETTER T
  31.169+0x75	0x0075	#	LATIN SMALL LETTER U
  31.170+0x76	0x0076	#	LATIN SMALL LETTER V
  31.171+0x77	0x0077	#	LATIN SMALL LETTER W
  31.172+0x78	0x0078	#	LATIN SMALL LETTER X
  31.173+0x79	0x0079	#	LATIN SMALL LETTER Y
  31.174+0x7A	0x007A	#	LATIN SMALL LETTER Z
  31.175+0x7B	0x007B	#	LEFT CURLY BRACKET
  31.176+0x7C	0x007C	#	VERTICAL LINE
  31.177+0x7D	0x007D	#	RIGHT CURLY BRACKET
  31.178+0x7E	0x007E	#	TILDE
  31.179+0x7F	0x007F	#	DELETE
  31.180+0x80	0x0080	#	<control>
  31.181+0x81	0x0081	#	<control>
  31.182+0x82	0x0082	#	<control>
  31.183+0x83	0x0083	#	<control>
  31.184+0x84	0x0084	#	<control>
  31.185+0x85	0x0085	#	<control>
  31.186+0x86	0x0086	#	<control>
  31.187+0x87	0x0087	#	<control>
  31.188+0x88	0x0088	#	<control>
  31.189+0x89	0x0089	#	<control>
  31.190+0x8A	0x008A	#	<control>
  31.191+0x8B	0x008B	#	<control>
  31.192+0x8C	0x008C	#	<control>
  31.193+0x8D	0x008D	#	<control>
  31.194+0x8E	0x008E	#	<control>
  31.195+0x8F	0x008F	#	<control>
  31.196+0x90	0x0090	#	<control>
  31.197+0x91	0x0091	#	<control>
  31.198+0x92	0x0092	#	<control>
  31.199+0x93	0x0093	#	<control>
  31.200+0x94	0x0094	#	<control>
  31.201+0x95	0x0095	#	<control>
  31.202+0x96	0x0096	#	<control>
  31.203+0x97	0x0097	#	<control>
  31.204+0x98	0x0098	#	<control>
  31.205+0x99	0x0099	#	<control>
  31.206+0x9A	0x009A	#	<control>
  31.207+0x9B	0x009B	#	<control>
  31.208+0x9C	0x009C	#	<control>
  31.209+0x9D	0x009D	#	<control>
  31.210+0x9E	0x009E	#	<control>
  31.211+0x9F	0x009F	#	<control>
  31.212+0xA0	0x00A0	#	NO-BREAK SPACE
  31.213+0xA1	0x0104	#	LATIN CAPITAL LETTER A WITH OGONEK
  31.214+0xA2	0x02D8	#	BREVE
  31.215+0xA3	0x0141	#	LATIN CAPITAL LETTER L WITH STROKE
  31.216+0xA4	0x00A4	#	CURRENCY SIGN
  31.217+0xA5	0x013D	#	LATIN CAPITAL LETTER L WITH CARON
  31.218+0xA6	0x015A	#	LATIN CAPITAL LETTER S WITH ACUTE
  31.219+0xA7	0x00A7	#	SECTION SIGN
  31.220+0xA8	0x00A8	#	DIAERESIS
  31.221+0xA9	0x0160	#	LATIN CAPITAL LETTER S WITH CARON
  31.222+0xAA	0x015E	#	LATIN CAPITAL LETTER S WITH CEDILLA
  31.223+0xAB	0x0164	#	LATIN CAPITAL LETTER T WITH CARON
  31.224+0xAC	0x0179	#	LATIN CAPITAL LETTER Z WITH ACUTE
  31.225+0xAD	0x00AD	#	SOFT HYPHEN
  31.226+0xAE	0x017D	#	LATIN CAPITAL LETTER Z WITH CARON
  31.227+0xAF	0x017B	#	LATIN CAPITAL LETTER Z WITH DOT ABOVE
  31.228+0xB0	0x00B0	#	DEGREE SIGN
  31.229+0xB1	0x0105	#	LATIN SMALL LETTER A WITH OGONEK
  31.230+0xB2	0x02DB	#	OGONEK
  31.231+0xB3	0x0142	#	LATIN SMALL LETTER L WITH STROKE
  31.232+0xB4	0x00B4	#	ACUTE ACCENT
  31.233+0xB5	0x013E	#	LATIN SMALL LETTER L WITH CARON
  31.234+0xB6	0x015B	#	LATIN SMALL LETTER S WITH ACUTE
  31.235+0xB7	0x02C7	#	CARON
  31.236+0xB8	0x00B8	#	CEDILLA
  31.237+0xB9	0x0161	#	LATIN SMALL LETTER S WITH CARON
  31.238+0xBA	0x015F	#	LATIN SMALL LETTER S WITH CEDILLA