From d65e766017bdea091c6e69465d4b235007ba2f6f Mon Sep 17 00:00:00 2001 From: Eric Swenson Date: Mon, 27 Feb 2023 16:17:12 -0800 Subject: [PATCH] Added files and directories that support the MDL 55 runtime. --- LICENSE | 54 + Makefile | 7 +- bin/libmud/l.nbin | Bin 0 -> 13284 bytes bin/libmud/libmud.dat | 2 + bin/libmud/libmud.lock | Bin 0 -> 35 bytes bin/libmud/libmud.nlib | Bin 0 -> 97293 bytes bin/libmud/lup.fbin | 94 + bin/libmud/nl.nbin | Bin 0 -> 12759 bytes bin/libmud/nlib.fbin | 262 +++ bin/libmud/nlup.fbin | 161 ++ bin/libmud/nlup.nbin | Bin 0 -> 77084 bytes bin/libmud/nlupcr.nbin | Bin 0 -> 1652 bytes bin/libmud/npck.fbin | 272 +++ bin/libmud/npck.nbin | Bin 0 -> 38578 bytes bin/libmud/pck.fbin | 238 +++ bin/libmud/pcksbr.nbin | Bin 0 -> 955 bytes bin/librm1/acchrs.nbin | Bin 0 -> 329 bytes bin/librm1/acheck.fbin | 150 ++ bin/librm1/aerror.nbin | Bin 0 -> 5283 bytes bin/librm1/ahack.fbin | 214 +++ bin/librm1/alib.fbin | 75 + bin/librm1/allgs.fbin | 28 + bin/librm1/aload.nbin | Bin 0 -> 21483 bytes bin/librm1/amake.fbin | 165 ++ bin/librm1/amnesa.fbin | 53 + bin/librm1/anotes.fbin | 38 + bin/librm1/ap.fbin | 22 + bin/librm1/append.fbin | 26 + bin/librm1/append.nbin | Bin 0 -> 1600 bytes bin/librm1/apprin.fbin | 56 + bin/librm1/aprint.fbin | 48 + bin/librm1/ardsio.nbin | Bin 0 -> 2059 bytes bin/librm1/asetup.nbin | Bin 0 -> 18377 bytes bin/librm1/ask.nbin | Bin 0 -> 7422 bytes bin/librm1/ast.nbin | Bin 0 -> 2427 bytes bin/librm1/asylum.fbin | 20 + bin/librm1/asystt.nbin | Bin 0 -> 2022 bytes bin/librm1/b-ob.fbin | 78 + bin/librm1/banner.nbin | Bin 0 -> 3184 bytes bin/librm1/bigpri.fbin | 41 + bin/librm1/blprin.nbin | Bin 0 -> 3361 bytes bin/librm1/blt.nbin | Bin 0 -> 1421 bytes bin/librm1/boot.nbin | Bin 0 -> 4611 bytes bin/librm1/break.nbin | Bin 0 -> 323 bytes bin/librm1/buf.fbin | 478 +++++ bin/librm1/bufch.nbin | Bin 0 -> 7955 bytes bin/librm1/bug.nbin | Bin 0 -> 4430 bytes bin/librm1/bugsys.nbin | Bin 0 -> 5374 bytes bin/librm1/calcom.fbin | 129 ++ bin/librm1/caldes.fbin | 53 + bin/librm1/calrdr.fbin | Bin 0 -> 6585 bytes bin/librm1/calsym.fbin | 190 ++ bin/librm1/caltop.fbin | 66 + bin/librm1/calutl.fbin | 49 + bin/librm1/cca.fbin | 174 ++ bin/librm1/ccafil.nbin | Bin 0 -> 15665 bytes bin/librm1/cdm.nbin | Bin 0 -> 15795 bytes bin/librm1/celest.fbin | 261 +++ bin/librm1/charap.fbin | 19 + bin/librm1/chkadr.fbin | 66 + bin/librm1/clock.nbin | Bin 0 -> 6810 bytes bin/librm1/coder.nbin | Bin 0 -> 5661 bytes bin/librm1/column.nbin | Bin 0 -> 2241 bytes bin/librm1/comand.fbin | 30 + bin/librm1/commud.bin | 24 + bin/librm1/complx.fbin | 213 +++ bin/librm1/confir.nbin | Bin 0 -> 577 bytes bin/librm1/cpyfil.fbin | 14 + bin/librm1/crime.nbin | Bin 0 -> 7033 bytes bin/librm1/critic.fbin | 177 ++ bin/librm2/datime.fbin | 32 + bin/librm2/datred.nbin | Bin 0 -> 2308 bytes bin/librm2/datsav.nbin | Bin 0 -> 2176 bytes bin/librm2/db.fbin | 47 + bin/librm2/dcreat.nbin | Bin 0 -> 2828 bytes bin/librm2/ddm.fbin | 315 ++++ bin/librm2/ddma.fbin | 39 + bin/librm2/ddt.nbin | Bin 0 -> 1235 bytes bin/librm2/declm.nbin | Bin 0 -> 6434 bytes bin/librm2/demcls.fbin | 23 + bin/librm2/dfl.fbin | Bin 0 -> 1788 bytes bin/librm2/dir.fbin | 79 + bin/librm2/displa.fbin | 198 +++ bin/librm2/dmx.nbin | Bin 0 -> 2846 bytes bin/librm2/doops.nbin | Bin 0 -> 2984 bytes bin/librm2/dout.nbin | Bin 0 -> 800 bytes bin/librm2/dow.fbin | 11 + bin/librm2/dragan.fbin | 72 + bin/librm2/dragit.fbin | 139 ++ bin/librm2/dskgrp.nbin | Bin 0 -> 11394 bytes bin/librm2/egroup.fbin | 213 +++ bin/librm2/ehack.fbin | 219 +++ bin/librm2/emonit.nbin | Bin 0 -> 3253 bytes bin/librm2/erorc2.gbin | Bin 0 -> 1770 bytes bin/librm2/eutl.fbin | 174 ++ bin/librm2/evil.fbin | 16 + bin/librm2/exputi.fbin | 33 + bin/librm2/extern.nbin | Bin 0 -> 3856 bytes bin/librm2/fdate.gbin | Bin 0 -> 2519 bytes bin/librm2/filapp.nbin | Bin 0 -> 1370 bytes bin/librm2/filinf.nbin | Bin 0 -> 819 bytes bin/librm2/fint.nbin | Bin 0 -> 3288 bytes bin/librm2/format.fbin | 203 +++ bin/librm2/fp.fbin | 66 + bin/librm2/ftp.nbin | Bin 0 -> 8085 bytes bin/librm2/fulnam.nbin | Bin 0 -> 2496 bytes bin/librm2/gendir.nbin | Bin 0 -> 1698 bytes bin/librm2/gl.nbin | Bin 0 -> 11516 bytes bin/librm2/gnjfni.fbin | 78 + bin/librm2/gs.fbin | 432 +++++ bin/librm2/gshard.nbin | Bin 0 -> 7524 bytes bin/librm2/gstard.nbin | Bin 0 -> 8518 bytes bin/librm2/gstiml.fbin | 77 + bin/librm2/gsttyc.fbin | 84 + bin/librm2/haverf.nbin | Bin 0 -> 1422 bytes bin/librm2/helpat.nbin | Bin 0 -> 8867 bytes bin/librm2/hist.nbin | Bin 0 -> 3679 bytes bin/librm2/histor.nbin | Bin 0 -> 31155 bytes bin/librm2/hosts.fbin | 50 + bin/librm2/hptek.fbin | 17 + bin/librm2/init.gbin | Bin 0 -> 13412 bytes bin/librm2/iot8.nbin | Bin 0 -> 612 bytes bin/librm2/itime.fbin | 42 + bin/librm2/kwic.fbin | 35 + bin/librm2/netrjs.fbin | 374 ++++ bin/librm2/oddtst.nbin | Bin 0 -> 5920 bytes bin/librm3/im_io.nbin | Bin 0 -> 2639 bytes bin/librm3/imc.nbin | Bin 0 -> 3686 bytes bin/librm3/imlac.nbin | Bin 0 -> 1145 bytes bin/librm3/infass.nbin | Bin 0 -> 3373 bytes bin/librm3/inferi.fbin | 173 ++ bin/librm3/inquir.nbin | Bin 0 -> 2365 bytes bin/librm3/inv.fbin | 81 + bin/librm3/ipck.fbin | 128 ++ bin/librm3/irsbas.fbin | 1 + bin/librm3/irsbch.nbin | Bin 0 -> 5793 bytes bin/librm3/irscom.nbin | Bin 0 -> 15076 bytes bin/librm3/irsgrf.nbin | Bin 0 -> 2061 bytes bin/librm3/irsmak.fbin | 143 ++ bin/librm3/irsupd.fbin | 114 ++ bin/librm3/irsusr.fbin | 214 +++ bin/librm3/ist.nbin | Bin 0 -> 2499 bytes bin/librm3/its.fbin | 100 ++ bin/librm3/its.nbin | Bin 0 -> 5729 bytes bin/librm3/jade.fbin | 106 ++ bin/librm3/jade.nbin | Bin 0 -> 17654 bytes bin/librm3/jcl.nbin | Bin 0 -> 858 bytes bin/librm3/jobass.fbin | 30 + bin/librm3/jobs.fbin | 104 ++ bin/librm3/l-m.nbin | Bin 0 -> 42487 bytes bin/librm3/level.nbin | Bin 0 -> 167 bytes bin/librm3/lex.fbin | 101 ++ bin/librm3/lexer.nbin | Bin 0 -> 1113 bytes bin/librm3/lines.fbin | 25 + bin/librm3/locks.nbin | Bin 0 -> 8057 bytes bin/librm3/login.nbin | Bin 0 -> 1151 bytes bin/librm3/lpicdm.nbin | Bin 0 -> 6409 bytes bin/librm3/lpictu.nbin | Bin 0 -> 55898 bytes bin/librm3/lsrhil.fbin | 50 + bin/librm3/lsrtns.fbin | 76 + bin/librm3/lsthck.nbin | Bin 0 -> 2763 bytes bin/librm3/lup.fbin | 108 ++ bin/librm3/macros.fbin | 125 ++ bin/librm3/madman.fbin | 336 ++++ bin/librm3/mail.gbin | Bin 0 -> 87990 bytes bin/librm3/makduv.nbin | Bin 0 -> 3236 bytes bin/librm3/maprim.fbin | 81 + bin/librm3/mclean.nbin | Bin 0 -> 13690 bytes bin/librm3/mddata.nbin | Bin 0 -> 6694 bytes bin/librm3/mddof.nbin | Bin 0 -> 9436 bytes bin/librm3/mddump.nbin | Bin 0 -> 3383 bytes bin/librm3/mdkill.nbin | Bin 0 -> 3145 bytes bin/librm3/mdmake.nbin | Bin 0 -> 3097 bytes bin/librm3/mdtabl.nbin | Bin 0 -> 6854 bytes bin/librm3/mdtype.nbin | 130 ++ bin/librm3/mfd.fbin | 26 + bin/librm3/mgprim.fbin | 197 ++ bin/librm3/migsmn.fbin | 146 ++ bin/librm3/mirbas.nbin | Bin 0 -> 8322 bytes bin/librm3/mircom.nbin | Bin 0 -> 10230 bytes bin/librm3/mirmak.nbin | Bin 0 -> 6540 bytes bin/librm3/misc01.nbin | Bin 0 -> 5240 bytes bin/librm3/mlearn.fbin | 194 ++ bin/librm3/mlearn.nbin | Bin 0 -> 40987 bytes bin/librm3/mload.nbin | Bin 0 -> 9196 bytes bin/librm3/mneme.fbin | 269 +++ bin/librm3/mneme.nbin | Bin 0 -> 49469 bytes bin/librm3/mnsalv.fbin | 71 + bin/librm3/monitr.gbin | Bin 0 -> 13613 bytes bin/librm3/monitr.nbin | Bin 0 -> 15574 bytes bin/librm3/morph.fbin | Bin 0 -> 656 bytes bin/librm3/morph.nbin | Bin 0 -> 10054 bytes bin/librm3/mparse.nbin | Bin 0 -> 18695 bytes bin/librm3/mrkmak.nbin | Bin 0 -> 1898 bytes bin/librm3/msdtp.fbin | 52 + bin/librm3/msgirs.nbin | Bin 0 -> 13904 bytes bin/librm3/msgsys.nbin | Bin 0 -> 1608 bytes bin/librm3/mtprim.fbin | 75 + bin/librm3/mudcal.fbin | 54 + bin/librm3/mudirs.nbin | Bin 0 -> 5354 bytes bin/librm3/mudtec.fbin | 55 + bin/librm3/ndired.nbin | Bin 0 -> 10125 bytes bin/librm3/netftp.fbin | 114 ++ bin/librm3/neticp.fbin | 26 + bin/librm3/netwrk.nbin | Bin 0 -> 33348 bytes bin/librm3/newstr.nbin | Bin 0 -> 4662 bytes bin/librm3/nirs.fbin | 22 + bin/librm3/now.fbin | 16 + bin/librm3/nstr.nbin | Bin 0 -> 4200 bytes bin/librm3/nunc.fbin | 21 + bin/librm3/oops.nbin | Bin 0 -> 6327 bytes bin/librm4/p-item.fbin | 55 + bin/librm4/pages.fbin | 18 + bin/librm4/parsed.nbin | Bin 0 -> 5806 bytes bin/librm4/parsej.nbin | Bin 0 -> 805 bytes bin/librm4/pen.nbin | 240 +++ bin/librm4/penup.nbin | Bin 0 -> 4886 bytes bin/librm4/period.nbin | Bin 0 -> 5680 bytes bin/librm4/pic.nbin | Bin 0 -> 7900 bytes bin/librm4/pic_or.nbin | Bin 0 -> 862 bytes bin/librm4/pinfo.nbin | Bin 0 -> 6829 bytes bin/librm4/pio.fbin5 | 266 +++ bin/librm4/piosub.fbin | 42 + bin/librm4/plotcl.nbin | Bin 0 -> 8072 bytes bin/librm4/plotso.fbin | 275 +++ bin/librm4/pmfree.fbin | 17 + bin/librm4/ppmap.nbin | Bin 0 -> 2504 bytes bin/librm4/prtuti.fbin | 102 ++ bin/librm4/psampl.nbin | Bin 0 -> 3581 bytes bin/librm4/qput.fbin | 28 + bin/librm4/queue.fbin | 45 + bin/librm4/rb.nbin | Bin 0 -> 4007 bytes bin/librm4/rfc713.fbin | 65 + bin/librm4/rjschn.nbin | Bin 0 -> 5392 bytes bin/librm4/rjscmd.nbin | Bin 0 -> 9797 bytes bin/librm4/rjscrd.nbin | Bin 0 -> 11182 bytes bin/librm4/rjsdat.nbin | Bin 0 -> 2618 bytes bin/librm4/rjsjob.nbin | Bin 0 -> 12685 bytes bin/librm4/rjsret.nbin | Bin 0 -> 9789 bytes bin/librm4/rjstel.nbin | Bin 0 -> 11981 bytes bin/librm4/rjsuti.nbin | Bin 0 -> 7895 bytes bin/librm4/rlsdic.nbin | Bin 0 -> 10323 bytes bin/librm4/rlsloo.nbin | Bin 0 -> 4014 bytes bin/librm4/rlsstr.nbin | Bin 0 -> 389 bytes bin/librm4/rqfile.fbin | 41 + bin/librm4/rspars.fbin | 24 + bin/librm4/s-to-6.nbin | Bin 0 -> 619 bytes bin/librm4/scope.nbin | Bin 0 -> 1554 bytes bin/librm4/scr.fbin | 342 ++++ bin/librm4/script.nbin | Bin 0 -> 3834 bytes bin/librm4/sdm.fbin | 110 ++ bin/librm4/sdmsym.fbin | 30 + bin/librm4/sendms.nbin | Bin 0 -> 2091 bytes bin/librm4/skip.fbin | Bin 0 -> 2474 bytes bin/librm4/smcod.nbin | Bin 0 -> 1813 bytes bin/librm4/smms.nbin | Bin 0 -> 20987 bytes bin/librm4/smp.fbin | 66 + bin/librm4/sortob.nbin | Bin 0 -> 1594 bytes bin/librm4/squoze.nbin | Bin 0 -> 954 bytes bin/librm4/stdmst.nbin | Bin 0 -> 365 bytes bin/librm4/stink.fbin | 39 + bin/librm4/stk.nbin | Bin 0 -> 8772 bytes bin/librm4/str.fbin | 73 + bin/librm4/swchar.fbin | 551 ++++++ bin/librm4/symbol.fbin | Bin 0 -> 2891 bytes bin/librm4/systat.nbin | Bin 0 -> 537 bytes bin/librm4/tailor.fbin | 138 ++ bin/librm4/temhak.fbin | 20 + bin/librm4/temhlp.fbin | 63 + bin/librm4/templt.fbin | 371 ++++ bin/librm4/tenxio.nbin | Bin 0 -> 13157 bytes bin/librm4/timfcn.fbin | 163 ++ bin/librm4/tn.nbin | Bin 0 -> 9310 bytes bin/librm4/tokens.nbin | Bin 0 -> 3203 bytes bin/librm4/tomem.nbin | Bin 0 -> 8365 bytes bin/librm4/tr.nbin | Bin 0 -> 9128 bytes bin/librm4/transl.fbin | 28 + bin/librm4/tree.nbin | Bin 0 -> 5456 bytes bin/librm4/tscrip.nbin | Bin 0 -> 1501 bytes bin/librm4/tstate.nbin | Bin 0 -> 2925 bytes bin/librm4/tty.fbin | 48 + bin/librm4/txtuti.fbin | 29 + bin/librm4/ugrf.nbin | Bin 0 -> 56198 bytes bin/librm4/ulist.fbin | 57 + bin/librm4/undecl.nbin | Bin 0 -> 7312 bytes bin/librm4/update.nbin | Bin 0 -> 10256 bytes bin/librm4/uvbyte.fbin | 12 + bin/librm4/uvhack.fbin | 15 + bin/librm4/uvstc.nbin | Bin 0 -> 6948 bytes bin/librm4/vctman.fbin | 29 + bin/librm4/vctsrc.nbin | Bin 0 -> 1178 bytes bin/librm4/vll-da.nbin | Bin 0 -> 8853 bytes bin/librm4/vsort.nbin | Bin 0 -> 2237 bytes bin/librm4/when.nbin | Bin 0 -> 3668 bytes bin/librm4/x_uti.nbin | Bin 0 -> 10226 bytes bin/librm4/xgedit.fbin | 88 + bin/librm4/xuname.nbin | Bin 0 -> 520 bytes bin/mbprog/assem.fbin | 348 ++++ bin/mbprog/assem.nbin | Bin 0 -> 51168 bytes bin/mbprog/bigpri.nbin | Bin 0 -> 4291 bytes bin/mbprog/blt.nbin | Bin 0 -> 260 bytes bin/mbprog/buf.gbin | Bin 0 -> 44552 bytes bin/mbprog/buf.nbin | 19 + bin/mbprog/bufcrf.nbin | Bin 0 -> 2565 bytes bin/mbprog/celest.nbin | Bin 0 -> 47819 bytes bin/mbprog/chkadr.gbin | Bin 0 -> 14125 bytes bin/mbprog/chkadr.nbin | Bin 0 -> 18613 bytes bin/mbprog/clean.nbin | Bin 0 -> 24608 bytes bin/mbprog/coder.nbin | Bin 0 -> 5661 bytes bin/mbprog/consol.nbin | Bin 0 -> 862 bytes bin/mbprog/corblk.nbin | Bin 0 -> 720 bytes bin/mbprog/count.nbin | Bin 0 -> 419 bytes bin/mbprog/cpyfil.fbin | 17 + bin/mbprog/critic.nbin | Bin 0 -> 75655 bytes bin/mbprog/data.fbin | 39 + bin/mbprog/datime.nbin | Bin 0 -> 1887 bytes bin/mbprog/ddt.nbin | Bin 0 -> 1235 bytes bin/mbprog/demon.nbin | Bin 0 -> 2267 bytes bin/mbprog/dir.nbin | Bin 0 -> 10476 bytes bin/mbprog/dirhak.nbin | Bin 0 -> 3249 bytes bin/mbprog/dow.nbin | Bin 0 -> 275 bytes bin/mbprog/dragan.nbin | Bin 0 -> 4746 bytes bin/mbprog/dragit.nbin | Bin 0 -> 29181 bytes bin/mbprog/dskupd.binary | 6 + bin/mbprog/dummy.nbin | Bin 0 -> 376 bytes bin/mbprog/erorc2.nbin | Bin 0 -> 1810 bytes bin/mbprog/fft.nbin | Bin 0 -> 2835 bytes bin/mbprog/fixup.fbin | 29 + bin/mbprog/fmacro.fbin | 25 + bin/mbprog/fmacro.nbin | Bin 0 -> 2037 bytes bin/mbprog/fold.fbin | 26 + bin/mbprog/format.nbin | Bin 0 -> 25229 bytes bin/mbprog/ftpusr.fbin | 40 + bin/mbprog/gc.nbin | Bin 0 -> 7317 bytes bin/mbprog/geom.nbin | Bin 0 -> 6745 bytes bin/mbprog/hash.fbin | 17 + bin/mbprog/hash.fmacro | 22 + bin/mbprog/hash.nbin | Bin 0 -> 1913 bytes bin/mbprog/helpld.fbin | 50 + bin/mbprog/hosts.nbin | Bin 0 -> 4876 bytes bin/mbprog/icp.fbin | 18 + bin/mbprog/itime.nbin | Bin 0 -> 4825 bytes bin/mbprog/jcl.nbin | Bin 0 -> 858 bytes bin/mbprog/jobass.nbin | Bin 0 -> 2468 bytes bin/mbprog/jobs.nbin | Bin 0 -> 22400 bytes bin/mbprog/lines.nbin | Bin 0 -> 2941 bytes bin/mbprog/lsrhil.nbin | Bin 0 -> 9594 bytes bin/mbprog/lsrtns.nbin | Bin 0 -> 5472 bytes bin/mbprog/macro.nbin | Bin 0 -> 25736 bytes bin/mbprog/macros.nbin | Bin 0 -> 18565 bytes bin/mbprog/mail.nbin | Bin 0 -> 111907 bytes bin/mbprog/mfd.nbin | Bin 0 -> 4304 bytes bin/mbprog/msub.fbin | 60 + bin/mbprog/netftp.nbin | Bin 0 -> 14193 bytes bin/mbprog/now.nbin | Bin 0 -> 1250 bytes bin/mbprog/pages.nbin | Bin 0 -> 1324 bytes bin/mbprog/pck.fbin | 298 ++++ bin/mbprog/pcond.fbin | 16 + bin/mbprog/pmap.fbin | 146 ++ bin/mbprog/poster.nbin | Bin 0 -> 4593 bytes bin/mbprog/ppmap.binary | Bin 0 -> 2053 bytes bin/mbprog/releas.nbin | Bin 0 -> 705 bytes bin/mbprog/scr.nbin | Bin 0 -> 12077 bytes bin/mbprog/scrcrf.nbin | Bin 0 -> 2850 bytes bin/mbprog/sdml.fbin | 141 ++ bin/mbprog/sharer.binary | 9 + bin/mbprog/skyfan.nbin | Bin 0 -> 10395 bytes bin/mbprog/sortx.nbin | Bin 0 -> 2458 bytes bin/mbprog/symbol.gbin | Bin 0 -> 13005 bytes bin/mbprog/symbol.nbin | Bin 0 -> 15897 bytes bin/mbprog/temhak.fbin | 20 + bin/mbprog/timfcn.nbin | Bin 0 -> 32778 bytes bin/mbprog/transl.nbin | Bin 0 -> 4406 bytes bin/mbprog/tty.nbin | Bin 0 -> 3320 bytes bin/mbprog/uv-s.nbin | Bin 0 -> 948 bytes bin/mbprog/vctman.fbin | 33 + bin/mprog/assem.nbin | Bin 0 -> 58201 bytes bin/mprog1/demcls.nbin | Bin 0 -> 1647 bytes bin/mprog2/histor.nbin | Bin 0 -> 31892 bytes bin/mprog2/uvhack.nbin | Bin 0 -> 799 bytes bin/mudbug/cursor.fbin | 59 + bin/mudbug/cursor.nbin | Bin 0 -> 9255 bytes bin/mudbug/debugr.fbin | Bin 0 -> 4033 bytes bin/mudbug/debugr.nbin | Bin 0 -> 18888 bytes bin/mudbug/dfl.fbin | 79 + bin/mudbug/dfl.nbin | Bin 0 -> 17323 bytes bin/mudbug/edit.fbin | 145 ++ bin/mudbug/edit.nbin | Bin 0 -> 53833 bytes bin/mudbug/findat.fbin | 21 + bin/mudbug/findat.nbin | Bin 0 -> 13451 bytes bin/mudbug/fr&.fbin | 64 + bin/mudbug/fr&.nbin | Bin 0 -> 12853 bytes bin/mudbug/frmsp.fbin | 52 + bin/mudbug/frmsp.nbin | Bin 0 -> 8772 bytes bin/mudbug/helpld.nbin | Bin 0 -> 4766 bytes bin/mudbug/im.nbin | Bin 0 -> 2613 bytes bin/mudbug/mend.fbin | 123 ++ bin/mudbug/mend.nbin | Bin 0 -> 48062 bytes bin/mudbug/pprint.fbin | 96 + bin/mudbug/pprint.nbin | Bin 0 -> 54032 bytes bin/mudbug/rdb.nbin | Bin 0 -> 5302 bytes bin/mudbug/trace.fbin | 84 + bin/mudbug/trace.nbin | Bin 0 -> 10561 bytes bin/mudbug/unassm.fbin | 364 ++++ bin/mudbug/unassm.nbin | Bin 0 -> 37948 bytes bin/mudbug/unlink.fbin | 20 + bin/mudbug/unlink.nbin | Bin 0 -> 2385 bytes bin/mudbug/unpure.nbin | Bin 0 -> 1157 bytes bin/mudtmp/added.files | Bin 0 -> 14390 bytes bin/mudtmp/dump.bit | Bin 0 -> 35 bytes doc/mprog2/dragit.info | 41 + doc/mudbug/debugr.help | 18 + doc/mudbug/edit.nhelp | 82 + doc/mudbug/trace.info | Bin 0 -> 2623 bytes doc/mudbug/trace.order | Bin 0 -> 2278 bytes src/libmud/nl.2 | 211 +++ src/libmud/nlib.17 | 713 ++++++++ src/libmud/nlibma.1 | 63 + src/libmud/nlup.72 | 1697 ++++++++++++++++++ src/libmud/nlupcr.8 | 154 ++ src/libmud/npck.26 | 775 ++++++++ src/libmud/pcksbr.2 | 95 + src/librm1/bugexp.udl057 | 111 ++ src/librm1/chan.ubkdx4 | 49 + src/librm1/clean.1 | Bin 0 -> 23222 bytes src/librm1/comexp.udl591 | 299 ++++ src/librm1/comkey.udl111 | 130 ++ src/librm1/sig.1 | 143 ++ src/librm2/datsav.kwc001 | Bin 0 -> 2176 bytes src/librm3/le&sde.ueb008 | 306 ++++ src/librm3/map2.utt028 | 218 +++ src/librm3/msbs.madman | 335 ++++ src/librm3/ndired.umrc21 | 167 ++ src/librm4/temhlp.1 | 63 + src/librm4/transl.1 | 36 + src/librm4/uvbyte.rsubr | 51 + src/mprog/acchrs.udl001 | 19 + src/mprog/aconst.udl005 | 278 +++ src/mprog/ahelp.udl001 | 123 ++ src/mprog/aprint.udl001 | 140 ++ src/mprog/assem.undr88 | 1144 ++++++++++++ src/mprog/asystt.19 | 68 + src/mprog/atoms.umb007 | 52 + src/mprog/autodl.ujil02 | 354 ++++ src/mprog/b-ob.ujmb01 | 288 +++ src/mprog/batabs.ujm005 | 30 + src/mprog/bignum.uwl004 | 293 +++ src/mprog/bigpri.ujm030 | 167 ++ src/mprog/bindum.ujm003 | 22 + src/mprog/blt.1 | 17 + src/mprog/buf.ueb135 | 1075 +++++++++++ src/mprog/bufcrf.utaa15 | 237 +++ src/mprog/calcom.umrc04 | 402 +++++ src/mprog/caldes.ueb017 | 134 ++ src/mprog/calrdr.umrc07 | 1040 +++++++++++ src/mprog/calsym.ueb005 | 592 +++++++ src/mprog/caltop.umrc02 | 142 ++ src/mprog/calutl.umrc01 | 285 +++ src/mprog/celest.usg072 | 919 ++++++++++ src/mprog/coder.udl030 | 114 ++ src/mprog/column.udl001 | 40 + src/mprog/comand.ueb003 | 75 + src/mprog/comps.umss02 | 36 + src/mprog/corblk.ubkd02 | 58 + src/mprog/count.udl002 | 42 + src/mprog/cpyreq.udl001 | 32 + src/mprog/crime.udl001 | 156 ++ src/mprog/data.ubkd01 | 270 +++ src/mprog/datime.udl006 | 152 ++ src/mprog/declm.udl002 | 115 ++ src/mprog/dir.udl006 | 204 +++ src/mprog/dirhak.usg003 | 49 + src/mprog/doops.udl001 | 60 + src/mprog/dow.undr02 | 18 + src/mprog/fillen.udl003 | 28 + src/mprog/fmacro.ubkd10 | 47 + src/mprog/fold.ubkd04 | 127 ++ src/mprog/gc.ubkd13 | 150 ++ src/mprog/grpchk.undr13 | 654 +++++++ src/mprog/hash.ubkd07 | 47 + src/mprog/helpld.6 | 100 ++ src/mprog/hosts.1 | 660 +++++++ src/mprog/hosts.utaa78 | 653 +++++++ src/mprog/imlac.ubkd09 | 112 ++ src/mprog/jobass.usg013 | 212 +++ src/mprog/l.undr03 | 82 + src/mprog/locks.ueb015 | 687 +++++++ src/mprog/login.ujfh14 | 98 + src/mprog/lsthck.undr01 | 69 + src/mprog/lup.undr04 | 475 +++++ src/mprog/macro.ubkd03 | 463 +++++ src/mprog/macros.ubkd02 | 245 +++ src/mprog/mcomb.ubkd29 | 161 ++ src/mprog/mfd.udl004 | 63 + src/mprog/mudcom.utt045 | 239 +++ src/mprog/now.ujfh09 | 46 + src/mprog/pages.udl004 | 126 ++ src/mprog/parse.umss02 | 83 + src/mprog/pck.undr13 | 712 ++++++++ src/mprog/pcond.ubkd01 | 42 + src/mprog/pdump.ubtb26 | 302 ++++ src/mprog/pmap.udl076 | 411 +++++ src/mprog/pmapr.udl004 | 288 +++ src/mprog/qput.ujhm01 | 135 ++ src/mprog/releas.ujmb04 | 71 + src/mprog/rjs.ujfh17 | 303 ++++ src/mprog/scr.uta001 | 255 +++ src/mprog/scrcrf.uta002 | 266 +++ src/mprog/scrmac.uta002 | 54 + src/mprog/sharer.udl001 | 38 + src/mprog/skyfan.usg017 | 146 ++ src/mprog/squoze.undr04 | 31 + src/mprog/str.ueb008 | 532 ++++++ src/mprog/subsys.udl001 | 37 + src/mprog/sun.lbh085 | 288 +++ src/mprog/sunnew.lbh041 | 466 +++++ src/mprog/sunonr.lbh016 | 574 ++++++ src/mprog/syntax.ubkd23 | 539 ++++++ src/mprog/timfcn.umss44 | 573 ++++++ src/mprog/tty.udl027 | 281 +++ src/mprog/unload.ubkd08 | 48 + src/mprog/vtsdef.uta002 | 52 + src/mprog1/acom.ujm019 | 413 +++++ src/mprog1/calndr.uga158 | 1827 +++++++++++++++++++ src/mprog1/cca.umsb07 | 581 ++++++ src/mprog1/charap.ujhm01 | 84 + src/mprog1/clean.umsb06 | 483 +++++ src/mprog1/datred.usg005 | 33 + src/mprog1/demcls.ujhm02 | 157 ++ src/mprog1/ecom.ujm010 | 232 +++ src/mprog1/gs.ujm021 | 703 ++++++++ src/mprog1/inferi.udl026 | 539 ++++++ src/mprog1/invert.umsb12 | 3647 ++++++++++++++++++++++++++++++++++++++ src/mprog1/its.usg021 | 356 ++++ src/mprog1/jobs.usg091 | Bin 0 -> 19705 bytes src/mprog1/level.ubkd02 | 12 + src/mprog1/lib.umsb03 | 79 + src/mprog1/libmnt.umsb01 | 55 + src/mprog1/mpck.umsb05 | 312 ++++ src/mprog1/mudtec.udl021 | 160 ++ src/mprog1/netftp.ujfh34 | 293 +++ src/mprog1/pio.umsb02 | 1604 +++++++++++++++++ src/mprog1/piosub.umsb01 | 451 +++++ src/mprog1/plotso.ujm065 | 1005 +++++++++++ src/mprog1/smms.usg142 | 595 +++++++ src/mprog1/smmssp.771 | 27 + src/mprog1/stk.ueb022 | 53 + src/mprog1/systat.ujhm02 | 62 + src/mprog1/tenxio.umsb03 | 835 +++++++++ src/mprog1/transl.abstr | 331 ++++ src/mprog1/transl.ujhm08 | 453 +++++ src/mprog1/vsort.ueb001 | 27 + src/mprog1/when.udl003 | 80 + src/mprog2/append.udld05 | 48 + src/mprog2/boot.udl001 | 234 +++ src/mprog2/bugsys.udl008 | 86 + src/mprog2/charac.uerb14 | 107 ++ src/mprog2/chkadr.udl002 | 378 ++++ src/mprog2/clock.udl002 | 142 ++ src/mprog2/confir.udl001 | 13 + src/mprog2/critic.udl030 | 1428 +++++++++++++++ src/mprog2/ctable.udl007 | 80 + src/mprog2/datsav.udl007 | 28 + src/mprog2/dcreat.udl003 | 56 + src/mprog2/ddtsty.udl011 | 86 + src/mprog2/dragan.usg019 | 118 ++ src/mprog2/dragit.udl038 | 527 ++++++ src/mprog2/dskgrp.udl007 | 213 +++ src/mprog2/dummy.udl001 | 11 + src/mprog2/emonit.udl001 | 55 + src/mprog2/erorc2.uerb16 | 232 +++ src/mprog2/extern.17 | 73 + src/mprog2/filinf.udl006 | 79 + src/mprog2/fint.udl001 | 84 + src/mprog2/format.udl076 | 513 ++++++ src/mprog2/ftp.udl001 | 159 ++ src/mprog2/gendir.udl001 | 28 + src/mprog2/gnjfni.utaa14 | 269 +++ src/mprog2/haverf.uerb03 | 117 ++ src/mprog2/histor.usg063 | 444 +++++ src/mprog2/init.umrc37 | 238 +++ src/mprog2/inquir.1 | 42 + src/mprog2/iot8.udl001 | 45 + src/mprog2/itime.udl037 | Bin 0 -> 4955 bytes src/mprog2/jade.uagj36 | 273 +++ src/mprog2/jcl.udl008 | 103 ++ src/mprog2/lex.1 | 2225 +++++++++++++++++++++++ src/mprog2/lexer.udl002 | 37 + src/mprog2/lines.udl004 | 53 + src/mprog2/lsrhil.usg039 | 175 ++ src/mprog2/mail.udl273 | 2362 ++++++++++++++++++++++++ src/mprog2/makduv.udl005 | 59 + src/mprog2/mclean.udl010 | 288 +++ src/mprog2/mddof.udl005 | 251 +++ src/mprog2/mderrs.udl006 | 195 ++ src/mprog2/mdkill.udl004 | 52 + src/mprog2/mdtabl.udl009 | 334 ++++ src/mprog2/mdtype.udl012 | 249 +++ src/mprog2/mlearn.uerb64 | 602 +++++++ src/mprog2/mload.udl045 | Bin 0 -> 4629 bytes src/mprog2/mneme.uerb48 | 692 ++++++++ src/mprog2/monitr.56 | 271 +++ src/mprog2/morph.uagj29 | 179 ++ src/mprog2/mrkmak.udl001 | 40 + src/mprog2/msgsys.udl002 | 31 + src/mprog2/nstr.udl009 | 87 + src/mprog2/oops.udl024 | 107 ++ src/mprog2/parsed.udl016 | 186 ++ src/mprog2/pinfo.udl001 | 137 ++ src/mprog2/ppmap.udl002 | 115 ++ src/mprog2/psampl.udl002 | 70 + src/mprog2/qload.utt052 | 145 ++ src/mprog2/r_cmp.ujfh02 | 1064 +++++++++++ src/mprog2/rlsdic.udl005 | 186 ++ src/mprog2/rlsloo.udl002 | 87 + src/mprog2/rlsstr.udl003 | 28 + src/mprog2/s-to-6.udl004 | 42 + src/mprog2/script.udl016 | 55 + src/mprog2/sendms.udl010 | 49 + src/mprog2/smcod.udl002 | 44 + src/mprog2/symbol.udl044 | 363 ++++ src/mprog2/tbedco.usg012 | 185 ++ src/mprog2/thack.umrc01 | 53 + src/mprog2/tn.udl004 | 175 ++ src/mprog2/tree.udl008 | 99 ++ src/mprog2/ulist.utaa37 | 282 +++ src/mprog2/ulistc.utaa01 | 156 ++ src/mprog2/undump.usg005 | 98 + src/mprog2/vctsrc.udl001 | 24 + src/mprog2/x_cal.updl51 | 357 ++++ src/mprog2/xuname.udl003 | 36 + src/mudbug/cursor.utt005 | 188 ++ src/mudbug/debugr.ubkd20 | 398 +++++ src/mudbug/dfl.hand | 81 + src/mudbug/dfl.utaa47 | 394 ++++ src/mudbug/edit.57 | 1156 ++++++++++++ src/mudbug/findat.utaa05 | 376 ++++ src/mudbug/fr&.ugp030 | 263 +++ src/mudbug/frmsp.ujmb08 | 134 ++ src/mudbug/im.ubd104 | 62 + src/mudbug/mend.ujmb22 | 953 ++++++++++ src/mudbug/pprint.36 | 1090 ++++++++++++ src/mudbug/rdb.ur&t39 | 148 ++ src/mudbug/trace.utaa13 | 293 +++ src/mudbug/unassm.ubtb25 | 695 ++++++++ src/mudbug/unlink.utaa08 | 63 + src/mudbug/unpure.utaa05 | 124 ++ 647 files changed, 84263 insertions(+), 3 deletions(-) create mode 100644 LICENSE create mode 100644 bin/libmud/l.nbin create mode 100644 bin/libmud/libmud.dat create mode 100644 bin/libmud/libmud.lock create mode 100644 bin/libmud/libmud.nlib create mode 100644 bin/libmud/lup.fbin create mode 100644 bin/libmud/nl.nbin create mode 100644 bin/libmud/nlib.fbin create mode 100644 bin/libmud/nlup.fbin create mode 100644 bin/libmud/nlup.nbin create mode 100644 bin/libmud/nlupcr.nbin create mode 100644 bin/libmud/npck.fbin create mode 100644 bin/libmud/npck.nbin create mode 100644 bin/libmud/pck.fbin create mode 100644 bin/libmud/pcksbr.nbin create mode 100644 bin/librm1/acchrs.nbin create mode 100644 bin/librm1/acheck.fbin create mode 100644 bin/librm1/aerror.nbin create mode 100644 bin/librm1/ahack.fbin create mode 100644 bin/librm1/alib.fbin create mode 100644 bin/librm1/allgs.fbin create mode 100644 bin/librm1/aload.nbin create mode 100644 bin/librm1/amake.fbin create mode 100644 bin/librm1/amnesa.fbin create mode 100644 bin/librm1/anotes.fbin create mode 100644 bin/librm1/ap.fbin create mode 100644 bin/librm1/append.fbin create mode 100644 bin/librm1/append.nbin create mode 100644 bin/librm1/apprin.fbin create mode 100644 bin/librm1/aprint.fbin create mode 100644 bin/librm1/ardsio.nbin create mode 100644 bin/librm1/asetup.nbin create mode 100644 bin/librm1/ask.nbin create mode 100644 bin/librm1/ast.nbin create mode 100644 bin/librm1/asylum.fbin create mode 100644 bin/librm1/asystt.nbin create mode 100644 bin/librm1/b-ob.fbin create mode 100644 bin/librm1/banner.nbin create mode 100644 bin/librm1/bigpri.fbin create mode 100644 bin/librm1/blprin.nbin create mode 100644 bin/librm1/blt.nbin create mode 100644 bin/librm1/boot.nbin create mode 100644 bin/librm1/break.nbin create mode 100644 bin/librm1/buf.fbin create mode 100644 bin/librm1/bufch.nbin create mode 100644 bin/librm1/bug.nbin create mode 100644 bin/librm1/bugsys.nbin create mode 100644 bin/librm1/calcom.fbin create mode 100644 bin/librm1/caldes.fbin create mode 100644 bin/librm1/calrdr.fbin create mode 100644 bin/librm1/calsym.fbin create mode 100644 bin/librm1/caltop.fbin create mode 100644 bin/librm1/calutl.fbin create mode 100644 bin/librm1/cca.fbin create mode 100644 bin/librm1/ccafil.nbin create mode 100644 bin/librm1/cdm.nbin create mode 100644 bin/librm1/celest.fbin create mode 100644 bin/librm1/charap.fbin create mode 100644 bin/librm1/chkadr.fbin create mode 100644 bin/librm1/clock.nbin create mode 100644 bin/librm1/coder.nbin create mode 100644 bin/librm1/column.nbin create mode 100644 bin/librm1/comand.fbin create mode 100644 bin/librm1/commud.bin create mode 100644 bin/librm1/complx.fbin create mode 100644 bin/librm1/confir.nbin create mode 100644 bin/librm1/cpyfil.fbin create mode 100644 bin/librm1/crime.nbin create mode 100644 bin/librm1/critic.fbin create mode 100644 bin/librm2/datime.fbin create mode 100644 bin/librm2/datred.nbin create mode 100644 bin/librm2/datsav.nbin create mode 100644 bin/librm2/db.fbin create mode 100644 bin/librm2/dcreat.nbin create mode 100644 bin/librm2/ddm.fbin create mode 100644 bin/librm2/ddma.fbin create mode 100644 bin/librm2/ddt.nbin create mode 100644 bin/librm2/declm.nbin create mode 100644 bin/librm2/demcls.fbin create mode 100644 bin/librm2/dfl.fbin create mode 100644 bin/librm2/dir.fbin create mode 100644 bin/librm2/displa.fbin create mode 100644 bin/librm2/dmx.nbin create mode 100644 bin/librm2/doops.nbin create mode 100644 bin/librm2/dout.nbin create mode 100644 bin/librm2/dow.fbin create mode 100644 bin/librm2/dragan.fbin create mode 100644 bin/librm2/dragit.fbin create mode 100644 bin/librm2/dskgrp.nbin create mode 100644 bin/librm2/egroup.fbin create mode 100644 bin/librm2/ehack.fbin create mode 100644 bin/librm2/emonit.nbin create mode 100644 bin/librm2/erorc2.gbin create mode 100644 bin/librm2/eutl.fbin create mode 100644 bin/librm2/evil.fbin create mode 100644 bin/librm2/exputi.fbin create mode 100644 bin/librm2/extern.nbin create mode 100644 bin/librm2/fdate.gbin create mode 100644 bin/librm2/filapp.nbin create mode 100644 bin/librm2/filinf.nbin create mode 100644 bin/librm2/fint.nbin create mode 100644 bin/librm2/format.fbin create mode 100644 bin/librm2/fp.fbin create mode 100644 bin/librm2/ftp.nbin create mode 100644 bin/librm2/fulnam.nbin create mode 100644 bin/librm2/gendir.nbin create mode 100644 bin/librm2/gl.nbin create mode 100644 bin/librm2/gnjfni.fbin create mode 100644 bin/librm2/gs.fbin create mode 100644 bin/librm2/gshard.nbin create mode 100644 bin/librm2/gstard.nbin create mode 100644 bin/librm2/gstiml.fbin create mode 100644 bin/librm2/gsttyc.fbin create mode 100644 bin/librm2/haverf.nbin create mode 100644 bin/librm2/helpat.nbin create mode 100644 bin/librm2/hist.nbin create mode 100644 bin/librm2/histor.nbin create mode 100644 bin/librm2/hosts.fbin create mode 100644 bin/librm2/hptek.fbin create mode 100644 bin/librm2/init.gbin create mode 100644 bin/librm2/iot8.nbin create mode 100644 bin/librm2/itime.fbin create mode 100644 bin/librm2/kwic.fbin create mode 100644 bin/librm2/netrjs.fbin create mode 100644 bin/librm2/oddtst.nbin create mode 100644 bin/librm3/im_io.nbin create mode 100644 bin/librm3/imc.nbin create mode 100644 bin/librm3/imlac.nbin create mode 100644 bin/librm3/infass.nbin create mode 100644 bin/librm3/inferi.fbin create mode 100644 bin/librm3/inquir.nbin create mode 100644 bin/librm3/inv.fbin create mode 100644 bin/librm3/ipck.fbin create mode 100644 bin/librm3/irsbas.fbin create mode 100644 bin/librm3/irsbch.nbin create mode 100644 bin/librm3/irscom.nbin create mode 100644 bin/librm3/irsgrf.nbin create mode 100644 bin/librm3/irsmak.fbin create mode 100644 bin/librm3/irsupd.fbin create mode 100644 bin/librm3/irsusr.fbin create mode 100644 bin/librm3/ist.nbin create mode 100644 bin/librm3/its.fbin create mode 100644 bin/librm3/its.nbin create mode 100644 bin/librm3/jade.fbin create mode 100644 bin/librm3/jade.nbin create mode 100644 bin/librm3/jcl.nbin create mode 100644 bin/librm3/jobass.fbin create mode 100644 bin/librm3/jobs.fbin create mode 100644 bin/librm3/l-m.nbin create mode 100644 bin/librm3/level.nbin create mode 100644 bin/librm3/lex.fbin create mode 100644 bin/librm3/lexer.nbin create mode 100644 bin/librm3/lines.fbin create mode 100644 bin/librm3/locks.nbin create mode 100644 bin/librm3/login.nbin create mode 100644 bin/librm3/lpicdm.nbin create mode 100644 bin/librm3/lpictu.nbin create mode 100644 bin/librm3/lsrhil.fbin create mode 100644 bin/librm3/lsrtns.fbin create mode 100644 bin/librm3/lsthck.nbin create mode 100644 bin/librm3/lup.fbin create mode 100644 bin/librm3/macros.fbin create mode 100644 bin/librm3/madman.fbin create mode 100644 bin/librm3/mail.gbin create mode 100644 bin/librm3/makduv.nbin create mode 100644 bin/librm3/maprim.fbin create mode 100644 bin/librm3/mclean.nbin create mode 100644 bin/librm3/mddata.nbin create mode 100644 bin/librm3/mddof.nbin create mode 100644 bin/librm3/mddump.nbin create mode 100644 bin/librm3/mdkill.nbin create mode 100644 bin/librm3/mdmake.nbin create mode 100644 bin/librm3/mdtabl.nbin create mode 100644 bin/librm3/mdtype.nbin create mode 100644 bin/librm3/mfd.fbin create mode 100644 bin/librm3/mgprim.fbin create mode 100644 bin/librm3/migsmn.fbin create mode 100644 bin/librm3/mirbas.nbin create mode 100644 bin/librm3/mircom.nbin create mode 100644 bin/librm3/mirmak.nbin create mode 100644 bin/librm3/misc01.nbin create mode 100644 bin/librm3/mlearn.fbin create mode 100644 bin/librm3/mlearn.nbin create mode 100644 bin/librm3/mload.nbin create mode 100644 bin/librm3/mneme.fbin create mode 100644 bin/librm3/mneme.nbin create mode 100644 bin/librm3/mnsalv.fbin create mode 100644 bin/librm3/monitr.gbin create mode 100644 bin/librm3/monitr.nbin create mode 100644 bin/librm3/morph.fbin create mode 100644 bin/librm3/morph.nbin create mode 100644 bin/librm3/mparse.nbin create mode 100644 bin/librm3/mrkmak.nbin create mode 100644 bin/librm3/msdtp.fbin create mode 100644 bin/librm3/msgirs.nbin create mode 100644 bin/librm3/msgsys.nbin create mode 100644 bin/librm3/mtprim.fbin create mode 100644 bin/librm3/mudcal.fbin create mode 100644 bin/librm3/mudirs.nbin create mode 100644 bin/librm3/mudtec.fbin create mode 100644 bin/librm3/ndired.nbin create mode 100644 bin/librm3/netftp.fbin create mode 100644 bin/librm3/neticp.fbin create mode 100644 bin/librm3/netwrk.nbin create mode 100644 bin/librm3/newstr.nbin create mode 100644 bin/librm3/nirs.fbin create mode 100644 bin/librm3/now.fbin create mode 100644 bin/librm3/nstr.nbin create mode 100644 bin/librm3/nunc.fbin create mode 100644 bin/librm3/oops.nbin create mode 100644 bin/librm4/p-item.fbin create mode 100644 bin/librm4/pages.fbin create mode 100644 bin/librm4/parsed.nbin create mode 100644 bin/librm4/parsej.nbin create mode 100644 bin/librm4/pen.nbin create mode 100644 bin/librm4/penup.nbin create mode 100644 bin/librm4/period.nbin create mode 100644 bin/librm4/pic.nbin create mode 100644 bin/librm4/pic_or.nbin create mode 100644 bin/librm4/pinfo.nbin create mode 100644 bin/librm4/pio.fbin5 create mode 100644 bin/librm4/piosub.fbin create mode 100644 bin/librm4/plotcl.nbin create mode 100644 bin/librm4/plotso.fbin create mode 100644 bin/librm4/pmfree.fbin create mode 100644 bin/librm4/ppmap.nbin create mode 100644 bin/librm4/prtuti.fbin create mode 100644 bin/librm4/psampl.nbin create mode 100644 bin/librm4/qput.fbin create mode 100644 bin/librm4/queue.fbin create mode 100644 bin/librm4/rb.nbin create mode 100644 bin/librm4/rfc713.fbin create mode 100644 bin/librm4/rjschn.nbin create mode 100644 bin/librm4/rjscmd.nbin create mode 100644 bin/librm4/rjscrd.nbin create mode 100644 bin/librm4/rjsdat.nbin create mode 100644 bin/librm4/rjsjob.nbin create mode 100644 bin/librm4/rjsret.nbin create mode 100644 bin/librm4/rjstel.nbin create mode 100644 bin/librm4/rjsuti.nbin create mode 100644 bin/librm4/rlsdic.nbin create mode 100644 bin/librm4/rlsloo.nbin create mode 100644 bin/librm4/rlsstr.nbin create mode 100644 bin/librm4/rqfile.fbin create mode 100644 bin/librm4/rspars.fbin create mode 100644 bin/librm4/s-to-6.nbin create mode 100644 bin/librm4/scope.nbin create mode 100644 bin/librm4/scr.fbin create mode 100644 bin/librm4/script.nbin create mode 100644 bin/librm4/sdm.fbin create mode 100644 bin/librm4/sdmsym.fbin create mode 100644 bin/librm4/sendms.nbin create mode 100644 bin/librm4/skip.fbin create mode 100644 bin/librm4/smcod.nbin create mode 100644 bin/librm4/smms.nbin create mode 100644 bin/librm4/smp.fbin create mode 100644 bin/librm4/sortob.nbin create mode 100644 bin/librm4/squoze.nbin create mode 100644 bin/librm4/stdmst.nbin create mode 100644 bin/librm4/stink.fbin create mode 100644 bin/librm4/stk.nbin create mode 100644 bin/librm4/str.fbin create mode 100644 bin/librm4/swchar.fbin create mode 100644 bin/librm4/symbol.fbin create mode 100644 bin/librm4/systat.nbin create mode 100644 bin/librm4/tailor.fbin create mode 100644 bin/librm4/temhak.fbin create mode 100644 bin/librm4/temhlp.fbin create mode 100644 bin/librm4/templt.fbin create mode 100644 bin/librm4/tenxio.nbin create mode 100644 bin/librm4/timfcn.fbin create mode 100644 bin/librm4/tn.nbin create mode 100644 bin/librm4/tokens.nbin create mode 100644 bin/librm4/tomem.nbin create mode 100644 bin/librm4/tr.nbin create mode 100644 bin/librm4/transl.fbin create mode 100644 bin/librm4/tree.nbin create mode 100644 bin/librm4/tscrip.nbin create mode 100644 bin/librm4/tstate.nbin create mode 100644 bin/librm4/tty.fbin create mode 100644 bin/librm4/txtuti.fbin create mode 100644 bin/librm4/ugrf.nbin create mode 100644 bin/librm4/ulist.fbin create mode 100644 bin/librm4/undecl.nbin create mode 100644 bin/librm4/update.nbin create mode 100644 bin/librm4/uvbyte.fbin create mode 100644 bin/librm4/uvhack.fbin create mode 100644 bin/librm4/uvstc.nbin create mode 100644 bin/librm4/vctman.fbin create mode 100644 bin/librm4/vctsrc.nbin create mode 100644 bin/librm4/vll-da.nbin create mode 100644 bin/librm4/vsort.nbin create mode 100644 bin/librm4/when.nbin create mode 100644 bin/librm4/x_uti.nbin create mode 100644 bin/librm4/xgedit.fbin create mode 100644 bin/librm4/xuname.nbin create mode 100644 bin/mbprog/assem.fbin create mode 100644 bin/mbprog/assem.nbin create mode 100644 bin/mbprog/bigpri.nbin create mode 100644 bin/mbprog/blt.nbin create mode 100644 bin/mbprog/buf.gbin create mode 100644 bin/mbprog/buf.nbin create mode 100644 bin/mbprog/bufcrf.nbin create mode 100644 bin/mbprog/celest.nbin create mode 100644 bin/mbprog/chkadr.gbin create mode 100644 bin/mbprog/chkadr.nbin create mode 100644 bin/mbprog/clean.nbin create mode 100644 bin/mbprog/coder.nbin create mode 100644 bin/mbprog/consol.nbin create mode 100644 bin/mbprog/corblk.nbin create mode 100644 bin/mbprog/count.nbin create mode 100644 bin/mbprog/cpyfil.fbin create mode 100644 bin/mbprog/critic.nbin create mode 100644 bin/mbprog/data.fbin create mode 100644 bin/mbprog/datime.nbin create mode 100644 bin/mbprog/ddt.nbin create mode 100644 bin/mbprog/demon.nbin create mode 100644 bin/mbprog/dir.nbin create mode 100644 bin/mbprog/dirhak.nbin create mode 100644 bin/mbprog/dow.nbin create mode 100644 bin/mbprog/dragan.nbin create mode 100644 bin/mbprog/dragit.nbin create mode 100644 bin/mbprog/dskupd.binary create mode 100644 bin/mbprog/dummy.nbin create mode 100644 bin/mbprog/erorc2.nbin create mode 100644 bin/mbprog/fft.nbin create mode 100644 bin/mbprog/fixup.fbin create mode 100644 bin/mbprog/fmacro.fbin create mode 100644 bin/mbprog/fmacro.nbin create mode 100644 bin/mbprog/fold.fbin create mode 100644 bin/mbprog/format.nbin create mode 100644 bin/mbprog/ftpusr.fbin create mode 100644 bin/mbprog/gc.nbin create mode 100644 bin/mbprog/geom.nbin create mode 100644 bin/mbprog/hash.fbin create mode 100644 bin/mbprog/hash.fmacro create mode 100644 bin/mbprog/hash.nbin create mode 100644 bin/mbprog/helpld.fbin create mode 100644 bin/mbprog/hosts.nbin create mode 100644 bin/mbprog/icp.fbin create mode 100644 bin/mbprog/itime.nbin create mode 100644 bin/mbprog/jcl.nbin create mode 100644 bin/mbprog/jobass.nbin create mode 100644 bin/mbprog/jobs.nbin create mode 100644 bin/mbprog/lines.nbin create mode 100644 bin/mbprog/lsrhil.nbin create mode 100644 bin/mbprog/lsrtns.nbin create mode 100644 bin/mbprog/macro.nbin create mode 100644 bin/mbprog/macros.nbin create mode 100644 bin/mbprog/mail.nbin create mode 100644 bin/mbprog/mfd.nbin create mode 100644 bin/mbprog/msub.fbin create mode 100644 bin/mbprog/netftp.nbin create mode 100644 bin/mbprog/now.nbin create mode 100644 bin/mbprog/pages.nbin create mode 100644 bin/mbprog/pck.fbin create mode 100644 bin/mbprog/pcond.fbin create mode 100644 bin/mbprog/pmap.fbin create mode 100644 bin/mbprog/poster.nbin create mode 100644 bin/mbprog/ppmap.binary create mode 100644 bin/mbprog/releas.nbin create mode 100644 bin/mbprog/scr.nbin create mode 100644 bin/mbprog/scrcrf.nbin create mode 100644 bin/mbprog/sdml.fbin create mode 100644 bin/mbprog/sharer.binary create mode 100644 bin/mbprog/skyfan.nbin create mode 100644 bin/mbprog/sortx.nbin create mode 100644 bin/mbprog/symbol.gbin create mode 100644 bin/mbprog/symbol.nbin create mode 100644 bin/mbprog/temhak.fbin create mode 100644 bin/mbprog/timfcn.nbin create mode 100644 bin/mbprog/transl.nbin create mode 100644 bin/mbprog/tty.nbin create mode 100644 bin/mbprog/uv-s.nbin create mode 100644 bin/mbprog/vctman.fbin create mode 100644 bin/mprog/assem.nbin create mode 100644 bin/mprog1/demcls.nbin create mode 100644 bin/mprog2/histor.nbin create mode 100644 bin/mprog2/uvhack.nbin create mode 100644 bin/mudbug/cursor.fbin create mode 100644 bin/mudbug/cursor.nbin create mode 100644 bin/mudbug/debugr.fbin create mode 100644 bin/mudbug/debugr.nbin create mode 100644 bin/mudbug/dfl.fbin create mode 100644 bin/mudbug/dfl.nbin create mode 100644 bin/mudbug/edit.fbin create mode 100644 bin/mudbug/edit.nbin create mode 100644 bin/mudbug/findat.fbin create mode 100644 bin/mudbug/findat.nbin create mode 100644 bin/mudbug/fr&.fbin create mode 100644 bin/mudbug/fr&.nbin create mode 100644 bin/mudbug/frmsp.fbin create mode 100644 bin/mudbug/frmsp.nbin create mode 100644 bin/mudbug/helpld.nbin create mode 100644 bin/mudbug/im.nbin create mode 100644 bin/mudbug/mend.fbin create mode 100644 bin/mudbug/mend.nbin create mode 100644 bin/mudbug/pprint.fbin create mode 100644 bin/mudbug/pprint.nbin create mode 100644 bin/mudbug/rdb.nbin create mode 100644 bin/mudbug/trace.fbin create mode 100644 bin/mudbug/trace.nbin create mode 100644 bin/mudbug/unassm.fbin create mode 100644 bin/mudbug/unassm.nbin create mode 100644 bin/mudbug/unlink.fbin create mode 100644 bin/mudbug/unlink.nbin create mode 100644 bin/mudbug/unpure.nbin create mode 100644 bin/mudtmp/added.files create mode 100644 bin/mudtmp/dump.bit create mode 100644 doc/mprog2/dragit.info create mode 100644 doc/mudbug/debugr.help create mode 100644 doc/mudbug/edit.nhelp create mode 100644 doc/mudbug/trace.info create mode 100644 doc/mudbug/trace.order create mode 100644 src/libmud/nl.2 create mode 100644 src/libmud/nlib.17 create mode 100644 src/libmud/nlibma.1 create mode 100644 src/libmud/nlup.72 create mode 100644 src/libmud/nlupcr.8 create mode 100644 src/libmud/npck.26 create mode 100644 src/libmud/pcksbr.2 create mode 100644 src/librm1/bugexp.udl057 create mode 100644 src/librm1/chan.ubkdx4 create mode 100644 src/librm1/clean.1 create mode 100644 src/librm1/comexp.udl591 create mode 100644 src/librm1/comkey.udl111 create mode 100644 src/librm1/sig.1 create mode 100644 src/librm2/datsav.kwc001 create mode 100644 src/librm3/le&sde.ueb008 create mode 100644 src/librm3/map2.utt028 create mode 100644 src/librm3/msbs.madman create mode 100644 src/librm3/ndired.umrc21 create mode 100644 src/librm4/temhlp.1 create mode 100644 src/librm4/transl.1 create mode 100644 src/librm4/uvbyte.rsubr create mode 100644 src/mprog/acchrs.udl001 create mode 100644 src/mprog/aconst.udl005 create mode 100644 src/mprog/ahelp.udl001 create mode 100644 src/mprog/aprint.udl001 create mode 100644 src/mprog/assem.undr88 create mode 100644 src/mprog/asystt.19 create mode 100644 src/mprog/atoms.umb007 create mode 100644 src/mprog/autodl.ujil02 create mode 100644 src/mprog/b-ob.ujmb01 create mode 100644 src/mprog/batabs.ujm005 create mode 100644 src/mprog/bignum.uwl004 create mode 100644 src/mprog/bigpri.ujm030 create mode 100644 src/mprog/bindum.ujm003 create mode 100644 src/mprog/blt.1 create mode 100644 src/mprog/buf.ueb135 create mode 100644 src/mprog/bufcrf.utaa15 create mode 100644 src/mprog/calcom.umrc04 create mode 100644 src/mprog/caldes.ueb017 create mode 100644 src/mprog/calrdr.umrc07 create mode 100644 src/mprog/calsym.ueb005 create mode 100644 src/mprog/caltop.umrc02 create mode 100644 src/mprog/calutl.umrc01 create mode 100644 src/mprog/celest.usg072 create mode 100644 src/mprog/coder.udl030 create mode 100644 src/mprog/column.udl001 create mode 100644 src/mprog/comand.ueb003 create mode 100644 src/mprog/comps.umss02 create mode 100644 src/mprog/corblk.ubkd02 create mode 100644 src/mprog/count.udl002 create mode 100644 src/mprog/cpyreq.udl001 create mode 100644 src/mprog/crime.udl001 create mode 100644 src/mprog/data.ubkd01 create mode 100644 src/mprog/datime.udl006 create mode 100644 src/mprog/declm.udl002 create mode 100644 src/mprog/dir.udl006 create mode 100644 src/mprog/dirhak.usg003 create mode 100644 src/mprog/doops.udl001 create mode 100644 src/mprog/dow.undr02 create mode 100644 src/mprog/fillen.udl003 create mode 100644 src/mprog/fmacro.ubkd10 create mode 100644 src/mprog/fold.ubkd04 create mode 100644 src/mprog/gc.ubkd13 create mode 100644 src/mprog/grpchk.undr13 create mode 100644 src/mprog/hash.ubkd07 create mode 100644 src/mprog/helpld.6 create mode 100644 src/mprog/hosts.1 create mode 100644 src/mprog/hosts.utaa78 create mode 100644 src/mprog/imlac.ubkd09 create mode 100644 src/mprog/jobass.usg013 create mode 100644 src/mprog/l.undr03 create mode 100644 src/mprog/locks.ueb015 create mode 100644 src/mprog/login.ujfh14 create mode 100644 src/mprog/lsthck.undr01 create mode 100644 src/mprog/lup.undr04 create mode 100644 src/mprog/macro.ubkd03 create mode 100644 src/mprog/macros.ubkd02 create mode 100644 src/mprog/mcomb.ubkd29 create mode 100644 src/mprog/mfd.udl004 create mode 100644 src/mprog/mudcom.utt045 create mode 100644 src/mprog/now.ujfh09 create mode 100644 src/mprog/pages.udl004 create mode 100644 src/mprog/parse.umss02 create mode 100644 src/mprog/pck.undr13 create mode 100644 src/mprog/pcond.ubkd01 create mode 100644 src/mprog/pdump.ubtb26 create mode 100644 src/mprog/pmap.udl076 create mode 100644 src/mprog/pmapr.udl004 create mode 100644 src/mprog/qput.ujhm01 create mode 100644 src/mprog/releas.ujmb04 create mode 100644 src/mprog/rjs.ujfh17 create mode 100644 src/mprog/scr.uta001 create mode 100644 src/mprog/scrcrf.uta002 create mode 100644 src/mprog/scrmac.uta002 create mode 100644 src/mprog/sharer.udl001 create mode 100644 src/mprog/skyfan.usg017 create mode 100644 src/mprog/squoze.undr04 create mode 100644 src/mprog/str.ueb008 create mode 100644 src/mprog/subsys.udl001 create mode 100644 src/mprog/sun.lbh085 create mode 100644 src/mprog/sunnew.lbh041 create mode 100644 src/mprog/sunonr.lbh016 create mode 100644 src/mprog/syntax.ubkd23 create mode 100644 src/mprog/timfcn.umss44 create mode 100644 src/mprog/tty.udl027 create mode 100644 src/mprog/unload.ubkd08 create mode 100644 src/mprog/vtsdef.uta002 create mode 100644 src/mprog1/acom.ujm019 create mode 100644 src/mprog1/calndr.uga158 create mode 100644 src/mprog1/cca.umsb07 create mode 100644 src/mprog1/charap.ujhm01 create mode 100644 src/mprog1/clean.umsb06 create mode 100644 src/mprog1/datred.usg005 create mode 100644 src/mprog1/demcls.ujhm02 create mode 100644 src/mprog1/ecom.ujm010 create mode 100644 src/mprog1/gs.ujm021 create mode 100644 src/mprog1/inferi.udl026 create mode 100644 src/mprog1/invert.umsb12 create mode 100644 src/mprog1/its.usg021 create mode 100644 src/mprog1/jobs.usg091 create mode 100644 src/mprog1/level.ubkd02 create mode 100644 src/mprog1/lib.umsb03 create mode 100644 src/mprog1/libmnt.umsb01 create mode 100644 src/mprog1/mpck.umsb05 create mode 100644 src/mprog1/mudtec.udl021 create mode 100644 src/mprog1/netftp.ujfh34 create mode 100644 src/mprog1/pio.umsb02 create mode 100644 src/mprog1/piosub.umsb01 create mode 100644 src/mprog1/plotso.ujm065 create mode 100644 src/mprog1/smms.usg142 create mode 100644 src/mprog1/smmssp.771 create mode 100644 src/mprog1/stk.ueb022 create mode 100644 src/mprog1/systat.ujhm02 create mode 100644 src/mprog1/tenxio.umsb03 create mode 100644 src/mprog1/transl.abstr create mode 100644 src/mprog1/transl.ujhm08 create mode 100644 src/mprog1/vsort.ueb001 create mode 100644 src/mprog1/when.udl003 create mode 100644 src/mprog2/append.udld05 create mode 100644 src/mprog2/boot.udl001 create mode 100644 src/mprog2/bugsys.udl008 create mode 100644 src/mprog2/charac.uerb14 create mode 100644 src/mprog2/chkadr.udl002 create mode 100644 src/mprog2/clock.udl002 create mode 100644 src/mprog2/confir.udl001 create mode 100644 src/mprog2/critic.udl030 create mode 100644 src/mprog2/ctable.udl007 create mode 100644 src/mprog2/datsav.udl007 create mode 100644 src/mprog2/dcreat.udl003 create mode 100644 src/mprog2/ddtsty.udl011 create mode 100644 src/mprog2/dragan.usg019 create mode 100644 src/mprog2/dragit.udl038 create mode 100644 src/mprog2/dskgrp.udl007 create mode 100644 src/mprog2/dummy.udl001 create mode 100644 src/mprog2/emonit.udl001 create mode 100644 src/mprog2/erorc2.uerb16 create mode 100644 src/mprog2/extern.17 create mode 100644 src/mprog2/filinf.udl006 create mode 100644 src/mprog2/fint.udl001 create mode 100644 src/mprog2/format.udl076 create mode 100644 src/mprog2/ftp.udl001 create mode 100644 src/mprog2/gendir.udl001 create mode 100644 src/mprog2/gnjfni.utaa14 create mode 100644 src/mprog2/haverf.uerb03 create mode 100644 src/mprog2/histor.usg063 create mode 100644 src/mprog2/init.umrc37 create mode 100644 src/mprog2/inquir.1 create mode 100644 src/mprog2/iot8.udl001 create mode 100644 src/mprog2/itime.udl037 create mode 100644 src/mprog2/jade.uagj36 create mode 100644 src/mprog2/jcl.udl008 create mode 100644 src/mprog2/lex.1 create mode 100644 src/mprog2/lexer.udl002 create mode 100644 src/mprog2/lines.udl004 create mode 100644 src/mprog2/lsrhil.usg039 create mode 100644 src/mprog2/mail.udl273 create mode 100644 src/mprog2/makduv.udl005 create mode 100644 src/mprog2/mclean.udl010 create mode 100644 src/mprog2/mddof.udl005 create mode 100644 src/mprog2/mderrs.udl006 create mode 100644 src/mprog2/mdkill.udl004 create mode 100644 src/mprog2/mdtabl.udl009 create mode 100644 src/mprog2/mdtype.udl012 create mode 100644 src/mprog2/mlearn.uerb64 create mode 100644 src/mprog2/mload.udl045 create mode 100644 src/mprog2/mneme.uerb48 create mode 100644 src/mprog2/monitr.56 create mode 100644 src/mprog2/morph.uagj29 create mode 100644 src/mprog2/mrkmak.udl001 create mode 100644 src/mprog2/msgsys.udl002 create mode 100644 src/mprog2/nstr.udl009 create mode 100644 src/mprog2/oops.udl024 create mode 100644 src/mprog2/parsed.udl016 create mode 100644 src/mprog2/pinfo.udl001 create mode 100644 src/mprog2/ppmap.udl002 create mode 100644 src/mprog2/psampl.udl002 create mode 100644 src/mprog2/qload.utt052 create mode 100644 src/mprog2/r_cmp.ujfh02 create mode 100644 src/mprog2/rlsdic.udl005 create mode 100644 src/mprog2/rlsloo.udl002 create mode 100644 src/mprog2/rlsstr.udl003 create mode 100644 src/mprog2/s-to-6.udl004 create mode 100644 src/mprog2/script.udl016 create mode 100644 src/mprog2/sendms.udl010 create mode 100644 src/mprog2/smcod.udl002 create mode 100644 src/mprog2/symbol.udl044 create mode 100644 src/mprog2/tbedco.usg012 create mode 100644 src/mprog2/thack.umrc01 create mode 100644 src/mprog2/tn.udl004 create mode 100644 src/mprog2/tree.udl008 create mode 100644 src/mprog2/ulist.utaa37 create mode 100644 src/mprog2/ulistc.utaa01 create mode 100644 src/mprog2/undump.usg005 create mode 100644 src/mprog2/vctsrc.udl001 create mode 100644 src/mprog2/x_cal.updl51 create mode 100644 src/mprog2/xuname.udl003 create mode 100644 src/mudbug/cursor.utt005 create mode 100644 src/mudbug/debugr.ubkd20 create mode 100644 src/mudbug/dfl.hand create mode 100644 src/mudbug/dfl.utaa47 create mode 100644 src/mudbug/edit.57 create mode 100644 src/mudbug/findat.utaa05 create mode 100644 src/mudbug/fr&.ugp030 create mode 100644 src/mudbug/frmsp.ujmb08 create mode 100644 src/mudbug/im.ubd104 create mode 100644 src/mudbug/mend.ujmb22 create mode 100644 src/mudbug/pprint.36 create mode 100644 src/mudbug/rdb.ur&t39 create mode 100644 src/mudbug/trace.utaa13 create mode 100644 src/mudbug/unassm.ubtb25 create mode 100644 src/mudbug/unlink.utaa08 create mode 100644 src/mudbug/unpure.utaa05 diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..88687c9d --- /dev/null +++ b/LICENSE @@ -0,0 +1,54 @@ +Some of the files in this repository fall under the MIT License, details of which +are found after the list of directories containing those files. + +See the file COPYING for other license information for the rest of the repository. + +The files and directories to which the MIT License applies are: + +bin/libmud +bin/librm1 +bin/librm2 +bin/librm3 +bin/librm4 +bin/mbprog +bin/mprog +bin/mprog1 +bin/mprog2 +bin/mudbug +bin/mudsav +bin/mudtmp + +doc/mprog2 +doc/mudbug + +src/libmud +src/librm1 +src/librm2 +src/librm3 +src/librm4 +src/mprog +src/mprog1 +src/mprog2 +src/mudbug + +The MIT License (MIT) + +Copyright (c) 2015 MIT Libraries + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Makefile b/Makefile index 26634ae9..42c9ef20 100644 --- a/Makefile +++ b/Makefile @@ -45,7 +45,7 @@ SRC = syseng sysen1 sysen2 sysen3 sysnet kshack dragon channa \ lars drnil radia gjd maint bolio cent shrdlu vis cbf digest prs jsf \ decus bsg muds54 hello rrs 2500 minsky danny survey librm3 librm4 \ klotz atlogo clusys cprog r eb cpm mini nova sits nlogo bee gld mprog2 \ - cfs + cfs libmud librm1 librm2 mprog mprog1 mudbug DOC = info _info_ sysdoc sysnet syshst kshack _teco_ emacs emacs1 c kcc \ chprog sail draw wl pc tj6 share _glpr_ _xgpr_ inquir mudman system \ xfont maxout ucode moon acount alan channa fonts games graphs humor \ @@ -53,11 +53,12 @@ DOC = info _info_ sysdoc sysnet syshst kshack _teco_ emacs emacs1 c kcc \ aplogo _temp_ pdp11 chsncp cbf rug bawden llogo eak clib teach pcnet \ combat pdl minits mits_s chaos hal -pics- imlac maint cent ksc klh \ digest prs decus bsg madman hur lmdoc rrs danny netwrk klotz hello \ - clu r mini nova sits jay rjl nlogo + clu r mini nova sits jay rjl nlogo mprog2 mudbug BIN = sys sys1 sys2 emacs _teco_ lisp liblsp alan inquir sail comlap \ c decsys graphs draw datdrw fonts fonts1 fonts2 games macsym \ maint _www_ gt40 llogo bawden sysbin -pics- lmman shrdlu imlac \ - pdp10 madman survey rrs clu clucmp rws mini mudsav mudsys + pdp10 madman survey rrs clu clucmp rws mini mudsav mudsys libmud \ + librm1 librm2 librm3 librm4 mbprog mprog1 mprog mprog2 mudbug mudtmp MINSRC = midas system $(DDT) $(SALV) $(KSFEDR) $(DUMP) # These are not included on the tape. diff --git a/bin/libmud/l.nbin b/bin/libmud/l.nbin new file mode 100644 index 0000000000000000000000000000000000000000..020832aed4c7b453cfd1546680635553b6d202ae GIT binary patch literal 13284 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 IOr+w!0m=IkTmS$7 literal 0 HcmV?d00001 diff --git a/bin/libmud/libmud.dat b/bin/libmud/libmud.dat new file mode 100644 index 00000000..622fb417 --- /dev/null +++ b/bin/libmud/libmud.dat @@ -0,0 +1,2 @@ + INVERSION FIX)] 0>> FIX)] 0>> FALSE> PMCHAN INVERSION)] 0>> PMCHAN FIX FIX)] 0>> FALSE> PMCHAN PMCHAN FIX FIX)] 0>> FALSE> PMCHAN FIX FIX FIX)] 0>> FALSE> PMCHAN FIX FIX FIX)] 0>> APPLICABLE "TUPLE" ANY)] 0>> VECTOR)] 0>> FIX FALSE> VECTOR FIX)] 0>> FALSE>]>> >> ANY "OPTIONAL" STRING ANY)] 0>>)] 0>>>> >)] 0>>)] 0>> STRING)] 0>>> STRING)] 0>> FIX ANY)] 0>> FIX "OPTIONAL" )] 0>> "OPTIONAL" STRING FIX FIX)] 0>>>> "OPTIONAL" FIX FIX)] 0>> "OPTIONAL" FIX FIX)] 0>>>>>> )] 0>> "OPTIONAL" FIX FIX)] 0>> "OPTIONAL" FIX FIX)] 0>> FIX FIX)] 0>>)] 0>> "OPTIONAL" FIX FIX)] 0>> "OPTIONAL" FIX FIX)] 0>> "OPTIONAL" FIX FIX)] 0>> >>>>>>>> >>>>>>>)] 0>> TTY "OPTIONAL" FIX)] 0>>))>))>))>))>))>))>))>))>))>))>))>))>))>))>))>))>))>>)] 0>>)] 0>>>>)] 0>>)] 0>> ANY)] 0>> CHANNEL CHANNEL ]>>>> FIX FIX FIX>>> STRING STRING "TUPLE" )] 0>> (SYMBOL-CHRS) (ABORTED) (EMPTY-LINE) > >> STRING >>>> STRING "OPTIONAL" )] 0>>> STRING)] 0>> "TUPLE" )] 0>> "OPTIONAL" ANY)] 0>> > ATOM "OPTIONAL" STRING)] 0>>> ATOM "OPTIONAL" STRING)] 0>> ] [REST ]>]>> > STRING)] 0>> > "OPTIONAL" )] 0>>> STRING STRING "OPTIONAL" FIX)] 0>> STRING STRING "OPTIONAL" FIX ANY)] 0>> )] 0>>> FIX FIX)] 0>> FIX)] 0>> >]>)] 0>> STRING "OPTIONAL" STRING )] 0>> "TUPLE" ]>)] 0>> "OPTIONAL" ANY ANY)] 0>> ATOM "OPTIONAL" )] 0>> ATOM "OPTIONAL" ANY)] 0>> CHANNEL FIX FIX)] 0>>> FIX "OPTIONAL" FIX)] 0>>> FIX FIX "OPTIONAL" FIX)] 0>> > "OPTIONAL" )] 0>>> "OPTIONAL" ANY STRING STRING)] 0>> CHANNEL )] 0>> CHANNEL )] 0>> > CHANNEL "OPTIONAL" >)] 0>>> CHANNEL )] 0>> > FIX)] 0>>> )] 0>> )] 0>> )] 0>> )] 0>> "OPTIONAL" )] 0>>> "OPTIONAL" )] 0>>> CHANNEL >)] 0>> > "OPTIONAL" ANY ANY)] 0>> > [REST ]> "OPTIONAL" ANY ANY ANY)] 0>> > ]> ]> "OPTIONAL" ANY ANY ANY ANY)] 0>> [7 ANY]>>> "OPTIONAL" >)] 0>>> "OPTIONAL" > "TUPLE" ]>)] 0>> (INDENT) FIX (INDENT-MOD) FIX> ]> ]>)] 0>>]> FIX FIX)] 0>>]> ]> "OPTIONAL" FIX)] 0>>]> )] 0>>]>)] 0>>]> "OPTIONAL" FIX )] 0>> >> STRING "OPTIONAL" STRING)] 0>>> ATOM)] 0>> "OPTIONAL" STRING)] 0>>> STRING LIST> FIX)] 0>>>>>> "TUPLE" )] 0>>>> ANY)] 0>>> >)] 0>> ANY)] 0>>> > "OPTIONAL" )] 0>> PMCHAN FIX)] 0>>> )] 0>>)] 0>> CHANNEL LIST)] 0>>> FIX FIX "OPTIONAL" FIX)] 0>> STRING STRING FIX)] 0>>> FIX )] 0>> PMCHAN)] 0>>> PMCHAN)] 0>> PMCHAN)] 0>> PMCHAN)] 0>>> PMCHAN ANY)] 0>>>> STRING)] 0>> )] 0>>>> "OPTIONAL" )] 0>>>> "OPTIONAL" VECTOR)] 0>> "OPTIONAL" >)] 0>> LIST>> STRING "OPTIONAL" ANY)] 0>>>>> > UVECTOR [REST LIST]>)] 0>> )] 0>> STRING)] 0>> PMCHAN ANY "OPTIONAL" FIX)] 0>> PMCHAN ANY FIX)] 0>> PMCHAN ANY)] 0>> PMCHAN ANY STRING)] 0>>> "OPTIONAL" FIX)] 0>>>>> PMCHAN)] 0>>>> STRING "OPTIONAL" FIX)] 0>> STRING "OPTIONAL" FIX FIX)] 0>> >]>> CHANNEL)] 0>>)] 0>>>>]> "OPTIONAL" CHANNEL)] 0>>]>> CHANNEL)] 0>>]> ]>> "OPTIONAL" CHANNEL)] 0>>]>> )] 0>> "OPTIONAL" LIST FLOAT)] 0>> "OPTIONAL" LIST FLOAT)] 0>>>>> "OPTIONAL" LIST FLOAT FIX)] 0>> "OPTIONAL" LIST FLOAT FIX)] 0>>> >>>>>>>>>>>>>> STRING )] 0>>>>>>>)] 0>>> > CHANNEL "OPTIONAL" )] 0>> )] 0>> "OPTIONAL" ATOM FALSE>)] 0>>>>)] 0>>)] 0>> "OPTIONAL" ANY ANY ANY ANY ANY ANY )] 0>>)] 0>> ATOM "OPTIONAL" )] 0>> ATOM "OPTIONAL" )] 0>>> > ATOM ATOM ATOM STRING FIX STRING "OPTIONAL" STRING STRING STRING STRING STRING)] 0>>> STRING "OPTIONAL" STRING)] 0>>> > "TUPLE" TUPLE)] 0>> STRUCTURED "OPTIONAL" ANY)] 0>> "OPTIONAL" )] 0>>> "OPTIONAL" FIX)] 0>> FIX FIX FIX FIX)] 0>>> "OPTIONAL" PMCHAN)] 0>>> PMCHAN FIX)] 0>> PMCHAN FIX)] 0>> PMCHAN FIX)] 0>>>>> PMCHAN UVECTOR FIX)] 0>> PMCHAN UVECTOR FIX)] 0>> STRING STRING "OPTIONAL" FIX APPLICABLE)] 0>>> (PMMAX) FIX> >>> STRING)] 0>>> CHANNEL CHANNEL)] 0>>> CHANNEL)] 0>>> CHANNEL)] 0>>>>)] 0>> > > VECTOR "OPTIONAL" FIX)] 0>> > > FIX >]> )] 0>>> "OPTIONAL" STRING )] 0>> > > "OPTIONAL" STRING)] 0>> "OPTIONAL" ANY)] 0>>>>]>> ]> FORM> "OPTIONAL" GRFLIST)] 0>>]>> ]> FORM> "OPTIONAL" GRFLIST)] 0>>>>>>)] 0>> ANY "OPTIONAL" ANY ANY ANY)] 0>> "OPTIONAL" )] 0>> "OPTIONAL" )] 0>> >> FIX FIX FIX)] 0>>> FIX FIX FIX)] 0>>> STRING FIX "OPTIONAL" FIX )] 0>>>> FIX)] 0>>> FIX "OPTIONAL" STRING FIX)] 0>>> FIX "OPTIONAL" FIX)] 0>>> FIX)] 0>>> FIX)] 0>>> FIX)] 0>>> FIX)] 0>>)] 0>> FIX FIX)] 0>>)] 0>>>)] 0>>>>> "OPTIONAL" )] 0>>]> (SVTRACE) (SVTRACEI) > LIST)] 0>>>> "OPTIONAL" CHANNEL)] 0>>> "OPTIONAL" CHANNEL)] 0>> "OPTIONAL" CHANNEL)] 0>> > >>>]> UVECTOR "OPTIONAL" CHANNEL)] 0>> CHANNEL FIX)] 0>>>>>>)] 0>> CHANNEL CHARACTER)] 0>>> BUFFER )] 0>> BUFFER CHARACTER)] 0>>>>)] 0>> VECTOR> STRING)] 0>>>>>>>)] 0>> BUFFER)] 0>>>>> )] 0>>>>> [4 STRING] FIX STRING FIX>>>)
,BBITS > > >>) (T > >> FIX>>)>>))>>]>)] 0>>>>> (BUF-CTL-S?) (BUFSIZE) FIX (DISPLAY?) (FORMATEFFS) STRING> (M-A-P-S) OWT (KIND) OWT (PERSON) OWT (IDIOM) OWT (GENERAL) OWT (MONTHS) (PREP-LIST) (PRON-LIST) (TPRON-LIST) (MODAL-LIST) (COORD-LIST) (TIME-LIST) (NG-STARTER-LIST) (BE-VERB-LIST) (DO-VERB-LIST) (HAVE-VERB-LIST) (FUNNY-NOUN-POS) (IRREGULAR-VERB-FORMS) (IRREGULAR-ADJECTIVE-FORMS) (VERB-TYPES) (NOUN-TYPES) (ADJECTIVE-TYPES) (UNKNOWNS) (AMBIGUITIES) (unknowns) (ambiguities) (NUMBER-SPECIFIERS) (LENGTH-LIST) (HIGH-KINDS) > )] 0>> STRING "OPTIONAL" )] 0>> > "OPTIONAL" ANY )] 0>> STRING)] 0>>> )] 0>>>>>>> ANY LOCD ANY)] 0>>>>> "OPTIONAL" FIX FIX )] 0>>> > )] 0>>>>)] 0>> > "OPTIONAL" FLOAT)] 0>>> CHARACTER "OPTIONAL" )] 0>> "OPTIONAL" )] 0>> > MCOD "OPTIONAL" STRING)] 0>> >> STRING )] 0>> STRING)] 0>> CHARACTER)] 0>>]> (RLS-PUNC-TABLE) (PTBL) (MTABLE) ]>> STRING "TUPLE" ]>)] 0>> "TUPLE" ANY)] 0>> )] 0>>)] 0>> "OPTIONAL" STRING)] 0>> > "OPTIONAL" )] 0>>> > STRING)] 0>> ANY)] 0>>> "OPTIONAL" ANY)] 0>> )] 0>>> FIX FIX FIX FIX FIX FIX)] 0>> FIX )] 0>>>> STRING FIX FIX)] 0>> STRING)] 0>> FIX)] 0>>>>>>> FIX)] 0>> FIX)] 0>> STRING)] 0>> FALSE> FIX)] 0>>)] 0>> JFN FIX)] 0>> JFN)] 0>> "OPTIONAL" )] 0>> JFN FIX FIX)] 0>> )] 0>> JFN FIX)] 0>> JFN FIX)] 0>> JFN STRING)] 0>> JFN STRING)] 0>> JFN UVECTOR)] 0>> JFN UVECTOR)] 0>> FALSE> JFN FIX )] 0>> JFN FIX)] 0>> JFN)] 0>> JFN)] 0>> JFN)] 0>> JFN)] 0>> JFN )] 0>> JFN)] 0>> JFN )] 0>> JFN )] 0>> STRING )] 0>> >)] 0>> FALSE> ANY ANY)] 0>> FALSE> ANY ANY)] 0>>> STRING)] 0>> STRING STRING STRING STRING ]>)] 0>>]>>> FALSE> ANY)] 0>>> ]> "OPTIONAL" )] 0>>>> >>>>>> [REST ]> < [REST ]> < [REST ]>)] 0>> [REST ]> < [REST ]> < [REST ]>)] 0>> )] 0>> > )] 0>> STRUCTURED CHANNEL "OPTIONAL" APPLICABLE )] 0>>)] 0>> STRUCTURED "OPTIONAL" APPLICABLE)] 0>>> "OPTIONAL" STRING)] 0>> STRING "OPTIONAL" STRING STRING)] 0>> "OPTIONAL" STRING)] 0>>>> STRING "OPTIONAL" ANY)] 0>>>>> ]>)] 0>>>)] 0>>> STRING "OPTIONAL" ATOM ANY ANY)] 0>> STRING "OPTIONAL" ATOM)] 0>> >)] 0>>)] 0>>>>>)] 0>> >>>>> )] 0>> "TUPLE" ]>)] 0>> "TUPLE" ]>)] 0>> FIX ANY)] 0>> FIX)] 0>> "TUPLE" ]>)] 0>> )] 0>> ANY "TUPLE" ]>)] 0>> "TUPLE" ]>)] 0>> ] [2 FIX] STRING>> INF FIX)] 0>>>)] 0>>>> INF)] 0>> INF )] 0>>>> )] 0>>> INF FIX "OPTIONAL" )] 0>> INF ANY "OPTIONAL" CHANNEL)] 0>> )] 0>> )] 0>> "OPTIONAL" )] 0>> STRING STRING "OPTIONAL" STRING )] 0>> STRING "OPTIONAL" STRING STRING)] 0>> )] 0>> (CURRENT-INF) (INF-DIRS) (ACTION-INTERRUPTS) (NO-ACTION-INTERRUPTS) (NO-ACTION-MESSAGES) > >)] 0>>>> STRING STRING "OPTIONAL" FIX)] 0>> STRING STRING "OPTIONAL" FIX)] 0>> STRING "OPTIONAL" FIX)] 0>> STRING FIX STRING)] 0>> STRING STRING "OPTIONAL" FIX)] 0>> STRING STRING "OPTIONAL" FIX)] 0>> APPLICABLE)] 0>>> )] 0>>>>> STRING)] 0>>>>> FIX < FIX>)] 0>> FIX> < FIX>)] 0>>> "TUPLE" TUPLE)] 0>> "OPTIONAL" STRING)] 0>> >> ]>> "OPTIONAL" STRING)] 0>> "TUPLE" ANY)] 0>> >>)] 0>>)] 0>>>)] 0>> STRING)] 0>>> STRING)] 0>> STRING STRING)] 0>>>> STRING)] 0>> "TUPLE" ANY)] 0>> CHARACTER)] 0>> CHARACTER)] 0>>>> )] 0>> FIX FIX)] 0>> )] 0>> ASYLUM STRING)] 0>> ASYLUM STRING)] 0>> ASYLUM STRING)] 0>> FIX)] 0>> CHANNEL FIX FIX)] 0>> ASYLUM FIX)] 0>> >)] 0>> >)] 0>> UVECTOR FIX)] 0>> UVECTOR)] 0>> UVECTOR)] 0>> )] 0>>>>> )] 0>> FALSE> )] 0>> FALSE> )] 0>> ASYLUM )] 0>>)] 0>> ASYLUM )] 0>>)] 0>>> ASYLUM MANIAC)] 0>>> ASYLUM MANIAC FIX)] 0>>> ASYLUM MANIAC > "OPTIONAL" FIX)] 0>>> ASYLUM MANIAC > "OPTIONAL" FIX )] 0>>> ASYLUM MANIAC)] 0>> MANIAC> ASYLUM MANIAC FIX)] 0>> ASYLUM MANIAC SPACE ANY "OPTIONAL" )] 0>> ASYLUM SPACE ANY "OPTIONAL" )] 0>>)] 0>> SPACE "OPTIONAL" FIX )] 0>> ASYLUM FIX)] 0>>)] 0>> ASYLUM )] 0>> ASYLUM )] 0>>)] 0>>)] 0>>>>>> ASYLUM)] 0>>>)] 0>> ASYLUM)] 0>> ASYLUM)] 0>>)] 0>> STRING "OPTIONAL" FIX FIX)] 0>> ASYLUM FIX "OPTIONAL" )] 0>> FIX FIX FIX FIX FIX FIX FIX>> CHANNEL FIX FIX UVECTOR FIX UVECTOR VECTOR>> (DATA-NON-FATAL-ERRORS) (DATA-READ-WORD) WORD (DATA-WRITE-WORD) WORD (DATA-AUTHOR-WORD) WORD> )] 0>> )] 0>> )] 0>> )] 0>> )] 0>> )] 0>> )] 0>>> )] 0>> STRING HSPEC>> )] 0>> ,ATTWD .NUM>>))> ,ATTWD> FIX>))> ,HLTWD .NUM>>))> ,HLTWD> FIX>))> ,BLKWD .NUM>>))> ,BLKWD> FIX>))> ,INVWD .NUM>>))> ,INVWD> FIX>))> ,UNDWD .NUM>>))> ,UNDWD> FIX>))> ,HLFWD .NUM>>))> ,HLFWD> FIX>))> ,FMTWD .NUM>>))> ,FMTWD> FIX>))> ,NWLWD .NUM>>))> ,NWLWD> FIX>))> ,EOLWD .NUM>>))> ,EOLWD> FIX>))> ,COLWD .NUM>>))> ,COLWD> FIX>))> ,CAPWD .NUM>>))> ,CAPWD> FIX>))> ,ENTWD .NUM>>))> ,ENTWD> FIX>))> ,MODWD .NUM>>))> ,MODWD> FIX>))> ,AELWD .NUM>>))> ,AELWD> FIX>))> ,DELWD .NUM>>))> ,DELWD> FIX>))> ,RSTWD .NUM>>))> ,RSTWD> FIX>))> ,UNUWD .NUM>>))> ,UNUWD> FIX>))> ,DIDWD .NUM>>))> ,DIDWD> FIX>))>> FIX FIX FIX>> STRING [REST FIX]>>>>>)] 0>> WIN DOM FIX FIX "OPTIONAL" )] 0>> STRING [2 ] [REST FIX]>>] STRING [2 ] [REST FIX]> FIX [2 FIX]> STRING [2 ] [REST FIX]> [2 FIX]>>)] 0>>] FIX [2 FIX]>> WIN DOM FIX FIX "OPTIONAL" )] 0>>] FIX [2 FIX]>> WIN DOM FIX )] 0>>)] 0>>>>>>)] 0>> FIX FIX FIX> WIN DOM DOM)] 0>> STRING [2 ] [REST FIX]> WIN STRING "OPTIONAL" FIX FIX FIX FIX FIX)] 0>>>] FIX [2 FIX]> WIN)] 0>>> FALSE FIX [2 FIX]> WIN "OPTIONAL" )] 0>>>] FIX [2 FIX]> FIX FIX FIX FIX FIX)] 0>> "OPTIONAL" )] 0>> (CONTINUATION) (DOM-DECL) FORM (WIN-DECL) FORM (RESTRICTED-SETS) ]> (SCREEN-MODEL) (EMPDOM) DOM (EMPWIN) WIN (BTDOM) (ETDOM) > STRING STRING STRING > ATOM "OPTIONAL" FIX STRING ]> ]>)] 0>> STRING STRING STRING STRING STRING STRING ]> STRING ]>> ATOM ATOM "OPTIONAL" FIX STRING ]> ]>)] 0>>]>]> "OPTIONAL" STRING)] 0>>]>)] 0>>> "OPTIONAL" ]> ]> FIX)] 0>> ATOM "OPTIONAL" ]> FIX STRING)] 0>>]> "OPTIONAL" STRING)] 0>> "OPTIONAL" STRING)] 0>>>> )] 0>> )] 0>> )] 0>> )] 0>> )] 0>> "OPTIONAL" )] 0>> "OPTIONAL" FLOAT)] 0>> FIX> "OPTIONAL" ANY)] 0>> CHANNEL)] 0>>)] 0>> > "OPTIONAL" FIX)] 0>> FIX FIX FIX FIX)] 0>>>> )] 0>>)] 0>>)] 0>> >>)] 0>> FIX FALSE WORD> )] 0>> FIX)] 0>>> FIX "OPTIONAL" )] 0>> OWT OWT)] 0>> OWT OWT)] 0>> OWT OWT OWT)] 0>> OWT "TUPLE" ANY)] 0>> )] 0>>> "OPTIONAL" )] 0>>> )] 0>> FIX)] 0>> ANY>> )] 0>> )] 0>> )] 0>>]>> OWT "OPTIONAL" ]>>)] 0>> )] 0>> )] 0>> ATOM)] 0>>)] 0>> OWT )] 0>> )] 0>> )] 0>> STRING)] 0>> )] 0>> )] 0>> )] 0>> OWT "OPTIONAL" FIX)] 0>>> LIST)] 0>> "OPTIONAL" )] 0>>> FIX)] 0>> "OPTIONAL" STRING STRING FIX )] 0>> (MNEME-VERBOSE) (MNEME-PAGE-OUT) APPLICABLE (STOR) (STORSIZ) FIX (STORNXT) FIX (STORPLUS1) (IHT) > CHANNEL FIX FIX)] 0>>> CHANNEL STRING)] 0>> CHANNEL)] 0>> STRING "OPTIONAL" >]> ANY)] 0>> FIX)] 0>> > "OPTIONAL" )] 0>>> STRING "OPTIONAL" )] 0>> > FIX "OPTIONAL" )] 0>>)] 0>>> )] 0>> "OPTIONAL" FIX FIX "TUPLE" ]>)] 0>> > STRING >>> ANY)] 0>>> "OPTIONAL" FIX)] 0>> FIX "OPTIONAL" FIX)] 0>> > STRING "OPTIONAL" STRING)] 0>> STRING "OPTIONAL" STRING)] 0>> STRING STRING FIX)] 0>>>>> FIX ANY )] 0>>>> > ATOM "ARGS" LIST)] 0>> "TUPLE" )] 0>> >>> "OPTIONAL" )] 0>> "OPTIONAL" )] 0>> "OPTIONAL" CHANNEL)] 0>> STRING STRING)] 0>>>)] 0>>)] 0>> "OPTIONAL" )] 0>>> STRING "OPTIONAL" )] 0>>]> STRING)] 0>> STRING)] 0>> > LIST)] 0>>]> STRING "OPTIONAL" FIX)] 0>>]> ]> VECTOR)] 0>>]> LIST LIST)] 0>>> LIST LIST)] 0>> FALSE> STRING FIX )] 0>> SYMTABLE )] 0>>> SYMTABLE LEXID "OPTIONAL" )] 0>> STRING >)] 0>>)] 0>> )] 0>> FIX >)] 0>> STRING FIX VECTOR)] 0>>> FIX "TUPLE" )] 0>> SYMTABLE STRING "OPTIONAL" ANY)] 0>> SYMTABLE STRING "OPTIONAL" ANY FIX)] 0>> FALSE> "OPTIONAL" ANY)] 0>> LEXTABLE)] 0>>> LEXTABLE STRING "OPTIONAL" FIX)] 0>>> LEXTABLE LEXID )] 0>> LEXTABLE STRING "OPTIONAL" FIX)] 0>> LEXTABLE STRING "OPTIONAL" FIX)] 0>> >>>> CHANNEL)] 0>> "TUPLE" ]>)] 0>>> "TUPLE" ]>)] 0>> "TUPLE" ]>)] 0>> "TUPLE" ]>)] 0>> "TUPLE" ]>)] 0>> FIX FIX "OPTIONAL" FIX)] 0>>)] 0>> )] 0>> "TUPLE" ANY)] 0>>>> CONCEPT ANY ANY)] 0>> CONCEPT ANY ANY)] 0>>)] 0>>)] 0>>>)] 0>>> ANY ANY)] 0>>> ANY ANY)] 0>> ANY ANY)] 0>> ANY "OPTIONAL" )] 0>> ANY)] 0>>>>>>>> )] 0>>> "OPTIONAL" STRING ANY)] 0>> ]>>>]> ]> ]>>>> ELT FIX >>>> [REST MS]>> >>))> >>))> )>>))> ) (ELSE FALSE>)>>))> >>>))> MCOD>))> MCOD>))>]>>> "OPTIONAL" )] 0>> "OPTIONAL" )] 0>>)] 0>>)] 0>> "OPTIONAL" )] 0>> "OPTIONAL" )] 0>> "OPTIONAL" )] 0>> "OPTIONAL" STRING STRING )] 0>> (TECO-BUFFER) > ]>> VECTOR "OPTIONAL" )] 0>> )] 0>>>]>)] 0>>]> CHANNEL ]>)] 0>>> )] 0>>)] 0>> >)] 0>>)] 0>> FIX)] 0>> >>>>>>>>>>> > )] 0>>> CHANNEL "TUPLE" )] 0>> CHANNEL)] 0>> ATOM "OPTIONAL" )] 0>> (MACRO-SURVIVORS) (PACKAGE-VICTIMS) (DONT-REMOVE) >>> FIX FIX)] 0>> ]> FIX)] 0>> SPACE "OPTIONAL" )] 0>>> "OPTIONAL" FIX)] 0>> )] 0>>>> SPACE FIX "OPTIONAL" ANY)] 0>> FIX "OPTIONAL" ANY)] 0>> SPACE "TUPLE" TUPLE)] 0>> "TUPLE" TUPLE)] 0>> SPACE FIX "OPTIONAL" ANY)] 0>> FIX "OPTIONAL" ANY)] 0>> SPACE "TUPLE" TUPLE)] 0>> "TUPLE" TUPLE)] 0>> SPACE FIX "OPTIONAL" ANY)] 0>> FIX "OPTIONAL" ANY)] 0>> SPACE "TUPLE" TUPLE)] 0>> "TUPLE" TUPLE)] 0>> SPACE FIX FIX "OPTIONAL" )] 0>> FIX FIX "OPTIONAL" )] 0>> SPACE FIX "TUPLE" TUPLE)] 0>> FIX "TUPLE" TUPLE)] 0>> SPACE FIX "OPTIONAL" CHARACTER)] 0>> FIX "OPTIONAL" CHARACTER)] 0>> SPACE "TUPLE" TUPLE)] 0>> "TUPLE" TUPLE)] 0>>> SPACE ANY LIST)] 0>> "OPTIONAL" FIX FIX )] 0>> SPACE ANY "OPTIONAL" FIX )] 0>>>> SPACE ANY)] 0>>>>>> )] 0>> FIX "OPTIONAL" FIX)] 0>>)] 0>> FIX FIX )] 0>> SPACE FIX "OPTIONAL" )] 0>> SPACE "OPTIONAL" )] 0>> FIX "OPTIONAL" )] 0>>> WORD WORD WORD LIST VECTOR FIX FIX>> )] 0>>> STRING FIX FIX FIX)] 0>> ANY)] 0>>> > > > "OPTIONAL" FIX )] 0>> > STRING STRING)] 0>>>>> > FIX "TUPLE" TUPLE)] 0>> "OPTIONAL" ANY)] 0>>> "OPTIONAL" ANY)] 0>>> "OPTIONAL" ANY)] 0>>>> > > FIX "TUPLE" ANY)] 0>>> > > FIX "TUPLE" ANY)] 0>> "OPTIONAL" )] 0>> )] 0>>)] 0>> )] 0>> > "OPTIONAL" > )] 0>>)] 0>>> STRING ]> "TUPLE" ]>>]>)] 0>> STRING "TUPLE" TUPLE)] 0>> > )] 0>> "OPTIONAL" STRING)] 0>> "OPTIONAL" ANY)] 0>> >>> "ARGS" ANY)] 0>> "OPTIONAL" "TUPLE" TUPLE)] 0>> FIX FIX>> DDMCHAN)] 0>> ]>> DDMCHAN ]>> FIX)] 0>> ]>> DDMCHAN ]>> FIX "OPTIONAL" )] 0>>> DDMCHAN FIX )] 0>>> DDMCHAN FIX)] 0>> DDMCHAN FIX FIX)] 0>> DDMCHAN FIX)] 0>> DDMCHAN FIX)] 0>> DDMCHAN)] 0>> DDMCHAN ]>> "OPTIONAL" FIX )] 0>> ]>> DDMCHAN ]>> "OPTIONAL" FIX FIX)] 0>> DDMCHAN)] 0>> DDMCHAN WORD)] 0>> DDMCHAN FIX "OPTIONAL" FIX )] 0>> DDMCHAN FIX "OPTIONAL" FIX FIX)] 0>> DDMCHAN )] 0>> DDMCHAN SPACE ANY "OPTIONAL" )] 0>> SPACE "OPTIONAL" FIX )] 0>>>> "OPTIONAL" FIX FIX DDMCHAN)] 0>> STRUCTURED STRUCTURED)] 0>> ANY ANY)] 0>> ANY ANY)] 0>> )] 0>> FIX ANY "TUPLE" TUPLE)] 0>> )] 0>> STRING "OPTIONAL" STRING )] 0>> FIX "TUPLE" )] 0>>>> ATOM "ARGS" LIST)] 0>>>> ATOM "ARGS" LIST)] 0>> FALSE> )] 0>> )] 0>> FIX FIX FIX)] 0>> STRING "OPTIONAL" FIX)] 0>> STRING )] 0>> STRING)] 0>> VECTOR "OPTIONAL" )] 0>> (DAYS) (MONTHS) > )] 0>>>> >> FLOAT)] 0>> CHARACTER)] 0>>>>>> "OPTIONAL" )] 0>>>>> MCOD STRING "OPTIONAL" ANY)] 0>> CHANNEL)] 0>> FIX FIX)] 0>> )] 0>> "TUPLE" ]>)] 0>> "TUPLE" ]>)] 0>>> "TUPLE" ]>)] 0>>)] 0>> "TUPLE" ]>)] 0>>> "TUPLE" ]>)] 0>> )] 0>> VECTOR)] 0>> STRING [REST ]>)] 0>>>>)] 0>>> VECTOR "OPTIONAL" )] 0>> VECTOR "OPTIONAL" )] 0>> PMCHAN ANY ANY "OPTIONAL" FIX)] 0>> PMCHAN ANY "OPTIONAL" FIX)] 0>> PMCHAN ANY STRING "OPTIONAL" FIX)] 0>> PMCHAN ANY STRING "OPTIONAL" FIX)] 0>> PMCHAN ANY ANY "OPTIONAL" FIX)] 0>> PMCHAN ANY VECTOR "OPTIONAL" FIX)] 0>> PMCHAN ANY "OPTIONAL" FIX)] 0>> PMCHAN ANY ANY "OPTIONAL" FIX)] 0>> PMCHAN ANY "OPTIONAL" ANY FIX)] 0>>> PMCHAN ANY )] 0>> PMCHAN ANY "OPTIONAL" FIX)] 0>>>>>)] 0>>)] 0>> )] 0>> )] 0>>> CHANNEL)] 0>> FIX FIX FIX FIX)] 0>> CHANNEL FIX)] 0>> STRING)] 0>> ATOM)] 0>> ATOM)] 0>> ATOM)] 0>> > "OPTIONAL" ]> ANY)] 0>> FIX STRING)] 0>>)] 0>> CHARACTER)] 0>> >> CDMCHAN)] 0>> CDMCHAN)] 0>>>]> FIX ATOM> >]> FIX FALSE>> CDMCHAN ANY)] 0>>>]>> CDMCHAN)] 0>> CDMCHAN)] 0>>>> APPLICABLE CDMCHAN "TUPLE" ANY)] 0>>> CDMCHAN ANY FIX)] 0>> CDMCHAN ANY FIX)] 0>> > CDMCHAN ANY)] 0>>> STRING)] 0>> STRING "OPTIONAL" ANY)] 0>>>]> FALSE> UVECTOR ANY>> "TUPLE" ANY)] 0>>)] 0>> ANY)] 0>> ANY ANY)] 0>> ANY)] 0>> ANY)] 0>> ANY)] 0>> )] 0>> )] 0>> FALSE> )] 0>> )] 0>> ATOM "OPTIONAL" INFO FORM)] 0>>)] 0>> "OPTIONAL" STRING )] 0>> >]>)] 0>> > "OPTIONAL" STRING VECTOR VECTOR> APPLICABLE)] 0>> "OPTIONAL" STRING VECTOR VECTOR> ANY APPLICABLE)] 0>>> > "OPTIONAL" FIX)] 0>>> ANY)] 0>> ANY)] 0>> ANY)] 0>>> > "TUPLE" )] 0>> > > FIX)] 0>> > "OPTIONAL" FIX)] 0>> FIX FIX FIX STRING>)] 0>> >> STRING "OPTIONAL" STRING)] 0>> "OPTIONAL" )] 0>> "OPTIONAL" )] 0>> STRING STRING "OPTIONAL" ANY FIX)] 0>>)] 0>> "OPTIONAL" FIX)] 0>> STRING STRING)] 0>> STRING)] 0>> STRING)] 0>> STRING "OPTIONAL" STRING)] 0>> ANY)] 0>>> "OPTIONAL" CHANNEL)] 0>>)] 0>> STRING)] 0>>> "TUPLE" )] 0>>)] 0>>)] 0>> "OPTIONAL" FIX FIX FIX)] 0>> FALSE> (CCA-SCRIPT-CHAN) (CCA-DATA-CHAN) (CCA-DATA-MODE) FALSE>> )] 0>> > ATOM "QUOTE" STRUCTURED)] 0>> )] 0>> )] 0>> )] 0>> )] 0>>]>)] 0>>]>)] 0>> )] 0>>]> "OPTIONAL" )] 0>> "OPTIONAL" )] 0>> FIX FIX ANY ANY FIX > >)] 0>>)] 0>> FIX FIX FIX FIX FALSE FIX > LIST>)] 0>>)] 0>>>>>>>>>>>>>>>>>>> FIX)] 0>> "TUPLE" TUPLE)] 0>>> GSEG "OPTIONAL" )] 0>>> > STRING FIX)] 0>>>)] 0>> FIX FIX >> CINT)] 0>> "OPTIONAL" FLOAT)] 0>> "OPTIONAL" )] 0>> "OPTIONAL" )] 0>> (CLOCK-HANDLER) (CLOCK-INTERVAL) FIX> "OPTIONAL" ANY)] 0>>)] 0>>>> ) (FH <>)) #DECL ((P1 P2 EXPL FH) ANY (GOODIES) LIST (DFL) ) )> >> !>> '> FIX>> ' FIX>> >) (ELSE >) !>)>) '(ELSE .SVALUE)>>>)> > .TCNT> FIX>>) ( FAIL-HOOK> >) (ELSE )>> > !))>>)>) ( > > >) (ELSE )>) (ELSE > )> >>))> )] 0>>)] 0>> > >)] 0>> > >)] 0>> "OPTIONAL" ANY)] 0>>> RSUBR "OPTIONAL" CHANNEL ANY)] 0>>> ATOM CHANNEL "OPTIONAL" ANY)] 0>> "OPTIONAL" )] 0>> "OPTIONAL" CHANNEL)] 0>> > ANY LIST ANY ANY>>>>)] 0>> "OPTIONAL" ANY ANY)] 0>> LOCATIVE ATOM MONSPEC>> ANY ANY "OPTIONAL" "QUOTE" ANY "ARGS" LIST)] 0>>> "OPT" STRING STRING )] 0>> )] 0>>> ]> "OPTIONAL" FIX FIX)] 0>> ANY ANY)] 0>> "OPTIONAL" STRING STRING)] 0>> STRING)] 0>>]> ]> ]>)] 0>>]>> ]> ]>)] 0>>> STRING ]> VECTOR)] 0>>> STRING ]> VECTOR)] 0>>> STRING STRING VECTOR)] 0>>> STRING VECTOR "OPTIONAL" ANY)] 0>>> STRING ]> "OPTIONAL" VECTOR ANY)] 0>> ]> )] 0>> UVECTOR)] 0>>>>> >> )] 0>> "OPTIONAL" ANY)] 0>>> (LWFACT) FLOAT (ON-EDGE) FLOAT (ERROR-WEIGHTS) (SPCENG) (MARK-WEIGHTS) (MRKENG) (ERROR-VECTOR) > APPLICABLE)] 0>>>>>>> > FALSE>]> STRING)] 0>> >>> "OPTIONAL" FIX FIX)] 0>> "TUPLE" ]>)] 0>> "TUPLE" ]>)] 0>> )] 0>>>>>]>)] 0>>)] 0>>>> "TUPLE" ]>)] 0>>>>>>> "TUPLE" ]>)] 0>>]>> )] 0>>]> "OPTIONAL" CHANNEL)] 0>> > FIX "OPTIONAL" FIX)] 0>>>> > "OPTIONAL" FIX FIX)] 0>> >>> )] 0>>>>>>>> )] 0>> )] 0>>>> "OPTIONAL" )] 0>> )] 0>> )] 0>> FIX)] 0>>>> STRING ANY)] 0>> > "OPTIONAL" ANY STRING)] 0>>> ANY ANY)] 0>> > > "OPTIONAL" > )] 0>>> "OPTIONAL" ANY )] 0>>> "OPTIONAL" ANY)] 0>> CHANP FIX)] 0>> CHANP FIX "OPTIONAL" FIX ANY)] 0>> CHANP)] 0>>> CHANP FIX > "OPTIONAL" ANY FIX)] 0>> CHANP FIX "OPTIONAL" FALSE> ANY)] 0>> "OPTIONAL" STRING)] 0>>> CHANP)] 0>>> STRING STRING "OPTIONAL" FIX ANY )] 0>> STRING FIX FIX ANY FIX )] 0>>]> (PIOPAGEVCT) ]> (PIO-REF-COUNT) FIX (PIO-PAGE-LIMIT) FIX (PIO-PAGE-COUNT) FIX (PIO-DEFAULT-PAGE-LIMIT) FIX (PIO-DEFAULT-IO-MODE) ANY (PIO-MAX-EXTRA-ALLOCATION) FIX (PIO-MIN-EXTRA-ALLOCATION) FIX (PIO-EXTEND-BY-PAGES?) ANY (PIO-HANG-ON-UNMAP?) ANY (PIO-ERROR-VECTOR) >> (MORE) (BUGFATAL) (ENDJOB) (LATER) (JOB-INPUT-CHANNEL) (FILE-INPUT-CHANNEL) (CARD-READER-CHANNEL) (OUTPUT-CHANNEL) (PNCHAN) (PUCHAN) (TELNET-CHANNELS) > (SIGNON-NAME) (JOBNAME) STRING (JOB-INPUT-FILE) STRING (JOB-RETRY-FILE) STRING (JOB-LOSER-FILE) STRING (DEBUG) (SCRIPT) (INPUT) (DEMON-NAME) STRING (INPUT-FILE) (USER) (JOB) (JOB-INPUT-SOCKET) > STRING> ANY)] 0>>> FALSE>]> IRSVCT )] 0>> IRSVCT VECTOR)] 0>> IRSVCT "OPTIONAL" FIX)] 0>>> "OPTIONAL" STRING )] 0>> STRING STRING "OPTIONAL" ANY ANY)] 0>>> 'T FALSE> "OPTIONAL" ANY)] 0>>]> FALSE> "OPTIONAL" )] 0>> FALSE> "OPTIONAL" ANY)] 0>> STRING)] 0>> )] 0>> )] 0>> CHARACTER)] 0>> CHARACTER)] 0>> >>>> "OPTIONAL" STRING)] 0>> "ARGS" LIST)] 0>> )] 0>>)] 0>> )] 0>>>> "OPTIONAL" )] 0>>] [REST ]> ] [REST ]>> "OPTIONAL" )] 0>> > "OPTIONAL" )] 0>>]>> "OPTIONAL" )] 0>>]>> "OPTIONAL" )] 0>>> "OPTIONAL" )] 0>>> "OPTIONAL" )] 0>>> FLOAT)] 0>>> FLOAT)] 0>>> FLOAT)] 0>>)] 0>>> ATOM "ARGS" )] 0>> "OPTIONAL" )] 0>> ASYLUM "OPTIONAL" UVECTOR)] 0>> >>>> LIST>> STRING "OPTIONAL" )] 0>> )] 0>>)] 0>> "OPTIONAL" CHANNEL)] 0>> "OPTIONAL" CHANNEL)] 0>> >> "OPTIONAL" UVECTOR)] 0>> > )] 0>> "OPTIONAL" ATOM FALSE>)] 0>>> "OPTIONAL" ANY ANY ANY)] 0>> > FIX FIX FIX)] 0>> FIX FIX FIX FIX)] 0>> FIX FIX)] 0>>>>>> "OPTIONAL" FIX)] 0>> >>> > LIST ANY)] 0>>> )] 0>> CHANNEL)] 0>> CHANNEL)] 0>>]> CHANNEL "OPTIONAL" FIX FIX STRING)] 0>> )] 0>> "OPTIONAL" LIST)] 0>> "OPTIONAL" )] 0>> "OPTIONAL" )] 0>>)] 0>>> >)] 0>>>] STRING> "OPTIONAL" )] 0>> ANY)] 0>> ANY ANY)] 0>>>> STRING>)] 0>>>>]> "OPTIONAL" ]>)] 0>>] STRING> "OPTIONAL" ]>)] 0>>] STRING> > "OPTIONAL" ANY)] 0>>] STRING> ANY "OPTIONAL" ANY)] 0>> "OPTIONAL" CHANNEL)] 0>> "OPTIONAL" CHANNEL)] 0>> "OPTIONAL" CHANNEL)] 0>> )] 0>>)] 0>>>)] 0>> )] 0>>)] 0>>] STRING>)] 0>>)] 0>>] STRING> FIX "OPTIONAL" ] STRING>)] 0>>>>> "OPTIONAL" STRING)] 0>>>>> VECTOR ANY)] 0>>> ANY)] 0>>>>> LIST "OPTIONAL" )] 0>> STRING STRING)] 0>>]> STRING STRING)] 0>>)] 0>>>>> >>)] 0>>)] 0>> >>> VECTOR)] 0>>> ANY "TUPLE" ANY)] 0>> ANY)] 0>> >> "OPTIONAL" STRING STRING APPLICABLE ANY STRING)] 0>>> STRING CHANNEL FIX)] 0>>>]>>> )] 0>>> STRING STRING STRING "OPTIONAL" STRING)] 0>>> >>> ANY)] 0>> ANY)] 0>>)] 0>> "OPTIONAL" FIX CHARACTER)] 0>> )] 0>> LIST)] 0>> IRSVCT ANY)] 0>> ]> ANY>)] 0>>]> ANY>)] 0>>> IRSVCT ]> "OPTIONAL" STRING)] 0>> IRSVCT > ANY "OPTIONAL" ANY)] 0>> IRSVCT )] 0>> IRSVCT "OPTIONAL" ANY FIX)] 0>>)] 0>>>>> IRSVCT ANY "OPTIONAL" VECTOR)] 0>> IRSVCT ANY "OPTIONAL" ANY)] 0>>> IRSVCT FIX "OPTIONAL" LIST)] 0>> IRSVCT "OPTIONAL" ANY)] 0>> IRSVCT "OPTIONAL" ANY)] 0>>> IRSVCT)] 0>>> IRSVCT FIX)] 0>> IRSVCT "OPTIONAL" ANY)] 0>>>> "OPTIONAL" ANY )] 0>> IRSVCT "OPTIONAL" ANY)] 0>>> > >>> STRING "OPTIONAL" )] 0>> > )] 0>>>>)] 0>>>)] 0>> >> STRING)] 0>>> CHANNEL CHANNEL)] 0>> "OPTIONAL" )] 0>>>> CHANNEL)] 0>>> CHANNEL)] 0>> > STRING "OPTIONAL" FIX FIX)] 0>> \ No newline at end of file diff --git a/bin/libmud/libmud.lock b/bin/libmud/libmud.lock new file mode 100644 index 0000000000000000000000000000000000000000..c4253ad906f1d3f3bf8d093bd3d439724a46c3e7 GIT binary patch literal 35 LcmZQzAOu(e04M+k literal 0 HcmV?d00001 diff --git a/bin/libmud/libmud.nlib b/bin/libmud/libmud.nlib new file mode 100644 index 0000000000000000000000000000000000000000..ac44aeec8fe2aca5683bfd9d53636b83a2122916 GIT binary patch literal 97293 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 + + + + + + + + + + ZERO #DECL ("VALUE" DATA-BASE +DATA-BASE FIX FIX) OENDPACKAGE ORENTRY OENTRY ORPACKAGE OPACKAGE MAKE-STRING +STRING=? HASH-NAME DEFER-FIND PACKAGE-FIND DB-HASH-MAP DB-CLOSE DB-OPEN +DB-ACCESS T OUTCHAN NM2 % (STRING) % +CUR-UPD % "DB already active." "READB" ".LOCK" " LOCK" "PRINTO" + % % " ACTIVATED" "PRINTB" GROW-BUF % "LIBMUD" "LIBMUD;LIBMUD" DB-IN-BAD-STATE DB-OK? +"No libraries activated." % TO ".LIB" " LIB" % "DONE" ">Z" ";_" ":<" BUF % "READ" "PRINT" (1) %< +RGLOC CUR-PACK T> % % % + % % % % +% % % % %< +RGLOC RENTRY T> % % UNBALANCED-PACKAGES + LUP-ADD-PACK ERRET-T-TO-CONTINUE PACKAGE-ALREADY-EXISTS ERRET-T-TO-REDEFINE %< +RGLOC OPACKAGE T> % % % %< +RGLOC OENDPACKAGE T> INITIAL OBLIST "ATOM, " (ANY) ", GOES THROUGH INITIAL" +PACKAGE ENDPACKAGE DEFINE SETG LIST FLOAD #FALSE ("FLOAD ENCOUNTERED") UVECTOR +WORD VALUE ENTRY BAD-FIRST-ARG-TO-DEFINE-OR-SETG!-ERRORS DATUM-ALREADY-EXISTS +LUP-ADD-DATUM #FALSE ("PACKAGE NOT FOUND") PACKAGE-NOT-FOUND DO-DEL % DATA-BASE-MUNGED TWO-PACKAGES-IN-FILE? NENDPACKAGE "GC not necessary." +" packages, " " buckets used." " packages/bucket; maximum length " " entries, " +" buckets used. " " entries/bucket; maximum length " " entries/package." %< +TYPE-C DATA-BASE VECTOR> HUV % "Last update: " "Last GC: " +"Never" "File length: " " words of header and hash tables." " words." " " +" crossing" " of page boundaries. " " empty hash bucket" "Free chain is " +" entries long, containing " " word" " lost." " at "]>> + .GLUE > + + + + + + +)] 70>> + + +"OPTIONAL" )] 453>> + +> > > )> + + STRING "OPTIONAL" )] 943>> + + > STRING UPDB)] 1336>> + + STRING STRING "OPTIONAL" ANY)] 2213>> + + STRING) +] 2338>> + +> + +> + +> + +)] 3544>> + +)] 3624>> + +> + +" " + +"SUBTITLE Garbage collector" + + +STRING "OPTIONAL" ANY)] 3728>> + + )] 5046>> + + diff --git a/bin/libmud/nl.nbin b/bin/libmud/nl.nbin new file mode 100644 index 0000000000000000000000000000000000000000..a3e05d783c39f857f52f83e129a25a73e325d169 GIT binary patch literal 12759 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 literal 0 HcmV?d00001 diff --git a/bin/libmud/nlib.fbin b/bin/libmud/nlib.fbin new file mode 100644 index 00000000..b369a314 --- /dev/null +++ b/bin/libmud/nlib.fbin @@ -0,0 +1,262 @@ +' + +"SUBTITLE Data base definitions" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +> + +> + +> + + + +" " + +"SUBTITLE In-core representation of data base" + + CHANNEL FIX FIX FIX FIX FIX>> + + + + + + + + + + + + + + + +"Bits for corblk--used in DB-BITS field" + + + +"Length of file" + + + + + + + + + + + + + + + + > + + + +" " + +"SUBTITLE What DEFER-FIND returns" + + STRING STRING [2 ] +[REST FIX]>> + + + + + + + + + + + + + + + + + + + +" " + +"SUBTITLE Data base primitives" + +"Primitive operations on data base: open, close, access, reset, print, etc." + +"All known data bases are kept on list DATA-BASES, as pairs: string, +data base." + +"Print a data base" + + DB-PRINT #DECL ("VALUE" +CHARACTER DATA-BASE) OUTCHAN "#DATA-BASE [" "->" "<-" " \"" "--HASH--" +"--FREE--" "READB" NM2 % (STRING) % +% ![!] "PRINTB" "PRINTO" % +DATA-BASE-IN-BAD-FORMAT DB-RESET % T +NO-BUFFER-AVAILABLE]>> + .GLUE > + + + + +"Put data base with specified name on list if not already there, open +it, map in hash table, etc." + + STRING "OPTIONAL" ANY )] 212>> + +"Re-initialize existing data base" + + DATA-BASE)] 331>> + +"Close data base: close channel, flush buffer" + +> + +"Cause hash table to be mapped (by accessing to 0)" + + DATA-BASE)] 426>> + +" " + +"SUBTITLE Extract data from data base" + +"GET-NAME returns a string pointer to the name field of the supplied entry." + +> + +"GET-FILE returns a string pointer to the file name for a package" + +> + +"GET-PACKAGE returns the address in the file of the package entry for +this function" + +> + +" " + +"SUBTITLE Library search routines" + +"PACKAGE-FIND looks up a package in the specified data base." + + STRING "OPTIONAL" ) +] 533>> + +> STRING)] 665>> + +"DEFER-FIND returns false (if the package doesn't exist) or a list of +all the entries in the package, with the file name." + + STRING STRING [2 ] [REST FIX]>> +STRING "OPTIONAL" )] 858>> + +" " + +"SUBTITLE Data base primitive crufties" + + DATA-BASE FIX)] 1082>> + +" " + +"SUBTITLE Library crufties" + + +UVECTOR STRING)] 1163>> + +> + +" " + +"SUBTITLE Hashing function" + +"HASH-NAME takes a string, a uvector (the hash table, which includes the +db header), and a fix, which is the offset in the uv of the hash table +length. It returns a fix." + +> + +" " + +"SUBTITLE Creation date" + +> + + diff --git a/bin/libmud/nlup.fbin b/bin/libmud/nlup.fbin new file mode 100644 index 00000000..9743f07e --- /dev/null +++ b/bin/libmud/nlup.fbin @@ -0,0 +1,161 @@ +' + + + + + + + + + + ZERO #DECL ("VALUE" DATA-BASE +DATA-BASE FIX FIX) GET-FILE L-UNUSE OUSE-DEFER OUSE OENDPACKAGE ORENTRY OENTRY +ORPACKAGE OPACKAGE MANIFEST? MAKE-STRING GET-NAME HASH-NAME ENDPACKAGE +DEFER-FIND PACKAGE-FIND LOAD-PACKAGE CRDATE TELL DB-HASH-MAP DB-CLOSE DB-OPEN +DB-ACCESS % T OUTCHAN SNM (STRING) NM2 % + CUR-UPD % "DB already active." "READB" "READ" ".LOCK" " LOCK" +"PRINTB" "ZDATA.TMP" "_DATA TMP" "PRINTO" "PRINT" % % " ACTIVATED" "Creating new library " GROW-BUF % +"LIBMUD" "LIBMUD;LIBMUD" % DB-IN-BAD-STATE +DB-OK? "No libraries activated." % TO % "DONE" ">Z" ";_" ":<" BUF % (1) % +UNBALANCED-PACKAGES LUP-ADD-PACK ERRET-T-TO-CONTINUE % % % PACKAGE-ALREADY-EXISTS ERRET-T-TO-REDEFINE %< +RGLOC CUR-USES T> % #FALSE ("NO ENTRIES IN PACKAGE") # +FALSE ("FILE DID NOT DEFINE A PACKAGE") LOAD-ACT (ACTIVATION) % % % % %< +RGLOC PACKAGE T> % % % %< +RGLOC ENTRY T> % % % %< +RGLOC ENDPACKAGE T> % % % % % % % %< +RGLOC OENTRY T> % % % %< +RGLOC OUSE-DEFER T> FILE-SYSTEM-ERROR!-ERRORS CONTROL-G?!-ERRORS +UNASSIGNED-VARIABLE!-ERRORS GVAL UNBOUND-VARIABLE!-ERRORS VALUE CALLER USE-DEFER + CUR-PACK "Flushing load of package " ": error during loading." +"Flushing load of current package:" INITIAL OBLIST "ATOM, " (ANY) +", GOES THROUGH INITIAL" PACKAGE ENDPACKAGE DEFINE SETG LIST FLOAD #FALSE ( +"FLOAD ENCOUNTERED") UVECTOR WORD ENTRY BAD-FIRST-ARG-TO-DEFINE-OR-SETG!-ERRORS +DATUM-ALREADY-EXISTS LUP-ADD-DATUM #FALSE ("PACKAGE NOT FOUND") +PACKAGE-NOT-FOUND DO-DEL % DATA-BASE-MUNGED () + " " PACKAGE-HAS-NO-OBLIST? WRITE-PACKAGE "Package " +" can't have datfile entry." "RPACKAGE " "PACKAGE " RENTRY USE ">" ">" +MANIFEST GDECL "" "WARNING: two packages defined in file " "Only " +" will be added to the library." "The second package is " TWO-PACKAGES-IN-FILE? +NENDPACKAGE % RPACKAGE "GC not necessary." % " getting new entry." " being flushed." " being flushed: " +"--" % LOAD-FAILED GC-NEW-PACKAGE HUV % +"Last update: " "Last GC: " "Never" "Library file length: " +" words of header and hash tables." " packages, " " words." " " " crossing" +" of page boundaries. " " empty hash bucket" " entries, " "Free chain is " +" entries long, containing " " word" " lost." "The data file is empty." +"The data file is " " words long; " " words in use." +" packages with data file entries." " at "]>> + .GLUE > + + DATA-BASE CHANNEL + CHANNEL STRING STRING>> + + + + + + + + + + + + + + + + + +> + + + + + +> + +> + + )] 150>> + + +"OPTIONAL" )] 634>> + +> > > +)> + + STRING STRING [2 ] [REST FIX]> +> STRING "OPTIONAL" )] 1162>> + +> + +> + + + + > +FIX STRING UPDB )] 1926>> + + STRING STRING [2 ] [REST FIX]>> +STRING STRING "OPTIONAL" ANY)] 2865>> + + STRING) +] 3001>> + +> + +> + +> + +)] 5129>> + +)] 5209>> + +> + +> + +> + +)] 5416>> + + + + +STRING "OPTIONAL" ANY ANY )] 5671>> + +> + +> + +> + + +STRING)] 7438>> + + diff --git a/bin/libmud/nlup.nbin b/bin/libmud/nlup.nbin new file mode 100644 index 0000000000000000000000000000000000000000..44439282e7f932cc8ba012353d1c6b27679ffaf5 GIT binary patch literal 77084 zcmceg0uE6`qd4SxACrqV z8nMlwQCswCtF5*ZM)P*xd)t_Fn|25>CLLq)q&sOlF@u)LsiLYx_hs@0I+PTa2M)P!}uvEw(HTfHysuifOW>vFQn zyQ=TR?asqJFWNmXmnN)qukTWi8uerMdD~5WYqj&R?czSq9xf7d*6#UrQNlWRY2Ps~ zIP1Q)?^VNN51@v16q@>HLY22}FIuiHwO4uO6~Db)4af}Z+_1i6!mgWfJwMpxJQiPH zty;gnQ0T3T`KA5Fj{o>org!-R|2n5e9sl0mxLLjSt{R>4`IW{8|5*D?Q&ggQrs^R!|K%c8;7NM&!~~PPoHYqm^;=1e{r=otp5&PY+ueHxWL9}MT>YipT{F{O=*}&B+upF@s%@=1 zx!>F7v*oJwpZ2Yu_h#5CJ!;K}_3q@|nVZz`+Oxae2aVfKUq80N^Im=4UhiWiqn9_F zZu6_?8#(>n-s}FVfBkCrqeb@J?mdzJtqrhz=4d+5LJ<-~1c+Ky= zUwf`v4g1U%ePcxCgPYySJO5nmU1;TRyt&d_&J#volfBnFr1$x)mEKi6tQk2~o>Kl- za(<=fuvTrWJ9(P#P|@*o8$4&Go!{$yJomvT)ONilZgns0{q9!hQFOySzPPqn4V|Jd z*`bm#Yu$BU+c0Z0-r4FrOdvXl$Gbl7a^tWe)4yz5l|J{&rX}UG&!|z07F=nLODXzN zy>Hlcd(%zN(_gC5KiJ-DJTZUz73ZqR+RqwKrxjgp+-FU)-}2NDz&)XZ8O;W|_Exn! z$(rapbrG>AS33{sYu@m#ob1u7-G}~V8?V*qRJ+zQ#2UBN^9_dOjO#V#FyIexT3vK{ zrRV(}XY;v6DHgwv%1UBcpr%oEp~Yfp%1=h~Gk!kugDl=XuqEvEKXu881U zn@xzI`1^w&U2Hy6m2`0*o@IA)u3aIN_#yaO{E$**3^momVGZ~w$M?lNVWk&6omDIU z>NLvrqE`AiPl|x0@k6Zi$yL-!i^5bSmW$BG6)s}-G!0#gb=C@ToXYh>^XD3zQ&U7X z-45VtE_Voxyj0lCp^A)oB0!cC2b-_k0;gPGY-=-5bWttoA_1-JO;C*&7-if*n+4NE zjYd1K)F~TK6QTou^NP3$@ zg)i}i$^}umZ>Zd}uGJ}G$`IR>>+`7PKIm0d($hi=rp~9+m;-3$9}NwkS#_C3pzidD}CZJ4R?D+=d0NLGF*{Dpx23KDtS}g(yKU$h z17Z|SP%?d-;B7=#8hMUiHKV6yHNfBrk!p_Dggjd4HZ=S%X$T8wC3^5U;)ev&tkuvY z>i?*4uvwQnDe-~U4(M@0q)}7rV1Oe->2?9#-bc4Q7|bME79)cv&s7zms`?8d!e|nKv~|j>)U{jaS`~2T z|9nC9mlKYCL!WrIwF+F$oC0$>=-HRX#Y6x2@)`Z(%X{>XFQ3xCPYI%e0Z|#j}Q=rh@l2D{a&Eu78C;5yOzG|vv$<{mo(G` zgxhOruIJLfYMSd_G}oi4hDjGf>4gM3-xoBw#u^hn8iT$t%~OWa?W0WdXvq~@7Qhtq z3`!Cs0)-k9aIzUaEvStXLf8NWC;@orKf6@1sUf)SI<-_8OXGV~o1lOd5#|Ij)YAyc z)i^O+u?@EdT&E>g#>d$JRn&kgQj|@q6|h7vf_z@!?M;4Rivz&7cwxD2ys(%r0Ivay z)d<;Cz>StKY6s$_^9vz@-2+5Gvok`7C@xDd62W^B&DlTr0)U)W!u=-fUo?EURfs9n z+d(4%uFmmz=Iz(6x!E}eAM+a@HSh&rL`Lwm`%S!{XXaXg2CpDOf=0O1PWK^Llx#$f}OeKnh=0Ptc?&3v8}mTSP}(BCdB=8>EXa-SVJ>@y;HDk1${d| zIoKgWX)h01$OVk zeq*+}zY5RU?)^3KYO87<+~&=)UEJo`)62feTRw%ETl-$m54n7+Sj&MjrjUvmB(6Q+wFNjH*UB0rJd*3Ipbopr>kwB zdTgC%!#`>_Igj>!bC)}1{{dnsYxg#s?)b-D?jK@L**(Xmjojqk(;tlc!m@;Y-f(N5 zO7Hl8@HQh;4cVIsnW84< zNqp!GZfnMZfqu`H>Fu=h{9bofP0TS837+(BD2=hJPkauBJg$HCb~P)UM2FwypvE5X z`yYhc9&LE(Kf!#LvJ6!^((YYXgTA~{npr4$=PX^sP_t~O_IgrlFILlctC|Ytsqf#q zRR7GGrmu#Sz1@^wS!q|ZdR^G&{ibN*T4N5@dGo$G@PhYn&4lGQ_gHOqTI+rU8)+l$ zPY=pnR-UV5(KF#Le&gG}HLr3g%S9xRE;BTu^r`0RbY(8T%}k!uZSm3`^OPR4@WRh0 zJ=q-Gs652C8Dk#Id3td#n-ZkmCQV9TG%!+BiVnF#jOfyP;_&8*#o`+g0Yq{?R(Nv! z;=%JonnU?YY!Ged;n}gOh%1$8S)#9q1TUE}CbHA;g+WtAZxKEfx7ou&+cfR06Pb>{ zTqR2OV0>fn7tLv(h%^y_?vCs^Xl#zd@`*^5Zx{Xd(SH}%Zo2X9i1=sP+C^Hf=p-zQ z#eE{grnC_e!V~ zZ_Sv>hlOY-Z@=Bx_%{qdggC@l(NzS1v^bPCqD%zGiIEPV83Wd#e$*JUE{jj3SF}&9V&9|FLc)yW(FPI@h(PyRF=H zc2mk+SN4{4yX)Mg#6|Vg?NhPj1 zlhCWP-H+Ry`wI`xZ5SAhzMQot+FjY3@bQqyLq!c?mkyzmH7U~@61u-W*EO!tHn$<{ zwUi1qtN=p|tsgwcHFnbR5jPKRlhWvJ_px5J>)gk>y!C?G_GB%Cyfyy*Qca*?X(i33 z3j#!>L6A>iK{JBKCVl@^iimb43K35HR~Yd;0mOVb64WV1`f+m#*gU>WuT}wnCKc!vVgwFU3|FHXl_>QjjR!_^YtL3bV2!DJf zmV1ZYoxC3kiJDj5eYN2$Qq&wOx_BGWikSJYRyS1iesi<;aQKsU2fi3V7fAq`x0H%#?gS%=BkU{Dfp6VqYabX>Im(KSf_?^q zNjP=u2xj581{BNv=x(9dePbr5Z5Dy|9_!^|*SD`F6NIJCRofK|E_P*iKUM-@80@#S z+q~f=sFvF0&l@mk7HoyplxgW7Sje3ukd)HmL5Srwha@0H*I-)9w!D_{LqL(7YoC{L zq=W--NPl&j07AQSgWrX@R&2-MxJa_&rInko$R$j+ihvtiwmvnCCkMoV*EeUo`{*ms zd{h^Y!QK-NwLyh7F4J2-V`8#WB515Ws2_fJyZRnA<~)rfVXY@Qrk07@h?{e^94>PubOQlM*nE7h zYiyxymMc4IXqlR(>vvcQr6EMb%DcdBNRB5&un%@yf!&1DfCGqZw%+Kof#MP@TyCH^ zJ!7_7f&~!@$dI4{j_`mFzT_Gv?)zbP*pv1I8%+j&a`j1>cIAIs$L>4xATdz!CBO0} z)Iwz!S9;gyYOQ!*&9yNm`>eEy$?hrF)Bn=^#1`yF^fPupxp;1U%WA`K|9`=ANxoX* z`Pt1!ih<|Jvl`;Jyk6uAiR$?WT~o&TO5#PQjo53D@FlFfN*xTGHjy0)EU_R3&-@iw z@jWnF#(h(FrE}Nfs;03zK}5PvKuFdvnskp_q7e~HBd8h(3TT8$6nJ0gYAY2BT?9=; z`3Dfu?+l44yBkSy6wv1%^K+-)dqhb?mZSsXk znxQFN9ySY8xgeVb&1utsA!~!L1M@bL;a}g=2p!rJI^0J!ppXlpZS;9fw?woSQhGY{ z0xi{brl!c;9v$H;|IYHyE$YiHLne~9|F=EpdAB`~%bBPVhYC4YEoXzouw|rs#86k6 zYBceksz8nDJPGa~en=$kC~L4x&>~2snD0;n{(jl-Lp*4{&`hHF7Bfk(iRROx485C~ zMDu-y_w`YT>;ulwMJ#<0IQ+6zb7 zTBCOEVKmj3*tlNchW3?^nF->!&ftt(>8*L33`u1qw(GL7IzIM%wfcm%_YI{fHpE!5 zfalpg`{jPqEA7L@e0i%$wW8QzsTJ?bX9q^_DOq+cUnG(Mx=w^y#Shn^5m zir{oHO0@MAMLTg_Llo^JZ*}1?T!7k3CYhM1_VPo-BohrqCf;kijksi zzL?~&{8L;K*XE%I`raJufXo;rELniWz^T~C+9Zl}2bk>_MBCva-(mSmye&f0MTsL| zr1(HwLr<9tYl<4KNv3zrg~2Yo+P%=KOOk6YzftTO8+~}L8oKd~GS}Ko$I4v?a+9Vv zv@aN3<{BGy1ftoN)VZ#(Er;x`_{i7GT<5w$-bl_erquDlIu5wJTexdurB0DzTRN-rObEN0QTN2sejWr z{Mq?wa~j&`zfnZ`g}JWye6ac7MnS)jy(y`zA>@%*C1OU z;1RW|oRGbh@x853u0v#psi-UZQSH-@!Nk2h=X?jn=qt;Av;uWzI6!6)Nvk!5jj~&?V-+N(;;i2G+gtmU-Tz+zqD_Hx^&E8XWZ>dVRhVZV*Y^75~cRtViM_@ zslbdDLGyfsVOGAIiV`U~8#n~si0Tr7m-uIi6kQymQH&8mks9^BcRirK+w0Vu^?-9W z9RoI9N`~5P<8g^su2qrH$6cFzw9NJGMyZqo>U}~K_@hJRP^Yn&eF&<(%}~4?sA)-e zd%nB<<^a}OXae`pR**2o4++_ifW$Be(zp8&5O%QeRc7Lprln!#vrd!|2+E5ocM&rN z%!Ubz*z<6@4Kqzx#Q#O8)f)o97 z@`ZIh8n?;Mq=izHk!-b`%tbK8>CeobnrydG_Xdej0jVQFn`w7Qr6I(c<>;Soom`>W zhvYY4<_%yxPwWlWlB#v5i;d82smsArTq^qWhfK2)ar(=tToTHGh+$s&r49Jgj%JC? zt6+4eKWhsiB7zCAl5w-AjR*+M-gL8f%w-e0&azoh-^5vlYmF%LRcSqiGL z+3#%gu9Bve7`uC7vB6>XgejzR52^J`Xo<`z-0=||vxW|8e)SM|KKij0WLdANqQ7VZ zg6)2>d+M=eaj>lNTh^H^&4ydi4u&qx?%Gd!+&E(=ulW+@j9<{=b%@Q`t9Iyha<_MW@%d`^ zy83b3-HBIDu5&|oU+H=GssFJ%U$UKg)t&TtZGq>a{0DxZ1N*_nlItQlJGP6{eGs)5 z7qnLPba_l~ujWBE18j32{oP|n)pjxDItCM^J9!5#jr$#R(i*GVaGhF z0K(i5ii`<Baqb+o)^sO7So^%GGEHlBM<=LMny; zHx`{XGDV`oQY-6Mm`IhKsZ{S2452sB9lV2$dTnsxbAMYb8DHWjh=DL?+>bWdx897? zH0*YD!j6-x)vQ+7h6yl{dtr0g4j;}5+gMPg?_Fz2cr+8LE}8N~ip=RzvmX$O6?{5L zk_PeUK)seGR3bcWL_nl8@SBXr|0=U?EgMMUzw#M3-@|B;9 zD6@7X4$LLw3?)fA%22pRYcKe1iwji)gMw#w`UjU8tx>6XHa}#tU96ZV#bggtV@XWZ zV(N?LR0=-pOQIHEGHXX__8U~Bl1U`7J$7Fr!^!{@p&DFnIcqVg+EuEykYDhHUbJDB zjfmxEh8g)Xk;q<5cU=zXAm|$tsY6oNNdMsD2!}}e*NOi1gHHT|FJ&vBwrpUSNb1N? zVtJ#efy*??0X#}uUjeNhBk|AMP zYF4R8Ndc9gMI(~zC~JYq+jI_pmtOq97h4-R15$UBSm8~*m&?tLi7n?~6B!_$r3S!? z&chH;Et&pFZ%q0p=b)95SD7XgW8`V(`m#t%BhsEh3Q&BN(Z;M99jD%Z#}{d2!7@Ha z%z0a%R>;c#<1L#L(b_+1YAAP-;h7Cc^lX^lGpZ|ri~dOmMEVD{xptAy#AEQ#9Ae9t zyY4jqo|4e*^Q`3@_`Kj@{b*tOuC~6g5a{a*C~3LA?RY5&ChsShe8{-%LAMXn{`(JK znhh$-8gtr-6`>3#;rcdrv=u0YpN}`%TdSRQU=w>Ye?4&~&dg zxpmhbcV*o_b_3!R3U^U}fD|xp9{hdnaqsvtxK&)3{Ur2_TH!k@;H782@$rVg=4!4R z?gcxb2;T#ZHoLQVHvIjqLXB6<9kEI6BpKQRuy^mUt%l=2MS;i|n~}sJk|BHt9NXGH zH32avkN=HBJnY{0iY{*R=G4R$o2m-kYmGcUq$8T4Y~OvL+Vg=GFFKcGtn}2BjHq_& zF+01ZM_y7)0&&T;)!qp^E*5&LXXX^TE54inZ?tK(zTRj&?LOLi(!z5vMVybKe#AcS zqh&JUi2dvK-b{%(a8M1mU0mrrRQrCl+Ia`O*3@k_jWORh^(=YN!OidW-tX`Amd0Gz z1y3DxW5b6Rs@?00;bXW*=d83y2^x&<(uXLdSHN7?)!+V1GTeK~UJ(9g3YVxIujcKp z#ccE&Q|&G7ecrAu#ds)F%PII~Pp24mJy`8YvW|lQ8Iws1P`grJs2zER%bX9(K)TgW z8A=U1dyWVJ0rry)4HmASLx~hmIFuD+gy=2SIxMrrHW8MKXBJhQ6rqV?I=5%Ygi@1a z$b_1B=_3<9EutMTct9{*1B*b&Jdx|L>=y?e0U_cHH)ZH*B{y@|x?0~Lu@*X|wFN0~ z(aNub5cts><*u>ygDYGIHXoVp$}WUQ*_^1svs}+~J2c%@+U4*p*Y78vfOOa`ZI0_& z^y_fp$xWK;dZzGLG33cKyYoO~VgY9&|nOU0U`pS?tS#Qh{I0V2X zN}9^!xi;*IZJmFI{@V-L=RVShK$#ECrNMLXo}_8??+?y;mb6eMv{{9jOaT$XV0zYp zeTCG{dxT7dP;eZlV^ai1Zd6I3O%<#1MIQqgJGFcjv zUoJ#%gW`Y5eGbMy>OGuMwlAd3KE?Se?9C*(1tpGz#6z-Fl+BVWEUFR*yM6{7fz zl49DkJq89RbFbWgYOY(^ z{BS2xEN^vbB}v}y*!;%!=3kB!6Xoq=V=ebBh8;47Z$~H#M-OifFNOMuewiuH1`Tg| z;UXY}eg@T%YAb{4^y0Tn#n@;`?zHjpS#js2xaNmm5}o;$ox_?3T-1EUMy8KmTv6Hn zHbE*tqgXpdjtI&UiL7ADoNFD4MOi?Ov-sULo$}pTbvl)BDRq`B{!$&ZSdqsoTmvK1 zie2#=L07^GhRk)H?gmQq?Z!iRRs$#1bJ4Fu$F&hYtLF+27d5n>e8kVo(05gJFVdkT zuma$8k3thi30Q+AM=HS^D8j%>FQiWyL9z6aFkZAXYWTg-98GVp(cw-tOib}>O8PMQ zp%C?|v(c1fmW^I@l`nv>QH-!Qfx$4ss?a_IVF_!|K(tZrz8@{8OJceU%bnWOeN6Ni zzdMzSHNM;LN53m&BO*KrcUf-GkCsc)zKc1q!P5!?7bF-K>TDUHw`w>fJB{H51-Y@P zF1rH*wZQxlLGh&wtvUJXz7NDwQIvJ5ADe|ZQG~zxF+LZFzd>{cM-6ZUgN(uc{QXv* z9a!x?yyF6>l<9(DJG;qwtnBR;&x~+xpK`Ha5|93l!Xk9;OxMp6!=*pdnO&bwZuL&k zwqf6LtvvI*$Fbx-gZ5!7wXltgQa|g{ywueCjwm*BtNW$fKj}VdsBnFUH4$u}&nNwE zGY@;$m%*I|q}edQk25s7zO#Xtb2+=1cG%-dsiW}l<(r392ymqJr?*EB)S5`~5t>yNq zlFE?!*ynEOE@l#{Z4t2aPIN<~wkRh}hIcBb(O8s|49lI$X_OV^I{)Z*|F`L>Nq41l z<(>N1vlV(Jl~AqGtM&m;$4Yl@q0uYoQ+?L_cHb0J9QCNT<6A4FVB1}jf*U_g3N%yA zkCTG8?}ZdVuDnN5kaM@BpleG~;KN!`zy*-KHKTYFsq3e^;mE&?t zf*;Q+AJ=UtGTxthiu5jH?asDWFYa>2-9KuZH!l~q+Pt2%mG1YiX4^gMOGfYYgmlHT zoNZd#2FU)|E8V4}e5t9A%R!NT_J;MlFKkwSQUBmtkNVr%DQdglW^Pr($c#s=Kxr}3 z?(EPjXP0MB<9k^`5!%HihD)6yQXNiBJv>sNJRye$mU8@U~X(V!>FNhJA`s@-(W zUlGtYaX3YfOSutZFnchN8~!zN_=v`OJTPN`&8U%xC8McJGbZ*XtIGKqt#8ns>!Oof z7xq!)w1B*NZXZ=cSeTyTLiP&f25|G{3v^@1Sfg+cs>|sowi7!o$u&*bbB5Y}J82pK zT(BOPMacQkj9Jp$mDxqam{^1^i>)R|k?artG){nV&6R?7TYP*E+`aW%3baO$TyVd( z^bEW$3Nwt8QDn4P4n^Vy(mcOmYV65A5I{vFD3h7C@PFsyWOUf=_i>tte!R6AQ93is zXQamg{yy&?tP$Aor#+&b>rkCINqT`>W(^XJd?X;P0pLDd&tHDj92P4)XkxFoHa1M> zpN>;uOx+$#T^o=G8=Nd5DY4i`FFN9dYj2%^6OzD$;jP8i2J^03kO70%NTDJDlduiL zkOTb;H+mC-JF;is1vM{Qrht%nss-&)cbWR2hz@@y;eml`+z?ayAp~?Dr2Pn>OOU3H z2Q={uII9og*m1g-Di8|6xv?T?amzIapoZQJnZ)`f#GAZ-C9G@s>hZUC zdGoI3*}X?=wGde6vDyn8+=;)<9N|1nG+`E`f6K9xwN>t9>T~C^ zw+pem;GfLPqXkg14!kvecc%OD13$cXYuM4+OSjNzBmhb;`pd1w6;}{n9sYn_jjEjg zSyR^Fg;(?Fv)*=lwIt`2rh-Ka>`js7-yosYlQE_Yv5hq8QdFSH#+DCJfjM*X z;BKI2Vr0ggz7JH+m@1a?ty@>>%ogplz{Wqd{E1~v6XS(+fizfyQ?jt`x?9AzMnHA0 zXotEP*$-q4Z`zq9Hi>ptC@LPy|MR(~|C}ve7Gd*zgphx8SR%zA9F|7$j%-wSVImDA zRhzJ8Wz)w~5#~+5jFF>;Jy^hNPgk=~{afIo9skJRCgP#awB2P2&oZqvpLm;PghacqHNZVZ3@4F!)F?$kxpyDSX z$T~hM3DQns5|qzdQX$^tLd!iT`i(ga11Hy(HH2b z(LY#n>*POt@{a%bMT@r-#e=L-q?{rW-m+0}Us}EvnYqQ(zR?TQRE-ho*)~i{$W1}9 zu8bu6`~osi2i~+JvxfT43K4WOV-WuR6*STH6)w)d;#n$;;5}(uWIxgooVx^$qauK+ zT_THlrBU}%D|KUyx;bWD(iwHt9I)V1MIS=2pYcp?MZg8MBfT|-MTYjp1L3G*aZ-1+ zc_BWB219QbvgbGCP+Cyl0^#~iom@miMGbw1xUlmozH7E(P7}4akZNGz^&0d~8q3K< z4mdzvW_9Vs-?R&VvQAm8HHuZGrYbn?k=X$K`+_fWrBC|~Ms|qSD3hz%z*sBf;<{*j zObEQ%v1!7}g3I{6m?4@C@QxjjJO=XzO(kOQz<4Ru2J^I8ZM#C62gXq~(RD_tGD__j zj2iU9rZd*KKm{e?~3RtEoU#Di2 zifPoTbq04?g!%s_WmKu)Ka!Ir7~}7eGr|X0v~Ljg`L*qle9hDk1B#Lbo=ZuhMmcg0 zoWZ&gH|^-727}b^+u^s=fWh}n7;L$K*J(MBQwOU}E4G|qh9gD+M`&JKXnlF9$UH_K zswUkQ2%?q~T6{ST-L}LlCH9*5FkzvlFQn1d8w)eeX?CHmDt|a7$sC z6rjQ3B|gcIYy!A0lOF|6`I;jz5d?gF3D)Fm5-Rd(LUaf67AQ;b9$>;dH8fwf0(EG3 z3n(lqNVU{}+F^AUu^SNijxR)`N<1}si7&)5%RpsQ0%`e4{o^btGi}iS8Q$j>F^=49 z0B%nD+EU0n$|EEjl1!x}(*#@maNgq}l*K#-ne*tjYR>}9XIzfZq`b9OXwb`4y_!!` z^kON$xU1F0x|r}lQ=+T)U>4xW7s6>Dnr`aaAa^J)^IOA80K~_59k?K96e!HDs-vJ9 zwzxsb73hFL8P*PJ{y>P~0*~q0)7o3fz6;B6fzZS(5f(Q6zF2@B|3a93AGytWXxhlz zQVv|0t$Dtv9r}*h?Ol~{fl_x;=B8)<+b4Z#!v;8Ls9mmRq6npVI*tSkzR#qa%%|{q z_Gv|Wfj_S8L&|^U9l>ysHLW*x+6Nc)jM1ZTQNV8CZ3P8QmquC#92ary&0s z@>GHC;%{0sX)G;(krPF!;(2uEefH?PO%H{NzwoVL3DZPM#7$67hj52BTxDL~NZ`EJRxTx&NXJZa9Bv?8R6fVWA)N5?A~5Pv$$ zwWk~0P+lyAnlioyQK#`+kceo1BvKcxibUNxlaC^?k#1qQ-HSHkQsW;zwWsvV!_qM} z)B9S=5B4T^W$me3o2?aBZ`~Yx&EB+pXwmzP-Un>wnhIUDS8qk-&b`#gsg+j^yL$Cj z$dK#r+!|W<#i^#(7F|Oo*|fEtk!N=9b^ciR)bPIn#f_y+V=?i0q&3;Imf9@9KcrnX*cfUQ!VBC=1V!k!=F7q!EF5aZ zW1+tEYi-i}$A@WPAKlJWgR=!Bm_(lSEUaSDas(xc0F9u-kv(i|8P-z%B;6jd&7I|E zZt;(NB5FN>Jx|8KIvM-sCQr)O@Ei=O1)<(&jj=nSnaNW_Ua_t7+&~Dur_=5a)_FpD zL(%{1sb@0{x3*3MOa{^O^&V+PF11YVl$#=mo7>e0yLPLkYLluW_hV0PxwS9^E=2s+ zNE8&!w}w_Cf()HzKr!r|iO?A6DuQ4UIMqi*&{lp(_jlvD3e&ttP9x!4;BX(x2dMzR zyQX{<|G<>IJgs)bO~fIWxk8az2*d)S|Nd@>U|4HKUb1nK$4e024uSuCBu(ercf?J?$TkGelUu*&_-f*uS>QZb4g~FQ5DFF&x;;rwU~pxI1l`gzTxOFY_4FS|U*3j*buDF>S>{?_hks~!nSTT1 z*{E936uo%LH6Pf+s(h-O%{3-LfzM$>KHp^_Me~vX18hSHg}N&mwl=6isV|XZ6I=~mTpI;+zI3y-!i0?+%t%vEV06?pRrF^X1;u_qTPo7W zC?f3@G?pSFno_19Iw8pm2W*|CK3P!U z8V}nEO;|QHV9HfL(Eu&mO*Am9C)J&Br@EZVT26!<8xc`nL7rlo#Q!m@MwlkO2OMS5 z+M+OKFf@`}w3J#2C+EYdCMjkr+&cwp#BS(xvGh*ChnYqbt9_GGxR4Fp681>RRH6Me z%Dl;61K!dPz2P+R!oSKLvE8$(*U7z}Jw5AJLbLs*-MdPQS+si`za^&Ij3Ug1$@D@A zGCEK?dC#xQF8+Z&>1Q#X%-x{WnazvP-Es0Z@0mwFYo2i$IZWv19-V4^p}FfJQNgzv zV{8#6m4#O5V}pm|?ZMTjvzPYB7rpqc`?0fEcQ*}5)QG%6iftk=3#6E$(HxK};C)gn zl0_RlGiZ4S(#M*#JXk20KSRG8#^LM+%M0Q?70TO?bnyu1oG>`nd!^e(f|B^?H%eUN zqED0~WeB`ao|!ZhStBA(z?*Lp)VSv;I4$&}lsT?7k;m)}37d~1RY@e6#<2x>cD5Us z+I9tCR(~HoxWtw4T5VxN7{#=`I5~Y5vBBl8_R&e8`Bw0$XE#!6N{Wn^tY-oIRaypS z$s85duf|H-F->f$5A_F+2A$FEi3m+vJ_Nq91o6Q>%n+dVNrL?;EEN+F_ayX4G$?jY zzPqu5*Z0{dsCD!EdVVb;m#NoqmR5Lim^1>Dr8p;EbS_Sa(%EK#HSXSbOVw2imMr@-&VjP zWTJkcumJT9lm@Qjch{`gg1$N{HfJ*g&h`aI?XIpx|lMazw316~=ZbJ}+ZiS7e zJ*5^(=mseZ-1!%9HD5&C|(2_uZ79m#z0Rx;i zz+M=j3~zGeg~YyGg-3;X^n5IBlrVV zo|h_mi4MFoQ;9MYQ@Ib?N7HiYQ(ery(R0>mgG2g12kD!048*ygEtHu+;5>s0f^ zHt%@r1amL%=s=66lr@XLkTE7@X7Zx`iP&A~$B5eWU5F-wWsFI9DsEB##UfG!qzi1y z>BvYyIO-n%#@f7Rmk7=GJ|p-3!IjN3row-eTbYpb+Gk52NYqWJI=Vx^0>$!0V_#_u zXpDLM*=TI5)pNIQMh53FN)?^Z{REOcf0SN~o%wh%w%EhiYzu5i)Eo`_=+wRE@vGb5H)}uIQD+ZdI7)WW9&>Oi~u>AmEGVfdkPEsWbm9)-Z!8#n7eCuEz4cS zfX;j58yz#@C}^fKc(EJcZ>$xp;GFI!X1TuI0@*(F(sArQ(XUtNndeN|UUwPHs{Q9X z^0=|B&$bpnkF3rw&+v&eTk97@KM-kZkwCr0IZK?R%*>C}GD%rDjEiFBAbGG7#X-?6 z%WnM7+!u^EGu<0GP$)30fK}6_S%Myz(^rukinO$J+m$VN1ne1xq}huA@dbu`0`_iH zSO#;`KY8R6{ga{h9HcE90Q@t3?`CTMsDa^R8_`2Q&?zI7T6<=AU1=FZ(KS+KboK4H zF7Xj1ze(mI4$=;~rS`Vg8ZdTET z&H`D%h=)54e`|3>px-V?>PSAnZqNPNp?GxcollNZ-S#8xLH3)oYaV13r3|!|XNfdS zdD4D!!44Ri!gqc|xu3Pd@~!VlBgnqeUyrfY{K_eV)O%J~xDMmsLd~9m_+5A1EBpes zpVp4h(9)+;kP1N1X+oJNJIo5xQHYQ6B#Cg z=lSgVLDavyX5RJ0A(HUv8r4fsp~hcM2lHO|MsY)EJ_3cabD>e4y%`~Pp@<-M&E5p# z(Sgfp(4$@g^G=!FNq8@Utp))j-yvEL0VAmK4Dt8bTj(f@Zj>B68vMlCXqlw0$jAks z>E870^s7j5Qi_vMJpP1vHO|e84W=3IcSp8?FbM8VNF~<_N!0^En51IsC+w5#EmZ?e z)@Uj$6QB-EQ;CT7GH7ZC-x_*d;_icpLLxX886Ak|btdMtqlT~OudiqcJrrdTUPP;d zpJYtOl4B;a2lypAG_wc;qx1s=F6w7tbdo_DEz%Dd=2JSE(MUC*1F&|Sr;KyDV`M+f z4qwm-K)E=~Kqkh@rD*zIIr}{Ch4*7^R!B>@m#GmAK!>UqKV$#b)c?8%V<5l%nfpJ% zDZzp6?-yT?4)bIrT=?4M1Ej`M{1UwF{1rQft#GwGn>12Sv7<)4G54~1U&?fQ>X3dE z7gp2IKk4P;E2(K7JrA?b2g5G24YX^Kl*)NX4VMv%;b?_WCpcPhLNLR5O?xJHIOqr1 zd5zj##z;l(P&RTaT1v@f_*g~Bg;2-j_G&U4%vcb1JZ6qUn;NKU8F#2 zgUwsBQSiyf{|gAI*bRgn$1WbEQ(t2Gjdbl@s`MoP5*oPn0{-RDNcF`Fvm3Gq9CIp- zx|Z+1PEkg%V|PhHVe4{DK>5( z4yDP}FsN()QYD5PkZ(h&d3sCdrv-G4r?=E7c`XJz&)`F@qjlonsW8X?+YPU;AZic( zhA3=KCyng}UuaI3^1+M*3NU`?5Jdm5k8Vb{1)rMKVkX?gsgeg930 zGKS7ee2!Pfug3S^)Zy(oev8$jt_3>J(hAn4h)e9INW-7Q)yTy$0P|9%IoDz8O?NyZ z6@94R9={7sWF>okk|)<<_Jx9kn=-~6sX-Pbl`tEifx|+se~6Z?QkzZfWCw7)b;_em zFUk+2w>l6lMLubF-vjm9QBsrO(*jidFF141f%AKU z98oxekW4FW98s7J*CV)4HH9|XAo39lAm$IqMyl!Qz3u~9=AYyrG``tC3f=S!wGOF!_yD4j)y_jRZ~|Uw-;=Mp_m%NcM93v{N7hAWBPfhwx8~ASCk~2skzxuR5kP0bDg7LQpJ>PE z89dHCD$+N6_*OOSjq((&Ij(O%Nk>crIb*Gfd>yu|$k(AN-;7*3VXxJe*GH<%CQe+4GEJI%W;YuQgqDO zOqUvjLWFgLG;rRE*oQTja1dSl?zQCHh5oI*lt}Rq%nC>nab))JgDk0a#I-5NHy_ROtMhgSM>ZJn=<+3Vh?9c*uefm(+8 zNDU_chJW`MJOM>z2zYz*6f#Q}5N``;4D=Cx|M=E;M*N_q3zHY#4~fqMLvnjH5M@gO z%QEy9(Hy0gu0+%mag}NN> z7-4vBT&Ep|55aCjI@B;zhiZ6k$aAvsLi5}pEso5XNKtgz=#_T(Hhpa&%4HXriXPep z!9YVmqG5HWf0AjG+E1DTqS1&1(f`pj;qV-GqJc()wg3t%wG1-!xn(A$r@EK;LeHdj zi#Ih>i3OR=5{XXo!QB>|?zD;=QdVI{1|PGC97@_z#}^Q@bw6#o&teGu+UiI3ib|g% zZLt5)G*P(dUU-I;;;3Y^0le)%Zz&*jFETFaEw?;bIM#eYpX|Y3dw_Om>c%|MMn7VM z1_0a@GF?)8bbR`s4%$GU6rZ|n$O#EioU@F&FD4`B|t&t(5RB!MLo3uPIIwIn953AQxkgBQC`P3swM3$;hoPk7%dcSea`5 z5t!%{?9G_^g2BY}bTHOrKCKu~3+C3A5HKITp!2Wy;#4jTD7b7VDodx=16rgVvS6$) zw(4cMDk1bODn?)FOf?6f51PS)5KgAPm#C5`?P*F|^MfQp#4@n?Jj0pSVDzCAVMsDx zw1mt>m`Ww;o;$#`eA-06yHLLq?rwIvQrSU%WeJz=rpGijebuQ^0n&MArFtoL!a^X-v1YFZ}7?1AzNQw4O4VErHk>4LT%Y z^<8Ix`Dl`g>6Ce8I$hQde!A2`iDeb|0qOumAagI{ilRA4zV|sG!x~`+XqPXsn$Mvr zwloo>Vex(0N_LJ&dLoPU9Os}1j6Po9J~`;rs z^zNV!R)jHT;t>k`z)B$6qPw9B*B5g%6q#X5nOnk=TcC{~gu=9Ur)eL`&9%fYL{7Hc z3;{CBsBV~1_dcpS?5^r+^NvO-B`&Hxglcl7d5c~^EJRO^*P{)?!pa!eYbh4wb|B&u zNJs$vO3)x6fdzH{E6Qi|I)p9YMrqJsFerKpX`gxy0`4#I_Jq{OqNK^Xm^x*4J!i|0 z)Gov1A0gt#_pwz?B{_2t$&WUOop2WnX`dF{P6l=B3g;(wc~WBz=+XRlv<4yS$H<>s z=}~LQO?%fp4{q5f?=uQE6p>0yl>!=eD>sWXI!|=u7U_H6)QsW+q-FWJW7#tI@M;=o_ zX#=#DQA66+^|WO;I6}>d%{)lfDk^8oRKw}`=aApz?!$>D#%)cEJZgf9AZNke4_@#- zD)Yg`9>4jjb@Cf(c+CN7;7Ply!!~?8XT5E+J9+1yDYR=epR0N!4>6^-+#Jje3qqyc8g?^2nSHE$lICyJ6~DSf3flm-)3Z8>)*RMZKraH zZ%6cByB0$$R z71eT%et+NMu*G7uXqzkYkl;XxcLeWOt~-Li1rE_KBfHNyoF~6UtkiCCy!=8~=pS?_ zZgIsCa01$cj>8q3=#-@l5nbbyhec$*GS1QFCFP)q&a$)>F_F~D12Tz1IlNmHiz5*6 zxsIS*<)rAIi*D#A+NX#Z;5F+S$i~-Cep2_%?ISwnD}(qM9}q()+K(0yHq;=0-R6>S z#R&P9{B_Ior)tN#vF}9FH;G8;*&$bvc0a>_qU8kD4JeV~8g_akOQ-CC;ra(7VIrMS z!P$hLN2WPtteEIfri$sJO{sW*j!67B5n_Wca9i>_Zaa?-v(FWiM7u;W+YvBZ{6n-) z6bl^zXB9+tOEgUcI2x*?@q{3J^9&<(nkvC)U1QMp_THAp@ZM9h9IiS#2UDqLef#@m5W zX+?-}gGOal7*`s9jQ(?9+`_UJ(y8LH$!U! zH%SzJ?eH9Av7mn&alk};B(yf))g&R9&WcZF7rZ{bA&fq`rVuHf50FJRA(~G2iH0*) zLiAu*b6>+-SZR^7FDk`|d(nMka`lqdsu4|= zuM>Iq{*MhiVE!^-Il#8hdU8{#!R#_^mrK}vOI6^QZu4xM)Wx=!S-04h7huf9c=V@g5~aqhIbDnMvsn^4E^~f^#JWPfE3kKcR0ljSxI(nxMH(-z&QY+j&sqq{t zx&W7yt2qaJY|d*o!YwjX!!@MFl*eh+RWyWtat!%jHp3!4XYz4MDue9m*@Y>{B4g!~ zw0x4laEw_srFt!N=f%9g+wh1?`3Vezx-x+LCE?_VG*Tw6L4zR%@r7^=s!rUR_(IQO z2?m{rNgA63k-#S=iF6J)@LSi{F|W=gScoC*NdlBERRo`j8uXJXE(Cif+l}ee@>>M> zRH=v{cqmnhv-QSIr}l?>-ev(*stAczI0=UQJjx{#XlF9M&?P{#WBHKLpNQ@ zkpO)-_Nswohh;{i?7Y_7L?7zQK>0RN%fHu?2u3*fuRj0+R$6T71H&lL0_o`na9yrO zWCz+|(y!9wX_u8!SE=99tfDXM12T|U{|1`SW#qF}Y+@$kqwmpGaLXcag=}CGL1D}L ziwsN`{UmxaUwPmKq z^mCW3ePB!_GNbD(cM22dC3R#Rlb-gYXTB!MmLy6Y#`_yyg61PBX%K3#Wq4l z{4=&9xUg$-w;E2;Xcj=6P&k_qlw%&EQ{cW4&4{PL`Hz7((;I5jM7PbxZZ+COH*$R% zN67Oif6ef=9!+0+nDB6`*>5V6L#=RH%!h4oW5X~)kyh_9#I#c@gDAJoph;mMHgt-S z{70>9(^>&hp;mH@RtE90cN)dhvM%YU+B)X)Cfw?J<79hD3!IUqT4rT-83+>bC;bA~+ z`bo;?gIc5A>x<6Xogw?kjeR_y1~iI~g3%AYzdv`ECwXSUcK03%)Lh4DN$!pYdfzJ> zvlge|eu#McUbwufxpam)&=Head6he6xM239^ZMc(5NW3fs4>$WO1=1Z5rVN9BoSuh zsT$W|NN}3utxIrVQ2^*aleUo#Lt`4k|1}YZBhNVk8!^$Wv4sePoPGINnJX@82;wy& zArgg6hDY4DTaq;s@BZ#d$ZV0-?w1iK|hLD$rP7 zFu1HV>LZ5xJfs2=Xvk!>j71aHqEiQ!^E`0U4!X^zh|Nc3(vA=|`-Y(NB^dUtY-1nZ{(g z8eW!RVTIGx2&7cHiNw_GDPJiQ6=fwHk)dJ@r+p76qasMI6!8xtZ=Gs&WnK>%ZWC@& z9Xi6&&V4duq8JgJD1OP$M%p7rEpGaDix?`}45yeIEhxMjkt4}@H7BitS}F){4W$s6 zxGf?<1X|&G9ym`7a47S{ToG)8x(VEb>8g7houY64Oghzqz)D{h;=zW1quL1H@NoqQ z`wXRoK`#~zsc7J{%g1$po$_fyJ27?=PLdip`4A=ZI6fEIh2S|p`%*0=t4)beh!he{ zx+90SK2&;xs1v?^bFU}0Z>HV-$&o8a`jhrO(zfQ#Id$u!iYu3qy(h+gW5<8|DwE$L zLAmYvt;Qo2_Qr>-_SNo}*88U6bmN>e%48+a)I`3IEKnT|Tf;y2(6vm%dAk~f-0Z|Y z!m3vP5#4*7al3B}_ED`IaFd=b9f%7YWVtRqiy@%|P9MrZva^{lOu|V%7VND49g9@t zhiEZfAKCfWU=$A!%}g_EXzgh}#yTs4k89itcY_Ywe1zmLXn0xRLRJXtLc!-RP5* zHhgG_O5GSwy9QuY?1zyC-H3XY*eF0 z!2sSiU;209^+>)eoG(ePBK1@{_VR4r=3Ys?inB>KV$*B4au6nb=|Ef-(`6Z)c*S9M z;-$$>ZM_Gk44^x6Q+K0S&B$~V7#d^`U)L%NL>ADB$ zc>UuiH$ewr=+2|y@^_6gtc6;KA}(hO4(lt8!sXkKUN3NJCY_3ET}7o3K}%JeSYd3u#tzMmi{Ci$=W#1C(@9e*V9qPeR1f+eGT8g z(^QJ1j2nqEH!exM`l%YZ#J1ACzMmw@(maNYfeC97m306|sy%())I<0A2?A_t$?#9h zgAAffXHIKwdo5`tOI-~H<>M@*z(y@h*XM;%ZUeYsClK)g&sJn+guJPoygUm9~1C)(V|oUmXngO!e2 ze(2#Ba{S;vo&DkTlcP4=>^cS69#d@xUT~*;Uc1&a#ENGjzKFNdJ@0d)~(+X zups=CJEVjxKg|lErx`J;A*!=QzyMi_5Iege_7unGGJKk$19uJ%U`;Y1Z%dDUf#t`~ zK-8{$YZ!Xk$;>pjTXw>PWh(8nABl$?3XV1BY6e2z<3^a=H>XO~v?w@dGQRMHmV2gs zB&8pnj5HT(Hp0-_eljez`?n;+RvdX^ZbN)N_B$=HDXgdnb44{e#CDC5vL>tcTbwrG zP|v6lIJ~IorswG|X@jeB&+lS8ck7oa*WOj{Ta5Ih!2ZA7id=w{q|xfNtBrqr18GVx zSu4J2ToUdpf8ZDZP5z*nocI&Oz})^o7JQ6E1~KT<63N?YaIImM-2UzalaCG}$E}kq zM39Y8C#gSxli;!w$ENwPp)HwrHDGgdGva*&;(ZWRMm2i*)gZn-oB2e)7k>Pt8VDxP zHV_lh^%+=~)J}kS!ZyEQ+}q|z8*>itv+TG<8crm~X@O*}NAMxqD}yDHJq=4MNALKk z6bi;&_G3tqw3$O`{1{T+2#r&<9uQW9{)SVKZ2B1HxkAcW+=Yd8=({t{^#w;+`-r-a%A zmj+iDct@XnzT-W}u-hUO*WUP4ZV`@Ksc0FLdo|~vHm69@NxgljReS*KgNW-4pT;xQ z3D#{zkUU;a+uw3hnuGsCh=Eq*dC|c{4+GYd^GI3MvKLLN;~Lu?iYs>;Yz82+$|#BHXB z#uoB=>UiUm`ri+4SZ98lfXK+Bsa@_yWX28ytKJwjln8e#Vvvwgf+e(Zp#~ zAkhXi-XjA!vFJ>-x0;SJ&nnqjjBPq0d(|w8Uuqk7%HB2CSvtC9L%{frel$`ln$n zjUX}Etac|@3+GcKZ31zz8YBW(|MwuV`_F;I%QHXK;1GaGkZ8=GpT3M;wzLdc>csx_ z!2OyD`@9h`d+pwrztlrB>gsch2J|dG5xWn-bI|H@QgW5I?iGUAdOYiF)yr|VABsaT zPB51exB;Eg^U{D$>1J*~C$<;-4Cw3x-A}8~*-KckqZ^0)-79qJK^2-d?PCO zn2CjX3na^ZtKP;40j?r>6`{O{K68My@tx@+LlHtUY?_04Ot#q&I;Qg$ZifGubx~u_ zW%Jes3fC1q>BrtSl6A#x+(4fq_*yW(>|A)|uOwzBl zLQZ0VU<_LM8p5Y2(*;F8`Lv8^#hb)(Kj-)2jzjRB7hN8K*fITC(_KQ!89@JHGeX=P zpt)ewl+?y?f+3RDlUbEb8v?jdW=KMW<;EW$x<3<-=qJ@*6ApU5(NY8K_RqIP$Dhh< zbzkR>+Thth2chaa0Ia{$5@3cX8CQ*{q+i-S&Y2_DyOV2T4!TozkJ;+JR%5%`bhCcm zsm3LaFV8fU4xWzW1V{d9zcs98#{0K6<;K|6yoT97AY!Nmej>pZ@Utey-sF9Dw!N_+ zx9FY5P4jJ6Z+-PZ=@~UTVfr#n=V>s~WE9I=5)qnzl`abSc0|Xlp@Wt^HC5x9jDtoy zI{;kcxrh-c6HC4X=4qq7M8I$#f&t4Pei_*a#%bD#(=8n0k8n2#jQdI7D6TdJ=ZQ9_ z)I;p1pCPFPi+~VqS2b8R$Zh!DtpL%2xSDCiQs5;OiA;B4-H-_5Ts{n9S>53WHG2z8 zUi%A?h`v2E7U1QudCu942#faC!ALhY$xJQ!Ad{l4?0IT2M|LeE`K34d{8<5 zrL#FUObu*cOeVH!JwV^bWWtJ^`gtLItTXxpR)&#FudV?kP2L3f90CTWf_WDz>vCd| zq1$iPv6QYa;eRck|7gpnRYg}dO(v09K6dD<54w`!zu2@WTfuKvi(1~?gSjOQ(H9vg zWYATGT^%cP3frrL5_Ov=v-baoYv^M=2F^aT>OcY1=jnqg5u-N{`Sdcu?}}f=zUPpy z>eUKpvyM-In(J{m<<@Rlj|DfgG&V^>&*2;DpVq*jp1_1m^1w6~Uf})UA+l6A$7Z~Q zP66PMZpO<2-H{{O)rj**Cv_7L9~-*bD2XsltZ$$G;#ccq=gZ254|1G9>bZ=K{y|$w z@BU&5Y3{ga`!C;n%#k@AR>>84I#v#OxM5A@(3SNo4Hwt`MN{Gd?JVF!FSl)r_na#F z9b=75s8lYdVd2;JXl%kT z=__&wMGyj@e>q$OG2HM4?mYP3`fMAA7%whTU#f3jU9>)<0TS zwF*HUl)4Vdz)oiPqi0t)JOe08Wd6Ma416b}utjDO&d?3M9nan8TqS}_{Vpar3CY@LSCicm6oa}@BGC~UQUROQ)?BwMwNKQjrzq0h zDt{E(q-_X&zyEY#7&76t#a(Vq<6j$A(v?T;_}4M7SMtb~VZ8D{4NL|@P;oKNL<9tg znR>?4V<#ps0#KhPsYHR}1pa8-Msf(xY3qK}sf;QvX47b}oqdXm<%oO3vwRb+div|$ zgrhU--}6n_;Fx%C!gtq}bH0<#4B@_$DDOB&BvIn6?!)rgTviS_N& zu6OI?tqzNRGtwFSB@eWO0+z!z`32tCgb%hF?9|h6+~hLzGi1W7+qx@B zB;S61Ff-dGmEv^fGr3c%ON!xWom7O=w`%|SspeaUAyGn77^mgu-rO3ow$aBr3=6mg zs6my4Pd8*lSygFu+X9uQ5+M%X+@WWuaC6Sf&^jd+V-ug(c}2LoE4S`MR62ZGf;Fc) z8-R8y5uC};yC+W0Y0h~IOD2(Ryt!)B=H{Lg8IBVIPkDVp|Le}5_=z1RZ7h z7Bfi&bI@Ay99(lu=!xVEs_~8<&H$Y026@VkZ-_O6#nF zOz8N=l)72vghmJroLx624e%^SkU*;Ll~ zANj2<=O_>@xNyMfn+q4dJvC~UaL+~ zeFSIKxv*W+09a}pq|v3v*ezBIu!1DG5}zWt(h|dP>TRQ~VL+TS!TZpRIY7RxmKdFBdXR7TC`M*2mtP(T!fCWbf< zQdCmQ4#V!&ek)P}#yL$Gohk2g(2Gsc{j#KSPHg3-Z*FX#gxW z2{bVQAH+}^EgWC25E8q(ZF}@gon)pzeC1){JJb6!fLM>-58GerL1^MfuYZk-4v?UI z^q+6Feh>mu4(wz!GmO_`KHCLbHUpHmtOKJsA{~1Ayb7NHGY&X6FaFlq!KQB<8y%km zW6b#McVJcd`N-{!HGpMnXgjU+x%x-fbX{5h_xI!O*v&n7_d{BJ_;C1lD;ulUbbYR& z;7L6EOckz;`-hP~1wh+v*j(G@E|;VsCe6sE#%=#Na&yCzrMK)kU$*V=JJGZ=#}78W z(K!3-=!m5Mk@>BSu{83hwc8KbWDY}ZA?4OXszr=_!0Hx<%%#SXIp{O0X!HUuwNO3R zbmks8+>6!DBq2)&k+Ir^!|-(nZ5p*$93kZzAC@d8?RbR1KRgElY9T)Xax#!Zy2@uj zWkcfaN6h1Yt#xUvD1}G>zLq~OT>))5MW6k}%v6~H7RPE&>jvH1t+qr}Y)KoU_JwDj z3#9df%P`THmLrnb>M0JGq-MEv6b_2du{>8d!FDaqC3VckYmLbui8K(%FkqS+xSNyD zUY(LZb`7|^z@_FRoqfG>iLX58zL7hy?qEyw9)tj^gR^y5A&%NLGHRli;b~8eK@GeM zz=n$xD&Q)}7M`Hn|00gigKQ0?{tbj8=tM2B%@Al3q0;7>633b}u$k>}mwwxesH;h0 zkI`X?+>%Icp&>sLB%f#7iXenQsfV}(8aA1eBe|_BU^4hJJ^mYXp0eS{+S4)gH zc6oHqf|~=ROo{u5J4e(6(5Ky(Ul- zzrBt{p|!eFVrT|*tx{8pX`woM2#@p`g1=s1|EDzOuGbl7hW*ptrZAYZsqyJwy!S+HPR~y^6Xg}# z>!FQboI4kK;GL%G>hJbwc-1S)<>x5K&`BrZNOXMe$PJBao(xN%5|fKKLTFnF7(kK< zI$9t@cjfq>MSpBZ?259;xJX#t9BU3fiIj|(e=6^sDu zMaH|i3b=ZotU%yM@BL6*Z#f9Fvcy-;ngF?S%*6hv;5qt>g$m(522{+tF%&&}XAMT) zlC*78>VBC9oX^!|%t&62kgqWlcR&$d0Ytz2Oyo;R4WY#28M_h0%y_OXA$akwVg_Uw ztY@4_aSYbcv8SW(3x5!y%b)K$QDXb)dcrq{ZEBbs{uovUTOHZnr;ctz0exx|8Co1L0tB{a{LECbjJOkkY7t1j;#IQ*FzuR%SWZa91g=|iWM?(k=%kXcEc(jE7H6q8XVyZfNL`eJV*I^&VC7osn5;WfNIC$T4U}L*xyEyq3((s|A_l#o51alqANVwY%!09)^TVR(pc-qLLdnc{+7-G*d@E;>x! zyG~*-x2$v$>h9q1y6rXU9&FaZZs@7C+wLEjD$_rvd^yJMEzsQqe*x`^^Sb0_LM(+3 zh*Bne318csf^B|)yotuGCk)d<4$D_$P&OBa3hd$9+6-SaBeenQr3GKNffY~&3yw50SQ)dvjMr~J z5)}}C%F@XHBXG*8Aejge(A5VO+=>b~@g$&muFHirM8Nd3me1JTrFC;^g17MWeYd;9 zb-FLZu}-{TtkHNhz!{F-ACf=&-L^J=>b@o4qnaK1jvZRUVM^7FgBc5OIm~ruDYU(K ztq|GokvuXlD8uP_Ep&W|_y@D9LvCw!$C(rcQWjxPfXDP>2mgX5LCbCf&FC+5cJojZzAFTzUe zCya0M8&X;6J+3Lc_mB$ZJGl+Tec#v;(o?rY*el3-g=OAY;YheKq7H5>)50?5>LU4+ z?$iJ>La?jvnj1e>`x}zBA@Ji=&*GgCVz~%0WI?1uqHqiH_8_N61&PD$4z;pgBJs*0 zU=kzDtkto^ORvv3#H$0ROs*kbOPxh!z2sX|tQ6P06!D^!YAp!q2hxkA-~*zkV>ODX zmBJ}RS$y@QJc2!kJ;-D4bM+$%Td~K2C(UfR`UXwxk0lHX_bPz%U$}2 zx$I&Y7H8Mxno#VmbZDt;y%vV5SHCKWl(6PF+i&pt*mkH@3}$ok%;%Ibxm<(2%xioi zCAg{+g+92N5hvO)cqg|?K#EwkZ0A}GLtwqHywCz!-WRLn$3o`#$lME>s0sdIXav2!S z0rms774e3t{!^Enu|Ai^%8drzmCgD=X^oTWN@(oj%b>9`Xuj>2+sB_mnRS)3V5q5e(gm&Tgh@i!^$PkmA^H zYHO_UO%r^T#(RzgVTJz0m@?koQ-KGP;p==Kh_uKB(Gag;{8wQ7AE_n10b(Py z(tJq*KHsG$>N0nt`uP$cTV@y_=$M0fE(3I_Hn4{g#Wj&kgIx?O!jre1D*~_)6a!)y zMn~6v;fnALU)+%+ugxJ@APDH5BTV%b4rXxR=gi->5WDRo;;+MXAneR6)0LzAV9U6% zo+STX;SDpvh9D+o$>N+LX9@zDot>*s^B1BLwo^WXtZC4g`#|G)WKnDUC;rt6kaqV% z%mqmjtrAd|jeQU2`i{{Ei5@qeC!!m6?;bg^ zZP@@n{0K>3;wq87aEU;a>sR4I#Mqi&I8M12O+=lt zndzsYbMHHRZr`~L)kofGdVCGaru@%WhnrLgS*~gfPDjCP`3!>lt*nqWMrGi;Nrvk4 zAC9mFs2)X7oH?50yH)EH>t-o2Y<#QMi<{@qQFHZacAwF=)BK*Tf>7IMZg^;0sp8M-~f;b zaIVw}YI)ZULZDt2Tnkb&p*-ADhJ;Fc)B6LP@_Fi+5A>T0ybyqayq7T$vBi=zI|J^g zt+RF`%~J+c%%dkj^E-255u%aPUjuv*@j~*}!{=c1K_GrVulpvW$v0)H*-BYiL}~`!e?MqCX!06p12z+ zW!50FV@t&#B-s88{#7$Gcg}!21Q5wq9q3nys&+$pJrUj!kEWyJ?^V3cWKqZywPoV& z*>$U_!PYwOwLn{XH0?F??;w1$wlMkB@reaf>Q;aL`rK&hfgNzPIJh0J^+&XJ;*Us< zb^LQw-|C`z{ew(0(fhVhTKI`Bj7K%w=xp~L%knEYODG+6ITC~2XF z^(3DXK@rRfQM}>=e1mmQBzv^X-L}q72E`VR#okOonnkp!-H1Hew&2P97Z3nMd*#`? zT&pjnN;P)eBrI);AP^{p;|B(lsh|Psps7=x4O`{7ZMaO0dH6fB%F7GTWE-~I#@_M4 zt5G@z&*ZQ{rUWdsxXZ>x1+!e9Bg5Ax0P;cszU~bqxq;-QaybGT0L$|{BeKa7uAmb^ zh$dX{dt~9@aWziTnHn<$0M;Qi%igEdB>Eb`LFn6YL+|*ESMdXJf}d3k$@keOLVqdQ z(D1>uumc}zwjUS@5lsuE^t1gcKQ{4T@EYBVa7xw<0_j*P=mVO=YoJVsUv7SOo9z-h zq^Mor%;slvpiJP;;32h_Q)9SDSAi-I>20L~lRN}BRUS43SK@_E67>Lh3U2{RDOjqy zsf5KIvdDe=@`E$#=N~CI+oNOeSoIvzwIQt=EKzB@K?5=nH90GNC$i9$GhibPutz5j z@@_2dp!O{4wx^=ugBcEp#LG4&!gH5cK(J_FLd9A+u&6w!xm-^pe1DvgR29%O-g|^8 zC=Ww*OeU(mJI&2h{YLZ@R4mt$FNc1;%qiS=&{NKU6*g&fhD20@G=IYL!;Xj`-MZB!K(@05 zh#jecMK%bK0XgvY?Af~;sFwUR74q?+zA!O*adtzRnYloIINN3ou^l!cF`fW3YEl#` z*>E=J>O1W{O9!(u>&&zFAei;3KN}ar(xE7}`F8mBA(*wH@AQpZ8}GP(xLM$ElHc)< zaJ%SOIdVh8fKKne(%7o=Wx1bTML-Fr$7}(te4f& zh}FdWJz)>+#wLc}WwW%AKfJfH(Loe(LhKHJI*%c9`v4K=#yr21%xzx;#h1f{{?$@| zr{}E$%Xs25Ak(c%hmXNNrsT{!2>*mFS>d^0roiy7B6|qt44l{V;678*z~+J_GaQvh zoLJpB?ob{hCPu0)yqNT2u2*@^3&vgkn2`Pv$7Ohq^BgKsC8Bf+>3DZ&K zNO|9%;L%7;3{4ux+5u%jh6<#1IhKE$lP(iCizz3Y}n!jExXeoj+6H#-wqh zNrc%2wh7kapkksHo{AkvYuci48f(eOsWV#p0>+T;utPFjupa0#b&61JUB?a~TK^@k zGDozN9D?>_lJ1n}Bn=sD(U~M!aMo}#94K{1sp4{gy9A_qMOA?&S!t~nLC}+*CRsPX z)DRI=2}-^`#;Hxu4@>IzPaC%~+NKx$9v0&C>;fdoHc4sXr0gWHb6g4*ez@Ter3L_c ze2nu~JAty)SUBT%G`9WGrvSCQzoeqR6fvb5^!;|Ma(26Q>?*gJuG^8pnFtrd<;_g; zPAQ>=w-{C0YA*OUA4{fB&5CZpI2U(CCxg^0r0QCQTsG=2#Fd%!*Dv9ZH~pr9U>;A^ z*X(!Lue@~w=#dT&q0#02CX4KI2B&l^g3PsQ;!cWIaTny~`W-zyp|UrLPxnP3VDgct zI_rucU}!={_Rou8RY?dMd7(_&k6LR;s6aBkRK(jEF>KuQ2g~Y}KX+M6S$eW|h8wQR z$}fhzpeq1P1f#=E8Un)#AEp!=3UQ8K#Ya3KQU;wxJ6nDaIt!M8ptGEux^Q8!%o0a* z5Dk)Vs}|@qUqtuERA1@P>@KmBFiYyIzoYD5_MQLvOgp^V_~Ery!H_+#7`TlX+68Km zlo&z?B0A%>&=p)Zq)LG|kRpPw6^y9yHi+NlZYzyXP8;oPCWJ&o%A~2#iWE*clb=yA z#a2B`KnO%?=t3lj5&u0VheqTNd!DP`R(a3t-o5q?aJ6@W z@atO%s!gBn&`ok10B`>gokpY>2_v|;<5YA>K<+tdGJJPkTXQ}{ zE*LD4`UThE;oK_+-rl^%j5}RU*Vm|Un5A9HRbf#8udGA(!U;J7nBVM3^Dg~qf>%i>*ec}tPgv^i(9=-C+?HA zPHE3^Vuef`=3Whlhv0f9^ut2t-QNI8CW=*Kg*4ds=4#D45x;fN2f;p-sKcMo0GvTLomxfeMR+|?e!l^id=sT zF})ev(X#v;#Erl*sHTdKkthSmoGv8@Vk(?B@EQS_KMQ)AMA`bV+nH4)dDoWul( z7;UZz&~E%uFhq<-;g|3ruoQH+-HFTGcBPZvPw8|>J|$Hn?-(7-J-%t+E&#sZH9~sx z(Lc!uJB?J+^-nJrQGS}bLGBJ2nRj>2`D1Uw8J|C6(}7(26T}lB&GDUb!;p55o4-nc zI!x{wRU}qTsY;5d5nx=bi4bg4klB6g=lzgjmM;CR4sM?Xvx<1%7r|JO_Bs@r zf;;27+wbo?6__72$g9%nHTd;Ucx@`OLSQ3F$#{*GnoYxT^mbD^HZCuSesq3$;a7+K zA(b`9N)V@_J-Y*aJo`#~RwvNYVS4lt#a{mrSt9>)|F5qRTjFnPg9ZYTT_LnTWSaoU z(scAm3$gF(e-C%3jJBu=4DZvU3PkIXhu??AVr%n0`7>(UZ^-UFShu+_FjRVP|2ZmJ zJ`5s_KkX?2(Ot{xATj~%B*?u6L6}Z=ss95UES{4;3i~J6#vPGORZ4r&Hy$3<0vqZMH2lica1zuF?#tP=qb80WeZr4jhn-}B zZ{LDzNnl()oUIo6Zh%t`^rA{*VJ|RyG6+Mlr+icUR!!he>86Z2eQ@ahf6P^yNXxaW zZOw`H54U?$6}Z;bq_eMI$sc3$lDT0ma`oro6sRyHnK8fL9Nq}w3~lU9|3i$^)Kvqh%%+)P3cG`R!@L2u6E44|UO^W9^6dV<|O!Ott|ZQVkg zIzy~8Tk5254&UBWXOwdZLwOvt$O2B9=_-2TiF?NMvfAk4Np^885gL3ji^WPQy}8UT zwPTmA(XWZ`{-Di;zyKmE*rPi`$J{>gY;QUL4Y$eA@Y)^yJZAQ*l=N@?tHd%~ibG?wZc zr%2D3#d5d^2|9zwU1z$jDg=gyX1$?7Co1;AC z5)EB?lv#5o2Xj!I!92{qEQs^YSu8O)PKl!|u`o`Fiw{4hCcKRwQkG6;t#E`C)+d<8 zdM^Lw^KW78AzXLg7L@gP6g!nW(|U1<^;DRmVENNKZ61I_E#F$z$+zcI}?t8%ZXzKZRj{746A4_fWWM+MhNhm z{U#r6`lWaZ{=?+M=O691XJIsjcrpi5(i9_fAS8Ud*lr{8%gtpLSP9;>Z2*BTsw*@xP96hmy6QZ~Dp8p!)|5zcPCyIG5ZrH`eE#QUR<>%NgTD@w ztUju9nl)Udhplmuq~q47>gp70nd(-|s*vSiAxt?7BEi2{iK=apbyXxW%NiR=yw94V zI?b_eh$P)$Jr_y(iS>%gEU=K@J7hf&NnUH6Q{m!33zc0QXctL&D{!OqRLm3SUznr5 zg4>tXB9gGix-pViYW*~lG{@Q(N&W?WGv5si)eqm^ZAcPaPHn^igCIXc?izT40di_= z?EO_TR%pG0Rxm|B?6|Au>xUg@svoPi7_gyJI`++}elW+jWf&dBO)8}rRS`y>I*KkT zrHG0TJA;F6xBia1-kRFnVuTHiYcv=b>|z>1?bPSmQm?FHB%H$_0VEebIw}w*gf0^% z1ttM_FIWs`)!-y`ok}iMKa5!QYBd!j<5X&?x>vO-Rh1Duaw3w@+e(il?6=OS>^T9g zNHH1_)QjKcYD9=zu&Hs){b2{Rs%#LwLw6C){*B7IF=e|e0ZI^tM&#fCI6$u72?cmr z4YJOaA#d!F^Z_&KT2Dm2h*#-?*}Dv<@0HWGKXE%stSf*~acv<~AjHi(F`)>)nPo-O zkwp`FkTIVR01iUd>qtSHPSp#&VN=uL8TRf$@dv9xKAfywgf>>B`^-rEVbrM#?dGwM#3qkpY32UgZSP~NxX zOx{{uDPXu@WrCvul3$EDK;(q79kbw6`Ud-qzT{=RPFGir>j%%*^e~|Q(=jCPvKWvP zFiZ||g7)wflk#iKo@MK4)JTt>#?}AhC_qa9P-5cvrr{c#oGu=L&){k;qW?8Vu6XX& z;$EY)J71(-v2!s7dVt)eTf-wpyL!|v3;sZ~s}$jv`z3WK{D5X>MYqBr!JtDia4eMw9bXTq0v;~G6!dVz=3k`>DH|`W+n)k+AR51?M-J51 zb$6sle39zMOyMog;NhuZMlzba$=9VY-U6K$Ju-{-lv5tf;7~35A>L|1-L@L_cWh#@ zM7$zZs#11{D;NbFJ;F;ofTBH=qJlCE?AQ-^Z7J`9gi!Z@yBe2~ei|#;&cm#DetrU> zT8H6?*Rpwcwa*3!YRMGak^&gxD6t;G>O}Cea6Btzj!eX1d^>y7!U{f%pXOsmJlr_1 z(_ZH1if72a!SQ^}`*3CB!Vp|EI^V-Qz`lIkex}DQ_Bt~M-?dz_b=MahdV5o2Rl7GY zmOJ!AE|-O2x9=_ z791`xuaNSF^oOFWdkNxWA6&|9L0fkJD|nvuS6=dYihuBXf{%#s`V&YSAcvt-Txd9I zogyJl1BSo=Z+aERM@y4lnM;%=nq|Spz5pM+%6`YfR7=A?bi?=}uE3HXLU+4&z~8_u{BZ#XwIym}WYtFUsBVvhS`fkTzeK-@n>!=}4r=Bs4s_G|I8irA`B@QbJ4#!#y zaL*tHOeLl%&4xLwsDc;3Omz(%o^Dr3De8N2nz9kIP7~;2CW}=fgs@ISs$E2_CG>F) zJff{EH7a5it8zL=PLckZ1&q2F|LR fbzlI)NU)ywrfr+9El07Lc+Wg(a%F43MV&{g2a0KdNj7%a7A>VF^+TuH&_ z^4$?wk_0EJz@6Ph9k{b6ZbceJsz7%`u8Ixby$+zvv?4_GTmN-FC)+|ycK~O9y$|=B3%gb3!XzYddQ{t3zR4GWFkSa^%T2b#s(muFd6Vo0T@A`cHpb}sal~DuhrZM2e z1&gQg?h+bM&FszPFH_(1^PHJ4wNY!?%&wIy+i9|6=9Bf~?bMewuy;xW{x3SEo%Km;^e1h@y4a2 zQfR@aN5p&ji)`#{i+xx;w!Gpz#Ym^yO51|!?A#rj04k>$FCh2?{wPHz4p%NF6|Mst{(*Ekjyw*5pl2wz_t-y{?c7+Ila z*z~HP$v(GDI5A9Gg_^AKR!;llNUKn_=yW)$Jy6C9Q`zRQpxOS}ZcgdYW<-a6{kETb zN`LVPe^!68QyRQEvNk$2`dyc_w&m)mvcB~eSFv9$wLoCcj_(l;DHSav9J@_9H zGIXAIlchxOJD1*!dy3?|a^`OqZ~K1Bhi!<^TWy literal 0 HcmV?d00001 diff --git a/bin/libmud/npck.fbin b/bin/libmud/npck.fbin new file mode 100644 index 00000000..428e4264 --- /dev/null +++ b/bin/libmud/npck.fbin @@ -0,0 +1,272 @@ +' + +> + +\ \ F + +PACKAGE + +RPACKAGE + +ENTRY + +RENTRY + +EXTERNAL + +USE + +USE-TOTAL + +USE-DATFILE + +DROP + +NULL-OBLIST + +ENDPACKAGE + +FILSTR + +FILPRS + +L-SEARCH-PATH + +L-SECOND-NAMES + +L-LOAD + +L-LOADER + +L-DOITEM + +L-LIBRARY-NAME + +L-DATFILE-NAME + +L-DATUM + +USE-DATUM + +L-NO-FILES + +L-NO-MAGIC + +L-ALWAYS-INQUIRE + +L-USE-DATFILE + +L-MUST-DATFILE + +L-HANDLER + +L-UNUSE + +USE-DEFER + +L-GASSIGNED? + +L-NO-DEFER + +L-NOISY + +L-TRANSLATIONS + +TRANSLATE + +UNTRANSLATE + +TRANSLATIONS + +IN-COLLECTION + + + + + +"Set up entries in LIB that we use. This eliminates the necessity +of previous obscene hacks, and may even make it possible to glue this +crock." + + )> + +ENTRY-FIND + +PACKAGE-FIND + +DEFER-FIND + +DEFINF + +DEF-RP? + +DEF-PNM + +DEF-FNM + +DEF-EL + +DEF-REL + +DEF-CRDATE + +DEF-ACCPTR + +DEF-ENTLEN + +CRDATE + + + + )> + + )> + + + + + +> + +> + + '("LIBMUD" [] "PS:LIBMUD" [ +"PS" "MDLLIB"])) ('("LIBMUD" [] "LIBMUD;LIBMUD" ["DSK" "MBPROG"] ["DSK" "MPROG" +">"]))>> + + '["FBIN" "GBIN" "NBIN" "MUD"]) ('[ +"FBIN" "GBIN" "NBIN" ">"])>> + +]> +(MUDDLE) FIX> + + + + + +> + + + + > + +> + + \ \ F #DECL ("TUPLE" ANY) +ENTRY-FIND DROP USE PACKAGE-FIND DEFER-FIND CRDATE BAD-PURECODE-NAME % LOAD-FAILED \ \ F "READ" % ":<" % OUTCHAN % (CHANNEL) NO-LOAD (ANY) OBLIST "" % NOT-LOADED % "/" "<>" L-LOADER % T +IN-COLLECTION NM2 (STRING) L-ALWAYS-DATFILE % +CANT-USE-DATFILE-ENTRY FIND/LOAD % USE-DEFER +DATFILE-MISSING CANT-FIND-PACKAGE LOAD-DATFILE % +PACKAGE-FIND "DSK" % IOBLIST % ENTRY +NOT-IN-PACKAGE-OR-COLLECTION!-ERRORS ALREADY-USED-ELSEWHERE!-ERRORS +L-USE-DATFILE % USE PACKAGE NOT-FOUND!-ERRORS +"PACKAGE DID NOT DEFINE FUNCTION" DROP NOT-PACKAGE-OR-COLLECTION!-ERRORS % UNMATCHED-ENDPACKAGE-OR-ENDCOLLECTION!-ERRORS "PACKAGE REMOVED" +% "DATUM REMOVED" #FALSE ("NOT PACKAGE OR DATUM") % % % #FALSE ( +"DATUM NOT FOUND") #FALSE ("NOT TRANSLATED") "No translations" "-->" % REDEFINE UNASSIGNED-VARIABLE!-ERRORS GVAL +UNBOUND-VARIABLE!-ERRORS VALUE CALLER % % %< +RGLOC IOB T> % " +To get " " dynamically load +0 none -- generate error +" " " " from " "# to load? " %]>> + .GLUE > + + +)] 101>> + + STRING)] 182>> + + [2 STRING] [2 ] [REST FIX]> +STRING>> ANY ]> "OPTIONAL" )] 737>> + +> + +> + +)] 1248>> + +)] 1278>> + +> + +)] 1510>> + +)] 1683>> + +> + + ANY)] 1963>> + + + +)] 2054>> + +> + +)] 2263>> + +> )] 2450>> + +)] 2608>> + +> + +> + +> + + +STRING )] 3088>> + +> STRING)] 3149>> + +> + + ANY "OPTIONAL" ANY)] 3360>> + +> + +> + +> OBLIST>> + +> + +"Load library hackers" + + + + + + + + + + diff --git a/bin/libmud/npck.nbin b/bin/libmud/npck.nbin new file mode 100644 index 0000000000000000000000000000000000000000..3342646ce99e4ca5a55d20626f2861809e08bc36 GIT binary patch literal 38578 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 p=HhJFC + +> + +PACKAGE + +RPACKAGE + +ENTRY + +RENTRY + +EXTERNAL + +USE + +USE-TOTAL + +DROP + +NULL-OBLIST + +ENDPACKAGE + +FILSTR + +FILPRS + +L-SEARCH-PATH + +L-SECOND-NAMES + +L-LOAD + +L-LOADER + +L-DOITEM + +L-LIBRARY-NAME + +L-DATUM + +USE-DATUM + +L-NO-FILES + +L-NO-MAGIC + +L-ALWAYS-INQUIRE + +L-HANDLER + +L-UNUSE + +USE-DEFER + +L-GASSIGNED? + +L-NO-DEFER + +L-NOISY + +L-TRANSLATIONS + +TRANSLATE + +UNTRANSLATE + +TRANSLATIONS + + + + + +"Set up entries in LIB that we use. This eliminates the necessity +of previous obscene hacks, and may even make it possible to glue this +crock." + + )> + +ENTRY-FIND + +PACKAGE-FIND + +DEFER-FIND + + + + )> + + )> + + + + + +> + +> + + '("LIBMUD" "LIBMUD" [] [ +"MDLLIB"])) ('("LIBMUD" "LIBMUD;LIBMUD" [] ["MBPROG"] ["MPROG" ">"]))>> + + '["FBIN" "GBIN" "NBIN" "MUD"]) ('[ +"FBIN" "GBIN" "NBIN" ">"])>> + +]>> + + + +> + + + + + + FILSTR #DECL ("VALUE" STRING +"TUPLE" ) USE DROP ENTRY-FIND PACKAGE-FIND "READ" % ":<" % OUTCHAN % (CHANNEL) +OBLIST "" % % "/" "<>" L-LOADER % T IN-COLLECTION % PACKAGE-FIND % "DSK" IOBLIST % USE-DEFER ENTRY +NOT-IN-PACKAGE-OR-COLLECTION!-ERRORS ALREADY-USED-ELSEWHERE!-ERRORS USE PACKAGE +NOT-FOUND!-ERRORS "PACKAGE DID NOT DEFINE FUNCTION" DROP +NOT-PACKAGE-OR-COLLECTION!-ERRORS % +UNMATCHED-ENDPACKAGE-OR-ENDCOLLECTION!-ERRORS "PACKAGE REMOVED" % +"DATUM REMOVED" #FALSE ("NOT PACKAGE OR DATUM") % %< +RGLOC L-NO-DEFER T> % #FALSE ("DATUM NOT FOUND") #FALSE ( +"NOT TRANSLATED") "No translations" "-->" % REDEFINE (ANY) + UNASSIGNED-VARIABLE!-ERRORS GVAL UNBOUND-VARIABLE!-ERRORS VALUE CALLER % % % % +" +To get " " dynamically load +0 none -- generate error +" " " " from " "# to load? " %]>> + .GLUE > + + + STRING)] 84>> + + STRING "OPTIONAL" )] 122>> + + ANY +]>)] 359>> + +> + +> + +)] 791>> + +)] 821>> + + OBLIST)] 855>> + +)] 965>> + +)] 1117>> + +> + + ANY)] 1393>> + + + +)] 1487>> + +> + +> + +> )] 1844>> + + STRING)] 1963>> + +)] 2005>> + +> + +> + +> + + STRING )] 2482>> + +> STRING)] 2543>> + +> + + "OPTIONAL" ANY)] 2685>> + + ANY "OPTIONAL" ANY)] 2764>> + +> + +> + +> OBLIST>> + +> + +]>> < +OR ATOM FALSE>]> ANY)] 3177>> + +"Load library hackers" + + + + + + + + + + diff --git a/bin/libmud/pcksbr.nbin b/bin/libmud/pcksbr.nbin new file mode 100644 index 0000000000000000000000000000000000000000..a9b5a8b0cd1f1aaf74c5b89d53ca2131cd2dd226 GIT binary patch literal 955 zcmYLHT}WGJ7=Df?OCmN~RH#nZ@>QkP<}A(8lbjPM))SLO!L9zbbFNG`?7}7^GR7vO z5XdN6m)Ty(Rw&f|K>sevz!iH}q1}2>inRN=*~J(PWsDi+oOn($mc8Fuq3^}V`@PTm zJnzrt^zA|{4Y7`;5G;g% zYI9t{fForHE>ht%2W9)INWl*zId|7vZa)M^&!`~L?F|JdINHn6{RU{v{95Qp+OjL?+bRk29I)Mrvt2J{O2x^SDc}+v5A*`UvT+N7|8^V_) z%BT(2LPuN7vw2F1r%>M-_iRoFDdyj{0nvO&qE3prx{QhOlP)0WPC<4UVPd>IKq|Go zICwRY*A=A5XTZ@eAds&X=i9otXD(7N<{!&=Pddgs<(^SNBLuyaY_8MQ{F(&VE4*X_ zA7M2EU#U7!wgafA@&A96G~8xx1-|ExB1O{h@YqZF>g-SJ0eIZ4hjypX&X-eZJmwXR$AmgPkMgaybubgCJB?x%+wanF*yS|J!FaOKh#(+t9^fF%#TWdp4ysPY?~~H#!=<8V_li8 znS>ewO+se<_02!Oq{*SKyHG<8&@Fvbspowg^c}gyM+c89cp-!)xQLVxt7@nIm9C=O zL9KT-wI9mIFJRQUcGvVZwxlQVjJxyDeWr2iD0@7|4(mfhy~#Hc@gpqRH)7pB8(gp# z-(8yN9~ownGY5|+*nxdxYT>K;JG!hYN>q_GH5_4bSZ&v|XvFX}tW3yiG^&M}98x>9 dP)9hVuy$EdqoIz1?^mV!L}w@ad#i_5@*fFnAeaCE literal 0 HcmV?d00001 diff --git a/bin/librm1/acchrs.nbin b/bin/librm1/acchrs.nbin new file mode 100644 index 0000000000000000000000000000000000000000..ff7d3c80ba52e60f6a27a1fb09eaeef7221dbd51 GIT binary patch literal 329 zcmeykXkKvluZb5N+kX^hUXK20JnitrA0{gouzz4+U=Y?P@L6d07tRZ}lfUua+@ASOPsYOWo9|4+%1yDB&W0RALw>i_@% literal 0 HcmV?d00001 diff --git a/bin/librm1/acheck.fbin b/bin/librm1/acheck.fbin new file mode 100644 index 00000000..17acb78b --- /dev/null +++ b/bin/librm1/acheck.fbin @@ -0,0 +1,150 @@ +' + + + + + + + + + + + +> + + + + + + + + + + + + + + + + + + CHECK-FILE #DECL ("VALUE" +ANY STRING "OPTIONAL" ANY) PRINTSPEC SDM-INIT ABSTR-LOAD CHECK-ABSTR1 SDM-END T +"READ" G (LIST) "Checking file " #FALSE () "DONE"]>> + .GLUE > + + .GLUE > + + CHECK-ABSTR #DECL ( +"VALUE" ANY VECTOR "OPTIONAL" ANY) SDM-INIT CHECK-ABSTR1 SDM-END T "DONE"]>> + .GLUE > + + .GLUE > + + CHECK-ABSTR1 #DECL ( +"VALUE" ANY VECTOR ANY) ABSTR? CHECK-PRINT EPRIN1 "OBJECT-NOT-ABSTRACT?"]>> + .GLUE > + + .GLUE > + +\ + + CHECK-PRINT #DECL ( +"VALUE" ANY > ANY) INDENT-TO EPRIN1 T " -- OKAY" +" -- OKAY w/o CATEGORY, DESCRIPTOR check" #FALSE () WARN " WARNINGS:" +COMPLAIN " ERRORS:"]>> + .GLUE > + + .GLUE > + + SDM-INIT #DECL ("VALUE" ANY +) SDMOPN CAT "MU.IRS;ACDATA CAT" DESC "MU.IRS;ACDATA DESC" "INIT"]>> + .GLUE > + + .GLUE > + + SDM-END #DECL ("VALUE" ANY) +SDMDCT CAT #FALSE () DESC]>> + .GLUE > + + .GLUE > + +\ + + ABSTR? #DECL ("VALUE" VECTOR ANY) ABSTR-ELE? MAP-FIELD COMPLAIN () (LIST) WARN #FALSE +() ABSTR-DECL ABSTR-FORM "Description must have at least two elements" +"one-line-description" "One-line-description not filled in?" ["PACKAGE" +"RPACKAGE" "COLLECTION" "FILE"] "Argument template in bad format?" " -- +" "Argument template empty near character: " "Example empty or not vector?" +"--args--" "'--args--'/still present in Example" +"Example of the use of this PACKAGE" "Comments on example" +"Example prompt still present?" KNOWN-OBJECT-TYPES "Unknown OBJECT-TYPE" CAT +"Unknown CATEGORY(s)" DESC NEW-DESC "Unknown DESCRIPTOR(s)" +"Abstract is old length, possibly needs Notes field." +"Abstract is wrong length." T]>> + .GLUE > + + .GLUE > + +\ + + ABSTR-ELE? #DECL ("VALUE" +ANY ) OBJ-DECL ALOSE T [] #FALSE () COMPLAIN]>> + .GLUE > + + .GLUE > + + ALOSE #DECL ("VALUE" LIST +FALSE STRING) "DECL problem in '" "' section"]>> + .GLUE > + + .GLUE > + + MAP-FIELD #DECL ("VALUE" +ANY PMCHAN ANY) SDMGET () T %]>> + .GLUE > + + .GLUE > + +\ + + OLD-NEW #DECL ("VALUE" ANY + "OPTIONAL" STRING) ABSTR-LOAD FIX-ABSTR ABSTR-DUMP +"DSK:_ABST_ >" " +Processing file " " into " ". +" G #FALSE () "DONE"]>> + .GLUE > + + .GLUE > + + FIX-ABSTR #DECL ("VALUE" + VECTOR) PPRINT +" + -- adding Notes field, Date and time fields" +", Ports field and Data-ports fields" "one-line-description" +", 'short description' string." " + -- adding Date and time fields." "*** NOT AN ABSTRACT ***" #FALSE ( +"NOT AN ABSTRACT")]>> + .GLUE > + + .GLUE > + + diff --git a/bin/librm1/aerror.nbin b/bin/librm1/aerror.nbin new file mode 100644 index 0000000000000000000000000000000000000000..d482fb343c827ce903554a867dc1bb49391c9150 GIT binary patch literal 5283 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 + + + + + + + ABSTR-RESTORE #DECL ( +"VALUE" STRING) KEYWORD-CHARS INIT-NODE INIT-TYPE MAKEBST +BSTSORT BUFPRINT GETSTR BUFMAKE RTIME DATE N-GET-RID-OF PPRINT-ABSTR BGSTSORT +RESTYPES ARGTYPES NO-DUPES UPPERCASE PARSEABLE MAKE-COPY NPUT DECL-COMMENT +SEARCH COMMAND-UPDATE ADD-OBJECT BUFTOS PPRINT POS AFIND OPEN-OBJECT CLOSE-ABSTR + NNTH PRINT-ABSTR READER #FALSE () Abstract AUTODEF NODE-GROUP AUTO-TABLE +"Abstract.default" OUTCHAN "YOUR RESTORE FILE IS OUT OF DATE BUT SHOULD WIN" +OBLIST INITIAL % () ADUMP (ACTIVATION) +"ABSTR" "to file (opt)" +" +File into which the abstracts will be dumped. Default is name of the first abstract +to be dumped ABSTR." "" "FILE" T "PRINT" OBJOPEN % "Close " %< +RGLOC UNAMEPOS T> "?" +" +If non-false, the abstract which is opened will be closed." "ANY" "DUMPED" %< +RGLOC OBJTYPE T> ABSTYPE % % % () ";XABSTR _TEMP_" % OPEN-ABSTR ,OBJVECT PUT AGROUP-TABLE +LASTEDIT % SCRATCH ADDSTRING GET SCRATCH-TABLE +SCRATCHES "READ" "SAVED" "NO Abstracts LOADED" COMMENT "LOADED" #FALSE ( +"File not found") ["FSUBR" "SUBR"] Template #FALSE ( +"Template field not for SUBR or FSUBR") #FALSE ("No abstract open") Example +"Example of use of this " "--args--" "Comments on example" Category "INTERNAL" +Descriptor Description.One.line "One line description of this " +"One-line description of object" Description.Detailed +"Detailed description of this " "Detailed description of object" +Template.description "PROMPT" Template.decl Argument NSRET NSCONT Unique.name +Name % % % % % +"MABSTR;ABSTR HELP" #FALSE ("No help for this node") INCHAN BUG +"You are already reporting a bug. +To exit type ^B then $O +" "to XABSTR, / Back to BUG, / Leave BUG,  (from BUG)" % +"MARC;BUG" % "FOO" "BAR" "INT" "MARC" % ANONF1!-TMP #DECL ("VALUE" BUFFER CHARACTER) ADDCHR % %]> % "BUG FROM " " ON " +" AT " "(BUFFER): " % CHRTABLE % % BUGACT Reference % ["Unique.name" Unique.name +"Name" Name "Author" Author "Object.type" Object.type "Category" Category +"Descriptor" Descriptor "Location" Location "Reference" Reference "Description" +Description "Description.One.line" Description.One.line "Description.Detailed" +Description.Detailed "Example" Example "Notes" Notes "External.interactions" +External.interactions "Side.effect" Side.effect "Variables" Variables +"Variables.Global" Variables.Global "Global.Setg" Global.Setg "Global.Used" +Global.Used "Variables.Local" Variables.Local "Local.Set" Local.Set "Local.Used" +Local.Used "Local.Special" Local.Special "Functions" Functions "Environment" +Environment "Environment.Required" Environment.Required "Environment.During" +Environment.During "Environment.After" Environment.After "Datums.used" +Datums.used] ["Contents" Contents "Ports" Ports "Internal.functions" +Internal.functions "Data.ports" Data.ports "Data.ports.global" Data.ports.global +"Data.ports.local" Data.ports.local "Internal.data" Internal.data +"Internal.data.global" Internal.data.global "Internal.data.local" +Internal.data.local "Packages.used" Packages.used] ["Argument" Argument +"Template" Template "Template.decl" Template.decl "Template.description" +Template.description "Argument.type" Argument.type "Result.type" Result.type +"Called.by" Called.by] "NTYPE1" % "NTYPE2" % +"NTYPE3" "FUNCTION" "RSUBR" "ASSEMBLY-CODE" "SUBR" "FSUBR" "MACRO" "PACKAGE" +"COLLECTION" + > .BUGACT>> % % % % % % % % +% AHACK!-PACKAGE IAHACK % SPECIAL-CHECKS +%]>> + .GLUE > + +)] 93>> + +> + +> + + )] 786>> + +> + + "OPTIONAL" )] 1108>> + + ATOM ANY)] 1287>> + +> + + ANY)] 1950>> + +> + +> + + )] 2043>> + +> CHANNEL)] 2148>> + +> CHANNEL)] 2217>> + +> + +> + +)] 2567>> + +]>> 9636) '(Reference ![10!] ]>> 9276) '(Location ![9!] ]>> 8753) '(Datums.used ![8 6!] 8617) '(Packages.used ![8 5!] 8547) '(( +Descriptor "APPEND" "AUTO") ![7!] +]>> 4179) ((Category "APPEND" "AUTO" "SYMBOL" (> ["SYM" "MULT" +"STRING"])) ![6!] ']>> 4004) (( +Object.type "SYMBOL" ( ["SYM"])) ![ +4!] ']>> 1007) '(Author ![3!] ]>> 767) '(Name ![2!] +549) '(Unique.name ![1!] 0) '(Result.type ![12 3!] ]> 10597) '(Argument.type ![12 2!] ]> 10429) '(Template.decl ![12 1 1!] DECL) '(Template ![12 1!] > 10049) '(Environment.After ![8 4 3!] ]> 8161) '(Environment.During ![8 4 2!] ]> 7920) '(Environment.Required ![8 4 1!] ]> +7612) '(Environment ![8 4!] ["Environment.Required" "Environment.During" +"Environment.After"] 7274) '(Functions ![8 3!] ]> +7031) '(Local.Special ![8 2 2 3!] ]> 6897) '( +Local.Used ![8 2 2 2!] ]> 6801) '(Local.Set ![8 2 +2 1!] ]> 6594) '(Variables.Local ![8 2 2!] [ +"Local.Set" "Local.Used" "Local.Special"] 6303) '(Global.Used ![8 2 1 2!] < +VECTOR [REST ]> 6188) '(Global.Setg ![8 2 1 1!] ]> 5965) '(Variables.Global ![8 2 1!] ["Global.Setg" +"Global.Used"] 5800) '(Variables ![8 2!] [["Variables.Global" "Global.Setg" +"Global.Used"] ["Variables.Local" "Local.Set" "Local.Used" "Local.Special"]] +5638) '(Side.effect ![8 1!] ]> 5269) '( +External.interactions ![8!] ["Side.effect" ["Variables" ["Variables.Global" +"Global.Setg" "Global.Used"] ["Variables.Local" "Local.Set" "Local.Used" +"Local.Special"]] "Functions" ["Environment" "Environment.Required" +"Environment.During" "Environment.After"] "Packages.used" "Datums.used" +"Called.by"] 4741) '(Internal.data.local ![5 4 2!] ]> 3887) '(Internal.data.global ![5 4 1!] ]> 3768 +) '(Internal.data ![5 4!] ["Internal.data.global" "Internal.data.local"] 3639) ' +(Data.ports.local ![5 3 2!] ]> 3568) '( +Data.ports.global ![5 3 1!] ]> 3493) '(Data.ports +![5 3!] ["Data.ports.global" "Data.ports.local"] 3146) '(Internal.functions ![5 +2!] ]> 2827) '(Ports ![5 1!] ]> 2051) '(Contents ![5!] ["Ports" "Internal.functions" [ +"Data.ports" "Data.ports.global" "Data.ports.local"] ["Internal.data" +"Internal.data.global" "Internal.data.local"]] 1584) '(Called.by ![8 7!] ]> 8683)]> + +> + + .GLUE > + + diff --git a/bin/librm1/alib.fbin b/bin/librm1/alib.fbin new file mode 100644 index 00000000..7dad5cd7 --- /dev/null +++ b/bin/librm1/alib.fbin @@ -0,0 +1,75 @@ +' + + + + + + + + + + + + + + +> + + ALIB-SMPOPN #DECL ("VALUE" < +OR FALSE > ) SMPOPN PCLOSE]>> + + LOAD-ENTRY #DECL ("VALUE" +ANY "OPTIONAL" ANY) ALIB-SMPOPN ALIB-NAME SDMDSRC +LOAD-ENTRY1 SMPDCT IRSF]>> + + LOAD-ENTRY1 #DECL ("VALUE" + ) ALIB-NAME +SDMGET %]>> + + ALIB-NAME #DECL ("VALUE" ) SMPGETNAM OBLIST () (< +LIST [REST OBLIST]>) #FALSE ()]>> + + LOAD-BUNCH #DECL ("VALUE" < +PRIMTYPE LIST> LIST) ALIB-SMPOPN LOAD-ENTRY1 SMPDCT IRSF T " "]>> + + LOAD-PACKAGE #DECL ( +"VALUE" "OPTIONAL" ANY) ALIB-SMPOPN +LOAD-ENTRY1 SMPDCT ALIB-NAME SDMDSRC IRSF T #FALSE () " "]>> + + DUMP-ENTRY #DECL ("VALUE" +ANY "OPTIONAL" STRING) LOAD-ENTRY ABSTR-DUMP GG (LIST) +"DUMPED"]>> + + DUMP-BUNCH #DECL ("VALUE" +ANY LIST "OPTIONAL" STRING) LOAD-BUNCH ABSTR-DUMP GG () "DUMPED" +]>> + + DUMP-PACKAGE #DECL ( +"VALUE" ANY "OPTIONAL" STRING) LOAD-PACKAGE ABSTR-DUMP GG ( +) "DUMPED"]>> + + DELETE-ENTRY #DECL ( +"VALUE" ANY ) LOAD-ENTRY "PRINT" "MABSTR;.DELE." T "DONE"]> +> + + DELETE-PACKAGE #DECL ( +"VALUE" ANY ) LOAD-PACKAGE "PRINT" "MABSTR;.DELE." T "DONE" +]>> + + + + ) () () () +MUDDLE "" ,AB ()] FAMILY>> + + + + SUBR-ABSTR #DECL ("VALUE" +VECTOR ATOM) ENTRY-ABSTR () AB FAM "MUDDLE"]>> + + LOAD-OR-MAKE #DECL ( +"VALUE" ]> "OPTIONAL" ANY) +ALIB-SMPOPN ALIB-NAME SDMDSRC LOAD-ENTRY1 SUBR-ABSTR SMPDCT IRSF T #FALSE ()]>> + + diff --git a/bin/librm1/allgs.fbin b/bin/librm1/allgs.fbin new file mode 100644 index 00000000..e2435dab --- /dev/null +++ b/bin/librm1/allgs.fbin @@ -0,0 +1,28 @@ +' + + + + + + PALLGS #DECL ("VALUE" "OPTIONAL" ANY) % +OUTCHAN (CHANNEL) "PRINT" " #UNBOUND *000000000000*" "(Manifested)" +"There are " " slots. " " are occupied; " " have values; and " " have decls." +BAD-ARG-TO-GETDECL]>> + .GLUE > + + .GLUE > + +> + + ANY) +] 312>> + + +ANY)] 329>> + + + \ No newline at end of file diff --git a/bin/librm1/aload.nbin b/bin/librm1/aload.nbin new file mode 100644 index 0000000000000000000000000000000000000000..13ecc07ca0e353a646ba149d7458955ad4fa29ee GIT binary patch literal 21483 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 + + + + + + + + + + FILE-ABSTRACT #DECL ( +"VALUE" ANY "OPTIONAL" ) +PRINCLINE PRINTSPEC COLPP NOW GROUP-LOAD LIST-ABSTRACT OUTFILE () AUT (>) #FALSE () G (LIST) +"Input from group " "." "READ" #FALSE ("INPUT FILE NOT FOUND") "Input from file" + GRPNAME "PRINT" " ABSTR" " ABSTR " OUTDIR "_TEMP_ ABSTR" "File output to" +"Output to group " REABSTRACT "Reabstracting: " AUTHOR "Author is " RECORD +"It is now " % "Recording to" OUTCHAN "Abstracter record for: " +"Output file: " #FALSE ("Can't open record file.") "Group-loading from" SNM ( +STRING) "Couldn't get group: " "Better luck next time." % +"Atom not group name: " "Done at last." %]>> + .GLUE > + + .GLUE > + + LIST-ABSTRACT #DECL ( +"VALUE" ANY LIST ANY) BUILD-FAMILY GROUP-DATA PRINCLINE +PACKAGE-ABSTR PRINT-ABSTR ENTRY-ABSTR UNPARSE-NIL % +NO-OUTPUT-FOR-ABSTRACTS!-ERRORS QUIET % "Writing abstracts." +REABSTRACT % % #FALSE () T AUT "==> Can't redo " +", not in group."]>> + .GLUE > + + .GLUE > + + PACKAGE-ABSTR #DECL ( +"VALUE" > STRING [REST +VECTOR]> [REST +VECTOR]> [REST VECTOR]> VECTOR VECTOR [REST VECTOR]> [REST VECTOR]> [REST VECTOR]> +VECTOR VECTOR VECTOR [REST VECTOR]> +STRING VECTOR VECTOR VECTOR> FAMILY >) PORT-INT UNPARSE-NIL + DECL-ATOMS #FALSE () "LIBRARY" "One line description of this " +"Detailed description of this " "Example of use of this "]>> + .GLUE > + + .GLUE > + + ENTRY-ABSTR #DECL ( +"VALUE" > STRING VECTOR +VECTOR VECTOR [REST VECTOR]> [REST VECTOR]> [REST VECTOR]> VECTOR VECTOR VECTOR VECTOR [REST VECTOR]> STRING VECTOR > VECTOR> ATOM ]> VECTOR FAMILY >) UNPARSE-NIL +ARGTYPES FATHER-LIST DECL-COMMENT RESTYPES ![RSUBR RSUBR-ENTRY!] "ASSEMBLY-CODE" + ![SUBR FSUBR FUNCTION MACRO RSUBR RSUBR-ENTRY!] "DATUM" #FALSE () "INTERNAL" +"One-line description of object" "Detailed description of object" +"Example of use of this DATUM" "--args--" "Comments on example"]>> + .GLUE > + + .GLUE > + + FATHER-LIST #DECL ( +"VALUE" VECTOR ]>) ()]>> + .GLUE > + + .GLUE > + + DECL-COMMENT #DECL ( +"VALUE" STRING ) % "VALUE" "" "OPTIONAL" +"(Optional arguments) +" TUPLE "Tuple of arguments -- +" "Argument " " -- +" "Returns -- +"]>> + .GLUE > + + .GLUE > + + UNPARSE-NIL #DECL ( +"VALUE" STRING ANY) OBLIST () (LIST)]>> + .GLUE > + + .GLUE > + + > >>> ("PRIMTYPE-WORD" "PRIMTYPE-LIST" "PRIMTYPE-VECTOR" "PRIMTYPE-UVECTOR" +"PRIMTYPE-STRING")> + + MAKE-PRIMTYPE #DECL ( +"VALUE" ATOM ATOM) "PRIMTYPE-"]>> + .GLUE > + + .GLUE > + + PORT-INT #DECL ("VALUE" < +LIST > ) ()]>> + .GLUE > + + .GLUE > + + DECL-ATOMS #DECL ("VALUE" +DECL "OPTIONAL" ) HAS-DECL? #FALSE () () +MANIFEST NO-DECL]>> + .GLUE > + + .GLUE > + + ARGTYPES #DECL ("VALUE" +VECTOR ) DECLRA DCL () () "VALUE"]>> + .GLUE > + + .GLUE > + + RESTYPES #DECL ("VALUE" ) DECLRA DCL () () "VALUE"]>> + .GLUE > + + .GLUE > + + DECLRA #DECL ("VALUE" ) MAKE-PRIMTYPE ADDECL PRIMTYPE #FALSE () OR () QUOTE +]>> + .GLUE > + + .GLUE > + + ADDECL #DECL ("VALUE" ATOM) DCL]>> + .GLUE > + + .GLUE > + + diff --git a/bin/librm1/amnesa.fbin b/bin/librm1/amnesa.fbin new file mode 100644 index 00000000..e9a32619 --- /dev/null +++ b/bin/librm1/amnesa.fbin @@ -0,0 +1,53 @@ +' + + + + + + "MNEME") ("NMNEME")> "MLEARN"> + + FORGET #DECL ("VALUE" STRING < +OR ATOM LIST OWT>) SHRINK PARTIAL-PAGE-IN-CHK SHASH HASH-OWT-ATOM DALLOCP +MNEME-WRITE REM-HASHTBL MNEME-READ MNEME-NTH MNEME-TO-MUDDLE MNEME-TYPE? +FINDUSES MNEME-EXIST? F-FLAG ALREADY-FORGOTTEN () % + "Chan not in print mode." % "not in MNEME" % +NON-INVERT OUTCHAN "Can't remove because of non-invert" T NEW-USES MNEME-LIST +MNEME-INSTANCE "Forgotten" "Can't forget INSTANCES yet." % +MNEME-ATOM "Item not found in hash table" ![0!] +"Warning! Can't find back ptr in: " "PUTPROPing NON-INVERT thereon." +"Set by AMNESIA" EXT % % "SHOULDN'T GET HERE" +ILLEGAL-MNEME-ITEM % "ITEM NOT FOUND IN CACHE" LOST WON]>> + .GLUE > + + .GLUE > + +> + + OWT) +] 224>> + + )] 293>> + +> + +> + +> + +> + + diff --git a/bin/librm1/anotes.fbin b/bin/librm1/anotes.fbin new file mode 100644 index 00000000..0f731ba3 --- /dev/null +++ b/bin/librm1/anotes.fbin @@ -0,0 +1,38 @@ +' + + + + + + + + ABSTR-SHORT #DECL ("VALUE" +> ATOM "OPTIONAL" ANY) EPRIN1 GROUP-DATA +BUILD-FAMILY NOTES? (ANY) T OBLIST () "Group" OUTCHAN "DONE" + #FALSE ("NOT A GROUP") NM? "Called-by" "Calls" "SETG" "GVAL" "SET" "LVAL" +"SPECIAL" "USE" "USE-DATUM" ": " STRING "." ", "]>> + .GLUE > + + + ATOM LIST VECTOR)] 125>> + +)] 248>> + +> ATOM)] 326>> + + VECTOR)] 412>> + + ]>)] 544>> + + [REST ANY]>)] 609>> + + ]>)] 659>> + + diff --git a/bin/librm1/ap.fbin b/bin/librm1/ap.fbin new file mode 100644 index 00000000..e0a40590 --- /dev/null +++ b/bin/librm1/ap.fbin @@ -0,0 +1,22 @@ +' + + + + + + + + + + AP? #DECL ("VALUE" ANY) USE L-OBL ERRLOC (ACTIVATION) EH ERROR!-INTERRUPTS "ERROR" + % ANONF3!-TMP #DECL ("VALUE" ANY "TUPLE" TUPLE) + #FALSE ("ERROR IN AP?") ERRLOC]> % #FALSE ("CANNOT FIND ATOM VALUE" +) #FALSE ("UNUSABLE OBJECT DESCRIPTION") INTERRUPT]>> + .GLUE > + + +> + + diff --git a/bin/librm1/append.fbin b/bin/librm1/append.fbin new file mode 100644 index 00000000..a0904cc9 --- /dev/null +++ b/bin/librm1/append.fbin @@ -0,0 +1,26 @@ +' + + + + + + + + + + + + + + + + + + + + OPEN-APPEND #DECL ("VALUE" + "TUPLE" TUPLE) "READB" % "PRINTO" "PRINTB"]>> + .GLUE > + + + diff --git a/bin/librm1/append.nbin b/bin/librm1/append.nbin new file mode 100644 index 0000000000000000000000000000000000000000..9c4dd5a0f149c36eb8a294954616c3cc2c03192d GIT binary patch literal 1600 zcmaJ?drVtp6hGGjEfb_gP-c-_3UQEiJOm2(Kng7|2cs~V0-L|j5s08HjRJ!X zmrf^)d6#(!)h5r~mUVC-fhF1*-3?e1jo%gY?+Vg+3-|c>4%HaVHFtXE^ z-gKUw-(cZaRiE`Uo5DXm!+&Aeb;?<2%-%R*Ew@|w`PzlQa*5t)7S0yaBmB|*+dKKO zXr0wrP_Z!R++9X1S2Oj`jPmCrY=cgPahus0q_TH2zB4v0;Io5)4)9fLasXJ%hd{*y znn1_(P6D;g15hlOU9K3F34GYj&w<(sQlBUXB!Ys703!TZi@AehEtAmgL9rz*0BTJ= zNLb4Skg}F>mmmtzN%y?MS~`GIYmh#f2H3*d0H!=hL%#&D6-DoPUtaWtWT+Ih&Vb}K;)g|dVU?KQT~R=WwB}Xz zHl`L|joqOmQFyE#7Ft)f(u~DaW)rLHzW9|O6xb5A#svCOJnyYeL#ftC5n<8b2$cLJ z{I-+`J?!xgki@5>OPnsmU34@9c=lg$-O)0nm0_f(-lV4wGBEC1cXuPr1X(mKeLhhg zCM{keq!d(QpBXupC7w-+G(oZ_dy?deDE_Aeu?`fFC9MV$?JkMd%-)&=3mH!)?S+FX zkzo@{WHbOHkpuN)t_iZ)@ z^a9zYao3tC+^d4o`f%%v_W+O{yNCV5pEqN{84*MQh2sVa`v;H?UJmdh+bJX4=>`6N zjZf{ZB_@1AaH$W-^YNa)J2QlLL8oOJ#0#d_Z5H0C9M-N`Z_}NE+_jP=+OwgS|t1v&O8gvFneszLRP|y}ZBhRv~Z!)OxVpnG98Q+%+ z`vmI^TPI&sMW0%mRTz-qbiSUEjp5mE!&RS+oI}$2A>pw%)p$~Sl9814dzVsL0>H-8(_2OtV_vhOl^HO1s-*);jy{- zjt8!T5-1ZgH&35C1YY%U52$jadL*(a-PP2B&fYDM>5jJi-tUX`2&H6batCyQ-a$n| zfrDCxH$<1rz+7cyeGSf1RM%#G4l7slY5X65f$*&o?y7%L2Im-ZD%JmLRHgQ+_<7yedtI0KtUnyO~*-KJt zxxDY`DsFjCTobqL+Q${lLz^#FaQ2WXEteY_SI5;2eAK}BU)R)fM+`|dT<_HcEtl6H Yzn@z=IDP*wK{v$5-J0pcg#3g51l)&=-v9sr literal 0 HcmV?d00001 diff --git a/bin/librm1/apprin.fbin b/bin/librm1/apprin.fbin new file mode 100644 index 00000000..90ed2d83 --- /dev/null +++ b/bin/librm1/apprin.fbin @@ -0,0 +1,56 @@ +' + + + + + + + PPRINT-ABSTR #DECL ( +"VALUE" ANY "OPTIONAL" CHANNEL) PPRINT-ABSTR1 OUTCHAN (CHANNEL) +OBLIST AB-OB () #FALSE ("NAKED ATOM") NULL]>> + + PPRINT-ABSTR1 #DECL ( +"VALUE" ANY VECTOR "OPTIONAL" FIX ]> ]>) EMPTIES PHEADER PLABEL LEFT-MARGIN (FIX) +ABSTR-PPRINT ABSTR-FORM #FALSE ()]>> + + PHEADER #DECL ("VALUE" ANY +STRING) PLABEL " + +"]>> + + PLABEL #DECL ("VALUE" ANY +STRING "OPTIONAL" STRING) INDENT-TO " " LEFT-MARGIN BACKSPACES UNDERLINES ":"]>> + + EMPTIES #DECL ("VALUE" ANY) T #FALSE ()]>> + + PSTRINGS #DECL ("VALUE" ANY +ANY "OPTIONAL" APPLICABLE) INDENT-TO PRINC OUTCHAN T ", "]>> + + PATOMS #DECL ("VALUE" ANY ANY +) PSTRINGS PRIN1]>> + + PDECLS #DECL ("VALUE" ANY ANY +) EPRIN1 #FALSE ()]>> + + PTEXT #DECL ("VALUE" ANY +VECTOR) INDENT-TO EPRIN1 OUTCHAN T]>> + + PDATE #DECL ("VALUE" ANY ) EPRIN1 "None."]>> + +]>> + +> + +> + + + + diff --git a/bin/librm1/aprint.fbin b/bin/librm1/aprint.fbin new file mode 100644 index 00000000..0e9c8b4b --- /dev/null +++ b/bin/librm1/aprint.fbin @@ -0,0 +1,48 @@ +' + + + + + + + + + PRINT-ABSTR #DECL ("VALUE" +ANY VECTOR "OPTIONAL" CHANNEL STRUCTURED) PRINCLINE SUBM-PRINT1 PPRINT OUTCHAN ( +CHANNEL) ABSTR-FORM OBLIST AB-OB () LEV (FIX) "[" #FALSE () +"]" CRET "; \"***** NOT AN ABSTRACT *****\"" NULL]>> + + SUBM-PRINT1 #DECL ( +"VALUE" ANY ANY ]>>) INDENT-TO EPRIN1 +LEV "; " " " OUTCHAN " [" #FALSE () "]"]>> + + PRINCLINE #DECL ("VALUE" +ANY "TUPLE" TUPLE) #FALSE ()]>> + + PRINCTHEM #DECL ("VALUE" +ANY "TUPLE" TUPLE) #FALSE ()]>> + + PRINTSPEC #DECL ("VALUE" +ANY STRING CHANNEL) PRINCTHEM " "]>> + +> + + COMMENT-JUNKER #DECL +("VALUE" ANY ANY) JUNK-STR INCHAN "\"" #SPLICE ()]>> + +> + +> ,COMMENT-JUNKER> + + ABSTR-LOAD #DECL ("VALUE" +ANY STRING "OPTIONAL" ATOM ANY) #FALSE () "READ" T "ABSTR" OBLIST AB-OB () READ-TABLE COMMENT-TABLE (VECTOR) ERROR-RETURN (ACTIVATION) +NOT-AN-ABSTR? ABSTR-LOAD CHANNEL]>> + + ABSTR-DUMP #DECL ("VALUE" +ANY STRING "OPTIONAL" APPLICABLE) PRINT-ABSTR NM2 "ABSTR" ( +STRING) OBLIST AB-OB () OUTCHAN "PRINT" (CHANNEL) #FALSE () +#FALSE ("NOT A GROUP") #FALSE ("GROUP DOESN'T EXIST")]>> + + diff --git a/bin/librm1/ardsio.nbin b/bin/librm1/ardsio.nbin new file mode 100644 index 0000000000000000000000000000000000000000..a5bab6b35f02eb3d2d1e81ad561cf03cecd92210 GIT binary patch literal 2059 zcmaJ?2}~4c6n@Jk*d@i2Dr$Zf?Sg^|t_KaSjO*?KuI{>r!H`-ON?oX6k(j12wirTz zQnHZ6T59Pc!6@QU0egft^@u5?h=|zOq)BaJD%#kvI5Rslw6*^m2m)IFWZryl-ka|o z^UwQz%^!aBo)qEysZ8)$RAthRxE?QSt_`2(YyLvtDAk{7Iw@S7-|rRIoKEmc7h@f* z>>PEUo9lQucwD*|VXG6_sfPAFmNuy}uG=d)=Jzy8^9qPZyxnrkBiK|wFoNfyy;^Yp zMxuN=eF|lcX*ww#$u%(Sx;xQb{_YT(OL2jb5k2>fSt3_}REj2M7y!=3uS)~qYFa>n zNP#F2Q2?S~M1hEA#4m9{Fqa)z>LB4R*hnA~U_{VB^{V+UFifcBvdU#^V8L^lDT{Iv zONa}$umKvV;wm~pPeNUwM`R<^z@VXQ!mwF32v<6xCO5+c#(yYsBT7S5hbSG92T=y1 zBeF9K-@pv+(&unslnDaG${-hPWuX&}va>5`(eKkH{9mSvr)H|dget}onwDR{I}pSw zHb5B3h@gB(%DGEvC$#_pES!JxgapxsaTR4HH{*BHXWUV09U0QV2O|PNU`!BzB9gcu zH8Pu8sd5xppFo*8UltP2ug+_6!K|rAOUF>qfi162=;Z{`Ti>Y8~c>8y9;9x<@(;e z)Rl##E5h@13rb{!em#g5`Z`=W2N8w&K3Y{|L`2tWm@&FH!sHci{(PfNs$V|Hu*IsY z4eZQWJIll)In9i8ATGU87+PXJ!Om*A!w9$3ms|ba)6|&s3uv{mVY{tv(ewNGpDnp- zRSX+iYwyBPA(-S^-E33T(tj0pD1nePT2`P1E3yFS;)}wVVMRZzLTA`)OwLIy+87GU zWK~OM{^c{1zABQ!*lc3reSOs?Vl+AQTCx&vB*o&elX!V}m>qUh2c~;VT!m=ktY8iKr7ievxrxvy!!ecJVXO6qpDhyGgF@fMxoBx%W$D>OoMb`2RSL#xAeK$m(>Fd?vonPb9eC2G?iO#Nh}`!l=S2mI+`tI L!v4EIR%^+B8^15M literal 0 HcmV?d00001 diff --git a/bin/librm1/asetup.nbin b/bin/librm1/asetup.nbin new file mode 100644 index 0000000000000000000000000000000000000000..88871a12b74acdee41d43b061945db89746ee475 GIT binary patch literal 18377 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 Kn2*PD`u_r!rprG7 literal 0 HcmV?d00001 diff --git a/bin/librm1/ast.nbin b/bin/librm1/ast.nbin new file mode 100644 index 0000000000000000000000000000000000000000..7b604065b963fb3d61afe9768261be2debb490de GIT binary patch literal 2427 zcmZuzeQZ-z6hF7!)^4+|70Q?dxO5Bcp!>+y%|$2K>sCf(TgzIe6LkYY3KAH^so_gZ zB~?e|Q*puQV32O28HSnc4>d+5Vhn=1ME%2PNK60?6uGZ^eUr^|UZ)My_s7jS_ndp~ z@0|0yr@eXNZGTwV_Uo5D!r1rypzs|qS#O?rdu2=+u+)c>NB+3r89Sf#>YSTC+c$%1 zo4+}n+}eqLGdjQSQOh@s?h<;B$vSrA^5}kHwOpoiE;qTVhF)3I+mnki%^Nx*gx2JoXUNUa_IXxEq$~^X5eyLQS0q8Wi^;zYGYn*qN`!F_WXhc`sN^<+ zO%mMk(I(Gkc?JT}Z`P~=8( z$siZ3nG3vW7Xc?hU#bf+Q`DO2*Of7;9fa%XG zE@q|D*b^&W26i9z4k-MSk7k$w5+Ar=C0&$FSZ0u9BFQ=x6a&O9;Y0n2^A6DRXdVA` z0NefuwGP6QlT&GLQ?4Tl9zesp3D8HP!QU`do*ltg?k*(^RUcQd(9@>uzBlfVouhx#@~4 z4ummwW*B}DfCh~bf@M$xs7zUukq$G`9v?lCf@x2Lu-tJLvz*pJLT@1SdDKhGzkrOy zs{-u>Y0pJFmZAXOtx>>06v)$RPyDlR_iQS}U8%+g%VvexT?E{e@Q=V8!tzVH8sP4t z7ohPOUD5`68c6w*G&TH0`2jF!PZF`rd04;*%+=(?|{NnSm9#koB50wQ$hge647vK90M; zqhxuVq^g_;)&L3m>zhmuR-%ylGR8NVgYT&34Wp9SYWuubg@B+b zueh%9y=r&y#Z&6bi+smPjV5nhDvTs3x~Y(K6Hw4FPp2CfFAm4GCM7GZ$XPxoQajndxaL4RA1(ry24m#~)hNtDif zS_hYscvue+L{UHKKK||Cpi}{ePr`iKQ>y2BXr88xO@GClfwnjm1BTE z-u&x_+n)k6z};q~#`O@ai|d9V21Ya7AIBHB8ZrT9X=fXxwPpUv%n-{1Jr1E%yk=Om zecMxje!1mxa_NfKEH${Y7Q^=tRRQ~0@Hwqnb%qmr-3O0i#-wb@Kx@) z14QxTyrQydNxB?#XjyZ`_I literal 0 HcmV?d00001 diff --git a/bin/librm1/asylum.fbin b/bin/librm1/asylum.fbin new file mode 100644 index 00000000..d0635adb --- /dev/null +++ b/bin/librm1/asylum.fbin @@ -0,0 +1,20 @@ +ñ¢“¼¡øsâEAôPiÙ™ú³Q>Añ¢†ŠEõÔ ‡ýü<òÓüú: c÷-Ü ›ü<ùáÇýyåéþœÐIÝþ}4ôëþ™PoÍô2ãÑýÛöoÏÿ+ ƒý›RÓüú:sAúYyååþÙr.EôE ÷” ×ø1â Eø4ìÌ«ù¨Ÿ ñCE<‹ùÕ)YAø4ìÌ«ù¨&Áù0a ‹û"Ήõ±¤Ì‹ô Ôƒõ±iRŸúTÐDƒúVΟùËcA©ø3Å¥úSéSAùô"Î[øjA[øÒfEAøÓ*Ó‘õ± Ôƒõ±¤Ì‹ôæO§ø«bA©ø+cI™ø¨)E§øµăúVÆ“ù‘PDƒúVÕù“áËAø3&O‡õµgLŸørÐA™ù“á­›ø4DƒúVÒ‹ø1ןúQDƒúV×¥ù5"­¯ùô¢ ‰ø5 ­ƒúµ$O¥õµçÒ‰ô Ôƒõ°âA©ø¨"A©ø+iDƒú‘PDƒúVÁ«ú’'ÒAøjA[ú´â ‰ø5 ­¡úµDƒúVÆ“ùÑDƒúVÏ¡ø³DƒúVÐ¥ù3ªWAøjA[úQ`įô Ôƒõ´¢Ó‹úU¢ ‰ø5 ­ƒúQ`ÄAøjA[ù4¢Á‰ô Ôƒõ°hR“ùÕDƒúVÉ¡úRgTAøjA[ø0áŧúh"A©ø+iE§øµDƒúVÒ‹ø1! ‰ø5 ­¡úRgT…ô Ôƒõ°¦O‡ùh"A©ø+aȃù3–Óƒù• Ç‹ô Ôƒõ°æO§ø¨"A©ø+bE™øµ" ‰ø5 ­¥ø³ Í‹ô Ôƒõ°¦O‡ùkcR‹ø¨'A›øjAAùÐfÅ[øS'×õ±©E‹ô Ôƒõ±lT‹ùÑЃøñi ‰ù'×ô)ÌŸørÐD«ùÓ'×ôjS«ùÓ'×ô Ôƒõ³'×õµ)I‹úh"A©ø+fO‡ùkiÌ‹ø´D“úKdΓúˆ&Ɖõ²gI©ôfLŸøkdΓúˆ#Å©õ³'ÃAúj-™ùðÐG‹ú‹fO‡õ¶Dƒú”¢Á‰ô Ô¯úRjEAø’iMƒú&Á¡õ´ Ç‹ôgMƒú hAø¨'A›ø«cIøˆ'A›ø«cIø‹bE™øµ" ø3b­ù3¢-ƒø‘P¥ù3ªMŸø‘PP¥ù3ªW›ùñ" ¥ø°bMŸø‘PR‹ø1'R›ùñ"¾Añ¢†Šyú´â­‰ø±¢ÒAôS`Ä›ø3‘ Eú‘gX“ùèŸ ñCE<§øµ# ¡õó6}ôE ÷”âÔô$Ò“øˆ>Añ¢†ŠyúqjGAúëÒ“ú‘VÆ™ø1ÐT}ôE ÷“é yøðiÓ“øó¢Äô§Æúqj>A÷‘"Æ“ùÑPNŸøÑ©Å©ô ++A¥õ(-A÷Š<­ø3*ÅAõÕ Ò}ô Ÿ c÷ÏŸ ñCE<§øµ# ‰ù4¤ÄAö ñ¢žS‹ú‘ÐP™ù*Aõ”ÌAö,4}÷ÈŠñO)Å©øè"A©ø+bØ©ø³¢-¡ø1âÓAöL ñCE<§øµ# ‰ø5 Ì™ùðÐ%yúTêÂ¥ô í¥yúçÄ‹ô Ó³ù•f¢AöDƒúfLŸøhÄ‹øs(EúÐfU‹ôHO¥ô¤ØAøÐfS‹÷È Ó³ù•f ù6 ƒú¤Î©ôfEøõ$ ƒúQ`ÄAúj-™ùðÐD“úKdΓúˆ#Å©õ³'ÃAù°bMƒùËhAø«cÉ­ø¨&Ɖõ²gI©ôèEõ±¤Ì‹ôâÔ[øÒfEAø4#Æ“ùÑA¥ø´âÒ­ø¨"Uù“áËAø’&O‡ùh¼¥øó'ÃAøjH‰úH*>Aô¯)G™ùðÐDƒúV×¥ù5"­¯ùô¢ ©÷ȼ¥øó'ÃAøjA[ø5jHŸúKkÏ¥øˆ*>Aõ ” Q÷*P%yúQæO‡ô Ôƒõ±lT‹ùÑЃøñi ©÷È1mõ(1qõ(&Õøñb-ƒù“'Ãú’gÎ[úaL‹ô+bÒ¥ùô© ©ôàΩõ³`Ð[ùÑk­‰ù4¢Ã©ùô¬¡[ø´©O¥úh1kõ((O©ø³ªIƒù‹bI§ø4êE¥ô+bÒ¥ùô© ¡ø1â­›ø4(IøëcA“ù‘b![ø´©O¥úh1eõ(&Á¡úgG[øÐdÌ‹øˆVÅ¥úSéSAô¯)G™ùðÐL¥ú°çÕúˆ*>Aô¯)G™ùðÐPúô¤Ô‹õ±¦Aô K÷”£ÌŸøh$A§ùk ©÷È8Sô§­¡ø1â­ùô–ȃúr$Îô+bÒ¥ùô© §ú”¤Îõµ'Ï[ùiG‹ô+bÒ¥ùô© K÷”£ÌŸøh Ì™ùðÖÔƒøS" ©÷ȼ¥øó'ÃAùµbD™ø¨*>AôT)Iú‘ EúQ`ÄEô§­›ùô¢­¡ø1âÓCõ±iRŸúTÐA¥ø´âÒ­ø¨¼¥øó'ÃAùiÈ¡ø1â ©÷ȼ©û4"­¯ôiÙ™ú³PV‹øu'Ò}ôãA™úqP(cõ(¼¥øó'ÃAø•k1Aú%yúQæO‡ô Ôƒõ³'×õµ)I‹úh*>Aô¯)G™ùðÐDƒúVÌŸørÖÓ™ø±h ©÷Èƃù”â QöJP#ø3)ÅAõ Y)AøPb-‰ù4¢Ã©ùô¬­¡ùògT‹úHVÅ¥úSéSAôq Ì§ø¨3Sô ^Rù“á ø3jÖAú%yúQæO‡ô Ô«úÈ*>Aô¯)G™ùðÐD«úÌT}ô ^Rù“á ›ùñ"Ö‡úˆ*>AúóéDAôq Ì§ø¨4SôãA™úqP(qõ(ƃù”â QöªP%yúQæO‡ô Ô‘ø”¦Eô K÷•,ЋõµÐMƒùÒ`ÃAúÑaÔŸúO%yúQæO‡ô Ôƒõ´¢Á‰õµçÒ‰ô GøÐfS‹ô +¹Sô ^T³úVÃAù°gIƒøh+E‡ú“é>AôT)Iú•Ñ K÷”£ÌŸøh'A›ù²iÃAú%yúQæO‡ôèA¥ø«dħô GøÐfS‹ô +)Aôq Ì§ø¨7Sô ^T³úV×Aút Ëô¢Ã©ùôŸ Eú¤Î©ôHƃù”â Qö, GøÐfS‹ô +±SôãA™úqP(cöjP#ø3)ÅAõ Z)Aô¯)G™ùðÐF¥ø±aLŸøré ©÷ȼ¥øó'ÃAùÐfȉúH*>Aô¯)G™ùðÐNƒù¶ªÖAú#ø3)ÅAõ [©AôT¢Á‰øH®¾}ôE ÷gDA÷iÓ“øó¢ÄôæU‹÷ÈG™ú±P<¡úµ,‰ø5 Ì™ùðÐPù•b CûmصqöMÜ8gô X [ö(±Aõ­9mô Ý}÷ÈŠñO)Å©øè*Λø4ЃøñP%yúTêÂ¥õ±gT¥û(Û‰ø5 Ì™ùðÐUù°h-¡ø1â Gø‘aÌAõ«A™ú±Q yùôFƒù”â OúF“û +n oö¬ß>Añ¢†ŠyúqjGAù°h-¡ø1â K÷”©Õ…úKbΩúVP'·øjA™ù“á ›ø4ЃøñP#‰ø°æ QôU Ì«ø¨<ŸúH#A™úqP'©÷È!ȃùÓ¢ÌAøÒl ù6ÝAöìÛ¾}ôE ÷”âÔô#×¥ù5" K÷”©Õ…úKbΩúVP'·øjA™ù“á ¡øõéI©ø¨Ä‹øs(EúÐfU‹ôHÔAøÒl)»ô Ø1}÷ÈŠñO)Å©øè&Á¡õ²g K÷”©Õ…úKbΩúVP'·øjA™ù“á ›ø4ÉôâE‡ùˆ"­ø3*ÅEô¤ØAø4ìÌ«ù¨#I±õ7P6aö/Ÿ ñCE<§øµ# ‰ù4¦Á¡ô ^R§ú°©-‹ùÕ)YAôöâA©ø3&O‡ô$Ò›ø4#‰ø°æ QôU Ì«ø¨<ŸúH#A™úqPF“ûA§û3*ÍAøÒl)»ô \4}÷ÈŠñO)Å©øè"A©úQ`ÄAô¯)S«øT–Åú”¬ Oûq Ôƒù“'ÃAøjR‹ø1#‰ø°æ QôU Ì«ø¨Aû( Ó³ù•f ù6<¡úRfÔ³úPWŸúQ yùôU­ø°êO¥ô(R“ùµ,ЋôçÒ‰÷Ï”ÝAö¬˜¾}ôE ÷”âÔô Ô¯úRjEAô¯)S«øT–Åú”¬ Oûq Ôƒù“'ÃAøjW¥ù5" Gø‘aÌAõ«A™ú±Q ƒùÖPA§û3*ÍAøÒl yú¤Í©û4" ¯ùô¢>A÷“é «úÑaÔŸúHP¥ù3jY¡ø¨+Ï¥øŸ)»ô X´}÷ÈŠñO)Å©øè"A©ø‘`Ì™ùðÐ%yúTêÂ¥õ±gT¥û(Û‰ø5 Ì™ùðÐDƒú‘"Á™ù“á Gø‘aÌAõ«A™ú±Q yùô'©ô Ì§ø¯A§û3*ÍAøÒl yú¤Í©û4" ¯ùô¢>Sû¨2e÷Ï ñ¢žS‹ú‘ÐSƒù•¢Eƒù“'ÃAô¯)S«øT–Åú”¬ Oûq Ôƒù“'ÃAúpfV‰ø°fLŸøhÄ‹øs(EúÐfU‹ôHO¥ô ê ø3)Å}ôiÙ™ú³PF“ûP¥ù3jY¡ø¨+Ï¥ø”ÝAöŒX>}ôE ÷”âÔô#Õù“áËAô¯)S«øT–Åú”¬ Oûq Ôƒù“'ÃAúêΙùðå Gø‘aÌAõ«A™ú±Q Oúˆ#I±ô¤ØAøÒl)»ô ›0}÷ÈŠñO)Å©øè#O¥øqP%yúTêÂ¥õ±gT¥û(Û‰ø5 Ì™ùðÐFŸúPâ Gø‘aÌAõ«A™ú±Q ‡ùgN‹ùˆ!ȃùÓ¢ÌSû¨5a÷Ï ñ¢žS‹ú‘ÐA™ù“á­«ú Ô‹ô ^R§ú°©-‹ùÕ)YAôöâA©ø3&O‡ôfLŸøkjЉø5" Gø‘aÌAõ«A™ú±Q ƒùÖPA§û3*ÍAøÒl)»ô ˜3}÷ÈŠñO*Ó‹ô¦Á‰ù°g"}ôE ÷”âÔô Ó‘úcÅAö ñ¢žS‹ú‘ÐHƒúr&O‡ô ß ñCE<§øµ# ‘ø4äLŸô ß ñCE<§øµ# ‘ø4äF¥ø±P4}ôE ÷”âÔô'«ørâÔA÷ŠÐ,‘ø4äF¥ø±P4a÷Ï ñ¢žS‹ú‘ÐH“øUaË‹úˆ+Aõ“'«ørâÔAöM[ c÷Ï ñ¢žS‹ú‘ÐHƒúr*ÖA÷‘©E‹ûQP<“úµ¢Ã©ùô4aô >}ôE ÷”âÔô Í‹õ±¤Î‰õ°bDAô¯)S«øT–Åú”¬ Oûq Ôƒù“'ÃAùÐfÅ[øÒgD[ø1" Gø‘aÌAõ«A™ú±Q yùôF“û#A™úq_ ƒúvfU›ôêR“ùÑÔÝA÷ Z>}ôE ÷”âÔô Í‹õ±¤Î‰ô ^R§ú°©-‹ùÕ)YAôöâA©ø3&O‡ô Í‹õ±¤Î‰ôâE‡ùˆ"­ø3*ÅEô'ÒAøÐfS‹ô¤Ø}ôiÙ™ú³PS©úRgGSû¨3s÷Ï ñ¢žS‹ú‘ÐNƒù±VÆ“ùÑÄ‹ù‘jEAô¯)S«øT–Åú”¬ Oûq Ôƒù“'ÃAùÐfÅ[øÒgD[ø‘fE©ø¨Ä‹øs(EúÐfU‹ôHO¥ô Ì§ø¨#I±÷È Ó³ù•f §ú”¤Îõ7P8göŸ ñCE<§øµ# ø3b­ù3¢-ù5¢ÎAô¯)S«øT–Åú”¬ Oûq Ôƒù“'ÃAùÐfÅ[øÒgD[øòkEôâE‡ùˆ"­ø3*ÅEô¤ØAøÒl ƒúvfU›ôêR“ùÑÔÝA÷ ™¾}ôE ÷”âÔô(G™ùðå a÷ÈŠñO)Å©øè"Iù5)QAö/ ñ¢žS‹ú‘ÐD“ùÒjDô Ÿ ñCE<§øµ# ƒù“'áú”3}ôE ÷”âÔôfLŸøs'×ô  ñCE<§øµ# ‘ù1äA‰úH¾Añ¢†ŠyúqjGAù°lA‰úH>Añ¢†ŠyúqjGAù1!ȃù32}ôE ÷”âÔô$Ç‘ù11}ôE ÷”âÔô©E‹øS'×úh¾Añ¢†ŠyúqjGAø’iP©úTÐ1a÷ÈŠñO)Å©øè(G™ùðåÓAöÍ ñCE<§øµ# ‰ù4¦Á±ô yõ¨Pù“á˧ô "I¥ú)SAö/1aöM>Añ¢†ŠyúqjGAùð¥S©ø4ª o÷ÈŠñO)Å©øè'•ù‘gG©ù>Añ¢†ŠyúqjGAø’iS“ûQP<_ô cö ™ Yùð¥S©ø4ª>Aõ“áJ™ø³£Ô‘÷Ï ñ¢žS‹ú‘ÐMƒûfL‰ù12a÷ÈŠñO)Å©øè#I¥úu Ì™ùðÐ1aöL_ ñCE<§øµ# ø3aL—ù‘g i÷ÈŠñO)Å©øè'A›ù) yù5kE‡ú“é YùÐf™ùs"ÎAôuçÒ‰ô +˜0aö 0aö 0U÷Ï ñ¢žP«úˆNƒù²"RAö(ןúQ*oöíÛ·oöíÛ·oöêŸ ñCE<§øµ# ø3fO‡ùh>Añ¢†ŠyúqjGAùÐfăúP1}ôE ÷”âÔô Í‡ù¡Ä¥ô Ÿ ñCE<§øµ# ø3fɧøh¾Añ¢†ŠyúqjGAøjH‰úS"ÎAö¯ ñ¢žS‹ú‘ÐDƒú’"RA÷’jÖ‹øu'ÒAõ‘ Ô‘ø”¦EôëÏ¥øˆ0aö 0aö 0aõOŸ ñCE<§øµ# ‰ø5*Ó‹ô  ñCE<§øµ# ‰ø5)Eô _ ñCE<§øµ# ‰ø5!Èøq) e÷ÈŠñO)Å©øè"A©øtª g÷ÈŠñO)Å©øè"A©ù‘g i÷ÈŠñO)Å©øè"S—ør ÎAö/ ñ¢žS‹ú‘ÐMø” Ç‹ô Ÿ ñCE<§øµ# ƒù“'áø1â g÷ÈŠñO)Å©øè$A§ù Ç‹ô  ñCE<§øµ# ‰ù4¨Aø³`ÐAö¯ ñ¢žS‹ú‘ÐA™ù“áÆ™øè>Añ¢†ŠyúqjGAúcÅ›ø47}ôE ÷”âÔô$Ò¡ø1â q÷ÈŠñO)Å©øè"S—ù±¢PƒøñP0}ôE ÷”âÔô)˃ù“'áø1â c÷ÈŠñO)Å©øè&R«øsêΩô  ñCE"›ùñ" ‰ø±¤Î“ú’gΧôHŠñO)Å©øè(R“ùÕ&ωø¨¾Añ¢†ŠyúqjGAú¤Î©úógÄ‹ô Ÿ ñCE<§øµ# ¥ø°bMŸø‘P3}ôE ÷”âÔô¢Á‰ùԦωø¨>Añ¢†Šyù°gIø´ê ‰ø5*Ó‹ô Ô‡úUDƒúäN‡ø”Dƒú”¢ÆAøjL‹ùÈ'A›ù“áËAùÐfăúPNƒù°äN‡ø”NƒùµgU§ø±MƒûfL‰ù1F“úTêA™ù“á ‰úráȃùÈ&ƉúcÅAø3&O‡úcÅAø’iPƒøñfÁ¡ô$Ò¡ø1â ‰úræÆ‰úcÅAø”åÁ™ù“áЃøñPD“úTäÚ‹ô$Ò›ø6O…ùTêA¥úˆ'•ù‘gG©ù(G™ùðåÓAùiÔ‰ù4H“øò Ä¥ô`؃ø”I‰ør Éô$Ç‘ù1A™ù“áÆ™øè(/™ô&HAø’iI‰ô$Ò¡ú”© ‰ù3¤Ô¥ú("Iù5"NAø”#ÌŸørÐA™ù“áÌŸørÐA™ù“áЩúH(R“ùÕ&ωø¨(R“ùÕ+ÍŸø‘PR‹ø1&ωø¨)Eƒø“©MŸø‘_ ñCE<øµêY¡ø¨ Ó³ù•f ­ø°êO¥ô Þ<¡úRfÔ³úPV‹øu'Ò}ôäAùÑf ù6F“ûO¥ôkE‡ú“é ù6 «úÑaÔŸúH#I±ôkE‡ú“é ­ø°êO¥÷Ï ñ¢žN‹úõ,Ћô`Γø0ÐV‹øu'ÒAôïP¥ù3jY¡ø¨+E‡ú“é>AøÒl ù6F“û#I±ô¤ØAøÒl yùôF“û)Ô¥ù3£¾AøÒl>}ôE ÷”)Iú•,Ћô`Γø0Ð<ú³¡Ô“ùó(±õ(P¥ù3¡ Eôs`Γø0Ð"}ô(R“ùÐÐ<‡ùó¢ Q÷^¿A÷Ð.±÷È>A÷ŒP.±÷ÊP(yöèX}õ/Ÿ yú¤Î‡ô"}÷Ï ñ¢žG‰ø°æ Qù³âE­øu yúÑaÔŸúH-Ò‹úuS©úRgGAøÒl]}ô +"A©ø+iEƒø‹kÏ¥øˆ"A©ø+kÒ“ú‘VןúQDƒúVÁ«ú’'Ò[úóéDSôçÒ‰ô +)ЃúQVɉújP<­ø°êO¥ôéE§úˆO¥ô`Γø0ÐFƒù”â¾»÷ÈD«úÌT yúµ¢Ã©ùô[côçÒ‰û¯(‰úµ™)A÷•kE‡ú“é ·öH+Ï¥ø—_ QùÐfÕ­ô ÍµúµDƒú•k)A÷•kE‡ú“é ·úQiÔAúóéD»÷ÈDƒúVΟùËcA©ø3Å¥úSéSSô*Ö‹øu'ÒAût¢Ó©ô¤Ø»÷ÈDƒúVÅ¥úSéSSô+E‡ú“é ·úQiÔAúu)Iø÷_>Añ¢†ŠyúqjGAù³âE­øu<­ø°êO¥ô¨R“ùÕ Yú¤Î©ù³âEAôT¢Á‰ôHR‹ø1&ωø¨P¥ù3ªWEô (R“ùÕ+ÍŸø‘P"¥ø°bN¥ôHR‹ø1'R›ùñ"¾}ôE ÷”âÔô Ôƒõ´¢Á‰õµçÒ‰ô)Å©øè"A©ø+`Õ©ùé-¯ùô¢ yúqjGAøjA[úô¤Ô‹õµçÒ‰ôëÏ¥øˆ0aö 0aö 0aõOŸ>Añ¢†ŠyúqjGAút Ò‹õ²bSA÷’kE‡ú“é eô>}ôE ÷”âÔô*Öcô$Õ­ø°êO¥ô P#¯ùô¢ Uö 0aö 0aö >}ôE ÷”âÔô*Öeô$Õ­ø°êO¥ô #¯ùô¢ Uö 0aö 0aö >}ôE ÷”âÔô Í«úÈI«úÑaÔŸúHNƒù°¦K™ø³#¯ùô¢ Uö 0aö 0aö >}ôE ÷”âÔô Íµúµ<“úµ¢Ã©ùô,ø3aL—ù‘g GúóéDAõL0aö 0aö *}÷ÈŠñO(U©ô 'A›ûUk côëÏ¥øˆ7oöíÛ·oöíÛ·oõO ñ¢žS‹ú‘ÐDƒú•k yù5kE‡ú“é YøjH‰úS"ÎAôuçÒ‰ô +˜0aö 0aö 0U÷Ï ñ¢žS‹ú‘ÐDƒúVÅ¥úSéSAûh¡Áúˆ'ЋùÈ"A©ø(#I™ø¨"“ù“"ǃùˆ#I™ø¨'A›ø¨"“ù“"ǃùˆ Ó³ù•f¢AôSgÄ‹ô§ÔAø5 É™ø0¦EEô£I™ø¨&O‡ùqb"AôPfLŸøpjO¥ô'×ø± EøpgTAøñj ƒù“'Ãú’gÎAúcÅEô£I™ø¨'O©ô§Õøˆ"‰ø5  ƒúQ` ú³& ŸúH&O‡ùqb"AôPjT‹ù´* ©ùè Çø´é ¡ø4ê ‹ùÑOô¤Ì‹ôHA©ú‘fЩô' ¥ø°b ¡ø4ê ‹ùÑOô¤Ì‹ôHA©ú‘fЩô' ù•iÈAù“áË‹øˆ"I¥ø°êO¥û("›ø°gIøó"Ó§ôiG§ôHA©ú‘fЩô' ƒù“'Ãú‘POô¢Á‰ôçL³ô`Γø0Ñ Eø‘`Ì™ùðàÔ“ùóO«úˆ'ÆAúPgG‹ôHIú‘iNƒùˆ$·ùó©É§ú‘gC³ôHNŸúˆ&O‡ùqb"AôT Ç‹ôiEƒôªÌ™ôW_ ñCE<§øµ# ‰ø5 ­ùó–Æƒúf-‹úT§Ò§ômµAöÈ cöHµAö-ÐÝ}ôE ÷”âÔôèEõ± Ôƒõ±¤Ì‹ô ^R§ú°©-‹ùÕ)YAôöâA©ø3&O‡ôèEõ± Ôƒõ±¤Ì‹ôâE‡ùˆ"­ø3*ÅEô'ÒAø4ìÌ«ù¨#A™úq_ §ú”¤Îô§Ð©ù3çA™ôHO¥ôiÙ™ú³PFƒù”â¾AøÒl ù6ÝAö,˜0}÷ÈŠñO)Å©øè!Á‡ùVÙø°i K÷”©Õ…úKbΩúVP'·øjA™ù“á ‡ø0äE[øs"Á¥ôâE‡ùˆ"­ø3*ÅEôkE‡ú“é yúµ¢Ã©ùô[¥ø´ê ù6.¾AôSèT“ùó ÌEô'ÒAôõFƒù”â¾Sû¨´köŸ ñCE<§øµ# ¡ø1â­úPa K÷”©Õ…úKbΩúVP'·øjA™ù“á ¡ø1â­úPa Gø‘aÌAõ«A™ú±Q ƒùÖPF“ûU­ø°êO¥ôéE§úˆ+Ï¥ø—_)»ô Z³c÷Ï ñ¢žS‹ú‘ÐF™ú´ä-‰ø5 ­ù3" K÷”©Õ…úKbΩúVP'·øjA™ù“á ù•iÈ[øjA[øÒfEAôq"Ùô +Vƒù•b¢Aø4ìÌ«ù¨ Ó³ù•f Eùô*IŸùÐf"A÷“é ø3)ÅAôõ)»ô [3s÷Ï ñ¢žS‹ú‘ÐC™ùôâ­‰ø5 ­ù3" K÷”©Õ…úKbΩúVP'·øjA™ù“á ‡ù“éÅ[øjA[øÒfEAôq"Ùô +Vƒù•b¢A÷“é ƒú“æ ‡ùgN‹ùA§û3*ÍSû¨·köïŸ ñCE<§øµ# ¥ø´âÔ[øjA[øÒfEAô¯)S«øT–Åú”¬ Oûq Ôƒù“'ÃAúQiÅ©õ± Ôƒõ±¤Ì‹ôâE‡ùˆ"­ø3*ÅEô'ÒAø4ìÌ«ù¨#A™úq_ ƒúvfU›õ7P1o÷ >Añ¢†ŠyúqjGAø’i-ù3¢ K÷”©Õ…úKbΩúVP'·øjA™ù“á ‰ù4–Æ“ùÑ#‰ø°æ QôU Ì«ø¨<ŸúH#A™úqPF“ûA§û3*ÍAøÒl Eùô*IŸùÐf"A÷“é ø3)ÅAôõ)»ô [¹o÷Ï ñ¢žS‹ú‘ÐDƒúVЫúˆ¼¥úuaR[ø³ªR³ô íăúfLŸøh"A©ø+hU©ôâE‡ùˆ"­ø3*ÅEôgYAø4ìÌ«ù¨#I±ô*Ö‹øu'ÒAûmWŸúQ.¾Sû¨0köÏŸ ñCE<§øµ# ‰ø5 ­ù3¢ K÷”©Õ…úKbΩúVP'·øjA™ù“á ‰ø5 ­ù3¢ Gø‘aÌAõ«A™ú±Q ƒùÖPA§û3*ÍAøÒl Eùô*IŸùÐf"A÷“é Oúˆ#A™úq_)»ô ˜³q÷Ï ñ¢žD‹øÓ`ÃAøjA[ù“á±Aõ âLAôòb)A÷‘§Ò›ô +Ð,ŸøR©ÔƒúU<ùô¦ Uô ¢LAö,4}ô#O¥ù¨ yøÓéMAñ¢¦Ï‰ô ¤ÄAõ‘$Ò§ù6¢¾Aõ“áJ™ø³£Ô‘÷ÏŸ ñCE<‰ø±¦Á‡ô Ôƒõ³'ÃAõ âCAôòb)A÷‘§Ò›ô +Ð,ŸøR©ÔƒúU<ùô¦ Uô#O¥ù¨"I¥õ±¤Î‰ô ¢CAõÒb>Añ¢˜°eö<ùô¦ Uô#O¥ù¨&ωô ¤ÄAõ‘$Ò§ù6¢¾Aõ“áJ™ø³£Ô‘÷ÏŸ ñCE<§øµ# ‰ø5 ­Ÿúg K÷”©Õ…úKbΩúVP'·øjA™ù“á ‰ø5 ­Ÿúg Gø‘aÌAõ«A™ú±Q yùôFƒù”â ›ø3¤Á‡÷ÈO¥ôêR“ùÑÐF“ûA§û3*ÍA÷“é ù6S©úRgG}õ7P2c÷->Añ¢†ŠyúqjGAøjA[øq Ô‹ô ^R§ú°©-‹ùÕ)YAôöâA©ø3&O‡ô Ôƒõ°âA©ø¨Ä‹øs(EúÐfU‹ôH γôiÙ™ú³PMƒùÒ`ÃAôSèT“ùó ÌEô¤ØSû¨5eöŸ ñCE<§øµ# ‰ø5 ­¥øjEAô¯)S«øT–Åú”¬ Oûq Ôƒù“'ÃAøjA[úQ Ô‹ôâE‡ùˆ"­ø3*ÅEôgYAø4ìÌ«ù¨&Áù0a©»ô š·q÷Ï ñ¢žS‹ú‘ÐDƒúVÕ§ø¨¼¥úuaR[ø³ªR³ô íăúfLŸøh"A©ø+jÓ‹ôâE‡ùˆ"­ø3*ÅEôgYAø4ìÌ«ù¨&Áù0a©»ô š¹q÷Ï ñ¢žS‹ú‘ÐDƒúVÁ«ú’'ÒAô¯)S«øT–Åú”¬ Oûq Ôƒù“'ÃAøjA[ø5jHŸúHÄ‹øs(EúÐfU‹ôH γôiÙ™ú³PMƒùÒ`ÃSû¨6c÷Ÿ ñCE<§øµ# ‰ø5 ­¡úRgT¯ô ^R§ú°©-‹ùÕ)YAôöâA©ø3&O‡ô Ôƒõ´)Iú•Ð#‰ø°æ QôU Ì«ø¨<ŸúH#A™úqPMƒùÒ`Ã}ôiÙ™ú³P<ŸúH)Ô¥ù3£ ›ø3¤Á‡ô Ì§ø¨#I±÷ÈP¥ù3jY¡ø¨+Ï¥ø”ÝAöM™¸}÷ÈŠñO)Å©øè"A©ø+iEƒø•Ð%yúTêÂ¥õ±gT¥û(Û‰ø5 Ì™ùðÐDƒúVÒ‹ø1+ Gø‘aÌAõ«A™ú±Q ƒùÖPA§û3*ÍA÷“é ø3)ÅAúu)Iøè#I±÷Ên eöì\>}ôE ÷”âÔô Ôƒõ´¢Ó‹úU¢ K÷”©Õ…úKbΩúVP'·øjA™ù“á ‰ø5 ­¥ø´âÒ­ø¨Ä‹øs(EúÐfU‹ôHO¥ô Ì§ø¨#I±÷È Ó³ù•f ù6ÝAöMÛ8}÷ÈŠñO)Å©øè'E¯õ²b K÷”©Õ…úKbΩúVP'·øjA™ù“á øµÖɉôâE‡ùˆ"­ø3*ÅEô¤ØAø4ìÌ«ùªn e÷ ›¾}ôE ÷”âÔôâÎ[ù1%yúTêÂ¥õ±gT¥û(Û‰ø5 Ì™ùðÐG‹ùËdÄAôq"Ùô +Vƒù•b¢A÷“é ø3)ÅAù°gIƒøoA§û3*ÍA÷“é ù6S©úRgG}ô¤ØSû¨9oö/Ÿ ñCE<§øµ# ¥ø³ɉô ^R§ú°©-‹ùÕ)YAôöâA©ø3&O‡ô¢Ì[ù1#‰ø°æ QôU Ì«ø¨MƒùÒ`ÃAù°gIƒøjn gö,Z>}ôE ÷”âÔô Ôƒõ°fLŸøh¼¥úuaR[ø³ªR³ô íăúfLŸøh"A©ø+`Ì™ùðÐ#‰ø°æ QôU Ì«ø¨<ŸúH#A™úqPF“ûA§û3*ÍAøÒl)»ô صi÷Ï ñ¢žS‹ú‘ÐA™ù“á­›ø4%yúTêÂ¥õ±gT¥û(Û‰ø5 Ì™ùðÐA™ù“á­›ø4#‰ø°æ QôU Ì«ø¨<ŸúH ÔŸù¨#A™úqPA§û3*Í}ôiÙ™ú³TÝAöl™°}÷ÈŠñO)Å©øè"A©ø+`Ò‹ø1%yúTêÂ¥õ±gT¥û(Û‰ø5 Ì™ùðÐDƒúVÁ¥ø°b Gø‘aÌAõ«A™ú±Q ƒùÖPA§û3*ÍA÷“é §ú”¤Îô¤Ø}ôèA‡ø¨O¡ú’g΃ùˆF“ûO¥ô ê ø3)Å}õ7P3eöÌ_>Añ¢†ŠyúqjGAøjA[ù4¢Á‰ô ^R§ú°©-‹ùÕ)YAôöâA©ø3&O‡ô Ôƒõ²iEƒøˆÄ‹øs(EúÐfU‹ôH γôiÙ™ú³PMƒùÒ`ÃAút Ëô§Ð©ù3çA™ôH#I±ô'ÒAøÐfS‹ô ê>Sû¨³eö¯Ÿ ñCE<§øµ# ‰ø5 ­ƒú¤Î©ô ^R§ú°©-‹ùÕ)YAôöâA©ø3&O‡ô Ôƒõ°hR“ùÕ#‰ø°æ QôU Ì«ø¨<ŸúH#A™úqPMƒùÒ`Ã}ôiÙ™ú³P<ŸúH)Ô¥ù3£ ù6 §úaÅAø3¬ Eùô*IŸùÐf"A÷“é Oúˆ#A™úq_)»ô Ù¶o÷Ï ñ¢žS‹ú‘ÐDƒúVÉ¡úRgTAô¯)S«øT–Åú”¬ Oûq Ôƒù“'ÃAøjA[ù4)IúˆÄ‹øs(EúÐfU‹ôHO¥ô Ì§ø¨&Áù0a¾Aø4ìÌ«ù¨&Áù0a §úaÅAø3¬ Eùô*IŸùÐf"A÷“é ø3)ÅAôõ)»ô Ú3g÷Ï ñ¢žS‹ú‘ÐDƒúVÁ‡øqiÓAô¯)S«øT–Åú”¬ Oûq Ôƒù“'ÃAøjA[ø0áŧúhÄ‹øs(EúÐfU‹ôHO¥ô^Fƒù”â ù6¾Aù°gIƒøoA§û3*ÍAù°gIƒøh#I±õ7P3i÷,Ÿ>Añ¢†ŠyúqjGAøjA[úQiÅ©ô ^R§ú°©-‹ùÕ)YAôöâA©ø3&O‡ô Ôƒõ´¢Ó‹úˆÄ‹øs(EúÐfU‹ôHO¥ô`Γø0Ð!yøÐfS‹ô¤ØC÷ÏA§û3*ÍAù°gIƒøjn gö¬\>}ôE ÷”âÔô Ôƒõ´¢Á‰øH¼¥úuaR[ø³ªR³ô íăúfLŸøh"A©ø+iEƒø#‰ø°æ QôU Ì«ø¨<ŸúH#I±ô^Fƒù”â ù6¾}ôiÙ™ú³PMƒùÒ`ÃA÷“é «úÑaÔŸúHP¥ù3jY¡ø¨+Ï¥øŸ Eùô*IŸùÐf"AøÒl yùô'©ô Ì§ø¯<ŸúHÔAøÐfS‹÷Ên gö¬Ü>}ôE ÷”âÔô Ôƒõ´)Iú%yúTêÂ¥õ±gT¥û(Û‰ø5 Ì™ùðÐDƒúVÐ¥ù3ªBAôq"Ùô +Vƒù•b¢A÷“é ù6!yøÐfS‹ô¤ØC÷ÏA§û3*ÍAù°gIƒøhO¥ôkE‡ú“é yú¤Í©û4" ¯ùô¢>}ô§Ð©ù3çA™ôH#I±õ7P3möm>Añ¢†ŠyúqjGAøjA[øS'×ô ^R§ú°©-‹ùÕ)YAôöâA©ø3&O‡ô Ôƒõ°¦O‡ùhÄ‹øs(EúÐfU‹ôHO¥ô Ì§ø¨#I±÷È Ó³ù•f ›ø3¤Á‡ô¤ØSû¨¶möïŸ ñCE<§øµ# ‰ø5 ­‡ùdÎ[úpfVƒøñP%yúTêÂ¥õ±gT¥û(Û‰ø5 Ì™ùðÐDƒúVÑø2g-§ø3+Aø¨Ä‹øs(EúÐfU‹ôH ÔŸù¨ Ó³ù•f©»ô Û±a÷Ï ñ¢žS‹ú‘ÐDƒúV™ùðå­úQb K÷”©Õ…úKbΩúVP'·øjA™ù“á ‰ø5 ­…ù“áË[øÔ¢ÅAôq"Ùô +Vƒù•b¢Aø3¬ ƒúvfU›ô¤ØAôSèT“ùó ÌEô'ÒAôõFƒù”â¾Sû¨·g÷/Ÿ ñCE<§øµ# ‰ø5 ­‰ø°fLŸøh¼¥úuaR[ø³ªR³ô íăúfLŸøh"A©ø+bEƒù“'ÃAôq"Ùô +Vƒù•b¢A÷“é ƒú“æ ø3)Å}ôiÙ™ú³PF“û#I±ô§Ð©ù3çA™ôHO¥ô ê ø3)Å}õ7P3söN>Añ¢†ŠyúqjGAøjA[øs'Ó‹ô ^R§ú°©-‹ùÕ)YAôöâA©ø3&O‡ô Ôƒõ°æO§ø¨Ä‹øs(EúÐfU‹ôHO¥ô`Γø0Ð!yøÐfS‹ô¤ØC÷ÏA§û3*ÍAù°gIƒøjn g÷-Ú>}ôE ÷”âÔô(G›ø4Õù“áËAô¯)S«øT–Åú”¬ Oûq Ôƒù“'ÃAø”#̓ú jΙùðå Gø‘aÌAõ«A™ú±Q yúµ¢Ã©ùôF“û#I±ô¤ØAût¢Ó©ô¤Ø»÷È#I±ôiÙ™ú³TÝAöŒØ4}÷ÈŠñO)Å©øè(Gù•iÈAô¯)S«øT–Åú”¬ Oûq Ôƒù“'ÃAúãL«úr#‰ø°æ QôU Ì«ø¨A©ùóPA§û3*ÍAøÒl ù6ÝAöŒÙµ}÷ÈŠñO)Å©øè"A©ø+bE™øµ" K÷”©Õ…úKbΩúVP'·øjA™ù“á ‰ø5 ­‰ø³"Ô‹ôâE‡ùˆ"­ø3*ÅEôgYAø4ìÌ«ù¨O¥ôêR“ùÑÐF“û”ÝAö2}÷ÈŠñO)Å©øè'A›ø«aLŸørÖÆ¥ø±P%yúTêÂ¥õ±gT¥û(Û‰ø5 Ì™ùðÐNƒù±V™ùðå­úQb Gø‘aÌAõ«A™ú±Q yùôFƒù”â ù6 ƒúvfU›ô'ÒAøÐfS‹ôêR“ùÑÐF“û”ÝAö8}÷ÈŠñO)Å©øè"A©ø+iEø3b K÷”©Õ…úKbΩúVP'·øjA™ù“á ‰ø5 ­¥ø³ Í‹ôâE‡ùˆ"­ø3*ÅEô'ÒAøÐfS‹ô`Γø0ß ƒúvfU›ô'ÒAøÒl ø3)ÅAúu)Iøï<ŸúH#I±ô Ì§ø¨)Ô¥ù3£¾Sû¨6aöÏŸ ñCE<§øµ# ‰ù±fÑAô¯)S«øT–Åú”¬ Oûq Ôƒù“'ÃAø“bÍ£ôâE‡ùˆ"­ø3*ÅEô'ÒAøÐfS‹ô*Ö‹øu'ÒAûlPF“ûP[¥ø´ê ù6.¾}ô¤ØA÷•kE‡ú“é ·úQiÔAøÒl]}õ7P4oöM>Añ¢†ŠyúqjGAøjA[ú³¦O‡ùh¼¥úuaR[ø³ªR³ô íăúfLŸøh"A©ø+jΙùðå Gø‘aÌAõ«A™ú±Q ƒùÖPA§û3*ÍA÷“é ø3)ÅAúu)Iøè#I±÷Ên iöí˜>}ôE ÷”âÔôfLŸøkjΙùðå K÷”©Õ…úKbΩúVP'·øjA™ù“á ƒù“'Ã[ú³¦O‡ùhÄ‹øs(EúÐfU‹ôH γôiÙ™ú³TÝAöŽ3}÷ÈŠñH§eïô²òçý;÷:Aô÷ðÓü¼ÐfÓý™P(ïü¨0óçþ»r ßýÛ< ßýÙPpËþ\÷îAý<Ðdßý;³ ÃýÞPwåý=2óYñ¢»èÓüziçôúòåü»ºlóô°ìÓüˆ4îAþš2 Çü<ò ßüÈ1ïÛþ~y©YôrdÓýÙÐsáü¸ôæÓü¹#Aýù†Šáü9òóAü=eÝü‹tÑü»uáü˜zeçôvlßüxzoåôwdAþ}qè]ôHŠñO)Å©øè"Ø©ø³¢-ù3" K÷”©Õ…úKbΩúVP'·øjA™ù“á ‹û"Ήõ±¤Ì‹ôâE‡ùˆ"­ø3*ÅEô'ÒAø4ìÌ«ù¨#A™úq_ ƒúvfU›ô¤ØAôSèT“ùó ÌEô*Ö‹øu'ÒAût¢Ó©ô¤Ø»÷Ên i÷ ›¾}ôE ÷”âÔô&O‡ùu ™ø¨R‹úu<úQbÚ‹ô$Õ­ø°êO¥ô X GúóéDAõL0aö 0aö *}÷Ȱ}÷ÈŠñO)Å©øè"L©øS!Ï¡û(R‹úu<úQbÚ‹ô$Õ­ø°êO¥ô X GúóéDAõL0aö 0aö *}÷Ȱ}÷ÈŠñO)Å©øè!éø0¦EA÷”¢Ó©ô#R‹ø¶¢ yù5kE‡ú“é göןúQ*aö 0aö 0aö +Ÿ>Aöl>Añ¢†Šyúqj ‰ù‘gMƒûL‹ùÑêHA÷•'ÐAõ‘&O‡ùu ™ø¯Ÿ>Añ¢†ŠyúqjGAøjA[ù“áË[ú”¤Å§ô X>Añ¢†ŠyúqjGAøjA[ù“áË[ús"Å¡ô X0}ôE ÷”âÔôjS«ùÓ'×ôÐ A ,h+(/Zxôƒ€'ô8ô€#ö‘´ ûú +@ûAŒô€#+h+gî bPwKûlI©úugLŸørÐ#‰ø°æ QôU Ì«ø¨'©õ(*]Að7CL$peøì˜ü×pDAd/P|qP÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj Yù5)Õù“áËAøó*ÅAôèm±oön³sö,X4AöHn¾}ôE ÷”âÔô$LŸørÐA<,6Hõ¤,h+(/Zx Xô8 õÁ{ô@õ‡´eõ`4!+ ô¯ÿÿ Xõ`4,6Hõ¤,h +(/Zx Xô8 õÁ{ôô €õ‡´eõ`4!+ ô¯ÿÿ X/h'+gîôƒ€ô8õ`4,6Hõ¤,h+(/Zx X,h+hô¯ÿÿ X/h'+gîôƒ€ô8/h'+gî7@õpô8õÂ{ôõÿûñ+@(=h+(/Zxô¸õÁ€{ô 2Bõ`4I.h'ô  &/$õ`4O $ ûA 4Dh+2B+h%ô 7 õ`4Wû >>x+gîû @A>x+gî/Zxõ€,>õ€@põ—€,^õ—€ +gî/Zx$&.&hW7Hõ‡´[_ õò ôÿÿõª´;+@+gîõp +hVõ€ô8õÁ{ôˆûâ"`1(+hPõ€,>õ€ô8õÁ{ôˆûâ/FZ`öð#+hKô€#/h',>4FhI  B ôŒôûA€/h'ûõ`4‰õ—€û€#.h'úXõ—€ôˆ,^ôõ—€ ûâ"`0(ð88/h'ôˆ B,^ú"l(û#ô û€#>x>x+gî>x+gî6 :@ùð@|7 ;÷À@p,h\+(/Zx6D+hpñ´Ol vh(ô¸õÁ€{ô Q h9û4©ô´Q/h' @ôˆQ h,û4Y h)/h' @ôˆQ h*û4Uô´S/h' @ôˆQ hwX h h*/h' @ôˆú(4=X h& h*/h' @ôˆ Dôƒ€'ô8+gî,6Hõ¤õ‡´ç+(/Zx Xô”(F,hôõ@ŒöPŒ+h{3Hõ`4 $ñ +hvO@O@O@ öð õ`4 " ú8õÈ€õHŒÿ Hõ¸õ¯ÿÿBpôƒ€'ô8/h'+gîôƒ€@/h'+gîõ€,>õ€,6 õ”õƒ€õ´Uõƒ€õ”Fp$h+ö1õ`4ô”(Bô4W Dõ—€,^õ—€ô”ô„`h,ð88! Dô /$ô”(ôý $ DÏ@ø õ`4û/Zx`h.ð88#4"h0+gî,6Hõ¤õ‡´7+(/Zx,h X$&ôõ@ŒöPŒõ`4E3Hõ`4 $ñ õ`4;O@ôŒöŒÿ+h&O@."õ`4G Hõ`4`@`ô @@A>ôŒðôÿÿøý@M&eI7ð@@@ü±’%ôø÷Ø8%ð88' "2ñ€õ`4/ð7ðç\ ñXu“ð3ñŽà¦“ðã ab8[ñZEíuñYõê]ñXH:]0ûlD‘ù“áËAôq"Ùô +Vƒù•b¢A÷“é yú¤Í©û4" ¯ùô¢>AøÐfS‹÷ÈP¥ù3jY¡ø¨+Ï¥ø” ‰ù3¤ÔAøjA[ør Éõ´àÌ­ø1â ›ø4ЃøñP%yúQæO‡ô Ôƒõ³'×õµ)I‹úh*>Aõ Ì¥ø°bY[ù“áË‹øˆ” QôS§Ô[ù“áË‹øˆ” K÷”£ÌŸøh"A©ø+fO‡ùkiÌ‹ø´T}ô ^Rù“á ‰ù“áË©ø0¦EAú%yúQæO‡ô&T…ùçгô ©ùóÖ̓ùÖVÌŸøré¡[ø´©O¥úh¼¥øó'ÃAøpêA…ù‘PT}ô%yú–hE[úè Ó³ù•f ­ø°êO¥÷È#I™ù‘g-ø2fE‰ô+bÒ¥ùô© ¥ú1 Ô‹õ± É™ø±­‹úT§Ò§ô R£øjE[ú³¤A¡úP­‹úT§Ò§û¨ Aðð7CL$þ@78\@ C,n A7P`;@DAd/Pÿœh3ð,Wð°qð”[8ðÀ!øì˜ü×þðD@ð„1÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj Yø’&O‡ùh#Ì«ø¨¡·ö,6göY3eô [³qö-Y3oöMP1aöîX0c÷,˜ [ö-Ø·köÛ¹köH·eö¬X¸qöìÛ gömZ´oö 1aöî²eöÌš [ö-Ø·qöíX9oö¨3möL¶eö,0Aö,¹a÷.[³eô [°köÍ4eö·aö°gö 4gö,›¹oö. eö,¶oöŒš eöíܳsöL oö¬[1söl³AöMÙ6gö8Aö-Ù4qöY1mö1kö 2möMµAöM™3oö¨¸iô ›2c÷ 2möL[4AöM™1i÷n¾}ôE ÷”âÔô$Ò[ù3¤ÔAô¯)S«øT–Åú”¬ Oûq$LŸørÐD“úKdΓúˆÄ‹øs(EúÐfU‹ôHÔAøÒl)»ô Ø7}÷ÈŠñO)Å©øè&Ɖõ²gI©ô ^R§ú°©-‹ùÕ)YAôöâH™ùðå ›øÑÉù5#‰ø°æ QôU Ì«ø¨<ŸúH#A™úqP'©÷ÈP¥ù3jY¡ø¨+E‡ú“é>Sû¨2o÷Ï ñ¢žS‹ú‘ÐD“ùÒj K÷”©Õ…úKbΩúVP'·ø’&O‡ùh"Iù5#‰ø°æ QôU Ì«ø¨<ŸúH ÔŸù¨#A™úq_)»ô \2}÷ÈŠñO)Å©øè"Uù“áËAô¯)S«øT–Åú”¬ Oûq$LŸørÐD«ùÓ'×ôâE‡ùˆ"­ø3*ÅEô'ÒAøÐfS‹ô(R“ùµ,ЋôçÒ‰÷Ï<¡úRfÔ³úPWŸúQ)»ô Û>}ôE ÷”âÔô)ÌŸørÐ%yúTêÂ¥õ±gT¥û(Û‰ù'×ô)ÌŸørÐ#‰ø°æ QôU Ì«ø¨<ŸúHP¥ù3jY¡ø¨+Ï¥øFƒù”â¾A÷”)I›ú–hEAúóéD}õ7P1m÷Ï ñ¢žAøˆLô &Õ‰ø“" cö  yùÓê yøðiÓ“øó¢ÄôêÂ¥øÖ_>A÷hP™ù0à™ø¯Ð,‰ù'×÷ÈF¥ø±mEAõ‘$LŸørß>Añ¢†ŠyúqjGAøñj-™ùðÐAð,6H*rh,h+(/Zx Xûá/BQ_‡õH‹ÿÿô¯ÿÿ X/h+gî ñj*IuûlG‹ú‹fO‡ôâE‡ùˆ"­ø3*ÅEôkE‡ú“é yú¤Í©û4" ¯ùô¢>Aúµ¢Ã©ùô”ÝAðð7CL$peDAd/P|qP÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj Yøñj-™ùðÐG™ú±P'CûmY¶qöìX1iöˆ²iöNY!»÷Ï ñ¢žS‹ú‘ÐP«ú‹fO‡ôÐ A ,6H*rh,h+(/Zx Xûá/Bûaú8X_‡.$õH‹ÿýô¯ÿý _‡õå´+gî ñ£‰ÉuûlP«ú‹fO‡ôâE‡ùˆ"­ø3*ÅEô(R“ùµ,ЋôçÒ‰÷ÈP¥ù3jY¡ø¨+Ï¥øU­ø°êO¥õ7P Aðð7CL$peDAd/Pÿœh÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj Yúj-™ùðÐG™ú±P'CûmY¶qöì±göȲiöNY!»÷Ï ñ¢žS‹ú‘ÐG‹ú‹fO‡õ¶Að,6H*rh,h+(/Zx _‡Q_ï~ _‡.XõH‹ÿÿô¯ÿý _‡/h+gî0ñj*IuûlG‹ú‹fO‡õ¶#‰ø°æ QôU Ì«ø¨U­ø°êO¥ô(R“ùµ,ЋôçÒ‰÷È*Ö‹øu'ÒAøÒl)»ðð7CL$peDAd/P|qP÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj Yøñj-™ùðÖØAøó*ÅAôèmµgöαaö- köM9eô7_>Añ¢†Šyø³¢PƒøràÇ‹> diff --git a/bin/librm1/asystt.nbin b/bin/librm1/asystt.nbin new file mode 100644 index 0000000000000000000000000000000000000000..7a9a9cedc401353e28aa709801a51ab49e8fbef7 GIT binary patch literal 2022 zcmah~e@s(X6h5z|1ttxTDNcdR3)Zc}O8HR`7h`mob1?VuW$y+3a5z2~0q zeCNC8o;P{&xWy@ba{nhcAJuWISKdKJ&E7%vzQoC*lxtn`dls(KZ+y&k@$A;S-SQwA zamh_&*y)c-vAE>c{hIj6lgBr7O5IgOT~ZdC;*@t*Y&gmn1r6)n@_`ZVgtUXrXyBD* zO}zK;!_iirtr+OxW7PU-x@4ySzRF{up2ed9`(G@i1??Hf#3!A+k0VxL3) zxGJBM4kwRt;+Y_Fq0@J>%-o4wrU{YJcDX5xRWNv`Kif_mzHGbMB_Dc3?0n3EXF#*< znVk1v)tFn_@%l|pEQq_^F0W-%tzyi)^w989`!gQKC%3w!Y*xtue$_lQLbN`o06=K@ z78v1j9}J1jeZcr7z$G}Rri8&hm?gL_1G5++)v*9Jh@yj1b8Ju^Fig*adnBS{qMm1(K&4Xyr~-$DmPSzWOh0IZff>AJWbh1B5I`IU zC|rW<*9k5C5G%BtnVNvS8c-5N$%I4v&gshFqbYkd_?{a`9v&g4l8N15s(}cxOXCPY~@q^U7+I;*3y?9SBU z-eSD`H%S!ENCECqsL#@Z$|1cp6paykj8JEoYlBLm)Cdj4ga$f$KX66Dr9QYG4E`V# zoS~B1!X$+f7g)2hM4i7Y#We@aw2pG7-yyw0#z_0a0$j?3??eUcpnVQ zwYVf|)LZ)+764^X%QF$6)J0&u()^S!1Vxp?s_H*MDPBE)3CoC*tP=)|a3fHM;U0Js zVPfPV7as79Q4a^N$c5R$kD&0=i`h-o1g%)ZVO6DnH8LlX>c2JMhE-~v3xG#}elAQ< zYn(?1bOo@0$^#Kt??#M+DuMzS7VrtN^rc6EdNRLvsh^tgLlA#8`)^x~dT4g}n&zaO zmanEBY$P$!bIPIWkaV;1h1Uq`O>@@(a%2HJz$(~R7>B)jkwaelD;nZb$IAHl1>_y?5&ei; zI6s11vQme+AXL%xIksx7Jb3Q#H&@#wTc9PUuK0l_fnoq8nz$_n%haB;FhrM-_g2Q{ z+?}O0P!?RSuHR*Onlu8OM==LlVHOrx9_}rFnsgZ!YZN1=nGpecpofSW1V zu%-w!1ZIN@b(VHr?ET!s7-12pYH<1F%fD|w#e=a_VvPqjLZS!iA=v}Xu*$>CfqW0M z5;lOU0Ma2^2kT*$4YmZ3SLwG!b6~JQBrr9I7f}nPLBq>y616qf8c+q6q5lxMwwI43 zw>o_pznS-X#}{7hmd@-?YxN!Zu)`t8SCLIp=vR>6Cihs9FNoFma>~Tvgj`Ncn}5zK z{{HpZt)gyzuU$NykX0$ZYsvgbESz_N6HXQPlzW$KG;SA9?awL~|41O{cCX(q4zn5C z#lpm8pNcI>-*ck=PH(w4D&d@6tlor2o_w{`Di+>NxAHN?J=?u$iOb5o8aBIJY`$aU d#KN`=yEwS*V(3SEpwe_gO8;e`6*+6-{{asW9EAV? literal 0 HcmV?d00001 diff --git a/bin/librm1/b-ob.fbin b/bin/librm1/b-ob.fbin new file mode 100644 index 00000000..fb485972 --- /dev/null +++ b/bin/librm1/b-ob.fbin @@ -0,0 +1,78 @@ +' + + + + + + + + + +"> + + EXTRACT-ITEM #DECL ( +"VALUE" ANY STRING "OPTIONAL" ) GET-SEMTYPE BYTER8 REFILL-BUFFER BS + (STRING) BL (FIX) BOFF BYTES T RESERVED-CODE-USED!-ERRORS EXTRACT-ITEM #FALSE ( +) TOO-MANY-SIZE-BYTES!-ERRORS B-NON-ATOM BAD-OBJECT-TYPE-CODE!-ERRORS ![ +B-LBITSTR B-STRUC B-EDT B-REPEAT B-USTRUC B-STRING!] +NOT-ENOUGH-BYTES-FOR-BITS!-ERRORS P-LBITSTR % % "PRINT" % CANT-OPEN!-ERRORS B-STRING % () BAD-SIZE-SPECIFICATION!-ERRORS B-STRUC CHARACTER B-REPEAT +UNPARSED!-SEMTYPES ACTPARSE (ACTIVATION) % % + % % % % %]>> + .GLUE > + +> + +> + +)] 281>> + +> + + FIX)] 555>> + + FIX "OPTIONAL" ANY)] 666>> + +> + + FIX)] 985>> + + >> + + < +DISMISS 0 .ACTPARSE>>>>> + +> + +> + + FIX)] 1153>> + + FIX)] 1197>> + + .GLUE > + + diff --git a/bin/librm1/banner.nbin b/bin/librm1/banner.nbin new file mode 100644 index 0000000000000000000000000000000000000000..5e953b2cdc25e69af91ab7947db53fd1fe30a0e3 GIT binary patch literal 3184 zcmcImeNa@_6+d^s!6hzV0YvGA+5!eyA`6m);J$^8pjZK8i`ZmWO~TT_aj{atud%b* zrAco=~{d&S}{7jTjAB=Q1r>wwiv}#@lbV+3`6lOn_(|=*c!4D>3v&UlsY9Ng} zJ!89PbM-$t6`=3dlhbj|0kX;IuG?QkdU`Dw*dI?~7OVzIEHIm`T4*n@vTCI6mY_e~ zMFx2h*|J3B7W6D5|NmSb3Ur&vvsasCRaWO2+fHGbDVKATt7RM$e;3w)lbift5xN>k z=ZgSKDj0aKs@mBO(C)^GH{i6?=?U@%PmuKQ~Ku!MWM6 z0twBi(~cma=;!(UNosi!fI(RFM?0koU7A9dW^x_T^8k`0G7M<;Gb-kRFdU+AvSnJh z4l$76oII0GBOd~+T8yUaxXv@SEpj>x$Aks%R|W7{-F08E~-exb8M-lXef{3C4yz$ktRV2<32Qjv<&l7#>|Zoo%wqRvfPRmnXL;AidWe1=@OpZiQsJ*JUz8h>Au2+^b^o6T<3>0D*o)G#SIn9 zw1pq$kV;NcMZn4UUn#z?k^4JJs%S=45x;{jY)$$gZ^>!FAu{kb08^5$H z9;eGSPG?kKXS5G!qFVZRl;afTE-Gac6?Gc*t3OXqGrcLD&piB9B?YhWX z*eV#-D!0%RFEH1BHc1Jsu&{z@F~!1 zYcKMQ?fCmutU40Rm&v;s0jelEAA6+A~91+pE|ZlHc|rHUsdE|^*6xwPg{_8l2R!9XOrHH7(1AY-Z=JUtbBX? zIx*PGO&Cel=gk?;XrUEYRfCT$qtstO=_uvfNxMIg?iSf2xGNVsRXXZYjb0#?yJfZ7 z@AR=pY4xil(KoNA>+C`j(<}^JNlIlJDDKwj$PlPVv?|QX4CNnC&%*A7pd__~X9b}+ zJEL(G&+l{BQBo;cYZDMD1Ejm0U_V9)xnEj+%=8llM$(I9rcWwUpIAU%Iw@TT=zCDC zdG+U(0@#45@B%(98gUxbe03^d>y=UwqMl4cgfOVa`S{9Imu+7m$+2#{fPJq5^Z-t@ zffg_V^THkEpp_ipKa7?BW;p%VWWn6DGII^~YdK2rcc|Ou3dDXpd|44aMdzLosp($~ z#GcwXtVFAdFDetgrA$|((qn6$5Ltg|8;rg4$5JKoYW|65qmI#`7bZ@T?fIAwiX4v!4AY9(2vil}!NDWdUUQKo22Pr+&NclO7sN{7})((+#05V7V~;FQgmN87%# zM$ww{UfD8zmb*w1{^ReyBvPMV(iyoX^>QoL3d{RVFHiWgD>g+o|Bh@?pf#rdd~o9M zrA4^C^22GTsXrKcEmD&ABPCLn=TIWu&%W9ttnH4T$cZbwGqSlO+!g6Qc=v|LwJYIG z;(2OszYZ6q7uTx$tfuV^6|6%w?PKdzV>?>VaIJzxJEm3u>rZT(Y93y&y{3h&k=y90 tVCLx5owe-8a@(LhVsD9Cf6vay?f7}q + + + + + + REP-PRINC #DECL ("VALUE" +ANY ANY "OPTIONAL" FIX) OUTCHAN "" " +" " " " " BAD-ASCII-CHARACTER 5X7 %]>> + .GLUE > + + +> + +> + +> + +"5x7 matrix for ASCII non-control characters" + +> + +> + + diff --git a/bin/librm1/blprin.nbin b/bin/librm1/blprin.nbin new file mode 100644 index 0000000000000000000000000000000000000000..533df0a6a7ce8aaf3b7e2bfd9c3d51078948fe89 GIT binary patch literal 3361 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 F&>uL!7F_@U literal 0 HcmV?d00001 diff --git a/bin/librm1/boot.nbin b/bin/librm1/boot.nbin new file mode 100644 index 0000000000000000000000000000000000000000..9f06f83e59d8e2d10235637f76f00921970091dd GIT binary patch literal 4611 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 literal 0 HcmV?d00001 diff --git a/bin/librm1/break.nbin b/bin/librm1/break.nbin new file mode 100644 index 0000000000000000000000000000000000000000..2506d21080d0355c4cebadc086f9ce76a6589624 GIT binary patch literal 323 zcmeyksI9B=mq6m_<{uvelv;lUCY(@iH6tB=ge*EZ{hKaG%wO~9 z${#NjgSvkh-Pq>%AwxjH@dE<`gP@L?2Lr>`-X#o-I&v8dOxg_WZ2bCB6$}i4N(|l! z5lj(4*#ZUzMt!ji2DUE@%?*MMEI@rgb%|mO3<3;{3=A9$OuS~QdaOWU5a3{7{GB7< zwDiY@)Q!2nR{$*niGpRNorQd)RSFUd7??m}3_sq?_;Vd-Iz*Pi#W6)cphhTxfekEc zr@+N!SC|p?i2cB{RF*!pHNo?n}E;|1s$g#S4VF{Gmwm{g1X}G woCx#GZ#n+a literal 0 HcmV?d00001 diff --git a/bin/librm1/buf.fbin b/bin/librm1/buf.fbin new file mode 100644 index 00000000..1a3c180c --- /dev/null +++ b/bin/librm1/buf.fbin @@ -0,0 +1,478 @@ +' + + + +"A buffer is a VECTOR of two STRINGs. The first points to the buffer, +the second to the first unused character in the buffer. + +Entry points: + + + adds the character to the buffer. + + + adds a line-feed to the buffer after the character. (used in CHRTABLE). + + + inserts 'count' characters from file, or whole thing. + + + inserts 'count' characters or the whole string. + + + inserts the first string into the buffer, with the second + string added as a prefix of each non-empty line. + +BPRMPT1 +BPRMPT2 + Manifest offsets for accessing prompts in buffer. + +BUF-BITS + A MACRO for playing with the BBITS field. Takes a buffer, a + bit, and (optionally) an atom or false. If only two arguments, + returns the current value (atom or false); if three, sets/clears + the specified bit. + +BUF-ECHO-FLAG + If FALSE, echoes happen as usual. If a fix, instead of echoing + we erase characters, and setg buf-echo-flag to false. If + atom or applicable, apply to the character typed, the buffer, + and outchan. + + + clears buffer. + + + grows buffer by count characters. + + + return number of characters in buffer. + + + makes a buffer of length count, with prompts of prompt1 and prompt2. + + + efficient buffer printer of buffer to (optional) channel. The + characters in the buffer are printed, without regard to MUDDLE + escape characteristics (i.e., double-quote will not be preceded + by a back-slash). For printing as a string, see 'BUFSPRINT'. + +BUFSIZE + free variable, amount to grow by if not given. + + + prints a buffer on an (optional) channel (default .OUTCHAN). + The function prints the buffer as a string, 'escaping' the + characters double-quote and back-slash so that the the string + may be read correctly as a MUDDLE object. + + + function which applies TECO to a buffer. May be used in + CHRTABLE, and is default control-E function. + + + uses EXTRACT to generate a string whose length is the number of + characters in the buffer. + +CHRTABLE + initial table, + ESC___ Returns from GETSTR (via GETSTRACT) + ^Q Quotes the next character + ^X Deletes current line + ^W Deletes word back to separator + ^@ Clears buffer + ^E Edit the buffer + ^F Inserts a file into the buffer + ^P Undo the last major deletion + ^T Re-enter TECO without munging its buffer + ^D Displays the buffer on next line + ^L Clears the screen and displays the buffer + + + returns deleted character or FALSE. Applies to + the character, unless DELPRINT is false. Initial GVAL of DELPRINT + is IMDEL. + + + GVAL applied to chars when deleted, unless GVAL is FALSE. + +> + deletes characters from buffer till member of string is deleted. + Returns # of chrs deleted. If optional string present, prints + it (followed by crlf) rather than echoing deleted characters on + non-display. + + + sends delete-to-end-of-line stream (ctl-P L) to system. + +DISPLAY? + T if console is an erasable display. + + + deletes the current line from the buffer. The separator + (initially ,LINEBRKS contains CR__ only) is not deleted. + + + deletes one 'word' in the buffer back from current point + till a member of ,WORDBRKS is encountered. The separator is + not deleted. + + + asks for file names, inputs the file. + +FORMATEFFS + string of format-effector chars. + + + Reads the cursor position on the channel (it better be open + on something where that's meaningful) and updates the channel's + position indicators. Used internally after SIOTs and such, which + don't change the data stored in the channel. + + + reads a string from the tty into the buffer (arg1). The + processing for characters is defined by a dispatch table + (default .CHRTABLE). This argument is a structured object of + pairs. The first element is a character, the second an + applicable object which is applied to the buffer and the + character, whenever that character is seen. GETSTR sets up a + special activation which is bound to the atom GETSTRACT. This + activation marks the repeat loop, and thus may be returned from + to get out of GETSTR. GETSTR returns the buffer. + +GETSTRACT + GETSTR's activation, special. + + + takes a BUFFER and does a horizontal position to the calculated + end of the last line. For deletions, etc. + + + clears the buffer and does '. + + + clears screen if character is Form-feed. Then prints the buffer. + + + deletes on character and returns it, or FALSE if buffer empty. + (Used in CHRTABLE). + + + knows how to delete chars from display. Uses GVAL of DISPLAY? to + determine whether applicable. + + + initializes defaults, setgs DISPLAY?. + + + Does IOT on channel (default ,INCHAN) with bits as given by word. + Character is only useful on output. Returns character + + + returns T if console is an erasable display. + +LINEBRKS + + + see 'TTY ORDER' on .INFO.; also NDR;TTY-ON (et al). + + + quotes the next character by calling IOT, thus escaping the + normal dispatch through GETSTR. The function assumes the TTY + environment has been set up correctly. (see MY-TTY-OFF). + + + Returns first value of RCPOS on channel (default ,INCHAN). + +REENTER-TECO-CHAR + character that means reenter TECO without munging its buffer. + + + Does SIOT on channel of string, with control bits as set by + word. Returns string, probably rested. Interruptable during + SIOT. Fix is # chars to print, default to entire string. + +TECO-PROGRAM + a string which is what BUFTECO will use to try to load the + inferior TECO. + + + Does TTY-GET into supplied uv. + + + Does TTY-SET from supplied uv. + + + takes a char (H or V) and a FIX, does ctl-P to set cursor + position in system. + +TTY1 +TTY2 + these are words which MY-TTY-OFF uses too pass to + TTY-SET. TTY-SET sets the way the system handles + characters for you -- echoing, interrupting and + activating may be specified for classes of characters. + each class has a field in either TTY1 or TTY2. + + + Undoes the last `major' deletion (word or more) from the buffer. + If nothing there, no effect. CHR is ignored. + +WORDBRKS + strings of breaks to be used in deletion +" + +\ + + + + + + IOT #DECL ("VALUE" CHARACTER +"OPTIONAL" CHANNEL CHARACTER) ADDSTRING INF-RESULT +TECO-READ-BUFFER TECO-BUFFER-SIZE INF-CONTIN TECO-CLOSE TECO-OPEN TECO-ALLOC +TECO-KILL INF-START TECO-LOAD % % % % % % % T OUTCHAN "TTY" "-continued-" " +" (CHANNEL) "\\\"" "\\\\" % ![*BREAK-16 *VALUE!] % TECO % % "C" +"You are starting " % +" for the first time. If your INIT +is unconventional, you may have to exit with ^C, ^K +or their equivalents (not ^Z!) after it begins listening. +" "Control-Z before ready? " " edit aborted. +" "Back to " "An empty string was returned from " +". +The buffer has been left unchanged. +" "DONE" ^Z-TYPED "Please return from " +" with ^C, ^K, or their equivalents. +Please re-enter with ^" ". +You could get yourself into a bad state. +" "An error occurred in returning from " ": " +" was not able to start up successfully: " (*BREAK-16 :KILL) *VALUE ":KILL" %< +RGLOC TTY1 T> % % GETSTRACT OLD-TTY % ERROR!-INTERRUPTS INTERRUPT ELSE % % % #DISMISS T CHRTABLE DELPRINT ( +ACTIVATION) % % % +" XXX?" "X" "S" "R" "L" "U" % "î" "File-name: " "READ" "DSK:" "[File-Input Aborted]" "[DONE]" +ARG-WRONG-TYPE!-ERRORS ADDSTRING ""]>> + .GLUE > + + + CHANNEL FIX)] 38>> + +> + +]> UVECTOR "OPTIONAL" CHANNEL)] 125>> + +> + + [4 STRING] FIX STRING +FIX>> + + + + + + + + + + + + + + + +"If this bit is on, print a new prompt on every cr" + + + + + + + + + + + +> + + " , ;:.">> + + >> + + + +> + + (FORMATEFFS) STRING (BUFSIZE) +FIX (OLD-TTY) UVECTOR> + +> + +) ,BBITS > > >>) (T > >> FIX>>)>>> + +> + +> + +> + + +BUFFER)] 364>> + + )] 465>> + + FIX)] 679>> + +> + +> + + +STRING STRING "OPTIONAL" FIX)] 918>> + +> + + +> + +)] 1024>> + +)] 1231>> + +> + + + +> + + + + + +> + +> + +> + + + + + +> + + +CHARACTER CHANNEL)] 1956>> + +>> + +>> + +\ + + VECTOR> STRING)] 2070>> + + CHARACTER >)] 2370>> + +> + +> + +> + +> + + +BUFFER CHARACTER)] 2587>> + + BUFFER < +OR CHARACTER FIX>)] 2602>> + +> + +> + +> + +> + + + +> + + STRING +STRING)] 2887>> + +)] 2937>> + +> + +> + +]>)] 3341>> + +> + +> + +)] +3721>> + + +,ADDCRLF ,IBUFPRINT !\ ,IBUFPRINT !\ ,UNKILL !\ ,QUOTECHR !\ +> !\ ,DLINE !\ ,DWORD !\ , +DLINE ,IBUFCLEAR]> + +> + +> + + + + diff --git a/bin/librm1/bufch.nbin b/bin/librm1/bufch.nbin new file mode 100644 index 0000000000000000000000000000000000000000..afd217f18c0fd1c8d04c4bd39cda500d88243b44 GIT binary patch literal 7955 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 literal 0 HcmV?d00001 diff --git a/bin/librm1/bugsys.nbin b/bin/librm1/bugsys.nbin new file mode 100644 index 0000000000000000000000000000000000000000..7cee1683f80a5f9f45919df728577e161a33ab0b GIT binary patch literal 5374 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 literal 0 HcmV?d00001 diff --git a/bin/librm1/calcom.fbin b/bin/librm1/calcom.fbin new file mode 100644 index 00000000..f9cc2066 --- /dev/null +++ b/bin/librm1/calcom.fbin @@ -0,0 +1,129 @@ +' + + + + + + + SUBSYS-EVAL #DECL ("VALUE" +STRING ) DIRST SIXTOS GETAB SYSGT QUIT LOGOUT MAKESST MAKEGST +MAKEMST LEX-FIX-MASTER-TBL LEX-FIX-STRING-TBL LEX-GET MAKELST LSTDELETE +LSTINSERT GETTABLES RLJFN GNJFN JFNS GTJFN FSP-PARSE OPENTELL XFPUSH READER +MAKEBGST USE-DATUM SUBSYS-SYMTAB "MUDCAL-SUBSYS-VECTOR" "Subsystems" % % "named" [ +"type the name of the subsystem to be activated" "ARC:CALSUB;ACTSUB HELPM"] [ +"SYM"] T "READ" "PRINT" OUTCHAN % " " % +CALICO-DEV ":<" CALICO-SNM ">" ".FILE." "*" "(DIR)" "*;*" JFN " " "TPL:" %< +TYPE-W SYMTABLE VECTOR> % MSTOPS #FALSE () COMTABLE % GLUECOMTABLE % % +"Glued Command Table" LSTOPS % % +#FALSE ("Illegal symbol table type present") #FALSE ("No top level symbol table" +) LXTBL % % % +"Current CALICO commands" "Command table titles" % ANONF1!-TMP #DECL ("VALUE" ANY ANY)]> % +PERSONALS % "Personal commands" +"No console script file open now." () TTY-OUTPUT-WORD TTY-SILENCE-DEPTH "SYSTAT" + "Load avg: " ", " "JOBTTY" "JOBDIR" "SNAMES" "JOBNAM" LEN +"JOB TTY SUBSYS LOG" ENT " " "DET" "?" " "]>> + .GLUE > + +> + +> + +> + +> + +> + +> + +> + + + + SYMTABLE)] 658>> + +> + +> + +> + +> + +> + + STRING )] 1505>> + +> + +> + +> + +> + +> + +> + + + +> + +> + +> + +> + + .GLUE > + + diff --git a/bin/librm1/caldes.fbin b/bin/librm1/caldes.fbin new file mode 100644 index 00000000..ef87807d --- /dev/null +++ b/bin/librm1/caldes.fbin @@ -0,0 +1,53 @@ +' + + + + + + + "> + +[DESC].MASTER") ( +"CALSUB;DESC MASTER")>> + +> + + GETABFIL #DECL ("VALUE" STRING) LEX-LOOKUP PDESC SDMGETCHAN LEX-GET SDMDCT SDMGET SDMOPN +% % % +% #FALSE () T % MSTOPS LSTOPS +GSTOPS BGSTOPS VAL TABFIL % % %< +TYPE-W LEXID WORD> % OUTCHAN COMMENT % % % " " " No info?" + (CHANNEL) % %]>> + .GLUE > + +> + +)] 102>> + +> + +)] 429>> + +> + +> STRING )] 687>> + + .GLUE > + + + + diff --git a/bin/librm1/calrdr.fbin b/bin/librm1/calrdr.fbin new file mode 100644 index 0000000000000000000000000000000000000000..2e48656d6842ba878d7da5b8cd1c52b5908bb430 GIT binary patch literal 6585 zcma)B-EZ5-5$|h=2I%{}O!iPnI)sKL%dwLZI#3j4^GuN}KN7n-Kgc$nsF5W@lJA?SGs7g0>HYmeO63^Lz0eJ^lJfIST3l)^NYto^&`2EvdNVcO|If>D4(puh3EV9DU3&QG0ete zHNC$G=y47OyflbxS}(#$|y^2JFWyQI1WnCPI2ROMNUL z9{z_&_#ZCiwKo|%fsh|1ZhBVwvUcu|W7`L}wg{dU3tG&Vx#&D2SFSHf%V(z|RDm-+ zq(c&d4zEiFG!6>YTGK+^k^7Njfi+KpNx2Lr-Fn&E`95)@ge(Nbh}v&cH*hbh)fOKt zL2rH?;CFx@bvo2`Sr75yZ$!|bk|2fCW3s%Du7f4@E6iDG-P+vKGOk+IC^Yc``wqzV zed*Db^~nnYWJYRVz+=8YsN&CPSsaSy#7z<;9lqgQDZWBvWpO}ni*!)7Jn&unqg$lN zfHF@yoeOguBKQCuP#t6~%L}3`HOFx{G2!L`l`-D3unK_+1MFS}ddo6~r~_F9 zED3t`8j(Wz<|mm0Xvl@roxZ~YnGV<5o9WrI7nXQNz3A;Yr=V{ zOpih3VuYkB8T3~xPO@SA#-!F1FS4fLrK)Ol2z?dpk0aOd5wjm{KXV0HaIB%?n2m@` zbYu7cIi>wq%T4EC>3WvX-QdWxuD~?Ekj5MT+>;4QM7jD;Ebqy@L zwMMtwM-3eVvuX`j!<5Y*ASa72Wt_K>7v4vk)3?KJsB38@QrR$NDE^AJ^n4~MrLUSR z)1syr(#e=KV!qtwpYydKykBEuG4?|nKA9TgezBTu=gZIZxB?X|pB`=`ArnYa zj#B0^$wni@{A{~=pyli#7qS#ek}9T3w1 z{6;Q3GP^-7QkDPa z*!9DF36|1l53>!s@n)URzQVP&l&TCsn{N*{s|DCyO@^U=-MOxU`PulolYcyOr30g) zeqprL=y#`F4N*>45>ynEYJ%73>fuQPRuhs2E2kfwVKv@pbk#hh!L(sVgO-yHKt@>| z$^l0sD^3L(q#P18P&NHXSfOt{%mFIs2b5R-eSh`CTQ0Gx!ah3(FztvV=V^%?U4358 z|IHb3K+z(fZE{-Y++ooZjbgO^f2M4(OfIlDkJ94R>py>ILH>dQBu{~*EJc~C4-AmS z5Gglwgy($u__T#ov)kMJajRr{CKOVRWCbI^+#scJQ62I5mwfR^5BX*@`^?f~zLv#S z80nXs?pHjQaQgA^@wnP-=Fs^AW)=~wNX0VU*@&d$oK_z=QE(`6p2BqQgI`b@J|i+HJ>3YKC)VNl6Yrc&z+}!(`&6k3 z8rswrw90`P2@2Lq1NLeqc3<{dwqp16=tSF|4JGe;_JmJ`Z*0z`K*)`R+OK1P_xs+V z##=iK?cuIbH2GutVW0O;bZP6e>^^I06ni+H_Vx6Ur#_epXS+QzY7|Y5utDWjqj!38 ztSQe2%Rl5>6ExT=mOAJ6eVwzqAmD??9*Jv$24|U)TFe?8LRy9KE;&Mudi}1ZNPV}k zXS!{z=HBw`YY2yTc^$&NSS`DffHbZedIzG}lt2$7eqV~wYL(}A1x!6#Z z@#yqeuR{7|(LT9%Xd3+40n#g~bg=pRhwt=|Z(LRF+oVa>*azv#3EJ-+>C#tsWBa() z1WkS_J^M#He%!tA+Q+m()!;14y_B`z)n!#d&DUc4_-Yglo@`;ZY`?Ep-rZZSy}=6!XYkzOpV>OMUu~*%+iitz^-ps+xDj&A%e##LGZBM#-M=3An x_H0|CU)WRiL<@f + + + + +> + +> + +> + +> + + + + + + + + + +> + + SSTOPS #DECL ("VALUE" ANY FIX +"TUPLE" TUPLE) BSTLOOKUP GSTEVAL BSTPOSSYM BSTEXACT BSTALLPOSS BSTALLPOSS +BSTEXACT BSTPOSSYM BSTEVAL BSTLOOKUP GSTALLPOSS GSTEXACT GSTPOSSYM GSTEVAL +GSTLKP [SSTLKP SSTEVAL SSTPOSSYM SSTPRINT SSTEXACT SSTALLPOSS] #FALSE () () %< +TYPE-W SYMBOL VECTOR> "" OUTCHAN T " " SSTOPS % +MSTLKP MSTEVAL MSTPOSSYM MSTPRINT MSTEXACT MSTALLPOSS RES MSTOPS GSTOPS % BSTOPS BGSTOPS " "]>> + .GLUE > + + STRING FIX )] 43>> + + STRING FIX )] 176>> + + "OPTIONAL" STRING STRING)] 258>> + +)] 364>> + +)] 407>> + + +STRING VECTOR)] 485>> + + "OPTIONAL" ANY)] 543>> + +> + + STRING FIX )] 639>> + + )] 812>> + + STRING FIX )] 862>> + + "OPTIONAL" STRING STRING)] 983>> + + "OPTIONAL" FIX)] 1090>> + + +STRING )] 1191>> + + "OPTIONAL" ANY)] 1244>> + + > FIX "TUPLE" TUPLE)] 1283>> + + STRING FIX )] 1362>> + + "OPTIONAL" STRING STRING)] 1507>> + +)] 1622>> + + )] 1694>> + +> + + +STRING VECTOR)] 1850>> + + "OPTIONAL" ANY)] 1920>> + +> + + +STRING STRING)] 2011>> + + "OPTIONAL" )] 2037>> + + > > FIX "TUPLE" ANY)] 2076>> + + STRING FIX VECTOR )] 2152>> + +)] 2350>> + +> + + STRING FIX VECTOR)] 2563>> + + +STRING VECTOR)] 2740>> + +> + +> + +> + + > > FIX "TUPLE" ANY)] 3125>> + +> + + +> + +)] 3270>> + +> + + .GLUE > + + diff --git a/bin/librm1/caltop.fbin b/bin/librm1/caltop.fbin new file mode 100644 index 00000000..9b4808ca --- /dev/null +++ b/bin/librm1/caltop.fbin @@ -0,0 +1,66 @@ +' + + + + + + + COMBINE-SYMTABS #DECL +("VALUE" ANY) MAKEMST COMBSYMS "Combined commands and symbol-tables" % % %]>> + .GLUE > + + .GLUE > + + "commands" ) (ELSE )>> [, +COMTITLES "from" '[ +"Type the name of the current command table +whose contents you wish to examine. Type ^F +to see the titles of all current tables." ""] ["SYM"]] [,COMTITLES]> "describe" + "command" [ +"Type the name of the command or +symbol-table you would like described." ""] ["MULT" "SYM"]] '[] "SEGMENT-EACH"> +"who" "listf" "print.file" < +CALICO-COMMAND ,FILEPRINT '[[] "" [ +"Type the name of the file you wish to print." ""] ["FILE"]] '[""]> "copy.file" + "copy.to.printer" "delete.file" "rename.file" > '[[] "from" [ +"Type the current name of the file to be +renamed." ""] ["FILE"] [] "to" ["Type the new name to be given to the file." ""] +["FILE"]] '[] "PRINT-RESULT"> "execute.file" "script" < +CALICO-COMMAND ,TTY-SCRIPT '[[] "to" [ +"Type the name of the file into which the +tty script should be placed." ""] ["FILE"]]> "end.script" +"end.all.scripts" "turn.tty.off" +"turn.tty.on" "kill" >]> "quit" < +CALICO-QUIT> "recurse.to.muddle" "fload" +"continue" "erret" +"top.level" "evaluate" "frames" < +FRAMES> "tailor" "run" ] 2>> + + diff --git a/bin/librm1/calutl.fbin b/bin/librm1/calutl.fbin new file mode 100644 index 00000000..6c8517c9 --- /dev/null +++ b/bin/librm1/calutl.fbin @@ -0,0 +1,49 @@ +' + + + + + + + SSNAM #DECL ("VALUE" ) COMPS SUBSTRUC TTY-OFF SSNAM STRTOX NOTTY? T "NO-TTY" +INCHAN #FALSE () CURXCHAN XFLEVEL READER-SILENCE XFSTACK DSPLEVEL OUTCHAN SPCPRT +() [LVAL GVAL] STR P MONTHS ![31 28 31 30 31 30 31 31 30 31 30 +31!]]>> + +)] 7>> + +]> STRING)] 15>> + +> + + +STRING STRING)] 128>> + + "OPTIONAL" )] 171>> + + +)] 251>> + + + + "OPTIONAL" CHANNEL)] 349>> + +> STRING "OPTIONAL" )] 476>> + + + + ANY +STRUCTURED )] 1070>> + + + + \ No newline at end of file diff --git a/bin/librm1/cca.fbin b/bin/librm1/cca.fbin new file mode 100644 index 00000000..6658437f --- /dev/null +++ b/bin/librm1/cca.fbin @@ -0,0 +1,174 @@ +' + + + + + + + + + + FALSE> (CCA-DATA-CHAN) (CCA-DATA-MODE) FALSE> (CCA-SCRIPT-CHAN) (CCA-ALLOW-SCRIPT?) ANY (CCA-BUFFER CCA-STR RDYMSG SYNMSG) STRING +(CCA-UVCT) UVECTOR> + +> + +> + + + +> + +> + +> + +> + +> + + + + + + CCA-ACTIVATE #DECL ("VALUE" + "OPTIONAL" FIX FIX FIX) COPY-FILE CCA-PRINT CCA-ACTIVATE +CCA-READ ICP CCA-ACT (ACTIVATION) % % CHANNEL +![5 6!] "CHAR" ".J900" T % % +OUTCHAN ![5 8 9!] " +" % " +**RCVD** " % ![-1 0 1 3!] "NET CONNECTION DEAD" "NO CHANNEL" ![ +-1 0 3!] " +**SENT** " "NOT CONNECTED TO DATACOMPUTER" ";I229" "PRINTB" "" "OPEN " "; +" "CLOSE " "LOGIN " % "CONNECTION ALREADY OPEN" "READ" +"READB" "PRINT" "ILLEGAL MODE" "CONNECT " % +"CONNECTION ALREADY SET-UP" FIX "PORT NOT CONNECTED" "NET" +"COULDNT OPEN DATA CHANNEL" CCA-DATA-ACT % +"TIME-OUT, RFC NOT RECEIVED" "FUNNY STATE ENCOUNTERED" +"COULDNT ACCEPT CONNECTION" CCA-DATA-CHAN " = " ".I230" ".I231" ".I240" ".I241" +";I249" ";I239" "BAD 'FROM' CHANNEL ARGUMENT" STRING +"COULDN'T OPEN OUTPUT CHANNEL" % % +"BAD 'TO' CHANNEL ARGUMENT" "COULDN'T OPEN INPUT CHANNEL" "LIST " CHICP () DONE % "ICP timed out" ![0!] % ACTIVATION "INTERRUPT, NET CONNECTION CRASHED" +"INTERRUPT, AUX DATA CHAN CRASHED" INTERRUPT]>> + .GLUE > + + .GLUE > + +)] 68>> + +)] 170>> + + "TUPLE" )] 228>> + +" * CCA-PRINT *" + +> + + STRING)] 902>> + +)] 987>> + + "OPTIONAL" CHANNEL)] 1072>> + +> + +" ** 'SUGARED' FUNCTIONS, PARALLELLING DATALANGUAGE COMMANDS **" + + STRING "OPTIONAL" STRING)] 1199>> + + STRING)] 1301>> + + STRING)] 1380>> + + STRING STRING)] 1469>> + + "OPTIONAL" FIX)] 1664>> + +)] 2031>> + + STRING STRING "OPTIONAL" ANY FIX)] 2066>> + + "OPTIONAL" )] 2224>> + + "OPTIONAL" )] 2554>> + + STRING "OPTIONAL" STRING)] 2815>> + +" * ICP * + +Initiates Initial Connection Protocol with a foreign host" + +> FIX FIX "OPTIONAL" FIX)] 2917>> + +" * NETWORK INTERRUPT HANDLERS *" + + CHANNEL)] 3195>> + +)] 3254>> + +)] 3365>> + + ANY)] 3431>> + + diff --git a/bin/librm1/ccafil.nbin b/bin/librm1/ccafil.nbin new file mode 100644 index 0000000000000000000000000000000000000000..5784d05393367d834d9592533dc8c355d6369897 GIT binary patch literal 15665 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 KR-Ho;_xc|dCnA{u literal 0 HcmV?d00001 diff --git a/bin/librm1/cdm.nbin b/bin/librm1/cdm.nbin new file mode 100644 index 0000000000000000000000000000000000000000..9db293881ee911447501c19304dc38e264fba13c GIT binary patch literal 15795 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 literal 0 HcmV?d00001 diff --git a/bin/librm1/celest.fbin b/bin/librm1/celest.fbin new file mode 100644 index 00000000..87ed2ffd --- /dev/null +++ b/bin/librm1/celest.fbin @@ -0,0 +1,261 @@ +' + + + + + + + + PHASE #DECL ("VALUE" FLOAT +"OPTIONAL" LIST) DATE-DOW TZDIFF DAYS BEFORE? DTSECS DTNORM DTADD DTNOW % % % % T ((1) ()) +((-1) ()) % "GMT" ![279.69667 0.98564732 +0.22669999E-12!] ![281.22082 0.47068389E-4 0.33899999E-12 0.70000000E-19!] ![ +270.43415 13.176396 -0.84999997E-12 0.39000000E-19!] ![350.73748 12.190749 +-0.10759999E-11 0.39000000E-19!] ![334.32955 0.11140406 -0.77390000E-11 +-0.25999999E-18!] ![259.18326 -0.52953922E-1 0.15570000E-11 0.5E-19!] ((75 1 1) +(-4) "EDT") % ((75 1 1) ()) + - TYPE-MISMATCH!-ERRORS INVERT +ERROR-IN-ANGLE!-ERRORS ANGLE-TO-HOURS %]>> + .GLUE > + + + "OPTIONAL" LIST FLOAT FIX)] 46>> + + "OPTIONAL" LIST FLOAT FIX)] 197>> + +> + +> + +> + +> + +> + +> + + +"OPTIONAL" LIST FLOAT)] 948>> + + +"OPTIONAL" LIST FLOAT)] 998>> + + LIST FLOAT FIX)] 1048>> + + "OPTIONAL" LIST)] 1272>> + + LIST +LIST LIST)] 1315>> + +> + +> + +> + +> + +> + + + +>]>> + +> + +> + +)] 1774>> + +> + +> + +> + +> + +> + +> + +> + +> + + + +>> + + FLOAT)] 2141>> + + FLOAT FLOAT FLOAT FLOAT)] 2320>> + + LIST LIST +LIST LIST)] 2426>> + +> + + FLOAT) +] 2552>> + +> + + +)] 2645>> + +> + +)] 2746>> + + +FLOAT)] 2804>> + + )] 2870>> + +)] 2888>> + +> + + +> + +> + +> + +> + +> + + +> + +> + +> + +> + +> + +> + +> + +> + +> + +> + +> + +> + +> + +> + +> + +> + +> + +> + +> + + +> + + +> + +> + +> + +> + + +> + + FIX)] 3926>> + +)] 3953>> + + FIX)] 3983>> + +)] 4021>> + + + + + + + + + +>> 5>> + + diff --git a/bin/librm1/charap.fbin b/bin/librm1/charap.fbin new file mode 100644 index 00000000..b8accae0 --- /dev/null +++ b/bin/librm1/charap.fbin @@ -0,0 +1,19 @@ +' + + + + + + +> + +>> + + + + CHARAPPEND #DECL ("VALUE" < +OR CHANNEL FALSE> FIX ANY "TUPLE" TUPLE) FPRINT "NUL" "NUL:" +"TTY:" OUTCHAN #FALSE () ["PRINT" "PRINTO"] "READ" "PRINTO" "PRINT" CR FF]>> + + diff --git a/bin/librm1/chkadr.fbin b/bin/librm1/chkadr.fbin new file mode 100644 index 00000000..3df9d9f0 --- /dev/null +++ b/bin/librm1/chkadr.fbin @@ -0,0 +1,66 @@ +' + + + + + + + + + + CHECK-ADDRESSEES # +DECL ("VALUE" LIST "OPTIONAL" ) LAST-NAME +LSR-EXTRACT LSR-ENTRY HOST VCTSRC UPPERCASE ("COMEXP") OUTCHAN " -- " ", " T +"Okay." "Illegal addressee." RECURSION-DEPTH-EXCESSIVE S-EXP % " -- Data base is not in proper format." " -- Data base not found: " " " + % "COMKEY" #FALSE ("Empty Addressee Name") #FALSE ( +"Empty Addressee in Forwarding Address") #FALSE ("Invalid Host Address") % ".FILE." "(DIR)" "DSK" % #FALSE ( +"Invalid Local Addressee") "UNKNOWN" #FALSE ("Addressee was UNKNOWN") "BUG-" %< +RGLOC NOBOX T> "Ambiguous Last Name" "Ambiguous Local Name" ":; []{}" OBLIST +"READB" ">" "COMDAT"]>> + .GLUE > + + +\ + +"UC? -- given string, returns new string of all upper-case, only + if original had lower case somewhere" + +\ + +"utilities for use with user specifications, addressees, etc." + +> + +> + +"EXTRACT-HOST -- given string usr@host, returns fix, host number, or + string, if host unknown in tables. for simple usr type key, returns + ,HOSTNUMBER" + +"EXTRACT-RCVR -- given usr key, returns user string (i.e. all but @host)" + + 30>> + + + +\ + + + + + +> + +\ + +"UNIQUIFY -- given list of strings and atoms, returns same + list with duplicates removed." + +"FILE? -- given string, returns string of file spec if a file addressee" + +\ + + diff --git a/bin/librm1/clock.nbin b/bin/librm1/clock.nbin new file mode 100644 index 0000000000000000000000000000000000000000..709978d32232ecde07d01f334e85d9590f2d3567 GIT binary patch literal 6810 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 literal 0 HcmV?d00001 diff --git a/bin/librm1/coder.nbin b/bin/librm1/coder.nbin new file mode 100644 index 0000000000000000000000000000000000000000..20dce35b8ff94734a86ba152fec258b08fc5ba15 GIT binary patch literal 5661 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≻Z>!G8*f5LLAn_jiQkw%Al4wc{T)*qh?q_PyRdGjt4r!_%kz5m z94N31=)M?bTZVQp&c_}XhRCGw&^^hN(KCT-E?JQz0(vB zi=c}rEBXgU<=fJ--*}7wMfwd(<&aP{|Xa=rPg!%RH@}<#@ry1)5Z3(Pf?2*?v+2REuNE zN&~?I&pM*1>#;tQ zOy`%l&qdsWnP}j}c|*A6?7+n4AU*zi7)oa!%oW)C)F!giEfxG{Ch_)KIzM%-p<5-X f3q6M)ea8_^S%3d)7iq+2UB7+nT>pcUxL*GUswhh4 literal 0 HcmV?d00001 diff --git a/bin/librm1/column.nbin b/bin/librm1/column.nbin new file mode 100644 index 0000000000000000000000000000000000000000..c5abc1e4455e689bb7ca78b63a4b08f472ce90a3 GIT binary patch literal 2241 zcmb7`Z%k8H6u?hgXzQO!Q9ugn9!Mr?1zanF8rN5-N(KXD8bw_}P^#iUQL99p3(1NC z5rSsx)KQs+5haSioLOf4pp#@wal>im2RAc^Gh{9EzSq7YuzPP?o|^5$-iMoe&$;KG zbI(2J*ABIOo>T4F{p+n-q&#!S?(HneGr4=@N27A zc8wis`S|Do@2>4DSx?0uE1HDH92pDvo2gA+1;Evx1qqo+$V{f4WdYfIkROyL=I;m4 zCYM7HSN}Ck;OZ}qjnDzo75Wga{xC5EV%7x<$(Bi6eRZiqn`{9MF_ROSinCRJT*W^H z$l@FzDM4^?Okje{&Z)I2ePSrY_bV8VX^HV-MpJ76f);W*3-8&uNH+pTiqnweZ*7? zKj*Nghv$*}pV)f46)C^OihH3v zSV))t+G1`WK_Sdft-`_q(-HU6*}dmI7aJ0e2`4r?4tT@2GwTDjwbJhG$ceea53bV} z@!E%u4Se0H&I&#u`f?#sMW^oKdpBM!0Gb+is}V)%2kxRsYccEnd$Wlh z_3qwcLNb#o+I_c!`F4;NA{2+hU&4ggjfr%TH6hf z&<1dU9#muqB}25oA1shdsxEgvSYX;~GOC~h0$Hg9sS|M#Gq{`?gV`n;5D{)Pg+e#J zZJ5Y3c$@RkxJ)!1uk~C~(i3n`)qIE~HK2J@jt!`m^rMWlT`+A$vE#&;#2K*&C(Ys< zpN)wYjMQvnjOzfHAUyC#^ze@87W@A8dvQsdmG&s~kpMPgAS6W)`0L6>OXE+`Op@DO>y6 z1l<5@N2_LMbfD0)5Ax8|lJr{PUPOO0n)a;UCa6o8l|JH540D(~O#>zq3QusbBn(P9 z5u(8~G)m2#1^^udr$D?5euu>_=pqoUgEs(IDtJDbTbEJ3F9|}Zg)w99-jZF4{g44l z0~lNq3z#5C{W@ajx?s=`$8pZ)fvmvyYXZiMl=o+jy0y^ck_JJV@8kf0@p;&~%@5!y3BJvwGckKUj;^kVu#50TiF1%m0DmH7AAsz5t3#A0`*^^)vJ= zpLuFw8K3nF1#ohOd$PT|jJHH~?BMG+Vo+=I7j5G|&?N12E2Fv#`S$f+vHXGuS1R1v z$kc7__=t`&et}(A$Y0QOv)qLZ9YuWB41AupA&KR)?06PWs9qZ7D08bm)9*lw&C7j% PK0KW*{{Jk?nTh`ZPq|Uj literal 0 HcmV?d00001 diff --git a/bin/librm1/comand.fbin b/bin/librm1/comand.fbin new file mode 100644 index 00000000..21a1a8a8 --- /dev/null +++ b/bin/librm1/comand.fbin @@ -0,0 +1,30 @@ +' + + + + + + + CONFIRM #DECL ("VALUE" ) READARGS READER % "Confirm" [ +" +Please confirm the command by typing either T, True, Y, or Yes" ""] "SYM" T # +FALSE () [] EVALSW (FIX) SEGSW SYMSW HACKMULTSW READER-SILENCE OUTCHAN +"DON'T-EVAL" "GIVE-SYMBOLS" "HACK-MULTS" "INPUT" "SEGMENT-INPUT" "SEGMENT-EACH" +% % () "MULT" % +A "PRINT-RESULT"]>> + .GLUE > + +> + +)] 42>> + + .GLUE > + + diff --git a/bin/librm1/commud.bin b/bin/librm1/commud.bin new file mode 100644 index 00000000..21946cb8 --- /dev/null +++ b/bin/librm1/commud.bin @@ -0,0 +1,24 @@ +' + + + + + + + + + + COMMUD #DECL ("VALUE" STRING) OPENF JOB (FIX) "More than 1 COMMUD?" % "INFERIOR" +% WAIT (ACTIVATION) % T "COMMUD" "PRINTB" "USR" %< +RGLOC SNM T> #FALSE ("MODE NOT AVAILABLE") "READB" CORBLK-FAILED!-ERRORS +LOAD-FAILED!-ERRORS]>> + .GLUE > + + +> + +> + + diff --git a/bin/librm1/complx.fbin b/bin/librm1/complx.fbin new file mode 100644 index 00000000..32770cc6 --- /dev/null +++ b/bin/librm1/complx.fbin @@ -0,0 +1,213 @@ +' + + + + + +"COMPLEX NUMBERS, IN POLAR OR RECTANGULAR FORMAT + +EL1 -- ATOM, POLAR OR RECTANGULAR +EL2 -- FIX/FLOAT, REAL PART IF RECTANGULAR, MAGN, IF POLAR +EL3 -- FIX/FLOAT, IMAG PART IF RECTANGULAR, PHASE, IF POLAR +" + + ATOM [2 ]>> + + ATOM [2 >]>> + + RCPX #DECL ("VALUE" FORM +"QUOTE" ANY "QUOTE" ANY) CHTYPE VECTOR RECTANGULAR CPX]>)> + + PCPX #DECL ("VALUE" FORM +"QUOTE" ANY "QUOTE" ANY) CHTYPE VECTOR POLAR CPX]>)> + +"ARRAY OF COMPLEX NUMBERS, COMPACTED + +EL1 -- ATOM, POLAR OR RECTANGULAR +EL2 -- REAL ARRAY IF RECTANGULAR, MAGN ARRAY IF POLAR +EL3 -- IMAG ARRAY IF RECTANGULAR, PHASE ARRAY IF POLAR +" + + RUCPX #DECL ("VALUE" UCPX +"TUPLE" TUPLE) RECTANGULAR INVALID-ARGS RUCPX % POLAR PUCPX +% % % #FALSE () UCPX +UNKNOWN-COMPLEX-TYPE FL UVECTOR UNKNOWN-TYPE-OF-COMPLEX REAL IMAG CPX FLOAT T C+ + C- MAGN PHASE C* C/ ATTEMPT-TO-USE-IMAGINARY-POWER C** FIX XY RT]>> + .GLUE > + + +> + +\ + + < +OR CPX UCPX>)] 226>> + + CSET #DECL ("VALUE" +FORM "QUOTE" ANY "QUOTE" ANY) PROG () PUT]>)> + +"C+ -- ADDS COMPLEX QUANTITIES. ALWAYS RETURNS FIRST QUANTITY + GIVEN, CHANGED TO CONTAIN THE SUM OF ALL ARGS + IF FIRST ARG IS UCPX, WILL PERFORM ELEMENT-BY-ELEMENT SUM WITH + OTHER UCPX'S IN ARG TUPLE, AND ADD VALUES OF ANY SINGLE COMPLEX + QUANTITIES TO EACH ELEMENT OF FIRST ARG. + " + + ATOM +> >>> "TUPLE" TUPLE)] 281>> + +\ + + ATOM +> >>> "TUPLE" TUPLE)] 1174>> + +\ + + ATOM +> >>> "TUPLE" TUPLE)] 2352>> + +\ + + ATOM +> >>> "TUPLE" TUPLE)] 3477>> + +\ + + +ATOM > >>> "TUPLE" TUPLE)] 4798>> + +\ + + REAL #DECL ("VALUE" +FORM "QUOTE" ANY) COND ==? RECTANGULAR POLAR TYPE? UVECTOR XY ELSE RPRT ERROR +UNKNOWN-TYPE-OF-COMPLEX REAL]>)> + + IMAG #DECL ("VALUE" +FORM "QUOTE" ANY) COND ==? RECTANGULAR POLAR TYPE? UVECTOR XY ELSE IMRT ERROR +UNKNOWN-TYPE-OF-COMPLEX IMAG]>)> + + MAGN #DECL ("VALUE" +FORM "QUOTE" ANY) COND ==? POLAR RECTANGULAR TYPE? UVECTOR RT ELSE MGXY ERROR +UNKNOWN-TYPE-OF-COMPLEX MAGN]>)> + + PHASE #DECL ("VALUE" +FORM "QUOTE" ANY) COND ==? POLAR RECTANGULAR TYPE? UVECTOR RT ELSE PHXY ERROR +UNKNOWN-TYPE-OF-COMPLEX PHASE]>)> + + MGXY #DECL ("VALUE" +FORM "QUOTE" ANY "QUOTE" ANY) COND TYPE? FIX SQRT + * FLOAT ELSE]>)> + + PHXY #DECL ("VALUE" +FORM "QUOTE" ANY "QUOTE" ANY) + COND L? ELSE TYPE? FIX 0? * / ABS ATAN FLOAT =? +]>)> + + RPRT #DECL ("VALUE" +FORM "QUOTE" ANY "QUOTE" ANY) COND TYPE? FIX * FLOAT COS ELSE]>)> + + IMRT #DECL ("VALUE" +FORM "QUOTE" ANY "QUOTE" ANY) COND TYPE? FIX * FLOAT SIN ELSE]>)> + +\ + + UVFIX #DECL ("VALUE" +FORM "QUOTE" ANY) COND ==? UTYPE FIX ELSE MAPR #FALSE () FUNCTION E #DECL ((E) < +PRIMTYPE UVECTOR>) PUT LVAL + CHTYPE FLOAT CHUTYPE]>)> + + UVFLOAT #DECL ( +"VALUE" FORM "QUOTE" ANY) COND ==? UTYPE FLOAT ELSE MAPR #FALSE () FUNCTION E # +DECL ((E) ) PUT LVAL CHTYPE FIX CHUTYPE]>)> + + VFLOAT #DECL ( +"VALUE" FORM "QUOTE" ANY) MAPR #FALSE () FUNCTION E #DECL ((E) +) PUT LVAL FLOAT]>)> + + VFIX #DECL ("VALUE" +FORM "QUOTE" ANY) MAPR #FALSE () FUNCTION E #DECL ((E) ) PUT +LVAL FIX +]>)> + +\ + + FIXIFY #DECL ( +"VALUE" FORM "QUOTE" ANY) FIX +]>)> + +\ + + ANY)] 6475>> + +\ + + ANY)] 6979> +> + + .GLUE > + +\ + + FX #DECL ("VALUE" FORM +"QUOTE" ANY) COND TYPE? CPX VFIX REST UCPX UVFIX ELSE ERROR UNKNOWN-COMPLEX-TYPE + FX]>)> + + FL #DECL ("VALUE" FORM +"QUOTE" ANY) COND TYPE? CPX VFLOAT REST UCPX UVFLOAT ELSE ERROR +UNKNOWN-COMPLEX-TYPE FL]>)> + + ** #DECL ("VALUE" FORM +"QUOTE" ANY "QUOTE" ANY) COND 0? 1? ELSE EXP * LOG]>)> + + diff --git a/bin/librm1/confir.nbin b/bin/librm1/confir.nbin new file mode 100644 index 0000000000000000000000000000000000000000..d51b10d015f456c07416c8a362335419642bb228 GIT binary patch literal 577 zcmeykXkI|`kD>?1yT5QOJU{oxrA%Mf?w?Y#J*>3_242)kBOc*2;mzw`oiFfa&!2o44&USGy^UZ5%v;9y|TfLa9DAC09tSE z;+Ucz@PAGQgDluNKi-@s6aC!Mp!{@G@-(M)7S^Z=E1ik*BQr& z-~jiTzcvOaZvUnuy(RIRkL1?GFFZ4L7Jt`?*^u~6cY;ywH=igA=ilq+D@cEIcD3pL Qc~Qf${bxb)(OLyA0RBnvXaE2J literal 0 HcmV?d00001 diff --git a/bin/librm1/cpyfil.fbin b/bin/librm1/cpyfil.fbin new file mode 100644 index 00000000..04011997 --- /dev/null +++ b/bin/librm1/cpyfil.fbin @@ -0,0 +1,14 @@ +' + + + + + COPY-FILE #DECL ("VALUE" +ATOM "OPTIONAL" UVECTOR) ![0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0!] "READB" CANT-OPEN!-ERRORS ARG-WRONG-TYPE!-ERRORS "PRINTB" +CANT-READ-LENGTH!-ERRORS T]>> + + diff --git a/bin/librm1/crime.nbin b/bin/librm1/crime.nbin new file mode 100644 index 0000000000000000000000000000000000000000..ed97d763f351b336e51cf801cb1430839b3e4493 GIT binary patch literal 7033 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 Ml|Chx+tE+|1JIb55C8xG literal 0 HcmV?d00001 diff --git a/bin/librm1/critic.fbin b/bin/librm1/critic.fbin new file mode 100644 index 00000000..4e64a281 --- /dev/null +++ b/bin/librm1/critic.fbin @@ -0,0 +1,177 @@ +' + + + + + +> >> > >>> + + [3 ]>] [2 ]>] ATOM STRING LIST>> + + < +SETG OBJECT-OBLISTS 5> < +SETG OBJECT-NAME 9> > + + + + < +SETG NARGS 6> > + + + + > + + + + > + + + +> + + > + + + +\ + + + + (OUTCHAN) +(OBLIST) ]>>)> + + + + + + > > + + (KNOWN-DECLS) DECL (DECLS-SEEN) LIST (QUOTING-SUBRS) < +VECTOR [REST SUBR FIX]> (INT-SUBRS) ( +CONTROL-STRUCTURES SETG-DEFINE APPLY-MAPF-MAPR) ]> +(FUNNY-FSUBRS) (PRINTING-SUBRS OPEN-SUBRS LVAL-LLOC +GVAL-GLOC MAPF-MAPR) (DEFINE-DEFMAC PACKAGE-RPACKAGE +BLOCK-ENDBLOCK USE-USE-DEFER) > + +\ + + CRITIC #DECL ("VALUE" ATOM "OPTIONAL" ANY) INDENT-TO MANIFEST? +OUTCHAN (CHANNEL) NM2 "CRITIC" (STRING) "PRINT" % NM? Group +() OFFS (FIX) OBLIST () % +"====== CRITIC's Review of Group: " CHANNEL " from file \"" " ======" "DONE" # +FALSE ("NOT A GROUP") T (ANY) ["Called-by" "Calls" "SETG" "GVAL" "SET" "LVAL" +"SPECIAL" "USE" "USE-DATUM"] " " ": " "Packages USEd but not referenced: " +"Internal Functions never called" DEFINE "Internal Globals never used" +"Internal Manifests never used" % ARGS % " is unused or should be SPECIAL." "Arguments unused" "Unused" +"Unused SPECIALs" "SPECIALs never used as SPECIALs" " in " ": " " (" ")" "." +", " FAMILY (FAMILY) % TREE () STUMP (LIST) TOP-FCNS () TOP-GLOBALS TOP-LOCALS +OBJECT-OBLISTS INITIAL ENTRIES USED-PACK () USED-DATUM +OBJECT-NAME (ATOM) OBJECT-TYPE "FILE" NEWTYPES NOTES +"ENTRYs not bound, assumed locals" % % "PACKAGE" PACKAGE % % % % ![LIST VECTOR UVECTOR TUPLE!] +"NEWTYPE not DECLed" % "FLOAD in file" % +"BLOCK or ENDBLOCK at top level in PACKAGE." % % +VALUE % % % ABST (VECTOR) +FTREE FATHER-NAME () +"External locals set" "External locals used" PP (]>) +PS % % QUOTE "ATOM " +" used twice in parameter list." UNSPECIAL SPECIAL % +"Untasteful re-use of ATOM " " in ROOT." "No DECL in DECL for" "Illegal DECL" ![ +ANY LOCATIVE STRUCTURED APPLICABLE!] "Not a legal type" DECL +"Type-name not a type: " "FORM/SEGMENT too short" ![SPECIAL UNSPECIAL!] +"SPECIAL/UNSPECIAL with three or more elements" PRIMTYPE "Bad PRIMTYPE type" +"PRIMTYPE with three or more elements" OR "Bad type of structured type" BYTES +"BYTES DECL too short" "BYTES DECL too long" "Bad BYTES specification" +"REST must terminate DECL" "VECTOR in OR specification" "Nth/REST/OPT too short" + ![REST OPT!] "Only REST or OPT may follow OPT" REST OPT NO-DECL MANIFEST +": MANIFESTed structure" % "Calls undefined function " +"Calls " " with too few arguments." " with too many arguments." % B? D? AUNB " but unbound and unDECLed" " but unbound" " but unDECLed" +" unbound in paths" "The ATOM " " used in " " should be special in " +"External FUNCTION " % % % % DEV SNM NM1 % %< +RGLOC EVAL-OR-APPLY T> FUNCTION % "Possibly should be QUOTEd" +% % % % % % ![SUBR FSUBR!] % (0 0) ![RSUBR-ENTRY RSUBR!] "RSUBR has no DECL." #DECL ("VALUE" ANY +"TUPLE" TUPLE) "FUNCTION has no DECL." "VALUE" PUN "Parameters not DECLed" +"BIND" "\"BIND\" illegally located." ["NAME" "ACT"] ["CALL" "ARGS"] +"\"CALL\"/\"ARGS\" illegally located." ["OPTIONAL" "OPT"] "OPTIONAL" +"\"OPTIONAL\" illegally located." "TUPLE" TUPLE "\"TUPLE\" illegally located." [ +"AUX" "EXTRA"] "\"AUX\" Illegally QUOTEd" ANY]>> + .GLUE > + + + ATOM "OPTIONAL" )] 315>> + +\ + +\ + +\ + +\ + +\ + +\ + +\ + +\ + +\ + +\ + +\ + +\ + +\ + +\ + +\ + +"Make a father and add it to the list of sons of a node" + +\ + +\ + +\ + +> (STUFF . +STUFF)> #DECL ((A) LIST) (.STUFF)) (ELSE < +PUTREST 1>> (.STUFF)> .A)>>>> + + diff --git a/bin/librm2/datime.fbin b/bin/librm2/datime.fbin new file mode 100644 index 00000000..e8733fa2 --- /dev/null +++ b/bin/librm2/datime.fbin @@ -0,0 +1,32 @@ +' + + + + + + DATE #DECL ("VALUE" "OPTIONAL" )]>> + .GLUE > + + + RTIME #DECL ("VALUE" "OPTIONAL" )]>> + .GLUE > + + + RTIME:SEC #DECL ("VALUE" +FIX)]>> + .GLUE > + + + GETTIMEZONE #DECL ( +"VALUE" STRING) "EDT" "EST"]>> + .GLUE > + + + FIX-DATE #DECL ("VALUE" +FIX)]>> + .GLUE > + + + diff --git a/bin/librm2/datred.nbin b/bin/librm2/datred.nbin new file mode 100644 index 0000000000000000000000000000000000000000..1059a954e28116525afb8c4be316fc6259a9ccea GIT binary patch literal 2308 zcma)7YfO_@7=FJN+RoXu^@;*=fNm5;Ec6BwE2Vs;g+e<@9SRzXDHMZH3f|^4ONc`! zM3@*gX44rAAX&C4Zpqvamo1r2vk`TfZdvq)S&VV4&ada^NQK1#vBtyW>TEXYFt}0C7 z&nHJF`rM+fWCA6=^PL~06PSTO4)F|ygBh_1S25x$g@xFLimVXFNM!Ju|H=?h%6b

6sfe$*@fhiII++vCxaRoFY@Ep}NH( zgE;ow!12s(Q`_qafFBvJl3ZOyVfac1ERA}LkAuq^4!aj7XMU#U{&Dv?^HQmB#IKY!EL+w(OjSDmL+sFV|*_5QgJ zSD%-r_c$FLPSoPug<9*kIk$G8sV!E=-%gLCu_=6a%yP0gqa8V$JK9m}PNxU$3a`D; z`VVStKrTmf!|L{?cb%xhZ|oH=o>yR_Lw#emQx;2=5i$42qF=!Bzl2}_b4Hqm2i$# zXD)lZxZujjTJIkJ@ppFT3`(u--m8OhQ%=rEzvkiY*?<%qt@UP%|D0!t+_n5q#gfLbjo zu!Z{1e?L6OXD|o7+qC;gTqYty5L6D|zD#lg>{pv!?{E^BZ<4G zwU56aWVRIBJHZ9-nDHXt)Xo0dMErhQ>hQ=sN z+P2_5w+w-Sg@MZ2-|s~#u0Y>3RQ+_%Q)+}#7S71>F&4h6ESF;`3<}b3jL;~xM$QN~ ze$}Rt=jY@pksRe}6dI+%FT9JI6mo?^rOKD*p^5H0a%YZQsmMjSIm$dmZmvq9RHD@i ntl9aR33KfQ2a>05*7~pVK1>uA&=tj2oxV(0LgS9OD7)l8#F(G1 literal 0 HcmV?d00001 diff --git a/bin/librm2/datsav.nbin b/bin/librm2/datsav.nbin new file mode 100644 index 0000000000000000000000000000000000000000..5e9a72552fc15808fb75acc922fcd17dfa52b51b GIT binary patch literal 2176 zcmbuBdrVVT7{I^sY88Q^z^M4RP?G{yv1{#c8snvOz!a${26Pe8DKBwF!-QlmEX`IG zD&1t+2x2SKNW%=M_*k~M8D+9W#ceRNS7u05T%4A8dwcIi+MRP+s5qA`@&0jgzx$n6 z@A-Yd+mZGo1{1gI_SFVP(oQ?L`Q?{Rave4*VMM22*1!*@6w!jQQooV2R?xJtrhLFA ztXY4>Bv=i3okDZ!07>j+g7p!x?&hI^CMM?gPYte9)PRYZa>-6R0ib|^dYGcrW&^k^ z$3Wz|(gV3{V-JW%IY1$pyk1vd4}`nSS5UY)xV`|O48m|DPTNq6hHchBEV)x^%RoUI zDyZ13oFi7PXQW+TFO^vcpwt>6*k!o@Vwa`MJ4PDF6u%npvebh}sYQ#i!vMK1JBTV7 zz{5h&FxH`gm3V9j9y`TlF&V@C>lh&vKSQAr!th-L&MNTCkEtZQd9&%5B``hihZes8 zQB+9rqdK&|$f!W}c_SD}J=*i+StizS;SoXq$d3OuXLRu4qj)b~(m182uhSSn`@@UB z>$=kedGkTM(g+|05jqHbErMVG35fBtu#wZ(`$v7xahK5@(zPbxd*AWO_jBEMsWnW2 z{aPp2VO?euvZ(rlAw>Cx?YVg7J*P+mvq`9nn^&-64_e@%FPmT3+3)$b8)o>j(^n z+MmxuRkGRf-6ibxmNO;p2&uZ9U0tLtXAdT5XjUTARG`J4OsLW!spTqI;!W_y8hhBV5AQ<#;@k~($d99d8 zOkaM3P^0+4uMf$P-pucdNjk}?Q+xG{v=o_W9J1qF_m&L(Xor*{EJX%bs#^{aO(rEQ z?b%i9KX#p{CToQ!Rthqb)hRS$-R@1b5Kh7gMi4{j;>H>ABZH|L`vxF_WG9gEL7^LG zB#31HHzQBWG^<58Wk@{FDvQolu_s$KCCs#qr`~ceOjxpwJt%#-ie0rKT{qh0_wotu ztlVxB&L$T)0;I+I{H0Piz)WozlCPkyhljGLjQF9lZJ;-NIz23>@dxpE+nD z2FXs?rxM_3I*Kvpfr}kVwJ_KqGxqt^H$V zzvt?r7jqi#sxWj44O`Hkgk)^I4(YF@Y*nkOl)YYrT(zS$y@a*QqRQFE!>3Ew1@Y-L no7(y8an01_PdL@kMSAMrA%j(a literal 0 HcmV?d00001 diff --git a/bin/librm2/db.fbin b/bin/librm2/db.fbin new file mode 100644 index 00000000..465e7a61 --- /dev/null +++ b/bin/librm2/db.fbin @@ -0,0 +1,47 @@ +' + + + + + + + + DBCOPY #DECL ("VALUE" STRING "OPTIONAL" ) SDMOPN SOFT-LOCK LOCKED? SDMDCT +TEMPDELETE SDMACT COPY-FILE TEMPFILE UNLOCK HARD-LOCK FILSTR % +"READ" "DATA" "-UPDATER" #FALSE ("SOMEONE ELSE UPDATING") #FALSE ( +"CANNOT-LOCK-DATA-BASE") "OLD" TO T #FALSE ("CANNOT-READ-DATA-BASE") "PRINTB" +"READB" #FALSE ("CANNOT-OPEN-DATA-BASE") CXOUT (CHANNEL) CXIN COPIER (ACTIVATION +) IOCHND IOC!-INTERRUPTS "IOC" % ANONF5!-TMP # +DECL ("VALUE" ANY FALSE CHANNEL) CXIN CXOUT COPIER]> % ERRHND +ERROR!-INTERRUPTS "ERROR" % ANONF15!-TMP #DECL +("VALUE" ANY "TUPLE" TUPLE) #FALSE ("ERROR DURING COPY") COPIER]> % % % OLDNAME ORIGINAL FILENAME TEMPNAME UPDATELOCK +TENEX-SYSTEM-UNIMPLEMENTED % LOCKNAME LOCKWORD #FALSE ( +"DATA BASE IN USE") RENAME-OF-DATA-BASE-FAILED DBREPLACE +RENAME-OF-COPY-DATA-BASE-FAILED DELETE-OF-OLD-DATA-BASE-FAILED INTERRUPT]>> + .GLUE > + + +\ + + +PMCHAN "OPTIONAL" FIX FIX)] 454>> + +\ + + +STRING)] 663>> + + +PMCHAN)] 786>> + +\ + +> + + >> + + diff --git a/bin/librm2/dcreat.nbin b/bin/librm2/dcreat.nbin new file mode 100644 index 0000000000000000000000000000000000000000..f37e91a46debf9e0f74dcdbe10e0cedd3167cb42 GIT binary patch literal 2828 zcma)8e^8U>9sj;b2w{*j0YMznJ&jaE`6&@`S36!H4tmlAX)VH>LCPgSmEg2MPuJ|y zHl-nzRz0DvJxa?-q#RhOW!GL;r>x#p8Ctj9*7drsSAWcP#`?T3Z$c&eK5sDKuD9Fs z$8*o~e1CtR@ALUSxB6eVxTM{G|JXw{{Urm^Xp_k_eNO#i$}O{D(ihxfDLp9dO*$hJ z_`t>H;m$zrKdbgrrAeDOeYkOgr&T*jUBT{3VhUDeoJD3mF$G2&CTgX_%?6%U+DdDK zhx#W>sGj#ps~b-bOM~5pV*z@+`mUjj37>S$Q0@+T>MnVtwT3>k->xG(;OL;>gqX~N zG62E*7I4||c4!s5#(RSfw0aSM9irK!7Q8N}Uhs~=S2;E9 z0GS1L*qvDbpr&eoSV90)nfFC+G!vEW<}U@e>)hjl*9jbB!N~#9f_EGiF)gvO7V#QD zMHYIs`P*wo_*&EfB&3OE9cP{d>b`KS&R zP~9kKNhz~|aj1mqF-T{2y^+XeH#!*=qeP#Xe|vI^FePFxI>~a7#U#Qk!U4PmqGFMA z&!Tz^Kk?r1l`MP(Q-3`YWt$u&^Il0gmy^TWQl-ja{f~$usf&cblE|?na?GKQ`D6>; zQFhaefU8)xQWFDa2n}t(%5gF(Zhs8zm?4&kYz5Yz(O`#c;RvH5AEDrKCNRw&w$hU{ zz$npp49i~>1-4=Z!ZNg%B}dPgznoVO#STz153taYk8M@=Zljp-Xk)P*swsyKF+;K8 zoRVl$9A4<<%7{bg_}#jnx53UZ$}zYRS$)NvjABkIp)5Mb#;&Y}s2mVOxp7EfX^LW( zqNFg6RriroF+({OW>UefF$Tj&yYGHJZ{z#;$O?4#d-#^f`Z5bpmEe^tVjPzK*BMcS z-{niU=WVdOM6om}*+nVkiy~^|!&RA)rTD2xioX!NCqpxt1xyRB?%>J|r49rJmVXLJ z3_pFV^7&5zuCe3#%UD=}5*;djtNd3I^!J zH+?Stg8}Jw`Waq2*7!ELw{&(Nd{Y(TAuaul}~N6!#0RR3@gdp6~jZ01!^JI0re1P z0Wek7EH9e0`70C3N#f6)BIEPVl< zLDYh#FpK%*x2cX23#^@!*rZ6Ey{Uqq__@W<5*FLIukFFvWoIGJkAd+JwGu#jH1E|f zLXUp{%Vn0*`*Sv#nNsX4IHa}@PyWi!86j2P7MGI*TSrtO#D=LyGP=s!8y$csi$nTX z&v$>G#f28QYDn^P`=AjtMPTwP_Q8N(@fHlpd?oRlQqmlC4t)A-%(Y)K*-00XPmcxi zu9`ZhuPr}6B#m@uAHeeI>j)+`k*(4zb(d?UJ^iPB(jcP_>OQlHJCEks#0$$vy*T{0 zcN@eDQ+cgo#nw~xVrKGsUhMj8O`Z5n}9t$C+jyzuM3M)8rFQJXlqwU8IHddC}S zT+jMe@!!>JdC|M{giXx)89O_=zFB-bxuB88R=-z|)WQbwn`B}WH}$;JAP%RTLfOCM zwTS0yf72jpl1Z~zv2?Tn#nzx3-JkEDi%9PC>86pnDo$|mthhGFEq?79JE-Ox?7ba7 z#fa1e9iJi`BdCmlR_^$6cNY#gWuW=}GYsX{$kq*S59rn zNwUK-iUvbOgZi>Hc1RIlG$PPp^H655NCsskP9S`ZTMVTxX#ol`JPL)r1MRItSDt-N zt_+4V90JQDp5Tog_>K=vE$@^@uaHXmSRX5ZZvM5ImHJ1Af(ZtMn8T~4dZodvOP=6f z9q$X=-i08dNBj^*ubW)Kmo0a-ykeVl;YY97C3%?A@OD?9d^t;)-IP-Pi5$zmcq@co zzO?;j;m1!aF>=|fNSP-BXF;#okX}mLUE6MJM~B&vD||M&eePjI9+d((vfxoEfx~S4 zzx5yajq=j%RrnDt_-lTh7}qm~wK-*M6o+3e#LBHMXc4uwr*?{6x?Em(n^okKmPkb! RCOd<=x=&ovt?eX5`ya=m_Rs(T literal 0 HcmV?d00001 diff --git a/bin/librm2/ddm.fbin b/bin/librm2/ddm.fbin new file mode 100644 index 00000000..680cf367 --- /dev/null +++ b/bin/librm2/ddm.fbin @@ -0,0 +1,315 @@ +' + + + + + + + + + + + + + + + + + +"DDM ==> Direct Data Manager/Disk Data Manager + +ASSUMPTIONS: + 1) Object Computer is a DEC PDP10 + 2) Operating System is either TENEX or TOPS-20. (Not ITS!) + 2a) Data File is 'holey', i.e., its pages may be non-contiguous. + 2b) Page size is 512 words. + 2c) Page numbers from 0 to (2**18)-1 are legal. + 3) Data file 'belongs' to a single process/user, no locking, unlocking, + communication, or shared data protocols are supported. + 4) All disk access are carried out by mapping pages of the data file + into core and modifying the mapped page. No direct/random access + of the data file is used. + 5) The size of a data item (# of words needed to store it) must be known + before the data item is written." + + + + + + + +"**************** OFFSETS ON 'DDMCHAN' TYPE *********************" + + + + + + + + + + + + + + + + FIX FIX>> + + 0 0> DDMCHAN>> + +"Offsets on page-map triads" + + + + + + + + + + + +"Offsets on request UVECTOR quads" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +> + +>> + + + +"Fixed offsets and sizes for allocator and item locking tables" + + + +"Page allocations for allocator tbl and item locking tbl" + + + + + +> + + + +> + +> + +>> + +"Offsets on allocator table pages (including page zero)" + + + +>> + + + +>> + + + +>> + + + +>> + +"Offsets on item locking pages for assigning item id's" + + + +>> + + + +>> + +"Offsets on item locking pages for allocating/deallocating item locks" + + + +>> + + + +>> + + + +>> + + + +>> + + <* , +MINLOCKOFS> ,LOCKSIZ> ,LOCKSIZ>>> + + + +"Random Gval's" + + (LOCKUV UNLOCKUV) (IDUV +UV2) (UV1) > + +> + +> + +> + +> + +> + +> + + DDMOPEN #DECL ("VALUE" "OPTIONAL" FIX FIX DDMCHAN) TRANSFER LOCATION +RELEASE-SPACE WRITE-PAGE FIND-SPACE RELEASE-LOCK GET-LOCK APRINT ALENGTH AREAD +CLOSE-FILE RELEASE-PAGE RELEASE-FILE PMAP-FILE FIND-PAGE NAME-OF-FILE OPEN-FILE +GET-FILE % % % %< +RGLOC LRUCOUNT T> % T % +ALLOCATOR-TABLE-TOO-BIG!-ERRORS % % % % % % %< +RGLOC UNLOCKUV T> ID-IS-TOO-LARGE!-ERRORS GET-ITEM PUT-ITEM %]>> + .GLUE > + + +> + +> + + SPACE "OPTIONAL" FIX )] 571>> + + DDMCHAN SPACE ANY "OPTIONAL" )] 669>> + + +DDMCHAN )] 792>> + + +DDMCHAN FIX "OPTIONAL" FIX FIX)] 915>> + + +DDMCHAN FIX "OPTIONAL" FIX )] 1231>> + + +DDMCHAN WORD)] 1305>> + + DDMCHAN)] 1492>> + + ]>> DDMCHAN ]>> "OPTIONAL" FIX FIX)] 1578>> + + DDMCHAN ]> +> "OPTIONAL" FIX )] 1703>> + + +DDMCHAN)] 1856>> + + DDMCHAN FIX)] 1976>> + + +DDMCHAN FIX)] 2065>> + + +DDMCHAN FIX FIX)] 2102>> + +"******************** PRIMITIVE FILE/DATA UTILITIES ********************" + + DDMCHAN FIX FIX FIX )] 2143>> + + ]>> DDMCHAN WORD )] 2240>> + +> DDMCHAN FIX)] 2390>> + +> DDMCHAN FIX )] 2435>> + + ]>> DDMCHAN ]>> FIX "OPTIONAL" ) +] 2478>> + + ]>> DDMCHAN ]>> FIX)] 2634>> + + DDMCHAN)] 2662>> + + ]>> FIX FIX < +UVECTOR [REST FIX]>)] 2750>> + + +"OPTIONAL" FIX)] 2869>> + + diff --git a/bin/librm2/ddma.fbin b/bin/librm2/ddma.fbin new file mode 100644 index 00000000..118907da --- /dev/null +++ b/bin/librm2/ddma.fbin @@ -0,0 +1,39 @@ +' + + + + + + + + FIND-PAGE #DECL ("VALUE" "OPTIONAL" FIX) EXTEND-ALLOC-TABLE % %]>> + .GLUE > + + +> + +> + +> + +> + + FIX FIX)] 97>> + + FIX FIX FIX FIX)] 167>> + + +FIX FIX FIX)] 290>> + +> + + \ No newline at end of file diff --git a/bin/librm2/ddt.nbin b/bin/librm2/ddt.nbin new file mode 100644 index 0000000000000000000000000000000000000000..be0addf6a98f1f37da608630f22509d905554743 GIT binary patch literal 1235 zcmZuxUrbwN6hHm5buM;xZXn9Qj}}IOuDxvS3P~wkxOXiXmePBROoF30p&FNLFXA3h zl0_XO3!qF*mbto!qrnB{SoW}oZ81b+79cCP1 zmW@wQb1NywMBQBbW*&OvP1kexJL~`^X%~ROU6=%qt27BaWZP^mOSpr7zrAi|s5!K5 z<_OmXux{SR==%hbjIL5k!`6I7Lpc~+du?D?J9Pp~R0FE%J`>d})MupH272wa$Has7 z%n#Zl#xQ_PL3McAcc~xwfQHl>*2d=HV3++Z0I6gcYfu_`p64a>$b&-Z_2qsS zP0ODR**9$5h&Hz57*XebCmnJ;b!$eQ9uJ(;!rPWvb*Wz%RlbXg*C@(1dZ)PM>9*qX zBZ(uhV-;>d2|yT3I#_dSp#9Kb%m!O@Q@t{`dt$K11_glMXge6|0Mx%e`RC5R7;em` z#JX>G3?_PkzCZxw+l?oStpPT|kpL?Qt)U3d;fudD!v~2w)E4JSAQ~5mi{r#bqTBMy z;Y&xoJ|DyE@%sFvmZ@ia_uO6Hg#2VTdBtDrudh?A-M&{b;`cIp>wS#kEGoOEd_Qh2 zkj{T9jA|20`Q>5d*(za16+c=yt4)5HYR?|Ei|@#V6%o2$j}1piYq5clkez;RZb+*Co1Lr30L&%=s|M{@c?)ry?ka}oT+!uL)R0JLtdPJRs@=Z8K9yLtg#YJ`Q q&-N*~@F#LXoBVunEIT{-Gpl&ckz%PO|EuCYQ<>jxj;XWbg#8bwdz^Xz literal 0 HcmV?d00001 diff --git a/bin/librm2/declm.nbin b/bin/librm2/declm.nbin new file mode 100644 index 0000000000000000000000000000000000000000..672a34c4bebb447718a0ab4419d76be686eebef8 GIT binary patch literal 6434 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 VInM4?r0P|YHuwOakwvfJ{{?Q`1V;b> literal 0 HcmV?d00001 diff --git a/bin/librm2/demcls.fbin b/bin/librm2/demcls.fbin new file mode 100644 index 00000000..519eb6f0 --- /dev/null +++ b/bin/librm2/demcls.fbin @@ -0,0 +1,23 @@ +' + + + + + + + + SIGNAL-DEMON #DECL ( +"VALUE" STRING "OPTIONAL" FIX) STRTOX T "The file SYS;ATSIGN " +" does not exist"]>> + + READ-DEMON-STATUS # +DECL ("VALUE" FALSE> ) STRTOX #FALSE ( +"Demon not in the system table")]>> + + CLEAR-DEMON-STATUS + #DECL ("VALUE" ) STRTOX T]>> + + SET-DEMON-STATUS # +DECL ("VALUE" FIX FIX FIX) STRTOX T]>> + + diff --git a/bin/librm2/dfl.fbin b/bin/librm2/dfl.fbin new file mode 100644 index 0000000000000000000000000000000000000000..270014e24a5653ebddd08b051723c1093ebaa3f4 GIT binary patch literal 1788 zcmbVM?{C^L5bfvu6^Ew@sx=c(N?XlJWnza$4Gu~iwvM5xQ`rxxS}LHM_TTT$4k55r zn)abIKA-QN-+SjapN6Saz)oe9u)y>9RD?HTj1e0E&tuWudIM3C3b|at=W+#)%kuGI z2|vG<@U&inQDF+367H9up1#1OkTOvW4|1hVb_-YsGWx+1wD2=U;X?bk2q>?}v0b5) zSl=)k$dwsGri9E5z)POx#VBj}(4OPM;>CqS4BcRx_(G~MfexFAq`>}B{0?%H#d-{0 zcrCP6$uX!Y271_=dV$h%ds}QWPSVigiwYh3T1>zM)O;6@lPc;lE>#q3gbict28>(C zY%d?X7vW(Mtl;NiCQNuuTMUU}bkqH#qatb^999=;05Zg6mB#EX7_c{ODo1=Wm^0s` zMkE;a5v}IUF)sR$ z>j_9T1E$LjWiIcpu$9bjkb0yz(tTh7!FgLgJ=~)?)|*xN3m)z^=%OFX)%sicy@e-8 z5rh9fQa3!17D$cI(5Xf12z`5uy)5CLCEC=O%?yz)0<;YmS^^h&9*?z>S5}w+UR!JlIPT{7*3RiVHbUdPMruHM+)iK?d=S^ zRf!{C)^|gKwOI;1 z1foQL9-eO+l*cm_nlyu67oCa-F85K83N)L(oAma)ViKDv5Tjy+lEJd7ZOoP_uqwcdYK@-$I*Wn&2SdGuP(yt-#SpZyo(vhIpmf zd{B|KK>Df}C3)`Kaav7xQxg|L2AZ?rUhC)du6F;zuSK+{yVnrDp=%R?bHyJDxH8pj dZErMp^<0z?lYMqwtpXQ4C&BK$M^2B9egid*zY72W literal 0 HcmV?d00001 diff --git a/bin/librm2/dir.fbin b/bin/librm2/dir.fbin new file mode 100644 index 00000000..4c7e1422 --- /dev/null +++ b/bin/librm2/dir.fbin @@ -0,0 +1,79 @@ +' + + + + + + + + + + + +> + +> + + + + + + + + + + + +> + +> + + + +> + +> + +> + +> + +> + +> + +> + + )> + + + + FIELD #DECL ("VALUE" FIX BITS) SIXTOS COUNT-WORDS DTNOW T DIR () N (FIX) W (< +PRIMTYPE WORD>) (#BITS *360600000000* #BITS *300600000000* #BITS *220600000000* +#BITS *140600000000* #BITS *060600000000* #BITS *000600000000*) "READB" ".FILE." + "(DIR)" "DSK" LIST]>> + .GLUE > + + +> + +> "OPTIONAL" STRING )] 508>> + + > FIX >]> < +UVECTOR [REST FIX]>)] 589>> + + FIX FIX)] 739>> + + diff --git a/bin/librm2/displa.fbin b/bin/librm2/displa.fbin new file mode 100644 index 00000000..b6e36315 --- /dev/null +++ b/bin/librm2/displa.fbin @@ -0,0 +1,198 @@ +' + + + + + + + + + + )> + +MCELL + +TRMTYP + +PROJX + +PROJY + +PROJZ + +XORG + +YORG + + + + )> + +P1 + +P2 + +CHN + +RST + +BLKSTK + +3DSTK + +INSTK + +OUTSTK + +NAMSTK + +XFRSTK + +INSTRSTK + +TXFRSTRK + +CLIPCON + +COMSWITCH + + + + )> + + "OK") (TOO.BAD )> + + !\T> ) (<=? .FOO !\G> ) +(<=? .FOO !\A> ) (<=? .FOO !\I> ) (T )> + + + + + + + + PICT #DECL ("VALUE" ATOM ATOM < +LIST [REST STRING]> "ARGS" LIST) SETCLIP CLIP "INV" INV "VIS" "2D" "3D" 3D MCELL + () BLK "!-MCELLS" % "DONE" OUTSTK (]>]>) INSTK (LIST) COMSWITCH (ANY) +Z1 "LENGHTS NOT EQUAL" "PV" % % % +3DSTK (]>) BLKSTK NAMSTK () XFRSTK +(]>) INSTRSTK () TXFRSTK % % % % % +"NOT A MCELL" "DSPLY" "INFINITE RECURSION FOUND IN" % % % % % T "INVALID OP CODE" +XFRMAT (>) TEMP (>]>) % P1 P2 "DVAL" XFR TX FIX FLOAT %< +RGLOC LINE T> "YOU BLEW IT" "M*V32"]>> + .GLUE > + + + "ARGS" LIST)] 90>> + +]>]> LIST)] 320>> + +]>> "OPTIONAL" )] 400>> + +]>> "OPTIONAL" )] 469>> + + > "OPTIONAL" )] 538>> + +] [REST ]> ] [REST ]>> < +OR FIX FLOAT> "OPTIONAL" )] 627>> + + "OPTIONAL" )] 779>> + +> ATOM +"ARGS" )] 1104>> + + )] 1171>> + +> + +> + + )] 1329>> + + )] 1378>> + + )] 1421>> + +)] 1476>> + + + + + + +"OPTIONAL" )] 1512>> + +)] 1617>> + +)] 1766>> + + ANY ATOM)] 2043>> + +> + +>> )] 2085>> + +]> )] 2250>> + +>> ]>)] 2372>> + +]> ]> )] 2563>> + +]> ]> "OPTIONAL" FLOAT FLOAT FLOAT FLOAT)] 2594>> + + FLOAT +FLOAT FLOAT FLOAT)] 3028>> + +> > >)] 3094>> + + > ]>)] +3564>> + +> "OPTIONAL" )] +3756>> + +> "OPTIONAL" )] +3895>> + +> FLOAT)] 4031>> + +> FLOAT)] 4164>> + +> FLOAT)] 4241>> + + + + diff --git a/bin/librm2/dmx.nbin b/bin/librm2/dmx.nbin new file mode 100644 index 0000000000000000000000000000000000000000..644d88e34b2f05f36da9b30c2dadc03d7524ccae GIT binary patch literal 2846 zcmcImeN0=|6+e6wOoE9?L+n7N-Vg$Y^5Ku?XIrI!2L^kE;PO!!0|NpyPQayZv%fsLK0j zSl*NK!G1B$sZI+Y-q|p|sL!mqAf{&DY?T*wGd!mCoQb}Svd~8wJhAp{kYqlGe5AKf zh#YReuCS4aIa}FWGZg7>V;KvzxzlgUpV6@o+us`&VTL&XAVwvsI7pQCO~Mz%lJa>M zK&WLB;_@Fu{o|0ZFE%tX)Ekq}`{BhR-yi_LqwUKBh8-~g^EMkK@?C9$p=)L3_W~IF z0P7WHXmk?3)b8-Z;N1uZ3tGP)_Ofi$W+wo|X2oIz;vWt|9AAbkboJmeFqZh3AtVeP z&B*^gM#0K70HR)oq|m=6;j2)4-1KpZHYe21K^%)mm$F6$F^_{Ev0av{_gKWsBmCWIf-Ik+;Sr%ao;JYUym( z180>QtY~|*4{CjCyfH1NU&{O21jz>wr`*on+n51QH?}GxX94AaqSa>lp{x)AvMSqz zq6GS14&mA~+^P1j}&velDxTf)(eE##=@$knU<@*^k!6&_ZeRW3G*YldCjsyA5vHyG= zD8t?(Ey#OjeXal9e{iWUz-jiS55C~=Vzub0aC8-U?rrRXZOXEQtyxp-X>4Hm6*XSv zw}4gFIh~77dveN~dCp|E*{uePbaj)VQ&hiZ+DS_z&y2i!ybOqHA1da&rU6N>yVxzNk68m!e#URQar60s z2bXwuRlE7JL%Or+Nn>?~GYf=O>6iP% z1+NQQZ;@*o;=Q)rc!pXe>S981tn*qutEgaNm~J z@YRG@@HdxTKg5b1_4V$m?aqo)R#n~TEMbN8!HT14yIB+7L1B$-nhlOdezGH2EAqEY z0jZ#6s$2T;E!HgM`>Z|EHQ(i(l0JQ6KvLhD+$jad3Oc2lCVn8CqBG+iHJkgT!WMIn znYBkuQ)^v7BZlFUM0(+ED0;PHDCta+X&!edaR`Og@uUy1k?lQ}K-l7j{Z^%3+oAaifib z*hqxeR32Ge^IWh`>N|-OP`R`CSMt=><#9=gSZ?^~^v|P5&jxE3`*FaEobR4i{7!v~ z(cItSJMsJF;q2(_jZtMTThy=r-FS3QM_n_%<8>2a(iiVyXf^lKZ(>_3W8c;H$xqF2ydp+9XWzmqeLe*2CtpL=x7S1G12Pbx>uu%9-g6L^Nnl6vUzOV w-e|+;e;N;6P{z|oKcNAX=1jbj`&+)%sJU<1C=R~z#3|2^{K7x}JY2&52S4N*1poj5 literal 0 HcmV?d00001 diff --git a/bin/librm2/doops.nbin b/bin/librm2/doops.nbin new file mode 100644 index 0000000000000000000000000000000000000000..1467d675e0aa2ce63a9ff6a3a83e47014b469a06 GIT binary patch literal 2984 zcmbW3drX_x6~NEu&-gLyVUrh+G`US!F^z)_wlQh72!lz8YJwZoEts{CWfYT)VMe2d zBt%STqm(d6S+#Vjib35nmbNa%E1fn~%N|<($b+eoR<>$eC$&wcEODC8*PqQ+@7!x+ zlWMBA`HxTc+5_@tmZ+5OhTV;DQ8$pmkLGK{Qu207S=L2BAFP z4=r|_6P9HFAqqpuWce09sLY!+0NX&VGDW}+dF-Q)jtvbOqhn#1xA=}S2RKT9h6Z!_ zND@GN+@~>sNT0JqAyKMfeYD*U#gZTn8i@(xFjwJ5?4uxx04OD)8ni?efE-Ct4Y}q` z>W7}(Mo=$0Hki^An4XI1=|5Y~iDsqIAix4s&Wm0E@wf!yU@oaK0LTUn2w4@PY`cAu zV5AC3)IiP#;s+n?!w4wqmTm(-SUGlI~tCTx^+wB2K2;tru^b{Q) z`ejHmgpzUM#sz+$OzJx_sqf6DUNTye%LKza$>M2cM>8_dMH1l6k`fGxc^5?lO2=GQYslN$tZJmoOm!uCuzHVj9v7%i2}`t5zUPn|I z0bca2U2O9&t==46IZQamo?7Zf5goxCX5(vU8>W+Xn3cpc>7W#Nmap(AB;hS~?St&v z(OwdCAkfoxn5KQtfWS6u@+tAqbj}VhuxO{Vj@fE6+qRTFJau#|l)TG7;11wf*iHC! zRt(SMhX%`fKRiw}I2ZNVVI(c$o%l2utpn3n9sM8-KgR;+0Cs`MQ@?#Ep6A9`8-y1_jam&$^>< zkCOhlG~t?!-}UYqihu8K!T$JjUDsU8Pt71442PP|E{CQ_eO!8Q&s2Qz$t_5Y8)PUk z`C)KOww3*MAZj945k-qDWLopSXEJfbuy0znesE!2{&D^jK7w` ziG#)Gbi2N0@t)}QLJJR3-goK7x!(QlP@58)|MJMy-lqz{l@gogKfdp%{wP?uSog%h zp<=MMLm3xq|6GMq03P5{{ll9bHGsv!9wk7X`5RhSM1LJBK#P~)zTe_$iYVSgPa=x) z({Imz3zPxa0HO&V0<8g{cF$&W_0#5dFoMDhHQbB4#j&X*q7T42F3LC0{PPb19I8Pm z0DLQ6C%3gZ; zJ-dr;e|N5f{$r`?KulBQJWTcPIyz}Xk*%A0{#e;XFMBI{VtSv$MfVnkd+2vJ+Fa3B zTIYJ`t3O!iqBp%2XxkF*rJfhbVS4J!&$_8@i5!r0XDbiV*Sr;-lJnm7U|ZcDCbLa} zjRe*nMDr%>7Q72^;+w1dP|rWSJ~JaDA2H~vv8)@5vgpq8Hd|>NUJNmAj+m6~J%|}) zU>V>g%~)~FxwilV!g~Dz9Sy@)^7(266}A>Vn=4K6tsF0dQEiuPFR~|t}05hS}X|r1H{3e5OIl35(=ptQGYe zi!#u}ydgAQ|0gs#C0Ell#m4fto24~>zcw5>=CMaWC7uJAJlpdIws$RHmSR@ekNHL#tla8?F7u;#e< zU$c^CU{~LtmM&bj&wTRwQI&;f}5>66N`sbOYQ;KKF0- C?COaC literal 0 HcmV?d00001 diff --git a/bin/librm2/dout.nbin b/bin/librm2/dout.nbin new file mode 100644 index 0000000000000000000000000000000000000000..9906e5941debe19f09a166f77f99738a9fc12443 GIT binary patch literal 800 zcmZ8fT}V@57=F%na%v7XEeizs(iNu03S{&%WXJ6|Bg?7CEF%XMuINI$$VDv*p;aab z64XU$c4J5wlu$QyQ*={gk$CG(AtE&6oVlIjJbmvOH1fT8d7k&-d)|ld`&K8Pgoe_W z7e5Uvg_CX5+MRJ$vFew-!5#h|H5 z%HkZ8k^p*`r3Fv~7X((&0zt93V6Cr=!deGgNrU@T3{XdI@|g#)5E2OSW`kJoiJ~r# zQcFOaIsw6+N9xFop_>g&{je&I86(RAy$LCo&~T5GUCH$Z!hl!NcBLlhNs z)?gwRh}Kfj%)gc;lubIV?+*|%%tj}4+IEAo2%EN%njtk#SvIR^wjC78m9B};)9I;E z@3_`dEj`i(LY>dGj=o@A*|yv{a)xa)yYgN*VtG?fEYH literal 0 HcmV?d00001 diff --git a/bin/librm2/dow.fbin b/bin/librm2/dow.fbin new file mode 100644 index 00000000..75532958 --- /dev/null +++ b/bin/librm2/dow.fbin @@ -0,0 +1,11 @@ +' + + + + + + DOW #DECL ("VALUE" FIX)]>> + .GLUE > + + + diff --git a/bin/librm2/dragan.fbin b/bin/librm2/dragan.fbin new file mode 100644 index 00000000..01814f62 --- /dev/null +++ b/bin/librm2/dragan.fbin @@ -0,0 +1,72 @@ +' + + + + + + + + ANNOTATE #DECL ("VALUE" "OPT" STRING STRING ) FULLNAME LSR-EXTRACT +INDENT-TO LSR-ENTRY "DRAGON" T "READB" "PRINT" % OUTCHAN (CHANNEL) +% "# +" "î" % "/!" ![$MITA $MITT $HOMA $HOMT $NETA $PROJ $SUPR $REM $AUTH +$ALTR!] [" MIT: " " " " HOME: " " " +" NET: " " hacking " " for " " Remarks: " +" Authorization: " " Entered by: "]]>> + .GLUE > + + + STRING +)] 306>> + + + +> + + + + + + diff --git a/bin/librm2/dragit.fbin b/bin/librm2/dragit.fbin new file mode 100644 index 00000000..b1d37e63 --- /dev/null +++ b/bin/librm2/dragit.fbin @@ -0,0 +1,139 @@ +' + + + + + + + + DRAGON #DECL ("VALUE" "OPTIONAL" STRING) PCRLFS!-IFORMAT PFIX!-IFORMAT IDAY PFLOAT!-IFORMAT +PCOLUMN!-IFORMAT POBJ!-IFORMAT LSH LTIME BTIME ZONE SUBSTR COUNT-LINES +BUILD-LINES READ-LINE FIND-LINE COMMENT-LINE "DRAGON HOARD" "READ" "REPORT" +"DRAGON" "TOTALS" #FALSE ("CANT FIND TOTALS LINE") "This file" % +"Totals" % T % "- TOTALS -" "- RANDOMS -" " --" "" +"SUBTOTALS" NM2 (STRING) SNM "EST" % "UP" % %< +RGLOC DNSTR T> "DOWN" % "OK" "0123456789" " " "BAD-FRACTION" + OUTCHAN " ;" ["Sun" "Mon" "Tue" "Wed" "Thu" "Fri" "Sat"] "." " " ":" "!" ( +CHANNEL) "ALL" "R" "RUNS" "G" "GRPS" "T" "TOTS" "SUMMRY" "PRINT" +" +Group-name Users Connect-time %Con Cpu time %Cpu Swaps %Swaps + +" "..." " " +" +Month Log Up Down Down Cpu Up Cpu Runs Mean Swaps Swaps/hour + hrs hrs hrs (day) hrs % % run x1000 up cpu + +" ["Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"] "%" +"----------------" % %]>> + .GLUE > + + + + + + +> + + CHANNEL "TUPLE" )] 391>> + + CHANNEL "TUPLE" )] 465>> + + +STRING STRING STRING STRING)] 533>> + + + + + + + + + + + + +STRING STRING)] 570>> + +] STRING>> + +> + +] STRING> FLOAT>> STRING)] 605>> + +> + + STRING)] 797>> + +> + +> + +> + +> + + FIX +)] 1430>> + +> + +> + +> + +> + +> + + + +> + +)] 1632>> + +> + +> + +> + +\ + + "TUPLE" TUPLE)] 2000>> + +> + +> + +> + +"Contract hours are 9-5, weekdays" + +>> + +>> + + + +> + +> + + diff --git a/bin/librm2/dskgrp.nbin b/bin/librm2/dskgrp.nbin new file mode 100644 index 0000000000000000000000000000000000000000..b494521667e9015d96b2e8cdc80422927ba49636 GIT binary patch literal 11394 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 + + + + + + + + GET-MODES #DECL ("VALUE" < +LIST [REST ]> LIST) READER GET-CONDS OUTCHAN % +"mode" [ +" +Modes are Input (node command format), Edit (E/node command format), +Request, which will ask if you want to edit, and Input.if.empty..else.edit +(where empty means never edited - only initialized) which is the default (CRLF or $). +If Input is selected, it should be accompanied with a Condition (see +next argument) of Empty so that filled out-nodes are not clobbered"] ["SYM"] +"Iie/ee"]>> + + .GLUE > + + GET-CONDS #DECL ("VALUE" +LIST "OPTIONAL" ANY) READER % " + Conditions" [ +" +Conditions indicate either that a test will be run to determine whether to +include this node in the automatic mode at run time or that some special action +should be taken while editing the object. +The current choices are: Empty (as determined by the resident empty-checking +routine for the current object type, e.g. default automatic mode), Evaluate +(i.e. something to evaluate at run time), or Edit.with (causes a given field to +be inserted into the editing buffer if the mode is \"Edit\"). +If both Empty and an Evaluate are given, they both must be satisfied for the +editing of the node to take place" ""] ["SYM"] CONDITION EMPTY "Empty" EVAL [] +"the object" [ +" +The form you give will be evaluated when the node is +encountered. If it is false the node will not be edited." ""] ["FORM"] TOEVAL +"Evaluate" CONT GTYPE ALLNODES "the contents of" [ +" +The contents of the node you select will be appended to the contents +of the node to be edited. The node to be edited must be a terminal +node. If it contains a string, the \"with\" node must also. +Multiple nodes can be given via multiple conditions." ""] "Contents"]>> + + .GLUE > + + + + NODE-GROUP-INSERT +#DECL ("VALUE" ) SYM.INSERT GET-CONDS +INSERT.G.EDIT DEPTH.G.EDIT GTYPE ALLNODES "node" ["Select node to insert" ""] [ +"SYM"] PT.G.EDIT % "mode" ["Select Mode to insert" ""] OUTCHAN +"INSERTION ONLY IN SECOND POSITION" "CAN'T INSERT"]>> + + .GLUE > + + NODE-GROUP-CHANGE +#DECL ("VALUE" > ) SYM.CHANGE GET-CONDS +CHANGE.G.EDIT DEPTH.G.EDIT PT.G.EDIT GTYPE ALLNODES "node" [ +"Select node to change existing node to" ""] ["SYM"] % "mode" [ +"Select Mode to change to" ""] T]>> + + .GLUE > + + NODE-GROUP-KILL # +DECL ("VALUE" > FIX) KILL.G.EDIT +DEPTH.G.EDIT PT.G.EDIT OUTCHAN "CAN'T KILL"]>> + + .GLUE > + + NODE-GROUP-KM #DECL ( +"VALUE" > FIX) CHANGE.G.EDIT PT.G.EDIT + OUTCHAN "CAN'T KILL MODE"]>> + + .GLUE > + + NODE-GROUP-IM #DECL ( +"VALUE" FIX) SYM.INSERT EDITOBJ () DEPTH.G.EDIT GTYPE ALLNODES "node" [ +"First select the node. Later select mode/conditions" ""] ["SYM"] + % ANONF2!-TMP!- #DECL ("VALUE" ANY) READER GET-CONDS % "mode" [ +"Give the mode in which the node should be edited" ""] ["SYM"]]> OUTCHAN +"CAN'T INSERT AT THIS LEVEL"]>> + + .GLUE > + + NODE-GROUP-CM #DECL ( +"VALUE" > FIX) SYM.CHANGE EDITOBJ + () PT.G.EDIT % "mode" [ +"What mode do you wish to change the existing one to?" ""] ["SYM"] + % ANONF2!-TMP!- #DECL ("VALUE" LIST ANY) +GET-CONDS EDITOBJ PT.G.EDIT]> OUTCHAN "CAN'T CHANGE LIST"]>> + + .GLUE > + + TABPRINT #DECL ("VALUE" +ATOM FIX) OUTCHAN " " " " " " T]>> + + .GLUE > + + PRINT-GROUP #DECL ( +"VALUE" ANY) MAKEMST READER READARGS GET-TYPE TABPRINT "GTYPES" #SYMTABLE [ +SSTOPS ["Nodes" T] "NODES" #FALSE ()] % % "of" [" +Type of group to be printed ." ""] ["SYM"] T AGROUP-TABLE "named" [ +" +Name of the group(s) to print. False (terminator) will print all of +the existing groups.  will flush the command." ""] ["SYM" "MULT"] OUTCHAN +" group" % AUTO-TABLE [ +" +Name of the group(s) to print. If false (terminator), all groups will be +printed.  will flush the command." ""] NODE-GROUP +" group +Node____ Mode____ Conditions__________" "Unspecified" " " + " " " " %]>> + + .GLUE > + + MAKE-GROUP #DECL ( +"VALUE" ANY ANY) GET-TYPE READER MAKE-NODE-GROUP MAKE-ABS-GROUP T AUTO-TABLE +"named" [ +" +Indicate the name of the node group you wish to operate on. If you choose an +existing name you may either edit it or replace it." ""] ["SYM" "ATOM"] +AGROUP-TABLE [ +" +Indicate the name of the object group you wish to operate on. If you +choose an existing group you may either edit it or replace it." ""]]>> + + .GLUE > + + MAKE-ABS-GROUP #DECL +("VALUE" ANY ATOM) READER SYM.EDIT POS NO-DUPES READARGS +SYM-SORT COMMAND-UPDATE FOO (LIST) % AGROUP-TABLE [] +"Edit existing group?" [ +" +If you wish to replace the existing group, just type a terminator. +If you wish to edit the existing group, type anything (e.g., T) followed +by a terminator." ""] ["ANY"] % ROBL % %< +TYPE-W SYMTABLE VECTOR> "object" [ +" +Select an object or group of them to include here. +If a group is selected, it will be expanded to its constituents." ""] ["SYM"] +"consisting of objects" [ +" +Select the objects and groups of objects to comprise the new group." ""] ["SYM" +"MULT"]]>> + + .GLUE > + + MAKE-NODE-GROUP # +DECL ("VALUE" ATOM ATOM) READER G.EDIT MAKEMST READARGS +GET-MODES GTYPE (ATOM) EDIT.LOCAL () % +NODE-GROUP [] "Edit existing group?" [ +" +If non-false, you may edit the group using the muddle editor. If the group has +specifications for modes (for automatic mode), the group will appear as a list of +2-lists with the node name and the mode operative. The two modes available now +are Edit and Input (equivalent to E/ and node commands). A third choice is an object +of type false, which will cause a request to occur at the time the node is reached. +If there are no mode specifications, the group will be a list of node names." "" +] ["ANY"] OPATH "INSERT" % "CHANGE" % "KILL" % "IM" % "Insert a node with a mode specified" "CM" % "Change a node to have a mode specified" "KM" % "Kill the mode for the next object" "nodes&n-groups" ALLNODES +AUTO-TABLE "consisting of nodes" [ +" +These nodes will comprise the group. +Node-groups may be given, in which case they will be expanded to +their constituents and duplicates eliminated" ""] ["SYM" "MULT"] "Specify mode?" + [ +" +If non-false, you will be asked for the mode of operation for each of the nodes +in the group. The form of the request will be .. Unique.name mode:, etc. +Possible answers include the modes Input and Edit which correspond to fill-node +commands and E/ commands. Other modes are explained in the next argument" ""] T +]>> + + .GLUE > + + ADD-NODE-GROUP #DECL +("VALUE" ANY ATOM ATOM LIST) AUTO-TABLE NODE-GROUP]>> + + .GLUE > + + diff --git a/bin/librm2/ehack.fbin b/bin/librm2/ehack.fbin new file mode 100644 index 00000000..9b08ba3d --- /dev/null +++ b/bin/librm2/ehack.fbin @@ -0,0 +1,219 @@ +' + + + + + + + + + + + + 100>> + + + + + + )> + + START-EHACK #DECL ("VALUE" +) EDIT-NODES BGSTSORT FILL-NODE TTY-SET RUN TTY-GET MAKE-TABLE +APPENDER MAKE-COPY SYM-SORT NPUT AUTORET!-IEUTL PUSH-T AUTOBACKUP IMBUF BUFTECO +TECO-EDIT ADDFILE MYPPRINT BLOCK-PRINT READARGS BUFTOS GETSTR ADDSTRING BUFCLEAR + NNTH READER MAKEBST BSTSORT FUNNY-PNAME DECLEXTRACT ADDTABLE MAKEBGST USE +BUFMAKE MAKESST CALINIT OBJLOADTAB PREFIX-CHRTABLE!-IEUTL CHRTABLE % PREFIX-XSPCCHARS!-IEUTL % "MODES" "Edit" "Input" +"Request" "Input.if.empty..else.edit" "Iie/ee" % % "B" "SCRATCHES" % EHACKBUFFER!-IEUTL +LEVEL-BUF "OBJLOAD" % "OBJONLY" % % "OBJ-COMS" % "YESNO" "Yes" T "No" % OBLIST (ANY) "ECOM" "Edit-node-commands" % %< +RGLOC NODE-EDIT-COMMANDS T> "Open-commands" % % "Print-commands" % % "Nodes-commands" % % + % ANONF0!-TMP #DECL ("VALUE" ANY ANY ANY) +]> OPATH EMPTY-NODE % % OBJOPEN %< +RGLOC OBJTYPE T> % "APPEND" APPEND OUTCHAN " -Appending" +"AUTO" " -Default automatic mode" "SYMBOL" +> " -Symbol input" NODE-SYMBOLS NODE-SYNTAX " -Group node" GROUP-NODE +"BAD ELEMENT OF GROUP NODE" "IN" ALLNODES AUTO-TABLE "AU" ".default" +AGROUP-TABLE "A" NODE-GROUP "of object-type" [ +"What type of object do you want to work with the groups of?" ""] ["SYM"] NODE ( +ATOM) % ABUF (BUFFER) FILLER-ACT (ACTIVATION) #FALSE ( +"Not a node of this type of object") REALDECL "BUFFER" STRING " (BUFFER): " +" (BUFFER): -continued-" SYMBOLS "[continued]" "" " +DECL of " " or " #FALSE (#FALSE ()) AUTO-MODE-ACT #FALSE ("Null line") %< +TYPE-C SYMBOL VECTOR> " +Non-terminal node. Do you wish to edit internal nodes?" [ +" +If a positive answer is given, you will be placed in an automatic mode +containing the nodes below your present position. As usual, a +control-A may be typed to leave the automatic mode, and a control-up-arrow +may be used to back up" ""] ("Iie/ee") BUFFER SRET () EDTD-STR +(STRING) " ;\"" " in " "\" +" "PRINT" "XAB" ">" "DSK" "HUDINI" "COMMON" "INT:" % ANONF4!-TMP #DECL ("VALUE" BUFFER CHARACTER) ADDCHR EBUF %]> % "TECO" "READ" % #FALSE ( +"NOT EXACTLY ONE ITEM IN EDIT RESULT") NODE-UPDATER #FALSE ( +"Object does not match DECL") "Can't put " " node into " " object." #FALSE ( +"Open object switched since last an error was recorded") #FALSE ( +"Attempt to append to non-terminal node") +"Attempt to append illegal item" SCNAME () () +SCRATCH #FALSE ("No (existing) scratch specified") #FALSE ("No node specified") +() % " -continued- " % "C" +" +*** return from TECO by typing 'MC$$' where + '$' is ESCAPE (altmode) -- otherwise the buffer will + be lost. +*** TECO is being continued !!! +" BUFTECO-ACT "ER" "^Y" "COMSYS" % +" +An error occurred in returning from TECO: " "reason unknown" +" +The buffer has been left unchanged. +" +"An empty string was returned from TECO. +The buffer has been left unchanged. +" GAACT GROUP-LOOP "Opening " " automatic mode." "Object wrong type - " AUTONAME + () ("Input" "Empty") () +"Automatic mode empty" +"Permitting recover from DECL mis-match +ERRET any object to continue." " automatic mode completed." +MAKE-THE-COMPILER-HAPPY MODE "Mode?" [ +" +Do you want to input to this node, edit it, or ignore this request" ""] "Empty" +"current backup" "back to node" [ +" +Automatic-mode will position itself at the indicated node. +No value will back-up out of this call to automatic-mode." ""] "SYM" "Evaluate" +"Contents" SPECIAL-CHECKS ALLMODES UNVERIFIED-OBJECT!-ERRORS % +"E/" % % EVENS-LIST "LOADED" "OPEN-COMMANDS" +"Reloading " "Flush old copy?" [ +" +Yes will replace the existing copy, No will place the new copy under a new name, +and ctl-R will flush the new copy." ""] "Input flushed" "Object now called " +NEXTPOS]>> + .GLUE > + + + + + APPLICABLE APPLICABLE "OPTIONAL" +APPLICABLE ANY)] 298>> + + "OPTIONAL" )] 485>> + +> + + + + + + + + ATOM)] 1172>> + + +ATOM)] 1623>> + + "OPTIONAL" )] 1681>> + + ATOM "OPTIONAL" ANY )] 1796>> + +> ANY ANY )] 2241>> + +)] 2319>> + + STRUCTURED "OPTIONAL" )] 2408>> + +>)] 2634>> + + ATOM "TUPLE" TUPLE)] 2698>> + + ANY)] 2785>> + + ATOM)] 2836>> + + "OPTIONAL" )] +2855>> + +)] 2999>> + +> + + STRING)] 3162>> + + )] 3275>> + +> "OPTIONAL" LIST)] 3530>> + + LIST ANY)] 4216>> + +> + + VECTOR)] 4504>> + +> + +> + + ANY)] 4564>> + + ANY)] 4581>> + +> + +)] 4633>> + +)] 4683>> + +)] 5166>> + +> + + )] 5570>> + + diff --git a/bin/librm2/emonit.nbin b/bin/librm2/emonit.nbin new file mode 100644 index 0000000000000000000000000000000000000000..946f64cc5d68cb1593846367b99243865234f5c5 GIT binary patch literal 3253 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 literal 0 HcmV?d00001 diff --git a/bin/librm2/eutl.fbin b/bin/librm2/eutl.fbin new file mode 100644 index 00000000..af13b882 --- /dev/null +++ b/bin/librm2/eutl.fbin @@ -0,0 +1,174 @@ +' + + + + + + +> >> + +>> !.X>) '[ 3> > )>> > ) (,TYPE-COM-TABLE)> "of type" '[ +"name the sort of object(s) you wish to load" ""] '["SYM"] [] "named" '[ +" +Name of a file of objects to be loaded for composing" ""] '["FILE"] '[] +"with group name (opt)" '[ +" +Optional group name (as in GROUP-LOAD). This may be useful for dumping +your completed objects when you are finished" ""] '["ATOM"]]>> + +> + + DECLEXTRACT #DECL ("VALUE" +LIST "OPTIONAL" ) MAKE-COPY BUFCLEAR NPUT +UPPERCASE BUFTOS ADDCHR BUFLENGTH ADD-WORDS RETYPE-BUFFER!-ICALRDR NNTH +DECL-TEST SEARCH APPEND-NODE ADDSTRING TTY-SET BUFMAKE TTY-GET VERIFY LEVEL +READER PPRINT BUFPRINT T () #FALSE () VECTOR (OR REST) MULT AUTO-MODE-ACT +OUTCHAN "C" SCNAME " scratch (BUFFER): " ABUF NODE " (BUFFER): " % % % OBJOPEN +" first get objects: " % LOAD " must open an object" %< +RGLOC OPEN-ACTION T> GROUP-LOOP #SYMTABLE [SSTOPS ["Group.automatic.mode" T +"Open object" #FALSE ()] "LEAVERS" #FALSE ()] "Leave" [ +" +If Group.automatic.mode, the entire group.automatic.mode will be flushed. +Otherwise, the open object will be flushed and the group.automatic mode will continue." +""] ["SYM"] "Illegal activation to GROUP.AUTOMATIC.MODE. Report to MARC." +PSTATUS #FALSE ("Can't pop") STAT PUSH/POP-ACT % % AUTONAME (ACTIVATION) (ANY) EDTD-STR LEVEL-BUF % +APPEND " scratch (BUFFER): +" CHRTABLE % % EHACKBUFFER XKEYBREAKS +PARSE-BREAKS STRING "Current LISTEN level: " " Open abstract: " % "-none-" "Returning to " "LISTEN level: " " Group automatic mode: " +"Default" " Automatic mode: " " Node: " " Scratch: "]>> + .GLUE > + +> + +> + +> + +> + +]> )] 601>> + +> + +> + +> + +> + +> + + + +> + + "OPTIONAL" BUFFER CHARACTER)] 1178>> + +>]> + + !" >>> ) (< +RETYPE-BUFFER!-ICALRDR T>)> !" !" !" !" < +COND ( )>]> + + ANY +STRUCTURED)] 1705>> + +)] 1747>> + + BUFFER CHARACTER)] 1853>> + +> + +> + + STRING)] 2100>> + + < +ASCII 33> >> + + )>> + +> + +> + + "OPTIONAL" )] 2354>> + + .GLUE > + + diff --git a/bin/librm2/evil.fbin b/bin/librm2/evil.fbin new file mode 100644 index 00000000..bb4b165c --- /dev/null +++ b/bin/librm2/evil.fbin @@ -0,0 +1,16 @@ +' + + + + + + EVIL #DECL ("VALUE" "ARGS" ANY) GET-TTY "PRINT" "JUNK >" OUTCHAN (CHANNEL) "DONE"]>> + + .GLUE > + + GET-TTY #DECL ("VALUE" ANY) T +]>> + + diff --git a/bin/librm2/exputi.fbin b/bin/librm2/exputi.fbin new file mode 100644 index 00000000..3a855b29 --- /dev/null +++ b/bin/librm2/exputi.fbin @@ -0,0 +1,33 @@ +' + + + + + + + + LA-EXP #DECL ("VALUE" > LIST LIST) LOADIT VCTBNS UNIQUIFY #FALSE ("BAD DATA BASE SPEC" +) RECURSION-DEPTH-EXCESSIVE S-EXP ]> +"COMDMN-DEFAULT-EXPANSION-DATA" % #FALSE ("DATA-BASE-NOT-FOUND") < +VECTOR [REST STRING ]>]> #FALSE ( +"IMPROPER DATA BASE FORMAT") T]>> + .GLUE > + + +]> LIST LIST)] 58>> + +]> ]> VECTOR)] 133>> + +]> STRING "OPTIONAL" FIX)] 223>> + + < +LIST [REST ANY]>> LIST)] 389>> + + STRING)] +585>> + + diff --git a/bin/librm2/extern.nbin b/bin/librm2/extern.nbin new file mode 100644 index 0000000000000000000000000000000000000000..967b25c19b4a288ac1589da1712cd5a9bd252e88 GIT binary patch literal 3856 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 literal 0 HcmV?d00001 diff --git a/bin/librm2/fdate.gbin b/bin/librm2/fdate.gbin new file mode 100644 index 0000000000000000000000000000000000000000..b270238f30a2c6cc9e8df7e3aade246abf851b4b GIT binary patch literal 2519 zcmZ`*YfKbZ6h52krLUJL|5ZogXLnob%0jeD~Zt zW3Ag~D3w(E0J2io7Kwu+#xo@ER$5ZG@g^Lv7P0-&jZD_ zRf-NgrGVw)rHPzeT*oy@jf|P=1^^)}W(G>rL14&=AuDy5&Isyp;Q47X56un->oFIA z^~@=Yc*_VH>o7fd$KtCHwt)mNl@^W`OedhfkgNVA0)e2KhIV**Z^zrCx?vD7M5WRD z<`K#);QyLD!d(lD(&QRp=xg!}=$ohK|MFlLel+^XK!5<&6T2XhV@c$I*F+xZjI32k zhNs`UB4Y~-51U|sn=av;1=_^z7MRj2p;v%XhePPFK%!7~4j7sjzzD%aghXVnMP^t4 z5237dvtu0ELS43g)W(Clus^SjaM)6(<#eqhybcVDF+$eMDLmD5$iGakUuRi;Vw#*f zhZe!a)+6hoo!Zzjn1ni}ATHMR#(e5v6LPvXWO@z*Al~t3ZH48YJ*2=&+>mO=*cCmskcSA7=Fu^`3RB_k=FxnTV@#VvtN5_v2n0r!OL_Sj{z$2%OCp+Y~ z*a$0;?=ttM_1G=&Co!=|in9H-b_?8a;fvkdMGrB(B1lhn+&%Sag5C_IPjxqFz#mZf z5rG-BA|h(~o5}vcE8d+3YSaLvN4uZ?Rx}NdC{^E&n>5&aMc`WO zojer$>~Suk1Rn~1b`&6psucX}{tqyUs;8_G*w+-dbuf)Nf}Bg>8sG~N&osi zg;XFHx~r;8@XCb@@X|m^w`vAdfF>8>y74IIbu-y88~P0cJPRb-$ER99>t^&YkE(Ga zBa&0WUki8-;WIs}V06^# z7ZopIjS%rWJT^eS0wM9%Moog1RJC<@Zu7UMhMsSd?uT9{n_`}6t8TinS)RG@N|QXt zF#5RjYv=SPN>vLkaf0R$S0lHi^_>GwTE$+em0Gov56H6?cecvjh7b13Y43!dX`|LUyZedssXFsek(czC8>Xer33?;SJrR)h1)t9XO9N=NUpY5Z*Sr9)C< zB?+aSUL{2}#McP127SKm*Gey6Yu&!|a=Gd%9jX7TK8SwF`^1}EW7j`qOYA$AbaK-5 zLe^xD(I)Kd9a5<{oT?@$sRa``^YWU8t4;Q(f4CZchAw%hyhi&fxI=MZDDp1veemXb z+b_$_MdFbCtiN@7{Nx6yEy!F?|1|jK(DXx6#;)_Va`j@w>YzrW~Qe1HV$idF~rqMTXbB5yejWXxm0mA5jQV~oi9BZdmfMY*iKHUR`L>u zVdQb~^3C=Iw(+;vJkcxQ#4_8M;V}i`_Pyp}F*$nzC#HO@FR+CV*K=a{@aO{Z(%fT3 zV&m{h%fyu16BpPtBlJb$_-yo!zjY?CfE0Q6bcNK6 GyZ;|QF0N+) literal 0 HcmV?d00001 diff --git a/bin/librm2/filapp.nbin b/bin/librm2/filapp.nbin new file mode 100644 index 0000000000000000000000000000000000000000..e8a2de9455e58667d5200385a8f570d4be3b2f08 GIT binary patch literal 1370 zcmb7EZA@EL7=A7vy=+)$Q6@6Bos~M!)s;c{*i0B5Ed$4-Ft*IX!dFSV4;)38l^6_K zCu6K*W=M_uUxiVHnRl4gND;wZQyrjlwv415Ak zyfKB77Rqu9GAM*U7886d8kmAsY)$OnXLeF74)?P)|Cuf^;P2*5B_33=h!X=-82GPf zr5Z6%Jwo_rGpWExCrR+YR&Rv9RlG+Dftv9bgEz$C zDGXATRGq3Ken<_Wo!_1%=q6$cv9&ztlRmTHm>8ghse~$rb^dRDXY2xF-?X?q$P<19 zlFdfSZgtV_5E{`&Pyuyf$%{03Kp3QHD@w5OJ9Y|O8F3 znA8rU>4ru~D1+9tUenvIt}%Z+^Oycu{#dfY4y})!QsS0PSjy8{Ccdg>fBGug(T$sMuz8nH@26KTfJ<@DXf; zCLgHGsNQCdrM`nAHMw$)abLyK>lCAT!Ll(7P;J;wtktr$8T1 zDRO4}mO9_ZIwTyRdwB;fbo>wJ!PgrcNK;efxsM*+S)2j%VboG7G@~X?oHh0|d8<4~ zQDJ39?ONj!*9ff&Z5z$Cby#x%3E&*ai0?S@)#O`Y&Vs}+T*y_|B0p$Oubr8%(cWn0Ve-m9A1lU=>wY~X9nC82kj{KOX_W%a1sxIX zGsRs(svxaAoL-ZsW%N#ddUY#7&O-! zn*S)uSP~(aC)bAIP{&i8%cnS1vK zVrs_+Cm&`Cy@H{5)r*=&RaxPgXY_Pz;+4-Gd&AQ1=w`v1hc^{}oR0X(bx(9TMWpq2 z*HiptXUM~kgk;n%09?^lUIvJGUjPwV3_!K1f(7{@rp;$TQ4Wff66_^Qp04E%W;llw z+DaDkB5g)UmoPHvnhOzf$l^-@YPk%6qHkXM&T0FaO*b>4e9mUjvr zs9{|LE>-|2AvtWF*E#X!>QpyXs@tN2Pc|gQZ>cSFLZEQ*E>dpLE@Ajs;XH3BTcT0A zW{u)aniYx7s<2r!sK<| z0Ash2T8q7rp)EKQ^D~;dR=vSk$pybHIHJm&Kufj!Ht)RHZ$NC;_xcA*4lF_QH=)}hQ2vTp+&e&MjYAZk5O;hM~sdbLGO)W|P zw<+FVw(^|!pY*w6&28)A`csR}*h8ks%`f~Qn~~iYoa1LlFOA2Q|E|dzpUtTn+~25< UuJH(;N+_4m*S<7}lxmXt3n(8hU;qFB literal 0 HcmV?d00001 diff --git a/bin/librm2/fint.nbin b/bin/librm2/fint.nbin new file mode 100644 index 0000000000000000000000000000000000000000..e923b7dab46fa53eeafbd0f506d67968c66102f3 GIT binary patch literal 3288 zcma)9dr(x@8UOC?vX8P0cTo%rVy+t|th&Gg%fo0ImRHs(2*sG;Wq_h(5eZPDXoU2{!y=_9oaVIKk~W|Go6#Swb%FAhBAluQr!~{U+QlX zUhsW7cGfZd=FgrxWsvn3e0Q*7sN1xEel{3AvQ>GDsYFv{x>3&5E&Aega|D< zVhG8Y6qps9Ro#N38B`RlZiQPRx9aw@7gN&#@yl9(>w9GQEJ%*~KFCOQ_a3u?@C z5r%0Ty}l?4762YiZP1~qZp!St%NLDo5i{#vVMtQw!6>MsKzk39vG+r*B9v|gO8O4K zmiwU$gi^0SEr$Os5rz{=vl69lh7d`S38A=fEMcLDGgJerW*609mQ0fLQ<7$AbDtFu zsU{@#L|xb>Y#^YXaMR`-{(8#J>0}##kqUVzQRU)7(&99lR9VylN2Xp{Qd~5pAyeTj zh~*1fS}?K&@_X3*ft?FwrtYx|9OVcsN2V+(v=G92o5QwNr&(NZaEWcW{tCAJH0Q&w(mi-CfD^PU+xJ+=a@Z~gqs&>%!7^FX zF*bMK5#U6=YwD)lk_nL%-+@K!vff#W{niq*z?maf7pgPc)iFG`XaF8if~ppP4Vc<)7FngeMCvQe}e>kt-o64JqW~buL^?H-dmv*6n?Kh;g z{(pTcMYlck@m%F^#ha3;z5dI&!7Jw9QJfEpIAr8Hb|)1F2C?B-?0HWew42>TM7s!i$g;)Z206d!MvC69vI$$X%aQ zP$Vk;29d$lwzKd41XRsn07Diz->|k{cy`#dw{^dfn!btugO5$v>}5sh9Np=0@2P zo!Tf*MrAg55(exIa^GM^t$eafXpjp{Z|{+{QKxG?hNy{F`9!o(FK;hL#I3>i9CE_d z)Oz`8v`i{39>djC@{wF4PgcIuf~L?>;Va4Y9_`a-J0xYEA=2~WKmXD%8AmT1lXM>p z(>nvQBQcsdvD`0X zBK?$mW=z?YtFYqo+jc0TP@0zK*+j5eHn2j`qs%~+d6boVo`xCkV&25Xv!Wh`BbN}e zWZWl1 z-c+N|<@@Us!>G6B&qLnJ7m>K1uP-_7kL1nWKEB@U@V`{dp3D$IJ{A}gTA3SfiP_WD z9_@noph&zi_oyD}i+NC z{Pj$S`=lwQPCikQS|=Yhjn{e-*S_E4(eo*dazXhSq@|0WcgzQ5zR=_6Yd-GsPFD#r GhW`S`vSPyk literal 0 HcmV?d00001 diff --git a/bin/librm2/format.fbin b/bin/librm2/format.fbin new file mode 100644 index 00000000..e7e8421a --- /dev/null +++ b/bin/librm2/format.fbin @@ -0,0 +1,203 @@ +' + + + + + + + + + +"Macro for printing or creating nicely formatted strings. + +Table of Format mode characters: + + @ - modifier ` + ! A - princ + \" B + # - gobble arg C - character + $ D - fix + % - crlfs E - (exponent) + & - newline F - float + ' G + ( H - headed info + ) I + * - ignore J + + K + , - arg L + - M + . - set N + / O - (octal) + 0 - arg P - plural + 1 - arg Q - quote + 2 - arg R - cardinals, etc. + 3 - arg S - prin1 + 4 - arg T - tabs + 5 - arg U + 6 - arg V + 7 - arg W + 8 - arg X - spaces + 9 - arg Y + : - modifier Z + ; lsb lcb + lab | - form feed + = - set rsb rcb + rab ^ ~ - tildes + ? _ ^? + +" + +\ + +"~nD Takes any number and prints as a decimal integer. If no arg, print + without leading spaces. If arg and it fits in, put in leading + spaces; if it doesnt fit just print it. If second arg, use that + (or first char of STRING of it if not a number) instead of space as + a pad char." + +"~nO Like D but octal" + + PFIX #DECL ("VALUE" FIX FIX +"OPTIONAL" FIX ) INDENT-TO T OUTCHAN % "IVXLCDM//" "???" ["thousand" "million" "billion" "trillion" "quadrillion" +"quintillion" "sextillion" "septillion"] "th" " hundred" ["teen" "twenty" +"thirty" "forty" "fifty" "sixty" "seventy" "eighty" "ninety"] ["teenth" +"twentieth" "thirtieth" "fortieth" "fiftieth" "sixtieth" "seventieth" +"eightieth" "ninetieth"] ["first" "second" "third" "fourth" "fifth" "sixth" +"seventh" "eighth" "ninth"] ["one" "two" "three" "four" "five" "six" "seven" +"eight" "nine" "ten" "eleven" "twelve" "thirteen" "fourteen" "fifteen" "sixteen" +"seventeen" "eighteen" "nineteen"] "^?" PRINC NO-CONTROL-ARGUMENT? SET <14 . +OUTCHAN> PFIX PFLOAT POBJ PHSTR1 PHSTR POBJ1 PCHAR PROMAN PCARDINAL PCRLFS "|X~" + PCHARS PFRESH-LINE PCOLUMN PLURAL COLUMN-MARKER-NOT-ATOM FORMAT FIX NO-COMMAND +QUOTED-ARG-NOT-FOUND TOO-FEW-ARGS]>> + .GLUE > + + +"~n,mF Floating point. Prints the number in a column n wide, with a +fractional part m digits wide." + +)] 107>> + +"~nE Exponential notation" + +"~R cardinal/ordinal and Roman notation" + +)] 316>> + + +FIX STRING ANY)] 427>> + +)] 520>> + +> + +\ + +"~nA Character string. If there is an n then pad the string with spaces + on the right to make it n long. If it doesn't fit, ignore n. + (A m n minpad padchar) as a control list element means pad to occupy at least + m columns, or if longer than that to begin with, pad to occupy + m+p*n columns for some nonnegative integer p. + at least minpad pad characters are produced in any case + (default if not supplied = 1). + padchar is used for padding purposes (default if not supplied = space). + if padchar is not a number, the first character in STRING of it is used. + A mode can actually be used to PRINC anything, not just a string." + +> + +"~m,nH Princ string under a header" + +> + +"same as above, but right justify string" + +> + +"~S Prin1 an object. Just like ~A (including parameters) but uses PRIN1." + +> + +"~C One character, in any acceptable form. + Control and meta bits print as alpha, beta, epsilon." + +)] 1181 +>> + +"~n* Ignore the next n args. n defaults to 1." + +"~n% Insert n newlines. n defaults to 1." + +> + +"~n| Insert n formfeeds. n defaults to 1." + +"~nX Insert n spaces. n defaults to 1." + +"~n~ Insert n tildes. n defaults to 1." + +> + +"~& Perform the FRESH-LINE operation on the stream." + +> + +"~n,mT Tab to column n+pm, for p an integer >= 0." + +> + +"~Q Apply the next arg to no arguments. + (Q ...) Apply the next arg to the (unevaluated) parameters following the Q." + +"~P Insert an 's', unless the next arg is 1." + + )] 1357>> + +\ + +"Here is where the format macro is actually expanded, and what follows is all +useless once you are compiled." + +" + If channel is false, cons up and return a string. + If channel is T, use .OUTCHAN" + + FORMAT #DECL ( +"VALUE" FORM "ARGS" LIST) FSTRING TOO-FEW-ARGS FORMAT T .OUTCHAN PROG OUTCHAN # +DECL ((OUTCHAN) )]>)> + .GLUE > + +"This function is for a string format control arg" + +> + +"This function is for doing a single escape sequence" + +> + +> + +"Parses out the args for a escape sequence" + +> + +"Eats one argument from the call" + +> + + diff --git a/bin/librm2/fp.fbin b/bin/librm2/fp.fbin new file mode 100644 index 00000000..462e761b --- /dev/null +++ b/bin/librm2/fp.fbin @@ -0,0 +1,66 @@ +' + + + + + + + + + + + + + + + + + + + FRMSCAN #DECL ("VALUE" > ATOM CHANNEL ) #FALSE () +DIGIT? ILLEGAL-PERIOD-IN-NUMERIC-FIELD FPRINT FSTACK UNBALANCED-PARENTHESES " +" "ZDULRC" TOO-MANY-MODIFIERS "IOBFESPAN" TOO-MANY-OPCODES T " + "]>> + + FRMLEAVE #DECL ("VALUE" ATOM +ATOM) "0123456789/XTMG,.ZDULCIOBFESAN + " T]>> + + DIGIT? #DECL ("VALUE" CHARACTER) #FALSE ()]>> + + FPRINT #DECL ("VALUE" ATOM STRING +CHANNEL "OPTIONAL" STRUCTURED) FORMAT (STRING) ARGS (STRUCTURED) FF (>) OPCODE (CHARACTER) FSIZE () FSTACK () () T FRMSCAN #FALSE () FIELDPRINT FLTPARSE +FLTSCIPARSE FPRINT FRMLEAVE STRING % +ANONF1!-TMP #DECL ("VALUE" ANY CHARACTER)]> READABLE UPPER-CASE LOWER-CASE +ILLEGAL-OPCODE FPRINT]>> + + FIELDPRINT #DECL ("VALUE" +ATOM STRING FIX CHANNEL FIX CHARACTER) T]>> + + READABLE #DECL ("VALUE" STRING +STRING) RDBLLIST "[TAB]" "[LF]" "[FF]" "[CR]" "[ESC]" "[SP]" "[DEL]" (VECTOR) +STRING % ANONF1!-TMP #DECL ("VALUE" CHARACTER) L RDBLLIST X]>]>> + + UPPER-CASE #DECL ("VALUE" +STRING STRING) STRING % ANONF1!-TMP #DECL ( +"VALUE" CHARACTER CHARACTER) L]>]>> + + LOWER-CASE #DECL ("VALUE" +STRING STRING) STRING % ANONF1!-TMP #DECL ( +"VALUE" CHARACTER CHARACTER) L]>]>> + + FLTSCI #DECL ("VALUE" FLOAT)]>> + + FLTPARSE #DECL ("VALUE" STRING +FLOAT FIX) ""]>> + + FLTSCIPARSE #DECL ("VALUE" +STRING FLOAT FIX) FLTSCI FLTPARSE]>> + + diff --git a/bin/librm2/ftp.nbin b/bin/librm2/ftp.nbin new file mode 100644 index 0000000000000000000000000000000000000000..e28c538db0c7b70ad2b2ec86bc7d16d1997ea949 GIT binary patch literal 8085 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 literal 0 HcmV?d00001 diff --git a/bin/librm2/fulnam.nbin b/bin/librm2/fulnam.nbin new file mode 100644 index 0000000000000000000000000000000000000000..579a73c748a949be1ccad98275ba00a2f0129880 GIT binary patch literal 2496 zcmb_eeN0nV6hF76ABcs*#4ns&)M0_Ayw^Tn%R-=~MLI!frcBY96`9aQ{6J(dwT6}qWD zoHbsXcjH3%;j~RmzUH?90LoOtyvPUylAMZJtVvoO^z9?4hz*IEeSqRw7-1JA1%1PiOf?nNQoy0% z(?orL>=AaXA8R*bA_~9*^JGRrUw`ZYBdj0WL$ya#BeZsbn#Srjk+LeLlt@NUx2R+o zfehu>KhMJ+v?O?PA1FC1*}^*J6MSwS%H*UX&}vB}6(KXI;Yhsft$5xgDUX7LC8>9% z?2UJ5CTMgYPf2Si=`==g(HGhWO47RI*J#%|MARP}#oF~_ZS!;h3gc>GqkMN#ao{;N zkz%pRNfRNp%U+q=-)W7~j<Eg76iQ1=50}Lx{W? z4{VyLB&~M#-(1>jbBN9Q=QD~XZ1da0j?LQTY-!#+r z0X?j5i&`?5%wqL!2OaxSYHK6t(VRpe|HrV?eCmWC6Z8+IJadFTVZ=;xIep;J@+W-h zaLN||y|0!^ERYd*^QbWB8;Fg|0?IYTsUi%-e#c2~jCCl;O$7xwfuONv@l>=%_CHb; zfJWC&&v@k%;a1-0j?srE2GK|65r&^@)o*86D|5x{gLC# zZ6AmG(yw=g+w_Kt=txstm*~v9dp=_7^}iEs&wJ%`_+idXZ`9Rrw<}tE!e13S(R=Gm z*z;1|>Byd6U$qA>Z@GRvdN9A#Caybo?U3k9x1Wg&Hs9%p4n3;zM*5B}$rPRWxH3G_ zw6;r}HOF5uZaBImD|qmd-xeTXDk-3a_KfPRWs?Ct$^(@f3Ib>jlmQuMxm93ib|l*Z zXaqDe`tajZf8N_}B_spNVfY1R1C#{F*qZ^!H-++raK|@;A3%}^oB;)f%>nojGHFx5 zkyBV*8&LJYG0-}p5QsMg5c$H|8#6gWYyNy7S1)Wtg$B^LzyL}o$+Gq$GdXo@5n2#PDuM3<3J-V# zXg}0LlAd5G-=6z&>q0luLpqDpkh%f31(YnD1+^8Rd=2F9og6a2m!KnOs=Rh-xq64e z3VWZFY`pULUPrncWkUw}yAZw_8}d#S^r14@>#)69=<2L@q8xcyif7F#vDG-lH2mXd z5$-|7p)y=qT~|?xSJEF`;;LJRnN@Yw)iq($7XJ}y%b94|aQQ8^m@Vd|zAQ_lz!jMU zF{NH;<;*75Y{W*PSo&z8vDJb(fs=IIR~n?xdvK$fv#=(!nYCC%UHw;E1)ekUJT`JX zG4oszOLdkr74b%%#i7}!EX^UEzNp!3e7e&lwe$!LMvKv6!8~geq)VHIcN(!^=A_iu ziyQF@&diyM1m47%1Z-q!G3oYC7MoOk%F-r1?!j9nrhBlBBxP+zf!590Tq-x9qQ>E} O*{f`o;en&N%)bCGdNMHp literal 0 HcmV?d00001 diff --git a/bin/librm2/gendir.nbin b/bin/librm2/gendir.nbin new file mode 100644 index 0000000000000000000000000000000000000000..322d19ef4f84213457791f58f656820c0eb5e9bf GIT binary patch literal 1698 zcmb7EeN0nV6hDtbOVy6T0&Zi&$43O_3vHnmmZ0kc%4+;*`BF-^sW3uWV8YC%X0UW& z31hXR2u9t8RItHD9VpYWkC-j$#Xmp&OP@`4<0mkh_C+qjRVCFo$nX-G^Vv9i9wMl^fXj@LRp!H6G2Dq8jm=7!{iC6 zT#Cf$!Gjf!V9%xXPSN$-23F`Epp&PI4TZzvsdV=T;$-$^4~ol}@&?Nro@4oo5AN;_ zj(Oa>0@@qpy@AO~x$VM)^xfoXQ~EiFxLuirZBr-uxvUhE2gSR6!{U+DiH^Y3psyV* zTK;uc@U?83IPkJqTGKDyet^pcM<_ArTyL;!>*ayqMsubN@K=Mt4)T?`HjpqnBLL?- z3{*~n4Jx%*M}bgDTfBfyF;ACI17vb;fKT%2&9~p=wrD{^+{=jjI3mRoDV|7jB0b7E zN5Xd^07lvK+mLc39HL9G?aB-rR3M6Q`3iHPiyp(&;+Fsw*&r6-IS3F5Lx-K>oF9YN zit7@?tj5UbWLVN+$)6zkHL#SnK^3>p4ib$XA5oWJr-WoNf)0B;oq^9qj__)L_!VG- z4aD=kIhYsd=tBh}{+Ry_v|vVz&ITJFDiF!2`9A|8z!}len>+8SaaRyht7x1zwG;!8 zvM7meb5tRP0VJU!Y^#z2M9psCf`?c;?nb>TEU0K) zbuBHE6}Z2Fs>kULJ@!>S#8R{eT+bYFISJ7SyV=oX8z}{RY^A3gkM9$Eu1w_eoTZyP7GK8 z34w@&|9Xh_Lo|6X0E+3p>(|bbUHoCQP?K`r%S`VQM}McwP?g(vR6OD;90(fI*#p5= zb46rcw4>PJOWr`629<=cQVhifvSeJY_QvvhR0TI8jC76mA)W4dT0X|f7s{XvOaRNgzgFg`6cX2 zDsx+_87c{D5bHj@c_sXg9|j`JB2#*i^!^V<*f+B*ZQD`U^12#IBTI3l<-%m!vqngP zm{`c0(cRpC_eu*ElR;vJR6oUl31SLB4N@9(AgcxzVhf-Q6j=bpNf}l8@b;aM9kDG* zRjo6@;sS`9akb;j*js+80G^60ih`SIvEG_#SgE;-}=<9b*eS4iEro(_Wo&M#XC=*XOZs5 zylnzw(KPdnE3ck!`bpg?JW}Jf^1DAAtK*w2x<<6bdZLxz{iM2%cPew61x2-{oeDRmv}zmqS4Ud~#rt$U f@7sTBJ6d8n^to_xW~LkZ#XkD%K2h__8Fta%5T2C( literal 0 HcmV?d00001 diff --git a/bin/librm2/gl.nbin b/bin/librm2/gl.nbin new file mode 100644 index 0000000000000000000000000000000000000000..02373249ee6933309bbb51119d4f7573cacf6865 GIT binary patch literal 11516 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 C=K(_i literal 0 HcmV?d00001 diff --git a/bin/librm2/gnjfni.fbin b/bin/librm2/gnjfni.fbin new file mode 100644 index 00000000..ecfb7552 --- /dev/null +++ b/bin/librm2/gnjfni.fbin @@ -0,0 +1,78 @@ +' + + + + + + + + + + + + + + + + + + + + + + + +> + +> + +> + + + +> > [2 ] [3 WORD]>> + + + + + + + + + + + + + + + + + + + +> + +"On 20x, the state is simply a JFN (full-word), which can be passed +to GNJFN. If it is false, we aren't initialized. On ITS, the state is +a pair: a pointer into a uvector of directories to be searched, and +a pointer into the current directory." + +> + +"Takes a file spec, including *'s, and returns a vector containing +a string and bits as for the GNJFN call, or false if no more files." + + NEXT-FILE #DECL ("VALUE" < +OR FALSE > "OPTIONAL" STRING ANY) SIXTOS STRTOX % % "READ" "*" MFD-BUF % "READB" +"M.F.D. (FILE)" CANT-GET-MFD NEXT-FILE DIR-BUF % T ".FILE." +"(DIR)" "DSK" "DSK:" ";" " "]>> + .GLUE > + + +)] 661>> + + diff --git a/bin/librm2/gs.fbin b/bin/librm2/gs.fbin new file mode 100644 index 00000000..31bff368 --- /dev/null +++ b/bin/librm2/gs.fbin @@ -0,0 +1,432 @@ +' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GSOUT #DECL ("VALUE" ANY FIX +"TUPLE" TUPLE) DEV-DISPATCH]>> + .GLUE > + + .GLUE > + + DRAW-SEG #DECL ("VALUE" > GSEG "OPTIONAL" ) T +DEV-DISPATCH DEV-CM #FALSE () % DEV-X DEV-Y]>> + .GLUE > + + .GLUE > + + SPIN-DP-OR-LIST #DECL ( +"VALUE" ANY GSEG "TUPLE" TUPLE) DEV-DISPATCH () #FALSE ()]>> + .GLUE > + + .GLUE > + + GSBEGIN #DECL ("VALUE" ANY +"TUPLE" TUPLE) DEV-DISPATCH]>> + .GLUE > + + .GLUE > + + GSEND #DECL ("VALUE" ANY "TUPLE" +TUPLE) DEV-DISPATCH]>> + .GLUE > + + .GLUE > + + GSCHANGE #DECL ("VALUE" ANY +"TUPLE" TUPLE) DEV-DISPATCH]>> + .GLUE > + + .GLUE > + + GSMOVE #DECL ("VALUE" ANY +"TUPLE" TUPLE) DEV-DISPATCH]>> + .GLUE > + + .GLUE > + + GSDRAW #DECL ("VALUE" ANY +"TUPLE" TUPLE) DEV-DISPATCH]>> + .GLUE > + + .GLUE > + + GSTEXT #DECL ("VALUE" ANY +"TUPLE" TUPLE) DEV-DISPATCH]>> + .GLUE > + + .GLUE > + + GSAPPEND #DECL ("VALUE" ANY +"TUPLE" TUPLE) DEV-DISPATCH]>> + .GLUE > + + .GLUE > + + GSREMOVE #DECL ("VALUE" ANY +"TUPLE" TUPLE) DEV-DISPATCH]>> + .GLUE > + + .GLUE > + + GSEND-UPDATES #DECL ( +"VALUE" ANY "TUPLE" TUPLE) DEV-DISPATCH]>> + .GLUE > + + .GLUE > + + GSBLANK #DECL ("VALUE" ANY +"TUPLE" TUPLE) DEV-DISPATCH]>> + .GLUE > + + .GLUE > + + GSUNBLANK #DECL ("VALUE" ANY +"TUPLE" TUPLE) DEV-DISPATCH]>> + .GLUE > + + .GLUE > + + GSDOT #DECL ("VALUE" ANY "TUPLE" +TUPLE) DEV-DISPATCH]>> + .GLUE > + + .GLUE > + + GSINQ #DECL ("VALUE" ANY "TUPLE" +TUPLE) DEV-DISPATCH]>> + .GLUE > + + .GLUE > + + GSCONTENTS #DECL ("VALUE" +ANY "TUPLE" TUPLE) DEV-DISPATCH]>> + .GLUE > + + .GLUE > + + GSREADER #DECL ("VALUE" ANY +"TUPLE" TUPLE) DEV-DISPATCH]>> + .GLUE > + + .GLUE > + + GSHIT-TEST #DECL ("VALUE" +ANY "TUPLE" TUPLE) DEV-DISPATCH]>> + .GLUE > + + .GLUE > + + GSHIT-REFINE #DECL ( +"VALUE" ANY "TUPLE" TUPLE) DEV-DISPATCH]>> + .GLUE > + + .GLUE > + + > DP) (T (> PRIMS))>> >> + + + + MAKE-SEG #DECL ("VALUE" FIX FIX ANY ANY FIX > > +) #FALSE () CHANGED LAST-SEG-NUM %]>> + .GLUE > + + .GLUE > + + GSEG #DECL ("VALUE" FIX) #FALSE () ALL-SEG % NO-CURRENT-SEG-NUM]>> + .GLUE > + + .GLUE > + + GSSCALE #DECL ("VALUE" < +UVECTOR FLOAT FLOAT FLOAT FLOAT> "OPTIONAL" ) GTOP BOTTOM RIGHT LEFT RBOUND LBOUND TBOUND BBOUND +SCALE_VEC]>> + .GLUE > + + .GLUE > + + POSITION #DECL ("VALUE" ATOM + ) GFMUNG]>> + .GLUE > + + .GLUE +> + + LINE #DECL ("VALUE" ATOM ) GFMUNG]>> + .GLUE > + + .GLUE > + + REL_LINE #DECL ("VALUE" ATOM + ) GFMUNG]>> + .GLUE > + + .GLUE +> + + REL_POSITION #DECL ( +"VALUE" ATOM ) GFMUNG]>> + .GLUE > + + .GLUE > + + LINE_SEG #DECL ("VALUE" ATOM + ) GFMUNG]>> + .GLUE > + + .GLUE > + + WINDOW #DECL ("VALUE" ATOM +"QUOTE" STRUCTURED "OPTIONAL" ) GSSCALE POSITION GTOP BOTTOM RIGHT LEFT LBOUND SCALE_VEC () RBOUND BBOUND TBOUND (ANY) GLOBAL_CONSERVE_SCALE OPEN-SEG T]>> + .GLUE > + + .GLUE > + + MAPPER #DECL ("VALUE" > +ATOM "QUOTE" STRUCTURED) LEFT RIGHT BOTTOM GTOP SCALE_VEC () (< +UVECTOR [4 FLOAT]>) LBOUND RBOUND BBOUND TBOUND]>> + .GLUE > + + .GLUE > + + GFMUNG #DECL ("VALUE" ATOM FIX +FIX "TUPLE" ]>) GFMUNGER]>> + .GLUE > + + .GLUE > + + GFMUNGER #DECL ("VALUE" ATOM +FIX FIX ]>) GSOUT SCALE_VEC DEV-X DEV-Y T]>> + .GLUE > + + .GLUE > + + BOUNDS #DECL ("VALUE" ]> "OPTIONAL" ) GSSCALE TBOUND BBOUND RBOUND LBOUND]>> + .GLUE > + + .GLUE > + + USE-INQ-R #DECL ("VALUE" < +UVECTOR FLOAT FLOAT FLOAT FLOAT>) GSINQ BOUNDS GSSCALE INQ-RESP DEV-CHAR-SIZE]> +> + .GLUE > + + .GLUE > + + BAS-ERR #DECL ("VALUE" ANY +"TUPLE" ANY) SLOT-NOT-FILLED-IN-BASIC-DISPATCH!-ERRORS]>> + .GLUE > + + .GLUE > + + BASIC-DISPATCH #DECL ( +"VALUE" ) % ANONF1!-TMP #DECL ("VALUE" > "OPTIONAL" ANY) +GNRL-GSEND MAKE-SEG #FALSE () OPEN-SEG SEG-ALREADY-OPEN!-ERRORS ALL-SEG CHANGED +DEV-Y DEV-X SEED]> % % +ANONF16!-TMP #DECL ("VALUE" ANY) % OPEN-SEG +NO-SEGMENT-IS-OPEN!-ERRORS DEV-X DEV-Y #FALSE ()]> % ANONF24!-TMP #DECL ("VALUE" ANY GSEG) GNRL-GSEND OPEN-SEG +SEG-ALREADY-OPEN!-ERRORS ALL-SEG % CHANGED #FALSE () DEV-Y +DEV-X SEED ARG-NOT-VALID-SEGMENT!-ERRORS]> % +ANONF39!-TMP #DECL ("VALUE" ANY FIX FIX) % OPEN-SEG +NO-SEGMENT-IN-PROGRESS!-ERRORS DEV-X DEV-Y]> % + ANONF51!-TMP #DECL ("VALUE" ANY FIX FIX) % OPEN-SEG +NO-SEGMENT-IN-PROGRESS!-ERRORS DEV-X DEV-Y]> % + ANONF63!-TMP #DECL ("VALUE" > "OPTIONAL" FIX FIX) DEV-CHAR-SIZE LBOUND % OPEN-SEG +NO-SEGMENT-IN-PROGRESS!-ERRORS #FALSE () DEV-X DEV-Y]> % ANONF92!-TMP #DECL ("VALUE" > GSEG) GNRL-GSEND OPEN-SEG SEG-ALREADY-OPEN!-ERRORS +ALL-SEG ARG-NOT-VALID-SEGMENT!-ERRORS % #FALSE () DEV-X +DEV-Y CHANGED OK APPENDED SEED]> % +ANONF110!-TMP #DECL ("VALUE" ANY GSEG) GNRL-GSEND OPEN-SEG % + REMOVING-CURRENT-SEGMENT!-ERRORS ALL-SEG #FALSE () % +REMOVED-SEGS ARG-NOT-VALID-SEGMENT!-ERRORS]> % + % ANONF138!-TMP #DECL ("VALUE" ANY GSEG) +GNRL-GSEND OPEN-SEG % ALL-SEG #FALSE () % ARG-NOT-VALID-SEGMENT!-ERRORS]> % +ANONF149!-TMP #DECL ("VALUE" ANY "OPTIONAL" ) GNRL-GSEND OPEN-SEG + % UNBLANK-ARG-DEFAULTED-BUT-NO-CURRENT-SEGMENT!-ERRORS %< +TYPE-C GSEG VECTOR> T ALL-SEG ARG-NOT-VALID-SEGMENT!-ERRORS]> + % ANONF165!-TMP #DECL ("VALUE" ANY FIX FIX) %< +TYPE-W GSEG VECTOR> OPEN-SEG NO-SEGMENT-IN-PROGRESS!-ERRORS DEV-X DEV-Y]> %< +RGLOC IMLAC-INQ T> % % ANONF177!-TMP #DECL ("VALUE" ANY "TUPLE" ANY) FREE-SLOT-REACHED!-ERRORS]> %< +RGLOC BAS-ERR T>]>> + .GLUE > + + .GLUE > + + BASIC-GNU #DECL ("VALUE" +ATOM) OPEN-SEG () REMOVED-SEGS #FALSE () ALL-SEG % % APPENDED CHANGED OK ILLEGAL-STATUS-ATOM!-ERRRS T]>> + .GLUE > + + .GLUE > + + IMLAC-INQ #DECL ("VALUE" < +VECTOR FIX FIX FIX FIX FALSE FIX > LIST>) "IMLAC PDS-1" "" #FALSE () ()]>> + .GLUE > + + .GLUE > + +> + +> + +> + + + + + +> + +> + + + + diff --git a/bin/librm2/gshard.nbin b/bin/librm2/gshard.nbin new file mode 100644 index 0000000000000000000000000000000000000000..e8ea591f682c548b3bf55b0933056c4ac16e524c GIT binary patch literal 7524 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 + + + + + + + + + + + +> + + IML-REFRESH #DECL ("VALUE" +) GOXY ALLO-LINE DRAW-SEG NEED-ERASE USING-TTY BUCKET-LINE +OUTCHAN "]" INI-FREE-LINES "C" MAX-TTY-LINE " " REMOVED-SEGS ALL-SEG %< +TYPE-W GSEG VECTOR> BEG-LINE]>> + .GLUE > + + .GLUE > + + ALLO-LINE #DECL ("VALUE" +FIX) FREE-LINES BUCKET-LINE]>> + .GLUE > + + .GLUE +> + + DONE-WITH-LINE #DECL +("VALUE" > ) GOXY BUCKET-LINE +T NEED-BUCKET-REDRAW NEED-ERASE CONT_L_FLAG OUTCHAN "]" FREE-LINES]>> + .GLUE > + + .GLUE > + + IMLAC-READER #DECL ( +"VALUE" ATOM) IML-REFRESH RCPOS GOXY T NEED-ERASE OUTCHAN +GRAPHIC_READER_ACTIVATION (ANY) CONT_L_FLAG DEV-DISPATCH MY-TTY-OUT () BEG-LINE BUCKET-LINE "XOXO" BEG-BELOW-BUCKET "]" END-LINE +EXIT]>> + .GLUE > + + .GLUE > + + IMLAC-GNU #DECL ("VALUE" < +OR ATOM FALSE>) RCPOS DONE-WITH-LINE IML-REFRESH GOXY ALLO-LINE DRAW-SEG GSMOVE +GSOUT OPEN-SEG DEV-DISPATCH MY-TTY-OUT () OUTCHAN +GOUTCHAN (CHANNEL) NEED-BUCKET-REDRAW () USING-TTY BUCKET-LINE T +NEED-ERASE REMOVED-SEGS % ALL-SEG % +APPENDED CHANGED OK ILLEGAL-STATUS-ATOM!-ERRORS CONT_L_FLAG INI-FREE-LINES +FREE-LINES "]" DEV-CM DEV-X DEV-Y]>> + .GLUE > + + .GLUE > + + IMLAC-DISPATCH #DECL +("VALUE" ) TTY-OUT-DISPATCH BASIC-DISPATCH BUCKET-LINE +USING-TTY MAX-TTY-LINE INI-FREE-LINES FREE-LINES MY-TTY-OUT % + % %]>> + .GLUE > + + .GLUE > + + diff --git a/bin/librm2/gsttyc.fbin b/bin/librm2/gsttyc.fbin new file mode 100644 index 00000000..801f2c74 --- /dev/null +++ b/bin/librm2/gsttyc.fbin @@ -0,0 +1,84 @@ +' + + + + + + + + + + GOXY #DECL ("VALUE" ATOM FIX +"OPTIONAL" FIX) OUTCHAN "V" "H" T]>> + .GLUE > + + .GLUE > + + LEAVE_READER #DECL ( +"VALUE" ANY) GRAPHIC_READER_ACTIVATION T]>> + .GLUE > + + .GLUE > + + GRAPHICS_READER # +DECL ("VALUE" ANY "OPTIONAL" ) IMLAC-DISPATCH ARDS-DISPATCH +USE-INQ-R GSREADER T SKIP_IT USING-TTY INCHAN INTERRUPT % +CONT_L_FLAG % % " IMLAC? " DEV-DISPATCH]>> + .GLUE > + + .GLUE > + + + + USE-TNM #DECL ("VALUE" ATOM +STRING) IMLAC-DISPATCH ARDS-DISPATCH USE-INQ-R SKIP_IT "READ" GINCHAN "PRINT" +GOUTCHAN USING-TTY INTERRUPT % CONT_L_FLAG % +" IMLAC? " % DEV-DISPATCH T]>> + .GLUE > + + .GLUE > + + CTLHAND #DECL ("VALUE" ANY +CHARACTER ANY) T CONT_L_FLAG PACKAGE OBLIST "PLOTSO" "ERASE_S"]>> + .GLUE > + + .GLUE > + + GFOUT #DECL ("VALUE" FIX FIX) +]>> + .GLUE > + + .GLUE > + + TTY-HALVEY #DECL ("VALUE" +FIX FIX FIX) GFOUT DEV-CM DEV-X DEV-Y]>> + .GLUE > + + .GLUE > + + TTY-OUT-E #DECL ("VALUE" +ANY "TUPLE" ANY) ILLEGAL-OPERATION-DURING-OUTPUT!-ERRORS]>> + .GLUE > + + .GLUE > + + TTY-OUT-DISPATCH # +DECL ("VALUE" ) % % ANONF2!-TMP #DECL ("VALUE" FIX FIX FIX) GFOUT DEV-CM DEV-X DEV-Y]> + % % ANONF11!-TMP #DECL +("VALUE" "OPTIONAL" FIX FIX) GFOUT +DEV-CHAR-SIZE LBOUND DEV-CM DEV-X DEV-Y]> % +ANONF44!-TMP #DECL ("VALUE" FIX FIX FIX) GFOUT DEV-CM DEV-X DEV-Y]>]>> + .GLUE > + + .GLUE > + + diff --git a/bin/librm2/haverf.nbin b/bin/librm2/haverf.nbin new file mode 100644 index 0000000000000000000000000000000000000000..94b5383e1ef744bbd3089c5b48679fde7fa987df GIT binary patch literal 1422 zcmcIkZ%kWN6hE)!-v%88VGb~GEsL}T3LTZ8Sx6sH*F`6t%w=UUfRkBZh-@wq6E>0> z3u_2nhTF{CfJ##uhMlZrA_-rx5zYP}V{S27vXGdqi!L_a_xj$eiuXOJ5aS2Gct5=S z&OPVcd(OGP-wV4hS?t`=2j4hx(kMN_1wO0w@MA+LCtPjX>E!QdtTcD}?K-Dm)-2eC zeank9uWXq=$UpzwEFE@#bgE0}Y~2+Lp@!*S0boy2xfy`z9|cN8l!)X-xi*k9jq;P; zlKS@nP(p*lC?mmm69C2f0+7d)_5h`e+eT8Y0Z2v(2LPhW0CJTLKvqgV6w_#cJSmt> zUo*4VDQqisTAL|H=yUQvh}qLLyzv^xNMpVEVs=#G>4U6WP*v z|5h#I2!LiowXy~WN=hPEWE-G_IS_zCDHX+$$}sgIsZ5^%lvpkGk7~E80n(Yr#ETSS zLk|GrRgI)^JwmG`=am{oR3CsBFxihc8c7Q4GeGr=KoFxRhiY4GfW+IN5Nxo8%nxMY zDf#Jh;=J<}4ce#c30PgS=n-X&lV2ilg*#PqpWw}D`|bS4Z@THofcmvF{8Z6`6KA%W z9KxAUB^`awecOjq*BuWR`yzK6P*-G7v-^T@)@GuGDfgU@$3y6vu(xH2-r)ExRMQ>x zyLNU78KXCRQG;rDT=>3eX-KGb9rSR4$7tQ*=drtTCi0!7%Fa0(7YCTBf{8xvsxRna zu7--eg0e*<+5VtMs0-E2h;1pvcCxC|U&-12$Df~q2A~w6hJLHWvJ!8DJgHgk=kvec zeTP7$WLDKwY)R`lgdj~aBl8KTa>BLfW*<&Px4pdnp{XzODF6C6=XdD_$Vi5}gv?fC zU1PZD7<+2u8hhj3WE*=q8#S}KZGkrSiFLXir(CG$V4u`a9>R+3@+S7W6}7Q@vL=sV zh1Jj;DOTR^Ub{^b^l^`3V!?h*-8i@JZ1AEmczL)s+Nrwfq64y4Ug(zAkX+)ALQjwWUYDP&!f=Hw{y8~d8_OK07)MmnBq_9EiUNw|8YSaiQ zPD=!;k&!qxLB#9^~q zu;r`scSIIY$(64jf0^v8E{bTuY!{Ah{np2irG4$>jw#h9Vd3!WPHfKK{Y6X$ni(;i z93CTF#|IUwCj3_p{XHg$SGBnO-jxov{m1EM_K0goQ$&|D-Ng20l{d4+&pbO5x#d!1 XhTWG;7r8++caGC9&(fRaZ&dyTV_QS1 literal 0 HcmV?d00001 diff --git a/bin/librm2/helpat.nbin b/bin/librm2/helpat.nbin new file mode 100644 index 0000000000000000000000000000000000000000..ccc6297a25057b13421c71822e99adc9d54586a3 GIT binary patch literal 8867 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 P~?K8P*`XWW2Gwu=|Bd_hN0_=3N<7mXO?b4C4 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 Gv;GgBD3@UX literal 0 HcmV?d00001 diff --git a/bin/librm2/histor.nbin b/bin/librm2/histor.nbin new file mode 100644 index 0000000000000000000000000000000000000000..bc37d5b51a0787368943f6ad1e39e68580838956 GIT binary patch literal 31155 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 bgzXYkQqQolzAATzJ?-*)ui_W=f+PMP(6{CO literal 0 HcmV?d00001 diff --git a/bin/librm2/hosts.fbin b/bin/librm2/hosts.fbin new file mode 100644 index 00000000..3afa47ce --- /dev/null +++ b/bin/librm2/hosts.fbin @@ -0,0 +1,50 @@ +' + + + + + + >> + + > + + + + + + + + + + + + DO-HOST-LOAD #DECL ( +"VALUE" "OPTIONAL" ) % "READ" +"SYSBIN;HOSTS2 >" % T % % CANT-GET-PAGES CANT-LOAD-HOST-TABLE NUMTBS]>> + .GLUE > + + +> FIX)] 245>> + +> )] 211>> + + < +OR FIX STRING>)] 198>> + + )] 186>> + + )] 171>> + + "OPTIONAL" )] 88>> + +> + + diff --git a/bin/librm2/hptek.fbin b/bin/librm2/hptek.fbin new file mode 100644 index 00000000..2e5b6dc7 --- /dev/null +++ b/bin/librm2/hptek.fbin @@ -0,0 +1,17 @@ +' + + + + + + HPTON #DECL ("VALUE" ANY) %]>> + .GLUE > + + + HPTOFF #DECL ("VALUE" ANY) %< +RGLOC NULL T>]>> + .GLUE > + + + diff --git a/bin/librm2/init.gbin b/bin/librm2/init.gbin new file mode 100644 index 0000000000000000000000000000000000000000..0ae656b630dc17eb4531d1bab705a610b3f94988 GIT binary patch literal 13412 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 + + + + + + + +> + + LTIME #DECL ("VALUE" "OPTIONAL" ) % T ![31 28 31 30 31 30 31 31 30 31 30 31!] %]>> + .GLUE > + + +\ + +)] 225>> + + + +> + +> + +\ + + +> + +> + +> + +> + + diff --git a/bin/librm2/kwic.fbin b/bin/librm2/kwic.fbin new file mode 100644 index 00000000..57156495 --- /dev/null +++ b/bin/librm2/kwic.fbin @@ -0,0 +1,35 @@ +' + + + + + + + + + + + +> + + (KWIDTH) FIX> + + + + GET-FIRST-WORD #DECL ( +"VALUE" STRING STRING) F-L LETTERP LOWER-CASE " + ()![]<>?,.;:\"/" % OUTCHAN "READ" "DICT;ENGLSH TEXT" %< +RGLOC KWIDTH T> "PRINT" " + _" %]>> + .GLUE > + + +)] 84>> + + ]>> "OPTIONAL" STRING)] 147>> + + diff --git a/bin/librm2/netrjs.fbin b/bin/librm2/netrjs.fbin new file mode 100644 index 00000000..24134d6f --- /dev/null +++ b/bin/librm2/netrjs.fbin @@ -0,0 +1,374 @@ +' + + + + + + + + + + + (SCRIPT INPUT PNCHAN PUCHAN CARD-READER-CHANNEL FILE-INPUT-CHANNEL +OUTPUT-CHANNEL) (NEWJOB MORE LATER BUGFATAL ENDJOB) (TELNET-CHANNELS) > (DEMON-NAME JOBNAME) +STRING (INPUT-FILE) (SIGNON-NAME USER JOB) (COMMAND-TABLE) VECTOR (ERROR-HANDLER) HANDLER (VERSION) FIX (FTPLIST) +LIST (EH) HANDLER (LINE-BUFF) STRING (BINARY-BUFF) ( +JOB-DATA) (JOB-DATA-FILE JOB-DATA-LOCK) STRING (LOCK-CHANNEL) < +OR FALSE CHANNEL> (HISTORY-FILE) STRING (INITIAL-HISTORY) LIST> + + + + + + + +> + + + + + +> + +>> + +> + + 14 >> + +\ + + SETUP #DECL ("VALUE" STRING) +PTIME FLUSH-DEMON RTIME DATE SUBSTR ICP GET-OUTPUT-CHANNELS ACC CONNECT FRAMES +STATUS-JOBS USE-DATUM QUIT STDMST OUTINFO NOW LOGOUT LOGIN UNSOAK % #FALSE () % % % % % + % % % % %< +RGLOC USER T> % % % % % % % "NETRJS" %< +RGLOC JOB-INPUT-FILE T> "DSK:NETWRK;RJSINP >" % +"DSK:NETWRK;RJSAGN >" % "DSK:NETWRK;RJSLSR >" % T "SETUP DONE" % OUTCHAN "VERSION NUMBER: " +VERSION-NOT-FIX-ERRET-FIX-TO-WIN % +"CREATING NETRJS DAEMON, VERSION: " "MUDDLE VERSION: " % +"FILE TO BE CREATED: " "DSK:NETWRK;NETRJS " "SV" "SAVED" % +READ-TABLE % (VECTOR) ERROR-HANDLER % "ERROR" % INCHAN INFORM +"MIT-DMS CCN-RJS INTERFACE, VERSION " ", " "READ" +"SIGNALLING SYSTEM TO WAKE UP DEMON" "DEMON NOT AVAILABLE, SORRY." "PRINT" +"NETRJS-SCRIPT-LOCATION" (CHANNEL) ERRLOC (ACTIVATION) "NETRJS DEMON VERSION " +TO [601 701 504 403] "INPUT FAILED, WILL TRY LATER" "RJSAGN >" [401 404] ERROR +"CAN'T SUBMIT JOB" "RJSLSR >" "SIGNON FAILED, WILL TRY LATER" +"CHANNEL ABORTED, WILL TRY LATER" RJS-ERROR "CHECKING FOR OUTPUT" +"CCN ABORTED CONNECTION, WILL TRY LATER" "MORE JOB INPUT HAS ARRIVED," +" REENTERING DEMON LOOP" "RESCHEDULING DEMON" "DEMON FINISHED, " FATAL +"ERROR, FATAL (BUG) " "FATAL BUG DETECTED IN RJS DEMON-LOOP" "CRASH >" +"CLOSING SCRIPT" "SCRIPT OPEN TO " [201 203 204 205 206 207] +"OUTPUT SYNTAX UNPROCESSABLE" [502 209] "CAN'T OPEN OUTPUT FROM CCN" +"SIGNON FAILED" [601 208] "CANNOT OPEN OUTPUT VIA FTP," " WILL TRY LATER" +"DATA BASE LOCKED," "JOB OUTPUT AVAILABLE" "READB" "NET" +"OUTPUT CONNECTION OPEN TO CCN" SUCCESS "PRINTER TRANSFER COMPLETE, " +" BYTES TRANSFERRED." % DEBUG +"PASSING ERROR TO HIGHER REP LEVEL." "ERROR DETECTED, CODE: " ", REASON: " +FILE-SYSTEM-ERROR!-ERRORS "CHANNEL ERROR" "FATAL ERROR, BUG" LERR\ !-INTERRUPTS +"FATAL BUG DETECTED IN ERROR-TRAP" "COMSYS-INPUT-FILE" +"\"TO\" (\"NETRJS-MAINTAINER\") +\"FROM\" \"NETRJS\" +\"SUBJECT\" \"Daemon Crash\" +\"TEXT\" " "\"SCHEDULE\" (\"SENDING\" #FALSE())" "USER" "USER " ", OK." +"PASSWORD" "PASSWORD " "REMOVED" " FOR USER " "." "JOB" +"READY TO ACCEPT DATA FOR JOB " "(DEFAULT)" ", USER " "REMOVE" "JOB " +" REMOVED FROM DATA BASE." "ENABLE-PROBE" "AUTOMATIC PROBING ENABLED FOR USER " +"DISABLE-PROBE" "AUTOMATIC PROBING DISABLE FOR USER " "PRINT-OUTPUT" <> +"PRINTER OUTPUT SET FOR JOB " "PUNCH-OUTPUT" "PUNCH OUTPUT SET FOR JOB " +"RETRIEVE-SCRIPT" "RETRIEVAL SCRIPT " "SET" " FOR JOB " "FILE-SCRIPT" +"SCRIPT CLOSED." "QUIT" "EXITTING COMMAND PROCESSOR" "FILE" +"ATTEMPTING JOB SUBMISSION FOR USER " "CONNECTION TO CCN BROKEN" +"CAN'T OPEN FTP CONNECTION TO INPUT FILE" "DATA BASE LOCKED, TRY LATER" [102 101 +] "DATA BASE CLOBBERED, INFORM JFH" "BAD SYNTAX IN INPUT STREAM" +"CARD READER ABORTED BY CCN" "CAN'T OPEN CARD READER" +"JOB NOT ACCEPTED, TRY LATER" "JOB REFUSED" "SIGNON TO CCN FAILED" +"BATCH-SCRIPT" "SUBMITTAL SCRIPT FOR BATCH INPUT " "SET TO FILE " "REMOVED." +"BATCH" "FILE-SCRIPT " "FILE " "BATCH SUBMITTAL OF FILE " " SIGNALLED." +"BATCH SUBMITTAL NOT AVAILABLE NOW." "END OF COMMAND STREAM" +"MUST GIVE USER COMMAND FIRST" "ARGUMENT NOT GIVEN OR INCORRECT" +"MUST GIVE USER AND JOB COMMANDS FIRST" "UNRECOGNIZED COMMAND" +"TRYING TO OPEN LOCAL FILE " " FOR " "WRITING." "READING." % %< +RGLOC EH T> "FTP CONNECTION FAILED: " "STOR " "RETR " "CHANNEL OPEN FOR " +"WRITING" "READING" " VIA FTP TO " % +"FTP DATA CONNECTION FAILED: " "OPEN TO FOREIGN HOST " ", FILE " " FAILED." EH +"BAD SYNTAX IN FILE SPECIFICATION FOR FOREIGN FILE" "ERROR DURING FTP PROCEDURE" + "CAN'T OPEN FTP DATA CONNECTION" % +"UNIMPLEMENTED RECORD TYPE" "NO OUTPUT CHANNEL" % +"PRINT OR PUNCH ABORTED" "BAD SYNTAX IN DATA STREAM" "BAD FILLER" +"BAD SEQUENCE NUMBER" "BAD DEVICE CODE" 1RJS-ERROR "CHANNEL ABORTED" +"BAD CARRIAGE CONTROL CHARACTER" "SYNC" (580) % +"INFORM 0 " TELNET-CHANNELS % "SIGNOFF" (205) () #FALSE ( +"CHANNEL CLOSED") (106 201 208 209 304 401 402) SL "" SIGNON-NAME "SIGNON " +",PASSWORD=" "CHAR" % (110 111 876) (307 308 750) "STATUS" (802 +804) ![0 0 0 0!] ["PRINT" "PUNCH" "SPOOL" "XEQ"] "0123456789" +"BAD INPUT SPECIFICATION" "CANT OPEN CARD READER" "PRINTB" % +"CARD-READER CONNECTION OPEN" % "CARD READER ABORTED" +" BYTES TRANSMITTED." (534 531 501 503 207 509 510 602 532 535) "JOB ACCEPTED" +"JOB NOT ACCEPTED" (504 512 602 204 501 503 207 509 510) [205 501 503 207 504] ( +504) % % "PRINTO" % % "DATA BASE LOCKED" % "JOB DATA BASE UNWRITABLE?" "JOB DATA BASE CLOBBERED" +"INTERNAL BUG IN DEMON, DISABLING" " AUTOMATIC RUNNING" % % "HISTORY FILE UNWRITABLE?" +"NOTHING IN QUEUE, DEMON NOT SCHEDULED." "SIGNALLING " +" DEMON TO CHECK AGAIN IN " " MINUTES." "SIGNAL TO DEMON FAILED." % READ-CHECK "COMMAND?" "BAD COMMAND." "PROCESSING " " COMMAND."]>> + .GLUE > + +\ + +> + +> + +> + +> + +> + +> + +> + +> + +\ + +> + +\ + +)] 2925>> + +> + + CHANNEL)] 3491>> + +\ + +> + +> + +> + + FIX)] 4055>> + +> + +> + + +> + +\ + +> + +>>>> .TLI> > + +)] 4669>> + +> + +> + + +"OPTIONAL" )] 5017>> + +> + +>)] 5464>> + +> + +> CHANNEL)] 5655>> + +\ + +> >>> .T-HEAD> > .T-CHEAD> > + +> + + CHANNEL)] 6010>> + +> + +> + + CHANNEL)] 6866>> + + CHANNEL)] 6899>> + +\ + +> + +> + +> + + +STRING STRING)] 7113>> + + STRING)] 7196>> + + STRING)] 7253>> + + +STRING)] 7310>> + +> + +)] 7634>> + +)] 7726>> + +)] 7818>> + +> + +> + +> + +\ + +)] 8099>> + +> + +)] 8382>> + +> + +> + +> + + .GLUE > + + diff --git a/bin/librm2/oddtst.nbin b/bin/librm2/oddtst.nbin new file mode 100644 index 0000000000000000000000000000000000000000..804cb51f06eab1b03db85ecf39911a4bc7779c42 GIT binary patch literal 5920 zcmd5=dr(x@8UGfLT_P*HA_iR_7ec~w1>~7%l#6TvQ&BCLvF&=@B%V`ej5 z5Sd^hZHzH)sRpT!KtM6$j5AJ>#?BDygHAMUCz*7TlC+IWbNBAuB}%{V?BlKkGR8DB zy?@*}_nz~e*Z2E=-|w7}&Nqw}>FG~DXc1JM1>KJRuhtxpjveN7Bg+hnTU>umT*FKI zlk^s;<4vwvdS&Ld7T1;7tG<7~9y%;Unm;I)hPpoV{c9^|cDHOS>T);5Vt=P&uXj88 z;;wZIGdBIv>e{@X@0Q+bQ%8+-zOlMXI;LIS0vUEvI_4vR4#Er6*r#~d-@?mP@tIu=hrAGLO{WVY5;^F zT%e$RYwQ+RSYf@NtA)j48i1Cjm+WZW1HmcT06~!70KtOht+6q#po|ud2JA%@A^#c9 zgk9+c01t@RCGHp6Qdf`qyGo?SW9*fZ-2kDE*0Z4IVzF_`Jmr#UWRXNOTP*;M5rSjT zXt%h63M(z(d780ql&4`Y00gIRz`@9%LQr5QT#yo`Voz~Nti**d3$j;LSn>aZ)7dV> z#3`+r`L&Q^!c{}khFZvw+jF4}pcH~~Awo6~+bq^})|ku3U8Di^j?eqyIRPwt;t>~> zGXXS!Q@}@PCD*j#bf`26unt1)paPv8!U;7RP^+KX*ci$h14JX(wrB|H>)t!+YSO;f zA~k9f4DQPtSGNd-+|Xgyv4-EPO*@fa#mn%Ebm_LZE$(WHHnry(Qgr7Pe!q#B=}z77`AC*(i& z{LaMOYA{y zpobs~25IN{z84{+7G^>a+DiX=_1lkbW5Yz4(g108#WC2y%$7|r*2OhcB9_^w^J3^; z-AD;{sac5Nu64Q6|6yo$4nHt>9AkXJ%dS_}+jhC5HgRkG6vF;38{Kl_Or5Boox52G zUz=TprFYC?%4L0(xYcyFPTaRPt4;_n>#ug|%hJuxgxOhU@sg>pTGY2?;=eg(wuxJH zwsKK_eZVXZ9?Yl|n`Xal7Ppve^-lF`SygD8xlKGZ=eOsafAUbxsuuVD%U*9ePRH9y z?6n$>Z7e7A2$dAXD8VW7Y9W{r2a9n}=vgfv+@P3JP)y;=7YI;*(Ir>Nu}eWTmtu;= zV>pK!tE8?XC}8IJYgtf7aiJJBF$qemxW6A_Org;jr>0DpOKqd%2?z>`Fcr2%oaZd` z)FPar&+vO74_-@xX#>XtKj?d2X&h{_4E_cU~OD_vi zo$q$Lgu|TGrKwrb;@WF0I4ZGx(X+nvfS_4l$_vKIA&eNxFoj8+VWji-^*aRBDI4?J z*MvSf9Og1G<`e#JceFt&`(zkKEW->4DuY>`CPm50h0i?0K_vTRL4Z^SVIB(#0=ps; zwBE*vJ8H(}Z@}6hbcY}MxDojLK%^w$cdDJ?rrc_AS~*uG zPAfZIDHfYDc*n_)d+WpnYjWzGD#G;&Q_OdPY<~ZcwBO8mfNaP47=Ah+Q-)ZYmIn|? z9I9i;VJ|^N;V@6RIG*@^6#4$<3tT9^CIzybAP~r-Nbombm$6o4z zrEE?CC=agnGIapTgA0lI??Cyo@|yUJ+atN&7`SWD({Mim^j%V4r{U;#L4USdJn@(G z&Eme-?g0I%S$*|l@xg(5@#2J_U*0ACv#J#HYNW-J5$^);G8YqOJeo(wtjyVd9Ni-H zgb=`Q9OK)FDK=%49CsvvRbs4L@lHktQ)5+dnI z=5t0&vd=xV<)<rdqYEJmq3gw@`o2VMPtKiTSD^@YuwvFi@@RywEY za*&;L57&!>uV!u&)N3dmYyP&|%Y}*WcT2-}ivF+*Hnyz0VW&WEVMZhEyvWgN+2c)B zOKM>rhfEIH+_L~o*NJWYkj3TWKcc8d({XRY1bB(EGfG59E0*L=Nkr}z?Wja4O=>8o zDjh7TTP;Uc`FH|Vd0>i-Gs|W~O39O&QML^sehFjzA`>Dp&HTJPoHLE9B#nFvHLjHq zwKNr#2FFTXJ&HaXqbDvCSKyVW2sJx;Q{hd(HRjz^g^$cnn@~S`4qf9wM}(xc4dPMD zgS_*+>sRI>UV56lbV%x(VLR+TO&ay0R$uNo{`1ar)UAeIG6ub3)2A+@sTQQtvOj!y zyS)$|WS{v((KGV48=}#cT$EqrO`Y>0$cVYAde)Xl>`(|%9$QkE#9349NV_o*v<@Hu z#0s?V>rq@bGTJ?Ym}F-+%541sSLRoojO1$ZWLXw3?t8tz(Wzg129d1msT9?J&8ZXA zRC(A^^q$%I4@XJC(#ON?>|I8y^Dhi#spcYe`#_7(Og5C`ns zJq`lwG{Rl#qm#!fK^yx-xs;w*e2!+%gpTa#aqdwP3LJpHKne!Al@|p*=wPiYQ^X0aTh$#mh_}@BRNe8BD5<1=VK;tE*{7>`5sj>3uu| zZo=Fj5r36;??@~AUtnT(Nm&kGHzw>y4IqLr|95kI${beE_M*^GCy2@?ch`5DlT_2by{fa3+(D#U&tlddEU# z%W@REt(j;nrk3xVE7{K-H`j?wzu$_kN7&GlPMDY_ftZDE$LJQsCw{+vXkqEkD4_81 zB$t)PU1^`6Y?iWO$Di(6UD=w&EPMyV!g_;C?&o1HB!F!N4l~I@NRM!ZHFK&Ze?j{|!Z$9TtPu4o1*{0`s~Z zIw0N-#~|GfgOFnf0hZboDk!omQlNy{-eWd#XKi@*H;!IzsKqC0&(w=4b8_({H?z+y z)~y|=5eILi@nXuy3#-I`-{|4REeA2VgqwOW&CKaHPb`=cR`9~7m%WPrE`mblF$#|~ zyoQ@X!b0UmJVpk=DB24n3<}SMoC3Y=y-k0pQCjUx#I}EuxnP0LDY(xeHy) zOINq}UA)yJ@$M%ZPcES=s&M+0Wr8QQFlTQ!7GmG5)_2W>ce4d}CPzsYC_=QfMWXFY5daw?YaBb~q8y9>`P-YfAX+0lrj>LZ7DR1M?tB}+B~2W)gDrsWujZ5gi>iy6lv?WE{)O(lj2Oak6fn@)zqnX;eVYPC)uJ4>azHjD)dfO0_7Z5_f zvp?C242gXi$Lf_8lW0xi-B(c;S=fXOg=kGKpScntgJL~~GPp8?HrRg%DVhnq)RtXJ zz078JRUnk;8vzw01C=spW#gAsPVAG=S6NY3o>eYHttf|8UXm~T=ikCp4G7`Y^tA() z#F^jiAsRv%G;B+vX9Bg;B86K3)QZHPjv)g%1Q@AzBMVUs9_Zyt9_rE;GE-;`iUFZj zU*Ft{>i#d}JO-Jr@#3RU00o1?pilt*Ex^DE+GyFsC@@1o9oy68Xv+l@+1f_|K%6xl zhgU-1siOa!K<61#sSJp-rx>MM^2ml!K;bl_EQ2x1_@aOWW=p5(be}1p^^7XT093IM zR)q(0;S{u@V!|W3lM?EpwhdJ3CfVS98vOu}(nGPBBcY!!cs$7XWj318&WfhJX&7V{ zV6Z9-sT;~6nh|CAn1kDnkcndXCdFd@pJZeb_Z;jjl`3i6N@k;ge#ro3?rTLgOk$-< zY5BSm4Dc~piQsr3Ln-8jN)bF?a4_!|9U78Q91bR00l*NPEI6F>#UwjInaE023LE9o zmyvlFzyFIXd#O|i(qGR~=_!z|c2OxGq{(|!%B8kuDy;#jrG!fGaA@^Xhv~taL^)!) z`iinHdskHd>Hc9^9rzUYX`=0#ti6EeqFR?_?r6fg@wcPey@IRq(qqrfzoDw;q+~+GH?IhDl4+1RkW>) zQreLTA)o#Eweo^t7X1jVu0Y~~p#wRPfup>@qg^;LRo%JSlp+T$Ur*NhIJQ?-@ATDH zSIaeJCHR@3-@n_B3$``6d5LpNs&V(E%)5B(QtdZ|h{x&lVBYD%PSV%JH47d9ySXRwALUTLGH1*nVg171ne?ZN;LDj#+K+TofRAU}hhd}KZa<`M| z8;AA9;B<7ZKeq2}>e&dq`yH(gA_vvFO4suZK(z zauM=*KD028xOuU3L*JreqR-~ zD)lki?Me7XOR=kQZQ}GTSv8(3PVsa9i~DS|)(Zc?WLG%Yq>aB399PzU_TIz801e6h zL$B6pvcgBcP3}paYP0=DG2Sdbs$}?$kE^FYp6_RiYZD*O%gO~?-Ix~o*)2cd$7LOf(t^ny>N;iZZ{CDtO+H%VCE=?wu1~J zZMzW{G*wo!d4>Hwftf&17vHFhCxb2J@^br@U2;{u--4g1Y`}FPC{<2H+tTY#Ts#V_ ze!f@>^GS+Uzg$+AJUuegPnW5y|3=W^*FUl~$_n`hOfQ|EOh@(WTj^!=z%-P9Lc910 z{`P&6i_Rr0woOHof$)59vLe6ok~(FZAJxUzVtu-6(=E6Fwx)=OiR=Dcq$dus`3Z8f zTd+U5X=Em@RAj@5^^;S$5vCy^{_r_$UiA5k&TDVyQv@S3Y|iS|70ZmQgodx2uwV<& z^t6RtS#Uy990uw`V9>|Te-!ss$TgVQXN&s%V5_YUfkB_j8K*3)D}q2}Jq&3K3;0=IG8a{vGU literal 0 HcmV?d00001 diff --git a/bin/librm3/imc.nbin b/bin/librm3/imc.nbin new file mode 100644 index 0000000000000000000000000000000000000000..0ee386ff6320f7a44582f4a8d29f67af2429edee GIT binary patch literal 3686 zcmb_feNa@_6+ds6g@v+ZSMj4UZ62tw7>p8NF&(?^b9n+IvdiwG0)wKqfSJq$B#b)N z4l_&&x~0NMlQ5PDR0_l};$WvA=}eokBs#^9@uQheCeui4VmhrZ>0Nm5(UG2WS$2Uj z(`MTD$D8x+$M2l;yT5zxeG|QJx|@_kAHVNs#&g%2nXApTY@+u~xl8MKyZf{{{Mk*v zdS%VEX02ZQlbf;)Sv{Jk+9#=*`)>J_40FL5rJ=g;ta9ikTJ@=yU)LVs zH1+hoKlah!PG$I@haM86xlFJkUh^fvq6UlvS_7te(QmDVXzobVVMa_?6B?|Taj?T-27xRCz4T1Le3>pD zOk%znbR2Jff?-MsbWt7{0Z81@hO#37i@Z&_L!ss5i0G1tX!tgu6^c1Vwx@rq22#Hg zfQ_Ojs5%!}5h#kK;=h5SX+&7IO+;%8;EPidf#Q~^i-A}sY=RXCD%-=K-{7AMhpc)+ z+c$X|MRg3V_$EK!s&gVFzVYz@QNq)Tsa2uY=7^XHz4Jn7^PQo$h*qPKP4nIGvH@ z#)T4ArSHLjGRWm@Zs83PFgIP83Fli8<|>J|k)9K2ldO)wLvGB|v6S=>Ir;^T3o*nM zv4|leLLhMoBxOC$5aj=y+v1Hw(d+g`BNRie>fObd8YC$q{k!AUmZ7UYVCxn9fB|p?c5)1||%kK#I|# z<^I7J53+>P$&COOV)9X>s=(Hm1k)lEK7`UbHp?zeBb1}_lA&pl&j`hYtfP8mpu!jv z0YFf}z${kKlT?7e2=x10?UQN?#L$o=sxLwgvJ2QNJS>Y|iRo9>2qxakxe{q*#3&J8 zMyx}VWw;(}3BG1^6((nXd~>yPVa1$Re97C&h>GbmHY~@~2o#qiAIt-fsDv3$&CIZt zMlckwiIOUVSN$_H#VKg9H~_;JAES^a+p+}blmnxm`c0OwMT4eBDrvHvLvgM`d!|N6 ziMYf)^ShX7sSy=+72$0NfYL)ehUb7@OTriNGMheYMfdE zvJ%nSx|b~en5JK%leqqY+{KLJa9tXAhns8`Yox->kZ`_#<0k|lOwU1^VUeqVQw zI(%R1V#|6j531~}=$t+vZ*)!%Sl(+=JI1?B(b{gv3_MBF}X{9kSq-<)^#pPE3QN$Oup`B zHCUC~rTGuaO^Sa%_3j+))4ZR1C8hpvV<*(R%Rk@@olvsHo^s{VpsP=-NxE@fZBO-; zD-$oSZ&kAf@04ri1Eb~Y#B1-JR@>b}e$Cf^tABdHEYkf7GD$isol6Q=t$Cc$4fg`N zJ8%pPcp{;!9y!l1ax?$g2@Vw zfN&ogAjSwe0W78E5LJnO8^+5j9{>10v{R%YXO=y6r2fz*D46{e8nzTRJURkC{;BMJ zwCVlFwfRCeJaj`TZ*vL_d5*`M-GUwx9EkUOW#~JHYc~lgym#tK^vPAG&0g7;Cl>5* z&R%t6_jvkCwtCjf>fN+biA~XnhVJR>ajA6L&fiF*2tIIrHuUkhH^3dOn5 zd1+H_y(G3ugqa>E14Z1;Sa@6FCMpxaStb4X`_RDaSL6}?YkDmyazgcL+_jizDKMy_gZr^-MQE<$T3TJ;^xu z_48Z75WB~@Gf(dZ;nR3jj$Rl?;?G79fGI$%bg37C@a@3=k%p zDr|-Z%uE0S(To-)P<;OsBydz7D2=<7JM(>3M^_AAqhQT^e-}_j3jpQSDi+-24swF{ z{^LYCD7R&!@_<^qcy;nU)`(CW=QM{##DUuJQR$H;saKfzNS6t%^s+;^khomIMSWT6 z7B%+M1RH_^pclU0`0=J0!r>cGCbU2eK+#E?Uhl8+0>a%6us>H2Ln(jpvb0< zEA42~!*-x(Wa>%{$^OhSNB}IG+liVDOEkHX;k&0m!KHSAfxHT%;P$#@+~9LRKr@h{4o)u%^S>TdWaL$RrPnbJ}OD z(56Yc7>G=TTP6}Hx^wJ%mc?5!CIHW3au&QnEfNH*i$)kSE^X8 zc#3B{8fVqZH0A)R6#4W3@@&L=F$ADe5#3qU2MYWrZsOTM^2ab>Q>gx)H`~T&(5PT3 zEY6G6wwT*t7cn=_#xg6lG}0yO*Ik~=Qc2x{ORBV{JPthANjp6#y6NdtQrX!V*T(%g zOXubU)1#uhW}%l;*~;%p6Rr$a^rTfWobSWm@BG(Sz_lb!4|7|!l@4*J&dIC~uG0O2 cIc(h{}Vnr&=e){2l$%L7lVG-+F;MoJahrJ+(Zb(OMd>z>_gcCWd19^QA32`15y z^3QhvIQTs7x!?Jn-}n1|#7@8b%8{fxcy&mQc{Fb%J`T@Ji0-k1;@IgQ2;<2&e-a)_ zp45hq)8<|I*@~GFv3T$0NwH{8OHbmBoA39?*ZT!NVfwLdIN90v$q1W}WBYXD$*Epa z7IRl!o|OMWKAF5#$%XkS0F-F0Z2;2f+rVkpg+Ngaxj8Fqw>}R*a<%{@gRcT76%InS z{QC$LiZC=-C~|d>D-8fBr9LyP6yaPdMY3>l?dlNZ;ReCgF*QIQfEqXe6(|ZGtIp}e zkI_d3+^qv@elq!O&-&x?`OitG7zj_lE1wx__+hfG{K`;b=JYf_cOpDJA)nD*A4wjn z`Q=ej{YQR0@o|3@FD?6en5X+>)26JssJ(2%KyUyQvAY4=f-MYZx0Bh!4vQkE${bt6ZzkpF7p-TJqCUJ zi&D$pxb7_y6qkR`xHJBm`m>{RS8`st2d2jVzXns)$j-9>X6UKKVD{*VgGRjGAvCv> zO3h{-kD?(BZU&~yCA5=<7QWplkRGqVz$DFWyzBo2CJXK1!QAlCs5Dh^>9};^?dcH_ zt`Wx3ibWhnwsMrMO3GH{BDN}ehedb^IL1VgLz=}(&9Jr_Lhw%!klx8YoR!p+$~PlW z{xt&FMXqr1V`eBJid=Y<61b2NcoET&JL^UX5 zhcD=!O%GAZ<1IN|ExL9$@6fe4+l7VeN?z*^jL_@yk}kIwsfl-$Jm~RFdY!IT``nd# z2_b)jd^9dktqOOF-uYxdB(AF8{psx|9-qA`t~tDmzmpj2pSg3YOXCxl6*|Y|tNrdF z`L(f{VcE2ioJvG@kPmM^{@m^lq$_WJ#&FH2@nup-$--qRbeB#A{O^Jn56Wf%9v+a9^NH}2Y6 z{)@Taq_xgBl00#Z9wB&rM7C(cx%9hVSww>er78qwrbu!Xz>{W22vpLg2<+|a2X25; zK*>Z)tQ>?wddU`c$+Lem!~V`nfGn*YKp~9|4RTs*2&_@{(8;yZ=pbsM6|eSI)49|g zLNEl9g)HMD@H7R2tHmMpY!rp?iG3khq1}#yTMMvh%)y4zuZw=WBz_?RI`-P^%|TH1 z_2&*i{Cor|hz9j=R>m<(tMzjv0@YgU0Axv{??ImGxe(aWkqt+{nTbdG4n`*3KSp26 zrmy8kiT-p;sYSySbF5RB&~= z01!MG*@#CG6=ry*1W%?gKNW&aHJk9<6fGrsgx0^d-h7J+%DB5+o_7x1@Mtl`| zn{<6pP7q`Sit2I*>Y`wVgN@i#&?dcv{$L``(RK4&q`w-mfmY*-^@QeGc3u;Pn_fxl zi}XG&nM>i*R*D-$=~#lEXun%cUt|xKpxEK_(z%5$EkVxl7G1Mf;Qg6oMD0vo=p;uH z;#l(u*)$=Xx~H8!f6}|B^{Acr{9Y`tlf0ywaP#v?S%p>k+OFv#*{AubAXOH6-bt9w zHVLBY?94l2mnSV^ER!S!0HL>93f^B5t9i zy39#`LTADVN13z8cI0p0vAl;ta?f_qJ8u>II#-}$L4oHBrhNSX8OFkh1+$6-eDcp~ z9>!;&Ff~H@8eb^to4>(_^BENWd$FJk5z_eE%m$0WTvx};hPkeMo1N|E6a1|t(A=I7 z|Bx2Lyd|+C3bbPP7rO#h=Q6p^z@oMyivpvF{i^lAjSNm$tME&1bPNx83PyMI6VyLY zn6?o@DCA6?m!x)@!4FHy`7bX9M6Wm1TkD9?YBVtSwFnTOkUWM)md0L6#RpNrB$7sH zrT=vV*2j-UfHN9HP(%ebk9r0b9zJI!RnL6(i%Fd{8i6mfrjaHlRqZ@B;nN^QB^yKV zC4CDZ^Kh4PlGFRI7e#K~7?)6ETtQU5!zG~*tlFYM^jRrla4!(FieXN2LQqUMSwl?% zmrDITm7>9eI9i*!6(guy;_KK%VHIS@)(%qttOivSZz+F8&Q3!kU5gLCiwYK)5d06` zQHyg6H51G*Q}4&DpB=5O*V*Ck_6W>n*onsN@jKlvK5=ZU;YasPRc)gmSmdtnmOc;Y z6xtRk(_?f=M!d>d_deDq41X4mXWVs0bOOla1$S+-*sLal(M)B + + + + + + + + + + + + + + + +] [2 FIX] STRING>> + + > + + + + S-TO-6 #DECL ("VALUE" FIX +STRING) USET "" T "TS " % SNM (STRING) NM1 "TS" NM2 % % % INF-ACT ( +ACTIVATION) % OUTCHAN % " [" "JOB " ": " LIST +"ERROR " "] " % % DEV "DSK" "READB" +INF-IHANDLER "INFERIOR" % INFERIOR!-INTERRUPTS INTERRUPT %< +RGLOC TUV T> CANT-GET-READ-CHANNEL-TO-INFERIOR % RUNNING + PIRQC PROCEEDABLE ^Z-TYPED % % WANTS-TTY IOC-ERROR *BREAK % % DDTWRITE *BREAK-12 AOBJN :KILL FINISHED BACK *BREAK-16 "INPUT" ">" + *VALUE % () ("INF-LOAD: Premature end of file.") ( +"INF-LOAD: .CALL LOAD failed.") ("NO CHANNELS AVAILABLE.") "PRINTB" "USR"]>> + .GLUE > + + +> + +> + +> + + + +> + + + + (CURRENT-INF) (INF-DIRS) +> + + < +SETG RSV40 11> > + + + + )] 37>> + + +STRING "OPTIONAL" STRING STRING)] 82>> + + )] 182>> + + )] 230>> + +> + + INF ANY "OPTIONAL" CHANNEL)] 439>> + + +"OPTIONAL" )] 602>> + + )] 737>> + + +STRING STRING "OPTIONAL" STRING )] 784>> + + + +> + +> INF FIX "OPTIONAL" )] 1012>> + +> + + + + + + + + ( +NO-ACTION-MESSAGES) > + +)] 1158>> + +\ + +> > + + + + INF )] 1388>> + +> INF FIX "OPTIONAL" STRING STRING STRING STRING)] 1731>> + +> + +>> INF)] 1871>> + +> + +\ + +> + +> + + INF FIX)] 2018>> + + + + + + + +> CHANNEL)] 2197>> + +> CHANNEL)] 2216>> + +> CHANNEL CHANNEL)] 2235>> + +> STRING)] 2270>> + +> + +> + + "OPTIONAL" )] 2415 +>> + + diff --git a/bin/librm3/inquir.nbin b/bin/librm3/inquir.nbin new file mode 100644 index 0000000000000000000000000000000000000000..88ad6043291829f9d31404b7840c6c96a3f96d49 GIT binary patch literal 2365 zcmZ`*du&tn7e8(HWE-^dkcayFw(KXJbX&WY+wMnGc4;qde|GoYwYR{;@z8}0#4zzO z79l^)5_v3(=zb>pxjkti0u-EOZsJm;2CBzl{E zd*0`K&pqd}T|RtB?$x$^^I@M_HZ=O8{`w|Cm^fXscfn=JF*>ZTl;a2WCGDT|U6s|G z8rCjUkL}8iw2OPx@^=UM3;?WBO#tO}MV+u{jd|5iJ6jw8wru}nU~+K)rfh%jmeOqh zagbbGCpd37#xDRgX9vO5!OSr*sitbM{CvR&E#62c)Qnpxzk%z-BuckUayFOSv6NfF)8fVE4rYB zJgWY}!$KaVH+W#8x6in^E-a}34VdBLVgT9xAuvIt)Hj1Im+?k6Cs@W$<3Z&vE0|!p zCq@j#V(0{ii$mjV|531@;>|sUs*D^ru+)e$lG%(#EQXRDW`HIrx_2Fc-{jfaUSP+FQHtUJd`um~H`Y zKKz{Obkiez7u;g7+Og=-j>)e-f@OK_^qvhnx}7n=fyXC&Q({5&)+Ppv3^v53O$+j3 zga!FjD(Cr5*t3j96KU<$eRWSJ(gF+0X@$9RKKrr#xtWKVA+xXXH8gTw&gb^}8Ru=} zxQ2i~;A38&pL2T~miQZ(XZ-9}BU>AnFrT}T4E=7Oy=~&-eO0rk1tk&Jcx;!0x#DuT zwmBwhyXT(dFCTtlZ%;~4qAV`9q~m&vyr`7+_TIuQ5{1Jz1Qw#qMB#FDLXk09^>=Lt zpeeV|l;fzsdgXWHV0dv8&gY@`*zEwtG^x45;*&=ad6XBHoZKdEILNM;>?(*VA*za~ zshz@6Cz*|8~6sloP zA)j?(;5#N@9w~{&AN*eoD{)E0gbw|g&IIDr!ep<~T*HE433tp%OBRocLSz|UG9rjd zts-Gc3KeGRzYl-%l9arIQ5E^6INOW;i>xi*6!Z({2EISVXFo;IMb8jR z33&a9|6WWEh*1{wxY<uKGNU<6926c@O9DdmFr5LqmXh{2qT}fNS)i-ak?GKi>v>8@@0DMX}d1 MAHI{13W)B10DArzcK`qY literal 0 HcmV?d00001 diff --git a/bin/librm3/inv.fbin b/bin/librm3/inv.fbin new file mode 100644 index 00000000..0e86a473 --- /dev/null +++ b/bin/librm3/inv.fbin @@ -0,0 +1,81 @@ +' + + + + +> + + + + + + + + + + + + + + + + + + + + + + + + FALSE>] +>> + + INVFND #DECL ("VALUE" FIX FALSE> VECTOR FIX) () () VCTINS PREAD PCLOSE % INVERSION T % +BAD-INVERSION-SEARCH-VECTOR!-ERRORS INVERSION-ERROR +INCONSISTENT-DATA-BASE!-ERRORS COULDNT-READ-FROM!-ERRORS]>> + + +VECTOR)] 103>> + + APPLICABLE "TUPLE" ANY)] 124>> + + INVINS #DECL ("VALUE" FALSE> PMCHAN FIX FIX FIX) ![0 0!] ![#LOSE *000000000000* #LOSE +*000000000000* #LOSE *000000000000* #LOSE *000000000000* #LOSE *000000000000* # +LOSE *000000000000* #LOSE *000000000000* #LOSE *000000000000* #LOSE +*000000000000* #LOSE *000000000000* #LOSE *000000000000* #LOSE *000000000000* # +LOSE *000000000000* #LOSE *000000000000* #LOSE *000000000000* #LOSE +*000000000000*!] PREAD VCTBNS UVCTINS PWRITE PMALLOC PMDALLOC VCTDLW VCTINS ![0 +0!] INVBDIR ![#LOSE *000000000000* #LOSE *000000000000* #LOSE *000000000000* # +LOSE *000000000000* #LOSE *000000000000* #LOSE *000000000000* #LOSE +*000000000000* #LOSE *000000000000* #LOSE *000000000000* #LOSE *000000000000* # +LOSE *000000000000* #LOSE *000000000000* #LOSE *000000000000* #LOSE +*000000000000* #LOSE *000000000000* #LOSE *000000000000*!] ![0!] #FALSE ( +"IDENTIFIER ALREADY IN INVERSION") BAD-INVERSION-DIRECTORY!-ERRORS IRS-ERROR +INCONSISTENT-DATA-BASE!-ERRORS COULDNT-READ-FROM!-ERRORS +COULDNT-WRITE-INTO!-ERRORS #FALSE ("IDENTIFIER NOT FOUND IN INVERSION") T %< +TYPE-C INVERSION VECTOR> NOT-AN-INVERSION!-ERRORS]>> + + +FALSE> PMCHAN FIX FIX FIX)] 400>> + + +FALSE> PMCHAN PMCHAN FIX FIX)] 601>> + + PMCHAN +FIX FIX)] 784>> + + +FALSE> PMCHAN INVERSION)] 849>> + + FIX)] 957>> + + INVERSION FIX)] 1136>> + + + \ No newline at end of file diff --git a/bin/librm3/ipck.fbin b/bin/librm3/ipck.fbin new file mode 100644 index 00000000..c7fbb758 --- /dev/null +++ b/bin/librm3/ipck.fbin @@ -0,0 +1,128 @@ +' + +> + +PACKAGE + +RPACKAGE + +ENTRY + +EXTERNAL + +USE + +USE-TOTAL + +DROP + +NULL-OBLIST + +ENDPACKAGE + +FILSTR + +FILPRS + +L-DATUM + +USE-DATUM + +L-TRY-USER + +L-UNUSE + +USE-DEFER + +L-NOISY + +L-DIRECTORIES + +L-PATH + +L-OBL + + + + + + )> + + )> + + + +> + +> + +> + + + +> + + FILSTR #DECL ("VALUE" STRING +"OPTIONAL" STRING STRING STRING STRING) DROP "" ">" "DSK" ":" ";" " " "READ" +OBLIST OUTCHAN % % (CHANNEL) % %< +RGLOC L-NOISY T> "/" % % "FBIN" +"GBIN" "NBIN" "BINARY" IOBLIST IN-COLLECTION % T ENTRY +NOT-IN-PACKAGE-OR-COLLECTION!-ERRORS ALREADY-USED-ELSEWHERE!-ERRORS USE PACKAGE +NOT-FOUND!-ERRORS DROP NOT-PACKAGE-OR-COLLECTION!-ERRORS % +UNMATCHED-ENDPACKAGE-OR-ENDCOLLECTION!-ERRORS "PACKAGE REMOVED" % +"DATUM REMOVED" #FALSE ("NOT PACKAGE OR DATUM") "DATUM NOT FOUND"]>> + .GLUE > + + + STRING)] 74>> + +> + +> + + +STRING)] 190>> + + +STRING)] 278>> + +> + +> + +)] 690>> + +)] 816>> + +)] 973>> + +> + +)] 1253>> + +> + +> + +> STRING)] 1601>> + +> + +> + +> + + + + + + diff --git a/bin/librm3/irsbas.fbin b/bin/librm3/irsbas.fbin new file mode 100644 index 00000000..6b7c512a --- /dev/null +++ b/bin/librm3/irsbas.fbin @@ -0,0 +1 @@ +ñ¢žPƒøràÇ‹ô¤Ò§øPi¢}ôE ÷¦O‡ùhRŸùõ>Añ¢†Š“úTç•ôE ù4©Ó‹úˆŠñRiS­øu ñ¢žEø¦O‡ùo ñ¢žB™ùðj aô 0AöL cö ñ¢žEú”¬ “úU¦N©ôiV‰ø5I¥úÔ*M¡ôiV¡úrm “úU¢T›ú$Ò­ú³ ÍAù4«U©ù´I¥úÕiÔ›ú$Ò­øÕ!LAù4«I©øSI¥úÕ)E‹ôiV©ùñ© “úU©Ä§øh$Ò­ús'TAù4«S‘úuI¥úÔâT…ùˆ$Ò­úu!LAù4«P¡úSá “úU¡A§ø±I¥úÓ!ËôiV™ørá “úU¡Èù”ê “úU§Â•úÐê “úU¢I§ú“)ÔAù4«O…ùU¦N©÷ÈŠñO"ΩúVPI¥úÑ&N©ôiV‰ø4I¥úÑ ÓAù4«DƒøÈ$Ò­ø‘# “úU¢IôiV‰ùÑI¥úÑ+FAù4«D“úÑI¥úÑ)ÆAù4«D¥øÈ$Ò­ø”íFAù4«D›ø4# “úU¢UƒøÏ ñ¢žEú”¬ “úQ§A›ø¨$Òù3« “úQ«ÉúÈ$ÒùÕf “úQ¤Î«ù¨$ÒøjEAù4£I‰ø5" “úQªI›ø¨$Òù5$Í‹ôiF§ú´I¥øÕ"Ø©ôiF™ù3¥ “úQ¤Ì“ùÒÐI¥øÔâéôiF‰ø5  “úQ©ÉúÈ$ÒúrmE}ôE ÷‘gT¥û($Ò­ù3'TAù4«Iƒøu) “úU¤Á‡ú‘I¥úÒbC©øÈ$Ò­ù4¢ÔôiV“újFAù4«I‰ø³# “úU¤Ò‹ù±I¥úÒfÁ¡øÈ$Ò­ù4äÚôiV“ù”êFAù4«I§û3c “úU¤Õƒøu#>Añ¢†Šyú´â EøpfS³ù¨Ÿ ñCE<øµêY¡ø¨$Ò§ù𥠭ø°êO¥ô ÞV‹øu'ÒAût¢Ó©ôgY»÷Ï ñ¢žN‹úõ,ЋôiS§øµV‹øu'ÒAôï+E‡ú“é ­ø°êO¥ô¤ØAù’iÔAût¢Ó©ô$Ó©û¯Ÿ ñCE<øµêY¡ø¨$Ò§úÐê ­ø°êO¥ô ÞV‹øu'ÒAúÑaÔŸúH+E‡ú“é ù6<ŸúH+E‡ú“é ø3)Å}ô¤ØAúÑaÔŸúH+E‡ú“é §û3jA…ù‘PS³ùµ ™ø¨L“úu[¥ø´ê “úTéÅ©û¯F“ûO¥ôìÍ©ø0¦EAøÐfS‹÷ÈO¥ô$Ó©ô Ì§ø¯<ŸúH)Ô¥ù3£ ø3)Å}ô'ÒAúu)Iøè#A™úq_ yùôC‘ø3§E™ô Ì§ø¯<ŸúH&I§úˆ#A™úq_ yùôV‹øu'ÒAøÐfS‹÷ÈO¥ô&I§úˆ-Ò‹úuS©úRgGAø3¬Ý}ô Ì§ø¯[¥ø´ê ƒùÖn¾}ôE ÷”âÔôiV™ùÕ2a÷ÈŠñO)Å©øè$Ò­øj c÷ÈŠñO)Å©øè$Ò­ø“'TAö,ß ñCE<§øµ# “úU¢A¥ô _ ñCE<§øµ# “úU¢A§ô Ÿ ñCE<§øµ# “úU¢Aô ß ñCE<§øµ# “úU¢Dô  ñCE<§øµ# “úU¢Iô _ ñCE<§øµ# “úU¢Nô Ÿ ñCE<§øµ# “úU¢Vô ß ñCE<§øµ# “úU¢I­øÈ>Añ¢†ŠyúqjGAù4«D§øÈ¾Añ¢†ŠyúqjGAù4«D¥øÈ°}ôE ÷”âÔôiV‰úv£ cö/ ñ¢žS‹ú‘ÐI¥úÑ&Á¡øÈ²}ôE ÷”âÔôiV‰ú°c cöo ñ¢žS‹ú‘ÐI¥úÔ*M¡ô Ÿ ñCE<§øµ# “úU¨S“ûH¾Añ¢†ŠyúqjGAù4«D©ù´4}ôE ÷”âÔôiV«ùÐf k÷ÈŠñO)Å©øè$Ò­úµ&ÐAöÏ ñ¢žS‹ú‘ÐI¥úÕiÔ›ú¾Añ¢†ŠyúqjGAù4«F©øS8}ôE ÷”âÔôiV“ú¦ s÷ÈŠñO)Å©øè$Ò­ú”¢ÅAö, ñCE<§øµ# “úUªOúh±}ôE ÷”âÔôiV§ø”á c÷ÈŠñO)Å©øè$Ò­ús'TAöO ñ¢žS‹ú‘ÐI¥úÔäS©ô ß ñCE<§øµ# “úU©Ä©øS4}ôE ÷”âÔôiV§ú¦ cöO ñ¢žS‹ú‘ÐI¥úÔ(RŸøh³}ôE ÷”âÔôiV…ø4âÆAö- ñCE<§øµ# “úU¦C—øÈµ}ôE ÷”âÔôiV™ørá cöÏ ñ¢žS‹ú‘ÐI¥úÐäN™úu1o÷ÈŠñO)Å©øè$Ò­ùð¥V‡úˆ¸}ôE ÷”âÔôiVŸøR«Lúˆ0}ôE ÷”âÔôiV‰ù4êL§úˆ¹}ôE ÷”âÔôiV“ù“ª cöO ñ¢žS‹ú‘ÐI¥úÒ`éúh¾Añ¢†ŠyúqjGAù4«Iƒøu# e÷ÈŠñO)Å©øè$Ò­ù1!Ôô ß ñCE<§øµ# “úU¤Ò‹ú‘4}ôE ÷”âÔôiV“újFAö¯ ñ¢žS‹ú‘ÐI¥úÒbE™øÈ>Añ¢†ŠyúqjGAù4«I¥ø³c o÷ÈŠñO)Å©øè$Ò­ù3`Ðô ñCE<§øµ# “úU¤Ó“ûQ9}ôE ÷”âÔôiV“ù”êFAö, ñCE<§øµ# “úU¤Ó³ù±1c÷ÈŠñO)Å©øè$Ò­ù5`éøÈ²}ôE ÷”âÔôiFø3b c÷ÈŠñO)Å©øè$Òù3« e÷ÈŠñO)Å©øè$ÒúògVAöo ñ¢žS‹ú‘ÐI¥øÓªÍAö ñ¢žS‹ú‘ÐI¥øÒgU›ô _ ñCE<§øµ# “úQ¢A©ø¨>Añ¢†ŠyúqjGAù4£I‰ø5" o÷ÈŠñO)Å©øè$Òú’fÅA÷ ñ¢žS‹ú‘ÐI¥øÒjI›ø¨¾Añ¢†ŠyúqjGAù4£S«ú°}ôE ÷”âÔôiF©ø¶* cö/ ñ¢žS‹ú‘ÐI¥øÓ$Ηô Y>Añ¢†ŠyúqjGAù4£I™ù3¥ cöo ñ¢žS‹ú‘ÐI¥øÔâéô Z>Añ¢†ŠyúqjGAù4£DƒúP1k÷ÈŠñO)Å©øè$ÒúrgVAö-Ÿ ñCE<§øµ# “úQ©Éµø¨¶}ôE ÷‘gD¡ø0åÁø¯  \ No newline at end of file diff --git a/bin/librm3/irsbch.nbin b/bin/librm3/irsbch.nbin new file mode 100644 index 0000000000000000000000000000000000000000..1a4452c6b6bb8e0456c2b69a4540cfe2d27b0a0b GIT binary patch literal 5793 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 SYnH8@F literal 0 HcmV?d00001 diff --git a/bin/librm3/irscom.nbin b/bin/librm3/irscom.nbin new file mode 100644 index 0000000000000000000000000000000000000000..c15f442ff77f9bb9f5164614522738f8a2ecc7e8 GIT binary patch literal 15076 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 literal 0 HcmV?d00001 diff --git a/bin/librm3/irsgrf.nbin b/bin/librm3/irsgrf.nbin new file mode 100644 index 0000000000000000000000000000000000000000..ccb8b47698580a311aaf902ac56e0b99efdcc4b0 GIT binary patch literal 2061 zcma)7YfO`86n@^eKv_YG&;aS2pAAtio%7N$x9CQJ3S=%8bcvTAVl+}O(E{_f%!Q>( zfUpK8EY2SrP9=k2mMAr0*-f)#YBbIX&iz<6w`GZOh86dI&BbxW4ABVc;`~PG@icsX-J;39g%uhx@F@1`t`lhf_!>+bmvG%q^3u)j+MJs z4n!KRrZE1XZf5#K+ISD0g>_8V_Bm|7}YulQtc&G5UT$) z^sJgxzt2l*KxDF%VlVNC)c=wKB1`oT;gJY?i5C<$geV{Ef79dj#V;aQoU837T87VrCNYB?D z0#vmbLNOQtM}-GVHo*)irKB>7iBU!w#VXMU>w~)vVOd%Vq)HG}j^YufC8TC?`kOVE z@lIcN?{fJMn50;N9KsVR zDD_g$XWE?+_v@p~wMwd2s0*6aUXqYJB5gJz4^>_mm@}c!8IMXcB$+O?YzR5*oWv>t z3?UC?UL+@mfpcq13_}sMvEm8CVBm~sV%;=NbfhNfSW4o837W9R{Yse|N$h7*bZ+RR zC?IPxMMxdRvP+ClJ2g9DNs{_0q?sbv(9eZPmDHo87Ze7)NC4w)WSA)Ji`UO;e@Tkx`>-b$@?X!e#WV}2_nFo7WvN~)Y z?Bi4|R3?!gH0#fA;Z`Jb12k4v^+G^c$9aaP)1u0v!W$pLJZ;|++Y>bV&Tov~A!NCM zjvGHjOt}GJJ}rm)W*u)Os2UrgEY`70u8%H?I(>I9r)6d5Xo8SNmpA3_C|c-NF|)Hf zfLN3kMT58S+$U*%3~!;^LKw6?U$xyM^bDHEF3AZ{#@j97^DZhz^4qUaIzWp@`$P5= z|AOe5ngU%pBHuwowTGtC-3!5ouop9B>|woUKuO;UC>AkJDYQ91hdP?~J~2a=2e+->dBk|8Qe_x*} zk)!q3%hhwcF43pL{%udB##}&n*(ds?@eg9q;4WAvjb~OlLqDGz`)l%xvtef}+_~@4 zl4 z>W~uDcjJ4cZNRpm?k;+Qx)nGW6eDOtvIom(Pf-}eH57tY)dXP%6_oA?(3rxteoo%g z-XjGV)oK?yR`_0ZgDDqtG_~wC6utSdwi^@3$VFpNT)?X^R6(Js2g-#zqp2yU3QOb8 ztLMF_k6jtTS4dp~lvVyx7rQF)QQTNvxWE44!pj&8>b}H4{IJ^5Ts3y(8ZN@L0tg-a zdhnf~Sc%)3wPL|@Yt|wY*b{gDym|DWhqvCsubS#g%i3W$@Ol*vXlnV~HP-xCI3zMO a^=0L$(Xq9*>unM9)~mis7wP%})c*@gEV&T? literal 0 HcmV?d00001 diff --git a/bin/librm3/irsmak.fbin b/bin/librm3/irsmak.fbin new file mode 100644 index 00000000..74eb2dfc --- /dev/null +++ b/bin/librm3/irsmak.fbin @@ -0,0 +1,143 @@ +' + + + + + + + + IRSMAK-GRP #DECL ("VALUE" +ATOM) IRSMACV IRSMAKDFL MAKEFORM BSTSORT MAKEBST SUPFCN APPNDFFSTBL NAMFCN +SECTFCN DATAFCN INVFCN IRSMAK-GRP BASEFILE #FALSE () () USELST +"CALSYM" () DFLIST () TOPACT (ACTIVATION) +"INCOMPLETELY SPECIFIED" % "PRINT" USE +"COULDN'T OPEN BASE FILE" % "UNDEFINED LABEL" STRING +"BAD BASE FILE SPECN" "BAD LOCK FILE SPECN" AV (VECTOR) NOFS ( FIX FALSE>) OFS PTMP (LIST) UTMP STMP FFSTBL IFSTBL .TOPACT> LIST "O" "ALL" +"DEFAULT" "I" % T +"BAD DEFAULT PRINTING TEMPLATE SPECIFICATION" "BAD LIST OF PACKAGES TO USE" [ +"SMP" [#FALSE () #FALSE () SMPOPN SMPDCT SMPGETID SMPGETNAM SMPGETVAL SMPGET +SMPUT SMPDEL SMPLNT SMPMAPF SMPACT] ("SMP")] "BAD DATA STORAGE SPECN" +"INCOMPLETE DATA STORAGE SPECN" % +"UNKNOWN DATA STORAGE LABEL" ["SDM" [#FALSE () SDMOPN SDMDCT SDMDSRC SDMPUTINV +SDMDLWINV SDMDLI SDMAPF SDMGDL SDMLST MAKESDMST SDMACT] ("SDM" "SDMSYM") "CDM" [ +#FALSE () CDMOPN CDMDCT CDMSRC CDMPUTINV CDMDLWINV CDMDLI CDMAPF CDMLNT CDMLST +MAKECDMST CDMACT] ("CDM")] TBL "INCOMPLETE INVERSION STORAGE TABLE" % "BAD INVERSION STORAGE OPERATOR" +"BAD INVERSION STORAGE OPERATOR NAME" "BAD INVERSION STORAGE SPECIFICATION" +"BAD PRE-PROCESSING SPECIFICATION"]>> + .GLUE > + + .GLUE > + + LIST)] 6>> + +> + +> + +> + +> + + + + ANY ANY ANY SYMTABLE SYMTABLE>> VECTOR ANY "OPTIONAL" FIX FALSE> FIX FALSE> LIST LIST LIST LIST LIST +ANY)] 354>> + +> + +> + +> + + +> + +> + +> + +> + +> + +> + +> + +]>> + + + + FIX FALSE> FIX FALSE>)] 806>> + +> + + (USELST) > + + + +> + +> + +> + +> VECTOR FIX)] 1958>> + +]>> + + + + diff --git a/bin/librm3/irsupd.fbin b/bin/librm3/irsupd.fbin new file mode 100644 index 00000000..6443562f --- /dev/null +++ b/bin/librm3/irsupd.fbin @@ -0,0 +1,114 @@ +' + + + + + + + + IRSUPD-GRP #DECL ("VALUE" +ATOM) IRSFILACT IRSUPDV IRSDELV IRSRPCFLD IRSMAPF IRSGOBJ IRSUPD-GRP % #FALSE () FIX LIST "IDENTIFIER ALREADY IN INVERSION" +"IDENTIFIER NOT FOUND IN INVERSION" % "PRINT" "NONE" +ERRET-ANYTHING-TO-CONTINUE!-ERRORS COULDNT-ACTIVATE-INVERSION-FILE T % IL (ANY) OL () STG (STRING) N (FIX) IRSUAVCT (IRSVCT) +"NO INVERSION FIELDS" IRSOBJ VECTOR "BAD OBJECT" "COULDN'T STORE OBJECT" +"BAD FIELD CODE" % % % %< +RGLOC UPDNINV T> DV (VECTOR) % % % % OUTCHAN " +INVERSION FILE: " % % +ANONF467!-TMP #DECL ("VALUE" STRING ]> ANY> FALSE> >) INVCNTFND % % #FALSE ()]> %< +TYPE-W SYMTABLE VECTOR> % ANONF509!-TMP # +DECL ("VALUE" ANY ANY)]> "BAD FIELD SPECIFICATION" % +"NO PROCESSING NEEDED"]>> + .GLUE > + + .GLUE > + +)] 3>> + + ANY)] 94>> + + IRSVCT VECTOR)] 1726>> + + LIST ACTIVATION)] 198>> + + LIST ACTIVATION)] 607>> + +]> > LIST ACTIVATION)] +1012>> + + LIST ACTIVATION)] 1110>> + +]>> + + ,UPDINV ,UPDWINV <> ,UPDNINV <> ,UPDNINV <> ,UPDNINV <> <> < +> <> <> <> ,UPDSINV]> + + FALSE>]> IRSVCT )] 2884>> + +]> > LIST)] 2488>> + + FALSE>]> LIST)] 2326>> + + FALSE>]> LIST)] 2567>> + +]>> + + ,DELINV <> <> ,DELNINV <> ,DELNINV <> ,DELNINV <> <> <> <> < +> <> ,DELSINV]> + +> + + STRING> ANY)] 3371>> + + IRSUPDF #DECL ("VALUE" IRSVCT "OPTIONAL" FIX) IRSUPDV "READ" % #FALSE ("Bad arg, not a file or channel")]>> + + diff --git a/bin/librm3/irsusr.fbin b/bin/librm3/irsusr.fbin new file mode 100644 index 00000000..d7314fa1 --- /dev/null +++ b/bin/librm3/irsusr.fbin @@ -0,0 +1,214 @@ +' + + + + + + + + + + + + + + + + + + IRSUSR-GRP #DECL ("VALUE" +ATOM) FILSTR IRSNSET INVMAPFND VCTDLW VCTINS IRSMAPF IRSFND INVFND IRSPSET +SUBSTR INV-INSERT IRSDISTBL INDENT-TO IRSUSR-GRP % #FALSE +() FIX LIST () % "PRINTO" "READ" "DATA BASE LOCKED" T +OBLIST () % +ANONF107!-TMP #DECL ("VALUE" CHANNEL ANY) IRSACV #FALSE () %< +TYPE-C IRSVCT VECTOR> "BAD BASE FILE" "EMPTY BASE FILE"]> IRSVCT STRING % CHANNEL "Arg neither string nor channel?" % + % FALSECOPY % +ANONF144!-TMP #DECL ("VALUE" LIST LIST) LIST FALSECOPY #FALSE ()]> () FIXTEMP % ANONF164!-TMP #DECL ( +"VALUE" LIST LIST LIST) LIST FIXTEMP #FALSE ()]> % % % % PRTOBJ % ANONF348!-TMP #DECL ( +"VALUE" ANY ANY "OPTIONAL" STRING) " +" OUTCHAN ": " #FALSE () " " T PRTOBJ]> "NON-POSITIVE IDENTIFIER" OUTCHAN +" +" % ANONF404!-TMP #DECL ("VALUE" FIX IRSVCT VECTOR) IRSGOBJ IRSPOB OUTCHAN " + + (Unique identifier ==> " " )" %]> + % ANONF409!-TMP #DECL ("VALUE" ANY FIX +VECTOR) OUTCHAN " "]> " +Id Name" " + +IRS READY WITH SET #" ". (" " MEMBERS)" " MEMBER)" +" + +IRS READY WITH INITIAL SET. (" " MEMBERS) +" " MEMBER) +" "PRINT" "AND" "OR" "NOT" "BOTH" "EITHER" "NEITHER" "NON-EXISTENT-ATTRIBUTE" +"INVALID-SEARCH-DESCRIPTION" % +"SEARCH PRODUCED NULL (EMPTY) SET" "BETWEEN" "><" "SUBSTRING" "SUB" WORD DATE %< +RGLOC COMPFCN T> "SEARCH PRODUCED NULL SET" % +"ILLEGAL ARGUMENTS" LST () % ANONF803!-TMP #DECL ("VALUE" FIX IRSVCT ) IRSGOBJ IRSUGET % T LST]> % ANONF826!-TMP #DECL ("VALUE" > STRING ANY VECTOR VECTOR UVECTOR) INVCNTFND #FALSE () LST]> +"NOT A LEGAL FIELD NAME" SRT % +ANONF881!-TMP #DECL ("VALUE" ) () SRT +]> " + +PERCENTAGE FREQUENCY ATTRIBUTE" "% " " " +" + (Each \"" "\" represents " " object.)" " objects.)"]>> + .GLUE > + + .GLUE > + +)] 3>> + + ANY)] 94>> + + +IRSVCT "OPTIONAL" ANY)] 300>> + + + "OPTIONAL" ANY )] 465>> + +> + + IRSVCT "OPTIONAL" ANY)] 659>> + +> + +> + + IRSVCT FIX)] 1022>> + + IRSVCT)] 1043>> + +> + + +IRSVCT "OPTIONAL" ANY)] 1090>> + + +IRSVCT "OPTIONAL" ANY)] 1151>> + + +IRSVCT FIX "OPTIONAL" LIST)] 1228>> + +> + + IRSVCT ANY "OPTIONAL" ANY)] 1407>> + + +IRSVCT ANY "OPTIONAL" VECTOR)] 1655>> + +> + +> + +> + +)] 2256>> + + +IRSVCT "OPTIONAL" ANY FIX)] 2738>> + + +IRSVCT )] 2348>> + +> IRSVCT ]> "OPTIONAL" +STRING)] 2032>> + +]> ANY>)] 2921>> + + ]> ANY>)] 2995>> + + +IRSVCT > ANY +"OPTIONAL" ANY)] 3069>> + +>> STRING APPLICABLE > ANY +ANY ATOM)] 3605>> + +>> FIX IRSVCT APPLICABLE > > ANY ANY ATOM)] 3868>> + + IRSVCT ANY)] 4134>> + + +LIST)] 4505>> + + )] 4549>> + + "OPTIONAL" FIX CHARACTER)] 4642>> + + diff --git a/bin/librm3/ist.nbin b/bin/librm3/ist.nbin new file mode 100644 index 0000000000000000000000000000000000000000..d694ad595173ebccc0a346b18b8063d73fcce56a GIT binary patch literal 2499 zcmb7GeNa?Y6h9A;T>^CFOFoJo>lfg*fD0?8HN4eTnb2LOOwk$G6j(JB9Z6&&t*!h( z6bGBKQCU!1wj^O(Q>Sv8QKx1?!>}61YMf>)WGrF4`*`ndvYmT(l`?DU{c+}=cg{WU z+;e~Dciv#zA*(~$aQ*WJqCV2=CYGk?_`$YA=7Y+o;*hXM0MCgq30KAPyfb*XB zz!q_r2RNSusDi`q*K6$%?%j4CLcL|7TU-N>3(-`Jp<-NCNiDz>utN-6>5O(LV1kEg z2qT&-zn?%pMDPVm9`5&$9e0B}O1C{Mh_}&E&9PmjA*HwL3C0a1$_(Ddt-y(W0G224 zeey{3k=2Nm#{hM?cs`!4>hnx?NTsXIxpd`iJnkQ20!*su>3kTvcyD;%ReIc~shGi> z={6nBrEVk_gQ@iPE7WBY;qoC;m#T^kBiwdK$*BNHrH08+pqf6#Tb2t8b;fF}aN}u+ z4t$7)%G0V6vUNr^y_na5V}>WuP|v>mPhXos)4k0^Aho|n30CO1|5un(4WWd?O7dzv zuP!xwljZ)2>cvhEtfNu9O#FLR>>MmL`pG(dh#dqm5rH!W@CZB>qK=+2hX8(!*3W?k z0dGfx#|k_=ga9y64XVM~*Gz8&4S0pV7d3@0W#8mpm(O4wzeDQ$nO{hrb9R3qwKvUa z_NglrmvmT|SJWDoD59`Te`Q zp8?cEcs@)WfOeP|Fl;(|;#CN%g(L_m1DKtbRb&|m>j48`Nx&QxTM@P?9^gp`uf>iT zrG`|t%~Y6CQ#q{Tp)e5T%+}xT4BuD+H4ui|O!FbLZUchmsR8ah*kDv5X0T{M=;6CR z*1{^bW45p|%jzFxhb>GU`XYR1%Ake6w1bS{dtGwQFXkOXedDoU$D8zfQk}>ao2&9HnAhgV+rqFYl@pFZLL0;^>l`N^yZE$0pvohAvT8ovTFMQm2hXe{WnRc39D{8>5h@rCsQ9 zwe{nnuL8tX+@S33!CP(aD;5Uq8eX7WgxK{!-UEVg$WMGan)Ts!NDDZbfkcPnQ%13PTKZsr(7JHg5HqXT8!CbgK}$#0YtQW` zkBnXHz*}t-B*QV*23oh`nPfJT_{^UD()-qBE~RGDGp%IG%5x5RA6~bzvESSw88jWu z!2vO$*R90f?8Q-$fvdP9m)w7K?vk?m)0WBE*Sl#C7Q2+DilSDT+-$w~Zmn~!)KgL1 zKpu(vfi+Gf%`|Ct{=5y-*FT0mP1OLDhnH@J3<%*-E#zY>hxK$S(8oM~+GCbsZ2{y2 zR6|K}?S}F)Y$p1c9$g*ta`gH5`k1-Y~Q0!~j&C_7;M1A|i^gA?$9!Rh_N zgUtW9ngR(2Cm_tisZg;=Nx>B#SRw8wQru5uh`m2ERcvOCOe;Dj!swWYpgbN=so6(G zU`ElE%ml9m2tiz>JWt>>L}n$}A@*;Sn+>6ZyC=ka!|F!`#npU=ynZGAU#NdFZhR#7g6%P8QmGWkpWEQr_Jr!CC zM>j&$+3k|r<1z%K8(RCAPu#v-ZO8FH1-)#$(xO<9aw*zlX)b@G+R2jXIfScuRRTEOl9m?8*dGeIs9j+1h0GUex=Krc1nElnsJ3#_3lYQ)E)4w t8;V+%XA{+l{2Fn7QfGO9@ESEg)Ca?BFYQn?wl5vhU@4yx9a?1O{{VcCv)KRu literal 0 HcmV?d00001 diff --git a/bin/librm3/its.fbin b/bin/librm3/its.fbin new file mode 100644 index 00000000..2f6762df --- /dev/null +++ b/bin/librm3/its.fbin @@ -0,0 +1,100 @@ +' + + + + + + + + ITS-CALL #DECL ("VALUE" > STRING ]> "TUPLE" ]>>]>) STRTOX T # +FALSE (0 "") 50 !\ "READ" "ERR:     !" "î" "" ["Real-time interrupt occurred. +" "Run-time interrupt occurred. +" "[bit 4.6] +" "[bit 4.5] +" "[bit 4.4] +" "Console came back from superior job. +" "Job attempted to use console without having it. +" "Parity error occurred. +" "Arithmetic floating overflow occurred. +" "Job attempted to write into read-only page. +" "Job fetched impure instruction in pure mode. +" "Job executed system call in user-trap mode. +" "[bit 3.5] +" "[bit 3.4] +" "[bit 3.3] +" "System is being debugged. +" "A .LOSE UUO or LOSE system call was executed. +" "CLI-device interrupt occurred. +" "Pushdown-list overflow occurred. +" "Light-pen interrupt or display stop occurred. +" "MAR interrupt occurred. +" "Job attempted to reference a page not in the job's page map. +" "Half-second clock interrupt occurred. +" "Instruction finished in single-instruction mode. +" "A .BREAK was executed. +" "Job attempted to read outside another job's core image. +" "I/O-channel error occurred. +" "A .VALUE was executed. +" "System is going down or being revived. +" "An illegal instruction was executed. +" "The display violated memory protection. +" "Arithmetic overflow occurred. +" "Software-interrupt location had bad contents. +" " was typed at console. +" "Character was typed at console. +"] "Interrupt from I/O channel " "Interrupt from inferior no. " ["17. +" "16. +" "15. +" "14. +" "13. +" "12. +" "11. +" "10. +" "9. +" "8. +" "7. +" "6. +" "5. +" "4. +" "3. +" "2. +" "1. +" "0. +"] ![-10996678656 0 -10172235776 1 -11997544448 2 -27165720576 3 -11030570688 4 +-22841730752 5 -19833901056 6 -10941693952 7 -16478693184 8 -23910539264 9 +-19768328192 10 -13047365632 11 -23879799744 12 -23879799709 12 -32469734336 13 +-32469734301 13 -13178056704 14 -13178054336 14 -16482644864 15 -19834204160 16 +-19834140480 17 -10909483008 18 -11111088128 19 -14130921472 20 -19534110720 21 +-24045773696 22 -32467439616 23 -30353211392 24 -10925441024 25 -23998035392 26 +-23998035342 26 -32587969984 27 -32587969934 27 -23932224832 28 -32522159424 29 +-23927540608 30 -32517475200 31 -22807838720 32 -17439129600 33 -14147969024 34 +-20606473088 35 -31614377984 36 -19581497344 37 -24082051072 38 -32671985664 39 +-24082046976 40 -32671981568 41 -29422780416 42 -29422518272 43 -17434502208 44 +-17434502162 44 21752072448 45 21752072498 45 -11969550016 46 -11969549977 46 +-11998904320 47 -11999047680 48 -11999043584 49 -8980197376 50 -8980193280 51 +-8980189184 52 -13056668544 53 -13056668497 53 -12041413760 54 -12041413709 54 +-12041151616 55 -12041151565 55 -19818119168 56 -19818278912 57 -28408053760 58 +-28408213504 59 -7688545472 60 -7688545435 60 -7873094848 61 -7873094811 61 +-27033268224 62 -27033264128 63 -23898357760 64 -23894163456 80 -23894949888 96 +-16416047104 128!] #FALSE ("NO SUCH SYMBOL")]>> + .GLUE > + + +)] 90>> + + > "OPTIONAL" )] 130>> + + < +PRIMTYPE WORD>)] 176>> + +)] 184>> + + )] 189>> + + diff --git a/bin/librm3/its.nbin b/bin/librm3/its.nbin new file mode 100644 index 0000000000000000000000000000000000000000..997c97e7c2f24e15409a187ecaf087268a47c608 GIT binary patch literal 5729 zcma)AdsI|Mny&^QD4m-=aufA8+_p2H?_}iD7gKBHv^MMhwW_NJUr>lh#(ib@SM$t*>zNd;Uf%@uv zA=vQ72Fp16M$zlR*3G6P0pAh)X0YKY3>;s4a6G`O^Ns~;Z66#P-+iT>^qp@F?tZX$ zs}yTWT;Sj3ENKlExBpd;O1>*H`9GWiOEx@}BaHJaj=vCKAHXwjA%rS3bh!wPwH-n# z^msjrm7s6#*p4o=A!9W{D*5ao6#Fo;qZvyzXc`*Zu?@wVAKwBTXA_I$+brrU;^&p-sp2TI_(fswxQ6f?_U8;fAbBJmpR>W=&vqrm68r!6oQQ_^8Oh3 z;Wd0DxaZKvJEXY}ebE|deDE{jw(sEiW76F8qTS=CGWuJk1=l`%(SPAdYzn??&nKcv z-VDyuw4VvCcYH4RcMstg#?>_it>Z0I0{nYcev#cmRUKMrMYmF7N>cO=-N{j4?E zs9yDYu&Da;lffkOhS!4Ye^I#=B(EU4l)QF3?jf8L)o*q(Hc7uS^HwRY4nr0neE&r$ zH_3E3SkThGOqym+5=PV22L&l>eWgH5PbB%Q&$=%^ZFwYR4cdTWDU_o4By01ug19Yw zF2YfA;quZo6W%Q-M=EvQ6kAh0Olt{KwWzOtYg>gIi0eIWo9Ojo zyR}N8eWJ(ZsI!J!fBTXNYf3~<_?;%}fRudeW*^>cwbe=~J?=s5ZLAkP4!0-D9(nFU z;sOoUm_6aZ=#ST=+eJ3qu&A})&$b;&ws7hgiA}uuj@yJ{6hHl zHhaN*5^pDNvU>59R#8W1<>zUuLjTeA4KZvo~np+EEu? zC5dN2JM4AT)i_11gA9|1yXz){4AKQ5^YJ2+Fm8uEB&9qj{)I$(GI{@}yz_|GDhV?E zTG+_6_l5_9_P$82A)0N45j*|ERmjSly`gc)2N0k4Krl*Xa~%tWL1j z>x)!2Naw-ECTqmb1o}c-pApZF^^$X=loRj7^6B&8+mzH7YSCRC42Rxpzv6NGL|bHk z({MBeS9M9BM)xOdOHZ}a-E?nwi^JpZH1&FjTO<3LJ>N$btDTo^R`4z)kM%5^DR4Ns zAvNlJ-pt{V+?^U;$=k@Ew!rz3{0xTtIt`|*j2?GcpN3X-d;@(un|dSmN1Ly}Hn$E* ziwo-7oR_pms4QMzFYlC<}@qSzj$rQ25nve6f6a|XB8Dp;s8l^vC~U2MuX9xZ~)sF zgVDg~X~sZdn&lW-JJ{JkEv;O=I*Q=;eEs-Zb$c1 z*^|(D*7^rfE>a*saMN#~JgWi12L21sI)Tor(IE~!LMG262sD9Ue!#W>?I$sRH=4y} z16U@b$(b<#lR1qY3i_;nhUyOhJVjE$Wcj%+#E!jx2+a%{05p_6Kw!ZiKz!8$(-2}9 zJ4z)2=8b;GAzo%C@$Nh)8I@Ga(R6|}R5)fPT4b$;z9;Dkg#@VOJUsu=yJNC2#n0}-1gcRpGZjX}n8HP-|^+f~8YrdA(jI zC787~+Gy1Ca$73bfElc1=E$646fywK4*D(X@XEhS>9G3alDh>h4L|5J zzy`v!5#)8*Sjq?pyKMlAavaE$-?~KGC_O`Ah6epPisSY2jX|ReGhh$VU(c~d9W8&D z!U|fJVtLuQ_e709V<+PPeJP{7ZX;)-7!EVwYjB^@K(X>$Uv>%%IGd5{D!Q$*tGo;R z_bT|$xxd@(*B;pQOF6opx$Kb#Qqa7wou>|q(O_l!fXE9>;ie@(_UvVGwR zhpbKOf#`!g*`?Nsa^hZ{L%wm*&>$sT0{=NJv_p0cD*BxU{~39MtX*`b2I9-=rTB8r zYG5dymJ8h0z_MR4{#8e2G_EM)+ zzOkQc0J1$w!fnV1c~3H(23N|*%P5-;b0pOX&2vVhe6yc(DYQRxQHKK}h#e&NX@6!# zheNM}W0eDM!+fKWlDA*#c3=*y@z1HCYyiDrmnA~-N6Cx<$hE|>_DOP1S+_$0QfSX%O>PZM~c}J~Ir!#PVZ9iWF!oe@wH_|nF9ff(hW#I|%eKO>(>!MNMiKz_5 z(KJu%Xq}X}vE4F7^Ew{$JRWhXDV`8b)Ve7`Y{l0oz{fsDaROv|OOpfo-tu;gBJR6@_(RTW5{I$k964m3mt6!)YeU zb&I-SUsgbx&9T7Z+WoXkPE0#tm0OZK8zg;Q^lCa;T5s$PU4R0B<|}9RozkjBF=mAR zzooUb*i@q2x3P5Hb;`l=M0;0Sd#!wKqtQ+2DIUw~EKA>o!+ZAZRWLaR=amF&H-GW` zc+2EXIi6G-)kqRTD@kRUE}`eQsU~X?c>#mRpqbHHwB_jhK1Es5Og*e9qTpfWr}s}N zD#~-pT2dgO#whpDJ9T6QUN-rnkyP*+E-uZ=mFC|#_b-L{niZ8lfgV%-A(!t-=us~s z1cef=!~fVn_dYzB;8uL+;en=E`5c_={zUaxTcfWRD?T_zyi%;qF_q+x-|CN5o=>I) zt%s0GDe5Ch+t7l$Zh;4;B^E^~(oFeb^4&4#-kbQ^ys|syoA3tZ8vcJ6NgivWaO)o% zc^6+z>0X#6CH<|m6+gJtLP`23Cm&Ijpp#e5BVZm(nF3FjF~!Ai&9TM6ikysrMt%2mPnht3@ + + + + + + + + + + JADE-INSTANCE #DECL ( +"VALUE" CONCEPT ANY) FIND-CO NCONCEPT INSTANCE % % % OUTCHAN "-#INST-" % +CONCEPT #FALSE (DOWNS-OF-NON-CONCEPT) #FALSE (CONCEPT-NOT-LONG-ENOUGH) #FALSE ( +CNTH?-OF-NON-CONCEPT) % MUDDLEOB-USES #FALSE () T % % #FALSE (CONCEPT-NOT-FOUND)]>> + .GLUE > + + + + +> + +> + + + + + + + + + +> + + + +> + +> + + +ANY)] 173>> + + ANY "OPTIONAL" )] 205>> + + ANY ANY)] 264>> + + ANY ANY)] 308>> + +> + +> + +> ANY ANY)] 447>> + +)] 562>> + +> + +)] 798>> + +)] 877>> + + CONCEPT ANY ANY)] 956>> + + CONCEPT ANY ANY)] 997>> + +> + + + + + + + + + +> + + "TUPLE" ANY)] 1391>> + + +TUPLE FIX)] 1568>> + + diff --git a/bin/librm3/jade.nbin b/bin/librm3/jade.nbin new file mode 100644 index 0000000000000000000000000000000000000000..6c03c473fc762da64b0ed2a8c30a2e3397464345 GIT binary patch literal 17654 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 literal 0 HcmV?d00001 diff --git a/bin/librm3/jcl.nbin b/bin/librm3/jcl.nbin new file mode 100644 index 0000000000000000000000000000000000000000..25509515c2bbfa0d02ae24ab37aef215e9f246e8 GIT binary patch literal 858 zcmYLHYe-XJ7=E^?o5f<2R?)~lr{V(l9R=X;iBWM-(g~DEiT8kf;nV zC1i9{0=pn8`aeX3q*4BfegzdM8BrZOXFIOq^nItI^W#15`+V>BJn!WbMy_{XPMJ=; zh{{5PZBV{oF6RY?$x~07ro^n__*HTJ$V}I2!xB5V*W8opU#RO`?Oo9E-vG2YvO~}m zLZ4CKY`X*qTc%Mh7DS*q(T++m&s@<{AF8NU>-{ zt*#ziT-cu~m&%u>2(=g!zj9%I< zk~z~TT=~S|Kq3n;OY@XTtyYRfp!;Tu&bBh|k2c9T-uYu6V;bP#UwKC}HnMPUD1>Yg zsXpe;rLV4}6hoXRhNKui0Fk)0Ws z(FkLE3}b9BnQO!Q0}Nu{CTM@0HK|+6?UE;!NTb;DApTT-)K_*tRg+sgDViU|N9FOG zZ`GYz7=hQ96|m-oPpiz~zZF#R?al_}P6*WiU84N?*3UO#nrwrv0GUh*^2HBrM-}}~ zSk=&9(zf~1m91f{Q$yd$w0eVLY==5bB%fz=TZMz-|*~q&m>zFDEXGm+EFHk|`?>pxB?KwwWUXCj*@w(g|jwAwY-U|t%b@E&(@pwzTZg*)Zae0e5 zj@#`a#l-D#CyH*9Qy${ZIhuUcXSDo#!%aQ1E8jOHW*%!AO-(#5>REklZ{@|rqHieq z(e97R1H*A%Ja3yF64#gyMOOz;j_}DF%Oob3*ys4vMSJaC`70e*(s`d)1)tw&N%nVC P4a>!gGrjV7AK`xkLXH~) literal 0 HcmV?d00001 diff --git a/bin/librm3/jobass.fbin b/bin/librm3/jobass.fbin new file mode 100644 index 00000000..6de41c05 --- /dev/null +++ b/bin/librm3/jobass.fbin @@ -0,0 +1,30 @@ +' + + + + + + + + ATTY #DECL ("VALUE" > CHANNEL) USET SIXTOS STRTOX () ( +"FILE-LOAD: Premature end of file.") ("FILE-LOAD: .CALL LOAD failed.") ( +"NO CHANNELS AVAILABLE.") "PRINTB" "USR"]>> + .GLUE > + + +> +CHANNEL)] 12>> + +> CHANNEL CHANNEL)] 24>> + +> STRING)] 54>> + +> + +> + + diff --git a/bin/librm3/jobs.fbin b/bin/librm3/jobs.fbin new file mode 100644 index 00000000..473f970f --- /dev/null +++ b/bin/librm3/jobs.fbin @@ -0,0 +1,104 @@ +' + + + + + + + + JOB-KILL #DECL ("VALUE" CHANNEL +CHANNEL) JOB-GET-NUM DTTY ATTY STRTOX ITS-CALL SIXTOS UV-TO-STR +SFTW-INTRPT-DESCRN USET FILE-LOAD JOB-CREATE UPPERCASE UCLOSE "READB" "SYS" +"DSK" "SYS1" "SYS2" "SYS3" "TS" "UPC" "USTP" " PC = *" "USR" [0 +" (JOB-STATUS: CHANNEL not open to USR device!?) +"] "FLS" "The process '" "' is running." "PIRQC" "' is continuable." +"' is not continuable." "VAL" "ERROR: " "SV40" "' is finished." [0 +" (JOB-STATUS: .BREAK not found where expected!?) +"] ".BREAK executed." [-1 +" (JOB-STATUS: Couldn't open channel to process to read .BREAK 12 argument!?) +"] % [0 " (JOB-STATUS: .VALUE not found where expected!?) +"] ".VALUE 0 executed." [-1 +" (JOB-STATUS: Couldn't open channel to process to read VALRET!?) +"] ![!] "" "." " +:KILL " ":KILL" ![9 10 13 27 32!] % % "BCHN" +"IOS" "READ" "     $" "     " "ERR" "OPEN " "RENAME" +"DELETE" ": " " - " "unspecified error" "unrecognizable error" "PMAP" T "RFNAME" + #FALSE (0 "PASS-JCL-DOWN: Device is not USR!? +") #FALSE (2 "PASS-JCL-DOWN: Address is not in inferior process!? +") #FALSE (1 "PASS-JCL-DOWN: Couldn't open READB channel to process!? +") "PRINTB" #FALSE (1 +"PASS-JCL-DOWN: Couldn't open PRINTB channel to process!? +") % JOBCHAN () "FILE NOT FOUND" +"INFERIOR" % "OPTIO" "SNAM" "TTY" #FALSE ( +"RUN couldn't assign terminal to process!? +") % RUNACT (ACTIVATION) "APIRQ" "JOB-STATUS code:" OUTCHAN ( +CHANNEL) +"ERRET a FALSE to destroy the process. +ERRET a non-FALSE to continue running the process."]>> + .GLUE > + + + STRING STRING STRING "OPTIONAL" STRING)] 14>> + +> + +> + +]>>> )] 209>> + +]>>> CHANNEL STRING STRING)] +497>> + + STRING STRING)] 691>> + +> + +> + +)] 1017>> + + + +> + + CHANNEL FIX)] 1320>> + + CHANNEL )] 1366>> + +)] 1443>> + +> CHANNEL )] 1526>> + +)] 1549>> + +> + +> STRING CHANNEL FIX)] 1645>> + + "OPTIONAL" STRING STRING APPLICABLE ANY STRING)] +1854>> + +> + +> + + diff --git a/bin/librm3/l-m.nbin b/bin/librm3/l-m.nbin new file mode 100644 index 0000000000000000000000000000000000000000..76ae173377ff23d32d0dbd1c4df8fd51503648f7 GIT binary patch literal 42487 zcmdtL3tW_C-Zy^Fa2ifI2nvenh$aJ~px~j+icwJ5Fh;>rsql~j9ugxHh*{r-N}eV7@kNB7z1dEfWX z=i_|t!*yTR?|iy`_ibm>Z>^QCM?d*fjot9_hz5IpZDgO$rr&07@oavzvEH%ozK&*B zdh78@&!+qSSm)kUY>Mxkls%!vwSPztcdY>yn!H%jUl5V&Z{1d%R%8(-Iri8bkqt7tJjEfz%ABj|cRX|m4) z>ay`Pg)_Go%raBrWT?wIUBy1Dgke<+`alL8WZ9hDY7K)~Y z5^3-dtXBQAl)FmxX?8=vFLXHF9PjwDO+Qz|PnsAqe5J-5?MTHV$+4kwNeJB-Mbm>+ z2c_ZH;Sszf+!R=R`3c14Hhb@O@9w>Z2x0l95)Qu8vx1 zGJwVOAgy_T7@js!9(BLhD6pz8v1$a3og$BwF<40q^1AEwm@>IH`+LS)p-v>hw@{se zh`YC2J?#n6l^F8odj!(^UgMON8C1-v3nbi}#;2uJT4AZzP|$89lRzCtBp6AE&APE`GMfcv=bp{J(vh@c;IFhJLX#O_Bnf z)2b!iI7OtoX9pT3$+;&(x(vdN=4d1@)_`7L7HI6Vx-4pmFn)I(|Z^N(@+pBV`A{qAO`Zzhf8(Ye5#>E z3hR%lFMd5tlE;(y;Y{pULE;=vG<;11KwW#f-xEDB;dYe?Fq1tqL8hxOkbWo-Rtz^^ z?|LIc_ojxj%D>*KI*@*jk0$W$V1*AK>$6a znzP4gNC4gFGUY%awP$+@8tl?**RGILe$uX^si3J(L3~#hXx<+r4v6zJ6KOC6(IBio zf})N=6iD2ydSn%pCuq)VCIfg+e!xNx#M6q`Oo6z@*2%eiykucPp}SGqvw-5w_xOpi zrs66h!zjO-wDc{sG?;@q`A3z4uLvAB^GeDpmjZaEp2qQAqW8bkvx8~KWf<*0cdAnf zgHJ*M+kAa&XNw9ruumN<+`$jZ64p2@>DNxc~qd!TqN3M9hCAR zm%mu8d5a(RDjKusiB9q_tKg7>B(nBVB*_$41mqJFQoza}9eHY!?tr2mo=^jcfFfd` zffR)X2fBGMK&w0DoHkyXhWP>)X%pB(*^~sYjOs}#v}-KH0zQBiMNm!nPi8@Bp@2&Z znuPK!x^Pa_Ygs(k8-$y6Fp;P^z6B0VsqNd6%petc8; zk!zQBUb|oly#Mlwo-iUFB@>TkFpt#7?&;yNZ#1OovElUC{o=8KA%Qx7~Yuf_;WYXh^IJm1@s=9XVKa409B}0+#>n0=b91m8|-4A&jt2t3f zP5~&T&~%t2B7nm9A|)^gD3+hKO2KxWnThz=1yeAVoE;3KY}ZF%0y+YaI%w zco#q67knd<4fux=e0vi@t5(6YJi7Nyrw+(VeW{js zGgPbmL8{&L&rxk+PgEl@8$@EprHso&zm-J4PNLr`q95wIH$=a+D*c8N{U#Bus)&AB zzVusnqxADj46rR19D>9ksKzHT2zu5hF$lT`i9t}FNDSs=1Z`Dv(BMFrp5Q<=3AiRF z0W(p3J+Ev#5u}{eKsSR!DR94=%>gtrXa?C~QT2iL1qbn1lAc|3_kQ|evxgG?K?&7+ z#KipLCxbpZEYCuDlosVulDZh#TyQ949V4i;C0HjHjf2DGqH&BQipI3|0uEiqOfC&7 zrc<^WLJb7~1oBuDu%)|8iS7RqK$qS$ppUD7mJ=vQ!OEp^M6+ddG@g!@6XD$a^ZnFQ zrP7b0H-#D`H8@zV04Sv-wv@6}L}18CD$#V(|U+80}t#3^eJj*aN}cXo4>Y zFuw`*C}x2f0MJZeqjC*l@vb+uQ<@-BOuw-$=zydbgqgc=xW5co2xpL2Ixa2?GYuQF;6O`yaI3d@)zj!(@} zKc>(>NgS0V?`Qx~LAx<+dHTd!wn z<}5;RU5}#oJ=P+do~Y3blwC(z8VrNQBs8x>8Ek}gRVd%BN8qBH) zh`~hSGd+yEdFF}mh1 z_i}PQ+`VbE47+X=78>{eF3U9Psw`8B#GxTQP%;Yc>9GrUW|bPsd!mpg0vfky+>c2x zpY3VBo}TDQfO~lMrnwp#c{4EILoh$r!@5x#)&8qka>VmLtCAXj$MuAp!rxF+Pqg~i zVSZh3ta_J!($K;fg>t#%Ml1;7_WuX|YWz_3SKX}%E%`zIT8RdEB;)nI<3zycE7{m} zKPWZ$juWo(e^h@@+ziY&&)=KJ^8bMTs{DQ`1^e@ z|G&#$!qVSL^`u8M?nYvZ@1xK^8xE@T-JFLd6I7w}%7l4YpC0D}ZUf1xpiZb%;B8Tr zM}MygHEO<*KccouQTX-U9s5-4^rISpwi9+u!rr72{VrioXoUb&gu_w9^7-kh5Ww1# zmL;KfgLLFMVt^++y_XZRT|ZwaU(Kc$_z2y z%0mc@dx=(C=qR6#w$hQ6j<(T}C>>}=8bDrpephMuV5*3~aHAqZ+ahk-lU)s@*FMGj zeZw;c1ub-x_gecVLGYMKpC$#Fu+ykFVY4xaTC&`<-LyJ06Q|nDUi(Ibf_6hAG55s{ zLyZTWG}zl1HWah=1)cBv_Wh@&hAV>s)u5sJAau&3ZZ>Qf-JMK#PfJomzhFQRj~|_L zPg~fB>fVpW34-o>AN6y;R%c(?+x=QcC5ouU{kg~ zH9~7g|7DV6@$fPK*O43>RpC(@X^GN!jY8gi(>S2%HrZlqR4Ll9)e5R^zi zdALTqlv2oGSeURUA`huLh!xK~Uyp2C*XlN@_X3UTyGd#k5(=*d=BTkDK%p6cFz zXm(vme8+;*{AR~q)5&%2O=YImu46-HY;mnf`rS^?@-ovjhdE|Ky*uNg>40ZiS%<~_ z>#~mDcm3I#(CpehFTr9jOv>Hjsjf}HOP6+ht9{Y&R=e@@=@y6ab4#-;?P7Mb!yI+T8}^)9 z+&x=js`L~#erR#MZk}#&y}!iTY>%GvPP6-bVs1TNI6b@0RhQ6YaaDYAqQ-sJSZKL+ zK5Ft#cl*VHY`dW;e~W8JEuVt0j9aPc^hS5}kjWNDFZ1*|_x_aj8hiB6Gp#_2p}K9A zXWAF}Rdj8eoypxY-^+jty5Ni$mAhL{Id*?UQl&^A|jnW@2*G5FLLNLV||eY0zS(`gdmd$)S36HaXN{HD0E z5(1LF#U3^!cMnu;`c~KZgzOFO^rpsaw>>#`tGj(6RKvRHgKT@uxekk~a}mMPWSZM` zKGxFgu`X%c=GkwA`0T!z-)!%_=r1*{72u40Mshnez7`tbNN%@u)g_$V==rsABv!jP zV_Vm;DBQ5WZ_0K}FUiU#0cmihwI@`$(uXAw3X?5e8*5YWQuWA23+#)27Jj7ulX~aH z4_$`RJ1ivrT$i5zkH3Dm8#c@qYSiB$4awB^w;6WpZ?hSGqK}pajn`F31C6?6(g2fg zjudaz&9VjO={8ESX}Zz2pcvh7Ti}bjA(F9F7bF?YI?0Am?6NJOP5R0fuwDAn7O+|R zO!}r=T5Jo*klvLd%+g#b+$zns>Hi?L+VpFrdMVT_O_2r--e&0mDI`S3YW)DdEKv z{7oEPG*4P_wKQNX zlOo}tCgzTR=+>)UDf&d4VU6@2&oZf~Br*N!lmDSxCBi{r$Gk zIQ^ZHaitC+7XBv1j5n^l+V&qh_(S|TRO_|A59|3IAxV*B{X{YN zS3@5yx_WDzzDk_R{M94O#Gk@dy-e7Q*^k7PKbfOPn2A5uf~A>~ehQyXdT90iKUpGS~-^APr`43N{S)N*YObWzYgbZ4oj0%hJd=Szf+tGY1InE0|NTg+FEbz*ExbOiVzMQ~r2b z;Js2ho>iC<_=uF36FA$}`(WTkTht!{3#18|0e490R*+rR_<&~V_R@e{DZQMi0kiSl zC$0clhDZ(ob6|_@mKOsAf0?ELJg`vuQD(qUhQ(Fz$dCX1YW{=(AzTx4M?7Ty?vv_( z4YtT50rPo?Lg#=IK2?lS;K$N9Gr+y)&y6L^?v4upCit6}o3SW;na&y@1SD(xl$90b zxu$@8`EJtWnctn+9&kvU=Ja_)dL(G2ybuf5)!5Gi-?K$^1kREs04;@YfeWQ6X@Mi8 z31EOCW&!WZlS0+L`!p}`XVT=jz=4t_C*UdR&PS}4y3|vrDC}^%U1K_Bu39F*6Hd?yR7?jErsH+KMsjgPZ zch%K??7NzkPu117iM!K_4qaOoSsHYoI3?;{eJUb2$QFAksLK}naL@t1!2-8TZwy){ z70m(6vaJgak?+FyEDu>3(pxHD860JcdpH>1mcXC#SV**OKvuBgI3Zk*+?x|D$jM4l zUQ!yYP*MnHF#IM@APhio5}ztcjBj9+TSN4=_@4y-U0Naq7fXwc!BcJhX9lme^$!eQ zDlL?PQ*Hg`1m7*q=a*aXv_kffZ=}-F-~l|JLXD7kTmSLFf_bj#55D-_6U8~f%cUi8 z!S_lF$X^#b$2Ukc-#s^!ah2w*Ta%SsR+?{vzb$jpyTf8~=C0oB8!T0bJ zig61TmQ^vs!9~&nV5=DE;1N7nF^s`o($dV}3GBEPX%877RhUBh+6Fuje9abrDfo)? zNNI4HEq;9Pep~;x;1;PA+*RyVh`>XUgOI^Iz2f*nvc;)v4#O5pkDEf0rN`2|C?wEQ zi6eZ9Vqe0_bhnj9ChCTiNA}Yt7$d`Vra6&%-5^uwW4eJ-=n~znQs`V=d|K#zy8fon zAM4^WLo;=;nW5u#eT|{Rbun{76Lit0&=_5BDKtVCC57sAz0wSi>uxa_7U?1~4Rdti znTDCVNTVTFXGk;Lp$m}=V{C)h7-rc9rx@awS_FV-MS-WzU|f}AqCQ7Gc{?9H0g$zBEQiM&WtqZOy!XQ zx`A^-SLg;BLzn7qHHJQ@i_Z+5sq0@JTA+)Y6Pm4yGlt%&i#3Lh(Dlg-HS1!^Lx<>k z&k60L>un7EMi*r?tk(6)G_2I!Qf{cwMa(fQ&_x&x59-2=h9Bz;nTFeKgLfO|+XgQ& z+-Wl%F~sY1W<#(}GKH+P4cZa%scn!kUH0w8K&C?e`1)b(;Gsbl2(roStvaL>!rl0 zAxov7tPHt>XJ%2WSiCawHr>#)$X>cZQfRTRpA?#^iIPUt z@749Sh7Qyjt%gT*kygXqw!wLZMClU(PN;X-EStG4^qMU(BXq0nwzkl_ZFs-n-)#wP zhM((#(hPm1%K!ob$X+S*W7}<)LgRJeGqKn$(GO)_>w76oI6cM8M~b*s(TK1o7;Pm$ z2=8SZZVX$^*I3BmY{Lz@6mujZV*II+?yx2A2&=axXM|Ph;6nujFkRunx)ej?RPd3m z!4<7fVany<#Dg6C4cK#d}4mc{P;Vnl;uf0AX3r^3`xd zH7vKqQ$6Bz4QfHO_{g^kx_89yUDkCg@&GYM$la=o3TAU_7(zvW^^7K+44AFrgUvi%59*^30KBe+x;s_k2KDA z-aE^Oh|%V=TRoess1FsQQsmfEQrO&Wj{f-i&!k!NUh?d_nC&kIH?ri?**;75p?XvJ z%OJMl24o|7`cBWUW5JKdjD7+#VXG&Hs$e^Y$@timLNzMkh z{pHr*+an$rv(!ftA`KsPYGHrS7d3iMMO4k*y0_G<5CI@97F^=0? z+z7RAT;=Jr$TZ7cvv60d$68WQ?;4Y^3#F!nM!q|#d&!5dFLjRSKeoai@#5}f&JiE) zuds*DJOHViy>GGeR|CL><1@$2cc#pGeXc#?qx3T8lKRmLoL^f<%y&k<`1;(gTL!#t zapt|aZ>jTF{SPkhGRGZU;M^5Irowq*fN6pAWdHQV&J7=$<~whhxqq(nL>vaE^veM4 z8{Syv{Q7xQnR99Vs50mA_%Rmeh6mCXI5!j>#6mMODxAmTaCcY3zLKuUj}BmsqP7y} z)DK5hI7|DD!lWio(Ifd$B&uo{Q6_S969U2g07V3cQ5ZU z#2uL56%qHw(yo*bY33Jz)+4h3OG>|SOP!JZ+ZNj+iuNvczB&`n-eMfJ)R{6fZJG0T zGigZt8)aQ74Qa~(TG~>W&D)nctNV|i?|e0W6!5iXlsHpfOk3{UFu(-N8`4UgyFS=! zaqQ|huELpDzk9Ls*nqKfoxhtkro{PmZ5j+?|Iu@u#|MBe$BRI)ytvz!+HZ-&-N^da zX^q>x^s%qfX8mkJAC^^X(DOA6V>+{0KMljKFgJY%nS(4$nqB z@cMk`H?zR9C2=7^Qo$t&WkiNhk+5h!r&J*<*a=!1L#a$5}zh2?ICH@Vt z@xzP-&TsmUFLCC??_cg*^6{Pp&J(ocrK0@+w|;z?J+dFzv%dboV#vmU<<6-er-8pk zdn%k?zqo&{b7?KOuw-TiW{%sl-1)1S=}Wr|ecQmYzY#S)Xk6}mWcIkl&O9P<#0zO< zU6FrlEW&(ampgBneGt=su&)G^16`hPtDq&9IwL-AD}$(v!&C#(=Mwjqc8z@C zK!x*FNFA|pne${EPILN0kk)?)ri_d`Fc*Rj*~lC4`f{hCAJ$m^(f$QaLmV)V`~WD7 zm<3`_Edpq}X72?#i`o`Dmp*^6qAR5~W0~`t+4~nePZ~!pgJ6PXkqrdZY^-toqrF(N z;dY?#w{Z(#8OAN|8qxpuWzKtzAl=j=9KHIn35xg;bYW`zIE&-eS#N;OMdR^f919da z99>2Lk!k>~ZywkSipN2&roMnR);Bfrujq z99U|Pm>-!|7dg4h`G!KejY z5wkPE4=WxUISZyBawb?Y;sdbpS2M>igKR)bZW%xv><_`*_3?qF&J#w^>e7o4q~mck zxF~&b*DVi#QD8S15T6d}_J?$S{lZvCL@i5B8|eH2SR3&Hp8Zw7aWE9MSp1d&X~2Be z0T5^QZfN7|u_exvRwB;qvEXk%;{JfN1vuJ07a}^k0tO2595Jg6{OFIxQ{wlM?(cy- z$Bka>3FC}?~S zKyGMAhn5-1CVqIJ3dAzYA%9euIxhW@k*J8-;W&@T-`hm5teh4{@d;v$_ z#E&72b_1i2aCC{(`9weH)`(dqViZ98T@f_2nkD;z-OHWl;}3!mvrG`ok4Ga z{1pk|t1s+c;51`M*9hXw)S0)#Fg8Hy)*Hc!r87rEPV4tCa~|stn|i)Wr;uTDC< z){~QHTIG5)dDb>;L?&D8!yB>h_e(4J-(u`bhBZ=vfvr5pG}_}sh*)3`>odK^mCBQ>}-{QAY){TILg`o)J|w|KafqRrZSEnT&r7w+>!S1>~2O_ClHX0_uFwa-yTkc-MAIBintG3)4N+CQoSfd+|gH? z0Q?1K<~v%AjQJ=_*Cuew9W z=EiAVI~d%4U^0Q*^;)slYO9<%8sH=E66iZ~1`_wJQ+{Ue71zi@gOI(SNgNS;m9D~e zANY)O3oKpht+WaE#a#rSWu0riV4i|PSUZkpf9A|h-64dBACiX+$vUF`u?hu@@hrcZIL*C^E%evOrPI%B=E%Re_ z*Qu=-BI_lgZ~PrmH_1Y5T+Lh%o6jr<(Xt${z)k9^o729*9?p4V6ms46i`Z^G7Gtgl zg%o>m##m6}x-#!1ZRj)K1}l>eo8>D9mTjKsl*U!AiZ8R!3_ym0u@v$wng%dE&{t%f zq>jZl>MJx|s4~>`=VBEjRYZ>^9o^_gb|)`BO_i(KFA?sC4W#{KRkBajCa!XCDw%?| z03s9ie@WJa25iA5a3YCl$4-wydtx)$2uOry5$)D&kiy@=svyhE{HdF*Im08XImU+$+T!XNQ#YKi1&RN zg>IJ4cF~8j#hq?c`9Xq2y3gC+_RE8i$(=2kL_IO+T-k}OrOR||o!bpbw*o_2084awa|?H6m^&vO1tcMHBmX-Lrp zZX}r2weg|1HGnM6R9Q)?+Fu!p5Ss%6C|EqYd1VJoyt3kA|6A}1gW^n6!tEr3NVFDv#i9jmX-eH`zP?cKeq!F zhr#(<-J4{$xZ06Q;!|+(ng_F+o8e20n#d0 z+8lJa2&ZHfWK#T_I!lhGms^?B+&1GQAd1uUdRBF=%0kpJ)8j&llLNSlGd!g(gw_`y zud6~;>NObNnHqOIIX;rDpif3xadI-!-%l_N0-ltcetc1th2aNK9cA*TsbXn>szw)R z3VM%f{b1>l8Uhw-Hu8m~U1gc#^1Il`l+Vk$jvCb(!AOuW#E%~(-bSBfW0W85y`g8( z^P2!9QNdv08Z-D9k85@9YwYmWbJparB+>9Ui31>qnG0_On&_PJ;Uzcd3B~zgS!47u zfj{~^OaP{+;GUug&v=fSux?=8>mIv~GciqPT4ht!BSTq_AYA_9os^BDvC!J|>%^8i z&p1I)B%7^|5CI=#1QF2>N7+OVgS{Cg2*&MaH-&laX!7Ed*12vJs$=~G(mzBi@1We` z%x63js0;1~KvTVtsYGb^rUZY?YIX^fR z4?*{*C;CDw^?^>WLiAv+a&MY*y2zcrV@4}cvK~!#boYyV>d3?0D+^Ju=W*z-6J40d z3^`mdBdnm7zGDOLLJ3_?@sRc<=ivrA{9M&B6Xqi>$*Xa{e=!Gv$S@SEdzojn+QVPT zBZ(+%_Us=j3dBU0LIe)UoB|Ze@$T7Sc*O$wPo!I{_VjET?!3U`*ZVsvao( zU@J1Ey9z*Eky2<0AbWNnJ!g`9d9p=z3AGbs=U;chw2JyWwHybne+UR1VOFn5Mvg|P zv(-z9VRJ;tgrL_evwuET5-WQlN)@h#dnq}&y12>W=gC3Ti;N~SoThxTl1^y z?-v;)i^@(<;g_ekx$PaWVc4!g;BTGG&TET3JaI-n@^kY#*Ph0+^`1>6*_-C)ZgK4~ z`}#MnQtoT6H_Zp*?Z#<5A1t-ZWX@emqF0JYVO|_~bY`ehWd< zUzZ))=Ki*%kQT~qaTN?b`5e!TJOJ5Prx^0iR!?8~2(8|WvgN^#Z9h!WYgV17{NkAw zal}=UsG(;zxSuT}Uq+K&`E+7EX(-nH>{PQd>APFp$$agL+%4`!@=*)vFUFze8k-x0 z^w2ZNCYt3Vw}X4EY01ZiabYHFE7r|k=N=OSWcD>#D_x!Q@1=E5ZE&60jB9N|91+tn zD|-3F%3gwwS-7*Brv8* zY;1cPIS>IDN{y!mUHm2=6(?}_Hy+>Mu`WDHD11Pz*+}9P2afh-uWX0pK(sIWDkqz{ z=vTQUknh;Em~vAVi{z8rP|iB4$tee#a!>T`cAr2A4bL0wp?~2NFL4$@CDX4@i4_Uu zIjy+DMi6=wop_|iFH;hU*jJpNN53kkmdu6kods#yG*^4s@vW{=bcCH&**u(Hn8%4M z=z^rdmo8|A_oK^pf6}#fXC!#@(sgDCZTTHAqz&X_t{++&-3DM@!XfBq3tD8+e^ zALOok-$-FHN;!+XB2}Jwt80v(sk*MFK#wsP$gP&&cWS2xl@odv&f(cIl45%MqI@BI z6d$dC@cUve_Jmc#Lsn%<75}&(e;ZvZh99D5;T9iXNGgN|bP?j@$h9wQVkYHp(-8DZ zzJcmS*Z#rBDoN0BG>io9T*up<=*AOrXsQV2HZ-|=%N0Se)gDtuWmhHta9z=?DETt= ztp%lm%NZYX@fcJ;(BJM=&w&aJoU|3C19+=_rG@+8r)BpE=Sr4qV4hY}AU}va-Ycyi z2oX))ELZplG`tPd#1O!ptS2$Eqea2BXLI8;xAEcjO3w^ja~l^O$C8i@cY0~wR@bIN zI%>*BkADo_a_Pgyjo+VXQT>s(i}8*akI^>yYa9k>a#}me;xU#L)R0ICC(Ng^uA1+K zRk3;(3}{>(R}9_hpMjUX%ieGHRQrT^5Nf#u;(4qLaf#xOSkLP`b#fI4ps_tj64`_t z0dOry6LgAl-L(r3uXCBzHAIz;D|be&!Bahq$KmCP9ztg|FccAYk-YA(>@6WTDOH&)s7iJrAfaG zjoy?}%omx%O(lc}f-(1~SHa8Z#6#<7KD;}k5}VPg`^?MGLePg5Y`QM~qf*neDD*%p zl!7?dRS)oRj?m{8PDL2;!H0&s=?4*3h(n7o4Cw=DKlk!DbcZG4No0SI9f zo*g2}u9rP~uffM?HEeeoUZL)>X(qC)?4welC?K9a^xwJ+L;e9YUJNX}6oTalJ$zH8uX*4#<0h)J}9XZnk zlE3U$Y$4`B1XP89U!6sE2ob2*bD*t8vVS=$Nl+1%cTr$G6zfeUgO|L1n`2VfW-8lo zQMxT~EmS9m#9o`vbnQBT=siteYv#3EO6GOgyIVYM z;uTG`Y(4C5O>8aBUZhco!xWQ-C{5VEi&iuCtiPOuSrQROb#!3dna`D1f8htQV<6OUSae zA{T0FrSygpe0j4I^>%r)6HyDl4=ef;HNo86s*3HMTC6AbDmma&4G$qhU=$P85@$5H zrs2(4pWsB1d$ZVsq<3kJ9KrJw^k%G&(RcQei^fX)LivX<0I`iC{J`e;@8)X4(1pq! z%sK~IKQx4Bwbc_5Z6~Qsjm5HTPLc3u1=NkjqL?Sb5VYtWTqV zZmPU2?3IyjM9`tw(_?W&KYEG!xX=`37bONx7!@>S97T+tnC&O4e0@B6 z_TE$X*+SghxQY#^<7};&igv1r+-ia)6ub4@qbbVF+Fl#>&#e>cUHe|@*rZgRMk7Uu zNrIGkdF;`v;cS4BkQ}ke%8`uN-@gf1ysa`pYTo84_-wCG1FvQoZy8Ex^|TGk&bA{1 zr|7T{4Dh#7R7w3(b%9CrLu~v@h%rz z&GN0K45xLqO({yMZ3!#rmlWQ_cE<_PjlF07hbt#4S z^6{)QO(!ZTo2BC8^cwfRPYJCiyw48$`4qrI9VoMe)Md zo&y4oK4Z@wh~NGvH6q_{=& z6@aGPCqqwAh>a`;CP?WzputCBCyf(?nj-g0;yk(8?T7)z3x@$MGdluhKZ=^K)rgjy zuy?Nzwkk~TtW%RS&H|OP|M!S3YUYJ?$nu5joePYT;r)i5sOdTux0`x|(;j4}?kQh* zlq)RTK(&HO&tqS{L-KN{#q(GpAT3AZ1Q(L2PAG2*tVfFH)j@)eEo8?@=y7;WQ0YL^OD+k6QT z%2;B>qlu?mDX=(e`b%U9Z9_@u$a}N;G%d_JfRAq=t-cr0=ztqdY6*) zSZrP`qpAi6{u}!?qV*~cEm~@}Lm9Z78L}fqFu{Qwx42QO8JFb<43)6QV)52d=wG34 z^h4f7a7Gq5mII~gCtp*aWu|aeZZ~o`t)N94+}^>2Fkf$xpr2jq6pE-!irRw`OdN}o zhX6rl#bJEi#0LUu3-#{sW8cG}6H%?A!6e zn>hyWwQWXjuPB|LZ5Mq(`CZR89>*tG24N}@BMrwJM$=%GJ^OZGvv|2zL?#^l9^Tj# zljbNjWU*T+NB>A$L_W>AskcR!>!M<3RH=Pwio@MS-P6iYJ@=_q;kzzAG;mxje9Qa& zGW6j+=o*uFqQxHCVa~-nScbPf`c!Z$tTq|)*Jr53@nbYCbK|i+Y)x@xXY2(GnV5Pg zs@s`WOhc3;{a7Ev+pfc@XQR5WtSPSQjJ;@h+ntblice`AlCEgvc{IzG&e$)jX(8PG zHj7R%7-UaIY}V8`qciqA)@VvS9o5|_)|f6@pXu4=&R9fbt^~S^hztN-s^({@C)$K( z3BGx$N29tOfec^c{g`=pu00Gk(Xpd1a0{PqD#Eo?i{l)j8Zo1BerN1io@EqTq~mZj zFLirV_eE+7-a)5LJnp{j7H2~0uBh${JoCUt-->o*0R=9YC23ikKBlB0rY{z z>pEjU5O>wi+eX0r1!%=6T*3cT#;5LcsqcUqM+jzg3YZX=$>D{_DUPi*Uq{hU`j&g5+22?Ue*>rM%&CmB*&w|yIS zElrq|7@#L2f|o!6Sh_OIdHV<;%!j*J@^r)BuqdLx?D1l90>D3 z^Fd1H5!E1Jgd1w5Hind;g8bnwxG%nIl|_)^2~PrFTV&Z{H{yrp=~`}`2+m{`KgTjI6bFm~xI`DZyK;}k z#To_fw<;8ZFhKa{`;6QBz2g?hE1Dzwee5P(47h%6YE@dBj5vt zz&vmj_)e_%)Y8k4W_sco!VS>-@ola9$`=UpCbD)j=1@s`cB==Q-tr9xEA}}SB%<>U zY_wEkQh&LkLV(@4hUAKj!o*Yn3C&we9g;MaumWJ{KX?uL-q#$wuRD)S5J1C?Pxvuf zgFXqixptD*4c9X?0p_D#N#DmHaDW-}jY2hEoe!etJ>NR-`GAb~eDwJ*1q?i<&WDeZ zDG;dF`1@fz7)HStX7rIMFpI^#*3du`kE!$VC&rZdd|^I9FlRvI2jgRCn`_g>kte5L z5>e>1#hFahKy#lAJ?tb*5Nrff1G_=^!ru-N@eobXRY#vxV;dm=7uwA1`;}NnE zpqdbVC?_q+y_epPfwf{jY9Ui^5KY+Z0dZ^kTPlWF_{D*NUoImydY4nWoa<0 zpeb^&iTXPQ%wln`H8jwCXnHQo=Y}uL+_0w2=L54WK7bkXdBKbpH}wexX7r$8Ly$;^ z6uB@FR&-wKF-85z^)dULes?l zgSG4;)a4mw1$tdvI|jqhJ|o|i%~D0;nHqvmm^2T2Q(}+kX{)9u&ZVA!Ey*H7_9a*$ z=A%kJ9)q34HApeBo0`PvhlFdZrxeXvbkywGx1E6mQ-q;_y_aXXm|sV;w6Z;LC-5v6 zPq(=3JMuBrkz$xHU<9b(^MJl=H|Ei}D14T{mC@8l#D+LB4TSj;1`54Q^g&10u>`=^ zl=?@eE}26{0jIzcd+*y%*0?qsEiIl$=i_K2S!%g~D~ql22H_yt{@DXb+UcVO)U64m z;WRtfkUIgLh4~VbzH(B#izPuJ5F)F_y=f6lDL*FMJ9r7u7#Z%cG6`hBBN5Yp;-4wc zZng@5z^L=pJfGHtg~vcs*I~jEoh=Aag4t&M4&{~1V zXQ$R;4_CvN{O^(CwVkn_0t{xTG7gPs#7jZq&p@?vjFIZae_e(SHH{>KM<61}P@Sg& zjdB__Ff#>S|CSkPdPs^EZ(QhFAc&Q7@e_ z8xXLF3fd!%*i1VJXKHZ+SYj|_1F{S10#Yca(5>vPuJ>C^U>SvFtOgiN_`Xjs~JV?4z1hlnbvA)07)PW6PXojNQD5TyGfQ)B*rh(M?%ygpqkJl&oivQ z^vRSQ?d}npfcVkYD)tfp8X2;Qa&Z~Y0&w+Nd@hqPxAVHBoE&I^e%z`@KS@9V4Rx*# zYJmduy99jCkjCRNSpF~gF+z0-!m`)R^n~1{hs6;vLzAKL;1P&;PEcGl&$&tgcsJL* zffj_}97x!B0)GLKI!DgBlZ^*q$zQ~6O8o$^1S*)nZZ5Q77ICdr zP^10f<3;#ntqFW1>aq#?isL%SpG=L$GiXjjotlS0IR(r>5Kw_zlL1f?-31B)W}pwQ z4#8)N+sKg~W`zhOZ{_Vs@%G~|@zqm2OCtIV%`6-SI0KOqc?$2z)pdtayWLpq;@P9t z5T`*u7&l6I*`8u2&SMyYYY8%f1Oc`5wNJ(nHgjZ~grj;HRk}x)!Zyjhe#E1f^ReGE z1bsJSVnDw$iHBOne9v%pmqi{C&=bD(?klgHAhZM_D1ip_!fUjgu5#@xIonDFVxR@# zhlB~EUnEXhkie9kiZz>zGDh<0ErgbE6CgX#0ueDY@$zg5)l`9-r-_tUPzY9vV8I^! zC&%mQS90m1Zy8(V5TfeC~FPpNWM52+?FFcpNA`wr#D9D&8Ju?zw5 zDK+knOCTb<9asjqwo57z$>?`3qMmJHMdzYPsKeDxVetkR0I6F~Sju8{v=w{DSW={d zY*dFFZSA%vk_F-BxkAixrG3g)T9=!aQ5eJ%;LK6R7n1^doMNAeV8-?%KD^96;9Dh+ z;%Bi>lIDNIsb_O@0nyy1`9w+Ka6l1TnnK|v^@++*0D!vKMo zLZ@k#Bcx124_Bh5m5aMs{${ zvnuUM=M*p+hKR9x7&L$bAjleB6YYg!yA=@R)p#B|Z-VR+yIFRjh%^pl+Gou3ioRfs zK;38rXxJBT#1mi{r~&#xScyGQ7wZ3mXQ!$-B#g@H+}CHpvm)XFYhhG@2jXlf$v##| z8i(#^KmBQAbHa%<@=nQn0gsdg{& z%WaMDIAmVg@BWSE(uBGMwS z7D$ei@I_0I7zYbN^R=Aai4XT1XmN}Ks#uN2bu|42vEDfXjiQ34)W0yQuqvt%jD7_! zFk0v(CJ^(zLZ80hL2C%_EV2$fCg_*HR+QDFIV0#nO*<3t6@3v^agar@pdqKyjwc{% z;Gm!>3=}o)pNmp}@!$r!OQxAS~v%SPAk9e8ozyqSeTgyL(Ja0?4{s^j(< zt>C5Nu?4NDC5X%%&;lV`=lso_wcgX#J{(Lo=j}vg8xufHVFXE#^u#>T*2Dci5L>yU zhjxt?QOC#h68Tj+3|6I1ASnDBB;s=e5sV`9m(dl*K-!rQFpL6K#~O}H)N!wv_L=RFT)SzA2 zXfe-dMlgXjng|6jnbw`rjGk?x8YP|+$>@W5!pbB5qxgkrh53Nsc?CYPhRkO(1g!Xq~0^99rx&9)d6f@ddF#Zb|v zUN!w-W@;$GcO^S(r!&lQ$lk>KJwk#+n4_Vj%59MM0)ZAC)lp>v)58{%L~vyOtq6r! zvauyJiu*E>us9pqP7XOCn5s>r#kq^R5#$8)FtmsXfegU#&cM+vGUr`{DP<-xP8e=^ zHJ%<6hn8Vn$zcoVOiq~117?BHplPLzUR;rzev%-LO(*bCytzlU!C(Lxj|4dsXDrD& z%AmQutRs_T5meP_5wy9<)V4*1T+3ej(M6fhg^9> zk5d37Iz!}fuo3XYb-4h<`SgjSHCtJk<|!>HbXwdfXZj70$X8$G+pZGVM)S()fj0;Dhn!a9Nw zP)^7nB!Vb@gr)}@g<}zVp7icUcL%Kjc|q(AU63sj^@BW0uU5o-kzIp6fa5i;Ho^mq z9fT#+1sueDgr#WqsKqQ-I200zqMBhO@!K`{0k>KZ{^D~hrJx^X5rn`jqVh!C;s%g* zOeF*zQ-P~z1P48J7nsC&Oe`eCr=S%&c!Hq94L~K74oLHS^#8HQ^MT?b426M*Lin^= zh)|dCy(s?=E*w<}vvg&Rw#9_4{X8qdmqn#8u|0}w1w+pe1aL97HI&^6O=bwVj{^8M zQRNQsL8ysp)GlFoVKeQ-N~*(q`Zz6LgeANWs;c1*9ci^hpUK=tdS{MYP#0%=kb zm2;_oWm=&!Hm?zkBKom30aChlhPT*dYw--(c3T!jjDjIbcbuzq`l@J*hzm0*EOfcgOs(J4W%TY#{A`2TTAhDQ0OU!J|6 zBb@2OyOsnl8()A+uc2fWc{;Y`S%jegg`gjZ>XEo3C<2MWP(d*C18@4xAJG(?XaakL zhd^Bli8~b~03^#A#Dai4+2Yz$GGe3qt3{TLv@Rxvt_nOb1a%AOIVibH5o(+QnHl&Z zF1}eKKS6>%QO+hHz(kxj#Qby@VheJ**!&Y7+~+|zPz@0347nFBRc_+IJF+moSc5-t z+_+0v0WOQk<4$jJeN~cQgg1vEwj4_VQW${00Mf&x-J*zv>0Re!^?S`z@X{`#{Vv)y zzn=*PR0)|T(mV(kB%2uD#DdB50grCpMd{0l1ckMS<@xrz+VG~gvlk7SQIb{Tnf5Y7 zuP=w8MB-;;Hvx)+DXJvCapj4~zm2oUMncekaisW-D{Ph3kIC6%dt(i@lL)|}h%hZ; zDv<7tuIgcTgJt+`nd>sG`tdRnAOS_P0e0J;4= ABme*a literal 0 HcmV?d00001 diff --git a/bin/librm3/lex.fbin b/bin/librm3/lex.fbin new file mode 100644 index 00000000..353ced6a --- /dev/null +++ b/bin/librm3/lex.fbin @@ -0,0 +1,101 @@ +' + + + + + + + + + + + + + + + + >> + +> + +> + + + + LEX-FIX-MASTER-TBL # +DECL ("VALUE" LEXTABLE) % WORD %< +RGLOC LHALFBITS T> LSTOPS % LEXID STRING % SYMTABLE % % %< +TYPE-C LEXID WORD> SUPPLIED-STRING-TOO-SMALL!-ERRORS +FIRST-ARG-NOT-A-LEXTABLE!-ERRORS ILLEGAL-ARGUMENT!-ERRORS % ARG-OUT-OF-RANGE!-ERRORS % +TRIED-TO-INSERT-VALUE-INTO-VALUELESS-SYMBOL-TABLE!-ERRORS OUTCHAN " +" " " T % () LEXID-OUT-OF-RANGE-OF-STR-TABLE!-ERRORS +LEXID-OUT-OF-RANGE-OF-LEXTABLE!-ERRORS LEXID-OUT-OF-RANGE!-ERRORS]>> + .GLUE +> + + +> + + FALSE> "OPTIONAL" ANY)] 114>> + +> FIX "TUPLE" )] 319>> + + SYMTABLE LEXID "OPTIONAL" )] 506>> + +> + + FALSE> STRING FIX )] 1692>> + +)] 1618>> + + )] 1526>> + + STRING FIX VECTOR)] 1397>> + + SYMTABLE STRING "OPTIONAL" ANY)] 1314>> + + SYMTABLE STRING "OPTIONAL" ANY FIX)] 1088>> + + FIX >)] 1069>> + + SYMTABLE )] 1015>> + +> + + STRING >)] 879>> + + LEXTABLE LEXID )] 788>> + +> + + LEXTABLE STRING "OPTIONAL" FIX)] 712>> + + LEXTABLE STRING "OPTIONAL" FIX)] 624>> + + LEXTABLE STRING "OPTIONAL" FIX)] 583>> + + diff --git a/bin/librm3/lexer.nbin b/bin/librm3/lexer.nbin new file mode 100644 index 0000000000000000000000000000000000000000..1591d32927e55bf4e3d9509cda83253589a7980e GIT binary patch literal 1113 zcmaKre`p(J9LAq(+9YL(Ce<@)WjotKt38@_$Do{ZWf)ei}{%oog@0(RcU8w;`H`ewdtO3GDXkZ z3#)pi{d+r=;^e+ihE*?4D>(oM8B(a0ePKXNpMua*6NgV5%R(sYfS_V{Wkp@eVx4;Q zGYHMFn45q&to&hSf*%%j5vFHlpMwj$0Kxs}5T9j{kbR&nW>9Z>IOUXmakRHfK%+Vh zd?;_Fk_lcU8!D;8{SdjWt(LcWR?6C(7n@yD9Dc18a5j^rS541BkbN;iBT<@>N?BekV)_>F+j>GLDA(Lkt7m0Zhye}Td2HxOaqvZ>I|4AF*v_Vcwr$_)s z46^utTInW2`Rymrfpcynfz-me@BbG!_q}5kgFcDVz+e^RM({TdujMOzLho*i(L19< zeJw@DvfdK7lVLa|sxi}%6~F-jLL4TF%LkP#P4qdM*Yc7ASYfu+^_j`b7__Cl&k-3d zJNHPP`ee_tqFT==$4h5-O7H1&*P$P1k6~F$f?yZv8@a3Dj$0^O0UOshkTy3g3 zpV5DB{8TZ1T_$dLOyQCa?$#bkIyxw9@(aTyC|VC}983;@z9Wr5*OurLL-i6it(MXH zfccp&2VAHk!j8M$kto*rVS_LT=m!_(pU=^s>*CR%U!VHp+rOw!%wY=6Ih=iZ z$^jYXhk>9xP_3Z78x})8SQDvj80-V8jIyv~K31ELN*71i&C;dWV%smFk;1R_%V+fW zCtAjfuRK0|s3h){9$CG2&Z`g7El + + + + + +> + +>> + + READ-LINE #DECL ("VALUE" CHANNEL) % % T OUTCHAN]>> + .GLUE > + + + CHANNEL "TUPLE" )] 104>> + +> + +)] 209>> + + diff --git a/bin/librm3/locks.nbin b/bin/librm3/locks.nbin new file mode 100644 index 0000000000000000000000000000000000000000..6dc622a76abf7dd1bae3f5e83c5228ca248b65fe GIT binary patch literal 8057 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 I!6NCu09Pt8i2wiq literal 0 HcmV?d00001 diff --git a/bin/librm3/login.nbin b/bin/librm3/login.nbin new file mode 100644 index 0000000000000000000000000000000000000000..1dd6db967bf73f8f4b36ceedd96d00f419be7508 GIT binary patch literal 1151 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 literal 0 HcmV?d00001 diff --git a/bin/librm3/lpictu.nbin b/bin/librm3/lpictu.nbin new file mode 100644 index 0000000000000000000000000000000000000000..123c9303c89cf541c7c5ad247166f604eaaadb59 GIT binary patch literal 55898 zcmeIbdw5mVoj<&G5=f9l5-t*Mx(T-g2%P&lsfalw2a=l0As0zN1}H{?5D6kvykPB{ z=>QX%LbXpzsRd~npw?HBSn+LVT1Rc|3{|R3r>)cHr~Z1OPK$@}uz52$}xIFY`FxuK#-ILtA)C?uNe|x$&T2mD6O}uu%oOHe_ zwBU1z$KL(dVE?FTuO5qz<96YvpNu-M`!)>zJ%xfg~5TxkGyeg;9pkp6YgEn z>`=kD#Gc>2(#vOf`58Hu_=!V{_9Y^}{wM3QdDhEcie7i)lHTOb($EvpIi0~BiSD(p z1{0Bgs6CSW{GJ7e6Cb|6uzBFM;eR*jeDlWB7!{p0mb|_zPS464xIC7;J?!3v7aiOe z-*a~`m~emN%pS>467WeaI$v+&4 zj-gS#ak^pu1y9NApNWo}^=~^8qfR#*OZ2aK?K9D$gKvH&I_B%a!vkka7vtF<7QFBM!J=0Vl({?18H}|b4qhm^ba4dd& z+N;6jV`oFV;^)IvdlO$+e?Gtft$y?}Z{h8k6ZR>yZeEeu> z1!<*>`&JWB86YcE$Tn*B^*K z_HNx{$*qOWJ@KF1`TCJ~-#5+unDL)to@v(l-hJaqbbzxH2Y=if9kcphdjSkhy~(`U zr%xpM*Ea_NdVm+Yk-WDn#NYNz!aLpEpX`3;RBv?bp|_63w-h!UNSp|VpGw|4^QB|a z(VwdCNj`eIX@A^Xh_lD;K6OlX(EPr+Kkj<(m7e6ih2j12E$@Yb$ua9+J`mp<#=>u2 zA9^zW?A_+Ec;EXN_}=vg>8$*4ysreE^3XP~GoOs73~2ffmlbID3 zSy7`@42zC<1U=t4d|Q#ZC@iw0MWrG)<*tF3N3TPFbT^0YjxZO8@!056F*3Cs-p0N3 z@237}xO6v%-Z8=)PETav2@G;ubLwN%J#J*r_2K3HyN`<8%qI5u&d~_6XavLhS9`>$ zIb!%jSwc8O_GLOSk=AixV)^oS};yazgk?z11Od<>l|c{KtR4_^c4_h>LZPX zdp3?C5X_IA-)RjuJiHLEq|x(tFu)T!OtQ`%0a%tkBKUg=Ja%r6b@yz{?O&b!zyVQ> zXZfS4@vQ#cC&dW5afAoXe*h0v`x=`=)=YqQhxRADa}GY!)Y!0ORZDv~w36E8)1Qfp zssq;-U3~wmViH}7#s1NY)@~}>Mhk|cYWZIkW12bzPoiLG*;HxLv*E!fkyd}mYIh!bkyX~ymg9Ea~EQnhn`lj_)S$tZYY* z5inzN8mmJL%b{rDZyJyAf-cjGXyTw}$I}B6lWA=*4LEoqFTVefwXVF7m!?LsHgu>} zpCydEp%-$7FhIx#Tf$gZ*CwO3b|-i_%tIOe_IUFv*P+W%vF_t>p;yqLC?G5xt;y z81fxIA}CQbn>$Ef%L0u~z@*Ur+LmP|twh))x#>x>j+dpbI+)xOUUpcaRLWBD>~5MJ z5Mz0=6^)(2m!bN`1!D7p8Y~p1L{!fhdrRe|`+qNr_^zTvVTr-NeDjy^FVDo%=Frr9aRTHMs4vbnr6{dSYwL7I$6Z!$tR z;ptQ}K4m(Xx@+#k7=~-naBCH&OwSrsGXqc|?#5lC-{`%(G75yr=5`9L02YMAlF&Uu z>t>4vyl&i>XAKM0aGCPZ>7+V+1QbS9eT5$!xR#0HG1Irwv7gh7M7_3}j`BFl6WqCHXu zVYWgY3?s?})_^k$UOUCYRLJf5?3Dg5Q9I%?48vxYNn$WoSE0>@LC|K)HKI+?HJ}aQ z1P~4faHsZ(#-{4phG0v`bVFYuWn@oVu-#m4g0_SFX{K}GD1>-=3X};i z5k5ES5_=S__$bW2eYs>NbBlK!!xNl~??Mphk+y{McC`>iZ80V_j4{b2(w=tomSk zwD6hB7tHEaA3V(5kYM&RQ3DWUf(Zjs=`Pwmj2riV9*8tHpPsmER<{Z9UuQjHRm>p- zR@Wnz#P())4O^a52$ZKYlSImB7D*>X^h6Dwh^nB5*S+#=(4~m4rYet&#kp_K6p8Sk$&D8OVxjxJ} z$*N$?&s-khKcYIfa0=h0%LM-!tY<0R zTevhJkpV1P>&rx$dEO9h09zX1+#lct93uit|uX0Z_+ zK*ifMtXP=x?y3(0KfE_PET-{g)rxhq+?O8sqgcw9p?ZJum`lYuVwt=o1&|n|oTf#! zzB>b#N;<^~zFQrCf^=r^ss=F}BVM}^Pfad^B=(^uhhyG*CU?{T;sZm%nv-yYcPsc^e}ZlCFN z1p*aL$3Vd^+(D14!c*b%yDEI9%ja^&{=V>++ik>-pPhZGC%*J9vyp8PG|InVx1vb@ zXJPmCS^f=vhEqaz!tU0(;G$5Sh2Etlw+8{0C1%|Ht%E&;-gH}{H|wnX8NI24zhE~e z;o7j9r#P{5+Nq~PS4HnwP4RP^1L^1;yM9vNIx`);W95^lerKVD-pReEVWZx&KD0YJ z;-!Nuq*M&ayNN}+`46#|Tw*Wln9=ZW|9!msBDnny;=vwf-6VKU84%s0GT0kn%QyOU>-hFIyOzj}~+&W*=+{EzY0^(NVMBlw5wn z;$U5Kh**Dg)Xdr=E#`v8CUbFZo4L5IG1#&YM~YYg7m&G+>;}vW!M8y+29pO!e7#NN zkZk~(KI9M_*B}&Z&fO;FM=;|s%wC&NaItT!sEPm}V4ZzMOclm9$P)E+pPJsay$!u& zb;7($%)Wbd9$B2jDc0UKA{){JO9opuY=b5}%t3Mpc>m@RVd3I2Gwg z_~NGy-f#1Mp7AAh$>ZUvFM#`dDk_`-zn8f`Xu=Cy0$!)z>-7a72~;?|PW34y zk2SRSt&isaykdY($$^I|Y;V;y|)&f3)I(&cs zA2u;0+th&}X>jVm4n$2I%mt7dk~?o~Je)xtAXyv>rbrckp$>y+2AVq9GyXqE9qNO( zg;v3<-5iX*1LqE{_xuzALYbt=43MqO09shkXW+&=V$b%8QEZeWCAXQ`vbhMq6O$&^ zJZCW0Y|aE<%5W@N{FStCaQW?5??C%EQ-lLcaZVK&^kAc6K63yDLHh+@Q_v6=Gv^giyH!Bd<5z- z46-;D+3I*{M4W~?4uc;UCw!`#V48v5xW=*ykQC5LO!s>En9Y~j=B7C>7L__Bs{jcA zWd2Rz+Lp7y_R-$PcNLqS#g~dr&*95!W7B&6puUI9sPAq6T1Q2N7wWm+>8}X*Dm<}A z3tbzafIGcze<0v;x;(h&gI*5y?R1%57m4vxSCZs@?tCLh3Bc$WT1AGFRhaZ-=a`-# zk>pu~Ytp{TCbtxz)$-+zo~_LU6YM4*Gnn8>ze!lrFv%cFHwvWn$nNDF0acO0+o>r{ zlxduSpEQLc3FykKMAK*h!*1d!rV!HM)yT@6mODThCrTxQ>6WMg1~O~>zYJG_4XK*0)gh0E!2cn7X; zcXfD7mxPD&hrZU_3so*uuYjOEg$M&2QY^3<9B4&m(TbGn-)JF6k{(0kG(-?GLM|%^ z*-|28nzj%*F4N?gl_c0-N3+FN+FxT!$>@ov+-mhpwOP{~PK0?cC_C9{n`KwVqXPOC z1oEf>7ZQ=V*&uVDOR#;CTmY>2ysTjo&dx`s>Pvdt5_)d|4IVKpDa<2fv~zt>YWjDB z6!Y`ccDfqlY&>Nth8Z8JA7da^y(>n=w4UhfQcY(8VRXQf%oKOJ2Vcjs6M=eG!3Xz+ zWdj@XLo*e)+ZGi7d34P5w~m!r&ILBA)HWb6YB5}RfNkopjJnaVErD6VHh|dysI<+a zfZ0F_%r=VbZ4{HT+ESokBV8;u<%O-l6h(z+MBvu*3oH=)L^$G2cl_diUApb8Wjuxc zGo`V6RgH9Y=x7&7E8~CthsX<;9?Z8qiB-ndC6$+;W#1x*Cn$s|<(@4U?MGTaX||S- z$WsN|r{5FHpXgW@J6rthCU*st9tX^zey1Z)5pa+l#ODaOJZ_H}a0dc7XN89iA_H&i zDHvx3*3=`~qv2MQVpq(>w>v{m+-jE2DqSGmIu6qvtNZe|xA@&|r)%J~8>@N}j}?|S zoAdaog{E%iaQOWJf57E;fj$9+9d5tN6Kj}UmSS6-RevH`wC>g*zpKG|aq7!r8}~W8 zD(Gdg#ytx-Aa7}zdfC9-;!?s&eVq9Wiavn@Rc7;0%uKKm={T`i5R zRW8Y9t4zpCF!90S;B+iv2kKiN(PtYu@NA zdfnKvAhq>Zc)`LPG!~8>j5{BAeD;~o)wVSAbB=(=;dgk<1&inxaL<8Jd*(g4xM5-0LWU(~noGTJQ{*2L-eYY$kR(LAs*ogT%69N*&ed3+v+Lw6QfX!f6(*04QwLaXCjep{^t-<47E zh#28@LDJRKxBrzs@w5lO85iQbdiCAjpH+- z&CB>tRAg@)87-WD`Eq4t8_AsbLo_S@g4l8S@*fM)X@3}Dd>6LSJILeD6p{Gwc*&|2 zA5Nk5gWR>A?Gw+~2Bl4JlUzBTT-5cVl0{U@UDrm9*>T5bh%Ui!b@xO>A0&bPX2n5{ z)0kVOO^y6>EG-j>ZMTR&%t&*6g+!TmT9lbwX>1T=)ks9AZ{Yn2G4QM!x z`E%*N8YmZr-E$8v^wCL%h?iZ(jZ{A>lLhl_h)Qtl5j%E5xzU^Z}l?0Sj zbwy6tMB<~zQ~4-ZDDwv5b_g!OK};=sx(6V`j!EWTbazw)rv(LnHL9tYpJ4V2uYL87 zM!3_YJ5u>87AJg#B|S|`n%Og1W+Gm(ITSzhn}dk_JoIL7;`Dn~gg5EaaCg{hwY*~Y z8+$S#v+@7U@elWK)H1(KDnXNI7?L?t=qT7P4&~3hJ(Bf^*cZvVL-a(la>SO1@tRl} z5vLFZkhM*WjllgrhM!RW%qPT%VzDG59=BbTqsyVJVNvk zux`;Art8)dBdFaNMn3LEpHVNs&yx_sYM7R#^)eVn&-D%8coR_M zAuA&EOGE5jjMm&p+8hjoL)Q~(_l42`K3d{<%7&3t*S zGBVF)+VJu4$TCfGUoRF^5BLh-M+`gw)EL=3o}^ zgbkKjWFSr@V`;q8JH^O(nCkr4v229u5KW6h^)QGhKmy>H6lMnuLC~YlH~Xi^fP97^ z(E6$a)jZUenpA?HJigR~bJ_+NIH|+cl&kU`no%apdf6=%$_{jwP_U@>rn!Ml*>*sb zQm{DkNh?@Trf?|5Nvcaq$C05YX;g5?_ztpT(3Imlh!jTix{j~$`+a_QMZimvug6yr zJ6G)4Yq6F9T>PdD@N-=A}=bwN2!494=8~^Q*r}OG);kx!vP4* z+p$G*>MFL{JQ9sxpupwhV^Bvc{okjye zLY{^;x&+UHozQx=n*!UQSpYEpc6;oOKH~{$a!&J4y1bsAAkD(4SKUvb-$?H;8VS&( z*v`GECR0AT3HaSd^)mINn@s!YCNn;|$*lAyV`*N>(!XfVM>i=?Z!*}t%>U>n&W~=w z*1W4PfR{uH5^szHv__NYi~Q+dR6#F-c*9G3 zS$Wsf*%ZpVn?iYaH`CcfI`e9AGkvndBvnGlwBO5TG!akojo53YVgupe#*8M^%hI8q z{W@u??+)@r(@;+w<{PxMK&F#o37x?fds5WuUIvpssU2|Zq`2*)+s&kQpdj|A4%VLy zaH$e5y#vU3QZS{FLN#R}V%CmAIkrIbYcFe{F|!a`O=(aCkco}vYp`9@@<6~rr&34X z9AHbkF~!X427rL&GF-{LN_$a^(fVWfjMnW4R?7hKu)k8BweS?vi+E_`wU?6Z{WQ{g zJyIHdQAQJe*S5hQI8N|4oS+WuA7?Zr1+aj;^)w59Q3Er?QUghUvq}1E)l)~$BJ3JT zodl;@1gA)LI4bJlN;QzgmkoCkyt-uMGUn1_K>MTOX3BSAo5@IoV;RS^#(~IXqtyh{ zMZ^~Vu+l_}lC37^7_B9!=t(lE+5OSHK=pdWdSWoJpp_X*Q&MIxs1BAkT2r1yJG`8} zXgGaQ7UiH)CM$hb(1XwVB;A#9X*4A_(3F%%q4*o-C+)0NdYeh@f;2A%%}X|Y>Qj0F z^yul#OY^cpEy`nhKxDsxGO4}|JA=ri$_aF7YkfF7H@vpw z6ZlCU6iaGraDxbZC5>US{08ev%#x+8jZ{;BMEH^*+iW-}#7<+CR(iJJEQV}oc@dL) zHoe&k?=@YLuQbn2u!cm`3U@V<$IVg|k#3ffe+3dI1aCIzgk>@tvc-RJ#AK_FEpe8{ z-`rRhl<93yB#{5UUV9)Lg7qQx)ToFR@@FPD|JGc}0dHlLsEAb4()*LoAA0#1V&PUa zA!Xd$UE8)2J_Afh`Qp0Z5|hN*`xDVU!DEf}((7q?Jex4+s^k|o1dm~M@IX`J5)-*x z$U!0B1&PTfRY_Pu10mtBHH;|;v4YD%brbFU4`YQGS7^+PmLyy}}G*&D^r#W{z#JCa>3-Vpg=ac3lZtaw?BtQ2h|K{rOSD#b35+btGG zjI(6MdRBBqjBSDwQfkR}bThf}%Om2;;--k$XeIE4TCSfkxqDrwXovtxcSm5d`gFwj zzE~eIc8V1dBP{A82-3SXBHj_s2=Hl|0MNquwDS8MmmYq_s1SJoz3RY{ZCfsl4vQ}` zP}y<#Mu!;HEw+nMg<@+Y>p#RZeAo6x8AYP7l0yKdG+rA2E2Bq@ao|;j-B$D-LiLSB zkzvmot&yDnFr1;zt?+ZRBTp^5MWpD*C5fU(T&hF99-_tH73q;8kj;qk#SMV_mtzwBBc>)PX6 zA1!FF2$tigfComl3YQy!h_U>A{&lg273O+}$L;nz{0NGO)$c#C*%t`FQRjoD&j)8t zz>62S{P5_Ru~UVf4sQhl8BM&#Jy5XE6ZE)!E(gZrhF0hBAe_->mb*P}FI;Cxf^e7) zr6^JAe0}5Xq4JhS74tlOFwf1r(Xd(#;=8xuXB_>Rq-o-zkxxY1d=YI3?dQ{__ajn!6Vu7H{>7Hn9PZ!!keiE7zRFA;fcV*>Xk$D zkVi9;FGii;v-G)L+yLS#XAD?VuPrjN>H?|tn#yy;FzA&P7n~6$oN>3m6jfM=QX@6g z&d5`wv%0o9To-IFuWGD^(pz2L(AZL5+fZ&{0aHR&&9AV`f2r)z+U~!0*mW9g6VMb2 z{hbjJJ5$Z>WD=BV%gRDf#vi@Nv;3ao?gwgQ2$YE1i9*GER~dsOWymn*4Q3SQkl)0K z{|v2YX@o6^Lw;kAzWw4_7qWgl(fobBb%eeiAfeCgak&DXfxO~p*AqIxm+A7e(ZJ^= zyIySL#DkjxK97fu+p4GpFHaM!2(wh_k=nl?hYZjg98ILK4d`ZDJFJtz4CElZFxXEu z6oyDcFk=YJmh}ffoM;I$4BzJKCrpJRu!CE{vGKQNy>twL2&tC{Lr4v*ANZGW=m{2P zGEgM`mifcr)lr0#S9#zBv;SX16PiXD9CD#+!V6pAKC1A=c2010!IzYZCrEj7u3@&3 zfhVy?f94JPuf&t;rrSDaWW@iNXwv@5(h*EGZ8WJqELVWk1uoyi zxo2!2R#;M^Sw-Tpcg}3jxJ<{Ag+nru#GbVWcm4m5k;ETA`0xK?jD!*7FN}ojo7avZ zvhknDNZMZsOVuU~L;k`@vcuxflD8O5{>K=JWs$HvbVT9Cvb?1oC!~iI#vbiUjUelP zt&f~@uUK*3R96MIuTGK68Uz__3zVh-FGio3dR27+8US(uQ{@{L`JoVK6DP_2R3w9n z0Thxz!-wU4g+r`R3{TA)KogQ>dSpUCrYtk9@o+s;U$Rj|$4-Cw7<~5&&1m!4md6qw z9z4a?iZZ%^Gy*HUmBRzHhfW4(+Xf88xsc6?ov{=JGmb~c;y6XYSm8Dlf4XI3u_e?i z`5O=7$dJD?+_5^TMwLgD&h!8ss@hBSPO*|mg1fV6IDzZO}>LiT# zNqMDeGK+>QeO`1nSd%#)-K6}Zo6M(5IL`j>e^qR?+*4L64(8<~V$|ipyTwGh^s@FG z+lA6K)U)(pvGz=s?Oe~yPBD+H=Q8a<+Dc(yM?IdSA{*vjyolC=7m6gL95UU{AkXr`ifI54S4AaA@9aaJEF8zcuQNOG~fQ-h&$Y@MfaWRl)6&DYYseKrk z+DBe^2Lq3`0qi&om7d7;d}??XE&)wTOJGBrhmZ#&R!s4vt10dxXA~-zAjH(H4vT_l z(NQsuJpTy_*Sv|oh3Do*8YAL;03|DkU zv%VX4Eq)@O;-?C#1Kvuy%Lg%wsveNWbn8EOM6zaDa9?tBn8LmmnjH2ON`A4kuD8T& zX${wfQUXEh8{>O71ou%C7p(jZRUs=|qAA4jAd1yeyY&Z`N+UntB=b>IC>#p5NQ--^ z^!5u->S)NK3zH@4yRcDVJ5iOx+j%G8X;q^;a;JxKNZ1qa^9Xb?@ci&aV z@lMld@+T_udnv_rnj*Uf=^R;YRBVsU`T^M1@9S#J-vL6xtEIT^c`AvzE|PT$R`n6x z;*(-{7&cIdBIP1yHLB&n!&OMZtK%6Es^;D^A{a4FBVC^kwvJu8@f)I9c1qTV9mAtWnFJX~K zs-F4!uIMQ9ts`2X&?b2{=&?v(+2h>~x6|jVa3V18;EGszyKl3r!s+qF@+LgHA%KuC zC-U}T+4g%8*ourW80tMPcWmw?=O$$JyIf9~=>xGp+<`PPU%=xGAWqhd&0T&x$Vo5* z1z#~Y$LhY)*9A*E(qUjT_c~k%az&ycf@m8ioP^}!L~Ve8#{(;2xyu_X|H{b@Pp0`? zRp9%m2tZ9)Nw&Of{jto+;}uKzC6UN{B9R7BnSvS90WKLu4ms|R$dAljrTKMb#*lsW z{kwX3;^Bs5V{>Cu{0r+)SNmwuE4>s3m6A@Cq5E?n7?G|FDHH4vhl=qVG!9HfaYM=s zqjB@)N4yumcb}CZr9!}@cj)R;rp^RpQ#Rrf?U2olZT@vwbr1X>6yDYK3+LuoeW9yM z1%aKTs_I9`yU~`suh6+JP@&_x+MB}=P8|;YOI>JjOQ?ED2=FsdKIwQ$+7D`tpYEkQ zC?(@bd7`SOt`_-bvtHnIpf+MvElZJrliYl_c|1CDdBu9a(`wruEtq^_y@R^ryBKeU2X|Mh zPl*=(Ds)_Va^UHx87dkT%!xz{4nl*R@dyN+vv$2XnNEUu4u-%y%77#eKFa}qioA6M zqLJ*F%d(@c31dY@qAs=;Q8)*Lp2#J>n^}fNvHNif`Z>SGij<(&Lg<*I0Ua z0}?4)u%=;RCBr1cIC0Irp|(t}i6H2_X|>1uOGkhA@RGX5Dw7ru1r=s547O3kBLTW3 z{ff$3fNmF{Mmdu_E6iB|zoh-j#UXVnrs)uiENEA$+4($3mEtGkA8mi8rGTm8DWkcu zik)N})cJr?m%BRRX!WeB2J;dBaQ3S~Du(7qtR#%S*6M1KF)W9Xr0B?5LpEKgExFT5x&B^;%Fan&A4_E? zV9QMUGQl{9bJAB-Anw+zBmlOh)@L;AlAs1j7Wo6p;a5n%S(yan@Z%6LqOxtVLI5C8f7(DV@qEogmS39E+X` zEp#@~a_b!^eaPw)H6Gvp5_GoBYd43)7ydN!6ra1qOaNJ|0I94`L6)f14L z1Zqxse@f?d4f5_4I&F-fpxOLWr|Lo_`&F6gVFZI|H6MSz^ygCdm#O|lb;ftldcMG; zH>U%=h$10c$($CyUwku zB3W}0hm&Uth}$Q{T9Tm4DU2o*K~{Z`eAp;r?nsee_fgOee#6u# zAr>(=e-w>eVnaEyWpxeZ$d;3=0^vU`hC5J;7Rs_NjD>u(?v$jL&4`b)DsE6w%=<<5 zY8`1qnc$GBm5{xiS&(8epQI{ZGNppD)eZ|flzjCxUtTMl;1#lkZnrOXs{Pv=Vn>Ug z+u}vch-VYyVtZVQ=VzcGczSB~oE=!SO zAkP3PDV+>wpm?aqOnEjrtcA0YR}%v*aga%(mh&?RpE&HBO^qnpP9fzfy0l7_ zD0?Y*{GsKnGL<#3Mp^r54F37CGnBRSHmx#>2Acb9#veR3r&L!6YN4 zV3kra26fR>DF@nNVjWa}vmV>Zy!jm(#uS2LjooA^Nzp$hQ{WsF2_Tq~!zxJ2hPZ`^ zRPt2`IRkWhDYW_3Vl?e3GKI>rO9Z3Jb5pr{RYrOVUn-2M<;$yM6l*LTS!M^{G~3b_ z1TS9zdZZ6=Srio}qrM!mjeC3@{(#ft1y1+_u^&%#RB>4wyZl11xh2$8-dwvp6fJ0T ztdTm%lIr-gzcH8A(@nXd&^N=2ACu`U%^?&&2_Jx|WRXmCqH#M1#UWr0#CdE(VYx>v zz%5tMSFUkLXOU~cM*}!(46F*cQR(R+LbIvV%Pc~P0pv9Au&yi{Gt9gQ$2_W4Y9`-ha~aj8 zER&aZg)3=!Q;x85zI%0qXH83nk~T8NSxl7j5i5KH`Gr2@U;o0n!D&)pDC|$(7@|Hq zoS*=%fY;?BYm!yXit9|u-Q+gky(AcJZLX<{JFH5R@EL*G50+P|aZusgWr8%Tq`9K> zHV&k!CK|iRRWd0ZBCk&YeE=g0t;5@y3WDtSq+HXl?|l9O&y@ngr!aPqpL8hXDyOJp z$i)CSdK)q$Y#B0vk)y_=W6XceR|&Ds_1!cTM1)6(5kw`_;ihTdwS7w9*%0oIJ6`9Y8Fu=|Pnl zkJsl8AOy?Tp|Tgbd=;c1%WNOt9F|g0afVh+j_|R6qE=0WvW)+bRy|B<)gzTw4HFKU zXxIX2WDm(bJ@YEH4!qFv8__bg%?PY0GjubT&o`0^q1O z@fmrgk>`p(#ARhPxBg9^Q9MNvfl)>~(SxrHQZ;HhcEKyMx#>?%bLanUgpnT>$;d{K~Z8nqBH_$X%B ztLvfKCaG|TQtnh5C3r0HVYuXgO2NtCs3h^0naOeMU)#s9$4o)(BunO_xE%1iOxv=}?^2(=Mj=fqNmRw7ShGa3(eZ8| zygyOBB5l|K%NEk;qouQ#DHw6Xtn11G9Sl~?8!54?v9_TlT-SPq$^`jc0uMa1*bDRr zPqN^J{XAc#n%2#nqQs_Q4L{e+5vdRdHoq|~Bev3vfC6_|;XumM2mZD#MPy=fDU`@0 zsh!$eM@mr2R(%71s*<22O0jd|BP-YOyd=lWeoGR@sPAXbZi+qnWyc181zD(Jx%PTJ zKGXrlg(LQd{m-sNDvV{WPAk#9xE4Evu8w&5c6HZM(OyWJjn0%9(uZ z+4o)#mPjwSY(nQ|Npn?WSauxZQ~Xj>8~-=-jO06 z@E}{Kns@F+)tCB4xt|1mRdN%y5-xz!NTm;s#GQwJ^h9&02~Kq?L`;A=DFqv~6(wB* z)ObnuNiH773KMMB-}Dky9Yue}TzT{B#NW8y!YlYo1T7qQ*7?!bOU$$gsq`lXSwv-uC$kZu#KE1A!j8b@S?OIgh|R()SxqvB4jYn zhuL~D1a0WCqqkE<(`{VQRO;_a*Ita@Dd#tra(+jtDsN?Ert4K^x_Sb$52;|>1Ju*~ z420--Y(BYA2DElh?d0xQM6wryWTzHLjTB?IG=fYSn#Ot5r1lR`N$Q78j0LG=WNzn8 zt8n8(y72%3`l=K_hXaX5Tg0QKn=9DlfojrHO5wJ;6RUUBz1v1b|8Dvp`4;^d!~msf zf#z^G&mq|nZ)F}yP_RUwF&9)u2HGWTIDc*reb!A3ON7ofBuv6N#xbtIU`~5xj{_HO zCAY(e%<-(i17SQsm0zHTG47LMxTo^Qf5nq@$Pfex_?dE5wCLceBO#6zlC_ILp5sSt zZ!NZiZu}gV#79t2Yd9Q2o-ZdkGo^^1MZxXl&N)9iM&U=4AS^4)-AFIhBtvpa6>^iI zEG`nct6^==%@fmw(JiizVCu$^Z4m7$Qxt*1bXy}V5rB1$7rF#7z!KW*8nAO{1lm3? ztqF0v4%{-4ZK7wJN_B|r)wrb1x9$yAV$+Lk5Y0uk=9qPtru~OlC$hWQO~6^Xq6?Z; zikrYMa!S$I-YPF(m7}wYdfzPQh(Et$%&#v^I&DS%DA{ob-yMSBWklxi;>F!|C7#&a zcF!7cWv3ejSH0L*!-G6mkBO9`qZ3_QP^ue2ISy>R5xb||TubIo2eR-26=uNUu87So z^mMsBeh8hEjvCG1?^?^{dsvOKYLilg8u85dQOmKsfz=x-DVn3{lBS)c?X1j5QH?^B zK?Go*KmlZB=luL5u+kx=bQ&QB)C*LYQ{-_K$(ION3ml@hr!hw-iG0SA%+&7+TYPP%$Pr^ii;sABaV69hzd9rir8~eD@KuR2= z7569$YqciFzWc_L6eEd9O0aUZrKJ?lm0$w90VH50n1DW*5UlO}(hK+#;(tH=-WA>V zIY1!kQ1+{N5u*-!=H+yYndIl2Mkqf;WS5HKh(Jh;$f_j$^-)+uk)N+=kPNF*W-n>0 zQpmr8UZH)2tWqe&aj>vFZMWblj&C^|vc>aXxYsxkZiNhaB*Dk(C;8U+y>4X6Z~WQG z^+0yy#Uo_Sfr`(lROtsDh<$7MiybK1?=fR}_x#g#TO^N?0h%i^s4X+*Dl}&=pR{@s za@S`d_s6LmjIjDn?1ygKDKgW<3Atr`H)5cTih&l<4XF>NN-Vhxk+A0xx6$1q5=TCx zkxUa1!UgRjoTV_g)WRM}9fYN9uFdR4Vbs#W6j}SXOk=J^pJ2>gsx?<~FQ9TxT677a z{ZcicS#m(Im`FFErM?1In72EM2qkePm0LQK6=i{mV|sB#2TXPrCSotw*;5{rL#|;Xlw;8#!uXN<{8snZ8o;HAhsa!T2Vs}ybZMt(fs$!$Ce%bRK1xSO^`poU!XDEkr2sld{m0tPE12 zLO+P2bKO8bVj`@aDJ++6Yq*`^UKSOgagNtQ44qjK4w&y0?`*mtBE37Lj*U^YO55Qt zLo?Iw5t+u$ z%tIh8t+Hl#GZYXF=io@v9Y<3WUEfqUQN`9EBHN;&#X)S@6kwvf@Bktd_DkJV8R<$0 z&x8b?2OZy5%roeOf+>{Gs>JRbqwt5m$hNQI?EKf~n4iHT(HnDL{3V0zicg|)WCiy9p$m*B-JJN{PvYzCDpOBPy^PrQ5H-4Iu}8(YKpc= z%m^YICYD861x_-OOz{Ygd(nX@u>a#5mC`nYKl$3giKirf)ZQ?aDyF)^X~|B zpwf}k9sB(rM=(~CB9uvi8a7fDKw``vOelj764^{HfLQu=4%b=~sLYBx=`&E>5Pt~l zEEg1A@^AVN-7VrL2;nn}0^v8~0W-Zakp0_^A>}@jzwCM@Qm-;**o1P^FChyWw>c^S zYxM5PgJoh!Wd^;Z2Y(qev~gyr{-zJvp9)J!K_jKak$kDkqBG-FrXS-rMr4vrUjlP5 zW-7e)u%v1Ix!RY~v+D;N8Q(Cc8&#$J%``?Cqe>JbMImS26W#e)Dc6qce`&JV%3H%m zU)m{PC`7TQ^qbNKXFLJ}qHNIyx$}x9$h=f77NdntdZ-kx4&sxVs!^-CWqJ@F3|od2 z#93e`xmRk`1ZL>TetyUs`epxPuejpfX~4z!@NwP^&^4x|1H(EJ*$^2RKm}HiVi|Ts zm$H7n)@3+6kUOA7h9$wCA9dC^$Y|LooAT%5jFv_*i8U%lJ{x|G@#>8r3l{vc9;KI0 z-k|y6daNA&D7&I?F3<~Prsz%q&IaTzSo_GfGDUS?KN!v_6n9TybIx~cqf!bfaDlTk;(&SoPU^JV7xY*cpa6rwH&=2uC7=#bJtrGe98 zFDR1`2q~clt|+|*n~}7BP*1j|N^Zb(X(3vZR#>WpqE@3t-}qTj?#Y}U#ELX5x(nkq z7;Novt3De^r&7ob*Yig2z4f&%%S^Hv?She;ie91xzZyaZ1-K(831*PDj#+V@l>CYy zSZEYYc3Lf)qguo4Qfv*&(D;^MZ51g$CO$WHx3d)Wckr@ph8f9;8#jwFHO8b!&S{i! z9KFpLCr0NX8h+Gju`QB)Qv7Em`y1k2ajsOXr=-?ZVx&W~N3y<)4ND5bq9u~`xY#d7 z)QH=tMCIN{)^zc?h;dY`BwN*ulroD=E5AyGDIr3$5=Lbx-i~CwBMykXHrg{SY+1&r zAjLgmWQ_<%vK(TQ$O3KWq`|K3uyIC=92i9Duw`{)bR=gZRpXp1E=RIYBjpv9H)m7P zIV5f)qn5I-DkH|P#1`u@83|}ii{$j7CS`slx*C73rt;FP$>PUW6S;w=F(#68AF5c6 za-fM7UT8=)!VVlWq$pr0Rk|wH!O-S*MMt*1ur_vX zva>7pt+s<5F64fB-BkQ8wtK>fO)$&3AO^Pi*JHz%zD=>x8;-BT-ef2&iJfI=e{Ad~ z17iWocpyk^pkSi8&f%bqvVVVvXARZW_r(f+=3C=M*fN^+dnwn3M&)g?!ziW|)3jE>66E_qcmI zw%m8``nC71-*oXc-@6~0pXx9>Hm>hlf6pIpas4WY$L`vC-`0CO=0$6U|J|elxoaC? z5n+v8#GiIhLWoqxwq%fF#nKEpmWs-Z(#0()gdA2dRPCofPzI3%Nq-8Z2n(UfZ40yF z>)=87gWu+7{>C@#yK^#xS$aa&$t0wv0@x{4FB2x-)@`19gN|@@mlyaDOmIYxJ zdbwccW$PzkmS)AoEu`vC7SF>rqosPww*F5R&tc^CBumc1Aj!aCE&nh-AggM#%?Vjx z7Kd42rf;bqOpH_lbGq0qnn|GSC*SLXL-n`vs{N%4;Ico<4O;?E0lu3#zOJkGCvCI( zD`|WQ-p6>T@ogWnKP@b$&Yvx|>P1NxR>{J0#A3UTkSRy&D)!kmK1yqvnfjq~@3cBj ze&3c1cD&<*hleX|+{KI-92lM&9EGHL0}l!bBZ>((Op!AASy;T zK9$__tKbu6$+BQm1L8|Q5gqrdGka?r%zHLn+UbbBeDP+-dq4l8C;V6&H|eA#AqcGmEhh|}FlUS+=+o`?9WVR=X@%PGc0Wvv!tMHaeLym7C{ zD;3gK##TyVi?vkx*^Y0w3<~uTm_htB7Vs#`8ZBeq71O*~40pgolmj-VOwx_=398pX znJ!?yIBZ4*KNB4`qcUk1^}$TevfwHh)iVk2bki#MWSN{R{C?Bx^Hz8&c)Ku^9;O|} z;Pg4T9^3JFJFty2a`kC@XC%`516+x<0{cpuvGV;du8*Di3Mw8Wp352g!wUE2*zQ6{ z5Se4dF8sXPGj?&|m_u+Iu4r7rCRN^rY+!H65B3ME%z6|NsSBA%ou4I>==-k=QwadG z4XOC^%>}cOjo%g>IrB%@vS}eg!&L4}$j+xf(QY?vZ?|K|tcEfJhZ<5X@#V|yhB&i= z%rY9PFkK|$H1#I8PCcdfM{^HpmDA{~sW1rF)@CB71?*NODtv>!t1?v(nSz)b+7fak zH9>(YsU?w$XA^YYSSuwY%ySC#jH|cfO#VTdq-Mxqkl43?;)zt$2mzLH&O6}^I>8|g zbyf`;Hq=G0E4sZ00rMp$1$i__i?EAp@@!e?2wUMu`2G$($bpALTHzq3nU+8q8TM7O zxIq_CZcq;D&X0%%M4@n~&H0A$rApH;A~UcIc;qtX_s$R7PuNIZE)4XnGWlm%9eD0` zUwj8{HtP~-cB!NjNJxi5GwEGQL$e_r3OqxJoyuv0i9N3alS}lHdR^$Ez1y0ZihOPsV0&uFLgWlGejWq_svSUa4M3MVW2tXY2 zHTzSYB6r$qtSna!`E#`B9~ygFXu|<6M}%q-i)-UlDuPNBafR%RoJ6wBT6CP05UDRH zN0ZbSRNRpTes=xr)U7OUtIw*u_`SceDrqlTJf$N0;`i~OMpzP>C?35<}=FRyE$V< zXvo1oW5}+n57`j)fF_89VL~<7Ma&F#fYrQAjrpMSu$i z3!_#Vq~&RZ9Vnkrk0bU_*8nML-Qdw*>q7DczN7En8lq5S*!Nm_ojPD|LZ+NMg6EUhqE#)F2 z`54Su7>cpjJJqfy$q*T?klK_0=#3!WX@bCl>o~%#5u*hr5u-DOzqONf1>p?lGNrDk5B342GL~PAY-a=q z&eLZOd6>?5^t*#^#PW*gp&cFcn>?rmk^*EzJXL{eLMp4-sH*rM9?A+ZScuWJdb9Kv z7yF5l?I$rzZ*d`i;~Vl1Xy2c+#f3%duuF_qDHRL-C4|QA7d7ciZ!BX2(;K5K%p+Em z;72zevgdvpOaC?YJXqr)d;XAm{&2{iH4P$i{ooX$*%Uhd&=jI9Q*ie1Byegeukfd; zb`Nt6Q2uCj<9_PkA&xz#XCLGaCS2J8w|juvZKEdJx$z+FK27~SnEnp_?S6Xpuhl!Y z4Km1W^z8i^gQVFw&wuDUxGTGgE0&Q|dkW!5-7S!F=SY-#B16Cb@IOBNlOK^cdIV9| zOvCxPigoKNiE7|5S($ITl8oA-RkEi1P3Ss>i}y7`SX!7G@inN%Zf$A8`!z5rX4(tc ztD!M*;vN~;#WJ)cu^B4&ARCfEV|IugRH+5D_mtQWF}^HXBcQ2O5pkAM&kv?;S3vU&9x9do&9U~ao(OYFymu8!ELw_ofUC@)6Il^_4? z*)6fTUpBiC*j0h;Pf%onGEq7}8_hLHFn3|=A6JDBVb%vpuJd`Z^^j*BjJwue4xF80 zClBq9duRUJKCb3P1Fg)E@+c5<>tIqI*-GIjN0c?$MTgTLS%90QyeVwzBx@n6_u>yj zsA=Zj@759iwlSnv*la$SBV6&2Q7AP6ye)ZeU zniA+UHg%bc@T~rgBoRWs2f60&VC8NGJj~HG_fCyJPVXN)Oyk}@W1IJtgw@fh>-A73al#`@WOrA37B=mZaL3ZR(fpX+rG72#@&e! zZr{N56Pb{}jZ<3uLWdW|Jxd)i^UBzO**_!nhBLxdIjHASS+(Nu2o#%{TT3ZSKki}iPRJj z9y>ePvlcs}!H($m_?(Cabfs3FNZTR}IbOhX)Ti>Ng^I7MMlnzoCMd2S(zH$RrTvZL z6(ST6m$0`DAhr)+WULuMX24vI5}{|M$wO-?vT_-j2b6Ql$h*6K!JRyNY-ons@7_hj zlhD6o+k2GTO5j7gD>My@}1Q4m3bKqB7nxWiFhP8 zRwg@XPv+I#JQ?31yRzf`rEr$EB(MJOP;VyN$O8O=2OL>C`Ia5HHRl_e=PjEsVheKw93Xx=4 zu#`H*Zq*hsb&~K>inT={L4GaBt?F*2{(>uQa%=SidYm*m7lEo|36zZN)Pc`bKcYi> zTGe}2UF#D>c;{U~co85a)8@v&_(N%PQ;CuRd|?@*1Ul$EITR+9lCo2D0atX`5*7nW zO}c3e&RN=HfV{D3rm*|1t@P4L?QjN9bX;fq0m|o*G&b2+56%_$|^HLf9p5(AhNYRMa=H^6L1-}LBKcIth_n}G~}qSCRuBm&C8V@+Wkl!NqFo8BM0o3E)qn_TOm-Im_f%xfJQO^NhPE15yuLL{YP z82%7-0;L4G%pVH^Dh#ahE%c`%Tdp@8*(1#HQjxPg*SZwf1;>EbnZs}qeUI^PG*WaEZfLJB0vY3|48!ea0XD#{OM9A{1O`8 zq9`)5bnP3|SZZP~DL8JUknOS8Q;;SnmJ8m=f188pH=*{T3lDCdw179kq zgo1v&sZe~&`>!8Eh;vgYS+x4h3f?nFhFsMIZx8kN9Xj1h^_I9g65RITDhi|ir=V4} zX@Si0f_3>=<1wzmoka+8no03nIo$FYkQGh_!Yl+bW`PzwXmyM9#8_B)VH4?cm^-PqHU zQ92u2)4+HOX+W84$;={WnznF~?kyTmYPC>b4GFbWF&kt$C7+bQ`Fj4N1zoCAbAjx4 z59@$M0!gX2aRQD>V6O}2z(R2U=ZW2%Bj*N$Y~-qNq!2-wEE&oZBm_(X1WeiIU;Mue zr}Y~Q#$faC+9*>N)P2*PUFc5-Kv*eMr5H z7YRUY6*rr@0-FlO=B;pdz*6t_I~|~FI+c^7+GO}LJ!d1247xaeRY5?Dd0|CV4lway zQx3_0`UYh#Ms#HOoeq#`w2&p!es2-+T$U7KjqnJ%QF)j<8mBk6KQ3k^V~ z-%x$rCkGk4OrcRjKK8MmAna@XSWl4X{nWKSktWq{Lh)8`P&naTjB2tWrX&eyh-=W}Q$}Oe>_LSx$H=sMrtdh%7MMs-I?X{n5 z4TBR}1+_^*KF0gfF;lE+Y;9%$QB_htO`Lx3;FEUwNJ;*f z{R}EH%8(FzuMQ`H=n7_PZ8=czTyfko(c89S&FV)XwGAw#{!OSW`b*NY^Y){$;^fwZBe=gF)PS`Vcq?- zXMJq${)){My4*34-{xEs+r7eE7t8;JV?*o@%PTfOoJB3HhKVnB1x!Rkqt4k6B z?SP!?8n}MNi(S#{C%85sR2qStQmkEQ>W$0DfL9etyk^<&{&6Uw_US={+K=x&!3Id! zzmzz+3|ZmJj6b9){`YuKh-^qsK?3kIN@>kxNi={qYMfafXE2sT?If#7r)Zf)yQp2J zYlEoaF!0E0VP{s7EI7h(%@IfmZYOp&fi2dl?ikCWc|whu;}4(V_(Ph~wSxuPu`0ph zl=a8%g(S1V(pq$XTdvw)N?HqXlM_RwwdnqOhU`yEiEL=nA3fMosL%g*y*%kpWG>W4 zKashNgFQj6G|lXnDgLvZnEf!4Q=cD78_M7zuKKA=OosMu75zImAU0!HwW$gHe+3nFFsZhvWM)eZ=f2M;8dPJg{839-MI;}Vm7 zrJ=(}Tp@}vv$_X4rfueh(sJ`Dx%;VYAp;8-#QHi&o+uTnI3@}L0<{qX;uB(cK)52t zogm6tWQ;YorAXPbCa{vSWl*wGm_V{yL@$|EQOV52%w(@dqDxkr#V-b_pER8Ysp}`n z{#0#@X1>ch8l|$#;Y*eLvXD53wA{v<&K37x{N5en>yfNG#pk)5(%YWq%QTZkhSsJn zc%-$V)URFHhgG&%-Q;g$e^8`m#?Gy%SWg1H(+e}MXCQBaqa!wVg=32k8zrIelHc#E z@M9CC*rSuZYpDL26FVtkkEQaqXE(DQ*x_+_vE?YTIb+}YnIB$v)9dxZMCgq*APpu~ zf138Slv$I~35U|#mPy#I`BKF;C{;ntysDBQt%aluOjJsOJ6)jC8wP2OLN}JyLZTjC zg-w&R=u9{KL;)m)C%J#JCX^)iR}i6;)^hWY&_AbDEK&l2J>Bj2+t%uO?+bY1gCLRM^G{mOV~jQH~F$ z9fOK$)wzFG}IG|kQE7Fjh^18@&T2sqJvIg#$p5l) zEyO2I08ZQHi{u-wg>6~wng(n3@eTRs&lGS-T$w=% z^#}#gwWRr=Mg`1)5HJ3AyJ`ZHp2gCKY@*fj%qCg^CJy?$A^#BX%O)0g8>AAd@|#v@ zK~~;`(+qx&DfaqemOXOYh)sxLf@}+C%8ArIhyA@Go=Sd>vF*Ttd+61EM|L|33u>V`jpWTA| zNskMe{ZI#x)X%Y+a?6F-(Mcz}GUK?*f=rCS0v5Nit_Vd{b3 zCIcQ*A;~fgOsA^j1y-RayBcl=g6{ig3C~C%+1`+b`=r9W6Ncxo%43iKPxk-qI|-A?A609ueDQj#*jMK0MWHC#kC%*gWZO6KowOJO_s=vBp zO= + + + + + + + + NAME-PARTS #DECL ("VALUE" < +VECTOR STRING [REST STRING]> STRING "OPTIONAL" ANY) LSR-FLUSH LSR-INIT DTNORM +DTNOW GET-MFD UPPERCASE FIELD "" " " "DM" ["DEC" "NOV" "OCT" "SEP" "AUG" +"JUL" "JUN" "MAY" "APR" "MAR" "FEB" "JAN"] LIST [] T [ +" +Happy birthday to you! + +Happy birthday to you! + +Happy birthday, dear " ", + +Happy birthday to you! +"] "AI" "MC" "ML" "PRINT" ".MAIL.;MAIL" "FROM-PROGRAM:LSRHIL +FROM:" " +RCPT:(" ") +TEXT;-1 +" %]>> + .GLUE > + + +> + +> + +> + +> + + LIST>> STRING "OPTIONAL" ANY)] 498>> + + +"OPTIONAL" >)] 721>> + + "OPTIONAL" VECTOR)] 834>> + + diff --git a/bin/librm3/lsrtns.fbin b/bin/librm3/lsrtns.fbin new file mode 100644 index 00000000..7196df69 --- /dev/null +++ b/bin/librm3/lsrtns.fbin @@ -0,0 +1,76 @@ +' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +> + + LSR-INIT #DECL ("VALUE" ) % "READB" "INQUIR;LSR1 >" % + % % % % % T]>> + .GLUE > + + +> STRING "OPTIONAL" )] 298>> + + FIX)] 240>> + + > "OPTIONAL" )] 147>> + + > FIX "OPTIONAL" )] 114>> + +> + + diff --git a/bin/librm3/lsthck.nbin b/bin/librm3/lsthck.nbin new file mode 100644 index 0000000000000000000000000000000000000000..da04571d7beb971a480d7d223ef7f523d5a0491d GIT binary patch literal 2763 zcmbtWU2Kz87=BK_u3g!hwUZ4HB44zCTB#_x*VI+~-g0n%7!z^Y|}6zLFM+1Z~nC0q}BkER5lKOJz+H5FL95V*Nl6 zo@k#FIeaGgOk;ADE*!|JKoI6>k&{T=vTKP%bcYkxo<2ZGgBhao9_eE90Www>4tdfY#_K2zv18iFif*F~h#eh1S<%&yO(`L+MUmYGCT*mq&U8^r zS7ylN+;QfBMYlP~Jjgun@}j?n@d8)o*`x<-AZ6LE&gNN(*tFpS9oo=l>AGDbu8fR- zO4TakLd8A^<8cmw;^442j;=u~U1ePa3%oA2yo!Gnz_;^X$uM&k!<4)4^JeI28EQyC4#OKP#V zzBTn~|F^@FFCA@sZF-U45ttsQW@iieyey6X@%pW+A!Nf1Q!Va>W+R5EhK0HCY+L4( zq1ArmLM#R9d-_*zm^l(e6%0*4{E3e*J_q9g^DWJRz3Yt}wn+)5;&585$wx8?nYJcSb~HV(CC)>C548EBF-XUbh>ISX5< zN!eSk(v&IpaLS%o*j^7P@>n%sXJ6`BO)QZ?>|f^sAqSr4v{SOBfo54M3>MVxJiL}0 z*PQqvDJPE583C~-O_JoS1iHFmvBK}H9cjy%Qe$vYNR>Uq5#cY=?54Kt&D{Vzs;N`)d$qs#7JvoUYWyJu1dotBjrdJ zZhtn2QYR&|)Jf2lTe0lXG)weUOJAV1tzDMHkL~%|9nC)PKGESVmcHgddvYmm^|v>- zwzz%8a!YHQY;^kqUg`Gxea-RE9^Yu4bhqq`ItYc>NRsPVBOPn>g0-gB2d)G zYP_vQdpp!^gNq2#Sn*K)p#ezv6dAvC!FvCJd%F-&q(aaGjV|;nat?yFjZRJM4~*)# zl6(;s>!81!=tvlvdVZ?92Z33T7@GSR!Dob}VU(m{Aia}@-oKvVvRb6EcZ6$XQ%C9I zNqP)Sx~(dakRD2a;<9YI(9+X8BEdWt8DkqJRp+Y0Ao9sMZ(V{vpc-0kd2RK5DmGqJ zY1_P=-nPKJcTrV0`7R!&hj6!~k2PqNsZgnhh7(LF=68|nRumyO=rwfAsT*m`tsA{; neRJxz970l6-FvJ2iGm19z@JLHx23`FuHWX4U+ + + + + + + + + >> + + FC #DECL ("VALUE" STRING STRING) SDMPUTVARC CL GROUP-LOAD SDMGETYPE SDMPUT SDMDLI SDMGET +SDMDCT SDMACT "READB" "PRINTB" % T " _LOCK_" " _BLOK_" "PRINTO" +"FILE LOCKED" "PRINT" TO SNM (STRING) "_UN LOCK_" " _" % +% " " % "CURRENTLY ACTIVATED" % #FALSE ("DATA BASE LOCKED") % % %< +RGLOC INDX-CHN T> % % % %< +RGLOC UPN2 T> % % % OUTCHAN " ACTIVATED" + % #FALSE ("NO DATA BASE ACTIVE") OBLIST (ANY) +"ROOT ENTRY NOT ONLY ENTRY" "ALSO PRESENT IN" "!- " "ROOT ENTRY" "IN PACKAGE" +"ALREADY PRESENT" INITIAL "ATOM, " ", GOES THROUGH INITIAL" PACKAGE RPACKAGE +ENTRY ENDPACKAGE DEFINE SETG LIST FLOAD #FALSE ("FLOAD ENCOUNTERED") UVECTOR +WORD VALUE BAD-FIRST-ARG-TO-DEFINE-OR-SETG!-ERRORS % +DATA-BASE-MUNGED!-ERRORS DEACTIVATION-NOT-ALLOWED NO-ACTIVE-DATA-BASE!-ERRORS +ERRET-NON-FALSE-TO-RETRY "READ" "DELETED" "OBJECT APPARENTLY NOT PRESENT" +ITEM-ALREADY-PRESENT!-ERRORS ERRET-NON-FALSE-TO-UPDATE!-ERRORS LUP-ADD-DATUM %< +RGLOC SDMPUTARC T> % "DATUM ADDED" RECYCLED-GROUP-NAME +LUP-ADD-PACK PACKAGE-ALREADY-PRESENT!-ERRORS L2 (LIST) +PACKAGE-NOT-PRESENT!-ERRORS LUP-HACK-ENTRY CH FILE-DOES-NOT-EXIST!-ERRORS +LUP-MOVE]>> + .GLUE > + + + ANY)] 100>> + + +CHANNEL)] 175>> + + >> + + >> + +> + +) +] 495>> + +)] 610>> + + ANY +STRING )] 828>> + + ATOM)] 1165>> + + +>> LIST)] 1256>> + + +ANY)] 1669>> + + STRUCTURED ANY)] +1788>> + +> + + >> + +> > > >>> + +> + + ANY)] 1986 +>> + +> + + STRING STRING "OPTIONAL" ANY ANY)] 2143>> + +> STRING "OPTIONAL" ANY ANY)] 2265>> + + LIST)] 2567>> + + STRING > )] 2640>> + + STRING >)] 2807>> + + STRING >)] 2827>> + +> + + LIST)] 2915>> + + LIST)] 3029>> + + diff --git a/bin/librm3/macros.fbin b/bin/librm3/macros.fbin new file mode 100644 index 00000000..f1262578 --- /dev/null +++ b/bin/librm3/macros.fbin @@ -0,0 +1,125 @@ +' + + + + + + DO #DECL ("VALUE" FORM +"QUOTE" LIST "ARGS" LIST) DO-FOR DO-GEN DO-WHILE DO-UNTIL DO-VALUE COND-BODY +MAKE-COND PRE-CODE (LIST) POST-CODE (]>) PRE-TEST +POST-TEST RETURNS "FOR" "GEN" "WHILE" "UNTIL" "VALUE" "EXTRA" "AUX" () + REPEAT]>)> + .GLUE > + + .GLUE GLUE ![336613648 23386507207 8351367537 +-3959144191 4296033340 17197633603 -16088362941 -16088366020 17448304640 +18253612304 16642 69696 -34359720944 9731843137 609468463 285475904 1140850696 +4116 17251238145 4294975488 72351748 17449357568 33554436 21474836480 0 524302 +262156!]>> + + + > + +\ + + DO-FOR #DECL ("VALUE" ANY "OPTIONAL" ANY ANY ANY "TUPLE" TUPLE) PRE-CODE G? LVAL L? COND +POST-CODE SET +]>> + .GLUE > + + + DO-GEN #DECL ("VALUE" ATOM "OPTIONAL" ANY ANY ANY "TUPLE" TUPLE) PRE-CODE POST-CODE SET]>> + .GLUE > + + + DO-WHILE #DECL ("VALUE" +LIST ANY "TUPLE" TUPLE) PRE-TEST NOT]>> + .GLUE > + + + DO-UNTIL #DECL ("VALUE" +LIST ANY "TUPLE" TUPLE) POST-TEST]>> + .GLUE > + + + DO-VALUE #DECL ("VALUE" +ANY "TUPLE" TUPLE) RETURNS TOO-MANY!-ERRORS "VALUE" DO]>> + .GLUE > + + + MAKE-COND #DECL ("VALUE" + ANY LIST LIST) COND-BODY COND]>> + .GLUE > + + + COND-BODY #DECL ("VALUE" +LIST LIST LIST) RETURN]>> + .GLUE > + + +\ + + CASE #DECL ("VALUE" +FORM "QUOTE" ANY "QUOTE" ANY "ARGS" LIST) DO-SEG GVAL BIND OB COND DEFAULT +TOO-MANY-DEFAULTS!-ERRORS CASE BAD-CLAUSE!-ERRORS .OB QUOTE +ILLEGAL-SEGMENT!-ERRORS]>)> + .GLUE > + + .GLUE GLUE ![336613648 4366550272 +30337470464 -4279238641 4568990724 17184179487 -4026248705 5440995344 5368778992 +1326080 1342640192 33554448400 17716809472 4096 340852736 0 0 786446 524300!]>> + + DO-SEG #DECL ("VALUE" FORM +ANY LIST) TYPE? PRIMTYPE? .OB OR]>> + .GLUE > + + +\ + + INC #DECL ("VALUE" +FORM "QUOTE" ANY "OPTIONAL" "QUOTE" ANY) SET + LVAL]>)> + .GLUE > + + .GLUE GLUE ![336613635 -16110321664 +268435456 524302 262156!]>> + + DEC #DECL ("VALUE" +FORM "QUOTE" ANY "OPTIONAL" "QUOTE" ANY) SET - LVAL]>)> + .GLUE > + + .GLUE GLUE ![336613635 -16110321664 +268435456 524302 262156!]>> + + CHOP #DECL ("VALUE" +FORM "QUOTE" ANY "OPTIONAL" "QUOTE" ANY) SET REST LVAL]>)> + .GLUE > + + .GLUE GLUE ![336613635 -16110321664 +268435456 524302 262156!]>> + + IF #DECL ("VALUE" FORM +"ARGS" ANY) COND]>)> + .GLUE > + + .GLUE GLUE ![4379120704 -4290772992 262159 13 +!]>> + + IF-NOT #DECL ( +"VALUE" FORM "QUOTE" ANY "ARGS" ANY) COND NOT]>)> + .GLUE > + + .GLUE GLUE ![336613636 17112760320 +1073741824 524302 262156!]>> + + PRIMTYPE? #DECL +("VALUE" ANY "QUOTE" ANY "ARGS" LIST) TOO-FEW-ARGUMENTS-SUPPLIED!-ERRORS +PRIMTYPE? ==? PRIMTYPE PROG OB #DECL ((OB) ATOM (VALUE) ) COND . +OB OR]>)> + .GLUE > + + .GLUE GLUE ![336613636 17313843196 +1048703 -16928210944 16716036 1140883392 4476 62914560 1073741824 524302 262156! +]>> + + diff --git a/bin/librm3/madman.fbin b/bin/librm3/madman.fbin new file mode 100644 index 00000000..50a6ef88 --- /dev/null +++ b/bin/librm3/madman.fbin @@ -0,0 +1,336 @@ +' + +"(c) Copyright 1978 Massachusetts Institute of Technology. All Rights Reserved." + + + + + + + + )> + + )> + +> + + ACOPY #DECL ("VALUE" ANY SPACE +ANY) LHPFIX APUT PRINTP DATWRITE READP DATREAD CORE-BLOCK GET-LOC PUT-LOC +MAP-PAGE AFIXCHOMP ILLEGAL-OBJECT!-ERRORS INTERNAL-ERROR!-ERRORS +MUNGED-TEMPLATE!-ERRORS TEMPLATE-LOSSAGE!-ERRORS CURSPACE % + ARG-WRONG-TYPE!-ERRORS OUT-OF-BOUNDS!-ERRORS NEGATIVE-ARGUMENT!-ERRORS +TYPES-DIFFER-IN-UNIFORM-VECTOR!-ERRORS NON-CHARACTER-INTO-STRING!-ERRORS +NON-STRUCTURED-ARG-TO-PUT!-ERRORS CANT-PUT-NON-CHARACTER-INTO-STRING!-ERRORS +TYPES-DIFFER-IN-UVECTOR!-ERRORS % +CURSPACE-NOT-GASSIGNED!-ERRORS CANT-LOCK-SPACE RELEASE-OUT-OF-SPACE % T #FALSE ("ILLEGAL-ARGUMENT") #FALSE ("CANT-FILL-REQUEST") % AERRFALSE OBJECT-POINTS-OUTSIDE-AREA!-ERRORS % +NEGATIVE-LENGTH-VECTOR!-ERRORS #FALSE ("NEGATIVE-LENGTH-VECTOR") % OUTCHAN " + PGS HIGH WORD LAST WORD" % +" +CURRENT LOCATION = " " +LOWEST LOCATION = " " +FVC LOCATION = " " +FREE LIST LENGTH = " " +SPEC = " % #FALSE ("PAGE-FIND-FAILED") "READB" +"MADMAN;ASHARE PAGE" "PRINTB" CANT-GET-SHARE-PAGE!-ERRORS SCRATCH-PAGE % % % TENEX CANT-GET-PAGES!-ERRORS # +FALSE ("APGFIND-FAILED") % % % GROWING-UNGROWABLE-SPACE #FALSE ("ARESERVE FAILED") % % % % % #FALSE ("SPACE NOT LARGE ENOUGH FOR READ?") % ( +ACTIVATION) WORD LIST [STRING BYTES]]>> + .GLUE +> + + +> + +)> + +TABLOCK + + + + SPACE ANY +LIST)] 468>> + +> + +> + + +"TUPLE" TUPLE)] 1266>> + + +SPACE "TUPLE" TUPLE)] 1246>> + + "TUPLE" TUPLE)] 1199>> + + +SPACE "TUPLE" TUPLE)] 1179>> + + +"TUPLE" TUPLE)] 1137>> + + +SPACE "TUPLE" TUPLE)] 1117>> + + +FIX "OPTIONAL" CHARACTER)] 1089>> + + +SPACE FIX "OPTIONAL" CHARACTER)] 1067>> + + +FIX FIX "OPTIONAL" )] 995>> + + +SPACE FIX FIX "OPTIONAL" )] 971>> + + FIX +"TUPLE" TUPLE)] 859>> + + SPACE +FIX "TUPLE" TUPLE)] 836>> + + FIX "OPTIONAL" ANY)] 781>> + + SPACE FIX "OPTIONAL" ANY)] 759>> + + +FIX "OPTIONAL" ANY)] 703>> + + +SPACE FIX "OPTIONAL" ANY)] 681>> + + "TUPLE" +TUPLE)] 620>> + + SPACE +"TUPLE" TUPLE)] 600>> + + FIX +"OPTIONAL" ANY)] 547>> + + SPACE +FIX "OPTIONAL" ANY)] 525>> + + ANY +LIST)] 476>> + +> + +> FIX)] 1866>> + +> FIX)] 1873>> + +> + +> + +> + +> + + )] 1981>> + + < +PRIMTYPE WORD>)] 1992>> + +)] +2004>> + + FIX +FIX )] 2014>> + +)] 2118>> + + )] 2148>> + + "OPTIONAL" FIX)] 2184>> + +> + + > >> >>> > < +INSERT "G*" >> >>>> + + + +> + +> + +> + +)] 2276>> + +> + + FIX)] 2681>> + +> + + + +> + +> + + WORD WORD WORD LIST VECTOR +FIX FIX>> + + + + + + + + + + + +"ERROR IF ATTEMPT TO GROW SPACE" + + + +"ERROR IF ATTEMPT TO RELEASE SOMETHING OUTSIDE SPACE" + + + + + +> + + + + + +> + +> + +> + +> + +> + +> + + + + +SPACE)] 2728>> + + > + + FIX +"OPTIONAL" )] 2848>> + +> + + FIX +"OPTIONAL" FIX FIX )] 2978>> + + )] 3236>> + + FIX +FIX "OPTIONAL" FIX)] 3298>> + + +SPACE "OPTIONAL" )] 3402>> + + FIX +"OPTIONAL" FIX)] 3464>> + +> + + )] 3619>> + +)] 3796>> + +> + + SPACE FIX "OPTIONAL" )] 3975>> + + +PBLOCK )] 4359>> + +> + + SPACE +PBLOCK)] 4448>> + +> + +> + +> + +> + + "OPTIONAL" FIX FIX )] 4701>> + + SPACE ANY "OPTIONAL" FIX )] 5227>> + +> + + SPACE +ANY)] 6069>> + +> + +)] 6224>> + + diff --git a/bin/librm3/mail.gbin b/bin/librm3/mail.gbin new file mode 100644 index 0000000000000000000000000000000000000000..85239985efd19a41618746054ee4568a350098dc GIT binary patch literal 87990 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 U3!r9?{SRz1oWT(-Z2I{BKb6RyH2?qr literal 0 HcmV?d00001 diff --git a/bin/librm3/makduv.nbin b/bin/librm3/makduv.nbin new file mode 100644 index 0000000000000000000000000000000000000000..5a6fea3ff40ecf027e8d09880b7e3a87e4bd4e6d GIT binary patch literal 3236 zcma)8eNa@_6+dqm0V{+Bf`SlxgH!?eSiwwFgCjcLdZ(J+v!*5d$Xh2Z#SduEQRDro!JnUu zO?|D>J)i-UMtWyM~%E8nC(K?$kGbA){9P zQvC%QBz-VCeP=}X&#A5IC;ar(((-%Lw>Oh}*1sm!;$_3*3)H`^n72+D=mo1@-E)5G zO?A(u={H{M8Jqr>mW)jYWNiA$`q@&7>Nl70)~=Dl3-pzS`{$|uAYKW`NbZ)h51j2Y z4V16xmeLY+-%i)p+}Bd2*3-|tlbqcx#{AHuwHzrK&J%Z41UK3l9c9_Qlc9@-I>lO5 z3dUg3ncd={!km8dIoIuh6RX2VTdDgOLw%z93$2#A@4wP3W$LcyiH5$_y)?}`ty#KS zp4u&CWfHAaGnPGoXDQ86``S@tWWL2u9Qecb2B~_(3LZ_a<;|aNxY;V!F22T_w~xf> z%%T3Lcsh1HtkGdDY`9N+7@X5jy+UsEi$@-z4KKf*3gM-Um_|B#bpHvOkpHYwX;%el zkdEP_Ewo+D3trtMa3Wc|Y=_vPyU3fo!*6C$uW*OS$;x+M=N*^7>Nz20mS1<0r{v51 zrqBgB4!d)|J5ob^Lq_{14@O>Vm1 zk*I2od}eApY%~AI&H$N^S_Mked0;kB%m2JbQu4A4_(z&jH@A72 zi~IqiTmck9K(ozeDp0n>P-t$NLpd*-jVSV4gboeF%_DjU6Vzx+$k+;80(+^cKm)P4 zE-CbD5uDMA7LG4LXWD;Edn`96$!l z0`Lcy32k=8UHKk>J8+X5Rs1%wweW1G)KS{A!VWL@L;PN8Ad@s8_!v4=%MM9bb=R@> zo<&R}_5S=e&v4>IYF@8sctrMEG>_IdnnHuqyTz@+DV@@-48k*C7BahmDSUBs#)m!y z5GuQ&jm@23Z_7-9WILIj;O|?%2H;hhT%P)2-7;&?5G)2|6)bX|g<6A7qCRB?gve(p zuSTz0ZB(>_mrROvr~dqVaM6RCoqW7!>Q)tQF$M+f*(&e^E(x9hR{$@Ak^li0tb*JqA-xM->`i z*wls#1!a>rRYluuNl92Ij>1C5Oi_|x;Kr%Da&TORD3VxDsFsUcqz4sQj`b8?ss}HM zIG;1GKo3O}PJ)-|bdzF|srMyG$f4c{LZ;qZw##nT>JT<2F|OK0DRfo2-9bi7g)|(MOzc=NvMUDYPxJFwonfx z>~e_1ZgWdaL_8`rwSCN@riTSG!*tpJ7leb)aoMxH#>@8sAzm$HcXDlC?^lQ0jK zyQRvY^|ON(lM^5(#{pmTma-m7RoFOQ5MvO$!Ulym15W|tK4D4&84fYKxG;>k5*G}C z?2C*CN3&L8+SwPP!I#Q?T5j944GXdbpM`G#g`Kr3l3k_e{Z5b&I=FLd9iLqhByi^;u za-TT9v!~ax^XA{XrFSZ>^kVa{ASG#OXv4JebO;Tx>xT1#(B2QeujT8{m!#4@lzfCs_bY_-)2!iTFJ z!u#*VR#ML{Lz!^dABRy}-axf*aZk)9>KS0D5I(uBt`^(_j+O~8y=N#ldt_*stf5l4 zypEIzkwI#m@MPU_9A5#iR|p<=63c|NfMeA{|DL!aAXMgKf234dq)bRYk*% + + + + + + + + + + )> + +XORG + +YORG + +ABSOLUTE-POSITION + + + + )> + +COMSWITCH + + + + )> + + + + + + + + + + + + SETORG #DECL ("VALUE" LIST +"OPTIONAL" ) MIGSSEND COMSWITCH % %< +RGLOC XORG T> % % ABSOLUTE-POSITION % +% % % % % OUTCHAN +"C" % "LENGTHS NOT EQUAL" "PLOTV" (CHANNEL) "PLOTVDSK" "DONE"]>> + .GLUE > + + +)] 86>> + + FIX FIX +"OPTIONAL" FIX)] 131>> + + "TUPLE" ]>)] 250>> + + "TUPLE" ]>)] 310>> + + "TUPLE" ]>)] +374>> + + "TUPLE" ]>)] 472>> + +> + + "TUPLE" ]>)] 594>> + +> + + CHANNEL)] 1026>> + +> + + + + diff --git a/bin/librm3/mclean.nbin b/bin/librm3/mclean.nbin new file mode 100644 index 0000000000000000000000000000000000000000..e32d82c0aaeb0322a3acd9d23c22e13602bb2d70 GIT binary patch literal 13690 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 TKZW#ffY$h7i!@frg=_v7xr9zA literal 0 HcmV?d00001 diff --git a/bin/librm3/mddof.nbin b/bin/librm3/mddof.nbin new file mode 100644 index 0000000000000000000000000000000000000000..a4ae37247db2467d12a70b56a9ca224aa4b4b4c2 GIT binary patch literal 9436 zcmcIK3s_TUmVYj#G$Aa&vPNLfCWun-|n>+u7NCANTv8 z=Rf~>pYzkT^Ut~(Ve!|W)p64IPOi6gZTyY4Yv;edS}h!UKj#n^x-+Yu8@BUufw1Wt z*M!}4yD8n)GAVzDu%|(}Rd|E_v{7trEX&!=Wi`mcx^`~N08kCF1)PH8PxrQ|nmT(O z2ia`~EJHB0ss9U+SWcRlLjE-qk@N@z zx}>JB&(dZhGK=vf@q3B{1r8xZPlE6x$4?}F#>Ky|5&_h#8y2I{Gb&5{F%n8!-Ve@3 zyJmmbiqQlSiEFXDWtp!gr4(|1DF4Vao&xL>2b}T$cN*TPh@Qr>g!sig8I+OrkER+& z{MJc0d3@jZc!oclR@k}RGuEC4-4!IQiuiHz{e7M6jKa>9l=hZ-6I0}EAyy(kye*C# zBf~6zUB~oLoGtZ#LY7s5Yyi8%a7^Smf1i*!v4oHumMQG4R80dkkj`nWKP=`Xu$T*t z@9SeT@(5x53)_>%7Is!4Dpi*H{e73|hfJ#i{_y6%sz1gNa!=0`ue;g)E@x@Uuz<7#gEW42|#~lPzqaUL`GQY&G4}6zODUzT{zZ7 zGO9=b-wf+mhN7KH!T^Xsn~;Pu4R9VxWa{B#tTdE!VBSYod(M% zYNnWP_Jdsvs0?3qjD+KCG0v`1jAbMQw^bu42O%lL5neUU0zE)gEcLZWXqQ?fB6i*M z!%i#gTum~oNFW;sq>KuLbEg2P)oca=fR-VSfot;-sKxUU1K44}!>bWV2FdV%lZ5y6 z@`h9rj@@r?+bV?;v4X{`C~6dq7!82;BKdbA)Nc8!35el~Pdi12m#-rMv_)y=LoVGh zq7WyPgajZ?FN=5VCrrI?Wh3C)&hJ6?_)CF3f#F8rb>~{xEeT|$aG4z0C?mHLz;shs z%qUEr9YBm#qaAZSYZ?69+Sz;b>u+!@bJ!d4W&7?xl+1qFH;-GOXcj@=d5TIm5mxwZ@^Rw>}K5>cac z_#Wv1AF7ie6Rs{D^VP}ah{0;4M%4iAM4*q=N!(G5g!qP&_^k_N#}l{~7|A<0u>{%c zhqLc$0O%`tk4)swVjOFPR=ed>8h zfN1^U1}i-BCF&U-bI0@Xj=2Z~Hx=dU=ZF?KSJC|_{CqtC5V)O69HRM3e~IhCiM4^wxf`Od$qMiv#&d@X9$lZbp^1%%9I(KRkQ9M`Khk{Iay07#k`gGeL z*-cETXL7Aqc*7Uy88w|4Ak~iq6I15h5htT;cFR0&OZLv<-V!fR+*|IQ#l4#Tvlabk zQ~J+Vx@PrEs(QSh86)IC$dLkCN`yzyqHaV3lv{($ox?Fmn@KQ>-7Hp$5d?#Q4>2(Y z{#6r`E9mOn0L;*$mLYtho|#Nr2(R*yP0cK!ka4UEFF3_=$HXi{)gB4Kc+m&~Q8*~J z_Xk}w@h1`%cty-41OmN!Fe9mKwDHN|(Z=EMCxbtNe}p9r?>DTk&rF7cHJc7C9D^Th zww?;=>*G(tX962;B#e%P5fVYh;R*=)C*T?t2^utHW*qLo9}8K-OLCg-j9D)nxXWg9 z&o!Od3mMUj?LyncOS^1I?>5!jH1at{TbEq9-5xgf%XfsNP!`8BHuXp$wXsZyPTy~7 ziT<0`o;&fq-FA7=soh*?S-~x6Y6Qdcr*_$MAF%%-9G;ZE%hIxNu9n-6 zN!Z@EJl$yD^nh))woPJj-HaOhV)^W5d*;xO zntRmBefzmkJa^;5bB#i>^5YYDr&0KcnxTC$Uf1`h156=y$+V2sE2cW1I7xPqL4=f; z{kD;IG9**NnEf*)@nl%0B$|Y&Byr}z5XmMIDVNMO2ThP%B%`VriCJ39M4P21Cdn-Q zmiZ?NZ^r2O*;!_$fmD-V@Mpq`j}QGb@z;~7Bp9eXJ?7hb?0Bh4Vmhp?lIPEvLD9sDeN9f~JDkD-tXC*%3#I`IjQtQa(27SULYv-r-U% zq)}7J$G(sNV-1PL{OgM356T|40!p zjW}AupH(Cj^X+*}1$^w4qf4x^JQ%BuRF&{w%sXnZ4wkD+`IsxJ3VyHxmu#6_$v?b~ zOCpYzTH_Q62EIL?E#@B<9ACm$L>(;RLh@2d`Sy8$#)J_^%U}uYkX>iX_=-lAfe(o| zqUHBR94fKOA`fc$m~Ds4;oOu;enJEbIOiQP@UtT)Yx(+lDuA-}SQ#f%9I4EmhB4F5`K?DW8h!AW-7Nz6`Cdd>yZE@Gva6&fA$4v z#astWW!F;6`LhLpM(i~p)4sP4mjEGvlC!t8l<^^vfX2hE2TQH7+t?yb_LZibmo+35 z@vlcE8n}@BmLl=K`>v)|TBR?4yoU2jmxXb;V)=tDud-n)tX$g7DN^og z9oKE_z22V1oi`kNrc`R3A3gdooo=&kzI|zfyL93zKA@C@#XPCUpcaY>G%5DxZSLfP z4E45LfwPH>`@gnAA=wq7cv}#I{0L++53^;kxWO)qO9kBZk%Z*V37G2YfChs7d$!L0 z{Q{`bNN=YbZMDOd`-G%Pr_#~1ZGJ5yg)EDXYJw!J>T@8 zZ))PcdyW(T9;0>sd1Xm~Q&_R|w4+X5e6#ne>D$x2R~~(!b*@%@bJ}to%V4u!Df!H~ z)ut2+adyL^nOgf&wzbaEf-WI*SPi9Gs<(iJE#T!}pt=Gr23rBx^21gT3LK=FZh=Ft z2GNQJcv&O=4ERk9e1>7h?~ge`Fm}OdLurG?L6-V;2pytvudJePUXuuM-D+GsN=btz zh|*{bRf>V?Ae?}t6qfMWsYC|x5*YzepHag?riqgixnDsTjN@S}gzu6#J-7j!D8&s! zXbVxC0%n?K?G&yI$Fn?e=`rbucBthOsM7Fl;0+Kf|fHVTN}Awg+5;cE@`J$xETFOGbdk^wN?CtzL!;FuYK~leZqn7 zKzv7B$4Dja<6JKI4>=obn{G92x1C;aa)YpE(r>i(TIHE$ZrG$8t)1J+&a!TP_sn)d zKk@utLH#X+9G7)06;&DH;)y3nIYrH*vkKbv=xm7Cb*sM&9ke$bkeSKXB$qDnsP!-N zzP_r2zIl)QdI{eisR2)0&{AoQ%Rf?X9jpVt`P$aQ;8r5gGj2NoE_mCKO1>>J8JyFW z#B#nvmr%*qzYQ+#VI=sQn8?&}t8Abl5X;ZLA=}sIXbqZV{e<>{&O-grt+U8?S2k&c z1()92+C0r8tt21t}Pf(6D1#A+cs1yY}_N!wR)|h!}E#DEPF5^8xkr>^`cV221OmAK~WS4?d zG6Pa$eyLc46%(r@AlE)Jijo2D#h5e=WCA(ffkK}&1A55kD9V2ny&#kytPGM4^cql` z0PBprAA%AS?Gk`AOa%Tn0RVOm6aWv$wavC}9e(CEc^M0}R$s=#0}=cvV+mA4LEPX+ zO`2JvCe;3k5sk=LiQXqF`McP;D1S$Pc9uf`3z2t7`JEiEdm~m)vlACc1VWfVa9Q4szc+3ywE6bCFBfi_ThgH(lK7d}4CtE$0hW+-WW<<(pRL z+bcS>&aLN`w)R%*iax{c@9}AIy?w4StJzYk%-JDq{x(J{Y~C|>zwQ2reOkw_<%rc} zbE~6Tx8O9y)+Hhuy^iA$5&?jyu54xOdi&xLY>lvS{DrqHwWHfM*i5_dS}7fHZq=j9 zT*Segricv_4bswdHpd0HIwn5V@+)C3xwXAQ^< zphQO|&=MUAdL-7))<8K5lmhi63G{>-Kb#!LheDu&E%}d3Qe}Z?@3A{+z!3|RMoSyO z0nlRPGLynqWr&4QG7eY7L2NT{1%h2e-+~aMr_mg*O`740AAN&CXroc1EuSNd8U0T2 zJd5Bdq8Xs4V}R<%NkGZ5JKpONFb>LgX}Y^Igax2J%p5?ws6IxJK-qt%7Er~+S`TI| zK5Fq8>reHbx`2U9rk}KJzHa|ZP32cGf6j>)=UN%glKw@$I^$=t|!K! zi@gRxM*P9BdF=Zyi)Uz-VL24t`bW1xI0R*ZEl^i@>6{v};i#4ph*K~Dzoss?#^qre zUvL;)KqKVJALwF>`DY`JR$61OB$h#buQu=>=CPGl+1u(eE~QX>^FQ8I>m&17_4dOJ zQ#aWU?`&-bCz(*rONX6mv~SohzPN7?{V1eQUW!Q)ct*-Q1=7TBBg1>Ztnuv{SEYy64iAN$M)|9j-Rb>Gv|7R~$I}N( zKIewNm#cN!SLwy%$*EUEWuK_o<1%2K{a~P;`@5yS>PlmfmR+`aW)X7nFGZMh(pQcH$oou=n9Nk zk3)h*Lo=F8VSo}$GX)gqV9O_j>FK!z83jJV`B@$ScuoQ-ME3XyLgEl8#b7`V=Ho6w zlfog_rOP1cgZ=oF?1yg(Yw$Vuxk8GW2f7z91!A6{hC~7b!K8(HqCwTw(s(Ut0d!H@ zM$s-uQpLP(x~EH{GjDeYn+6oId~G5XRQEM$a?yW}6H_#RJPTXH*bMhN)P5`=lU&O! zHEctVZ-KOdnxZ7yMGRuR`i@;SNA~ww@r>1pF8fkMg93OaBNe!I7={A)j3ch4Q8P`k z;6D&jpTuX8UZ4-PoZ~QHNO4&Z)KvfZgcw(1Eg85#2+gacgz5V559MwPBGx@}8trAx z=b$=U*7O()BF2x^ZcQmDp&3@sp4ba@_GNOkFIZ$6{$0){+xbgPyKI~P>u*rg+C|JGxa1|GDzqJ}zt&yWgHo%eEMChDKk~3Jqm#C(z~4^vN4yCL{ht$ocJuH=JLa zNeS(G?9e#Er25oapXY8pJ@@C_bM8I&J2!aZExSj4;qJ$sRR5>J4rRcd-bS@HLrSQpe$_i8na^A~DtB&J zeMHe`*gSGi!+bVmu{C(&l~-F8|F_3%;d67>9hXn}(vQgdou78na?{E_rTi#K3zpi7 zdgb%8j-6Jn`HD^}f3LlDR4Gp-wV@k6LrU<(TT46S{_n^N<^16}*3iL5n^)QYZ*oCd z(QwNuf4+HrTj*-st7*Z?IUn`O_hV)xd#nKf7@*J&mka~*MPNDx5#@V*85BqNIGe*832g4O8Y)!b(82Qw(d3v}?Cg@i36o$^EX zs9Str9v4KX2dIgg;#EqLB9YmdAiyScS0ifnN7iS}6>tf?V|b_ZE}BA09A5l~cQ`a` z#6z@%*>rl0O}`=linBWsp->1WYRryANEtdgI~^7OP>w!|LOd$gGxwOz|F5bHRmEIk zweNW`>J%!i)+Ko@Wo}sFh;t0Lu+7st^bT(p?wCgW1lMAwzf6{(|Abkr9wz!L@WZ5_ zZBI~5EWx?_Y^i`J#iq3q1CHZu3yZN=bfU3qZG2VScWOKv86jn;K6|no*04R^DX#Uy zQmlC;pU0b9%{G=?gj&k*zqiUl380k zYfGZ~cF^M7#S_GT`QZ%4LG5G!BknEx0-ysS!;%`U;lg-+pke)3H?r%3>Vx}!mwbbD z;fHfaHXAFv;o#)K(_z1HmU@Zl>SNbVBL#}^iqEnhR<_!a0#)@(+h}s_jSi~s9qJ1& zxMw{~%jevBC%oWfpEYc94t6TfakQ99kIFsk-|LiL+eF%E`NY5WjabspoK@$hsAO1d zrK{#FdsFfCkmo`NPF_1IyXXGHMN?*?c+fo5DV`sy=%p#?pB)eTHrd*!-k1ItX7E&2 zq?K7WX4`j8bizs|f?QSew-qh5PN-7Fx=RmkM_$+sN4QwBEO&{1`|@H~&P7{dvisMO z?O%h9?FW=B+1X-$G<^sb!ML@Mug<`>qULRSm>v-9;0kC6^ze?dr?Zz=f`Py!F3K$* z4*WhKSm0SztQ>gwRCB2vOrSSHDQ_z^KR@0I*>;$qijy-|7w`CODkQ2i9vu4b?Pjd% z1F#)t0tQV+KnTDt7+(lbI&pbgMssa5jN^kx0ZOiS&?IuRH=KLV))Bft3lHk7FRMFz zaKo`yC1n#?7w*3|SR)_&&5%|8e(pzBTJYsSlXR`-eV62(I^YT!j$Cww=HDS(q^9Y4 zE@@Bd1(($Ig{5A4Z#r>F71f1}(toD*Z>1Ab^XsJthd!vKhSW<9(&lNTDWp&B$7x^X z)k>ckb8Dpscl>ps#MeoqR57*RMH7$Y)k$Z3-#mf(F?ohm2HZx%dH;tP>RAnO{Wgni zH)uKAImgWfZYW|%i=%j@ImcTW%(3var|=qu0lbI0dc5XwxJ^`3$TEcIe0UzgEsG(S zvEA?^w#S$~g}7mnlmlQAofc>$8YgJQ%YJxCN@Zz>U45||*JTu~Mb(-JUwh8D#(;ur8DB0+);662Pu831A8CdvtJdG%0Dsu7Su8=7M@JHTL7ql{rD+ zAQ!t(G#8-AeA&h<(`9McI;Rk#mBomyXq&2z`w~^hm2k81m|nRF0!9$9k9Os-YlD2t zu;6y_+9)71M*+#&v4LpSaQ& zras0?V`-1Ppx1U-%tQn#`yY^QC70alq?7I+U%0jR}JO(U> zSMxRk*}PY-T7TK~NCa4+ijLvJk0ZqtmT{2{E_yV55N5%+a#+aQqCive6a`uu?~TGs zrB%tYndZVrxBm&rs(J>mM_4t0P!7{zoDp&Z!c}Nd=RSs)dLBO+USskIL)$6iou*J? z&BeNq*^byTe`P`T*mJi?6>A4v(%zbUtJF2Ezd@>aqo9E%9{TwfY5uwotkT{$F4ZCP za{XX68CdF~i8A&)dM z9uWV&2S6YOTu~K;$0F5C!kESpGx$R%;~A_W*$@W!f)++F(gpS=nal~p zUkF(U7a;>P7WU<^>!AltuyJ_yE`Cmr!+z;W856DbM-h)NchVYu4d3w5qD@?AS0Rp` zjm^a=Tpy39fX0VW!9E^Qpu<}_`d}=gE>LkOL w7aF9jsTMr^FV1bjs5r+mQelJCRGr_X=B9ndXl_cs-k}(4KlR8#2T3#h4=bCz0{{R3 literal 0 HcmV?d00001 diff --git a/bin/librm3/mdkill.nbin b/bin/librm3/mdkill.nbin new file mode 100644 index 0000000000000000000000000000000000000000..6335f2e75392af686063bb8633429e61a58a5303 GIT binary patch literal 3145 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 Zxa4SMGvp%{K_ICI84D!H3whj={{y?$HHrWL literal 0 HcmV?d00001 diff --git a/bin/librm3/mdtype.nbin b/bin/librm3/mdtype.nbin new file mode 100644 index 00000000..20fcb46c --- /dev/null +++ b/bin/librm3/mdtype.nbin @@ -0,0 +1,130 @@ +ñ¢žPƒøràÇ‹ô¦Ä©û4"¢}ôE ÷•iÅAôU"Í‘ù”>Añ¢†Šyø³ªR³ô'ÔAøiÈAø³* ™ú”W¥ø ñ¢žEú”¬ ›úQiÔAù° Ã—ôjO¡÷ï ñ¢žEú”¬ §úPÐRøˆ$Ì™út! §úäN÷ÈŠñO"ΩúVPM‡ùñ ñCE<‹ùÕ)YAøµ§TAøµªY¡÷ÈŠñO"ΩúVPM§ô¡ËAøÕâ ›úqS©ùh(F±ô§T}ôE ÷‘gT¥û()ЃùÈ)Æ™ô)ÐAø5j ©ù”ÐB§úˆ#DôâS}ôE ÷‘gT¥û("Ì©ôjY¡ôaÎôêY¡ôáÎôbU¥ôâU¥÷ÈŠñO"ΩúVPDŸøÈ!Îúuf úQ)Õ›ô¦Å™ú”ÐE©ùóL©ùõÐW©ùóL©ùñPE©ùõÐW©ùñPS¡øqiRAù´¥Å¥úH&ˇù£ ›úRáÏ¥ôiK¡ùôß ñCE\ôE ôSaωô V éýPmßþ\ò Çýù2 Éü=0 íü¸úoåõÈeÃüzeÙü»rîéôy Ãôpò×õ¼øaÇü£EdÃþ˜PvËü}7ò]ôHŠñO'E¯ú–hEAù°çÄAúµ¢Ã©ùô'y÷”)I›ú–hEAúµ¢Ã©ùôŸ ·úQiÔAù´î¾}ôE ôQfTAõ«PtÑü¨0ãéþ¸v Éþ¼°ôÓýûaÝüˆ1ïÝüÚreÝüyPdÃþ˜PfßþH0 Ûü<µ­çþqåñ\0éåõÈcßýÝ0éÝþh:hËô÷îÍý92îÇü¨7æAþš2 Ûü<µ¬Aþš2 éÿ<2 ßüÈ9ðÃüyV ÓþœÆŠÇýû³iÉü»±åYôwdAþš2 Ãü}:áÙô:òÃþšwîçôó éýPmÃþZÐaÝüˆ9ðÃüyQ ñCE<…ú²fD[ú‘fЙø5" ‹ù•#¯ùô¢ UöL±aö 0aö • môm±o÷ \³iöͱAö-عoöÎZ9oöH4cö¬0eöŒÙ cöî¹göš3iô Y4möî3mö-™ eöŒZ°qö š3eô [¸k÷,Ú6iöìP1oö.[¶söŽ[³AöMµa÷ 4göH·qö®Y´möŒÚ [öM´cömš²kö4cö¬0eöŒÙ cöî¹göš3iô Y4möî3mö-˜ eöŒZ°qö š3eô [¸k÷,Ú6iöm-eöŒZ1göÍY4sô š1kö2iöl2göí1köm0AöLÛ´qö-Y´aöh3oö޵göŒ eömÚ8cö¬Ú0sô ™·i÷ Z³iö,2göí1kömµCû¨ÛcöM°möŒZ²mô ›0iöÍ™7qöîP2iö-X8aöM²Aö-Ú6mö,Ø4e÷±cöŒš4kö [ eöŒZ°qö š3eô Y4sö š1köM2mö 6eöî2AöMµa÷ 4göH²kö޵iöMY°AölX´eö°köÈ4cö¬0eöŒÙ cöM°möŒZ²mô ›0iöÍ™7qöîP2iö-X8aöM²Aö-Ú6mö,Ø4e÷(±cöŒš4kö [ eöŒZ°qö š3eô Y4sö š1köM2mö 6eöî2AöMµa÷ 4göH²aöÍX·aöŒÙ2AölX´eö°köÈ4cö¬0eöŒÙ cöM°möŒZ²mô ›0iöÍ™7qöŒ2iö-X8aöM²Aõ¬š´qömZ2köNP3cö-4iö¬¶AöMµa÷ 4göH²i÷,4cö¬› eöÌ6möMÜ4eô š1kö2iöl-eö š±oö ²cô رiöM5aö­2iö-X8aöM²Aö.Z¶eöLÙ¸köè3oö޵göŒ› eömÚ8cö¬Ú3eô ™·i÷ Z³iön2göí1köm4AöLÛ´qö-Y´kö3oö޵gö[!»ô +)AöŒZ²Aõ Z)Aõ \ c÷(0AöLP2eô ™©Sô +)AöŒ[¸Aõ Z)Aõ Û g÷¹AöŒ4cô  gö4Aö.1eô 0Sõ(-¨Qø5'ÍAöm0Aö(¶Sô +#LŸø51qô 3Aöm” Qø5'ÍAöm0AöH¶Sô +#LŸø51qô 3Aö. QøÓ'Á©ô \ aô 3mõ(F™ùðj c÷ iô \)Sô + mô #ø3)ÅAõ +P5AöP'yø³* ƒú“æ ù“àÔAø5'ÍAøÓ'Á©ô¦Oƒúˆ#LŸø5[¥ø´ê yùÓê ƒùÖ_]}÷ÈŠñO!U“ù‘Ô‹ù´&A©ø¨&ÓAôuçÒ‰ô +™0cö,0aö 6Uô !·ö-Ü5söm4iöh±s÷ 3söîZµAöMµa÷ 4göH·qö®Y´mö [öL¸göMœ8möè4cö¬0eöŒÙ cöî¹göš²eô X¹qö™¹o÷-Z eöŒZ°qö š3eô [±sö휴söíP-cöÍÛ0iön²qô ™°qö­³iö­1o÷ \³iöÍ9Aö-Ù³a÷ š1e÷4cö¬0eöŒÙ cöî¹göš7cô [±s÷ 2iö®P2iö-X8aöM²Aö-Ü5söm4göh²i÷.X3aö-› eöŒZ°qö š3eô [¸k÷,Ú6iöŒÐ-eö Ü3eöÎ6mô š1kö2iöl2sö-°oöMÛ7AöLÛ´qö-Y´oö(3oö޵göÚ eömÚ8cö¬Ú7oô ™·i÷ Z³i÷ 2göí1köm9AöLÛ´qö-Y´söHn CûlY4sö š1möP2mö 6eöî±AöMµa÷ 4göH²i÷-6oö-˜¹AölX´eö°köÈ4cö¬0eöŒÙ cöM°möŒ[0sô ›0iöÍ™7qö¬P2iö-X8aöM²Aõ¬˜±q÷ [µeömP3cö-4iö¬¶AöMµa÷ 4göH²i÷,4cöÌ eöÌ6möMܳaô š1kö2iöl-eöŽZ6möì[1qô رiöM5aö­2iö-X8aöM²Aö-عoöÎZ9oö¨²i÷,4cöÌ eöÍ\3i÷.¶sô ™°qö­³i÷--cö \6iöLØ4aô ™°qö­³i÷-Ð-cöŽ1g÷,³mô [´möÌY°iölP3cö-4iö¬¶AöMµa÷ 4göH²i÷,4cöÌ eöÌ6möMÜ4cô š1kö2iöl1eöí›´mö­›²AölX´eö°köÈ4cö¬0eöŒÙ cöM°möŒ[0sô ›0iöÍ™7qö¬P2iö-X8aöM²Aõ¬˜±q÷ [µeöm3cö-4iö¬¶AöMµa÷ 4göH9cöŒØ7eöí› c÷-[2eölÜ5oô ™·i÷ Z³kö 2göí1kömX°AöLÛ´qö-YµcöÈ3oö޵gö¬™ eömÚ8cö¬Ú³eô ™·i÷ Z³könÝAõ +E™úˆ*E›ú Ô‹õ(°Aõ ”©AöŒ™3Aõ Z ©úÕ'Æô+dÔ‹ù´&A©ø¨VÒ¡ø0åÁø¨°kö(1oõ*P(eö¨6AöMÐ2qô X e÷(°Aö.T©Aõ +E™úˆ*E›ú Ô‹õ(°Aõ Y©Sô 5mô +´Sô +2AöŒÐ4iô  eö(3Aö4oô Ú e÷¹Aö,6Aö±Sõ(-¨Qù’iÔAö.0Aö(¶Sô +&I§úˆ¸Aö c÷ +P(‹ù•1qô 2Aöm” QøSçÌ‹ø31Aö eöêP(ù69Aö göÊP(™ù4ê c÷ eô \)Sô + mô #ø3)ÅAõ +P4AöP'yù´Ð<™ù4ê ·úQiÔAút λ÷ÈL“úu[¥ø´ê §úg]}ôfTA÷“é ƒú“æ ø3)Å}ô¤ØA÷“$Ó©ôéE§úˆ"Öú—_>}ôE ÷ªÉ™ø‹jE›ú Ô‹ô'ÆAôuçÒ‰ô +™0cö,0aö ¶Uô Z Cûl[¸k÷,Ú6iöm-eö›¸eöm˜¶gô š1kö2iöl1o÷ \³iöÍ´Aõ¬š1iö,Û5eö¬P2iö-X8aöM²Aö-Ü5söm4göh²i÷.X3aöN eöŒZ°qö š3eô [¸k÷,Ú6iölÐ1eöŽ\°gö œ8AöMµa÷ 4göH·qö®Y´möŒÙ cöM¹aöl8oô š1kö2iöl1o÷ \³iöͳAö,š9sö Ø2qöÈ4cö¬0eöŒÙ cöî¹göš3gô Y4s÷,°e÷ P2iö-X8aöM²Aö-Ü5söm4göh²i÷.X3aöN eöŒZ°qö š3eô [¸k÷,Ú6iölÐ1eöŽ\°gö œ3AöMµa÷ 4göH·c÷-Û9i÷-Ú [ö-›¶aöŒÜ7qö3a÷ Z5gö­Z cöî¹göš4sô [³gö4cöN2iö-X8aöM²Aö-Ü5söm4oö(·c÷.8eö\ eöŒZ°qö š3eô [±sö휴söíP-cöÍÛ0iön¸eô ™°qö­³köÍ1o÷ \³iöÍ9Aö-Ù³a÷ š1e÷4cö¬0eöŒÙ cöî¹göš7cô [±s÷ 2iö®P2iö-X8aöM²Aö-Ü5söm4göh²i÷.X3aöN eöŒZ°qö š3eô [¸k÷,Ú6iölÐ1eöŽ\°gö œ1AöMµa÷ 4göH·qö®Y´möŒÙ cöM¹aöl8aô š1kö2iöl2cöÌX1aöMÜ2AöNX5sö.6qöè³göì³cö.\ eöM\¹sö®²oô š¸eö,\3s÷.P8i÷,Ú6köˆ´kömš3oöí1a÷ ™3köN´Aö-˜¹cö ™0cöˆ°eö 3oömÚ eömÚ8cö¬Úµiô ™·i÷ Z³kö­Ð2göí1köm[0AöLÛ´qö-Yµmöh3oö޵gö­› eömÚ8cö¬Ú¶sô ™·i÷ Z³köì2göí1köm[µAöLÛ´qö-Yµo÷3oö޵gö® eömÚ8cö¬Ú¹aô ™·i÷ Z³k÷.P2göí1köm˜2AöLÛ´qö-Y¶aö¨n CûlY4sö š1qö 2mö 6eöî2AöMµa÷ 4göH²kö޵iöMY±AölX´eö°köÈ4cö¬0eöŒÙ cöM°möŒ\0aô ›0iöÍ™7qöŒ2iö-X8aöM²Aõ¬˜6kö-Ø4göLÐ3cö-4iö¬¶AöMµa÷ 4göH²i÷,4c÷  eöÌ6möMÜ4cô š1kö2iöl1eöí›´mö®3AölX´eö°köÈ4cö¬0eöŒÙ cöM°möŒ\0aô ›0iöÍ™7qöŒP2iö-X8aöM²Aö,›¶oöš¸möH±cöŒš4kö [ eöŒZ°qö š3eô Y4sö š1qö 2mö 6eöî1AöMµa÷ 4göH²oöÍÚ6k÷ ˜ gö,Z2iöX5mô š1kö2iöl1eöŽX6iö.0AöM˜4möÌ›¸iö(4cö¬0eöŒÙ cöMÛ7iöÍ\6aô رiöM5aö­2iö-X8aöM²Aö,š9aö͸aö6aö›2o÷  eöŒZ°qö š3eô Y7möí5qö®P3cö-4iö¬¶AöMµa÷ 4göH²i÷,4c÷  eöÌ6möMÜ4cô š1kö2iöl1eöí›´mö®¸AölX´eö°köÈ4cö¬0eöŒÙ cöM°möŒ\0aô ›0iöÍ™7qöŒP2iö-X8aöM²Aö,›¶oöš¸köè±cöŒš4kö [ eöŒZ°qö š3eô [±sö휴söíP1eöŽX6iö.0AöMš¸göŽ\7m÷(3a÷ Z5göÍ™ [ö,¸möŒ™²söH3a÷ Z5göÍ™ [ö-8cönX5q÷·iö͘³aöŒØ gö,Z2iöX5mô š1kö2iöl1oö.[¶söŽ[µAö,š9aö͸aö6k÷ Ú9qö휠eöl5iö¬Û7eô X°k÷ š2göNZ eöl5iö¬Û7gô X´q÷ Y¹aö®X cöí6cöl3cô رiöM5aö­2iö-X8aöM²Aö,š9aö͸aö6aö›2o÷  eöŒZ°qö š3eô Y7möí5qö­3cö-4iö¬¶AöMµa÷ 4göH²i÷,4c÷  eöÌ6möMÜ4cô š1kö2iöl1eöí›´mö®µAölX´eö°köÈ4cö¬0eöŒÙ cöM°möŒ\0aô ›0iöÍ™7qöŒP2iö-X8aöM²Aö,›¶oöš¸köˆ±cöŒš4kö [ eöŒZ°qö š3eô ˜¶cö X2o÷ 2sö \±qöÍœ7AölÙ·a÷,رs÷(2k÷.\µqö¬› eö®1c÷ ܹsô9göš´Aö­³möŒÛ·iô X8eöLÚ²q÷-1mö.X°möL´Aöl0aö Û³oöˆ¹köÌ™3g÷ [ eömÚ8cö¬Û3iô ™·i÷ Z³möŒ2göí1kömš6AöLÛ´qö-Y¶köH3oö޵göÍ\ eömÚ8cö¬Û6iô ™·i÷ Z³möì2göí1köm›¶AöLÛ´qö-Y¶qöH3oö޵göÎ eömÚ8cö¬Û9qô ™·i÷ Z³oö2göí1kömØ´AöLÛ´qö-Y·eön Qõ +P4gö (köˆ*V©ùñ£![ù5"Í¡ùjECõ´¨A‡ùpcÅAö,±Aõ Ú iöŠT QöÍ6kô › möè8AöÎP7aô Ø oöH³AöNP7iô Ü oö¨¶AöíÐ7Aö,1gô [ c÷(2AöMP4mô  köJT Qõ +P4g÷ (köŠP(cö Ð1aöˆ°kô X6Aö, cö1a÷(±aô X±Aö,Y köè¹Aö,Y möè9Aö,Z cö-P1cöÈ6A÷ 7iô š kö¨8AöŒ3mô Ø eöˆ¸Aö,6AöµAöLP2oô Ù g÷(5Aö¬P7oô q÷*T ·õ +#LŸø51qô 1Aöm” QøÓ'Á©ô \ aô P1qõ(F“û aô 3mõ(F“û aô 2aõ(F“û aô 1kõ(F“û aô 1aõ(F“û aô 5Sô +#I±ô Ð0Aöh7Sô +#I±ô Ð0Aöh4Sô +!OŸù‘`ÎAö( gô ˜©Aõ§Ï™ø°g cô 3AöL QøÒl kô 3Aöm” QøÒl iô 3AölT QøÒl qô 2AöN©Aõ +P1iô #ø3)ÅAõ +P4AöP'yø“ã ù“àÔAøÓ'Á©ô¤ØAøÒl ù6F“û#I±ô¤ØAøÒl ƒùÖPAû(#I±ô¤ØAøÒl ·úQiÔA÷“§ÔAø3¬¾»÷Ï ñ¢žB«ù3"-©ø³hLƒú‘PS¡ø3#¯ùô¢ Uö­X1aöl0aö  oôm±eöŽ2kölš³AöMY5qö\6q÷·c÷-Ú3e÷ Ú [ö-œ9iöÍ[4i÷3a÷ Z5gö유cöî¹göš4sô [³gö4cöN2iö-X8aöM²Aö-Ü5söm4oö(·c÷.8eö\ eöŒZ°qö š3eô Y4qöLš³eö¬Ð2köM\0s÷ œ8Aö-Ü5söm4göh²i÷.X3aöœ eöŒZ°qö š3eô Y4qöLš³eö¬Ð2köM\0s÷ œ8Aö-Ü5söm4oö(·c÷-Ú3e÷ Ú eöŒZ°qö š3eô Y4qöLš³eö¬Ð2köM\0s÷ œ8Aö-Ü5söm4iöh±s÷ 6mö ³AöMµa÷ 4göH²i÷ ™5göMY eö¬š¸a÷.8qô [¸k÷,Ú6iölÐ1eöŽ\°gö 7AöMµa÷ 4göH²i÷ ™5göMY eö¬š¸a÷.8qô [¸k÷,Ú6köM-c÷.6möÌ9eô š1kö2iöl1eöŽ2kölš³AöMY5qö\6q÷·qö®Y´möØ cöì\·iölœ3oô Y1iöÍ[6cöŒÛ eöŒZ°qö š3eô Úµaö¬Ù¶gö¨¸cö­·o÷-P1söÌY³kö.Y·AöLÛ´qö-Y·köh3oö޵göíš eömÚ8cö¬Û¶sô ™·i÷ Z³oöí2göí1kömÛ¹AöLÛ´qö-Y·qöˆ3oö޵göî¡»ôm±eöŽ2kölÙ8AöMY5qö\6q÷·c÷-Ú3e÷ Ú cöM°möŒ\³kô ›5qöm¸oöÎP2gö´kömÜ3Aõ¬X7eö š0söÌ2gö´kömÜ4Aõ¬Z°cö­˜8eö­1oöš¸m÷ œ±AölX´eö°köÈ4cö¬0eöŒÙ cöM2eö¬Ù²qô š²k÷ ¸m÷1eöŽX6iö.YµAöM˜4möÌ›¸iö(4cö¬0eöŒÙ cöMÛ7iöÍ\¹qô رiöM5aö­2iö-X8aöM²Aö,š8eöMY³e÷5eö®9qöÎ cöM°möŒ\³kô ›0iöÍ™7qöîP2iö-X8aöM²Aö-Ú6k÷ œ2sö±cöŒš4kö [ eöŒZ°qö š3eô Y4qöLš³göN2köM\0s÷ œ8Aö,š9aö͹gö¨6aö›2o÷ X eöŒZ°qö š3eô Y4söœ³göí[ gö,Z2iöX5mô š1kö2iöl1eöŽ2kölÙ8AöMY5qö\6q÷²i÷,4c÷,Ú eöÌ6möMÜ4cô š1kö2iöl1eöí›´mö®\·AölX´eö°köÈ4cö¬0eöŒÙ cöM2eö¬Ù²qô š²k÷ ¸m÷1eöŽX6iö.YµAöM˜4möÌ›¹göH4cö¬0eöŒÙ [öM´m÷,Ù·köȱcöŒš4kö [ eöŒZ°qö š3eô Y4qöLš³göN2köM\0s÷ œ8Aõ¬˜3möíZ0eöLÐ1eöŽX6iö.YµAöM˜4möÌ›¸o÷4cö¬0eöŒÙ cöí5qöÎ9gô Y1cöì˜6aö-[ gö,Z2iöX5mô š1kö2iöl7kö¬³göÌÚ s÷ Z´köíܵAö.Z¶eöLÙ¸köè¹mö,Ùµc÷,Û eömÚ8cö¬Ü0oô ™·i÷ Z³qö.P2göí1kön7AöLÛ´qö-Y¸gö¨3oö޵g÷  eömÚ8cö¬Ü5cô ™·i÷ Z³qö®PÝAõ +DŸøÈ*E›ú Ô‹õ(²Aõ Ù©Sô °kô +´Aú•ªOøÈVÉ©ø³hLƒú‘P­¥úa˃øñP1aö¬P(cö +T QöP4Aö4oô  i÷(°Aö¬P3mô Ø eöÈ1Aö-1cô 1iô œ©Sô +(‰ùñT‹ù´&A©øªP9eô +7Sõ(5k÷(5iõ(6mô P7AöÍÐ6qô œ oö±Aöì5eô  göÈ8AöL1eô 5kô  g÷°AöL1iô Ð1oô ©SôÔ(…ùóæEƒùÈ aô 7Sô +#I±ôP0AöH¸Sô + ÔŸù¨¶Aö göÊP(™ù4ê c÷ eô Û)Aõ¤ØAöH eôT Qø“ã c÷ gô Û)AõêR“ùÑÐ5iô 3Aö.©Aõ +P7Aö* gô . O÷“é yút ÎAø3¬ ù6A©ùóPL“úuF“û-Ò‹úu<ùõAû/®¾A÷”èAôgYAøÒl ƒú“æ ™ù4ê ù6DŸøÈ-Ò‹úu<ùõAû/®¾A÷”èAôgYAøÒl ƒú“æ ™ù4ê ù6DŸøÈ)Ô¥ù3£ ·úQiÔA÷“§ÔAø3¬¾»÷ÏŸ ñCE<§øµ# ‹ù•Aô€ ,6õ„.höˆ´õ‡´+/Zx "+hô¼ïõ‡ƒÔQõ€,6 &ô¯ÿó _ïz Dô¯ÿõ _ï{PDô¯ÿ÷ _ï|ô ô¯ÿù _ï}YDô¯ÿû _ï~ú ô¯ÿý _‡û1  Xûà€õá€ô8. @Q@ûAô(ø õå´5+a,>#`öÿÿõ`41,^,~,6põ¸ ðƒÐ=õ`41p| ,ûlE™úˆÄ‹øs(ƒú“æ ù“àÔAø5'ÍAøÓ'Á©ô¦Oƒúˆ#LŸø5 K÷”)I›ú–hE[øh*E›ú Ô‹÷ȼ©û4"­‡ôfTAú‘fЙø5"¾Aú‘fЙø5"­©û4"­­ù3æA©ù3ç![ø´©O¥úwP Aø_ï8ÇzhDAd/Pÿ„°+E3ZxzEøuâZ]þó¼ CL$þx> + + .Gù•b yPUT ,ELT GLUE ![3523÷ Ø7eô -c6961748028ô Ý}> +îñO)Å©øè&ÓAðh AðAô€ ,6õ„õÀ´=öˆ´õ‡´+/Zxô€+hô¼ïõ‡ƒÔQõ€,6 &ô¯ÿó _ïzQDô¯ÿõ _ï{XDô¯ÿ÷ _ï|ú1 ô¯ÿù _ï}"hö0€õ`4ô4;G@ô¯ÿû _ï~dhô¯ÿý _‡û  Xûà€õá€ô8. @Q@ûAô(ø õå´9+a,>#`öÿÿõ`45,^,~,6põ¸ ðƒÐ=õ`45p6$ôŽCP[0 MS #DECùˆL“ST LIST ELT ANYô¤ØALIST) % + + .Gù•b yPUT ,MS GLUE ![35238öì²AöN6i0 20217862öè±m10612öìÛ0Cû¯Ÿ ñCE<§øµ# ‰ùñAðgô€ ,6õ„õÀ´cöˆ´õ‡´+/Zxô€+hô¼ïõ‡ƒÔQõ€,6 &ô¯ÿã _ïrPDô¯ÿå _ïsYDô¯ÿç _ïtdh1ô¯ÿé _ïuòù4aô¯ÿë _ïvdh0ô¯ÿí _ïwòù4_ô¯ÿï _ïxdh/ô¯ÿñ _ïyòù4]ô¯ÿó _ïzdh.ô¯ÿõ _ï{òè´[ö0€õ`41 h-G@ô¯ÿ÷ _ï|òè´[ö0€+hô4YG@ô¯ÿù _ï}dh,ô¯ÿû _ï~òù4Wô¯ÿý _‡dh+ Xûà€õá€ô8. @Q@ûAô(ø õå´U+a,>#`öÿÿõ`4Q,^,~,6põ¸ ðƒÐ=õ`4Qpõ 6> ôŽ* 0 ð ñE ò… óÅ ÷ e&0[0 DOF #DEøs(LOAT FLOAT FIX øÒl IX FIX FIX FIX FIX AùÖPAû(#I± FIX FIX) ô¯(R“MTYPEõ°ÐDŸøÏ%yú–hE[øh"Oô"Í¡ùjE}ô"Í¡ùjE[ú–hE[úÒg̃ú’gÎCõ±iRŸúTî Aø_ï8Çzh*DAd/Pÿ„°KE3ZxzEøuâZ]þó¼ CL$þx> + + .Gù•b yPUT ,DOF GLUE ![3523÷ Ø7eô [°i3521 10908ö [8c 1724÷ 3eö -cöN0iöÌ0aô Ý}÷ÈŠñO)Å©øè)ЃùÈ Aðgô€ ,6õ„õÀ´cöˆ´û†ôXõƒÿÿ.*h,(+hhh ô +€+h *+h ô +€+h ,6h1,6h1,6h1,6h1/Zx "ö:€+h "/ï}."h +hðõ€ô¼ïõ‡ƒÔQõ—€õ€,6 ûà€õáXJô¯ÿñ _ïyòè´aö0€õ`43 h0øð ô¯ÿó _ïzòù4_ô¯ÿõ _ï{ Dô¯ÿ÷ _ï|ú1 ô¯ÿù _ï}dh/õê€÷Š´Iô¯ÿû _ï~QD÷Š´Iô¯ÿý _‡ô XB Xûà€õá€ô8. @Q@ûAô(ø õå´]+a,>#`öÿÿõ`4Y,^,~,6põ¸ ðƒÐ=õ`4Yñ òI  ôŽTt[0 SPAN #Dø°æ QANY FIX ATOM LIúuF“X "OPTIONAL" DOF STRù3£©Aô¯(R“MTYPE-C SPø3Ÿ K + + .Gù•b yPUT ,SPAN øó*ÅA![335÷ X¸k7 5721100544 17öÍš e78592ô ˜2cöî2oô X¶cö ˜²oöm˜ cölX7göˆµoöN0Aö.µaöMÝ}÷ÈŠñO)Å©øè&Ô³ú¾Añ¢†ŠyúqjGAù°çFA2> + + + +÷”âÔ SCNF 4> + + + + ñ¢†Š¹ + + + +"MS -- daþ˜PvËctor for a markõ¼øaÇe pair. contaiýÜÐtÑe list ofîñ\øaÝs whiüzeÝd at the space þ›ÐtÑe lefþˆ7æAþš2 Ûü<µ¬Aü;² éýPlÓþ}ŠßüÈ:hËôøaÝþh;èÓüzbËüúw Ãþˆ:hËôøaÇü¨:oAþš2 Ùü¹º ßüÈ:hË mark. itñ¢°ìço has the ü8úuÃl duration and ü{÷fÓdence data (from FRAUD) aýÙŠÃ slot to stuff þXwdßmness intoôHŠ ELT FIXô&I§T [REúuE­NT]>>> + + îñCE<§øµ# úñ2}ôE ÷”âÔôiÄAöo ñ¢žS‹ú‘ÐS©ùh>Añ¢†ŠyúqjGAú¬ k÷ÈŠñO)Å©øè+N©ô Ÿ  + + +"reþ0ãËment for RND slot of MS" ñ¢†ŠyDEFMAC RND ('X)ñ¢„¼ORM PROG (õ, ]X)) +ñ( A #DECL ((XX) MújFŠ ' )>÷φŠ \ + +"Dùñ-[ frauüˆ2eÏree of fit (goeþh4îéo FDFôöoéôó §úg/ø4)ø{÷tÃý;¹ºAñ¢˜¯AýÝvâËþH7æAþšvåçôò Ñü=² éýè1èÃýÙò çü»¹åAýùaAþ|0ãË +2/ numbeþH7æAtimes we hü=² éo change sense ýùaAmark +3/ total sum of conüÚreÝces assuming chü;³åç +4/ totalôúíAof frü=r Çonfidences for þš2 çpan +5/ number ýùE™Ts involved +6/ôºíÅer of illeüøv Qi.e. ù•ÖÅAor EL-W) space þ}ððç + +7õè1ïåþYqôÓýûaáþ4åÉô7 Ãüz4åíü¨2eÇýù4îÏô +7îÙÿ(4æAý¸yk[ü¼¹oåõ#E8_ô7ãÃþšwîAýùcßþ\²ãéion (only ý9mÃrk-error)îñCENßte that, when iýÈ0 DF slot as the real FRAUDô2ãßding, elementsîñLV e and 6 wilýˆ1eA0, anüˆ Ãnd 4 will be eqþ¸v  +" + + + + + + + + + + + + + + +ñ¢žD‹FMAC ILLSPC ('Xõ#E yFORM ú§ÇAõ +, ]û +Tñ( AôÄ‹øs(Qû +PDŸøÈVƒù•b©AøÒl)ñBP Aô'yõhW©ùñP.±÷ÈE©ùõÐ.±÷ÏŸ> + >>> + +\ñˆŠ "SPAN -- datü(0âßut an interpretü=4ïÝ of a sectý;÷ ßf +a ý»ùsË code message. ô÷îéains þš2 çý>² ßüÈ:hËôøaÝõˆ;èßñ¢±áëþyr Óþˆ:oAüYPgËýÙyaéü¹(ßþH#A™úqP(åü¸yïÝõ(4æAý=hÃþh7o winning iýÝ2òáretation aþh<åé), and the wordþh4îAit if it +has a winning iýÝ2òáretation. Therü¨4óAalso a sloþˆ3oå +theô©A«D confidence ofô4eAspan" + + + +A + + +îñO)Å©G TLS 4> + +ôE ÷”âÔô¢FAöÏ ñ¢žS‹ú‘ÐW‰úh¾Añ¢†Šyù°gIø´ê §øÓL§ú Õ©ô&SAøTê ¯ø”ÐF‰øÏ ñ¢‘rËplacement üÛù §RC slot ofôèA" + + ) +ñ"P A (ELSE FALSE>)>>÷ÃE \ + +"EVùÕ-[ DescþZxtÓon of an event ýùiÝteresþˆ:hÃþˆ4aáþweÉôz éýy áýúwtAý;†Šéý;r®Aô|aÛþ2óAþûúìÉô² çþpëËþH1èÃýÙòóYôôaÝüùy Ón the signü; Çhanges inîñ]4eAtype of code beý;³ çent, and so on." + +> +ñ¢žS‹TG EVú–h c> + + + +\ + +<ø‘cMƒC MREST ('X "OPú’g΃L" ('N 1))ñ¢„¼ORM Cù,Ћ >ñ¢†Šyø‘cMƒøh&ƒørÐ(OûO¡ú’g΃ùˆ(OùÈ©Sñ¢„¼ùô¦ ‡ù,Ћô#O¥ù¨!A‡ùhXAõÓŸ ›øsâ>}ñ¢†ŠyDEFMAC MTOúÐ(OC) + >>>÷ÃE  diff --git a/bin/librm3/mfd.fbin b/bin/librm3/mfd.fbin new file mode 100644 index 00000000..4fe305f4 --- /dev/null +++ b/bin/librm3/mfd.fbin @@ -0,0 +1,26 @@ +' + + + + + + >> + +>> + + DIR-FREE #DECL ("VALUE" FIX +"OPTIONAL" STRING UVECTOR) FREE-DESC "READB" ".FILE." "(DIR)" "DSK" INCHAN +"READ" "M.F.D." "(FILE)" () CBUF CRSP " "]>> + .GLUE > + + +> + +> "OPTIONAL" STRING)] 234>> + + FREE-DESC #DECL ("VALUE" FIX +UVECTOR FIX)]>> + + diff --git a/bin/librm3/mgprim.fbin b/bin/librm3/mgprim.fbin new file mode 100644 index 00000000..543441ad --- /dev/null +++ b/bin/librm3/mgprim.fbin @@ -0,0 +1,197 @@ +' + + + + + + + + + + + + )> + +XORG + +YORG + +ABSOLUTE-POSITION + +TENEX + +PHYCEN + + + + )> + +COMSWITCH + + + + )> + + + + + + + + + + + + SETORG #DECL ("VALUE" "OPTIONAL" FIX FIX) LAYOUT MARKP OPENP SETPT!-BOOK DRAW MOVE +MIGSSEND COMSWITCH % % % % % % % OUTCHAN ABSOLUTE-POSITION %< +RGLOC MV T> % % % %]>> + .GLUE > + + +> + +> + +> + +> + + "TUPLE" ]>)] 227>> + + "TUPLE" ]>)] 273>> + + )] 319>> + +> + +> + +> + +> + +> + +> + +> + +> + +> + +> + +> + +> + +> + +> + +> + +> + + FIX) "NIN ERROR "] '(51 +INTFLG!-MUDDLE 77 (1) LCKINT!-MUDDLE 434 (2) $TLOSE!-MUDDLE 224256 (32 28 24) +UVECTOR 237006 (37) FINIS!-MUDDLE 228248 (45 38) ERROR 233150 (44))>> > > ,NULL)> + +]>)] 824>> + + "TUPLE" ]>)] 876>> + + "TUPLE" ]>)] 921>> + + ) NULL] '(54 IMAGE +255243 (6) CIGVAL!-MUDDLE 247895 (11) FINIS!-MUDDLE 230942 (12))>> ,NULL)> + + "TUPLE" ]>)] +973>> + +> + + "TUPLE" ] +>)] 1092>> + +> + +> + +> + + + + + + + + + + + + + + + + + + + + + +> + + + + diff --git a/bin/librm3/migsmn.fbin b/bin/librm3/migsmn.fbin new file mode 100644 index 00000000..9f20c226 --- /dev/null +++ b/bin/librm3/migsmn.fbin @@ -0,0 +1,146 @@ +' + + + + + + + + + )> + +COMSWITCH + + + + )> + +TRMTYP + +DASH + +PROJX + +PROJY + +PROJZ + + + + )> + + "OK") (YOU-LOSE )> + + !\T> ) (<=? .FOO !\A> ) +(<=? .FOO !\I> ) (<=? .FOO !\G> ) (T )> + + + +> + + + + PROJ #DECL ("VALUE" "OPTIONAL" FLOAT) % % % COMSWITCH % % %< +RGLOC LINE T> % % % % %< +RGLOC DRAW T> % % % "LENGTHS NOT EQUAL" +"PLOTV3D" % UVECTOR ";M3D MIGPUT" "READ" OUTCHAN #FALSE (DS NAME +ERROR) "PRINT" "CHN NOT OPENED" "M3DSK" % "DONE" #FALSE (NO +DSK OUTPUT) "XMIN +" " +XMAX +" " +YMIN +" " +YMAX +" " +SCALE +" "SAS" "NAS" "DAS" SCALE1 % "TMIN +" " +TMAX +" " +XMIN +" " +HPTS +" R (ATOM) RX () RY % +ANONF7!-TMP #DECL ("VALUE" FLOAT FLOAT) R]> % ANONF14!-TMP #DECL ("VALUE" FLOAT FLOAT) R]> " +RMIN +" " +RMAX +"]>> + .GLUE > + + + +"OPTIONAL" )] 96>> + + + + )] 211>> + + )] 285>> + + )] 336>> + + < +OR FIX FLOAT> )] 387>> + + )] 438>> + +> + +> + + +"OPTIONAL" STRING)] 1110>> + +]> "OPTIONAL" STRING)] 1182>> + + ATOM "OPTIONAL" ] +> FIX STRING)] 1440>> + + < +UVECTOR [REST ]>)] 1947>> + +> "OPTIONAL" ]> ]> FIX)] 2024>> + +]>)] 2514>> + +]>]> "OPTIONAL" STRING)] 2719>> + + STRING STRING STRING STRING STRING STRING ]> STRING ]>> ATOM ATOM "OPTIONAL" FIX +STRING ]> ]>)] 3044>> + + STRING STRING STRING > ATOM "OPTIONAL" FIX STRING ]> < +LIST [REST ]>)] 3886>> + + + +> + + + + diff --git a/bin/librm3/mirbas.nbin b/bin/librm3/mirbas.nbin new file mode 100644 index 0000000000000000000000000000000000000000..891708cca945f83ad66e623e1a3bf5c2ed2c1157 GIT binary patch literal 8322 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 GrvCsXR1hox literal 0 HcmV?d00001 diff --git a/bin/librm3/misc01.nbin b/bin/librm3/misc01.nbin new file mode 100644 index 0000000000000000000000000000000000000000..aa4f4d08e3aeef087ba4830f0f4c194d34c366bf GIT binary patch literal 5240 zcmbtYeQZysOkH3lD^qww`Z-eRbF|ZvH&ZFDpx(N;!mvEvu_~v9$+A^hO?M9| zDrzrY4nPpHo?blOzluAkl7{!#gVz#!J43R%*LnM0HP^ABJO1`JF33aY{wdJY{l7b{ zI{NNij@>-7@_eGn{n@4X(u;jJVjnyTTvF}313w!2Z7_H?u0BEoO;xHK|Jm+EC*lJS z#I?j-hq#?Q?huW!`#VFY)ZD_qFc_xLy2YNUz7p5owRK>kCdB^r&a*!y!2*>4c(Jro zh#map&%X5Pd^G_oGh{1zGfs;8Bz{xOo6xA)i`lh>3<|QPW01W&<@eJtsgeasI%}kn`6Fq$lq{SFnCiU(yG-WeiyoIrIe!<|?YET3^R1&r@yd;{6 zaR(a*z!Uu;&S=3I1uZU%yv=}ghWUyb+7PampV2`_t(dS^n5=j=iO^Mc{lY)q_FFr3c|brL?Cu9cr#> zoG7R~p6qayXx&&#o2m#}N~=$lHYgq+hnjD_;uNu^*ZU5~-|YNM-qfmu+QiC0t4JJh zdw<+0HYlF9KXLp6m<++r07r^xacbNB^JYwcd6SYHRg2H@Y?JA>r|e zG92C9toYobO*nI%!dW4lTSNqRF^~3Bth7y@F)P_t207F;qOUU|y$%~8s|w1%(hjpg z3d1CTL+N0QNGo9u&){GLdl--pu_$>3J1xm)_hCC^)qxuaf?)JgwJ#lhIyPr$jgt3VxOlg9*j)}xxuq(z>IXzG#6Xp975~B#V^5oWWK>58HRNuflVxO( zjAbW0X!P%xpE;{gE_sd+2NMBY0|0qQ%OwbK4c{VayC%O&_?F{;3{vtaS9%iXFsm?J zh1?eKGpre?n!3Pjar;%__qHu+@P`n#;_I(sRk~L8g%lCZ{gx&tMrDxXl0Kv%Dx5(u zs-YAtHkbjXCYTC%d_*{gDCZJ_FQOTX4qqfDEDYa+`vtfnQXZ5?;2ks|3BZK1=xb%k z+26yoM0CIzP&(d)6q0? zrzUKe$yGb*1JQt_G+c+js_QXZ&=5^C=q?^+EE7D+$MJKzSGOFocmE0*pV(6qXz7SB ztSm9Mk+}wFhv$Q~-ieL}PWlF&Es4N&1QfC$#6F7MSaqc0Yy*rg!i1BD1M%YV( zb_^%F(J5(x;sQxzqc~J^u~#)={-R{!)HIvvEsDJ|(rol=w$-|uA5om=2G5d8$u0&M zJZnB*-o6&efm|>DKb8f`af#M2v(XL<8dW9SGaD6vqDs^S@tXsMQS>w(UkGdAI+l98 zHDj7K1A7D98~w)sD5NPR-gtWhZd{d6XYx4C*L>fuYCLZQ{V3&?mj(*>8&yOVBOcJm zqRhD=wshegMYZqRDEqufB2>ADucY0>(yLg{3mE+m0R#FY;(;UdV!)`b_b%zEP0k6T zW-;3E#@dpwQf@YZpyBROS(nQz(W%WYbfa(_=kmg`|NRIP9HkgCrc9CDTqv(K>(-A&%rjAM!+we{Yaq|v><2-tGrs(zjTtGV}_qwe;!nC!A`Wyz3 zqrm}~YXF(x=D}f4j?%cIvE$svIO;_v#1}YG2tQ`#@-*5f&n+32CSkBR%$TxTP(p2@ z-Br41i)X806^rqqTPSPTz#s|q_68g7lVrYbWuC#4bV>Z5f*%@CAsOS0*D+_N2>Jj~ zSO=D;C%z&-!IoBtzkKH~;uU{9dZDk86uXw55 zPuwkZ|AOpHrfR~Zjo<|rFaSB^Gcwd@?D6vzZ%W6W%Rn4?@-=d?Z7cw$ zj0Hd*0RUf>wP2;er35dX4rl5PV%TbQDDu(p;G0Bq`A7=Xy7N+Y>?5a zone?Z4s3Yev=s~&6zq(+>IQthFydD22*WHUJ&KH!sHe!F6f3f+!aZqZ#w@%l90p-f zF&~J)HqS_w%xx@#klUI!vsb7Z;Wqz<%w);H;wtvZ9=FUAm>{choBl#V*2bb!T`8E` zNx^mz0E3hhG0yeBQ#8%1=R_@MGxP1=*A7mS&&3fKK;1){cN9a?8ak#hHnF6+O=)fj P%AR#{qk + + + + + + + + ;"Never delete this" + +> + + + +> + + (MNUM) (EHT) (MNEME-READ-TABLE) > + + MNEME-LOCK #DECL ("VALUE" +FIX "OPTIONAL" STRING) ALLOCP DALLOCP STR-TO-FIX PRINTP MNEME-EXIST SHASH +COLON-CHK MNUM-ATOM STORALLOC GROUP-PAGE-OUT IUBKT NREVERSE UV-ZAP OPENP CLOSEP +MNEME-READ HASH-ATOM "MNEME" MNEMECHN "You forgot to MNEME-INITialize" % % "PRINT" % T +"Reopened in print mode" % % ANONF2!-TMP #DECL ("VALUE" ATOM ANY) INCHAN OBLIST]> INCHAN +MNEME-SEEN (LIST) ATOMLIST LISTLIST READ-TABLE MNEME-READ-TABLE () OBLIST % DHT % +"Unmatched or missing bracket" MNEME-END % SEEN % + OUTCHAN "ERROR--EVALing MNEME-END" % % +"Learning " "Shouldn't get this" "Shouldnt get this" "Bucket overflow" % % % % % "Illegal instance" % CONVERT NON-INVERT +LISTLEARN1 ALREADY-EXISTS "Number too big for MNEME" "Unrecognized " % % NEW-USES % % +"Colon usage" % IGNORE--THIS +"Bad type to makeunique" % "*** Note--SIZ=" +"Capacity exceeded" "PIO block size = " PAGE-OUT "More than 16382 uses" % "More than 16383 uses" EXTEND-EXTENSION % %< +RGLOC TEMP-UVEC9 T> % % % % PIO-TRACE WORD % +" W@ " "PRINTP returns false" "Bad type to MNEME-WRITE" +"DALLOCP returns false: " % "ERRET <> to try again" +"SORRY" "ALLOCP return false: "]>> + .GLUE > + + .GLUE > + + "OPTIONAL" STRING)] 48>> + +)] 146>> + +> + +> + + + +> + + +"TUPLE" )] 588>> + +> + +)] 1155>> + + FIX)] 2041>> + + FIX )] 2075>> + + (RANN) FIX> + + + + + +> + +> + +> + + )] 2736>> + + + +> + + > )] 3046>> + +> + + +> + +> + +)] 3680>> + + + +> + + FIX FIX FIX)] 3735>> + + 0>> + +> + + FIX)] 3865>> + + 0>> + +> + + FIX)] 3916>> + + 0>> + +> + + FIX)] 3967>> + +> STRING LIST> FIX)] 4018>> + +> + +> + + + + + \ No newline at end of file diff --git a/bin/librm3/mlearn.nbin b/bin/librm3/mlearn.nbin new file mode 100644 index 0000000000000000000000000000000000000000..17aa1c0b06a6049d802855fe59ef4343ac1e515d GIT binary patch literal 40987 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

Ms4# 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 V_`&*2x{OH9^~U~vd?xO({{i7pv_k*@ literal 0 HcmV?d00001 diff --git a/bin/librm3/mneme.fbin b/bin/librm3/mneme.fbin new file mode 100644 index 00000000..07904e90 --- /dev/null +++ b/bin/librm3/mneme.fbin @@ -0,0 +1,269 @@ +' + + + + + + + + + + + + + + + + + +> + + + + ANY>> + + + + + + MNEME-IPRINT #DECL ( +"VALUE" ANY MNEME-INSTANCE) READP NAMEP PRINTP LENGTHP OPENP CLOSEP +PAGE-OUT-EVERYTHING STORALLOC MNEME-TYPE? OUTCHAN % % "Not-printable-yet" O!-GC-OB () O2!-GC-OB MNEMECHN +"MNEME-CHANNEL-CLOSED" "Trying to print unknown or illegal MNEME-type" +"Zero mneme item" % CHANNEL T % "#MNEME (" +% % % % PROBABLY ITM!-GC-OB (FIX) DHT "You forgot to MNEME-INIT." #FALSE ( +NON-EXISTENT-ITEM) ![!] USE!-GC-OB NEW-USES ![!\A !\S!] +"Other amount options not implemented yet" ![MNEME-ATOM MNEME-LIST +MNEME-INSTANCE!] "Illegal mneme-type to MNEME-LENGTH" +"MNEME-NTH out of bounds--bad arg to SUPERFIND" "Funny item extracted" IN!-GC-OB + ![#WORD *000000000001* #WORD *000000000002*!] "MNEME-NTH out of bounds" +"Wrong type to MNEME-NTH" % % % % % % STORALLOC % "Increasing STOR" % "READ" % % "Done" #FALSE ( +"File already closed?") TOPLEVEL % MNEME-PAGE-OUT % "MNEME-GARBAGE-COLLECTION" "RECLAIMED-EVERYTHING" +"Bad type to hash" "DICT;ERB MNEME" ["READ" "PRINT"] "Paging space > 32767" +"Closing old channel" IHT STOR "File locked in read-only mode" "READP returns " +% "Illegal type to MNEME-TO-MUDDLE" % % % INITIAL OBLIST % % + % % %]>> + .GLUE > + + + + +)] 80>> + + + + ATOM)] 419>> + +)] 445>> + +> + +> + + FIX)] 549>> + +> + + )] 610>> + + )] 628>> + + STRING)] 648>> + +> + + STRING)] 680>> + +)] 701>> + + + + (IHT) (TEM-STR STRING5) STRING (DHT) (TEMP2-UVEC-LEN TEMP4-UVEC-LEN TEM-STR-LEN UBKTLEN STORSIZ +STORNXT) FIX (MNEMECHN) CHANP (MNEME-VERBOSE) > + + OWT )] 739>> + + "OPTIONAL" )] 770>> + + )] 1471>> + + )] 1494>> + + )] 1520>> + + )] 1543>> + + )] 1569>> + + )] 1592>> + + )] 1617>> + + )] 1630>> + + OWT "TUPLE" ANY)] 1654>> + +> + + FIX FIX)] 1744>> + + OWT "OPTIONAL" FIX)] 1809>> + +)] 1913>> + + 0>> + + FIX)] 2040>> + + 0>> + + FIX)] 2090>> + +> + +> + +> "OPTIONAL" )] 2346>> + +> + +> + +> + + +ATOM FIX)] 2760>> + + "OPTIONAL" STRING STRING FIX )] 2803>> + +' + +'> + + FIX FALSE WORD> )] 3032>> + + OWT OWT)] 3090>> + + OWT OWT)] 3188>> + + + +> + + OWT OWT OWT)] 3286>> + +]>> OWT "OPTIONAL" ]>>)] 3397>> + + + + + + +> + +>> + + + + FIX "OPTIONAL" )] 3715>> + + FIX)] 3841>> + + )] 3859>> + + LIST)] 4072>> + + FIX LIST)] 4232>> + + )] 4362>> + + 0>> + + FIX)] 4390>> + + + + 0>> + + FIX) +] 4440>> + + ]> + + >>>> ,STUVCO> + +> + + STRING UVECTOR "OPTIONAL" )] 4490>> + + diff --git a/bin/librm3/mneme.nbin b/bin/librm3/mneme.nbin new file mode 100644 index 0000000000000000000000000000000000000000..8119e6a8bd75053b8bf197789cf219bebd735b2a GIT binary patch literal 49469 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 PU6q0P(_UTXyzc)1HiRXZ literal 0 HcmV?d00001 diff --git a/bin/librm3/mnsalv.fbin b/bin/librm3/mnsalv.fbin new file mode 100644 index 00000000..b589e37f --- /dev/null +++ b/bin/librm3/mnsalv.fbin @@ -0,0 +1,71 @@ +' + + + + + + + + + + + + + + + + + UPDATE #DECL ("VALUE" ANY +CHANP CHANP FIX "OPTIONAL" WORD) CLOSEP MNFILL ALLOCP COPY-FILE OPENP PRINTP +READP % T "Trying to update extension?" "SALVGR >" +"SALTMP > VANISH;" "PRINT" ![!] OUTCHAN "Copying input file" +"Input channel is: " " Output channel is: " +" Warnings: This function clobbers temporary file! " +"Reading buckets and allocating new buckets" % +"Allocating SORTUV. No. of items= " "Max dht-bucket-size: " +"Allocating SORTUV2" "Sorting on address field" "Sort done. Flush SORTUV2" +"PASS 1: allocate new space and fill" "Can't do instances of instances yet." +"Write new dht blocks." UVECTOR +"Pass 2: modify by following ptrs back to old item" +"Found strange backpointer." "Worst case number of uses: " % + "DONE" % NON-INVERT % % % %]>> + .GLUE > + + .GLUE > + +> + +)] 960>> + +> + +> + +> + + 0>> + +> + + FIX)] 1288>> + +> + + + \ No newline at end of file diff --git a/bin/librm3/monitr.gbin b/bin/librm3/monitr.gbin new file mode 100644 index 0000000000000000000000000000000000000000..55b5fff272bc70278d3c3a211c8522ce4111d931 GIT binary patch literal 13613 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 literal 0 HcmV?d00001 diff --git a/bin/librm3/monitr.nbin b/bin/librm3/monitr.nbin new file mode 100644 index 0000000000000000000000000000000000000000..f6368d5044a6ea4e8ef992213725ddc72ce1ce47 GIT binary patch literal 15574 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 literal 0 HcmV?d00001 diff --git a/bin/librm3/morph.fbin b/bin/librm3/morph.fbin new file mode 100644 index 0000000000000000000000000000000000000000..9f9012568a1f3a1ea9ebf905a0d65da4d1a35190 GIT binary patch literal 656 zcmah{U2DQH6y0-w#c79h!a7v^dI%k{jkQ~wmL#=$!mLZ8*l;I&?RLed( zT$_|kB`_dJ+D%QzaCdj1oocU5CZI=ztQNuz;BR$fBkSf88iTM)cHe4wYnoNsFv&DE zNFm_Z%$<7J+33Rt3%FWARwWb5l*b*$-ppu^m}o(C8!j}fbN<<#@tkCZ9yAG6cOdcjHk4Z;#3|92ksRs?r-se``TU1b! zOs_Tduos>|d(Zogpa`!G&4^=|PxF7$oeWx3qHdFI!qzx}z@@|l=C+i_V; zTG!JkYRoaC-8&9^c&OJn!LiqCyyAG-xAUcQ&$v&A|2Fx%l4%#Hw{u&)ZHxWA`5IO& zFnKa3r)~AVuS<<^0>JzF?1ccXmX|<9cPhHm=!B3D|72rr99E z(ShDFHMS7nZGvGl!mF-7$(}XB*c%@KXx#s5gk)Ds6Ac3e2x{z&UZ|wYmv|TS>`SaC zXt7E>%2NyZRn3M%fP2}9CPam*|!%8h4m07&v!${e83hsv~?lP zLgq`&hRMyW)Qqov0n;^son92&UI6Vv3@zAbTCi{~O5RXD@Sl+=3%&T+okc~FsCcTJ zPpfO8DRgF_g3P45{UHK|SlDP1kjMp4vs}7+=+4c0s9CbyEQfkK71T^k`qz!B%TyfrO5t92_tYbVGezyLHfy2D7uU^U zXVE_I8Iqj*$J8rgeB4b_-+k?lGyRP^%e!LY2H{NKhoypv#-gK3a-r#w^wNP}AA>Vg z1W!r(jj{c@ZnzJ^RzL=SmOp>vy4m$>wGbs2r}U?g;nB}?ZP(vE?8loJC*(mUgbARB z@P%+MXtl5qB5m*>L?ysKLNrP%9G_lP;#9Xnq||oZ>+QdSFdKyNV!_CwDxo|8xC?gs+DgZFva=txSy}Y+ zf`#=Y9d8h$%i8Qrzt>U8)+Dyovb4Qz)$DY_i5m88;;|YwBN<dGKFi7$CY-Rk^}A0txMRwN8g^}YW&^vH(pf7;mA9>CYZ450cC9sc zEnBmzt;QYmv9OvIC+6D4oT^~2;9E_b68WZsul=GQ;1xI$lO}776Z}Bmmo8`nK(9(4 z=qsaj6T%U*#M6ZKq_x|PFq*@;`;-ylIL>o54FYzK_yqRcp%6qP>{m7Woq*qTP{YYZ z5L|Nn=XJRx#a)qM4I{&f6422!avUH_nv3EPWdp!8Uc~L*K%zE|S%Ll_9t}`UCVP`# z=*8nh0E8r&qq`W17#Ab}!B0)5xrtnmk-D6SZ<`J1YVYL(pvxqBIh(324(cq7I=kYZ zJois3s+?!Q%5$jlG8#9>!}OWx^SHR6_BgZ0L-2*Sr_SyRsqBX!oT#!=G@r0|!3JiA z7C3^>LYM%MDd5QX`l#Yj6z)x6eQqg5n2cS9tV)RFJ4?~Hp6P(Cf)HWWxtcd!T%3;F zWWMXK9neDP7{%dCY{3CJQP=Pi1}cCRfJ%qJ)>B-VlZVggCjr~iN>BR%VS#6R^?N3l z_OJg$<$&;0O7TM9OubbREuP)i)eZQ;HD(b#A9rR>eH6QFf+B$zn?_H(; zu+O)6@*5oDo)S}fBzwV?3Sia7kt@JVMKEVpB&~nktc3!pSe%m(H!!LRp5{dkH4r1f zC|>js)Hqc}NR^6&TJ?B4+zG#iNly40N}Q^CsBx;^hNnP_io{{BKjm#ex`IC{PO1L| zDm*X#M68lvV8l1ekUG|$sAKw+S+#6)!buBz^^&26MW-NYy}JCko&8e+-o2NQRl|ys z9Cr3V1wK1hcHG1sNIG7}&L-kr+U_hXD@qXTEbY?C)vP7iXkxGKnYos2e)M%edENQd z#b?AgJ@*q5AN}QzK_1oL1$l)-l>gJOObjbVC&$U60 zV&tyN9Z*MfW!7zsJcIl&8hP}LiboT0h3O|5xu0@~4HMqlE#5Wap-t$F518CLCSEus z>Q5PO+^{-EcXt~ED%U(pFB0+(^rfkH@X zsVEuwz~Vx%OGPsB^-B=+c~K@GlW43HVAu*kZ-zgaXe3JY0z@O47lTY&QwEbE9H;m9 zv2XA19(v~m&t@Viujnq-vTJ3t8rWH#p@9`wzGi3JmZRNnt29(2AvuQBq_VBfJtH~S z!dhBq)*-!^Wn%iIj2idwq|90|T9;*E+n(hkXf#QK*U0Mj+HAosH6G+b|lE@5osI%}B(-IfG{sgJW7Fk7_ zZxHPY+6PK@-1q`nCRj zHp^9H{B3uLJDSfql-znx~3kAK;ca1;Qe_HpcOU!vx zB8%}fGRcn+SzOBpDhIaz&5LGB;+lJ%7@t-HF-al|K6ogl*fpcP;~M6QQ&xe6zcT8fONxVawR zAfH?T$xiqJ3Y@A@uoQ+(fh?!$7#xNeOiDO4Q{YP&J_SIgoTyUx`=Q}+ATbaKkGJh= zL*ChHw6i07jNAt`u;Jw$HLOL4eDYlR34GCNsADq{a%)&m3c93imrhxcceYu?;Yp|L ztf=gG1JfpS*0`e+I_lW9atC_1kFiSh9^|4AROHsW^`9UYP5bCrE&H}yu(I09wi;I3 zl~%(ZNa(D?_!`6Vm`}6OAL>49^v`4JJBK{oW19 zi#SROmw0?MX@hU^Hzm!K({8~k!XbAcp);H$EBt8^?o8sVFW3{>c^)$wkQ)AgQCQok+y+_d~VQv$nguQnG2D+VQid z+y=M46qRsWilbVLDK}c&X(6gI8R_H2t4mC73@tg$tYuo=rzXsl#f<*$z>5pEc#eG| zEcUivnU6{PotP@(xY3<hk&lmK8UDP$I8k+UV1TFKg=x5^a#DLFbtHu&a&KOqASR5) zPVtqlWA2wx`lGIUFDJj#)*}bHHNPtF= z(4P!~m@$1y^vB&DHSV+&1Lf~JtVqcbn~s!GVz2U41IE}V?L%V|#Vb3i911MW`+ran za^^XAR*UVWKAl_5493#g7W=-C65~CJBFZ@W3*e#-adY4j-ClNs)T& zy4hMt;zb!J)1|ln7d=&%!Wht?70a0TBR#g1-uDNQb~dA8Rt-BnrrpkJ6He8zw2EUU zHX|{s&K+HOq8hVD0)~!zjMX6-XN11e?L6b`#3|hqq^#&U)k;XHpbsg{0KX6`L?6n5 z4ELM^8L8e_S@lNqQ#=KrxH1qm?@^xlrg|W9u&VGQ&7hLhylX;CN)Is9RaYGm!VYpVN13bsg&}-r;+!OFBGhlv52Hj1-L+ z%X^hIA_i2YK?fUApjr{+{UW5wfsBIW?&O_T^S3|L`$>D`hb26hxOS-nvw2AfM*2OO zR(5392@@;cZLqtwgHw7Vt>^eG6)>s{+F$fhNOrz|&P*H1ga4_@o+IIJc45G#q8z=& z7zpR^NEvAlKT;lazCaO&4Wc>!ne&JZqHcJxE$NKp{CNDpq*`+ZV9|C9c2%r zQ|Bn|pa~JDD~QPTVWJU-#xH(s4CL0Ls^(P>4weGvccCYPw+xm>1>&U9mp{PsG2`{m zZV84o79Cv_w>*`K%CTPwFUrx;eZ0s6qyChS@N`d;=TD5&d0-@{7y1)tbRHNBYQ#L* zrTcw&z)qyJx$M&M7@?jLcDOFG?ff|A=*_&$4?F{L&DoDTr35)dI}k6FZ+B#c+ieu9big-MuCf1qOgp8|Yw=~mzNuA+V38~^p6`{iRg^A9j8 zN~X=_7e##_e-QCgtc^6Mk!ubq+-#1u{tIF)Ntq|YNmR_gG^tVbaB*BMsIh)^?0~1} zPDAzb76+bN*I#_|*g)r)ieI}Te2 z$9kfA6b`$2Q>TS{TbgYSRUS^oN>oIV0R6OwZ7_|5Ru2}He0x!RZmb?Z4xqMH%6UlZMM9Aa1zaKlK`brZI8L-V z7s{H5Rj9W<%G;CS=ToaWe9?K47QKQdz}h-sy7E%`s0YdV(@LD^XY2@j-si(~Rlxnq<;0}jo|~zdemT72$bMHx*Mp4#fcenmbzK!GZklTnvu}KD z>bK=AFTroAdiYld7y5czEq@hrN&_+L=mQ@-?RpLUvd=b+x42>Id$E*%ebrOY`%0iA zk71Iz+4t;fbEWThHuKBk=y90m+1Q1WZI3$ccklfDd;2`L)RM#AGpow?d-#Cxqb;+? zFx`C6vk*xiEmTl6Oj)40^b9;pmNl>K|7<5NtSS$x_%k`^O>}|>is=kNNzQQJkH7{n z$_a0S#i@D^Ht=Q~=jeP9RT+Qs`65%=?Of8#I@Xgw!O8QTR?MjB6Eie>F(p&`=_v~>_ literal 0 HcmV?d00001 diff --git a/bin/librm3/mparse.nbin b/bin/librm3/mparse.nbin new file mode 100644 index 0000000000000000000000000000000000000000..669280e43679e4ffe5615cea150165dbd91db45a GIT binary patch literal 18695 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 U#GT&Yv6cO)-gR}p925Hg0X|z|IRF3v literal 0 HcmV?d00001 diff --git a/bin/librm3/mrkmak.nbin b/bin/librm3/mrkmak.nbin new file mode 100644 index 0000000000000000000000000000000000000000..2b8a849c7014468fc22a80b40840576df68f27b6 GIT binary patch literal 1898 zcmZ`(3rtgI6h5~tr8*ohbt>w9iixiReO}sFkV|_7GmwS?(=mdKp(TO^eBxts=@!^J zGMHI5GdGc}f>|6oyQy(8GZ~qQagjP>%w{wi<`5=0Z_91zWB-3!ZDO)N>FIy&dHm<` zo%5vsYm0+#zxS(?lbyKi@^9O6`E!2o7|M8JVvSD!&6S%N|LMlz8s2@f+~svYyy@cG z>Y~zb18o+0FR$zObo;pz{S0S)tJ1++<^2aaF*|1-XKfw7$}Q10GQpoN*hj-Q!{m5) zJQvmP* z2Zvymf-V8@c7Fp@PMQt!eIL7ln&AN`FE}C*?-e(^+``zn2gMtsv!6aw8EA^e_h%ZUj)!t&r&LJ`c&>?x9FXAYe|^V)hVF3Yxsu z?PyLH9FQAk1%J8cmZR7KbU5iCa%93MyF_yj${i-MMsE?`?IY6UUEMW#3klUQ-^ zld%d7MV^AW6(sRO5Q_w4uAAIfC&h$BD$ZYL10BK%?u&(nT}7SZT0J4P>OisuI4ug7 zSg|y*U@_^Xom4U^C4zJ$!w#a-Q8yeUD!IAyZLn4#q_8srfucmi%ShA;vp7l*>0Ye- zu6MI|_y|A>&M0~iVE8CO3?SSrkN_ZqM4}>1(wC$yis@mCndX!-hrg|Q*cGsjWe@nh zO(r~p_t{Q=*IfB2UbAYL<&u|s82rEKri|aRzp!R6F@y z%RLvTucVeA4}7}yH;2Eg$9ghQv9;LB%{^hQ;ctv(5Ba%%^dW!t8y4 zq?L(HN{{?Fwy0z|*#qVXp6L}2d{$!!Qv@651CVN0G32mDr$dj+_7Hs9MyVg4T2L5e4tZ@4gVYftKCtW1uX zc{|s#cT)-E3+(h2=|>rJjLZfzGBQ@{`r-|&c`Yg~tzrvM4*5eyOI0OOys+0yEY=B} zv1Fd}HUB|3XlR`d`4oQ|8gv?iT16whO5@AfXkcgqt<@v7(vYXtYm|DQY%yI==c!bB zwH9e~v@Q>S)gmQQ(`uD&TDIu>CXG^=SzAzmX3v%@D_CnK%FagZjXQRtdSt8L-Ppb* z6#TJoJak7p!G!V+eb<`Wu`GB|{m<3Vos_1BXuExTc4SkBoy8uER<^P@)eE4Vhk&uCl<7XD&jU2^K z$h`uvEsp*zt literal 0 HcmV?d00001 diff --git a/bin/librm3/msdtp.fbin b/bin/librm3/msdtp.fbin new file mode 100644 index 00000000..a89bb6c3 --- /dev/null +++ b/bin/librm3/msdtp.fbin @@ -0,0 +1,52 @@ +' + + + + + + + + >> + +>) (> +"~"> )> + + FIX FIX>> + + WORD WORD>> + + + + + + [REST WORD]>> + + FIX FIX>> + + + + SEMTYPE? #DECL ( +"VALUE" FORM "QUOTE" FORM) ==? OBLIST? ]>)> + + GET-SEMTYPE #DECL ("VALUE" +ANY STRING>) % #FALSE +() % SEMTYPES OBLIST LIST]>> + .GLUE > + + PUT-SEMTYPE #DECL +("VALUE" FORM "QUOTE" ) COND GASSIGNED? GVAL SPNAME]>)> + +> + +> >> .STR> '["INSERT" "INDIRECT" "AMBIG" +"PGROUP" "DGROUP" "USER" "FIELD" "MSGID" "FILE" "TIME" "RTIME" "ATIME" +"UNPARSED"]>>> + +]>)] 111>> + + .GLUE > + + diff --git a/bin/librm3/msgirs.nbin b/bin/librm3/msgirs.nbin new file mode 100644 index 0000000000000000000000000000000000000000..28c7d01a558c4a383b8a3a915d69ad8eb39cee06 GIT binary patch literal 13904 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 literal 0 HcmV?d00001 diff --git a/bin/librm3/mtprim.fbin b/bin/librm3/mtprim.fbin new file mode 100644 index 00000000..0b7c0a8a --- /dev/null +++ b/bin/librm3/mtprim.fbin @@ -0,0 +1,75 @@ +' + + + + + + + + + + + + )> + +XORG + +YORG + + + + )> + +COMSWITCH + + + + )> + + + + + + + + SETORG #DECL ("VALUE" LIST +"OPTIONAL" ) MIGSSEND COMSWITCH % %< +RGLOC XORG T> % % % "LENGTHS NOT EQUAL" +"PLOTV" % % % % % %< +RGLOC PT T> OUTCHAN (CHANNEL) "DONE"]>> + + +)] 85>> + + "TUPLE" ]>)] 130>> + +> + +> + + "TUPLE" ]>)] 435>> + + "TUPLE" ]>)] 500>> + + "TUPLE" ]>)] +562>> + + "TUPLE" ]>)] 659>> + + FIX FIX)] +739>> + + CHANNEL)] 808>> + + + + + +> diff --git a/bin/librm3/mudcal.fbin b/bin/librm3/mudcal.fbin new file mode 100644 index 00000000..c4601216 --- /dev/null +++ b/bin/librm3/mudcal.fbin @@ -0,0 +1,54 @@ +' + + + + + + + + + + DISPATCHER #DECL ("VALUE" +ANY) TTY-OFF TTY-ON DIR-TO-S GET-JOB-INFO ADDTABLE CALRDRINIT TTY-SET +CALICO-COMMAND RUN READER XFPOP XFPUSH CAREFUL-TTY-OFF TTY-GET OTTY () LKPR "" () DSPLEVEL (FIX) CURXCHAN XFLEVEL +% % % % % % READER-SILENCE OUTCHAN % % "FILE NOT FOUND" % [[] "" +"Type the arguments to be given to the function." ["OBJECTS"]] [] "SEGMENT-EACH" + % "?" #FALSE (#FALSE ()) " ?" T % % % "Now leaving CALICO." OK-TO-RUN % ":" +CALDEBUG "BLOCKED" % ANONF2!-TMP #DECL ( +"VALUE" ANY ANY) TTY-ON % OUTCHAN]> ERROR "ERROR" + % ANONF8!-TMP #DECL ("VALUE" ANY "TUPLE" +ANY) & RECURSEFCN OUTCHAN "***ERROR IN MUDCAL***"]> XFSTACK CALICO-SNM "*" ">" +CALICO-NM1 CALICO-NM2 "DSK" CALICO-DEV "READ" "MUDCAL.(INIT)" "MUDCAL (INIT)" +" +*" " +@" ["Type in a symbol or something to be evaled. +" ""] ["STRING" "SYM" "ATOM" "ANY"] TOPCOMTABLE "MUDCAL.SAVE" +"CALSUB;MUDCAL SAVE" % BLOAT-PARAMS "RESTORED" +"CALICO Version M" " in operation" "MUDCAL" "(INIT)" " MUDCAL (INIT);" +"MUDCAL.MSG" "CALSUB;MUDCAL _MSGS_" "MCAL" ".MSG" "CALSUB;MCAL" +" _MSGS_" % IMLAC? "SAVED"]>> + .GLUE > + + +> + +) +] 412>> + + ANY "OPTIONAL" STRING ANY)] 613>> + +> + + +> + + diff --git a/bin/librm3/mudirs.nbin b/bin/librm3/mudirs.nbin new file mode 100644 index 0000000000000000000000000000000000000000..eb0cba38e8cabf60b4a4b43613b20c3907e7d8d0 GIT binary patch literal 5354 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 literal 0 HcmV?d00001 diff --git a/bin/librm3/mudtec.fbin b/bin/librm3/mudtec.fbin new file mode 100644 index 00000000..138e6d4c --- /dev/null +++ b/bin/librm3/mudtec.fbin @@ -0,0 +1,55 @@ +' + + + + + + + + (TECO) > + + ACCESS-IN-CHARS #DECL +("VALUE" FIX CHANNEL) GET-ICHAN INF-CONTIN INF-WORD USET INF-LOAD INF-KILL +"TECO" "0FSEXIT" NM2 (STRING) TECO % ["DSK:TS" "DSK:SYS;TS" +"DSK:SYS1;TS" "DSK:SYS2;TS"] "MUDTEC" % *BREAK-16 BACK +^Z-TYPED T % %]>> + .GLUE +> + + + "OPTIONAL" STRING STRING )] 17>> + + "OPTIONAL" )] 132>> + + + > + + + + "OPTIONAL" )] 168>> + + "OPTIONAL" )] 223>> + +)] 300>> + +)] 422>> + + "OPTIONAL" )] 487>> + + + +> + + "OPTIONAL" )] 696>> + + diff --git a/bin/librm3/ndired.nbin b/bin/librm3/ndired.nbin new file mode 100644 index 0000000000000000000000000000000000000000..346508faa566a9aef8b20adb21e3ac32ae78f15c GIT binary patch literal 10125 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 JjxO9p{ufXTyVL*x literal 0 HcmV?d00001 diff --git a/bin/librm3/netftp.fbin b/bin/librm3/netftp.fbin new file mode 100644 index 00000000..57d12acd --- /dev/null +++ b/bin/librm3/netftp.fbin @@ -0,0 +1,114 @@ +' + + + + + + + +"SOAK and UNSOAK -- enable and disable scripting of ftp transactions" + + SOAK #DECL ("VALUE" ) ALARM-OFF ALARM T % (300) "USER " (230 200 330) "PASS " ( +230 200 331) "ACCT " (230 200) "TYPE " (200) "BYTE " "MODE " CHANNEL-CLOSED +RESPONSE-LINE OUTCHAN "FTP: " % "0123456789" % WAIT-ACT (ACTIVATION) "CHAR" SL "NET" "PRINT" "SOCK " % #FALSE ("Datachannel timed-out") % "READB" #FALSE ( +"BAD ICP STATE") #FALSE ("Read of socket number failed") "READ" #FALSE ( +"No Network Channels Available") ICP-WAIT % #FALSE ( +"ICP timed out")]>> + .GLUE > + + +)] 12>> + + + +> + +"CONNECT -- connect to ftp server at a specified host + arg1 -- host (fix) + arg2 -- access instructions, or false. if true, must be list + of items, as follows: + 1/ string, arg for user command + 2/ string, to be used as arg to password command, if empty + or false, none will be issued + 3/ string, to be used as arg to account command + arg3 -- type of transfer (string) false--none + arg4 -- byte size (fix) false--none + arg5 -- mode of transfer (string) false--none + + -- returns list of input and output channels, or #false(reason.string)" + +> FIX )] 24>> + +"GETLINE -- get a response from ftp connection, including continuation lines" + +> + +> + +"NETCHR -- kludge to handle new telnet protocol without +lossage waiting for response... returns a character, like +readchr, but if sees rubout or 377, reads next char and throws +it away." + + +CHANNEL)] 417>> + +"WAITRESP -- given a channel, read until one of a supplied set of response + codes is received + --returns code received (fix), or #false(reason) + -- arg1/ channel + -- arg2/ list of fixes, codes to watch for. in all cases, + responses beginning with 0 as a code are ignored" + + +CHANNEL LIST)] 447>> + +"WATCH -- error/interrupt handler for net channels + -- returns from an activation (sl) if we are in it (sleeping) +" + + +CHANNEL)] 625>> + +"ACC -- function to issue a ftp command to transfer data + -- opens another socket in direction indicated, and issues a 'sock xxx' + command over ftp telnet channels. waits for channel connection to + be established, and returns the channel. if trouble, returns + #false(reason) + -- arg1/ telnet channel pair + arg2/ command line to issue after 'sock' command + arg3/ direction -- usually read or print + arg4/ byte size for channel opening" + + +STRING STRING FIX)] 666>> + +"ICP -- icp function, returns false or list of input and output channels + -- arg1/ host number + arg2/ socket to issue icp to + val/ list of input and output channel" + +> + +> FIX FIX "OPTIONAL" FIX)] 833>> + +"WAIT-FOR-IT -- wait for interrupt that indicates channel ready" + + CHANNEL FIX)] 1059>> + +\ + +"ICP-NETINT -- interrupt handler for icp channels" + + UVECTOR CHANNEL)] 1143>> + + diff --git a/bin/librm3/neticp.fbin b/bin/librm3/neticp.fbin new file mode 100644 index 00000000..2e617179 --- /dev/null +++ b/bin/librm3/neticp.fbin @@ -0,0 +1,26 @@ +' + + + + + + ICP-OUT #DECL ("VALUE" > FIX FIX "OPTIONAL" FIX) (5 8 9) "READB" "NET" # +FALSE ("ICP timed out") #FALSE ("Bad ICP state") "READ" #FALSE ( +"Datachannel timed out") "PRINT" "PRINTB" NETBLK-LOSSAGE!-ERRORS]>> + .GLUE > + +> FIX "OPTIONAL" FIX)] 263>> + + +CHANNEL FIX FIX)] 554>> + + .GLUE > + + diff --git a/bin/librm3/netwrk.nbin b/bin/librm3/netwrk.nbin new file mode 100644 index 0000000000000000000000000000000000000000..666edf8f781879b200f616f9fcd1d1150812c52b GIT binary patch literal 33348 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 literal 0 HcmV?d00001 diff --git a/bin/librm3/newstr.nbin b/bin/librm3/newstr.nbin new file mode 100644 index 0000000000000000000000000000000000000000..e1cbac091dc476fda963e00885d5f69a41c94071 GIT binary patch literal 4662 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 B?OOl< literal 0 HcmV?d00001 diff --git a/bin/librm3/nirs.fbin b/bin/librm3/nirs.fbin new file mode 100644 index 00000000..8c403add --- /dev/null +++ b/bin/librm3/nirs.fbin @@ -0,0 +1,22 @@ +' + + + + + + + NIRS #DECL ("VALUE" ANY STRING) +DRD DADD "" "IRS-DATA-BASES" #FALSE (1) #FALSE () "PRINT" +"DSK:COMSYS;NIRSTM" C "DSK:COMSYS;IRSDAT" "NIRSED" T #FALSE (2)]>> + + NIRS-ERR #DECL ("VALUE" ANY +STRING FALSE STRING) WHO-TO "lack of the IRS-DATA-BASES field in" +"your tailor data base." "improper format of the IRS-DATA-BASE field" +"in your tailor data base." "The correct format is a list of strings" +"each of which is a file specification" "for one of your NIRS data bases." +"The NIRS queueing process has failed due to the" +"The error has been reported also to the" "maintainers of the NIRS process." +"NIRS" "QUEUE" "ERROR" "FORMAT" "IRS-MAINTAINER" "MARC" +"COMMUNICATION-SYSTEM-MAINTAINER" #FALSE ()]>> + + diff --git a/bin/librm3/now.fbin b/bin/librm3/now.fbin new file mode 100644 index 00000000..4a75d22f --- /dev/null +++ b/bin/librm3/now.fbin @@ -0,0 +1,16 @@ +' + + + + + + + + NOW #DECL ("VALUE" STRING) LTIME + IDAY ["Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday"] +", " " " ["Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" +"Dec"] "19" "0" "" ":"]>> + .GLUE > + + + diff --git a/bin/librm3/nstr.nbin b/bin/librm3/nstr.nbin new file mode 100644 index 0000000000000000000000000000000000000000..814af1ab3bab2f5befef0e4b277a2a1e6721d815 GIT binary patch literal 4200 zcmbtXdr(tX8vjBpL@{fkBG2j-ob`pg51{nTdk>EM{L(YOImHUPF?D#gRidLT^VFt+#+Bt1U$L93HK)Zos*a#y4~sS{o~F( z=R4=S=brm}e5e1=hx%G!>pw5NMHEMt9d$1{$i?>O=EonEVk)g2;v7fEHL)SJuidkE zdv6zcT5HsK&J5iBQF$pT>A8^f{9Roj|mp;@N-xl|+ir4iYdi~8xq3M&QO=SGNztB|6 zJ{6XCOW-ye4Gxj&!H$alXqefhyb#e`!zcXg(@UF^;( z)w!#7th?cPOSQdOs;sm&lQ{R*8&d0aL%WEp>hYX8xlJcd%j{_v2h)!AN#bW*moz`s z+|z&POJj$ppt2J`waR>3x|nfSC(To{-N-&7e4b#%ReiGL1Q~hGssp?xCZ;a}aMXVc zvc!od2$>0Cq0^GryiEIQYh;dk8_a&vQw9ex)nNrV8GIVdN%p#C=a@jr#bau2L1Evk zjv_5g=0+6uRY!&Z$XFjgrv@g`z@*^ZWSpT&!5c>d(KEpWBe^LwOCHTq-{_V6H(XU> zx(Q+-uMFhRV&+%5kT8hL3SAA5x)4B4=SCA1&cL~KY*D;L3rgoVxV#BPxD@&drK8gZ z8Eh(kb4f40%6G{Da$p320z!IM7FFc?yA>cC+@wNmt(baKN6O=y_mNTRm9?%vtUIK0 zKj_KR;a~jC0pXthxg)MfJ;ydzX~)SKdAjwYtvl!0$8!u`GCKgux37W5Q^a4;U^96;{a=VGUn8397*RB&DleKWRy33qiT z8N=N;;!5qx-|6g5xcsTmXi3_Q>$6t6BQ|gaew5KbgQ~5VSKdl1=IcL5(eb0{){^l=I4{jpZNE*% zGhF_i>k+dC9xzDui)*Sl2FYfrRkgLnbD(mIpL0HRr}lLsLhZMuR&DRK{zG4tB0?iM zovY1_w0u8>=sf$6_q0lLo2))elQ_X}K|FKa&?z=#l=hIgETWU$uklLs3HM6@q5U?+ zpI-9~p;5}4J%bTbZ#>2uMw#x3`ok{GhJufThMCt63%f1x2i*}w53b*=0mw$*Lf$kYto!k&I;drK&uzLxuM=dv9)pVtZOy>B}&gHHD>X z&%NLseF_*BfKd>_=YSGqdO!Q@vN93pnRfdq3w& z_{|@rmhe~NxMF^DbefreKI#h{pA?t2kv~?zZRYQ{oiOmfQq4B^;(4r=b;X%Ak`@ z?J&1_PU|W$||;s$xCTSF@>E?AG>PlIGY6^_z{5Z0#WsUj0VRI<}`X;1mra`qDn?; zQN!X;fRT~OUWot_ipwcPwlsR3{u>Gbo6kIvJp~C)Ijd%-MP!ZM2b`j?uS!g%!cwG# zmx8Y)>PD}ZTeKR0J~_EXg?&4+l!bMg4LE_0)de$Am#Sp*nUQI8!ooB`JB>u23ehY; zCek4*s4UFmRVWK|e>D6^07J@pfO#~!B$?_8uc*Pkb^g9(%y!dg0yblyTMMrQ5+o6z z3mrihigt<;h5Hk9(SWlS2bW8;WYB3SZ`8N(y{LAL-aguVnPzd(EY-mo!OZMa>CU<6 z&Q(t+!f$hagHk4{aSv(cnB)m2nD4jifC~8pDB0^E_4pI1HYx0=LZ}O)DR@+%>|Hfx z9V#`uqI`OUb=ke8!}Z9yr-!Q-G}Ez6W6IQLLBC&Gf?nbiD)o|&-0zlLt#!R&S-59V z!Ch@~Oq=l{)0A+gLIJCiJ^P_wr&B+?pm2oh=e8P1{s14KV8 zf-$V`|G*#OU?~3301FUOm!miXQ5GQTMq4t<`71Hn+`&fwvF%g$`1rrp3EDf>wT^}v z_73sPiH0qQ)gg#1xe+$sqtjGZ1+mZ^or^6MW4hT!2L&zIREWcK3-9_==phbQ zeB@S}b8Fq@`h=ar@w?m$WQCQU9DY_2M{TjPl5E_gn2Tlz3W(uk)*J#s8Lm5U0t)w) zWK;}k4K|Jq{$J4-ICcvUW}MfN^wy@${N;i#Hu8(2Q&HMfTBCE;YE6j~Mb3y4_<6Y> Zk*fA;|FJ6m>Q1-H&{8Y(7jm)6e*?(1&X)iH literal 0 HcmV?d00001 diff --git a/bin/librm3/nunc.fbin b/bin/librm3/nunc.fbin new file mode 100644 index 00000000..9a38de99 --- /dev/null +++ b/bin/librm3/nunc.fbin @@ -0,0 +1,21 @@ +' + + + + + + NUNC #DECL ("VALUE" ) ["Sunday, " "Monday, " "Tuesday, " "Wednesday, " "Thursday, " +"Friday, " "Saturday, "] ["Jan " "Feb " "March " "April " "May " "June " "July " +"Aug " "Sept " "Oct " "Nov " "Dec "] ", " " am," " pm," " noon," " midnight," [ +" EST" " EDT"]]>> + .GLUE > + + + + .GLUE > + + diff --git a/bin/librm3/oops.nbin b/bin/librm3/oops.nbin new file mode 100644 index 0000000000000000000000000000000000000000..2d9ebd8408b37a12facf78ae68f916d8991bd62b GIT binary patch literal 6327 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 + + + + + + + + INSERT-ITEM #DECL ( +"VALUE" FIX ANY STRING "OPTIONAL" ) EMPTY-BUFFER BS (STRING) PUTFLG + (FIX) BL BYTES #FALSE () % % % % % P-USTRUC % SEMTYPES OBLIST P-SEM % P-UNPARSE P-STRUC [P-STRUC 2 +P-USTRUC 5 P-SEM 3 P-UNPARSE 3] () "READ" BAD-POINTER-LENGTH!-ERRORS P-POINTER +% BAD-POINTER-TYPE!-ERRORS]>> + .GLUE > + + )] 73>> + +)] 95>> + +> + +> + +> + +> + +> + +)] +841>> + +)] 908>> + + .GLUE > + + diff --git a/bin/librm4/pages.fbin b/bin/librm4/pages.fbin new file mode 100644 index 00000000..5b5b2800 --- /dev/null +++ b/bin/librm4/pages.fbin @@ -0,0 +1,18 @@ +' + + + + + + CORE-BLOCK #DECL ("VALUE" < +OR FIX FALSE> FIX FIX FIX FIX)]>> + .GLUE > + + + "OPTIONAL" FIX)] 26>> + +> + + diff --git a/bin/librm4/parsed.nbin b/bin/librm4/parsed.nbin new file mode 100644 index 0000000000000000000000000000000000000000..f8aaff140518fb1883c54adcbdfda1d66716533d GIT binary patch literal 5806 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 H%me-cqtgn` literal 0 HcmV?d00001 diff --git a/bin/librm4/pen.nbin b/bin/librm4/pen.nbin new file mode 100644 index 00000000..53c12f81 --- /dev/null +++ b/bin/librm4/pen.nbin @@ -0,0 +1,240 @@ + + + + + + + + + + 0 0 0 0]> + +)) + #FALSE ()>>> + +)) + #FALSE ()>>> + +) + (8 ') + (12 ') + (18 ') + (6 ') + (14 ') + (16 ') + (17 ') + (21 ') + (22 ') + (11 ')) + #FALSE ()>>> + +) + (2 ') + (4 ') + (7 ') + (8 ')) + #FALSE ()>>> + +) + (6 ' 9>)) + #FALSE ()>>> + +) + (6 ' 17>)) + #FALSE ()>>> + +) + (6 ' 17>)) + [#FALSE () 8 CALL (UPCALL 7 1)]>>> + +) + (8 ') + (9 ' 0>) + (7 ' 0>) + (6 ' 0>) + (5 ' 0>)) + [#FALSE () 10 CALL (UPCALL 9 1) CALLOPS (UPCALL 5 3)]>>> + +) + (6 ' 0>) + (5 ' 17>)) + #FALSE ()>>> + +) + (6 ') + (7 ') + (10 ' 0>) + (5 ' 0>)) + [#FALSE () 11 CALL (UPCALL 10 1)]>>> + +) + (17 ') + (7 ') + (8 ') + (11 ') + (16 ') + (18 ') + (15 ' 0>) + (14 ') + (13 ' 0>) + (12 ') + (10 ') + (9 ') + (6 ' 0>)) + [#FALSE () 19 CALL (UPCALL 15 1)]>>> + +> + +> + + diff --git a/bin/librm4/penup.nbin b/bin/librm4/penup.nbin new file mode 100644 index 0000000000000000000000000000000000000000..bbfc7203d6aaaedc72240da37fc0b85f867da369 GIT binary patch literal 4886 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 literal 0 HcmV?d00001 diff --git a/bin/librm4/pic.nbin b/bin/librm4/pic.nbin new file mode 100644 index 0000000000000000000000000000000000000000..8563b2ce4d3f0a7ca632f3f7b1b609225e3caa72 GIT binary patch literal 7900 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 A#sB~S literal 0 HcmV?d00001 diff --git a/bin/librm4/pic_or.nbin b/bin/librm4/pic_or.nbin new file mode 100644 index 0000000000000000000000000000000000000000..fa93ebb1e4a10c48fe69747671f4bd4ceb15faf6 GIT binary patch literal 862 zcmeyksI9B=mq6m_<{uvelotLpxbDC7i~j^((T|Jfxz7DHWzB+#Kc_5O(EVFf>0IX* zA%!z*e{8w0ApOzV)n?(Zpmb-)FV3z3H~;LYeCqgbk5S^wKPwF0-25W(;myr|8CLm@ z|7IC2c>1rlu;}?0sd9yve!j%@-X1V{KLpQj&Z4PtEqvj(@Eu z_^$pj@uge&50ja@T7Q~qE|~ixC|ytbqnG0QyZ>esesTOYRb)}^7iL$RVi^o9I(0yW3=9Gcj0_AM z3{2dv8lnkc5fGR0caDI^%wK_d3midWOdvwaS;$9PCEq~-!ey{i;Nr4z^m9?LaSRUj zboX<0u~%^S3H`Btf?og6sYweee~D%(ME(@kbanjkS?j3dmlwGk6TiK^vpM&h&K!l* zZ)av~Dg0s{Z|C?C9ASl7?v6jUX}Qk*(ZRUD5vMQW@cV+<%-0>{SRerUBHBQ~H6p~- z&m|TlK!Goy4pTm}`o{|4h11oUfB@nr4@aLc*I;aZVg{=sGG+wQ!n%KD!2NXg#`er_JrWAp-+U!4GvP4<^b;_j Lfb)~PtDOP>e{o2e literal 0 HcmV?d00001 diff --git a/bin/librm4/pinfo.nbin b/bin/librm4/pinfo.nbin new file mode 100644 index 0000000000000000000000000000000000000000..987f4b44ab72c2e57c9d5ac70d1f029c64850f7a GIT binary patch literal 6829 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 P@@hkorzU&c5Ek{nsJJ + +"************************************************************** +1. ADD STATISTICS TO CHANP + +2. CONSIDER ADDING PRINT MESSAGES TO OTHER FUNCTIONS (READP, PRINTP ETC.) +***********************************************************************" + + + + + + + + + + + + + + + + + + + + + + + +> + +"*********** OS-DEPENDENT HAND-CODED RSUBRS ******************" + + + + + +"********* OS-INDEPENDENT HAND-CODED RSUBRS *************" + + + +> + +]> (PIOPAGEVCT) ]> (PIOREQVCT PIOREQVCT1 PIOREQVCT2) VECTOR ( +PIO-REF-COUNT PIO-RECURSION-COUNT) FIX (PIO-PAGE-LIMIT PIO-PAGE-COUNT +PIO-DEFAULT-PAGE-LIMIT) FIX (PIO-DEFAULT-IO-MODE) ANY (PIO-MAX-EXTRA-ALLOCATION +PIO-MIN-EXTRA-ALLOCATION) FIX (PIO-EXTEND-BY-PAGES? PIO-HANG-ON-UNMAP? +PIO-TENEX?) ANY (PIO-ERROR-VECTOR) (PIO-UNIT-UV +PIO-SCRATCH-SINGLE-UVECTOR) UVECTOR> + +>> + +>> + +>> + +>> + +>> + + + + + + + + + + + +> + +> + +> + + + + + + + +> + + + +"**************** OFFSETS ON 'CHANP' TYPE *********************" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +> + +> + +> + +> + + + + + + + + + + + + + + + +"******** FUNCTIONS PREFIXED WITH 'PIO' ARE OPERATING-SYSTEM-DEPENDENT **********" + + FIX)] 453>> + + + + + +> + +> + +> + + CHANNEL FIX FIX)] 913>> + + CHANNEL FIX)] 1026>> + + CHANNEL FIX FIX)] 1125>> + + CHANNEL FIX FIX)] 1242>> + + FIX FIX FIX)] 1344>> + + CHANNEL FIX FIX)] 1572>> + + CHANNEL)] 1688>> + +"********** INTERNAL FUNCTIONS WHICH ARE OS-INDEPENDENT ****************" + + CHANP)] 1749>> + +> CHANP UVECTOR "OPTIONAL" ANY)] 1838>> + +> + +>> UVECTOR)] 2186>> + +> + + +"OPTIONAL" ANY)] 2353>> + +> + +> + + CHANP)] 2648>> + + CHANP)] 2797>> + +"************ ENTRY POINTS OF 'PIO' PACKAGE *****************" + + +STRING FIX FIX ANY FIX )] 2930>> + + STRING STRING "OPTIONAL" FIX ANY )] 3032>> + +> + + CHANP)] 3363>> + +> + + CHANP FIX "OPTIONAL" FALSE> ANY)] +3573>> + + CHANP +FIX > "OPTIONAL" ANY FIX)] 4408>> + + < +OR CHANP STRING> "OPTIONAL" STRING)] 6043>> + +> + + +CHANP)] 6609>> + + CHANP +FIX "OPTIONAL" FIX ANY)] 6635>> + + +CHANP FIX)] 7099>> + + diff --git a/bin/librm4/piosub.fbin b/bin/librm4/piosub.fbin new file mode 100644 index 00000000..6e94edf0 --- /dev/null +++ b/bin/librm4/piosub.fbin @@ -0,0 +1,42 @@ +' + + + + + + "OPTIONAL" FIX)] 117>> + + +> + + + +FALSE> ]> > VECTOR)] 171>> + + +> + + +> + + + UVECTOR FIX)] 340>> + + +> + + +> + + + diff --git a/bin/librm4/plotcl.nbin b/bin/librm4/plotcl.nbin new file mode 100644 index 0000000000000000000000000000000000000000..f600f7f71c6c3c66c86127f058b630a5260e3860 GIT binary patch literal 8072 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 CK9RZr literal 0 HcmV?d00001 diff --git a/bin/librm4/plotso.fbin b/bin/librm4/plotso.fbin new file mode 100644 index 00000000..b2425d4b --- /dev/null +++ b/bin/librm4/plotso.fbin @@ -0,0 +1,275 @@ +' + + + + + + + + +> + + + +> "> >)> + + + +> + + + +> + + + + + + + + + + + +> + + GRFUNC #DECL ("VALUE" ANY "OPTIONAL" ) GFMUNGER GSSCALE LINE_SEG GSTEXT POSITION GFMUNG MAPPER GSEND-UPDATES +GSEND GSREMOVE GSCHANGE GSBLANK REGRAPHER AGRITCH GSUNBLANK GSBEGIN VEC_PLOTTER +OLD_MAX OLD_MIN OLD_INC NOERASE T (ANY) MIN-IS-G=?-MAX!-ERROR GRFUNC % GRF "FUNCTION = " " MIN = " " MAX = " " INC = " " +" TITLE GLOBAL_GRAPHS GLOBAL_MAKE_GRID GLOBAL_CONSERVE_SCALE OLD_FORM OLD_VAR +VARLIST MARKER GRAPH "FORM = " " VAR = " " + " [LVAL GVAL VALUE] " = " " " #FALSE () RBOUND LBOUND SMOOTH-TOL +TBOUND BBOUND % X-MY OY-MY NOTHING-PLOTTED!-ERRORS THIN-PLOT +PLOT GRIT_EXPLNTN_POSN FANCY_CHAR "plot +" PROG (GIFTEMP) SET GIFTEMP READ .GIFTEMP> AND +NOT EMPTY? LVAL REST + #FALSE (NO-CHANGES) % ANONF1!-TMP #DECL ("VALUE" FIX "TUPLE" TUPLE)]> () +NEED-BLANKING HAVE-BLANKED EMPTY-GRFLIST-ARGUMENT--ERRET-ANYTHING!-ERRORS + % ANONF1!-TMP #DECL ("VALUE" VECTOR +"TUPLE" TUPLE) J (FIX) X-MY]> REGRAPH-INDEX-OUT-OF-RANGE--ERRET-ANYTHING!-ERRORS + DUPL-REGRAPH-INDEX--ERRET-ANYTHING!-ERROR PLOT-SEGMENT CONSERVE_SCALE XMIN XMAX + YMIN YMAX XMIN1 XMAX1 YMIN1 YMAX1 PLOT_SCALE ) (T )> +NO-DRAW % GRID-IS-NULL GTOP BOTTOM RIGHT LEFT DGTL +" " BSPACES DESIRED_INC () XX GRFNUM +SURPRESS-GRAPH-NUMBERS DFCS H V -H -V H2 V2 -H2 -V2 FANCY_CHARS GSTEXT +DEV-DISPATCH ("()") () COMMENT "TITLE: " OUTCHAN "X-AXIS TITLE: " +"Y-AXIS TITLE: " "DSK:MUDDLE;UGRF DEMO" "" CHRS "READ" RINCHAN "INT:" % INCHAN "BEGINNING" % "DONE" Z ']>> + .GLUE > + + +"OPTIONAL" )] 183>> + +> + + )] 606>> + + +ANY "OPTIONAL" ANY ANY ANY)] 1035>> + +> + + ANY ANY)] 1580>> + + +ANY)] 1722>> + + VECTOR ANY )] 2049>> + +>> + + + +> + +)] 2114>> + + "TUPLE" )] 2149>> + + + +> + +)] 2886>> + +> + + >> +"OPTIONAL" ANY ANY)] 3587>> + + )] 3646>> + + + "OPTIONAL" ANY)] 4597>> + + )] 4801>> + + )] 4831>> + + )] 4861>> + +> + +>> + + + + + + < +OR FLOAT FIX>)] 4925>> + + )] 4945>> + + > )] 5034>> + +)] 5128>> + +)] 5205>> + + > +> ANY "OPTIONAL" ANY ANY)] 5261>> + +> + + + + ]> + +> + +> + +> + +> + +]>> ]> FORM> "OPTIONAL" GRFLIST)] 6214>> + +]>> ]> FORM> "OPTIONAL" GRFLIST)] 6315>> + +> + +> + + +"OPTIONAL" STRING)] 6742>> + +> + +> + + +> + + .GLUE > + + ,CONT-L-SEARCH> + + >> + +> > + +>)) <* 0.99999990E-1 .RBOUND>>> > +> >> + + diff --git a/bin/librm4/pmfree.fbin b/bin/librm4/pmfree.fbin new file mode 100644 index 00000000..78919456 --- /dev/null +++ b/bin/librm4/pmfree.fbin @@ -0,0 +1,17 @@ +' + + + + + + + PMALLOC #DECL ("VALUE" FIX +PMCHAN FIX) ![0!] PWRITE PREAD ![0 0 0!] PMFREE-ERROR +INCONSISTENT-ALLOCATION-TABLE!-ERRORS COULDNT-READ-FROM!-ERRORS +COULDNT-WRITE-INTO!-ERRORS ILLEGAL-BLOCK-SIZE-REQUESTED!-ERRORS +CANT-FIND-ALLOCATION-TABLE!-ERRORS REQUEST-TO-FREE-BLOCK-WHICH-OVERLAPS!-ERRORS]>> + + +PMCHAN FIX)] 112>> + + diff --git a/bin/librm4/ppmap.nbin b/bin/librm4/ppmap.nbin new file mode 100644 index 0000000000000000000000000000000000000000..b2496ba278220935c38595ad87fcd12350540c6f GIT binary patch literal 2504 zcma)8YfN0#7G5*F20F;_7+XYTQ>e@Ug`o_OXyfIyAT)wJYk^h=N|B*0E!>7!tW^wG zrxZycpegaeP}%^c4MosuOiZe&?GI|O;^PKya<9=^8xm8@wE$dWzW@xDx*6K>%mupjc ze_^%K)zEJTloDM+jig;?at}cR?%kB;y?KHX@yMk?G4PUISO9>rq=&7bN`wG^LrT?Q z0B2Wwo66ZW1w$l-a|yDWz~_-T@I|x@R7n{CDw^}X$DH3i=KNR9dG`=iSrDG|a6sV$ z-jy>MK)llqaFI~G^Ah+RadSC_`)+B10BO_=@3=`KQ;P-(rQ`spnFgJiR)<55WxiDm zOIcoK1r-2%Q5Ca7DZ9@y|B{^82GQwHS%HZ#zWjgYYq22hI zcRmOp5KWDN&T2E{p(8G41f(>9s>h5O0Ce1p`Qq+|I3&n40r21oqa2(gFCS+YZo>!S z`#c>^Q@uwGkO)>t6jeTLp|liNlbCN4tP#~&ur{N>GJlu|SfsONct%{)28racjiilS zqGP_8c7P6mc6DUeL+G{@)Za3HH0?Pz+DPa=LWLDH8QHH$!It?K()POTTFCAYLp0W7 zm$o9QE%QeJ;w@boj*;%8M?$5 zoRwzSKn~0N#&|ZQ+;4?45!&10u|Dd5$Nlg#VVYrhFcVb(n0UxL=%r_^B;cn3)zW@l z@u2I1mF3AjHPeDqGbZ#a6D6!&>Af*3DEfxnol5Ub*5gY3apS8lr!LRNYn=mf*)7(u zgjdf9imvwZ%VPMgS({5&&z@ZD8=4-Ft<)!U-Q`C`eez2A#!?Mu<_LRIikIKE!Vo91 zrSQ=$*|$&U!#}_`3p1^>;`3{_hxWr`5QyrQZR;YkTl}ga3WCvmYtn&0VIlY?#Bkr7 zn3RH|1@-q3%~kpNPbOahOuP_KA0}U8OZ~EW27T$1e?9rfw@oNuL`!jZ*KWY%Q{pk&;ZfcOO=`tFn^C#Ip z>Gg^a4vE@bX?0S;1DW-bR+oBEI=AaX9I8?UscVzi=l#x$;@icZm?3HS7uT%_eu%kj<0Z>I%?#w?1 zA>I_C?1|)w$`9`fq(KpV6#;ig`jC2`Cy~Jr1 zqt}kD2gpt);tE496{xBl523`Vd5QBpU%fcqC_-ax&IEHM) zACVNjCSGqiOj4wyX?AlfN#Tf|?I0;wYfSKziwXR(Tng@0E@R4L%gZT7jAMnklRq)HbFJ!F`_^pF5uKwM$b@kEPdM9mbq+jQz8l{bMtU-Ee zr>Rz&uFMjo!ne)!(zORM>k9i*o28M+Nt9+b)r#6Gd!00Wa;jO(wA}Sz^Hvb}Z0WFa zVRU1s>uY1BAWApr?bqR7g~MWB)oHq18M@7bO6ha6lS*ju4*Va8HhwH>=kCh!h=l8% zyzz+R#sOU0cYiUeJY5`r(H)Kdou@Vz+aX`L!AivKb}aUh?k9Sef)3z$ z#|K!HV{7i_Vfp=7yQe2^XjRH@eR{?@QD1&$$q+ub(i2@_wO9E@e?4!+e*`J{?x@{q ywD)GkkNzP_JgRe2{?J@q+*vgxNwC$K>U>;D9S%%}zc literal 0 HcmV?d00001 diff --git a/bin/librm4/prtuti.fbin b/bin/librm4/prtuti.fbin new file mode 100644 index 00000000..a27bccb0 --- /dev/null +++ b/bin/librm4/prtuti.fbin @@ -0,0 +1,102 @@ +' + + + + + + + + + +>> + + + + + + + + + + (LINE-LNTH CLKINTVAL) FIX ( +MODTIM) (DPRE ZONSTR HRSTR MNSTR) STRING (DIGSTR MONTHS) +> + +"TNOW -- RETURNS CURRENT TIME, A LA , BUT ONLY UPDATES + EVERY CLKINTVAL SECONDS. ALSO, SAVES STRINGS FOR PRINTING TIMES + WITHOUT GENERATING GARBAGE +" + + TNOW #DECL ("VALUE" ) P-ADDRL P-ADDR FIELD DTNORM HOST EXTRACT-RCVR EXTRACT-HOST DTNOW +% % T % "REALT" + % ANONF2!-TMP #DECL ("VALUE" ) T %]> % % % % % % OUTCHAN "***** " +" " " *****" "" % "77" "78" " at " "and" "," % %< +RGLOC LINE-LNTH T> ", " " " "Message:" (CHANNEL) "----- Enclosure #" ": " + "-----" ":" ";" " -----" "READ" "Cannot read file -- " "19" "-" " +GC-READ" "READB" "PRINTO" "FILE LOCKED" "PRINTB"]>> + .GLUE > + + +"SCROUT -- SCRIPT OUTPUTTER, INTERSPERSES WITH TIME IDENTIFICATIONS +" + +> + +"S-TIME -- GIVEN A TIME, RETURNS DESCRIPTIVE STRING +" + +)] 254>> + +> + + < +LIST [REST STRING]>)] 420>> + + +"OPTIONAL" CHANNEL STRING FIX)] 531>> + +> + + "OPTIONAL" CHANNEL STRING FIX)] 712>> + + +"OPTIONAL" CHANNEL)] 821>> + + +STRING CHANNEL)] 962>> + + +STRING CHANNEL "OPTIONAL" )] 986>> + +> + +> + + "OPTIONAL" CHANNEL)] 1436>> + +> + +"APP -- GET CHANNEL TO APPEND TO A FILE +" + + STRING)] +1744>> + + diff --git a/bin/librm4/psampl.nbin b/bin/librm4/psampl.nbin new file mode 100644 index 0000000000000000000000000000000000000000..df75e0478fc35a8f0b11abe212601a0e4eb6af76 GIT binary patch literal 3581 zcmcIneNaAv1g8x)e50`1b$DPfc0p26hp!z#L=sytfx3dLTf1}? zt!2fboq=tsDQ!nmuqsAd#*THzy6sMdNmo0z%XaK`)-5~hreXTt%S!;+dtbiQe$Mp% z@h11)bAI=nbIG zen7Fi`V?`q!>?2x_8hfW4siz)*HW{?e|WCTW8S%*@?5i8o(Kg^rL45#SO}=qeac?o z1MP2^>gPT-UZc3b?I2(BnC%;T+=le2Lv)<02B4g=0PzG(6oO2X65*&M zB_BnDVy#Sp z0lK`Zga`;yAjM)PkYI3yCPmVxbGQPhP+ktXn(6s_Iiz&-4Y#C9$X*okBG+wZrtAl%Ll{~dW% ze-1n4*v^E2oj542@3&JIZs&{sczRWT4m%y#&ZK~yIG+2y+fIDZXTy_6fkEPU5WIWd zA6_pK)7x!|WO`8sL9q#hK~y+xDg+j)0Xbi%jBY}0rEhshqWL>7r|}X`un8|Unyak zPdBHuaZyzU2@q9;c5e;LUthQgpmM?(Oh6P8DlXl(=g~H$8b`kY;+%vWDxAa%V0H?U zp&t}Fr~|narIVu*374;tOFAFZLj<6FO~&_{15y$yodP>df&*Dqydiye%k5PI5DA1D z?sLMsu+j-L@JkRELZ*}02VG8rgJ(ci1$w98c{mM`251IH5wt^;9$?+Ftg;HHcnoB` z3*4RyXPyC(0iT6N$$e!>%S~c6P9HRUO_@a9HJZG7+@154_K<5P?aC;3vM=+9`^9aR zE>GM}vf2~-`jnNieKGl}`{>rc4sloQ>jyoj^~>I7HOaOPw!HduGcB(!G_zy11s$wh znPFthUOLyxW=x-e(wz6Y2zc8{_l(|M% zM$&|tZT%AhJrSSX!QM)=wX)LqabycNNRvo5vsVU?T0wo-!z6YaW#vY^?*&-#t?va= zfNmy8U^TcI`lbhg2)-dOW3YYbslZFHM}=lF79*HmBz6bw(Mtfb@KfQ)J+x{>N`N1& z?>p;miY3*EUVLXEPk0l*Q}}^9gnxiP_>8;M@QcSAkif4y&Lu_lU;hqsVFeASLHG!f z=RHhs!=JzLG@q#fdh;?CZBD&3NH0-s?M6vDOu71(U$xRP{*UX!l(K%$Ze`%}U^?ag zWXB~x(Y{hNH8 z-eSQ{_m%d~Nz*o*X4DUVV&&S&sq@(8gy8LWtp#+ecm$e4jCbn46cuJ;#NWQ$KzD=& z&(%01B)D}4nb*4;xL?%5(fEm%$EPj#&5Fwuz3S6byV$nGbGulD60>45`n9q4E@tD- M4Ez4?ttFTIADWZkyZ`_I literal 0 HcmV?d00001 diff --git a/bin/librm4/qput.fbin b/bin/librm4/qput.fbin new file mode 100644 index 00000000..4fbd699d --- /dev/null +++ b/bin/librm4/qput.fbin @@ -0,0 +1,28 @@ +' + + + + + + + PUTAWAY #DECL ("VALUE" +STRUCTURED STRUCTURED STRUCTURED "OPTIONAL" APPLICABLE) ERROR ILLEGAL-FIELD-NAME +PUTAWAY]>> + + READ-PUTAWAY #DECL ( +"VALUE" STRUCTURED STRUCTURED CHANNEL "OPTIONAL" APPLICABLE +) PUTAWAY OBLIST ERROR (LIST) #FALSE () VECTOR LIST]>> + + UNPUTAWAY-WRITE #DECL +("VALUE" ATOM STRUCTURED CHANNEL "OPTIONAL" APPLICABLE < +LIST [REST OBLIST]>) UNPUTAWAY OBLIST ERROR (LIST) T]>> + + UNPUTAWAY #DECL ("VALUE" < +VECTOR [REST ATOM ANY]> STRUCTURED "OPTIONAL" APPLICABLE) +ERROR % #FALSE () ILLEGAL-FIELD-NAME UNPUTAWAY T]>> + + MAKE-TEMPLATE #DECL ( +"VALUE" VECTOR ) MANIFEST TEMPLATE-INDICES-DIFFER +MAKE-TEMPLATE]>> + + diff --git a/bin/librm4/queue.fbin b/bin/librm4/queue.fbin new file mode 100644 index 00000000..eb6f5331 --- /dev/null +++ b/bin/librm4/queue.fbin @@ -0,0 +1,45 @@ +' + + + + + + + +> + +"FLUSH-Q reinitializes a queue to be empty" + + FLUSH-Q #DECL ("VALUE" < +UVECTOR [REST ]> ]>) % QUEUE-SIZE OUTCHAN "Growing queue" T]>> + .GLUE > + + +"MAKE-Q creates a queue" + +]> "OPTIONAL" FIX )] 46>> + +"REM-TOP-OF-Q removes the top task from the queue, the rest moving up" + +]>)] 108>> + +]> )] 125>> + +]> ]> "OPTIONAL" FIX)] +212>> + +]> FIX FIX)] 327>> + +]> FIX)] 379>> + +]> FIX)] 500>> + + diff --git a/bin/librm4/rb.nbin b/bin/librm4/rb.nbin new file mode 100644 index 0000000000000000000000000000000000000000..251f3097e3f88c7f7be5d8ee84ab6570e47d83bd GIT binary patch literal 4007 zcmcIn4^Wfm8Gix_h(u#W3&d+*k=0-WBwxOSa7U?MFbW%g!aom)J4z9g6k?iDH*M>! zJGN?zX}QB*MZ6hZxyh+h{@d%Ww_R)NI<&O5H?4HHb+^s+6vOuA{gSvId)^NOV!3X+ z-Ezmv_dW0Pyuasp-skx}$<)c8+S)_k`@{PkVnUzADqV_uSv^(0=_4? z(tbvo=&d9EW;$6r>ZRJx3~n*WKF~-@Q-+(Rq;Y0pXSPQN1X^kzZKSQoM%!pnYHl0N zn$SDwp$X!qWwk>s^pcuGS=xv|v+IT%>7nj{X4Er!=mOeGQMgeH0T`vhISH zPTEj5nQFp>rLq7g2Ab&Y)C(S3lroCmr;K>emq7#^5btP;4@4@ONKfcg zS^<-t|GF%tKU&7^4{DORMseBivFe^V`JNE&xAD!=2R4m^7Ono}iLmZ(R-d@~Nxy^M zIqa{XyKNiyVL5)>5xVrqMZB$sOd+^J6(#c>M_E!G`MQ%SgVEq-8N4ML+&cq)a3Q!$ zTFJn(I-`Kj$Uye!Y}Cq;bJ0MZEqk+^i(1mCq z69eM!OQ)LwxuVnQq8~D#L*r2qz49;vs*g%t(geHTl;J3#)By&hj|S4q5w*=nDZS<& zI~_Xp$aUnG!3UA-}kgYd7HLj_^`yK0w>``f| zf}3plzOV`FN=$GMHA~sGBiNiNSk&$w&O?D%mg;jMI0L!rz4q|oFZ>l4jB!4|eUb59H63Dd`jy^L zc_+Ug-Pqs@88R;l!Ni7w{bHn3vSN=@bQ(9L8G7VBS%e;zrQoLLpr zJhZjzZZh(&X!;D<=M}rzJwuk4yOAt?M_C9HW-q;EH?vmLyQQq_gH5z(mJ>bHH;zsG zi#oJDb1lm8H5bGo4>(ms2mruiBD?_0 zjGPlDA}?yr+zP! zIbpf{6!Z;&L0&|K8RCNn+7JFvRGpiiCR=I&=uLpqpdSbIEna<-%uK2W00_$r{9c?C;x<{pPPelIB5E`)yY_TY~K3Ld@%m_FFDKBuG{ z)|z28C^iFFN@3HpUkzzMJ)?Z<$UlGg)p-Ct#H66IurtTDx2_0M<=q03n3yk=Z6WzW zRaIF3SL;iUlWiq6)&i2v{*ioJO*PTZe$Uu2cG^nT+j&E7o}Sa?>hegIK3AV>HtS8i zl-0?3jhvY?;P(O?JXto*&FPJ~>%UtdV^mqIw~@+F(du@&q&{D)q=N4b!TXDpRD5(v zVaj<}%@#FVHp(SM2*6V9L-FwjR%YrsS)443F0&xn(s1XwXubG3y=8Od_z$M{?7z27 zn6q6zXFJ7g_c7c5oUbU zS6~mjml6v;5(JZ-a(uH>LEpLQJMuCg&>{}}_t?>$|KVbet|!>3WOD+Fo>tnum{A;vQp6vVb-IXTR@x;abcKmeJ?fMOf--#K{=Rd7h}**NetHM0^W=zkS4Q?%$7)u02w@TPzH}r z0r&)rGNCe+C9{N@3`+xm%T}3Wk$MvXxVw>&EH--rYx^WvImzwW%&gc4uidUAl@_vL zi?y(XXwtW{*~plyxUjmW(n^G~y4kynSjL9r{=N>@ zfZ}Q7a0P}w$Kh!Z3$PZ;lue4w3)p-Zlx8RlD1HpvAlAHq*X@BAKOBHK6=XmxTF4CV zw%MRD5c3SY4$D%Y0OHM%8&K?o8i>V?4>8tvqi$0m=3VH8Wkq1Y^ugl+#WP?JD3alE zh;`16gXy(9;e8APK>qrsTx1}G&UI$LIzJFF1@d^98wPnM9nt3+%zECW*Wm=vH%iLx zQJ2oFBOJYwcD^w$k0S + + + + + + + + STRING >> + + + + + +>>> + +>>> + + 3>> + + + + SEND-RFC713 #DECL ("VALUE" + FIX "OPTIONAL" FIX) EXTRACT-ITEM INSERT-ITEM ICP-IN ICP-OUT +"CHAR" % % % T LOOKAHEAD REALBS +FINLEN "READ" NETINFUNCT NETOUTFUNCT (5 6 8 9) "Net channel in bad state" %< +TYPE-W NETLOSS LIST> (ACTIVATION) % (FIX) % (STRING +) %]>> + .GLUE > + + "OPTIONAL" FIX)] 88>> + +> + +> + +> + +>> '(5 6 8 9)> < +FORM RETURN > +NETLOSS> >>> + + CHANNEL)] 364>> + + ANY)] 420>> + +> + + .GLUE > + + diff --git a/bin/librm4/rjschn.nbin b/bin/librm4/rjschn.nbin new file mode 100644 index 0000000000000000000000000000000000000000..7cd0ff9669e4e9675a9f5688aaf563b7358544e6 GIT binary patch literal 5392 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 Z^WD65*lQ|Wa`_#yI<%H$r69U_{{b#d$uIx_ literal 0 HcmV?d00001 diff --git a/bin/librm4/rjscmd.nbin b/bin/librm4/rjscmd.nbin new file mode 100644 index 0000000000000000000000000000000000000000..b658b9bcae869d18e6bdc9451752602174db4019 GIT binary patch literal 9797 zcma)Ce_Rt+w!cY6#0nZvEQ;C@v4Damnf#b+-O312P?UhUmGZ2pRfs@A(TZ(-ul?|R z=(4O(>b9(<;17x^>nau7`q|g_*4iKVUPTnT-EO;|wXLnS+8UpeFf*?D&Y6&mp-DA= z40Gq+^F8N$&$;K`xx@ASui0yaO&30@p8GoRBC8FPLAYs))?Ls5Bqq{@p+ZG$~wzmB_}Gqc|dHGIgH z4Ozp72n`#2+V(g;;Q0LZWqU+dB z%gVU>y;D#;-x0DTl@L_{Pu?Mk?mxdus%Qdw>9lY{c*2qyyp|#=>`e~YtDumyN}}Pl zNA6sqGge)D`a!yc+Tzg>5;cpIP`Nz84hlNxuu2lct64HDWop>wYwjW=S&p(4%3ed+ z>i_%BNL}%02}uN5lH{(34*BBJ);JIFDm3>bnma!hERBjFDs+DW5|)Y%D&#zf&*mr& zrkKGucm2P6C1SBxPZm{@5vXV;t*#^!c@;|-w8f3KJPYgw~t<*6$r=y<#77 z@HF~?91vq5{2;Ohj`ToC@Kgh)BjE%Yw3-3Aq4X4lhG9(V6AGkTZ&?;tO)KB$zMQAt$Kf zOR%~h%op#v^s~OqLSG(J3{uD-A$&sKCy~AuAOqKCp72@>Vq0 zTRE_KAlTr*{J%%#K$NaP4nod}IY|8~|D3pSpWJ_-7#Ya@xdl9FTmbNgc`mt2u3WjrYy~oq0-iX)U87^{96ZgBI;mpg)4>(Qzv6H z*w(>_vJQpzVJVO1#-Xf#u~bh9Hu%0%-tJv2)d>iC9~(FmMyqtF+Ng7b1gl)$UwV3A zYl)t=$l;Lrm&*ovFk9ZR$-P0sVL(%Yg`+}VJUl(HTA*wdI_`azVh$@CE$>aq{7N!f z=?J!-Vidi5Vho_NzC_^evtropSb>uDqV-FI#T~u8CVPpd?G82spRpL;jbwp$SyDI4 zVtzLEARFGTKB6=$P5NO13t4T=pSqOD`cd}XXY8yPyDI-o>k4J$FVM&>GCU?M1GZ4# z++_>Ag*<{#TZhs>voJ^+cwaNHzWKND>NSCe`u9wldVi9{=y5NP-k*kxW>+X1=c0}B zA~wAG$?GJB?O8cpg6&lK@NV@j_l4(4BvATnEgx=FUvXa`BvMKuWD0KM;YA1D5uvxn zf^U`8sBODKJz6ynpZ#0P)R7}1_?SaPrM%9e@}F1*dHEyKGzNQ>t;6tb5Dpou&?LX% z;>*f)T!*(=Xt+QQYSgqE?!3hTI-Wt$a%FnpkVyYvxlpB{xi2Ww&Aq#ux=zz0sYT#I z^rP;V;RS}Q898PZ%4YawGf>ep9_{lgH^yTcdd?wKP2k(&e0;XUmy()VpP0G;@g{^4 zOGmNVAY$*LHsC(EwhR>8rHG;Xb-34k#~y+N`0(7NOXl zVPdFl5o+5WN^CKTy*x||wWXq1Z78v96l<2nFpIS~xL!%+pFI~?g7svtub!0MM?FFG zVTDhrC!fmo#D6S+dsR(`uR3e`m05rq@oYeI1P%S^qT@e9fJ6*-NU{`tZb8?)%2BU> z(bt?os&a5hD|XzF4Z?`6K?^Qn!fwXqlS(sKp{L{FTmfp)Ydg@=vuLRu3-dmuAo*Sn zG@srl;kiiofg!@F+4o8Kl|Xbq;Z)%;!qKa0u$FoZDab<#+HsP0$TdpYmXeH-`U<4) z4xO=r5RcPHgFlR!(2NWQQ$1o%DV3TT5q8;#(M41Eeyg3N@MlD5& zz(tVyB^nuQy?PvtJdVAEc=xtEfn=0nQvsDLhq2jmo?|7!MTW{ol_x^)GyDmASH}A` z0#T@FEMBwM0^!HD4c$D3p88#NU1W_jt&szsW zQTGG_ysKOfvRhya)SYj-DK}4Q$`aj0np2iL_=9~S9HQ4_8LEf#&;%o%sl(mn z1S6bo;@uS&X}xpD1;e0XX}#kvVaF|^(vi`Ti*vUcWfZ)qZkB1&_X>@PZ3~6Q)gN>2 z@J_B->dK{Sq^573oOrG*zfh?9_DqdUP(SDR3-M; zxsP7tTKK511`35ubT21uTHD(y_Ds)e7CIfa8li4o&JKS3#gAIV>j&ssv9YMPQwmSC zf%5$)ce&r}c#q>ZwtWoWh{h*#{E_5^&7!LhJ{fg4{EhxP zDYF4xxV(hpmpeXa=ffM~3;1#0{L#k8Xyf+@#>=0!O1V+AP0~90kBIz!+6Eu3P97Gz z@LBHqv)(&Cs^dHdACJy+d}h>a7}5?#W=7@J3Hp>ar}!Oxs#fTpN$(O&bX&d1HvnOo z0N{>_|FA|nHZvI{en-Q%E{6F@8|eDbOy$GnG|+T&ubMA#dA&}X&TodbT-m9 z;aJ;yz)MM9tB{*ZFCKj9z{jmZNuuot@Ju@gd!o2b2;NDjsOz)0i>`ycyZNYMZim>o zhDI}FUg9}EH=(~qSQdYHpS0{t8`#qJiBr5$G|(iJBmr_>@j^~`(Qy*Q>CGbl)%z>K zs@zV|1farO2?I`%IRIb&Zmd7qBJ4yWHahyj{f78@k%`~W@%9b*bz=8SNT2U!U`~Gj z-d@po`7|agI3457rWxC$+;4Mg`RHPMr&PBV>^lT{g>Gjy1Zq52E4^6Cfuc*v9DH^> zTqos2B0(V?Ua6H&#sXg9r4`FvK0o-lM?%PNCE#i z?YB8Qgj|PhmwRVIFJ#Hj=d??ZVLRYc?x_~wG`&VV{XIlFs+hieTxJwbgTx#sNSvyZV&dN~;A4^tII&>^ zpm=+eZS^p%-iOdSPwy7{FVQfW5HzaobhA7M1^b5dMt8RyM$E}AtCuuMd+3jSLB>#M z+XiaI@PuB-Q!OSJ&b2eG(z!J_Yxlw2+Jq>W*?guiU$AJ&{uT=7*V{O0 zw>Je2E18I7xA_3H%Q}T+PYyT*Mw?U5M;-haK2AeYV%o8sj(n_nX}T%zRW4*7M%g) z*FWiiseAe`Br8t#X=nF}M~gE!;k;uRPF*Pf?)4wENINljQ5Qi`PvUt_WcHnHmvUDR z{1ku&gRlw=DN2SSXmsMZH+msyE!w~i9(5?NA26_ad26}X~bqN<2ZOHFl+>C@D>A}?slU6DIAkGUds8qO8bqe&$C zBK3MQbA{UGdLTkw>I$z`{lgWOty<}#`p6wJ+D_&YDv3l8Qba}&l19|HA`)Tie;s>) zP$lZ8i8>7qQ1F*AZBBNME38NTgNqy_aq_eDl&3~#cJV5$~Cr6 z^EI(%YBa9V1L|w8(JR#F$gCpuJlCl2)D`4myP6?0Xf^E$zo4E&rs-7APqnKyxkl!z z&bda0tKM~m9aQaeg%zoGk=P{FBjmwwmEJWXUzOt;FUP8z>aXRdEq~0!$(6Zj z>Mh>p63djF$}Cy~8yNW6n8zno-_CMrqU5Hq>Kgme?OzC*ao%QL;mO>pk|fP~xtTs8 zVR_o^kE%6;a&!KYMCi-~0n>|ko2UPf_vB0jfr zsRn~y=c#YDI6UF8Zgs7|`*SL&sRr7_-%EW?6jR+trZ5nfz|P&R~#+(lzpZv z)tePQtQH!~u$T-6MsET$O}fE|I8(93tf%$Bvx)WePNLVD%@)>Vv>J`zU?J=9l)Z9v zo#${v>RPh}2m@Q*S<8=p{8*{UYGtiD#PR$gPFK$8Oa`!6XSV2#dMnE!4+e`Keh@h1 zM`zKQO-73+Del-t1B@|x4#gd>7))7lqTFN!13Xv1=&mv_W+QE6^(Mx^7lA~|&{B|M``$Mw{_%rFudNYI!^2VTJS+mjV z$&PI+1T%Cd&+LEcTE|BebZs=TX2xP`-W`(CW_U#Ht z1xN$NWH#s_px~3v!k8@vBcy`a%6hIg7#t>xSqJv$&8ESWNhdhH*}zx~W|P%`X;$I6 z`nO|Mo*zDMbLb$oSkE6P8@a)Vza3v~fFuFpfkNP*yWDI64lD+P#b{z#3(cB9li6(0 z8ELD<3U`bJQjRe~n#H|U%IJX(PwEP5g(q_I(Tyw(2Jn_uk8%$@FxR#;!_K8I<`%;2 Hdf@*7PhIl~ literal 0 HcmV?d00001 diff --git a/bin/librm4/rjscrd.nbin b/bin/librm4/rjscrd.nbin new file mode 100644 index 0000000000000000000000000000000000000000..a59fa3a0c6d61835a0e65c0251fc5e73dce813c9 GIT binary patch literal 11182 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 D8uyq` literal 0 HcmV?d00001 diff --git a/bin/librm4/rjsjob.nbin b/bin/librm4/rjsjob.nbin new file mode 100644 index 0000000000000000000000000000000000000000..ce84f1de9e30544a9f119cab98c66a6fb76cfcb5 GIT binary patch literal 12685 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 literal 0 HcmV?d00001 diff --git a/bin/librm4/rjstel.nbin b/bin/librm4/rjstel.nbin new file mode 100644 index 0000000000000000000000000000000000000000..68ae0fbe0b0002c6011dccb9a53649a293ca8a8a GIT binary patch literal 11981 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 NYIG#sq+jO?{67K)T?haG literal 0 HcmV?d00001 diff --git a/bin/librm4/rjsuti.nbin b/bin/librm4/rjsuti.nbin new file mode 100644 index 0000000000000000000000000000000000000000..1a41d03749b92dfc2caf24d0a8e42846fec4ef83 GIT binary patch literal 7895 zcma)B4RBOdmOkAH`5^&15dK8)rV~g966pV*F+#s|za%Y5cSt%Tm_dSBOu!(Ch=9oI zROnnjSdqiV^++W;b6q1NbkY|o(2M`Q4&n>IgO(x5!E{tD-$9Gm%nSFG?+6U5HBzp2Rto{CvmVo@FqOp|uJZOsNrERTNe?_|J z8GeU`Z@?XmHMot;fF_a_jisq4Mu%yB&)#B;9Vy%?^~PA`n(I6HKx_fN#(${;@ja(w z_8X>GdN*0r-dmh%XrK%n2v6PCU*FP^{0`N<&D#RY?_lCnmy7J2rE)kl`j^cUg_it18GP#5QcDHk{qapL498WuqtH6ap8{{xIo;nGfkT2=*pwq5q zF>P9FRuTsD)gw>Onv!sNJh5BfJ-}gI=*&9qAZfh*`;8-CpN5Z@%xHnuNMp)5$0#*C z*EqE<+Vd_%PZ;ksbeRHB0}}ukXorqh{o{RP#+&9wtFE>)-u4G^cl?yTuR`uwdtQiS z91{-22Uf7{F{xYVk9}L?>5(l*!~;@J-}xi*iT!=ONah#1VpodJ^~eJY&v#0hkJRps z?fbIt#rVMQg?`zh3+_bY%c0n=9N)os&w4-p%Bx5IYi7IUQ_UAvNjU`{h2*+|3wx!? z92Sb7DSST^|A)1GhvTP?_zucfy610?ulOd=Ax&%kuv40TA6q`W|F!eIa!a9jB3Ab$ z>mMGR`pd)ew}t0~aZF9dVths8J7RKHJu&N_1BY)cYVu(?S-4b?+UYxv<`xN3un6b3 zt6QHiG30ZT3n${W8-y2QJ!=jL@m8=3hR$l}JH;wLhNux1c`9Zt!B|9~tVREITBfeo~ckPBJ{Isl9Yo*4!8 z?veMl!9hqtr=s=g3GOW>Cmv;La?@K^KYn^6KoC;f0LpwNj~H(LPYdjYj22i5={4X8 zYhHzQigE3=S&@xT8$sZ=Wj@ox&YQn0hTVx<>jujc+ja2ZSZ{g8$o043u=4Klilfa> z|Ih%#Ia5=bQRYme*i%m~AGL!(uW!Smcd|Pc~aE4u{F1&H|F=iGJ{xF?PSP0#tJ!6BMc@C_wTYSRHj~YWE}SNt z(`B}@5>xbFe&lR+IgBqmSmjq9Z4@Ylk~(A&v4G92_{g?wNc2NO>>@iw{N>f zGnm7_jTlUjAkaU|aq?>L3)Lb+F{l^3Vs*eTO)u>0 zs1!ZRnNT61U;IxmWpr2X^VbK(y2W}HWO_Q|M2o$QUWpCn3;SX{k1iHhGi>zHGwGtz z$vB2c;meR@h;)9-$!4P);68%-EI`dN12nkt0F6ilV}wx@hHjXxI2eQBGJgC0FvPWG zr5uLIgT9xZ<=tpq=~$02bl6OY6`RrObeU`}1d!QfGb30KHd5BgGi#&g8%{rNw_BOn zZZ=t+w_zuCsWsRjZ~o@}Q0$VfkbjT&PP&$KC}JY5HILBooQfhkU#WDKGS%>`p8w=2 zb%%38zbau~gdEeiKw;#I=Mfkkp&cEJwZQDi7XXvuNKkXRDCA?%<;UcClB7ZD8##+Q zS<+^M#%gGRsdU08p_)j~W*K-?X=+*Yu9haG01|sAWaAhiN7B_aRVk630!?lwO+N}6 z^|R<>rYQ1(R5XbTP6-NdlaPCkyeM**Ly1o#(sdLj+*Rw64i)a8b*o9kUZc;N!`X_I z*G&|P9VCuJQ61o-;Vf1Whamd#f?B2jwWJw!u2y{{pC@0>AwICugzxkblWC>rDtv&R zw%)P;l$((Et#^A@k%cs;VSXXIgl>Bf87^^bPM|I-ORro?vhXI#!VVHmW#dE>;XxaQ z-qF#de7cE82KCbZKYsahjuyHQ4f#87OrLSCx4K&JdsQluEeqd8yaZ}lxlmOnBJI@r zVwZkbBp@gG{PIT^^_{h~fm(%1ssbKXD+=C{hlHS~k_DF{XUI>o3xaf_sNw*2`uqgE z;P7Csr$_Mn#i}B*mpj*DGWg_0LrC6I@LSYN%@^v>v^)^6tI>A^_>7k6Sw5eEG%>eN zEEBxU6Z`hDvj^qQ9wye*20S9hTh3{E#_{L(F4nK6Z<}>H0~HbrD}shNrZlYiB{V@Q z1Ei~~FdvYmk(C&lkc&EkaVO7EDyNf>7? zugTtW&n#HPd%dlT8Ej8)ga?#cqQ7nUu0nrH*~Du@fxCzh&VKRf8`vtpxH4FhSSr#e z$bb#el22_-(LJA7*IJp?VmDjuHp_5vw{@+>;<8vQC?cE|6eMPpBUZtTlxUB>@#(;3 zq)WRqdTq{I?G~4dm7sL7IHSiud$V22)|ox4m*R{P+Cr$Us1Sov=Gi`hroQk_+(_)Q zoF8&x$ptEj5Yy$UOebYniTG|~I{pSZs3!cS6Y4S(2{@uIy4#9*Hc~=5XSyWGA>Co5 zr#G^0Cpqo~S?&2mR!Vk>$^nt#IFh5@yK9#ucNcQ*{(fp>-iNL~o6O|{ci=aHxCyBo zPYmZbl@*ApZcs}6_uu6Q!#IB6)Id9-<@~^@Vba{E%8723rfD!Tp;jLH>auW~K0%mS z-sneN;Hea1l(bY3`eT-(_5B2V13vcq>pA&oiJ~J6f+y&UU)d1w#=k2?Fq<+fkgSqL|VWPZ&N&oFZ_q!FThJTou5ShZHG! z$QU{?OTm_u6`0Ln+)RR15f~h-Z7bX`jf98-))AEbhg`q;Z z9n&hy`R(^>6`nG1v?{K8H^`8gUSx}%jSc%o-aG*Z1MXz2gX>yoMh`mXlJJvC~ z!*0U=oh-WN)zh0PDcH!&c`6#^D@9^R?tJ`gzx-rEtLP-8zs$&4E6i!oK6HKO3M`4_ zsK-BfgeT+4@-5;>LP5~6n?fOvwFk4_clp62IN-MJ9&4qlQM`~=Z)E^ zWG?}#K1wGG>9r|znwHVj3V9Z)Xf+L*NSIP+80H2VUaXQdsAySb4VJg29))z4M!&QM z&iJMI+^M9&P{56;jHtuGOJ|Mikf_KgX$w$nVS#PuxL)-&rmexk6cUDpmDNyf*FZ(& z(-2DNY@A<$=l4(q84C|Q$f%zRZd7&Z((!CH@i7L-WNB@f3}~G&jb@s!s5~ru?^PYp z{8FqK9WCQ#O0ySf?YGlRH8j%{>94Pvq~%M8t0QT1`SvJlkP>Ly2z%&D`TFy&E9wUKH2b%0Hk5Gvr(Fo^(V<-g6dpXGQ z&l&pTlojhG-G;y`{KCq8E15o6UsEL??dFI_um^qBqLjPP_ln4KTM9|>wm8EO(;8M4!{VU8-@Z< z^46pz#06+fgpjs&H%tZ%L+m#+7g{z~8R=u)33W+DvL!Gf1ONO$Etvcj_5ImtBSW*G0a6%_QT>B5_f`*p9#U}i9V6lw5-Ll7goDmSp32QmJ2Iac9$K~ zYYUPaGu{%iDwtmkmUyaS(pQP<6wPk_cT^-6U; z4jY22q6xvBZl9;(vv?`WP{sfw8U6i<{_^pxo#A@(qaW=)4Gva@&l1Rg0g!A~5>2Ec zm=PVRG;SJ=i=>(M)G=hXd(^S1Go3o8jGGh{{YO~_dZOv^qW>tRhm-~4pKY+{iuU(L||-*^8Ptu=2-x`=<} zJl~5cVZK*B`3+ma%T@?Qs;md8l%6*j!io`X)*mkHWmt1!u}d2s>W$Z4OeB9)L&}#g zK33PslRDg5J(E15=Rkm`a$G@*Rji~0D^=crAB##f`g9J|83`iJYh>#t`(V=EK@Pi z;IhlL{*>3A2(*z*z=l<2rEYBEx5)xEW{=pCbz_0w{`HKF*Q@y1kL~-@yFwye!%~&S zZgV-Ji|6!V?)J&RI){}KH7Z}3Ehq(DF2a$;Xf{Rv_g?clELr8P9{vFT+B>mS^m}Ur O&vKzc#L-hM?*9i*!z*(D literal 0 HcmV?d00001 diff --git a/bin/librm4/rlsdic.nbin b/bin/librm4/rlsdic.nbin new file mode 100644 index 0000000000000000000000000000000000000000..36b53ad63050982808436913b510c7e321438ac1 GIT binary patch literal 10323 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 literal 0 HcmV?d00001 diff --git a/bin/librm4/rlsloo.nbin b/bin/librm4/rlsloo.nbin new file mode 100644 index 0000000000000000000000000000000000000000..fb95ccd4426b1819a11e5f29ca06cf27a267e2c5 GIT binary patch literal 4014 zcmds4dr(y86+d?u0V`V;6#eD@(X%2uExNkQ-VSX7!m51|g(>~ws*>Kmk z+Vz&HUy#BN341+9i+HO$Tf5>t&-yJ_dp%Kw&+YdVC8nMxHNt3N{F5`+#_Os~RiI)x zdBV&3Lf`90K*PFz+xU-niIM!3ZugSU^LIH1llu?34tJ#g)cy90wq{TCR(_+m$g-|m zjJop-`laHiNxmO{$|Ap6!k5bZd+gO>j`49}xa-Gn`bB6Qo0h+is0}F4li0 z#y0W;$NJ|U{j?oQZ zCIZY5nwDJ!VUqPEC?OzOTU$8EYUlKmKdmj%{%&ygf471Ftu3=8>tWxQkXr?6$%=uL zmQ8U*vBq{w%MJ(deuiU7n@L^LfQbahbQFYyGR{7Hp3zZHcp-eK(b1p}rDb0TRD+j|>j2~HKGGjnqZj$>vp<+IQX1&%Cug4PpI zMbK|Fluow=)ASnb5^z1~)4(H*jTG#o>{GNb1#S5dg(-CLK%p&= zR|V7L9s^tol1v+EgUe{5j@(=mhiKdN^kK|p<)Q85lrPcU zZJDe5J%`BQdErrCa*U%1CAb8o6)=YpN1ZW82k)va;ilpe_=1`uQLDwzdP0Qs3 zZ(1Ay7{Zs+8Q2F83$;`_15YhK40b(h$Yaw*Fc*}d!X(>KrmHyi$l6X%y|(1nF8ddJvs>(V zw%t{~;IiPUPkriLm*f4jJH*I^e^bW1bzN6_#Ha(;PCNS+<+ph{@ACO>ap6<@-50kc z2~O;`dOGjetgfuo^E;%J*!As*tW*rYa2>0K2_<|lRjBhq*5-3UtZ~q_`wH)y!#z{t^Ai8ITfO2kHLh(r^-Z4-12fc;`+&Q zxi6MSt@askcB7$8j?muR;kP&Se2;5TVQT>^*&YN7jVa}0FnI)9?6Bml#7vAa4q+lk z=^al|RJzIx8kSb58%D)tG@XE1EbfOO1W**imPk~Ery3KR7z>P34CM?KlT&KVX3w#% zk9sgpS9N;B7hk3b!&Z!u4@@Ybj5TTc*$v)Y3#Dq70p%V$B=8!{zVdGj*uvZa@_M`{iKiL7 z3X3(7TZY6SJ8{AF)J>r70_mI`5~U9f_`xxaevTQmley!mq}PHvLbK!%atb|o9+A86 zw|n(Q+f?q5HlfEoTDYp!{qx&r1?Su4N)|ccDY9G@T$i_P`p?N z1CdBwU@TH5mEupt=|Z#nG04j2TdY1EAju2RJ@Y> Tzm*R~s;jrl|AYQG|E+%kKHcWc literal 0 HcmV?d00001 diff --git a/bin/librm4/rlsstr.nbin b/bin/librm4/rlsstr.nbin new file mode 100644 index 0000000000000000000000000000000000000000..31cd80fefddf8bfa771e5d5068712f92d762005e GIT binary patch literal 389 zcmeyksI9B=mq6m_<{uvel$QRSa_#cUUqR{auHR3vbxD8pS30-yS6D#M%wO4=SC;-X zUcAroX?5sG%zp+sxUAp*Z~b-{K5#7P~ZTv6c{8J7{nbI7?{3BZeig6 zn!wx;`p(iOhm8RS7=PyoAi2Q($Hc@lj$b)eJI?&IF;HRouPIB;^?%{ly4L-pRQ;0U z?~+BASAG#(a%1=RQ+W#j94ey%R|3hq9kKh{ss>;E}5X+dQ`Xo!MN vkWa8~FxUYgN!Kr&7j7qi;Sso73kgzZSDWsi7d0H)e- + + + + + + + + NXUNQ #DECL ("VALUE" ANY STRING +) FILSTR % "READ" ">" TO " >" "FILE NOT FOUND" FILE-NOT-FOUND +CANNOT-OPEN-CONTROL-FILE NXUNQ TENEX-SYSTEM-UNIMPLEMENTED "PRINT" "_RQST_" +FILENAME " " CANNOT-OPEN-REQUEST-FILE RQOPEN RENAME-OF-TEMPORARY-FAILED RQCLOSE +"<" RENAME-FAILED RQDONE RQNUMB T "FILE ALREADY EXISTS" DELETE-FAILED RQRCVR]>> + .GLUE > + + +\ + +> + +> + + +STRING)] 229>> + +> + +> + +> + + )] 463>> + + >> + + diff --git a/bin/librm4/rspars.fbin b/bin/librm4/rspars.fbin new file mode 100644 index 00000000..7e0afcc2 --- /dev/null +++ b/bin/librm4/rspars.fbin @@ -0,0 +1,24 @@ +' + + + + + + ANY-LOWER-CASE? #DECL +("VALUE" STRING)]>> + .GLUE > + + + CHARACTER)] 19>> + + CHARACTER)] 35>> + + )] 49>> + + )] 68>> + + diff --git a/bin/librm4/s-to-6.nbin b/bin/librm4/s-to-6.nbin new file mode 100644 index 0000000000000000000000000000000000000000..5560f00859e01c43d20e08321a194a7200e49049 GIT binary patch literal 619 zcmeykXkKvluZb6eqkm1lw$1TFhJb?O2L=WPX&o~U28OS_OBfh+DjhH1wk? z7#My#>Hq(4puxbvtN*iiauyjXYjuhW@VmVOa@7TW!V^TO@iZ*L-iVRJ^n VH1%80oGs43*Uwjw{^$WrRsd4(%oYFu literal 0 HcmV?d00001 diff --git a/bin/librm4/scope.nbin b/bin/librm4/scope.nbin new file mode 100644 index 0000000000000000000000000000000000000000..2c5f059f64f6f29b75c8bb6e4b0a18db0b52a5e0 GIT binary patch literal 1554 zcmZuxZA@EL7=A8gPq7*~f2bd!ap z(Xz2-OU9!7m_s(gs#(w!6AfnBBIuSZMvckzhlwGJ12ZYbbMNj2yX!f(q(tNS@#ehe zJm-1d^Smb~HvFMGpd9(_+kToJ{`%5lR#S}_8-DM!Ux|F&9HBYWcg9pYOh%Q?8T+7W z{eujue_b9LRkLSXM5Xh0*9grSo)i^2Jav&~&x#k7n0t4>dj8qFJ=9=doBMEJ`lqu= z7T3JjM8tUjUsCiU!(7z>NTDkbq{(rN%4fzQEGb|q0-7e>8pmoWI0<1Bj3-_KyfE^R zX4%utj&)d(tIy0;UbN_ezy||0Su~BJ8fm0<7htaPAyo=}feb2CW3_pG+S*(x)C<8} z#f3rvADb}(c?NKmv88m9(jGk_Ukwb5=zOF$9nkrxDHVdgE8XDbatMV*Q*{VId$cD3 zA%H;&2KpkLK1~XZBfK*Ew@{b0(2HVD>VGc9iyb=Y!i*K4$eV$zP3*pe?;fWathT&; zUc5r;SgN1+513oxSOG7nR$SA;mM6W~$#*aFaFJq6`;(-$N4w;(VPJ%-jmaiP&(&UB zA>eAel4{4zRYo5(Y#g5@UE56si#AJ)?a`xhn7LuD%I6I|1A)Te6L>3PoWM^Cx!J+M zkX*V?GS?Bp8n@PhV`m)Z6I?;cd>^-y!}8*(jR{UBJ{x^4>B(#UQSanH{>Rp$p!pLcQC*Ct1^<>r-S@a zt)-^NnGWl4SEB#{yKtmQSKG!JLu=XquVd)K%r(eBr|Ho4_ecB#W`*I4e zDHR*1>@@4j&*I_*uakWhqu+XqZ6M!8q>`*}0_wo@P?Jx zgatwepmbf2oSYZ7paOyqux+q7UC08Sg3t}rHDcqjN6iEH2pJ97hO}ySEVUaOU}!)N zSjV8eUwX#z*6MuZCDfYd@}>CgJ9s^jdbHlk`0aZ*xV*a~*cp$$jh;k0cIsB+5r+@# z6Jn#zQTA#{{GJa%J++DZEbd298%Fi?;Vt9obum}zRCp`#)Vthvr^C}iTAi-#TS@B{ zrTLIYEGHF}HFV9J%m3)o;SG+khp<)o?78v@QtxuQ78}aGdRMJ19okFR{Bm8CUvM|~ z+t~R!M+-+*){y7h$kt}N5;@oE*B9lIf*MiY>2{4M6_=+(9lGevA3CT*m&*4$FD=e6 e(gZ;TUu~-)nVDPc+ih;KUiIyr>LHniZT|o{ST`*I literal 0 HcmV?d00001 diff --git a/bin/librm4/scr.fbin b/bin/librm4/scr.fbin new file mode 100644 index 00000000..0a7c8e77 --- /dev/null +++ b/bin/librm4/scr.fbin @@ -0,0 +1,342 @@ +' + + + + + +> + + + +> + + + +> + + + +> + + + +> + + + + CHANNEL CHANNEL < +UVECTOR [3 WORD]> ]>>>> + +"CONSTANTS FOR SCR PACKAGE" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IOT #DECL ("VALUE" CHARACTER +"OPTIONAL" CHANNEL CHARACTER) % % % T % "DONE" % % % %]>> + .GLUE > + + + CHANNEL FIX)] 38>> + +> + +]> UVECTOR "OPTIONAL" CHANNEL)] 125>> + +> + +> + +"Macros for SCR package. Common to all versions." + +> + +> + +> + +> + +> + +> + +"SUBTITLE Cursor movement of various sorts" + +> + +> + +> + +> + +> + +> + +> + +> + +> + +> + +> + + +ANY)] 240>> + + TTY "OPTIONAL" FIX CHARACTER)] 271>> + + TTY "OPTIONAL" FIX CHARACTER)] 331>> + + TTY < +OR CHARACTER STRING>)] 391>> + +)] 435>> + +)] 460>> + + + + + +> + +)] 551>> + +)] 565>> + +> + +> + +"SUBTITLE User output routines" + + + + + + TTY "OPTIONAL" FIX)] 630>> + +)] 698>> + + + + TTY +CHARACTER "OPTIONAL" )] 751>> + + TTY FIX "OPTIONAL" )] 819>> + +> + +> + +> + +> + +> + +> + + diff --git a/bin/librm4/script.nbin b/bin/librm4/script.nbin new file mode 100644 index 0000000000000000000000000000000000000000..fe54db4024c9d9f35eb9b032feb7b74e40dd88af GIT binary patch literal 3834 zcmd5=M|r8$}@?Tu{r0i-5Z>WSUwouu&#tb`fY*+CinrVj)6k#xTaz z4sC%T6$fo0gz!-*GLE5UNzrMB>JTQhMM8reTa!*xni}FbaS30@y%9GOVzHN^h!xFF9K;LI?*JLF2r9EZ~UVgl*2& zAA%xv&+`DJi;8p!bG8nNfFaQb8UVu@^s(}FCR2-zbKWDOV zJ_bq~Ic*>)I2d-jnZR8D{E!h+e3L+S4FodE8c=hJOwgsSu|WiGx#AN5EhqreAb@<~ z=GA2L0IG$jIs?1O7p4e2bCou`MfkKLMZRYBoVihKS{;90FeFcyxv+$HSz+ctVGFnV z*3NeE4}WFMBA1-kBhDO%XQk(o^16lj7|Q^sJ!t9TbiGr9!tklybKHWR+Qusk;w@^^_+ivHG z=S15(r3==$QU3UQm&*A3T_d$z=&rPCe(J{PA$~G4bDt};W3-xAKlXYhUlq-i^HUwa z+Q)_NiTkzdoiT3aUD)eV490CrD)X0sGfeTG>DLD0U&@$BzTKE4vK=W#5OwTuxe|f zN@ZYz7#yHPy!v2{L!V$W$UD*534cDP83BBNbFUG;PFNG@{Kp97_ye8{A*gpiAh{X< z%_sS3@rP+O5pkwMq zu8kcM7p+e=h^OYp3c1x34{K&yq|-L$N5X{L> zo6H2^S!TLhuxq^}kY^b`DHsOLorDQJ(i?G;4dQhx!;(E~SCW9%fv~fm#Kr}s8 z_LDChe&X)B4lsC%c}dSz)E6?ah8Bf_&s2Y}FU>?1AZeLEp`KPRf!2D8w>v(&eiuJi zfig=bkV7*MVGabqdaQqF7Ri@G=yg{6UL{}s{)KWrB_fmM&%gZmA-*aqqa3M}S z4adTXKr6|B;QwZTAFr0_xR$X&G>><$BcM%Sl!P2g3=>Qc5{6Ni-gyxjc6pcyA`QAw zY*3=;-?sx>vvWXXcMk42X3#SY}tpPo$a4ux#6VkouWgI#U);4E;`Do`=)xN z+Wqk?S9EI@{YbyLnfs=!$6xk=mY9+hx^bcEbW(Xen}w=Ll2CT(_H}oY!z-A?g%A;q z^t5{Q*yBQ$^%yN08SB+!c`C0S>uBpkIvC0BaoY@aH91Swk)w6I9-RrF7-_F?X}U&G zkF65gD|vS<@@HjM8oFLjR9nsz(>Moy9D-M_Tlnbn0Np*7W}uvP-3t zKv^KB8NrL#`(QmUsqK_I>m`%*{0DFj6y0{BXmlFO h=ik7F&C$kMUQK;Uw9n|9yM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +> + + SDMAPF #DECL ("VALUE" ANY ANY ANY +PMCHAN "TUPLE" ANY) SDMAGET PREAD T SDMBDSP SDMBDIR SDMBITM2 SDMBITM3 SDM-ERROR +INCONSISTENT-DATA-BASE!-ERRORS COULDNT-READ-FROM!-ERRORS UNVERIFIED.ITEM!-ERRORS +]>> + +> + +> + + SDMDLI #DECL ("VALUE" PMCHAN ANY "OPTIONAL" FIX) SDMSRC PMDALLOC PWRITE PREAD INVDEL ![0 +0!] ![0!] "DONE" #FALSE ("ITEM NOT FOUND") #FALSE ( +"DELETION OF ITEMS NOT ALLOWED") SDM-ERROR INCONSISTENT-DATA-BASE!-ERRORS +COULDNT-READ-FROM!-ERRORS COULDNT-WRITE-INTO!-ERRORS +BROKEN.SYNONYM.CHAIN!-ERRORS #FALSE ("WRITE PROTECTION SET")]>> + + SDMDLWINV #DECL ("VALUE" PMCHAN ANY ) SDMSRC PREAD VCTBNS PWRITE +PMDALLOC INVDLI ![#LOSE *000000000000* #LOSE *000000000000*!] SDMBPAGE T #FALSE +("OBJECT'S VALUE NOT AN INVERSION") #FALSE ("WORD NOT FOUND IN DATA BLOCK") # +FALSE ("OBJECT NOT FOUND") SDM-ERROR INCONSISTENT-DATA-BASE!-ERRORS +COULDNT-READ-FROM!-ERRORS COULDNT-WRITE-INTO!-ERRORS]>> + + SDMGBC #DECL ("VALUE" FIX +STRING STRING) SDMACT PMALLOC PWRITE SDMDCT INVGBC PREAD ![0 0 0!] SDMBPAGE +SDM-ERROR BAD-INVERSION!-ERRORS SDMBFDSP SDMBDIR SDMBITM2 SDMBITM3 +INCONSISTENT-DATA-BASE!-ERRORS COULDNT-READ-FROM!-ERRORS +COULDNT-WRITE-INTO!-ERRORS UNVERIFIED.ITEM!-ERRORS BROKEN.SYNONYM.CHAIN!-ERRORS +]>> + + SDMPUT #DECL ("VALUE" PMCHAN ANY "OPTIONAL" ANY FIX) ![0 0!] SDMSRC PWRITE PREAD SDMDLI +PMALLOC PMDALLOC PCLOSE VCTBNS INVINS PBLT INVDEL ![0!] ![0 0!] ![0 0 0!] +"READB" SDMBPAGE ![1623294726!] #FALSE ("OBJECT ALREADY HAS NON-INVERSION VALUE" +) #FALSE ("INVERSION ALREADY CONTAINS WORD") #FALSE ("INVALID ARG") T #FALSE ( +"UPDATING OF ITEMS NOT ALLOWED") SDM-ERROR INCONSISTENT-DATA-BASE!-ERRORS +COULDNT-READ-FROM!-ERRORS COULDNT-WRITE-INTO!-ERRORS UNVERIFIED.ITEM!-ERRORS +BROKEN.SYNONYM.CHAIN!-ERRORS #FALSE ("NEW ITEMS NOT ALLOWED") #FALSE ( +"WRITE PROTECTION SET")]>> + + +PMCHAN ANY ANY "OPTIONAL" FIX)] 776>> + + +PMCHAN ANY "OPTIONAL" FIX)] 766>> + + +PMCHAN ANY VECTOR "OPTIONAL" FIX)] 768>> + + +PMCHAN ANY ANY "OPTIONAL" FIX)] 770>> + + +PMCHAN ANY STRING "OPTIONAL" FIX)] 772>> + + +PMCHAN ANY STRING "OPTIONAL" FIX)] 774>> + + SDMSYL #DECL ("VALUE" PMCHAN ANY "OPTIONAL" FIX) SDMSRC PREAD () #FALSE ("ITEM NOT FOUND") +SDMBITM2 SDMBITM3 SDM-ERROR INCONSISTENT-DATA-BASE!-ERRORS +COULDNT-READ-FROM!-ERRORS UNVERIFIED.ITEM!-ERRORS BROKEN.SYNONYM.CHAIN!-ERRORS]> +> + + SDMSYN #DECL ("VALUE" PMCHAN ANY ANY "OPTIONAL" FIX) SDMPUT SDMSRC PWRITE SDMDLI ![!] ![0 0 0!] + #FALSE ("ITEM NOT FOUND") SDM-ERROR INCONSISTENT-DATA-BASE!-ERRORS +COULDNT-WRITE-INTO!-ERRORS #FALSE ("NEW ITEMS NOT ALLOWED") #FALSE ( +"WRITE PROTECTION SET")]>> + + diff --git a/bin/librm4/sdmsym.fbin b/bin/librm4/sdmsym.fbin new file mode 100644 index 00000000..fb9ce195 --- /dev/null +++ b/bin/librm4/sdmsym.fbin @@ -0,0 +1,30 @@ +' + + + + + + + SDMLKP #DECL ("VALUE" STRING FIX PMCHAN VECTOR) VCTBNS SDMLST SDMGDL SDMGDA SDMSCN +PREAD SDMLKP SDMEVAL SDMPOSSYM SDMSRC SDMALLPOS SYMBOL ![0 0!] ![!] SDMOPS +"SDM-SYMBOL-TABLE" SYMTABLE #FALSE ("BAD OP CODE") SDMBDIR SDMBITM2 SDMBITM3 +SDM-ERROR INCONSISTENT-DATA-BASE!-ERRORS COULDNT-READ-FROM!-ERRORS +UNVERIFIED.ITEM!-ERRORS]>> + +> + +> + +> STRING FIX PMCHAN "OPTIONAL" STRING STRING)] 138>> + +> + +> + + diff --git a/bin/librm4/sendms.nbin b/bin/librm4/sendms.nbin new file mode 100644 index 0000000000000000000000000000000000000000..76b759be742705063478bfff08d4effce24c2f47 GIT binary patch literal 2091 zcmZuyeN0nV6hCdHEkdQJOc;s}=%mvsU<;zSg-0psCRznQ5Vt4>r7Bv{sZDfos}m3j z8Z;TAqaq9K)cH{qOq|(5j5ri^XmmQ~M^tnwQoOIcmiBe`zWPC;_m7u*?(d#+e&_ej zz1LCqliti0-#cH9q_%VW*($?%U2m&+d!%D#OuNlJSD#((x;m<(^7Y#24!p1aT9xbg ztj}pj-L~yI_nKuHHSRT6#^#~n=*4|+wcc=tt2Qld@tE}M?xGPc!&8qn`sHozTa%^3 z`_Cjqdv2{S=ww>uIW1n3$^|=RDT&PqCYc>g4t{c3tKQC-l&s&nCR+WRwYA7tn}f&!2hD+@NUokp0(O zN8Q#l4XnK`tATwoF6IDRH7yYF27XM)yY*GAAaSi+eJk>w7SU+?8#Wm8!ki4G~n?y5e`w%no^amF z&9ho7#6KQ(@i`s!A?|`AkJ49A_$;u`gbekhNS@vJnEvS`brW z{*xi5n3ys$laN^mWJngSrqcB=0EH?cFiBAe^C+8^Ol%x(U4{Y5fWeqloT_d zgk-Y-Z&pP~lq=qu#4V7x4dLB-o@l_HkOnYh3=~4RDtRgZQ&A5BBqhZ}N$7ZHkp>cx zK=EE=BrtCY`apOY2_MFX@1J)n4k}cDhzEEz_|F6iAdayBG$F8pK%HL*3rNao%%es) zNmzYOq5vsIK#ApeCY0h?rXIv-uo7g$s6xnd;`KPOi0Rz#6d)ZVK`{hB~rp9Qo?H# zvl0?k0erp8?~Typ3^)6HV*qEP2H;Yu3{tNgt3iCDNr4MVfuY3I_1CmtB3pESKu^S0 z`o)eTZdn8s5`F=cxF6co_7?T`3t=Bj*hjpT|R$@Is2xN3at1few#vri*(rYQXqqL?r%m?4es6b?UhLS%bWwQU9%{gyK$5*8x3AQt%kM6 zUAM8tR6EV^QSfX(YnNx5UArHg%|=oyj&ePe(y?nFci7#lUS2Z0)Yx?Q#I)zRQ2qHT z*OleEGBhk@i#@$sx zC2yu@eKJGL)$fBc2*jPo&YmGU$lcYzYCoE}X~SgW`UFS>Ng778?|ylC&AMgY+l?uF2Y{qlzyDJ*16-RhGve0k1ujo)Qn%_EDdj7(kt70 ytjL)aZsFaQIgjj9)6C(#i3PpE3ns2`%H#>!zN5AN_Xq!YC0*h&E;+ZE8u&jQIUCgg literal 0 HcmV?d00001 diff --git a/bin/librm4/skip.fbin b/bin/librm4/skip.fbin new file mode 100644 index 0000000000000000000000000000000000000000..9de4d61df20b240c077f344428d52c07c2f42a98 GIT binary patch literal 2474 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 literal 0 HcmV?d00001 diff --git a/bin/librm4/smms.nbin b/bin/librm4/smms.nbin new file mode 100644 index 0000000000000000000000000000000000000000..2decc4aaa141524b26912b0933e2f474161f5eea GIT binary patch literal 20987 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + SMPACT #DECL ("VALUE" ) SDMACT POPEN SDMDCT PCLOSE PREAD SDMGET SDMAGET +SMPGET SDMPUT PWRITE SDMDLI SMPGETNAM "PRINT" "READ" ![0!] #FALSE ( +"OBJECT NOT FOUND") #FALSE ("OBJECT HAS BAD DATA") SDMBPAGE SDMBITM2 SDMBITM3 +SDM-ERROR INCONSISTENT-DATA-BASE!-ERRORS COULDNT-READ-FROM!-ERRORS +COULDNT-WRITE-INTO!-ERRORS UNVERIFIED.ITEM!-ERRORS]>> + + FALSE> )] 36>> + + +)] 62>> + + )] 71>> + + < +VECTOR PMCHAN PMCHAN> ANY)] 98>> + + < +VECTOR PMCHAN PMCHAN> ANY)] 120>> + + ANY)] 131>> + + ANY ANY)] 142>> + + < +VECTOR PMCHAN PMCHAN> ANY)] 311>> + +)] 397>> + + "TUPLE" ANY)] 450>> + + + \ No newline at end of file diff --git a/bin/librm4/sortob.nbin b/bin/librm4/sortob.nbin new file mode 100644 index 0000000000000000000000000000000000000000..d86b7b4e7ec0863eec32bd42c135ac272a21edba GIT binary patch literal 1594 zcmZuxeN0nV6hEZ|iXT`MP{%Zv!Ui2J(Dw0KHdcA9FW9VWn|=@rDaAO~vS~z((Z%3L zI#v}KIFn_%50q&b6Eeu^vSt5lBqq8ULtw^a`)6CS;g$_)^4_EGIc4|0$85Ij{c&^7 zedqqp`Tg#>Cq4Ye>DMIfj&Bp0v`;r8avytpIq%@=lJxKgp^?l-MS&qHWYG0+YIb$W z;@Md6%7f}^|2gqa)f6KYU%s6b7Y0M)nTfe6CPP)bKjl+%Go#|d5GqT1_18x;_t5ku z@$J@GjDk-r#I=Z70Du7ly$yixzYHp3sfeXEY>tDv2J()$>)Hhb=V_hxvc!SR>~k*$QQg?@#P5 z;`>u@OhK{7p_%Wbpzc3VWKW-kBJ~*+0BqI#9~3{3f)k|hhsvTb0#L0-abN^3KoJ3L zzRrN^S->c5dDs;uQxN6D z6h!1;KAGtKNiHZWd{!ga+70S#1=%YgavzXIRth3oMoE3#VO%p03EU326MC@%n=TU&<*(j2yzNF?jui-9^IS%u;ABnVwGd--c53} zAl=fiu7p_fm-}G1mboOYGmJ049L>*cQao9#8_!stxz2LhSXh1*=Q71I~kmR*E*SgCpAI^8efdv=?J*YZi z9-tl|^T#`X-F-L#&;{x^l!6L#bGY;eW8M3j;YqnRhs)Nn>5$C_6|$RovvPm?qxG*t zOmY2@uXY`1_rddu8}LVxj}`{u#IhSHOCECgK&}PsXvKWmi*BDnO-vvln&#M3i}xyS zU1ja4w#6M{QIk~i3JS{uz!>oQgI))c_p8d=X`89RN;S~PWT9xRt0rs~I(zg){G^oDsVn&8MAg(@5r8#l@?w ztP>aZRFgj-O^h1*#5?*hQ`OG+eD3f+Rfm+Aimj~EjjDC63}&Z8csFyfYKB=nS2;V1 z+Wl-mI$1S!-W3Q&?D_~YnS?qr@JJ#y*n)hLKjs`#GKCy|BkKwJ!(73iUtf|lDKoZM z?|Pq=w?-g{ybiYvjdWgL(B<_oZXI%NV>}+#jk8%SnAHkAo&$Z-*=gSumj}zu z6?FJV9_K=w@Z<8>mG6QK>e0u!s%08n>2EAzh)S56F-|aMUe{9-RV?Faa8p6vMGT>ie?3wsZB;nA7a6R ze2H2Pm4Y6ePk{&t^`!aKQ_x#JRC9Ij^=?bo`Cqja*#F^h&iQ@(&prPe4L)`H)hnOh z-It70OD|(eFgPIbj$JvckGf8U5~XEYZ&r*3@7%i)@9Az9BK@gD|*+3M%1GCgt~GWXQww;4Cl<)&m|GSV*&;?<2LKnOCT}>`Vuy>Q6BPvkeNP= zW7G3&`Zb}+H7qpI@Y``$=ZKr@W&#s)Y9uE?N8~E{$UL@|Hmy|hd^nOSG-2KmMWRT^0&e@Txkc)jL{_-fgNton;MCbjH$hGNy-=bo#Rmc@`d8u%nKtBe&2 zRSlV~`GuFeyx5`Ht6!h|`nWa++yZYyCUhn?mlwOi(J<=u+36wZdyx%YCD3@l+S?1yT5R(ywdq|%PXbYFU+pIqTeT`hb;ZAp$QhVbNsldt*i1^VV1k& zuTmx7<-a-@7dSEif#44*1_stI3`-aoqgXr`7z|Pv7?>4QKm=O`1ON9<69(Q-4;UC2 zzezAK#Oo_CFbIH&Pal9vv>7rOn14H|FtGnpQURL6xP*cEt6=m0{~skx7$iZm+zL$W z3?g3`Eg0Cf8Q6JDKwM6c@eE+D1CYUx9;6ym1vHL<6~tru0VJ4zvH`j8!dw-ML1JLQ z_&Y}+c;%1DnO7XY6e=B_`Grd`toi5Eq(zS3C%;r^{x$j8g5Dp-nn!EDh`b7#{PW@k zx5>Xblsz|o5nOU3_=~9C0!NS?>>#rwe!Q9S=lVYe76x$!Mg;~2XCWVHm4Ai{7$g}O g4Hy`{pJ3~f=CyJ4bNMBZc)Iz=$9M&4US^;=0A^8l^#A|> literal 0 HcmV?d00001 diff --git a/bin/librm4/stink.fbin b/bin/librm4/stink.fbin new file mode 100644 index 00000000..b7c96a86 --- /dev/null +++ b/bin/librm4/stink.fbin @@ -0,0 +1,39 @@ +' + + + + +> + + 20>> + + (SYMTAB) OBLIST> + + STINK #DECL ("VALUE" FIX CHANNEL + "OPTIONAL" ANY) #FALSE () % RB % SQB SYMPRINT T OUTCHAN "SYMBOL :" " = " C]>> + .GLUE > + + )] 260>> + +> + + "OPTIONAL" STRING)] 490>> + +)] 667>> + + + )] 680>> + + .GLUE > + + diff --git a/bin/librm4/stk.nbin b/bin/librm4/stk.nbin new file mode 100644 index 0000000000000000000000000000000000000000..10d95f30d6b9f057f4b8c39745241ba21f636faf GIT binary patch literal 8772 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 CJ_EM^ literal 0 HcmV?d00001 diff --git a/bin/librm4/str.fbin b/bin/librm4/str.fbin new file mode 100644 index 00000000..369204cb --- /dev/null +++ b/bin/librm4/str.fbin @@ -0,0 +1,73 @@ +' + + + + + + LEX #DECL ("VALUE" STRING FIX STRING) STR (STRING) N (FIX) BREAKS ()]>> + .GLUE > + + .GLUE > + + SIXTOS #DECL ("VALUE" STRING < +PRIMTYPE WORD>)]>> + .GLUE > + + .GLUE > + + STRTOX #DECL ("VALUE" FIX +STRING)]>> + .GLUE > + + .GLUE > + + SUBSTR #DECL ("VALUE" STRING STRING "OPTIONAL" FIX)]>> + .GLUE > + + .GLUE > + + SUBSNC #DECL ("VALUE" STRING STRING "OPTIONAL" FIX)]>> + .GLUE > + + .GLUE > + + EXTRACT #DECL ("VALUE" STRING "OPTIONAL" FIX) +BAD-ARGS-TO-EXTRACT!-ERRORS]>> + .GLUE > + + .GLUE > + + RSHIFT #DECL ("VALUE" STRING +STRING FIX) ARG-OUT-OF-RANGE]>> + .GLUE > + + .GLUE > + + BACKS #DECL ("VALUE" STRING STRING "OPTIONAL" FIX)]>> + .GLUE > + + .GLUE +> + + FIRST-OF #DECL ("VALUE" STRING STRING "OPTIONAL" FIX)]>> + .GLUE > + + .GLUE > + + UPPERCASE #DECL ("VALUE" +STRING STRING "OPTIONAL" FIX)]>> + .GLUE > + + .GLUE > + + diff --git a/bin/librm4/swchar.fbin b/bin/librm4/swchar.fbin new file mode 100644 index 00000000..146ce8eb --- /dev/null +++ b/bin/librm4/swchar.fbin @@ -0,0 +1,551 @@ +' + + + + + + + + + + )> + +3DSTK + +3D + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +> + + FLUM #DECL ("VALUE" ANY ANY ANY) +DISP % ()]>> + .GLUE > + + + FLUMER #DECL ("VALUE" ANY) +FLUM]>> + .GLUE > + + + CHARGE #DECL ("VALUE" ANY +CHARACTER "OPTIONAL" ) DISP X () Y SIZE % ( )]>> + .GLUE > + + + MCHARG #DECL ("VALUE" > CHARACTER "OPTIONAL" +) CALL X () Y SIZE % ( ) +]>> + .GLUE > + + +)> + + + + SHEAR #DECL ("VALUE" > "OPTIONAL" FLOAT) 3DSTK]>> + .GLUE > + + + + + diff --git a/bin/librm4/symbol.fbin b/bin/librm4/symbol.fbin new file mode 100644 index 0000000000000000000000000000000000000000..53d66bb50eaca029ffcbb56ea944cd5155090b8b GIT binary patch literal 2891 zcmai0-EX5t5br}($*3=_RJBrH#+**ERTCK}IVTbF3B%e!!9ZcjU1aCMNpNGGV=Nn= z?*9AEegTQ%HkTai%Nb!_e0Unr20|b8U}HS)vaBr6i#7Er@OM zVK`SYwTC{btrHm8o^M=*;dSj;Oz=2~4JVvT?7%hrFpQwSFl>i(;9qz`89he@@+%x-)W7<5OSsOmHO}NV*XIy zkbT>%l=d+z=F3&~2v6B+qc!gLi%a}lWLx%%4=8fj?=nr>X2pKH-a+w{p+nU05P-&BfHf2kc2K_ZBLmQB8uz8wf+a^(x3 z+Q9jrKubC`)m}M;i5vT&qnJqtm_2$M5#tkcf+a)*fZ=)T&Aw2@z!K;!bgB(H=+hua z`YiJ8^SoH*$jh%-az@EJ9efhUGiVwZIKHJ3MQ5sJYBR&QM5|imNa$CsiykqpP^#AB zZVJ&5lWbry0cBxIohv)2z%YbbOW}^P`Af)3@&;&17_6p43nP>?#26o*vK

1gXE zP&E$N86BqfeZDO)13Eh_PvL&;&|FbLV#yK)q1FiwJi;V*Y$RAXpTM${#2W|1{Rm?| zZjRXltSF_>kyMGes5$MMXBXyK@52cgCjNH&C;e0Nym#84PhPX|RrZSh+hF9am4sKPSXh^*nsZ8Sb z9rRDnYxr1khHwa7sSjh9&>CW2n5QqXjW9O;2fy5M*v1S0FHUFVbUn zKlE$xZ+<=;pwgRrrCCkgN=PfrmU+^vXN%7TD~iK0v|1jvavK@#$#yl*;K;%#`4z?P zM)1J;3ywWt5Y1U*fIro>DMrd6u=D@M0)-`8jXNf$6nZ2b61SglNKBg9&y{`tHOGd0 z0@LQ~2k3a1W^v^;XFrOixGbBqpP*CL2M3?yVNAUNbToEGY*OMA6j#04oc#iwztfQ7 zS5=HT_!T;Wtj*bP&~e$98%lpiB==JoyZHV`CH@mSsxO-};ES?}nzN5wz{#s@_xju? zm-uMyu9oXER(=<&`OJgoyJQx{sNv$*SuB|iNDPE#7cYJdmzN~&$DWXh*I2Sdtx4d@ Ik7YFUFDBRVjQ{`u literal 0 HcmV?d00001 diff --git a/bin/librm4/systat.nbin b/bin/librm4/systat.nbin new file mode 100644 index 0000000000000000000000000000000000000000..7ad82279631fa8b69e03d8464bd959c3cd231133 GIT binary patch literal 537 zcmeyksI9B=mq6m_<{uvel$QTCdF8nBi~j^((T|Jfxz7DHWz7PJ*sm@36{J5pyV|V& zRR~n~Ysy4BN1&46?q3rx1aJOTs&HlXuMEZojvp8p7>qwkm@ueoD*&0M3KR)?zFmS@T z5L4g=AasE302|5#meufLe_sMJij~2sfPqysDxQZj$JzZ zYXWoqatEOE82)^|Bx}k5Vtx<+Dgm(=K`dqvi|GfD#R`;TV0agqX|D}tfe6OmIRfw? z5j@iUqgX)0_1A^8(C#lDa$(&+O4TnpexLkOq4$Te=26EVmvZdD+~!}CpDjQV14=0L z{xlPCoBW$Y^UBhn#*6m_e-U|dW982;7eaP}EMf-{l0V+e_;WoE$a=@X=)l0uz^K5$ z$-q#-z{bE}!N3F*XJByhwDC_Vwklu{26LT-e56(W{+q*~4(8e^aB*?jxc<{9 literal 0 HcmV?d00001 diff --git a/bin/librm4/tailor.fbin b/bin/librm4/tailor.fbin new file mode 100644 index 00000000..4276787b --- /dev/null +++ b/bin/librm4/tailor.fbin @@ -0,0 +1,138 @@ +' + + + + + + + + + + + + + + + + + + +> + +> + +> + + + + "allow.applications" ' "allow.evaluations" ' "allow.inferiors" ' "change.special.input.character" ' +"change.special.output.character" ' "define.command.name" '< +CALICO-COMMAND ,ADDCOMMAND ['[] "named" .ADDCOM-PROMPT .GET-STRING ,COMTABLE +"to act like" +"Type the name of the old command that this new +command should behave like." .GET-SYM] '["" #FALSE ()]> "define.new.command" '< +CALICO-COMMAND ,ADDCOMMAND '[[] "named" +"Type the name to be given to the new command or +the name of the command to be redefined." ["STRING"] [] "defined as" +"Type the MUDDLE object that should be evaluated +whenever this command is executed." ["FORM"]] '["" #FALSE ()] "DON'T-EVAL"> +"don't.allow.applications" '> "don't.allow.evaluations" '< +SETG OK-TO-EVAL <>> "don't.allow.inferiors" '> +"print.break.characters" ' "print.special.characters" ' +"remove.break.characters" ' +"set.command.level.full.prompt" ' +> '[[] "to" +"Type the new string to be used as a top level prompt +at CALICO command level." ["STRING"]] '[""]> "set.command.level.normal.prompt" ' +> '[[] "to" +"Type the new string to be used as the normal CALICO +command level prompt." ["STRING"]] '["@"]> "set.muddle.prompt" '> '[[] "to" +"Type the new string to be used as the prompt for +the MUDDLE reader." ["STRING"]] '[":"]>]>> + + TAILOR #DECL ("VALUE" ATOM) +ADDBCHAR RDBLOUT ADDTABLE READER-SILENCE OUTCHAN "Tailoring commands available." + TAILOR-COMMANDS T BREAK-LISTS #FALSE () TEM " is not in that group." +"Confirmation group contains: " % +"Completions group contains: " % +"Termination group contains: " % +"Non-symbol termination group contains: " % MASTER (2 3 4) %< +RGLOC MASTER-STRING T> MULTCHAR % % % % INPCHR-NAMES +"Special input characters" " " "Special output characters" OUTCHR-NAMES]>> + .GLUE > + +> + +> + +> + + )] 270>> + + )] 452>> + +> + + .GLUE > + + diff --git a/bin/librm4/temhak.fbin b/bin/librm4/temhak.fbin new file mode 100644 index 00000000..eed30161 --- /dev/null +++ b/bin/librm4/temhak.fbin @@ -0,0 +1,20 @@ +' + + + + + + + + TEMPLATE-DUMP #DECL ( +"VALUE" > ATOM) GROUP-DUMP GROUP-LOAD +TEMPLATE-PUT TEMPLATE-GET TEMPLATE-LENGTH TEMPLATE? T #FALSE ("NOT A GROUP") +TEMPLATE BUILD-TEMPLATE GETTER-DATA PUTTER-DATA TEMPLATE-DATA QUOTE DECL SETG +AND .GLUE PUT GVAL GLUE USE "TEMPLATE" TFORM "TEMHLP" FILE2 ( +STRING) CHANNEL " NBIN" %]>> + .GLUE > + + STRING "OPTIONAL" STRING)] 360>> + + diff --git a/bin/librm4/temhlp.fbin b/bin/librm4/temhlp.fbin new file mode 100644 index 00000000..9b4f7fc6 --- /dev/null +++ b/bin/librm4/temhlp.fbin @@ -0,0 +1,63 @@ +' + + + + + + + + + + TEMPLATE? #DECL ("VALUE" VECTOR) TEMPLATE-SETUP "PRINTB" BADEXIT OUTCHAN (CHANNEL) TEMPLATE +GETTER-DATA TEMPLATE-DATA PUTTER-DATA "NOT ENOUGH INFO" "" "DONE" " " " Is not an RSUBR." " .GLUE >" % T]>> + .GLUE > + + +> + +> + +> + + ANY)] 57>> + +> + + ANY "TUPLE" ANY)] 306>> + +"ROUTINE TO BUILD A TEMPLATE" + + UVECTOR UVECTOR)] 472>> + +> + +> + +> + +> + +> UVECTOR )] 615> +> + +> FIX FIX "OPTIONAL" +ANY)] 774>> + +)] 865>> + + diff --git a/bin/librm4/templt.fbin b/bin/librm4/templt.fbin new file mode 100644 index 00000000..2ebd4380 --- /dev/null +++ b/bin/librm4/templt.fbin @@ -0,0 +1,371 @@ +' + + + +)> + +OPCODE!-OP + +BOOLEAN + +ANY + +> + +"IF THIS FLAG IS TRUE USE MARC'S ASYLUM STUFF" + +TEMPLATE-DATA + +DUMP-TEMPLATE + +GETTER-DATA + +PUTTER-DATA + + + + + + + + LOC #DECL ("VALUE" FIX ANY) IEMIT +EMIT CONSTANT DCLBDR MCALL PRIMTYPE-C START-CODE CONSTANT GETYP EMIT PUTIMP +TEMPLATE-SETUP COMPLR IEMIT COMPRESS NORDER ORDER XAD #FALSE ("Bad Type") TEMPLR + BOOLEAN ANY ATOM VECTOR UVECTOR WORD TEMPLATE LIST STRING +"Bad special TEMPLATE type--TEMPLATE" FIX +"Incorrect STRING specification --TEMPLATE" +"Incorrect VECTOR or UVECTOR specification--TEMPLATE" +"Incorrect LIST or WORD specification --TEMPLATE" NAME (ATOM) LAB-COUNT (FIX) ( +ACTIVATION) % #FALSE ("ALREADY A TEMPLATE") "OPTIONAL" "REST" T +% % GETTER-DATA % PUTTER-DATA TEMPLATE-DATA TAB () FIXUP-LIST (LIST) +CODE:LIST CNT PASS1 (ANY) CODE:PTR TYPE-LIST CONSTANT-LIST TAG-LIST +DUMP-TEMPLATE % INTERNAL-TEMPLATE-ERRORS!-ERRORS FLOAT FALSE +TVTOFF IENTS-LIST RVEC-LIST % % % BAD-CALL-TO-FIXUP!-ERRORS % CODE-LIST +MPOPJ TEMPLATE-TYPE-VIOLATION!-ERRORS ERROR % TABLOCK +IBLOCK RCALL FINIS RSUBR GLUE % REST DECL OR [REST < +NOT ANY>] "TUPLE" TUPLE]>> + .GLUE > + + +> + +> + + + + + +"OFFSETS INTO INFORMATION LIST" + + + + + +"TYPE SLOT" + + + +"LENGTH SLOT" + + + +"LOCATION OF BIT START IN WORD" + + + +"LENGTH OF A FIELD FOR UVEC/VEC/STRING SHORTNERS" + + + +"WORD-LOCATION OFF START IN TEMPLATE" + +"OFFSETS INTO CODE-VECTOR" + + + + + + + + + + + + + + + + + +> + +> + + + + + +\ + +> + +\ + +> + +\ + +> + +\ + + )] 1100>> + +\ + + FIX LIST) +] 1416>> + + +> + +> + +\ + +> + + < +LIST [REST ]> LIST ANY)] 2044>> + + LIST)] 2157>> + +> + +"GETTER FOR 18BIT UVECTOR OR VECTOR WITH LENGTH SPECIFIED" + + ATOM FIX FIX FIX FIX)] 2437>> + +"POPJ P*" + +)] 2507>> + +"SUCCESSFUL EXIT OUT OF PUTTERS" + +)] 2520>> + +"18BIT PUTTER FOR UVEC/VEC WITH LENGTH SPECIFIED" + + ATOM FIX FIX FIX FIX)] 2540>> + +"36BIT GETTER FOR STRING WITH LENGTH SPECIFIED" + + ATOM FIX FIX FIX FIX)] 2626>> + +"36BIT PUTTER FOR STRING WITH LENGTH SPECIFIED" + + ATOM FIX FIX FIX FIX)] 2677>> + +"72BIT GETTER FOR ANY. ALWAYS SKIP RETURN" + + ATOM FIX +FIX FIX FIX)] 2744>> + +"72BIT PUTTER FOR ANY" + + ATOM FIX +FIX FIX FIX)] 2787>> + +"54BIT GETTER FOR STRINGS" + + ATOM +FIX FIX FIX FIX)] 2830>> + +"54BIT PUTTERS FOR STRINGS" + + ATOM +FIX FIX FIX FIX)] 2907>> + +"36BIT-GETTER" + + ATOM +FIX FIX FIX FIX)] 3000>> + +"36BIT-PUTTER" + + ATOM +FIX FIX FIX FIX)] 3043>> + + ATOM +FIX FIX FIX FIX)] 3093>> + + ATOM +FIX FIX FIX FIX)] 3170>> + + +ATOM FIX FIX FIX FIX)] 3263>> + + +ATOM FIX FIX FIX FIX)] 3377>> + + ATOM +FIX FIX FIX FIX)] 3509>> + + ATOM +FIX FIX FIX FIX)] 3563>> + +)] 3624>> + + UVECTOR FIX FIX FIX ANY ANY)] 3658>> + +\ + +"ROUTINES TO ALLOW ASSEMBLY" + + FIX)] 3793>> + +> + +> ANY LIST)] 3976>> + + ANY)] 4035 +>> + + ANY "TUPLE" +ANY)] 4052>> + +> + + ANY "TUPLE" +ANY)] 4097>> + + ANY "TUPLE" +ANY)] 4124>> + + "TUPLE" ANY)] +4152>> + +> + + ATOM)] 4287> +> + +> + +> + + +LABEL)] 4662>> + +> + + LABEL)] +4738>> + + ANY)] 4784>> + +\ + +> + +> + +\ + + +ANY ANY)] 5896>> + + < +UVECTOR [3 LIST]> ANY ANY ANY ANY ANY ANY)] 6252>> + + ANY ANY)] 6529>> + + LIST)] 6673>> + +> + + UVECTOR ANY)] 6950>> + + +LIST)] 7061>> + +> + + UVECTOR +LIST)] 7282>> + +> + + ANY ANY) +] 7429>> + + ANY FIX +)] 7512>> + + FIX +)] 7610>> + + FIX)] 7628> +> + + FIX)] 7646> +> + +\ + +> + +)] 8004>> + +> + + + + + +>> + + LIST)] 8129>> + +> + + ATOM)] 8253>> + + diff --git a/bin/librm4/tenxio.nbin b/bin/librm4/tenxio.nbin new file mode 100644 index 0000000000000000000000000000000000000000..3065c6a802566cfcfde02717d8b341dfb24134a4 GIT binary patch literal 13157 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 literal 0 HcmV?d00001 diff --git a/bin/librm4/timfcn.fbin b/bin/librm4/timfcn.fbin new file mode 100644 index 00000000..55ac1c72 --- /dev/null +++ b/bin/librm4/timfcn.fbin @@ -0,0 +1,163 @@ +' + + + + + +> + + + + + + + + + + + + + +> + +> + +> + + ,SECS-P-DAY>> + + + + SECONDS #DECL ("VALUE" FIX FIX +FIX FIX "OPTIONAL" FIX FIX FIX) TIMEST DAYS RTIME DATE GETTIMEZONE FIX-DATE ![0 +31 60 91 121 152 182 213 244 274 305 335!] ![0 31 59 90 120 151 181 212 243 273 +304 334!] ("") " " "s " " hour" "and " "" " minute" " second" T " year" " month" + " day" OUTCHAN ["JAN" "FEB" "MAR" "APR" "MAY" "JUN" "JUL" "AUG" "SEP" "OCT" +"NOV" "DEC"] "0" "/" ![0 31 59 90 120 151 181 212 243 273 304 334 365!] ![0 31 +60 91 121 152 182 213 244 274 305 335 366!] (CHANNEL) % +UNKNOWN-TIME-ZONE % ![31 28 31 30 31 30 31 31 30 31 30 31!] +"New Year's Day" "New Year's Day observed" "Martin Luther King Day" +"Presidents' Day" "Patriots' Day" "Memorial Day" "Independence Day" +"Independence Day observed" "Labor Day" "Columbus Day" "Veterans' Day" +"Veterans' Day observed" "Thanksgiving Day" "Christmas Day" +"Christmas Day observed" "HOLIDAY" "DSK" "COMBAT" "ad-hoc holiday" +"[Setting sun is aligned with M.I.T. main corridor.]" "[Ground-hog Day]" +"[St. Valentine's Day]" "[Leap Day]" "[St. David's Day]" "[St. Patrick's Day]" +"[All Fools' Day]" "[St. George's Day]" "[May Day]" "[Mothers' Day]" +"[Childrens' Day]" "[Flag Day]" "[Fathers' Day]" "[Canadian Dominion Day]" +"[Bastille Day]" "[U.N. Childrens' Day]" "[All Hallows' Eve]" "[Election Day]" +"[St. Andrew's Day]" "[St. Nicholas's Day]" "[Mardi Gras]" "[Ash Wednesday]" +"[Palm Sunday]" "[Good Friday]" "[Easter Sunday]" "[Whitsunday]" ((74 1 6) (1 0 +0) "EST") ((74 10 1) (1 0 0) "EST") ((75 2 23) (1 0 0) "EST") ((75 10 26) (1 0 0 +) "EST")]>> + .GLUE +> + + +> + +)] 130>> + + )] 151>> + +>)] 315>> + +)] 513>> + + )] 558>> + + "OPTIONAL" CHANNEL)] 632>> + + +"OPTIONAL" CHANNEL)] 703>> + + +"OPTIONAL" CHANNEL)] 806>> + +] STRING> FIX "OPTIONAL" ] STRING>)] +870>> + +] STRING>)] 1120>> + +) +] 1170>> + +] STRING> ANY "OPTIONAL" ANY)] 1307>> + +] STRING> > "OPTIONAL" ANY)] +1386>> + + +] STRING> "OPTIONAL" ]>)] 1465>> + +]> "OPTIONAL" ]>)] 1628>> + +> + +> + + STRING>)] 2021>> + + + +> + +> + +> + +> + + ANY +ANY)] 2188>> + + ANY)] +2211>> + +] STRING> "OPTIONAL" )] 2227>> + + +> + +> >)] 2368>> + +)] 2406>> + + +"OPTIONAL" )] 2504>> + + "OPTIONAL" )] 2770>> + + +"OPTIONAL" LIST)] 3174>> + + diff --git a/bin/librm4/tn.nbin b/bin/librm4/tn.nbin new file mode 100644 index 0000000000000000000000000000000000000000..8b018bb837fe54da60cd21dae540c7c0053a8a4e GIT binary patch literal 9310 zcmbVS4^$NAwZ99bo2=Cr+W@naFThlqm zb!NUl^UXKE`@6q;F9U~uV{LG5{_;PXdEN0`i{q02D-i>EQJ1@2%dG{?V%wo>W>?#< zt~QHjZ(Hc>Lc7R+)zvLt<32vZhel_0y0#b!I_&4B7n;R0)8e~bzbfV;1{PZ8HH)9c z7Mh)VN|x<*+?t+yRBWxZyu^om-HQ#A-Zu{%`nOlMxq80pvWQnUEb4aYTBG)e{Ox=T zE~DTqpVz7n9XRxx{ASml{`@v^PkF&h{OC#ZxA081;c6{9Fdd-mgvY5Qbb1K(&>z0^>oE7d>(e$qS zHw*Ayp=Up5TYpleu*qX-nVsTi2E4ahx|h=+UM;m8bv4cSxLs_T@kxiPDJswGY`a-7 za*@^s(bPJxPTuU;kGh?>L-hLGHZl0yYq;FC*NO(m8r|=<=POI2*c4LG;WDhfn$M4p zzG`;%ugh=dM^DSfr^UZzc5db_cR0_^e7}x=N}4Lx?7X^>TPoV=%X~Jy5Qk0w&t~Tq z96PwN|0kWUrPSGD>!Nx)oaYSDTEJs55A_f*JE;PE<5IE!>@9~uGjmJ@%s1gZ&7c!N zV~2*}Vf&>X(8o>E0n7lce+)nc=;|S>Om8if-6YH#%OyN!1?cP zncyYC0Qj^uCdihbacbDEoK}Y1*8iJIA8`Y^v7{2)evZJc?ZVP zv%|fftt|N$?2N6J`bBv4vyEwZolP)-HEj^u0Txxms7G|kP`bSQ zxGw4}QWswH4otFtQ182)_Gcm6P}-k)>Q2*xM6Vy(T7PLr=@Zb1*|cyi=Ti*^`f`)m zF7rUUkFRV0-yUd0z?9zw!0oXCz&QMeZ{LF3!?)nKrK?fY@PK|;mq9x7ooWih|6mRH z(^v$Xj=%<>y<7G(zqxdVM;Kysqe12`z9#BIJO7k%d4u@N=MR}3ZQpV&&g9sS%&sl5 z*&WVX6PL6hi4~RchOf;X;+1u)(J+m92VJk1Uv3baS{Jnq>ZW9$vBylka1aTGD9)PQ z;H;RQTO`^ySWmc`rd@1j1jwI?UED6(`U^Uk6}xt~KC{iW^qag!9L7u@X(0IawMNlU z&RNi6uUhzkpFX!+Z2KD$>YvwMKIl4Uz%K54ZDKzzh!35_J?nVmx4oUxBa@GF-HuCR zet*PyKl%bPa(8co>q>DK-ZL&FZoX(4JZ9j`vfjnI&(LEx2|oj&<$LnYtOpeW>*t6 z95dWlFI4^YOqmcDnPwJVy)kFKkUKuDl-Gx!E*D-saIVUs8=qPwyjGa9Nmyb?Diwl? zlFRs@RjIW?{Jz9;q1TXDDddKo-z4N363oKMeaR&bU3f~F5Z}&~3QaGJpvU0nmlU~v z8P}C(tH9l*jh!4fu>v%V_860?HbRIGVCEi|Vj%u%LI4{Y-l$O`TroRPR8zd0S5)iR& zh)P`)i26t)2uRgsGG)M%0!bDt*2V3vGuFxHh4|~qB`5(B%7v`3Gc`iafwUUo&Umhj zPc8P80IC+^zwDQ+Y%cSas++W5?14(*)gEs*8E9|3DC32kBf88A@K+H*Y>h4mp~BEa zm!ZV;DV(mjk@-gE2UqGi*=e#%6?E9`-VWio3Ch)>bcPNbC*g6!(Q&xZh%WHnPVzF_ z*#x#26I2nYJG_3F(xI;&U{P*x$t3*TG=Al181jKKrlWK z-$_UA)>j9<-zWK^Ji%ud(##^Y)^X@Fd^p^BUwdOicYG0zNXXRQtD}CUYy$G@fs*?M z19ncw?dI`gjp7YBGkay)>7DiuP56~xF~J08qO-G+e1w zaS>V=wG};v+mt0ke^OIcZPIyv`bTCy<@(twp|{Ai-k}RSUn<;Pl~yJ66>(+4Dh- zbX4iY0BqM(@c@WukhwRIQqa0(+2RpTRAtuLO1Y`+zul7?Coo$X}pj;uhW$^#oX?y zv7)pZ-MVm(Gx?~cUG+y|Ldl;_h*v4@vnx(X4jjn~MSs>!;SNKshua~E6ULsesFqlE zsi4d#wdSr|U>WLIBTG)jyGTMr@h%bu8GfsAoFBul4K|`{^FgpHSVfb@;|E|>Mvsiu z8>!`p!ITmauk9q@zKIemb#%mCRMDvjf%|{R-BuT=86H}H}o6MXKJ0l>?NlXU_;C+y|I3JE? zA?^*RM>sb&ymv}CV}i*eQ5?YlM?U7k-=ALfcMQb}sE1KT9XOMa2{4+mzuG`*$&ca< z=2Ga~oHS<{$^N#Sw zsh{o_P2YC0prMX%dc>J<+j2xjtZQ>QOOssa6wj_f3F}tyD(xWR-<){1FMNAgOiH zj-St~{#gR(ZLk8O!3SZXs4A4~S?~<&r{JDNPpa@oAC1R94{r&WOtLQ=tlEFJM0oRy zx6MM|U(S>ZLHoPPgr`>}l?fFRGpE!FGsiy`IgLpz$T@KFQrLmP=t&QLVi#T-Ag2CA3)MR7&5dg#wsK7sdWKO8tSzSYM84ogD!tO zav7m?Z;F~Vq2-Q~k`a`3@G|U?mgh%;Cx_XQrwQr6XW+dnSMD*Wc$m=Xn|=G8$%nYb znD*;6+jS?9<FhunUyO}z5o9L2=B&EhLo^cttX$-~xI z%+)o?RBz^=OS3^g^?lvD`mlRGKz@m`o)pNJ|tdSjy;z>~9w4#RbL+(^0QYf2% z8FB5iI$(J;N&k@l@CV%NiQt#+A)6lQaTMnzO`sT}6z%)~KjXF@<2OiTx~em!D0tA> zycWq72`{XAyGHoGFHqbBtvFwc0ko+~I2M^)D=Z05E5*PVT~Y51jGbR4+0?tYr{-Y? zbgg?ZCb)s=pILu55|*5Z8helrFj7zw!opW(29o7b#!odDLSm%7r3cXL-DiYdDI8`_ ziSy$?v)Hc!GlSHHB?Wn1J<~`Tv5&Grnqc%J0&PE4*w`)vC0szaARU^!m6o6#@`d6n zDBbOqR&pkv>}H|#ZVaUhx(8>h|47x}52tdXY5y>Qb|W^I(n$VBvLbHb<#2JQS@mio5~R|3;bW75dlOU>?dIgwhx`Lh%8z*l{O+ zB&;dWL)D4L4}c!Mo1CI474Ed3E)$l7vDC}yO2^EiIVD0>E2d*wzDO$<`XV2Su~GlY zX%>2H>LbGIl1GKtl!cbkF)a7Y!fORv8ec6oK)r{TF*C`fl#`2!CXr^64G*Ow zeQit<0t{0c7=LIzln`dIF#roS!iZQ6;2*fW^m#S_f27Ena= z@$g@;#-hg1R8PTTi6rna(fdiaL+8%0x+_@o&6w>a2i6*O-u1%a4;pzaS)CG-r=izb zcJp#KpJmMKWIy6(#?@w8Td?Y3C?{6J)|-(X7Lq=6uo_lNmpMPmNZ*1*f_Qf6d~U_R z_iedL!fjN7>|C~B-Nmi^Fde%spOZru#jd>+9e#g2lt@ORGDS|Z6L8pUPh&q`4@E%#Xu zHTVys?nTV5$>tW3&3R{MRXbF5lByrcd|MRrouJ~`+g>RXOGdjLfle_xrkqBOUBIlF zOfXipW-`?Y%$n(JoNCRifmt(+NLH;`8F2y!FkX<1ncaT^W2VGIUE(?bmiWRL@S%0@ zB3`z;IC!_>m>%UIY-1!Fx73W@a+ zt0hyzEQNI)wBb7xmP}=@&!e<@K=W-866Ld6YA|wfh#c0S^uv@1G9CT+DqdkXRm_+; zx9~p1=N~dY#~0=`n4lpt%u>kE;;|(dMg-ECZj)s-K3q-`%7rc8 zz~yU8w=%PI3v48~&BrhQ+B=WWs=>3P`=pYv1uN(^t*HWs&G~c zQG+jbFzVziR0qfU`w6OBw?^#}Z_&^F<4ABnS-P4jy%{Q_kt)HjhKIsvMWC}1XCb2v z9nOM07?qARM2t4{+l^Rn8pUBNWnW(0l8&V9huf*B=Lw)o^N_}pm{urEPtQ@SQ4+x^ z^rt5Zt7Bah4TNE=6)@@eH7vAgc0jpJa~f(u%b@_GL!r7KmcDVPrrcG7zU%K|M)3eq z*xq+5@vN&xc%dk*#1RyhYPO#I6Lk>@u#f((gRQz(496tj$2tID~aQYi%O!}McI zQ7THJh|}wl4M~V!HeBHpV`KQju84Qid<2AFT8 zA3ZUjRuRM=1qhY?B*JWL=yQ82#T5bPuDFuNmwkHayLUd{F=Y*|)dwN3 zRJ^1Dm~-j(+W*;Bj5?5BM=EwfAci^Yl39QazfrJsNd?$yJk{A?E0%0oCX(u`R5HVd zuLU{f`A=3?-GATXPTzzRCinJGUG!|ZL%)AECMFGOB|`5PJ+(rMA*o7OQj};G;`$X| U9d&t^%TV&?2Im0&9gzP20a!sx0{{R3 literal 0 HcmV?d00001 diff --git a/bin/librm4/tokens.nbin b/bin/librm4/tokens.nbin new file mode 100644 index 0000000000000000000000000000000000000000..427553fc293199742c32cd7f742ae44f469f5764 GIT binary patch literal 3203 zcmbVOeNa@_6+i330)f>91L0$;S8yVb)diNX%-EKub zJLy8=)=jk&!4OuWqqfOF24d`_~x?y}D? zw14FNap&H1&OPs(bIL!R1lYkKX2xqy3Q@2YZC8AQ6-y@@#=?Gv zzdRz+Dz(_5?Ej}lp>Ct2s+9-Dnu$S4bj0VU8EuMt((v^vy&uB`a7_|8S)lIf_<`-*gVI{=3p!UJ3fB$*@D!`f< z_&u0s-~m)aTsIVgt_UHW2v9G6RGqdpXRRYXAL7N*e?#|b&TJjKH6X8GpPdgB|I0ey zzn6FOx5}7j!*Q&dwrXq>IbEmSCFK@Wqg~lcA{*;EwF5aJc8NCdR zw{rIo+asr(F4@O#PL;LtV}CJA{HvVOHh!VwN|a?^K1%zcQH}pXh$r#CYM`T5P@G{AA1wBf}N{m*TiDjx|%eIh&>4q?5P08cPYZOJB zs4Xdcyb%eHVl-1w5jv!0m0EPMRGo^YN?kOY6N7OTo;@8-gfdymMI*F&=y{>34k!f8W})0`?TgoWHa$0$01``oB@xm`ZeYF zRNjCx{!jL-yvs{q^K2Xm*5*lr!LIrp7lYevn|tLI>pqo&KPlKUtlSfdW@Zh@gShlSHVgCH=IGBWqWlQOPbLS>T)a`+7 zQCY#JhR(EZ_=*q--;$z~`WK{OrEBl^C1tMgx+Ir>KGDu^Hh!>=+p|gz@Ly(s(8UjC zvo^l|R7IPA{oo~uKa*p&abqLSw%uX-_=BMeB%!QJhh+VmC9V9KCR7-6COY}CAC$C3 ziOC>{si-Ow2oBqNUNgfh6;6c7I{UDPr`S;iIJ=&ULW(=*)Gw<1hjS3^^vy{!DcyOA}0n- z6CwKOW6KblMSHP>X@`mI()?E+zQL0T3Kff>AiMEh2~Y%D>U~5(CIaC7@ve8p;ggI2 zu+XrJuk8EGt(Xh0M;m+E6G6cO08;DD1b=0_6@gvd6 z^L{(_C4I5mH5oKj*yjtkYdUBuak@^?yKk?|(XGh<%4l5_wM{g*_cdtl~{1-e( B-dq3x literal 0 HcmV?d00001 diff --git a/bin/librm4/tomem.nbin b/bin/librm4/tomem.nbin new file mode 100644 index 0000000000000000000000000000000000000000..dd5762a069f8f952cc758a7b10008b68f010594f GIT binary patch literal 8365 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 literal 0 HcmV?d00001 diff --git a/bin/librm4/transl.fbin b/bin/librm4/transl.fbin new file mode 100644 index 00000000..276fd56e --- /dev/null +++ b/bin/librm4/transl.fbin @@ -0,0 +1,28 @@ +' + + + + + + + + TRANSLATE #DECL ("VALUE" > ]> +]> "OPTIONAL" ANY ANY ANY ANY) SIXTOS USET +ITS-CALL STRTOX T "TRANAD" #FALSE ("NO ROOM IN SYSTEM FOR NEW TRANSLATION ENTRY" +) "TRANDL" #FALSE ("NO SUCH TRANSLATION ENTRY TO DELETE") "TRANCL" "TTY" "INPUT" + "OUTPUT" "INFERIORS"]>> + .GLUE > + + + > [ +REST ]> "OPTIONAL" ANY ANY ANY)] 169>> + + > "OPTIONAL" ANY ANY)] 300>> + + CHANNEL >)] 379>> + + diff --git a/bin/librm4/tree.nbin b/bin/librm4/tree.nbin new file mode 100644 index 0000000000000000000000000000000000000000..ca6266be53e9081befdb207d9fe17b7c8ee2a4e8 GIT binary patch literal 5456 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 Po$Y&Fh`WAL^Voj?bW#;n literal 0 HcmV?d00001 diff --git a/bin/librm4/tscrip.nbin b/bin/librm4/tscrip.nbin new file mode 100644 index 0000000000000000000000000000000000000000..a6ef2f76d628495efcb564c27498d4a2c3872c3e GIT binary patch literal 1501 zcmbu8Ur1Y59LIk*Mz6JIxiJc^&hB_EYnleNm}U+}>rHZ2L$BtNT>FSRcxeZN=BpmrWR=>|A>jOYAx4rsR-{=S@bME*@F&Wxx^ zacm{_buoMBr+gvkkK`ZUtNEy9J?{UV)yBTGmj09#lAK@0q;^hOD0C0cm0NxK=#ML; z=>X1HGjF5#njs-&4FKGM{RRk!L97pUo|^#J_zNIz&Vt|ygvOxSoW2cvp?3_b%;`xG z0wDkaqGRBs75Lctot646+QeSM=DU(UV|_o2^Q86>o+@M;oodJ^j=kdDJ|=20%PMdY5e)gsBEZ=z+cFROYh>&&5FwRw2*|^U5N;jF8xP zlBQfcXns!hgJDr}aIyJy0VEI@1!48#rAxi#XEbC==2R86M{z_&J~B9a{|1(kGO+3M z=r=T#{?`ZT&mol1V}+ZVwh-&bC>cq_G(D1d6Cu{r%lb7(d-_tZl};gwk*#nHc}Gj< zb^8=>|EsO>QsNA}$WL+ixqTDqR1d7$$uGUra5)7CUf>}oQ#vvWtvvj<*!0!Zj%8o5 z)5bu^01w}GRNTC~2<aP3*~U;LrP>8vq&ypHPl=MhQ4{7juk88VsF>JVr7w~K*h>#9)|nD|9(1k2HZfu5^%kD#5tZu zWfa!mUp!eZffL$za%D(7JUoW#>TK8BAR>9P=k6@G{z2yYHool$f?40QTM!%BMeuU@ z83^|-7??j&&i};#dd1_dyI^p>tKw}&!AeU$TwEF%%#l9y>n$YnS$Ia_e={gu{+2pi t=qfWPJy|MGhjnLi^`G&yMyHmo$~f3aI0HNo)s)Cd#ae$0wYaKi)>AW2mGA%n literal 0 HcmV?d00001 diff --git a/bin/librm4/tstate.nbin b/bin/librm4/tstate.nbin new file mode 100644 index 0000000000000000000000000000000000000000..d6b0813a841bb47415241a29aeee483d0e332354 GIT binary patch literal 2925 zcmbtWeNa@_6+a8eJ^~xwihN0;5BvgI`7p4o#xVPUjSwL$MGYS@hFan(AiJcD5^HLQ zT8Nfm9Y{tR6A0A;K?aG?p^0@eLo>A#njw`=Xo+J@HG&fm^zPf;x65wNeZWH7%%qvV zKknRn&*wewobx-g?eFSqZB_sH;~B!dzx#@%|32Sk>ulvBX47>$&e;DNQ^0>$@J?QQvy7_|2ik|a?8KbF3rtw*3F56&1Y4WG z8f_%OF{8EOS^XwC;P(=Nli-)U)d1cqbtZtN;R49wRvMrn3GZYM8-UCLwQhG@lmUEI zYZ+vD+56<48At*JT>|5aj?ud$2%g_H^h2M8E(E-da>B;D-MQKVs=3w}BoTxOfE-I3 z$jU-F0~87@fSfAWKwuF3EgzqUYL%KAYWO+Gh)e?t)f)M9zNO(L$W&@{C>9K`+9Ml8 zWn($7{dHU#wS%V=iI|`TR7a2Brr6TZ>vl*BWEjDlu)S_Kmw^hX#X!j-=W7Ipcxgb1 z$BaGn1z?C$_Sd1PB2UfHAQ=NsKZ@0^RaDUj zXy|d09*=I>EcdG-_%~u{xaPRb{dG1BO6<~$>Fb2feyHS7vLH^2YCREJ3g?pNL`Gl3 z;AP*3UjBDsdjG;>HYkYzl@P;%a_$-N{K)NwL!~jKFEp-~>r=!P$d6(|? z!$ABR0~CLEH2i5aLccp2)I`VkjYcx&WB&gc4Tql($i7!J=#NYNwrJ1{3zss2$WSTg zg>jaG7z^@UMgSIM_)Ed8m(EQvYF+1(wY z`LK>Brl_G7@|bdOt^Lg(w)3{9F16|GWOG)ledLuWdhEi|SM@a72H2e!#Z~vYUDoDb z54YM3oA>mP;I&+nedG@R4hgzHT4!eua=O`eGshE#^(^bBC!JS+SAE-6A2~7PDlm~x zUFkXxb&=1e5f4o{pGkUfldz=Zu2UnH-u*9Cl$o_oPdTrC$kjP_JZuPFZfH>zQJN-h zk<~}Jrn$ja??%jKdI-zBV!1QU*HYSsT=h%-Z7iK~e&l<)*wTIA;VswIke*_y9*=u_ z=+d?*vGMkex$DtYx17$)Q@p+9cS06cg(cXL$pOC4{{?zr()`$133$8`+BroaS4cB=}op;h4)#xfXX1L+}$-8AZuvOY)cvOQT437toYd8QsM9;{w!32y3 zbfC~8A+x}scWp95E-(oI&#u}O!kOZXunCxG09{q+>zph00^|UL;<{ISWJXu48Fm4~ z0;Iq6Vo9_qJ`6ShgOy^t`paEirp+v@2RZhfw4A2{e2+b+NB?B?(1JcuuVShXnu-!Y zIRkfKKlm1)Dg{-gI^xHJoP$7YWmr>k4eXU9G9u%%b7xjuf^b-2fajz;+tF)Reg-}U z2$+!>p=ti^n{&=D<~{}pn!yM>1HKyA4t_?|yfQmty-T(m{3Sl?b>Gtwv$@=7Z;(Ll zMu$D|p6(6n#Jb^bTdz5;5lgbIMhrg86)wUw5<1!OLqf%ueWik8Y#T3p7M@Znl%L~D zg)M*AR0z)(^_7xmezgC zH7h6e9b$b@t&~mN(gdMGgz%CE1!*W)f+!Daq)@!{rU)UYJ0H69TZFl%Xk&kZ!W`vC ztil|jG}`pT|BZ%I%RKGDaUK~Yb_q6@OseVhK^u1v1v!7jx9NNiGnBQ|)&8N85`vcz z7*s;y>5O3EG7w8G2!q=wZYgM!f0BZ|1M&62>y+^HLeIynky^XdVtv{a#x-Dbh#koSkg@ zI7!jxc8g}j0Y@kHlNod%oG$ZCz#V@QQY4?!a<->w-79xsfqLm7bpDQ(pi6xY)`6E6 zLZmwzEuJH|MF?Xd0Aw!%cnVJrGJK<_=DY!GZoaCFE21g*;rG8*m5p@fcM;{+dvHFk z=qnMX!m&KIoaYV*72%1M!Z%-H0ZbKYXrXK^BLP@TLUxfR-O=kAp+Ar2>+Hq@pPb+x F`xm(;TF(Fg literal 0 HcmV?d00001 diff --git a/bin/librm4/tty.fbin b/bin/librm4/tty.fbin new file mode 100644 index 00000000..422545d0 --- /dev/null +++ b/bin/librm4/tty.fbin @@ -0,0 +1,48 @@ +' + + + + + + IOT #DECL ("VALUE" CHARACTER +"OPTIONAL" )]>> + .GLUE > + + + TTY-SET #DECL (]> ]>> "OPTIONAL" CHANNEL) ![ +2181570690 3255312514!] ![20724921555 20724953299!] T TTYSET-FAILURE!-ERRORS]>> + .GLUE > + + +> + +> + + TTY-GET #DECL ("OPTIONAL" ]>> ) TTYGET-FAILURE!-ERRORS]> +> + .GLUE > + + + CNS-GET #DECL ("OPTIONAL" ]>> CHANNEL) CNSGET-FAILURE!-ERRORS]>> + .GLUE > + + + CNS-SET #DECL (]> "OPTIONAL" CHANNEL) CNSSET-FAILURE!-ERRORS]>> + .GLUE > + + + RCPOS #DECL ("OPTIONAL" ]>> CHANNEL) RCPOS-FAILURE!-ERRORS]>> + .GLUE > + + + SCML #DECL ("VALUE" FIX FIX +CHANNEL) SCML-FAILURE!-ERRORS]>> + .GLUE > + + + diff --git a/bin/librm4/txtuti.fbin b/bin/librm4/txtuti.fbin new file mode 100644 index 00000000..f8e6b024 --- /dev/null +++ b/bin/librm4/txtuti.fbin @@ -0,0 +1,29 @@ +' + + + + + + >> + + + +> + + + + + + SMASH #DECL ("VALUE" STRING +STRING CHARACTER CHARACTER) % "" T +".,'\"!()&<>?-:*;+" " " % " " %]>> + .GLUE > + + +> + + < +LIST [REST STRING]>)] 410>> + + diff --git a/bin/librm4/ugrf.nbin b/bin/librm4/ugrf.nbin new file mode 100644 index 0000000000000000000000000000000000000000..10737250cdad01ce73651d34e37ae1b11a6f11dd GIT binary patch literal 56198 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 + + + + + + + + + + 0 0 0]> + + + + + + + + + + ULIST-RESET #DECL ("VALUE" +VECTOR) INDENT-TO LSR-EXTRACT % T OUTCHAN " " % %< +RGLOC PLACEH T> A % "" %]>> + .GLUE > + + +> + +)] 37>> + + VECTOR "OPTIONAL" )] 143>> + + VECTOR "OPTIONAL" )] 264>> + + VECTOR)] 440>> + + + + + + + + STRING [REST ]>)] 473>> + +> + +)] 1494>> + + diff --git a/bin/librm4/undecl.nbin b/bin/librm4/undecl.nbin new file mode 100644 index 0000000000000000000000000000000000000000..69d54e3f99f20c86852c36adbc85834100835aab GIT binary patch literal 7312 zcmb6ee^3zmPDe~t7yXDh2Q(7d!8k;!sQbYCeQR9Mv{Yvhp*J;6S zk+-E>I_^G`a=FWWHtmBR#bK=4@41omPKUhB^p<7l==Wc2me2mY>a1iy5M{f5WXX@&^k(c*)&2@5*|Q>t}W!2M7Lo zeJ>;BJ}182C7;Zqjr7H|+jYeFyn?-mvb{&CYFK4awwuaNC@*AK+m-#Fi?7S4Z_!j7 zK!(_s3w=x~jZYx(*`wBWPsirpACcgiXmJ4uABnsZ!Xz#qqTF@D&Ki*~0g$*f;N0zf z5W&7>uWJHuckTo(GY@c~vrjntrB|CXA~Vk+tQ-Cepu*h^+&91Y%q*PCDF8@u*O_6q z1ifC57*;#jBJpoPw5T)UMtlNo)YkH0=A4M>iwMpdK#R`+2PA}|#r|(J9Z^{liWYZo zv|&9!BJDOe6wPo~v{1PC$>1b?uh%OUKLn60I)wGZIRFM?t&(uPVi+z+QKZv3x*d76 z`5+^T+US}-ye1zK3Ai^i&k51)&Nm?0-P!9MVXw>wQO}|XphMt2orHFW6#FbHF?LO! zNY--3y?7_1U~cTwM7dakosc1h0q_z4WJvmK#3(@w870rqOgkBCD)$JNP9ku`)vh2o zuFc6w_u&G`dq*rrqLQK4>n8Hg1;GVGRsAa9O$0JT+&4=c5r{+rDAtZc?oa!K^92Pc z42h7Lo#YT6QQ5_X3)yoV!lMCK(Gf^F5%3U!775;fIEjCrv>TDyDsea!3#XyR4KctG z@Y(=w3Qem*aic?VqbJ~o0>_5}$7{eOo9gnk$6#Q~cv9ksa6$|@QnXlrqDqht(e_#;n(`O z?999p%Gt*-VBhHzE)MVM<1$8NieG5+dfiw1xTTqM$$}&~fPDQUL zT3`D2Cw<~2nw-H)DoGX#&?C^FzXYdM2*NNB#u#CwiUqap_a;LAE3n)afE)E~Ry)}G z70J2uLVu^0+Q{qurOQ9c%+onzeSG@s7s08Oj7FGxQEtsCC{AiwDo4lT9$?NxVf`zA zdgpfGzP?IoPtW>vE8g@Xj@Xszr$WGeOv!w zO0%PsW?NZerurI-yzsLq)LSWBTgcPYn&A_W6%N1sg6u*VxhW2QrU;l#DLJ$Q) zGc+nbMf7^d0+lC1wGI+!X7y$rWrN{;ef%QgpqVhz-JO_!eItLxL$n`kCU3dG3Ls|Z zDRCsx7)sP0s5De3xyuZK5R!4qbAE)|_6Z1Bl?Z|72)~Zf#WJ$SDzZ>LTcETuhBc<0 z;?0C4J1^DhsAQq*3T_SqV%W43M?{27WkSAg+ufJU!lm3aUv}K+?_?%|Twox?(;%6p zX)*#5w-Yd9B5M*CNoMw?%_c4NJ;2xglRW9N-@AB(^|P`t%pq*jSYauVj6NwyC@UFE z7BLn%)4CM=R-8@*l4;9#16wAO6FE^+|0Y{T4>w}EV_?j_xrGj12v}t^TL?^RG?ym^ zJ|bN_g&zCzCzF_qp$5#Q)*SYY{QP6~BAbm;U(hY=hM&}N)Z|W-$ZBQ6dUPipDO-+b%@~gK`HajGzghGoOS=S_yj;3!_QSiA&j7t>fWrLk;MagDY>Rd|%z zFSJ65lk!Si~^2#6loh_zhz%Aa5YWgdvqZo#c=^LQ~8UN-;Y~ge{9O`$b8B zd4{DdmT|Owk-+6ov?+C|QN-Hbpl`^tS0sO7Jd+E&=l2)Bh^B8cw_yH4YBCURDqGMh zZth|S|BVS1*Noq4w2HeB)9gB};<~`hpQG2s3Ds3IGFfILTfKKVB&V75=tWtAB}R17 zFDHNMY?f$R(_D%IPd%QXN}9XKuRaV2P2s}d(Ll5ljGE%G3UEQIJi4+tpT12c-@qe5 zD?9FpEcHw322)qlh`2f%Z zmuAKo0w}=$R0upsuOWJkF}O4{20u-I%YbS0K5%-70>}XYI1yr{PQjV(qhf>b=!D`8 zi7ssYDsIQbJ8F?MUwvD!u6qc-@nu85{$lwF9C4=Dvhd1eT;dRaOtuA-5}9eK*qrJPwKwki8>_EitLczR43$Temm3D!JTL4^=~4RTTdh)L_wV;Aj(yb@&$&&-_@^=b z?Jke`7XCrpuCF|$?EAarkQA>^nK`uj;DQ?WBrhp)U&^El0br|NEc$(!biGZsr*!v> zTs7EUmCXjxsx;2;M>b9s^>|J<1-amBfD(MN`XX zra8lnLMCKPJ-9M3@6YB*X)UO^4jO`)bAbmKTI2t{D9F34#Nr12#%i*p`K* zSsRRFL#KrzSmfZhxuTze7SK5$U1iAr)apNv*Vn@ub^0UIp3?EfX5I@KPQKWsdxf(@ zOb%eO#7F++p0b|t1uwv(Y+AJ8k&VXjjD8^J2e3XC#yJ}oiWo5T6gE7UF9O(*AzeN! z1|1V&(YpMxFP?#23`DLf=Vy=ab%DnvyaMMTwgkbW5UH>N7Cifu-p1{KxshC>E5ga$ zfEXug$Wote^Jec9&Vt#&SG%GzITHpqK+*b!^d;jjrwNa{bb4;ON`BSr1?!tj9GuEf zQBL9NrtPiy+zPf@SUNW|e``sBfWIG_@Ss;bHLH${yl7=)Q?Zk0Uc^ws4IJAZGm_3L;P}ewRA;g{WCQW z@u}*xVtI_tJM|?0T}U^o`)+KqPU9;f-A2>=4YR#*&+`X;zz-A_c&D!5yVz7-bD`5d zcC((p;iGJRV#(H(B9CgsN3N=A-?sHpn=l=6>d-Bs%4{*;o-s|RV5=inbuZ2wsx-aZ zBYzfhM>YX7V%e(E0Ljajd({Q-DgqK;CmCgc%eHNqdiy$rt8N&2X2XLq?+#jQ}W4Ro~_D3M>*wP%W+wHA9G!9!}Shn zb!`yi{;QexVrd7Hmc%uVB^Xyt3wT zyvNE-|Lw(*s|0s4m8w;(>7o?-xifE55L=m8k(>rIdD*g4Hgxx dReDGsApxh%$n^`DGO%0GZ+x#!9zu_Z{V)28!<7I4 literal 0 HcmV?d00001 diff --git a/bin/librm4/update.nbin b/bin/librm4/update.nbin new file mode 100644 index 0000000000000000000000000000000000000000..3dd24200335343593c0ecab52b483ad60f6f7879 GIT binary patch literal 10256 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 Z>^*YI=cl&f*GQuhdGXoC{m@OB^#2lbM~MIc literal 0 HcmV?d00001 diff --git a/bin/librm4/uvbyte.fbin b/bin/librm4/uvbyte.fbin new file mode 100644 index 00000000..31a36deb --- /dev/null +++ b/bin/librm4/uvbyte.fbin @@ -0,0 +1,12 @@ +' + + + + + + UV-BYTES #DECL ("VALUE" BYTES +]> FIX) UV-BYTES INVALID.BYTE.SIZE]>> + .GLUE > + + + diff --git a/bin/librm4/uvhack.fbin b/bin/librm4/uvhack.fbin new file mode 100644 index 00000000..1eac31cb --- /dev/null +++ b/bin/librm4/uvhack.fbin @@ -0,0 +1,15 @@ +' + + + + + + UV-TO-STR #DECL ("VALUE" +STRING UVECTOR)]>> + .GLUE > + + +> + + diff --git a/bin/librm4/uvstc.nbin b/bin/librm4/uvstc.nbin new file mode 100644 index 0000000000000000000000000000000000000000..848885f25f3c5db3dfdba007ef660547cce2900a GIT binary patch literal 6948 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 EFErh6F#rGn literal 0 HcmV?d00001 diff --git a/bin/librm4/vctman.fbin b/bin/librm4/vctman.fbin new file mode 100644 index 00000000..e056ecd0 --- /dev/null +++ b/bin/librm4/vctman.fbin @@ -0,0 +1,29 @@ +' + + + + + + + + + + + + + VCTBNS #DECL ("VALUE" VECTOR + > "OPTIONAL" FIX FIX)]>> + + VCTINS #DECL ("VALUE" VECTOR +VECTOR FIX ANY "TUPLE" ANY) OUT-OF-BOUNDS!-ERRORS]>> + +> + + < +OR VECTOR UVECTOR> FIX "OPTIONAL" FIX)] 79>> + + BLT-THRU-UV #DECL ( +"VALUE" UVECTOR UVECTOR)]>> + + diff --git a/bin/librm4/vctsrc.nbin b/bin/librm4/vctsrc.nbin new file mode 100644 index 0000000000000000000000000000000000000000..73b07e4e2abc0cf182dc9958a8ed9f3b776b1007 GIT binary patch literal 1178 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 Dk1Vsw literal 0 HcmV?d00001 diff --git a/bin/librm4/when.nbin b/bin/librm4/when.nbin new file mode 100644 index 0000000000000000000000000000000000000000..5e53ea63ce2ac9d8e138906c4be95a06136708a2 GIT binary patch literal 3668 zcmcgveQZG^AT1(Nks;XA0-56`uuF5lg{)kiRo%0-U zLPM3m_M|x1_nv#s@BGf!b9nIehNJO=pZ=*=GhZC-oftjK7l*5St9vItDBI?Z|E2kZ z^YM#&@!zjw-Z&){-ocQ%GulZu5rk56n>&xD`5Fab4@kVkjc5gJhDWza2 z{+mYzeilDgfP3bmvTiNImsc1&_0PYZ&ofaN<&HZC`xkb3T-? z?0V;XVt)$c#@@us*VmkkNA~!(CvFvA^J<@7=UxC{-8Q)fAkudZm~E*a3@gCYRaf5F z31E{0kQwQ_0y*Ekiu4`b$855nwSy-B8IishP?e0THMjzKk+**VZ6uNt>HA4)Z~i@d zbef?nh>iiQUx`<@aSmv_=je;c^xmXrIC(>=^ut08aK(*H;|IA3rEmQMAVUMx!c74% zYX$|Zyt-+;%eK@MG_C+YtCV@u_~FP-3B26UG#-jx8Uc5t54GqYnwc;!&05k-TC9tX|Okja)Q@1jdzo)ZNy|d-C(=~iJ-6D6u8+em7EWo}LWfLK-6kM+j+zkane!YV$Dv(r_Pd@xvyamsF}Cs*ZFCP1VA1a@;h6Y_n9F-`6;$+jEo9lT3bXIhssH8b;uwNd&;67DP&?-7enr zxxS!kO>!ebPG=U+YZ~8ADI82Ci{Vr%+ip?}+qj{WgbQ%b@B)@LMMTS|OvSh!nk9=; z&46NalVa1R$A-wbJquM|=~NN4-9%L=O_knZus5*obS0%yn6j6kg`{fAN+Xus5W0d987BD6(oe8nuOU!yVd#Bw^UBkLSxAY3ZyQ$`aITq4p9%xpqB#xEdaVMkM zE^030`p3OUsn{sI?VM*B*I`r3uZWyR{`B@Xz4q=j=X8zE;TkojdsRVo0E`;D0) zkApxSLUvg>b(li5o0Y2vo?}oMWmIZf%(kL34inEoD&wyx+#zbt8Q(&GpUy#c?P

0@^ZRoWo(?j2Kai=A5y;?lkawb*esxH{qfB~`cFBW%Blb3~7VN|i^7jVC{2)35 z7P=OR?9908LN4fOfXosJamWKOgCX2< zw!fT?@WK8vxz94=z3)Kr)iYYQ_35J%uRJs8jXT~P7)qQvckM)^w0P5N6OrrH7ve%O zUmL%^dtulmg|D(agQ~$2-(X7S%LTuD(^M)Vs<@&Tj%cfTo zW~*-~ajd_1SJZZ9WN-AnkKMk>H!S*FCX}g&#!;1Dx42}#+e3cf6aVkezy9#{C1CHt z63(7hO~+ZEnz@>-S2Jy_79Qa6teQ~@e^3p7gjZC91idPI7xsdw1|C)6V^X>g9s*WM z9N<%Bdw!l5vMkI63yRnx)p(9&L1q9}0P_$z_{2Njy8L4>`eCnX&|n!bKS1@e^16D} zGzuR=P5`XH0w{O7?09XUsS{dttnu$}?rFRIFV0>D1Kz0G-ugX9Tb-TlRzF7zChH7kK3&C2-=BY-7EyELRwPMMxYHpkE>U*6MJ_lbQNUfN$X!m+?i8ZO7b#wW=z|c>JXhgy6>Y)KXSQTic{u-ONzev>TjC`R3*q@vJhyd{q?Fuf3U`M=MP-KVfmbqvboQmR#t?ZXuqhB`K+hn`I zCA;K6ITYlgAUYf_r<=>NEK2BvQ*q07Cu&ecyW&u!l#6z^AfgAdC`ih(9ThsEz75q4 O-l`|PYvaTC3+#WyE!Fn` literal 0 HcmV?d00001 diff --git a/bin/librm4/x_uti.nbin b/bin/librm4/x_uti.nbin new file mode 100644 index 0000000000000000000000000000000000000000..7796e68df8e6912b4ac136b615708abfaed89b12 GIT binary patch literal 10226 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 Ak^lez literal 0 HcmV?d00001 diff --git a/bin/librm4/xgedit.fbin b/bin/librm4/xgedit.fbin new file mode 100644 index 00000000..c6947d10 --- /dev/null +++ b/bin/librm4/xgedit.fbin @@ -0,0 +1,88 @@ +' + + + + + + + +]>> + + SYM.EDIT #DECL ("VALUE" ANY +ATOM > > "OPTIONAL" FIX) READER READARGS PPRINT SAMP!-IEDIT G.EDIT +READ-PATH (>) PRINT-PATH ELNUM (FIX) % "SYMBOL" % TOP-LOC (ANY) TOP-OBJ () +"INSERT" % "CHANGE" % "KILL" +% % % % % % % DEPTH.G.EDIT GROUP-EDIT-ACT (ACTIVATION) ELOC ER () LCOMS (LIST) ETHING PT.G.EDIT LISTEN-LOOP OBLIST () +"*" "NULL-LINE" "R" "L" "K" M NPT.G.EDIT OUTCHAN "RIGHT EDGE" "LEFT EDGE" "C" +"D" LIST "BOTTOM LEVEL" "U" T "TOP LEVEL" "?" "PT" "P" "I" "Q" "QUIT" +"ILLEGAL COMMAND - " "TOO FEW ARGUMENTS FOR " "" INCHAN % + % ANONF0!-TMP #DECL ("VALUE" ANY ANY)]> +"(s)" "MULT" "to " % ANONF2!-TMP #DECL ( +"VALUE" ANY ANY) ELNUM]> % "Command Explanation" " " " " +]>> + .GLUE > + + +> > "TUPLE" )] 88>> + +> + +)] 879>> + + ANY)] 982>> + +> ANY)] 1075>> + +)] 1171 +>> + + )] 1191>> + + )] 1212>> + + ANY)] 1263>> + + "OPTIONAL" STRING VECTOR VECTOR> ANY +APPLICABLE)] 1304>> + +> "OPTIONAL" STRING VECTOR +VECTOR> APPLICABLE)] 1488>> + + )] 1577>> + +> )] 1598>> + +> FIX)] 1617>> + +> ANY ANY "OPTIONAL" ANY)] 1634>> + + + + +> + + diff --git a/bin/librm4/xuname.nbin b/bin/librm4/xuname.nbin new file mode 100644 index 0000000000000000000000000000000000000000..667ebf4c7a40291a2170bfe6e794a0c62ff3eae3 GIT binary patch literal 520 zcmeyksI9B=mq6m_<{uvels5j_yx?s27yk*oq8}H{bDjHZ%9;gGF)>xY=ARn_f|vii zkao283$v@u@*i83VX_Pt6dW0VfL}*0gMm?-ft`(CKdOR(fuk&gf%gmJ76wrz4F(40 zPY)Uxm`$8A7})fb7#IY;_BJ;#f9-8xV6@Q4U|?2IQea@#kz=>x0~(Mh_O*QrgCMF= z+}aEo3``8n2@H%L5)2HC49q~=J^<|%1Y!opkC#^dNC$EGKVAu6kq#0A0s#i5-#G#i zt3eKT{8FfNc;*)_!La6^QzhwghKbZUd1Y4IhuZ^Rhi-L_~aPUvV z=dPXh3hq9kKh{ss>-PzDRj>&N4N=hfEt>8)+Z80?s-UhIZD?+4X!fmlwqdc6f{~%g zx3@CJx!?LE6q3KakW}3L{X8T-g1diBybv)J;*a&3!K;6SOgjpWBmduJTIWE~1Czz! g%j9qC=PO8mbav$x{XQ|>W#JElrw99iPE&9M0J)sT2LJ#7 literal 0 HcmV?d00001 diff --git a/bin/mbprog/assem.fbin b/bin/mbprog/assem.fbin new file mode 100644 index 00000000..8b055b81 --- /dev/null +++ b/bin/mbprog/assem.fbin @@ -0,0 +1,348 @@ +' + +> > + + >> + + + +)> + +ASSEMBLY-OPSYS + +GLUE + +TMP + +> > >>) (ELSE > >>) +> + + + +> + + + +$TLOSE + +NUMPRI + + + +)> + + >>> + + >>> + + + + + + + +> > < +INSERT "MUDREF" <1 .OBLIST>>> WORD> > < +INSERT "OPCODE" <1 .OBLIST>>> WORD>) (ELSE > > )> + +>> > >>>>> + + > 1> !\ >)> + + (,MOB !)> + +> #FUNCTION ((X) >) + '(*INSERT ARG SQUOZE END)>">>> + + + + + + + + + + + + + + "TTY:"> + + <>> + + <>> + + T> + + > + + ATOSQ #DECL ("VALUE" ANY < +PRIMTYPE WORD>) ASSEMBLE CER CER EPRINT CMESS GLUE MAKE-SYM-TABLE LINE-CHANNEL +MESSAGE-CHANNEL OBLIST OP!-PACKAGE % DEFAULT (LIST) GEOF (ANY) +MORE-INSTS TITLE-STATEMENT DONT-LIST-N (FIX) "DONE IN" "SECONDS" QUICK-FORMAT +"READ" (]>) REOF % "PRINTB" "PRINT" +"ETMP.TMP" "_ETMP_ >" ASSEMBLY-OPSYS "ATMP" "TMP" "_ATMP_" ">" "TTY:" % TITLE SETG FREEZE PUT GVAL QUOTE AND .GLUE OUTCHAN +":<" ".NBIN" TO " " "NBIN" "BINARY" CODE-LIST MESS-CHAN ILNTH MCLNTH FIXES IMPS +PHRED!-TMP MCS PQS NAMED SUB-ENTS IND GLOB-SYM () EOF INTRS T +POS- POS SWAP FULL (BITS) UNRESOLVED COUNT HERE % % (ADDRESS) " " " " + ";" "CONSTANTS BEGIN AT LOCATION" "CONSTANTS END AT LOCATION" "LABEL" +"AT LOCATION" "MULTIPLY DEFINED LABEL" % ![TMP +ICC!-CC!-PACKAGE CC!-PACKAGE!] "UNDEFINED SYMBOL" "USED AT" WORD "BAD SYMBOL" %< +TYPE-C MUDREF WORD> % % % %< +TYPE-C PCL WORD> "EMPTY FORM AT LOCATION" "SPLICING MACRO NOT AT TOP LEVEL" +"EMPTY LIST USED AT" "EMPTY VECTOR USED AT" % % + "UNRECOGNIZED ITEM" % "ITEMS UNRESOLVED AFTER SECOND PASS" +% RSUBR "BINARY FIXUPS BEING MISUSED" % "BAD BINARY FIXUPS HACK" ADD-TO-FIXUPS +"************** +ASSEMBLY ERROR -- " "************** +" "BAD TYPE-CODE" ANY % "SWAPPED TYPE-CODE OF NEWTYPE" +"USE TYPE-WORD" % $TLOSE % MOVEI A* ACALL +MCALL* ACALL* % FOO % % +"BAD OR MULTIPLE TITLE OF" "TITLE: " "ILLEGAL INTERNAL-ENTRY" "INTERNAL-ENTRY" +"ILLEGAL SUB-ENTRY" "SUB-ENTRY" "DECLARE OUT OF PLACE" % LDB ( +74560) DPB #SPLICE ( ) % TEMPLATE +SAVACS* ![#BITS *140600000000* #BITS *060600000000* #BITS *000600000000*!] +INCHAN "Is this assembly for " "? +" % "Is this assembly for" ") " "? Answer 1, 2, or 3 +" ITS "YyTt" "BAD INSERT FILE NAME" "BAD CHAR IN SIXBIT" % PUSH +POP MOVE MOVEM]>> + .GLUE > + + + ANY ANY ANY)] 16>> + + ANY ANY ANY)] 309>> + + STRING "OPTIONAL" ANY "TUPLE" ANY)] 545>> + +> LIST ANY ANY ANY ANY ANY FIX)] 1209>> + +]>)] 2883>> + +> FIX )] 2941>> + + +FIX FIX )] 3011>> + +> + +> + + + ANY FIX)] 3482>> + +"KLUDGE TO MAKE $TMUMBLES FIX UP CORRECTLY" + + #FUNCTION ((X "AUX" ATM) > >> )>) > + +> + +> + +)] 3632>> + + 13> ADDRESS>> + + 14> ADDRESS>> + + 9> ADDRESS>> + + 10> ADDRESS>> + +"THE FOLLOWING ARE IN OP, BUT MAYBE DEFINED HERE" + +> )>> + +TITLE + +PSEUDO + +INTERNAL-ENTRY + +SUB-ENTRY + +DECLARE + +MQUOTE + +IQUOTE + +PQUOTE + +CQUOTE + +ARG + +GETYP + +PUTYP + +MCALL + +ACALL + +SYMDEF + +TYPE-CODE + +TYPE-WORD + +INTGO + +DSAVAC + +IFOPSYS + +*INSERT + +SIXBIT + +SQUOZE + +STACK + +BYTE + +DPUSH + +DPOP + +DMOVE + +DMOVEM + +SYMDEF? + +UNDEF? + +IF-NEEDED + +> > + +"HERE IS THE DEFINITION FOR SOME OF THE KLUDGES" + + +ANY)] 3717>> + +> ANY "OPTIONAL" FIX)] 3782>> + + ANY ANY) +] 3895>> + +> + + ANY)] +4060>> + +> + +> + +> + +> + +> + +> + +> + +> + +> + +> + + FIX)] 4632>> + +> + +> + +> + +]!>)] 4770>> + +> + +)] 5007>> + +)] +5036>> + +]>)] 5061>> + + )] 5285>> + +)] 5318> +> + +> + + +> + + STRING) +] 5424>> + + +STRING "OPTIONAL" ANY)] 5485>> + +> + + +ANY ANY "ARGS" ANY)] 5653>> + +> + + +> + +> + + +> + +> + + )> + +> > diff --git a/bin/mbprog/assem.nbin b/bin/mbprog/assem.nbin new file mode 100644 index 0000000000000000000000000000000000000000..ee2c4ef6ec4f91cec3a3edad45c0c56604728aa3 GIT binary patch literal 51168 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 literal 0 HcmV?d00001 diff --git a/bin/mbprog/buf.gbin b/bin/mbprog/buf.gbin new file mode 100644 index 0000000000000000000000000000000000000000..55ec6f64df75f53e9a6a65d99d79c70551c91842 GIT binary patch literal 44552 zcmcG%d0-S()(2YMou!-Z4jtJN5~K+z0Rm(r3yab~5ELYAngxUiA&Gzi0)(&)^Uxs- z<|7PlAvgq;fryMOLBM6^a~K6Dph0knz~e(ih(Ji7dQErd{m#8rU7Z+xes9Sim0IpS z_w47~b8lBQzxmhnjgDpib83sI-958RoKkM=*8Ju+i^V;=XhE%aLgIakJ9<#sCfD`` z^A-2$;l)?Pu0K!P?mXxGyG87lm}_x=UsBW{MkY60_U^1(ensp>_gLR2g8tm#2~RJo zb+56{w|Fb-mY;L)ODMSRU1wTx+56GGA1&_HvG-28*Tvtnct(`d)3_C9-Ss6yBAUmh zr2*bYRaZT(;^jB&W7CY??B&mn+vMz8{_HJx{o#8`-*wGzzHs$(HwGsFH&1#qmWn`p zc%j9+BfjcW?};P1*R3aI0IunM&HSDiCgxmsr?_&j+fSzHPP!{nt4@j$iH)_^6Nj&V zF7`^UBJAbSQa{MO&S{fzo-Jy-uDIboVJf&Rntq&C?TGzb+H~JQWzK{sX>c0ovZsEf zIoo>NZoTZ?^3*>fn#U|}yy5=ngCdLQpnIF^=ACnoJb10a{n3f4v)*i5)mhJo_;)QH zcX{zSPfI*-=~}vqIix8*^&PCg}q{U&GmZsmU45od-y#v1I~>Yi@R@{?o-dG?&g!8dQw_RmesoVo51#+ z-(IVCA1^5a4^~5rk&fI`p41v>Y*>xR6y!zMp;tfMwWOeEElW zE$-uDVXZemG3Tl`oG{HFe*czxL=T2!4lH?X3=HvvSnEzT6`mEtm)^Vry#lXB-K(ng zW|UmF*ehxr>lDNBE;Qv_c9*7JZ*Y^USWlpb^~C!*;AC>uS@($4>oAgjKLOJvGDRa( z7M*vmTDqv#S{mDQmG~mL4B4zK-oLKO{oGngDjN2|PiNg9y$YpCDV}ffcvizmM!bg0 zH~%_jzoYJ_w2iI_TquuVjHS10-6K!5wfJ{F+v=Kr%V&sWYFq#G=PqvdG5ZY(eEGBY z#V~qM>T@2mzLm!~AN9pn*I!KB3y`O|SL=PF$Y<~%VnwGcWUPKd9(`mOt;ItYNfTmbb{6z4T~v~hQDc`kQ1 z-}Q`2G+%{NXln50SJ{le`d4`$uU>^zZNGdPtpSlKy9m}n^ z?oa3A{y~g9{Ns7=+TP@Xmi=_rlOkRx%9-EA7+J;3C9*g!@S@fT$MW-@mV>vU-rSK5 zVV<8jE_>Tqb#Q`;=bsRJ4~m&uaM@e2EXLw>tTPL)^-{?(x(?OL`W;H+f8X=e_mC zEJlrlsa4ng3diR_hei?)cKV67(c&Ia?sFMkiSpv-Ydxi1=hwQwTYbAh)bIVe+Of?1 z1w|5FH3HCrTb}P+1y?+$Q{a3rbC)XzC4bub*LqhqHNo|rC$BsnIxbt(4KX~~`l+Yl zspeZAPka?QErns`8=jlP^G|x2y^#btudb!(F1jB{e->gqd=;+6e($>bxN8xZU4kgt z<+*=vc5X{A{M3`Vl>3|#c-9$P97T09YVzP@Ge5~BjJSE;z1jrt6OnlRhS)9YEkKN98 z>`Pd2*}V=PSPH%Gd{*rgB{XPoE5dAD+9B7=RVS-yv@hKs9=>Rb`IO!=Jo)laIax0wC#g+LKTuViXx!Q5? zMiu$6!du?bBDxN3hOG*5sFgJjMZ!f_URaZQ)TFN3R(k12G_i;Ddwf&nrr~b1lktX&=V8m32k;z3bxdFrIF9Cf=O1 zv1RCIf9~QcO+*H;#$I&AQ;}W(yDTCCy-&$imN8y&Z9nDx=tM4p za1vtFz68YceM;^FpXkCY20jckC2yq@;u)COh@5)K?fTZ}?vpSP%bE6?E1%rq>zGoA zrUq?ji@lCg&KXq@N^)U?kM}Ie-|V{IFiw)?6flDG?<4d;Y_wnTW_GDM?>VhtP)@O; zZUNHi^m(_uvko^(lf8{;x(3gPBs1nr%kF&Y{-_+1)(`q}kE6W$iM^zRwVv-NtEwnL zHh0=IgG~XhVvZvsIZnI}8{Gm*h=dcsQ(O?SkKQ@r^}*H3!BFU~vb{je*Gzbme~Unf7# zQl{0hjhEdYb|IFmD!c(ddG|6%osTqmb>VgI!gBL|Z^<$AH5#TFQcJ5Lj1f@87^uHMcXJaE{Mua7U+t?U@9Hi&jeHm_|tPh$q|SgR{M_ zQ+mFi=IE7b);Tvl&(&T!SA!{G-L=IGTIPTbfLBja50Ak$%e!=d5Ss3DJVscnAK)L>8Lv zbM>#Xz$cX_+#{IQ$+HtNqWL*!jtP@*%t&c8OjdR*`%x}qNC`9LQeZJ~_Bl(+cjFst zz4avkAGTTvI|L>5dab9n+$?cC@}3A4SYT%>*AV@Bz&_sm>xA7-@f#%Irxj1QI)_hwkU);# z;+nwXc`~xYuyjlsvep&CudOs+^|(b5lMsYnZZoS^&b#G-3DFebI+#PVB3Lb^04|m; zpg0vuT1UYFEGfzq!&lGa5z!g@&S#sP+va{H2Q=TbkGVshBPmpt(=02Vrp;YGLb|_? zW)7wyv+cFyeWvuI*#u<;rIJSY^uTXMdc(c;@O9X9QCnreJjJuWD7TiC7(AGe^XSJ3 zKtZ3;60Dx%!H(5_H)lj$D)(1Fnf5ZlB%t) zx&>4xjGDOD)x})@2V~r3lu;lx&0gL}MJLE3yacreq*kZgDevb>LP>c00*%&i8UF8T zz2}j`Fm~<*Qr|@$yE+fqO~3QIo#l)EDfjr3q}6N&B!%rxKP#UIpApn4@$UwTFzM&oDFi{Um&cVp#ZA-S(B zo{J-^Zh1?JR@76Hipg!tiUtI^X;Rwbt1PlK)S38$#0?5DvKng$!7ir{0<_da!~I-b)mXtP~K-{1PaB+^#0YZSJS8LacnE- zPcdo;5`w*dFBZdA7F`j$yg9Ad^-9cvUCz^8a}g3&4&bbF4a>W*#j$LFtPDPM2`HOw z^T_0>U%On%MTr~pPI@X6;n5$+yO0Szg)a#&xpvaqlXAEn@sRY0WA`p1)ur4gRy^g= z4$sHjx#*_F(fk~0mQS$YpiF6F@83W@jJqn(F&@F|!w(CPYP?THiNqX;f(!?K(&GKd zH17)1k82H{zdmiAiilWM*)r(48Aq%~u8o(Hh@Ikd&$>sgTyC-cC2#CDN5adjLNINMU$q|m(Xt0Bbxp3; zQdTg^w7Awi;zSkd2dsQDFm03b=7@#{4|Am-7v~|VtSdn6hWiL!I@s$>_}MJQ)gGZ! zcDr5+MWM%in0y2)2_zIWlRP$ioF!GPF+zfze!xHT)EQC`QL_xQqo|l|GovbrDmKL# zi2EbRW0d_KWnZ#l@(S)Z@HE-Yn5F)eV!%42?5NT;Qt5fcRTlik@ZtA>^JhqKm*ric z7=ZFD^!_pCWDo-|AB?PNglmx*h71`g><-F!c&&vz*Gytq&44LeUFi#eO9~~{EZuh{ zUOPwd?oxn+Q+YwFl%#G*fCsC9nn=8C4Bd`n zkx|wS=6o33SdD2=Njm2C`^f9C}dY^?I@A?w4*0V1WF|RV764G%#MTfsffxYC4cVG7dtdI-^`G#ku*S#MN z$K2&6VmC}rj#c|IT_+SEBGcqC6K_IF^Zk_#q3>m{Hvl!_tqx&V0kUY{4WYHnPQ>{hoS~ zK4sUeJmHR5^79q%#Jc%ZKB3gAE4g(OaEU0sS8I)KKk0%L;#sXPk;p2aKbWLl3qVp9FCnFG*%Hbq{n{hA=TJr)iG8!k- zqAcXrPc)YXQ8E$rMYZdxbjxN3MSHCBjNRkhR*uVUZ=cyBnw}kpO3~Y2Y^AeoXY*Ur zx45}?ZUDNncAx-tDRfs{gXAp zqF(p&e-KUYe3tDv_~Vpp$9eN9dN8)aaj<|Izm>L!p0W};F8`MHhQr#A9{lZ-*Btx$ z%q(+tefx`QYO>dv^d^laRYP&cY?_*EZ>W-Ui*(db7;SQuWV7SQz$u%Y+9;Gjj`lyW z#d+T}Zo6yw!e6rk7?e-MVfUFWjzo6GGq;Htvd`%~;sXniRh9PpV!Nxf-5}NKcnO z_ZX^2KbwP_1flbxmjBrx=wgy42!eH1ji9m$8(Uk4MCA*CF}<~dFh~dvif$4Tg)Vdm zrGt?UdTZIn4JvC{jnG>Zjtjl4|Gh!8CMF3ztYt3%3Z81%)1g_b1i`GHvq=0ZoJ0(!l&0f*}~!b2D~uTh{sJQRfKkD3Lck1*%%dJ$Ku z(Lx5@H4Eyt$oKalA7H(F zy;i4rJkHDkbMCGaJ0%K}r$(!DmYBi837o#UpszVBQJAC9M?_8#1?o%Ph{#+ zg7nu)f1~Ll@8R{M{WxdFEtLZY4RJQW_HK=^kjuX8ZLoe*jj)t4jm{RcvyP-Iu?3it z6h|^D#b{tKw0pkr2qSAW#t?El2d$%B1}@7N9%T}iz|d(s>Jz?E-)KAPR2p^4?->=) z%@1Q_8uk3Ijmr6CMzfel@`dNj16R?RAgHHCsnr6Ly!A9>VU7ZKa1T!(%olP*?FK=E z%K(09-C84jP3=_LxzS)b+04|r06O$R92j|Qpg9JuAPkFv;gGJV8TjdQF{BHEQaz@| z*-(IAD2=-T@+P2meWFl1Gz&cjK|<<+>61!^gQIlzWa{wI7(#G_pnuMYWnaq6>O&>-wLs1lbzKiMaziU*ZY%kRa))of<_@vz0M#?Ji z83+)lzRdC^Z}0;2mpLn77Lx?KvzC<-#Xx}0G-UanmN7$HTZaY_f4KvMs1%B=W$(4N zNC&t__z+cZ%|YN-%V^viY7PVE;2~PbIjqkBaf0|cfLcER`)q$nRK<0li+1)8 z645qj&fT@5FcghPqnnv|RFeUap*oO+kKqq!8N*eN`ZFAi0C4(CM|6M?NfJTP?W7KM z2-za4jtdW2KS4||k0Ja*F$RI^&loPMQiK7(4^N>Uf_XHU&D?}&g0|4pL87p6Lw_b{ zMdbilmD$mdW;M9cHux~!56cPw_^coRWiFM8EQUDAOpI|7YNc8zX%wRkR4PLfl_|=Q zOovITc}%wnx&o6BfUsWhR|wJ>sLPy9wnH_lKN3-)%wY|J1}*>$1Q764Wrjk5KWNK> zfCwRKMBN5Fm;jktH*NeloJ6;tm(&vL^rkQN=Ovk^8%;B3rq4l~@Y?YY-Gv`HH~%C4x6B82-|ksCOmC z=c@`7XM(&)Rj4=<vXuqtbs6fvNI@)I-MOzCTrT=Yx}f>JvEzwDOB@` zRb&W*aW=W9V&7(AiO@|n4Q=&^0?fobni4C`hETfII(jrHW&HOy20yo}S?1?VpnYpa zRe%s`R%->VIcSN{LsX{-Lm|{-XK|>9CxeWcy(lg&$&7BGMcso2T1^AN6}|w6kQ7W= z;d`z3W0HU)Y1$x|k2*UUJ=TFE>b}%t4GkG?y&51yNLr=tOC7?fL!2KFbe&DT`kU26 zGII))2(cW%iZEBwQ(E;)}ctHF$9K9wNGu0PyhZqw>B& zB|WvX1M4Owi0bL&6=WuSjoz$=|7%AFQ>b>@V*PiGW*e~A7}{X332hTsG<~5cnlOelY*a&z zLo<;vS30ZFY$umFSP=)g(Vlc~7<|KjtYEvw+z!BRgHi&H;`!SFWxnrMy%sf&APkb} zERxPr6`qpJt>i=2m|+m1h-?FN%2PhyB{emVfoDt{ldl;^v~jmZXWV#w)=%>Y%~WzT zcPS>Ug2rnemp!27j|yMt41NFya&%V3(fL4Wn06Ctt9$`9=P^CfyryU#{FG*Q8$YF?Nw8+R&sr{%wOl6Z-)n!5J)i^0 zuEpnyJP_a}MX*ZNOQEaHf=&l9lv3IW@M3i4LF&7yhY==5!0kl* zTGEN!9`MI1+Y;ob)PJ7+c#Y;0I?E-V@%)+Wv5-N3g!IW)UZeR^RQcuJngRtWYB!%a zMVXh%btBQGgPr54Eeq`BDZBMPZ_H zmIPO^4iXG_h*<|sZS6FjRMFISEn|cffdZH}>cg^GuvGsdL}bjMuKh4?3aFLmO#%JL z3hzn>#5YD{N1lIJ)0jekj_dd8(mLl>lC1hhasa{X&z&y*`Z0$5Y5y!k8z%8 zR@3FM|F0=!>?6qkY@2QKS_IN&iv0mk@L@5@r-^C6GbHN)OxAGO0SkPbe})*hQj#Gu zCrO3@n7AS9fRo;!$uOai*j4&Lro7^g_1&Ez#;uLPKaW5um~MBKz`xgei`0?_L<*9tpnU;f zlk%*F4++R?=R*Ygqg3i{zeH3j=&v89_GGtmDn)0oE?&h8_*!u@jC{D|z@f^SVs?;Q zV3;hoz!1h_Hi4l4+rnxs(C|&Rk^rGIajta;sC}&`#B5g&oK2>8=;`PKe zxc(OeBYGIt1MyA&8&*yBvFeGA@P^U`4)n*{jD-3ZCEeg~WXpkrlo*9vKQOjUwj4MQ zxqe^{sVZs#`N55HrV@;7w1y5`XAJm+CH$0bccB!T=HI zxPV+=R!*>9J)6dOf{o$t0^2m9z7JF1$$out K5fov}5}}czl9i$oRS|=G*$)x#iqNv&ceM1OiHFBwJuxaDIi+>!L=A_OsI zw;f6hnymC_hZXfjRqD7flQD-Kep7Rl^3rVTJBa!|O_V?FlhIw`u7{!{(}4JXPz`E< zHEBsT*z9q&@A8gsUd6L2){W|cLx~~Gv#|sZ_f^mg83>y;_+9#|0?!#%DUPHqllWX& z7{5daB!yZnQ$Vs58_OxuWavD6>IM>Zmbo2)-4t&M`WL!QZgo*#hU za`^3ZES?6()a%y<_dTE{&FnzxAAr~!Y$CocCrR*F#0*9W5x(*Ue=4eJp)e>6RxR6} z62cNlvU$v86?in4wleJ@$P4L#RR2NHOQaqJ=yB|9GIWXjV{j-roIWISs#*pcN&VI& zj>B1&7B`XR(U}>`+;sK}cZ4R)|ImX_TTzOzP}Uv^R8|O@&=`Gr+|le5RMhwZDwI+f z0r&udLIKGfL}x5+tCt8##FxcD_oGKyJK`j-mXgoZL(;)L3EdJTW5EykCp9nywjTpD zA^}e%pj1v~XZ;d!#;b(L*Q|7@?w6QC?Qoz+T9y!@0vg<1N#sz;3GR=qD7dSV6`_(7 zoS;-dF=-FR{($`8NILW+gbJnkbud-tu-Z)&EtOIVb`OEJUAcnR5R2I2A~~8aYz+~l z3S%)h+r-vw%>o=4TenrRUurRh_<*ex=!HDfS6fGhM{#GjbYL)XNo5S(kbwN)soCnM z@2;a2a0IRm(&`f#)Ns=C6-}m%XA*|>%Lim2zXEDCxhD=ulSn30*s88?F}(^vkjaCK zYz^9)SreQ`{wwmHBQf|bMh`hoDkEa2NoX{mW)?%lXZMpb7Sj;LYzRM8h%{nmNxNbN zFnf6^^Tv!cT)y&zS)GoARuv5=xfMj3&B2c+0-m(Y-xRj->l@}V>0loQSJ4cbrJZXi z3Oz#Bu?~%gFBk-zQTUdb(b3?-xZnq#h)GJPc(9LF4}m0IqT4>=p*-Dd3e|jzZAbaR z=``A-MBpFTEC3_WA5@jChblej3_vkK1km7_%9KIUhZ=1cf>PpBqdqKErh9*EcTY*5 z+sV^bov00^9)9wK0JNcOW<|5-U|ZYT}fO#Wqc}oq3Z`7(GGh+)i`4>zU&8n47OPwo@ERBe1XnP4OvC z1H0@AR#Zs5R2PR-g7DXM-pAtv=WxvDY5`y{bWdTiAgq1fkK35zf{oB&YUU zxZ^?)vD2mYeR@9RsWO<{dW5BTc5 zGKO-d;74rQ%v3;0>S@})ns&UXX~E7;wc0=|;NM;Adw^{nLtCBnAebItbBMeHK(T+t zjOghW(mFc}phRFi1f}ZJPMv?@2ekzv<&N-!I?RRPgB3q0C8mgF|8Lz9g$`&RZ2^Lb ztdmrbr4YZRg5=)**v_{yWn_kiV6A&lo?U4Vkb@{OYmt(OYV2;YO?wHG9?0qdX)e$8 zi9V{~LS=l`!HTwY$#bdSY{KmmJ!q2vLLH0oBq6>@z#NsY>umiW+WfL<S31aj5=^qeyYSe1p^` zd^($ri|OOnH`o~mr6A;|7IHT~pkQnlP69j|Bf%gF`)GRu1sUI(hD5m>ciAQ?qU~7) ztF}O~Pf~tL`iFd+uc|;hsg$dzs4qV79MgBny)$#i)VRHN+M1x4#Oz^wVTjhGp*j1o zwTq{wItv*XZQS#vWKdBS^r>QKWh;nM8cLeOHa*8MBC;>UE4)L-EcM{k@5$o z$ZYH^n*R(NpRbF<1WGrW@sSwU%F=n3K?%atba}@J(%p_22Vv_rb;LNPHzZhWkT@=E zYv%_c_JAN7_i;i^-m~%>V^sd%kFmY|81Oic6B@73Xu&kv%-=cMA!W4R4qVLPlDlIH z&sCc4vE+yC8|fmsHmRC{q(<`M3t2D$YDR1r<3-)yf|GAapt3qih&1V;C*za^0V z;SZV~3(x6GnA@bkI;<(n`(1yVKyusR#KZ&{$xhuA+a?T>Ddw+do5;*T`9}RcXJV%w z@+LB!waq3noxRN_GGhSiORfkG7d!8Mdkks^#$uP;ueS4P9pf{FDWie2sXhN{I)$?b zPzz&YJN_wqrkcP>tlY!B|0+8Hr4xCfUv3|khx9 zaq=}^k7|-R&oOAZZXFZ+Ba}r@kEjkto5DmJH%1TwsL2o;e&L~m8^dkBAb!@AlS(|U1dCytXX@8H0;R8pF&o?H~tg;);DhCndWWFDQW;(Wa5<6`q z>?hF}6>YKS;fEnk514K|kh|-O5amPz8?T;H<$5>$fDiCowl?i zi#`1{PWpjjY_g?n5RkKM5F&nWH`b1#5&L-vRi@S>0U4m9TfCM<`gVZno3wyNYE1KD z9JN9d>O%UFhyZH3i<;nQA%Ib@sGp)AM8=au-y1%TeB6<8GUiGujxi)I{n9cB9+ohU z3%h*q&i)>F9Xm7Qa~bc#%2DF;8%8rvyiZ>d9PD-kw&0;}FVve09@!j=HCZN%Nl~g>{vjqYv)j)~dCtQAuWkNm@ z;q2tuF0mF4nszMv&WOY-PzQaefB5_L=%6?JHhJxQ5OH9)R3Sm4)NX+>DGH`c1a;#f zg3q96su%$8!B$m!z)7f>$y0GUfTcq0Co}xejMRz(2uyDgOyb2bu+-`pJHbkZlc;7ztM@PgVS6?b~k^KLO@Q zG!LP{c!EbrtzeC@7g~=^QnH;YJ2+^5%~wWz`)QbUW3!k(rOkF4{bFpV(I?UnDGDSu zgrZdOU^T~r9%K^nBS8p0z7-pct!PfnuzFlv3ot619GeQsltuw0;vEUR3mp zl@pKz>2FB~p3UfQDZC+RtW%~O)E7KFF1*FK>|01e5Yw-eC&l{rlwCo-7JNelIeSrE zqrcN5KVM&b?`Op4Q4{j@)6H5I8KC{d8fnFMAQ}%Fn6J-fNYJ9cntn*5fyxRRwuyrp zXLHC}xI{Js7loGu9ova4J}?ws_Hn*VnFMloT^0)JDw->6d=kBDJ6NMXN&bu?i++`# zNlLqJ^f%z9H<4)7afoFmlFH{)6Ffv`wRA=k9{t(j^b@jC>U{k&+WQkg_s%`yyGQMG zgmEF;NJVGQlVb@m8_~@%5H&{Y4`9d;>cKW4GEfT8H~w5yc<#SB~J5y2PW>TqXq*8kjc0y(< z2Kw6$8nQBA`49(1SxI!vrM5ZvhLjhe`BRLhWs$^psaZyu{VFWT8U`!53Czz>Lfb*_ z(=VY`Lu`f-q;lAp5=KrFMIROn87_X8bQ9DtT3w zZwS+Ez`S8@qTw;x$YWw_9OQ3lk;;IwKG_TW_aFs2M-=XfM;hj#nIXDO(y%B7Ey1ET zc)gcYa4mt#B)@}XAFEt+30qqt%pk}}on%*u;@7M~8i+5+W1?zULEV^>qZKwg0D^v;dVb0WdBJl%?0CBMgLj&-D;u)4T zWd=Z3R5XphTWqG^$cQTJC>2A8g6{F4o0TpZ0K$MTUDFvX0tZxNuCX7Xl(dXS54O3B z@vPnEt|1V?S`-ot)m(BXY78vhFE&r0A+d3d1ydiD&pz0eB~KAc4*0V~nt0OBTQtjt zjmtMYBaw>jorf9euIp$Sl3XdT{VTGw-He6{nww~hfXOt{(s1J_C4CW9Zwo4>*h-1h zY)nTW(4d<+1PO&00DCY$nGP-MilQxy*Z2pv8cjfF$H(M1qR5or_@G%GOS&J1;EQT0 zFX>X_KeE{?Yl5m-9++E3qaD>1@KOPSXF_$;_BiUq^z>nc z^{nhkE~zhHLR(b|Gz1)&-{n?H2I^Pmq+Am|w$VcOP@({2Q2-;9Oh(xrDXOTdie=8} zj91DJT#5X}j2lECBL>A3*;&xIC>B$khfpuG#^hh0rY7&vQ6y{Jt@j7E8cb5~F~#sZlV$A!bV4JrPz$c{+? zX>IVPB~pkN=uhDxoq=Dph>A0Ch&)I@q=3Is{NMhh8@G|hOeO`2xB)8J))le5gMB6}u5uYct5u{dYb8)G2z?Ymf!QGzxmX>7Y7`S~O~^*&j1=Ff?2%CC zhm7gyRRao4LV!;qefZq*fqN0ZXN0NYofc5{U~Y5*mS3(p36-(*Is*-*B7w2vkgtKm zArG*;n9XWQFns0~%Od{V#E>-K7UPvD23WIXlRK)*%N9DUoxakYeKcY9$9^xg-Kz$hdaa!J;`;%skKp{2^Gy)BkwM zY~Uf;FK6NPLj1g*B3^>WUm`?5Qe_dQn==`e#rMJ5UAh;pVF>Hq4-3W}vF1S&d6XG)U7eJ$OS z&m^0z_Ze9|3zuzdcCli!q~S(NnGsi@`cmR30l7$BY5F&&CyDL(c48wDF=4T4Jr1MM z*q3#Yu&yd0N>bvQ&VdS56ngk{9~lDwH7%P^oAHxpwW#h&aSqdj-)g3zX2HH@FHuhMW<4=cM6@Q(b-sPcNv!|H7=1PLMQv6hYER?R+U0$x6p)M z0b!t*L6}rm&{#cN5W?se-)40dAgf!^P7MRmYQoT%e&K7jRmTF2*$Z|`5ZmCg)_YYXZp!>K;HoUi?~N62CaSrPS%4y z;}(oV;mp)n45~utlI+MtcBBoNfnFh3^>ZGdglU zWjB9#ZcRdCVbtnulExp6-J<7qM^~Y~`AMz!1hreEegMMLh8Cc&y2P0Bz{Dg_p$TuE|IQd4?rA3BUIg&g zYL;S*AO8t>n&#%G&ktIGrva+w!)MP$;9kJF5KZ1%2uB;(6JtzcnveXkn}HkUu<-imXE~83Km>A;tEZF zdY5ZzZ@ehjl=tKoXQ{98*Q@zy*{+*-DWT(Bf%$;r;LlU`*iS$3(H_VB{wL|hhtmnG8S8xTl*BU;Jvs3#dQ1{<(Euc~nI6gz{*Ke}7Jo zI??i4Xp}{KddMuizW9NUs#_AH4!lPMT3qLHF6?qmDerU4nqHl@(YY|=eT#Kw)tUW{ zea~0Pv<*nx;`}=5t8B(Fyuzq1*9_6h~u0auf)`Cu^uGxoaP^Md&DA+>+_~X ze5%-rx2hk;8{S_p!DoKz>wwUE10JhzHr3JhT)x5AZJHY_l>{Y?y~v$jv(4YC?%lDH zf8WW{I>L1iuOfW=LPT>`Nfo~KVsE^Ix3uF;o8PUBp{G^!F&Vtlv!34S8osumfxou4 z$L@D6Enj{1XZ}Sp&&cxJYu*pm5#7f+y2v(2M{17n1PW-@0dO-5-`O zs&!w+M?dH#!(X~j;0@7$H*S~n+*I?&El)g`x!ZBb6tx>)E5ZA0BiYAa%GoCrfbIl( zGq85(*i5m<9`=DZynywC5_~se)Nn(nhtEP-M4#krfQ;z{pp(~7I~g@IG{i^|(LC{k#Q!=$K>sjkFKN3Ffc1T8}nNdBbswGh@=6Ri^$#_#he8Zok z_#a39*o5RSLcl>7*JtRYDS|!)=^Fiwv&?s?lNqtF$3dc7$1HkgdVF@PYRJKss*f_k4oq~{$wVqcd^Sc69)yydz;)eouH=@S!$%6 z_>;*}>xG9vwBx>b~LwRk$OA|{T6;w!6 z@#o{@MRqB3QoWL0I^G)b#ktmUL0!);r#?DWnwTrz@LwpQ~XkL7V5c8 zdXxIwCjD~tRrWw0QjMt%{^TJwTtgY3p|u*F5ErH}OcTHw%VTIbOJv$KnBL*f2f2k^ z%A(M0W0#Jjo4QVvTicYfkWA)?5YBJD3fsx`A^2RcL-!^rbAE;sXWVN6w0{&$C2;^>9R*OKc zYqDAd@`xbQ5lDpwh4;bX?2L8t znt%yGQc%kcUxcaYguoL*ju5m?SOV84TVvojVb|u3K}dd5Q2D&k|h&3hjo)B6WpI)O7SE3Q4UnH zsNmkp81QSs$wE;^a35iLKKMcj6ryo(L{sF=U<+#}j}aW#_HsA79CLYfO6%;GgWupV z3*TJb>U}&TnA_5riM?Y|ytiV5%lOkdcT-NSekLWDCroLRlY32R9Z(g#kpq5a-P3Em zGh>4Pz%Iuv8e$ffJ*EwQgg=#1yWkR`!~}kg8$V)XYtp;HOW9Ld()eIj zI)?CPytL8#{oLRj)>!t@!LdRy8jnfLdOoZ*_Dt|>_H^9x#ZwHetv7?8W|y+P22XG5 zbuf4xZz5%mTCP0~ndnxPFqcFr5$#k7P((*{#XlZhR!Nx9 z&d@=^Z+&{FPQ@EjN(8T~ZB>QBuR0zZW_q!;$3ZQ3(PJi>yX2K*o3z|z$?;2jl0!~; zY*kT7$Xx9+>@uy;G)`y|mTQl&OUD!csmfb2FQ4{b;ZK&1_75s87%pqL_7Rm7YF7aABRAnGfLirAY zv39a55I8v~-)SBC-&!d}m9i3T7nORnwi|L|ZMX`rF@I2{S)w(o0%EoOQ~~MQopHC=KD3rkK1~)ylTsNobq1SawRXxmTC+Uao z3D!-{&#u&garIf>n+C2Vb9(3xlks8I!}-S4rU92am8kl!GCrmn027z#=){dg z)*-e;peSaik2x-qRdhPRF6D@4=+AitE7eZ5M$#LU3^c1o)k4*{SFDD}&N^VNYd+(?7&6W!snNkhMhLTa}Qa=d*5EE%Xt*hcw04 zw=KiyIWBT4tB>QONfxCa%r0f&=_PL=u~FEujSd#_Y4skh{5^pkmCNtXH* z3Mfn&^xSFr$SPBfASW&HRKGTT$Z50sIrVU@Z>?J*U+UYc9y}URIFhW@zP*CAk?k z(52kfz`M$9Hm>7srM$tom|c#UnD|_R_vhCoPrxQZ-mfMYpJq>Gk7ksFDrrw+h-&(h z#)nihR!LqCMHOQY4qif~QO_@>;B4d$oh5^t(i=HLWWz9C;ccbjNF#Sya$&`IR6zx) zbYnWZlx5I3NtHDhyp;^n_?jxqPu+}Lo029NUujBu-B`<^NIFbwrTCNC8Zw$)j_t9! zS9a@*u_1%lCDXaqtv`nJYD&2j@~CP7TFH4#h(w>1$Aoa1%5n)&HKj}l;Woxl!^As8 zP~~Vty7PfZeb+uSw^5RbWF5x4syVTZYnzfCA%RUPks;lhQf7rjG^M;0GN38tOvtdN zl%|les@#;2Sk(ekNP=p?5=GjLD;Z>&ry-S`1PO9T1s_+MkAzI%jiuNZ($;1}%6Mam zSG16fKOe6avCAtO1vt&C`*{ZXKJ(cH{A;qdfL|WM$hpcECaXO@h1CU8AVwbYM zgj{ErzR|9-OZ#c|^)_0Y=xjc}*BN&sZL|GmUo6(WS3YE`^Oa|-N?hHZGiTDby4dB| zmPHvgxwgqY59QjlVaMj#jbTZJw!il@7usSj9n7;$GR5WCZeKjQ)HZ2{IoI|@&xD1x zvWw<{x;Azp~zQBw#DTDzxca@Id*M$(o$R5j)bMQ(ugAkHpBNvEVjW}0B^XIoGTi`P88S{^)xTG zYkLk`YR5kILfgALk1n=N`YzF8dueA)k=<}HB}X)5A6jaAsq*~-yTODpCRd~u+Rm6# za&6CN#x1s;<@XNeU~yUlKRR#yMM#Wr~-kUWr`VnMq@XcvZd(cQtYJC_a@+Ku0V2aCT?U1&4zK;tKSV#s%A z4FesO$ClbAhY_11Q;KY-!wv%bjN>`>!R2vykoo>RTTB?}jfn(f7wsIDM|2e0heReV zwi)XZbM1pO67p;zK-X@lJP4rS#|tEMD~}XGC}3htX6j;y46Hlbvt}uE%dwS3kjSzz z?wO3FdG?sfL~tl0ajETWSXF`T$t?7^{oP^U_ua7~yK(2?0=qVXFg0Pcv#%ck(7O0s z+kwbog?7Uw5dG55SV$&44wPrTUuciHXa;}`Vv~uGjD*aA_Fkv>1E_S;j1A$-eG~3T=ZcQj2V5I}_al*f%DF!T-%w={5a#nnS&1gyl|LWrA*{!*hGZq@+CpXxD-?}c!w5e} z;bs_=dhqvv_fnV{vb^|yu5D6eoW=TXc5I<-($1QBwncUEK(_+qNB0Da7tKn@wGT-j zJkRz;CMb%DtSNxDL+^*oiYu~B2#2zs-I)NKFIHhqvjS{d6b1k{Nz!LBjxDw=DksV_ zAj`5H<~$fqDtMoH47_?hrNFkh9_qcXCz=cndq2k^^1!3!`A)=P67nI~K9taI zBtLl;K1Vcs2Par|5gKu)Jbo#hRt*%hJaHk+6#CMb33E9c_C6T469yL3liZgH@-6#5 zHODrog2>M}SYR6xc6=$E0yu8G1c&m{ck%F|^#E`DE`FiyKo(JSDVBti07sTx0}Qg^ z8SbQmLx0bPq#HA*?f+1|ZWl?!&Jz=MzimsOmA%Oxk>7#0gJaFH0B4WM^24ud5- zjsmsFLj|_Mq@rgcA(Tlw4?^XcLna4m$UISKyPZY)QUR>a)I-N7L?!?Oa>Ls26f~KY zu-G2m6V7ANcd76%b%ROuPAo=*fch9RkL1|Ch=ea;l8K3cRg}#-oFf{;lk&*Pz$7o# z5FKFlg!U-zP(9!sEc$iX_O=1QUV>4fQsL9|nPy?-O`naC;WiVsPcrB0NYffYLw{Pe;In z7S$yJ``5wZGbVT`@Bj|^`}d&-h-LPWFm6`R>m|OtY43h*J1-5rH zLHUrZM2PHC3Up%@;4OX~@#A(myyLqhMk6GR5Dojioe6{nN5<#Ct3Y>Sz9;j`jE5m+ zAezQh41>rRPwSJR^5D4LSaG-zK^@%?vhr;Clzz9Wo0#M41BY zG6{i{G{RU9ZF({T8gVBBnjQ09d;vGz+u6x*@RzFQ*+NK_&xV12+Az3>1D9ffJ@arB ziVR^8nU+O^O9!DZ-=|vahKe|tX%^x_V+5=xx+gKaCkQ?Hf_XlxS$<` zRR(ekK!(vV$d!j-(-gtV>Hzud#Z>A6(=A04=p=D%XDYl|gTCD3*ji3|zz-X`AqE->SzP+j7oWtlIsS3fG~j_&9KqDQcIi zTfZ;ga3qAv`xF2CJe1Y2%l~7!^ah>_fok@gd-j*eQP;SX>%)vO??>`qW0u9Nx6Jj=qU6HjCvm`F2IokEhsx z={*1D8SpO*nfaIH_-gf=e|>U`%S!lR7ZUbamOsU@7w`HBAPsw-8XmE*Mp9J|+)8XuFju`_c?{>XZp14lbq#3)} zU;g33R_tS(SnZ5mFql5aT(!_&rTUE7?s~Z{$-l9w`jZ3LGMD_zd)?1&Y|%zaVsswN zn+URg#y6ep0V^=8|e8pH@Y_RZColvvzrxA{pBTUq@-sGTE`_3$Te zIO9k`*ygWk&kf$~n*LKAHny>uA+w`_k7GA!U3`x1zj||cm5zkBKilG3VVd!Z<1YpN z>~u|imbSCKdVw}zV%J(?d7l&awsQGS-{RUFO_3jx?%u!gx-A6ve&U}K6(_EkK_PsG1%_e zJjgU+h4pkB6LS6~FO9x({@Z;YX(LAI>)^;iB+8jB5GOy~~~!F@%t^- z=)MyViJhcPh111u3nk^J&#sranC`|!jm6izJ2FZ0zc)LU4KTNJH_~oq$-rRjiB%^d zt(Pw&vB~;}MESO;&ng|UbwHywXCn3|cI}UD<^7?U{;q0@^W4H}i+$VPuPQ~;+o&IO z>N>_^t$XLQ>0+lo6RSo2?upgbf$4oWI}ZM2o@zC{OrKb%tbW6~EOUx~tJ>{43ZSlh-h`V_iQ|03 zWQ+5asxubHlwD?i>6rH1bc-$8AJlf&R^L;Gfqrk=d!k`R)l^%jIghNfMt7YdQE8Y1 zBnhZv*+ANI$f4j{?&WV^*eiCX@4N5w$EpH5)6Fl!xp5?!Vb7D=Jq#CF3Y_gSTf&QKLHbWsAwtx@VTg2%%XKZ)guR4<^ zny^{ld2WHZ1o6#M?Yy5pexvi{AO2w>gf_ai|5U|sK_E?B+%}MIc8WIhz@C!G*)sC9VQ78C+5jX0uLhFp&)~IIZk&pP~VA2__}{t z_KSRooGmMGCMe;-*b2wN0{YcQ_17=DokPxNixIk&rp}*b8MSFBMRw6_rQF%5~G50z<| zMFc1#M>15#(o0ae;7QU4oEINu5l{0aIT zEUCe$YWzygsf^Dix7ug4M0ty;^j+3NU#!7cW&Eh(nz&*uK(j_vc_4-1!}GM_5KuR+ zh&XAUVOzhVr7I`>Kr_KhyTKjgNye4s-=!sr&4?=v<6{33>M5z%{ZQI5eRM(%``tnH z=XQGX%Q-ltZ$T*k&=y2i)uX%v%7u#8u5Uf9Vl<{~=o1Sd$b5$`ds3sBg-1{~Jeb=h zG1ZWNVoA;>#Y!YDCjSXsCS zY5a%RyvvReU+7&c6&RN=cZ)@xB?l@2V}lVi0WWfmNAwD0W>WUud)lzPXzFZ}Au#$n z7_VCLNEd-`baR;PpHVZOyLo1ay{l0`S|TpS%o1v{kPXOOFfPBge;Yw1yeBy-=V=;I z2Cg*~Mod2Xn<#G^xV3=Gu-POff}#_Rqml`T(rwK>M&j=G{o@3sJE@xcIVv~{8tpqm*P?B-Q^vFJvsl}Bm0f-JM zuaccLi=>FmWJ3$v+$gXgopye+k2_6Cb~Q%Sl(a;fB5L^L(nMkK;OC0CQnTI|$3eBY z2IOj2bDnscsdbs^D+ZP@eJa#0YdS_nhSE==-+CYNzHRmavYcmME%+KSAPttwUh3K?dWoKLUP32TJ3J2y9BqN`V#&I%r4E}b2P3d$`Dne48u1(Pz(bo`E=b51Renv zBhoTNN_P%}&R2mHe0@8=a{M`kt^Vd$Bx_$og O5g_K{d!d8w9sdDRpjp-c literal 0 HcmV?d00001 diff --git a/bin/mbprog/buf.nbin b/bin/mbprog/buf.nbin new file mode 100644 index 00000000..7b36391d --- /dev/null +++ b/bin/mbprog/buf.nbin @@ -0,0 +1,19 @@ +ñ¢žPƒøràÇ‹ô¡UôO ñ¢‘AAü]sfËþH4óAü(+E‡ú“é ßüÈ:wßôêR“ùÑù®Aô4eAüÚyséô7éÝþœÐtßô4eAü]sfËþKŠéýPsËü{÷dAþ›ÐtÑü¨3iåþ}uÝþ¼òäAüz0òÃü}2òAý;tÑü¨1uÍüÙy.ñCEEÝþœ¼ áýúwtç÷CE ÷bD‡ùbëüÙ²òAüz0òÃü}2ò}ñ¢„áÉüœÐtÑü¨1èÃþXqôËþH:oAþš2 Åþ¹³eåõÃE ÷bD‡úS# Åþ¹³eåôôaåü8úeå÷ÃE Ãü™9 Ãô4îËõ¹²åÉô7 éýPbëüÙ²òAü9ºeåô4eAüz0òÃü}2ò]ôuçü¹iÝôäR©ø0¦ESõÃE ÷bDù3" Åþ¹³eåôôaÝýÙv [õ¸÷õÝþ‹V¾ñBtîçü¼ºsAôø÷õÝþ‰ÐcÑü<°ãéü¼¹ Íþ[ö Íý;2¬AýüwÑýû2 éýwg]ñ¢†Šyø1"S©úRgGAü]sfËþH9ôåý;³ [õ¸÷õÝþ‹V¾ñBtîçü¼ºsAôø÷õÝþ‰ÐcÑü<°ãéü¼¹ ßþH:hËôôoÙü¨9ôåý;³®ñCE<ƒø‘ÏøÔâÔ[úu)Iøè1uÍüÙy çþœ´îÏôúrÓýÙß ñ:wsËþ]9 éýPfÓþ\ú çþœ´îÏôwtßô4eAü]sfËþKwÓþštÑü¨9åÇýû² ñ<úrÓýÙÐaÉü™r Ãþh0 áþYsiñôó Ëü8ô Ýýû–åÛþ< Ùý;²®ñCEB¡úShTcñ¢¡P¥ù´*2ñBfáÝý9²óéôófçü½9 ÍýüaÇüyyóÓýÙÐpåýûxtçôw Åþ¹³eåõÃE øUc-…ù5)ñ0PMƒøt§ ÍýüpÙü>tîÏôôôÑô4eAøP¤Ô§ô´åÙü‹ ©ü:òóAü(1uÍüÙy,Aü#E Åý= ÃýÙ(ßþ4ïÝü;6ySôw Ãþ›ö ßþH3aÙþyW Aù9oÝýžPtïýè0òÏþ»rîéþkŠþYzuåýÜÐtÑü¨1õåþYwtAþØvuËô +0ôßý¨7òAüØvsËõ.ÐiÍô4rËü«sËþœ×ãÙü¸ysñBzhËôøeÇý9´åÉô´ô]ñ¢†Š…ú±–ŇùÖÆ™ø1ÆŠù9Fƒù”â¬Aü¸ôoËþh4aáþw Ãþh:óëü; Aù9aAüÚ|,Aý;¹ôËü9oÍôqèßý;³ñ=ò ËþXyåA÷™´ø}ôôaåü8úeåþkaÝüˆ9åéüè1uÍõ¹qèßõ¹¶aÏô7 Íü;9å]ô$æñBpôßý¨7òAü<8lÓüxqlËõˆ0ðáýžPtßô4eAüz0òÃü}2òAþžxeÉõˆ:hËôºæÍü¼– ñ8wdAýýzcÑü;— ñ¢žB«øÐæEƒúH1uÍüÙy>ñBqìËü<¹ Åþ¹³eåõÃE ÷ªÆúSë Åþ¹³eåô÷õÝþ†Šüü·÷çôºæÍü¼bóô÷õÝþˆ1èÃþXqôËþ\× ñ¢žB«øÓ"Îú’bëüÙ²ò}ñ¢„òËþynAýÝvâËþH7æAüz0òÃü}2òçôw Åþ¹³eåõÃE ÷ªÆ›ø2â ÇýýwtAûˆ§Ð©ûˆpåýûxtcô9oÛþ>ñBvá×ü¼ÐaAü]sfËþH7æAý™wgéý1ïëýÝ ïý=4 áþ[öðéþh7æAþ·íáþŒPaÝüˆ8rßý¼:2]ñ¢†ŠyøUcP¥ù3ª Åþ¹³eåô VãÑü;·eÙõ«Ppåýûxtô²äÓþ|¾ñBræÍý8ôåÝþˆ1uÍüÙy áþZwtËþH7æAü]sfËþH:oAõøtÓýû°ìSôôaÝýÙv.Aô4eñBqèÃþXqôËþ\ÐiÝô4eAü]sfËþH0òËô9iÝþ™r,Aþúzhßþ½rËüøydAþ›ÐM«ø‘&EñBróÇü<2 ÇýyaÇþ™yiçþšqóAõWe]õˆ2oëü[2­ãþ»úeAþúvlAýÛú Åü¨8rËüyreÉñ¢„âóôPbÃüzÖóÙü<ô)]ô#oåô9iÝþšwgAü<ÐaAþ}9iÝüësËü¨«øÔèR“ùÕ®ñCEB«øÔäÚ‹ñ¢„æåü¹PvÃþZpâÙü«aÛýýwtAþ›ÐgåýýÐbóôs ÝýýgÓþÙw.ñCE<…ú±©Ð¥ù3ª Åþ¹³eåô VãÑü;·eÙõ«_ ñ<9iÝþœÐaAü]sfËþH7îAü;(ßþ4ïÝü; ÇýwnËýˆdËüØzìéô §Õ©ør ÎSõÃE ©ýPfëýØúißýÈ8rÓýÝ9 éýPbëüÙ²òAü<ÐaAþ}9iÝüë'ËþxððÓýÙÓ éýFŠüz0òÃü}2òçô7õÅý™Vñëýý2 ÃýÙbÃüzÖóÙü<ô çýè:hÃþˆ:hËô4eAþ}9iÝüãE Ûü>PbËô²áÉô÷òåü¸úlóôy Ãôjĉù‘PoÅýYqô]ñ¢†ŠyøUcT‹øsÐbëüÙ²òAüz0òÃü}2ò}ñ¢„æëýØúißýÈ;èÓüzaáþ4åçô"ßô7 ÃôºæÍü¼— Aù¸| Åü¨:óËüˆ4îñBaÈ¥úaL‹õˆ0îÉôy Éü¹°õÙþˆ1ïÝþœ·ì[ø¨3uÝü}4ïÝõÃE ÷ªÆ©ùôÐbëüÙ²ò}ñ¢„õçü¼ÐE±ú” Ã©ô7 Ïü»²òÃþ™PaAþ}9iÝüè;èßþyPlËýÙúhAý<ÐtÑü¨7uÛüYy ßüÃE ÇýyaÇþ™ysAý;tÑü¨1uÍüÙy.ñCEC‘úU ™ø£E ÓýÚziÃýˆ:aÅý™V ñ1iÃñ/ß¿ñ4²ôëþ[¹ Íþ[ö øµ)Ô¥ô +;iÃôâÔ§ú” Ã©õ#E ½ú"hõßþ™y éýPnËÿcÑü<°ãéü¼†ŠûÖÄËý™zeçôúòåü»º Ùý;²ñ7«‰‰ü»2ôËþh;ïåüˆ1aÇýh:oAþyxaåü=7òñBo@ø{2áåþh1uÍüÙy ñ7¢‰‹üšz éýPbëüÙ²òñBoFù;¹ååþœÐaAüÚveAý;ºoAþš2 Åþ¹³eåñ¢„Þ¡ñ5wdßô4eAý˜yôAý¸uoåô2ìËþšwîñBoTúYVåÝþ™y ©ø°ç ïý=4oëþˆ6õÝüúwgAý=9 Åþ¹³eåñ¢„Þ‰ñ14óáý˜|óAþš2 Åþ¹³eåô÷ Ýü¾: Ùý;²ñ7¦ ‡ý™pòçô4eAþxùeËýÈ0îÉô4óáý˜|óAþš2 Åþ¹³eåñ¢†Šyø‘fC‘úH1uÍüÙy ÇýyaÇþ™y>ñByeéþ¼·sAü™veéü¹cÑü<°ãéü¼oåô Ì§ø« ƒþ6iËþhG­ø3D‹ù”)Iútßñ¢„ôÑü¨1èÃþXqôËþKuÝý™yóAø‘fP¥ù3ª Óþh3aÙþyW Aù;´ôÓü;G­ø3oÍô"Ì¡úRgTñBtóAù3bE™õÃE ÷‘"Ì¡úRgTAüz0òÃü}2ò}ñ¢„Ç­ø3aáþ4åÉô7 ÇýysAþú2îAü™veéü¹ ëýÛ2óçôëA™ôy ø3)Å]ñ¢†Šyø‘fTŸørbëüÙ²òAþ}9iÝüè."Ÿú."A÷›ù Íü;9åAþ}9iÝüïŸ ñ92ìËþ™y ÇýyaÇþ™ysAüÜ·íAü]sfËþH:iÙýˆ6åÛüYy ßüÈ9ôåý;³ Óþh2eÙü½2ä]ñ¢„ÒËþynçôÐoÍôôrçô2ìËþ™r.Aôs ßþ4ïÝü;séþZwgAþ²óËýÝ áþZwtçñ¢„ééô +3oÙý›ûåÉô¼ Çþ[3)AþXzhËþH:hÃýÈ2ãÑýúwgAü™veéü¹cÑü<°ãéü¼¹ ßýÃE Ýýû–äÓþ|6aóõÃE ÷‘"Ì[ú“ÖÅŸù†Šþywdçô2ìËþ™Vôßõ¹wd[ýù–ìÓýÙPséþYpíAõúl[ú&)Aþ›Ðsóþ}2í]ñ¢†Š‰ù4èLƒû/ÆŠúˆ4æAü{÷sßý™Piçôw ËþXyáÅý™PdÓþ|6aóõÃE ÷‘&Iø¨1uÍüÙy>ñBreÙü½2óAþš2 Çþ¼¹eÝþˆ6iÝü¨3rßý¨:hËôºæÍü¼— Aúš2 çü¼0òÃþ›ù ñ*4îÓþšpìÙÿ(L“ùÑaR—úh1ïÝþ˜tîçôéû÷ÐoÝýžT Óþh7oéô2ìËþ™r.ñCE<‰úóéDAü]sfËþO†Šü™veéü¼ÐoÝü¨÷ßþY ÓýÈ:hËôºæÍü¼bÃüzÐfåýûPcëþ\²îéô7éÝþƒE éý;6 ÃôríÅü¼oÍô +Ï¥ø©K§ôy ËýØ÷õÝþ™yeÉõÈTÑü¨9åáü<°ôßþH4óñBwoéô2ìËþ™r.ñCE<ù3"Éú†Šü<õóAüÛù Íý;2 Ýü;róYôwpëþœÐtÑü¨3iÙü«†ŠñQ§Ò›ø5"ÆúcE çþœ´îÏôó Íýü¶áéõ¹sfËü}7òAüz0òçõÃE ÷‘âÔ[øt'ÓAûˆ§Ð©ûˆcÑü;·eÙ÷ÃE ¥ü¸rsAþš2 Çþ¼¹ïåô7óÓþšwîAýûtÑü¨1èÃýÛ²ìAõz Åü½:eåô² ßþw ñ;÷ çýûrôÑý;³ ïýyeAþš0ôOþh6åÃýÚwgÍþ» ÃýÙuáü˜zeçô4eAüz0îÝü»óñBxoçý=4ïÝôwdÓüxzoåþk «þyr ÓýÝ2òÝü;6yAü9ºeåôäÏ©þh0îÉôúãÑõˆ;èÓüzŠü›÷'éôôaÝüùPtÑü¨2aéü(9ôßþYr ÓýÈ:hËôôaÝýÙv.ñCE<øµ)Ô¥ôºæÍü¼-[þ˜qlËõ«_ ñ<²áÉþh0 çþœ´îÏô¹oÛô4eAþ< ÓýÝ7 éýPbëüÙ²òAõygcõ+ ©ýFŠþ·ãËþ|ôîÏô·òAüz0òÃü}2òçôy Éü¹´îËüˆ1yAü(2içþzcÑô0âÙü£E Qü™saëý.‡ùªA…ù‘T®Aúš4óAü<³õÛü»º Óþh0 çþœºãéþ¼²äAýøµeÇþˆ7æñBxaÓþ\× Aúš2 Íý<¹ôAü»2íËýÝiçôPcÑü<°ãéü¼– éýPsËü{÷dAü;†Šü<8lÓüxqlËôñjËü}wÑý8ô Óþh0ðáýšräAþ›ÐtÑü¨1uÍüÙy ÃýÙtÑü£E ÇýyaÇþ™y,Aþú2îËþÙy éýz ÇýyaÇþ™y Óþh9åËýË øµ)Ô¥ôòôçôx Ãñ¢„óáü¸ôáÙôqôÓþØzißýÈ;èÓüziçô·õÝüˆ:oAþš2 Ãþ›ö øµ)Ô¥ø0ê.Aô4içñ¢„áÇþš{aéý;÷ Ûü<µóAþš2 åü¼2áéô7ïáõˆ0îÉô4uçôpùAüYPrËþynËüˆ3rßý£E éýè3åéôúôAýùG‹ú”êR]ô#Å©úu) åü½:òÝþh:hËôºæÍü¼— ñ¢£Å©úu)A‡úƒE øµ)Ô¥ôüÐaÇþš{aéý;÷,Aþ|2ãÓü; ñ¢žH¡ùôÖ«øÈ1uÍüÙy>ñBza×ü¼ÐaAøUcF‹úH0îÉô7åçôPhßþZ}oÝþ˜v áýüôôÓýûtßô4eAüxvcëý˜zeÉñ¢„åÝüˆ7æAþš2 Ùü<ú Ùý;²®Aô·òAü™veéý;÷sYôzc]ñ¢†Šyù0ªÆ‡ù‘`ÒAü]sfËþH1èÃþXqôËþO†Šü{2áåþh:hËôºæÍü¼aÝüˆ2oËþh¼…ú±¨R“ùÕ.]÷ˆŠñO$«øÔ)Iúˆ1uÍüÙy ÇýyaÇþ™y>ñBqìËü<¹ çü|²åÝôs ÇýyaÇþ™y Óþh#oåý«seËü‹ ©ýw áþZwtçô4eAü]sfËþK†ŠñO$Ä‹ùäRAü]sfËþH1èÃþXqôËþO†Šü™veéü¼ÐoÝôôaåü8úeåôwdAþYzuåýÜÐiéõˆ7òAøÐfS‹ôs Åþ¹³eåôvðéÿ+†ŠõyåÉôw ‡ùªA…ù‘T®ñCE<“ù±"Ì}ñ¢„ëÝýýù ÑýýÐtßô2ìËþ™PcÑü<¹ Íþ[ö Éý<ølÃÿ+ «þyy úÐf ßüÈ"I§ú Ùô7ñ92ôËþ[tîËôôeéýy Ãþ6iÇü8¶e]ñ¢†Šyù3¤Ô}ñ¢„éÝý=4áÙý>²óAü™saëý9¬Aþyzgçô$Ó¡ùl¿]ñ¢†Šyù3ê ¹ôSèT“ùó Ì¹ôH;ïåüˆ1èÃýÛ²ìAüz0òÃü}2ò}ñ¢„Äßü¼ÐIŸúˆ7îAüz0îÝü»(Éü¹°õÙþˆIør ÎSôôôÑô´ôçôy Ïý=²îAü^PwßþY ñ0ôaåü8úeåôy ßýÛ< ëþysuÙô÷ ßþ½8uéõÈRËþynçôôaåü8úeåñ¢†Šyù4âI§ú Ù÷ÃE åü½:òÝþh* ÓüÈ1ïÝþ{öeAý<ÐaÝôyaçü8¶eAüšyðÙü>W ñ¢¦Iø°©K§ñ¢†Šyù¶VÔ©û+gÆ÷ÃE çü¹P'©ú–PO¥ø‘i'Aýû.“ùѧ®wôvsßô¢Rwú•,­ŸùÈeéôv)]ñ¢†Šyú5gÔ‹ør) Åþ¹³eåôôaåü8úeå÷ÃE ãþ»úeçô4eAýÙ|tAüz0òÃü}2òAü^PcÃý›4îÏôgÔYô4uçôyãÃþwgAþš2ñ;·òÛü;dÓþ|0ôÇý:håýýsèAøñjS©úK ©ýPfëýØúißýÈ0óçþ»róAþš2 ©ú–FŠü»»iåýû¶åÝþˆ4açô²åÝôòôAþ¼cßþ\²ãéýžW Qþyr ›û+jT³õ³ãFSõÃE ÷”¡ÐŸúh."Ÿú."Aüz0îÝü» ñ4²ôëþ[¹ Íý<¹ôAþØvuËôó ¥øt'ÓAýûcÑü;·eÙô +2eÍü=vtAõ’gC‘ø3”®ñCER‹ø³ªE¥õµ"ßõ°äA¥ñ¢„ãÑü<°ãéü¼tÑü=mËü;¹ åü¹wtËþH*E‡ùè;ééýúôAý½wgÓýÙÐiéþh1uÍüÙy.ñCE<§ù3ê çþœ´îÏôO¡ú— ïýü² ÇýwnËýˆ3iñ÷ÃE ‰ýùy §ù3ê ßýÈ1èÃýÛ²ìAýùséþZwgYôôôÑô÷îéþ[ö Åý=9 Ãþh9åéô¼ñ=÷òÉõÈRËþynçôúrÓýÙÖ áþ[ñaÅýžPrËþ}2ä]ô$îéü¼¹uáþ˜qlËô:òÓýÙÆŠúrgÔ]ô#iñôy Gôôaåþh:oAþ´îéõˆ2eÍü=vtAþ›ÐeÝþšyeAþ}9iÝü놊ñU"ßõ´)OúPfñ8PséþZwgAþú4ãÑôy ïýz …ú±ªE‡ùè;éÙýˆ:óËô7 éþ^Ptßô7áÉô4eñBtîÍü¼´ïåô"ßõÃE ÷•*Y[øñj ëþÈ."Ÿú."Aüz0îÝü» ñ17åçô*Y[øñj ÓýÝ7 çþ¼8lÓü¹uíõÃE ÷•*Y[úqj ëþÈ."Ÿú."Aüz0îÝü» ñ17åçô*Y[úqj Íþ[ö çþ¼8lÓü¹uíõÃE ÷•*Y[úé ÇýyaÇþ™y Íý> ñ=0ëËþh0 Çýy Qù7òAúÊPaÝüˆ0 ù6 Éýùy Çþ›ÐAþ›ÐsËþˆ1õåþ{ù ñ<7óÓþšwîAý;sóþ}2í]ñ¢†Š©ú–Xú•,²ñBzhËþyPaåü¨;ïåüœÐwÑý8ô ›û+jT³õ³ãFAþ¼òóAþ›÷ áü<ù éýãE ú•,­§øµ Aú•,­§øµsËþœÐtÑü¨;áóô4eAþ~yôËý¨4aÝü›2óñBDãÑü<°ãéü¼¹ Íýüyßþ¨­Aü¸ôoÓýÙÖ ÓýÝ2òåþ¼:iÝüè0îÉñ¢„‰Ãü}4öÃþšwgAý¸| Åü¨9ðËüzsiËüˆ3oåôöaçþyy ßüÈ1èÃþXqôËþ\× ñ"ráÇý1ìÃþ|ÐhÃþh0 Íý9vdAý;eÓþš2òAú•,±AýüT©û,— ñ¢žUùrfLAü]sfËþH1èå÷ÃE «ýÙ7åçô4eAý˜yôAüpêßþIÐdËý™zißýÈwßþYoåôwòËõ(3rßý¨:hËôºæÍü¼— ñ2s Ýýý4iÝüè:hËþYV Ýýè2æÍü¸ú.AôäRAý<ÐiÏýÛùeÉõÃE úóéD…úRéñ<úrÓýÙù ßüÈ1rËü:ù éýè1eAþ¼òäAý;dËý™zißýÃE"Añ¢†Š¹ñˆŠñO"ΩúVPA‰øäRAø1"C¥ù‘A‰ø‘¤Ì‹ôbD§ú”¤ÎôbD[ùñ£S‹ú‹iÔ¥ù3£ …ú¦Ð©ö(!P¥ù´*2AøUc-…ù5) …ú±–“ú‹hRŸù´* …ú±–éù‹c¿AøUc-‡ú“ÓôªÆ[ø°äO[øÓ ÇAøUcC™ø°i …ú±£E¥ôªÆúSë …ú±¦Eøõ$ …ú±¦Á—ø¨!Uú¤Î©ôªÆ§ù6¢ …ú±©Ð¥ù3ª …ú±ªE‡ùè!Uú“é ‡ùªA…ù‘PD‹ùäRAø‘fP¥ù3ª ‰ø³*O‡ù"E™õµ'­‹ùóD“út&A³÷è"L“ùÑPD¯ùô¢ ù3"Éú#O¥ù°jEøÔÐG‹ú‹aПúh#Å©úu) øµ)Ô¥ø0ê ‘úé­…ú±I…ú±¡Ì‹ø4I…ú±¨R“ùÕI‰ø³!È¥ôfÄ‹ùˆ$Γúˆ$Ï©ôiÄ“út&A³÷è&Iø°©K§ô$΋úu Ò­ø¨&Ù[ú•,­ŸøÑQ«ùõ"ÑúH)C¡ùôÐR‹ø³ªE¥õµ"ßõ°äA¥ôäÏ©ô"ßõ´)OúPf ©ú–VÇ‹úˆ*T³õ´âÔAú•,­¡ùôÐT©û,PT©û,UùrfLAúóéD…úRé¾Añ¢†Šyú´â EùµbT‹øh"“ùÑ¢Ò“ùô‘>Añ¢†ŠyøÓ'Á‰ô¦Â¡úSã»…ú±¡Òô¡IôO ñ¢žN‹úõ,ЋôªÆø´V‹øu'ÒAôïP¥ù3jY¡ø¨+E‡ú“é>AûmS©úRgG»ô¤ØA÷”)I›ú–hEAúóéD}ôêR“ùÑÐF“ûŸ ñCE<§øµ# …ú¦Ð©ö(¾Añ¢†ŠyúqjGAøT)M¡úŒ4}ôE ÷”âÔôgI©ù0f-‘úé k÷ÈŠñO)Å©øè!B“ú”Ð6}ôE ÷”âÔô©Á­ø±7}ôE ÷”âÔô©Á­ø±̓û>Añ¢†Šyù°gIø´ê …ú¦Ð©ö(!P¥ù´*2Aù3¤Ô“ø3È¡ùôÐB…ù5) …úpkE‰ô©Á­ø±̓û ñ¢‘IÍô4içô´ôAý<ÐoÝõˆ8rÓýÝaAýÙ{ áþ[öðéô÷ ËþÙyyAü|‘ ñCE<§øµ# …ú±–“ú‹hRŸù´* a÷ÈŠñO&Áù1¢Ó©ôªÆ[øRj-¡úSæÐ©÷ÈŠñO)Å©øè*J‰ù4Ð2aöŽ ñCE<›ø3¤Æ‹úuT•ø’i¾Añ¢†ŠyúqjGAúQbΩø´–Ô‹øsÖÑø4!¹ò ñ¢žS‹ú‘ÐFŸúS`Ô‹øÑ© yù°hFAõ”êR“ùÑÐ,ƒúpäÉAûlY cö´A÷(²A÷_>Añ¢†ŠyúqjGAúóéD…úRé yúu)IøèA§ørd cöo<ƒúpäÉAö, Eñ+;uõÈŸ>Añ¢†ŠyúqjGAù’gE…úRé yúu)IøèA§ørd cöo<ƒúpäÉAö,>}ôE ÷”âÔôªÆ§ù6¢ eö  ñCE<§øµ# …ú±–ŇùÖÆ™ø1Ð<}÷ÈŠñO#Ä‹øs(“ùÐäAõ(!ȃùÓ¢ÌAõ$Ó¡ùl¿Sô'ÒAø5'ÍAøÐfS‹÷ÈFŸúS`Ô‹øÑ©©Aúu)IøèB«øÔäÚ‹õ(#I±ô +'̉õµ*YSôkE‡ú“é>Añ¢†ŠyúqjGAø1"C‘úHƒAð!,6Hõ¤,6Hõ¤,h+(/Zx7 'õ · _‡Zö°4õ¸ õ€Bp _‡ ôˆ XôH÷ÀòØ Bôˆ/hô¸ +gî  (`ûlA‰øäRAôq"Ùô +Vƒù•b¢AøUcF‹úH!UøÑi ‡ùiA‡ú‘i)AøUcG¥ùõÐ%yú–hE[úè!UøÑi ­ø°êO¥÷×P Að ð7DAd/P|qPD!/LOðÜ øw¾³pCL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj Yø1"C‘úH#Ì«ø¨ÛmöìX¶cöÌ1qömX0qô Y4e÷-Ý}÷ÈŠñO"Eù°a …ú±–“ú”Ð(OøUc OøRj Eùô*IŸùÐf"Aôó¢×Sô#O¥ù¨!Iøˆ(…ô ¡Uõ(B“úˆB“úŠT Gø‘aÌAõ +!)AøUcF‹úHB“úŠP<¡úRfÔ³úPWŸúQ)A÷çΉô +A§úrc΋øÐN‹úï<ùô¦ ¡úµ<ùô¦ ™úÐf …÷ÈB…ù5) yøÓéMAújB“ú”Ð<ùô¦ …øRjSA÷‘§Ò›ô+A™ôŸ>A÷‘§Ò›ô¤Ô§ô P<ùô¦ ™úÐf …ù5>A÷‘§Ò›ôçΉô +N‹úè©Aõ ¾}÷ÊP(©ô#O¥ù¨¿A÷‘§Ò›ôäT³úP<ùô¦ øµ!I©úhFŸúSPB…ù5) yøÓéMAù• ÌAøOŸ yøÓéMAøRjSAö(FŸúSPL­ø3B“úŸ>AøÒl>}õ/Ÿ>Añ¢†ŠyúqjGAøUcG¥ùõÐ'ðQô€ ,6Hõ¤õÄ´IöŒ´ûøõƒÿÿõÈ´ õ‡Ä+(hhô¸õÀ€{õƒ€õ„/Zx _‡,6õˆ,6õˆûA¯ÿýûB/ÿÿ/õƒ€õ€7 'õ ·õ¯ÿûõ¯ÿûõƒ€,6h%õ¯ÿûõ¯ÿûû@¯ÿõ._ïzõ€."ôÈ€ôÁÿ,Yïõ—€Q"Q$`õéõ€,6 ",4I Xû@/ ô¯ÿû D_ï~XôÉ€õÁö’4=`÷º4; _ï|ô/ÿû @ _ï~ô  ô Bôõå´Kô¸ +gîPñNþ¹ûlB«øÑéO¯ôâE‡ùˆ"­ø3*ÅEôªÆø´B«øÑ¢ÒAôSèT“ùó ÌEô¤ØSô ^Rù“á …ú±©Éµø¨*>Aô¯*Y¡ø«k …ú±£E¥ô¢Ã©ùôŸ]Aðð7DAd/PÿœhIBO#BvIE3Zx{pøuâZ]ÿü)D!/LOðÜøw¾³pøì˜ü×þPC,n A7PCL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj YøUcG¥ùõÐG™ú±P!·ölÛ6cöÍ8AöÍ0AöìY°gö-Ú aô Y4gö 2möLZ¶Cû¯Ÿ ñCE<§øµ# “ùÒj Oðh Að,h+(/Zx7 'õ ·@pô¸ õÁ€{ Bô ô¸ õÀ€{ô8 õÁ{  @ôôô8ôƒ€'+gî ^hI@ûlIù5#‰ø°æ QôU Ì«ø¨A©ùóT “úq$Ó¡ùl¿Aô¯)G™ùðÐD“út&A³÷è*>Aô¯)G™ùðÐI›ø‘f ©÷ȼ¥øó'ÃAø‘fP¥ù3ª ©÷È*]A ð7DAd/Pÿœhøì˜ü×p C,n A7P`D!/LOðÜøw¾³pCL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj Yù3¤ÔAøó*ÅAô6Ø·eöM˜5qöíY [ö-Ø·s÷ œ±qöˆ!»÷Ï ñ¢žS‹ú‘ÐB«øÕ'ÓAôàÐ Að,6Hõ¤,h+(/Zx7 'õ · X,6õ„õƒ€õ´ZZõáõƒ€,6ô€,4I/h +gîñN O…ûlB«øÕ'ÓAôq"Ùô +Vƒù•b¢Aúu)Iøè!UøÑi)»ðð7DAd/PÿœhBO#BþÒHøì˜ü×þ D!/LOðÜøw¾³pCL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj YøUcTŸúh#Ì«ø¨Ûcö Ù·iö®Y0AöŒœ´söÍÙ9mô ›2cöŽÝ}÷ÈŠñO)Å©øè"E™ør) Oðh Aði,6Hõ¤,h+(/Zxõ¸,6h1 _‡Zõƒ€,6,6õ„7 'õ ·ûA¯ÿÿ/_‡ö±´ôƒ€ $+h0 _ï}ô ô¯ÿÿ Xôô € H_ï~õ‡ƒ½ _ï~ Bô ô¯ÿÿ DXô¸ õÁ€{òè4cö0+hô¸ õÁ€{,6õŒõ¸õ¯ÿ÷õƒ€õ€ðƒÅ] X0Bõ`4]ûA/ÿÿ2$_‡õ`4]ô¯ÿÿ Xô €õ‡ƒ½ö€ õ`4] _ï}ô ô¯ÿÿ Xôô € H_ï~õ‡ƒ½ _ï~ Bô ô¯ÿÿ DXô¸ õÁ€{òè4cö0õ`4]ô¸ õÁ€{,6õŒõ¸õ¯ÿ÷õƒ€õ€ðƒÅ] Xòáôƒ€/h2+gî$4@ _%@ûlD‹ùäRAôq"Ùô +Vƒù•b¢A÷“é ‡ùiA‡ú‘i ø3)Å}ôªÆø´” K÷•,ЋõµÐB«øÑ¢ÒAúÑaÔŸúO%yúQæO‡ô"Ì¡úRgTAú® Aðð7DAd/P|qP1Bj|xUhhC,n Að è%P((øRJ®ÝwQHðôID!/LOðÜøw¾³pøì˜ü×pX0CL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj Yø‘fC‘úH#Ì«ø¨Ûcö,œ2möíÛ·Aö,³oöŒ\2oô ¶kö¬Z·oöè°oön7göÌ1e÷ Ù·oöÈ1söŒØ4AöM™1i÷n¾}ôE ÷”âÔôªÆ¡úRgTAôàÐ AðÝô€ ,6Hõ¤.hgöŒ´ûøõƒÿÿõÈ´ õ‡Ä+(hhh hî/Zx+h/Zxõ´Ïõ´Ïõ`4%/Zxõ´Ïõ´Ïõ´Ïõ´Ïõ`4!/Zx ,Kxô8 ,Mô¯ÿû D_ï~ pô/ÿýô8 @_‡ô€ô/ÿÿ@@X _ï},6õ„õ¸õ€Bpõ€,6 _ï|ô  p ô8õ‡ƒ·Íõ‡ƒÙûõ€,67 'õ ·6 _ï|õ`4] _ïz,6õ„,6 õ¯ÿó,6põ¸Fp7 _ï}+h) _ï{ôõá2$_‡+h),6p õ¸,6 õ¯ÿóDp+h+ pô8ô¯ÿù D_ï} _ïz,6õ„,6 õ¯ÿóDpõ`4a pô8ô¯ÿù D_ï}6 X+h5,6 õ¯ÿõBp _ï{ _ïzôô 6 _ï}+he7 _ï|6 Xõ`4Á _ïz $ hhòù4Ñòé=Dh< pô¸+h=ô€ &ö©´Áõ´Ïõ´Ï _ïy,6õ„Zõƒ€,67 ' hiô¯ÿý _‡ p ô8õ‡ƒ¼?õ‡ƒÙûô¯ÿû D_ï~òè4Óö0+hZûA€3fX+hZõ¯ÿýõ¯ÿý,6 õ¯ÿíõƒ€õ´ÏûA¯ÿ÷ûB/.&õƒ€õ€Hpô¯ÿû _ï~/"`` _ïw,6õŒ,6 õ¯ÿíô¯ÿù D_ï}Dp _ïw,6õ„,6 õ¯ÿíDpõ`4ƒõ¯ÿýõ¯ÿý,6 õ¯ÿíõƒ€õ´ÏûA¯ÿ÷/_ï}õƒ€õ€Hp/hj+heõ¯ÿûõ¯ÿû,6 õ¯ÿóõƒ€õ´Ïõ¯ÿ÷õ¯ÿ÷Hp _‡õå´Õôƒ€+gîð ÷†ô0pî  ñN 6ó ûlB«øÔ)IúˆÄ‹øs(EúÐfU‹ôH#I±ôªÆø´"Ÿú$Ïø3 ‡ùgN‹ùˆO¥ôjO›ô Ì§ø¯<ŸúH ÔŸù¨#A™úq_)AøUcL‹ùÑêHAø“éÐ¥ù3ª øµáùôÐO«úäAô%yú–hE[úè!UøÑi ­ø°êO¥÷ÈT©û("[ü{÷tÓýÝrä[ôH ôWP Að'ð7DAd/P|qPgBI+2wCxED!/LOðÜ;øw¾³p ø¯‰ÈMÿgì7XøRN£v|høì˜ü×pðOP2HA 0Lðx©ðÄ·ðä½ c hBI)ugÿ4Ðø—)ŒIÿ/ÀCL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj YøUcP¥ù3ª ù•b CûlÙ¶mö-7gô ˜¸göM³eömP3eöíœ6aô ¹qöMÛ köL´i÷-˜ cö ›°köî[±gô X9köLš´e÷4iö 1Aö,´aö 0aô Ù7oöè¶qö-X°iô [·gömX·gö,2möL[°Aö¬š3a÷¸mö cö 5sön¾}ôE ÷”âÔô'Ó¡úRgTAôàÐ AðOô€ ,6Hõ¤õÄ´EöŒ´ûøõƒÿÿ."h,+(ð4 ð4ð4/Zxõ`4/Zx,6h#,6h#õ`4/Zx,6h#,6h#,6h#,6h#ô€ô/ÿý@@_‡û@¯ÿùô€ô/ÿÿ BX7 'õ ·òè4G0@ õ`4+ _ï~ô  pô8 õ‡ƒ·Ëõ`43õ¯ÿùõ¯ÿùõ¯ÿùõ¯ÿùõƒ€õ¯ÿûFdõ`4Aõ¯ÿùõ¯ÿùõƒ€,6h#õ¯ÿ÷õ¯ÿ÷õƒ€õ¯ÿùHp6 _‡õ`4Aõ¯ÿûõ¯ÿûBpô¯ÿù _ï}/h$+gîô/ÿû@ðð ð ñY`ˆóûlDŸút)IúˆÄ‹øs(EúÐfU‹ôH)Ô¥ù3£ §ú”¤ÎôgYAôSèT“ùó ÌEô'ÒAø5'ÍAøÐfS‹÷È#I±õ()ÉŸúˆ#Å©õ°èO§ôªT³ôWP A ð7DAd/PÿœhEø£;ÎÑ|@øRV‚v|XD!/LOðÜ!øw¾³pøì˜ü×þh0CL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj Yø“éÐ¥ù3ª ù•b CûlÙ¶mö-6sô \6aö®Y²köÌP1aö,2oölœ cö옴kö Y1mô 5eöŒØ7Aöî4iöè°i÷ \9Cû¯Ÿ ñCE<§øµ# øµáùôÐ'ô€ 52h,6Hõ¤.h42hûøõƒÿÿ."h,+(ð4 ð4/Zx+h /Zxõ´%õ´%ô8 ,Mô¯ÿÿ DX7 'õ ·,6 õ¯ÿÿBpZ Xô[ ôˆ/h  +gîðð ñj*iûlG‹ú‹aПúhÄ‹øs(EúÐfU‹ôH!ȃùÓ¢ÌAôSèT“ùó ÌEôäAùÑf)AúPèO§ôêÔ‡ùg]Aðð7DAd/P|qPøì˜ü×þD!/LO 8 øw¾³ð8BI)ugyS CL$þ@ ÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj Yøñj-‡úé ù•b Cûm·sö,˜7a÷(±oö-ܳiöŽ0AöµAöM™1köèn¾}ôE ÷”âÔôªÆ§ú¤Î©ô Á ABô€ ,6Hõ¤.h=öŒ´ûøõƒÿÿõÈ´ õ‡Ä+(hð4/Zxõ´{õ´{õƒ€õ´{,6h>õ¸ õ¯ÿùõ¯ÿù,6põ¸ õ‡ƒÊõõ`4)/Zxõ´{õ´{õ´{õ´{õƒ€õ´{,6h>õ¸ ô8 ,Mõ€,6,6põ¸ õ‡ƒÊõ _ïz,6õ„Zõƒ€,6,6põ¸ ,6põ¸7 'õ ·ô¯ÿõ _ï{ (,) 7 'õ ·û@¯ÿù/_ï~ B_ïyö´qõ¯ÿýõ¯ÿýõ¯ÿ÷õ¯ÿ÷õƒ€õ€Fpô¯ÿï D_ïxòè4}ö0+h5õ¯ÿùõ¯ÿùõ¯ÿóõ¯ÿóûA¯ÿõûB/õƒ€õ€Fd _ïx0B.+h.ô/ÿÿ X+h/ô/ÿý _‡ô ô¯ÿõ _ï{õ‡ƒ©-ô¯ÿï _ïx÷À`ô¯ÿù D_ï}õ`49õ¯ÿùõ¯ÿùõ¯ÿóõ¯ÿóõ¯ÿíõ¯ÿíFdô¯ÿõ _ï{ (,) _ïv/h?õ‡ƒËyô¸+gîðŸÿÿô0 ð 8I6ûlB«øÔèR“ùÕ#‰ø°æ QôU Ì«ø¨B«øÑ¢ÒAøUcF‹úHO¡ú’g΃ùˆC‘ø3§E™õ(#I¥úuÏôêÔ‡ùg Qør Îø³ Eû—."Eô®\¹ûˆ%yú–hE[úè!UøÑi ­ø°êO¥÷×P Að7DAd/P|qP=øµ‡åy7H<BM; þ¤´cø£;ÎÑÿUBM:B@þ¤H9(D!/LOðÜ5Xøw¾³pPBI)ugyS ETy/( Høì˜ü×pxðSCL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj YøUcS¡úRgTAøó*ÅAô6Ù³möÌY·aö(±mö-œ6sölÜ0AöŒ6kö޶aô ›2cöí1qöMY¶cö,²AöŒœ´söÍÙ±eô \´köÈ eö̘¶sô Y4gö Ý}÷ÈŠñO)Å©øè#I¥úuÏô Á AðOô€ ,6Hõ¤.h#öŒ´ûøõƒÿÿõÈ´ ,+(hh/Zxõ´Gõ´Gõ`4/Zxõ´Gõ´Gõ´Gõ´Gû@¯ÿûô€ô/ÿý B_‡7 'õ ·ôƒ€ $ô¯ÿû _ï~ü1ƒÿÿ+h"õ´Gõ´Gô¯ÿÿ HXô¯ÿý H_‡ û@¯ÿ÷ _ï|4Bhöp+h÷¸´++hô¯ÿÿ X/h$+h">_ï~ö´9ôƒ€ $+hôƒ€ $+hô€/h$ô¯ÿÿ X`÷Àüƒÿÿõ`4!õå´I+gî@ñdªB ûlF“úTê-ŸøÈÄ‹øs(EúÐfU‹ôHO¥ô Ì§ø¨)Ô¥ù3£¾Aúu)Iøè)Ô¥ù3£ Eùô*IŸùÐf"AøÒl)»ðð7DAd/P|qP#D!/LOðÜøw¾³pîøì˜ü×þðp7PCL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj YøÒiS©õ³ã ù•b CûlÙ¶mö,Û±gô ™5i÷ [¸g÷4e÷ 0cô X9cö­›¹göÈ köM°iô Ü6iöÝ}÷ÈŠñO)Å©øè!Uù‘gG©ùƒAð,6Hõ¤,h+(/Zx7 'õ · XZZõá/hôƒ€+gî 8xûlB«øÓ"Îú’#‰ø°æ QôU Ì«ø¨F“û!UøÑi)»ð7DAd/P|qPøì˜ü×þ D!/LOðÜøw¾³pCL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj YøUcL‹ùÑêHAøó*ÅAô6ذoömÚ5söL2möLZ8Cû¯Ÿ ñCE<§øµ# …ú±¡Ì‹ø4'ð,6Hõ¤,h+(/Zx7 'õ · Xô  @ôô/hô¸+gîñNä¿ûlB«øÐæEƒúHÄ‹øs(EúÐfU‹ôH!UøÑi …ú±£E¥õ(¼©û4"­¯ôªÆø´V‹øu'Ò}û¨ Að ð7DAd/P|qPD!/LOðÜøw¾³pCL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj YøUcC™ø°i ù•b CûlX7göí2oöH6eö-!»÷Ï ñ¢žS‹ú‘ÐD‹ù•'Ñô Á Ajô€ ,6Hõ¤õÄ´ÉöŒ´ûøõƒÿÿõÈ´ ,+(hhõƒ€,6he/Zx,6 ,6heõƒ€,6heõƒ€,6he _ï{,6õ„õ¸õ€Bpõ€,6õƒ€,6heô¸õÀ€{,6õ„ _ïw,6õ„7 'õ ·7 'õ ·6B_ï}+h% _ïvô/ÿ÷ @ _ï|ô6 _‡+hõ¸,6Bp@p+h$òè4Ëö0+h$õ¯ÿïõ¯ÿïõƒ€,6heô8,Mõ€,6 D_ïvFpô¯ÿñ _ïy,(. _ï{õ`4¿ô¯ÿ÷ _ï|ô €õ‡ƒ½ô¯ÿ÷ D_ï|û@¯ÿí _ïwö´yöpõ`4Y=bh*õ`4y6 _ï~õ`4}ô¯ÿ÷ _ï|÷À` _ïv B ô6 _‡õ`4gõ¸,6õ`45òè4Ëö0+h$õ¯ÿïõ¯ÿïõƒ€,6heô8,Mõ€,6 D_ïvFpô¯ÿñ _ïy,(.+h$õ`4¿ pîô8ô¯ÿû D_ï~7 _‡+hKòè4Ëö+h^ô¸õÀ€{ hfö0+h^ _ïvô/ÿ÷ @ _ï|ôô8õÁ{,6õˆõ¸õ€õƒ€õ€ðƒÅ]+h^0F+hY _ï}÷´¡ô¯ÿ÷ _ï|ô €õ‡ƒ½ö€ õ`4§õƒ€õ´Íõƒ€,6heDpõ`4¯ _ïvô/ÿ÷ @ _ï|ôõ¸õ€Bp@p@p+h^ö€ +h^ _ïvô/ÿ÷ @ _ï|ôõ¸õ€Bp:_ï{>_ï}+hõ¸õ¯ÿëõ¯ÿýõ¯ÿý B_ïxDp _ïz/hgôƒ€+gîô/ÿï$4$0 ñWÓ+uûlD‹ù•'ÑôâE‡ùˆ"­ø3*ÅEô¤ØAøUcF‹úH)Ô¥ù3£ Eùô*IŸùÐf"A÷“é §ú”¤Îô Ì§ø¯” …ú±¦Eøõ$ ‘úé­…ú±D‹ù‹jO[ø³æ §ù3ê ©ú–VПúh&Iø´êA¥úÑPSƒúÑVË“ù“%yú–hE[úè!UøÑi ­ø°êO¥÷ȼ¥øó'ÃAø’iЙø6_ ©÷È'Õ©ør ÎAúˆ¼¥øó'ÃAø‘fP¥ù3ª ©÷×P Að%ð7DAd/PÿœhÉBj|ÿt•øRJ®ÝwQH' pBI@u`$8BI)ugÿ4ÐAD!/LO 8Pøw¾³ð8'HC,n Að è! Gøì˜ü×þ   ðøm Q dCL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj Yø‘fTŸørG™ú±P!·ölÛ6cöm™¶Aö.6möì˜0aö°i÷ œ°Aõ¬œ9eöm1kö 4e÷-·cöÛ cöì[¹s÷ X¶qô Ú±qöN[0aö1söŽX5kö-œ [ö-ضc÷-Û¸köH¸qö­Û4eöÍ köM·i÷ 1oö-ܸm÷,\4Aöî4iöȲiöl!»÷Ï ñ¢žS‹ú‘ÐSƒúÑVË“ù“'ðg,6Hõ¤,6Hõ¤,h+(/Zxõƒ€,6h0õƒ€,6h07 'õ ·òè4aö0õ`4M _ï}ZûA¯ÿûõá D_‡öy+h.$ ô DX Xõ€."ôÈ€ôÁÿ,Yïõ—€Q"Q$`õé Xû@/ XôÉ€õÁö’4-`÷º4+ _ï} Bô _ï},6õ„õƒ€,6h0õ¯ÿùõ¯ÿùZZ/  XôôÉõÁ 4Fh!`=fh  _ï|õ‡ƒ½õ€,6 ",4I  _ï} B+h. _ï}ZZ/  XôôÉõÁ ö‘´Y`÷¹´W ô Hôˆ /h1ô¸+gîô/ÿû@ñ²ÍÑûlSƒúÑVË“ù“#‰ø°æ QôU Ì«ø¨B«øÑ¢ÒAøUcF‹úHO¥ôêR“ùÑÐFƒù”â¾Sô ^T³úV×AøUcF‹úH+E‡ú“é>»ðð7DAd/P|qP0BO#BþÒHIøRJ®ÝþôdEE3Zx{pøuâZ]ÿüD!/LOðÜ øw¾³pøì˜ü×pPCL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj YúpkE[ùrfLAøó*ÅAô6Û7g÷ Û6iô ›±a÷4Aö¶iö¬6söÌÙ möìX8söl4m÷-Û2aöŽ5eöŒœ´Cû¯Ÿ ñCE<§øµ# «ùÒäÌ™ô Á Að',6Hõ¤,6Hõ¤,h+(/Zx7 'õ ·õ¸ õ¯ÿý _ï~,6õ„ Dp _‡ZZ/  XôôÉõÁ ö‘´`÷¹´ ô Hôˆ /hô¸ +gî g|#ûlUùrfLAôq"Ùô +Vƒù•b¢AøUcF‹úH!UøÑi ‡ùiA‡ú‘i)AúbD§ú”¤Îô ^T³úV×AøUcF‹úH+E‡ú“é>»ð ð7DAd/P|qPD!/LOðÜ øw¾³pCL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj Yú³¥É™ùˆ#Ì«ø¨ÛmöìØ5mö 4iö­œ9mô Y4e÷-Ý}÷ÈŠñO)Å©øè*E‡ùëhRŸøô ÍAôU>Añ¢†ŠyúqjGAøUcT‹øsÐ'kô€ ,6Hõ¤.hböŒ´ûøõƒÿÿõÈ´ õ‡Ä+(hhõƒ€õ´Å/Zx,6hc,6hcõƒ€,6hcõ¸),6hcô8+,Mõ€,6,6põ¸-ô8/õÁ{õƒ€õˆ7 'õ ·ô81õ‡ƒÍ÷+hô83õÁ{òè4Çöx5+hô83õÁ{ô H_ï}+hHô¯ÿû _ï~ pô87õ‡ƒ©-,6põ¸9õ¯ÿùõ¯ÿùDpô8;õÁ{,6õˆõ¯ÿùõ¯ÿùDp,6põ¸=õ¯ÿùõ¯ÿù,6põ¸?Fpô8;õÁ{,6õˆBpô¯ÿõ D_ï{ hdö0x5õ`4Sô€ ,+h+ ô L_ï}5,h?õ¯ÿùõ¯ÿùBpô¯ÿõ D_ï{ hdö0+h? hdö +h9òè4É1@ ôô/ÿý _‡òè4Çö'+h9ôˆ5,h93N0+h8*lh6+h9ô€õ`4ô¯ÿû _ï~ pô87õ‡ƒ©-,6p õ¸Aõ¯ÿùõ¯ÿùDpô8;õÁ{,6õˆõ¯ÿùõ¯ÿùDp,6p!õ¸Cõ¯ÿùõ¯ÿù,6põ¸?Fp@pô€ , heö0+h? _ïz3DX+hOõ¸Eõ¯ÿñBpõ€,6Bpô¯ÿõ D_ï{ hdö0+h? _ïz3DXõ`4¯õ¯ÿùõ¯ÿùBp õ¸Eõ¯ÿñ _ï|,6 õˆõƒ€,6hcFp õ¯ÿùõ¯ÿùBp ,6hc,6hcõ¯ÿ÷õ¯ÿ÷Bp ô¯ÿó D_ïz hdö õ`43òè4É1@ ô _ï~òè4Çö'õ`43ôöª433L +hc*hhaõ`43ô¯ÿù _ï} pô87õ‡ƒ©-ô¯ÿù _ï} p#ô8Gõ‡ƒ©-ðØIô€ ô¯ÿù _ï}õ‡ƒ¨Ûô¯ÿù _ï} (,) ô¯ÿù _ï},(.,6põ¸?õ¯ÿõõ¯ÿõDpî D_ï{5Dh|ô¯ÿù _ï} pô87õ‡ƒ©-,6p$õ¸Iõ¯ÿ÷õ¯ÿ÷Dpô8;õÁ{,6õˆõ¯ÿ÷õ¯ÿ÷Dp,6p%õ¸Kõ`4Yõ¸Eõ¯ÿïô¯ÿý D_‡Bp2$Xõ`4 õ¸Eõ¯ÿï _ïzõ¸Eõ¯ÿíô€ô/ÿû D_ï~Bp _‡/õƒ€,6Dpõ¸Eõ¯ÿïBpõ¸Eõ¯ÿïõƒ€,6hcDp _ïx,6õˆ,6põ¸?õ¯ÿóõ¯ÿóFp _ïx _ï{Z/ X ôÊõÂ4Jh`=jh Lôô¯ÿù _ï} p&ô8Mõ‡ƒ©!ô¯ÿù _ï}õ‡ƒ¨]+h>ô/ÿó _ïz heör8Oö'õ`4_ô¯ÿù _ï} pô87õ‡ƒ©-,6p(õ¸Qõ¯ÿ÷õ¯ÿ÷Dpô8;õÁ{,6õˆõ¯ÿ÷õ¯ÿ÷Dp,6p)õ¸Sõ¯ÿ÷õ¯ÿ÷,6põ¸?Fp _‡.$ ô¯ÿù _ï},) ,6p*õ¸Uõ¯ÿ÷õ¯ÿ÷,6põ¸?Fp+h>ô¯ÿù _ï} pô87õ‡ƒ©-,6p+õ¸Wõ¯ÿ÷õ¯ÿ÷Dpô8;õÁ{,6õˆõ¯ÿ÷õ¯ÿ÷Dp,6p,õ¸Yõ¯ÿ÷õ¯ÿ÷,6põ¸?Fpõ¯ÿ÷õ¯ÿ÷õ¯ÿñõ¯ÿñDpõå´Ëõ`4“ô¯ÿû _ï~,(.ô8;õÁ{ ô¯ÿû _ï~ô  õ‡ƒ¨Ûô¯ÿû _ï~ p-ô8[õ‡ƒ©-ô¯ÿû _ï~ô¯ÿõ _ï{,(kô¯ÿõ _ï{ p.ô8]õ‡ƒ·Í7+h^ hfö õ`4¿ _ï{ö‘4¿Zö’4¿Z ö²4¿òè4É1@ ô ôòè4Íös8_ö'õ`4¿ _ï{Z hg1@ ôœòè4Ï0@õ`4¿Zô ô p0ô8aõ‡ƒ¼?õ`4¿õ¯ÿùõ¯ÿùBp@p _ïy/hhô¸E+gîÿÿÿÿÿ$4ô$4$4ô/ÿõ$4$48$48ñN MåûlB«øÕ"ßôâE‡ùˆ"­ø3*ÅEôªÆø´B«øÑ¢ÒAôSèT“ùó ÌEôäA¥ø0êE¥õ("O§ú¤Î©ô"ßõ³'Á‰ôgF[úu Ò©ô"ßõ²äÌ™ôªÆ™ø³£Ô‘ô"ßõ°fLŸøh*E‡ùëgЋùÈ!Uú¤Î©ô"ßõ°æO§ø¨$Îõ°çΩù3T‹øsÖ«øÑ¢Ò[úrmEAøUcG¥ùõÐB«øÐæEƒúH)Á­ø«eÉ™ùˆ*E‡ùëiEƒø‹aUøÑi “ùÑ–Ò‹úufTAù¶VÔ©û+gÆô ^T³úV×Aù3£ ­ø°êO¥÷È'Õ©ør ÎAô6ÕB¥ø°e­cöÈVƒù•b¡»ô ^Rù“á ¥ø±gT‹úKjE‡ùëaȃúH*>Aú‘aÏAô¯)G™ùðÐT‹øsÐT}ô ^T³úVÃAù3£ ­ø°êO¥÷ȇôHYßþ¨0òËôúaåþšwgAôH¼¥øó'ÃAú‘aÏ[ú§Ç¥ø3PT}ôfßþH:hËô´òçþˆ:iÛü« “üÈ<ïëþH$ΓúƒEiçôwcßýݲîéý;÷aÙõˆ<ïëôpùAý{eAþ›Ðeñý=wÓþš^‡õˆ/Kñ[ù éýtòAü¼zéíü;2îéþhnßþˆ/ZCõ(0æéü¼iéô²çÓýÜÐlÓþ}2îÓýÙ× ôH* Eø{÷tåýûÚAüYsoåü¨9eÃüž_ EôeÉý=aÅýüºeÉõÃE"Aô¯*Y¡ø«k …ú±£E¥ô¢Ã©ùôŸ EøXqëAþ›Ð"AôPw Ëý¼:yAþ}9iÝüè;áçô²ôëþ[²äAüÜ·íAôH.ñU4eAü]sfËþH4açô²åÝô2æéôwcÑü;³åÉõÃE"AôQ'΋ôH/Z[ú–hE‰ô¨lËü<ò åü½:òÝô¹oÛô"AþúzhAûÐÖ ½ùkoåô4eÓþH2ñëý=°ìËýÝ9®ñT6eÃþyPrËõ¹wtËþH;ééý/"AôK†Š³ýýPcßþ»2 Ïü½yßþ¼¹åÙüÈ4îéýè0 Åü9séü=2®ñH"ƒýÈ2òåýüoÇü}yrËüˆ4îAþYzuåýÚwgAüÜ·íAôH:AôH ïü<Ðnßþˆ0âÙü¨:oAþ}0òéôx çþ¸ñåçþyºìÙÿ."Aõ +¡R‹ø2Ö±mô¥É™ùŠP*­ø3*ÅAôN¥É™ùˆ® AðGð7DAd/P|qPbBI+2þðü»øRN£v|hLBI1Faþ£X“BI8^uhBMZ1pþ¤„/BI@þ¡pÝBM:B@um8øRXÆÍuîXkHCwîP ÿa$ÑEel:2ðì¥BM; þ¤´3ðÜËð@ép2pøQüãÿ7Ü#D!/LOðÜ!øw¾³pC,n Að èð˜+P$pxðkBI)ugÿ4Ðøì˜ü×þ ðDq`Tð¨ð,CL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj YøUcT‹øsÐG™ú±P!·ölÛ6cömš²Aöl\´o÷-0qö(±kö.³cö,4Aö,\1c÷,رcöÈ1oöîX8qö 1cö®³q÷[ köÍZ9eö ™¶Aö.[³q÷ Ø5Aö.X³cölY6qô X¸cö-Zµmö¬1cö­Û9o÷ Y iö Ø4möŒ0AöÌØ4s÷-Ø [ö-š4cöÌ™±aöˆ³eöœ0s÷,1Aö,\3mön´köÈ·qöN[3eô [¶köŒµcöÐ4söm5mö¶cöìZ1m÷ [ [öLZ7cöíY3eö¹gö¬š·mö Ð-cöì[¹möLذaô \3göíY6aöL4kö͹aö  [ö-Ø·s÷ œ±qöˆ²iöl eö̘µmô7_>Añ¢†ŠyúqjGAú•,±AôuçÒ‰ô +˜2aöL0eö ˜2U÷ÈŠñO)Å©øè*T³öHןúQ*aöl0eö ˜2aöJŸ ñCE<§øµ# ©úµ<“úµ¢Ã©ùô3AôuçÒ‰ô +˜0aö 0aö 0U÷Ï ñ¢žS‹ú‘ÐM³õµ*Y[ùñ£ Oðh Aô€ 52h,6Hõ¤.h42hûøõƒÿÿõÈ´ ,+(h h hô¸ õÀ€{,6õ„ô8 õÁ{,6õˆ/Zx7 'õ ·ô¸õÁ€{õƒ€õŒBp _‡ @ Xôõ€,6Bpõå´)ôƒ€+gî   ñ‘Ö½ûlM³õµ*Y[ùñ£ Gø‘aÌAõ«A™ú±Q «úÑaÔŸúHO¡ú’g΃ùˆWŸúQWŸúQ ©ú–VÇ‹úˆ*T³õ´âÔAô¯)G™ùðÐT©û,PT}ô ^Rù“á ©ú–Y ©÷ȼ¥øó'ÃAú•k ©÷×P Aðð7DAd/P|qPD!/LOðÜøw¾³p øì˜ü×þ(8C,n A7PðPCL$þ@ ÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj Yù¶VÔ©û+gÆôæU‹ôm´göîX²cö [ö-Ø·möìZ²möˆ³aö š7oö,²Aö¬š3cö6eö-™ cöˆn¾}ôE ÷”âÔôiRøs'ðWõ´Qõ´Qõƒ€õ´Qô .h)[Wï}Q"õ€,6,6põ¸ ðƒÌ35$h'ô8 ,M,6L+h'ô€ôÁÿ,Y "  BõY´ òø4Sõƒ€,6Bpô(ô8 õ‡ƒÍ«õ`4'ô8 ,Mõ€,6Bpô¸õÀ€{,6õ„ðƒ”qõƒ€õ´Qðƒ•K Pô(õ´Q J4,Yïõ—€ðƒÕç BPô( pô8 p ô8,:f+ õ€,6ô¸õÀ€{,6õ„DK,6Põ¨Bp,6Põ¨,6Hõ¤ð×e+h( p ô8+($4 Ý~ûlE¥úQ¡ÎAôq"Ùô +Vƒù•b¢Aø3¬ úPfÅAôU*Йø¨Aû*PT©û+cÅ©ô*Y[úqj øµ)Ô¥ø0ê Ÿù‘Ô©û(¼¥øó'ÃAøó'™õ±âÔ§ú”–ȃùÑT}ôiRŸúHVÉú‘iR«ú) “ùÕ"Ò¥ú´* ‹ù”âÝAð5ð7CL$þ@QBÝz8ÿ]”Møo¢zÿþJXEBI,8þë0=ø_ï8Çz^8EM7Oÿ) 3C^}W|þU,/Dl. rGC,n Að è)BDF;<ÿ6¬!E3Zxÿgø øuâZ]xx øRTŒƒþÚ`BI)ugyS  B4Znÿ0Ì DtmO ÿÿèøì˜ü×þðp-÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj Yø´©F‡ùÈ#Ì«ø¨Ûeö-Û0cö,X4cô 6köŒÛ e÷-Y8kö®8AöŒ›¸eönY3iô Ù5aö®¶Cû¯Ÿ ñCE<§øµ# …ú±–éù‹c¿Aú ñ¢žS‹ú‘ÐB«øËaÔ™õ´ß ©÷ÈŠñO#Ä‹øs(…ú±–éù‹c¿AøUc-‡ú“Óõ(O¥ôjO›ô Ì§ø¯Ÿ ñCE<§øµ# ‡ùiF‡ùȃA;,6Hõ¤,6Hõ¤,h+(/Zxõƒ€õ´oô8 õÁ{,6!õˆô8 õÁ{,6!õˆ7 'õ ·,6põ¸ðƒÌ3ö©4mô8,M,6Lõ`4m _ï|ö€ö1€+hôƒ€ $õ`4mô8õÁ{öÈõ`4) _ï|ö1+hô8õÁ{öÈõ`4k _ï|öõ`4kô€ôÁÿ,Y (  H0õ[45 `h8õƒ€,6Bp D_ï~ô8õ‡ƒÍ«õ`4Eô8,Mõ€,6Bpõ¯ÿýõ¯ÿýðƒ”qõ¯ÿÿõ¯ÿÿðƒ”qõƒ€õ¯ÿ÷,6 õ¯ÿ÷ð—? p ô8 p ô8,:f+ õ€,6õ¯ÿûõ¯ÿûDKô8õÁ{  ô p ô8,:f+ õ€,6õ¯ÿýõ¯ÿýDKõ¯ÿûõ¯ÿûBp pô8õå´q+gî$40PñR#ûlC‘ø4£CôâE‡ùˆ"­ø3*ÅEô'ÒAø’iÍ“útÐFƒù”â¾Aør Òƒøu"ÒAør Îø³ ©ú–VÇ‹úˆ*T³õ´âÔAô¯)G™ùðÐG™ùð¦-øµ)Ô¥õ² Ήô K÷”£ÌŸøh#ÌŸøSÇ‹ú”êR[ør Ήô øµ)Ô¥ø0ê K÷”£ÌŸøh!Uõ°êL[øïÐT}ô ^Rù“á …ú±–éù‹i¿AúO™ø‹jT³ôiRŸúHVÉú‘iR«ú) “ùÕ"Ò¥ú´* K÷”£ÌŸøh$·ùg ©÷ÈÄ“úsdÓ§ô. Að7DAd/Pÿœhoøo¢zÿþJX[@BI,8þë0Uø©™¾?rsx(Dl. rG$XBDF;<ÿ6¬?E3Zxÿgø3øuâZ]xxøRTŒƒvi@îBI)ugÿ4ÐB4ZnyC D!/LOðÜøw¾³p C,n Að è xð¬]øì˜ü×p``'pCL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj Yør ÒøsG™ú±P!·öÍÚ¶qön cöÌ™3qölX6qô 1eöÍÚ0i÷¸e÷,2k÷. cö 4qö²söÜ1mö\ [ö,œ8i÷,¸q÷²iöNZ!»÷Ï ñ¢žOøÈS‹ú‘ÐG™ùð¦-øµ)Ô¥õ² Ήô'ÎAôQiRŸúH,‹úT£Cô Ð0}÷Ï ñ¢žOøÈS‹ú‘ÐG™ùð¦-øµ)Ô¥õ°äAøˆOô¡ÈƒúH,‡ùiF‡ùÈ aô $·ùg>}÷ÈŠñW ñCE<§øµ# øµ)Ô¥ô Á Að3ô€ ,6Hõ¤õÄ´#öŒ´ûøõƒÿÿõÈ´ õ‡Ä+(hh hh/Zx,6!,6h,6!,6hõƒ€,6hõ`4C/Zx,6h,6h,6!,6h,6!,6hõƒ€,6h+h/Zx,6h,6h,6h,6h,6!,6h,6!,6hõƒ€,6hõ`49/Zx ,Kx,6!,6h,6!,6hõƒ€,6hô8,Mô¯ÿõ D_ï{ _ïz ô/ÿ÷ô @_ï| _ïz ô/ÿùô @_ï}ô8,Mõ€,67 'õ ·ô8!õ‡ƒÍ÷7+h'@pô€ôÁÿ,Y "  BõY´Sôòø4%õƒ€,6Bp D_‡@p pô8# pô8%,:f+ õ€,6ô¸'õÀ€{,6õ„DKô¸)õÁ€{ D_ï}  ô  pô8%,:f+ õ€,6ô¸+õÀ€{,6õ„DK D_ï~ hö0õ`4— _ïy ôŒöRŒõ`4—õ¯ÿõõ¯ÿõõƒ€,6hõ¯ÿûõ¯ÿûFpõ¯ÿ÷õ¯ÿ÷õƒ€,6hõ¯ÿûõ¯ÿûFpõ¯ÿÿõ¯ÿÿBp X _ïyôô "hõà€ õ‡ƒ†= hWõà ú(,6,6hõƒ€,6h,6h,6h,6h,6h,Hvõ´'õ¸-õ€,6,6põ¸/õ‡ƒÊõô¨7 'õ ·@põ€,6õ«ÿë,6Wïvô(Dp BPô(ô¸1õÁ€{ ôŒ HPô¨ hö0+hv höõ`4Óô¸1õÁ€{ô€ @ø õ¸3,6Wïu,6õ€Dp òè4)ö+h{õ`4ï hö'+hmô,MY BPô(,6Põ¨BEv hö0+hu,6Põ¨,6Põ¨õ¸3,6Wïuõ«ÿ÷,6Wï|ðÅ]+h{ðÕç+h{ hö+h{õƒ€,6hõ«ÿ÷,6Wï|,6Põ¨Fpòè4)ö0+hô¨,6õ„õ¸3,6Wïu,6Põ¨ðƒÅ]+hWõ¸3,6Wïu,6Põ¨Dp +hWõ¸3õ¯ÿñõƒ€,6hDp õ¯ÿûõ¯ÿûðƒ”qõ¯ÿùõ¯ÿùðƒ”qõ¯ÿýõ¯ÿýBpîõ¯ÿÿõ¯ÿÿBp Xöðõ`4ô  õ‡ƒ¨] _ïyõå´+ô¸3+gî$4ô/ÿõðŸÿÿ$4$4Pô  (Tv ûlG‹ú”êRAôq"Ùô +Vƒù•b¢AøUcF‹úH!UøÑi Eùô*IŸùÐf"A÷“é yù’iÔAût¢Ó©ô¢Ã©ùô®¾AúÑaÔŸúO<ŸúH)Ô¥ù3£ ø3)Å}ôêR“ùÑÔ “ùÒj ©ú–VÇ‹úˆ&Ù[ú•,­ŸøÑS“ùõG‹ú‹aПúh$Ï©ôèE‡ù0f-‡ùi?Aù3bE™ôbD‡ùSƒúÑVË“ù“T©û+iÅ©ôäR©ø0¦EAùõjC‘ø3D‹ù”)Iúˆ"Ò¥ùô­“ùÕ"Ò¥ú´*SAù3ªE¥úUhTAô¯)G™ùðÐG™ùð¦-øµ)Ô¥õ² Ήô K÷”£ÌŸøh$·ùg ©÷ȼ¥øó'ÃAøó'™õ±âÔ§ú”–Ñø3¢ ©÷È#Å©úu)A‡úˆA‡ú’kA©ù3ç)Aô¯)G™ùðÐB«øËbÑùëcLƒøè*>Aô¯*Y¡ø«k …ú±£E¥ô¢Ã©ùôŸ]A)ð7DAd/Pÿœh#BI8^þ¡tDl. rGø_ï8ÇÿWœëBj|ÿtéøG5…ÿ°ÝBI gy[lETÿ+Ô­D8Gxsy`SEoDðtøKÊ gpchMøo¢zÿþJXiHC,n A7P3X;ðìÇBI,8þë0aE3ZxÿgøQøuâZ]xx(øQüãÿ7ÜKD!/LOðÜI øw¾³p$ xBI)ugÿ4Ð7(ø—)ŒIÿ/À/øì˜ü×p Pp@ ,ð´…`P @xXCL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj YøñjS©úH#Ì«ø¨Ûgöm›1iö͘ c÷ Z3e÷-Ü1gô \3eö®[3qöÐ7m÷²s÷ Z¶möMÚ cöN8cöìÜ7eô 2oöl\3iö6sö¬[8möÈ1i÷ Z8möíÐ2eöÍ›°aö.\4AöL\·qö.[±sô ˜1söL\0qô [¸e÷5Aö­0aöLZ¶qô X·cö¬6sö[ eö,Ø1oöȰaöÍ·cö Ù eö̘¸qô Y4göL7qöÍ´Aö,8k÷,Ý}÷ÈŠñO)Å©øè)Ћør`Ì[ør Òô Á AðC,6Hõ¤,6Hõ¤,h+(/Zx7 'õ ·òè49ö+hô¯ÿÿ X _‡ö©4 hö0öPˆ7+hîõÁ4;4$hôƒ€ $õ`47ôƒ€õ`47ôƒ€ $ Xö‘´7ô 7 ' hôƒ€  _‡5$h hö0öPˆ7õ`41õÁ4;ö‰4'ôƒ€ $+hôƒ€òè4=öõ`47Z5Fh/h+gîô/ÿÿ$4QPô ñµCûlS¡ø°äÁ™õ°äA¥÷èÄ‹øs(EúÐfU‹ôHO¥ô Ì§ø¨+E‡ú“é>Aør Òƒøu"ÒA÷“é ­ø°êO¥ô&I§úˆ-Ò‹úuV‹øu'Ò»÷Ï”ÝA ð7DAd/Pÿœh9øì˜ü×p ðlð/D!/LOðÜ øw¾³pCL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj Yút"Óø3Ñø4Ÿ ù•b Cûm›±o÷ X¶Aö-°iö ±mô Y´gö­Z6e÷1iöí3möŽ köM9iô7_>Añ¢†ŠyúqjGAø•çÒ‰ô Á A ,6Hõ¤,6Hõ¤,h+(/Zx7 'õ ·õ¸ õ¯ÿýô¸ õÀ€{,6õ„Dpõå´ôƒ€+gî  j*+ûlD¯ùô¢ Gø‘aÌAõ«A™ú±Q ù6B«øÑ¢ÒAør Òƒøu"ÒSô"Ì©ùðä K÷•,ЋõµÐB«øÑ¢ÒAúÑaÔŸúO%yúQæO‡ôçÒ‰øT¥ÓAú® Aðð7DAd/Pÿœhøì˜ü×p C,n Að è D!/LOðÜ øw¾³pCL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj Yø•çÒ‰ôæU‹ôm¶oöl[·söÈ köM9iô7_>Añ¢†ŠyúqjGAø“$΋ô Á Aî,6Hõ¤,6Hõ¤,h+(/Zx7 'õ ·õ¸ õ¯ÿýô¸ õÀ€{,6õ„,6põ¸ Fpõå´ôƒ€+gî  cC,ûlD™ù3¢ Gø‘aÌAõ«A™ú±Q ù6B«øÑ¢ÒAør Òƒøu"ÒSô"Ì©ùðä K÷•,ЋõµÐB«øÑ¢ÒAúÑaÔŸúO%yúQæO‡ô$΋øT¥ÓAú"Aû,?Eû¨ Aðð7DAd/Pÿœhøì˜ü×p C,n Að è D!/LOðÜ øw¾³pCL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj Yø“$΋ôæU‹ôm¶oöl[¸eöH·cöî\6sö. köM9iô7_>Añ¢†ŠyúqjGAú5gÔ‹ør) Oðh Að1,6Hõ¤,6Hõ¤,h+(/Zxô8 ,Mõ€,67 'õ ·õƒ€,6hõ¯ÿýõ¯ÿýõƒ€õ¯ÿùFp@põ¸õ¯ÿûõƒ€õ´+ D_ï}Dpõƒ€,6hõ¯ÿýõ¯ÿýõƒ€õ¯ÿùFpõ¸õ¯ÿûõƒ€õ¯ÿûDp/hô¸+gî0ñ©Ÿ—åûlQ«ùõ"ÑúHÄ‹øs(EúÐfU‹ôH!UøÑi …ú±£E¥ôäA¥ø0êE¥õ($Ï©ôfÄ‹ùˆ ĉør) Ÿúµ!ȃùȼ©û4"­¯ôªÆø´V‹øu'Ò}û¨ Aðð7DAd/P|qPøì˜ü×p `(D!/LOðÜ øw¾³pBI)ugÿ4Ð CL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj Yú5gÔ‹ør) ù•b CûmØ2köš¶Aö,Z´oö\¶e÷6cöìš5m÷-5eöŒœ´Cû¯Ÿ ñCE<§øµ# ƒø‘!Ò™øÈƒAðG,6Hõ¤,6Hõ¤,h+(/Zxô8 ,Mõ€,67 'õ ·,6põ¸ õƒ€õ´=õ¯ÿûõ¯ÿûFp _ï~ $ hòù4?òé÷±4 pô¸õ`4ô€ &5&h _ï~,6õ„õƒ€õ´=õ¯ÿûõ¯ÿûFp _ï~,6õ„õƒ€õ´=õ¯ÿûõ¯ÿûFpõ¸õ¯ÿûõƒ€,6h Dpõ¸õ¯ÿûõƒ€õ´ADp/h!ô¸+gîð ÷†ð 0 (a[ûlA‰øéLôâE‡ùˆ"­ø3*ÅEôªÆø´B«øÑ¢ÒAør Òƒøu"ÒSôäÏ©ôbD‡ùO«úäAô†ŠEô%yú–hE[úè!UøÑi ­ø°êO¥÷×P Aðð7DAd/Pÿœh=øì˜ü×ppð°3@D!/LOðÜ øw¾³pBI)ugÿ4Ð CL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj Yø1"C¥ù‘G™ú±P!·öì5kö­[ qöÍÚ¸m÷Y8Aö-Û±oö Yµgö(·e÷ ³eöŽ5eöŒœ´Cû¯Ÿ ñCE<§øµ# “ø‘fC‘úHƒAð,6Hõ¤,6Hõ¤,h+(/Zx7 'õ ·õ¸ õ¯ÿýBp/h+gî  XSMûlI‰ø³!È¥ôâE‡ùˆ"­ø3*ÅEô'ÒAør Òƒøu"ÒAøÐfS‹÷È!UøÑi ‡ùiA‡ú‘i)Aø‘fC‘úH¼©û4"­¯ôªÆø´V‹øu'Ò}û¨ Að ð7DAd/P|qPD!/LOðÜ øw¾³pCL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj Yù1"̇ùG™ú±P!·öÍÙ±iöÎ köM9iô7_>Añ¢†ŠyúqjGAù3bE™ô Á AD,6Hõ¤,6Hõ¤,h+(/Zxô8,Mõ€,6 Xõƒ€õ„7 'õ · h>öõ`4)ô¸õÀ€{öÈ+h<õƒ€õ´} _ï}7 'õ ·ö¸´/h?+h<,6p õ¸õƒ€õ´õ¯ÿ÷õ¯ÿ÷ B_ï}Fp>X+hîô¸õÀ€{öÈ+h: _ï~1B+hö€ õ`47õ¸õ¯ÿùBp@p+h<0Bõ`4[ _ï} & h@òù´&=Fh! p ô8+h"ôƒ€ (öª4Y,6pîõ¸õƒ€õ´õ¯ÿùõ¯ÿùFpõƒ€,6hAõƒ€õ´}Dp@p,6põ¸õƒ€õ´õ¯ÿùõ¯ÿùFp@p+h<ö€ õ`4aõ¸õ¯ÿùBp+h<,6p õ¸õƒ€õ´õ¯ÿùõ¯ÿùFp _ï~ö8€ö0€+h<,6p õ¸õƒ€õ´õ¯ÿùõ¯ÿùFp+h<ô¯ÿý _‡ _ï~,) ô¯ÿû _ï~õå´ƒ+gîô/ÿûð <$@ ^}ûlI›ø‘f Gø‘aÌAõ«A™ú±Q yùôC‘ø4 Ã©ø´F“ûB«øÑ¢ÒA÷“é ‡ùiA‡ú‘i ù6)AúrgÔAù'Ó[øUc ‰ø³ÔŸõ±gÌAú•,­¡ùôÐL“ùÑiÔƒúU¢ Ÿúµ!ȃùȼ¥øó'ÃAø’iЙø6_ ©÷ȱôH¼©û4"­¯ôªÆø´V‹øu'Ò}ô"!úh"!úH® Aðð7DAd/P|qP>BM:B@u<C,n Að èXD!/LO 8`øw¾³ð8Xøì˜ü×þ @$ð4O(2xBI)ugÿ4Ð CL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj Yù3bE™ôæU‹ôm·aöMZ5söȰcöm˜9möì eöMš±sö¸Aö.7köZ6köH·oömY8e÷-Z c÷,X0mö-X¶sô Z0cöì´k÷,0Aö¬š2söˆn¾}ôE ÷”âÔô"Ì[ú“ÖÅŸùˆƒA ,h+(/Zx7 'õ ·,6põ¸ õƒ€õ´ô8 ,Mõ€,6Fp+gîñWÓ+wûlD‹ù‹jO[ø³æ Gø‘aÌAõ«A™ú±Q §ú”¤Îõ()ÉŸúˆ™ôH'Õ©ør λðð7DAd/PÿœhBI)ugÿ4Ð øì˜ü×pD!/LOðÜøw¾³pCL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj Yø‘f-©ùëbÏ™ôæU‹ôm±oöM²iöl8AöHn¾}ôE ÷”âÔô$΋úu Ò­ø¨ƒA ,h+(/Zx7 'õ ·,6põ¸ õƒ€õ´ô8 ,Mõ€,6Fp+gî % 3ûlL“ùÑiÔƒúU¢ Gø‘aÌAõ«A™ú±Q §ú”¤Îõ()ÉŸúˆ«ôH'Õ©ør λðð7DAd/PÿœhBI)ugÿ4Ð øì˜ü×pD!/LOðÜøw¾³pCL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj Yù’gE§úiV‹ôæU‹ôm±oöM²iöl8AöHn¾}ôE ÷”âÔôaUøs"Á¥ô Á Að,6Hõ¤,6Hõ¤,h+(/Zx7 'õ ·õ¸ õ¯ÿýBpô8 ,M,(.õ¸ õ¯ÿýBp _‡/h ô¸ +gî  WUlûlI…ú±¡Ì‹ø4#‰ø°æ QôU Ì«ø¨B«øÑ¢ÒAøUcF‹úH!ȃúPaÔ‹úJPB«øÐæEƒúH!Uú¤Î©ô ^T³úV×AøUcF‹úH+E‡ú“é>AùõjC‘ø3® Aðð7DAd/P|qP BI@þ¡pBI)ugyS D!/LOðÜ øw¾³pCL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj Yù0ªÆ‡ù‘`ÒAøó*ÅAô6Û7gö-›¸mô Ú±mö.Y7m÷²iöNZ!»÷Ï ñ¢žS‹ú‘ÐI…ú±¨R“ùÕ'ð1,6Hõ¤,6Hõ¤,h+(/Zxô8 ,Mõ€,67 'õ ·ôƒ€ _‡ôƒ€ (õ‡ƒ·Íõ`4ô¯ÿÿ X pô8 õ‡ƒ©-õ`4ô¯ÿÿ X _‡,) ô¯ÿÿ Xõ‡ƒ¨]õ¸ õ¯ÿûõ¯ÿýõ¯ÿý,6põ¸,6põ¸Hp/hôƒ€+gî0 WUnûlI…ú±¨R“ùÕ#‰ø°æ QôU Ì«ø¨F“û!UøÑi ‡ùiA‡ú‘i)AøUcP¥ù3ª Ÿúµ!ȃùȇôH¼©û4"­¯ôªÆø´V‹øu'Ò}ô. Að7DAd/P|qPBI8^uhBM:B@þ¤HBM; uh øRN£v|h øì˜ü×pð@+D!/LOðÜ øw¾³pBI)ugÿ4Ð CL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj Yù0ªÆ¡úRgTAøó*ÅAô6Û°eö­¹eô \1sö œ¶möŒ-cö-Ú4aö¬Y köM9iô7_>Añ¢†ŠyúqjGAøðiB§ôˆHôO ñ¢žS‹ú‘ÐT©û+hO§ô Á Að9,6Hõ¤,6Hõ¤,h+(/Zxô8 ,Mõ€,6 Xõƒ€õ„ô8 õÁ{,6õˆ7 'õ ·6"_ï}+h $ D_ï} _ï| X`B _ï}.$ XòØòØòñõ¯ÿÿõ¯ÿÿõƒ€õ´3õ¯ÿ÷õ¯ÿ÷Fp _ï|0B$õ`4/ _ï~ _ï}ô _ï}/hôƒ€+gîPñ»Ñ´…ûlT©û+hO§ôâE‡ùˆ"­ø3*ÅEô¤ØAør Òƒøu"ÒAøÒl)AúrgÔAùõjC‘ø3%yúQæO‡ôàÒ…úh*>»ðð7DAd/Pÿœh3D!/LO 8 øw¾³ð8C,n A7Pøì˜ü×þ (BI)ugÿ4Ð CL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj Yú•,­¡ùôÐG™ú±P!·öì5iöî eöÎ3kö[ iöŒØ2gö™4Aö¬š2söˆn¾}ôE ÷”âÔô Ã—úhƒA,6Hõ¤,6Hõ¤,h+(/Zxô¯ÿý _‡,X÷ ´kö€ õ`4e6 _ï~õ`4c ( Xø*€õâ.X HX÷ ´k:X÷ ´k1F÷ ´k X.( HXõè€÷À/ÿý`_‡õ`4A/h<ôƒ€+gîôð ÷†4$@ñqíÁ?ûlH¡ùôÖ«øÈÄ‹øs(EúÐfU‹ôH#I±ôªÆø´"Ÿú$Ïø3 yùôA©ùóPFƒù”â¾Sô Ã—úh*T³õ´'ÓAúˆ Eû¨ Aðð7DAd/PÿœhqD!/LOðÜøw¾³p øì˜ü×p ð¸ECL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj Yù'Ó[øUc ù•b CûlÙ¶mö-Ù3mô [±söÌY6iöÍ1göí´sömÛ cöN[ [öl4m÷ Ú³oö¨2sö¬š6qöŽ5göΰsö,˜ köM°eô ›2cö­Ý}÷ÈŠñO)Å©øè#I™ø²gPAôàÐ Að ô€ ,6Hõ¤.h~öŒ´ûøõƒÿÿõÈ´ õ‡Ä+(hhõƒ€õ´ý/Zxõƒ€,6h  ,Kxõƒ€,6hïõƒ€õ´ÿ,6põ¸Dpõ€,6ô8,Mõ€,67 'õ ·,6h¬6h· 'õ ·õ¯ÿûõ¯ÿûõ¯ÿûõ¯ÿûõƒ€,6h€Fpõ¯ÿûõ¯ÿûBpõ¯ÿûõ¯ÿûBp D_ïxö±4;ôƒ€ (/hô¯ÿó H_ïz+hB _ï~,6õŒõƒ€,6hïõ€,6ô€,4Iô¯ÿ÷ D_ï|ü0ƒÿÿ+h0,6h¬6hïô¯ÿÿ DXô¯ÿý D_‡ö €!õ`4U " XBõ`4Y p ô8ô¯ÿ÷ D_ï|/hô¯ÿÿ X`÷Àüƒÿÿ+h$,6p õ¸6 _ï|õ`4gô¯ÿõ _ï{õ`4i p ô8õ€,6D\oô¯ÿó D_ïzö‰4ƒô¯ÿý _‡ô¯ÿ÷ _ï|õ‡ƒ©! _ïzòè41@ ô„ô ô¯ÿý _‡ô  õ‡ƒ¨Ûô¯ÿý _‡õ‡ƒ¨]+h/h6B_ïy+hFô¯ÿÿ X pîô8õ‡ƒ©-+h|õ¯ÿõõ¯ÿõBevô¯ÿó D_ïz hö0õ`4à _ïwZ3d+hPõ¸õ€Z/.$2õ€,6Dp _ïw ô„ô/ÿ÷ F_ï|,6õ€õ¯ÿóõ¯ÿóõ¯ÿïõ¯ÿïðƒãù D_ïyû@/ÿ÷/ ô¯ÿ÷XôôÉ._ï|ö‘´·`÷¹´µ _ïw Hôõ¯ÿõõ¯ÿõBbô¯ÿÿ X pô8õ‡ƒ©-+h|õ¸õ¯ÿíBp5Dheõ¸õ¯ÿíBp7 'õ · _ïw ô„Z,6õ€õ¯ÿóõ¯ÿóõƒ€,6ô/ÿñ F_ïy H_ïvðƒãùû@/ÿ÷/ ô¯ÿ÷Xô¯ÿó D_ïzôôÉ._ï|4Fhs`=fhr _ïw Hô _ïy3f_ïz+hxõ¯ÿõõ¯ÿõBbõ`4óõ¸õ€õ`4Éô¯ÿÿ X pô8õ‡ƒ©- _ïwõå´ô¸+gîÿÿÿÿÿ$4ô  H hûlF“ù‘dΡôâE‡ùˆ"­ø3*ÅEôªÆø´B«øÑ¢ÒAôSèT“ùó ÌEôäA¥ø0êE¥õ(!Uù°eÅAøUcP¥ù3ª øµ)Ô¥ôªÆ™ø³£Ô‘ôªÆúSë EøÚve[ýØvåuôO«úäAô"¥ø°b"AôQ)ËuôH[ý;2­“ýÜ:ôAø8·òéü¹.¢Aô¯*Y¡ø«k …ú±£E¥ô¢Ã©ùôŸ Eûq'΋û¨® Að7DAd/P|qP~øc¹ì×ÿˆð½xø¯pÎÑ|?HVîPCH9/ÿ—°BM; þ¤´‹ |BI8^uhAøRXÆÍþ£lEel:ðHwBMZ1pu:C$U@{Mp6BO#BvI"D!/LO 80føw¾³ð8!ð”ËBI)ugyS ø—)ŒIÿ/Àøì˜ü×þ  ðX+ðØ?î(CL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj YøÒfE“ùÔG™ú±P!·ölÛ6cöm™¶Aö,˜5sö,Zµoô Z¸cö. iöm™1iö-œ·AöLZ7kö,6a÷(²köìÙ·mô X7g÷ ³mö4s÷-™µeô ¶köLÛ·söH c÷ š³möMš8eô Ø6aö-š1s÷ 4gö¬4göM0i÷-[ aô Y4gö 2möLZ¶Cû¯Ÿ ñCE<§øµ# ¡ø1"S©úRgGAôàÐ Að,6Hõ¤,6Hõ¤,h+(/Zx7 'õ ·õ¸ õ¯ÿýõ¯ÿýõ¯ÿýDpõ¯ÿÿõ¯ÿÿBp@p _‡/h ô¸ +gî îY8ûlPƒø‘)Ô¥ù3£ Gø‘aÌAõ«A™ú±Q …ú±£E¥ôªÆø´S©úRgGSôbD§ú”¤ÎôäÏ©ôâÔ[øt'ÓAô¯*Y¡ø«k …ú±£E¥ô¢Ã©ùôŸ]Að ð7DAd/P|qP D!/LOðÜ øw¾³pCL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj YúbD§ú”¤ÎôæU‹ôm¶oöl¹söˆµcöÌ\²oöÎ5eöŒœ´Cû¯Ÿ ñCE<§øµ# ƒø‘)Ô¥ù3£ Oðh Aðyô .h8[Wï}Q"õ€,6 ,Kx7 'õ ·öè(+hõå´qõ`4môƒ€ $ô¤Z BPô( Pô( 0ô NPô( h90@+h(öK4sõ`4/ 0ô BPô( h:öõ`4/ö‰4/ûA€öYõ`4/ pô8 BPô(õ`43û@€ô€ DPô¨öJ(õ`4?,6Hõ¤ô¨ô8 õÁ{öxˆôˆõƒ€õ€Dp,6Põ¨õƒ€õ´u,6Põ¨ô¤,6õ„ ",4Iô¨,:Sô¤ Bô +h0 h9öõ`4Yõ¸õ€õ€,6Dp+h0,6põ¸õ€,6,6p õ¸ðƒÕçöÈ(+h2 "õ`4eô€ô(õ€Q". P DPô¨+hô$ô¸+(0ô‡pô )FûlA‰ø”êR“ùÑÐ#‰ø°æ QôU Ì«ø¨B«øÑ¢ÒAøUcF‹úHT«ú"¢A÷•*Йø¨-Ò‹úu<ŸúH)Ô¥ù3£ ‡ùiA‡ú‘i ù6]}õ(!Uøô§×Aø1"C‘úH* K÷”£ÌŸøh!UúrmEAú%yú–hE[úè!UøÑi ­ø°êO¥÷È ÒõµéOøëjY¡ø¨VÅ¥úSéSAø1"S©úRgG»ð7CL$pe8ø_ï8Çz^80BI4j3w*0&BO#BvI%C,n A7Pøì˜ü×þðÄ=D!/LO 8øw¾³ð8 ø—)ŒIy?DtmO ÿÿè÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj Yø1"S©úRgGAøó*ÅAô6Ú2söŽ[²möì2qömš9Aö­1eölY¶iô Ù2cöíX7qöˆ³g÷-±Aõ¬[1oöLY2cö,2aöŒ°söš¶Cû¯Ÿ ñCE<§øµ# ƒø‘ÏøÔâÔ[úu)IøèƒAðc,6Hõ¤,6Hõ¤,6Hõ¤,h+(/Zx _ï~Zõƒ€,6ûA/ÿûõƒ€,6ûA/ÿûõƒ€,67 'õ · _‡&"$X._‡ B_‡/_ï~ô8 õÁ{õÀˆ B_ï~ö˜´%õ¸ õ¯ÿõõƒ€õ€Dpõ¯ÿ÷õ¯ÿ÷7 'õ ·û@/ÿõö°4-/h.+h,ô¯ÿõ _ï{ pô8õ‡ƒ¼?õ‡ƒÙûô¯ÿÿ DXòè4]ö0+h)3D_ï{õ`4?õ¸ õ¯ÿóõ¯ÿõõ¯ÿõDpõ¸ õ¯ÿóõ¯ÿóõ¯ÿóû@¯ÿñûA/ÿû/."õƒ€õ€Fpô¯ÿÿ X/"``ô¯ÿõ D_ï{õ`4'õ¸ õ¯ÿóõ¯ÿóõ¯ÿóDpõ`4+ _ï{/h/ô¸ +gîô` )*hûlA‰ø‹gÆúqj-§ú”¤ÎôâE‡ùˆ"­ø3*ÅEôªÆø´B«øÑ¢ÒAúu)Iøè)Ô¥ù3£©AøUcG¥ùõÐA‰ø”êR“ùÑÐ%yúQæO‡ôªÆ§ù6¢ ©÷ȼ©û4"­¯ôªÆø´V‹øu'Ò}ô†ŠEû¨ Aðð7DAd/P|qP.ø¯‰ÈMÿgì3BI+2wCxC,n Að èD!/LOðÜHøw¾³p @øì˜ü×px $CL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj Yø1"-ŸøÑ©Å©õ´êR“ùÑÐG™ú±P!·öŒ\´gö 1söì¶Aõ¬Ú3köŒ˜·s÷ Ð4oöÍZ5aöM qö®X0i÷-5Aõ¬[±o÷.9c÷ 7qöÍ0Cû¯Ÿ ñCE<§øµ# ƒø‘#I™ø¨ƒAVô€ ,6Hõ¤.hOöŒ´ûøõƒÿÿõÈ´ ,+(hhõƒ€õ´Ÿ/Zx _ï~,6õ„ûA/ÿÿõƒ€,6,6 õ¯ÿùBevõ€,6 _ï|õƒ€õ„!7 'õ · hPöõ`4iõƒ€õ´¡õƒ€õ´¡ " ôÁÿ,Y hQQ$`õéõ€,67 'õ ·õ¯ÿÿõ¯ÿÿ,6 õ¯ÿíõƒ€õ´£[,>,6,6ðãù hRõ—€1@0D+h!ôƒ€ $ô¯ÿû D_ï~0$2õ`4c,6 õ¯ÿïBa&7 'õ · _ï}0b2+h+õ¯ÿÿõ¯ÿÿ,6 õ¯ÿíõƒ€õ€ðƒãù+h//"2õ¯ÿÿõ¯ÿÿ,6 õ¯ÿí B_ï{ðãùõ`4I _ï~._‡ô€õå´¥õ`4g._‡ô¯ÿý D_‡+hô/ÿý B_‡7"_ï|õ`4m3b_‡õ`4o _‡ D_ï| _ï|3b_ï~õ`4{õ¸ õ¯ÿóõƒ€õ€Dp ôˆô¯ÿù F_ï}õ¯ÿùõ¯ÿù,6 õ¯ÿóõƒ€õ¯ÿó[,>,6,6ðãù hRõ—€1@0Dõ`4ôƒ€ $û@/ÿù/ ô¯ÿùXôôÉ._ï}ö‘´—`÷¹´• _ïz Hôô/hSô¸ +gîÿÿÿÿÿô/ÿý022ô0p (sûlA‰ø‘¤Ì‹ôâE‡ùˆ"­ø3*ÅEôªÆø´B«øÑ¢ÒAør Îø³"Ÿú$Ïø3 ù6 …ú±£ÒŸú輩û4"­¯ôªÆø´V‹øu'Ò}û¨ Að+ð7DAd/P|qPOCz[ÿ…0Iø¯pÎÑÿä;ðT]0E3Zxÿgø)øuâZ]xxD!/LOðÜðÀKøw¾³px%CH9/|^` øì˜ü×þ  ðp#ð”3ðÔ9ðGðDSðha(?B`CL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj Yø1"F“ù‘PG™ú±P!·ölÛ6cöm™²AöMÙ iölX·iöX³Aö-œ4eöíœ cöÍÛ·iöì2m÷-Ú7eö 1oöL²möL0AöM™±m÷±gö,³mô 7qöÍ6Aö¬š3aön¾}ôE ÷”âÔôiÄ“út&A³÷èƒA ,h+(/Zx7 'õ ·ô¸õÀ€{ôôˆø(€0Bõ`4 pô8 õ`4ôƒ€ $+gî adw1ûlI§ø’iЙø6_ Gø‘aÌAõ«A™ú±Q yùôA©ùóPFƒù”â¾Sô ^Rù“á “ùÐäAô ©û¨ Aðð7DAd/P|qP øì˜ü×pC,n Að èD!/LOðÜøw¾³pCL$pe÷ÈŠñO Ήô Ó§ù1çE‰÷è#Ì«ø¯.ù•b yúj Yù4âI§ú ÙôæU‹ôm±oöLØ2a÷²AöHn¾}ôE ÷”âÔAør)TƒøS" ·ô7 YøUcT‹øsÐ!¹òˆB«øÕ"ßônAõ‘¤Ì‹ù3¨ CûŸÐ,“ø‘fC‘úHA§ørd cöo,ƒø‘!Ò™øÈA§ørd cöO,“øUcP¥ù3ª Cû,“øUcP¥ù3ª Cû„,«ùÒäÌ™ônAõ”jÏ©ø°äRAô7  yøÕgC©ù3ç QøUc ‡ù” yúQjU¥ùÈB«øÈG‹ú”êRƒøu>Aô7 + Yø“$΋ônAõ‘+Ï¥øˆÜ1ô "L“ùÑP<ƒúpäÉAö,“øUcC™ø°i]}ôE ÷”âÔôªÆ›ø2â Oðh A$ô€ ,6Hõ¤õÄ´=öŒ´ûøõƒÿÿ."hõ‡Ä+(ð4ð4ð4 ,6põ¸,6põ¸/Zx _ï~õ€."ôÈ€ôÁÿ,Yïõ—€Q"Q$`õéõ€,67 'õ ·õ¯ÿÿõ¯ÿÿõ¯ÿýõ¯ÿýõ¯ÿ÷õ¯ÿ÷õ¯ÿ÷õ¯ÿ÷õƒ€,6hõƒ€,6h "ôÁÿ,Yïô´?Q$`õé/" .$õ€,6õƒ€,6h ",Bõå´Aô¸ +gî0 @ð ðð ñN !ûlB«øÓ`Ë‹ôâE‡ùˆ"­ø3*ÅEôªÆø´F“ûO¡ú’g΃ùˆS©úRgGAúu)IøêP"Eô ^T³úV×AøUcF‹úH+E‡ú“é>»îð7DAd/Pÿœh=BIAñ¢†Šyú¤Î©ú–hEAøUcF‹úHB«øÑ¢Ò[ú¤Î©÷ÈŠñO"Ήúa˃øñ_  \ No newline at end of file diff --git a/bin/mbprog/bufcrf.nbin b/bin/mbprog/bufcrf.nbin new file mode 100644 index 0000000000000000000000000000000000000000..98c01d33d3431c78e0dd39f6f4743895ee142f6d GIT binary patch literal 2565 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 eO+VTd>-RMn>A%-j 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≻Z>!G8*f5LLAn_jiQkw%Al4wc{T)*qh?q_PyRdGjt4r!_%kz5m z94N31=)M?bTZVQp&c_}XhRCGw&^^hN(KCT-E?JQz0(vB zi=c}rEBXgU<=fJ--*}7wMfwd(<&aP{|Xa=rPg!%RH@}<#@ry1)5Z3(Pf?2*?v+2REuNE zN&~?I&pM*1>#;tQ zOy`%l&qdsWnP}j}c|*A6?7+n4AU*zi7)oa!%oW)C)F!giEfxG{Ch_)KIzM%-p<5-X f3q6M)ea8_^S%3d)7iq+2UB7+nT>pcUxL*GUswhh4 literal 0 HcmV?d00001 diff --git a/bin/mbprog/consol.nbin b/bin/mbprog/consol.nbin new file mode 100644 index 0000000000000000000000000000000000000000..3311f24ca4ab9bb108e7478b462818198dbc9f75 GIT binary patch literal 862 zcmaKqUr19?9LImxtLC3p*UTnO^lS=Q7D`UaTw~X}i!;{l$UhHCu;`%`LXL`BVFZH~ zhGY@Z9?Uru85A0<2JY!0{qQ- z7wv_%mdfT6%a98kfB>)z1)GXvig(d>InjOqlh;|;%j%8At@jDi2)Q~xC*qLpeGC^> zcD>N2e<~Ar-?w;}>>dA6KTjP>fNq%uLS`;o|oqLGn{R;nscs{p*Qaridv z*q%m3I7`FDXb6l3RUA`1Q#m?Sd2Av@M~eaNr1HPTj9-nNUIKO}tW0qQfgqHbyeFOi zFzs!isgV$6TJ4r4FD|0gI@=YWNU1qSiKkkOb;!uk)h$b%3h^9yEjs*X+E0@wL0Kd# zi|&E-sZkWp;4Q?sWc=$umh<;?ay!lpv57r4Id3clz)T(Gd~Lqx?3Hd0EN$8?>{W*S ei`{D2wVC`uiz>;E`#!f{lrsJ2(*ua7TYmtzpCFF_ literal 0 HcmV?d00001 diff --git a/bin/mbprog/corblk.nbin b/bin/mbprog/corblk.nbin new file mode 100644 index 0000000000000000000000000000000000000000..63cfd10775cc6ae31d64963f235ce493540839d6 GIT binary patch literal 720 zcmY+C&ubGw6vy8t-EP((#8ROskug~zZB$|tTLdY)=Eu6QHi^+3EMlaWfPqx>()J?c zP(_54Tw1hdEj_g6(B@wdRFFzV1Wz6-JxEPpQ)V}&I5Q~{=kR6U%$x6<&wJZkeVuu3 zFMf$u?R56tveno%1R%@Z9EyND2zhXtfhWM3oCJIz2EYfQe_l7aQh`GwB(b$ndUctm zoL~nsy^Mc<3I-b>0Y}A2g{LA=5#=0!=X+-hfKdXzsXM%fGv7dD@0dWx_M6G!_ZuooDJrf_Yb*FEXD~a#bdf$B z>;Z@-tdXy!(wz7F8R1kuBITivb*bAM+6=jm7_zWw6yIi;I~8s!M67W$`=K%!L;e`v z`iau!ZDYHJ*UML{_I1BjM+rsG;LWnHYM+#LRutWb64uz@j~=ST_`tR4;@Lbnm~)&T z9Z?S-$iTC(mstk*pDKPq)v|c~h)QHs;n6$@l*-Ad=&-qiXU;hL**F1>M|BinpmBnuk!cc8Uov$|OHL}fNx6sb pB7_>`uA54jF?RMIcPG~c#c%GM+j$fkf__>97-;c|d^Al0`WNon-z)$C literal 0 HcmV?d00001 diff --git a/bin/mbprog/count.nbin b/bin/mbprog/count.nbin new file mode 100644 index 0000000000000000000000000000000000000000..6104aa510156445212798e73d07972de2b8f5105 GIT binary patch literal 419 zcmeykXkKvluZb6&=l|NgN_YLwFN=a5KV%3fIDTMYU{L+SxP*cE3&RoyMl~e{2Ij9P z8W^~LSuij#em&U0!1!(D76$n*OhAc14HicS6PFAIHgTXfCfk$@239cZ+XNE^NrMCi z1~zSm3mHt zFBN)!nhCfy|D5t@pW}~9ISQ4(wk|rn^5>Tc(Mx}9c?FWy150S`2ARkL3Jv2QZ)W_t zp6kHCAi%&Fz`)=vNmaslk9J2Z|%(g O#v84;`}_F`yrKY8ACW`= literal 0 HcmV?d00001 diff --git a/bin/mbprog/cpyfil.fbin b/bin/mbprog/cpyfil.fbin new file mode 100644 index 00000000..26a04708 --- /dev/null +++ b/bin/mbprog/cpyfil.fbin @@ -0,0 +1,17 @@ +' + + + + +> + + COPY-FILE #DECL ("VALUE" +ATOM "OPTIONAL" UVECTOR) % "READB" CANT-OPEN!-ERRORS ARG-WRONG-TYPE!-ERRORS "PRINTB" +CANT-READ-LENGTH!-ERRORS T]>> + .GLUE > + + .GLUE > + + diff --git a/bin/mbprog/critic.nbin b/bin/mbprog/critic.nbin new file mode 100644 index 0000000000000000000000000000000000000000..eef567de6409789bc3ebf29a4ba62cfe3eb39c65 GIT binary patch literal 75655 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

q|TivF`$` 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 W3;MTN^YKY$>Co@pS%{##>Hh*R4OI^S literal 0 HcmV?d00001 diff --git a/bin/mbprog/transl.nbin b/bin/mbprog/transl.nbin new file mode 100644 index 0000000000000000000000000000000000000000..a4f1742fc29682b122b96e1bfcb8709bf8fd6a1d GIT binary patch literal 4406 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 literal 0 HcmV?d00001 diff --git a/bin/mbprog/uv-s.nbin b/bin/mbprog/uv-s.nbin new file mode 100644 index 0000000000000000000000000000000000000000..119393aa65222b36d87a5b42d667fde27781edb9 GIT binary patch literal 948 zcmZ9Ke@IhN6vxkVZgaBbRut7jA1XTMkIF6Uk5R2TTqJJJxk3@9g}yAv2%*4*G-#km zi3Rybm_v~vf|2__lYt?`v}Jz<)<2oW*z7%h?=7Qy?^6@+AD4UXIrrT2`JR&sJ??uT zYFifqe9DzSDK6X$`B|A=b9i&G!!w>X80rGTYj1pni`=pY#i1Ycg!pXi!xJu2JT)mU zw#G+9hjF=|?=D_y7KfHUhDCQr4NhR0;3EaEMuk{=6gxgm@zZP0aTa2<70}Y8SH^&1 zeZ4?&tGyuOf`Q>YS_9~gLJn?r26E06F`%HcjsnmQ13-m_fh=P?1DUK5#gV&GP&~Yl z1U1N#kO@>mb;YH}>B*wfx3#X9ys2#}Ed1=0inOwK^XG=yY@IhCJZ}qG#Yku_EU-_l zVd1yui#3TJD)Dxj@BY@*a!+?3GDt4l!CHOcmcT;}F*oNGefpHMBpT*dOXA~~>uSn9 z&hkdD-R5z+=_I3-DAi3F4ghw(7v!g^(L)ZMC<#@85H<#9K-ZLoLyV8CbL%UGK&_+S zr$J!1>Ies!%YXDFsB%y+;YQ@sTdu_=r3enXViprQr>eH;`6H+Dl~>RNHN} zv?1Tin~YIAjjP?$(6cUjKmOkvJs>AZ3I3gqEgTYo z_&2#UR=-~S`MmWOO&Pue-rYP~|Cd>TW5nE*IYG?xbao + + + + + VCTBNS #DECL ("VALUE" VECTOR + > "OPTIONAL" FIX FIX)]>> + .GLUE > + + .GLUE > + + VCTINS #DECL ("VALUE" VECTOR +VECTOR FIX ANY "TUPLE" ANY) OUT-OF-BOUNDS!-ERRORS]>> + .GLUE > + + .GLUE > + +> + + < +OR VECTOR UVECTOR> FIX "OPTIONAL" FIX)] 79>> + + BLT-THRU-UV #DECL ( +"VALUE" UVECTOR UVECTOR)]>> + .GLUE > + + .GLUE > + + diff --git a/bin/mprog/assem.nbin b/bin/mprog/assem.nbin new file mode 100644 index 0000000000000000000000000000000000000000..9675f3dac29ef96e55e4b9cabafedd96d6d1c2d1 GIT binary patch literal 58201 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 H?_2){L{|h# literal 0 HcmV?d00001 diff --git a/bin/mprog1/demcls.nbin b/bin/mprog1/demcls.nbin new file mode 100644 index 0000000000000000000000000000000000000000..e8c7625eb5302dbf4fe79e91b51ffe9c77312123 GIT binary patch literal 1647 zcmb7EZA@EL7=CX{*D``@`EWzRc2~AwSxNZl(71+hDR)3*6nhJr)S0r$mriV!?8l78 zCQW3nAut7%Ic$TFN^~&>5|{WxmyC!ROu|UiEX0JEU>1Wk-V68M(&Bkfg(5K~J3mg| zuk+q}p65Albo8C8msMli-GCfzHoq%Rw#`OF=Rjs|bo3K`L>>Gh98t{LD4X=I8NJd3@$JBi#fl2KO$Eoi&^~|0GzN^)&od=W5C3`en>B?(f3OIQ&3n+ zjWN)s3ZTXZTIoYSFcJi|whZ1b$dbG^$hNkUPIO~6K1dUpry*VPYTu4vjFE=O32UVf zbW-0f$dLM|OA;8{hp|l2;3u7X12;mcEXEk?Vf_<65duCF?MFTXP>q{%{Oe~r(O_iU zR-Lc6Q5QqxDi@5x`|@Am*(6e;VVUn$uH=|+$`!@aym+8!fs;=b&2jR4hY;MDu`G@& z6`zKAMJ#RzDf1m>PF}cR;nYhOcPM5kW_k5`d3Y{ z%71*c`BM)uP1L3QW!eSaUB|k3P7a>qKXx{i2yXdg@qKQs%gAzAm+jFI>O|%kFzclR ztJl)f0G`4Ol9IlMx9A}o6r6xASe5z$K8E5P^8$gL93U=oxfAI}8m^I@+o3^@|9E;vOrT-QabRkEsAXi&b%b&r^QRT9Q zwY(!m6l-_7SbHn)a4X_~r<*<9@WR=RnL=(@;Hzj(aI3D)I%KO#5OW^7CX{t!VV_)K zndT(JX#0bBY@p}Y#1-2rmmmzTY}wWJ2Vz0#@-Lg84K8uWRtEk|9wi|D9Y8L!WdQI3 z)HK+gFDH6#K^~UC4xt6WGy|kKl7Bxs8DA_nCe)fXFAJJ$sEoyI)I8q4H+_$h71&`-%n;l{}|{nreA+=3eq>r{lILH ze!5i2|6-cGNB20dbk>)M{?O8@M8H~n3r7&=#~u-9(gnwjE;`wj`zPLyE;??4?rkL} zpD8N2QQU884JbqBMmbdS4z_$19YMRWMSw-q*w6nSJpYOF5n#N#a83@Cq#XC#`KH=t O&Y}3uPrt=#N!j0VWIj~@ literal 0 HcmV?d00001 diff --git a/bin/mprog2/histor.nbin b/bin/mprog2/histor.nbin new file mode 100644 index 0000000000000000000000000000000000000000..a68322a80fab1fdc3b02d9b6fb7bdb2856d5add4 GIT binary patch literal 31892 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 literal 0 HcmV?d00001 diff --git a/bin/mudbug/cursor.fbin b/bin/mudbug/cursor.fbin new file mode 100644 index 00000000..675876e2 --- /dev/null +++ b/bin/mudbug/cursor.fbin @@ -0,0 +1,59 @@ +' + + + + + CURPRIN #DECL ("VALUE" CURSOR) ERR INTREAD SAMP INDENT-TO % % OUTCHAN "(???)" "| " "ILLEGAL CURSOR" #FALSE () CURSOR T () LIST +" " + "GO" INCHAN +"!\"#$%&'(*+,-./0123456789:;<=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\^_`abcdefghijklmnopqrstuvwxyz{|}" + SEARCH+ GOTO GETPATH "ERROR, ARG TO GO NOT CURSOR" "PC" "PA" TOP-ITEM "CU" +"ERROR, ARG TO CU NOT ATOM" NULL CURS "KC" "CURRENTLY UNIMPLEMENTED COMMAND"]>> + .GLUE > + + + + + + LOCATIVE +FIX FIX)] 92>> + + +LOCATIVE FIX FIX)] 185>> + +)] 270>> + + "OPTIONAL" ANY)] 407>> + +> + + CHANNEL)] 650>> + +> + + .GLUE > + +> '["GO" +"PC" "PA" "CU" "KC"]>> + + ) +()> + + diff --git a/bin/mudbug/cursor.nbin b/bin/mudbug/cursor.nbin new file mode 100644 index 0000000000000000000000000000000000000000..a7d342ea0452a69b0425456b6e5cb71e204001dc GIT binary patch literal 9255 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 N|3{B>y^c@R{4Y$2r`Z4i literal 0 HcmV?d00001 diff --git a/bin/mudbug/debugr.fbin b/bin/mudbug/debugr.fbin new file mode 100644 index 0000000000000000000000000000000000000000..724386609ddb2a453b8354daef268dcab72e93a1 GIT binary patch literal 4033 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 H^@jfkvgDIy literal 0 HcmV?d00001 diff --git a/bin/mudbug/dfl.fbin b/bin/mudbug/dfl.fbin new file mode 100644 index 00000000..d2096015 --- /dev/null +++ b/bin/mudbug/dfl.fbin @@ -0,0 +1,79 @@ +' + + + +"Fast FLOADer for people who use TECO to debug MUDDLE" + + + +"Package containing UNLINK, UNPURIFY, PURE?" + + + +"Contains READST" + + READST #DECL ("VALUE" FIX STRING +CHANNEL) EPRIN1 UNLINK ENDPACKAGE % % %< +RGLOC DFL-FILNAM T> [" +% "" "READ" % % %< +RGLOC TDFL-BUF T> "PACKA" ";'" " DFL OBLIST NM1 (STRING) NM2 SNM DEV "Not DFLed?" "DSK" + FN1 FN2 ">" "Would destroy later version!" "PRINT" "_DFL >" OUTCHAN (CHANNEL) ( +ANY) DEFINE SETG T %]>> + .GLUE > + + + + + + + + + + + + +> + + !\ >> 50>> + +> 40>> + +> 9>> + + ( +DFL-FUNC-NAM) (DFL-STRUC) ]> +> + + +> "OPTIONAL" ANY)] 81>> + +> "OPTIONAL" ANY )] 125>> + + + + + + + + + + + + + + + + + +> + + >]>> + +> > "OPTIONAL" > )] 1093>> + + diff --git a/bin/mudbug/dfl.nbin b/bin/mudbug/dfl.nbin new file mode 100644 index 0000000000000000000000000000000000000000..2d9270684381f41b863755099226de5a3d80874c GIT binary patch literal 17323 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 literal 0 HcmV?d00001 diff --git a/bin/mudbug/edit.fbin b/bin/mudbug/edit.fbin new file mode 100644 index 00000000..6230cb70 --- /dev/null +++ b/bin/mudbug/edit.fbin @@ -0,0 +1,145 @@ +' + + + + + + + + + +> + + > EDIT?.DOC"> EDIT??.DOC">) ( "> "> +)> + +> + + + + + + + + EDIT #DECL ("VALUE" ANY "OPTIONAL" +ANY) L-UNUSE &1 CUP* CUP^ GETKSTAR CUP+ CUP- EPRINT USE INDENT-TO FORMS SCANNER +ATTACH FRM JUNK (ANY) INCHAN % (CHANNEL) EDIT-ITEM () TOP-ITEM % % GO-UP-LEVEL (FIX) +GO-UP-RIGHT HANDLE (LIST) HANDLE2 SEARCH+ SEARCH- LAST-SEARCH FINISH PATH POS +LOC-LOSER () GETPATH () SPATH P-ON MAC SPOS ITER +ITCOM CURCHAN PATHLOC GOTO (CURSOR) LAST-FRAME (FRAME) SAVOBL CFHAND "CHAR" %< +RGLOC CTRL-F-HANDLER T> % NEW-ITEM LAST-PATH LIST OBLIST % PACKAGE #FALSE ("NO-VALUE") T [TOPLEVEL CALLER LISTEN ERROR MAPF MAPR] +EVAL APPLY LVAL GVAL DEFINE CURSOR CURSORS? TOP-LEVEL "ERROR, ILLEGAL CURSOR" +"ITERATION ENDED, SEARCH FAILED" "ERROR, SEARCH FAILED" OUTCHAN +" +ATTEMPT TO EDIT ILLEGAL ITEM +" % TOPLEVEL #FALSE ("NO FORMS") SHORT-PRINT BREAKA "<&>" %< +RGLOC E-OVERPRINT T> "B|" "||" BREAKR "M|[" "|M[" % % LAST-OUT " +ILLEGAL NUMBER " % THIS-LEVEL (ACTIVATION) EDIT-TABLE % "UC" "CURSOR" "UM" "EMONIT" "MONITOR" "R " +"ERROR, ARG TO R OUT OF RANGE" "SW" "ERROR, CAN'T SWAP AT RIGHT EDGE" "L " +"ERROR, ARG TO L OUT OF RANGE" "IT" "DO" "M " "ERROR, MACRO NOT A STRING" "SU" +"S " "LC " "QR" "U " "UL" "D " "DR" "ERROR, CAN'T GO DOWN" "F " "B " "UT" +"V " % " " "PU" "PT" % % "P " + "CAN'T PRINT, AT RIGHT EDGE" "SR" "SL" "UR" "DL" "K " +"ERROR, ARG OUT OF RANGE TO K" "I " "G " "IG" DEFMAC SETG SET +"WARNING, ATOM HAS NO VALUE" "WARNING, ARG TO IG NOT AN ATOM" "C " +"ERROR, CAN'T CHANGE, AT RIGHT EDGE" LAST-IN "C:" +"ERROR, CAN'T CHANGE TYPE, AT RIGHT EDGE" "ERROR, BAD ARG TO C:" +"ERROR, ARG TO C: NOT TYPE NAME" "K*" "ERROR, CAN'T EXTRACT AT RIGHT EDGE" * +"ERROR, NON-STRUCTURED ARG TO EXTRACT" "" "K:" "ERROR, BAD K:" "I:" +"ERROR, BAD ARG TO I:" "ERROR, ARG TO I: NOT TYPE NAME" +"ERROR, TYPEPRIM OF ARG TO I: NOT LIST" "I*" "ERROR, CAN'T IMBED AT RIGHT EDGE" +"ERROR, ARGUMENT TO IMBED NOT STRUCTURED" "WARNING, IMBED NOT COMPLETED. " +" OBJECTS INSERTED." "WARNING, NO IMBED INDICATOR" "BK" "BA" +"ERROR, CAN'T PUT BREAK AT RIGHT EDGE" % % + BREAKS "KT" "ERROR, CAN'T KT, CURSOR AT RIGHT EDGE" +"ERROR, OBJECT NOT A BREAKPOINT" "KB" "O " "OT" "ERROR, CAN'T OPEN" "X " +"ERROR, CAN'T X, CURSOR AT RIGHT EDGE" "ERROR, ARGUMENT TO X NOT ATOM" "Q " "? " + "??" "READ" % % "Help file not found: " +" +ERROR, UNRECOGNIZED COMMAND " QUICK-RUN % "**BREAK**" VALUE +"**BREAK-AFTER**" "= " "(" "<" "!<" " (" " XMZ " " | " " " "&.." "(&)" "[&]" +"![&!]" "\"&\"" "!<&!>" "#" ">" "!>" ")" IEDIT DEADIT EDIT FREDIT ZNZN | +E-OVERPRINT E-VERBOSE E-?FILE E-??FILE EXPFLOAD BREAK "EDIT" "It's a Foo--" +KSTAR " +ERROR, EXTRACT INDICATOR UNMATCHED." " +ERROR, TYPES DIFFER IN EXTRACT" +" +ERROR, EXTRACT TEMPLATE LONGER THAN EXTRACT ITEM" " - ITERATION ENDED AFTER " +" PASSES: " " - MACRO FLUSHED: " " <--<-- " " <-- " % % " +ERROR, TOO FEW ARGUMENTS TO " MACCHAN "INT:EDIT;MACRO CHAN" % %< +RGLOC MACCHAN T>]>> + .GLUE > + + +> + +> + + + + + +> + + + +> + + + +> + +> + + + + + + + + + +> + +> + + "QUOTE" +ANY "OPTIONAL" "QUOTE" ANY "ARGS" LIST)] 4826>> + +> + +> + + +STRUCTURED ATOM STRUCTURED)] 5584>> + +> + +> + +> + +> + +> + + + + diff --git a/bin/mudbug/edit.nbin b/bin/mudbug/edit.nbin new file mode 100644 index 0000000000000000000000000000000000000000..50382403c2c478959400e4907967348d8484f155 GIT binary patch literal 53833 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%0DYoeOapsbrFlC$;{V$7 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 Z$8lpcg?(N8c)|3w@udr1e=Pis{{Ury5(@wT literal 0 HcmV?d00001 diff --git a/bin/mudbug/findat.fbin b/bin/mudbug/findat.fbin new file mode 100644 index 00000000..c335e1ee --- /dev/null +++ b/bin/mudbug/findat.fbin @@ -0,0 +1,21 @@ +' + + + + + +> + +> + +> + + FINDATOM #DECL ("VALUE" ANY < +OR ATOM STRING> "OPTIONAL" "TUPLE" TUPLE) T OBLIST +OUTCHAN LINK ANY OR % % % +"(Found " ")" % SPECV % A % "" % () " Link to " " " "Gassigned " "Assigned "]>> + .GLUE > + + + diff --git a/bin/mudbug/findat.nbin b/bin/mudbug/findat.nbin new file mode 100644 index 0000000000000000000000000000000000000000..03ffcb018ec44ef4114b0a9125f229829a864596 GIT binary patch literal 13451 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 + + + + + + + + FR& #DECL ("VALUE" +"OPTIONAL" FIX FIX ) BYTE-SIZE INDENT-TO FRM OUTCHAN +"FUNCT---ARGS" TOPLEVEL EVAL " " "Atom is not bound anywhere." +"Bound further down to: " "Toplevel binding: " "Frame----Value" +"----bound, but not assigned a value---- +" % "#ASOC" "#RSUBR[&]" "#CODE![&!]" % % T OPENBRAK CLOSEBRAK " &.." ATOM FIX FLOAT "?" +"READ/EVAL/AMPERSAND PRINT LOOP +" LAST-OUT (ANY)]>> + .GLUE > + + +> + + ANY LOCD +ANY)] 317>> + + 12>> + + 12>> + + (CLOBOT) VECTOR> + +> + +> + +> + + ANY +VECTOR ANY CHANNEL)] 795>> + + ANY +ANY FIX FIX CHANNEL)] 918>> + + ANY +CHANNEL)] 1029>> + + +ATOM ANY CHANNEL)] 1059>> + + "> < +PUTPROP CLOSEBRAK VECTOR "]"> < +PUTPROP OPENBRAK TUPLE "["> "> < +PUTPROP CLOSEBRAK TEMPLATE "}"> > + + ANY)] 1193>> + +> + + diff --git a/bin/mudbug/fr&.nbin b/bin/mudbug/fr&.nbin new file mode 100644 index 0000000000000000000000000000000000000000..baae17c0a56ddae21c2760f4efb1dc502b0d5325 GIT binary patch literal 12853 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 + + + + + FRAMESP #DECL ("VALUE" "OPTIONAL" FIX FIX) FRLVAL FRM FRATM FR& FRAMES +LERR\ !-INTERRUPTS (FRAME) FRACT TYPE OUTCHAN % % % % +"FUNCT---ARGS" "ILLEGAL FRAME" TOPLEVEL (ACTIVATION) "-illegal" "]"]>> + .GLUE > + + +"OPTIONAL" FIX FIX)] 92>> + + +"OPTIONAL" FIX FIX)] 184>> + +)] 276>> + + FIX FIX)] 325>> + +> + + >> + + >> + +>> + +>> + + +"OPTIONAL" FIX FIX)] 458>> + + +"OPTIONAL" FIX FIX)] 742>> + + .GLUE > + + diff --git a/bin/mudbug/frmsp.nbin b/bin/mudbug/frmsp.nbin new file mode 100644 index 0000000000000000000000000000000000000000..1397ff0df9595f4d72ca3e0d32af52547a3eccc7 GIT binary patch literal 8772 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 V3%xRVoc({{v|&IyV3S literal 0 HcmV?d00001 diff --git a/bin/mudbug/helpld.nbin b/bin/mudbug/helpld.nbin new file mode 100644 index 0000000000000000000000000000000000000000..dc170ff3d5e9b6178dd273185cf181516018698e GIT binary patch literal 4766 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 D>q|)R literal 0 HcmV?d00001 diff --git a/bin/mudbug/im.nbin b/bin/mudbug/im.nbin new file mode 100644 index 0000000000000000000000000000000000000000..a3b89f1760e9a54921dcaac30f0c02d788eff8ea GIT binary patch literal 2613 zcmaJ@eQZh zoLv@_iBxb@9(zVSnH{wLX;hVtPsP=b)`_Fi@_kq0$}@Y@1FETqap4`Ryx(q-lmq+iHF3lX9{jG`5Y%%$VZmC;$Cf6I}Yd0njg|y1PJ{0BVTb%5+`R2Qh*p z2Z#*Lle<|-49caVW>|$rH^uH3Ub{e&%hQWwF+2<)3cH|H--aQd&)?(|#aM+3#+3^( zf;$FU+E}w_gLrEf@xZNb`2l6Gp?dvh*8HruE>40o20EIGDbx2Uaq}aHfEMDFPz{$; z4ZlGv3$1FAaVG7JmrTQPvyJwy2#RG&24WTE`+}jYrPUK}w z+6!IG3Sg3_`eD^$R@@+$9baXSa{Jwaz4~fYTVzy%^ZC1YSObyJ+?asN1bCm^t-bUS zMgtnm3m^lh@`WKK>+?5>RYG@GLsO}goL%7!MD&r!KSAS!rDeO!-*Xa=56zutO}xdd z9a4Vzch)X-oWAm|a`p}3>x6xm<^3=F;rCELITS|^?Z4KY&w;6u5p2yB3&80x<8+woUG z*9WWku6s?rKbX-uVG}1?eRT(Wa_gqx+njV&99p&G;7iTGIH|OMq5rgZT^}IiaI|`F zJzSludlfbpcEj7BekwQJ4_iTpj#}Mqn;f~?*Py*1yxDT7y0yEmHPOu@iX z%Rb%n9bV|*q)T(qa@%TrjrhyMACrZ~O!tj9xY93omh+SI_rHQ)curF5T*^smNM&DE z``{wKh#B;&A?Lc8bN-Pyt@xlD6;3Qfxz;VZ{H)g6DX2f*Gc52Mz+YcG&xQE{E_$yM z;czf)_X+{GUkvYLjBJ&Yj{;Z^^u%Vb{XD{oNCf5)R?JC$w7J@|V8PahI3R@O-hXHg z=yS+k2GD&EO3VNV0r#_yGUzMAq`9g2Q>fr%3tMt)CRq3Tl!u8tR? zE9Y6+`i6#vmKI4X8do}kZEcL7nq+=Dd}=;9cKaAh4`G(fw(u{5hT1v;u81$FPOY$} zIzoQY$|7~lanFIb;J6nH90m4ZN5q9?la|$7O9YrT6!rxoR%XTdTaxzy-`j{3l4-&C zmpJ$@PC*arj%v&i%$j>JBT;Y{v~GLfu)Rt6vikz4#Q%&!9T8^ZhbE8z#bzZg*D>XyUgmh|Og_0*^eE!OV87|D4H literal 0 HcmV?d00001 diff --git a/bin/mudbug/mend.fbin b/bin/mudbug/mend.fbin new file mode 100644 index 00000000..5b1df9aa --- /dev/null +++ b/bin/mudbug/mend.fbin @@ -0,0 +1,123 @@ +' + + + + + + + + MEND #DECL ("VALUE" ANY) +INTREAD!-IEDIT PPRINT GET-NUM!-IEDIT ERR!-IEDIT ERRET FRM EDIT &1 SCML MINIT +MEND-PROCESS HALT % #FALSE ("CANNOT START MEND FROM HERE") + % NOUT "PRINT" "TTY:MEND AREA" % #FALSE ( +"TTY OPENS LOST") MPBOTM MINIT % T OUTCHAN MEND-LOOP MDBG "JMB;^" " >" % RES (PROCESS) INCHAN +INTERRUPT % QUICKPRINT ('T) MPMON? % REP +% % % "TL" % +THIS-LEVEL!-IEDIT "ENDING" % "L" % % DO-NEXT "____" "next" "__" INVISIBLE "no" "print__" "auto__" #FALSE +(0) (REPEAT PROG) % "CHAR" % (T REPEAT PROG +CLAUSE) LIST CLAUSE PUSH POP REPL ILLEGAL-MSTACK!-ERRORS MREPL (CHANNEL) ..& | +MSLEEP PRINT MPLNUM "LUL" % % +"V" "H" () SKIP-THIS M (MSTACK) (FIX) % () NEXT-COUNT LAST-LEVEL % REP-LOOP (ACTIVATION) +FIRST-REP QUICK-RUN!-IEDIT QUICK-RUN "MENDING" MHALT EVLIN #DISMISS T +COMMAND-LOOP .COMMAND-LOOP> FINISH!-IEDIT TOP-ITEM!-IEDIT +CURSOR!-IEDIT +LERR\ !-INTERRUPTS EDIT-TABLE % (VECTOR) EVLOUT +LERR\ !-IEDIT QUITTER ITER!-IEDIT ITCOM!-IEDIT SEARCH+!-IEDIT SEARCH-!-IEDIT +"CANNOT USE MEND COMMANDS FROM A MACRO" "? " "READ" "MUDBUG;EDIT? MEND" "??" +"MUDBUG;EDIT?? MEND" "N " % "QT" "SN" "C" "SV" "SD" %< +RGLOC GOOD-CHRS!-IEDIT T> "MUST BE FIX OR FLOAT" % +"SF" ["PD" "PO"] "PO" "BAD LEVEL NUMBER" ["PI" "DI"] % +"NON-EXISTENT ITEM" "PI" "===>>" "AI" % +"NO ROOM FOR ANOTHER ITEM" "O " JUNK!-IEDIT NEW-ITEM!-IEDIT ["Q " !\ "OV" !\ +"QM" !\] ![ON OFF PRINT GO!] ON OFF GO "**BREAK**" "= " MON-NUM % " = " "RENUMBERING MONITOR LIST..." #FALSE ( +"DELAY-TIME CANNOT BE NEGATIVE") MPLINES #FALSE ("LAST-LEVEL MUST BE POSITIVE") +IPRINT-TIMES #FALSE ("PRINTING-FREQUENCY MUST BE POSITIVE")]>> + .GLUE > + + +> + +)] 364>> + + [REST > ANY +VECTOR FIX ANY FRAME ATOM ANY FIX>]>> + +>> > ) ( 0> ) (>)> <&1 <2 .MS>> > > +>>)> + +> + +> + + ATOM)] +1127>> + +> + +> + +> FIX +)] 1528>> + +)] 1640>> + +> + + +CHANNEL )] 2095>> + +> + + +> + + +CHANNEL)] 2971>> + +> + +> + + ' '>> + +) '["? " +"??" "N " "QT" "SN" "SV" "SD" "SF" "PD" "PO" "PI" "DI" "AI" "O " "Q " "OV" "QM"] +>> + +> + +> + + )] 4955>> + + ANY)] 5051>> + + +)] 5143>> + + (MPLINES MPTOP MPBOTM SEP-LENGTH EMPTY-SLOT +LAST-LEVEL IPRINT-TIME IPRINT-TIMES) FIX (NOUT) CHANNEL (MEND-PROCESS) PROCESS ( +SEP-LINE SEP-LINE2) STRING (MON-LIST) VECTOR> + +> +"OPTIONAL" )] +5256>> + + diff --git a/bin/mudbug/mend.nbin b/bin/mudbug/mend.nbin new file mode 100644 index 0000000000000000000000000000000000000000..606f73434053a1e9f9b4e7f8fbd0c9d7a0d53e7e GIT binary patch literal 48062 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 bKnbVM{n>TlN|W)htLB_>;?uJh96J622?emv literal 0 HcmV?d00001 diff --git a/bin/mudbug/pprint.fbin b/bin/mudbug/pprint.fbin new file mode 100644 index 00000000..a0f8d07a --- /dev/null +++ b/bin/mudbug/pprint.fbin @@ -0,0 +1,96 @@ +' + + + + + + + +)> + +FIXUP!-RSUBRS + + + +> > >>)> +> + +> + +>> + +>> + +> + + PPRINT #DECL ("VALUE" ANY ANY +"OPTIONAL" CHANNEL) OUTCHAN (CHANNEL) DEFINE SETG DEFMAC QUOTE SET FUNCTION # +FALSE ("NAKED ATOM?") MARG (FIX) LEFT-MARGIN % % +QUICKPRINT (ANY) REDEFINE T KEEP-FIXUPS % "READ" "_PPRIN" "TPL:" + "PRINT" "PPRNF" "MUD" "_PPRNF" ">" "PRINTO" COMMENT % % ":<" "." TO "DONE" NO-DUMP "FUNCT---ARGS" TOPLEVEL % +EVAL "FRAME---FUNCTION" "FRAMES FROM " "Atom is not bound anywhere." +"Bound further down to: " "Toplevel binding: " "Frame----Value" +"----bound, but not assigned a value---- +" BAD-CHANNEL!-ERRORS PPRINT % VERTICAL % +LOOKAHEAD % DENSE % FITS? PROG REPEAT LVAL +GVAL "![" WORD "!]" " (" CHANNEL " [" STORE CANT-PPRINT!-ERRORS DONE " ;" +RSUBR-ENTRY RSUBR "TTY" FIXUP!-RSUBRS CAN-NOT-BE-DUMPED!-ERRORS DECL L (LIST) +STACKFORM MAPF MAPR (0) LIST % %]>> + .GLUE > + + +> + +> + + "OPTIONAL" STRING FIX FIX)] 346>> + + + + + + + +> + + +"OPTIONAL" FIX FIX)] 928>> + + +"OPTIONAL" FIX FIX)] 1079>> + +> + +> + + FIX ANY)] 1560>> + + + + + + + + + + + +> !\ >>>> + +> !\ >>>> + +> + + FIX "OPTIONAL" )] 5103>> + + diff --git a/bin/mudbug/pprint.nbin b/bin/mudbug/pprint.nbin new file mode 100644 index 0000000000000000000000000000000000000000..67a39954c7e97683076b5276ba9bdac8135889a4 GIT binary patch literal 54032 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 literal 0 HcmV?d00001 diff --git a/bin/mudbug/rdb.nbin b/bin/mudbug/rdb.nbin new file mode 100644 index 0000000000000000000000000000000000000000..2dfeb3eeb3365dddbab6f6569167538b39889fa1 GIT binary patch literal 5302 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 NKiwgvUOlOM?4M@hj?4f6 literal 0 HcmV?d00001 diff --git a/bin/mudbug/trace.fbin b/bin/mudbug/trace.fbin new file mode 100644 index 00000000..30c9933b --- /dev/null +++ b/bin/mudbug/trace.fbin @@ -0,0 +1,84 @@ +' + + + + + + + + + + + + + + + + + + [7 ANY]>> + +> + + + + + + + + + + + + + + + + + + TRACE #DECL ("VALUE" > "OPTIONAL" > "TUPLE" +]>) & &1 INDENT-TO T "MUDBUG;TRACE ORDER" "IN-BREAK" +"OUT-BREAK" "VERBOSE" "IN-PRINT" "OUT-PRINT" "TRACE-ARGS" TRACE-ARGS "TRACE-VAL" + TRACE-VAL % % % % TRACE % %< +TYPE-W TRSUBR VECTOR> % % % % OUTCHAN "IN-BREAK: " "IN-PRINT: " +"OUT-PRINT: " "OUT-BREAK: " "VERBOSE: " (TUPLE) INDENT () (ANY) + % (CHANNEL) INDENT-MOD % "Entering " +" with " "Leaving " QUICK-RUN!-IEDIT (ATOM) "**BREAK**"]>> + .GLUE > + + + > + +> + +> "OPTIONAL" >)] 447>> + +> + + + + + + + + + + + +> + + + + + + + + + + diff --git a/bin/mudbug/trace.nbin b/bin/mudbug/trace.nbin new file mode 100644 index 0000000000000000000000000000000000000000..f036d7bd4e174f1db3b0e780d9f90da2f1aeaf4b GIT binary patch literal 10561 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�Xn13Nyo&k7mwE?1j}wiA7$2RvE|X@jpF6x{Ca=p^94=f?YFS~>>Q>(aC6e5Wbb6_#Tf~h_ z*^^8VbgQh(93dOQfQTTsL`5;vYobsi>Xh_1FT@eJz!w>0FPG#hf;@|8U9R${x*#oF zu9#H~!6g-}grEmK_%x;n81s6mhQd|+e3VH|uq((TqDaF87F#4S%^;Of&cYnI2*x%L zxoI~8o7=HB0Yr(z2(efTTIc4t;w23X3j@ZTSlp|}z*kN?+ z51|D^DM816>x;*m#Dy1!$ogT&kF0;XDFL9QNDi@Zie322u;Kw0-cfSsEtyC*(9OmB zW#O?f*&t-fp&6mLYS_akd5PgsN+NM;TC*+@RGpz$bpgRQ=E-6}_YUN634HQjO-}RV z?@rE0x_`or%a9znYvDoWDD{Xd*|B;+Hl{Qrg7i zRTWhxpd_2G_rCohy><$0P3`zgtds3RMJTzXS6Pxrsj8vBpW6j9hWUsGX0a8E7<|zMP1L5#p^a6G%kGbj zy0LEvQoL{w?)P$;P^)y5CMC>S8@U{fp&=VmNdBio6jK5@^XqQBycFWSuod#W82_&T zJS$xtgqcr*tdT0c^tFva+b}2?RfDXk+wl9^wvi$GW+n3$GLV_owmR|C_X`_@*qUPv ze#=i#q|27R+U$>|($?gHW^vV{wmKoECU=eaquN4@3_5e_#4_uxp$#VCo@=(rlm$$$ z>J(zaML(31qev?GQW)t7%NvH}HPy|eQF@SEp+3cf;@OZ86*9+T8s}lmckG!x(&nTA zwL=Y+d?~H#OPf-9Sf$L;l1!I3@#S6@hNMt=b1XTB+QtP>GFYgVUW3uBq$TXG>j^vR z7@;g%Sn7^4Z%FDjmWleEPaBd*YK@X8XAY1}9L=gIA7w1I7o_|IOWlQa_mh*$P)^NXpGa?jhtbkzo*ui6RvQ4K&zFgD0`U7zyDx#s*nb z2k|$B*kwVTNkm|p63yT+k0zWzq%B^?;qW;9NekQX9g;|)%@LfMcMK8o^z2HXczP?UQ?Hww8|Jb)Z1upi8OdR8%#u%ED;fn(8tk|Xpj0Jl8?Yxh=A^IG_h;c zo%joto-;2*yUozZWB6Je_hG3TfHn=`x4puV@5I?aeK&(a5 z8ru-NaR!Ymye+&{jScoNmuOYSmFKQpEg@c%#2Kv-#VFIdm?V1&T{}EU+&Se9w+(TT zJa77z4bP=|#P{4L;Jis4ryiq3riGpb3J#r>8I2tU`XaS=zyf$5X;sG6Z|?XkXqO++ z7C3SXm1jY1@9H=6&peBh*T_otnYq6#4E}9ZQ|DPvsebEPCT^qc(a%`_HZ+%W(HftttphitQo8mM_}+2EL)Ak~;_2i(iqsv$ z;6OD7?z$=IlljM^4dUix4A*Ua6bE-#W80zkUTqUs_2jgP2QOg^uw^`gC-W`wgGr0K zq}*X8j(5);9Uuy!jU&U1MjcHDl`tVgni@-#G5noRSMX$~EvP%o#*+aG1N&a9@xnQB z$zyTGTkQ;NGhq+&hL6Xr!yr2QRK%@{utXn$=y7Z<>1b#ChwX(WYNTl1w1fxO z|KKqU`LSN@DJ!vC?ZM%T#!t($D?nI_GAVP}`)i+>rY6S!RhZnvei^2|Fud-RBW+?V zJ|rv+uEslOf!>>4U4Hnbz_TmE;Hr{O$4mhG<)8f}IX?5tKjDi}V5pkm#$Vel98`Y; jNWZMRW3TpeN8dA)eH~JBi(P?pY4*-QYyGK>{5Sp|guFaP literal 0 HcmV?d00001 diff --git a/bin/mudbug/unassm.fbin b/bin/mudbug/unassm.fbin new file mode 100644 index 00000000..2db20d4a --- /dev/null +++ b/bin/mudbug/unassm.fbin @@ -0,0 +1,364 @@ +' + + + + + +)> + + + +MUDREF + + + +> + +> + + FIX>> + + + + + + + + MUDREFIN #DECL ("VALUE" +MUDREF CHARACTER) INCHAN % OUTCHAN ">" T % + % STACK-SIZE " <" % " " "(" %< +RGLOC ADDR-ACS T> ") " "[" "<(%) -1>" "<" "]" " "TAG" % % ["" " " " " " " " " +" " " " +" " " " +" " +" " +" " +" " +" " +" " +] ["" " " " " " " " " " " " " " "] STARTING-INSTRUCTION ")" + "MOVEI" LAST-A LAST-O "SUB" "PUSH" LAST-P "MCALL" "PUSHJ" % COM-FLG ";" GLUE INTERNAL-ENTRYS (CHANNEL) STACK (ANY) (FIX) FIX #FALSE ( +"NO GLUE BITS") " %< +RGLOC JSR-LCKINT T> "INTGO" "DPB" "LDB" "PUTYP" "GETYP" "MOVSI" "CAIN" "CAIE" +"<TYPE-CODE " "DEFER" %<RGLOC $TLOSE T> %<RGLOC $TLOSEHI T> "<TYPE-WORD " #FALSE +("Bad group") SETG "PAGE " " " "INDEX" "DONE" NM2 "UNASSM" (STRING) "PRINT" +"MUDDLE;" "UNASSM " %<RGLOC MUDDLE T> "SAVE" "" "SAVED" "READY" +"MUDDLE UNASSEMBLER."]>> +<AND <ASSIGNED? GLUE> .GLUE <PUT ,MUDREFIN PGLUE ![1073741823 -1 -1 -1 -64 0!]>> + + +<SETG OUTPUT-MUDREF %<RSUBR-ENTRY '[MUDREFIN OUTPUT-MUDREF #DECL ("VALUE" ANY +MUDREF)] 57>> + +<SETG MUDOBJ %<RSUBR-ENTRY '[MUDREFIN MUDOBJ #DECL ("VALUE" <OR FALSE FIX> < +PRIMTYPE WORD>)] 118>> + +<SETG GET-MUDDLE-SUBR %<RSUBR-ENTRY '[MUDREFIN GET-MUDDLE-SUBR #DECL ("VALUE" +ATOM <PRIMTYPE WORD>)] 134>> + +<DEFINE BEGIN-MHACK () <SET READ-TABLE <SETG READ-TABLE <COND (<GASSIGNED? +READ-TABLE> ,READ-TABLE) (ELSE <IVECTOR 128 0>)>>> <PUT .READ-TABLE <+ <ASCII +!\|> 1> ,MUDREFIN> <PRINTTYPE MUDREF ,OUTPUT-MUDREF> T> + +<DEFINE END-MHACK () <PUT ,READ-TABLE <+ <ASCII !\|> 1> 0> <PRINTTYPE MUDREF , +PRINT> T> + +<BEGIN-MHACK> + +INSTRUCION-VEC + +<SETG INSTRUCTION-VEC '[#FALSE () "MCALL" "ACALL" #FALSE () "SAVAC" #FALSE () +"ERRUU" #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () # +FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () # +FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () # +FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () # +FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () # +FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () # +FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () # +FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () # +FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () # +FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () # +FALSE () "UFA" "DFN" "FSC" "IBP" "ILDB" "LDB" "IDPB" "DPB" "FAD" "FADL" "FADM" +"FADB" "FADR" "FADRI" "FADRM" "FADRB" "FSB" "FSBL" "FSBM" "FSBB" "FSBR" "FSBRI" +"FSBRM" "FSBRB" "FMP" "FMPL" "FMPM" "FMPB" "FMPR" "FMPRI" "FMPRM" "FMPRB" "FDV" +"FDVL" "FDVM" "FDVB" "FDVR" "FDVRI" "FDVRM" "FDVRB" "MOVE" "MOVEI" "MOVEM" +"MOVES" "MOVS" "MOVSI" "MOVSM" "MOVSS" "MOVN" "MOVNI" "MOVNM" "MOVNS" "MOVM" +"MOVMI" "MOVMM" "MOVMS" "IMUL" "IMULI" "IMULM" "IMULB" "MUL" "MULI" "MULM" +"MULB" "IDIV" "IDIVI" "IDIVM" "IDIVB" "DIV" "DIVI" "DIVM" "DIVB" "ASH" "ROT" +"LSH" "JFFO" "ASHC" "ROTC" "LSHC" #FALSE () "EXCH" "BLT" "AOBJP" "AOBJN" "JRST" +"JFCL" "XCT" #FALSE () "PUSHJ" "PUSH" "POP" "POPJ" "JSR" "JSP" "JSA" "JRA" "ADD" +"ADDI" "ADDM" "ADDB" "SUB" "SUBI" "SUBM" "SUBB" "CAI" "CAIL" "CAIE" "CAILE" +"CAIA" "CAIGE" "CAIN" "CAIG" "CAM" "CAML" "CAME" "CAMLE" "CAMA" "CAMGE" "CAMN" +"CAMG" "JUMP" "JUMPL" "JUMPE" "JUMPLE" "JUMPA" "JUMPGE" "JUMPN" "JUMPG" "SKIP" +"SKIPL" "SKIPE" "SKIPLE" "SKIPA" "SKIPGE" "SKIPN" "SKIPG" "AOJ" "AOJL" "AOJE" +"AOJLE" "AOJA" "AOJGE" "AOJN" "AOJG" "AOS" "AOSL" "AOSE" "AOSLE" "AOSA" "AOSGE" +"AOSN" "AOSG" "SOJ" "SOJL" "SOJE" "SOJLE" "SOJA" "SOJGE" "SOJN" "SOJG" "SOS" +"SOSL" "SOSE" "SOSLE" "SOSA" "SOSGE" "SOSN" "SOSG" "SETZ" "SETZI" "SETZM" +"SETZB" "AND" "ANDI" "ANDM" "ANDB" "ANDCA" "ANDCAI" "ANDCAM" "ANDCAB" "SETM" +"SETMI" "SETMM" "SETMB" "ANDCM" "ANDCMI" "ANDCMM" "ANDCMB" "SETA" "SETAI" +"SETAM" "SETAB" "XOR" "XORI" "XORM" "XORB" "IOR" "IORI" "IORM" "IORB" "ANDCB" +"ANDCBI" "ANDCBM" "ANDCBB" "EQV" "EQVI" "EQVM" "EQVB" "SETCA" "SETCAI" "SETCAM" +"SETCAB" "ORCA" "ORCAI" "ORCAM" "ORCAB" "SETCM" "SETCMI" "SETCMM" "SETCMB" +"ORCM" "ORCMI" "ORCMM" "ORCMB" "ORCB" "ORCBI" "ORCBM" "ORCBB" "SETO" "SETOI" +"SETOM" "SETOB" "HLL" "HLLI" "HLLM" "HLLS" "HRL" "HRLI" "HRLM" "HRLS" "HLLZ" +"HLLZI" "HLLZM" "HLLZS" "HRLZ" "HRLZI" "HRLZM" "HRLZS" "HLLO" "HLLOI" "HLLOM" +"HLLOS" "HRLO" "HRLOI" "HRLOM" "HRLOS" "HLLE" "HLLEI" "HLLEM" "HLLES" "HRLE" +"HRLEI" "HRLEM" "HRLES" "HRR" "HRRI" "HRRM" "HRRS" "HLR" "HLRI" "HLRM" "HLRS" +"HRRZ" "HRRZI" "HRRZM" "HRRZS" "HLRZ" "HLRZI" "HLRZM" "HLRZS" "HRRO" "HRROI" +"HRROM" "HRROS" "HLRO" "HLROI" "HLROM" "HLROS" "HRRE" "HRREI" "HRREM" "HRRES" +"HLRE" "HLREI" "HLREM" "HLRES" "TRN" "TLN" "TRNE" "TLNE" "TRNA" "TLNA" "TRNN" +"TLNN" "TDN" "TSN" "TDNE" "TSNE" "TDNA" "TSNA" "TDNN" "TSNN" "TRZ" "TLZ" "TRZE" +"TLZE" "TRZA" "TLZA" "TRZN" "TLZN" "TDZ" "TSZ" "TDZE" "TSZE" "TDZA" "TSZA" +"TDZN" "TSZN" "TRC" "TLC" "TRCE" "TLCE" "TRCA" "TLCA" "TRCN" "TLCN" "TDC" "TSC" +"TDCE" "TSCE" "TDCA" "TSCA" "TDCN" "TSCN" "TRO" "TLO" "TROE" "TLOE" "TROA" +"TLOA" "TRON" "TLON" "TDO" "TSO" "TDOE" "TSOE" "TDOA" "TSOA" "TDON" "TSON" # +FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () # +FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () # +FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () # +FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () # +FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () # +FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () # +FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () # +FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () #FALSE () # +FALSE ()]> + +<SETG BITS-VEC '![0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 4 0 0 +0 0 0 0 0 4 0 0 0 0 0 0 0 4 0 0 0 4 0 0 0 4 0 0 0 4 0 0 0 4 0 0 0 4 0 0 0 4 0 0 +0 4 0 0 0 4 0 0 0 0 0 2 0 0 0 0 0 0 2 2 3 1 1 0 2 0 0 2 3 2 2 2 0 4 0 0 0 4 0 0 +4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 +1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 0 4 1 0 0 4 0 0 0 4 0 0 0 4 1 0 +0 4 0 0 0 4 1 0 0 4 0 0 0 4 0 0 0 4 0 0 0 4 0 0 0 4 1 0 0 4 0 0 0 4 1 0 0 0 0 0 +0 4 0 0 0 4 1 0 0 4 0 1 0 4 0 1 0 4 0 1 0 4 0 1 0 4 0 1 0 4 0 1 0 4 0 1 0 4 0 1 +0 4 0 1 0 4 0 1 0 4 0 1 0 4 0 1 0 4 0 1 0 4 0 1 0 4 0 1 0 4 0 1 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0!]> + +<SETG NDO <BITS 1 0>> + +<SETG JMP <BITS 1 1>> + +<SETG IMM <BITS 1 2>> + +<SETG JSR-LCKINT <CHTYPE <ORB #WORD *264000000000* <SQUOTA |LCKINT >> FIX>> + +<SETG SKIPGE-INTFLG <CHTYPE <ORB #WORD *335000000000* <SQUOTA |INTFLG >> FIX>> + +<GDECL (INSTRUCTION-VEC) VECTOR> + +<GDECL (BITS-VEC ACS ADDR-ACS) UVECTOR> + +<GDECL (JSR-LCKINT SKIPGE-INTFLG) FIX> + +<SETG SPEC-ATOM 10485759> + +<MANIFEST NDO JMP IMM SPEC-ATOM> + +<USE "SQUOZE" "SORTX"> + +<SETG $TLOSE <SQUOTA <SQUOZE "$TLOSE">>> + +<SETG $TLOSEHI <+ ,$TLOSE <LENGTH <ALLTYPES>>>> + +<PRINTTYPE MUDREF ,OUTPUT-MUDREF> + +<SETG UUOTOP 64> + +<SETG 9BIT <BITS 9 27>> + +<SETG ACF <BITS 4 23>> + +<SETG @BIT <BITS 1 22>> + +<SETG IDF <BITS 4 18>> + +<SETG RHW <BITS 18 0>> + +<MANIFEST UUOTOP 9BIT ACF @BIT IDF RHW LHW TYPBYT> + +<GDECL ($TLOSE $TLOSEHI) FIX> + +\ + +"HERE TO ESTABLISH THE ACS" + +<PROG ((CNT 0)) <MAPF <> <FUNCTION (AC) <SETG .AC .CNT> <SET CNT <+ .CNT 1>>> ' +![AC-O AC-A AC-B AC-C AC-D AC-E AC-PVP AC-TVP AC-SP AC-AB AC-TB AC-TP AC-FRM +AC-M AC-R AC-P!]>> + +<MANIFEST AC-O AC-A AC-B AC-C AC-D AC-E AC-PVP AC-TVP AC-FRM AC-AB AC-TB AC-TP +AC-SP AC-M AC-R AC-P> + +<SETG ADDR-ACS ![O A B C D E PVP TVP SP AB TB TP FRM M R P!]> + +<SETG ACS ![O* A* B* C* D* E* PVP* TVP* SP* AB* TB* TP* FRM* M* R* P*!]> + +<SETG SPEC-HACKERS '(|CIVEC |CIUVEC |CTYPEQ |CSBSTR |CISTNG |CMIN |CMAX +|IILIST |IIFORM |CMINUS |CDIVID |CPLUS |CTIMES )> + +<GDECL (SPEC-HACKERS) LIST> + +\ + +<SETG PRINT-INST %<RSUBR-ENTRY '[MUDREFIN PRINT-INST #DECL ("VALUE" CHARACTER +STRING)] 145>> + +<SETG FIN-INST %<RSUBR-ENTRY '[MUDREFIN FIN-INST #DECL ("VALUE" <OR FALSE FIX> +ANY FIX)] 169>> + +<SETG M? %<RSUBR-ENTRY '[MUDREFIN M? #DECL ("VALUE" <OR ATOM FALSE> <PRIMTYPE +WORD>)] 202>> + +<SETG R? %<RSUBR-ENTRY '[MUDREFIN R? #DECL ("VALUE" <OR ATOM FALSE> <PRIMTYPE +WORD>)] 220>> + +<SETG JUMP? %<RSUBR-ENTRY '[MUDREFIN JUMP? #DECL ("VALUE" <OR ATOM FALSE> < +PRIMTYPE WORD>)] 238>> + +<SETG UUO? %<RSUBR-ENTRY '[MUDREFIN UUO? #DECL ("VALUE" <OR ATOM FALSE> < +PRIMTYPE WORD>)] 272>> + +<SETG INSTRUCTION? %<RSUBR-ENTRY '[MUDREFIN INSTRUCTION? #DECL ("VALUE" ANY < +PRIMTYPE WORD>)] 297>> + +<SETG PASS-1 %<RSUBR-ENTRY '[MUDREFIN PASS-1 #DECL ("VALUE" <VECTOR [REST ANY]> +<PRIMTYPE UVECTOR>)] 328>> + +<SETG INIT-INST %<RSUBR-ENTRY '[MUDREFIN INIT-INST #DECL ("VALUE" <OR FALSE < +VECTOR [2 ANY] <OR FALSE FIX>>> FIX VECTOR)] 442>> + +<SETG PRINT-ACF %<RSUBR-ENTRY '[MUDREFIN PRINT-ACF #DECL ("VALUE" <OR FALSE +STRING> <PRIMTYPE WORD> <PRIMTYPE WORD>)] 500>> + +<SETG PRINT-INDEX-AC %<RSUBR-ENTRY '[MUDREFIN PRINT-INDEX-AC #DECL ("VALUE" <OR +FALSE STRING> <PRIMTYPE WORD>)] 556>> + +<SETG ADDR-AC %<RSUBR-ENTRY '[MUDREFIN ADDR-AC #DECL ("VALUE" ANY <PRIMTYPE WORD +>)] 615>> + +<SETG PRINT-NUMB %<RSUBR-ENTRY '[MUDREFIN PRINT-NUMB #DECL ("VALUE" <OR ATOM +MUDREF SPEC-SUBR STRING> <PRIMTYPE WORD>)] 655>> + +<SETG PRINT-MVAL %<RSUBR-ENTRY '[MUDREFIN PRINT-MVAL #DECL ("VALUE" ANY < +PRIMTYPE UVECTOR> <PRIMTYPE WORD> VECTOR <PRIMTYPE WORD>)] 680>> + +<SETG PRINT-R %<RSUBR-ENTRY '[MUDREFIN PRINT-R #DECL ("VALUE" ANY <PRIMTYPE +VECTOR> <PRIMTYPE WORD> <OR FALSE ATOM>)] 774>> + +<SETG NUMBER-PRINT %<RSUBR-ENTRY '[MUDREFIN NUMBER-PRINT #DECL ("VALUE" <OR ATOM +SPEC-SUBR <PRIMTYPE WORD>> <PRIMTYPE WORD>)] 871>> + +<SETG STANDARD-PRINT %<RSUBR-ENTRY '[MUDREFIN STANDARD-PRINT #DECL ("VALUE" ANY +<PRIMTYPE WORD> ANY ANY <PRIMTYPE WORD> "OPTIONAL" ANY)] 946>> + +<SETG MAKE-LABEL %<RSUBR-ENTRY '[MUDREFIN MAKE-LABEL #DECL ("VALUE" SPEC-LABEL)] +994>> + +<SETG PRINT-LABEL %<RSUBR-ENTRY '[MUDREFIN PRINT-LABEL #DECL ("VALUE" FIX < +PRIMTYPE WORD>)] 1012>> + +<PRINTTYPE SPEC-LABEL ,PRINT-LABEL> + +<SETG GET-SUBR %<RSUBR-ENTRY '[MUDREFIN GET-SUBR #DECL ("VALUE" <OR ATOM FALSE +MUDREF SPEC-SUBR> FIX "OPTIONAL" ANY)] 1037>> + +<SETG ATSIGN? %<RSUBR-ENTRY '[MUDREFIN ATSIGN? #DECL ("VALUE" <OR ATOM FALSE> < +PRIMTYPE WORD>)] 1104>> + +<SETG SPEC-MEMQ %<RSUBR-ENTRY '[MUDREFIN SPEC-MEMQ #DECL ("VALUE" <OR FALSE < +VECTOR [2 ANY]>> FIX VECTOR)] 1122>> + +<SETG SPEC-MEMQ1 %<RSUBR-ENTRY '[MUDREFIN SPEC-MEMQ1 #DECL ("VALUE" ANY FIX +VECTOR)] 1168>> + +<SETG OCTAL-PRINT %<RSUBR-ENTRY '[MUDREFIN OCTAL-PRINT #DECL ("VALUE" <OR ATOM +SPEC-SUBR <PRIMTYPE WORD>> <PRIMTYPE WORD> "OPTIONAL" <OR ATOM FALSE>)] 1191>> + +<SETG PRINT-ATSIGN %<RSUBR-ENTRY '[MUDREFIN PRINT-ATSIGN #DECL ("VALUE" <OR +FALSE STRING> ANY)] 1306>> + +<SETG IMMEDIATE? %<RSUBR-ENTRY '[MUDREFIN IMMEDIATE? #DECL ("VALUE" <OR ATOM +FALSE> FIX)] 1327>> + +<SETG NDV? %<RSUBR-ENTRY '[MUDREFIN NDV? #DECL ("VALUE" <OR ATOM FALSE> FIX)] +1355>> + +<SETG SUBR-PRINT %<RSUBR-ENTRY '[MUDREFIN SUBR-PRINT #DECL ("VALUE" <OR ATOM +FALSE MUDREF SPEC-SUBR> <PRIMTYPE WORD>)] 1383>> + +<NEWTYPE SPEC-SUBR LIST> + +<SETG SPEC-SUBR-PRINT %<RSUBR-ENTRY '[MUDREFIN SPEC-SUBR-PRINT #DECL ("VALUE" +ANY SPEC-SUBR)] 1422>> + +<PRINTTYPE SPEC-SUBR ,SPEC-SUBR-PRINT> + +<SETG TABS <PROG ((I -1)) <IVECTOR 15 '<ISTRING <SET I <+ .I 1>> !\ >>>> + +<SETG SPACES <PROG ((I -1)) <IVECTOR 8 '<ISTRING <SET I <+ .I 1>> !\ >>>> + +<MANIFEST TABS SPACES> + +<SETG INDENT-TO %<RSUBR-ENTRY '[MUDREFIN INDENT-TO #DECL ("VALUE" <OR FALSE +STRING> FIX "OPTIONAL" <CHANNEL [12 ANY] [4 FIX]>)] 1463>> + +\ + +"VARIOUS SPECIAL VARIABLES USED FOR STACK HACKERS." + +"STACK-SIZE == CURRENT STACK SIZE" + +"LAST-A == LAST X IN <MOVEI A* X>" + +"LAST-0 == LAST X IN <MOVEI O* X>" + +"LAST-P == LAST X IN <PUSH P* [X]>" + +"STARTING-INSTRUCTION == WHERE TO START HACKING" + +<SETG STACK-HANDLER %<RSUBR-ENTRY '[MUDREFIN STACK-HANDLER #DECL ("VALUE" ANY +STRING FIX <PRIMTYPE UVECTOR> ANY FIX FIX FIX)] 1537>> + +<SETG COMMENT-START %<RSUBR-ENTRY '[MUDREFIN COMMENT-START #DECL ("VALUE" STRING +)] 1912>> + +<SETG HACK-GLUE-BITS %<RSUBR-ENTRY '[MUDREFIN HACK-GLUE-BITS #DECL ("VALUE" ANY +RSUBR)] 1948>> + +<SETG LOOK-ITEM %<RSUBR-ENTRY '[MUDREFIN LOOK-ITEM #DECL ("VALUE" <OR FALSE FIX> +FIX)] 2069>> + +<SETG HRRE %<RSUBR-ENTRY '[MUDREFIN HRRE #DECL ("VALUE" FIX FIX)] 2109>> + +<SETG STORE-INTERNAL-ENTRIES %<RSUBR-ENTRY '[MUDREFIN STORE-INTERNAL-ENTRIES # +DECL ("VALUE" ATOM <UVECTOR [REST FIX]> VECTOR)] 2128>> + +<SETG JUMP-STACK %<RSUBR-ENTRY '[MUDREFIN JUMP-STACK #DECL ("VALUE" <OR ATOM +FALSE <VECTOR ANY ANY FIX>> STRING <VECTOR [3 ANY]> FIX)] 2181>> + +\ + +<SETG CONVERT-RSUBR %<RSUBR-ENTRY '[MUDREFIN CONVERT-RSUBR #DECL ("VALUE" <OR +ATOM !<FALSE STRING!>> RSUBR "OPTIONAL" CHANNEL ANY)] 2239>> + +<SETG GROUP-CONVERT %<RSUBR-ENTRY '[MUDREFIN GROUP-CONVERT #DECL ("VALUE" <OR +STRING !<FALSE STRING!>> ATOM CHANNEL "OPTIONAL" ANY)] 3118>> + +"UNASSEMBLE -- top level entry which takes care of channels and such" + +<SETG UNASSEMBLE %<RSUBR-ENTRY '[MUDREFIN UNASSEMBLE #DECL ("VALUE" <OR ATOM +FALSE STRING> <OR ATOM RSUBR> "OPTIONAL" <OR FALSE CHANNEL STRING> <OR ATOM +FALSE>)] 3345>> + +"DUMP-U -- dumps an unassem save file" + +<SETG DUMP-U %<RSUBR-ENTRY '[MUDREFIN DUMP-U #DECL ("VALUE" <OR ATOM STRING> +"OPTIONAL" ANY)] 3447>> + +<ENDPACKAGE> diff --git a/bin/mudbug/unassm.nbin b/bin/mudbug/unassm.nbin new file mode 100644 index 0000000000000000000000000000000000000000..fb93fc69aa0c00dbe47de7d0d9b299d504585f1d GIT binary patch literal 37948 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 literal 0 HcmV?d00001 diff --git a/bin/mudbug/unlink.fbin b/bin/mudbug/unlink.fbin new file mode 100644 index 00000000..51f5fd9f --- /dev/null +++ b/bin/mudbug/unlink.fbin @@ -0,0 +1,20 @@ +'<PCODE "UNLINK"> + +<PACKAGE "UNLINK"> + +<ENTRY UNLINK PURE? UNPURIFY> + +<SETG PURE? %<RSUBR!- '[ %<PCODE!- "UNLINK" 0> PURE? #DECL ("VALUE" <OR ATOM +FALSE> ANY) T %<RGLOC MUDDLE T> %<RGLOC UNPURIFY-PAGE T> COPY-FAILED +CANT-GET-NEW-CORE CANT-GET-PAGE "TMP" OBLIST SETG DEFINE #FALSE ("NOT A GROUP") +]>> +<AND <ASSIGNED? GLUE> .GLUE <PUT ,PURE? PGLUE ![1073741568!]>> + + +<SETG UNPURIFY %<RSUBR-ENTRY '[PURE? UNPURIFY #DECL ("VALUE" ATOM <OR <PRIMTYPE +VECTOR> <PRIMTYPE UVECTOR>>)] 15>> + +<SETG UNLINK %<RSUBR-ENTRY '[PURE? UNLINK #DECL ("VALUE" <OR ATOM !<FALSE STRING +!>> <OR FALSE ATOM <LIST [REST ATOM]>> "OPTIONAL" <OR ATOM FALSE>)] 120>> + +<ENDPACKAGE> diff --git a/bin/mudbug/unlink.nbin b/bin/mudbug/unlink.nbin new file mode 100644 index 0000000000000000000000000000000000000000..fb97858fc9196038682778cd1700baa158e94f46 GIT binary patch literal 2385 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 literal 0 HcmV?d00001 diff --git a/bin/mudbug/unpure.nbin b/bin/mudbug/unpure.nbin new file mode 100644 index 0000000000000000000000000000000000000000..ec92e693edf440493eced26ff959a96b9430f605 GIT binary patch literal 1157 zcmY*XZD><h7=G_f+oYRqQbo)rE2p!o`LfN&ZJIfWy|giw*)>g?(T}Oo)-@e6Dq&1< zV*!6ymvydCnPoV&STrcqVLB?v==>ONbdoWL`y&it(7|XEJooP2TQPgj6&!niT;B7Z z=RD_mo_mVZU&k`qL_Ts^>)w0LSO9=er14{EP8z=eoU1koyc3KSwx<5W0R3gX0Meg1 z7?ei<Vopdx1>r}*K)C=I5jVU{ZE2`!Ekhc8>GJQy6O2kao`ZG&QTYj@N(c~>#%D_< z{iEL|XK_aPd8m|brVU4l3#lkS37p#j;H7T@aB@Zf4~2PnQCdI<<;sBDK$75<EdWMF z>XA;SQGF0lnu&F_MguRO5a57o56+}7aYk$K80F9^*<k`;V6Gof)n4Y3@ObZ&blOmo z{=khU=7=~DXXA}4M|FD2Z!eW>I4a+iKuAM9lz}{v15x@Bmofe@KqH?7ACo&=d?k&- z#{}p!C6eGQ1OiZ1v<k4Bb>`j%8$fph!ALqL4W(^ENw7CMkZ&s>i?on~6tmUVg#Tl! z>usc$P9dKjaVuacD?d4%1rXo^z@PF)0Z^LWwK9VLLq60ufNdxyLunPj0$ja-Mwpfw zzy_Y@#}WSciUfFB_p6vete&ew2!K_(i!;4rk#c&ZOk*eL1dJ15ZYZ%r0D%JfS;uzy z;)3e%v8QHUt~S4xz=o9t_|=1!XAd!~Ozc|}CDUbbO8cgp98u{PVpe?|*>OyreDs~D z_^xC{ZEWq08RhZjTcSF*zkN!%<Oqs%)*hZx3;FmNZT(2c_^LB0p42y#)KcGok{?>k zC}VZspV2adce2v8=?4Q!>aUQfj1Kn<D8=`-oL4-L9*Rs&71P(E{C)b#gHi0Px~;ag zyEfK8eW{iCAON9i^9BQyThSP+c5$dF^3kCPK79<gLZ7v{-mer3RZFl5xCEXk_d3E) z*H{<?D@a~gE_RW7C#aeHda)z?R;YbD3Ga%Bf}}C5p4xxzNF?4vT#<M*^lVNx*9~~w zEdfCg+&&-iwg`e>2n5{36Yw?*^3U(g9TJG&AMm|Sd~UhgI-m0Tnp=qc+3#~H`AYBA z5n5%vJ|Z7{nH-Q8Pk%d1*L>w2ls~sT{P>@{6`yV_cG>S_l_kf$^IGo057%hrp6EsG zYIaLT{mtGdQh6ypqs%@J*H&{oqogdhkd}Wpo}oL*{j=(&+O8S0EfVce=Un*=T|a#* g+Z7G!lg^&LNQlI>U-sQU8x02SyNRbchzSt#FDKi8mH+?% literal 0 HcmV?d00001 diff --git a/bin/mudtmp/added.files b/bin/mudtmp/added.files new file mode 100644 index 0000000000000000000000000000000000000000..48de00319fb4bd81fb29fcc32eed228b9376ae1b GIT binary patch literal 14390 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 literal 0 HcmV?d00001 diff --git a/bin/mudtmp/dump.bit b/bin/mudtmp/dump.bit new file mode 100644 index 0000000000000000000000000000000000000000..953693c0eda1d7fb87b141d5f9606d0a9241430e GIT binary patch literal 35 KcmZQzAP4{eBLD#a literal 0 HcmV?d00001 diff --git a/doc/mprog2/dragit.info b/doc/mprog2/dragit.info new file mode 100644 index 00000000..bd9b7b52 --- /dev/null +++ b/doc/mprog2/dragit.info @@ -0,0 +1,41 @@ +[633] *r #113919: 06/10 14:27 PDL => SWG Re: Muddle Dragon Hackery + +[Message #633 (113919)] + +PDL@MIT-DMS 06/10/79 14:27:20 Re: Muddle Dragon Hackery +<USE "DRAGIT"> +<DRAGON> +<SUMMARY> + +gives you a summary of the current month as far as it has gone. + + <DRAGON -input-file-:string> + +-input-file- defaultly is "DRAGON;DRAGON HOARD", and if an argument is given, + SNM is "DRAGON" by default and NM2 is "REPORT". + + <SUMMARY -data-and-flags-:tuple> + +-data-and-flags- uses the data produced by DRAGON if the first element of the + tuple is not a vector. Remaining elements define what to print: if nothing + is given, everything is printed. R prints "runs" info, G prints groups + info, and T prints "totals" info. "Runs" is what was previously done by the + Teco macro, "Groups" is a summary line for each group in the Dragon file, + and "Totals" is the summary line that goes in "1979 SUMMRY". + + If the first thing in the tuple is a string, the output will go to that + file. E.g., + + <SUMMARY "april summry"> + + will stuff the full summary to that file. + +,SDATA!-IDRAGIT is the unparsed string data +,DATA!-IDRAGIT is the parsed data + +Have fun. + + pdl + + + diff --git a/doc/mudbug/debugr.help b/doc/mudbug/debugr.help new file mode 100644 index 00000000..f2b42282 --- /dev/null +++ b/doc/mudbug/debugr.help @@ -0,0 +1,18 @@ +MUDDLE Debugger ---- command summary + +<USE "DEBUGR"> loads the Debugger + +<DEBUG> makes the Debugger ready. + use  to _____Begin one-stepping. + use  to do ____Next step of the computation. + use  to step ____Over completely the next computation, + then stop and continue one-stepping. + use  to evaluate the _________Arguments of the current object + then stop and continue one-stepping through the body. + use  to contine evaluation until you ______Return to this point. + use  to ___End one-stepping. +use  to ____Quit one-stepping and make the Debugger unready (off). + +<HELP> prints this command summary. + +<REPAIR> attempts to repair any Debugger errors you might invoke. diff --git a/doc/mudbug/edit.nhelp b/doc/mudbug/edit.nhelp new file mode 100644 index 00000000..4775a56a --- /dev/null +++ b/doc/mudbug/edit.nhelp @@ -0,0 +1,82 @@ + +____NAME ____ARGS _______MEANING + +General commands + +? none type out short command summary +?? none type out this command summary +O 1,any Open object or the value of an atom +OT none Open This -- the atom at the cursor +Q none Quit -- return to MUDDLE +QR 1,FIX Quit and Retry -- leave Edit and retry a frame +V none toggle Verbosity + +Movement commands + +L 1,FIX move Left arg objects +R 1,FIX move Right arg objects +U 1,FIX move Up arg levels +D none move Down one level +B none move to Back of object +F none move to Front of object +UR 1,FIX move Up arg objects and to the Right +DL 1,FIX move Down arg objects and to the Left +UT none Up Top -- go to the place you were just after O + +Editing commands + +I any,any Insert args to the right of cursor +I: 2 make next (arg 2) objects into a TYPE (arg 1) +I* 2 Imbed command: replace all occurances of arg 1 + (ATOM with default *) in arg 2 with objects to right of cursor +X 1,ATOM set the atom to the object to right of cursor +SW none swaps object to right of cursor with second to right +G any,any Get evaluation of args, insert to right of cursor +C 1,ANY Change the next object to arg +C: 1,TYPE Change the type of the next object to arg +K 1,FIX Kill (delete) the next arg objects +K: none Kill (remove) the "brackets" around the next object + +Search Commands + +S (SR) 1,any Search (Right) until match (=?) is found for arg +SL 1,any Search Left as above + +Debugging commands + +BK any,any set BreaKpoint at next object; + if first arg evaluates to FALSE, don't break; + rest of args are printed out at break +BA any,any Break After; like BK but break happens after object evals +KB none Kill all Breakpoints in open object +KT none Kill This breakpoint in the object to the right of cursor + +UM make monitor commands available +RM any,any put read monitor on the LVAL of the ATOM given as the + first arg; other args are optional as to BK +WM any,any put write monitor on the LVAL of the ATOM +RW any,any put read/write monitor on the LVAL of the ATOM + +Printing commands + +P none PPRINT the next object +PU none PPRINT the next Upper level +PT none PPRINT the whole object open + +Macro Commands + +M 1,STRING execute the string as if typed to EDIT +IT (DO) 2 ITerate the execute string (arg 1) arg 2 times + +Cursor commands + +UC make cursor commands available +CU 1,ATOM set atom to CUrrent cursor position +GO 1,CURSOR GO to the specified cursor position +PC none Print Cursor positions in the current object +PA none Print All cursor positions in the toplevel object +KC 1,ATOM Kill the Cursor assigned to the atom + +^F returns you to EDIT from a higher level. +The atom * may be used as a FIX argument whose value is the largest +legal value for that command. diff --git a/doc/mudbug/trace.info b/doc/mudbug/trace.info new file mode 100644 index 0000000000000000000000000000000000000000..ea3bb777936309938ef29f8015f35e0ad87e6591 GIT binary patch literal 2623 zcmZWr!EW0)5bd?R?hnjj4@m$eL9vGdn;?LbC|RRfJ8<LzInoqmaVwJoNyYWw_YEmK zZVMERC6dFLH}AbswV2$MM5oncLZ2@G{&e~I^O^X#(6XlgmiM>I$Ezysm@n?j1vSQp zcp=2cs?}ummh$4(`EP+%J9;Ur#}i}M6tTWGZ`zWKZbQ+LiGf^K)A~(zg-~tW^}6N- znF8_SKSa)Iat&24%iBeP=*NH0%UQK}ElAp0R1eG9T{WH0E{Kpz(8K`($*!YTzG-Zt z$@BBmYxVkEazshZU{y5E(zZ3K6}|S2^P7AmdZ{?={hpA+dW|ib-n8FQXJYI$h3E$r z2fQ^wD6eHi726ht2Dj0%<tQc)2h?@SHPxh$PlyKD>F;u5tiIH>i42p-Tgk2d*D6wN zJpOdMoB;LS*qBRWSP~u#!1yymLegvTzLb9L!SXuv2#8j6y8=1#l{?yUCd%1p>;ULo zzDLMFrpY@Hl2V{>c@!^P<klO@*vSOv5P$%BpQ(V_Lj-6w8T1~|DLiG!8JFi}CC~z< z2h->A>*R^Mvu%MRV19>=23zBqH;#dAZ4}7l6EXmQ42_@&zz~5o)na+~=lL|9$l$lA zNxs84W+Fpy%HYl*T%W42as&EoO>EPhYVcm$NI^$nwB{?cRBgI@2z32eR#ZI9=Q+6> zfuCYJJHK6&lP{q0Uk{U~my%A;_~r9rI;-%q67yyC%hT@%zLtyI`AhjzkP0ZQG<a=* zW#R#gHYGduHw&qkJ{mQ2(jS;i8@a<-v2nF&Ozsq#kctAem=8d3k7e$R?0fIPJm5p2 za}l}3b_n7c2Y)M_ihbQw-O$J^2~rTlg9}y=$v23AfTstq1y{q3PmS9jE@+QbK?j)f z&xBF#<_JzAylWbC2aL^CuuPe2VCWaHdv8KxWv3u$kUM^xsyOQ18Ix`{uSkk8m?&3J zIV;)K4E2DdlQ&$!!LYMnUN=(30{=(ZjXE8#Nz@O5S<7ArtAo6lp8O&UeD4g&h4^Z# zl@39|VgOdY4(1X?FjnCd3=!sGU8K8zlbNM@*%wcc%#k+vk(~h=cNQp2XZJA7(T~=h zTgi?bYm7Z|G@WC=o3dVmR31E0S|DpU2M7bDQ<Nd<X6P(3Eiz?TSSt<RQ?0aX><fcp z?Z}vvf~5HxCuEig;_Ur*Wo#YLZcdMqJlUcQ(tDF29q=DzR?r`W%ge>0tVFV`PP4b~ z+>qU6Ypmr0Lu9J{ss~&H%3&RxTUtootkdrC=2L{;%bTs((e=$4h6l_W-O^11I;GwX zJ{<$!#35utg)0OiJOQ}ca0TGeGET2|J-H#BKX_XQhwFG%Y&F~!K&82n1n5+9988S& zD^kTPO^|qU)B`Gsi10s92BJo{hA!o=+@|kzgwqoyltuE*ak$oi*|`1$m-`_hCm{5- zmmBu=DTXA@WIF^evGitY)CNS}XPW~!Y|Gfn|9H4NFB;he&BQp+{BU|-MG3{9AR5~! zMYF-!!R`Yoc$xx3U5`5B)p7jx4y|KVqD7f(>FB`_>mAG+v!P2<bKVH$2G8lVQsJ{C z@e(y$PiFTJKbtXKz?*K+?;Ca!;!goI8?beHoh1E$n$~H!dmfYcjxido%@sb4Ln}?0 z^U31zC5<gqQ!SsLO6H98>tO@(flI7_U(`nRfU%D61gz`tS`9pbV6xKgfI2=5Fz4Vw zFz)eV0reWR=*4UdyqyO*WA}3&oD{mo3)yzOW)c8#Sl=<!g~-;E2gCk~wC!*?qt^Ew U&kL468**}CHkkJ*cJblE4-Qdoi2wiq literal 0 HcmV?d00001 diff --git a/doc/mudbug/trace.order b/doc/mudbug/trace.order new file mode 100644 index 0000000000000000000000000000000000000000..a4df3e9cdbc6fc5a055479b9bcc7d6b5ba1af3d2 GIT binary patch literal 2278 zcmZuy+iv4F5bd+RVz3YE4dAFvo9#mqxJVjjVYIOqj#8kHltfu<BvK%$?CS4(hLn71 z9Uwp=i8E*BTzL0&yIN<-hivF1-DTVR-<MSNy70>AOD$TtAaAHNB*>|@Yb1Fq3VA~$ z?9S0Q)ijh#`Z$v%8J$S&?Jy^yOL`YgFY%1zcjeRM?sa{(dZ=Kf^TwifE%)8IuQs+7 zO`0U@O}2cwNv=|Qa(!-H=rG{~j9L{nQ0kc{iN;(=*$A-^8g)FQ4A9Fo`8lO+EE5mb z;$7ms)Km_bSrwvb25OXk!&Lt}e@l7q6RxH7E^a{STII@5$HP&6X{s=is47`_)Uu%~ z=GlDBR-1L4C~kd0omJX998iv&@2e^RjZ16Azys{mJ3tE5cb<z+8z5%Nk<!jf0V1kE zm)?Ocev>A@q?FYX8y5JjP=!p#6l0O^LNy|1Vhzna{xNnIQ0EeRQO1TTm~<wXKs<HA zdR6p|uzLh4aRV0`-0)Yc_2t8MdH)BLl3OX>0Ka02gF?913D=(@)7ZMHs*CY_kS5N5 z+;@qLvZh#PbaYCGLz~y^^316dDV{%did9rzS_oGby=NXzu(CRii;RH(T5caUFUx?J zzlT5i7C0SU{Rk<sWtcukEw4doY@-#-0g2r7o_mDt!d5BqUzvgSdS2<sd!&qa2Pw=T z_IdQ=5Z(unqU)@Ikc7uEZ`x3i-Li*6aki6*SR=sbJTQ(K@U+<wZ!_#=!DWI`BOrbW z6g#P<4V^%UwNT2p8uC<r=Gcq!mPF&soTU&`hQ)(q*t4{c52KM8I3z34Hy-oz@V>Wz ztw*J@Fy?Vk!Eh!E@F3%2c#Ief=*#;)n&s1>>D}UD5ju03$+^LNN0!|?D`*FRHltrg zC$^#tbQMOIidjVH<ben-a&YK5c!HSwF|>HC3<Q*Na&eA|AO<?-(ku8o`0D&jv%4?9 zVcga8azWSWPdwo<VgH$q`$bPgF<g_AJcwhf7hO->jt;2^5tdlNDyCTgACidcFldC9 zp^BG24=Nn_m@bEL$Ed*v?)5;rZ*v$7-QuS(MGQFC$wF0X{Pb_rhZphb5S`;|)`Z@( zt~d~5Fpd)br$;*SlgU#t9V=y>pJOe)4k#Oe&y<%fL=Ycvss>{)J<(<(Cuwq>PV+aI zn4z!MkIQw&*PHWhj!NWe(>Enk35wPCkckNMgL8QP80e_3bcuKf4fp(Dw<HDbGS?S{ zbdHDEOOb<T&LuEgR9UAAxCE<+%s4NKH*~!Z@g?A=4zuFrJYv0k-aPX8LvCJuz91k( zKo_+vBYP1SHweJ3EQTUp54@X3R-S9L$Ty|a<a0{X)xMw}v5bqtK^4*txXJYHmgZsN zKUXgqw>q^(WX4onkz;k5)ltz~i}m0}m~QP~Q+np;EG6Gk@X2w8qB2-~etmp+{c;;u OyjnkP(hrLt@bfSCNb+z1 literal 0 HcmV?d00001 diff --git a/src/libmud/nl.2 b/src/libmud/nl.2 new file mode 100644 index 00000000..f6537a64 --- /dev/null +++ b/src/libmud/nl.2 @@ -0,0 +1,211 @@ +<PACKAGE "L"> + +<ENTRY L-LISTE L-COUNTE L-LISTP L-COUNTP L-PATH L-OBL L-LISTPE L-FILE L-WHERE + GET-ENTRIES GET-PACKAGES> + +<USE "LIB" "PKG" "SORTX"> + +;"List all entries in a library" + +<DEFINE L-LISTE ("OPTIONAL" (LN <COND (<G? ,MUDDLE 100> + "<MDLLIB>LIBMUD") + ("LIBMUD;LIBMUD")>) (OUTCHAN .OUTCHAN) + "AUX" (DB <>)) + #DECL ((LN) STRING (OUTCHAN) CHANNEL) + <UNWIND + <COND + (<SET DB <DB-OPEN .LN>> + <MAPF <> + <FUNCTION ("AUX" X) + <COND (<SET X <NEXT-ENTRY .DB>> <PRINT .X>) (<MAPLEAVE>)>>> + <DB-CLOSE .DB> + ,NULL)> + <COND (.DB <DB-CLOSE .DB>)>>> + +;"Count all entries" + +<DEFINE L-COUNTE ("OPTIONAL" (LN <COND (<G? ,MUDDLE 100> "<MDLLIB>LIBMUD") + ("LIBMUD;LIBMUD")>) + "AUX" (DB <>) (CT 0)) + #DECL ((LN) STRING (DB) <OR DATA-BASE FALSE> (CT) FIX) + <UNWIND + <COND + (<SET DB <DB-OPEN .LN>> + <MAPF <> + <FUNCTION () + <COND (<NEXT-ENTRY .DB> <SET CT <+ .CT 1>>) + (<MAPLEAVE>)>>> + <DB-CLOSE .DB> + .CT)> + <COND (.DB <DB-CLOSE .DB>)>>> + +;"List all packages" + +<DEFINE L-LISTP ("OPTIONAL" (LN <COND (<G? ,MUDDLE 100> "<MDLLIB>LIBMUD") + ("LIBMUD;LIBMUD")>) (OUTCHAN .OUTCHAN) + "AUX" (DB <>)) + #DECL ((LN) STRING (DB) <OR DATA-BASE FALSE> (OUTCHAN) CHANNEL) + <UNWIND + <COND + (<SET DB <DB-OPEN .LN>> + <MAPF <> + <FUNCTION ("AUX" X) + <COND (<SET X <NEXT-PACKAGE .DB>> <PRINT .X>) + (<MAPLEAVE>)>>> + <DB-CLOSE .DB> + ,NULL)> + <COND (.DB <DB-CLOSE .DB>)>>> + +;"Count packages" + +<DEFINE L-COUNTP ("OPTIONAL" (LN <COND (<G? ,MUDDLE 100> "<MDLLIB>LIBMUD") + ("LIBMUD;LIBMUD")>) + "AUX" (CT 0) (DB <>)) + #DECL ((LN) STRING (CT) FIX (DB) <OR DATA-BASE FALSE>) + <UNWIND + <COND + (<SET DB <DB-OPEN .LN>> + <MAPF <> + <FUNCTION () + <COND (<NEXT-PACKAGE .DB> <SET CT <+ .CT 1>>) + (<MAPLEAVE>)>>> + <DB-CLOSE .DB> + .CT)> + <COND (.DB <DB-CLOSE .DB>)>>> + +;"Current path" + +<DEFINE L-PATH ("AUX" (OUTCHAN .OUTCHAN)) + #DECL ((OUTCHAN) CHANNEL) + <MAPF <> <FUNCTION (X) #DECL ((X) OBLIST) <PRINT <GET .X OBLIST>>> .OBLIST> + ,NULL> + +;"Oblist name for an atom" + +<DEFINE L-OBL (ATM) #DECL ((ATM) ATOM) <GET <OBLIST? .ATM> OBLIST>> + +;"List entries for specified package" + +<DEFINE L-LISTPE (PN + "OPTIONAL" (LN <COND (<G? ,MUDDLE 100> "<MDLLIB>LIBMUD") + ("LIBMUD;LIBMUD")>) (OUTCHAN .OUTCHAN) + "AUX" PV) + #DECL ((PN LN) STRING (OUTCHAN) CHANNEL + (PV) <OR <VECTOR ANY ANY ANY LIST LIST> FALSE>) + <COND + (<SET PV <DEFER-FIND .PN .LN>> + <COND (<NOT <EMPTY? <4 .PV>>> <LP <4 .PV> "Entries:" .OUTCHAN>)> + <COND (<NOT <EMPTY? <5 .PV>>> <LP <5 .PV> "Rentries:" .OUTCHAN>)> + ,NULL)>> + +;"List file name" + +<DEFINE L-FILE (PN "OPTIONAL" (LN <COND (<G? ,MUDDLE 100> "<MDLLIB>LIBMUD") + ("LIBMUD;LIBMUD")>)) + #DECL ((PN LN) STRING) + <PACKAGE-FIND .PN .LN>> + +;"Find real file for package" + +<DEFINE L-WHERE (NAM "OPTIONAL" (LP ,L-SEARCH-PATH) "AUX" CH) + #DECL ((NAM) STRING (LP) <LIST [REST <OR VECTOR STRING>]> (VALUE) <VECTOR [4 STRING]> + (CH) <OR CHANNEL FALSE> (VALUE) <OR FALSE <VECTOR [4 STRING]>>) + <COND (<SET CH <SEARCH .NAM .LP>> + <CLOSE .CH> + [<7 .CH> <8 .CH> <9 .CH> <10 .CH>])>> + +<DEFINE LP (LST HD CHN) + #DECL ((LST) LIST (HD) STRING (CHN) CHANNEL) + <CRLF .CHN> + <PRINC .HD .CHN> + <CRLF .CHN> + <MAPF <> <FUNCTION (X) <PRINC " " .CHN> <PRINC .X .CHN> <CRLF .CHN>> .LST>> + +<SETG HASH-BITS <BITS 12 24>> + +<SETG BUCK-BITS <BITS 24 0>> + +<MANIFEST HASH-BITS BUCK-BITS> + +;"Generate all entries, one at a time" + +<DEFINE NEXT-ENTRY (DB "AUX" HB NB FX UV) + #DECL ((DB) DATA-BASE (HB NB FX) FIX (UV) <UVECTOR [REST FIX]>) + <SET FX <DB-FLEN .DB>> + <SET UV <DB-HASH-MAP .DB>> + <COND + (<0? .FX> <SET HB <+ ,HDRLEN <NTH .UV <+ ,HLEN1 1>>>> <SET NB 0>) + (<SET HB <CHTYPE <GETBITS .FX ,HASH-BITS> FIX>> ;"Current hash bucket" + <SET NB <CHTYPE <GETBITS .FX ,BUCK-BITS> FIX>> ;"Current bucket entry")> + <REPEAT () + <COND + (<0? .NB> ;"Empty, so go to next hash bucket" + <SET UV <DB-HASH-MAP .DB>> + <COND + (<G? + <SET HB <+ .HB 1>> + <+ <NTH .UV <+ ,HLEN2 1>> <NTH .UV <+ ,HLEN1 1>> ,HDRLEN>> + <RETURN <>>) + (T <SET NB <NTH .UV .HB>> ;"Beginning of next bucket")>) + (<SET UV <DB-ACCESS .DB .NB>> + <SET NB <PTRHACK .UV ,BUCKET>> + <PUT .DB ,DB-FLEN <CHTYPE <PUTBITS .NB ,HASH-BITS .HB> FIX>> + <RETURN <MAKE-STRING <REST .UV ,FUNCTION-NAMEBEG> <LENHACK .UV ,BUCKET>>>)>>> + +;"Generate all packages, one at a time" + +<DEFINE NEXT-PACKAGE (DB "AUX" FX HB NB UV) + #DECL ((DB) DATA-BASE (FX HB NB) FIX (UV) <UVECTOR [REST FIX]>) + <SET FX <DB-FLEN .DB>> + <COND + (<0? .FX> <SET HB ,HDRLEN> <SET NB 0>) + (<SET HB <CHTYPE <GETBITS .FX ,HASH-BITS> FIX>> + <SET NB <CHTYPE <GETBITS .FX ,BUCK-BITS> FIX>>)> + <REPEAT () + <SET UV <DB-HASH-MAP .DB>> + <COND + (<0? .NB> + <COND + (<G? <SET HB <+ .HB 1>> <+ ,HDRLEN <NTH .UV <+ ,HLEN1 1>>>> <RETURN <>>) + (T <SET NB <NTH .UV .HB>>)>) + (T + <SET UV <DB-ACCESS .DB .NB>> + <SET NB <PTRHACK .UV ,BUCKET>> + <PUT .DB ,DB-FLEN <CHTYPE <PUTBITS .NB ,HASH-BITS .HB> FIX>> + <RETURN <MAKE-STRING <REST .UV ,PACKAGE-NAMEBEG> <LENHACK .UV ,BUCKET>>>)>>> + +<DEFINE GET-PACKAGES ("OPTIONAL" (LN <COND (<G? ,MUDDLE 100> "<MDLLIB>LIBMUD") + ("LIBMUD;LIBMUD")>) + "AUX" (DB <>) VAL) + #DECL ((LN) STRING (DB) <OR FALSE DATA-BASE>) + <UNWIND + <COND + (<SET DB <DB-OPEN .LN>> + <SET VAL + <MAPF ,VECTOR + <FUNCTION ("AUX" X) + <COND (<SET X <NEXT-PACKAGE .DB>> <STRING .X>) + (<MAPSTOP>)>>>> + <SORT <> .VAL> + <DB-CLOSE .DB> + .VAL)> + <COND (.DB <DB-CLOSE .DB>)>>> + +<DEFINE GET-ENTRIES ("OPTIONAL" (LN <COND (<G? ,MUDDLE 100> "<MDLLIB>LIBMUD") + ("LIBMUD;LIBMUD")>) + "AUX" (DB <>) VAL) + #DECL ((LN) STRING (DB) <OR FALSE DATA-BASE>) + <UNWIND + <COND + (<SET DB <DB-OPEN .LN>> + <SET VAL + <MAPF ,VECTOR + <FUNCTION ("AUX" X) + <COND (<SET X <NEXT-ENTRY .DB>> <STRING .X>) + (<MAPSTOP>)>>>> + <SORT <> .VAL> + <DB-CLOSE .DB> + .VAL)> + <COND (.DB <DB-CLOSE .DB>)>>> + +<ENDPACKAGE> \ No newline at end of file diff --git a/src/libmud/nlib.17 b/src/libmud/nlib.17 new file mode 100644 index 00000000..ba9e4fec --- /dev/null +++ b/src/libmud/nlib.17 @@ -0,0 +1,713 @@ + +"SUBTITLE Data base definitions" + +<PACKAGE "LIB"> +<ENTRY DATA-BASE DB-RESET DB-OPEN DB-CLOSE DB-ACCESS DB-HASH-MAP> +<ENTRY DB-DATA DB-CHAN DB-FLEN DB-CPAGE DB-PAGE0 DB-PAGE1> +<ENTRY PACKAGE-FIND ENTRY-FIND DEFER-FIND> +<ENTRY FILNAM LASTUP LASTGC FREEPT HLEN1 HLEN2 HDRLEN> +<ENTRY BUCKET FCNCHAIN FUNCTION-NAMEBEG PACKAGE-NAMEBEG DB-MIN-ENTRY> +<ENTRY PACKAGE-CRDATE PACKAGE-ACCESS PACKAGE-ENTLEN> +<ENTRY LENHACK PTRHACK TYPHACK DEFINF> +<ENTRY LENGET PTRGET TYPGET CRDATE> +<ENTRY GET-NAME GET-FILE GET-PACKAGE RPACKAGE?> +<ENTRY ATOM=? STRING=? MAKE-STRING HASH-NAME> +<ENTRY DATA-BASES> +<ENTRY DEF-RP? DEF-PNM DEF-FNM DEF-EL DEF-REL DEF-CRDATE DEF-ACCPTR DEF-ENTLEN DEFINF> +; +"The data base consists of a single file, divided into four areas: +1) Header: pointer to free chain, lengths of hash tables, last update, +etc. +2) Package hash table: each entry points to first element of a hash +bucket. +3) Function hash table +4) Data area +The first three areas occupy 1024 words. + +The last two words of each page are occupied by dope words, so these crocks +can be accessed as uvectors. +It is assumed that no single entry will ever cross a page boundary. + +Data area formats: +A package entry is: + entry type|name length (#words)|next entry in bucket + package type+file name length (#chars)|first entry in function chain + package name (n words) + file name (asciz) + +A function entry is: + entry type|name length (#words)|next entry in bucket + 0|next function chain + function name (n words) + pointer to package entry + +Thus, the entry for each package points to a chain of all the entries +for that package. This is used for USE-DEFER. Dynamic loading is +accomplished by going from the function entry back to the package entry +to find the file to load. +Note that there can only be one entry for any given package name, but +there may be many for a given function name." + +<SETG HDRLEN 6> + +<SETG FILNAM 0> + +;"Should be sixbit LIBMUD" + +<SETG LASTUP 1> + +;"Last time updated" + +<SETG LASTGC 2> + +;"Last time compacted" + +<SETG FREEPT 3> + +;"Pointer to free chain" + +<SETG HLEN1 4> + +;"Length of package hash table" + +<SETG HLEN2 5> + +<MANIFEST HDRLEN FILNAM LASTUP LASTGC FREEPT HLEN1 HLEN2> + +;"Length of function hash table" + +<SETG BUCKET 0> + +<SETG FCNCHAIN 1> + +<SETG FUNCTION-NAMEBEG 2> + +<SETG PACKAGE-CRDATE 2> +<SETG PACKAGE-ACCESS 3> +<SETG PACKAGE-ENTLEN 4> +<MANIFEST PACKAGE-CRDATE PACKAGE-ACCESS PACKAGE-ENTLEN> + +<SETG PACKAGE-NAMEBEG 5> + +<MANIFEST BUCKET FCNCHAIN FUNCTION-NAMEBEG PACKAGE-NAMEBEG> + +<SETG PTRGET <BITS 25 0>> + +;"Byte pointer to get next bucket or next function" + +<SETG LENGET <BITS 10 25>> + +;"Byte pointer to extract a length" + +<SETG TYPGET <BITS 1 35>> + +;"Byte pointer to extract a type" + +<MANIFEST PTRGET LENGET TYPGET> + +" " + +"SUBTITLE In-core representation of data base" + +<NEWTYPE DATA-BASE + VECTOR + '<<PRIMTYPE VECTOR> CHANNEL FIX FIX FIX FIX + <UVECTOR [REST FIX]> <PRIMTYPE WORD> FIX>> + +<SETG DB-CHAN 1> + +;"Channel to data base" + +<SETG DB-BUF 2> + +;"Address of buffer in core (0 if none there)" + +<SETG DB-PAGE0 3> + +;"File page # of buffer page 0" + +<SETG DB-PAGE1 4> + +;"File page # of buffer page 1" + +<SETG DB-CPAGE 5> + +;"-1 if no pages mapped; otherwise 0 or 1, depending on which one DB-DATA +points to (sort of lru hack)." + +<SETG DB-DATA 6> + +;"Uvector pointer to place accessed to" + +<SETG DB-BITS 7> + +"Bits for corblk--used in DB-BITS field" + +<SETG DB-FLEN 8> + +"Length of file" + +<MANIFEST DB-CHAN DB-BUF DB-PAGE0 DB-PAGE1 DB-CPAGE DB-DATA DB-BITS DB-FLEN> + +<SETG CBNDR *10000*> + +<SETG CBNDW 32768> + +<MANIFEST CBRED CBNDW> + +<SETG PMRD *100000*> +<SETG PMWR *140000*> +<MANIFEST PMRD PMWR> ; "10x versions" + +<OR <GASSIGNED? DATA-BASES> <SETG DATA-BASES ()>> +<GDECL (DATA-BASES) LIST> +" " +"SUBTITLE What DEFER-FIND returns" +<PUT DEFINF DECL '<VECTOR <OR ATOM FALSE> STRING STRING [2 <LIST [REST STRING]>] + [REST FIX]>> + +<SETG DEF-RP? 1> +<SETG DEF-PNM 2> +<SETG DEF-FNM 3> +<SETG DEF-EL 4> +<SETG DEF-REL 5> +<SETG DEF-CRDATE 6> +<SETG DEF-ACCPTR 7> +<SETG DEF-ENTLEN 8> +<MANIFEST DEF-RP? DEF-PNM DEF-FNM DEF-EL DEF-REL DEF-CRDATE DEF-ACCPTR DEF-ENTLEN> +" " +"SUBTITLE Data base primitives" +"Primitive operations on data base: open, close, access, reset, print, etc." +"All known data bases are kept on list DATA-BASES, as pairs: string, +data base." + +"Print a data base" +<DEFINE DB-PRINT (DB "AUX" (OUTCHAN .OUTCHAN) FOO CP) + #DECL ((DB) DATA-BASE (CP) FIX) + <PRINC "#DATA-BASE ["> + <COND (<NOT <0? <1 <SET FOO <DB-CHAN .DB>>>>> + <COND (<IFN20X <==? <DB-BITS .DB> ,PMWR> + <==? <DB-BITS .DB> ,CBNDW>> + <PRINC "->">) + (<PRINC "<-">)>)> + <PRINC !\"> + <PRINC <9 .FOO>> + <IFN20X <BIND () + <PRINC ":<"> + <PRINC <10 .FOO>> + <PRINC !\>> + <PRINC <7 .FOO>> + <PRINC !\.> + <PRINC <8 .FOO>>> + <BIND () + <PRINC !\:> + <PRINC <10 .FOO>> + <PRINC !\;> + <PRINC <7 .FOO>> + <PRINC !\ > + <PRINC <8 .FOO>>>> + <PRINC !\"> + <COND (<NOT <0? <SET FOO <DB-BUF .DB>>>> + <PRINC !\ > + <PRIN1 </ .FOO *2000*>> + <COND (<G=? <DB-CPAGE .DB> 0> + <PRINC !\ > + <PRIN1 <DB-PAGE0 .DB>> + <COND (<0? <DB-CPAGE .DB>> + <SET CP <DB-PAGE0 .DB>> + <PRINC !\*>)> + <PRINC !\ > + <PRIN1 <DB-PAGE1 .DB>> + <COND (<1? <DB-CPAGE .DB>> + <SET CP <DB-PAGE1 .DB>> + <PRINC !\*>)> + <PRINC " \""> + <COND (<0? .CP> + <PRINC "--HASH--">) + (<0? <NTH <DB-DATA .DB> <COND (<PACKAGE? <DB-DATA .DB>> + <+ ,PACKAGE-NAMEBEG 1>) + (<+ ,FUNCTION-NAMEBEG 1>)>>> + <PRINC "--FREE--">) + (<PRINC <GET-NAME <DB-DATA .DB>>>)> + <PRINC !\">)>)> + <PRINC !\]>> + +<PRINTTYPE DATA-BASE ,DB-PRINT> + +"Put data base with specified name on list if not already there, open +it, map in hash table, etc." +<DEFINE DB-OPEN (NAME "OPTIONAL" (MODE "READB") (DB <>) "AUX" (NM2 ,L-LIBRARY-NAME) + (DEV "DSK") CH (DBL ,DATA-BASES) TL) + #DECL ((NAME) STRING (DB) <OR FALSE DATA-BASE> (DEV NM2) <SPECIAL STRING> + (CH) <OR CHANNEL FALSE> (DBL) <LIST [REST STRING DATA-BASE]> + (TL) <OR <LIST [REST STRING DATA-BASE]> FALSE>) + <COND (<NOT .DB> + <COND (<IFN20X <MEMQ !\< .NAME> + <MEMQ !\; .NAME>>) + (T + <SET NAME <IFN20X <STRING .DEV ":<" <SNAME> !\> .NAME> + <STRING .DEV !\: <SNAME> !\; .NAME>>>)> + <COND (<SET TL <MEMBER .NAME .DBL>> ; "Do we already know about it?" + <SET DB <2 .TL>>) + (<SET DB <CHTYPE [<CHANNEL .MODE .NAME> + 0 ; "buffer loc" + -1 ; "buffer page 0" + -1 ; "buffer page 1" + -1 ; "Nothing mapped" + '![] + <COND (<AND <N=? .MODE "PRINTB"> + <N=? .MODE "PRINTO">> + <IFN20X ,PMRD ,CBNDR>) + (<IFN20X ,PMWR ,CBNDW>)> + 0] DATA-BASE>> ; "No, so make new one" + <SETG DATA-BASES (.NAME .DB !.DBL)>)>)> + <DB-RESET .DB>> + +"Re-initialize existing data base" +<DEFINE DB-RESET (DB "AUX" (CH <DB-CHAN .DB>) UV STR) + #DECL ((DB) DATA-BASE (CH) <CHANNEL FIX> (UV) <UVECTOR [REST FIX]> + (STR) STRING) + <IFN20X + <COND (<0? <1 .CH>> + <SET STR <8 .CH>> + <REPEAT (CHR STR1 (OS .STR)) + #DECL ((CHR) CHARACTER (STR1) <OR STRING FALSE> (OS) STRING) + <COND (<EMPTY? .STR> <RETURN>)> + <COND (<OR <==? <SET CHR <1 .STR>> !\.> + <==? .CHR !\;>> + <SET STR1 <REST .STR <LENGTH .STR>>> + <COND (<==? <- <LENGTH .STR> <LENGTH .STR1>> 2> + <PUT .STR 2 !\0> + <RETURN>)> + <PUT <BACK .STR1> 1 !\0> + <SET OS + <SUBSTRUC .OS 0 <+ 1 <- <LENGTH .OS> <LENGTH .STR>>> + <REST .OS <- <- <LENGTH .STR> <LENGTH .STR1>> 2>>>> + <PUT .CH 8 .OS> + <RETURN>)> + <SET STR <REST .STR>>>)> + T> + <COND (<OR <NOT <0? <1 .CH>>> + <RESET .CH>> + <COND (<0? <DB-BUF .DB>> ; "No buffer?" + <DB-BUF-INIT .DB> ; "Get one")> + <COND (<IFN20X <==? <DB-BITS .DB> ,PMWR> + <==? <DB-BITS .DB> ,CBNDW>> ; "Write mode?" + <PUT .DB ,DB-FLEN <FILE-LENGTH <DB-CHAN .DB>>>)> + <SET UV <DB-HASH-MAP .DB>> ; "Pick up hash tables" + <COND (<N==? <1 .UV> *545142556544*> ; "'LIBMUD" + <ERROR DATA-BASE-IN-BAD-FORMAT .DB DB-RESET>)> + .DB)>> + +"Close data base: close channel, flush buffer" +<DEFINE DB-CLOSE (DB) + #DECL ((DB) DATA-BASE) + <COND (<NOT <0? <DB-BUF .DB>>> + <DB-BUF-FLUSH .DB> ; "Flush the buffer")> + <COND (<NOT <0? <1 <DB-CHAN .DB>>>> ; "Channel open?" + <CLOSE <DB-CHAN .DB>>)> + <COND (<=? <2 <DB-CHAN .DB>> "READB"> + <PUT .DB ,DB-FLEN 0>)> ; "Hack, hack" + .DB> + +"Cause hash table to be mapped (by accessing to 0)" +<DEFINE DB-HASH-MAP (DB) + #DECL ((DB) DATA-BASE) + <DB-ACCESS .DB 0>> +" " +"SUBTITLE Extract data from data base" + +"GET-NAME returns a string pointer to the name field of the supplied entry." +<DEFINE GET-NAME (UV "AUX" LEN) + #DECL ((UV) UVECTOR) + <SET LEN <LENHACK .UV ,BUCKET>> + <MAKE-STRING <REST .UV <COND (<PACKAGE? .UV> ,PACKAGE-NAMEBEG) + (,FUNCTION-NAMEBEG)>> .LEN>> + +"GET-FILE returns a string pointer to the file name for a package" +<DEFINE GET-FILE (UV "AUX" LEN) + #DECL ((UV) UVECTOR) + <SET LEN <LENHACK .UV ,BUCKET>> ; "Length of name" + <MAKE-STRING <REST .UV <+ ,PACKAGE-NAMEBEG ; "Rest off fixed header" + </ <+ .LEN 4> 5>>> + <LENHACK .UV ,FCNCHAIN>>> + +"GET-PACKAGE returns the address in the file of the package entry for +this function" +<DEFINE GET-PACKAGE (UV "AUX" LEN) + #DECL ((UV) UVECTOR) + <SET LEN <LENHACK .UV ,BUCKET>> + <PTRHACK .UV <+ ,FUNCTION-NAMEBEG + </ <+ .LEN 4> 5>>>> + +" " +"SUBTITLE Library search routines" + +"PACKAGE-FIND looks up a package in the specified data base." + +<DEFINE PACKAGE-FIND (PACKAGE DBNAME "OPTIONAL" (DEFER? <>) + "AUX" (DB <>) UV HASH BUCKET VAL) + #DECL ((PACKAGE) STRING (DB) <OR FALSE DATA-BASE> (DBNAME) <OR STRING DATA-BASE> + (UV) <UVECTOR [REST FIX]> (HASH BUCKET) FIX (DEFER?) <OR ATOM FALSE>) + <UNWIND + <COND (<COND (<TYPE? .DBNAME DATA-BASE> + <SET DB <DB-RESET .DBNAME>>) + (<SET DB <DB-OPEN .DBNAME>>)> + <SET HASH <HASH-NAME .PACKAGE <SET UV <DB-DATA .DB>> ,HLEN1>> + <SET BUCKET <NTH .UV .HASH>> + <SET VAL + <REPEAT () + <COND (<0? .BUCKET> <RETURN <>>)> + <SET UV <DB-ACCESS .DB .BUCKET>> ; "Go to bucket entry" + <COND (<STRING=? .UV .PACKAGE> + <COND (.DEFER? <RETURN .DB>) + (<RETURN <STRING <GET-FILE .UV>>>)> ;"WIN!") + (<SET BUCKET <REST-BUCKET .UV>>)>>> + <COND (<TYPE? .DBNAME DATA-BASE>) + (<OR <NOT .VAL> <NOT .DEFER?>> <DB-CLOSE .DB>)> + .VAL)> + ; "Unwinder to close db" + <COND (<AND .DB + <NOT <0? <1 <DB-CHAN .DB>>>> + <TYPE? .DBNAME STRING>> + <DB-CLOSE .DB> + <>)>>> + +<DEFINE ENTRY-FIND (ENTRY DBNAME "AUX" (DB <>) UV HASH BUCKET VAL RE?) + #DECL ((DBNAME) STRING (DB) <OR FALSE DATA-BASE> (ENTRY) <OR STRING ATOM> + (UV) <UVECTOR [REST FIX]> (HASH BUCKET) FIX (VAL) <OR FALSE LIST> + (RE?) <OR ATOM FALSE>) + <COND (<TYPE? .ENTRY ATOM> <SET ENTRY <SPNAME .ENTRY>>)> + <UNWIND + <COND (<SET DB <DB-OPEN .DBNAME>> + <SET HASH <HASH-NAME .ENTRY <SET UV <DB-DATA .DB>> ,HLEN2>> + <SET BUCKET <NTH .UV .HASH>> + <SET VAL + <MAPF ,LIST + <FUNCTION () + <COND (<0? .BUCKET> <MAPSTOP>)> + <SET UV <DB-ACCESS .DB .BUCKET>> + <COND (<ATOM=? .UV .ENTRY> + <SET RE? <ROOT? .UV>> ;"Rentry?" + <SET BUCKET <REST-BUCKET .UV>> + <SET UV <DB-ACCESS .DB <GET-PACKAGE .UV>>> + ; "Point to package entry" + <MAPRET <STRING <GET-NAME .UV>> + <STRING <GET-FILE .UV>> + <ROOT? .UV> + .RE?>) + (<SET BUCKET <REST-BUCKET .UV>> + <MAPRET>)>>>> + <DB-CLOSE .DB> + <COND (<EMPTY? .VAL> <>) + (.VAL)>)> + <COND (<AND .DB + <NOT <0? <1 <DB-CHAN .DB>>>>> + <DB-CLOSE .DB> + <>)>>> + +"DEFER-FIND returns false (if the package doesn't exist) or a list of +all the entries in the package, with the file name." + +<DEFINE DEFER-FIND (PACKAGE LIBNAM "OPTIONAL" (VERBOSE? <>) + "AUX" (DB <>) UV FILE CFCN (EL ()) (REL ()) + RP? NM CRDATE ACCPTR ENTLEN) + #DECL ((PACKAGE FILE) STRING (DB) <OR FALSE DATA-BASE> (VERBOSE? RP?) <OR ATOM FALSE> + (UV) <UVECTOR [REST FIX]> (EL REL) <LIST [REST STRING]> + (VALUE) <OR FALSE DEFINF> + (NM) STRING (LIBNAM) <OR STRING DATA-BASE> (CRDATE ACCPTR ENTLEN) FIX) + <UNWIND + <COND + (<SET DB <PACKAGE-FIND .PACKAGE .LIBNAM T>> + <SET FILE <STRING <GET-FILE <SET UV <DB-DATA .DB>>>>> + <SET RP? <ROOT? .UV>> + <SET NM <STRING <GET-NAME .UV>>> + <COND (.VERBOSE? + <SET CRDATE <NTH .UV <+ ,PACKAGE-CRDATE 1>>> + <SET ACCPTR <NTH .UV <+ ,PACKAGE-ACCESS 1>>> + <SET ENTLEN <NTH .UV <+ ,PACKAGE-ENTLEN 1>>>)> + ;"Chase down the function chain for this package" + <REPEAT () + <COND (<0? <SET CFCN <REST-FUNCTION .UV>>> + <RETURN>) + (<SET UV <DB-ACCESS .DB .CFCN>> + <COND (<ROOT? .UV> + <SET REL (<STRING <GET-NAME .UV>> !.REL)>) + (<SET EL (<STRING <GET-NAME .UV>> !.EL)>)>)>> + <COND (<TYPE? .LIBNAM STRING> <DB-CLOSE .DB>)> + <COND (.VERBOSE? + <VECTOR .RP? .NM .FILE .EL .REL .CRDATE .ACCPTR .ENTLEN>) + (T + <VECTOR .RP? .NM .FILE .EL .REL>)>)> + <COND (<AND .DB + <NOT <0? <1 <DB-CHAN .DB>>>> + <TYPE? .LIBNAM STRING>> + <DB-CLOSE .DB> + <>)>>> + +" " +"SUBTITLE Data base primitive crufties" + +; "Make a buffer for the supplied data base" +<TITLE DB-BUF-INIT> + <DECLARE ("VALUE" DATA-BASE DATA-BASE)> + <DPUSH TP* (AB)> + <PUSHJ P* IDBINIT> + <JRST FINIS> + +<INTERNAL-ENTRY IDBINIT 1> + <SUBM M* (P)> + <MOVEI A* 2> + <PUSHJ P* PGFIND> ; "Get the pages" + <JUMPLE B* [<ERRUUO* <MQUOTE NO-BUFFER-AVAILABLE>> + <JRST BUFEX>]> + <MOVE A* (TP)> + <ASH B* 10> + <MOVEM B* %<- <* 2 ,DB-BUF> 1> (A)> +BUFEX <POP TP* B> + <POP TP* A> + <JRST MPOPJ> + +; "The data base has two one-page windows. The page currently mapped into +the first is in DB-PAGE0; into the second in DB-PAGE1. DB-CPAGE is -1 if +no pages are mapped; it is 0 if the currently accessed page is the first, +1 if the second. +Algorithm: if the desired address is mapped in, set up DB-CPAGE and put a +suitable pointer into DB-DATA. If not, then pick the page not pointed to +by DB-CPAGE, map the requested page in there, and mung DB-CPAGE and DB-DATA." +<SUB-ENTRY DB-ACCESS ("VALUE" <UVECTOR [REST FIX]> DATA-BASE FIX)> + <DPUSH TP* (AB)> + <DPUSH TP* 2(AB)> + <PUSHJ P* IACCESS> + <JRST FINIS> + +<INTERNAL-ENTRY IACCESS 2> + <SUBM M* (P)> + <MOVE A* (TP)> ; "Address requested" + <ASH A* -10> ; "To page" + <MOVE F* -2(TP)> ; "Pick up the db" + <MOVEI B* 0> ; "Default page to map in to" + <SKIPGE %<- <* 2 ,DB-CPAGE> 1>(F)> ; "Anything mapped?" + <JRST DOMAP> + <CAMN A* %<- <* 2 ,DB-PAGE0> 1>(F)> ; "Is the first page a winner?" + <JRST PGSET> ; "Yes, go set everything up" + <CAMN A* %<- <* 2 ,DB-PAGE1> 1>(F)> ; "Is the second a winner?" + <AOJA B* PGSET> ; "Set everything up--B indicates which page" +DOMAP <SKIPN %<- <* 2 ,DB-CPAGE> 1>(F)> ; "If CPAGE is 0, it will be 1" + <MOVEI B* 1> + <JUMPE B* [<MOVEM A* %<- <* 2 ,DB-PAGE0> 1>(F)> + <JRST DOMAP1>]> + <MOVEM A* %<- <* 2 ,DB-PAGE1> 1>(F)> ; "Set up page map correctly" +DOMAP1 <MOVE D* %<- <* 2 ,DB-BUF> 1>(F)> ; "Get pointer to buffer page" + <MOVE E* %<- <* 2 ,DB-CHAN> 1>(F)> ; "Pick up channel" + <ASH D* -10> +<IFOPSYS (ITS + <ADDI D* (B)> ; "Make pointer to right page" + <*CALL [<SETZ> + <SIXBIT "CORBLK"> + <MOVE %<- <* 2 ,DB-BITS> 1>(F)> + <MOVEI -1> ; "%JSELF" + <MOVE D> ; "Page # in job" + <MOVE 1(E)> ; "Channel #" + <SETZ A> ; "Page of file"]> + <*LOSE *1000*> ; "Accessing past end?") + (TENEX + <ASH A* 1> ; "Get right page #" + <HRL A* 1(E)> ; "JFN" + <MOVE E* B> ; "Save B" + <ADDI B* (D)> + <ASH B* 1> ; "Right page #" + <HRLI B* *400000*> ; "Self" + <MOVS C* %<- <* 2 ,DB-BITS> 1>(F)> ; "Access desired" + <PMAP> + <ADDI A* 1> + <ADDI B* 1> + <PMAP> + <MOVE B* E>)> +; "Come to PGSET with DB in F, 0 or 1 in B. Sets up DB-CPAGE, DB-DATA. +Address requested is (TP)." +PGSET <MOVEM B* %<- <* 2 ,DB-CPAGE> 1>(F)> ; "DP-CPAGE" + <ASH B* 10> + <ADD B* %<- <* 2 ,DB-BUF> 1>(F)> ; "Address of buffer page to reference" + <MOVE D* (TP)> ; "Pick up address" + <ANDI D* *1777*> ; "Offset in page" + <ADDI B* (D)> ; "Fix up pointer" + <HRLI B* -1022(D)> ; "Put correct length in C" + <MOVEM B* %<- <* 2 ,DB-DATA> 1>(F)> ; "Stuff into DB-DATA" + <MOVSI A* <TYPE-CODE UVECTOR>> ; "Return db-data" + <SUB TP* [<(4) 4>]> ; "Flush stack" + <JRST MPOPJ> + +; "Flush buffer, unmapping pages, giving them back, etc." +<SUB-ENTRY DB-BUF-FLUSH ("VALUE" DATA-BASE DATA-BASE)> + <DPUSH TP* (AB)> + <PUSHJ P* IFLUSH> + <JRST FINIS> + +<INTERNAL-ENTRY IFLUSH 1> + <SUBM M* (P)> + <MOVE E* (TP)> + <SKIPGE %<- <* 2 ,DB-CPAGE> 1> (E)> + <JRST BUFGIV> ; "No pages mapped" + <MOVE B* %<- <* 2 ,DB-BUF> 1> (E)> ; "Address of buffer" +<IFOPSYS (ITS + <ASH B* -10> + <HRLI B* -2> + <*CALL [<SETZ> + <SIXBIT "CORBLK"> + <MOVEI 0> ; "Flush" + <MOVEI -1 > ; "%JSELF" + <SETZ B>]> + <*LOSE *1000*>) + (TENEX + <ASH B* -9> + <HRLI B* *400000*> ; "self" + <MOVNI A* 1> + <MOVEI C* 0> + <MOVNI D* 4> ; "# pages to flush" +GIVLOP <PMAP> + <AOJE D* BUFGIV> + <AOJA B* GIVLOP>)> +BUFGIV <MOVEI A* 2> + <MOVE B* %<- <* 2 ,DB-BUF> 1> (E)> + <ASH B* -10> + <PUSHJ P* PGGIVE> + <POP TP* B> + <POP TP* A> + <SETZM %<- <* 2 ,DB-BUF> 1> (B)> ; "No buffer" + <MOVE C* <MQUOTE ![]>> + <MOVEM C* %<- <* 2 ,DB-DATA> 1> (B)> ; "No data" + <SETOM %<- <* 2 ,DB-PAGE0> 1> (B)> + <SETOM %<- <* 2 ,DB-PAGE1> 1> (B)> + <SETOM %<- <* 2 ,DB-CPAGE> 1> (B)> ; "Nothing is mapped" + <JRST MPOPJ> +î<END> +" " +"SUBTITLE Library crufties" + + +; "ATOM=? takes a uvector (db pointer) and an SPNAME (==>NOT RESTED) and compares +the pname to the name field of the db entry. Called only on function entries." +<TITLE ATOM=?> +<DECLARE ("VALUE" <OR ATOM FALSE> UVECTOR STRING)> + <DPUSH TP* (AB)> + <DPUSH TP* 2(AB)> + <PUSHJ P* IATM> + <JRST FINIS> + +<INTERNAL-ENTRY IATM 2> + <SUBM M* (P)> + <HRRZ A* -1(TP)> + <MOVE B* -2(TP)> + <LDB C* [<%<CHTYPE ,LENGET OPCODE!-OP!-PACKAGE> (B) BUCKET>]> + <CAIE A* (C)> + <JRST IATMFL> + <IDIVI C* 5> + <JUMPE D* HERE 2> + <ADDI C* 1> ; "Number of words" + <MOVE A* (TP)> ; "Pointer to pname" + <MOVEI D* %,FUNCTION-NAMEBEG(B)> ; "First word of string" +IATMLP <MOVE O* 1(A)> + <CAME O* (D)> ; "Compare" + <JRST IATMFL> + <SOJE C* IATMWN> ; "Out of words?" + <ADDI A* 1> + <AOJA D* IATMLP> ; "Update pointers, go on" +IATMWN <MOVSI A* <TYPE-CODE ATOM>> + <MOVE B* <MQUOTE T>> + <JRST IATMOT> +IATMFL <MOVSI A* <TYPE-CODE FALSE>> + <MOVEI B* 0> +IATMOT <SUB TP* [<(4) 4>]> + <JRST MPOPJ> + +; "Takes the uvector, rested appropriately, and returns a string pointer +to the first thing in it." +<SUB-ENTRY MAKE-STRING ("VALUE" STRING UVECTOR FIX)> + <DPUSH TP* (AB)> + <DPUSH TP* 2(AB)> + <PUSHJ P* IMAKST> + <JRST FINIS> + +<INTERNAL-ENTRY IMAKST 2> + <SUBM M* (P)> + <MOVSI A* <TYPE-CODE STRING>> + <HRR A* (TP)> + <MOVE B* -2(TP)> + <SUBI B* 1> + <HRLI B* *10700*> + <SUB TP* [<(4) 4>]> + <JRST MPOPJ> +<END> +" " +"SUBTITLE Hashing function" + +"HASH-NAME takes a string, a uvector (the hash table, which includes the +db header), and a fix, which is the offset in the uv of the hash table +length. It returns a fix." + +<TITLE HASH-NAME> + <DECLARE ("VALUE" FIX STRING UVECTOR FIX)> + <DPUSH TP* (AB)> + <DPUSH TP* 2(AB)> + <DPUSH TP* 4(AB)> + <PUSHJ P* IHASH> + <JRST FINIS> + +<INTERNAL-ENTRY IHASH 3> + <SUBM M* (P)> + <HRRZ A* -5(TP)> ; "String length" + <MOVE C* -4(TP)> ; "String" + <MOVEI B* 0> ; "Accumulate hash" +HASHLP1 <MOVEI D* 0> ; "Accumulate a word of ascii" + <MOVE E* [<(*440700*) D>]> +HASHLP <ILDB O* C> ; "Pick up a character" + <IDPB O* E> + <SOJE A* STRDON> ; "All out?" + <TLNE E* *760000*> ; "Filled up D?" + <JRST HASHLP> ; "No" + <XOR B* D> ; "XOR this word in" + <JRST HASHLP1> +STRDON <XOR B* D> + <MOVE D* -2(TP)> + <ADD D* (TP)> + <IDIV B* (D)> ; "Compute the hash" + <JUMPGE C* HERE 2> + <ADD C* (D)> + <ADDI C* %<+ ,HDRLEN 1>> ; "Add header length" + <MOVE A* (TP)> + <CAIE A* %,HLEN1> + <ADD C* -1(D)> ; "Add 1st table len if accessing 2nd" + <MOVE B* C> + <MOVSI A* <TYPE-CODE FIX>> + <SUB TP* [<(6) 6>]> + <JRST MPOPJ> +<END> +" " +"SUBTITLE Creation date" +<TITLE CRDATE> +<DECLARE ("VALUE" FIX CHANNEL)> + <DPUSH TP* (AB)> + <PUSHJ P* ICR> + <JRST FINIS> + +<INTERNAL-ENTRY ICR 1> + <SUBM M* (P)> + <MOVE A* (TP)> + <IFOPSYS + (ITS + <*CALL [<SETZ> + <SIXBIT "RFDATE"> + <MOVE 1(A)> + <SETZM B>]> + <MOVNI B* 1>) + (TENEX + <MOVE A* 1(A)> ; "JFN to A" + <MOVE B* [<(1) *13*>]>; "Get creation date" + <MOVEI C* B> ; "Into B" + <GTFDB>)> + <MOVSI A* <TYPE-CODE FIX>> + <SUB TP* [<(2) 2>]> + <JRST MPOPJ> +<END> +<ENDPACKAGE> diff --git a/src/libmud/nlibma.1 b/src/libmud/nlibma.1 new file mode 100644 index 00000000..4eb5d88b --- /dev/null +++ b/src/libmud/nlibma.1 @@ -0,0 +1,63 @@ +<PACKAGE "LIB"> + +"MACRO definitions for LIB." + +<DEFINE DO-PUT (UV OFFS BPTR NEW) + <FORM PUT + .UV + <FORM + .OFFS 1> + <FORM PUTBITS <FORM NTH .UV <FORM + .OFFS 1>> .BPTR .NEW>>> + +<DEFINE DO-GET (UV OFFS BPTR) + <FORM CHTYPE <FORM GETBITS <FORM NTH .UV <FORM + .OFFS 1>> .BPTR> FIX>> + +<DEFMAC IFN20X ('20X 'ITS) + <COND (<GASSIGNED? ITS?!- > + <COND (,ITS?!- .ITS) + (.20X)>) + (T + <FORM COND (<FORM G? ,MUDDLE 100> .20X) + (.ITS)>)>> + +<DEFMAC PTRHACK ('UV 'OFFS "OPTIONAL" 'NEW) + <COND (<ASSIGNED? NEW> + <DO-PUT .UV .OFFS ,PTRGET .NEW>) + (<DO-GET .UV .OFFS ,PTRGET>)>> + +<DEFMAC LENHACK ('UV 'OFFS "OPTIONAL" 'NEW) + <COND (<ASSIGNED? NEW> <DO-PUT .UV .OFFS ,LENGET .NEW>) + (<DO-GET .UV .OFFS ,LENGET>)>> + +<DEFMAC TYPHACK ('UV 'OFFS "OPTIONAL" 'NEW) + <COND (<ASSIGNED? NEW> + <DO-PUT .UV .OFFS ,TYPGET .NEW>) + (<DO-GET .UV .OFFS ,TYPGET>)>> + +" " + +"SUBTITLE Primitives to extract stuff from in-core data base" + +"REST-BUCKET returns the address in the file of the next entry in the bucket" + +<DEFMAC REST-BUCKET ('UV) + <FORM CHTYPE <FORM GETBITS <FORM <+ ,BUCKET 1> .UV> ,PTRGET> FIX>> + +"REST-FUNCTION returns the address of the next element in the function chain" + +<DEFMAC REST-FUNCTION ('UV) + <FORM CHTYPE <FORM GETBITS <FORM <+ ,FCNCHAIN 1> .UV> ,PTRGET> FIX>> + +"ROOT? returns T if the package is an rpackage or if the entry is an rentry." + +<DEFMAC ROOT? ('UV) + <FORM 1? <FORM CHTYPE <FORM GETBITS <FORM <+ ,FCNCHAIN 1> .UV> ,TYPGET> FIX>>> + +"Returns T if this entry is for a package rather than for an entry" +<DEFMAC PACKAGE? ('UV) + <FORM 1? <FORM CHTYPE <FORM GETBITS <FORM <+ ,BUCKET 1> .UV> ,TYPGET> FIX>>> + +"Compare supplied string to name field of db entry" +<DEFMAC STRING=? ('DBDATA 'STR) + <FORM =? <FORM GET-NAME .DBDATA> .STR>> + +<ENDPACKAGE> diff --git a/src/libmud/nlup.72 b/src/libmud/nlup.72 new file mode 100644 index 00000000..173a0a78 --- /dev/null +++ b/src/libmud/nlup.72 @@ -0,0 +1,1697 @@ + +<PACKAGE "LUP"> + +<ENTRY LUP-ACT + LUP-DCT + LUP-ADD-PACK + LUP-ADD-DATUM + LUP-DEL + LIB-GC + LIB-STAT + DO-ADD + FLUSH-CURRENT-PACKAGE> + +<ENTRY CUR-TYPE CUR-UPD> + +"Stuff for doing library updates: add, delete package, garbage-collect +a data base, initialize a data base, etc." + +<USE "LIB"> + +<FLOAD "LIBMUD;NLUPCRF NBIN"> + +<GDECL (MUDDLE) FIX> +î +;"dskdate &c." + +<NEWTYPE UPDB + VECTOR + '<<PRIMTYPE VECTOR> DATA-BASE + <OR FALSE DATA-BASE> + CHANNEL + <OR CHANNEL FALSE> + CHANNEL + STRING + STRING>> + +<SETG UPDB-BASE 1> + +<SETG UPDB-NEW 2> + +<SETG UPDB-DATFILE 3> + +<SETG UPDB-NEWDAT 4> + +<SETG UPDB-LOCK 5> + +<SETG UPDB-ONAME 6> + +<SETG UPDB-NNAME 7> + +<MANIFEST UPDB-BASE + UPDB-NEW + UPDB-DATFILE + UPDB-NEWDAT + UPDB-LOCK + UPDB-ONAME + UPDB-NNAME> + +<SETG DB-MIN-ENTRY <+ ,FUNCTION-NAMEBEG 1 1>> + +<MANIFEST DB-MIN-ENTRY> + +"Smallest possible entry has two words of header, 1 of name, 1 of data." + +<SETG DB-DEAD 0> + +<SETG LOAD-CHANNEL <>> + +<GDECL (DB-DEAD) FIX (NO-ENT) FIX (LOAD-CHANNEL) <OR CHANNEL FALSE>> + +" " + +"SUBTITLE File management" + +<DEFINE LUP-ACT LA (NAME + "OPTIONAL" (TRY? T) (GC? <>) + "AUX" GB CH DB L UD NN (OUTCHAN .OUTCHAN) (SNM <SNAME>) + (NM2 ,L-LIBRARY-NAME) (MUDDLE ,MUDDLE) DATCHN + (DATCHN2 <>)) + #DECL ((UD) UPDB (NN NAME) STRING (DB) <OR DATA-BASE FALSE> (OUTCHAN) CHANNEL + (DATCHN2 DATCHN L) <OR FALSE CHANNEL> (CH) <OR CHANNEL FALSE> + (GB) <UVECTOR [REST FIX]> + (GC? TRY?) <OR ATOM FALSE> (SNM NM2) <SPECIAL STRING> (MUDDLE) FIX) + <COND (<GASSIGNED? CUR-UPD> + <COND (<G? ,DB-DEAD 0> <LUP-DCT T>) + (<PRINC "DB already active."> <CRLF> <RETURN T .LA>)>)> + <COND + (<AND <SET DB <DB-OPEN .NAME "READB">> + <OR <SET DATCHN <OPEN-DAT-FILE "READ" .NAME>> .GC?>> + <COND (<G? .MUDDLE 100> + <SET NAME <STRING !\< <6 <DB-CHAN .DB>> !\> <3 <DB-CHAN .DB>>>>) + (<SET NAME <STRING <6 <DB-CHAN .DB>> !\; <3 <DB-CHAN .DB>>>>)> + <SET SNM <6 <DB-CHAN .DB>>> + <COND (<SET L + <HARD-LOCK <COND (<G? ,MUDDLE 100> + <STRING !\< + <10 <DB-CHAN .DB>> + !\> + <7 <DB-CHAN .DB>> + ".LOCK">) + (<STRING <10 <DB-CHAN .DB>> + !\; + <7 <DB-CHAN .DB>> + " LOCK">)>>> + <COPY-FILE <DB-CHAN .DB> <SET NN <NEW-NAME <DB-CHAN .DB>>> + <> "PRINTB"> + <COND (<NOT .GC?> <SET DATCHN <COPY-FILE .DATCHN + <COND (<G? .MUDDLE 100> "ZDATA.TMP") + ("_DATA TMP")> T>>)> + <DB-CLOSE .DB> + <SET DB <DB-OPEN .NN "PRINTO">> + <DB-HASH-MAP .DB> + <PUT <DB-DATA .DB> <+ ,LASTUP 1> <DSKDATE>> + <COND (.GC? + <SET DATCHN2 <OPEN "PRINT" <COND (<G? .MUDDLE 100> "ZDATA.TMP") + ("_DATA TMP")>>> + <PUT .DATCHN2 13 *377777777777*>) + (<PUT .DATCHN 13 *377777777777*>)> + <SETG CUR-UPD <CHTYPE [.DB <> .DATCHN .DATCHN2 .L .NAME .NN] UPDB>> + <PRINC .NAME> + <PRINC " ACTIVATED"> + <CRLF> + T) + (<DB-CLOSE .DB> .L)>) + (.TRY? + <TELL "Creating new library " .NAME> + <SET CH <OPEN "PRINTB" .NAME>> + <COND (<GASSIGNED? GROW-BUF> <SET GB ,GROW-BUF>) + (<SETG GROW-BUF <SET GB <IUVECTOR 1024 0>>>)> + <PUT .GB 1023 4295229440> + <PUT .GB <+ ,FILNAM 1> -20777869980> + <PUT .GB <+ ,HLEN1 1> 251> + <PUT .GB <+ ,HLEN2 1> 751> + <PUT .GB <+ ,FREEPT 1> <+ ,HDRLEN 251 751>> + <PUT .GB + <+ ,HDRLEN 251 751 1> + <CHTYPE <PUTBITS 0 ,LENGET <- 1022 <+ ,HDRLEN 251 751>>> FIX>> + <PRINTB .GB .CH> + <MAPR <> <FUNCTION (X) <PUT .X 1 0>> .GB> + <PUT .GB 1023 4295229440> + <CLOSE .CH> + <SET CH <OPEN-DAT-FILE "PRINT" .NAME>> + <CLOSE .CH> + <LUP-ACT .NAME <>>) + (.DB)>> + +<DEFINE GET-DB ("AUX" U) + #DECL ((U) UPDB) + <COND (<GASSIGNED? CUR-UPD> <DB-OK?>) + (<LUP-ACT <COND (<G? ,MUDDLE 100> "<MDLLIB>LIBMUD") + ("LIBMUD;LIBMUD")>>)>> + +<DEFINE OPEN-DAT-FILE (MODE NAME "AUX" (NM2 ,L-DATFILE-NAME)) + #DECL ((MODE NAME) STRING (NM2) <SPECIAL STRING>) + <OPEN .MODE .NAME>> + +<DEFINE DB-OK? () + <COND (<NOT <GASSIGNED? CUR-UPD>> <>) + (<G? ,DB-DEAD 0> <ERROR DB-IN-BAD-STATE DB-OK?>) + (T)>> + +<DEFINE LUP-DCT LD ("OPTIONAL" (FLUSH? <>) "AUX" U CH DB DF (MUDDLE ,MUDDLE)) + #DECL ((DB) <OR DATA-BASE FALSE> (U) UPDB (FLUSH?) <OR ATOM FALSE> + (MUDDLE) FIX (DF) CHANNEL) + <COND (<NOT <DB-OK?>> + <PRINC "No libraries activated."> + <CRLF> + <RETURN <> .LD>)> + <SET U ,CUR-UPD> + <COND (<NOT <SET DB <UPDB-NEW .U>>> <SET DB <UPDB-BASE .U>> + <SET DF <UPDB-DATFILE .U>>) + (<SET DF <UPDB-NEWDAT .U>>)> + <DB-HASH-MAP .DB> + <COND (<OR .FLUSH? + <COND (<G? .MUDDLE 100> + <DB-CLOSE .DB> + <RENAME <FILNAME <DB-CHAN .DB> 9> + TO + <STRING <UPDB-ONAME .U> !\. ,L-LIBRARY-NAME>> + <CLOSE .DF> + <RENAME <FILNAME .DF 9> + TO + <STRING <UPDB-ONAME .U> + !\. + ,L-DATFILE-NAME>> + ;"rename while open not supported on 10x") + (<RENAME <DB-CHAN .DB> + <STRING <UPDB-ONAME .U> !\ ,L-LIBRARY-NAME>> + <RENAME .DF + <STRING <UPDB-ONAME .U> !\ ,L-DATFILE-NAME>> + <DB-CLOSE .DB> + <CLOSE .DF>)>> + <COND (.FLUSH? <RENAME <UPDB-NNAME .U>>)> + <UNLOCK <UPDB-LOCK .U>> + <SETG DATA-BASES <REST ,DATA-BASES 2>> + <COND (<UPDB-NEW .U> + <DB-CLOSE <UPDB-BASE .U>> + <RENAME <FILNAME <DB-CHAN <UPDB-BASE .U>> 9>> + <PUT .U ,UPDB-NEW <>> + <CLOSE <UPDB-DATFILE .U>> + <PUT .U ,UPDB-NEWDAT <>> + <SETG DATA-BASES <REST ,DATA-BASES 2>>)> + <GUNASSIGN CUR-UPD> + "DONE")>> + +<DEFINE NEW-NAME (CH) + #DECL ((CH) CHANNEL) + <COND (<G? ,MUDDLE 100> <STRING !\< <10 .CH> ">Z" <7 .CH>>) + (<STRING <10 .CH> ";_" <7 .CH>>)>> + +<DEFINE FILNAME (CH "OPTIONAL" (BASE 5)) + #DECL ((CH) CHANNEL (BASE) FIX) + <COND (<G? ,MUDDLE 100> + <STRING <9 .CH> + ":<" + <NTH .CH <+ .BASE 1>> + !\> + <NTH .CH <- .BASE 2>> + !\. + <NTH .CH <- .BASE 1>>>) + (T + <STRING <NTH .CH .BASE> + !\: + <NTH .CH <+ .BASE 1>> + !\; + <NTH .CH <- .BASE 2>> + !\ + <NTH .CH <- .BASE 1>>>)>> + +<DEFINE COPY-FILE (CH NAME2 "OPTIONAL" (APPEND? <>) (MODE "PRINT") + "AUX" OCH BUF) + #DECL ((CH OCH) CHANNEL (MODE NAME2) STRING (BUF) UVECTOR + (APPEND?) <OR ATOM FALSE>) + <COND (<GASSIGNED? BUF> <SET BUF ,BUF>) + (<SETG BUF <SET BUF <IUVECTOR 1024>>>)> + <SET OCH <OPEN .MODE .NAME2>> + <ACCESS .CH 0> + <REPEAT (CT) + <SET CT <MYIOT .BUF .CH>> + <COND (<0? .CT> <RETURN>)> + <MYIOT .BUF .OCH .CT> + <COND (<L? .CT 1024> <RETURN>)>> + <COND (<NOT <0? <1 .CH>>> <CLOSE .CH>)> + <COND (.APPEND? + <PUT .OCH 17 <FILE-LENGTH .OCH>>) + (<CLOSE .OCH>)>> + +<COND (<OR <NOT <GASSIGNED? NPACKAGE>> <N==? ,PACKAGE ,NPACKAGE>> + <SETG OPACKAGE ,PACKAGE> + <SETG ORPACKAGE ,RPACKAGE> + <SETG OENTRY ,ENTRY> + <AND <GASSIGNED? RENTRY> <SETG ORENTRY ,RENTRY>> + <SETG OENDPACKAGE ,ENDPACKAGE> + <SETG OUSE ,USE> + <SETG OUSE-DEFER ,USE-DEFER>)> + +" " + +"SUBTITLE Locking crap" + +<DEFINE HARD-LOCK HL (FNM "AUX" CH) + #DECL ((HL) ACTIVATION (FNM) STRING (CH) <OR CHANNEL FALSE>) + <COND (<NOT <SET CH <OPEN "READ" .FNM>>> + <COND (<OR <AND <L? ,MUDDLE 100> <==? <3 .CH> 1048576>> + <AND <G? ,MUDDLE 100> <==? <3 .CH> 196671>>> + <COND (<SET CH <OPEN "PRINT" .FNM>> <CLOSE .CH>) + (<RETURN .CH .HL>)>) + (<RETURN .CH .HL>)>) + (<CLOSE .CH>)> + <OPEN "PRINTO" .FNM>> + +<DEFINE UNLOCK (CHN) #DECL ((CHN) CHANNEL) <CLOSE .CHN>> + +" " + +"SUBTITLE Add and delete packages" + +"Add a package to the data base" + +<DEFINE LUP-ADD-PACK LAP (FILE + "OPTIONAL" (UPDATE? <>) (DATA? T) + "AUX" (IND '(1)) U CH PCK ENTL RENTL DB GRP TMP + (DID-DEL? <>) CRDATE TVAL) + #DECL ((FILE) STRING (DATA? UPDATE?) <OR ATOM FALSE> (U) UPDB (GRP) LIST + (CH) <OR CHANNEL FALSE> (PCK) <OR FALSE STRING> (TVAL) ANY + (DID-DEL?) <OR ATOM FALSE> (RENTL ENTL) <LIST [REST ATOM]> + (DB) DATA-BASE (LAP) ACTIVATION (CRDATE) FIX) + <GET-DB> + <SET U ,CUR-UPD> + <COND (<SET TVAL + <PROG () + <COND (<NOT <SET CH <OPEN "READ" .FILE>>> + <RETURN .CH>)> + <SET CRDATE <CRDATE .CH>> + <SET FILE <FILNAME .CH>> + <SET GRP <LOAD-PACKAGE .CH>>>> + <COND + (<AND <NOT <0? ,NO-ENT>> + <NOT <ERROR UNBALANCED-PACKAGES + LUP-ADD-PACK + ERRET-T-TO-CONTINUE>>>) + (<SET PCK ,CUR-PACK> + <SET ENTL ,CUR-ENTRY> + <SET RENTL ,CUR-RENTRY> + <COND + (<OR <NOT <EMPTY? .ENTL>> <NOT <EMPTY? .RENTL>>> + <COND (<NOT <SET TMP <CL .GRP>>> ;"Bless the package" + <RETURN .TMP .LAP>)> + <COND (<PACKAGE-FIND .PCK <UPDB-BASE .U> T> + <COND (<AND <NOT .UPDATE?> + <NOT <ERROR PACKAGE-ALREADY-EXISTS + ERRET-T-TO-REDEFINE + LUP-ADD-PACK>>> + <RETURN <> .LAP>)> + <SETG DB-DEAD <+ ,DB-DEAD 1>> + <SET DID-DEL? T> + <DO-DEL .PCK .U> ;"If it already exists, flush it")> + <SETG DB-DEAD <+ ,DB-DEAD 1>> + <DO-ADD .PCK .ENTL .RENTL ,CUR-USES ,CUR-USE-DEFERS + .CRDATE .FILE .U .DATA?> + <COND (.DID-DEL? <SETG DB-DEAD <- ,DB-DEAD 1>>)> + <SETG DB-DEAD <- ,DB-DEAD 1>> + <DEFER-FIND .PCK <UPDB-BASE .U> T>) + (#FALSE ("NO ENTRIES IN PACKAGE"))>) + (#FALSE ("FILE DID NOT DEFINE A PACKAGE"))>) + (T .TVAL)>> + +<DEFINE LOAD-PACKAGE LOAD-ACT (CHN "AUX" GRP (IND '(1))) + #DECL ((CHN) CHANNEL (LOAD-ACT) <SPECIAL ACTIVATION>) + <UNWIND + <PROG () + <INIT-LUP-PS> + <SETG LOAD-CHANNEL .CHN> + <SET GRP <MAPF ,LIST + <FUNCTION ("AUX" TMP) + <COND (<==? <SET TMP <READ .CHN '.IND>> .IND> <MAPSTOP>) + (T <EVAL .TMP> <MAPRET .TMP>)>>>> + <SETG LOAD-CHANNEL <>> + <UNINIT-LUP-PS> + .GRP> + <PROG () + <SETG LOAD-CHANNEL <>> + <UNINIT-LUP-PS> + <COND (<NOT <0? <1 .CHN>>> + <CLOSE .CHN>)>>>> + +<DEFINE INIT-LUP-PS () + <SETG CUR-PACK <>> + <SETG CUR-ENTRY ()> + <SETG CUR-RENTRY ()> + <SETG CUR-USES ()> + <SETG CUR-USE-DEFERS ()> + <SETG ALL-USES ()> + <SETG CUR-TYPE <>> + <SETG NO-ENT 0> + <SETG PACKAGE ,NPACKAGE> + <SETG RPACKAGE ,NRPACKAGE> + <SETG ENTRY ,NENTRY> + <SETG RENTRY ,NRENTRY> + <SETG ENDPACKAGE ,NENDPACKAGE> + <SETG USE ,NUSE> + <SETG EXTERNAL ,NUSE> + <SETG USE-DEFER ,NUSE-DEFER>> + +<DEFINE UNINIT-LUP-PS () + <SETG PACKAGE ,OPACKAGE> + <SETG RPACKAGE ,ORPACKAGE> + <SETG ENTRY ,OENTRY> + <SETG RENTRY ,ORENTRY> + <SETG ENDPACKAGE ,OENDPACKAGE> + <SETG USE ,OUSE> + <SETG EXTERNAL ,OUSE> + <SETG USE-DEFER ,OUSE-DEFER>> + +<DEFMAC STRL ('STR) <FORM STRLC <FORM LENGTH .STR>>> + +<DEFMAC STRLC ('LEN) + <FORM + + <FORM / .LEN 5> + <FORM COND (<FORM 0? <FORM MOD .LEN 5>> 0) (1)>>> +" " + +; "Magic error handler" +<DEFINE LUP-ERROR-HANDLER (FRM "TUPLE" JUNK "AUX" (OUTCHAN .OUTCHAN) O ATM) + #DECL ((FRM) FRAME (JUNK) TUPLE (OUTCHAN) CHANNEL) + <COND (<AND <NOT <EMPTY? .JUNK>> + <N==? <1 .JUNK> FILE-SYSTEM-ERROR!-ERRORS> + <N==? <1 .JUNK> CONTROL-G?!-ERRORS> + <NOT <AND <==? 3 <LENGTH .JUNK>> + <OR <AND <==? <1 .JUNK> UNASSIGNED-VARIABLE!-ERRORS> + <==? <3 .JUNK> GVAL>> + <AND <==? <1 .JUNK> UNBOUND-VARIABLE!-ERRORS> + <OR <==? <3 .JUNK> VALUE> + <==? <3 .JUNK> CALLER>>>> + <TYPE? <SET ATM <2 .JUNK>> ATOM> + <COND (<==? <SET O <OBLIST? .ATM>> <ROOT>> + <GET .ATM USE-DEFER>) + (.O <GET .O USE-DEFER>)>>> + <ASSIGNED? LOAD-ACT> + <TYPE? .LOAD-ACT ACTIVATION> + <LEGAL? .LOAD-ACT>> + <COND (<AND <GASSIGNED? CUR-PACK> + ,CUR-PACK> + <TELL "Flushing load of package " ,CUR-PACK + ": error during loading."> + <MAPF <> <FUNCTION (X) <PRINC .X> <PRINC !\ >> .JUNK> + <CRLF>) + (<TELL "Flushing load of current package:"> + <MAPF <> <FUNCTION (X) <PRINC .X> <PRINC !\ >> .JUNK> + <CRLF>)> + <COND (<G? ,NO-ENT 0> + <REPEAT ((NE ,NO-ENT)) + #DECL ((NE) FIX) + <ENDPACKAGE> + <COND (<0? <SET NE <- .NE 1>>> <RETURN>)>> + <SETG NO-ENT 0>)> + <INT-LEVEL 0> + <RETURN <CHTYPE (!.JUNK) FALSE> + .LOAD-ACT>)>> + +<ON "ERROR" ,LUP-ERROR-HANDLER 100> + +<DEFINE DO-ADD (PCK ENTL RENTL USES USE-DEFERS CRDATE FILE U DATA? + "AUX" (DB <UPDB-BASE .U>) HASH UV PCK-DATA FILLEN PCKLEN + (OLD-ENT 0) DAT-ENTLEN DAT-ACCESS (SAVE-ENTL .ENTL) + (SAVE-RENTL .RENTL)) + #DECL ((FILE PCK) STRING (ENTL) <LIST [REST ATOM]> (U) UPDB + (DB) DATA-BASE (DATA?) <OR ATOM FALSE> (DAT-ENTLEN) <OR FALSE FIX> + (DAT-ACCESS CRDATE OLD-ENT FILLEN PCKLEN PCK-DATA HASH) FIX + (USES USE-DEFERS) <LIST [REST STRING]> + (RENTL) <OR FALSE <LIST [REST ATOM]>> (UV) <UVECTOR [REST FIX]>) + <SET UV <DB-HASH-MAP .DB>> ;"Get to the hash table" + <SET HASH <HASH-NAME .PCK .UV ,HLEN1>> + <SET FILLEN <STRL .FILE>> + <SET PCKLEN <STRL .PCK>> + <SETG DB-DEAD <+ ,DB-DEAD 1>> ;"Data base is no longer consistent" + <SET PCK-DATA + <ALLOC .DB ;"Data base" + <+ .FILLEN .PCKLEN ,PACKAGE-NAMEBEG> ;"Length of entry" + <NTH .UV .HASH> ;"Bucket address (try to be close)">> + <BUCKET-ADD .DB <- .HASH 1> .PCK-DATA> ;"Add to bucket" + <SET UV <DB-ACCESS .DB .PCK-DATA>> + <STR-BLT .UV .PCK ,PACKAGE-NAMEBEG ,BUCKET> + <STR-BLT .UV .FILE <+ ,PACKAGE-NAMEBEG .PCKLEN> ,FCNCHAIN> + ;"Put string data in" + <TYPHACK .UV ,FCNCHAIN <COND (,CUR-TYPE 1) (0)>> + ;"Package type--1-->RPACKAGE" + <TYPHACK .UV ,BUCKET 1> ;"This is a package entry" + <REPEAT (ENT-DATA NAMLEN STR OFF (TBIT 0)) + #DECL ((TBIT OFF ENT-DATA NAMLEN) FIX (STR) STRING) + <COND (<EMPTY? .ENTL> + <COND (<AND .RENTL <NOT <EMPTY? .RENTL>>> + <SET ENTL .RENTL> + <SET RENTL <>> + <SET TBIT 1>) + (<RETURN>)>)> + <SET STR <SPNAME <1 .ENTL>>> + <SET NAMLEN <STRL .STR>> + <SET HASH <HASH-NAME .STR <SET UV <DB-HASH-MAP .DB>> ,HLEN2>> + <SET ENT-DATA + <ALLOC .DB + <+ .NAMLEN 1 ,FUNCTION-NAMEBEG> + <NTH .UV .HASH>>> + <BUCKET-ADD .DB <- .HASH 1> .ENT-DATA> + <SET UV <DB-ACCESS .DB .ENT-DATA>> + <STR-BLT .UV .STR ,FUNCTION-NAMEBEG ,BUCKET> + ;"Put in entry name" + <PTRHACK .UV ,FCNCHAIN .OLD-ENT> + ;"Chain to previous entry (initially 0)" + <TYPHACK .UV ,FCNCHAIN .TBIT> ;"Entry or rentry?" + <TYPHACK .UV ,BUCKET 0> ;"Not a package" + <SET OLD-ENT .ENT-DATA> + <PUT .UV <SET OFF <+ ,FUNCTION-NAMEBEG 1 .NAMLEN>> .PCK-DATA> + ;"Point to package entry" + <SET ENTL <REST .ENTL>>> + <SET UV <DB-ACCESS .DB .PCK-DATA>> + <PUT .UV <+ ,PACKAGE-CRDATE 1> .CRDATE> + <SET DAT-ACCESS <17 <UPDB-DATFILE .U>>> + <COND (<OR <NOT .DATA?> + <NOT <SET DAT-ENTLEN <WRITE-PACKAGE .PCK + ,CUR-TYPE + .SAVE-ENTL + .SAVE-RENTL + .USES + .USE-DEFERS + <UPDB-DATFILE .U>>>>> + <PUT .UV <+ ,PACKAGE-ACCESS 1> -1> + <PUT .UV <+ ,PACKAGE-ENTLEN 1> 0> + <PUT .UV <+ ,PACKAGE-CRDATE 1> -1>) + (<PUT .UV <+ ,PACKAGE-ACCESS 1> .DAT-ACCESS> + <PUT .UV <+ ,PACKAGE-ENTLEN 1> .DAT-ENTLEN>)> + <PTRHACK .UV ,FCNCHAIN .OLD-ENT> ;"Make package point to function entry" + <SETG DB-DEAD <- ,DB-DEAD 1>>> + +" " + +"SUBTITLE Bless a package" + +"This was all stolen straight from the old LUP, with modifications to +allow for the different method of acquiring package names and entries." + +<DEFINE COB (ATM "AUX" (FOO .ATM) (R <ROOT>) (I <GET INITIAL OBLIST>)) + #DECL ((ATM) ATOM (R I) OBLIST) + <REPEAT () + <COND + (<OR <NOT <SET FOO <OBLIST? .FOO>>> <==? .FOO .R>> <RETURN>) + (<==? .FOO .I> + <RETURN <CHTYPE (<STRING "ATOM, " + <PROG ((OBLIST ())) + #DECL ((OBLIST) <SPECIAL ANY>) + <UNPARSE .ATM>> + ", GOES THROUGH INITIAL">) + FALSE>>) + (<NOT <SET FOO <GET .FOO OBLIST>>> <RETURN>)>>> + +<DEFINE CL (LST "AUX" (GOOD-OB <ROOT>) TF TA TMP FROB) + #DECL ((LST) LIST (GOOD-OB) <OR OBLIST FALSE> (TF) FORM (TA) ATOM + (FROB) ANY) + <REPEAT () + <COND (<EMPTY? .LST> <RETURN T>) + (<AND <TYPE? <SET FROB <1 .LST>> FORM> + <NOT <EMPTY? <SET TF .FROB>>>> + <COND (<==? <1 .TF> PACKAGE> + <SET GOOD-OB + <GET <LOOKUP <2 .TF> <GET PACKAGE OBLIST>> + OBLIST>>) + (<==? <1 .TF> ENDPACKAGE> <SET GOOD-OB <ROOT>>) + (<==? <1 .TF> DEFINE> + <COND (<NOT <SET TMP <CPL .TF T>>> + <RETURN .TMP>)>) + (<AND <==? <1 .TF> SETG> + <APPLICABLE? ,<SET TMP <GATM <2 .TF>>>> + <NOT <TYPE? ,.TMP FIX>>> + <COND (<NOT <SET TMP <CPL .TF T>>> + <RETURN .TMP>)>) + (T + <COND (<NOT <SET TMP <CPL .TF <>>>> + <RETURN .TMP>)>)>) + (<==? <PRIMTYPE .FROB> LIST> + <COND (<NOT <SET TMP <CPL .FROB <>>>> <RETURN .TMP>)>) + (<STRUCTURED? .FROB> + <COND (<NOT <SET TMP <CPA .FROB <>>>> <RETURN .TMP>)>) + (<TYPE? .FROB ATOM> + <COND (<NOT <SET TMP <COB .FROB>>> <RETURN .TMP>)>)> + <SET LST <REST .LST>>>> + +<DEFINE CPL (ITM OK-T-F "AUX" TMP) + #DECL ((ITM) <PRIMTYPE LIST>) + <PROG () + <COND (<EMPTY? .ITM> <RETURN>) + (<AND <NOT .OK-T-F> <TYPE? .ITM FORM> <==? <1 .ITM> FLOAD>> + <RETURN #FALSE ("FLOAD ENCOUNTERED")>)> + <REPEAT () + <COND (<EMPTY? .ITM> <RETURN>) + (<TYPE? <1 .ITM> ATOM> + <COND (<NOT <SET TMP <COB <1 .ITM>>>> + <RETURN .TMP>)>) + (<==? <PRIMTYPE <1 .ITM>> LIST> + <COND (<NOT <SET TMP <CPL <1 .ITM> .OK-T-F>>> + <RETURN .TMP>)>) + (<STRUCTURED? <1 .ITM>> + <COND (<NOT <SET TMP <CPA <1 .ITM> .OK-T-F>>> + <RETURN .TMP>)>)> + <SET ITM <REST .ITM>>>>> + +<DEFINE CPA (ITM OK-T-F "AUX" TMP) + #DECL ((ITM) STRUCTURED) + <COND (<OR <TYPE? .ITM STRING> + <AND <==? <PRIMTYPE .ITM> UVECTOR> + <==? <TYPEPRIM <UTYPE .ITM>> WORD>>> + T) + (<TYPE? .ITM RSUBR-ENTRY> + <COND (<G=? <LENGTH .ITM> 3> <CPL <3 .ITM> .OK-T-F>) (T)>) + (T + <REPEAT () + <COND (<EMPTY? .ITM> <RETURN>) + (<TYPE? <1 .ITM> ATOM> + <COND (<NOT <SET TMP <COB <1 .ITM>>>> + <RETURN .TMP>)>) + (<==? <PRIMTYPE <1 .ITM>> LIST> + <COND (<NOT <SET TMP <CPL <1 .ITM> .OK-T-F>>> + <RETURN .TMP>)>) + (<STRUCTURED? <1 .ITM>> + <COND (<NOT <SET TMP <CPA <1 .ITM> .OK-T-F>>> + <RETURN .TMP>)>)> + <SET ITM <REST .ITM>>>)>> + +<DEFINE GATM (ITM) + <COND (<TYPE? .ITM ATOM> .ITM) + (<GET .ITM VALUE>) + (<AND <TYPE? .ITM FORM> + <==? <LENGTH .ITM> 2> + <==? <1 .ITM> ENTRY>> + <2 .ITM>) + (T <ERROR BAD-FIRST-ARG-TO-DEFINE-OR-SETG!-ERRORS .ITM>)>> + +" " + +"Add a datum" + +<DEFINE LUP-ADD-DATUM LAD (NM FIL "OPTIONAL" (UPDATE? <>) "AUX" U (DID-DEL? + <>)) + #DECL ((NM FIL) STRING (U) UPDB (DID-DEL?) <OR ATOM FALSE>) + <GET-DB> + <SET U ,CUR-UPD> + <COND (<PACKAGE-FIND .NM <UPDB-BASE .U> T> + <COND (<AND <NOT .UPDATE?> + <NOT <ERROR DATUM-ALREADY-EXISTS + ERRET-T-TO-REDEFINE + LUP-ADD-DATUM>>> + <RETURN <> .LAD>)> + <SETG DB-DEAD <+ ,DB-DEAD 1>> + <SET DID-DEL? T> + <DO-DEL .NM .U> ;"If it already exists, flush it")> + <SETG DB-DEAD <+ ,DB-DEAD 1>> + <DO-ADD .NM () () () () -1 .FIL ,CUR-UPD <>> + <SETG DB-DEAD <- ,DB-DEAD 1>> + <COND (.DID-DEL? <SETG DB-DEAD <- ,DB-DEAD 1>>)> + <DEFER-FIND .NM <UPDB-BASE .U> <>>> + +"Delete things" + +<DEFINE LUP-DEL (PCK "AUX" U) + #DECL ((PCK) STRING (U) UPDB) + <GET-DB> + <SET U ,CUR-UPD> + <COND (<PACKAGE-FIND .PCK <UPDB-BASE .U> T> <DO-DEL .PCK .U>) + (#FALSE ("PACKAGE NOT FOUND"))>> + +" " + +"Delete a package from the data base" + +<DEFINE DO-DEL (PCK U "AUX" (DB <UPDB-BASE .U>) UV BUCKET OB NB FCHAIN TMP HASH) + + #DECL ((PCK) STRING (U) UPDB (DB) DATA-BASE + (BUCKET NB OB FCHAIN HASH CENT) FIX (UV) <UVECTOR [REST FIX]>) + <SET UV <DB-HASH-MAP .DB>> + <SET HASH <HASH-NAME .PCK .UV ,HLEN1>> + <SET OB <- .HASH 1>> + <SET BUCKET <NTH .UV .HASH>> + <SETG DB-DEAD <+ ,DB-DEAD 1>> + <REPEAT () + <COND (<0? .BUCKET> <ERROR PACKAGE-NOT-FOUND .PCK DO-DEL>) + (T + <SET UV <DB-ACCESS .DB .BUCKET>> + <COND (<STRING=? .UV .PCK> + <SET FCHAIN <PTRHACK .UV ,FCNCHAIN>> + ;"Pointer to function chain" + <SET NB <PTRHACK .UV ,BUCKET>> + ;"Pointer to next elt in bucket" + <DE-ALLOC .DB + <+ ,PACKAGE-NAMEBEG + <STRLC <LENHACK .UV ,BUCKET>> + <STRLC <LENHACK .UV ,FCNCHAIN>>> + .BUCKET> ;"De-allocate the storage" + <SET UV <DB-ACCESS .DB .OB>> + <PTRHACK .UV ,BUCKET .NB> + ;"Splice this guy out of the chain" + <RETURN>) + (<SET OB .BUCKET> + <SET BUCKET <PTRHACK .UV ,BUCKET>>)>)>> + ; +"Now whip down the function chain, deleting each item and splicing it + out of its hash bucket. Boy is this a pain." + <REPEAT ((SBUF ,SBUF) NC NB LEN SL B TMP) + #DECL ((SBUF) <UVECTOR [REST FIX]> (NC NB LEN SL B TMP) FIX) + <COND (<0? .FCHAIN> <RETURN>)> + <SET UV <DB-ACCESS .DB .FCHAIN>> + <SET NC <PTRHACK .UV ,FCNCHAIN>> ;"Next thing on chain" + <SET NB <PTRHACK .UV ,BUCKET>> ;"Next element in this bucket" + <SET LEN + <+ ,FUNCTION-NAMEBEG + <SET TMP <STRLC <SET SL <LENHACK .UV ,BUCKET>>>> + 1>> + <SUBSTRUC .UV ,FUNCTION-NAMEBEG .TMP .SBUF> ;"Copy the function name" + <DB-HASH-MAP .DB> + <SET B <HASH-NAME <MAKE-STRING .SBUF .SL> <DB-DATA .DB> ,HLEN2>> + <SET UV <DB-ACCESS .DB <- .B 1>>> + <REPEAT () + <COND (<==? <SET B <PTRHACK .UV ,BUCKET>> .FCHAIN> + ;"Found the pointer" + <PTRHACK .UV ,BUCKET .NB> ;"Splice it out" + <DE-ALLOC .DB .LEN .FCHAIN> + <RETURN>) + (<0? .B> <ERROR DATA-BASE-MUNGED .PCK .SBUF DO-DEL>) + (<SET UV <DB-ACCESS .DB .B>>)>> + <SET FCHAIN .NC>> + <SETG DB-DEAD <- ,DB-DEAD 1>>> + +<SETG SBUF <IUVECTOR 12 0>> + +" " + +"SUBTITLE Write out data file entry" + +<DEFINE WRITE-PACKAGE WP (NAME RPACKAGE? ENTRIES RENTRIES USES USE-DEFERS + OUTCHAN + "AUX" (FORMCT 0) (ACCPTR <17 .OUTCHAN>) (MANIFESTS ()) + (GDECLS ()) OBLIST ATM + (PAD-STRING <REST " " 5>) TMP + AUX-ENT NEEDED RES) + #DECL ((NAME) STRING (ATM RPACKAGE?) <OR ATOM FALSE> + (OBLIST) <SPECIAL <LIST [REST OBLIST]>> (GDECLS) LIST + (MANIFESTS ENTRIES RENTRIES AUX-ENT NEEDED) <LIST [REST ATOM]> + (USES USE-DEFERS) <LIST [REST STRING]> (OUTCHAN) CHANNEL + (TMP FORMCT ACCPTR) FIX (RES) <OR FALSE <VECTOR [2 LIST]>>) + <COND (<AND <SET ATM <LOOKUP .NAME <GET PACKAGE OBLIST>>> + <GASSIGNED? .ATM>> + <SET OBLIST ,.ATM>) + (T <ERROR PACKAGE-HAS-NO-OBLIST? WRITE-PACKAGE>)> + <COND (<NOT <SET RES <MACRO-GROVEL .ENTRIES .RENTRIES <1 .OBLIST>>>> + <TELL "Package " .NAME " can't have datfile entry."> + <RETURN <> .WP>)> + <SET AUX-ENT <1 .RES>> + <SET NEEDED <2 .RES>> + <PRINC !\<> + <COND (.RPACKAGE? <PRINC "RPACKAGE ">) (T <PRINC "PACKAGE ">)> + <PRIN1 .NAME> + <PRINC !\>> ;"Write out <PACKAGE \"FOO\">" + <SET FORMCT <+ .FORMCT 1>> + <COND (<NOT <EMPTY? .ENTRIES>> + <PRIN1 <CHTYPE (ENTRY !.ENTRIES) FORM>> + <SET FORMCT <+ .FORMCT 1>>)> ;"Entries for package" + <COND (<NOT <EMPTY? .RENTRIES>> + <PRIN1 <CHTYPE (RENTRY !.RENTRIES) FORM>> + <SET FORMCT <+ .FORMCT 1>>)> ;"Rentries" + <COND (<NOT <EMPTY? .USES>> + <PRIN1 <CHTYPE (USE !.USES) FORM>> + <SET FORMCT <+ .FORMCT 1>>)> ;"USEs" + <COND (<NOT <EMPTY? .USE-DEFERS>> + <PRIN1 <CHTYPE (USE !.USE-DEFERS) FORM>> + <SET FORMCT <+ .FORMCT 1>>)> ;"USE-DEFERs" + <COND (<NOT <EMPTY? .ENTRIES>> + <PUTREST <REST .ENTRIES <- <LENGTH .ENTRIES> 1>> .RENTRIES>) + (<SET ENTRIES .RENTRIES>)> + <COND (<NOT <EMPTY? .ENTRIES>> + <PUTREST <REST .ENTRIES <- <LENGTH .ENTRIES> 1>> .AUX-ENT>) + (<SET ENTRIES .AUX-ENT>)> + <MAPF <> + <FUNCTION (X "AUX" RND) + #DECL ((X) ATOM (RND) ANY) + <COND (<VALID-TYPE? .X> + <PRINC "<NEWTYPE "> + <PRIN1 .X> + <PRINC " "> + <PRIN1 <TYPEPRIM .X>> + <COND (<SET RND <GET .X DECL>> + <PRINC !\'> + <PRIN1 .RND>)> + <PRINC !\>> + <SET FORMCT <+ .FORMCT 1>>) + ;"<NEWTYPE FOO BAR '<BLETCH>>" + (<SET RND <GET .X DECL>> + <PRINC "<PUT "> + <PRIN1 .X> + <PRINC " DECL "> + <PRIN1 .RND> + <PRINC !\>> + <SET FORMCT <+ .FORMCT 1>>)> + ;"<PUT FOO DECL 'FEEP>" + <COND (<GASSIGNED? .X> + <COND (<MANIFEST? .X> + <PRINC "<SETG "> + <PRIN1 .X> + <PRINC " "> + <PRIN1 ,.X> + <PRINC !\>> + <SET MANIFESTS (.X !.MANIFESTS)> + <SET FORMCT <+ .FORMCT 1>>) + ;"<SETG FOO 1><MANIFEST FOO>" + (<AND <TYPE? <SET RND ,.X> RSUBR-ENTRY RSUBR> + <G=? <LENGTH .RND> 3>> + <PRINC "<SETG "> + <PRIN1 .X> + <PRINC +" %<RSUBR-ENTRY '[\\ \\ F!- "> + <PRIN1 .X> + <PRINC " "> + <PRIN1 <3 .RND>> + <PRINC "] 0>>"> + <SET FORMCT <+ .FORMCT 1>>) ;"RSUBRs" + (<AND <MONAD? .RND> + <MEMQ .X .NEEDED>> + <PRINC "<SETG "> + <PRIN1 .X> + <PRINC " "> + <PRIN1 .RND> + <PRINC ">"> + <SET FORMCT <+ .FORMCT 1>>) + (<TYPE? .RND MACRO> + <PRINC "<SETG "> + <PRIN1 .X> + <PRINC !\ > + <PRIN1 .RND> + <PRINC !\>> + <SET FORMCT <+ .FORMCT 1>>)>)> ;"MACROs" + <COND (<AND <GBOUND? .X> + <NOT <MANIFEST? .X>> + <SET RND <GET-DECL <GLOC .X>>>> + <SET GDECLS ((.X) .RND !.GDECLS)>)>> + ;"Accumulate GDECLs" + .ENTRIES> + <COND (<NOT <EMPTY? .MANIFESTS>> + <PRIN1 <CHTYPE (MANIFEST !.MANIFESTS) FORM>> + <SET FORMCT <+ .FORMCT 1>>)> + <COND (<NOT <EMPTY? .GDECLS>> + <PRIN1 <CHTYPE (GDECL !.GDECLS) FORM>> + <SET FORMCT <+ .FORMCT 1>>)> + <PRINC "<ENDPACKAGE>"> + <SET FORMCT <+ .FORMCT 1>> + <COND (<G? <SET TMP <MOD <17 .OUTCHAN> 5>> 0> + <PRINC <BACK .PAD-STRING <- 5 .TMP>>>)> ;"Fill to word boundary" + <CHTYPE <PUTBITS .FORMCT <BITS 18 18> <- <17 .OUTCHAN> .ACCPTR>> FIX>> +" " +<DEFINE MACRO-GROVEL MG (ENTRIES RENTRIES IOBL "AUX" (RES [()()]) ENTS) + #DECL ((MG) ACTIVATION (ENTRIES RENTRIES) <LIST [REST ATOM]> + (RES) <OR VECTOR FALSE>) + <SET ENTS (!.RENTRIES !.ENTRIES)> + <MAPF <> + <FUNCTION (X) + <COND (<NOT <SET RES <ENTRY-BLESS .X .RES .ENTS .IOBL>>> + <RETURN <> .MG>)>> + .ENTS> + .RES> + +<DEFINE ENTRY-BLESS EB (X RES ENTS IOBL "AUX" TMP) + #DECL ((EB) ACTIVATION (X) ATOM (RES) <OR VECTOR FALSE> (ENTS) <LIST [REST ATOM]>) + <COND (<AND <GASSIGNED? .X> + <TYPE? <SET TMP ,.X> MACRO>> + <COND (<TYPE? <SET TMP <1 .TMP>> RSUBR> + <MAPF <> + <FUNCTION (X "AUX" ATM) + <COND (<TYPE? .X LOCR> + <COND (<NOT <SET RES <VERIFY-GVAL <LOCR-TO-ATOM .X> + .RES .ENTS .IOBL>>> + <RETURN <> .EB>)>) + (<TYPE? .X ATOM> + <RETURN <> .EB>)>> + .TMP>) + (T + <LIST-BLESS .TMP .RES .ENTS .IOBL>)>) + (.RES)>> + +<DEFINE LIST-BLESS LB (LST RES ENTS IOBL) + #DECL ((LST) <PRIMTYPE LIST> (ENTS) <LIST [REST ATOM]> (RES) <OR VECTOR FALSE>) + <MAPF <> + <FUNCTION (X) + <COND (<AND <TYPE? .X LIST> + <NOT <EMPTY? .X>>> + <COND (<NOT <SET RES <LIST-BLESS .X .RES .ENTS .IOBL>>> + <RETURN <> .LB>)>) + (<TYPE? .X FORM> + <COND (<AND <NOT <EMPTY? .X>> + <TYPE? <1 .X> ATOM>> + <COND (<AND <==? <1 .X> GVAL> + <G? <LENGTH .X> 1> + <TYPE? <2 .X> ATOM>> + <COND (<NOT <SET RES <VERIFY-GVAL <2 .X> .RES .ENTS .IOBL>>> + <RETURN <> .LB>)>) + (<NOT <SET RES <VERIFY-GVAL <1 .X> .RES .ENTS .IOBL>>> + <RETURN <> .LB>) + (<NOT <EMPTY? <REST .X>>> + <COND (<NOT <SET RES <LIST-BLESS <REST .X> .RES .ENTS .IOBL>>> + <RETURN <> .LB>)>)>) + (<NOT <EMPTY? .X>> + <COND (<NOT <SET RES <LIST-BLESS .X .RES .ENTS .IOBL>>> + <RETURN <> .LB>)>)>)>> + .LST> + .RES> + +<DEFINE VERIFY-GVAL (ATM RES ENTS IOBL "AUX" RND) + #DECL ((IOBL) OBLIST (ATM) ATOM (RES) <VECTOR [2 LIST]> (ENTS) <LIST [REST ATOM]>) + <COND (<MEMQ .ATM <1 .RES>> .RES) + (<MEMQ .ATM .ENTS> + <COND (<OR <NOT <GASSIGNED? .ATM>> + <MANIFEST? .ATM> + <MONAD? <SET RND ,.ATM>> + <TYPE? .RND MACRO>> + <PUT .RES 2 (.ATM !<2 .RES>)>)>) + (<N==? <OBLIST? .ATM> .IOBL> .RES) + (<OR <NOT <GASSIGNED? .ATM>> + <MANIFEST? .ATM> + <MONAD? <SET RND ,.ATM>> + <TYPE? .RND MACRO>> + <PUT .RES 1 (.ATM !<1 .RES>)> + <PUT .RES 2 (.ATM !<2 .RES>)>)>> + +" " + +"SUBTITLE Free storage management" + +"Free LEN words at ADDR" + +<DEFINE DE-ALLOC (DB LEN ADDR + "AUX" UV NEW (OLD ,FREEPT) (AP </ .ADDR 1024>) NP + (LOWB <+ .ADDR .LEN>) + (HIGHB <+ .LOWB <- ,DB-MIN-ENTRY 1>>) NLOW NLEN) + #DECL ((DB) DATA-BASE (LOWB HIGHB AP NP OLD LEN ADDR NEW) FIX + (UV) <UVECTOR [REST FIX]>) + <SET UV <DB-HASH-MAP .DB>> + <SET NEW <NTH .UV <+ ,FREEPT 1>>> + <REPEAT () + <COND (<0? .NEW> <ADD-FREE-CHAIN .DB .ADDR .OLD .NEW .LEN> <RETURN>)> + <SET UV <DB-ACCESS .DB .NEW>> + <COND (<==? .AP <SET NP </ .NEW 1024>>> ;"Same page?" + <COND (<AND <G=? .NEW .LOWB> <L=? .NEW .HIGHB>> + ;"Can we merge into one?" + <SET LEN <+ .LEN <LENHACK .UV ,BUCKET> <- .NEW .LOWB>>> + <SET NEW <PTRHACK .UV ,BUCKET>> + <PUT .UV <+ ,BUCKET 1> 0> + <ADD-FREE-CHAIN .DB .ADDR .OLD .NEW .LEN> + <RETURN>) + (<AND <G=? .ADDR + <SET NLOW + <+ .NEW + <SET NLEN <LENHACK .UV ,BUCKET>>>>> + <L=? .ADDR <+ .NLOW <- ,DB-MIN-ENTRY 1>>>> + <ZERO .DB .ADDR .LEN> + <SET UV <DB-ACCESS .DB .NEW>> + <LENHACK .UV ,BUCKET <+ .LEN .NLEN <- .ADDR .NLOW>>> + <RETURN>)> + <ADD-FREE-CHAIN .DB .ADDR .OLD .NEW .LEN> + <RETURN>) + (<L? .NEW .ADDR> ;"Past the place where we want to put it" + <ADD-FREE-CHAIN .DB .ADDR .OLD .NEW .LEN> + <RETURN>) + (T <SET OLD .NEW> <SET NEW <PTRHACK .UV ,BUCKET>>)>>> + +"Add LEN words to free chain at ADDR" + +<DEFINE ADD-FREE-CHAIN (DB ADDR OLD NEW LEN "AUX" UV) + #DECL ((DB) DATA-BASE (ADDR OLD NEW LEN) FIX) + <DB-ACCESS .DB .ADDR> + <ZERO .DB .ADDR .LEN> + <LENHACK <DB-DATA .DB> ,BUCKET .LEN> + <PTRHACK <DB-DATA .DB> ,BUCKET .NEW> + <SET UV <DB-ACCESS .DB .OLD>> + <PTRHACK .UV ,BUCKET .ADDR>> + +"Allocate free storage" + +<DEFINE ALLOC (DB LEN TARG + "AUX" UV (BEST 0) OBEST CCH OCCH (TPG </ .TARG 1024>) NPG) + #DECL ((DB) DATA-BASE (TPG CCH OCCH LEN TARG BEST OBEST) FIX + (UV) UVECTOR) + <DB-HASH-MAP .DB> + <SET OCCH ,FREEPT> + <SET CCH <NTH <DB-DATA .DB> <+ ,FREEPT 1>>> ;"Current free chain" + <REPEAT () + <COND (<0? .CCH> + <COND (<0? .BEST> <RETURN <GROW-ALLOC .DB .LEN>>) + (<RETURN <DO-ALLOC .DB .BEST .OBEST .LEN>>)>)> + <COND (<G=? <LENHACK <SET UV <DB-ACCESS .DB .CCH>> ,BUCKET> + .LEN> ;"Will fit, anyway" + <COND (<OR <0? .TPG> ;"Don't care" + <==? <SET NPG </ .CCH 1024>> .TPG>> + ;"In winning area" + <RETURN <DO-ALLOC .DB .CCH .OCCH .LEN>>) + (<L? .CCH .TARG> ;"Already passed it?" + <COND (<0? .BEST> + <RETURN <DO-ALLOC .DB .CCH .OCCH .LEN>>) + (<RETURN <DO-ALLOC .DB + .BEST + .OBEST + .LEN>>)>) + (<SET BEST .CCH> <SET OBEST .OCCH>)>)> + <SET OCCH .CCH> + <SET CCH <PTRHACK .UV ,BUCKET>>>> + +"Allocate LEN words at CCH, fixing up free chain pointers and such" + +<DEFINE DO-ALLOC (DB CCH OCCH LEN "AUX" UV VAL REM) + #DECL ((DB) DATA-BASE (VAL OCCH CCH LEN) FIX (UV) UVECTOR) + <SET UV <DB-ACCESS .DB .CCH>> + <SET VAL <+ .CCH <SET REM <- <LENHACK .UV ,BUCKET> .LEN>>>> + <COND (<G=? .REM ,DB-MIN-ENTRY> <LENHACK .UV ,BUCKET .REM>) + (<SET CCH <PTRHACK .UV ,BUCKET>> ;"Get next elt in free chain" + <PTRHACK .UV ,BUCKET 0> ;"Zero this guy's pointer" + <SET UV <DB-ACCESS .DB .OCCH>> + ;"Go to previous elt in free chain" + <PTRHACK .UV ,BUCKET .CCH> ;"Point to next")> + .VAL> + +"Grow the data base by a page" + +<DEFINE GROW-ALLOC (DB LEN + "AUX" UV NF OF GB (CH <DB-CHAN .DB>) (FL <DB-FLEN .DB>)) + #DECL ((DB) DATA-BASE (NF OF FL LEN) FIX (CH) CHANNEL + (UV GB) <UVECTOR [REST FIX]>) + <COND (<NOT <GASSIGNED? GROW-BUF>> + <SETG GROW-BUF <SET GB <IUVECTOR 1024 0>>> + <PUT .GB 1023 4295229440> ;"UTYPE FIX") + (<SET GB ,GROW-BUF>)> + <COND (<L? ,MUDDLE 100> + <RESET .CH> + <ACCESS .CH .FL> + <PRINTB .GB .CH> + <RESET .CH>) + (T <ACCESS .CH .FL> <PRINTB .GB .CH>)> + <PUT .DB ,DB-FLEN <+ .FL <LENGTH .GB>>> ;"Grow the db" + <SET UV <DB-HASH-MAP .DB>> + <SET OF <NTH .UV <+ ,FREEPT 1>>> ;"Add to beginning of free chain" + <PUT .UV <+ ,FREEPT 1> <SET NF <+ .FL .LEN>>> + <SET UV <DB-ACCESS .DB .NF>> + <PUT .UV <+ ,BUCKET 1> <CHTYPE <PUTBITS .OF ,LENGET <- 1022 .LEN>> FIX>> + .FL> + +"Add a new entry to the end of a hash bucket" + +<DEFINE BUCKET-ADD (DB HASH ADDR "AUX" UV) + #DECL ((DB) DATA-BASE (HASH ADDR) FIX (UV) UVECTOR) + <SET UV <DB-ACCESS .DB .HASH>> + <REPEAT (TMP) + <COND (<0? <SET HASH <PTRHACK .UV ,BUCKET>>> + <PTRHACK .UV ,BUCKET .ADDR> + <RETURN>) + (<SET UV <DB-ACCESS .DB .HASH>>)>>> + +" " + +"SUBTITLE Fake package system stuff" + +<DEFINE NPACKAGE NPA (STR "TUPLE" X) + #DECL ((STR) STRING (X) TUPLE) + <COND (<0? ,NO-ENT> + <COND (,CUR-PACK + <TWO-PACKAGES .STR> + <RETURN T .NPA>)> + <SETG CUR-PACK .STR>)> + <SETG NO-ENT <+ ,NO-ENT 1>> + <OPACKAGE .STR !.X>> + +<DEFINE NRPACKAGE NRPA (STR "TUPLE" X) + #DECL ((STR) STRING (X) TUPLE) + <COND (<0? ,NO-ENT> + <COND (,CUR-PACK + <TWO-PACKAGES .STR> + <RETURN T .NRPA>)> + <SETG CUR-PACK .STR> + <SETG CUR-TYPE T>)> + <SETG NO-ENT <+ ,NO-ENT 1>> + <ORPACKAGE .STR !.X>> + +<DEFINE TWO-PACKAGES (STR "AUX" (CHN ,LOAD-CHANNEL) (OUTCHAN .OUTCHAN)) + #DECL ((STR) STRING (CHN) <OR <CHANNEL FIX> FALSE> (OUTCHAN) CHANNEL) + <COND (<AND .CHN + <NOT <0? <1 .CHN>>>> + <PRINC "WARNING: two packages defined in file "> + <PRINC <FILNAME .CHN 9>> + <PRINC !\.> + <CRLF> + <PRINC "Only "> + <PRINC ,CUR-PACK> + <PRINC " will be added to the library."> + <CRLF> + <PRINC "The second package is "> + <PRINC .STR> + <PRINC !\.> + <CRLF> + <ACCESS .CHN <FILE-LENGTH .CHN>>) + (<ERROR TWO-PACKAGES-IN-FILE? ,CUR-PACK .STR>)>> + +<DEFINE NENTRY ("TUPLE" ATMS "AUX" VAL (L ,CUR-ENTRY)) + #DECL ((ATMS) <TUPLE [REST ATOM]> (L) <LIST [REST ATOM]>) + <SET VAL <OENTRY !.ATMS>> + <COND (<1? ,NO-ENT> + <MAPF <> + <FUNCTION (X) <COND (<NOT <MEMQ .X .L>> <SET L (.X !.L)>)>> + .ATMS> + <SETG CUR-ENTRY .L>)> + .VAL> + +<DEFINE NRENTRY ("TUPLE" ATMS "AUX" VAL (L ,CUR-RENTRY)) + #DECL ((ATMS) <TUPLE [REST ATOM]> (L) <LIST [REST ATOM]>) + <SET VAL <ORENTRY !.ATMS>> + <COND (<1? ,NO-ENT> + <MAPF <> + <FUNCTION (X) <COND (<NOT <MEMQ .X .L>> <SET L (.X !.L)>)>> + .ATMS> + <SETG CUR-RENTRY .L>)> + .VAL> + +<DEFINE NENDPACKAGE () + <COND (<L? <SETG NO-ENT <- ,NO-ENT 1>> 0> + <ERROR UNBALANCED-PACKAGES NENDPACKAGE>)> + <OENDPACKAGE>> + +<DEFINE NUSE ("TUPLE" NMS) + <COND (<1? ,NO-ENT> <SETG CUR-USES (!.NMS !,CUR-USES)>)> + <SETG ALL-USES (!.NMS !,ALL-USES)> + <OUSE !.NMS>> + +<DEFINE NUSE-DEFER ("TUPLE" NMS) + <COND (<1? ,NO-ENT> <SETG CUR-USE-DEFERS (!.NMS !,CUR-USE-DEFERS)>)> + <SETG ALL-USES (!.NMS !,ALL-USES)> + <OUSE-DEFER !.NMS>> + +<DEFINE FLUSH-CURRENT-PACKAGE ("AUX" (NM ,CUR-PACK) (USES ,ALL-USES)) + #DECL ((NM) <OR FALSE STRING> (USES) <LIST [REST STRING]>) + <COND (<AND .NM + <NOT <MEMBER .NM ,SACRED-PACKAGES>>> + <MAPF <> + <FUNCTION (X) + <UNMANIFEST .X> + <GUNASSIGN .X> + <REMOVE .X>> + ,CUR-ENTRY> + <MAPF <> + <FUNCTION (X) + <UNMANIFEST .X> + <GUNASSIGN .X> + <REMOVE .X>> + ,CUR-RENTRY> + <FLUSH-PACKAGE .NM ,CUR-TYPE> + <MAPF <> ,FLUSH-PACKAGE .USES>)>> + +<DEFINE FLUSH-PACKAGE (NM "OPTIONAL" (RPACKAGE? 0)) + #DECL ((NM) STRING (RPACKAGE?) <OR ATOM FIX FALSE>) + <COND (<NOT <MEMBER .NM ,SACRED-PACKAGES>> + <COND (<TYPE? .RPACKAGE? FIX> + <COND (<LOOKUP .NM <GET PACKAGE OBLIST>> + <L-UNUSE .NM>) + (<LOOKUP <STRING !\I .NM> <GET RPACKAGE OBLIST>> + <L-UNUSE .NM>)>) + (.RPACKAGE? + <COND (<LOOKUP <STRING !\I .NM> <GET RPACKAGE OBLIST>> + <L-UNUSE .NM>)>) + (<LOOKUP .NM <GET PACKAGE OBLIST>> + <L-UNUSE .NM>)>)>> + +<SETG SACRED-PACKAGES ("PP" "PCK" "FIXUP" "HELPLD" "EDIT" "FR&" "GRLOAD" "PAGES" + "LIB" "LUP" "NLIB" "NLUP")> + +" " + +"SUBTITLE Garbage collector" + +<DEFINE LIB-GC LL (LIBNAM + "OPTIONAL" (VB? T) (FORCE? T) (NEW? <>) + "AUX" U DB1 DB2 NN CH (NM2 ,L-LIBRARY-NAME) GB UV + LAST-UPDATE) + #DECL ((LIBNAM NN) STRING (U) UPDB (DB1 DB2) <OR FALSE DATA-BASE> + (LAST-UPDATE) FIX + (UV GB) <UVECTOR [REST FIX]> (CH) CHANNEL (NM2) <SPECIAL STRING> + (NEW?) <OR ATOM FALSE>) + <LUP-DCT> + <COND (<NOT <SET DB1 <DB-OPEN .LIBNAM>>> ;"Get frob to be updated" + <RETURN .DB1 .LL>)> + <SET UV <DB-DATA .DB1>> + <SET LAST-UPDATE <NTH .UV <+ ,LASTUP 1>>> + <COND (<AND <NOT .FORCE?> + <G=? <NTH .UV <+ ,LASTGC 1>> .LAST-UPDATE>> + <PRINC "GC not necessary."> + <CRLF> + <DB-CLOSE .DB1> + <RETURN T .LL>)> + <DB-CLOSE .DB1> + <COND (<LUP-ACT .LIBNAM <> T> + <SET U ,CUR-UPD> + <SET DB1 <UPDB-BASE .U>> + <SET UV <DB-DATA .DB1>> + <SET NN <NEW-NAME <DB-CHAN .DB1>>> + <SETG DB-DEAD <+ ,DB-DEAD 1>> + <PUT .U ,UPDB-NNAME .NN> + <SET CH <OPEN "PRINTB" .NN>> + <COND (<GASSIGNED? GROW-BUF> <SET GB ,GROW-BUF>) + (<SETG GROW-BUF <SET GB <IUVECTOR 1024 0>>>)> + <PUT .GB 1023 4295229440> + <PUT .GB <+ ,FILNAM 1> -20777869980> + <PUT .GB <+ ,HLEN1 1> 251> + <PUT .GB <+ ,HLEN2 1> 751> + <PUT .GB <+ ,FREEPT 1> <+ 1023 923>> + <PUT .GB <+ ,LASTUP 1> .LAST-UPDATE> + <PUT .GB + <+ ,HDRLEN 251 751 1> + <CHTYPE <PUTBITS 0 ,LENGET <- 1022 <+ ,HDRLEN 251 751>>> + FIX>> + <PRINTB .GB .CH> + <MAPR <> <FUNCTION (X) <PUT .X 1 0>> .GB> + <PUT .GB 1023 4295229440> + <LENHACK .GB 0 <- 1022 100>> + <PTRHACK .GB 922 <+ 751 251 ,HDRLEN>> + <LENHACK .GB 922 100> ;"Set up initial page" + <PRINTB .GB .CH> + <CLOSE .CH> + <SET DB2 <DB-OPEN .NN "PRINTO">> + <PUT .U ,UPDB-NEW .DB2> + <DO-GC .DB1 .DB2 <UPDB-DATFILE .U> <UPDB-NEWDAT .U> .VB? .NEW?> + <SETG DB-DEAD <- ,DB-DEAD 1>> + <DB-HASH-MAP .DB2> + <PUT <DB-DATA .DB2> <+ ,LASTGC 1> <DSKDATE>> + ;"Last time garbage-collected" + <DB-CLOSE .DB1> + <LUP-DCT>)>> + +"Get time from system" + +<DEFINE DSKDATE () <COND (<G? ,MUDDLE 100> <TDSKDATE>) (<IDSKDATE>)>> + +" " +<SETG SAVED-ENTRIES <IUVECTOR 1022 ()>> +<DEFINE DO-GC (DB1 DB2 DCH1 DCH2 VB? NEW? "AUX" UV1 UV2 H LIM CUR-BUCKET NEW-ENT + (SE ,SAVED-ENTRIES)) + #DECL ((DB1 DB2) DATA-BASE (DCH1 DCH2) CHANNEL (UV1 UV2) <UVECTOR [REST + FIX]> + (NEW-ENT CUR-BUCKET H LIM) FIX (NEW?) <OR ATOM FALSE> + (SE) <UVECTOR [REST <LIST [REST <VECTOR STRING FIX FIX>]>]>) + <SET UV1 <DB-HASH-MAP .DB1>> + <SET UV2 <DB-HASH-MAP .DB2>> + <MAPR <> <FUNCTION (X) <PUT .X 1 ()>> .SE> + <SET H ,HDRLEN> + <SET LIM <NTH .UV1 <+ ,HLEN1 1>>> + ; +"First we blt all the package entries to the new data base. This includes +checking for the existence of each package's file, and for the correctness +of information in the data file. If the file doesn't exist, the package is +deleted (a message is printed); if the data base entry isn't current, we +redo it (which involves some reasonably gross hacks)." + <REPEAT ((CT 0)) + #DECL ((CT) FIX) + <COND (<G=? .CT .LIM> <RETURN>)> + <DB-ACCESS .DB1 .H> ;"Point to beginning of hash table" + <SET CUR-BUCKET <PTRHACK <DB-DATA .DB1> ,BUCKET>> + ;"Go grovelling down this bucket." + <REPEAT (NL (NH .H) (CURLEN 0) PCK-CHAN PCK-CRDATE PCK-ACCESS + PCK-ENTLEN) + #DECL ((NL PCK-CRDATE PCK-ACCESS NH CURLEN) FIX + (PCK-CHAN) <OR CHANNEL FALSE> (PCK-ENTLEN) <OR FIX FALSE>) + <COND (<0? .CUR-BUCKET> <RETURN>)> + <SET UV1 <DB-ACCESS .DB1 .CUR-BUCKET>> + ;"Point to package entry" + <COND (<PROG () + <COND (<NOT <SET PCK-CHAN <OPEN-NR "READ" <GET-FILE .UV1>>>> + ;"Does file exist?" + <RETURN .PCK-CHAN>)> + <SET PCK-CRDATE <NTH .UV1 <+ ,PACKAGE-CRDATE 1>>> + <COND (<AND <N==? .PCK-CRDATE -1> ;"-1-->no dat file entry" + <OR .NEW? + <L? .PCK-CRDATE + <SET PCK-CRDATE <CRDATE .PCK-CHAN>>>>> + ;"Needs data file entry" + <COND (.VB? + <TELL "Package " <GET-NAME .UV1> + " getting new entry.">)> + <SET PCK-ACCESS <17 .DCH2>> + ;"Access pointer for package" + <COND (<NOT <SET PCK-ENTLEN + <GC-NEW-PACKAGE .PCK-CHAN .CUR-BUCKET + .DCH2 .DB2 .SE>>> + <COND (<NOT <EMPTY? .PCK-ENTLEN>> + <RETURN .PCK-ENTLEN>)> + <SET PCK-ACCESS -1> + <SET PCK-ENTLEN 0> + <SET PCK-CRDATE -1>)> + <PUT .UV1 <+ ,PACKAGE-ACCESS 1> -1>) + ;"-1 here-->new entry" + (<N==? .PCK-CRDATE -1> + <CLOSE .PCK-CHAN> + <SET PCK-ACCESS <17 .DCH2>> + <SET PCK-ENTLEN + <NTH .UV1 <+ ,PACKAGE-ENTLEN 1>>> + <COPY-PACKAGE .UV1 .DCH1 .DCH2>) + (<PUT .UV1 <+ ,PACKAGE-ACCESS 1> -2> + <SET PCK-ACCESS -1> + <SET PCK-ENTLEN 0>)> + <COND (<AND .PCK-CHAN <NOT <0? <1 .PCK-CHAN>>>> + <CLOSE .PCK-CHAN>)> + T> + <SET NL + <+ ,PACKAGE-NAMEBEG + <STRLC <LENHACK .UV1 ,BUCKET>> + <STRLC <LENHACK .UV1 ,FCNCHAIN>>>> + ;"Length of entry" + <SET NEW-ENT <GC-ALLOC .DB2 .NL>> + ;"Allocate new storage" + <DB-ACCESS .DB2 .NH> + ;"Point at last hash bucket entry." + <PTRHACK <DB-DATA .DB2> ,BUCKET .NEW-ENT> + ;"Make it point at new entry" + <SET UV2 <DB-ACCESS .DB2 .NEW-ENT>> + ;"Point at new entry" + <SUBSTRUC .UV1 0 .NL .UV2> ;"BLT the entry over" + <PTRHACK .UV2 ,FCNCHAIN 0> ;"No longer valid" + <PTRHACK .UV1 ,FCNCHAIN 0> + <PTRHACK .UV2 ,BUCKET 0> + <PUT .UV2 <+ ,PACKAGE-ACCESS 1> .PCK-ACCESS> + <PUT .UV2 <+ ,PACKAGE-ENTLEN 1> .PCK-ENTLEN> + <PUT .UV2 <+ ,PACKAGE-CRDATE 1> .PCK-CRDATE> + ;"Datafile stuff" + <SET NH .NEW-ENT> + ;"So next entry will be consed correctly." + <SET CUR-BUCKET <PTRHACK .UV1 ,BUCKET>> + ;"Next elt of bucket" + <PTRHACK .UV1 ,BUCKET .NEW-ENT> + ;"Used in hacking function pointers") + (T + <COND (.VB? + <COND (<TYPE? .PCK-CHAN CHANNEL> + <TELL "Package " <GET-NAME .UV1> + " being flushed."> + <COND (<NOT <0? <1 .PCK-CHAN>>> + <CLOSE .PCK-CHAN>)>) + (<TELL "Package " <GET-NAME .UV1> + " being flushed: " <2 .PCK-CHAN> + "--" <1 .PCK-CHAN>>)>)> + <SET CUR-BUCKET <PTRHACK .UV1 ,BUCKET>> + ;"Losers have cdrs too." + <PTRHACK .UV1 ,BUCKET 0> + ;"So we'll know to flush the guy")>> + <SET H <+ .H 1>> ;"Next hash bucket" + <SET CT <+ .CT 1>>> + ; +"Now move entries over. Note that the following special hacks have already +happened: +The BUCKET slot of packages in the old db is either a pointer to the entry in the +new db or 0 (if the package is going away). This is used for hacking the function +chain. +If a new entry for the package is being made, the PACKAGE-ACCESS slot in the old db +entry is -1. In this case, data for the package entries is stored in .SE, already +properly hashed." + <SET UV1 <DB-HASH-MAP .DB1>> + <SET LIM <NTH .UV1 <+ ,HLEN2 1>>> + <REPEAT ((CT 0) (NH .H) NEW-ENTRY (CURLEN 0) PCK-POINTER FNCT-CHAIN) + #DECL ((NEW-ENTRY CURLEN PCK-POINTER FNCT-CHAIN NH CT) FIX) + <COND (<G=? .CT .LIM> <RETURN>)> + <REPEAT ((HH .H) OLD-ENTRY) + #DECL ((HH OLD-ENTRY) FIX) + <SET UV1 <DB-ACCESS .DB1 .HH>> ;"Point to a pointer" + <COND (<0? <SET OLD-ENTRY <PTRHACK .UV1 ,BUCKET>>> <RETURN>)> + ;"Through with this bucket" + <SET UV1 <DB-ACCESS .DB1 .OLD-ENTRY>> ;"Point to an entry" + <SET CURLEN <+ 1 ,FUNCTION-NAMEBEG <STRLC <LENHACK .UV1 ,BUCKET>>>> + <COND (<AND <NOT <0? <PTRHACK <SET UV1 + <DB-ACCESS .DB1 <NTH .UV1 .CURLEN>>> + ,BUCKET>>> + <N==? <NTH .UV1 <+ ,PACKAGE-ACCESS 1>> -1>> + ;"True if package is staying around and already had valid entry" + <SET NEW-ENTRY <GC-ALLOC .DB2 .CURLEN>> ;"Allocate storage" + <DB-ACCESS .DB2 .NH> + <PTRHACK <DB-DATA .DB2> ,BUCKET .NEW-ENTRY> + ;"Point previous elt at me" + <SET UV2 <DB-ACCESS .DB2 .NEW-ENTRY>> + <SET PCK-POINTER <PTRHACK .UV1 ,BUCKET>> + ;"Get pointer to package entry" + <SET FNCT-CHAIN <PTRHACK .UV1 ,FCNCHAIN>> ;"And to function chain" + <PTRHACK .UV1 ,FCNCHAIN .NEW-ENTRY> ;"Update c1 of fcnchain" + <SET UV1 <DB-ACCESS .DB1 .OLD-ENTRY>> ;"Point back at old entry" + <SUBSTRUC .UV1 0 .CURLEN .UV2> ;"Copy the data" + <PTRHACK .UV2 ,BUCKET 0> ; "Zero in case next elt going away" + <PTRHACK .UV2 ,FCNCHAIN .FNCT-CHAIN> ;"Put in function chain" + <PUT .UV2 .CURLEN .PCK-POINTER> ;"And package pointer" + <PTRHACK <DB-ACCESS .DB2 .PCK-POINTER> ,FCNCHAIN .NEW-ENTRY> + ;"C2 of fcnchain" + <SET NH .NEW-ENTRY>)> + <SET HH .OLD-ENTRY>> + ;"Now go down saved entries for this hash bucket." + <MAPF <> + <FUNCTION (ENT) + #DECL ((ENT) <VECTOR STRING FIX FIX>) + <SET CURLEN + <+ 1 ,FUNCTION-NAMEBEG <STRLC <LENGTH <1 .ENT>>>>> + <SET NEW-ENTRY <GC-ALLOC .DB2 .CURLEN>> + <DB-ACCESS .DB2 .NH> + <PTRHACK <DB-DATA .DB2> ,BUCKET .NEW-ENTRY> + <SET UV2 <DB-ACCESS .DB2 .NEW-ENTRY>> + <SET UV1 <DB-ACCESS .DB1 <2 .ENT>>> + <SET PCK-POINTER <PTRHACK .UV1 ,BUCKET>> + <SET FNCT-CHAIN <PTRHACK .UV1 ,FCNCHAIN>> + <PTRHACK .UV1 ,FCNCHAIN .NEW-ENTRY> + <STR-BLT .UV2 <1 .ENT> ,FUNCTION-NAMEBEG ,BUCKET> + ;"Copy the name in" + <PTRHACK .UV2 ,FCNCHAIN .FNCT-CHAIN> + ;"Point to function chain" + <TYPHACK .UV2 ,BUCKET 0> ;"This is not a package" + <TYPHACK .UV2 ,FCNCHAIN <3 .ENT>> ;"entry/rentry" + <PUT .UV2 .CURLEN .PCK-POINTER> ;"Point to package" + <SET UV2 <DB-ACCESS .DB2 .PCK-POINTER>> + <PTRHACK .UV2 ,FCNCHAIN .NEW-ENTRY> ;"Update function chain" + <SET NH .NEW-ENTRY>> + <NTH .SE <+ .H 1>>> + <SET H <+ .H 1>> + <SET NH .H> + <SET CT <+ .CT 1>>> + <GC-CLEANUP .DB2>> + +" " + +<SETG CUV <IUVECTOR 30>> + +<DEFINE COPY-PACKAGE (UV1 DCH1 DCH2 + "AUX" (CUV ,CUV) + (LEN + </ + <CHTYPE + <GETBITS <NTH .UV1 <+ ,PACKAGE-ENTLEN 1>> + <BITS 18 18>> + FIX> + 5>)) + #DECL ((UV1) UVECTOR (DCH1 DCH2) CHANNEL) + <ACCESS .DCH1 <NTH .UV1 <+ ,PACKAGE-ACCESS 1>>> + <BUFOUT .DCH2> + <REPEAT (CT) + <SET CT <MYIOT .CUV .DCH1 <MIN 30 .LEN>>> + <MYIOT .CUV .DCH2 .CT> + <COND (<L=? <SET LEN <- .LEN .CT>> 0> <RETURN>)>> + <PUT .DCH2 17 <FILE-LENGTH .DCH2>>> + +<DEFINE GC-NEW-PACKAGE (PCK-CHAN CUR-BUCKET DCH2 DB SAVED-ENTRIES "AUX" + (TMP 0) GRP PCK ENTL RENTL (IND '(1))) + #DECL ((PCK-CHAN DCH2) CHANNEL (CUR-BUCKET) FIX (SAVED-ENTRIES) <UVECTOR [REST LIST]> + (ENTL RENTL) LIST (GRP) <OR LIST FALSE>) + <COND (<NOT <SET GRP <LOAD-PACKAGE .PCK-CHAN>>> + <ERROR LOAD-FAILED .GRP GC-NEW-PACKAGE>)> + <COND (<AND <NOT <0? ,NO-ENT>> + <NOT <ERROR UNBALANCED-PACKAGES GC-NEW-PACKAGE ERRET-T-TO-CONTINUE>>>) + (<SET PCK ,CUR-PACK> + <SET ENTL ,CUR-ENTRY> + <SET RENTL ,CUR-RENTRY> + <COND (<OR <NOT <EMPTY? .ENTL>> <NOT <EMPTY? .RENTL>>> + <COND (<NOT <SET TMP <CL .GRP>>> + <ERROR .PCK .TMP GC-NEW-PACKAGE>)> + <FROB-ENTRIES .ENTL .CUR-BUCKET .SAVED-ENTRIES 0 .DB> + <FROB-ENTRIES .RENTL .CUR-BUCKET .SAVED-ENTRIES 1 .DB> + <SET TMP <WRITE-PACKAGE .PCK ,CUR-TYPE .ENTL .RENTL + ,CUR-USES ,CUR-USE-DEFERS .DCH2>> + <BUFOUT .DCH2> + <L-UNUSE .PCK>)>)> + <UNINIT-LUP-PS> + .TMP> + +<DEFINE FROB-ENTRIES (EL CUR-BUCKET SE RP? DB "AUX" UV) + #DECL ((EL) <LIST [REST ATOM]> (CUR-BUCKET) FIX (SE) <UVECTOR [REST LIST]> + (DB) DATA-BASE) + <SET UV <DB-HASH-MAP .DB>> + <MAPF <> + <FUNCTION (X "AUX" HSH) + <SET X <PNAME .X>> + <SET HSH <HASH-NAME .X .UV ,HLEN2>> + <PUT .SE .HSH ([.X .CUR-BUCKET .RP?] !<NTH .SE <+ .HSH 1>>)>> + .EL>> + + +<DEFINE TELL ("TUPLE" FOO "AUX" (OUTCHAN .OUTCHAN)) + #DECL ((OUTCHAN) CHANNEL) + <COND (<NOT <0? <14 .OUTCHAN>>> + <CRLF>)> + <MAPF <> ,PRINC .FOO> + <CRLF>> + +" " + +<DEFINE GC-CLEANUP (DB "AUX" REM CL UV) + #DECL ((DB) DATA-BASE (REM CL) FIX (UV) <UVECTOR [REST FIX]>) + <SET CL <- <DB-FLEN .DB> 1024>> + <SET UV <DB-ACCESS .DB .CL>> ;"Access to beginning of last page." + <COND (<G? <SET REM <LENHACK .UV ,BUCKET>> ,DB-MIN-ENTRY> + ;"Enough here to be interesting?" + <PTRHACK .UV ,BUCKET <PTRHACK .UV 922>> + ;"Splice this into free chain." + <PTRHACK .UV 922 .CL>) + (<PUT .UV <+ ,BUCKET 1> 0> ;"No space, so just zero it.")> + T> + +<DEFINE GC-ALLOC (DB LEN "AUX" CH UV CL REM (W? <>)) + #DECL ((DB) DATA-BASE (LEN CL REM) FIX (UV) <UVECTOR [REST FIX]> + (W?) <OR FIX FALSE> (CH) CHANNEL) + <SET CL <- <DB-FLEN .DB> 1024>> + <SET UV <DB-ACCESS .DB .CL>> ;"Go to beginning of current page" + <COND (<G? <SET REM <- <LENHACK .UV ,BUCKET> .LEN>> 0> + <LENHACK .UV ,BUCKET .REM> + ;"If it will fit with space left, just return" + <+ .CL .REM> ;"Allocate at end of free area") + (T + <COND (<AND <L? .REM 0> ;"Any space left?" + <G=? <LENHACK .UV ,BUCKET> ,DB-MIN-ENTRY> + ;"Big enough to be useful?"> + <PTRHACK .UV ,BUCKET <PTRHACK .UV 922>> + ; +"Make this extra point to the previous page's free area + (which this page's free area points to now..." + <PTRHACK .UV 922 .CL> + ;"Make this free area point to the extra.") + (<PUT .UV <+ ,BUCKET 1> 0> + ;"Zero the length field, if not freeing.")> + <DB-ACCESS .DB ,FREEPT> ;"Get to free pointer" + <PTRHACK ,GROW-BUF 922 <1 <DB-DATA .DB>>> + ; +"New free area points to current chain. Note that lengths already set + up." + <PTRHACK <DB-DATA .DB> ,BUCKET <+ .CL 1024 922>> + ;"And free chain points to new area (which doesn't exist yet)." + <SET CH <DB-CHAN .DB>> + <COND (<L? ,MUDDLE 100> <RESET .CH>)> + <COND (<0? .REM> <SET W? .CL>)> + ;"Returning pointer to old area, don't forget." + <ACCESS .CH <SET CL <DB-FLEN .DB>>> ;"Go to eof" + <PUT .DB ,DB-FLEN <+ .CL 1024>> ;"Update file length" + <PRINTB ,GROW-BUF <DB-CHAN .DB>> ;"Print it out" + <COND (<L? ,MUDDLE 100> <RESET .CH>)> + <SET UV <DB-ACCESS .DB .CL>> ;"Access to new page" + <COND (<NOT .W?> + <SET REM <- <LENHACK .UV ,BUCKET> .LEN>> + ;"Get length after allocation" + <LENHACK .UV ,BUCKET .REM> ;"Put it back in" + <+ .CL .REM>) + (<+ .W? .REM> + ;"There was enough on the previous page, but that's all.")>)>> + +" " + +"SUBTITLE Statistics" + +<DEFINE LIB-STAT (LN + "AUX" (PKC 0) (PKW 0) (ENC 0) (ENW 0) (FRC 0) (FRW 0) PKF ENF + (DB <>) UV HUV (TMP <UVECTOR 0 0 0 0 0 0>) FL + (OUTCHAN .OUTCHAN) HLEN PKE ENE (DFLEN 0) (DFUSE 0) (DFCT 0)) + #DECL ((LN) STRING (DB) <OR DATA-BASE FALSE> + (DFCT DFLEN DFUSE PKE ENE HLEN PKF ENF FL PKC PKW ENC ENW FRC FRW) FIX + (UV HUV) <UVECTOR [REST FIX]> (TMP) <UVECTOR [6 FIX]> + (OUTCHAN) CHANNEL) + <UNWIND + <COND (<SET DB <DB-OPEN .LN>> + <PROG (CH) + <COND (<SET CH <OPEN-DAT-FILE "READ" .LN>> + <SET DFLEN <FILE-LENGTH .CH>> + <CLOSE .CH>)>> + <SET UV <DB-HASH-MAP .DB>> + <COND (<GASSIGNED? HUV> <SET HUV ,HUV>) + (<SETG HUV <SET HUV <IUVECTOR 1022 0>>>)> + <SUBSTRUC .UV 0 1022 .HUV> ;"Permanent copy of hash page" + <REPEAT ((PT <NTH .HUV <+ ,FREEPT 1>>)) + #DECL ((PT) FIX) + <COND (<0? .PT> <RETURN>) + (<SET UV <DB-ACCESS .DB .PT>> + <SET FRC <+ .FRC 1>> + <SET FRW <+ .FRW <LENHACK .UV ,BUCKET>>> + <SET PT <PTRHACK .UV ,BUCKET>>)>> + <HASH-HACK <REST .HUV ,HDRLEN> + <NTH .HUV <+ ,HLEN1 1>> + .DB + 5 + T + .TMP> + <SET PKC <1 .TMP>> + <SET PKW <2 .TMP>> + <SET PKF <3 .TMP>> + <SET PKE <4 .TMP>> + <SET DFUSE <5 .TMP>> + <SET DFCT <6 .TMP>> + <HASH-HACK <REST .HUV <+ ,HDRLEN <NTH .HUV <+ ,HLEN1 1>>>> + <NTH .HUV <+ ,HLEN2 1>> + .DB + 3 + <> + .TMP> + <SET ENC <1 .TMP>> + <SET ENW <2 .TMP>> + <SET ENF <3 .TMP>> + <SET ENE <4 .TMP>> + <CRLF> + <PRINC "Last update: "> + <PDSKDATE <NTH .HUV <+ ,LASTUP 1>> .OUTCHAN> + <CRLF> + <PRINC "Last GC: "> + <COND (<0? <SET FL <NTH .HUV <+ ,LASTGC 1>>>> <PRINC "Never">) + (<PDSKDATE <NTH .HUV <+ ,LASTGC 1>> .OUTCHAN>)> + <CRLF> + <PRINC "Library file length: "> + <PRIN1 <SET FL <FILE-LENGTH <DB-CHAN .DB>>>> + <CRLF> + <PRIN1 <SET HLEN + <+ ,HDRLEN + <NTH .HUV <+ ,HLEN1 1>> + <NTH .HUV <+ ,HLEN2 1>>>>> + <PRINC " words of header and hash tables."> + <CRLF> + <PRIN1 .PKC> + <PRINC " packages, "> + <PRIN1 .PKW> + <PRINC " words."> + <CRLF> + <PRINC " "> + <PRIN1 .PKF> + <PRINC " crossing"> + <COND (<NOT <1? .PKF>> <PRINC !\s>)> + <PRINC " of page boundaries. "> + <PRIN1 .PKE> + <PRINC " empty hash bucket"> + <COND (<NOT <1? .PKE>> <PRINC !\s>)> + <PRINC !\.> + <CRLF> + <PRIN1 .ENC> + <PRINC " entries, "> + <PRIN1 .ENW> + <PRINC " words."> + <CRLF> + <PRINC " "> + <PRIN1 .ENF> + <PRINC " crossing"> + <COND (<NOT <1? .ENF>> <PRINC !\s>)> + <PRINC " of page boundaries. "> + <PRIN1 .ENE> + <PRINC " empty hash bucket"> + <COND (<NOT <1? .ENE>> <PRINC !\s>)> + <PRINC !\.> + <CRLF> + <PRINC "Free chain is "> + <PRIN1 .FRC> + <PRINC " entries long, containing "> + <PRIN1 .FRW> + <PRINC " words."> + <CRLF> + <PRIN1 <SET FL + <- .FL + <+ <* 2 </ .FL 1024>> .HLEN .PKW .ENW .FRW>>>> + <PRINC " word"> + <COND (<NOT <1? .FL>> <PRINC !\s>)> + <PRINC " lost."> + <CRLF> + <COND (<0? .DFLEN> <PRINC "The data file is empty.">) + (T + <PRINC "The data file is "> + <PRINC </ .DFLEN 5>> + <PRINC " words long; "> + <PRINC </ .DFUSE 5>> + <PRINC " words in use."> + <CRLF> + <PRIN1 .DFCT> + <PRINC " packages with data file entries.">)> + <DB-CLOSE .DB> + <CRLF>)> + <COND (.DB <DB-CLOSE .DB>)>>> + +<DEFINE HASH-HACK (HUV NUM DB OVH PACKAGE? TMP + "AUX" (DFCT 0) (DFUSE 0) (E 0) (C 0) (W 0) (F 0) UV) + #DECL ((HUV UV) <UVECTOR [REST FIX]> (DB) DATA-BASE (DFCT DFUSE F NUM OVH C W) FIX + (TMP) <UVECTOR [6 FIX]> (PACKAGE?) <OR ATOM FALSE>) + <REPEAT (PT TC) + #DECL ((TC PT) FIX) + <COND + (<NOT <0? <SET PT <1 .HUV>>>> + <REPEAT () + <SET UV <DB-ACCESS .DB .PT>> + <SET C <+ .C 1>> + <SET W + <+ .W + .OVH + </ <+ 4 <LENHACK .UV ,BUCKET>> 5> + </ <+ 4 <LENHACK .UV ,FCNCHAIN>> 5>>> + <COND (.PACKAGE? + <SET DFUSE + <+ .DFUSE + <CHTYPE <GETBITS <NTH .UV <+ ,PACKAGE-ENTLEN 1>> + <BITS 18 18>> + FIX>>> + <COND (<N==? <NTH .UV <+ ,PACKAGE-ACCESS 1>> -1> + <SET DFCT <+ .DFCT 1>>)>)> + <COND (<0? <SET PT <PTRHACK .UV ,BUCKET>>> <RETURN>)> + <COND (<OR <AND <0? <DB-CPAGE .DB>> <N==? <DB-PAGE0 .DB> </ .PT 1024>>> + <AND <1? <DB-CPAGE .DB>> + <N==? <DB-PAGE1 .DB> </ .PT 1024>>>> + <SET F <+ .F 1>>)>>) + (<SET E <+ .E 1>>)> + <COND (<0? <SET NUM <- .NUM 1>>> + <PUT .TMP 1 .C> + <PUT .TMP 2 .W> + <PUT .TMP 3 .F> + <PUT .TMP 4 .E> + <COND (.PACKAGE? <PUT .TMP 5 .DFUSE> + <PUT .TMP 6 .DFCT>)> + <RETURN>) + (<SET HUV <REST .HUV>>)>>> + +<DEFINE PDSKDATE (DATE OUTCHAN "AUX" TMP) + #DECL ((TMP DATE) FIX (OUTCHAN) CHANNEL) + <PRIN1 <CHTYPE <GETBITS .DATE <BITS 4 23>> FIX>> + <PRINC !\/> + <PRIN1 <CHTYPE <GETBITS .DATE <BITS 5 18>> FIX>> + <PRINC !\/> + <PRIN1 <CHTYPE <GETBITS .DATE <BITS 7 27>> FIX>> + <PRINC " at "> + <SET DATE </ <CHTYPE <GETBITS .DATE <BITS 18 0>> FIX> 2>> + <SET TMP </ .DATE 3600>> + <COND (<0? .TMP> <PRINC !\0>)> + <PRIN1 .TMP> + <PRINC !\:> + <SET DATE <MOD .DATE 3600>> + <SET TMP </ .DATE 60>> + <COND (<L? .TMP 10> <PRINC !\0>)> + <PRIN1 .TMP> + <PRINC !\:> + <SET TMP </ .DATE 60>> + <COND (<L? .TMP 10> <PRINC !\0>)> + <PRIN1 .TMP>> + +<ENDPACKAGE> diff --git a/src/libmud/nlupcr.8 b/src/libmud/nlupcr.8 new file mode 100644 index 00000000..e1c102dd --- /dev/null +++ b/src/libmud/nlupcr.8 @@ -0,0 +1,154 @@ +<TITLE ZERO> + <DECLARE ("VALUE" DATA-BASE DATA-BASE FIX FIX)> + <DPUSH TP* (AB)> + <DPUSH TP* 2(AB)> + <DPUSH TP* 4(AB)> + <PUSHJ P* IZERO> + <JRST FINIS> + +<INTERNAL-ENTRY IZERO 3> + <SUBM M* (P)> + <PUSH TP* -5(TP)> + <PUSH TP* -5(TP)> + <PUSH TP* -5(TP)> + <PUSH TP* -5(TP)> + <MCALL 2 DB-ACCESS> ; "Returns uv" + <SETZM (B)> + <HRL D* B> + <HRRI D* 1(B)> + <ADD B* (TP)> + <BLT D* -1(B)> + <SUB TP* [<(4) 4>]> + <POP TP* B> + <POP TP* A> + <JRST MPOPJ> + +<SUB-ENTRY STR-BLT ("VALUE" UVECTOR UVECTOR STRING FIX FIX)> + <DPUSH TP* (AB)> ; "Uvector to put it in" + <DPUSH TP* 2(AB)> ; "String to move" + <DPUSH TP* 4(AB)> ; "Offset of first word" + <DPUSH TP* 6(AB)> ; "Place to put length" + <PUSHJ P* ISTRBL> + <JRST FINIS> + +<INTERNAL-ENTRY ISTRBL 4> + <SUBM M* (P)> + <MOVE B* -6(TP)> ; "Pick up uvector" + <MOVE C* -4(TP)> ; "String" + <HRRZ A* -5(TP)> ; "Length" + <ADD B* -2(TP)> + <HRLI B* *440700*> +STRBLL <ILDB O* C> + <IDPB O* B> + <SOJG A* STRBLL> + <MOVE B* -6(TP)> + <ADD B* (TP)> + <HRRZ A* -5(TP)> + <DPB A* [<%<CHTYPE ,LENGET OPCODE!-OP!-PACKAGE> (B)>]> + <SUB TP* [<(6) 6>]> + <POP TP* B> + <POP TP* A> + <JRST MPOPJ> + +<SUB-ENTRY TDSKDATE ("VALUE" FIX)> + <PUSHJ P* ITDSKDA> + <JRST FINIS> + +<INTERNAL-ENTRY ITDSKDA 0> + <SUBM M* (P)> + <HRROI B* -1> ; "-1 TO SAY CURRENT TIME" + <MOVEI D* 0> ; "NOTHING FANCY" + <ODCNV> ; "B HAS YEAR,,MONTH; C DAY,,; D ,,TIME" + <TLZ D* -1> ; "CLEAN OUT LH OF D" + <ASH D* 1> ; "TIME IN HALF-SECONDS" + <HLRZS C> ; "GET DAY OF MONTH -1" + <ADDI C* 1> ; "DO THE RIGHT THING" + <DPB C* [<(*220500*) D>]> ; "STUFF DAY INTO D" + <IDIV B* [(1)]> ; "SPLIT B IN HALF" + <ADDI C* 1> ; "GET REAL MONTH" + <DPB C* [<(*270400*) D>]> ; "STUFF IN MONTH" + <IDIVI B* 100> ; "GET YEAR OF CENTURY IN C" + <DPB C* [<(*330700*) D>]> ; "STUFF IN YEAR" + <MOVE B* D> + <MOVSI A* <TYPE-CODE FIX>> + <JRST MPOPJ> + +<SUB-ENTRY IDSKDATE ("VALUE" FIX)> + <PUSHJ P* IIDSKDA> + <JRST FINIS> + +<INTERNAL-ENTRY IIDSKDA 0> + <SUBM M* (P)> + <*CALL [<SETZ> + <SIXBIT "RQDATE"> + <SETZM B>]> + <*LOSE *1000*> + <MOVSI A* <TYPE-CODE FIX>> + <JRST MPOPJ> + +<SUB-ENTRY MYIOT ("VALUE" FIX UVECTOR CHANNEL "OPTIONAL" FIX)> + <HLRE A* AB> +PLOOP <DPUSH TP* (AB)> + <ADD AB* [<(2) 2>]> + <JUMPL AB* PLOOP> + <ASH A* -1> + <ADDI A* TABEND> + <PUSHJ P* @ 2 (A)> + <JRST FINIS> + <IMYIOT3> +TABEND <IMYIOT2> + +<INTERNAL-ENTRY IMYIOT2 2> + <HLRE A* -2(TP)> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* A> +<INTERNAL-ENTRY IMYIOT3 3> + <SUBM M* (P)> + <SKIPLE (TP)> + <MOVNS (TP)> + <MOVE A* <MQUOTE <RGLOC MUDDLE>>> + <ADD A* GLOTOP 1> + <MOVE A* 1(A)> + <CAIL A* 100> + <JRST TMYIOT> + <MOVE B* -4(TP)> + <MOVE A* -2(TP)> + <HRL B* (TP)> + <*CALL [<SETZ> + <SIXBIT "IOT"> + <MOVE 1(A)> + <SETZ B>]> + <*LOSE *1400*> + <HLRES B> + <SUB B* (TP)> +MYIOTO <MOVSI A* <TYPE-CODE FIX>> + <SUB TP* [<(6) 6>]> + <JRST MPOPJ> +TMYIOT <MOVE D* -2(TP)> + <MOVE A* 1(D)> + <HRR B* -4(TP)> + <HRLI B* *444400*> + <MOVE C* (TP)> ; "<0, SO IGNORES D" + <MOVE D* 3(D)> + <ILDB D* D> + <MOVE E* [<SIN-JSYS>]> + <CAIE D* !\R> + <MOVE E* [<SOUT>]> + <XCT E> + <SUB C* (TP)> + <MOVE B* C> + <JRST MYIOTO> + +<SUB-ENTRY LOCR-TO-ATOM ("VALUE" ATOM LOCR)> + <DPUSH TP* (AB)> + <PUSHJ P* ILOCR> + <JRST FINIS> + +<INTERNAL-ENTRY ILOCR 1> + <SUBM M* (P)> + <MOVE C* (TP)> + <ADD C* GLOTOP 1> + <MOVE B* -1(C)> + <MOVSI A* <TYPE-CODE ATOM>> + <SUB TP* [<(2) 2>]> + <JRST MPOPJ> diff --git a/src/libmud/npck.26 b/src/libmud/npck.26 new file mode 100644 index 00000000..1a60097c --- /dev/null +++ b/src/libmud/npck.26 @@ -0,0 +1,775 @@ + +<BLOCK <ROOT>> + +\ \ F + +PACKAGE + +RPACKAGE + +ENTRY + +RENTRY + +EXTERNAL + +USE + +USE-TOTAL + +USE-DATFILE + +DROP + +NULL-OBLIST + +ENDPACKAGE + +FILSTR + +FILPRS + +L-SEARCH-PATH + +L-SECOND-NAMES + +L-LOAD + +L-LOADER + +L-DOITEM + +L-LIBRARY-NAME + +L-DATFILE-NAME + +L-DATUM + +USE-DATUM + +L-NO-FILES + +L-NO-MAGIC + +L-ALWAYS-INQUIRE + +L-USE-DATFILE + +L-MUST-DATFILE + +L-HANDLER + +L-UNUSE + +USE-DEFER + +L-GASSIGNED? + +L-NO-DEFER + +L-NOISY + +L-TRANSLATIONS + +TRANSLATE + +UNTRANSLATE + +TRANSLATIONS + +IN-COLLECTION + +<MOBLIST PACKAGE 29> + +<MOBLIST PKG!-PACKAGE 17> + +"Set up entries in LIB that we use. This eliminates the necessity +of previous obscene hacks, and may even make it possible to glue this +crock." +<BLOCK (<MOBLIST LIB!-PACKAGE 17> + <ROOT>)> +ENTRY-FIND +PACKAGE-FIND +DEFER-FIND +DEFINF +DEF-RP? DEF-PNM DEF-FNM DEF-EL DEF-REL DEF-CRDATE DEF-ACCPTR DEF-ENTLEN +CRDATE +<ENDBLOCK> + +<SETG OBLIST (<GET INITIAL OBLIST> <ROOT>)> + +<BLOCK (<MOBLIST IPKG!-PKG!-PACKAGE 23> + <GET PKG!-PACKAGE OBLIST> + <ROOT> + <GET LIB!-PACKAGE OBLIST>)> + +<PARSE "SEARCH!-PKG!-PACKAGE"> ; "Used by L package" + +<SETG PKG!-PACKAGE .OBLIST> + +<SETG PKG-OB <GET PACKAGE OBLIST>> + +<SETG COL-OB <MOBLIST RPACKAGE 7>> + +<SETG L-SEARCH-PATH + <COND (<G? ,MUDDLE 100> + '("LIBMUD" [] "PS:<MDLLIB>LIBMUD" ["PS" "MDLLIB"])) + ('("LIBMUD" [] "LIBMUD;LIBMUD" ["DSK" "MBPROG"] + ["DSK" "MPROG" ">"]))>> + +<SETG L-SECOND-NAMES + <COND (<G? ,MUDDLE 100> + '["FBIN" "GBIN" "NBIN" "MUD"]) + ('["FBIN" "GBIN" "NBIN" ">"])>> +<GDECL (L-SECOND-NAMES) VECTOR + (L-SEARCH-PATH) <LIST [REST <OR STRING VECTOR>]> + (MUDDLE) FIX> + +<SETG L-LIBRARY-NAME "NLIB"> + +<SETG L-DATFILE-NAME "DAT"> + +<SETG L-NO-FILES <>> + +<SETG L-NOISY T> + +<OR <GASSIGNED? L-TRANSLATIONS> <SETG L-TRANSLATIONS ()>> + +<FLOAD "LIBMUD;PCKSBR NBIN"> + +<DEFINE FILSTR ("TUPLE" T "AUX" (CHN <CHANNEL "READ" !.T>)) + #DECL ((VALUE) STRING (T) <TUPLE [REST STRING]> (CHN) CHANNEL) + <COND (<G? ,MUDDLE 100> + <STRING <9 .CHN> ":<" <10 .CHN> !\> <7 .CHN> !\. <8 .CHN>>) + (<STRING <9 .CHN> !\: <10 .CHN> !\; <7 .CHN> !\ <8 .CHN>>)>> + +<DEFINE FILPRS (FIL "AUX" (CHN <CHANNEL "READ" .FIL>)) + #DECL ((VALUE) <LIST [REST STRING]> (FIL) STRING (CHN) CHANNEL) + (<7 .CHN> <8 .CHN> <9 .CHN> <10 .CHN>)> + +<DEFINE FIND/LOAD FL (STR + "OPTIONAL" (L ,L-SEARCH-PATH) (DATFILE? <>) + "AUX" CHN CH (TMP <>) (OUTCHAN ,OUTCHAN) (NO-LOAD <>) + (OBL .OBLIST) (TSTR "") (DATLEN <>) (TL <>)) + #DECL ((STR) STRING (L) <OR LIST STRING> (OUTCHAN) <SPECIAL CHANNEL> + (TSTR) <OR STRING FALSE> (CH) <CHANNEL FIX> (DATFILE?) <OR ATOM FALSE> + (DATLEN) <OR FALSE FIX> (TL) <OR FALSE LIST> (NO-LOAD) <SPECIAL ANY>) + <SET TSTR <TRANSLATE? .STR>> + <COND (<AND .TSTR <SET TMP <LOOKUP .TSTR ,PKG-OB>> <GASSIGNED? .TMP> + <OR .DATFILE? <NOT <GET <SET TL ,.TMP> NOT-LOADED>>>> + .TMP) + (T + <COND (<TYPE? .L STRING> + <SET CHN <OPEN "READ" .L>>) + (<SET CHN <SEARCH .STR .L .DATFILE?>>)> + <COND (<NOT .CHN> <RETURN .CHN .FL>)> + <COND (<AND .DATFILE? + <NOT <TYPE? .CHN CHANNEL>>> + <SET CHN <LOAD-DATFILE .CHN>>)> + <COND (.CHN + <SET CH .CHN> + <COND (,L-NOISY + <PRINC "/"> + <PRINC .STR> + <COND (<N==? .STR .TSTR> + <PRINC !\=> + <COND (<NOT .TSTR> + <PRINC "<>">) + (<PRINC .TSTR>)>)> + <PRINC !\ >)> + <COND (.TL <PUTPROP .TL NOT-LOADED>)>)> + <UNWIND + <PROG ((PKO ,PKG-OB) (LOADER <AND <GASSIGNED? L-LOADER> + ,L-LOADER>)) + <COND (<NOT .CHN>) + (<AND .LOADER <APPLICABLE? .LOADER>> + <APPLY .LOADER .CH>) + (<LOAD .CH>)> + <COND (.TSTR + <OR <LOOKUP .TSTR .PKO> + <PROG () + <SET TMP <INSERT .STR .PKO>> + <SETG .TMP .OBL> + .TMP>>) + (T)>> + <PROG (PCK) + #DECL ((PCK) <OR ATOM FALSE>) + <COND (<NOT <0? <1 .CH>>> <CLOSE .CH>)> + <COND (<AND <SET PCK <GET .OBL IN-COLLECTION>> + <OR <AND <NOT .TSTR> <==? .PCK T>> + <=? .TSTR <SPNAME .PCK>>>> + <PUTPROP .OBL IN-COLLECTION> + <ENDBLOCK>)>>>)>> + +<DEFINE LOAD-DATFILE L-D (DAT "AUX" DCR OBJ (DEFINF <1 .DAT>) TCH NM2 DATLEN) + #DECL ((DAT) <VECTOR DEFINF STRING> (DEFINF) DEFINF (TCH) <OR CHANNEL FALSE> + (NM2) <SPECIAL STRING> (DATLEN DCR) FIX) + <COND (<SET TCH <OPEN "READ" <DEF-FNM .DEFINF>>> + <COND (<OR <==? <SET DCR <DEF-CRDATE .DEFINF>> -1> + <N==? .DCR <CRDATE .TCH>>> + <COND (<AND <N==? .DCR -1> + <GASSIGNED? L-ALWAYS-DATFILE> + ,L-ALWAYS-DATFILE> + <ERROR CANT-USE-DATFILE-ENTRY + <DEF-PNM .DEFINF> + FIND/LOAD>)> + <RETURN .TCH .L-D>)> + <CLOSE .TCH> + <SET NM2 ,L-DATFILE-NAME> + <COND (<SET TCH <OPEN "READ" <2 .DAT>>> + <ACCESS .TCH <DEF-ACCPTR .DEFINF>> + <SET DATLEN <CHTYPE <GETBITS <DEF-ENTLEN .DEFINF> <BITS 18 0>> FIX>> + <REPEAT ((NO-LOAD T)) + #DECL ((NO-LOAD) <SPECIAL ANY>) + <EVAL <READ .TCH>> + <COND (<0? <SET DATLEN <- .DATLEN 1>>> + <CLOSE .TCH> + <RETURN>)>> + <SET OBJ [<DEF-PNM .DEFINF> <DEF-FNM .DEFINF>]> + <COND (<DEF-RP? .DEFINF> + <ASSOC-HACK .OBJ <DEF-EL .DEFINF>>) + (<PUT <GET <LOOKUP <DEF-PNM .DEFINF> ,PKG-OB> OBLIST> + USE-DEFER .OBJ>)> + <ASSOC-HACK .OBJ <DEF-REL .DEFINF>> + <>) + (T + <COND (,L-ALWAYS-DATFILE + <ERROR DATFILE-MISSING .TCH FIND/LOAD>)> + <OPEN "READ" <DEF-FNM .DEFINF>>)>) + (<ERROR CANT-FIND-PACKAGE <DEF-PNM .DEFINF> .TCH LOAD-DATFILE>)>> + +<DEFINE ASSOC-HACK (OBJ EL "AUX" ATM) + #DECL ((EL) <LIST [REST STRING]>) + <MAPF <> + <FUNCTION (X) + <SET ATM <LOOKUP .X <ROOT>>> + <PUT .ATM USE-DEFER .OBJ>> + .EL>> + +<DEFINE SEARCH (IND L "OPTIONAL" (DATFILE? <>)) + #DECL ((L) <LIST [REST <OR STRING VECTOR>]> (DATFILE?) <OR ATOM FALSE>) + <REPEAT SEARCH (STR CH SPEC DIR DEV (L-NO-FILES ,L-NO-FILES) PCK-IN) + #DECL ((CH) <OR CHANNEL FALSE> (SPEC) <OR STRING VECTOR> + (SEARCH) ACTIVATION (STR) <OR STRING FALSE> (PCK-IN) <OR VECTOR FALSE>) + <COND (<EMPTY? .L> <RETURN <>>)> + <COND (<TYPE? <SET SPEC <1 .L>> STRING> + <COND (.DATFILE? + <COND (<SET PCK-IN <DEFER-FIND .IND .SPEC T>> + <RETURN [.PCK-IN .SPEC]>)>) + (T + <COND (<SET STR <AND <GASSIGNED? PACKAGE-FIND> + ; "Don't run it if it's not around" + <PACKAGE-FIND .IND .SPEC>>> + <RETURN <OPEN "READ" .STR>>)>)>) + (<NOT .L-NO-FILES> + <COND (<OR <EMPTY? .SPEC> + <NOT <1 .SPEC>>> + <SET DIR <SNAME>> + <SET DEV "DSK">) + (<==? <LENGTH .SPEC> 1> + <SET DIR <1 .SPEC>> + <SET DEV "DSK">) + (<SET DIR <2 .SPEC>> + <SET DEV <1 .SPEC>>)> + <COND (<L=? <LENGTH .SPEC> 2> + <SET SPEC ,L-SECOND-NAMES>) + (<SET SPEC <REST .SPEC 2>>)> + <MAPF <> + <FUNCTION (X) #DECL ((X) STRING) + <COND (<SET CH <OPEN "READ" .IND .X .DEV .DIR>> + <RETURN .CH .SEARCH>)>> + .SPEC>)> + <SET L <REST .L>>>> + +<DEFINE PACKAGE (NAME + "OPTIONAL" (INAME .NAME) (SIZE 19) (ISIZE 23) + "AUX" TNAME ATM IATM OBL IOBL TMP (OBLIS .OBLIST)) + #DECL ((NAME INAME) STRING (SIZE ISIZE) FIX (ATM IATM VALUE) ATOM + (OBL IOBL) OBLIST (TNAME) <OR FALSE STRING> (TMP) LIST + (OBLIS) LIST) + <SET TNAME <TRANSLATE? .NAME>> + <COND (.TNAME + <COND (<==? .INAME .NAME> <SET INAME <STRING !\I .TNAME>>)> + <SET ATM + <OR <LOOKUP .TNAME ,PKG-OB> <INSERT .TNAME ,PKG-OB>>> + <SET OBL <MOBLIST .ATM .SIZE>> + <SET IATM <OR <LOOKUP .INAME .OBL> <INSERT .INAME .OBL>>> + <SET IOBL <MOBLIST .IATM .ISIZE>> + <BLOCK <SETG .ATM <SET TMP (.IOBL .OBL <ROOT>)>>> + <COND (<AND <ASSIGNED? NO-LOAD> .NO-LOAD> + <PUT .TMP NOT-LOADED T>)>) + (<BLOCK <SET TMP (<1 .OBLIS> !.OBLIS)>> + <SET ATM T>)> + <COND (.TNAME <PUTPROP .ATM IOBLIST .IATM>)> + <PUTPROP .TMP IN-COLLECTION .ATM> + .ATM> + +<DEFINE RPACKAGE (NAME + "OPTIONAL" (INAME .NAME) (ISIZE 23) + "AUX" ATM IATM IOBL TNAME TMP) + #DECL ((NAME INAME) STRING (ISIZE) FIX (ATM IATM VALUE) ATOM + (IOBL) OBLIST (TNAME) <OR FALSE STRING>) + <SET TNAME <TRANSLATE? .NAME>> + <COND (.TNAME + <COND (<N==? .NAME .INAME> <SET INAME <STRING !\I .NAME>>)> + <SET ATM + <OR <LOOKUP .TNAME ,PKG-OB> <INSERT .TNAME ,PKG-OB>>> + <SET IATM + <OR <LOOKUP .INAME ,COL-OB> <INSERT .INAME ,COL-OB>>> + <SET IOBL <MOBLIST .IATM .ISIZE>> + <BLOCK <SETG .ATM <SET TMP (.IOBL <ROOT>)>>> + <COND (<AND <ASSIGNED? NO-LOAD> .NO-LOAD> + <PUT .TMP NOT-LOADED T>)> + <PUT .ATM IOBLIST .IATM>) + (<BLOCK <SET TMP (<1 .OBLIST> <ROOT>)>> + <SET ATM T>)> + <PUT .TMP IN-COLLECTION .ATM> + .ATM> + +<DEFINE RENTRY ("TUPLE" NAMES) + #DECL ((NAMES) <TUPLE [REST ATOM]>) + <DO-ENTRY .NAMES <ROOT>>> + +<DEFINE ENTRY ("TUPLE" NAMES) + #DECL ((NAMES) <TUPLE [REST ATOM]>) + <DO-ENTRY .NAMES <2 .OBLIST>>> + +<DEFINE DO-ENTRY (NAMES OBL "AUX" (OBLIS .OBLIST) (NAME T)) + #DECL ((VALUE NAME) ATOM (NAMES) <TUPLE [REST ATOM]> (OBL) OBLIST + (OBLIS) LIST) + <PUTPROP .OBL USE-DEFER> + <COND (<NOT <GET .OBLIS IN-COLLECTION>> + <ERROR ENTRY NOT-IN-PACKAGE-OR-COLLECTION!-ERRORS>)> + <REPEAT () + <COND (<EMPTY? .NAMES> <RETURN .NAME>)> + <SET NAME <1 .NAMES>> + <SET NAMES <REST .NAMES>> + <COND (<==? .OBL <ROOT>> <PUTPROP .NAME USE-DEFER>)> + <COND (<==? <OBLIST? .NAME> <1 .OBLIS>> + <INSERT <REMOVE .NAME> .OBL>) + (<NOT <==? <OBLIST? .NAME> .OBL>> + <ERROR ENTRY .NAME ALREADY-USED-ELSEWHERE!-ERRORS>)>>> + +<DEFINE USE-DATFILE ("TUPLE" NAMES "AUX" (SV1 <AND <GASSIGNED? L-USE-DATFILE> + ,L-USE-DATFILE>) + (SV2 <AND <GASSIGNED? L-ALWAYS-DATFILE> ,L-ALWAYS-DATFILE>)) + <UNWIND + <PROG (VAL) + <SETG L-USE-DATFILE T> + <SETG L-ALWAYS-DATFILE T> + <SET VAL <USE !.NAMES>> + <SETG L-USE-DATFILE .SV1> + <SETG L-ALWAYS-DATFILE .SV2> + .VAL> + <PROG () + <SETG L-USE-DATFILE .SV1> + <SETG L-ALWAYS-DATFILE .SV2>>>> + +<DEFINE USE ("TUPLE" NAMES "AUX" (OBLIS .OBLIST) NAME PK OBL N M) + #DECL ((VALUE) ATOM (NAMES) <TUPLE [REST STRING]> (PK) <OR ATOM FALSE> + (NAME) STRING (OBL) <OR FALSE OBLIST> (N M) FIX + (OBLIS) <LIST [REST OBLIST]>) + <REPEAT ((L-UD <AND <GASSIGNED? L-USE-DATFILE> ,L-USE-DATFILE>) + (L-SP ,L-SEARCH-PATH)) + <COND (<EMPTY? .NAMES> <RETURN USE>)> + <SET NAME <1 .NAMES>> + <SET NAMES <REST .NAMES>> + <SET PK <FIND/LOAD .NAME .L-SP .L-UD>> + <COND + (<NOT .PK> <ERROR PACKAGE .NAME NOT-FOUND!-ERRORS>) + (<==? .PK T>) + (<AND <SET OBL <GET .PK OBLIST>> <NOT <MEMQ .OBL .OBLIS>>> + <COND (<NOT <0? <SET N <LENGTH <MEMQ ,PKG-OB .OBLIS>>>>> + <PUTREST <REST .OBLIS <- <SET M <LENGTH .OBLIS>> .N 1>> + (.OBL !<REST .OBLIS <- .M .N>!>)>) + (T + <PUTREST <REST .OBLIS <- <LENGTH .OBLIS> 1>> (.OBL)>)>)>>> + +<DEFINE USE-TOTAL ("TUPLE" NAMES "AUX" (OBLIS .OBLIST) NAME PK OBL N M) + #DECL ((VALUE) ATOM (NAMES) <TUPLE [REST STRING]> (PK) <OR ATOM FALSE> + (NAME) STRING (OBL) <OR FALSE OBLIST> (N M) FIX + (OBLIS) <LIST [REST OBLIST]>) + <REPEAT () + <COND (<EMPTY? .NAMES> <RETURN USE>)> + <SET NAME <1 .NAMES>> + <SET NAMES <REST .NAMES>> + <SET PK <FIND/LOAD .NAME>> + <COND + (<NOT .PK> <ERROR PACKAGE .NAME NOT-FOUND!-ERRORS>) + (<==? .PK T>) + (<AND <SET OBL <GET .PK OBLIST>> <NOT <MEMQ .OBL .OBLIS>>> + <COND (<NOT <0? <SET N <LENGTH <MEMQ ,PKG-OB .OBLIS>>>>> + <PUTREST <REST .OBLIS <- <SET M <LENGTH .OBLIS>> .N 1>> + (.OBL !<REST .OBLIS <- .M .N>!>)>) + (T + <PUTREST <REST .OBLIS <- <LENGTH .OBLIS> 1>> (.OBL)>)>)> + <COND + (<AND <SET PK <OR <GET .PK IOBLIST> + <LOOKUP <STRING !\I <SPNAME .PK>> <GET .PK OBLIST>>>> + <SET OBL <GET .PK OBLIST>> + <NOT <MEMQ .OBL .OBLIS>>> + <COND (<NOT <0? <SET N <LENGTH <MEMQ ,PKG-OB .OBLIS>>>>> + <PUTREST <REST .OBLIS <- <SET M <LENGTH .OBLIS>> .N 1>> + (.OBL !<REST .OBLIS <- .M .N>!>)>) + (T + <PUTREST <REST .OBLIS <- <LENGTH .OBLIS> 1>> (.OBL)>)>)>>> +<SETG L-NO-DEFER <>> + +<DEFINE L-GASSIGNED? (ATM "AUX" O TMP) + #DECL ((O) <OR OBLIST FALSE> (TMP) <OR FALSE <VECTOR [2 STRING]>>) + <COND (<GASSIGNED? .ATM>) + (<COND (<==? <SET O <OBLIST? .ATM>> <ROOT>> + <SET TMP <GET .ATM USE-DEFER>>) + (.O <SET TMP <GET .O USE-DEFER>>)> + <FIND/LOAD <1 .TMP> <2 .TMP>> + <USE <1 .TMP>> + <COND (<NOT <GASSIGNED? .ATM>> + <ERROR PACKAGE "PACKAGE DID NOT DEFINE FUNCTION">)> + T)>> + +<SETG EXTERNAL ,USE> + +<DEFINE DROP ("TUPLE" NAMES "AUX" NAME PK OBL N) + #DECL ((VALUE) ATOM (NAMES) <TUPLE [REST STRING]> (PK) <OR ATOM FALSE> + (N) FIX (NAME) <OR STRING FALSE> (OBL) <OR FALSE OBLIST> + (OBLIST) <LIST [REST OBLIST]>) + <REPEAT ((OBLIS .OBLIST) TMP) + #DECL ((OBLIS) LIST (TMP) <OR <LIST <OR STRING FALSE>> FALSE>) + <COND (<EMPTY? .NAMES> <RETURN DROP>)> + <SET NAME <TRANSLATE? <1 .NAMES>>> + <SET NAMES <REST .NAMES>> + <COND (<NOT .NAME> <AGAIN>)> + <COND (<NOT <SET PK <LOOKUP .NAME ,PKG-OB>>> + <ERROR PACKAGE .NAME NOT-PACKAGE-OR-COLLECTION!-ERRORS>)> + <SET OBL <GET .PK OBLIST>> + <COND (<NOT <0? <SET N <LENGTH <MEMQ .OBL .OBLIS>>>>> + <PUTREST <REST .OBLIS <SET N <- <LENGTH .OBLIS> .N 1>>> + <REST .OBLIS <+ .N 2>>>)> + <COND (<AND <SET PK <OR <GET .PK IOBLIST> + <LOOKUP <STRING !\I <SPNAME .PK>> + .OBL>>> + <SET OBL <GET .PK OBLIST>>> + <COND (<NOT <0? <SET N <LENGTH <MEMQ .OBL .OBLIS>>>>> + <PUTREST <REST .OBLIS <SET N <- <LENGTH .OBLIS> .N 1>>> + <REST .OBLIS <+ .N 2>>>)>)>>> + +<SETG NULL-OBLIST <MOBLIST NULL 1>> + +<DEFINE ENDPACKAGE ("OPTIONAL" (PKNM <>) "AUX" (OBLIS .OBLIST) + PK IATM OBL VAL) + #DECL ((PK) <OR ATOM FALSE> (VALUE) ATOM (PKNM) <OR FALSE ATOM STRING> + (IATM) <OR ATOM FALSE> (OBL) <OR OBLIST FALSE> + (VAL) <OR FALSE LIST> (OBLIS) <OR OBLIST LIST>) + <REPEAT () + <SET PK <GET .OBLIS IN-COLLECTION>> + <COND (.PK + <PUTPROP .OBLIS IN-COLLECTION> + <ENDBLOCK> + <SET OBLIS .OBLIST> + <COND (<AND <N==? .PK T> + <SET IATM <OR <GET .PK IOBLIST> + <LOOKUP <STRING !\I <SPNAME .PK>> + <GET .PK OBLIST>>>> + <SET OBL <GET .IATM OBLIST>> + <MAPF <> + <FUNCTION (L) + #DECL ((L) LIST) + <COND (<EMPTY? .L>) + (ELSE <MAPLEAVE <>>)>> + .OBL>> + <PUTPROP <PUTPROP .IATM OBLIST> OBLIST> + <PUTPROP .PK IOBLIST> + <COND (<AND <GASSIGNED? .PK> + <TYPE? ,.PK LIST> + <SET VAL <MEMQ .OBL ,.PK>>> + <PUT .VAL 1 ,NULL-OBLIST>)>)> + .PK) + (<TYPE? .PKNM ATOM> + <RETURN>) + (ELSE + <ERROR UNMATCHED-ENDPACKAGE-OR-ENDCOLLECTION!-ERRORS> + <RETURN>)> + <COND (<OR <NOT .PKNM> + <=? <SPNAME .PK> .PKNM>> + <RETURN>)>>> + +<DEFINE L-UNUSE (STR "AUX" TMP IATM) + #DECL ((STR) <OR STRING FALSE> (TMP) ANY (IATM) <OR ATOM FALSE>) + <SET STR <TRANSLATE? .STR>> + <COND (<NOT .STR>) + (<AND <SET TMP <LOOKUP .STR ,PKG-OB>> <GASSIGNED? .TMP>> + <DROP .STR> + <COND (<SET IATM <OR <PUTPROP .TMP IOBLIST> + <LOOKUP <STRING !\I <SPNAME .TMP>> <GET .TMP OBLIST>>>> + L<PUTPROP <PUTPROP .IATM OBLIST> OBLIST>)> + <GUNASSIGN .TMP> + <PUTPROP <PUTPROP .TMP OBLIST> OBLIST> + <REMOVE .TMP ,PKG-OB> + "PACKAGE REMOVED") + (<SET TMP <LOOKUP .STR ,UDOB>> + <REMOVE .TMP ,UDOB> + "DATUM REMOVED") + (T #FALSE ("NOT PACKAGE OR DATUM"))>> + +<DEFINE TRANSLATE? (NAME "AUX" (L ,L-TRANSLATIONS)) + #DECL ((NAME) STRING (L) <LIST [REST STRING <OR STRING FALSE>]>) + <REPEAT () + <COND (<EMPTY? .L> + <RETURN .NAME>) + (<=? <1 .L> .NAME> + <RETURN <2 .L>>)> + <SET L <REST .L 2>>>> + +<DEFINE USE-DEFER ("TUPLE" NAMES "AUX" (OBLIS .OBLIST) NAME TMP T1 (POB <>) M N NMVEC + (PKG-OB ,PKG-OB)) + #DECL ((NAMES) <TUPLE [REST STRING]> (NAME) STRING (M N) FIX + (TMP) <OR FALSE + DEFINF> + (ATMLST) <LIST [REST ATOM]> (PKG-OB) OBLIST + (NMVEC) VECTOR (OBLIS) <LIST [REST OBLIST]>) + <COND + (,L-NO-DEFER <USE !.NAMES> USE-DEFER) + (T + <REPEAT (RFLIST FLIST TNAME) + #DECL ((TNAME) <OR STRING FALSE>) + <COND (<EMPTY? .NAMES> <RETURN USE-DEFER>)> + <SET NAME <1 .NAMES>> + <SET NAMES <REST .NAMES>> + <SET TNAME <TRANSLATE? .NAME>> + <COND (<NOT .TNAME> ; "Can't use-defer a null translation" + <USE .NAME> + <AGAIN>) + (<AND <SET T1 <LOOKUP .TNAME .PKG-OB>> <GASSIGNED? .T1>> + <SET POB <GET .T1 OBLIST>>) + (<NOT <SET TMP + <GDCHN .NAME + ,L-SEARCH-PATH + ,DEFER-FIND>>> + <ERROR PACKAGE .NAME NOT-FOUND!-ERRORS> + <AGAIN>) + (<OR <NOT <EMPTY? <SET FLIST <DEF-EL .TMP>>>> + <NOT <EMPTY? <DEF-REL .TMP>>>> + <SET RFLIST <DEF-REL .TMP>> + ; "DEFER-FIND returns a vector: [<OR FALSE ATOM> (T if RPACKAGE) + STRING (package name) + STRING (file) + <LIST [REST STRING]> (entries) + <LIST [REST STRING]> (rentries)]" + <COND (<DEF-RP? .TMP> + <SET POB <ROOT>>) + (<NOT <EMPTY? .FLIST>> + <SET POB <MOBLIST <PARSE .TNAME 10 .PKG-OB>>>)> + <MAPR <> + <FUNCTION (X) #DECL ((X) <LIST [REST STRING]>) + <PUT .X 1 <PARSE <1 .X> 10 .POB>>> + .FLIST> ; "Make everything entries" + <MAPR <> + <FUNCTION (X) #DECL ((X) <LIST [REST STRING]>) + <PUT .X 1 <PARSE <1 .X> 10 <ROOT>>>> + .RFLIST> + <SET NMVEC <VECTOR .NAME <DEF-FNM .TMP>>> ; "package name and file" + <COND (<==? .POB <ROOT>> + <MAPF <> + <FUNCTION (X) <PUTPROP .X USE-DEFER .NMVEC>> + .FLIST>) + (<PUTPROP .POB USE-DEFER .NMVEC>)> + <MAPF <> + <FUNCTION (X) <PUTPROP .X USE-DEFER .NMVEC>> + .RFLIST>)> + <COND (<AND .POB + <NOT <==? .POB <ROOT>>> + <NOT <MEMQ .POB .OBLIS>>> + <COND (<NOT <0? <SET N <LENGTH <MEMQ .PKG-OB .OBLIS>>>>> + <PUTREST <REST .OBLIS <- <SET M <LENGTH .OBLIS>> .N 1>> + (.POB !<REST .OBLIS <- .M .N>!>)>) + (T + <PUTREST <REST .OBLIS <- <LENGTH .OBLIS> 1>> + (.POB)>)>)>>)>> + +<DEFINE L-DATUM (IND "OPTIONAL" (L ,L-SEARCH-PATH) "AUX" CHN TMP) + <COND (<SET CHN <SEARCH .IND .L>> + <SET TMP <READ .CHN '<>>> + <CLOSE .CHN> + .TMP) + (T #FALSE ("DATUM NOT FOUND"))>> + +<SETG UDOB <MOBLIST USE-DATUM 17>> + +<DEFINE USE-DATUM (IND "AUX" TMP) + <SET IND <TRANSLATE? .IND>> + <COND (<SET TMP <LOOKUP .IND ,UDOB>> ,.TMP) + (<SET TMP <L-DATUM .IND>> <SETG <INSERT .IND ,UDOB> .TMP>) + (T .TMP)>> + +<DEFINE TRANSLATE (FROM TO "AUX" (L ,L-TRANSLATIONS)) + #DECL ((FROM) STRING (TO) <OR FALSE STRING> + (L) <LIST [REST STRING <OR FALSE STRING>]>) + <REPEAT () + <COND (<EMPTY? .L> + <SETG L-TRANSLATIONS (.FROM .TO !,L-TRANSLATIONS)> + <RETURN>) + (<=? <1 .L> .FROM> + <PUT .L 2 .TO> + <RETURN>)> + <SET L <REST .L 2>>> + .TO> + +<DEFINE UNTRANSLATE (NAME "AUX" (L ,L-TRANSLATIONS)) + #DECL ((NAME) STRING (L) <LIST [REST STRING <OR FALSE STRING>]>) + <REPEAT ((L1 .L) L2) + #DECL ((L1 L2) <LIST [REST <OR FALSE STRING>]>) + <COND (<EMPTY? .L1> + <RETURN #FALSE ("NOT TRANSLATED")>) + (<=? <1 .L1> .NAME> + <COND (<==? .L .L1> + <SETG L-TRANSLATIONS <REST .L 2>>) + (<PUTREST <REST .L2> <REST .L1 2>>)> + <RETURN .NAME>)> + <SET L2 .L1> + <SET L1 <REST .L1 2>>>> + +<DEFINE TRANSLATIONS ("AUX" (L ,L-TRANSLATIONS) (OUTCHAN .OUTCHAN)) + #DECL ((OUTCHAN) CHANNEL (L) <LIST [REST STRING <OR STRING FALSE>]>) + <COND (<EMPTY? .L> + <PRINC "No translations"> + <CRLF>) + (<REPEAT () + <PRINC <1 .L>> + <PRINC "-->"> + <COND (<NOT <2 .L>> + <PRINC "<>">) + (<PRINC <2 .L>>)> + <CRLF> + <COND (<EMPTY? <SET L <REST .L 2>>> + <RETURN>)>>)>> + +<DEFINE GDCHN (IND LST "OPTIONAL" (FNC ,PACKAGE-FIND)) + #DECL ((IND) STRING (LST) <OR LIST STRING>) + <COND (<TYPE? .LST LIST> + <REPEAT ((L .LST) TMP SPEC) + #DECL ((L) LIST (SPEC) <OR VECTOR STRING>) + <COND (<EMPTY? .L> <RETURN <>>) + (<AND <TYPE? <SET SPEC <1 .L>> STRING> + <SET TMP <GDCHN .IND <1 .L> .FNC>>> + <RETURN .TMP>)> + <SET L <REST .L>>>) + (<APPLY .FNC .IND .LST>)>> + +<DEFINE L-LOAD (STR "OPTIONAL" (L ,L-SEARCH-PATH) "AUX" ST CHN) + <COND (<AND <SET ST <GDCHN .STR .L ,PACKAGE-FIND>> + <SET CHN <OPEN "READ" .ST>>> <LOAD .CHN>) + (T .CHN)>> + +<SETG L-NO-MAGIC <>> + +<SETG L-ALWAYS-INQUIRE <>> + +<SETG IOB <GET <LOOKUP "INITIAL" <ROOT>> OBLIST>> + +<DEFINE L-HANDLER (FRM + "TUPLE" JUNK + "AUX" ATM POSSIB PN TMP RSLT GOODS FINOB + (REDEFINE + <COND (<ASSIGNED? REDEFINE> .REDEFINE) (T <>)>) + PCK-NAME TPCK-NAME) + #DECL ((FRM) FRAME (JUNK) TUPLE (ATM) ATOM + (POSSIB) <OR FALSE <LIST [2 STRING] <OR ATOM FALSE> <OR ATOM FALSE> + [REST STRING STRING + <OR ATOM FALSE> <OR ATOM FALSE>]>> + (PN) STRING (PCK-NAME) STRING + (TPCK-NAME) <OR STRING FALSE> + (GOODS) STRING (REDEFINE) <SPECIAL ANY>) + <PROG () + <COND (<OR <NOT <==? 3 <LENGTH .JUNK>>> + <NOT <OR <AND <==? <1 .JUNK> UNASSIGNED-VARIABLE!-ERRORS> + <==? <3 .JUNK> GVAL>> + <AND <==? <1 .JUNK> UNBOUND-VARIABLE!-ERRORS> + <OR <==? <3 .JUNK> VALUE> + <==? <3 .JUNK> CALLER>>>>>> + <RETURN>)> + <COND (<L-GASSIGNED? <SET ATM <2 .JUNK>>> + <INT-LEVEL 0> + <APPLY ,ERRET ,.ATM .FRM>) + (<OR ,L-NO-MAGIC <NOT <==? <OBLIST? .ATM> ,IOB>>> <RETURN>)> + <SET PN <SPNAME .ATM>> + <COND (<NOT + <REPEAT ((L ,L-SEARCH-PATH) (V ()) T) + #DECL ((L) <LIST [REST <OR VECTOR STRING>]> (V) LIST + (T) <OR FALSE LIST>) + <COND (<EMPTY? .L> + <COND (<EMPTY? .V> <RETURN <>>) + (<RETURN <SET POSSIB .V>>)>)> + <COND (<TYPE? <1 .L> STRING> + <COND (<SET T <ENTRY-FIND .PN <1 .L>>> + <PUTREST <REST .T <- <LENGTH .T> 1>> .V> + <SET V .T>)>)> + <SET L <REST .L>>>> + <RETURN>)> + ; "We get for POSSIB a list: [REST package-name file-name rpackage? rentry?]" + <INT-LEVEL 0> + <COND (<OR <G? <LENGTH .POSSIB> 4> ,L-ALWAYS-INQUIRE> + <SET POSSIB <DISP-CHOICE .POSSIB .PN>>)> + <COND (<NOT .POSSIB> <RETURN>)> + <SET REDEFINE T> + <SET GOODS <NTH .POSSIB 2>> + <SET PCK-NAME <NTH .POSSIB 1>> + <SET TPCK-NAME <TRANSLATE? .PCK-NAME>> + <SET FINOB + <COND (<OR <3 .POSSIB> <4 .POSSIB>> <ROOT>) + (<NOT .TPCK-NAME> <1 .OBLIST>) + (<MOBLIST <PARSE .TPCK-NAME 10 ,PKG-OB> 17>)>> + <COND (<NOT .TPCK-NAME> + <SET RSLT .ATM>) + (<SET TMP <LOOKUP .PN .FINOB>> + <SUBSTITUTE .TMP <REMOVE .ATM>> + <SET RSLT .TMP>) + (<SET RSLT <INSERT <REMOVE .ATM> .FINOB>>)> + <PROG () + <FIND/LOAD <1 .POSSIB> <2 .POSSIB>> + <USE <1 .POSSIB>>> + <COND (<NOT <GASSIGNED? .RSLT>> + <ERROR "PACKAGE DID NOT DEFINE FUNCTION" + .RSLT + .PCK-NAME + .GOODS>) + (T <INT-LEVEL 0> <APPLY ,ERRET ,.RSLT .FRM>)>>> + +<DEFINE DISP-CHOICE (POSSIB PN "AUX" (OUTCHAN ,OUTCHAN) IN) + #DECL ((POSSIB) <LIST [REST STRING STRING <OR ATOM FALSE> <OR ATOM FALSE>]> + (OUTCHAN) CHANNEL) + <PRINC " +To get "> + <PRINC .PN> + <PRINC " dynamically load +0 none -- generate error +"> + <REPEAT ((N 1) (POSS .POSSIB)) + #DECL ((N) FIX (POSS) <LIST [REST STRING STRING ANY ANY]>) + <COND (<EMPTY? .POSS> <RETURN>)> + <PRINC .N> + <PRINC " "> + <PRINC <1 .POSS>> + <PRINC " from "> + <PRINC <2 .POSS>> + <CRLF> + <SET N <+ .N 1>> + <SET POSS <REST .POSS 4>>> + <PROG () + <PRINC "# to load? "> + <SET IN <READ ,INCHAN>> + <COND (<NOT <TYPE? .IN FIX>> <TERPRI> <AGAIN>)> + <TERPRI>> + <COND (<0? .IN> <>) + (<REST .POSSIB <* 4 <- .IN 1>>>)>> + +"Load library hackers" +<USE "LIB"> + +<ENDBLOCK> + +<ENDBLOCK> + +<SET OBLIST ,OBLIST> + +<ON "ERROR" ,L-HANDLER 100> + \ No newline at end of file diff --git a/src/libmud/pcksbr.2 b/src/libmud/pcksbr.2 new file mode 100644 index 00000000..3bb5228b --- /dev/null +++ b/src/libmud/pcksbr.2 @@ -0,0 +1,95 @@ +<SETG SAVSTR <REST " " 6>> + +<TITLE \ \ F!- > + <DECLARE ("TUPLE" ANY)> + <HRRZ A* -7(TB)> ; "Pointer to called function" + <PUSH TP* 2(A)> + <PUSH TP* 3(A)> ; "Push the atom" + <PUSH TP* 2(A)> + <PUSH TP* 3(A)> + <MOVE B* (TP)> + <PUSHJ P* CIGVAL> + <MOVE B* 1(B)> + <CAME B* R> ; "Is he SETGed to us?" + <JRST [<SUB TP* [<(4) 4>]> + <JRST CONTIN>]> ; "Nope. Must already be loaded" + <MCALL 1 GUNASSIGN> ; "GUNASSIGN it" + <MCALL 1 L-GASSIGNED?> ; "Try to load it" + <GETYP O* A> + <CAIN O* <TYPE-CODE FALSE>> + <JRST LOSS> ; "Obscure!" +; "Is this or is this not a complete obscene disgusting lossage?" + <HRRZ A* -7(TB)> + <MOVE B* 3(A)> + <PUSHJ P* CIGVAL> ; "Get new gval" +CONTIN <GETYP O* A> + <MOVEI C* 0> + <CAIE O* <TYPE-CODE RSUBR-ENTRY>> + <JRST DIRECT> + <HRRZ C* 2(B)> ; "Pick up offset" + <MOVE B* 1(B)> ; "Point to RSUBR" +DIRECT <MOVE D* 1(B)> ; "Pointer to code" + <GETYP O* (B)> ; "Get type of code" + <CAIE O* <TYPE-CODE PCODE>> ; "FBIN" + <JRST NRMSET> + <MOVE A* 1(B)> ; "Get offset into PURVEC" + <MOVEI D* (A)> + <HLRS A> + <ADD A* PURVEC 1> ; "Point into PURVEC" + <HLLM TB* 2(A)> ; "For LRU-age" + <SKIPE O* 1(A)> ; "Skip if not loaded" + <JRST [<ADDI O* (D)> ; "Point to real start of code" + <MOVE D* O> + <JRST NRMSET>]> ; "Finish setup" + <PUSH TP* <TYPE-WORD RSUBR>> + <PUSH TP* B> ; "Save the rsubr" + <PUSH P* C> ; "Save offset from RSUBR-ENTRY" + <PUSH P* D> ; "Save offset into FBIN" + <PUSH TP* <TYPE-WORD UVECTOR>> + <PUSH TP* A> ; "Save PURVEC" + <SKIPN A* (A)> ; "Pick up sixbit name" + <ERRUUO* <MQUOTE BAD-PURECODE-NAME>> + <MOVE C* <MQUOTE <RGLOC SAVSTR>>> + <ADD C* GLOTOP 1> + <MOVE C* 1(C)> ; "Byte pointer" + <MOVEI O* 0> + <MOVEI B* 0> + <LSHC A* -6> + <JUMPE B* HERE -1> +STRLOP <LSH B* -30> + <ADDI B* *40*> + <DPB B* C> + <ADDI O* 1> + <MOVEI B* 0> + <ADD C* [<(*70000*) 0>]> + <TLNE C* *400000*> + <ADD C* [<(*347777*) *777777*>]> + <LSHC A* -6> + <JUMPN B* STRLOP> + <HRLI O* <TYPE-CODE STRING>> + <PUSH TP* O> + <PUSH TP* C> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* (P)> + <SETOM NOSHUF> + <MCALL 2 PCODE> + <SETZM NOSHUF> + <POP TP* A> + <SUB TP* [<(1) 1>]> ; "Get PURVEC back" + <POP TP* B> ; "Get RSUBR back" + <SUB TP* [<(1) 1>]> + <MOVE D* 1(A)> + <ADD D* (P)> + <SUB P* [<(1) 1>]> + <POP P* C> ; "Offset for RSUBR-ENTRY" +NRMSET <MOVE R* B> ; "Set up M and R" + <MOVE M* D> + <ADD C* M> + <HRRM B* -7(TB)> ; "Clobber the frame" + <JRST (C)> ; "And away we go" +LOSS <HRRZ A* -7(TB)> + <DPUSH TP* <PQUOTE LOAD-FAILED>> + <DPUSH TP* 2(A)> + <DPUSH TP* <PQUOTE \ \ F!->> + <MCALL 3 ERROR> + <JRST FINIS> \ No newline at end of file diff --git a/src/librm1/bugexp.udl057 b/src/librm1/bugexp.udl057 new file mode 100644 index 00000000..481961f4 --- /dev/null +++ b/src/librm1/bugexp.udl057 @@ -0,0 +1,111 @@ +; "SYSTEM PROGRAMS FOR BUG EXPANSION DATA BASE in -*-Muddle-*- +The conventions of this file are that it consists of pairs of names and +lists of names: <prgm> (<exp1> <exp2> ...). The <exp>'s should be either +strings or atoms. If they are strings they are assumed to point to further +expansion, as in 'MUD53' ==> ('MUDDLE') ==> (CLR BTB). If they are ATOMs +they are assumed to be terminal nodes. The only exception is a name that +points to another host, which can be either a string or an atom. +The entries in this vector should be in alphabetical order to aid people +keeping it up-to-date, but COMSYS doesn't care." + +[ +"@" ("RMS@MIT-AI") +"ABSTR" (PDL MARC SWG) +"ARCDEV" (MARC) +"ARCSAL" (MARC ) +"ARPA" ("BUG-ARPA@MC") +"ASETUP" (PDL) +"ASSEM" (CLR BTB TAA) +"BATCH" (SWG BATCH) +"BATCHN" (SWG BATCH) +"BUG" (PDL) +"BYE" (TAA) +"C" ("CC") +"CALICO" (MARC) +"CC" (AS EBM) +"CC&F" ("BUG-CC&F@ML") +"CLEAN" ("BUG-CLEAN@ML") +"CLU" (RWS "[CLU;CLU BUGS]@DM") +"CLUGC" (EBM RWS) +"CLUSYS" (EBM RWS) +"COMBAT" ("NCOMBAT") +"COMDEC" (PDL) +"COMPIL" (CLR "[BUGCOM;COMBAT MAIL]") +"COMPILE" ("COMPIL") +"COMPILER" ("COMPIL") +"COMSYS" (PDL) +"DDT" ("BUG-DDT@AI") ;"some idiot has this as a login name" +"DIR" (JMB) +"DIRDEV" (JMB) +"DIRED" (PDL) +"DL" ( "(BUG DL)@AI" ) +"DOC" (JMB) +"DSKUSE" (PDL) +"DUNGEON" (TAA PDL CFS) +"EMACS" (WJN "(BUG EMACS)@AI") +"FEATUR" (PDL) +"FEATURE" (PDL) +"FIND" (PDL) +"FREE" (PDL) +"GLUE" (TAA BTB) +"GRADE" (PDL) +"GRFCOD" (PDL) +"GUNNER" (TAA) +"IMEDIT" (PDL) +"IMLAC" (PDL) +"IMLOAD" (PDL) +"IMPRIN" (PDL) +"IMPRNT" (PDL) +"IMTRAN" (PDL) +"INIT" (MARC TAA PDL JMB) +"L-M" (JMB) +"LOGIN" (TAA) +"MAIL" (PDL) +"MAT" (MARC) +"MDL" ("MUDDLE") +"MDL105" ("MUDDLE") +"MEND" (JMB) +"MIGS" (RRS) +"MONIT" (JMB ) +"MREAD" (PDL ) +"MSC" (PDL) +"MSGS" (PDL ) +"MUD54" ("MUDDLE") +"MUD55" ("MUDDLE") +"MUDCAL" ("CALICO") +"MUDCOM" (MARC) +"MUDDLE" (CLR BTB PDL TAA LIM SWG) +"MUDINQ" (MARC TAA) +"NCOMBA" ("NCOMBAT") +"NCOMBAT" (MARC TAA) +"NDIRED" (PDL) +"NETRFC" (SWG) +"NETRJS" (SWG) +"NETWOR" (SWG) +"NETWRK" (SWG) +"NMUDDL" ("MUDDLE") +"NPCOMP" ("COMPIL") +"PANDA" ("(BUG PANDA)@MC") +"PCOMP" ("COMPIL") +"PLOAD" (CLR) +"POD" (PDL) +"PR" (JMB) +"PWORD" ("(BUG PWORD)@MC") +"R" (EBM AS) +"READER" (PDL) +"REMIND" (PDL) +"RJSLOG" (SWG) +"RMODE" (PDL) +"SSV" (PDL) +"STINKR" (EBM AS) +"SURSND" (AV SWG) +"SURVEY" (AV SWG) +"TIME" (PDL) +"UFIND" ( "(BUG UFIND)@AI" ) +"UNSPOO" (PDL TAA) +"WHOIML" (MARC TAA) +"XABSTR" (MARC PDL SWG) +"XXFILE" (TAA) +"YACC" (AS) +"ZORK" (TAA PDL) +] diff --git a/src/librm1/chan.ubkdx4 b/src/librm1/chan.ubkdx4 new file mode 100644 index 00000000..72ec5546 --- /dev/null +++ b/src/librm1/chan.ubkdx4 @@ -0,0 +1,49 @@ +<PACKAGE "CHAN"> + +;"Definition of the SLOTS in a CHANNEL vector" + +<ENTRY CHAN-NUMBER DIRECTION NAME1 NAME2 DEVICE DIRECTORY + RNAME1 RNAME2 RDEVICE RDIRECTORY CHANNEL-STATUS IO-INST + LINE-LENGTH EOF-CMD LINE-POS LAST-CHAR PAGE-LENGTH + WAIT-INST PAGE-POS BUFR-LIST ACCESS-COUNT RADIX + BUFR-STRING DISPLAY-INFO INTERNAL-FCN> + +<AND? <SETG CHAN-NUMBER 1> + <SETG DIRECTION 2> + <SETG NAME1 3> + <SETG NAME2 4> + <SETG DEVICE 5> + <SETG DIRECTORY 6> + <SETG RNAME1 7> + <SETG RNAME2 8> + <SETG RDEVICE 9> + <SETG RDIRECTORY 10> + <SETG CHANNEL-STATUS 11> + <SETG IO-INST 12> + <SETG LINE-LENGTH 13> + <SETG LINE-POS 14> + <SETG PAGE-LENGTH 15> + <SETG PAGE-POS 16> + <SETG ACCESS-COUNT 17> + <SETG RADIX 18> + <SETG BUFR-STRING 19>> + +"Input channels" + +<AND? <SETG EOF-CMD 13> + <SETG LAST-CHAR 14> + <SETG WAIT-INST 15> + <SETG BUFR-LIST 16> + <SETG INTERNAL-FCN 19>> + +"Display channels" + +<SETG DISPLAY-INFO 19> + +<MANIFEST CHAN-NUMBER DIRECTION NAME1 NAME2 DEVICE DIRECTORY + RNAME1 RNAME2 RDEVICE RDIRECTORY CHANNEL-STATUS IO-INST + LINE-LENGTH EOF-CMD LINE-POS LAST-CHAR PAGE-LENGTH + WAIT-INST PAGE-POS BUFR-LIST ACCESS-COUNT RADIX + BUFR-STRING DISPLAY-INFO INTERNAL-FCN> + +<ENDPACKAGE> diff --git a/src/librm1/clean.1 b/src/librm1/clean.1 new file mode 100644 index 0000000000000000000000000000000000000000..696c6aad8210f713ebea0990443dbed528d775dd GIT binary patch literal 23222 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 L^1Cj7wDtL45%~nM literal 0 HcmV?d00001 diff --git a/src/librm1/comexp.udl591 b/src/librm1/comexp.udl591 new file mode 100644 index 00000000..f5300611 --- /dev/null +++ b/src/librm1/comexp.udl591 @@ -0,0 +1,299 @@ +; "Don't modify this file! Use .MAIL.;NAMES > instead." + +; "Default Expansion Data Base for Comsys in -*-MUDDLE-*- + New!! --> Mailing lists in files. See COMDAT;.EXP HELP" + +[ +;"*msg mailing lists -- see .MAIL.;BBOARD INFO for accepted policy on + which list to use for what purpose." +"*" + ("MSGSRV") +"*AI" + ("MSGSRV") +"*BBOARD" + ("*MAC" "*EE" "*CMU") +"*CMU" + ("MIT-MESSAGES@CMUA") +"*DM" + ("MSGSRV") +"*EE" + ("FORUM@EE") +"*ITS" + ("MSGSRV" "ITSMSG@XX" "ITSMSG@EE" "itsmsg@VX" "itsmsg@RTS" "ITSMSG@OZ") +"*LCS" + ("*MAC") +"*MAC" + ("MSGSRV" "*XX" "*VX" "*RTS" "*OZ") +"*MC" + ("MSGSRV") +"*MIT" + ("*MAC" "*MULTICS" "*EE" "*CMU") +"*ML" + ("MSGSRV") +"*MULTICS" + ("graffiti.IPC@MIT-MULTICS") +"*OZ" + ("FORUM@OZ") +"*RTS" + ("msgs@RTS") +"*TENS" + ("MSGSRV" "*XX" "*EE" "*OZ") +"*VX" + ("msgs@VX") +"*XX" + ("FORUM@XX") +".BATCH" + ("[SWG;.BA SINK]") +"A-AI" + ("ACCOUNTS-NOTIFICATION@AI") +"A-MC" + ("ACCOUNTS-NOTIFICATION@MC") +"ACCOUNT" + ("USER-ACCOUNTS") +"ACCOUNTS" + ("USER-ACCOUNTS") +"ACCOUNTS-HELD-REFUSED" + ("[SWG;.UA SINK]" "ACCOUNTS-HELD-REFUSED@MC") +"ACCOUNTS-NOTIFICATION" + ("[SWG;.UA SINK]" "ACCOUNTS-NOTIFICATION@MC") +"ACOUNT" + ("USER-ACCOUNTS") +"ACOUNTS" + ("USER-ACCOUNTS") +"ALL-DMS" + ("STAFF" "STUDENTS") +"ARPA-LIAISONS" + ("ARPA-LIAISONS@AI") +"BBOARD" + ("*BBOARD") +"BICYCLISTS" + ("BIKES@MC") +"BIKES" + ("BIKES@MC") +"BOSTON-CSTALK" + ["USERS1;EVANS CSLIST"] +"BUG-ITS" + ("BUG-ITS@MC") +"BUG-SCRIBE" + ("JAN@XX" "RI@XX" "WAYNE@XX" "ELLEN@MC") +"BUG-TEX" + ("BUG-TEX@MC") +"CALCULATOR" + ("CALCULATOR@MC") +"CASE-STUDIES" + (TAA "JSK@XX" "HAMMER@XX" "SIRBU@XX" "ZARMER@XX" + "greif@xx" "OA.CASE-STUDIES@XX") +"CLU" + (RWS RRA) +"COMPLAIN-CC&F" + ("COMPLAIN-CC&F@ML") +"COMPLAIN-CLEAN" + ("BUG-CLEAN@ML") +"CS" + ("CASE-STUDIES") +"DATA-BASE" + ("hammer@xx" "JSK@xx" "ri@xx" SBZ "SKS" BERN AC BTB EGBERT YANNIS) +"DB-ALERTERS" + (AV EB SKS SSP + "GPB@CCA" "wilson@CCA-SDMS" "MARK@CCA-SDMS" "HELP@CCA-TENEX" + "Geoff@SRI-KA" "DAVES@AI" + "ARIAV@WHARTON" "DREIFU@WHARTON" "MORGAN@WHARTON") +"DM-AP-NEWS" + (BERN MUFTI) +"DM-FONT-USERS" + (TAA BERN EGBERT PDL "SWG@XX" RWS AS EBM "[.INFO.;FONT MAIL]") +"DM-HEADER-PEOPLE" + ("[NETDOC;HEADER PEOPLE]") +"DM-INFO-R" + (BERN "SKS" BTB "SWG@XX") +"DM-NYT-NEWS" + (BERN MUFTI) +"DM-RMODE-USERS" + (AC BERN BTB JSK MARC + PDL DSY "SKS" "SWG@XX" TAA "[.INFO.;RMODE MAIL]" + "JHAVERTY@BBNE" ;"interested observer" "MARKT@XX") +"ECOLE" + (BERN "LSR@XX" "RI@XX" TAA "HAMMER@XX" "SBZ@XX" "JSK@XX" EGBERT + "YANNIS@XX" "OA.JEN@XX" "WNMOK@XX") +"EMACS-MUDDLE-USERS" + (Bauman Brand Devon FNT Lick MJL "MARKT@XX" PWD RobG SEB TimB + "[CSTACY;EMACS MUDDLE]" "[EMACS;EMXMUD NEWS]" + "NORI@CCA-TENEX" MAZE + "Dada@XX" "LSR@XX" "Mark@XX" "RI@XX") +"ENERGY" + ("ENERGY@MC") +"ETUDE" + ("GREIF@XX" "hammer@xx" "ri@xx" BERN EGBERT "yannis@xx" + TAA "mdg@xx" "lsr@xx" "oa.jen@xx" "sirbu@xx" "jbs@xx" "oa.em@xx" "jsk@xx" + "WNMOK@XX") +"FILE-RESTORE" + (TY) +"FIX" + ("FIX@ML") +"FORUM" + ("MSGSRV") +"GILBERT" + ("[egbert;egbert mail]") +"GRENDEL" + ("GREN@MC") +"HUMAN-NETS" + ("HUMAN-NETS@AI") +"HUMAN-NETS-ARCHIVES" + ("[COMMON;DUFFEY HNTDST]") +"HUMAN-NETS-REQUEST" + ("HUMAN-NETS-REQUEST@AI") +"IN-HOUSE" + ("JSK@XX" "HAMMER@XX" "SIRBU@XX") +"INFO-ADA" + ("INFO-ADA@MC") +"INFO-ADA-REQUEST" + ("INFO-ADA-REQUEST@MC") +"INFO-APPLE" + ("INFO-APPLE@AI") +"INFO-APPLE-ARCHIVE" + ("[CSTACY;IFA002 ARCHIV]") +"INFO-ATARI" + ("INFO-ATARI@AI") +"INFO-ATARI-REQUEST" + ("INFO-ATARI-REQUEST@AI") +"INFO-AUDIO" + ("INFO-AUDIO@AI") +"INFO-AUDIO-REQUEST" + ("LLOYD@AI") +"INFO-CLU" + (RWS EGBERT BERN RRA AS EBM MEREY CLUSER STARK JCS SEB "[CLU;CLU MAIL]") +"INFO-MICRO" + ("INFO-MICRO@AI") +"INFO-MICRO-REQUEST" + ("INFO-MICRO-REQUEST@AI") +"INFO-PASCAL" + ("INFO-PASCAL@AI") +"INFO-POLES" + ("TAA@XX" "DJC@XX" EGBERT "TAA.JTP@XX" "SBZ@XX" "JSK@XX" "RI@XX" PDL + "RI.SR@XX" "MARKT@XX" "[DJC;POLES *]") +"INFO-READER" + ("TAA" "SWG" "MARC" "BTB" "CLR" "DJC" "PDL" "ROBG") +"INFO-TEX" + ("INFO-TEX@MC") +"INFO-TEX-REQUEST" + ("INFO-TEX-REQUEST@MC") +"LIB-COMM" ["MARIAS" ("LIB-COMM@ML")] +"LIBRARY" ("MARIAS") +"LSC-MOVIES" + ["MP" (BERN BTB CLR PDL RRA "SWG@XX" "ANN@XX" "DIANA@XX" + "GEOF@XX" "JSK@XX" "RI@XX" EGBERT JMB TAA DJC "shane@xx" + "SRF@XX" "Goldfarb@XX" + ;"ll-movie-goers@LL-ASG" ;"LL-ASG is never up -- pdl" + "yannis@xx" "INFO-LSC@AI" "INFO-LSC@MC" "INFO-LSC@ML" "MARKT@XX")] +"MACLISP-MAINTAINERS" + ("MACLISP-MAINTAINERS@MIT-OZ") +"MADMEN" + (MARC TAA) +"MAIL-PEOPLE" + (AV MARC PDL DANG "MT@XX" "CSTACY@AI") +"MAIL-SYSTEM" + (AV MARC PDL "CSTACY@AI") +"MDL-MEETING" + ("JAN@XX" MARC TAA AV "SHB@XX" "AV@XX" LICK LIM MD PDL "SSP@XX" "CSTACY@AI" + CLR "CARUSO@XX" "SWG@XX" "SANGAL@XX" ALI "LH@ML") +"MIDL" + (DLD HJB ALI PDL MARC TAA) +"MIM" + (MARC LIM ALI "SHB@XX" "SCRIMSHAW@XX" CLR SEB) +"MORSE-GROUP" + (AV PDL DLD SWG GEK MRSGRP) +"MSGDMS" + (AV MSGDMS) +"MSGGROUP" + (MSGGROUP MC) +"MSGGROUP-REQUEST" + (MSGGROUP-REQUEST MC) +"MSGGRP" + (MSGGRP BERN LICK MMH) +"MUDDLE-PAPER" + (PDL TAA CLR BKD DLD SWG BTB MARC JMB LICK LIM "[PDL;MUDDLE PAPER]") +"NETADR-GROUP" + ("NETADR" KLH RMS MOON "DCROCKER@USC-ISI" "POSTEL@ISIC" "MT@XX") +"NEW-ETUDE" + ("Bern" "mdg@xx" "ri@xx" "jsk@xx" "lsr@xx" egbert "jbs@xx" + "hammer@xx" "greif@xx" "sirbu@xx" "yannis@xx") +"NU-ETUDE" + ("new-etude") +"OA" + ("OA@XX") +"RAVS" + (MARC AC PDL TAA EGBERT DJC JMB MT "JSK@XX" "RI@XX" + CLR "JBS@XX" "HAMMER@XX" "LSR@XX" "SBZ@XX" "MDG@XX" + "SWG@XX" "BTB@XX" "ANN@XX" "DIANA@XX" LIM "TAA.JTP@XX" "RI.SR@XX") +"RAVS-REPLY" + ("[OA;RAVS REPLY]") +"RRA" + ("[RRA;RRA MAIL]" "RRA@XX") +"SANDERS" + ("SANDERS@MC") +"SCIENCE-CALENDAR" + ("SCIENCE-CALENDAR@AI") +"SCIENCE-CALENDAR-DM" + (BERN DJC "SWG@XX" TAA "ri.sr@xx" + "MARKT@XX" "stark@xx" EGBERT "JSK@XX" "MPH@XX" "MT@XX" "jcs@xx") +"SF-LOVERS" + ("SF-LOVERS@AI") +"SF-LOVERS-ARCHIVES" + ("[COMMON;DUFFEY SFLDST]") +"SF-LOVERS-REQUEST" + ("SF-LOVERS-REQUEST@AI") +"SKS" + ("[SKS;SKS MAIL]" "SKS@XX") +"SKY-FANS" + ["SWG" ("SKY-FANS-CIT" "SKY-FANS-CMU" "SKY-FANS-MIT" "SKY-FANS-SU")] +"SKY-FANS-CIT" + ("SKY-FANS-CIT@MIT-XX") +"SKY-FANS-CMU" + ("SKY-FANS-CMU@MIT-XX") +"SKY-FANS-DC" + ("LLOYD") +"SKY-FANS-MIT" + ("SKY-FANS-MIT@MIT-XX") +"SKY-FANS-SU" + ("SKY-FANS-SU@MIT-XX") +"STAFF" + (SWG MARC PDL AV SSP "JAN@XX" LICK MD "SANGAL@XX" TAA "RI@XX" CLR LH) +"STAFF-6035" + ("STAFF-6035@MC") +"STUDENTS" + (BERN BTB DJC JSK SBZ "SKS" EGBERT "yannis@xx" ;"HAMMER" + DKK GEOF JCS MKS RWS STARK TOBY ;"LISKOV" + ALI BEO CATHY "DADA@XX" HOLT LIM "MARKT@XX" "DAVES@AI" + RLBYBS SAR "Schad@XX" SIR "Wallace@XX" ;"VEZZA") +"SUPDUP-EXTENSIONS" + ("SUPDUP-EXTENSIONS@MIT-OZ") +"SUPDUP-EXTENTIONS" + ("SUPDUP-EXTENSIONS@MIT-OZ") +"SYS-OPERATING-TROUBLE" + (SWG PDL "CSTACY@AI") +"TELETEXT" + ("TELETEXT@AI") +"TELETEXT-REQUEST" + ("Lauren@UCLA-Security") +"TNXMUD" + (BTB AV "SWG@XX") +"TOPS-20AN" + (AV PDL TAA "SWG@XX" BERN DANG "MT@XX") +"TYPES-SEMINAR" + ("Arvind@xx" "Wlim@xx" "Djc@xx" "Stark@xx" "Dennis@xx" "Hal@mc" "Macrak@mc" + "Meyer@dm" "Weiss@dm" "JCM@DM" "JByrd@DM" "Ray@ml" "JEN@ML" "Ravi@ml" + "Joyce@ml" "ssc@mc" "jmw@xx") +"USER-A" + ("USER-ACCOUNTS") +"USER-ACCOUNT" + ("USER-ACCOUNTS") +"USER-ACCOUNTS" + (SWG "CSTACY@AI" "USER-ACCOUNTS@MC") +"USER-ACOUNT" + ("USER-ACCOUNTS") +"USER-ACOUNTS" + ("USER-ACCOUNTS") +"YANNIS" + ("[YANNIS;YANNIS MAIL]") +"ZORK" + (TAA)] diff --git a/src/librm1/comkey.udl111 b/src/librm1/comkey.udl111 new file mode 100644 index 00000000..72061a2a --- /dev/null +++ b/src/librm1/comkey.udl111 @@ -0,0 +1,130 @@ +; " data file in -*-Muddle-*- for library datum defining mailboxes for comsys: + + --> Note that Comsys only looks at this for addressees not in INQUIR or + whose Inquire data says the NETAD is DM. + + --> To forward your mail to XX all you need do is change your Inquire! + + pairs of items: + mailbox name, + indicator, + false to ignore directory and forward according to INQUIR instead; + 0 for a terminal mailbox; + string for a link to another mailbox." + +[ +"ABSTR-MAINTAINER" "SWG" +"ABSTRACT-CHECKER" "PDL" +"ACCOUNTS" "USER-ACCOUNTS" +"ALI" 0 ;"former AV student" +"ARCSTAT" "ARCSTA" +"BATCH" "SWG" +"BATCHM" "SWG" +"BEA" 0 ;"SWG did it" +"BERMAN" 0 ;"SWG did it 12/1/81" +"BLUE" 0 ;"authorized tourist 7/21/81" +"BUG" 0 ;"DUMMY FOR BUG MESSAGES" +"C" "AS" +"CALICO" "SWG" +"CARUSO" 0 ;"TAA 3/25/82" +"CHARLI" 0 ;"SWG DID IT" +"CLCON" 0 ;"authorized tourist 7/21/81" +"COMMUNICATION-DAEMON" "COMSYS" +"COMMUNICATION-DEMON" "COMSYS" +"COMMUNICATION-SYSTEM-MAINTAINER" "COMSYS" +"COMSYS" "PDL" +"COMSYS-MAINTAINER" "COMSYS" +"DAA" 0 ;"SWG did it" +"DEC" 0 +"DIGEX" 0 ;"SWG 8/5/82" +"DKS" 0 ;"TAA DID THIS" +"DOWNTIME" 0 ;"??" +"DSY" 0 +"DVS" 0 ;"SWG DID IT" +"DWO" 0 ;"SWG DID IT" +"ELIOT" 0 ;"CSTACY DID IT" +"ERS" 0 ;"LISKOV PERSON" +"EVANS" 0 ;"Al Meyer wants it - 3/17/82" +"FEATUR" 0 ;"DUMMY FOR FEATURE MESSAGES" +"FEATURE" "FEATUR" +"FILSRV" 0 ;"DUMMY MAILBOX FOR ITS-STYLE 'FILE ADDRESSEES'" +"FIND" "PDL" +"FMRC" 0 +"FNT" 0 +"GALLEY" "SWG" +"GCA" 0 ;"former AV student" +"GLICK" "GLICK@SRI-KL" +"GLITCH" 0 ;"SWG did it 9/30/81" +"GRADE" "PDL" +"GUNNER" "TAA" +"HISTORY" "SWG" +"HJB" 0 ;"former AV student" +"HOLT" 0 ;"SWG did it: David Holt is ex-student of AV." +"IMEDIT" "PDL" +"IMLOAD" "PDL" +"IVAN" 0 ;"SWG did it" +"JAC" 0 ;"authorized tourist 7/21/81" +"JCMS" 0 +"JCRL" "LICK" +"JEP" 0 +"JJK" 0 ;"HAMMER PERSON" +"JOEH" 0 ;"MEYER STUDENT" +"JOEW" 0 ;"WEIZENBAUM?" +"KANNAN" 0 ;"visiting faculty 1/82" +"LIAISON" "SWG" ;"ARPANET LIAISON" +"LIBSER" 0 ;"FOR LIBRARY SEARCHING ON PLANNING" +"LJG" 0 ;"authorized tourist 7/21/81" +"LONGO" 0 ;"MEYER person" +"LPT" 0 ;"receives file for printing when LPTFTP down on XX" +"LSC" "MP" +"MAGIC-DRAGON-KEEPER" "SWG" +"MAIL-MAINTAINER" "COMSYS" +"MAIL-MAINTAINERS" "COMSYS" +"MANAGEMENT" "SWG" ;"per Arpanet RFC 763" +"MDL" "MUDDLE" +"MEREY" 0 ;"LISKOV PERSON" +"MH" "MMH" +"MIDAS" "PDL" +"MIKEHAMMER" "MMH" +"MILMES" 0 ;"MILMESEXP GROUP INCLUDES THIS MAILBOX" +"MILNER" 0 ;"authorized tourist 7/21/81" +"MRSGRP" 0 ;"COLLECTS MAIL TO MORSE-GROUP" +"MSGGRP" 0 ;"OUR LOCAL MAILBOX FOR INCOMING NET MSGGROUP MAIL" +"MSGSRV" 0 ;"DUMMY FOR :MSG MESSAGES" +"MUDDLE" "CLR" +"NETADR" 0 ;"RECEIVES DISCUSSIONS RE ADDRESSEE SYNTAX" +"NETRJS" "SWG" +"NETRJS-MAINTAINER" "SWG" +"NIVEN" 0 +"PINTER" 0 ;"MEYER STUDENT" +"POSTMASTER" "COMSYS" ;"per Arpanet RFC 822" +"PWD" 0 ;"SWG DID IT" +"R" "AS" +"RDBH" 0 ;"SWG did it" +"ROBG" 0 ;"authorized tourist 7/21/81" +"RONBRL" 0 +"SCRIM" 0 +"SKY-FANS-REQUEST" "SWG" +"SOBOTI" 0 ;"authorized tourist 7/21/81" +"SST" "PDL" +"SSV" "PDL" +"SURVEY" "SWG" +"SYS" "SYSTEM" +"SYSMAI" 0 +"SYSTEM" 0 ;"FOR SYS;SYSTEM MAIL" +"SYSTEMS" "SWG" ;"per Arpanet RFC 763" +"TENNEY" 0 ;"authorized tourist 7/21/81" +"TIMB" 0 ;"SWG did it" +"TOPS-20AN" 0 ;"TOPS-20 ARPANET INTERFACE" +"TOURIST-ACCOUNTS" "TOURIST-ACCOUNTS@MC" +"TRIVIA" 0 ;"GONE BUT NOT FORGOTTEN" +"UPDATE-INQUIR" "UPDINQ" +"UPDINQ" 0 ;"FOR INQUIR JUNK" +"URDS" 0 ;"HAMMER PERSON" +"URGW" 0 ;"HAMMER PERSON" +"URJD" 0 ;"HAMMER PERSON" +"URMT" 0 ;"HAMMER PERSON" +"URRL" 0 ;"HAMMER PERSON" +"USER-A" "USER-ACCOUNTS" +"USER-ACCOUNTS-ARCHIVE" "USER-ACCOUNTS-ARCHIVE@MC" +] diff --git a/src/librm1/sig.1 b/src/librm1/sig.1 new file mode 100644 index 00000000..79b16c85 --- /dev/null +++ b/src/librm1/sig.1 @@ -0,0 +1,143 @@ + +<FLOAD "AR3:MUDGRF;BITS NBIN"> + +<USE "BITS"> + +<DEFINE GET-FILE ("OPTIONAL" (FILNME "SIG;PDP11 >") "AUX" (FILE <OPEN "READB" .FILNME>)) + <READB <SET TDATA <IUVECTOR <FILE-LENGTH .FILE>>> .FILE> + <CLOSE .FILE>> + +<SET PDP11-SCALE </ 1.0 1000>> + +<SET FREQ-DATA <RUCPX 16>> + +<DEFINE NEXT-DATA-CHUNK () + #DECL ((FREQ-DATA VALUE) UCPX) + <PUT .FREQ-DATA + 2 + <MAPR ,UVECTOR + <FUNCTION (I) + #DECL ((I) <UVECTOR FLOAT>) + <PUT .I 1 0.0000000> + <* <FLOAT <NEXT-PDP11-WORD>> .PDP11-SCALE>> + <3 .FREQ-DATA>>> + <CDFT .FREQ-DATA>> + +<DEFINE FFTIZE () + #DECL ((END-FLAG) <OR FALSE T>) + <SET END-FLAG <>> + <SET FFTDATA <STACKFORM ,UVECTOR <NEXT-DATA-CHUNK> <NOT .END-FLAG>>>> + +<DEFINE NEXT-HALF-WORD () + #DECL ((TDTIME RIGHT) FIX) + <COND (<0? .RIGHT> + <SET RIGHT 1> + <HLRE <NTH .TDATA <+ 1 .TDTIME>>>) + (ELSE + <SET RIGHT 0> + <HRRE <NTH .TDATA <SET TDTIME <+ 1 .TDTIME>>>>)>> + +<DEFINE HALF-WORD-ACCESS (POS) + #DECL ((TDTIME RIGHT POS) FIX) + <SET BYTE 0> + <SET TDTIME </ .POS 2>> + <SET RIGHT <MOD .POS 2>>> + +<HALF-WORD-ACCESS 0> + +<DEFINE HALF-WORD-POS () #DECL ((TDTIME RIGHT) FIX) <+ <* .TDTIME 2> .RIGHT>> + +<DEFINE NEXT-PDP11-WORD ("AUX" (NEXT-SAMPLE <NEXT-HALF-WORD>)) + #DECL ((NEXT-SAMPLE) FIX) + <COND (<G=? .NEXT-SAMPLE -4095> .NEXT-SAMPLE) + (<==? .NEXT-SAMPLE -31743> + <SET-PDP11-GAIN <NEXT-HALF-WORD>> + <NEXT-PDP11-WORD>) + (<==? .NEXT-SAMPLE -32511> + <SET-PDP11-RATE <NEXT-HALF-WORD>> + <NEXT-PDP11-WORD>) + (<==? .NEXT-SAMPLE -32768> <END-PDP11-DATA>) + (<==? .NEXT-SAMPLE -32255> + <PDP11-PAUSED <NEXT-HALF-WORD>> + <NEXT-PDP11-WORD>) + (<==? .NEXT-SAMPLE -31998> + <PDP11-PAUSED <HALVES <NEXT-HALF-WORD> <NEXT-HALF-WORD>>> + <NEXT-PDP11-WORD>) + (<==? .NEXT-SAMPLE -32756> + <PDP11-HEADER> + <NEXT-PDP11-WORD>) + (ELSE <ERROR UNRECOGNIZED-PDP11-FORMAT> <NEXT-PDP11-WORD>)>> + +<SET VERBOSE T> + +<DEFINE PDP11-HEADER () + <OR <1? <HALF-WORD-POS>> + <ERROR PDP11-HEADER-NOT-AT-BEGINNING-OF-FILE>> + <SET PDP11-DATE <ISTRING 9 '<ASCII <NEXT-BYTE>>>> + <OR <0? <NEXT-BYTE>> <ERROR IMPROPER-PDP11-HEADER>> + <SET PDP11-TIME <ISTRING 8 '<ASCII <NEXT-BYTE>>>> + <SET PDP11-NAME <ISTRING 6 '<ASCII <NEXT-BYTE>>>> + <AND .VERBOSE + <PRINC "PDP11 file "> + <PRINC .PDP11-NAME> + <PRINC " +produced at "> + <PRINC .PDP11-TIME> + <PRINC " +on "> + <PRINC .PDP11-DATE>> + <NEXT-HALF-WORD>> + +<DEFINE NEXT-BYTE () + #DECL ((BYTE) FIX) + <CHTYPE <COND (<0? .BYTE> + <SET BYTE 1> + <GETBITS <SET OWORD <NEXT-HALF-WORD>> <BITS 8 8>>) + (ELSE <SET BYTE 0> <GETBITS .OWORD <BITS 8>>)> + FIX>> + +<DEFINE SET-PDP11-RATE (RATE) <SET PDP11-RATE .RATE>> + +<DEFINE END-PDP11-DATA () <HALF-WORD-ACCESS <- <HALF-WORD-POS> 1>> <SET END-FLAG T> 0> + +<SET MAGNIT <IUVECTOR .LINE-WIDTH 0.0000000>> + +<DEFINE PPLOT-LINE ("OPTIONAL" (FREQ-DATA .FREQ-DATA) "AUX" (CNT </ .CHUNK-SIZE 2>)) + <MAPR <> + <FUNCTION (MAGNP REALP IMAGP) + <PUT .MAGNP + 1 + <SQRT <+ <* <1 .REALP> <1 .REALP>> + <* <1 .IMAGP> <1 .IMAGP>>>>> + <AND <0? <SET CNT <- .CNT 1>>> <MAPLEAVE>>> + .MAGNIT + <2 .FREQ-DATA> + <3 .FREQ-DATA>> + <PUT .MAGNIT + <LENGTH .MAGNIT> + <NORMALIZE1 <NTH .MAGNIT .MAINF>>> + <PLOT-NEW-LINE .MAGNIT>> + +<DEFINE NORMALIZE1 (SIGL + "AUX" (NSIG-LEVEL + </ <- .SIGL .SIG-LOW> <- .SIG-HIGH .SIG-LOW>>)) + <SET SIG-DATA + <COND (<1? .SIG-DATA> + <COND (<L? .NSIG-LEVEL 0.5> 0) + (ELSE + <SET SIG-HIGH <AVERAGE .SIG-HIGH .SIGL .LEVEL-DAMP>> + 1)>) + (<0? .SIG-DATA> + <COND (<G? .NSIG-LEVEL 0.5> 1) + (ELSE + <SET SIG-LOW <AVERAGE .SIG-LOW .SIGL .LEVEL-DAMP>> + 0)>)>>> + +<DEFINE AVERAGE (X Y "OPTIONAL" (WEIGHT 1)) + </ <+ <* .X .WEIGHT> .Y> <+ .WEIGHT 1>>> + +<SET SIG-LOW 0.30000000> + +<SET SIG-HIGH 1.2999999> + +<SET LEVEL-DAMP 6> diff --git a/src/librm2/datsav.kwc001 b/src/librm2/datsav.kwc001 new file mode 100644 index 0000000000000000000000000000000000000000..c9562c234b29a288e34e36cd0576518efd2662b5 GIT binary patch literal 2176 zcmbuBdrVVT7{I?4M(YDD&r$Jlp(X_^GS=E*B%7B~g$YtooTwQVrxcK_m@sA2g{5v) zq0&W`jWBJ+8EJ?C6(7qI6QgV_QE?m0Y;&0*QE_pujkmY=UX<>f)6$A_*%HqmC;iTM z&*R?v`+m2c&cg-^xBb?)&5X2@c5w@;FP`AK98|JLr_XKXhttbx!Cb4~z}ahPT3A&* z<PcV^y=)QehLUcfEn|ozb~6$B=mcNe$WSX2f9t1a?@4ON!c4j7q}>2e#y}HHQE3YR zytXev<h|Sn#cWF-h{iZTAz1u=??4|+^I9*1XaPu~W&)TX3U`vM^*hnDO&Ulbzf@Wi zC`m_&E396t<-kKm*5mh6`Rf2wS~Em=ZRbJawe|QPlg=FzabvaD)&wGz7H!6k0u*PW zLzOasr$wS^tV;tc@Z3l|cZ%0$X_^+?#|$svF%+613jd16StVZiA(e{OQ_Yp+riYiu z*P+eN!%Ql&;;%+@zJWKw*=NmQq)ia<)GDDpym*HAAK8g}gM5j|h|l6Dom*zPd4vIU zKD_w{-rIdpf}W-^5kLkabkDfG1Q7sIkl?W> |}V}Wse$=Ej8YK!oF;Poo@alLn_ zRZN-lN;lVK&vgg|)R2SkQqb)}eFbF^4&HI<c_yRK!C&8+N(&9?g@?F545>$i(yBEd zF$HO*4sJBP-^Gn8h7WO?d*8M418Kt!;gh$WG~O~6cggwmTUiGGo?a-%A#j_&x_`sJ zeGe3pP^XmBi_NoTpdevhAr)8UPuU1+5_0eU={`5^DS%8j+=L|%DMbt1|NPMnGfKyT z*Z}h&(g2X3l2ud!(G(!8P~&!7IQ^kpq=7jk)FsX@Tl!u@5<CcGOV@P|jxV_aae-`X zQSyAV5ph65-$2y<WKRioZ67m}`tdlQeOJHFH>yBSsK>srmH)KT*(fB`Q03v0;T~r6 z(~S1#({=2X^0T#UK~k@gz1n`-=!=%AtJ#(1+G_SdvW8}*a&0}^@=ISWJ0RC?VKX;U zwQRAx*T}q5@ha`<{CIz(P+zlratSKYYXpc7mzHX-3B;s=g4Ob$1%X+UVA^9Qm&Rkn zkaf{~6Uf5+LY^dN>!k3t2c*bIhwJb$m0w{EayU_5m_r5O(2rXPLGgn{vqX91v0@@I zeWlGpgYt)<KBOahE5A2B^#rHR=+`r{DrBMw$c}Nnm3jKHE*V8wnt@jdu(T_76U2~3 z2}|$4E)BkRov2~?((y+okdv%VsgdY*Oy304NEl)SF@#!(ksvads&O<PO|l_m0#N8C z7!i}~|7PS#nJ#Y^P8w3qv8wX3b?k`_jggtY;p98Mg~^Mzum@x>*Re(Gb97@pK`$TY z&M2G?;Y?bYE38_)`J88{Hv2hLE5~HWF$zd!t#M)1dTo86Cc4DR3rG@EFh;tkr2B+D zt(N|y{{q^JA?^7fk8nHTxyfSNm6d3MS?E09D4(*M8yuJ~11{DH#Z7N`bMq4NUWf$| zWKVpzXr?~(Qadv>W~~L)ZYS+KcrPF}8>de1-_6KsN;(+n@#`*LeV1-$3ety;@#>>4 zT8Kxo6ZR^HUEFr+8qKUBp*^jUXY9)?eA|fA%FC)&HuJ4*zmZSiJbZ$%?6S#$xHHzc z+dC_BASn=H_hDX<uTdi=!^|l`Yzj)uEw%?$NC1UMRJP<|{hAr_+5W^9NFiYeP*NDc zt^R$*;COD)^Er+8))=~l=1TM@Aq^X^OZICOTi20Y#a=B(uG-d-V`Oc!scN?6i&I86 rGbx8=i`%nnebQN{s@ZKxDPQ{r?a>LI&cpgcTpM-iGcJ4N0zLI_!3#_c literal 0 HcmV?d00001 diff --git a/src/librm3/le&sde.ueb008 b/src/librm3/le&sde.ueb008 new file mode 100644 index 00000000..2131cd25 --- /dev/null +++ b/src/librm3/le&sde.ueb008 @@ -0,0 +1,306 @@ +<NEWTYPE INST!- WORD> +<PACKAGE "E&SDEF"> +<ENTRY CODES OPCODES LOOKSUP MNEMONIC HLRZ> + +"E&S definitions for the picture compiler." + +<SETG INST + %<FIXUP!-RSUBRS '[ +#CODE ![23852220525 23852220525 23852220525 23852220525 23852220524 23852482567 +27325104235 23088857099 23851171842 23851171843 23088857101 23849041922 +23852220525 23852482568 23852482569 23748384010 23852220524 23852482571 +27325104234 23088857111 23851171844 23851171845 23088857113 23849041922 +23852220525 23852482572 23852482573 23748384010 23852220524 23852482575 +27325104233 23088857123 23851171846 23851171847 23088857125 23849041922 +23852220525 23852482576 23852482577 23748384010 23852220524 23852482579 +27325104232 23088857135 23851171848 23851171849 23088857137 23849041922 +23852220525 23852482580 23852482581 23748384010 17330864128 23851171840 +23851171841 17180098617 17450926080 17467703297 280494102 17207656449 +12770869351 17196646403 23851433990 23851433991 17180098617 17450926080 +17467703297 280494104 17207656449 12770869350 17196646403 23851434008 +23851434009 17180098617 17450926080 17467703297 280494104 17207656449 +12770869349 17196646403 23851434002 23851434003 17180098617 17450926080 +17467703297 280494104 17207656449 12770869348 17196646403 23851433996 +23851433997 17180098617 17450926080 17467703297 280494104 17207656449 +-21449670654 17196646403 17188487170 23085681768 19394461699 23639097347 +24763170819 29142024195 -2359296 -1835008 -1310720 -786432 10485759 0 0!] + INST + #DECL ("VALUE" FIX ANY "OPTIONAL" + <OR ATOM FIX> <OR ATOM FIX> + <OR ATOM FIX> <OR ATOM FIX>) + AC + (<OR ATOM FIX>) + ADDR + (<OR ATOM FIX>) + MODE + (<OR ATOM FIX>) + IND + (<OR ATOM FIX>) + LOOKSUP + MNEMONIC] + '(48 + FINIS!-MUDDLE + 232552 + (100) + SPECBND!-MUDDLE + 234762 + (52 40 28 16) + $TLOSE!-MUDDLE + 229377 + (99 92 83 74 65 56 48 36 24 12))>> + +<DEFINE LOOKSUP + (CODE "EXTRA" SPECIAL? ) + #DECL ((SPECIAL? ) <OR VECTOR FALSE> + (CODE) <OR ATOM FIX> + (VALUE) FIX) + <COND (<SET SPECIAL? + <MEMQ .CODE ,OPCODES >> + <REPEAT ((DEFN + <2 .SPECIAL? >)) + #DECL ((DEFN ) LIST) + <SET <1 .DEFN > + <2 .DEFN >> + <COND (<EMPTY? <SET DEFN + <REST + .DEFN + 2>>> + <RETURN + <LOOKSUP + .OP >>)>>) + (ELSE + <MNEMONIC .CODE>)>> + +<DEFINE MNEMONIC + (CODE "EXTRA" PLACE ) + #DECL ((VALUE) FIX + (CODE) <OR FIX ATOM> + (PLACE ) <OR FALSE VECTOR>) + <COND (<==? <PRIMTYPE .CODE> WORD> .CODE) + (<SET PLACE + <MEMQ .CODE ,CODES >> + <2 .PLACE >) + (ELSE + <ERROR .CODE BAD-MNEMONIC >)>> + +<DEFINE HLRZ + (L ) ;"PDP10 instruction" + #DECL ((L ) <PRIMTYPE WORD> + (VALUE) FIX) + <CHTYPE <PUTBITS 0 + <BITS 18> + <GETBITS .L + <BITS 18 18>>> + FIX>> + +"CHANGE RADIX TO OCTAL" + +<SETG OPCODES + [PEEL + (OP NOP MODE PEELM) + NOP + (OP LI IND 1) + XQTA + (OP LI AC RAR MODE XQTM) + JMP + (OP LI AC PC) + JMPPSH + (OP LIPSHM AC PC) + PSH + (OP LIPSH IND 1) + PSHM + (OP LIPSHM IND 1) + LI + (OP 0) + LIPSH + (OP 32) + LIPSHM + (OP 48) + LIF + (OP 128) + LIFCL + (OP 136) + LIFST + (OP 144) + IJNRCR + (OP LIFST AC PC MODE RCRN) + IJPRCR + (OP IJNRCR IND 1) + LIFCM + (OP 152) + LAL + (OP 160) + LALCL + (OP 168) + LALST + (OP 176) + LALCM + (OP 184) + LOCLA + (OP 192) + LOCLR + (OP 193) + LOCLSA + (OP 194) + LOCLSR + (OP 195) + LOMM + (OP 196) + STMM + (OP 212) + LOMMP + (OP 198) + LOMDIR + (OP 199 MODE 1) + SKMDIR + (OP 247 IND 1 MODE 1) + RTMDIR + (OP 231 IND 1 MODE 1) + STCL + (OP 208) + RTCLA + (OP 224 IND 1) + RTCLR + (OP 225 IND 1) + RTCLSA + (OP 226 IND 1) + RTCLSR + (OP 227 IND 1) + RTMMS + (OP 229 IND 1) + RTMM + (OP 228 IND 1) + SKCL + (OP 240 IND 1) + SKMM + (OP 244 IND 1) + SKMMS + (OP 245 IND 1) + PUSHMM + (OP 246 IND 1) + BOXSA + (OP 256) + BOXA + (OP 258) + POLRR + (OP 285) + SETPTA + (OP 306) + SETPTR + (OP 309) + LINRR + (OP 309) + LINAA + (OP 306) + DD+LT+RE + (OP 317) + DRAWTA + (OP 274) + DRAWTR + (OP 277) + DRAWFA + (OP 298) + DRAWFR + (OP 301)]> + +<SETG CODES + [RAR + 0 + WAR + 1 + PC + 2 + SP + 3 + P1 + 4 + P2 + 5 + DSP + 6 + UR + 7 + RCR + 8 + WCR + 9 + DIR + 10 + RSR + 11 + SR + 12 + MAR + 13 + XQTM + 8 + RPTM + 4 + PEELM + 2 + PROGM + 1 + SAVELB + 0 + SAVERT + 1 + VIEWLB + 2 + VIEWRT + 3 + WINDLB + 4 + WINDRT + 5 + INSTLB + 6 + INSTRT + 7 + NAME + 8 + CDIR + 9 + HITANG + 10 + SELINT + 11 + SAVE + 12 + VIEW + 13 + WIND + 14 + INST + 15 + AICF + 11 + J3D + 2048 + K3D + 1024 + HITF + 10 + JDL + 32 + JMMA + 32768 + KMMA + 16384 + KDL + 16 + RCRN + 8]> + +"RETURN TO DECIMAL RADIX" + +<DEFINE INSERT-IF-ATOM (AT) + <AND + <TYPE? .AT ATOM> + <==? <1 .OBLIST> <OBLIST? .AT>> + <INSERT <REMOVE .AT> <2 .OBLIST>>>> + +<MAPF <> ,INSERT-IF-ATOM ,CODES> +<MAPF <> ,INSERT-IF-ATOM ,OPCODES> + +<ENDPACKAGE> +  \ No newline at end of file diff --git a/src/librm3/map2.utt028 b/src/librm3/map2.utt028 new file mode 100644 index 00000000..27b83cc4 --- /dev/null +++ b/src/librm3/map2.utt028 @@ -0,0 +1,218 @@ +<PACKAGE "MAP2"> + +%%<COND (<LOOKUP "f" <1 .OBLIST>>) (<LINK FORM "f" ;"laziness">)> + +<ENTRY MAP2 MAP2RET MAP2AGAIN MAP2STOP MAP2CON> + +<DEFMAC MAP2 (func 'list "AUX" any act var var1 var2 body) +#DECL ((func) <PRIMTYPE LIST> + (body var act) <PRIMTYPE LIST> + (var1 var2) ATOM) + + <SET act <COND (<TYPE? <SET any <1 .func>> ATOM> + <SET func <REST .func>> + (.any))>> + <SET var <COND (<SET any <MEMBER "AUX" <1 .func>>> <REST .any>) + (<SET any <MEMBER "EXTRA" <1 .func>>> <REST .any>) + (())>> + <SET var1 <1 <1 .func>>> + <SET var2 <2 <1 .func>>> + <SET body <REST .func>> + + <f PROG begin ((return .list) l unchecked checked .var1 .var2) + #DECL ((unchecked checked l return VALUE) <PRIMTYPE LIST> (begin) ACTIVATION) + + '<COND (<LENGTH? .return 1> <RETURN .return>)> + '<SET unchecked <REST .return>> + '<PUTREST .return ()> + + <f REPEAT loop () #DECL ((loop) ACTIVATION) + + '<COND (<EMPTY? .unchecked> <RETURN>)> + '<SET checked .return> + + <f REPEAT () + <f SET .var2 '<1 .unchecked> ;"for contin"> + <f SET .var1 '<1 .checked>> + <f PROG !.act .var !.body> + '<COND (<LENGTH? .checked 1> + <SET unchecked <REST <SET l .unchecked>>>;"rest unchecked" + <PUTREST .checked .l> ;"append to unchecked" + <PUTREST .l ()> ;"cut off" + <RETURN>) + (<SET checked <REST .checked>>)>>> ;"resting down unchecked" + + '.return>> + + + ; "This checks the argument and returns 1-4." + +<DEFINE CHECKARG (arg) #DECL ((arg) LIST) + <COND (<EMPTY? .arg> 1) + (<MAPF <> + #FUNCTION ((any) <COND (<TYPE? .any SEGMENT> <MAPLEAVE T>)>) + .arg> + 4) + (<LENGTH? .arg 1> 2) + (<LENGTH? .arg 2> 3) + (T 4)>> + + ; "This dispatches according to the argument." + +<DEFINE DISPATCH (arg vec "AUX" (flag <CHECKARG .arg>)) +#DECL ((arg) LIST (flag) FIX) + <APPLY <GVAL <NTH .vec .flag>> + !<COND (<==? .flag 1> ()) + (<==? .flag 2> (<1 .arg>)) + (<==? .flag 3> (<1 .arg> <2 .arg>)) + (T .arg)>>> + + ; "An old fashion macro." + +<DEFMAC APPEND ('a 'b) + <f PROG ((a .a) (b .b)) + '<COND (<EMPTY? .a> .b) (T <PUTREST <REST .a <- <LENGTH .a> 1>> .b> .a)>>> + + + ; "RELOP splices one element out of checked and continues operation." + +<DEFMAC RELOP () + '<COND (<LENGTH? .return 1> + <SET return .unchecked> + <AGAIN .begin>) + (T + <PUT .checked 1 <1 .return>> + <SET return <REST .return>> + <AGAIN .loop>)>> + +<DEFINE RET0 () + '<PROG () + <SET unchecked <REST .unchecked>> + <RELOP>>> + +<DEFINE RET1 (stuff) + <f PROG () + <f PUT '.checked 1 .stuff> + '<SET unchecked <REST .unchecked>> + '<AGAIN .loop>>> + +<DEFINE RET2 (stuff stuff2) + <f PROG () + <f PUT '.checked 1 .stuff> + <f PUT '<SET l .unchecked> 1 .stuff2> + '<SET unchecked <REST .l>> + '<PUTREST .checked <PUTREST .l <REST .checked>>> + '<AGAIN .loop>>> + +<DEFINE RETS ("TUPLE" stuffs) + <f PROG ((l (!.stuffs))) + '<SET unchecked <REST .unchecked>> + '<COND (<LENGTH? .return 1> + <SET return .l> + <COND (<EMPTY? .return> + <SET return .unchecked> + <AGAIN .begin>) + (T + <AGAIN .loop>)>) + (T + <PUT .checked 1 <1 .return>> + <SET return <REST .return>> + <PUTREST <REST .checked <- <LENGTH .checked> 1>> .l> + <AGAIN .loop>)>>> + + +<SETG AGAIN0 ,RET0> + +<DEFINE AGAIN1 (stuff) + <f PROG () + <f PUT '.unchecked 1 .stuff> + '<RELOP>>> + +<DEFINE AGAIN2 (stuff stuff2) + <f PROG () + <f SET unchecked <f CONS .stuff <f PUT '.unchecked 1 .stuff2>>> + '<RELOP>>> + +<DEFINE AGAINS ("TUPLE" stuffs) + <f PROG () + <f SET unchecked <f APPEND (!.stuffs) '<REST .unchecked>>> + '<RELOP>>> + + + ; "LEAVE splices off <1 .checked>, links up checked and unchecked + and returns." + +<DEFMAC LEAVE () + '<RETURN + <COND (<LENGTH? .return 1> + .unchecked) + (T + <PUT .checked 1 <1 .return>> + <PUTREST <REST .checked <- <LENGTH .checked> 1>> .unchecked> + <REST .return>)> + .begin>> + +<DEFINE STOP0 () + '<PROG () + <SET unchecked <REST .unchecked>> + <LEAVE>>> + +<DEFINE STOP1 (stuff) + <f PROG () + <f PUT '.checked 1 .stuff> + '<PUTREST <REST .checked <- <LENGTH .checked> 1>> <REST .unchecked>> + '<RETURN .return .begin>>> + +<DEFINE STOP2 (stuff stuff2) + <f PROG () + <f PUT '.checked 1 .stuff> + <f PUT '.unchecked 1 .stuff2> + '<PUTREST <REST .checked <- <LENGTH .checked> 1>> .unchecked> + '<RETURN .return .begin>>> + +<DEFINE STOPS ("TUPLE" stuffs) + <f PROG () + <f SET unchecked <f APPEND '<REST .unchecked> (!.stuffs)>> + '<LEAVE>>> + + +<DEFMAC CONTIN () + '<COND (<LENGTH? .return 1> + <SET return .unchecked> + <AGAIN .begin>) + (T + <PUT .checked 1 <1 .return>> + <SET return <REST .return>>)>> + +<SETG CON0 ,RET0> + +<DEFINE CON1 (stuff) + <f PROG () + <f PUT '.unchecked 1 .stuff> + '<CONTIN>>> + +<DEFINE CON2 (stuff stuff2) + <f PROG () + <f SET unchecked <f CONS .stuff <f PUT '.unchecked 1 .stuff2>>> + '<CONTIN>>> + +<DEFINE CONZ (stuffs) + <f PROG () + <f SET unchecked <f APPEND (!.stuffs) '<REST .unchecked>>> + '<CONTIN>>> + + +<DEFMAC MAP2RET ("ARGS" arg) + <DISPATCH .arg '![RET0 RET1 RET2 RETS]>> + +<DEFMAC MAP2AGAIN ("ARGS" arg) + <DISPATCH .arg '![AGAIN0 AGAIN1 AGAIN2 AGAINS]>> + +<DEFMAC MAP2STOP ("ARGS" arg) + <DISPATCH .arg '![STOP0 STOP1 STOP2 STOPS]>> + +<DEFMAC MAP2CON ("ARGS" arg) + <DISPATCH .arg '![CON0 CON1 CON2 CONZ]>> + + +<ENDPACKAGE> \ No newline at end of file diff --git a/src/librm3/msbs.madman b/src/librm3/msbs.madman new file mode 100644 index 00000000..212a8c2f --- /dev/null +++ b/src/librm3/msbs.madman @@ -0,0 +1,335 @@ +'<PCODE "1MADMAN"> + +"(c) Copyright 1978 Massachusetts Institute of Technology. All Rights Reserved." + +<PACKAGE "MADMAN"> + +<ENTRY SPACE PBLOCK CURSPACE ALLOC-TABLE AERRFALSE AERRFIX ARESERVE ARESTORE +ADD-ALLOC APGFIND APGGIVE AFIND ARESET AGIVE ALENGTH APLENGTH BOUNDS-CHECK +ALEGAL? AGC ACOPY APRINT AREAD ACONS ARELEASE ALSTRING ASTRING ALISTRING +AISTRING ALBYTES ABYTES ALIBYTES AIBYTES ALLIST ALIST ALILIST AILIST ALVECTOR +AVECTOR ALIVECTOR AIVECTOR ALUVECTOR AUVECTOR ALIUVECTOR AIUVECTOR APUT APUTC +PAGE-GIVE-TABLE MADMAN-PAGE-FIND MADMAN-PAGE-GIVE ABITS ASPEC-BITS ABIT-NOGROW +ABIT-NOFIXUP ABIT-VCHAIN ABIT-RELERR ASHARE-VECTOR> + +<USE-DEFER "ASYLUM" "DDM"> + +<DEFINE PUSHEM () #SPLICE (<PUSH P* O> <PUSH P* A> <PUSH P* B> <PUSH P* C> <PUSH +P* D> <PUSH P* E>)> + +<DEFINE POPPEM () #SPLICE (<POP P* E> <POP P* D> <POP P* C> <POP P* B> <POP P* A +> <POP P* O>)> + +<SETG AGCUV <IUVECTOR 2 #WORD *000000000000*>> + +<SETG ACOPY %<RSUBR!- '[ %<PCODE!- "1MADMAN" 0> ACOPY #DECL ("VALUE" ANY SPACE +ANY) LHPFIX APUT PUT-DATA DATWRITE GET-DATA DATREAD CORE-BLOCK +ILLEGAL-OBJECT!-ERRORS INTERNAL-ERROR!-ERRORS MUNGED-TEMPLATE!-ERRORS +TEMPLATE-LOSSAGE!-ERRORS CURSPACE %<TYPE-W SPACE VECTOR> ARG-WRONG-TYPE!-ERRORS +OUT-OF-BOUNDS!-ERRORS NEGATIVE-ARGUMENT!-ERRORS +TYPES-DIFFER-IN-UNIFORM-VECTOR!-ERRORS NON-CHARACTER-INTO-STRING!-ERRORS +NON-STRUCTURED-ARG-TO-PUT!-ERRORS CANT-PUT-NON-CHARACTER-INTO-STRING!-ERRORS +TYPES-DIFFER-IN-UVECTOR!-ERRORS %<RGLOC CURSPACE T> +CURSPACE-NOT-GASSIGNED!-ERRORS CANT-LOCK-SPACE RELEASE-OUT-OF-SPACE %<RGLOC +TENEX T> T #FALSE ("ILLEGAL-ARGUMENT") #FALSE ("CANT-FILL-REQUEST") %<RGLOC +AERRFIX T> %<RGLOC AERRCHECK T> AERRFALSE OBJECT-POINTS-OUTSIDE-AREA!-ERRORS %< +RGLOC BCFALSE T> NEGATIVE-LENGTH-VECTOR!-ERRORS #FALSE ("NEGATIVE-LENGTH-VECTOR" +) VECTOR-LOSSAGE LFIXUP OUTCHAN +" + PGS HIGH WORD LAST WORD" %<TYPE-W PBLOCK VECTOR> +" +CURRENT LOCATION = " " +LOWEST LOCATION = " " +FVC LOCATION = " " +FREE LIST LENGTH = " " +SPEC = " %<RGLOC ALLOC-TABLE T> #FALSE ("PAGE-FIND-FAILED") %<RGLOC MUDDLE T> +CANT-GET-PAGES!-ERRORS #FALSE ("APGFIND-FAILED") %<RGLOC SPARE-PBLOCKS T> %< +RGLOC SPARE-SPACE T> %<RGLOC SPARE-LIST T> #FALSE ("ARESERVE FAILED") "AGROW" %< +RGLOC AUV6 T> %<RGLOC AUV2 T> %<RGLOC AUV3 T> %<TYPE-C ASYLUM VECTOR> %<TYPE-C +DDMCHAN VECTOR> %<RGLOC ARVL T> %<RGLOC AREAD-VECTOR T> "AFIXUP" #FALSE ( +"SPACE NOT LARGE ENOUGH FOR READ?") %<RGLOC AUV4 T> (ACTIVATION) WORD LIST [ +STRING BYTES]]>> +<AND <ASSIGNED? GLUE> .GLUE <PUT ,ACOPY PGLUE ![715849727 -1 -1 -1 -17179869184! +]>> + + +<SETG AGC %<RSUBR-ENTRY '[ACOPY AGC #DECL ("VALUE" ANY SPACE ANY)] 9>> + +<BLOCK (<ROOT>)> + +TABLOCK + +<ENDBLOCK> + +<SETG ACONS %<RSUBR-ENTRY '[ACOPY ACONS #DECL ("VALUE" <OR LIST FALSE> SPACE ANY +LIST)] 469>> + +<SETG TABLOCK %<RSUBR-ENTRY '[ACOPY TABLOCK #DECL ("VALUE" UVECTOR FIX)] 1499>> + +<SETG APUT %<RSUBR-ENTRY '[ACOPY APUT #DECL ("VALUE" ANY SPACE STRUCTURED FIX +ANY)] 1366>> + +<SETG ALSTRING %<RSUBR-ENTRY '[ACOPY ALSTRING #DECL ("VALUE" <OR STRING FALSE> +"TUPLE" TUPLE)] 1279>> + +<SETG ASTRING %<RSUBR-ENTRY '[ACOPY ASTRING #DECL ("VALUE" <OR STRING FALSE> +SPACE "TUPLE" TUPLE)] 1259>> + +<SETG ALUVECTOR %<RSUBR-ENTRY '[ACOPY ALUVECTOR #DECL ("VALUE" <OR UVECTOR FALSE +> "TUPLE" TUPLE)] 1212>> + +<SETG AUVECTOR %<RSUBR-ENTRY '[ACOPY AUVECTOR #DECL ("VALUE" <OR UVECTOR FALSE> +SPACE "TUPLE" TUPLE)] 1192>> + +<SETG ALVECTOR %<RSUBR-ENTRY '[ACOPY ALVECTOR #DECL ("VALUE" <OR VECTOR FALSE> +"TUPLE" TUPLE)] 1150>> + +<SETG AVECTOR %<RSUBR-ENTRY '[ACOPY AVECTOR #DECL ("VALUE" <OR VECTOR FALSE> +SPACE "TUPLE" TUPLE)] 1130>> + +<SETG ALISTRING %<RSUBR-ENTRY '[ACOPY ALISTRING #DECL ("VALUE" <OR STRING FALSE> +FIX "OPTIONAL" CHARACTER)] 1102>> + +<SETG AISTRING %<RSUBR-ENTRY '[ACOPY AISTRING #DECL ("VALUE" <OR STRING FALSE> +SPACE FIX "OPTIONAL" CHARACTER)] 1080>> + +<SETG ALIBYTES %<RSUBR-ENTRY '[ACOPY ALIBYTES #DECL ("VALUE" <OR BYTES FALSE> +FIX FIX "OPTIONAL" <PRIMTYPE WORD>)] 1008>> + +<SETG AIBYTES %<RSUBR-ENTRY '[ACOPY AIBYTES #DECL ("VALUE" <OR BYTES FALSE> +SPACE FIX FIX "OPTIONAL" <PRIMTYPE WORD>)] 984>> + +<SETG ALBYTES %<RSUBR-ENTRY '[ACOPY ALBYTES #DECL ("VALUE" <OR BYTES FALSE> FIX +"TUPLE" TUPLE)] 872>> + +<SETG ABYTES %<RSUBR-ENTRY '[ACOPY ABYTES #DECL ("VALUE" <OR BYTES FALSE> SPACE +FIX "TUPLE" TUPLE)] 849>> + +<SETG ALIUVECTOR %<RSUBR-ENTRY '[ACOPY ALIUVECTOR #DECL ("VALUE" <OR UVECTOR +FALSE> FIX "OPTIONAL" ANY)] 794>> + +<SETG AIUVECTOR %<RSUBR-ENTRY '[ACOPY AIUVECTOR #DECL ("VALUE" <OR UVECTOR FALSE +> SPACE FIX "OPTIONAL" ANY)] 772>> + +<SETG ALIVECTOR %<RSUBR-ENTRY '[ACOPY ALIVECTOR #DECL ("VALUE" <OR VECTOR FALSE> +FIX "OPTIONAL" ANY)] 716>> + +<SETG AIVECTOR %<RSUBR-ENTRY '[ACOPY AIVECTOR #DECL ("VALUE" <OR VECTOR FALSE> +SPACE FIX "OPTIONAL" ANY)] 694>> + +<SETG ALLIST %<RSUBR-ENTRY '[ACOPY ALLIST #DECL ("VALUE" <OR LIST FALSE> "TUPLE" +TUPLE)] 628>> + +<SETG ALIST %<RSUBR-ENTRY '[ACOPY ALIST #DECL ("VALUE" <OR LIST FALSE> SPACE +"TUPLE" TUPLE)] 608>> + +<SETG ALILIST %<RSUBR-ENTRY '[ACOPY ALILIST #DECL ("VALUE" <OR LIST FALSE> FIX +"OPTIONAL" ANY)] 551>> + +<SETG AILIST %<RSUBR-ENTRY '[ACOPY AILIST #DECL ("VALUE" <OR LIST FALSE> SPACE +FIX "OPTIONAL" ANY)] 529>> + +<SETG ALCONS %<RSUBR-ENTRY '[ACOPY ALCONS #DECL ("VALUE" <OR LIST FALSE> ANY +LIST)] 477>> + +<SETG ARELEASE %<RSUBR-ENTRY '[ACOPY ARELEASE #DECL ("VALUE" ANY SPACE ANY +"OPTIONAL" FIX)] 1700>> + +<SETG PRINTA %<RSUBR-ENTRY '[ACOPY PRINTA #DECL ("VALUE" ANY CHANNEL <OR UVECTOR +<PRIMTYPE WORD>> FIX)] 1901>> + +<SETG READA %<RSUBR-ENTRY '[ACOPY READA #DECL ("VALUE" ANY CHANNEL <OR UVECTOR < +PRIMTYPE WORD>> FIX)] 1908>> + +<SETG PAGE-CLEAR %<RSUBR-ENTRY '[ACOPY PAGE-CLEAR #DECL ("VALUE" 'T FIX FIX)] +1943>> + +<SETG CLEAR-UV %<RSUBR-ENTRY '[ACOPY CLEAR-UV #DECL ("VALUE" UVECTOR UVECTOR)] +1966>> + +<SETG CLEAR-VEC %<RSUBR-ENTRY '[ACOPY CLEAR-VEC #DECL ("VALUE" VECTOR VECTOR)] +1985>> + +<SETG AOBJECT %<RSUBR-ENTRY '[ACOPY AOBJECT #DECL ("VALUE" UVECTOR ANY UVECTOR)] +2000>> + +<SETG GET-VECTOR %<RSUBR-ENTRY '[ACOPY GET-VECTOR #DECL ("VALUE" <OR FALSE +VECTOR> <PRIMTYPE WORD>)] 2016>> + +<SETG MOVE-M %<RSUBR-ENTRY '[ACOPY MOVE-M #DECL ("VALUE" 'T <PRIMTYPE WORD> < +PRIMTYPE WORD>)] 2027>> + +<SETG GETLOC %<RSUBR-ENTRY '[ACOPY GETLOC #DECL ("VALUE" WORD <PRIMTYPE WORD>)] +2039>> + +<SETG APGFIND %<RSUBR-ENTRY '[ACOPY APGFIND #DECL ("VALUE" <OR FALSE FIX> FIX +FIX <UVECTOR [REST WORD]>)] 2049>> + +<SETG APGGIVE %<RSUBR-ENTRY '[ACOPY APGGIVE #DECL ("VALUE" FIX FIX FIX <UVECTOR +[REST WORD]>)] 2153>> + +<SETG PAGE-GIVE-TABLE %<RSUBR-ENTRY '[ACOPY PAGE-GIVE-TABLE #DECL ("VALUE" <OR +ATOM FALSE> <UVECTOR [8 WORD]>)] 2183>> + +<SETG MADMAN-PAGE-FIND %<RSUBR-ENTRY '[ACOPY MADMAN-PAGE-FIND #DECL ("VALUE" <OR +FIX FALSE> "OPTIONAL" FIX)] 2219>> + +<SETG MADMAN-PAGE-GIVE %<RSUBR-ENTRY '[ACOPY MADMAN-PAGE-GIVE #DECL ("VALUE" FIX +FIX "OPTIONAL" FIX)] 2243>> + +<AND <GET ESYASS!-PACKAGE OBLIST> <SETG <OR <LOOKUP "F*" <GET OP!-PACKAGE OBLIST +>> <INSERT "F*" <GET OP!-PACKAGE OBLIST>>> <CHTYPE 50331648 <LOOKUP "OPCODE" < +GET OP!-PACKAGE OBLIST>>>> <SETG <OR <LOOKUP "G*" <GET OP!-PACKAGE OBLIST>> < +INSERT "G*" <GET OP!-PACKAGE OBLIST>>> <CHTYPE 58720256 <LOOKUP "OPCODE" <GET +OP!-PACKAGE OBLIST>>>>> + +<SETG BCFALSE #FALSE ("OBJECT-POINTS-OUTSIDE-SPACE" 1)> + +<SETG LHFIXUP %<RSUBR-ENTRY '[ACOPY LHFIXUP #DECL ("VALUE" ANY WORD WORD VECTOR) +] 2273>> + +<SETG LFIXUP %<RSUBR-ENTRY '[ACOPY LFIXUP #DECL ("VALUE" ANY WORD WORD WORD WORD +WORD)] 2448>> + +<SETG LPFIXUP %<RSUBR-ENTRY '[ACOPY LPFIXUP #DECL ("VALUE" ANY ANY UVECTOR +VECTOR)] 2353>> + +<SETG LHPFIX %<RSUBR-ENTRY '[ACOPY LHPFIX #DECL ("VALUE" WORD WORD <VECTOR [REST +WORD]>)] 2311>> + +<SETG GET-LIST %<RSUBR-ENTRY '[ACOPY GET-LIST #DECL ("VALUE" LIST WORD)] 2711>> + +<SETG GET-FRESH-PAGE %<RSUBR-ENTRY '[ACOPY GET-FRESH-PAGE #DECL ("VALUE" <OR FIX +FALSE> FIX)] 2721>> + +<SETG ARVL 60> + +<SETG AREAD-VECTOR <IVECTOR ,ARVL #WORD *000000000000*>> + +<NEWTYPE PBLOCK VECTOR '<VECTOR FIX WORD WORD>> + +<NEWTYPE SPACE VECTOR '<VECTOR <LIST [REST PBLOCK]> WORD WORD WORD LIST VECTOR +FIX FIX>> + +<SETG FREE-VECTOR-CHAIN 4> + +<SETG FREE-LIST 5> + +<SETG ASHARE-VECTOR 6> + +<SETG ASHARE-LOCK 7> + +<SETG ASPEC-BITS 8> + +"AGROW INTERRUPT IF ATTEMPT TO GROW SPACE" + +<SETG ABIT-NOGROW *400000000000*> + +"ERROR IF ATTEMPT TO RELEASE SOMETHING OUTSIDE SPACE" + +<SETG ABIT-RELERR 17179869184> + +"AFIXUP INTERRUPT IF ATTEMPT TO FIXUP SPACE" + +<SETG ABIT-NOFIXUP 8589934592> + +"USE VECTOR CHAIN FIRST" + +<SETG ABIT-VCHAIN 4294967296> + +<MANIFEST FREE-VECTOR-CHAIN FREE-LIST ASHARE-VECTOR ASHARE-LOCK ASPEC-BITS +ABIT-NOGROW ABIT-NOFIXUP ABIT-RELERR ABIT-VCHAIN> + +<SETG SPARE-SPACE <CHTYPE [() #WORD *000000000000* #WORD *000000000000* #WORD +*000000000000* () [] -1 0] SPACE>> + +<SETG SPARE-LIST '(T)> + +<SETG SPARE-PBLOCKS '()> + +<SETG ALLOC-TABLE <IUVECTOR 8 #WORD *000000000000*>> + +<SETG AUV1 <IUVECTOR 1 #WORD *000000000000*>> + +<SETG AUV2 <IUVECTOR 2 #WORD *000000000000*>> + +<SETG AUV3 <IUVECTOR 3 #WORD *000000000000*>> + +<SETG AUV4 <IUVECTOR 4 #WORD *000000000000*>> + +<SETG AUV6 <IUVECTOR 6 #WORD *000000000000*>> + +<SETG AERRFIX <>> + +<GDECL (SPARE-PBLOCKS) LIST (AUV1 AUV2 AUV3 AUV4 AUV6) UVECTOR (SCRATCH-PAGE) +SPACE (AREAD-VECTOR) VECTOR> + +<SETG SPACETYPE %<RSUBR-ENTRY '[ACOPY SPACETYPE #DECL ("VALUE" <OR FALSE WORD> +SPACE)] 2761>> + +<AND <APPLICABLE? ,SPACETYPE> <PRINTTYPE SPACE ,SPACETYPE>> + +<SETG ABITS %<RSUBR-ENTRY '[ACOPY ABITS #DECL ("VALUE" <OR FIX SPACE> SPACE +"OPTIONAL" <OR FIX FALSE>)] 2881>> + +<SETG ARESERVE %<RSUBR-ENTRY '[ACOPY ARESERVE #DECL ("VALUE" <OR FALSE FIX> FIX +"OPTIONAL" <UVECTOR [REST WORD]> <OR 'T FALSE>)] 2915>> + +<SETG PGFIXUP %<RSUBR-ENTRY '[ACOPY PGFIXUP #DECL ("VALUE" <OR ATOM FALSE> FIX +FIX "OPTIONAL" <OR 'T FALSE> FIX)] 2988>> + +<SETG ARESTORE %<RSUBR-ENTRY '[ACOPY ARESTORE #DECL ("VALUE" <OR FALSE FIX> +SPACE "OPTIONAL" <OR ATOM FALSE>)] 3091>> + +<SETG AFIND %<RSUBR-ENTRY '[ACOPY AFIND #DECL ("VALUE" <OR FALSE SPACE> FIX +"OPTIONAL" <OR FALSE SPACE> FIX)] 3153>> + +<SETG AGIVE %<RSUBR-ENTRY '[ACOPY AGIVE #DECL ("VALUE" SPACE SPACE)] 3242>> + +<SETG ARESET %<RSUBR-ENTRY '[ACOPY ARESET #DECL ("VALUE" SPACE SPACE "OPTIONAL" +<OR FALSE 'T> <OR FALSE 'T>)] 3308>> + +<SETG PAGE-FIXUP %<RSUBR-ENTRY '[ACOPY PAGE-FIXUP #DECL ("VALUE" SPACE FIX FIX +SPACE "OPTIONAL" <OR 'T FALSE>)] 3485>> + +<SETG GET-PBLOCK %<RSUBR-ENTRY '[ACOPY GET-PBLOCK #DECL ("VALUE" PBLOCK FIX WORD +WORD)] 3607>> + +<SETG ADD-ALLOC %<RSUBR-ENTRY '[ACOPY ADD-ALLOC #DECL ("VALUE" <OR ATOM FALSE +SPACE> SPACE FIX "OPTIONAL" <OR FIX FALSE>)] 3663>> + +<SETG BORDER? %<RSUBR-ENTRY '[ACOPY BORDER? #DECL ("VALUE" <OR FALSE PBLOCK> +PBLOCK <LIST [REST PBLOCK]>)] 4045>> + +<SETG UPAGES %<RSUBR-ENTRY '[ACOPY UPAGES #DECL ("VALUE" WORD SPACE)] 4081>> + +<SETG AFREE %<RSUBR-ENTRY '[ACOPY AFREE #DECL ("VALUE" <OR ATOM FALSE> SPACE +PBLOCK)] 4134>> + +<SETG APLENGTH %<RSUBR-ENTRY '[ACOPY APLENGTH #DECL ("VALUE" WORD SPACE)] 4179>> + +<SETG ALENGTH %<RSUBR-ENTRY '[ACOPY ALENGTH #DECL ("VALUE" WORD SPACE "OPTIONAL" +FIX FIX)] 4222>> + +<SETG PLENGTH %<RSUBR-ENTRY '[ACOPY PLENGTH #DECL ("VALUE" FIX SPACE PBLOCK FIX) +] 4309>> + +<SETG PFREE %<RSUBR-ENTRY '[ACOPY PFREE #DECL ("VALUE" FIX SPACE PBLOCK)] 4357>> + +<SETG AREAD %<RSUBR-ENTRY '[ACOPY AREAD #DECL ("VALUE" ANY SPACE <OR CHANNEL +ASYLUM DDMCHAN> "OPTIONAL" FIX FIX <OR 'T FALSE>)] 4387>> + +<SETG APRINT %<RSUBR-ENTRY '[ACOPY APRINT #DECL ("VALUE" <OR ASYLUM CHANNEL +DDMCHAN> SPACE ANY <OR CHANNEL ASYLUM DDMCHAN> "OPTIONAL" FIX <OR 'T FALSE>)] +4930>> + +<SETG BOUNDS-CHECK %<RSUBR-ENTRY '[ACOPY BOUNDS-CHECK #DECL ("VALUE" ANY SPACE)] +5590>> + +<SETG ALEGAL? %<RSUBR-ENTRY '[ACOPY ALEGAL? #DECL ("VALUE" <OR ATOM FALSE> SPACE +ANY)] 5750>> + +<SETG APUTC %<RSUBR-ENTRY '[ACOPY APUTC #DECL ("VALUE" ANY SPACE STRUCTURED FIX +ANY)] 5860>> + +<ENDPACKAGE> diff --git a/src/librm3/ndired.umrc21 b/src/librm3/ndired.umrc21 new file mode 100644 index 00000000..fc6e6eab --- /dev/null +++ b/src/librm3/ndired.umrc21 @@ -0,0 +1,167 @@ + +<PACKAGE "NDIRED"> + +<USE "DATIME" "TTY" "ITS" "DIR"> + +<ENTRY NDIRED ND> + +<DEFINE NDIRED ("EXTRA" (FIRST T) PD OTTY HAHA) + #DECL ((FIRST) <SPECIAL <OR 'T FALSE>> (PD) <VECTOR [REST VECTOR]> + (HAHA) <UVECTOR [3 FIX]>) + <SET OTTY <TTY-GET>> + <SET HAHA ![*232323232323* *232023202323* 0]> + <PUT .HAHA 3 <CHTYPE <ORB <3 .OTTY> *000002000000*> FIX>> + <SETG IH <GET ,INCHAN INTERRUPT>> + <SET ERINT <ON "ERROR" <FUNCTION (X "TUPLE" Y) <EVENT ,IH> <TTY-SET .OTTY>> 1000 0>> + <OFF ,IH> + <TTY-SET .HAHA> + <SET PD <PARSE-DIRECTORY <GET-DIRECTORY <UNAME>>>> + <INMSG> + <TERPRI> + <COND (<TYPE? <6 <1 .PD>> FIX> <FILE-PRINT <1 .PD> <>>) + (T <LINK-PRINT <1 .PD> <>>)> + <TERPRI> + <DELETE?> + <TERPRI> + <DIRPR .PD> + <OUTMSG> + <TTY-SET .OTTY> + <PROG () <EVENT ,IH> <OFF .ERINT> ,NULL>> + + +<DEFINE PSLEEP (STR TIM "EXTRA" (STIME <+ .TIM <* .03 <MOD <RANDOM <TIME>> 10>>>)) + #DECL ((STR) STRING (TIM STIME) FLOAT) + <MAPF <> <FUNCTION (X) <PRINC .X> <SLEEP .STIME>> .STR>> + +<DEFINE INMSG () + <IMAGE 7> + <TERPRI> + <PRINC "MESSAGE FROM AV "> + <TERPRI> + <SLEEP 1> + <PRINC <ASCII 26>> + <SLEEP .7> + <PRINC " +745522) XCT 35(2) "> + <SLEEP .4> + <PSLEEP "NDIRED" .07> + <PRINC !" > + <SLEEP .5> + <PRINC !"!> + <SLEEP .6> + <PRINC " +NDIRED.146"> + <SLEEP .3> + <PRINC "This is new dired. No warranty is expressed or implied. +Type ? for command list, ? <cmd> for each command. +" > + <SLEEP .3>> + +<DEFINE DELETE? () + <SLEEP .5> + <PSLEEP "@D * :" .2> + <SLEEP .3> + <PRINC "X"> + <SLEEP .3> + <PRINC "*"> + <SLEEP .18> + <PRINC " +Delete? (Y or N): "> + <SLEEP .4> + <PRINC "Yes."> + <SLEEP .2> + <PRINC <STRING " + DSK:" <UNAME> " -- DELETE all remaining files? (Y or N): ">> + <SLEEP 1> + <PRINC "Yes."> + <SLEEP .5>> + +<DEFINE OUTMSG ("AUX" (TTYNUM <CHTYPE <GETBITS <USET <> "TTY"> <BITS 18>> FIX>)) + <PRINC " +@"> + <SLEEP .7> + <PSLEEP "QUIT" .1> + <TERPRI> + <SLEEP .6> + <PRINC <STRING ":KILL + " <JNAME> "$J +*">> + <SLEEP 1> + <PSLEEP "$$0U" .2> + <SLEEP .3> + <PRINC <STRING <ASCII 16> "C">> + <SET T <RTIME>> + <TERPRI> + <PRINC "DM ITS 982 CONSOLE "> + <PUT .OUTCHAN 18 8> + <PRINC .TTYNUM> + <PUT .OUTCHAN 18 10> + <PRINC " FREE "> + <AND <L? <1 .T> 10> <PRIN1 0>> + <PRIN1 <1 .T>> + <PRINC !":> + <AND <L? <2 .T> 10> <PRIN1 0>> + <PRIN1 <2 .T>> + <PRINC !":> + <AND <L? <3 .T> 10> <PRIN1 0>> + <PRIN1 <3 .T>> + ,NULL> + +<DEFINE FILE-PRINT (ENT FUDGE) + #DECL ((ENT) <VECTOR [2 STRING] [3 <LIST [REST FIX]>] [2 FIX] LIST> + (FUDGE) <OR ATOM FALSE>) + <COND (.FUDGE <PRINC "+ ">) + (T <PRINC " ">)> + <PRINC <7 .ENT>> + <PRINC " "> + <PRINC <STRING <1 .ENT> !" <2 .ENT> !" >> + <PRINC <COND (<0? <6 .ENT>> 0)(T <+ 1 </ <6 .ENT> 1024>>)>> + <PRINC " ("> + <PRINC <MOD <6 .ENT> 1024>> + <PRINC <STRING ") " <COND (<EMPTY? <8 .ENT>> !" )(T !"!)>>> + <DATE-PRINT <3 .ENT>> + <PRINC !" > + <TIME-PRINT <4 .ENT>> + <PRINC " ("> + <DATE-PRINT <5 .ENT>> + <PRINC ")">> + +<DEFINE LINK-PRINT (ENT FUDGE "AUX" (LNAME <6 .ENT>)) + #DECL ((ENT) <VECTOR [2 STRING] [3 <LIST [REST FIX]>] <LIST [REST STRING]> FIX LIST> + (FUDGE) <OR ATOM FALSE> (LNAME) <LIST [REST STRING]>) + <COND (.FUDGE <PRINC "+ L ">) + (T <PRINC " L ">)> + <PRINC <STRING <1 .ENT> !" <2 .ENT> !" >> + <PRINC <STRING <1 .LNAME> !" <2 .LNAME> !" <3 .LNAME>>>> + +<DEFINE DATE-PRINT (DATE) + #DECL ((DATE) <LIST [3 FIX]>) + <PRINC <2 .DATE>> + <PRINC !"/> + <PRINC <3 .DATE>> + <PRINC !"/> + <PRINC <1 .DATE>>> + +<DEFINE TIME-PRINT (TIME) + #DECL ((TIME) <LIST [3 FIX]>) + <TP <1 .TIME>> + <PRINC !":> + <TP <2 .TIME>> + <PRINC !":> + <TP <3 .TIME>>> + +<DEFINE TP (ST) #DECL ((ST) FIX) + <COND (<L? .ST 10><PRINC 0>)> + <PRINC .ST>> + +<DEFINE DIRPR (PD "AUX" (FUDGE T)) + #DECL ((PD) <VECTOR [REST VECTOR]> (FUDGE) <OR ATOM FALSE>) + <MAPF <> + <FUNCTION (ENT) + <COND (<TYPE? <6 .ENT> FIX> <FILE-PRINT .ENT .FUDGE>) + (T <LINK-PRINT .ENT .FUDGE>)> + <TERPRI> + <SET FUDGE <>>> + .PD>> + +<ENDPACKAGE> \ No newline at end of file diff --git a/src/librm4/temhlp.1 b/src/librm4/temhlp.1 new file mode 100644 index 00000000..bc93b118 --- /dev/null +++ b/src/librm4/temhlp.1 @@ -0,0 +1,63 @@ +'<PCODE "TEMHLP"> + +<RPACKAGE "TEMHLP"> + +<ENTRY DUMP-TEMPLATES DUMP-RSUBRS BUILD-TEMPLATE DUMP-TEMPLATE +TEMPLATE-DATA GETTER-DATA PUTTER-DATA TEMPLATE? TEMPLATE-LENGTH TEMPLATE-GET +TEMPLATE-PUT> + +<SET DUMP-TEMPLATE T> + +<SET TEMPLATE-DATA T> + +<SETG TEMPLATE? %<RSUBR!- '[ %<PCODE!- "TEMHLP" 0> TEMPLATE? #DECL ("VALUE" <OR +FALSE FIX> VECTOR) TEMPLATE-SETUP "PRINTB" BADEXIT OUTCHAN (CHANNEL) TEMPLATE +GETTER-DATA TEMPLATE-DATA PUTTER-DATA "NOT ENOUGH INFO" "<BUILD-TEMPLATE " DECL +">" "DONE" " " " Is not an RSUBR." "<SETG " GLUE +"<AND <ASSIGNED? GLUE> .GLUE <PUT ," " GLUE '" ">>" %<RGLOC MUDDLE T> T]>> +<AND <ASSIGNED? GLUE> .GLUE <PUT ,TEMPLATE? PGLUE ![805306367 -1048576!]>> + + +<SETG TEMPLATE-GET %<RSUBR-ENTRY '[TEMPLATE? TEMPLATE-GET #DECL ("VALUE" UVECTOR +FIX)] 18>> + +<SETG TEMPLATE-PUT %<RSUBR-ENTRY '[TEMPLATE? TEMPLATE-PUT #DECL ("VALUE" UVECTOR +FIX)] 31>> + +<SETG TEMPLATE-LENGTH %<RSUBR-ENTRY '[TEMPLATE? TEMPLATE-LENGTH #DECL ("VALUE" +WORD FIX)] 44>> + +<SETG DUMP-TEMPLATES %<RSUBR-ENTRY '[TEMPLATE? DUMP-TEMPLATES #DECL ("VALUE" <OR +FALSE STRING> ANY)] 57>> + +<SETG SPACE %<RSUBR-ENTRY '[TEMPLATE? SPACE #DECL ("VALUE" STRING)] 295>> + +<SETG DUMP-RSUBRS %<RSUBR-ENTRY '[TEMPLATE? DUMP-RSUBRS #DECL ("VALUE" <OR FALSE +STRING> ANY "TUPLE" ANY)] 306>> + +"ROUTINE TO BUILD A TEMPLATE" + +<SETG TEMPLATE-SETUP %<RSUBR-ENTRY '[TEMPLATE? TEMPLATE-SETUP #DECL ("VALUE" ANY +ATOM <PRIMTYPE WORD> UVECTOR UVECTOR)] 472>> + +<SETG LOC %<RSUBR-ENTRY '[TEMPLATE? LOC #DECL ("VALUE" FIX ANY)] 488>> + +<SETG SMASH %<RSUBR-ENTRY '[TEMPLATE? SMASH #DECL ("VALUE" ANY ANY FIX)] 498>> + +<SETG MOVIT %<RSUBR-ENTRY '[TEMPLATE? MOVIT #DECL ("VALUE" FIX FIX)] 513>> + +<SETG BUILD-TEMPLATE %<RSUBR-ENTRY '[TEMPLATE? BUILD-TEMPLATE #DECL ("VALUE" +ATOM ATOM ANY FIX UVECTOR UVECTOR LIST LIST VECTOR ANY)] 524>> + +<SETG FIXUP-TEMPLATE-CODE %<RSUBR-ENTRY '[TEMPLATE? FIXUP-TEMPLATE-CODE #DECL ( +"VALUE" <OR FALSE <UVECTOR [REST FIX]>> UVECTOR <LIST LIST FIX LIST LIST>)] 615> +> + +<SETG FIXUP-CODE1 %<RSUBR-ENTRY '[TEMPLATE? FIXUP-CODE1 #DECL ("VALUE" <OR FALSE +<UVECTOR [REST FIX]>> <UVECTOR [REST FIX]> <LIST [REST FIX]> FIX FIX "OPTIONAL" +ANY)] 774>> + +<SETG SQUOZE %<RSUBR-ENTRY '[TEMPLATE? SQUOZE #DECL ("VALUE" WORD STRING +"OPTIONAL" <PRIMTYPE WORD>)] 865>> + +<ENDPACKAGE> diff --git a/src/librm4/transl.1 b/src/librm4/transl.1 new file mode 100644 index 00000000..96cbc4ff --- /dev/null +++ b/src/librm4/transl.1 @@ -0,0 +1,36 @@ +'<PCODE "1TRANSL"> + +<PACKAGE "TRANSL"> + +<ENTRY TRANSLATE-DEVICE TRANSLATE-DELETE TRANSLATE-CLEAR TRANSLATE-STY> + +<USE "ITS" "STR"> + +<SETG TRANSLATE-DEVICE %<RSUBR!- '[ %<PCODE!- "1TRANSL" 0> TRANSLATE-DEVICE # +DECL ("VALUE" <OR ATOM FALSE> <OR CHANNEL FALSE <PRIMTYPE WORD>> <VECTOR [REST < +OR STRING FALSE>]> <VECTOR [REST <OR STRING FALSE>]> "OPTIONAL" ANY ANY ANY ANY) + STRTOX ITS-CALL T "TRANAD" ![!] #FALSE ( +"NO ROOM IN SYSTEM FOR NEW TRANSLATION ENTRY")]>> +<AND <ASSIGNED? GLUE> .GLUE <PUT ,TRANSLATE-DEVICE PGLUE ![737935360!]>> + + +<SETG TRANSLATE-DELETE %<RSUBR!- '[ %<PCODE!- "1TRANSL" 173> TRANSLATE-DELETE # +DECL ("VALUE" <OR ATOM FALSE> <OR CHANNEL FALSE <PRIMTYPE WORD>> <VECTOR <OR +STRING FALSE> [REST <OR STRING FALSE>]> "OPTIONAL" ANY ANY ANY) STRTOX ITS-CALL +T "TRANDL" ![!] #FALSE ("NO SUCH TRANSLATION ENTRY TO DELETE")]>> +<AND <ASSIGNED? GLUE> .GLUE <PUT ,TRANSLATE-DELETE PGLUE ![737935360!]>> + + +<SETG TRANSLATE-CLEAR %<RSUBR!- '[ %<PCODE!- "1TRANSL" 304> TRANSLATE-CLEAR # +DECL ("VALUE" <OR ATOM FALSE> <OR CHANNEL FALSE <PRIMTYPE WORD>> "OPTIONAL" ANY +ANY) ITS-CALL T "TRANCL" ![!]]>> +<AND <ASSIGNED? GLUE> .GLUE <PUT ,TRANSLATE-CLEAR PGLUE ![801112064!]>> + + +<SETG TRANSLATE-STY %<RSUBR!- '[ %<PCODE!- "1TRANSL" 387> TRANSLATE-STY #DECL ( +"VALUE" <OR ATOM FALSE> CHANNEL <OR CHANNEL <PRIMTYPE WORD>>) USET SIXTOS +TRANSLATE-DEVICE ["TTY"] "INPUT" "OUTPUT" "INFERIORS"]>> +<AND <ASSIGNED? GLUE> .GLUE <PUT ,TRANSLATE-STY PGLUE ![721354752!]>> + + +<ENDPACKAGE> diff --git a/src/librm4/uvbyte.rsubr b/src/librm4/uvbyte.rsubr new file mode 100644 index 00000000..44861d7b --- /dev/null +++ b/src/librm4/uvbyte.rsubr @@ -0,0 +1,51 @@ +<PACKAGE "UVBYTES"> +<ENTRY UV-BYTES> + +;"UV-BYTES RETURNS BYTES FOR ANY GIVEN BYTE SIZE TO A UVECTOR + OF PRIMTYPE WORD. THE CALL TO THIS ROUTINE IS <UV-BYTES .UV .BSIZE>. + UV-BYTES RETURNS AN OBJECT OF TYPE BYTES. ARGS ARE: + .UV ........ A UVECTOR OF PRIMTYPE WORDS + .BSIZE ..... THE BYTE SIZE OF THE DESIRED BYTES, MUST BE LEES THAN 36." + <TITLE UV-BYTES> + <DECLARE ("VALUE" BYTES + <UVECTOR [REST <PRIMTYPE WORD>]> + FIX )> + <PUSH TP* (AB)> + <PUSH TP* (AB)1> ;"PUSH UVECTOR" + <PUSH TP* (AB)2> + <PUSH TP* (AB)3> ;"PUSH BYTE BIZE" + <PUSHJ P* UVBT0> ;"CONVERT UVECTOR TO BYTES" + <JRST FINIS> ;"RETURN THE BYTES" + <INTERNAL-ENTRY UVBT0 2> ;"2 ARGS" + <SUBM M* (P)> ;"MAKE RETURN ADR M* RELATIVE" + <INTGO> ;"CHECK FOR INTERRUPTS" + <HRRZ E* (TP)-2> ;"UV ADR TO E*" + <HLRE O* (TP)-2> + <MOVM O* O> ;"UV LENGTH TO O*" + <MOVE C* (TP)> ;"GET BYTE SIZE, THEN CHECK VALIDITY" + <CAIG C* 0> ;"BSIZE < 1 ?" + <JRST ERR:> ;"YES, BYTES SIZE ERROR" + <CAILE C* 36> ;"BSIZE > 36 ??" + <JRST ERR:> ;"YES, BYTE SIZE ERROR" + <HRRZI A* 36> + <IDIV A* (TP)> ;"CALC. BYTES/WORD IN A*" + <IMUL A* O> ;"CALC. LENGTH OF BYTES" + <HRLI A* <TYPE-CODE BYTES>> ;"MAKE THE TYPE WORD FOR THE BYTES" + <HRRZ B* (TP)> ;"GET BYTE SIZE WANTED" + <LSH B* 6> + <IORI B* *440000*> + <HRLZ B* B> ;"MAKE LEFT 1/2 OF BYTEPOINTER" + <HRR B* E> ;"BYTEPOINTER IS VALUE CELL" + <JRST MPOPJ> ;"ALL DONE" +ERR: <PUSH TP* <MQUOTE UV-BYTES> -1> ;"BYTE SIZE ERROR HANDLER" + <PUSH TP* <MQUOTE UV-BYTES>> + <PUSH TP* (TP) -3> + <PUSH TP* (TP) -3> ;"GET BAD BSIZE" + <PUSH TP* <MQUOTE INVALID.BYTE.SIZE> -1> + <PUSH TP* <MQUOTE INVALID.BYTE.SIZE>> + <MCALL 3 ERROR> + <JRST MPOPJ> + <END> + +<ENDPACKAGE> + diff --git a/src/mprog/acchrs.udl001 b/src/mprog/acchrs.udl001 new file mode 100644 index 00000000..2b70ff99 --- /dev/null +++ b/src/mprog/acchrs.udl001 @@ -0,0 +1,19 @@ +<TITLE ACCESS-IN-CHARS> + <DECLARE ("VALUE" FIX CHANNEL)> + <DPUSH TP* (AB)> + <PUSHJ P* IACCESS> + <JRST FINIS> + +<INTERNAL-ENTRY IACCESS 1> + <SUBM M* (P)> + <MOVE B* (TP)> + <HRRZ A* 32 (B)> + <MOVE B* 33 (B)> + <SKIPE A> + <SUBI B* 1> + <IMULI B* 5> + <SKIPE A> + <ADD B* A> + <MOVE A* <TYPE-WORD FIX>> + <SUB TP* [<2 (2)>]> + <JRST MPOPJ> diff --git a/src/mprog/aconst.udl005 b/src/mprog/aconst.udl005 new file mode 100644 index 00000000..9d06293f --- /dev/null +++ b/src/mprog/aconst.udl005 @@ -0,0 +1,278 @@ + +<PACKAGE "ACONST"> + +<ENTRY AB-OB> + +<ENTRY TREE + TOP-FCNS + TOP-GLOBALS + TOP-LOCALS + GLOBAL-DECL + LOCAL-DECL + OBJECT-OBLISTS + ENTRIES + USED-PACK + USED-DATUM + OBJECT-NAME + OBJECT-TYPE + GABST + NEWTYPES + RLOCAL-DECL> + +<ENTRY GSET GUSED LSET LUSED EXTF SIDE SPEC RDECL NOTES DATUMS> + +<ENTRY RGSET RGUSED RLSET RLUSED REXTF RSIDE RSPEC RRDECL RNOTES RDATUMS> + +<ENTRY NAME FATHERS ABST NODE-SIZE> + +<ENTRY EVAL-OR-APPLY + KNOWN-DECLS + APPLICABLE-TYPES + USER-APPLICABLE-TYPES + ASSEMBLY-TYPES + INT-SUBRS> + +<ENTRY ABSTR-FORM ABSTR-DECL ABSIZE OABSIZE> + +<ENTRY FAMILY> + +<BLOAT 8000 0 0 150 1> + +<NEWTYPE FAMILY + VECTOR + '<VECTOR <LIST [REST ATOM LIST VECTOR]> + [3 <LIST [REST ATOM]>] + DECL + <LIST [REST OBLIST]> + <LIST [REST ATOM]> + [2 <LIST [REST STRING]>] + ATOM + STRING + <VECTOR [4 DECL] [2 LIST] [2 DECL] LIST> + <LIST [REST FORM]>>> + +<SETG AB-OB + (<ROOT> <GET PACKAGE OBLIST> <GET RPACKAGE OBLIST>)> + +<SETG TREE 1> + +<SETG TOP-FCNS 2> + +<SETG TOP-GLOBALS 3> + +<SETG TOP-LOCALS 4> + +<SETG LOCAL-DECL 5> + +<SETG OBJECT-OBLISTS 6> + +<SETG ENTRIES 7> + +<SETG USED-PACK 8> + +<SETG USED-DATUM 9> + +<SETG OBJECT-NAME 10> + +<SETG OBJECT-TYPE 11> + +<SETG GABST 12> + +<SETG NEWTYPES 13> + +<SETG RLOCAL-DECL 4> + +<MANIFEST TREE + TOP-FCNS + TOP-GLOBALS + TOP-LOCALS + LOCAL-DECL + OBJECT-OBLISTS + ENTRIES + USED-PACK + USED-DATUM + OBJECT-NAME + OBJECT-TYPE + GABST + NEWTYPES + RLOCAL-DECL> + +<SETG GSET 1> + +<SETG GUSED 2> + +<SETG LSET 3> + +<SETG LUSED 4> + +<SETG EXTF 5> + +<SETG SIDE 6> + +<SETG SPEC 7> + +<SETG RDECL 8> + +<SETG NOTES 9> + +<SETG DATUMS 10> + +<MANIFEST GSET GUSED LSET LUSED EXTF SIDE SPEC RDECL NOTES DATUMS> + +<SETG RGSET 0> + +<SETG RGUSED 1> + +<SETG RLSET 2> + +<SETG RLUSED 3> + +<SETG REXTF 4> + +<SETG RSIDE 5> + +<SETG RSPEC 6> + +<SETG RRDECL 7> + +<SETG RNOTES 8> + +<SETG RDATUMS 9> + +<MANIFEST RGSET + RGUSED + RLSET + RLUSED + REXTF + RSIDE + RSPEC + RRDECL + RNOTES + RDATUMS> + +<SETG NAME 1> + +<SETG FATHERS 2> + +<SETG ABST 3> + +<SETG NODE-SIZE 3> + +<MANIFEST NAME FATHERS ABST NODE-SIZE> + +<SETG KNOWN-DECLS + #DECL ((INCHAN) CHANNEL + (OUTCHAN) CHANNEL + (OBLIST) <OR OBLIST [LIST <REST OBLIST>]>)> + +<SETG EVAL-OR-APPLY + ![LIST FORM SEGMENT FUNCTION MACRO CLOSURE VECTOR UVECTOR!]> + +<SETG APPLICABLE-TYPES + ![SUBR FSUBR FUNCTION MACRO RSUBR RSUBR-ENTRY!]> + +<SETG USER-APPLICABLE-TYPES <REST ,APPLICABLE-TYPES 2>> + +<SETG ASSEMBLY-TYPES <REST ,USER-APPLICABLE-TYPES 2>> + +<SETG INT-SUBRS + [,SET ,SETG ,DEFINE ,DEFMAC ,LVAL ,LLOC ,GVAL ,GLOC ,VALUE]> + +<MANIFEST EVAL-OR-APPLY + KNOWN-DECLS + APPLICABLE-TYPES + USER-APPLICABLE-TYPES + ASSEMBLY-TYPES> + +<GDECL (INT-SUBRS) <VECTOR [REST APPLICABLE]> + (ABSTR-FORM) <VECTOR [REST <OR STRING VECTOR>]> + (ABSTR-DECL) <VECTOR [REST <OR ATOM FORM VECTOR>]>> + +<SETG ABSTR-FORM + ["Unique-name" + "Name" + "Author" + "Object-type" + ["Contents" + "Ports" + "Internal-functions" + ["Data-ports" "Data-ports-global" "Data-ports-local"] + ["Internal-data" + "Internal-data-global" + "Internal-data-local"]] + "Category" + "Descriptor" + ["External-interactions" + "Side-effect" + ["Variables" + ["Global" "Setg'd" "Used"] + ["Local" "Set" "Used" "Special"]] + "Functions" + ["Environment" "Required" "During" "After"] + "Packages-used" + "Datums-used" + "Called-by"] + "Location" + "Reference" + "Description" + ["Argument" "Template" "Argument-type" "Result-type"] + "Example" + "Notes" + ["Dates" + "Date-of-abstract" + "Date-of-source" + "Date-of-binary"]]> + +<MANIFEST ABSIZE OABSIZE> + +<SETG ABSIZE <LENGTH ,ABSTR-FORM>> + +<SETG OABSIZE <- ,ABSIZE 2>> + +<SETG ABSTR-DECL + '[<OR ATOM STRING> + <OR ATOM STRING> + <OR ATOM STRING <VECTOR <OR STRING ATOM> [REST <OR STRING ATOM>]>> + <OR ATOM STRING <VECTOR <OR STRING ATOM> [REST <OR STRING ATOM>]>> + [<VECTOR [4 VECTOR]> + <VECTOR [REST <OR STRING ATOM>]> + <VECTOR [REST <OR STRING ATOM>]> + [<VECTOR [2 VECTOR]> + <VECTOR [REST <OR DECL STRING>]> + <VECTOR [REST <OR DECL STRING>]>] + [<VECTOR [2 VECTOR]> + <VECTOR [REST <OR DECL STRING>]> + <VECTOR [REST <OR DECL STRING>]>]] + <OR STRING ATOM <VECTOR <OR STRING ATOM> [REST <OR STRING ATOM>]>> + <OR STRING ATOM <VECTOR <OR STRING ATOM> [REST <OR STRING ATOM>]>> + [<OR <VECTOR [4 VECTOR]> <VECTOR [6 VECTOR]> <VECTOR [7 VECTOR]>> + <VECTOR [REST <OR STRING ATOM>]> + [<VECTOR [2 VECTOR]> + [<VECTOR [2 VECTOR]> + <VECTOR [REST <OR DECL STRING>]> + <VECTOR [REST <OR DECL STRING>]>] + [<VECTOR [3 VECTOR]> + <VECTOR [REST <OR DECL STRING>]> + <VECTOR [REST <OR DECL STRING>]> + <VECTOR [REST <OR DECL STRING>]>]] + <VECTOR [REST <OR STRING ATOM>]> + [<VECTOR [3 VECTOR]> + <VECTOR [REST <OR STRING LIST>]> + <VECTOR [REST <OR STRING LIST>]> + <VECTOR [REST <OR STRING LIST>]>] + <VECTOR [REST STRING]> + <VECTOR [REST STRING]> + <VECTOR [REST <OR STRING ATOM>]>] + <OR STRING ATOM <VECTOR [REST <OR STRING ATOM>]>> + <OR STRING ATOM <VECTOR [REST <OR STRING ATOM>]>> + <VECTOR STRING [REST <OR STRING LIST>]> + [<VECTOR <OR VECTOR DECL> [2 VECTOR]> + <OR DECL <VECTOR DECL [REST STRING]>> + <VECTOR [REST <OR STRING ATOM>]> + <VECTOR [REST <OR STRING ATOM>]>] + VECTOR + VECTOR + VECTOR]> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog/ahelp.udl001 b/src/mprog/ahelp.udl001 new file mode 100644 index 00000000..87f72230 --- /dev/null +++ b/src/mprog/ahelp.udl001 @@ -0,0 +1,123 @@ +<PACKAGE "AHELP"> + +<ENTRY ?? INFO-LIST> + +<USE "APRINT" "AMAKE" "ACHECK"> + +<DEFINE ?? ("OPTIONAL" (FUNC GEN) + "AUX" (INFO <MEMQ .FUNC ,INFO-LIST>)) + <COND (.INFO <PRINC <2 .INFO>>) + (ELSE <PRINC " + Never heard of it? +">)> + ,NULL> + +<SETG INFO-LIST (GEN + +" + The user functions in this collection include: + +?? - gives more detailed information about the functions listed + below, if given one of them as argument, or prints this if no + argument. + +FILE-ABSTRACT - takes a file name or the name of a group and an + optional output file name, and produces a file containing + abstracts of each function or rsubr in the group, and an + abstract of the entire group. + +PRINT-ABSTR - Prints an abstract to a file or channel, returning the + still-open channel in the latter case. + +PPRINT-ABSTR - 'Pretty-prints' an abstract to a file or channel. + +OLD-NEW - Converts a file of abstracts in the 'old' format into one in + the new format. + +CHECK-ABSTR - checks an abstract to see if the library processor will + accept it. + +CHECK-FILE - does a CHECK-ABSTR on every abstract in a file. + +ABSTR-LOAD - loads a file of abstracts, similar to GROUP-LOAD. + +ABSTR-DUMP - dumps a file of abstracts, similar to GROUP-DUMP. +" + ?? +" ?? gives information. No arguments gives general information, +a function-name as argument gives information about that function. +" + FILE-ABSTRACT + +" + Takes two arguments: (1) A STRING which is a file name or an +ATOM which is a group name, and (2) an optional STRING which is a file +name. The first argument is the input and the second the output. + FILE-ABSTRACT produces a file of abstracts of all the objects +in the file or group, and an abstract of the entire file or group. + + There are several switches which are useful: + +RECORD -- if bound, it should be a string which is a file to send output +to instead of to the TTY. + +AUTHOR -- if bound, it should be a string or vector of strings specifying +the author or authors to use in the abstracts being output. Default is +<SNAME>. + +OUTFILE -- if bound, performs the same function as the optional second +argument to FILE-ABSTRACT. + +REDO -- if bound, a list of atoms, which are the names of the objects +to output abstracts of. Useful if only a few abstracts in a package +want to be changed. If the atom T is in the list, a new abstract of +the entire package will be output. +" + + PRINT-ABSTR + +" + PRINT-ABSTR takes an abstract in the vector form returned by +GEN-ABSTR and prints it with leading comments of the field names. +The second argument is an optional channel, default is .OUTCHAN. This +is the print routine used by FILE-ABSTRACT. +" + PPRINT-ABSTR +" + PPRINT-ABSTR prints an abstract in a 'human oriented' format. +It takes an abstract (in core) and a channel (default .OUTCHAN). +" + OLD-NEW +" + OLD-NEW converts a file containing old style abstracts into one +containing new style abstracts. That is, it adds a Ports field if one +is needed, a Notes field, and a space in the Description field for a +one-line description of the object. It takes an input file and an +optional output file (default \"_ABST_ >\"). +" + CHECK-ABSTR +" + CHECK-ABSTR performs the library checking process on an abstract. +It prints anything it finds wrong or \"OKAY\" if the abstract is a winner. +" + CHECK-FILE +" + CHECK-FILE performs a CHECK-ABSTR on each abstract in a file. +" + ABSTR-LOAD +" + ABSTR-LOAD is analogous to EDIT's GROUP-LOAD, and takes the same +sequence of arguments: a file spec, and an optional ATOM. It makes a +list of all the abstracts in a file and makes that list the local value +of the group-name. +" + ABSTR-DUMP +" + ABSTR-DUMP is analogous to EDIT's GROUP-DUMP. It takes a file +spec, an optional ATOM whose value is the abstract list, and an optional +printing routine (which will be PRINT-ABSTR if not given explicitly). +The abstracts are output to the file. +")> + +<ENDPACKAGE> +  \ No newline at end of file diff --git a/src/mprog/aprint.udl001 b/src/mprog/aprint.udl001 new file mode 100644 index 00000000..047f0ea2 --- /dev/null +++ b/src/mprog/aprint.udl001 @@ -0,0 +1,140 @@ + +<PACKAGE "APRINT"> + +<ENTRY PRINT-ABSTR + PRINCLINE + PRINCTHEM + PRINTSPEC + ABSTR-LOAD + ABSTR-DUMP> + +<USE "ACONST" "AERROR"> + +<SETG CRET " +"> + +<DEFINE PRINT-ABSTR (VEC + "OPTIONAL" (OUTCHAN .OUTCHAN) (TEM ,ABSTR-FORM) + "AUX" (OBLIST ,AB-OB) (LEV 0)) + #DECL ((VEC) VECTOR (CHN) CHANNEL (TEM) STRUCTURED + (OBLIST) <SPECIAL <LIST [REST OBLIST]>> (LEV) <SPECIAL FIX> + (OUTCHAN) <SPECIAL CHANNEL>) + <COND (<AND <TYPE? .VEC VECTOR> <NOT <EMPTY? .VEC>>> + <PRINCLINE "["> + <MAPF <> ,SUBM-PRINT1 .VEC .TEM> + <PRINCLINE "]" ,CRET>) + (ELSE + <PRINCLINE "; \"***** NOT AN ABSTRACT *****\"" ,CRET> + <PPRINT .VEC>)> + <PRINC <ASCII 12>> + ,NULL> + +<DEFINE SUBM-PRINT1 (VAL TEM "AUX" (LL <* .LEV 3>)) + #DECL ((VAL) ANY (TEM) <OR STRING <VECTOR [REST <OR STRING VECTOR>]>> + (LEV LL) FIX (OUTCHAN) CHANNEL) + <TERPRI> + <INDENT-TO .LL> + <PRINC "; "> + <COND (<TYPE? .TEM STRING> + <PRIN1 .TEM> + <PRINC " "> + <COND (<NOT <FLATSIZE .VAL <- <LINLNT .OUTCHAN> <LINPOS .OUTCHAN>>>> + <TERPRI> <INDENT-TO <+ .LL 2>>)> + <EPRIN1 .VAL>) + (<EMPTY? .VAL> <PRIN1 <1 .TEM>> <PRINC " "> <PRIN1 .VAL>) + (<AND <TYPE? .VAL VECTOR> <NOT <EMPTY? .VAL>>> + <SET LEV <+ 1 .LEV>> + <PRIN1 <1 .TEM>> + <PRINC " ["> + <MAPF <> ,SUBM-PRINT1 .VAL <REST .TEM>> + <SET LEV <- .LEV 1>> + <PRINC "]">) + (ELSE + <COND (<NOT <FLATSIZE .VAL <- <LINLNT .OUTCHAN> <LINPOS .OUTCHAN>>>> + <TERPRI> <INDENT-TO <+ .LL 2>>)> + <EPRIN1 .VAL>)>> + +<DEFINE PRINCLINE ("TUPLE" THEM) + #DECL ((THEM) TUPLE) + <TERPRI> + <MAPF <> ,PRINC .THEM>> + +<DEFINE PRINCTHEM ("TUPLE" THEM) #DECL ((THEM) TUPLE) <MAPF <> ,PRINC .THEM>> + +<DEFINE PRINTSPEC (MESS CHN) + #DECL ((MESS) STRING (CHN) CHANNEL) + <TERPRI> + <PRINC .MESS> + <PRINCTHEM " " + <9 .CHN> + !": + <10 .CHN> + !"; + <7 .CHN> + !" + <8 .CHN> + !".>> + +<SETG JUNK-STR <ISTRING 200>> + +<DEFINE COMMENT-JUNKER (X) + <READSTRING ,JUNK-STR .INCHAN "\""> + <READCHR .INCHAN> + <READSTRING ,JUNK-STR .INCHAN "\""> + <READCHR .INCHAN> + #SPLICE ()> + +<SETG COMMENT-TABLE <IVECTOR 128 0>> + +<PUT ,COMMENT-TABLE <+ 1 <ASCII !";>> ,COMMENT-JUNKER> + +<DEFINE ABSTR-LOAD ERROR-RETURN (FILE + "OPTIONAL" KEY (YELL <>) + "AUX" (INCH <OPEN "READ" .FILE>) (DONE T) + (NM2 "ABSTR") + (OBLIST ,AB-OB) + (READ-TABLE ,COMMENT-TABLE)) + #DECL ((ERROR-RETURN) <SPECIAL ACTIVATION> (FILE) STRING + (KEY) ATOM (YELL DONE) ANY (INCH) <OR CHANNEL FALSE> + (OBLIST) <SPECIAL <LIST [REST OBLIST]>> + (READ-TABLE) <SPECIAL VECTOR>) + <COND + (.INCH + <COND (<NOT <ASSIGNED? KEY>> <SET KEY <PARSE <7 .INCH>>>)> + <SET .KEY + <STACKFORM ,LIST + .DONE + <PROG () + <SET DONE <READ .INCH '<RETURN <>>>> + <COND (<TYPE? .DONE VECTOR> + <AND .YELL <PRINT <1 .DONE>>> + T) + (ELSE + <ERROR NOT-AN-ABSTR? + ABSTR-LOAD + .DONE>)>>>> + <PUT .KEY + CHANNEL + (<7 .INCH> <8 .INCH> <9 .INCH> <10 .INCH>)> + <CLOSE .INCH> + .KEY)>> + +<DEFINE ABSTR-DUMP (FILE + "OPTIONAL" KEY (OPERATION ,PRINT-ABSTR) + "AUX" (NM2 "ABSTR") (OBLIST ,AB-OB) K (OUTCHAN <OPEN "PRINT" .FILE>)) + #DECL ((FILE) STRING (NM2) <SPECIAL STRING> (KEY) <OR ATOM FALSE> + (OPERATION) APPLICABLE (OBLIST) <SPECIAL <LIST [REST OBLIST]>> + (K) ANY (OUTCHAN) <SPECIAL CHANNEL>) + <COND (.OUTCHAN + <COND (<NOT <ASSIGNED? KEY>> + <SET KEY <LOOKUP <3 .OUTCHAN> <1 .OBLIST>>>)> + <COND (.KEY + <COND (<AND <ASSIGNED? .KEY> <TYPE? <SET K ..KEY> LIST>> + <MAPF <> .OPERATION .K> + <CLOSE .OUTCHAN> + .KEY) + (<CLOSE .OUTCHAN> #FALSE ("NOT A GROUP"))>) + (<CLOSE .OUTCHAN> #FALSE ("GROUP DOESN'T EXIST"))>)>> + +<ENDPACKAGE> + T A \ No newline at end of file diff --git a/src/mprog/assem.undr88 b/src/mprog/assem.undr88 new file mode 100644 index 00000000..fd5d1c26 --- /dev/null +++ b/src/mprog/assem.undr88 @@ -0,0 +1,1144 @@ + +<OR <LOOKUP "COMPILE" <ROOT>> <PACKAGE "CODING" "IC">> + +<OR <GASSIGNED? ONLY-FAST-OUTPUT> + <SETG ONLY-FAST-OUTPUT <>>> + +<BLOAT 17000 500 10 500 10> + +<BLOCK (<ROOT>)> + +ASSEMBLY-OPSYS + +GLUE + +TMP + +<COND (<LOOKUP "COMPILE" <ROOT>> + <REMOVE "TITLE" <ROOT>> + <SETG ENTRY <FUNCTION ("TUPLE" X) <1 .X>>>) + (ELSE <OR <LOOKUP "TITLE" <ROOT>> <INSERT "TITLE" <ROOT>>>)> + +<ENDBLOCK> + +<SETG MOB <GET MUDDLE OBLIST>> + +<BLOCK (,MOB)> + +$TLOSE + +NUMPRI + +<ENDBLOCK!- > + +<BLOCK (,MOB <ROOT>)> + +<OR <GASSIGNED? $TLOSE> + <SETG $TLOSE <SQUOTA <SQUOZE!-RSUBRS "$TLOSE">>>> + +<OR <GASSIGNED? NUMPRI> + <SETG NUMPRI <SQUOTA <SQUOZE!-RSUBRS "NUMPRI">>>> +<GDECL (NUMPRI) FIX (MUDDLE) FIX> +<ENDBLOCK> + +<GDECL (MOB) OBLIST> + +<COND (<LOOKUP "COMPILE" <ROOT>> + <NEWTYPE <OR <LOOKUP "MUDREF" <1 .OBLIST>> + <INSERT "MUDREF" <1 .OBLIST>>> + WORD> + <NEWTYPE <OR <LOOKUP "OPCODE" <1 .OBLIST>> + <INSERT "OPCODE" <1 .OBLIST>>> + WORD>) + (ELSE + <REMOVE "MUDREF" <1 .OBLIST>> + <REMOVE "OPCODE" <1 .OBLIST>> + <EXTERNAL "OP">)> + +<SETG NO-OPS + <PROG (TT) + <OR <AND <SET TT <LOOKUP "COMPILE" <ROOT>>> <GASSIGNED? .TT>> + <NOT <LOOKUP "HRRZ" <GET OP!-PACKAGE OBLIST>>>>>> + +<COND (<NOT ,NO-OPS> + <SET READ-TABLE <IVECTOR 128 '0>> + <PUT .READ-TABLE <+ <ASCII !\`> 1> !\ >)> + +<PUTREST <REST .OBLIST> (,MOB !<REST .OBLIST 2>)> + +<OR <LOOKUP "COMPILE" <ROOT>> + <EVAL <PARSE +"<MAPF <> #FUNCTION ((X) <INSERT <REMOVE .X> <GET OP!-PACKAGE OBLIST>>) + '(*INSERT ARG SQUOZE END)>">>> + +<NEWTYPE ADDRESS WORD> + +<NEWTYPE ICL WORD> + +<NEWTYPE CNST WORD> + +<NEWTYPE MCL WORD> + +<NEWTYPE PCL WORD> + +<ENTRY ASSEMBLE ASSEMBLE1 FILE-ASSEMBLE> + +<SET <ENTRY MESSAGE-CHANNEL> "TTY:"> + +<SET <ENTRY LINE-CHANNEL> <>> + +<SET <ENTRY MAKE-SYM-TABLE> <>> + +<SET <ENTRY QUICK-FORMAT> T> + +<OR <ASSIGNED? GLUE> <SET GLUE T>> + +<FLOAD "CLR;ATOSQ NBIN"> + +<DEFINE ASSEMBLE (BODY + "OPTIONAL" (LOCAL .OBLIST) (MESS-CHAN .MESSAGE-CHANNEL) + (LINE-CHAN .LINE-CHANNEL) (MAK-SYM .MAKE-SYM-TABLE) + (GLUE .GLUE) + "AUX" (OBLIST + (<MOBLIST OP!-PACKAGE> + ,MOB + DEFAULT + !<COND (<TYPE? .LOCAL LIST> .LOCAL) + (T (.LOCAL <ROOT>))>)) + (START-TIME <TIME>) + (ASSEM-LIST ()) + (GEOF <>) + (MORE-INSTS + <COND (<ASSIGNED? TITLE-STATEMENT> .TITLE-STATEMENT) + (T ())>) + (DONT-LIST-N 0) + CHN?) + #DECL ((MESS-CHAN) <OR CHANNEL FALSE> (LOCAL) <OR LIST OBLIST> + (OBLIST) <SPECIAL LIST> (START-TIME) FLOAT (ASSEM-LIST) LIST + (GEOF) <SPECIAL ANY> (MORE-INSTS) <SPECIAL LIST> + (DONT-LIST-N) <SPECIAL FIX>) + <COND (<TYPE? .BODY LIST> <SET MORE-INSTS .BODY> <SET CHN? <>>) + (T <SET CHN? .BODY>)> + <REPEAT () + <COND (.GEOF <RETURN>)> + <SET ASSEM-LIST + (!.ASSEM-LIST + !<DO-ASSEMB .MORE-INSTS + .CHN? + .MESS-CHAN + .LINE-CHAN + .MAK-SYM + .GLUE + .DONT-LIST-N>)>> + <COND (.MESS-CHAN + <CMESS .MESS-CHAN + "DONE IN" + <- <TIME> .START-TIME> + "SECONDS">)> + .ASSEM-LIST> + +<DEFINE ASSEMBLE1 (BODY + "OPTIONAL" (LOCAL .OBLIST) + (MESS-CHAN .MESSAGE-CHANNEL) + (LINE-CHAN .LINE-CHANNEL) + (MAK-SYM .MAKE-SYM-TABLE) (GLUE .GLUE) + "AUX" (OBLIST + (<MOBLIST OP!-PACKAGE> + ,MOB + DEFAULT + !<COND (<TYPE? .LOCAL LIST> .LOCAL) + (T (.LOCAL <ROOT!->))>)) + GOODS + (GEOF <>) + (MORE-INSTS ()) + (DONT-LIST-N 0)) + #DECL ((LOCAL) <OR LIST OBLIST> (MESS-CHAN) <OR CHANNEL FALSE> + (OBLIST) <SPECIAL LIST> (GOODS) LIST (GEOF) <SPECIAL ANY> + (MORE-INSTS) <SPECIAL LIST> (DONT-LIST-N) <SPECIAL FIX>) + <SET GOODS + <DO-ASSEMB <COND (<TYPE? .BODY LIST> .BODY) (())> + <AND <NOT <TYPE? .BODY LIST>> .BODY> + .MESS-CHAN + .LINE-CHAN + .MAK-SYM + .GLUE + .DONT-LIST-N>> + <COND (<TYPE? <1 .GOODS> ATOM> ,<1 .GOODS>) (<1 .GOODS>)>> + +<DEFINE FILE-ASSEMBLE (INFIL + "OPTIONAL" OUTFIL (NBIN .QUICK-FORMAT) + "TUPLE" JUNK + "AUX" (INCHN <OPEN "READ" .INFIL>) TMP (OBLIST .OBLIST) + (THINGS-DONE ()) (REOF <>) (TITLE-STATEMENT ()) + (MUDDLE ,MUDDLE) + (OCHN + <CHANNEL + <COND (.NBIN "PRINTB") (ELSE "PRINT")> + <COND (<AND <ASSIGNED? OUTFIL> .OUTFIL>) + (<G? .MUDDLE 100> "ETMP.TMP") + (ELSE "_ETMP_ >")>>)) + #DECL ((INFIL) STRING (OUTFIL) <OR FALSE STRING> (MUDDLE) FIX + (OBLIST) <SPECIAL <LIST [REST <OR ATOM OBLIST>]>> + (INCHN OCHN) <OR CHANNEL FALSE> (REOF TITLE-STATEMENT) <SPECIAL ANY>) + <GUNASSIGN ASSEMBLY-OPSYS> + <UNWIND + <PROG () + <COND (<G? .MUDDLE 100> + <PUT .OCHN 7 "ATMP"> + <PUT .OCHN 8 "TMP">) + (<PUT .OCHN 7 "_ATMP_"> + <PUT .OCHN 8 ">">)> + <OR <AND <ASSIGNED? OUTFIL> .OUTFIL> + <NOT .INCHN> + <PUT .OCHN 10 <10 .INCHN>>> + <COND (<NOT .INCHN> <RETURN .INCHN>) + (<NOT <RESET .OCHN>> <CLOSE .INCHN> <RETURN .OCHN>)> + <AND <NOT <EMPTY? .JUNK>> + <TYPE? <1 .JUNK> STRING> + <COND (<=? <1 .JUNK> "TTY:"> ;"CRETIN TOPS-20 MUDDLE" + <PUT .JUNK 1 ,OUTCHAN>) + (<PUT .JUNK 1 <OPEN "PRINT" <1 .JUNK>>>)>> + <AND <G? <LENGTH .JUNK> 1> + <TYPE? <2 .JUNK> STRING> + <PUT .JUNK 2 <OPEN "PRINT" <2 .JUNK>>>> + <REPEAT (STMNT) + <SET STMNT <READ .INCHN '<RETURN>>> + <COND + (<AND <TYPE? .STMNT FORM> + <NOT <EMPTY? .STMNT>> + <==? <1 .STMNT> TITLE>> + <SET TITLE-STATEMENT (.STMNT)> + <REPEAT ((GOODS <ASSEMBLE .INCHN .OBLIST !.JUNK>) (RET .GOODS)) + #DECL ((GOODS RET) LIST) + <COND (<EMPTY? .GOODS> + <SET THINGS-DONE (!.THINGS-DONE !.RET)> + <RETURN>) + (<TYPE? <1 .GOODS> ATOM> + <PRINT <FORM SETG <1 .GOODS> ,<1 .GOODS>> .OCHN> + <COND (<SET TMP <GET ,<1 .GOODS> FREEZE>> + <TERPRI .OCHN> + <PRINT <FORM PUT + <FORM GVAL <1 .GOODS>> + FREEZE + <FORM QUOTE .TMP>> + .OCHN>)> + <COND (<SET TMP <GET ,<1 .GOODS> GLUE>> + <TERPRI .OCHN> + <PRINT <FORM AND + '<ASSIGNED? GLUE> + '.GLUE + <FORM PUT + <FORM GVAL <1 .GOODS>> + GLUE + <FORM QUOTE .TMP>>> + .OCHN>)>) + (T <PRINT <1 .GOODS> .OCHN>)> + <TERPRI .OCHN> + <SET GOODS <REST .GOODS>>>) + (T + <COND (.NBIN <TERPRI .OCHN> <PRINT .STMNT .OCHN>) + (T + <PROG ((OUTCHAN .OCHN)) + #DECL ((OUTCHAN) <SPECIAL ANY>) + <EPRINT .STMNT>>)> + <EVAL .STMNT>)> + <AND .REOF <RETURN>>> + <COND (<G? .MUDDLE 100> + <SET OUTFIL <COND (<AND <ASSIGNED? OUTFIL> .OUTFIL> .OUTFIL) + (<STRING <9 .OCHN> ":<" <10 .OCHN> !\> + <7 .INCHN> ".NBIN">)>> + <CLOSE .OCHN> + <RENAME <STRING <9 .OCHN> ":<" <10 .OCHN> !\> + <7 .OCHN> !\. <8 .OCHN>> + TO .OUTFIL>) + (<RENAME .OCHN + <COND (<AND <ASSIGNED? OUTFIL> .OUTFIL>) + (<STRING <7 .INCHN> " " <COND (.NBIN "NBIN") ("BINARY")>>)>> + <BUFOUT .OCHN> + <CLOSE .OCHN>)> + <MAPF <> + <FUNCTION (X) <COND (<AND <TYPE? .X CHANNEL> + <NOT <0? <1 .X>>> + <N==? .X ,OUTCHAN>> + <CLOSE .X>)>> + .JUNK> + .THINGS-DONE> + <PROG () + <CLOSE .OCHN> + <CLOSE .INCHN> + <MAPF <> + <FUNCTION (X) <COND (<AND <TYPE? .X CHANNEL> + <NOT <0? <1 .X>>> + <N==? .X ,OUTCHAN>> + <CLOSE .X>)>> + .JUNK>>>> + +<DEFINE DO-ASSEMB (CODE-LIST INST-GETTER MESS-CHAN LIST-CHAN MAK-SYM GLUE DLN + "AUX" (TOG (())) (CNSTLOC ()) (CNSTS ()) (CNSTL ()) (ILNTH 4) + (MCLNTH 0) (FIXES ()) (IMPS (PHRED!-TMP)) (MCS ()) + (PQS ()) (NAMED <>) (SUB-ENTS ()) RSUB (IND (())) TA + (TF '<>) (TL '()) TN TV (GLOB-SYM (0)) (LOC-SYM (0)) + (EOF <>) (BITV (0)) (INTRS ())) + #DECL ((TOG) LIST (CNSTLOC) <LIST [REST ADDRESS]> + (CNSTS CNSTL) <LIST [REST VECTOR]> (TA) ATOM (TF) FORM (TL) LIST + (TV) VECTOR (ILNTH MCLNTH) <SPECIAL FIX> (INTRS) <SPECIAL LIST> + (FIXES SUB-ENTS IMPS MCS PQS) <SPECIAL LIST> (NAMED IND) <SPECIAL + ANY> + (MESS-CHAN) <SPECIAL ANY> (GLOB-SYM) <SPECIAL <LIST [REST FIX]>> + (LOC-SYM) <LIST [REST FIX]> (CODE-LIST) <SPECIAL LIST> + (EOF) <SPECIAL ANY> (DLN) FIX (BITV) <LIST [REST FIX]>) + <REPEAT ((PASS1 T)) + <COND + (<REPEAT ((POS- .TOG) (POS <REST .POS->) (SWAP <>) (FULL <BITS 36>) + (UNRESOLVED ()) (COUNT 0) TMP (CBA <>) + (HERE!-OP!-PACKAGE ,REL-M) ITM) + #DECL ((POS- POS UNRESOLVED) <SPECIAL LIST> + (HERE!-OP!-PACKAGE) <SPECIAL ADDRESS> (SWAP) <SPECIAL ANY> + (FULL) <SPECIAL BITS> (COUNT) <SPECIAL FIX>) + <COND + (<EMPTY? .POS> + <COND + (<NOT .PASS1> <RETURN T>) + (<AND <NOT .EOF> + <OR <NOT <EMPTY? .CODE-LIST>> + <COND (<NOT .INST-GETTER> <SET GEOF <SET EOF T>> <>) + (<TYPE? .INST-GETTER CHANNEL> + <SET TN + <READ .INST-GETTER + '<PROG () + <SET GEOF T> + <AND <BOUND? REOF> <SET REOF T>> + <SET EOF T> + <>>>> + <COND (<=? .TN '<END>> + <SET TN <>> + <SET EOF <SET GEOF T>>)> + <AND .TN <SET CODE-LIST (.TN)>>) + (T + <SET TN <APPLY .INST-GETTER>> + <COND (.TN <SET CODE-LIST (.TN)>) + (T <SET GEOF <SET EOF T>> <>)>)>>> + <COND (<AND <TYPE? .LIST-CHAN CHANNEL> + <COND (<G? .DLN 0> <SET DLN <- .DLN 1>> <>) (T)>> + <OR <TYPE? <1 .CODE-LIST> ATOM> + <PRINTSTRING " " .LIST-CHAN>> + <PRIN1 <1 .CODE-LIST> .LIST-CHAN> + <COND (<TYPE? <1 .CODE-LIST> ATOM> + <PRINTSTRING " " + .LIST-CHAN + </ <- 71 <14 .LIST-CHAN>> 8>> + <PRINTSTRING ";" .LIST-CHAN> + <PRINC .COUNT .LIST-CHAN>)> + <TERPRI .LIST-CHAN>)> + <SET POS <REST <PUTREST .POS- .CODE-LIST>>> + <SET CODE-LIST <REST .CODE-LIST>> + <PUTREST .POS ()>) + (<NOT <EMPTY? .CNSTL>> + <COND (<AND <NOT .CBA> <SET CBA T> .MESS-CHAN> + <CMESS .MESS-CHAN "CONSTANTS BEGIN AT LOCATION" .COUNT>)> + <COND (<EMPTY? .CNSTLOC> <SET CNSTLOC (.HERE!-OP!-PACKAGE)>) + (T + <REPEAT ((L .CNSTLOC)) + #DECL ((L) <LIST [REST ADDRESS]>) + <COND (<EMPTY? <REST .L>> + <PUTREST .L (.HERE!-OP!-PACKAGE)> + <RETURN>)> + <SET L <REST .L>>>)> + <SET POS <REST <PUTREST .POS- (!<1 .CNSTL>)>>> + <SET CNSTL <REST .CNSTL>>) + (T + <SET PASS1 <>> + <COND (<AND .CBA .MESS-CHAN> + <CMESS .MESS-CHAN + "CONSTANTS END AT LOCATION" + <- .COUNT 1>>)> + <RETURN <>>)>) + (<TYPE? <SET ITM <1 .POS>> ATOM> + <COND (<AND .PASS1 + <NOT <GASSIGNED? .ITM>> + <NOT <ASSIGNED? .ITM>> + <NOT <GET .ITM .IND>>> + <PUT .ITM .IND .HERE!-OP!-PACKAGE> + <AND .MAK-SYM <ADD-SYM .LOC-SYM .ITM .COUNT>> + <COND (<AND .MESS-CHAN + .LIST-CHAN + <NOT <TYPE? .LIST-CHAN CHANNEL>>> + <CMESS .MESS-CHAN "LABEL" .ITM "AT LOCATION" .COUNT>)> + <SET POS <REST <SET POS- .POS>>>) + (T + <COND (.PASS1 <CER "MULTIPLY DEFINED LABEL" .ITM>) + (T <PUT .ITM .IND>)> + <SET POS <REST <PUTREST .POS- <REST .POS>>>>)>) + (<COND + (<SET TMP + <OR + <AND <TYPE? .ITM FIX> .ITM> + <REPEAT ((REAL-ITM .ITM) (REST-ITMS ()) PART (INST 0) (TOPLEV T) + VAL) + #DECL ((REST-ITM) LIST (INST) FIX) + <COND + (<TYPE? .ITM ATOM> + <COND (<SET PART <GET .ITM .IND>> + <AND .GLUE + <TYPE? .PART ADDRESS> + <BITVEC 1 .COUNT .BITV>> + .PART) + (<AND <NOT <MEMQ <GET <OBLIST? .ITM> OBLIST> + '![TMP!- + ICC!-CC!-PACKAGE + CC!-PACKAGE!]>> + <SET PART <SQUOZE <SPNAME .ITM> 0 T>> + <SET PART <SQUOTA .PART>>> + <ADD-TO-FIXUPS .ITM .COUNT .SWAP <>> + .PART) + (<GASSIGNED? <SET TA .ITM>> + <AND <==? <OBLIST? .TA> ,MOB> + <ADD-TO-FIXUPS .TA .COUNT .SWAP <>>> + <SET PART ,.TA>) + (<ASSIGNED? .TA> <SET PART ..TA>) + (T + <COND (.PASS1 + <PUT .TA .IND <>> + <SET UNRESOLVED (.REAL-ITM !.UNRESOLVED)>) + (T + <CER "UNDEFINED SYMBOL" + .ITM + "USED AT" + .COUNT>)> + <SET PART 0>)> + <COND (<NOT <==? <PRIMTYPE .PART> WORD>> + <CER "BAD SYMBOL" .ITM "USED AT" .COUNT> + <SET PART 0>)>) + (<TYPE? .ITM MUDREF> + <SET PART <ADD-TO-B-FIXUPS .ITM .COUNT .SWAP <>>>) + (<AND <==? <PRIMTYPE .ITM> WORD> + <OR .PASS1 <NOT <TYPE? .ITM CNST MCL ICL PCL>>>> + <SET PART .ITM>) + (<TYPE? .ITM FORM> + <COND + (<EMPTY? <SET TF .ITM>> + <CER "EMPTY FORM AT LOCATION" .COUNT> + <SET PART 0>) + (<AND <TYPE? <SET TN <1 .TF>> ATOM> + <GASSIGNED? <SET TA .TN>> + <APPLICABLE? ,.TA> + <OR <NOT <TYPE? ,.TA FIX>> + <G? <LENGTH .TF> 1>>> + <SET VAL <EVAL .ITM>> + <COND + (<NOT .TOPLEV> + <COND (<TYPE? .VAL SPLICE> + <AND <NOT <EMPTY? <CHTYPE .VAL LIST>>> + <CER "SPLICING MACRO NOT AT TOP LEVEL" .ITM>> + <SET PART 0>) + (T + <SET REAL-ITM + <SET ITM <COND (.SWAP (.VAL)) (T .VAL)>>> + <SET SWAP <>> + <AGAIN>)>) + (<TYPE? .VAL SPLICE> + <SET POS + <REST <PUTREST .POS- + (!<CHTYPE .VAL LIST> + !<REST .POS>)>>> + <RETURN <>>) + (T <SET REAL-ITM <SET ITM .VAL>> <AGAIN>)>) + (T + <COND (.SWAP + <SET ITM + <REPEAT ((L .ITM) (C ())) + #DECL ((L) <PRIMTYPE LIST> (C) LIST) + <COND (<EMPTY? .L> <RETURN .C>)> + <SET C ((<1 .L>) !.C)> + <SET L <REST .L>>>> + <SET SWAP <>>)> + <COND (<EMPTY? .REST-ITMS> + <SET REST-ITMS <CHTYPE .ITM LIST>>) + (T + <SET REST-ITMS (!<CHTYPE .ITM LIST> !.REST-ITMS)>)> + <SET FULL <BITS 18>> + <SET TOPLEV <>> + <SET PART 0>)>) + (<TYPE? .ITM LIST> + <COND (<EMPTY? <SET TL .ITM>> + <CER "EMPTY LIST USED AT" .COUNT> + <SET PART 0>) + (T + <SET SWAP <NOT .SWAP>> + <SET TOPLEV <>> + <COND (<NOT <EMPTY? <REST .TL>>> + <SET REST-ITMS (<REST .TL> !.REST-ITMS)>)> + <SET ITM <1 .TL>> + <AGAIN>)>) + (<AND .PASS1 <TYPE? .ITM VECTOR>> + <COND (<EMPTY? <SET TV .ITM>> + <CER "EMPTY VECTOR USED AT" .COUNT>) + (<EMPTY? .CNSTS> + <SET CNSTL <SET CNSTS (.TV)>> + <SET UNRESOLVED (<CHTYPE 1 CNST> !.UNRESOLVED)>) + (T + <REPEAT ((C .CNSTS) (N 1)) + #DECL ((C) <LIST [REST VECTOR]> (N) FIX) + <COND (<=? <1 .C> .TV> + <SET UNRESOLVED + (<CHTYPE .N CNST> !.UNRESOLVED)> + <RETURN>) + (<EMPTY? <REST .C>> + <PUTREST .C (.TV)> + <COND (<EMPTY? .CNSTL> + <SET CNSTL <REST .C>>)> + <SET UNRESOLVED + (<CHTYPE <+ .N 1> CNST> + !.UNRESOLVED)> + <RETURN>)> + <SET N <+ .N 1>> + <SET C <REST .C>>>)> + <SET PART 0>) + (<AND <NOT .PASS1> <TYPE? .ITM CNST>> + <AND .GLUE <BITVEC 1 .COUNT .BITV>> + <SET PART <NTH .CNSTLOC <CHTYPE .ITM FIX>>>) + (<AND <NOT .PASS1> <TYPE? .ITM ICL>> + <AND .GLUE <BITVEC 1 .COUNT .BITV>> + <SET PART <CHTYPE .ITM ADDRESS>>) + (<AND <NOT .PASS1> <TYPE? .ITM MCL>> + <AND .GLUE <BITVEC 2 .COUNT .BITV>> + <SET PART + <CHTYPE <+ .ILNTH <CHTYPE .ITM FIX> <CHTYPE ,REL-R FIX>> + ADDRESS>>) + (<AND <NOT .PASS1> <TYPE? .ITM PCL>> + <AND .GLUE <BITVEC 3 .COUNT .BITV>> + <SET PART + <CHTYPE <+ .ILNTH + .MCLNTH + <CHTYPE .ITM FIX> + <CHTYPE ,REL-R FIX>> + ADDRESS>>) + (T + <CER "UNRECOGNIZED ITEM" .ITM "AT LOCATION" .COUNT> + <SET PART 0>)> + <PROG ((FULL .FULL)) + #DECL ((FULL) BITS) + <COND + (<TYPE? .PART ADDRESS OPCODE BITS> + <COND (<AND <TYPE? .PART ADDRESS> + <==? <CHTYPE <GETBITS .PART <BITS 4 18>> FIX> + 13>> ;"Is index ac M?" + <BITVEC 1 .COUNT .BITV>)> + <SET FULL <BITS 36>>)> + <COND + (<NOT <0? <SET PART <CHTYPE .PART FIX>>>> + <COND + (<NOT .SWAP> + <SET INST <PUTBITS .INST .FULL <+ .INST .PART>>>) + (T + <SET PART + <CHTYPE <PUTBITS <GETBITS <GETBITS .PART .FULL> + <BITS 18 18>> + <BITS 18 18> + .PART> + FIX>> + <SET INST <+ .INST .PART>>)>)>> + <COND (<EMPTY? .REST-ITMS> + <SET TOPLEV T> + <SET FULL <BITS 36>> + <SET SWAP <>> + <RETURN .INST>) + (T + <SET ITM <SET REAL-ITM <1 .REST-ITMS>>> + <SET REST-ITMS <REST .REST-ITMS>> + <SET TOPLEV <>> + <SET SWAP <>>)>>>> + <PUT .POS + 1 + <COND (<EMPTY? .UNRESOLVED> <CHTYPE .TMP FIX>) + (<NOT .PASS1> + <CER "ITEMS UNRESOLVED AFTER SECOND PASS" .UNRESOLVED> + <SET UNRESOLVED ()> + <CHTYPE .TMP FIX>) + (T + <SET TMP <FORM <CHTYPE .TMP ADDRESS> !.UNRESOLVED>> + <SET UNRESOLVED ()> + .TMP)>> + <BITCHECK .COUNT .BITV> + <SET COUNT <+ .COUNT 1>> + <SET HERE!-OP!-PACKAGE + <CHTYPE <+ 1 <CHTYPE .HERE!-OP!-PACKAGE FIX>> ADDRESS>> + <SET POS <REST <SET POS- .POS>>>)>)>> + <RETURN>)>> + <SET RSUB + <RSUBR [<CHTYPE + <UVECTOR !<REST .TOG> + !.INTRS + !<REST .GLOB-SYM> + <CHTYPE <PUTBITS <- <LENGTH .GLOB-SYM> 1> + <BITS 18 18> + <LENGTH .INTRS>> + FIX>> + CODE> + !.IMPS + !.MCS + !.PQS]>> + <COND (,ONLY-FAST-OUTPUT + <PUT .RSUB RSUBR <MAKE-B-FIXUPS .FIXES>>) + (ELSE <PUT .RSUB RSUBR (,MUDDLE !.FIXES)>)> + <COND (.GLUE <PUT .RSUB GLUE <UVECTOR !.BITV !.INTRS>>)> + <COND (.MAK-SYM <PUT .RSUB FREEZE <UVECTOR !<REST .LOC-SYM>>>)> + <REPEAT ((L .SUB-ENTS)) + #DECL ((L) <LIST [REST <OR <LIST ANY> ATOM>]>) + <COND (<EMPTY? .L> <RETURN>)> + <SETG <2 <1 .L>> + <RSUBR-ENTRY [.RSUB !<REST <1 .L>>] <1 <1 .L>>>> + <PUT .L 1 <2 <1 .L>>> + <SET L <REST .L>>> + (<COND (<==? T .NAMED> <SETG <1 .IMPS> .RSUB> <1 .IMPS>) + (.RSUB)> + !.SUB-ENTS)> + +<DEFINE MAKE-B-FIXUPS (FIXES "AUX" LN) + #DECL ((FIXES) <LIST [REST <OR MUDREF FIX>]> (VALUE) UVECTOR (LN) FIX) + <SET FIXES (<SET LN <+ <LENGTH .FIXES> 1>> ,MUDDLE !.FIXES)> + <MAPF ,UVECTOR + <FUNCTION (X) <CHTYPE .X FIX>> <REST .FIXES>>> + + +<DEFINE BITCHECK (WHERE L "AUX" (LN 0) (WRD <+ 1 </ .WHERE 18>>)) + #DECL ((WHERE LN WRD) FIX (L) <LIST FIX [REST FIX]>) + <COND (<G? .WRD <SET LN <LENGTH .L>>> + <PUTREST <REST .L <- .LN 1>> <ILIST <- .WRD .LN> 0>>)>> + + +<DEFINE BITVEC (COD WHERE L + "AUX" (LN 0) (WRD <+ 1 </ .WHERE 18>>) (BIT <MOD .WHERE 18>)) + #DECL ((COD WHERE WRD BIT LN) FIX (L) <LIST FIX [REST FIX]>) + <COND (<G? .WRD <SET LN <LENGTH .L>>> + <PUTREST <REST .L <- .LN 1>> <ILIST <- .WRD .LN> 0>>)> + <SET L <REST .L <- .WRD 1>>> + <PUT .L 1 <PUTBITS <1 .L> <BITS 2 <- 34 <* 2 .BIT>>> .COD>>> + +<DEFINE ADD-TO-B-FIXUPS (ITM WHERE SWAP WIN? "AUX" TEM) + #DECL ((WHERE) FIX (FIXES) LIST) + <OR ,ONLY-FAST-OUTPUT <CER "BINARY FIXUPS BEING MISUSED">> + <SET WHERE <+ .WHERE 1>> + <AND .SWAP <SET WHERE <- .WHERE>>> + <COND (.WIN? <SET ITM <CHTYPE <ATOSQ ,.ITM> MUDREF>>) + (<TYPE? .ITM ATOM> + <SET ITM <CHTYPE <SQUOZE <SPNAME .ITM>> MUDREF>>)> + <COND + (<TYPE? .ITM MUDREF> + <SET ITM <CHTYPE <PUTBITS .ITM <BITS 4 32> 8> MUDREF>> + <COND + (<SET TEM <MEMQ .ITM .FIXES>> + <MAPR <> + <FUNCTION (L "AUX" (IT <1 .L>)) + <COND (<AND <TYPE? .IT FIX> <0? .IT>> + <PUT .L 1 <CHTYPE <PUTBITS 0 <BITS 18 18> .WHERE> FIX>> + <MAPLEAVE>) + (<OR <NOT <TYPE? .IT FIX>> + <0? <CHTYPE <GETBITS .IT <BITS 18>> FIX>>> + <AND <TYPE? .IT FIX> + <PUT .L + 1 + <CHTYPE <PUTBITS .IT <BITS 18> .WHERE> FIX>>> + <PUTREST .L (0 !<REST .L>)> + <MAPLEAVE>)>> + <REST .TEM>>) + (ELSE + <SET FIXES + (.ITM + <CHTYPE <PUTBITS .WHERE <BITS 18 18> <SQUOTA .ITM>> FIX> + 0 + !.FIXES)>)>) + (ELSE <CER "BAD BINARY FIXUPS HACK">)> + <SQUOTA <CHTYPE .ITM FIX>>> + +<DEFINE ADD-TO-FIXUPS (ATM WHERE SWAP WIN? "AUX" SPS (TEM .ATM)) + #DECL ((ATM) ATOM (WHERE) FIX (SPS) <LIST [REST ATOM FIX LIST]>) + <PROG () + <AND ,ONLY-FAST-OUTPUT + <RETURN <ADD-TO-B-FIXUPS .ATM .WHERE .SWAP .WIN?>>> + <SET SPS .FIXES> + <OR .WIN? + <SET TEM <LOOKUP <SPNAME .ATM> ,MOB>> + <SET TEM <INSERT <SPNAME .ATM> ,MOB>>> + <SET ATM <GET .ATM ADD-TO-FIXUPS '.TEM>> + <SET WHERE <+ .WHERE 1>> + <COND (.SWAP <SET WHERE <- .WHERE>>)> + <COND + (<EMPTY? .SPS> + <SET FIXES + (.ATM + <COND (.WIN? <CHTYPE ,.ATM FIX>) + (<CHTYPE <SQUOTA <SQUOZE <SPNAME .ATM>>> FIX>)> + (.WHERE))>) + (T + <REPEAT ((SPL <REST .SPS 2>)) + #DECL ((SPL) <LIST LIST>) + <COND + (<EMPTY? .SPS> + <PUTREST .SPL + (.ATM + <COND (.WIN? <CHTYPE ,.ATM FIX>) + (<CHTYPE <SQUOTA <SQUOZE <SPNAME .ATM>>> FIX>)> + (.WHERE))> + <RETURN>)> + <SET SPL <REST .SPS 2>> + <COND (<==? .ATM <1 .SPS>> + <PUT .SPL 1 (.WHERE !<1 .SPL>)> + <RETURN>)> + <SET SPS <REST .SPL>>>)>>> + +<DEFINE ADD-SYM (SML SYM C) + #DECL ((SML) <LIST FIX [REST FIX]> (C) FIX) + <PUTREST .SML + (<CHTYPE <SQUOZE <SPNAME .SYM> 1> FIX> .C !<REST .SML!>)>> + +"KLUDGE TO MAKE $TMUMBLES FIX UP CORRECTLY" + +<MAPF <> + #FUNCTION ((X "AUX" ATM) + <COND (<SET ATM + <LOOKUP <STRING "$T" <SPNAME .X>> + <GET MUDDLE OBLIST>>> + <PUT .ATM ADD-TO-FIXUPS $TLOSE>)>) + <ALLTYPES>> + +<DEFINE CER ("TUPLE" COMPLAINTS "AUX" (MC .OUTCHAN)) + <PRINTSTRING "************** +ASSEMBLY ERROR -- " .MC> + <CMESS .MC !.COMPLAINTS> + <PRINTSTRING "************** +" .MC>> + +<DEFINE CMESS (OUTCHAN "TUPLE" COMPLAINTS) + #DECL ((OUTCHAN) <SPECIAL ANY> (COMPLAINTS) TUPLE) + <COND (<NOT .OUTCHAN>) + (<NOT <EMPTY? .COMPLAINTS>> + <REPEAT () + <PRINC <1 .COMPLAINTS>> + <COND (<EMPTY? <SET COMPLAINTS <REST .COMPLAINTS>>> + <RETURN>)> + <PRINTSTRING " ">> + <TERPRI>)> + T> + +<DEFINE QUOTER (GOODIE LATM NATM TW "AUX" (L ..LATM) (N 0)) + #DECL ((LATM NATM) ATOM (L UNRESOLVED) LIST (N) FIX + (TW) <PRIMTYPE WORD>) + <COND (<EMPTY? .L> <SET .LATM (.GOODIE)> <SET .NATM <+ .N 2>>) + (T + <REPEAT () + <COND (<=? .GOODIE <1 .L>> <RETURN>) + (<EMPTY? <REST .L>> + <PUTREST .L (.GOODIE)> + <SET .NATM <+ 2 <SET N <+ .N 2>>>> + <RETURN>)> + <SET N <+ .N 2>> + <SET L <REST .L>>>)> + <SET UNRESOLVED (<PUTBITS .TW <BITS 18> .N> !.UNRESOLVED)> + 0> + +<SETG REL-M <CHTYPE <PUTBITS 0 <BITS 18 18> 13> ADDRESS>> + +<SETG REL-R <CHTYPE <PUTBITS 0 <BITS 18 18> 14> ADDRESS>> + +<SETG REL-AB <CHTYPE <PUTBITS 0 <BITS 18 18> 9> ADDRESS>> + +<SETG REL-TB <CHTYPE <PUTBITS 0 <BITS 18 18> 10> ADDRESS>> + +"THE FOLLOWING ARE IN OP, BUT MAYBE DEFINED HERE" + +<OR <LOOKUP "COMPILE" <ROOT>> + <BLOCK (<MOBLIST OP!-PACKAGE> <ROOT>)>> + +TITLE + +PSEUDO + +INTERNAL-ENTRY + +SUB-ENTRY + +DECLARE + +MQUOTE + +IQUOTE + +PQUOTE + +CQUOTE + +ARG + +GETYP + +PUTYP + +MCALL + +ACALL + +SYMDEF + +TYPE-CODE + +TYPE-WORD + +INTGO + +DSAVAC + +IFOPSYS + +*INSERT + +SIXBIT + +SQUOZE + +STACK + +BYTE + +DPUSH + +DPOP + +DMOVE + +DMOVEM + +SYMDEF? + +UNDEF? + +IF-NEEDED + +<OR <LOOKUP "COMPILE" <ROOT>> <ENDBLOCK>> + +"HERE IS THE DEFINITION FOR SOME OF THE KLUDGES" + +<DEFINE TYPE-CODE (TYP "AUX" TMP) + <COND (<NOT <MEMQ .TYP <ALLTYPES>>> <CER "BAD TYPE-CODE" .TYP> 0) + (<L=? <CHTYPE <SET TMP <TYPE-C .TYP>> FIX> ,NUMPRI> + <CHTYPE .TMP FIX>) + (.SWAP + <CER "SWAPPED TYPE-CODE OF NEWTYPE" .TYP "USE TYPE-WORD"> + 0) + (T <PQUOTE .TMP> <PUTBITS #OPCODE *20000000* <BITS 1> 1>)>> + +<DEFINE TYPE-WORD (TYP "OPTIONAL" (CRUFT 0)) + #DECL ((CRUFT) FIX) + <COND (<NOT <MEMQ .TYP <ALLTYPES>>> <CER "BAD TYPE-CODE" .TYP> 0) + (<G? <CHTYPE <TYPE-C .TYP> FIX> ,NUMPRI> + <PQUOTE <TYPE-W .TYP <TYPEPRIM .TYP> .CRUFT>> + 1) + (<0? .CRUFT> + <ADD-TO-FIXUPS $TLOSE .COUNT .SWAP <>> + <CHTYPE <+ <CHTYPE ,$TLOSE FIX> <CHTYPE <TYPE-C .TYP> FIX>> + ADDRESS>) + (T [<FORM (<CHTYPE <TYPE-C .TYP> FIX>) .CRUFT>])>> + +<DEFINE MCALL (NARC FCN "AUX" TMP) + <COND (<G? .NARC 15> + <CHTYPE (<FORM `MOVEI `A* .NARC> <FORM ACALL `A* .FCN>) + SPLICE>) + (T + <COND (<AND <GASSIGNED? .FCN> <TYPE? <SET TMP ,.FCN> FSUBR SUBR>> + <ADD-TO-FIXUPS .FCN .COUNT .SWAP T> + <SET TMP <CHTYPE .TMP FIX>>) + (T <SET TMP <CQUOTE .FCN>>)> + <FORM `MCALL* <PUTBITS <CHTYPE 0 OPCODE> + <BITS 27> + <PUTBITS .TMP <BITS 4 23> .NARC>>>)>> + +<DEFINE ACALL (NARC FCN "AUX" TMP) + <COND (<AND <GASSIGNED? .FCN> <TYPE? <SET TMP ,.FCN> SUBR FSUBR>> + <ADD-TO-FIXUPS .FCN .COUNT .SWAP T> + <SET TMP <CHTYPE .TMP FIX>>) + (T <SET TMP <CQUOTE .FCN>>)> + <FORM `ACALL* .NARC .TMP>> + +<DEFINE UNDEF? (ATM) <NOT <GET .ATM .IND 'T>>> + +<DEFINE IF-NEEDED (ATM "ARGS" COD) + <COND (<UNDEF? .ATM> <CHTYPE .COD SPLICE>) (T #SPLICE ())>> + +<DEFINE IQUOTE (VAL "OPTIONAL" SYM "AUX" (N 6) (LST .IMPS)) + #DECL ((N ILNTH) FIX (LST) LIST) + <REPEAT () + <COND (<EMPTY? <REST .LST>> + <PUTREST .LST (.VAL)> + <SET ILNTH .N> + <COND (<ASSIGNED? SYM> + <PUT .SYM + .IND + <PUTBITS ,REL-R <BITS 18> <- .N 2>>>)> + <SET UNRESOLVED + (<CHTYPE <PUTBITS ,REL-R <BITS 18> <- .N 2>> ICL> + !.UNRESOLVED)> + <RETURN 0>)> + <SET LST <REST .LST>> + <SET N <+ .N 2>>>> + +<DEFINE PQUOTE (VAL "AUX" (FOO 0)) + #DECL ((FOO) <SPECIAL FIX>) + <QUOTER .VAL PQS FOO <CHTYPE 0 PCL>>> + +<DEFINE CQUOTE (VAL) <QUOTER .VAL MCS MCLNTH <CHTYPE 0 MCL>>> + +<DEFINE MQUOTE (VAL) <+ 1 <PQUOTE .VAL>>> + +<DEFINE PSEUDO ("TUPLE" L) #SPLICE ()> + +<DEFINE TITLE (NAME "OPTIONAL" (SMASH T)) + #DECL ((IMPS) <LIST ATOM>) + <COND (<NOT <TYPE? .NAME ATOM>> + <CER "BAD OR MULTIPLE TITLE OF" .NAME>) + (.NAMED + <SET MORE-INSTS (!.POS !.CODE-LIST)> + <SET DONT-LIST-N <LENGTH .POS>> + <SET EOF T> + <SET POS (())> + #SPLICE ()) + (T + <CMESS .MESS-CHAN "TITLE: " .NAME> + <ADD-SYM .GLOB-SYM .NAME .COUNT> + <PUT .IMPS 1 .NAME> + <SET NAMED <OR .SMASH 0>>)> + #SPLICE ()> + +<DEFINE INTERNAL-ENTRY (NAME NARGS) + #DECL ((INTRS) <LIST [REST FIX]> (MESS-CHAN) <OR CHANNEL FALSE>) + <COND (<NOT <TYPE? .NAME ATOM>> <CER "ILLEGAL INTERNAL-ENTRY" .NAME>) + (ELSE + <CMESS .MESS-CHAN "INTERNAL-ENTRY" .NAME "AT LOCATION" .COUNT> + <SET INTRS (<CHTYPE <PUTBITS .COUNT <BITS 18 18> .NARGS> FIX> !.INTRS)>)> + <CHTYPE (.NAME) SPLICE>> + +<DEFINE SUB-ENTRY (NAME "OPTIONAL" 'DCLS) + #DECL ((SUB-ENTS) <LIST [REST LIST]> (MESS-CHAN) <OR CHANNEL FALSE>) + <COND (<NOT <TYPE? .NAME ATOM>> <CER "ILLEGAL SUB-ENTRY" .NAME>) + (T + <CMESS .MESS-CHAN "SUB-ENTRY" .NAME "AT LOCATION" .COUNT> + <ADD-SYM .GLOB-SYM .NAME .COUNT> + <SET SUB-ENTS + (<COND (<ASSIGNED? DCLS> (.COUNT .NAME <CHTYPE .DCLS DECL>)) + (T (.COUNT .NAME))> + !.SUB-ENTS)>)> + #SPLICE ()> + +<DEFINE DECLARE ('DCLS) + #DECL ((IMPS) <LIST ANY> (ILNTH) FIX) + <COND (<EMPTY? <REST .IMPS>> + <PUTREST .IMPS (<CHTYPE .DCLS DECL>)> + <SET ILNTH <+ .ILNTH 2>>) + (T <CER "DECLARE OUT OF PLACE" .DCLS>)> + #SPLICE ()> + +<DEFINE ARG (N) #DECL ((N) FIX) <PUTBITS ,REL-AB <BITS 18> <+ .N .N -2>>> + +<DEFINE GETYP ('AC "ARGS" LOC) <FORM `LDB .AC [<FORM '(74560) !.LOC>]>> + +<DEFINE PUTYP ('AC "ARGS" LOC) <FORM `DPB .AC [<FORM '(74560) !.LOC>]>> + +<DEFINE SYMDEF (ATM VAL) <PUT .ATM .IND .VAL> #SPLICE ()> + +<DEFINE INTGO () #SPLICE (<`SKIPGE INTFLG> <`JSR LCKINT>)> + +<DEFINE DSAVAC ("TUPLE" SPEC "AUX" V (SUV <BACK ,DSAVAC-UV <LENGTH .SPEC>>)) + #DECL ((SUV) <UVECTOR [REST FIX]> (V) VECTOR) + <REPEAT ((TSPEC .SPEC) (TSUV .SUV) X) + #DECL ((TSUV) <UVECTOR [REST FIX]> (X) ANY) + <COND (<SET X <1 .TSPEC>> + <COND (<AND <TYPE? .X ATOM> <VALID-TYPE? .X>> + <COND (<==? .X TEMPLATE> + <PUT .TSUV 1 63> + <PUT .TSUV 2 <CONV-AC <2 .TSPEC>>> + <SET TSPEC <REST .TSPEC>> + <SET TSUV <REST .TSUV>>) + (<PUT .TSUV 1 <CHTYPE <PRIMTYPE-C .X> FIX>>)>) + (<PUT .TSUV 1 <CONV-AC .X>>)>) + (<PUT .TSUV 1 0>)> + <COND (<EMPTY? <SET TSUV <REST .TSUV>>> + <RETURN>)> + <SET TSPEC <REST .TSPEC>>> + <COND (<G? <LENGTH .SUV> 6> + <SET V <IVECTOR 2>>) + (<SET V <IVECTOR 1>>)> + <FORM + SAVACS* + <PROG () + <MAPR <> + <FUNCTION (V "AUX" (TEMP <FORM (0) 0>)) + #DECL ((V) VECTOR (TEMP) <FORM LIST FIX>) + <PUT <1 .TEMP> 1 <CONV-3 .SUV>> + <COND (<G=? <LENGTH .SUV> 3> + <SET SUV <REST .SUV 3>> + <PUT .TEMP 2 <CONV-3 .SUV>>)> + <COND (<G=? <LENGTH .SUV> 3> + <SET SUV <REST .SUV 3>>)> + <PUT .V 1 .TEMP>> + .V> + .V>>> + +<DEFINE CONV-3 (UV "AUX" (TEMP 0)) + #DECL ((UV) <UVECTOR [REST FIX]> (TEMP) FIX) + <MAPF <> + <FUNCTION (NUM BPTR) #DECL ((NUM) FIX (BPTR) BITS) + <SET TEMP <PUTBITS .TEMP .BPTR .NUM>>> + .UV + '![#BITS *140600000000* + #BITS *060600000000* + #BITS *000600000000*]> + .TEMP> + +<DEFINE CONV-AC (FOO) #DECL ((FOO) <OR ATOM FIX>) + <COND (<TYPE? .FOO FIX> + .FOO) + (<GASSIGNED? .FOO> + ,.FOO) + (..FOO)>> + +<DEFINE IFOPSYS IFO ("ARGS" ARG "AUX" OP NUM) + #DECL ((ARG) <LIST [REST <OR ATOM LIST>]> (OP) ATOM (NUM) FIX) + <COND (<EMPTY? .ARG> <RETURN #SPLICE () .IFO>)> + <COND (<NOT <GASSIGNED? ASSEMBLY-OPSYS>> + <PROG ((OUTCHAN .OUTCHAN)) + <RESET .INCHAN> + <COND (<L=? <LENGTH .ARG> 2> + <PRINC "Is this assembly for "> + <PRINC <SET OP <GOPSYS <1 .ARG>>>> + <PRINC "? +"> + <COND (<YES/NO> + <SETG ASSEMBLY-OPSYS .OP>) + (<==? <LENGTH .ARG> 2> + <SETG ASSEMBLY-OPSYS <SET OP <GOPSYS <2 .ARG>>>>) + (<SET OP T>)>) + (<PRINC "Is this assembly for"> + <SET NUM 0> + <MAPF <> + <FUNCTION (X) #DECL ((X) <OR ATOM LIST>) + <CRLF> + <PRIN1 <SET NUM <+ .NUM 1>>> + <PRINC ") "> + <PRINC <GOPSYS .X>>> + .ARG> + <PRINC "? Answer 1, 2, or 3 +"> + <SETG ASSEMBLY-OPSYS + <SET OP + <GOPSYS <NTH .ARG <GNUM>>>>>)> + <CRLF>>) + (<SET OP ,ASSEMBLY-OPSYS>)> + <REPEAT (X Y) + #DECL ((X) <OR ATOM LIST> (Y) <OR ATOM FALSE LIST>) + <COND (<OR <==? <SET Y <GOPSYS <SET X <1 .ARG>>>> .OP> + <AND <TYPE? .Y LIST> <MEMQ .OP .Y>>> + <RETURN + <COND (<TYPE? .X ATOM> #SPLICE ()) + (T <CHTYPE <REST .X> SPLICE>)>>) + (<EMPTY? <SET ARG <REST .ARG>>> + <RETURN #SPLICE ()>)>>> + +<DEFINE GOPSYS (X) #DECL ((X) <OR ATOM LIST>) + <COND (<TYPE? .X LIST> + <COND (<EMPTY? .X> <>) + (<SET X <1 .X>>)>)> + <COND (<==? .X T> + ITS) + (.X)>> + +<DEFINE YES/NO () + <COND (<MEMQ <TYI> "YyTt"> T)>> + +<DEFINE GNUM ("AUX" C) + <SET C <TYI>> + <- <CHTYPE .C FIX> <CHTYPE !\0 FIX>>> + +<DEFINE *INSERT (STR) + #DECL ((STR) STRING) + <PROG (CHN VAL) + <COND (<NOT <SET CHN <OPEN "READ" .STR>>> + <CER "BAD INSERT FILE NAME" .STR> + #SPLICE ()) + (T + <REPEAT ((PS .POS)) + #DECL ((PS) <LIST ANY>) + <PUTREST .PS (<READ .CHN '<RETURN>> !<REST .PS!>)> + <SET PS <REST .PS>>> + <CLOSE .CHN> + #SPLICE ())>>> + +<DEFINE SIXBIT (STR "AUX" (WORD 0) (POS 30) (CHR 0)) + #DECL ((STR) STRING (WORD POS CHR) FIX) + <REPEAT () + <COND (<OR <EMPTY? .STR> <L? .POS 0>> + <RETURN <CHTYPE .WORD OPCODE>>) + (<OR <L? <SET CHR <CHTYPE <1 .STR> FIX>> 32> + <G? .CHR 122>> + <CER "BAD CHAR IN SIXBIT" <1 .STR>> + <RETURN 0>) + (<G=? .CHR 96> <SET CHR <- .CHR 64>>) + (<SET CHR <- .CHR 32>>)> + <SET WORD <PUTBITS .WORD <BITS 6 .POS> .CHR>> + <SET STR <REST .STR>> + <SET POS <- .POS 6>>>> + +<DEFINE SQUOZE (STR + "OPTIONAL" (HIBITS 0) (ONLY-GOOD <>) + "AUX" (MULF <* 40 40 40 40 40 40>) (VAL 0) (COUNT 6) C (TC 0)) + #DECL ((HIBITS) <PRIMTYPE WORD> (VAL COUNT TC MULF) FIX (C) CHARACTER + (STR) STRING) + <REPEAT () + <COND (<OR <EMPTY? .STR> <L? .COUNT 1>> + <RETURN <CHTYPE <PUTBITS .VAL <BITS 4 32> .HIBITS> + OPCODE>>)> + <SET TC <CHTYPE <SET C <1 .STR>> FIX>> + <SET STR <REST .STR>> + <COND (<AND <G=? .TC <ASCII !\0>> <L=? .TC <ASCII !\9>>> + <SET TC <- .TC 47>>) + (<AND <G=? .TC <ASCII !\A>> <L=? .TC <ASCII !\Z>>> + <SET TC <- .TC 54>>) + (<AND <G=? .TC <ASCII !\a>> <L=? .TC <ASCII !\z>>> + <SET TC <- .TC 86>>) + (<==? .C !\.> <SET TC 37>) + (<==? .C !\$> <SET TC 38>) + (<==? .C !\%> <SET TC 39>) + (.ONLY-GOOD <RETURN <>>) + (T <AGAIN>)> + <SET COUNT <- .COUNT 1>> + <SET VAL <+ .VAL <* .TC <SET MULF </ .MULF 40>>>>>>> + +<DEFINE STACK ("TUPLE" ATMS "AUX" (N 0)) + <REPEAT () + <COND (<EMPTY? .ATMS> <RETURN #SPLICE ()>)> + <PUT <1 .ATMS> + .IND + <CHTYPE <+ <CHTYPE ,REL-TB FIX> .N> ADDRESS>> + <SET N <+ .N 2>> + <SET ATMS <REST .ATMS>>>> + +<DEFINE BYTE (BOUND SIZE "ARGS" LOC) + [<FORM (<+ <* .BOUND 4096> <* .SIZE 64>>) !.LOC>]> + +<DEFINE SYMDEF? (ITM) <GET .ITM .IND>> + +<DEFINE DPUSH ("ARGS" LOC) + <CHTYPE (<FORM `PUSH !.LOC> <FORM `PUSH 1 !.LOC>) SPLICE>> + +<DEFINE DPOP ("ARGS" LOC) <CHTYPE (<FORM `POP 1 !.LOC> <FORM `POP !.LOC>) SPLICE>> + +<DEFINE DMOVE ("ARGS" LOC) + <CHTYPE (<FORM `MOVE !.LOC> <FORM `MOVE (32) 1 !.LOC>) + SPLICE>> + +<DEFINE DMOVEM ("ARGS" LOC) + <CHTYPE (<FORM `MOVEM !.LOC> <FORM `MOVEM (32) 1 !.LOC>) + SPLICE>> + +<COND (<NOT ,NO-OPS> <UNASSIGN READ-TABLE>)> + +<OR <LOOKUP "COMPILE" <ROOT>> <ENDPACKAGE>> + \ No newline at end of file diff --git a/src/mprog/asystt.19 b/src/mprog/asystt.19 new file mode 100644 index 00000000..075e59fc --- /dev/null +++ b/src/mprog/asystt.19 @@ -0,0 +1,68 @@ +<PACKAGE "ASYSTAT"> + +<ENTRY ASYSTAT ASYUV APCT AMAX DPCT DLEN> + +<USE-TOTAL "ASYLUM"> + +<SETG APCT 1> +;"% ALLOCATOR FILLED" + +<SETG AMAX 2> +;"LARGEST FREE BLOCK OF WORDS" + +<SETG ATOT 3> +;"TOTAL FREE WORDS" + +<SETG DLEN 4> +;"LENGTH OF DATA AREA" + +<SETG DPCT 5> +;"% DATA AREA USED" + +<MANIFEST APCT AMAX ATOT DPCT> + +<SETG ASYUV <IUVECTOR 5 0>> + +<SETG AUV2 <IUVECTOR 2 #WORD *000000000000*>> + +<DEFINE ASYSTAT (D + "OPTIONAL" (UV ,ASYUV) + "AUX" (ALLOC <* <ALLOCPAGE .D> 1024>) (DUV ,DUV1) (LENMX 0) (LENTOT 0) + DTOT) + #DECL ((D) ASYLUM (ALLOC LENMX LENTOT DTOT) FIX (DUV UV) UVECTOR) + <ALLOC-MAP .D> + <PUT .UV + ,APCT + </ <* </ <- <CHTYPE <ORB <GETBITS <1 <GET-LOC .ALLOC .DUV>> <BITS 18 18>> + #WORD *777777000000*> + FIX> + 2>> + 100> + 511>> + <REPEAT ((UV ,AUV2) (ALPTR <1 <GET-LOC .ALLOC ,DUV1>>) LEN + (CNT + <CHTYPE <ORB <GETBITS .ALPTR <BITS 18 18>> #WORD *777777000000*> FIX>) + (ALOC + <+ <CHTYPE <ANDB <GETBITS .ALPTR <BITS 18 0>> #WORD *000000001777*> + FIX> + .ALLOC>)) + #DECL ((UV) UVECTOR (ALPTR) WORD (CNT ALOC LEN) FIX) + <GET-LOC .ALOC .UV> + <SET LEN <CHTYPE <1 .UV> FIX>> + <SET LENTOT <+ .LEN .LENTOT>> + <AND <G? .LEN .LENMX> <SET LENMX .LEN>> + <SET ALOC <+ .ALOC 2>> + <SET CNT <+ .CNT 2>> + <AND <0? .CNT> <RETURN>>> + <PUT .UV ,AMAX .LENMX> + <PUT .UV ,ATOT .LENTOT> + <PUT .UV + ,DPCT + </ <* <CHTYPE <1 <GET-LOC <+ .ALLOC 1022> .DUV>> FIX> 100> + <SET DTOT + <CHTYPE <1 <GET-LOC <+ <* <MFDPAGE .D> 1024> ,MAXADR> .DUV>> + FIX>>>> + <PUT .UV ,DLEN .DTOT>> + +<ENDPACKAGE> + diff --git a/src/mprog/atoms.umb007 b/src/mprog/atoms.umb007 new file mode 100644 index 00000000..9345e329 --- /dev/null +++ b/src/mprog/atoms.umb007 @@ -0,0 +1,52 @@ + +<DEFINE FIND-ATOM (IT "AUX" PNM (A <ASSOCIATIONS>) (OL ())) + <SET PNM <COND (<TYPE? .IT ATOM> <SPNAME .IT>) + (<TYPE? .IT STRING> .IT)>> + <REPEAT () + <COND (<NOT .A> <RETURN .OL>)> + <COND (<AND <==? <INDICATOR .A> OBLIST> + <TYPE? <AVALUE .A> OBLIST> + <LOOKUP .PNM <AVALUE .A>>> + <SET OL (<ITEM .A> !.OL)>)> + <SET A <NEXT .A>>>> + + +<DEFINE UNASSIGNED-ATOMS (A) + #DECL ((A) OBLIST) + <MAPF ,LIST + <FUNCTION (XX) + #DECL ((XX) LIST) + <MAPRET !<MAPF ,LIST + <FUNCTION (X) + #DECL ((X) ATOM) + <COND (<OR <ASSIGNED? .X> + <GASSIGNED? .X>> + <MAPRET>) + (.X)>> + .XX>>> + .A>> + +<DEFINE ALL-OBLISTS ("AUX" (A <ASSOCIATIONS>)) + <MAPF ,LIST + <FUNCTION ("AUX" FROB) + <COND (<AND <==? <INDICATOR .A> OBLIST> + <TYPE? <AVALUE .A> OBLIST>> + <SET FROB <AVALUE .A>>)> + <COND (<AND <SET A <NEXT .A>> <ASSIGNED? FROB>> .FROB) + (.A <MAPRET>) + (<ASSIGNED? FROB> <MAPSTOP .FROB>) + (<MAPSTOP>)>>>> + +<DEFINE ALL-ASSOCIATIONS ("OPTIONAL" (INCLUDE '()) + "AUX" (A <ASSOCIATIONS>) (VEC [1 2 3])) + #DECL ((INCLUDE) <STRUCTURED [REST ANY]> (A) <OR ASOC FALSE> + (VEC) <VECTOR [3 ANY]>) + <MAPF <> + <FUNCTION ("AUX" (FROB <INDICATOR .A>)) + <COND (<OR <EMPTY? .INCLUDE> <MEMQ .FROB .INCLUDE>> + <PUT .VEC 1 <ITEM .A>> + <PUT .VEC 2 .FROB> + <PUT .VEC 3 <AVALUE .A>> + <& .VEC>)> + <OR <SET A <NEXT .A>> <MAPSTOP>>>>> + diff --git a/src/mprog/autodl.ujil02 b/src/mprog/autodl.ujil02 new file mode 100644 index 00000000..164d1102 --- /dev/null +++ b/src/mprog/autodl.ujil02 @@ -0,0 +1,354 @@ + +<PACKAGE "DECLER" "DEC"> + +<ENTRY DECLTRY> + +<ENTRY SEARCH> + +<ENTRY STOP-DECL> + +<ENTRY CONDENSE> + +;"top-level funcion which group-loads file and causes decl formats to be inserted + in the functions." +<DEFINE DECLTRY (FILE "AUX" NAME L ) + #DECL ((FILE) STRING (NAME) ATOM (L) FIX (VALUE) STRING) + <SET NAME <GROUP-LOAD .FILE>> + <PUT .NAME CHANNEL> + <NEWTYPE WRONG FIX> + <SET L <LENGTH ..NAME>> + <REPEAT ((N 1) PRGM) + #DECL ((N) FIX (PRGM) ANY) + <SET PRGM <.N ..NAME>> + <SET N <+ .N 1>> + <COND (<==? <1 .PRGM> DEFINE> + <INSERTT .PRGM 3> <SEARCH .PRGM>) + (T <SEARCH .PRGM>)> + <AND <G? .N .L> <RETURN >>> + "Ready for Decling"> + +;"inserts decl formats for SEARCH and DECLTRY" +<DEFINE INSERTT (FUNC X "AUX" ARGS A (B ()) (DECLSS ((VALUE) WRONG))) + #DECL ((FUNC ) <OR FUNCTION FORM> (X) FIX (A B) LIST + (ARGS) LIST (DECLSS) <OR LIST DECL>) + <COND (<AND <TYPE? <.X .FUNC> 'ATOM> ;"takes care of activations" + <SET DECLSS ((<.X .FUNC>) ACTIVATION !.DECLSS)> + <SET X <+ .X 1>> <>>) + (<AND <TYPE? <<+ .X 1> .FUNC> 'DECL> ;"preserves user decls" + <SET A <OLDEC <CHTYPE <<+ .X 1> .FUNC> LIST>>> + <SET B <2 .A>> + <PUTREST <REST .FUNC <- .X 1>> <REST .FUNC <+ .X 1>>> + <COND (<MEMBER '(VALUE) <1 .A>> + <COND (<==? <LENGTH .DECLSS> 4> + <PUTREST <REST .DECLSS 1> <1 .A>>) + (T <SET DECLSS <1 .A>>)>) + (T <PUTREST <REST .DECLSS <- <LENGTH .DECLSS> 1>> <1 .A>>)> <>>) + (<NOT <EMPTY? <.X .FUNC> >> ;"the loop makes a list (decl style) of all args + plus (VALUE)" + <SET ARGS <.X .FUNC>> + <SET DECLSS <REPEAT ((DECS ()) Z) + <COND (<MONAD? .ARGS> + <COND (<EMPTY? .DECS> <RETURN .DECLSS>) + (<PUTREST <REST .DECS <-< LENGTH .DECS> 1>> .DECLSS> + <RETURN .DECS>)>) + (<TYPE? <1 .ARGS> STRING> + <SET ARGS <REST .ARGS>>) + (<TYPE? <1 .ARGS> LIST> ;"labels args to be type of 2nd element + unless its a form (function calls)" + <COND (<MEMBER <1 <1 .ARGS>> .B>) + (<AND <SET Z <TYPE <2 <1 .ARGS>>>> <>>) + (<MEMBER .Z ( 'FIX 'FLOAT 'ATOM 'LIST 'STRING 'FALSE + 'VECTOR 'UVECTOR)> + <SET DECS ((<1 <1 .ARGS>>) <TYPE <2 <1 .ARGS>>> !.DECS)>) + (T <SET DECS ((<1 <1 .ARGS>>) 'WRONG !.DECS)>)> + <SET ARGS <REST .ARGS>>) + (<TYPE? <1 .ARGS> ATOM> + <COND (<MEMBER <1 .ARGS> .B>) + (T <SET DECS ((<1 .ARGS>) WRONG !.DECS)>)> + <SET ARGS <REST .ARGS>>)>>>)> + <PUTREST <REST .FUNC <- .X 1>> (<CHTYPE .DECLSS DECL>!<REST .FUNC .X>)> + ;"puts new decl into func"> + +<SETG GET-DECL + %<FIXUP!-RSUBRS '[ +#CODE ![17199005697 23748384439 -19846922238 17859346443 23085681768 6076110309 +0 2!] + GET-DECL] + '(48 CLLOC!-MUDDLE 235191 (2) FINIS!-MUDDLE 232552 (5))>> + + +;"Calls insert if it finds the type function or a prog or a repeat." +<DEFINE SEARCH (FUNC) + #DECL ((FUNC) ANY (VALUE) ATOM) + <COND (<EMPTY? .FUNC>) + (<TYPE? .FUNC 'FUNCTION> <INSERTT .FUNC 1> + <SEARCH <REST .FUNC>>) + (<NOT <MONAD? <1 .FUNC>>> + <SEARCH <1 .FUNC>><SEARCH <REST .FUNC>>) + (<AND <OR <==? <1 .FUNC> 'PROG><==? <1 .FUNC> 'REPEAT> + <==? <1 .FUNC> 'FUNCTION>> + <TYPE? .FUNC FORM> + <G? <LENGTH .FUNC> 2>> + <INSERTT .FUNC 2><SEARCH <REST .FUNC>>) + (T <SEARCH <REST .FUNC>>)>> + +;"makes a list composed of 2 lists. The purpose is to preserve user decls" +<DEFINE OLDEC (OLLIS "OPTIONAL" (A ()) (B ())) ;"A is the decl list and + #DECL ((OLLIS A B VALUE ) LIST) B is a list of decl args" + <REPEAT ((OLLARG <1 .OLLIS>)) + #DECL ((OLLARG) LIST (VALUE ) ATOM) + <COND (<==? <2 .OLLIS> 'ACTIVATION> <RETURN T>) + (<SET A ((<1 .OLLARG>) <2 .OLLIS> !.A)> + <SET B (<1 .OLLARG> !.B)> + <SET OLLARG <REST .OLLARG>> + <COND (<MONAD? .OLLARG> <RETURN T>)>)>> + <SET OLLIS <REST .OLLIS 2>> + <COND (<MONAD? .OLLIS> <LIST .A .B>) + (T <OLDEC .OLLIS .A .B>)>> + +;"Responds to the ERROR interrupt. Checks for the proper type of error(TYPE-MISMATCH) + and if it has been called within itself. If not it enters PROG to fix the decl." +<DEFINE FIXER ("TUPLE" T "AUX" DECL FUNC) + #DECL ((T) TUPLE (DECL) <OR LIST FALSE> (FUNC) <OR LIST FUNCTION>) + <COND(<BOUND? ERRORBOUND>) + (<NOT <==? <2 .T> 'TYPE-MISMATCH!-ERRORS>>) + (<INT-LEVEL 0> + <PROG IT (ERRORBOUND (LERR\ !-INTERRUPTS <CHTYPE <1 .T> FRAME>) + (ERF <FRAME <1 .T>>)) + #DECL ((ERRORBOUND) <SPECIAL ANY> (IT) <SPECIAL ACTIVATION> + (ERF) <SPECIAL ANY>) + <COND (<==? <6 .T> 'EVAL> ;"calling func. with bad args." + <SET FUNC ,<1 <1 <ARGS .ERF>>>> + <CHANGE-DECL .FUNC .T>) + (<==? <6 .T> 'SET> ;"setting variable to wrong type within func." + <SET DECL <GET-DECL <3 .T>>> + <COND (<==? <1 .DECL> 'WRONG> <PUT .DECL 1 <TYPE <5 .T>>>) + (T <CHECKER .DECL 1 <5 .T>>)> + <RETRY .ERF>) + (<==? <6 .T> 'APPLY> ;"APPLYing a func. to bad args." + <SET FUNC <1 <ARGS .ERF>>> + <CHANGE-DECL .FUNC .T>) + (<OR <==? <6 .T> 'REPEAT> <==? <6 .T> 'PROG>>;"bad args. within " + <SET FUNC <1 <ARGS .ERF>>> + <COND (<TYPE? <1 .FUNC> 'ATOM> + <SET FUNC <REST .FUNC>>)> + <CHANGE-DECL .FUNC .T>)>>)>> + +<DEFINE INIT () ;"sets up error handler and creates newtype WRONG" + #DECL ((VALUE) ATOM) + <ON "ERROR" ,FIXER 4> + <NEWTYPE WRONG FIX>> + + +;"accounts for activations and changes decl if old one was WRONG + otherwise it calls CHECKER. Finally it retrys frame." +<DEFINE CHANGE-DECL (FUNC T "AUX" DECL (X 2)) + #DECL ((FUNC) <OR LIST FUNCTION> (T) TUPLE (DECL) LIST (X) FIX) + <COND (<TYPE? <2 .FUNC> 'LIST> <SET X <+ .X 1>>)> + <SET DECL <MEMBER (<3 .T>) <.X .FUNC>>> + <COND (<==? <2 .DECL> 'WRONG> <PUT .DECL 2 <TYPE <5 .T>>>) + (T <CHECKER .DECL 2 <5 .T>>)> + <RETRY .ERF>> + + + +;"determines where to insert the new type in the decl and PUTs it in" +<DEFINE CHECKER (DECL X ARGS "AUX" BODY) + #DECL ((DECL) LIST (X) FIX (ARGS) ANY (BODY) <OR ATOM FORM>) + <SET BODY <.X .DECL>> + <COND (<TYPE? .BODY 'ATOM> + <PUT .DECL .X <CHTYPE (OR <TYPE .ARGS> .BODY) FORM >>) + (<NOT <TYPE? .BODY 'FORM>> <RETURN "Program Error" .IT>) + (<==? <1 .BODY> 'OR> + <PUT .DECL .X <CHTYPE (OR <TYPE .ARGS> !<REST .BODY>) FORM>>) + (<OR <==? <1 .BODY> 'SPECIAL> <==? <1 .BODY> 'UNSPECIAL>> + <COND (<TYPE? <2 .BODY> 'ATOM> + <PUT .BODY 2 <CHTYPE (OR <TYPE .ARGS> <2 .BODY>) FORM>>) + (<TYPE? <2 .BODY> 'FORM> + <COND (<==? <1 <2 .BODY>> 'OR> + <PUT .BODY 2 <CHTYPE (OR <TYPE .ARGS> !<REST <2 .BODY>>) + FORM>>) + (T <PUT .BODY 2 <CHTYPE (OR <TYPE .ARGS><2 .BODY>) FORM>>)>)>) (T <PUT .DECL .X <CHTYPE (OR <TYPE .ARGS> .BODY) FORM>>)>> + + + + +;"cleans up the file which has been decled. It checks for any WRONGs + and groupc the decls together. Dumps the file back out as >. + If there are WRONGs around it gives you a chance to keep + decling." +<DEFINE STOP-DECL F (NAME "AUX" L LIS) + #DECL ((F) ACTIVATION (LIS) LIST (L) FIX (NAME) ATOM (VALUE) <OR STRING ATOM>) + <PUT .NAME CHANNEL> + <SET L <LENGTH ..NAME>> + <SET LIS + <REPEAT ((N 1) PRGM A (B ())) + #DECL ((B VALUE) LIST (A) <OR ATOM LIST FALSE> (PRGM) ANY + (N) FIX) + <SET A <HUNT-WRONG <.N ..NAME>>> + <SET N <+ .N 1>> + <COND (<AND .A <SET B (.A !.B)> <>>) + (<G? .N .L> <RETURN .B>)>>> + <COND (<NOT <EMPTY? .LIS>> + <PRINC "The functions in the list "> + <PRINC .LIS> + <PRINC " are not fully decled. +Do you wish to continue? +"> + <PROG () + #DECL ((VALUE) ATOM) + <RESET .INCHAN> + <COND (<==? <TYI .INCHAN> !"Y> + <PRINC " +Proceed"> + <RETURN ,NULL .F>) + (<OFF "ERROR"> + <CONDENSE .NAME 1> + <GROUP-DUMP <PNAME .NAME>> + <PRINC " +Decling Stopped"> + <RETURN ,NULL>)>>) + (<OFF "ERROR"> + <CONDENSE .NAME> + <GROUP-DUMP <PNAME .NAME>> + "Decling Completed")>> + + + +;"determines what to put in the user list of incompletely decled functions. + If HUNT is successful it returns either the name of the function or the + function itself." +<DEFINE HUNT-WRONG HW (FUNC "AUX" TITLE) + #DECL ((TITLE) <OR FUNCTION ATOM> (FUNC) <OR FUNCTION FORM> + (HW) ACTIVATION (VALUE) <OR FUNCTION FORM ATOM FALSE>) + <COND (<OR <==? <1 .FUNC> 'SETG> <==? <1 .FUNC> 'DEFINE>> + <SET TITLE <2 .FUNC>>) + (<SET TITLE .FUNC>)> + <COND (<PROG HT () + #DECL ((HT) ACTIVATION (VALUE) <OR ATOM FALSE>) + <HUNT .FUNC>> + <RETURN .TITLE .HW>) + (T #FALSE ())>> + + +;"hunts for WRONG and returns either T or false." +<DEFINE HUNT H (FUNC) + #DECL ((FUNC) <OR FUNCTION SEGMENT STRING DECL LIST FORM> (H) ACTIVATION + (VALUE) <OR ATOM FALSE>) + <COND (<EMPTY? .FUNC> #FALSE ()) + (<NOT <MONAD? <1 .FUNC>>> + <HUNT <1 .FUNC>> + <HUNT <REST .FUNC>>) + (<==? <1 .FUNC> 'WRONG> <RETURN T .HT>) + (<HUNT <REST .FUNC>>)>> + + + +;"accepts name of file and sends the elements to DEN and DEL" +<DEFINE CONDENSE (NAME "OPTIONAL" (A 0)) + #DECL ((NAME) ATOM (VALUE) <OR FIX ATOM> (A) FIX) + <COND (<==? .A 1> <MAPF #FALSE () ,DEL ..NAME>)> + <MAPF #FALSE () ,DEN ..NAME>> + + +;"puts like decls together: ie (X) FIX (Y) FIX would become (X Y) FIX" +<DEFINE DEN (FUNC) + #DECL ((VALUE) <OR FALSE FIX ATOM> (FUNC) <OR FUNCTION FORM>) + <MAPF #FALSE () + #FUNCTION (A (DEC "AUX" L) + #DECL ((A) ACTIVATION (VALUE) <OR FIX ATOM> (DEC) ANY (L) FIX) + <COND (<AND <TYPE? .DEC 'FORM> <DEN .DEC> <NOT <MONAD? .DEC>>>) + (<NOT <TYPE? .DEC DECL>> <RETURN T .A>)> + <SET L <LENGTH .DEC>> + <REPEAT ((N 2) TY) + #DECL ((VALUE) <OR ATOM FIX> (N) FIX (TY) ANY) + <COND (<G? <+ .N 2> .L> <RETURN T>)> + <SET TY <.N .DEC>> + <COND + (<TYPE? .TY 'ATOM> + <REPEAT ((M <+ .N 2>)) ;"this loop treats ATOMs" + #DECL ((VALUE) FIX (M) FIX) + <COND (<TYPE? <.M .DEC> 'FORM>) + (<==? <.M .DEC> .TY> + <PUT .DEC + <- .N 1> + (<1 <<- .M 1> .DEC>> !<<- .N 1> .DEC!>)> + <PUTREST <REST .DEC <- .M 3>> <REST .DEC .M>> + <SET L <- .L 2>>)> + <SET M <+ .M 2>> + <COND (<G? .M .L> <RETURN <SET N <+ .N 2>>>)>>) + (T + <REPEAT ((M <+ .N 2>) DECCL LL) ;"this treats forms. It checks that the + first elements are == and the length is == + and that members are the same." + #DECL ((VALUE) FIX (M) FIX (DECCL) <OR ATOM FORM> (LL) FIX) + <COND (<AND <TYPE? <.M .DEC> 'FORM> + <==? <LENGTH .TY> <LENGTH <.M .DEC>>> + <==? <1 .TY> <1 <.M .DEC>>>> + <SET DECCL <.M .DEC>> + <AND <NOT <==? <1 .TY> 'OR>> + <SET DECCL <2 .DECCL>> + <SET TY <2 .TY>>> + <OR <AND <TYPE? .TY 'FORM> <SET LL <LENGTH .TY>>> + <SET LL 1>> + <AND <OR <1? .LL> <==? .LL <LENGTH .DECCL>>> + <REPEAT ((X 0)) ;"checks members: if all same then it fixes" + #DECL ((VALUE) ATOM (X) FIX) ;"the decls" + <SET X <+ .X 1>> + <COND (<G? .X .LL> + <PUT .DEC + <- .N 1> + (<1 <<- .M 1> .DEC>> + !<<- .N 1> .DEC!>)> + <PUTREST <REST .DEC <- .M 3>> + <REST .DEC .M>> + <SET L <- .L 2>> + <RETURN T>) + (<OR <AND <TYPE? .TY 'ATOM> + <NOT <==? .TY .DECCL>> + <RETURN T>> + <NOT <MEMQ <.X .TY><CHTYPE .DECCL LIST>>>> + <RETURN T>)>>>)> + <SET M <+ .M 2>> + <COND (<G? .M .L> <RETURN <SET N <+ .N 2>>>)>> + <RETURN <SET N <+ .N 2>>>)>>) + .FUNC>> + + +;"hunts down WRONG and (when found) deletes the variable from the arg list" +<DEFINE DEL (FUNC "OPTIONAL" (NTH 1) LEN) + #DECL ((NTH LEN) FIX (FUNC) <OR FORM FUNCTION> (VALUE) ATOM) + <AND <==? .NTH 1> <SET LEN <LENGTH .FUNC>> <>> + <COND + (<G? .NTH .LEN>) + (<TYPE? <.NTH .FUNC> 'FORM> + <DEL <.NTH .FUNC>> + <SET NTH <+ .NTH 1>> + <DEL .FUNC .NTH .LEN>) + (<NOT <TYPE? <.NTH .FUNC> 'DECL>> + <SET NTH <+ .NTH 1>> + <DEL .FUNC .NTH .LEN>) + (T + <SET DEC <.NTH .FUNC>> + <SET LL <LENGTH .DEC>> + <REPEAT ((X 2)) + #DECL ((X) FIX (VALUE) ATOM) + <COND (<G? .X .LL> <RETURN T>) + (<==? <.X .DEC> 'WRONG> + <SET LL <- .LL 2>> + <COND (<NOT <==? .X 2>> + <PUTREST <REST .DEC <- .X 3>> <REST .DEC .X>>) + (T + <PUT .FUNC + .NTH + <SET DEC + <CHTYPE (!<REST .DEC 2!>) DECL>>>)>) + (<SET X <+ .X 2>>)>> + <SET NTH <+ .NTH 1>> + <DEL .FUNC .NTH .LEN>)>> + +<INIT> + +<ENDPACKAGE> +<USE "DECLER"> + \ No newline at end of file diff --git a/src/mprog/b-ob.ujmb01 b/src/mprog/b-ob.ujmb01 new file mode 100644 index 00000000..4b549481 --- /dev/null +++ b/src/mprog/b-ob.ujmb01 @@ -0,0 +1,288 @@ +<PACKAGE "B-OBJECT"> + +;"Package to convert 8-bit MSDTP format bytes to a MDL object. + Use <EXTRACT-ITEM .BS>, where .BS is a string of 8-bit +bytes. (This may be created by <BYTER8!-MSDTP!-PACKAGE .BUF>, +where BUF is a uvector of primtype-words.) It returns the +converted object. + <EXTRACT-ITEM .BS T> returns the number of bytes needed +for the complete object. It looks at only the type, and possibly +size, bytes to determine the length. + REFILL-BUFFER should be defined to be a function that, +given a buffer, refills it with bytes. It will be called whenever +more bytes are needed to complete an object." + +<ENTRY EXTRACT-ITEM REFILL-BUFFER MAX-STRING STRING-FILE> + +<USE "MSDTP"> + +<SETG MAX-STRING 5120> + +<SETG STRING-FILE "DSK:NETOPS;MSDTP >"> + +<DEFINE EXTRACT-ITEM (BS + "OPTIONAL" (SIZE? <>) + "AUX" (BL <LENGTH .BS>) + (BOFF 0) + (BYTES 0) + BYTE + WD) + #DECL ((VALUE) ANY + (BS) <SPECIAL STRING> + (SIZE?) <OR 'T FALSE> + (BL BYTES BOFF) <SPECIAL FIX> + (BYTE) WORD + (WD) <OR WORD FIX>) + <COND (.SIZE? + <COND (<==? <GETBITS <SET BYTE <GET-BYTE>> #BITS *050300000000*> #WORD 6> + <B-NON-ATOM <CHTYPE <GETBITS .BYTE #BITS *000500000000*> FIX> T>) + (<NOT <SET WD <ANDB .BYTE *370*>>>) + (<OR <==? .WD #WORD *340*> <==? .WD #WORD *360*>> + <SET WD <CHTYPE <GETBITS .BYTE #BITS *000300000000*> FIX>> + <COND (<0? .WD> 9) (<+ .WD 1>)>) + (<==? .WD #WORD *350*> + <ERROR RESERVED-CODE-USED!-ERRORS EXTRACT-ITEM>) + (1)>) + (<GET-ITEM>)>> + +<DEFINE GET-BYTE () + #DECL ((VALUE) WORD) + <COND (<G=? .BYTES <+ .BL .BOFF>> + <REFILL-BUFFER .BS> + <SET BOFF <+ .BOFF .BL>>)> + <CHTYPE <GET .BS <- <SET BYTES <+ .BYTES 1>> .BOFF>> WORD>> + +<DEFINE NEXT-BYTE () + #DECL ((VALUE) WORD) + <COND (<G=? .BYTES <+ .BL .BOFF>> + <REFILL-BUFFER .BS> + <SET BOFF <+ .BOFF .BL>>)> + <CHTYPE <GET .BS <- <+ .BYTES 1> .BOFF>> WORD>> + +<DEFINE B-NON-ATOM (OBTYPE "OPTIONAL" (SIZE? <>) "AUX" OBLEN "NAME" B-NON-ATOM) + #DECL ((VALUE) ANY (SIZE?) <OR 'T FALSE> (OBTYPE OBLEN) FIX (B-NON-ATOM) ACTIVATION) + <SET OBLEN <CHTYPE <GET-BYTE> FIX>> + <COND (<0? .OBLEN> <SET OBLEN *200*>) + (<L? .OBLEN *200*>) + (<NOT <SET OBLEN <- .OBLEN *200*>>>) + (<G? .OBLEN 4> + <ERROR TOO-MANY-SIZE-BYTES!-ERRORS B-NON-ATOM .OBLEN>) + (<SET OBLEN + <REPEAT ((LEN 0)) + <AND <0? .OBLEN> <RETURN .LEN>> + <SET LEN <+ <* .LEN *400*> <CHTYPE <GET-BYTE> FIX>>> + <SET OBLEN <- .OBLEN 1>>>>)> + <AND <OR <0? .OBTYPE> <G? .OBTYPE 6>> + <ERROR BAD-OBJECT-TYPE-CODE!-ERRORS B-NON-ATOM .OBTYPE>> + <COND (.SIZE? <+ .BYTES .OBLEN>) + (<APPLY ,<NTH '![B-LBITSTR B-STRUC B-EDT B-REPEAT B-USTRUC B-STRING!] + .OBTYPE> + .OBLEN>)>> + +<DEFINE B-LBITSTR (OBLEN + "AUX" (FINLEN <+ .OBLEN .BYTES>) + (BITLEN <GET-ITEM>) + (UV <IUVECTOR <+ </ <- .FINLEN .BYTES 1> 4> 2> #WORD 0>) + (BBS <BYTER8 <REST .UV>>)) + #DECL ((VALUE) BITSTR + (OBLEN FINLEN BITLEN) FIX + (UV) <UVECTOR [REST WORD]> + (BBS) STRING) + <OR <G=? <- .FINLEN .BYTES> <+ </ <- .BITLEN 1> 8> 1>> + <AND <0? .BITLEN> <==? .FINLEN .BYTES>> + <ERROR NOT-ENOUGH-BYTES-FOR-BITS!-ERRORS + P-LBITSTR + <- .FINLEN .BYTES> + .BITLEN>> + <PUT .UV 1 <CHTYPE .BITLEN WORD>> + <REPEAT ((N 0)) + <AND <==? .BYTES .FINLEN> <RETURN>> + <PUT .BBS + <SET N <+ .N 1>> + <CHTYPE <GET-BYTE> CHARACTER>>> + <CHTYPE .UV BITSTR>> + +<DEFINE B-STRING (OBLEN) + #DECL ((VALUE) <OR STRING POINTER> (OBLEN) FIX) + <COND (<G? .OBLEN ,MAX-STRING> + <REPEAT ((C <OR <OPEN "PRINT" ,STRING-FILE> + <ERROR CANT-OPEN!-ERRORS B-STRING ,STRING-FILE>>) + (LEN .OBLEN)) + #DECL ((VALUE) POINTER (C) CHANNEL (LEN) FIX) + <PRINC <CHTYPE <GET-BYTE> CHARACTER> .C> + <AND <0? <SET LEN <- .LEN 1>>> + <CLOSE .C> + <RETURN <CHTYPE (0 .OBLEN <STRING <9 .C> + !": + <10 .C> + !"; + <7 .C> + !" + <8 .C>>) + POINTER>>>>) + (<ISTRING .OBLEN '<CHTYPE <GETBITS <GET-BYTE> #BITS *000700000000*> + CHARACTER>>)>> + +<DEFINE B-STRUC (OBLEN + "OPTIONAL" LIST? + "AUX" (FINLEN <+ .OBLEN .BYTES>) THISOB ITEM LASTOB) + #DECL ((VALUE ITEM LASTOB) <OR LIST STRING> (OBLEN FINLEN) FIX (LIST? THISOB) ANY) + <REPEAT () + <AND <G=? .BYTES .FINLEN> <SET ITEM ()> <RETURN>> + <COND + (<TYPE? <SET THISOB <GET-ITEM>> SPLICE> + <COND (<EMPTY? .THISOB>) + (<SET ITEM <CHTYPE .THISOB LIST>> + <SET LASTOB <REST .THISOB <- <LENGTH .THISOB> 1>>> + <RETURN>)>) + (<SET LASTOB <SET ITEM (.THISOB)>> <RETURN>)>> + <OR <G=? .BYTES .FINLEN> + <REPEAT () + <COND (<TYPE? <SET THISOB <GET-ITEM>> SPLICE> + <COND (<EMPTY? .THISOB>) + (<PUTREST .LASTOB .THISOB> + <SET LASTOB + <REST .THISOB <- <LENGTH .THISOB> 1>>>)>) + (<PUTREST .LASTOB <SET LASTOB (.THISOB)>>)> + <AND <G=? .BYTES .FINLEN> <RETURN>>>> + <OR <==? .BYTES .FINLEN> + <ERROR BAD-SIZE-SPECIFICATION!-ERRORS B-STRUC .OBLEN>> + <COND (<ASSIGNED? LIST?> .ITEM) + (<MAPF <> <FUNCTION (E) <OR <TYPE? .E CHARACTER> <MAPLEAVE <>>>> .ITEM> + <STRING !.ITEM>) + (.ITEM)>> + +<DEFINE B-REPEAT (OBLEN "AUX" (FINLEN <+ .OBLEN .BYTES>) REPNUM REPOBS) + #DECL ((VALUE) SPLICE (REPNUM) FIX (REPOBS) LIST) + <SET REPNUM <GET-ITEM>> + <AND <G=? .BYTES .FINLEN> + <ERROR BAD-SIZE-SPECIFICATION!-ERRORS B-REPEAT .OBLEN>> + <SET REPOBS <B-STRUC <- .FINLEN .BYTES> T>> + <REPEAT ((ITEM ())) + #DECL ((VALUE) SPLICE (ITEM) LIST) + <AND <0? .REPNUM> <RETURN <CHTYPE .ITEM SPLICE>>> + <SET ITEM (!.REPOBS !.ITEM)> + <SET REPNUM <- .REPNUM 1>>>> + +<DEFINE B-USTRUC (OBLEN) + #DECL ((VALUE) <OR LIST STRING> (OBLEN) FIX) + <COND (<AND <NEXT-BYTE> <L? <CHTYPE <NEXT-BYTE> FIX> *200*>> <B-STRING .OBLEN>) + (<B-STRUC .OBLEN>)>> + +<SETG ERRIHEAD <OR <GET ERROR!-INTERRUPTS INTERRUPT> <EVENT ERROR!-INTERRUPTS 100>>> + +<SETG ERRPARSE <OFF <HANDLER ,ERRIHEAD <FUNCTION ("TUPLE" T) <OFF ,ERRPARSE> + <DISMISS 0 .ACTPARSE>>>>> + +<DEFINE B-EDT (OBLEN "AUX" ITEM STYPE VAL) + #DECL ((VALUE VAL) ANY (ITEM) LIST (STYPE) ATOM) + <SET ITEM <B-STRUC .OBLEN T>> + <SET STYPE <GET-SEMTYPE <1 .ITEM>>> + <COND (<AND <==? .STYPE %<GET-SEMTYPE "UNPARSED">> + <NOT <TYPE? <SET VAL <PROG ACTPARSE () + #DECL ((ACTPARSE) <SPECIAL ACTIVATION>) + <HANDLER ,ERRIHEAD ,ERRPARSE> + <PARSE <3 .ITEM>>>> + FIX>>> + <OFF ,ERRPARSE> + .VAL) + (<CHTYPE <REST .ITEM> .STYPE>)>> + +<SETG GET-ITEM + %<FIXUP!-RSUBRS '[ +#CODE ![23751557122 23085677572 25614352384 272105478 -14747172736 23088857096 +17188482051 23088857130 17188482049 -14210301888 23088857130 -14747172832 +23088857105 23848812545 23848812546 280494088 23088857130 -16894656488 +23088857111 23848812545 23848812546 280494090 23088857130 -14210301936 943194127 +-14747172856 23088857119 23848812545 23848812546 280494092 23088857130 +-14747172860 23088857123 17191927825 23088857130 -14747172862 23088857127 +17191927827 23088857130 26055016448 23088857091 17191927829 25614352384 +24150802432 2 6076118911 0 262146!] + GET-ITEM + #DECL ("VALUE" ANY) + GET-BYTE + B-NON-ATOM + B-LINTEGER + B-SBITSTR + RESERVED-CODE-USED!-ERRORS + %<TYPE-W XTRA WORD> + %<TYPE-W BOOL WORD> + %<TYPE-W EMPTY WORD>] + '(52 + FINIS!-MUDDLE + 228356 + (2) + $TLOSE!-MUDDLE + 224256 + (9 7))>> + +<AND <ASSIGNED? GLUE> + .GLUE + <PUT ,GET-ITEM + GLUE + '![17734583332 17796703348 31255953408 2!]>> + +<SETG B-LINTEGER + %<FIXUP!-RSUBRS '[ +#CODE ![23851171840 23851171841 23751557124 23085677572 25614352384 17339252744 +29799219200 17476354048 272105478 -34334572544 -16357785472 23088857102 +-26281508864 24716247082 17213423618 34228404224 23088857113 23848812547 +23848812548 272105478 23983030276 23983030275 22036873224 -30568087550 +23088857103 23983030274 23983030273 26063405056 27677425707 23088857128 +17196646403 23848812545 23848812546 17196646404 23848812545 23848812546 +17322475522 23748386737 17191927817 23085696409 17196646404 23085696409 -256 -1 +262148 5581342911 0 262146!] + B-LINTEGER + #DECL ("VALUE" <OR FIX DFIX> FIX) + GET-BYTE + %<TYPE-W DFIX UVECTOR>] + '(52 + FINIS!-MUDDLE + 228356 + (4) + CIUVEC!-MUDDLE + 237489 + (38) + MPOPJ!-MUDDLE + 247193 + (42 40))>> + +<AND <ASSIGNED? GLUE> + .GLUE + <PUT ,B-LINTEGER + GLUE + '![1074270468 8594149376 3221225472 262148!]>> + +<SETG B-SBITSTR + %<FIXUP!-RSUBRS '[ +#CODE ![23851171840 23851171841 23751557124 23085677572 25614352384 17339252744 +29799219200 17476354048 -33931919356 33959968768 23088857107 23848812547 +23848812548 272105478 23983030276 23983030275 22305308680 -30568087550 +23088857097 33285996555 33285996555 17188482104 26600275968 23088857122 +17196646403 23848812545 23848812546 17196646404 23848812545 23848812546 +17322475522 23748386737 17191927817 23085696409 17196646404 23085696409 262148 +5598806925 0 262146!] + B-SBITSTR + #DECL ("VALUE" <OR WORD DWORD> FIX) + GET-BYTE + %<TYPE-W DWORD UVECTOR>] + '(52 + FINIS!-MUDDLE + 228356 + (4) + $TLOSE!-MUDDLE + 224256 + (22) + CIUVEC!-MUDDLE + 237489 + (32) + MPOPJ!-MUDDLE + 247193 + (36 34))>> + +<AND <ASSIGNED? GLUE> + .GLUE + <PUT ,B-SBITSTR GLUE '![1073758720 17196646592 262148!]>> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog/batabs.ujm005 b/src/mprog/batabs.ujm005 new file mode 100644 index 00000000..c2f990e9 --- /dev/null +++ b/src/mprog/batabs.ujm005 @@ -0,0 +1,30 @@ + +<USE "AMAKE"> + +<DEFINE BATABS () + <REPEAT (FOO INCH FRFILE TOFILE) + <COND (<NOT <SET INCH <OPEN "READ" "MABSTR;< BATABS">>> + <RETURN>)> + <PRINT ("STARTING" .INCH)> + <SET FOO <PROG () + <SET FRFILE <READ .INCH '<RETURN #FALSE ("FRFILE EOT")>>> + <SET TOFILE <READ .INCH '<RETURN#FALSE ("FRFILE EOT")>>> + <SET RECORD <READ .INCH '<RETURN #FALSE ("FRFILE EOT")>>> + <SET REABSTRACT <READ .INCH '<RETURN #FALSE ("FRFILE EOT")>>> + <SET AUTHOR <READ .INCH '<RETURN #FALSE ("FRFILE EOT")>>> + T>> + <CLOSE .INCH> + <COND (<NOT .FOO> + <PRINT .FOO> + <RENAME "MABSTR;< BATABS" TO "> BATLOS"> + <AGAIN>)> + <COND (<EMPTY? .REABSTRACT><UNASSIGN REABSTRACT>)> + <OR <AND <TYPE? .AUTHOR STRING> <SNAME .AUTHOR>> + <AND <TYPE? .AUTHOR VECTOR> + <TYPE? <1 .AUTHOR> STRING> + <SNAME <1 .AUTHOR>>>> + <PRINT <FILE-ABSTRACT .FRFILE .TOFILE>> + <RENAME "MABSTR;< BATABS">>> + +<BATABS> + \ No newline at end of file diff --git a/src/mprog/bignum.uwl004 b/src/mprog/bignum.uwl004 new file mode 100644 index 00000000..c5fc59bf --- /dev/null +++ b/src/mprog/bignum.uwl004 @@ -0,0 +1,293 @@ + +;"Addition routine for extended precision numbers. Takes two uvectors of integers, +and treats them as positional numbers base 1,000,000,000. The result is also a uvector." +<TITLE ADD!-BIGNUM!-> + <DECLARE ("VALUE" <UVECTOR [REST FIX]> + <UVECTOR [REST FIX]><UVECTOR [REST FIX]>)> + <ENTER 2> + <MOVE A* (AB)1> + <MOVE B* (AB)3> + <CAML A* B> + <MOVE A* B> + <HLRE A* A> + <MOVMS A* A> + <AOS A> + <PUSH TP* $TFIX> + <PUSH TP* A> + <MCALL 1 IUVECTOR> + <MOVE O* B> + <HLRE C* B> + <SUBI B* (C)> + <MOVSI C* TFIX> + <MOVEM C* (B)> + <MOVE C* (AB)1> + <HLRE D* C> + <SUBI C* (D)> + <MOVE D* (AB)3> + <HLRE E* D> + <SUBI D* (E)> +A1 <SETZI E*> +A2 <ADDI B* -1> + <ADDI D* -1> + <ADDI C* -1> + <JUMPG D* A7> + <SKIPG C> +A3 <ADD E* (C)> + <ADD E* (D)> +A5 <CAML E* [1000000000]> + <JRST A6> + <MOVEM E* (B)> + <JRST A1> +A6 <SUB E* [1000000000]> + <MOVEM E* (B)> + <SETZI E*> + <AOJA E* A2> +A7 <JUMPG C* A8> + <ADD E* (C)> + <JRST A5> +A8 <MOVEM E* (B)> + <MOVE B* 0> +A9 <SKIPN (B)> + <AOBJN B* A9> + <JRST FINIS> + +#FALSE () + +;"Subtraction routine for extended precision numbers. Takes two uvectors, base +1,000,000,000. , and subtracts the second from the first, returning a uvector." + +<TITLE SUB!-BIGNUM!-> + <DECLARE ("VALUE" <UVECTOR [REST FIX]> + <UVECTOR [REST FIX]><UVECTOR [REST FIX]>)> + <ENTER 2> + <MOVE A* (AB)1> + <MOVE B* (AB)3> + <CAML A* B> + <MOVE A* B> + <HLRE A* A> + <MOVMS A* A> + <PUSH TP* $TFIX> + <PUSH TP* A> + <MCALL 1 IUVECTOR> + <MOVE O* B> + <HLRE C* B> + <SUBI B* (C)> + <MOVSI C* TFIX> + <MOVEM C* (B)> + <MOVE C* (AB)1> + <HLRE D* C> + <SUBI C* (D)> + <MOVE D* (AB)3> + <HLRE E* D> + <SUBI D* (E)> +S1 <SETZI E*> +S2 <ADDI B* -1> + <ADDI D* -1> + <ADDI C* -1> + <JUMPG D* S7> + <SKIPG C> +S3 <ADD E* (C)> + <SUB E* (D)> +S5 <JUMPL E* S6> + <MOVEM E* (B)> + <JRST S1> +S6 <ADD E* [1000000000]> + <MOVEM E* (B)> + <SETOI E*> + <JRST S2> +S7 <JUMPG C* S8> + <ADD E* (C)> + <JRST S5> +S8 <MOVE B* 0> +S9 <SKIPN (B)> + <AOBJN B* S9> + <SKIPL E> + <JRST FINIS> + <PUSH TP* $TATOM> + <PUSH TP* <MQUOTE RESULT-NEGATIVE>> + <JRST CALER1> + +#FALSE () + +;"Multiplication routine for multiple precision numbers. Takes two uvectors, base +1,000,000,000. , and gives there product as a uvector." + +<TITLE MULT!-BIGNUM!-> + <DECLARE ("VALUE" <UVECTOR [REST FIX]> + <UVECTOR [REST FIX]><UVECTOR [REST FIX]>)> + <ENTER 2> + <MOVE A* (AB)1> + <MOVE B* (AB)3> + <ADD A* B> + <HLRE A* A> + <MOVMS A* A> + <PUSH TP* $TFIX> + <PUSH TP* A> + <MCALL 1 IUVECTOR> + <PUSH TP* A> + <PUSH TP* B> + <HLRE C* B> + <SUBI B* (C)> + <MOVSI C* TFIX> + <MOVEM C* (B)> + <MOVE C* (AB)1> + <HLRE D* C> + <SUBI C* (D)> + <MOVE A* (AB)3> + <HLRE E* A> + <SUBI A* (E)> + <MOVE O* B> +M1 <ADDI A* -1> + <JUMPG A* M4> +M2 <ADDI C* -1> + <ADDI B* -1> + <JUMPG C* M3> + <MOVE D* (A)> + <MUL D* (C)> + <DIV D* [1000000000]> + <ADD E* (B)> + <CAML E* [1000000000]> + <JRST M5> +M7 <MOVEM E* (B)> + <ADD D* (B)-1> + <CAML D* [1000000000]> + <JRST M6> + <MOVEM D* (B)-1> + <JRST M2> +M3 <ADDI O* -1> + <MOVE B* 0> + <MOVE C* (AB)1> + <HLRE D* C> + <SUBI C* (D)> + <JRST M1> +M4 <POP TP* B> + <POP TP* A> +M9 <SKIPN (B)> + <AOBJN B* M9> + <JRST FINIS> +M5 <SUB E* [1000000000]> + <AOJA D* M7> +M6 <SUB D* [1000000000]> + <AOS (B)-2> + <MOVEM D* (B)-1> + <JRST M2> + +#FALSE () + ;"Little division routine for extended precision numbers. Takes an extended precision +uvector (base 1,000,000,000.) and a fix number. It divides the extended number by the +fix, and returns a vector whose first element is the dividend (uvector) and the second +element is the remainder." + +<TITLE LDIV!-BIGNUM!-> + <DECLARE ("VALUE" <VECTOR <UVECTOR [REST FIX]> FIX> + <UVECTOR [REST FIX]> FIX)> + <ENTER 2> + <MOVE A* (AB)1> + <HLRE B* A> + <MOVMS B* B> + <PUSH TP* $TFIX> + <PUSH TP* B> + <MCALL 1 IUVECTOR> + <PUSH TP* A> + <PUSH TP* B> + <MOVE A* (AB)1> + <MOVE E* (AB)3> + <SETZB C* D> +LP <ADD D* (A)> + <DIV C* E> + <MOVEM C* (B)> + <AOBJP A* END> + <MOVE C* D> + <MUL C* [1000000000]> + <AOBJN B* LP> +END <MOVE A* (TP)> +X <SKIPN (A)> + <AOBJN A* X> + <MOVEM A* (TP)> + <PUSH TP* $TFIX> + <PUSH TP* D> + <MOVSI A* TFIX> + <MOVEM A* (B)1> + <MCALL 2 VECTOR> + <JRST FINIS> + +#FALSE () + ;"Less than comparison for two extended precision numbers (uvectors, base 1,000,000,000.). +Returns T if first less than second, else #FALSE ()" + +<TITLE LESS!-BIGNUM!-> + <DECLARE ("VALUE" <OR ATOM FALSE> + <UVECTOR [REST FIX]><UVECTOR [REST FIX]>)> + <ENTER 2> + <MOVE A* (AB)1> + <MOVE B* (AB)3> +L1 <HLRE C* A> +L2 <HLRE D* B> + <CAME C* D> + <JRST L6> +L3 <MOVE C* (A)> + <CAME C* (B)> + <JRST L8> + <AOBJP A* L4> +L4 <AOBJN B* L3> +L5 <MOVSI A* TFALSE> + <SETZI B*> + <JRST FINIS> +L6 <CAMG C* D> + <JRST L9> + <SKIPN D* (B)> + <AOBJN B* L2> + <JUMPG B* L5> +L7 <MOVSI A* TATOM> + <MOVE B* <MQUOTE T>> + <JRST FINIS> +L8 <CAML C* (B)> + <JRST L5> + <JRST L7> +L9 <SKIPN C* (A)> + <AOBJN A* L1> + <JRST L5> + +#FALSE () + +;"General comparison between two extended precision numbers (uvectors, base 1,000,000,000.). +Returns -1 if first less than second, 0 if equal, 1 otherwise." + +<TITLE COMPARE!-BIGNUM!-> + <DECLARE ("VALUE" FIX + <UVECTOR [REST FIX]><UVECTOR [REST FIX]>)> + <ENTER 2> + <MOVE A* (AB)1> + <MOVE B* (AB)3> +L1 <HLRE C* A> +L2 <HLRE D* B> + <CAME C* D> + <JRST L6> +L3 <MOVE C* (A)> + <CAME C* (B)> + <JRST L8> + <AOBJP A* L4> +L4 <AOBJN B* L3> +L5 <MOVSI A* TFIX> + <SETZI B*> + <JRST FINIS> +L6 <CAMG C* D> + <JRST L9> + <SKIPN D* (B)> + <AOBJN B* L2> + <JUMPG B* L5> +L7 <MOVSI A* TFIX> + <SETOI B*> + <JRST FINIS> +L8 <CAML C* (B)> + <JRST L10> + <JRST L7> +L9 <SKIPN C* (A)> + <AOBJN A* L1> + <JUMPG A* L5> +L10 <MOVSI A* TFIX> + <MOVEI B* 1> + <JRST FINIS> + +#FALSE () +  \ No newline at end of file diff --git a/src/mprog/bigpri.ujm030 b/src/mprog/bigpri.ujm030 new file mode 100644 index 00000000..3f9544a7 --- /dev/null +++ b/src/mprog/bigpri.ujm030 @@ -0,0 +1,167 @@ + +<PACKAGE "BIGPRINT"> + +<ENTRY BIGPRINT 5X7-MASK> + +<DEFINE REP-PRINC (CH "OPTIONAL" (RP 1)) + #DECL ((CH) ANY (RP) FIX) + <REPEAT () + <COND (<G? <SET RP <- .RP 1>> -1> <PRINC .CH>) + (T <RETURN .CH>)>>> + +<DEFINE BIGPRINT (INSTRING + "OPTIONAL" (RP 1) (OFFS 0) + "AUX" (OUTCHAN .OUTCHAN) + (OFFSTR <COND (<0? .OFFS> "") (T <ISTRING .OFFS !\ >)>) + (VECT <MAPF ,UVECTOR ,5X7-MASK .INSTRING>)) + #DECL ((VALUE INSTRING OFFSTR) STRING (RP OFFS) FIX + (VECT) <UVECTOR [REST FIX]> (OUTCHAN) CHANNEL) + <COND + (<0? <LENGTH .INSTRING>> <REP-PRINC " +" .RP>) + (T + <REPEAT ((STRIP <* 32 32 32 32 32 32>)) + #DECL ((STRIP) FIX) + <COND (<0? .STRIP> <RETURN .INSTRING>)> + <REPEAT ((ROW-IN-STRIP 0)) + #DECL ((ROW-IN-STRIP) FIX) + <COND (<G? <SET ROW-IN-STRIP <+ 1 .ROW-IN-STRIP>> .RP> + <RETURN>)> + <PRINC .OFFSTR> + <REPEAT ((JTH 1) CHAR COLUMN-STRIP) + #DECL ((JTH COLUMN-STRIP) FIX (CHAR) CHARACTER) + <SET CHAR <NTH .INSTRING .JTH>> + <SET COLUMN-STRIP </ <NTH .VECT .JTH> .STRIP>> + <REPEAT ((COLUMN 32)) + #DECL ((COLUMN) FIX) + <COND (<0? <SET COLUMN </ .COLUMN 2>>> <RETURN>) + (<0? <CHTYPE <ANDB .COLUMN .COLUMN-STRIP> + FIX>> + <REP-PRINC " " .RP>) + (T <REP-PRINC .CHAR .RP>)>> + <COND (<G? <SET JTH <+ 1 .JTH>> <LENGTH .INSTRING>> + <RETURN>)> + <REP-PRINC " " .RP>> + <PRINC " +">> + <SET STRIP </ .STRIP 32>>>)>> + +<DEFINE 5X7-MASK (CHAR "AUX" (N <ASCII .CHAR>)) + #DECL ((VALUE N) FIX (CHAR) CHARACTER) + <COND (<OR <L? .N *40*> <G? .N *177*>> + <ERROR BAD-ASCII-CHARACTER .CHAR .N 5X7>) + (T <NTH ,5X7TB <- .N *37*>>)>> + +<DEFINE 5BY7MASKGEN (AA AB AC AD AE AF AG) + #DECL ((VALUE AA AB AC AD AE AF AG) FIX) + <+ .AG <* 32 + <+ .AF <* 32 + <+ .AE <* 32 + <+ .AD <* 32 + <+ .AC + <* 32 + <+ .AB + <* 32 .AA>>>>>>>>>>>>> + +"5x7 matrix for ASCII non-control characters" +<GDECL (5X7TB) <UVECTOR [REST FIX]>> +<SETG 5X7TB <UVECTOR + 0 ;"SP" + %<5BY7MASKGEN 4 4 4 4 4 0 4 > ;"!" + %<5BY7MASKGEN *12* *12* *12* 0 0 0 0 > ;"" + %<5BY7MASKGEN *12* *12* *37* *12* *37* *12* *12*> ;"#" + %<5BY7MASKGEN 4 *17* *24* *16* 5 *36* 4 > ;"$" + %<5BY7MASKGEN *36* *31* 2 4 *10* *23* 3 > ;"%" + %<5BY7MASKGEN 4 *12* 4 *10* *25* *22* *15*> ;"&" + %<5BY7MASKGEN 4 4 4 0 0 0 0 > ;"'" + %<5BY7MASKGEN 2 4 *10* *10* *10* 4 2 > ;"(" + %<5BY7MASKGEN *10* 4 2 2 2 4 *10*> ;")" + %<5BY7MASKGEN 0 *25* *16* *33* *16* *25* 0 > ;"*" + %<5BY7MASKGEN 0 0 4 *33* 4 0 0 > ;"+" + %<5BY7MASKGEN 0 0 0 0 *14* 4 *10*> ;"," + %<5BY7MASKGEN 0 0 0 *16* 0 0 0 > ;"-" + %<5BY7MASKGEN 0 0 0 0 0 *14* *14*> ;"." + %<5BY7MASKGEN 0 1 2 4 *10* *20* 0> ;"/" + %<5BY7MASKGEN *16* *21* *23* *25* *31* *21* *16*> ;"0" + %<5BY7MASKGEN 4 *14* 4 4 4 4 *16*> ;"1" + %<5BY7MASKGEN *16* *21* 1 2 4 *10* *37*> ;"2" + %<5BY7MASKGEN *16* *21* 1 6 1 *21* *16* > ;"3" + %<5BY7MASKGEN 2 6 *12* *37* 2 2 2 > ;"4 . . . *OK* BEELER?" + %<5BY7MASKGEN *37* *20* *36* 1 1 *21* *16* > ;"5" + %<5BY7MASKGEN *16* *21* *20* *36* *21* *21* *16* > ;"6" + %<5BY7MASKGEN *37* 1 2 4 *10* *20* *20* > ;"7" + %<5BY7MASKGEN *16* *21* *16* *21* *21* *21* *16* > ;"8" + %<5BY7MASKGEN *16* *21* *21* *17* 1 *21* *16* > ;"9" + %<5BY7MASKGEN 0 *14* *14* 0 *14* *14* 0 > ;":" + %<5BY7MASKGEN 0 *14* *14* 0 *14* 4 *10* > ;" ;" + %<5BY7MASKGEN 0 2 4 *10* 4 2 0 > ;"<" + %<5BY7MASKGEN 0 0 *37* 0 *37* 0 0 > ;"=" + %<5BY7MASKGEN 0 *10* 4 2 4 *10* 0 > ;">" + %<5BY7MASKGEN *16* *21* 2 4 4 0 4 > ;"?" + %<5BY7MASKGEN 0 *16* *33* *25* *33* *16* 0 > ;"@" + %<5BY7MASKGEN *16* *21* *21* *37* *21* *21* *21* > ;"A" + %<5BY7MASKGEN *36* *21* *21* *36* *21* *21* *36* > ;"B" + %<5BY7MASKGEN *16* *21* *20* *20* *20* *21* *16* > ;"C" + %<5BY7MASKGEN *36* *21* *21* *21* *21* *21* *36* > ;"D" + %<5BY7MASKGEN *37* *20* *20* *36* *20* *20* *37* > ;"E" + %<5BY7MASKGEN *37* *20* *20* *36* *20* *20* *20* > ;"F" + %<5BY7MASKGEN *16* *21* *20* *20* *23* *21* *16* > ;"G" + %<5BY7MASKGEN *21* *21* *21* *37* *21* *21* *21* > ;"H" + %<5BY7MASKGEN *16* 4 4 4 4 4 *16* > ;"I" + %<5BY7MASKGEN 7 1 1 1 1 *21* *16* > ;"J" + %<5BY7MASKGEN *21* *22* *24* *34* *22* *21* *21* > ;"K" + %<5BY7MASKGEN *20* *20* *20* *20* *20* *20* *37* > ;"L" + %<5BY7MASKGEN *21* *33* *25* *21* *21* *21* *21* > ;"M" + %<5BY7MASKGEN *21* *21* *31* *25* *23* *21* *21* > ;"N" + %<5BY7MASKGEN *16* *21* *21* *21* *21* *21* *16* > ;"O" + %<5BY7MASKGEN *36* *21* *21* *36* *20* *20* *20* > ;"P" + %<5BY7MASKGEN *16* *21* *21* *21* *25* *22* *15* > ;"Q" + %<5BY7MASKGEN *36* *21* *21* *36* *21* *21* *21* > ;"R" + %<5BY7MASKGEN *16* *21* *20* *16* 1 *21* *16* > ;"S" + %<5BY7MASKGEN *37* 4 4 4 4 4 4 > ;"T" + %<5BY7MASKGEN *21* *21* *21* *21* *21* *21* *16* > ;"U" + %<5BY7MASKGEN *21* *21* *21* *21* *21* *12* 4 > ;"V" + %<5BY7MASKGEN *21* *21* *21* *21* *21* *25* *12* > ;"W" + %<5BY7MASKGEN *21* *21* *12* 4 *12* *21* *21* > ;"X" + %<5BY7MASKGEN *21* *21* *12* 4 4 4 4 > ;"Y" + %<5BY7MASKGEN *37* 2 4 *16* 4 *10* *37* > ;"Z" + %<5BY7MASKGEN 6 4 4 4 4 4 6 > ;"OPEN SQUARE BRACKET" + %<5BY7MASKGEN 0 *20* *10* 4 2 1 0 > ;"BACKSLASH" + %<5BY7MASKGEN *14* 4 4 4 4 4 *14* > ;"CLOSE SQUARE BRACKET" + %<5BY7MASKGEN 4 *16* *25* 4 4 4 4 > ;"UPARROW" + %<5BY7MASKGEN 0 4 *10* *37* *10* 4 0 > ;"LEFT ARROW" +%<5BY7MASKGEN 8 4 2 0 0 0 0> ;"`" +%<5BY7MASKGEN 0 0 14 18 18 19 13> ;"a" +%<5BY7MASKGEN 16 16 30 17 17 17 30> +%<5BY7MASKGEN 0 0 15 16 16 16 15> +%<5BY7MASKGEN 1 1 15 17 17 17 15> +%<5BY7MASKGEN 0 0 14 17 23 16 15> +%<5BY7MASKGEN 6 9 8 28 8 8 8> ;"f" +%<5BY7MASKGEN 0 0 13 19 13 1 14> +%<5BY7MASKGEN 16 16 30 17 17 17 17> +%<5BY7MASKGEN 4 0 4 4 4 4 4> +%<5BY7MASKGEN 2 0 2 2 2 18 12> ;"j" +%<5BY7MASKGEN 16 16 17 18 20 26 17> +%<5BY7MASKGEN 4 4 4 4 4 4 14> +%<5BY7MASKGEN 0 0 27 21 17 17 17> ;"m" +%<5BY7MASKGEN 0 0 22 25 17 17 17> +%<5BY7MASKGEN 0 0 14 17 17 17 14> +%<5BY7MASKGEN 0 0 22 25 22 16 16> +%<5BY7MASKGEN 0 0 12 18 14 2 3> +%<5BY7MASKGEN 0 0 22 25 16 16 16> ;"r" +%<5BY7MASKGEN 0 0 14 16 14 1 14> +%<5BY7MASKGEN 8 8 28 8 8 9 6> +%<5BY7MASKGEN 0 0 17 17 17 19 13> ;"u" +%<5BY7MASKGEN 0 0 17 17 17 10 4> +%<5BY7MASKGEN 0 0 17 17 17 21 10> +%<5BY7MASKGEN 0 0 17 10 4 10 17> +%<5BY7MASKGEN 0 0 17 9 6 4 24> ;"y" +%<5BY7MASKGEN 0 0 31 2 4 8 31> ;"z" +%<5BY7MASKGEN 3 4 4 8 4 4 3> ;"CURLY OPEN BRACKET" +%<5BY7MASKGEN 0 4 4 4 4 4 0> ;"VERTICAL STROKE" +%<5BY7MASKGEN 24 4 4 2 4 4 24> ;"CURLY CLOSE BRACKET" +%<5BY7MASKGEN 0 8 21 2 0 0 0> ;"TILDE (SQUIGGLE)" +%<5BY7MASKGEN 31 31 31 31 31 31 31> ;"RUBOUT" +>> + +<ENDPACKAGE> diff --git a/src/mprog/bindum.ujm003 b/src/mprog/bindum.ujm003 new file mode 100644 index 00000000..72c96975 --- /dev/null +++ b/src/mprog/bindum.ujm003 @@ -0,0 +1,22 @@ +<BLOCK (<ROOT>)> +U +<ENDBLOCK> +<BLOCK (<MOBLIST U 101>)> +BINARY-DUMP +<ENDBLOCK!-> +<DEFINE BINARY-DUMP!-U (STR NAMS "AUX" + (OBLIST ()) + (OUTCHAN <OPEN "PRINTB" .STR>) + ) +#DECL ((NAMS) <OR ATOM <LIST ATOM [REST ATOM]>> + (STR) STRING + (OBLIST) <SPECIAL ANY>) +<COND (<TYPE? .NAMS ATOM><SET NAMS (.NAMS)>)> +<MAPF <> + <FUNCTION (A) + <PRINT <FORM SETG .A <GVAL .A>> .OUTCHAN>> + .NAMS> +<CLOSE .OUTCHAN> +T> + +  \ No newline at end of file diff --git a/src/mprog/blt.1 b/src/mprog/blt.1 new file mode 100644 index 00000000..24a07829 --- /dev/null +++ b/src/mprog/blt.1 @@ -0,0 +1,17 @@ + <TITLE UBLT> + ; "TAKES TO-UVEC FRM-UVEC LEN AND BLT'S FIRST LEN OF FRM-UVEC TO TO-UVEC." + <DECLARE ("VALUE" UVECTOR UVECTOR UVECTOR FIX)> + <MOVE A* 1(AB)> ; "GET POINTERS TO UVECTORS" + <MOVE B* 3(AB)> + <HRL B* B> ; "SET UP BLT POINTER" + <HRR B* A> + <MOVE C* 5(AB)> ; "AND END-OF-BLT POINTER, USING LENGTH" + <ADD C* A> + <SUBI C* 1> + <BLT B* (C)> ; "DO THE MOVE, AND RETURN THE TO-UVEC AS RESULT" + <MOVE A* (AB)> + <MOVE B* 1(AB)> + <JRST FINIS> + + + diff --git a/src/mprog/buf.ueb135 b/src/mprog/buf.ueb135 new file mode 100644 index 00000000..426e4d75 --- /dev/null +++ b/src/mprog/buf.ueb135 @@ -0,0 +1,1075 @@ + +<PACKAGE "BUF"> + +"A buffer is a VECTOR of two STRINGs. The first points to the buffer, +the second to the first unused character in the buffer. + +Entry points: + +<ADDCHR buffer character> + adds the character to the buffer. + +<ADDCRLF buffer character> + adds a line-feed to the buffer after the character. (used in CHRTABLE). + +<ADDFILE buffer channel --count--> + inserts 'count' characters from file, or whole thing. + +<ADDSTRING buffer string --count--> + inserts 'count' characters or the whole string. + +<ADD-OFFSET-STRING buffer string string> + inserts the first string into the buffer, with the second + string added as a prefix of each non-empty line. + +BPRMPT1 +BPRMPT2 + Manifest offsets for accessing prompts in buffer. + +BUF-BITS + A MACRO for playing with the BBITS field. Takes a buffer, a + bit, and (optionally) an atom or false. If only two arguments, + returns the current value (atom or false); if three, sets/clears + the specified bit. + +BUF-ECHO-FLAG + If FALSE, echoes happen as usual. If a fix, instead of echoing + we erase <fix> characters, and setg buf-echo-flag to false. If + atom or applicable, apply to the character typed, the buffer, + and outchan. + +<BUFCLEAR buffer> + clears buffer. + +<BUFGROW buffer count> + grows buffer by count characters. + +<BUFLENGTH buffer> + return number of characters in buffer. + +<BUFMAKE count \"OPT\" prompt1 prompt2> + makes a buffer of length count, with prompts of prompt1 and prompt2. + +<BUFPRINT buffer --channel-- prompt? redisp?> + efficient buffer printer of buffer to (optional) channel. The + characters in the buffer are printed, without regard to MUDDLE + escape characteristics (i.e., double-quote will not be preceded + by a back-slash). For printing as a string, see 'BUFSPRINT'. + +BUFSIZE + free variable, amount to grow by if not given. + +<BUFSPRINT buffer --channel--> + prints a buffer on an (optional) channel (default .OUTCHAN). + The function prints the buffer as a string, 'escaping' the + characters double-quote and back-slash so that the the string + may be read correctly as a MUDDLE object. + +<BUFTECO buffer character> + function which applies TECO to a buffer. May be used in + CHRTABLE, and is default control-E function. + +<BUFTOS buffer> + uses EXTRACT to generate a string whose length is the number of + characters in the buffer. + +CHRTABLE + initial table, + ESC___ Returns from GETSTR (via GETSTRACT) + ^Q Quotes the next character + ^X Deletes current line + ^W Deletes word back to separator + ^@ Clears buffer + ^E Edit the buffer + ^F Inserts a file into the buffer + ^P Undo the last major deletion + ^T Re-enter TECO without munging its buffer + ^D Displays the buffer on next line + ^L Clears the screen and displays the buffer + +<DELCHR buffer character> + returns deleted character or FALSE. Applies <GVAL DELPRINT> to + the character, unless DELPRINT is false. Initial GVAL of DELPRINT + is IMDEL. + +<DELPRINT character> + GVAL applied to chars when deleted, unless GVAL is FALSE. + +<DELTOCH buffer string \"OPT\" <or false string>> + deletes characters from buffer till member of string is deleted. + Returns # of chrs deleted. If optional string present, prints + it (followed by crlf) rather than echoing deleted characters on + non-display. + +<DEL-TO-EOL> + sends delete-to-end-of-line stream (ctl-P L) to system. + +DISPLAY? + T if console is an erasable display. + +<DLINE buffer> + deletes the current line from the buffer. The separator + (initially ,LINEBRKS contains CR__ only) is not deleted. + +<DWORD buffer> + deletes one 'word' in the buffer back from current point + till a member of ,WORDBRKS is encountered. The separator is + not deleted. + +<FILEINP> + asks for file names, inputs the file. + +FORMATEFFS + string of format-effector chars. + +<GET-CPOS \"OPT\" channel> + Reads the cursor position on the channel (it better be open + on something where that's meaningful) and updates the channel's + position indicators. Used internally after SIOTs and such, which + don't change the data stored in the channel. + +<GETSTR buffer --table--> + reads a string from the tty into the buffer (arg1). The + processing for characters is defined by a dispatch table + (default .CHRTABLE). This argument is a structured object of + pairs. The first element is a character, the second an + applicable object which is applied to the buffer and the + character, whenever that character is seen. GETSTR sets up a + special activation which is bound to the atom GETSTRACT. This + activation marks the repeat loop, and thus may be returned from + to get out of GETSTR. GETSTR returns the buffer. + +GETSTRACT + GETSTR's activation, special. + +<HPOS-BUF buffer> + takes a BUFFER and does a horizontal position to the calculated + end of the last line. For deletions, etc. + +<IBUFCLEAR buffer character> + clears the buffer and does '<BUFPRINT ..>. + +<IBUFPRINT buffer character> + clears screen if character is Form-feed. Then prints the buffer. + +<IDELCHR buffer character> + deletes on character and returns it, or FALSE if buffer empty. + (Used in CHRTABLE). + +<IMDEL> + knows how to delete chars from display. Uses GVAL of DISPLAY? to + determine whether applicable. + +<INIT> + initializes defaults, setgs DISPLAY?. + +<IOT \"OPTIONAL\" word channel character> + Does IOT on channel (default ,INCHAN) with bits as given by word. + Character is only useful on output. Returns character + +<ISDISPLAY?> + returns T if console is an erasable display. + +LINEBRKS + +<MY-TTY-OFF> + see 'TTY ORDER' on .INFO.; also NDR;TTY-ON (et al). + +<QUOTECHR buffer character> + quotes the next character by calling IOT, thus escaping the + normal dispatch through GETSTR. The function assumes the TTY + environment has been set up correctly. (see MY-TTY-OFF). + +<RCPOS \"OPT\" channel> + Returns first value of RCPOS on channel (default ,INCHAN). + +REENTER-TECO-CHAR + character that means reenter TECO without munging its buffer. + +<SIOT string \"OPT\" word channel fix> + Does SIOT on channel of string, with control bits as set by + word. Returns string, probably rested. Interruptable during + SIOT. Fix is # chars to print, default to entire string. + +TECO-PROGRAM + a string which is what BUFTECO will use to try to load the + inferior TECO. + +<TTY-GET uv \"OPT\" channel> + Does TTY-GET into supplied uv. + +<TTY-SET uv \"OPT\" channel> + Does TTY-SET from supplied uv. + +<TTY-POS character fix> + takes a char (H or V) and a FIX, does ctl-P to set cursor + position in system. + +TTY1 +TTY2 + these are words which MY-TTY-OFF uses too pass to + TTY-SET. TTY-SET sets the way the system handles + characters for you -- echoing, interrupting and + activating may be specified for classes of characters. + each class has a field in either TTY1 or TTY2. + +<UNKILL buffer chr> + Undoes the last `major' deletion (word or more) from the buffer. + If nothing there, no effect. CHR is ignored. + +WORDBRKS + strings of breaks to be used in deletion +" + +\ + +<ENTRY ADDCHR + ADDCRLF + ADDFILE + ADDSTRING + ADD-OFFSET-STRING + BPRMPT1 + BPRMPT2 + BUF-BITS + BUF-BIT-PROMPT + BUF-CTL-G? + BUF-CTL-S? + BUF-ECHO-FLAG + BUFCLEAR + BUFFER + BUFGROW + BUFLENGTH + BUFMAKE + BUFPRINT + BUFSIZE + BUFSPRINT + BUFTECO + BUFTOS + CHRTABLE + DELCHR + DELPRINT + DELTOCH + DEL-TO-EOL + DISPLAY? + DLINE + DWORD + FILEINP + FORMATEFFS + GET-CPOS + GETSTR + GETSTRACT + HPOS-BUF + IBUFCLEAR + IBUFPRINT + IDELCHR + IMDEL + INIT + IOT + ISDISPLAY? + LINEBRKS + LINESTARVE + MY-TTY-OFF + QUOTECHR + RCPOS + REENTER-TECO-CHAR + SIOT + TECO-PROGRAM + TTY-GET + TTY-SET + TTY-POS + TTY1 + TTY2 + UNKILL + WORDBRKS> + +<USE "MUDTEC" "INFERIOR"> + +<FLOAD "MBPROG;BUFCRF NBIN"> + +<NEWTYPE BUFFER + VECTOR + '<<PRIMTYPE VECTOR> [4 STRING] FIX <PRIMTYPE WORD> STRING FIX>> + +;"some buffer offsets" + +<SETG BPRMPT1 3> + +<SETG BPRMPT2 4> + +<SETG INITIAL-HPOS 5> + +<SETG BBITS 6> + +<SETG BSAVED 7> + +<SETG BSAVED-MAX 8> + +<MANIFEST BPRMPT1 BPRMPT2 INITIAL-HPOS BBITS BSAVED BSAVED-MAX> + +"If this bit is on, print a new prompt on every cr" + +<SETG BUF-BIT-PROMPT 0> + +<MANIFEST BUF-BIT-PROMPT> + +<SETG TJDIS 2048> + +<MANIFEST TJDIS> + +;"CONTROL BIT FOR IOTS" + +<SETG REENTER-TECO-CHAR !\> + +;"for BUFTECO only" + +<SETG FORMATEFFS <MAPF ,STRING ,ASCII [13 10 14 9 32 8]>> + +<SETG WORDBRKS <STRING <ASCII 13> <ASCII 10> " , ;:.">> + +<SETG LINEBRKS <STRING <ASCII 13> <ASCII 10>>> + +<SETG BUFSIZE 200> + +<SETG BUF-ECHO-FLAG <>> + +<GDECL (INCHAN) + CHANNEL + (DISPLAY?) + <OR ATOM FALSE> + (FORMATEFFS) + STRING + (BUFSIZE) + FIX + (OLD-TTY) + UVECTOR> + +;"INITIAL LENGTH TO GROW BUFFERS" + +<DEFINE ADDCHR (BUFFER CHR) + #DECL ((CHR) CHARACTER (VALUE BUFFER) BUFFER) + <COND (<EMPTY? <2 .BUFFER>> ;"NO MORE ROOM" + <BUFGROW .BUFFER>)> + <PUT .BUFFER 2 <REST <PUT <2 .BUFFER> 1 .CHR>>>> + +<DEFMAC BUF-BITS ('BUF 'BIT "OPTIONAL" 'NEW) + <FORM BIND + ((B .BUF) (BIT .BIT)) + #DECL ((B) BUFFER (BIT) <PRIMTYPE WORD>) + <COND (<ASSIGNED? NEW> + <FORM PUT + <FORM LVAL B> + ,BBITS + <FORM PUTBITS + <FORM BBITS <FORM LVAL B>> + <FORM BITS 1 <FORM LVAL BIT>> + <FORM COND (.NEW 1) (0)>>>) + (T + <FORM 1? + <FORM CHTYPE + <FORM GETBITS + <FORM BBITS <FORM LVAL B>> + <FORM BITS 1 <FORM LVAL BIT>>> + FIX>>)>>> + +<DEFINE BUFGROW (BUFFER + "OPTIONAL" (BUFSIZE ,BUFSIZE) + "AUX" (STR <1 .BUFFER>) (PTR <2 .BUFFER>) + (LSTR <- <LENGTH .STR> <LENGTH .PTR>>)) + #DECL ((VALUE BUFFER) BUFFER (STR PTR) STRING (BUFSIZE LSTR) FIX) + <SET PTR + <REST <SET STR + <SUBSTRUC .STR + 0 + .LSTR + <ISTRING <+ .BUFSIZE <LENGTH .STR>>>>> + .LSTR>> + <PUT .BUFFER 1 .STR> + <PUT .BUFFER 2 .PTR>> + +<DEFINE INIT () + #DECL ((VALUE) ATOM) + <SETG DISPLAY? <ISDISPLAY?>> + <SETG DELPRINT ,IMDEL> + T> + +<DEFINE BUFTOS (BUF) + #DECL ((BUF) BUFFER (VALUE) STRING) + <SUBSTRUC <1 .BUF> 0 <- <LENGTH <1 .BUF>> <LENGTH <2 .BUF>>>>> + +<DEFINE DELCHR (BUF "AUX" (LSTR <LENGTH <1 .BUF>>) (PTR <2 .BUF>)) + #DECL ((VALUE) <OR FALSE CHARACTER> (BUF) BUFFER (LSTR) FIX + (PTR) STRING) + <COND (<NOT <0? <- <LENGTH .PTR> .LSTR>>> + <PUT .BUF 2 <SET PTR <BACK .PTR>>> + <COND (,DELPRINT ;"IF TRUE, APPLY IT" + <APPLY ,DELPRINT .BUF <1 .PTR>>)> + <COND (<AND <==? <1 .PTR> <ASCII 10> ;"Char L.F."> + <L? <LENGTH .PTR> .LSTR> + <==? <1 <BACK .PTR>> <ASCII 13> ;"Char C.R.">> + <PUT .BUF 2 <SET PTR <BACK .PTR>>> + <COND (,DELPRINT <APPLY ,DELPRINT .BUF <1 .PTR>>)>)> + <1 .PTR>)> ;"RETURNS DELETED CHR"> + +<DEFINE BUFPRINT (BUF + "OPTIONAL" (CH .OUTCHAN) (PROMPT? T) (REDISP? <>) + "AUX" (STR <1 .BUF>) (LL <BUFLENGTH .BUF>) + (TTY? <=? <9 .CH> "TTY">)) + #DECL ((BUF) BUFFER (STR) STRING (VALUE LL) FIX (CH) CHANNEL + (TTY? REDISP? PROMPT?) <OR ATOM FALSE>) + <COND (.PROMPT? + <DOSPRINT <BPRMPT1 .BUF> .CH T> + <COND (<AND <NOT .REDISP?> <G? .LL <- <13 .CH> <14 .CH>>>> + <DOSPRINT "-continued-" .CH>) + (<SET REDISP? T>)> + <DOSPRINT <BPRMPT2 .BUF> .CH>) + (<SET REDISP? T>)> + <COND (.TTY? <GET-CPOS .CH> <PUT .BUF ,INITIAL-HPOS <14 .CH>>)> + <COND (.REDISP? + <COND (<AND .PROMPT? .TTY? <BUF-BITS .BUF ,BUF-BIT-PROMPT>> + <REPEAT ((IS <1 .BUF>) (MINL <LENGTH <2 .BUF>>) NS) + #DECL ((IS) STRING (MINL) FIX (NS) <OR STRING FALSE>) + <COND (<AND <SET NS <MEMBER " +" .IS>> + <G? <LENGTH .NS> .MINL>> + <DOSPRINT .IS + .CH + <> + <+ 2 <- <LENGTH .IS> <LENGTH .NS>>>> + <SET IS <REST .NS 2>> + <DOSPRINT <BPRMPT1 .BUF> .CH> + <DOSPRINT <BPRMPT2 .BUF> .CH>) + (<DOSPRINT .IS .CH <> <- <LENGTH .IS> .MINL>> + <RETURN>)>>) + (<DOSPRINT .STR .CH <> .LL>)>)> + .LL> + +;"PRINT USING SIOT IF POSSIBLE." + +<DEFINE DOSPRINT (STR CH + "OPTIONAL" (UPDATE? <>) (LEN <LENGTH .STR>) + "AUX" TEMP) + #DECL ((STR) STRING (UPDATE?) <OR ATOM FALSE> (LEN) FIX) + <COND (<OR <NOT <TYPE? .CH CHANNEL>> <N=? <9 .CH> "TTY">> + <PRINTSTRING .STR .CH .LEN>) + (T <SIOT .STR 0 .CH .LEN> <COND (.UPDATE? <GET-CPOS .CH>)>)> + .STR> + +<DEFINE GET-CPOS ("OPTIONAL" (CH .OUTCHAN) "AUX" TEMP) + #DECL ((CH) CHANNEL) + <SET TEMP <RCPOS .CH>> + <PUT .CH 14 <CHTYPE <GETBITS .TEMP <BITS 18 0>> FIX>> + <PUT .CH 16 <CHTYPE <GETBITS .TEMP <BITS 18 18>> FIX>>> + +<DEFINE BUFSPRINT (BUF + "OPTIONAL" (OUTCHAN .OUTCHAN) + "AUX" (STR <1 .BUF>) (L <LENGTH <2 .BUF>>) SS LL + (ESCSTR "\\\"") (ESCESC "\\\\")) + #DECL ((BUF VALUE) BUFFER (L LL) FIX (ESCSTR ESCESC STR) STRING + (SS) <OR STRING FALSE> (OUTCHAN) <SPECIAL CHANNEL>) + <PRINC !\"> ;"start string" + <PROG () + <COND (<0? <SET LL <- <LENGTH .STR> .L>>> T) + (<SET SS <FIRST-OF .ESCSTR .STR .LL>> ;"find losers" + <PRINTSTRING .STR .OUTCHAN <- <LENGTH .STR> <LENGTH .SS>>> + <PRINC <COND (<==? <1 .SS> !\\\> .ESCESC) (ELSE .ESCSTR)>> + <SET STR <REST .SS>> + <AGAIN>) ;"go look some more" + (ELSE <PRINTSTRING .STR .OUTCHAN .LL>)>> + <PRINC !\"> ;"terminate string" + .BUF> + +<DEFINE FIRST-OF (ES S "OPTIONAL" (L <LENGTH .S>)) + #DECL ((ES S) STRING (L) FIX (VALUE) <OR STRING FALSE>) + <MAPR <> + <FUNCTION (C) + #DECL ((C) STRING) + <COND (<MEMQ <1 .C> .ES> <MAPLEAVE .C>) + (<0? <SET L <- .L 1>>> <MAPLEAVE <>>)>> + .S>> + +<DEFINE BUFLENGTH (BUF) + #DECL ((BUF) BUFFER (VALUE) FIX) + <- <LENGTH <1 .BUF>> <LENGTH <2 .BUF>>>> + +<DEFINE BUFCLEAR (BUF) #DECL ((BUF VALUE) BUFFER) <PUT .BUF 2 <1 .BUF>>> + +<DEFINE DELTOCH (BUF BREAKS + "OPTIONAL" (LONG? <>) + "AUX" DELCH (COUNT 0) (ST <2 .BUF>) (MAXC <BUFLENGTH .BUF>) + (NBREAKFLAG <>) C (DISPLAY? ,DISPLAY?) CHAN + RETVAL (SAVE-STRING <2 .BUF>)) + #DECL ((BUF) BUFFER (SAVE-STRING BREAKS ST) STRING + (DELCH) <OR FALSE CHARACTER> + (NBREAKFLAG) <OR FALSE ATOM> (C) CHARACTER + (LONG?) <OR STRING FALSE> (RETVAL COUNT MAXC VALUE) FIX + (DISPLAY?) <OR ATOM FALSE> (CHAN) CHANNEL) + <SET RETVAL + <REPEAT () + <COND (<0? .MAXC> + <PUT .BUF 2 .ST> + <COND (.DISPLAY? <HPOS-BUF .BUF> <DEL-TO-EOL>) + (.LONG? + <SIOT .LONG? 0 <SET CHAN .OUTCHAN>> + <CRLF .CHAN>)> + <RETURN .COUNT>)> + <SET C <1 <SET ST <BACK .ST>>>> ;"get last char" + <COND (<MEMQ .C .BREAKS> + <COND (.NBREAKFLAG ;"seen any non-breaks?" + <PUT .BUF 2 <REST .ST>> + <COND (.DISPLAY? <HPOS-BUF .BUF> <DEL-TO-EOL>) + (.LONG? + <SIOT .LONG? 0 <SET CHAN .OUTCHAN>> + <CRLF .CHAN>)> + <RETURN .COUNT>)>) + (<SET NBREAKFLAG T>)> ;"non-break" + <COND (<NOT .DISPLAY?> + <COND (<AND <NOT .LONG?> ,DELPRINT> + <PUT .BUF 2 .ST> + <APPLY ,DELPRINT .BUF .C>)>) + (<==? .C <ASCII 10>> ;"linefeed?" + <COND (<OR <1? .MAXC> <==? <1 <BACK .ST>> <ASCII 13>>> + <TTY-POS !\H 0>) + (<PUT .BUF 2 .ST> <HPOS-BUF .BUF>)> + <DEL-TO-EOL> + <LINESTARVE>) + (<==? .C <ASCII 13>> ;"CR?" + <PUT .BUF 2 .ST> <HPOS-BUF .BUF>)> + <SET COUNT <+ .COUNT 1>> + <SET MAXC <- .MAXC 1>>>> + <SAVE-KILL .BUF .SAVE-STRING> + .RETVAL> + +<DEFINE SAVE-KILL (BUF OLDST "AUX" LEN N) + #DECL ((BUF) BUFFER (OLDST) <OR STRING FALSE> (LEN N) FIX) + <COND (.OLDST + <SET LEN <- <LENGTH <2 .BUF>> <LENGTH .OLDST>>> + <COND (<G? .LEN <BSAVED-MAX .BUF>> + <PUT .BUF ,BSAVED-MAX <SET N <+ .LEN 20>>> + <PUT .BUF ,BSAVED <REST <ISTRING .N> .N>>)> + <PUT .BUF ,BSAVED + <SUBSTRUC <2 .BUF> 0 .LEN + <BACK <REST <BSAVED .BUF> <LENGTH <BSAVED .BUF>>> + .LEN>>>) + (T + <PUT .BUF ,BSAVED <REST <BSAVED .BUF> <LENGTH <BSAVED .BUF>>>>)>> + +<DEFINE UNKILL (BUF CHR) + #DECL ((BUF) BUFFER (CHR) CHARACTER) + <PADDSTRING .BUF <BSAVED .BUF>> + <PUT .BUF ,BSAVED <REST <BSAVED .BUF> <LENGTH <BSAVED .BUF>>>>> + +<SETG TECO-PROGRAM "T"> + +<DEFINE BUFTECO (BF + "OPTIONAL" CHR + "AUX" (OUTCHAN .OUTCHAN) R S TEC (OKAY '![*BREAK-16 *VALUE!]) + (REENTER-TECO-CHAR ,REENTER-TECO-CHAR)) + #DECL ((OKAY) <UVECTOR [REST ATOM]> (OUTCHAN) CHANNEL (BF VALUE) BUFFER + (R) ANY (S) FIX (TEC) INF (CHR REENTER-TECO-CHAR) CHARACTER) + <COND + (<AND <OR <AND <GASSIGNED? TECO> <TYPE? ,TECO INF> <SET TEC ,TECO>> + <AND <PROG () + <PRINC "C"> + <DOSPRINT "You are starting " .OUTCHAN> + <DOSPRINT ,TECO-PROGRAM .OUTCHAN> + <DOSPRINT " for the first time. If your INIT +is unconventional, you may have to exit with ^C, ^K +or their equivalents (not ^Z!) after it begins listening. +" + .OUTCHAN T> + <SET R <TECO-LOAD ,TECO-PROGRAM>> + <AND <TYPE? .R INF> <SET TEC .R>>> + <SET R <INF-START .TEC>> + <PROG () + <COND (<AND <TYPE? .R LIST> <MEMQ <1 .R> .OKAY>>) + (<PRINC "C"> + <DOSPRINT +"Control-Z before ready? " .OUTCHAN> + <DOSPRINT ,TECO-PROGRAM .OUTCHAN> + <DOSPRINT " edit aborted. +" + .OUTCHAN T> + <TECO-KILL> + <>)>>>> + <OR <==? .CHR .REENTER-TECO-CHAR> + <SET R <TECO-ALLOC <BUFLENGTH .BF>>>>> + <COND (<N==? .CHR .REENTER-TECO-CHAR> + <TECO-OPEN .TEC> + <BUFPRINT .BF <INF-UCHAN .TEC> <>> + <TECO-CLOSE .TEC>)> + <PROG () + <SET R <INF-CONTIN .TEC>> + <COND (<AND <TYPE? .R LIST> <MEMQ <1 .R> .OKAY>> + <PRINC "C"> + <PRINC "Back to "> + <PRINC <JNAME>> + <PRINC !\:> + <CRLF> + <COND (<0? <SET S <TECO-BUFFER-SIZE T .TEC>>> + <PRINC "C"> + <DOSPRINT +"An empty string was returned from " .OUTCHAN> + <DOSPRINT ,TECO-PROGRAM .OUTCHAN> + <DOSPRINT ". +The buffer has been left unchanged. +" + .OUTCHAN T>) + (ELSE + <COND (<G? .S <BUFLENGTH .BF>> + <BUFGROW .BF <- .S <BUFLENGTH .BF>>>)> + <BUFCLEAR .BF> + <SAVE-KILL .BF <>> + <TECO-READ-BUFFER <1 .BF> T .TEC> + <PUT .BF 2 <REST <1 .BF> .S>> + <PRINT "DONE"> + <TERPRI>)>) + (<==? .R ^Z-TYPED> + <PRINC "C"> + <DOSPRINT +"Please return from " .OUTCHAN> + <DOSPRINT ,TECO-PROGRAM .OUTCHAN> + <DOSPRINT " with ^C, ^K, or their equivalents. +Please re-enter with ^" .OUTCHAN T> + <PRINC <ASCII <+ <ASCII .REENTER-TECO-CHAR> 64>>> + <DOSPRINT ". +You could get yourself into a bad state. +" .OUTCHAN T>) + (ELSE + <PRINC "C"> + <DOSPRINT "An error occurred in returning from " .OUTCHAN> + <DOSPRINT ,TECO-PROGRAM .OUTCHAN> + <DOSPRINT ": " .OUTCHAN T> + <INF-RESULT .TEC .R>)>>) + (ELSE + <CRLF> + <PRINC ,TECO-PROGRAM> + <PRINC " was not able to start up successfully: "> + <PRIN1 .R>)> + <AND .TEC + <OR <=? .R '(*BREAK-16 :KILL)> + <AND <TYPE? .R LIST> + <==? <LENGTH .R> 2> + <==? <1 .R> *VALUE> + <TYPE? <2 .R> STRING> + <MEMBER ":KILL" <2 .R>>>> + <TECO-KILL .TEC>> + <MY-TTY-OFF> + .BF> + +;"CHARACTER GROUP MODES FOR USE IN GETSTRACT" + +<SETG TTY1 #WORD *020202020202*> + +;"DON'T ECHO CTL CHARS" + +<SETG TTY2 #WORD *030202020202*> + +<SETG TUV <IUVECTOR 3 #WORD *000000000000*>> + +<DEFINE MY-TTY-OFF ("OPTIONAL" (W1 ,TTY1) (W2 ,TTY2)) + #DECL ((W1 W2) WORD) + <TTY-SET <PUT <PUT <TTY-GET ,TUV> 1 .W1> 2 .W2>>> + +<DEFINE ERRFCN (FRM "TUPLE" ANY "AUX" ERRVAL OTTY) + #DECL ((FRM) FRAME (OTTY) <UVECTOR [REST WORD]>) + <COND (<AND <BOUND? GETSTRACT> <LEGAL? .GETSTRACT>> + ;"HE MAY HAVE ERRETED" + <SET OTTY <TTY-GET <IUVECTOR 3 #WORD *000000000000*>>> + ;"REMEMBER TTY STATUS" + <AND <ASSIGNED? OLD-TTY> <TTY-SET .OLD-TTY>> ;"RESETS TTY" + <OFF ,GLOBL-GETSTR-HAND> ;"OFFS THIS FCN" + <INT-LEVEL 0> + <SET ERRVAL <ERROR !.ANY>> ;"RE-ENTERS ERROR" + <HANDLER <GET ERROR!-INTERRUPTS INTERRUPT> ,GLOBL-GETSTR-HAND> + ;"IF ERRET W/ARG" + <TTY-SET .OTTY> ;"RESET TTY STATUS" + <ERRET .ERRVAL .FRM> ;"IF HE ERRET'S ANYTHING") + (ELSE ;"GROVEL AND DELETE THIS HANDLER")>> + +<SETG BUF-CTL-G? T> +<SETG BUF-CTL-S? T> +<GDECL (BUF-CTL-G? BUF-CTL-S?) <OR ATOM FALSE>> + +<DEFINE CHARFCN (CHR CHN + "AUX" OTTY (GETSTR-HAND ,GLOBL-GETSTR-HAND) + (GETSTR-CHAND ,GLOBL-GETSTR-CHAND)) + #DECL ((CHR) CHARACTER (CHN) CHANNEL (OTTY) <UVECTOR [REST WORD]> + (VALUE) <OR DISMISS FALSE> (GETSTR-CHAND GETSTR-HAND) HANDLER) + <COND (<AND <BOUND? GETSTRACT> + <LEGAL? .GETSTRACT> + <OR <==? .CHR <ASCII 7>> + <==? .CHR !\>>> + <COND (<OR <AND ,BUF-CTL-G? <==? .CHR <ASCII 7>>> + <AND ,BUF-CTL-S? <==? .CHR !\>>> + <SET OTTY <TTY-GET <IUVECTOR 3 #WORD *000000000000*>>> + ;"REMEMBER TTY-STATUS" + <AND <ASSIGNED? OLD-TTY> + <TTY-SET .OLD-TTY>> ;"SET UP IN GETSTR" + <OFF .GETSTR-HAND> ;"ERROR HANDLER" + <OFF .GETSTR-CHAND> ;"CHAR HANDLER" + <QUITTER .CHR .CHN> ;"WANT TO REINSTATE INTERRUPTS" + <HANDLER <GET ERROR!-INTERRUPTS INTERRUPT> .GETSTR-HAND> + <HANDLER <GET ,INCHAN INTERRUPT> .GETSTR-CHAND> + <TTY-SET .OTTY>)> ;"REINSTATE TTY" + #DISMISS T)>> + +<OFF <SETG GLOBL-GETSTR-HAND <ON "ERROR" ,ERRFCN 3 0>>> + +<OFF <SETG GLOBL-GETSTR-CHAND <ON "CHAR" ,CHARFCN 7 0 ,INCHAN>>> + +\ + +<DEFINE GETSTR (BUF + "OPTIONAL" (CHRTABLE .CHRTABLE) (PROMPT1 <BPRMPT1 .BUF>) + (PROMPT2 <BPRMPT2 .BUF>) + "AUX" (OUTCHAN .OUTCHAN) GETSTR-HAND GETSTR-CHAND OLD-TTY) + #DECL ((VALUE BUF) BUFFER (CHRTABLE) <OR <LIST [REST VECTOR]> VECTOR> + (PROMPT2) STRING (OUTCHAN) CHANNEL + (GETSTR-HAND GETSTR-CHAND) HANDLER (PROMPT1) <OR STRING FALSE>) + ;"Initialize if not done yet" + <COND (<NOT <GASSIGNED? DELPRINT>> <INIT>)> + <SET OLD-TTY <TTY-GET <IUVECTOR 3 0>>> + <MY-TTY-OFF> ;"SET SYSTEM TTY-HANDLING" + <SET GETSTR-HAND + <HANDLER <GET ERROR!-INTERRUPTS INTERRUPT> ,GLOBL-GETSTR-HAND>> + <SET GETSTR-CHAND + <HANDLER <GET ,INCHAN INTERRUPT> ,GLOBL-GETSTR-CHAND>> + <COND (<AND .PROMPT1 <==? <1 .BUF> <2 .BUF>>> + <SIOT .PROMPT1 0 .OUTCHAN> + <SIOT .PROMPT2 0 .OUTCHAN> + <GET-CPOS .OUTCHAN> + <PUT .BUF ,INITIAL-HPOS <14 .OUTCHAN>>)> + <REPEAT GETSTRACT (CHR CP BEF) + #DECL ((CHR) CHARACTER (CP) <OR FALSE VECTOR> + (BEF) <OR FALSE ATOM APPLICABLE> + (GETSTRACT) <SPECIAL ACTIVATION>) + <SET CHR <IOT>> ;"Read a char" + <SET CP <SPECIAL-CHAR? .CHR .CHRTABLE>> + <COND (<SET BEF ,BUF-ECHO-FLAG> ;"Special echoing?" + <COND (<TYPE? .BEF FIX> ;"Rubout n characters" + <SETG BUF-ECHO-FLAG <>> + <IMDEL .BUF .BEF> + <COND (<NOT .CP> <IOT 0 .OUTCHAN .CHR>)>) + (T + <COND (<TYPE? .BEF ATOM> <SET BEF ,.BEF>)> + <COND (<APPLICABLE? .BEF> + <APPLY .BEF .CHR .BUF .OUTCHAN>) + (<ERROR>)>)>) + (<NOT .CP> <IOT 0 .OUTCHAN .CHR>)> + <COND (.CP <APPLY <2 .CP> .BUF .CHR>) (T <ADDCHR .BUF .CHR>)>> + <SAVE-KILL .BUF <>> + <OFF .GETSTR-CHAND> ;"GET RID OF CHAR FCN" + <OFF .GETSTR-HAND> ;"GET RID OF ERROR FCN" + <TTY-SET .OLD-TTY> ;"RESTORE TTY" + <GET-CPOS .OUTCHAN> ;"RESET CURSOR POSITION" + <OR <0? <14 .OUTCHAN>> <TERPRI>> + .BUF> + +;"Returns either false or a vector rested down to the char in question." + +<DEFINE SPECIAL-CHAR? (CHR CHRTABLE) + #DECL ((CHR) CHARACTER (CHRTABLE) <OR VECTOR <LIST [REST VECTOR]>>) + <COND (<TYPE? .CHRTABLE VECTOR> <MEMQ .CHR .CHRTABLE>) + (T + <MAPF <> + <FUNCTION (CT "AUX" TEMP) + #DECL ((CT) VECTOR) + <COND (<SET TEMP <MEMQ .CHR .CT>> + <MAPLEAVE .TEMP>)>> + .CHRTABLE>)>> + +<DEFINE DWORD (BUF CHR) + #DECL ((BUF) BUFFER (CHR) CHARACTER (VALUE) FIX) + <DELTOCH .BUF ,WORDBRKS>> + +<DEFINE DLINE (BUF CHR) + #DECL ((BUF) BUFFER (CHR) CHARACTER (VALUE) FIX) + <DELTOCH .BUF ,LINEBRKS " XXX?">> + +<DEFINE QUOTECHR (BUF CHR "AUX" TC (OUTCHAN .OUTCHAN)) + #DECL ((BUF VALUE) BUFFER (CHR) CHARACTER (TC) FIX (OUTCHAN) CHANNEL) + <IOT 0 .OUTCHAN .CHR> ;"Print the ctrl-Q" + <SET CHR <IOT>> ;"get a character" + <IMDEL .BUF 2> ;"Flush the ctrl-Q" + <IOT 0 .OUTCHAN .CHR> ;"Print the quoted character" + <ADDCHR .BUF .CHR>> + +<DEFINE ADDCRLF (BUF CHR "AUX" (OUTCHAN .OUTCHAN)) + #DECL ((BUF VALUE) BUFFER (CHR) CHARACTER (OUTCHAN) CHANNEL) + <SIOT " +" 0 .OUTCHAN> + <COND (<BUF-BITS .BUF ,BUF-BIT-PROMPT> + <SIOT <BPRMPT1 .BUF> 0 .OUTCHAN> + <SIOT <BPRMPT2 .BUF> 0 .OUTCHAN>)> + <ADDCHR .BUF !\î> + <ADDCHR .BUF !\ > ;"LF"> + +<DEFINE IDELCHR (BUF CHR) + #DECL ((BUF) BUFFER (CHR) CHARACTER (VALUE) <OR FALSE CHARACTER>) + <DELCHR .BUF>> + +<DEFINE IMDEL (BUF CHR "AUX" (OUTCHAN .OUTCHAN) (HP <14 .OUTCHAN>)) + #DECL ((OUTCHAN) CHANNEL (BUF) BUFFER (CHR VALUE) <OR CHARACTER FIX> + (HP) FIX) + <COND (<TYPE? .CHR FIX> + <COND (,DISPLAY? + <REPEAT ((C .CHR)) + #DECL ((C) FIX) + <COND (<L=? .C 0> <RETURN>)> + <SIOT "X" ,TJDIS .OUTCHAN> + <SET C <- .C 1>>>)>) + (T + <COND (,DISPLAY? + <COND (<OR <==? .CHR <ASCII 8>> ;"bs" + <==? .CHR <ASCII 9>>> ;"tab" + <HPOS-BUF .BUF> + <DEL-TO-EOL>) + (<==? .CHR <ASCII 10>> ;"lf" + <COND (<BUF-BITS .BUF ,BUF-BIT-PROMPT> + <SIOT "S" ,TJDIS .OUTCHAN> + <TTY-POS !\H 0> + <DEL-TO-EOL> + <SIOT "R" ,TJDIS .OUTCHAN>)> + <LINESTARVE>) + (<==? .CHR <ASCII 13>> <HPOS-BUF .BUF>) + (T + <SIOT "X" ,TJDIS .OUTCHAN> + <COND (<AND <L=? <ASCII .CHR> 31> + <N==? .CHR <ASCII 27> ;"Char Alt">> + <SIOT "X" ,TJDIS .OUTCHAN>)>)>) + (ELSE <PRINC .CHR>)>)> + .CHR> + +<DEFINE DEL-TO-EOL () <SIOT "L" ,TJDIS .OUTCHAN>> + +<DEFINE LINESTARVE () <SIOT "U" ,TJDIS .OUTCHAN>> + +<DEFINE IBUFCLEAR (BUF CHR) + #DECL ((BUF VALUE) BUFFER (CHR) CHARACTER) + <BUFCLEAR .BUF> + <CRLF> + <BUFPRINT .BUF> + .BUF> + +<DEFINE IBUFPRINT (BUF CHR "AUX" (OUTCHAN .OUTCHAN)) + #DECL ((OUTCHAN) CHANNEL (BUF) BUFFER (CHR) CHARACTER (VALUE) FIX) + <COND (<=? .CHR !\ > <PRINC "C">) (ELSE <PRINC .CHR>)> + ;"IF FF__, CLEAR SCREEN" + <TERPRI> + <BUFPRINT .BUF .OUTCHAN T T>> + +<SETG GARBS "H"> + +<DEFINE TTY-POS (CHR POS + "AUX" (OUTCHAN .OUTCHAN) (HP <14 .OUTCHAN>) (GARBSTR ,GARBS)) + #DECL ((VALUE POS) FIX (CHR) CHARACTER (GARBSTR) STRING + (OUTCHAN) CHANNEL (HP) FIX) + <OR <G=? .POS 0> <SET POS 0>> ;"neg pos?" + <PUT .GARBSTR 2 .CHR> + <PUT .GARBSTR 3 <ASCII <+ .POS 8>>> ;"system definition" + <SIOT .GARBSTR ,TJDIS .OUTCHAN> + <COND (<==? .CHR !\H> <PUT .OUTCHAN 14 .POS>)> + .POS> + +<DEFINE BACKS (S1 S2 "AUX" (ST <TOP .S1>)) + #DECL ((S1 S2 ST) STRING (VALUE) <OR STRING FALSE>) + <COND (<==? .ST .S1> <>) + (<REPEAT (C) + #DECL ((C) CHARACTER) + <SET C <1 <SET S1 <BACK .S1>>>> + <AND <MEMQ .C .S2> <RETURN .S1>> + <AND <==? .ST .S1> <RETURN <>>>>)>> + +<DEFINE HPOS-BUF (BUF "OPTIONAL" (SOFT-TAB T) "AUX" SCR (N 0)) + #DECL ((BUF) BUFFER (SOFT-TAB) <OR ATOM FALSE> (SCR) <OR FALSE STRING> + (N VALUE) FIX) + <SET SCR <BACKS <2 .BUF> "î">> ;"back to cr" + <COND (.SCR + <SET SCR <REST .SCR>> ;"rest cr" + <COND (<BUF-BITS .BUF ,BUF-BIT-PROMPT> + <SET N <+ <LENGTH <BPRMPT1 .BUF>> + <LENGTH <BPRMPT2 .BUF>>>>)>) + (ELSE <SET SCR <1 .BUF>> <SET N <INITIAL-HPOS .BUF>>)> ;"no cr's" + <REPEAT (C (LEN <- <LENGTH .SCR> <LENGTH <2 .BUF>>>)) + #DECL ((LEN) FIX (C) FIX) + <COND (<0? .LEN> <RETURN <TTY-POS !\H .N>>)> + <SET C <ASCII <1 .SCR>>> + <COND (<OR <AND <G=? .C 32> <N==? .C 177>> <==? .C 27>> + <SET N <+ .N 1>>) + (<==? .C 8> ;"bs" + <SET N <- .N 1>>) + (<==? .C 9> ;"tab" + <COND (.SOFT-TAB ;"simulated tabs" + <SET N <+ .N <- 8 <MOD .N 8>>>>) + (ELSE <SET N <+ .N 1>>)>) + (<==? .C 10> ;"lf -- 0 WIDTH") + (ELSE <SET N <+ .N 2>>)> + <SET LEN <- .LEN 1>> + <SET SCR <REST .SCR>>>> + +<DEFINE FILEINP (BUF + "OPTIONAL" CHR + "AUX" LST FL CH PTR (ANYTOK <>) + (BB <BUFMAKE 40 "File-name: ">) ST (OUTCHAN .OUTCHAN)) + #DECL ((VALUE BUF BB) BUFFER (CHR) CHARACTER (CH) <OR FALSE CHANNEL> + (ANYTOK) <OR FALSE ATOM> (PTR ST) STRING (LST) FIX + (FL) <OR FIX FALSE> (OUTCHAN) CHANNEL) + <PROG () + <BUFPRINT .BB .OUTCHAN <>> + <GETSTR .BB> + <COND (<0? <SET LST <BUFLENGTH .BB>>> <RETURN <SET FL <>>>)> + <MAPR <> + <FUNCTION (S) + #DECL ((S) STRING) + <COND (<L? <ASCII <1 .S>> 33> <PUT .S 1 !\ >) + (ELSE <SET ANYTOK T>)>> + <SET ST <SUBSTRUC <1 .BB> 0 .LST>>> + <COND (<SET CH <OPEN "READ" <COND (.ANYTOK .ST) (ELSE "DSK:")>>>) + (ELSE <PRINT .ST> <PRINC <1 .CH>> <TERPRI> <AGAIN>)>> + <COND (<0? .LST> <PRINC "[File-Input Aborted]">) + (<SET FL <FILE-LENGTH .CH>> + <COND (<G? .FL <LENGTH <2 .BUF>>> + <BUFGROW .BUF <- .FL <LENGTH <2 .BUF>> -100>>)> + <SET PTR <2 .BUF>> + <COND (<SET LST <READSTRING .PTR .CH .FL>> + <PUT .BUF 2 <REST .PTR .LST>>)> + <CLOSE .CH> + <PRINC "[DONE]">) + (ELSE + <COND (<0? <BUFLENGTH .BUF>> <BUFGROW .BUF>)> + <REPEAT () + <SET LST <LENGTH <SET PTR <2 .BUF>>>> + <SET FL <READSTRING .PTR .CH .LST>> + <PUT .BUF 2 <REST .PTR .FL>> + <COND (<L? .FL .LST> <RETURN <CLOSE .CH>>)> + <BUFGROW .BUF>> + <PRINC "[DONE]">)> + .BUF> + +<DEFINE PADDSTRING (BUF STR) + #DECL ((BUF) BUFFER (STR) STRING) + <ADDSTRING .BUF .STR> + <SIOT .STR> + <GET-CPOS> + .BUF> + +<DEFINE ADDSTRING (BF "TUPLE" STRS "AUX" L) + #DECL ((VALUE BF) BUFFER + (STRS) <TUPLE [REST <OR STRING CHARACTER FIX>]> (L) FIX) + <REPEAT (ST N RST?) + #DECL ((ST N) <OR CHARACTER FIX STRING> (RST?) <OR ATOM + FALSE>) + <COND (<EMPTY? .STRS> <RETURN>)> + <SET RST? <>> + <SET L <LENGTH <2 .BF>>> + <COND (<TYPE? <SET ST <1 .STRS>> STRING> + <COND (<AND <G? <LENGTH .STRS> 1> + <TYPE? <SET N <2 .STRS>> FIX> + <G=? .N 0> + <L=? .N <LENGTH .ST>>> + <SET RST? T>) + (<SET N <LENGTH .ST>>)> + <COND (<G? .N .L> <BUFGROW .BF <MAX .N ,BUFSIZE>>)> + <PUT .BF 2 <REST <SUBSTRUC .ST 0 .N <2 .BF>> .N>>) + (<TYPE? .ST CHARACTER> <ADDCHR .BF .ST>) + (<ERROR ARG-WRONG-TYPE!-ERRORS .STRS ADDSTRING>)> + <SET STRS <REST .STRS <COND (.RST? 2) (T 1)>>>> + .BF> + +<DEFINE ADD-OFFSET-STRING (BF STR OFFS + "AUX" (CLEN <LENGTH <2 .BF>>) (SLEN <LENGTH .STR>) + (OLEN <LENGTH .OFFS>)) + #DECL ((BF) BUFFER (STR OFFS) STRING (CLEN SLEN OLEN) FIX) + <SET SLEN <+ .SLEN <* .OLEN </ .SLEN 50>>>> ;"Approximate # lines" + <COND (<G? <SET CLEN <+ ,BUFSIZE <- .SLEN .CLEN>>> 0> + <BUFGROW .BF .CLEN>)> ;"Make space" + <REPEAT ((NS .STR)) + #DECL ((NS) <OR STRING FALSE>) + <COND (<EMPTY? .STR> <RETURN>) + (<SET NS <MEMBER " +" .STR>> + <COND (<N==? .NS .STR> <ADDSTRING .BF .OFFS>)> + <ADDSTRING .BF + .STR + <+ 2 <- <LENGTH .STR> <LENGTH .NS>>>> + <SET STR <REST .NS 2>>) + (T <ADDSTRING .BF .STR> <RETURN>)>> + .BF> + +<DEFINE ADDFILE (BF CH + "OPTIONAL" (N -1) + "AUX" (S <2 .BF>) (L <LENGTH .S>) (FL <FILE-LENGTH .CH>) + (ACC <17 .CH>)) + #DECL ((VALUE BF) BUFFER (CH) CHANNEL (S) STRING (FL) <OR FIX FALSE> + (ACC L N) FIX) + <COND (<NOT .FL> ;"directory 'files', etc." + <REPEAT ((M 0) (I 0) (S <ISTRING 100>)) + #DECL ((M I) FIX (S) STRING) + <SET M <READSTRING .S .CH 100 0>> ;"read some" + <COND (<L? .M 100> ;"read it all?" + <RESET .CH> ;"re-access" + <REPEAT () + <COND (<L=? .ACC 100> + <READSTRING .S .CH .ACC> + <RETURN>)> + <SET ACC <- .ACC 100>> + <READSTRING .S .CH>> + ;"reads and throws away characters" + <RETURN <SET FL <+ .M .I>>>)> + <SET I <+ .M .I>> ;"count over iterations">)> + <COND (<OR <L? .N 0> <G? .N .FL>> <SET N .FL>)> ;"# chars to read" + <COND (<L? .L .N> ;"not enough room" + <SET S <2 <BUFGROW .BF .N>>>)> + <SET N <READSTRING .S .CH .N 0>> ;"do real read" + <PUT .BF 2 <REST .S .N>> ;"set buffer 'access'" + .BF> + +<DEFINE ISDISPLAY? () + #DECL ((VALUE) <OR ATOM FALSE>) + <==? 2 <CHTYPE <ANDB 7 <11 ,INCHAN>> FIX>>> + +<SET CHRTABLE + [!\ + ,BUFTECO + !\ + ,BUFTECO + !\ + ,FILEINP + !\Š ,IDELCHR + <ASCII 13> + ,ADDCRLF + <ASCII 12> + ,IBUFPRINT + !\ + ,IBUFPRINT + !\ + ,UNKILL + !\ + ,QUOTECHR + !\ + <FUNCTION (BUF CHR) <RETURN .BUF .GETSTRACT>> + !\ + ,DLINE + !\ + ,DWORD + !\ + ,DLINE + <ASCII 0> + ,IBUFCLEAR]> + +<DEFINE BUFMAKE (N + "OPTIONAL" (PROMPT1 "") (PROMPT2 "") + "AUX" (ST <ISTRING .N>)) + #DECL ((N) FIX (ST PROMPT1 PROMPT2) STRING (VALUE) BUFFER) + <CHTYPE [.ST .ST .PROMPT1 .PROMPT2 0 0 + <REST <ISTRING 20> 20> 20] BUFFER>> + +<DEFINE BUFFER-PRINT (BUF) + #DECL ((BUF) BUFFER) + <PRINC <BPRMPT1 .BUF>> + <PRINC <BPRMPT2 .BUF>> + <PRINTSTRING <1 .BUF> .OUTCHAN <BUFLENGTH .BUF>>> + +<PRINTTYPE BUFFER ,BUFFER-PRINT> + +<ENDPACKAGE> diff --git a/src/mprog/bufcrf.utaa15 b/src/mprog/bufcrf.utaa15 new file mode 100644 index 00000000..1025b2a5 --- /dev/null +++ b/src/mprog/bufcrf.utaa15 @@ -0,0 +1,237 @@ +<TITLE IOT> + <DECLARE ("VALUE" CHARACTER "OPTIONAL" <PRIMTYPE WORD> CHANNEL CHARACTER)> + <HLRE A* AB> + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <ASH A* -1> + <ADDI A* TABEND> + <PUSHJ P* @ (A)> + <JRST FINIS> + <IOT3> + <IOT2> + <IOT1> +TABEND <IOT0> + +<INTERNAL-ENTRY IOT0 0> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* [0]> +<INTERNAL-ENTRY IOT1 1> + <MOVE A* <MQUOTE <RGLOC INCHAN>>> + <ADD A* GLOTOP 1> + <DPUSH TP* (A)> +<INTERNAL-ENTRY IOT2 2> + <PUSH TP* <TYPE-WORD CHARACTER>> + <PUSH TP* [0]> +<INTERNAL-ENTRY IOT3 3> + <SUBM M* (P)> + <MOVE A* -2(TP)> ; "CHANNEL" + <MOVE A* 1(A)> + <AOSN INTFLG> + <JSR LCKINT> ; "ENABLE INTERRUPTS" + <*CALL [<SETZ> + <SIXBIT "IOT"> + <MOVS -4(TP)> ; "CONTROL BITS" + <MOVE A> ; "CHANNEL" + <SETZ (TP)>]> ; "LOCATION OF TRANSFER" + <*LOSE *1400*> + <SETZM INTFLG> ; "DISABLE INTERRUPTS" + <POP TP* B> + <POP TP* A> + <SUB TP* [<(4) 4>]> + <JRST MPOPJ> +<END> + +<TITLE SIOT> + <DECLARE ("VALUE" STRING STRING "OPTIONAL" <PRIMTYPE WORD> CHANNEL FIX)> + <HLRE A* AB> + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <ASH A* -1> + <ADDI A* TABEND> + <PUSHJ P* @ 1(A)> + <JRST FINIS> + <SIOT4> + <SIOT3> + <SIOT2> +TABEND <SIOT1> + +<INTERNAL-ENTRY SIOT1 1> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* [0]> +<INTERNAL-ENTRY SIOT2 2> + <MOVE A* <MQUOTE <RGLOC OUTCHAN>>> + <ADD A* GLOTOP 1> + <DPUSH TP* (A)> +<INTERNAL-ENTRY SIOT3 3> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* [-1]> +<INTERNAL-ENTRY SIOT4 4> + <SUBM M* (P)> + <MOVE A* -2(TP)> ; "CHANNEL" + <MOVE A* 1(A)> ; "CHANNEL #" + <SKIPGE C* (TP)> ; "CHARS TO PRINT" + <HRRZ C* -7(TP)> ; "LENGTH, IF # IS <0" + <MOVEM C* (TP)> ; "SAVE IT AWAY" +HACK <MOVE B* -6(TP)> ; "BPTR" + <MOVEI D* INTFROB> + <HRLI D* (<PUSHJ P*>)> + <MOVEM D* ONINT> ; "SET UP INTERRUPT RECOVERY" + <AOSN INTFLG> + <JRST LCKINT> ; "ENABLE INTERRUPTS" + <*CALL [<SETZ> + <SIXBIT "SIOT"> + <MOVS -4(TP)> ; "CONTROL BITS" + <MOVE A> ; "CHANNEL" + <MOVE B> ; "BPTR" + <SETZ C>]> ; "LENGTH" + <*LOSE *1400*> + <SETZM INTFLG> ; "DISABLE INTERRUPTS" + <SETZM ONINT> + <MOVE A* -7(TP)> + <MOVE B* -6(TP)> + <SUB TP* [<(8) 8>]> + <JRST MPOPJ> + +; "PUSHJ'ED TO BY INSN IN ONINT" +INTFROB <PUSH P* A> + <PUSH P* B> + <MOVE B* (TP)> + <MOVEM C* (TP)> ; "NUMBER OF CHARACTERS TO PRINT" + <SUB B* C> ; "NUMBER OF CHARACTERS PRINTED" + <HRRZ A* -7(TP)> ; "STRING LENGTH" + <SUBI A* (B)> ; "REST OFF PRINTED CHARS" + <HRRM A* -7(TP)> ; "SAVE AWAY LENGTH" + <POP P* B> + <MOVEM B* -6(TP)> ; "AND BPTR" + <JUMPLE A* INTOUT> + <MOVEI A* HACK> + <HRRM A* LCKINT> ; "SET THIS BACK UP WHEN WE GET OUT OF INT" +INTOUT <SETZM ONINT> + <POP P* A> + <POPJ P*> +<END> + +<TITLE RCPOS> + <DECLARE ("VALUE" FIX "OPTIONAL" CHANNEL)> + <JUMPGE AB* NOARG> + <DPUSH TP* (AB)> + <PUSHJ P* IRCPOS1> + <JRST FINIS> +NOARG <PUSHJ P* IRCPOS0> + <JRST FINIS> + +<INTERNAL-ENTRY IRCPOS0 0> + <MOVE A* <MQUOTE <RGLOC INCHAN>>> + <ADD A* GLOTOP 1> + <DPUSH TP* (A)> +<INTERNAL-ENTRY IRCPOS1 1> + <SUBM M* (P)> + <MOVE A* (TP)> + <*CALL [<SETZ> + <SIXBIT "RCPOS"> + <MOVE 1(A)> + <SETZM B>]> + <*LOSE *1400*> + <MOVSI A* <TYPE-CODE FIX>> + <SUB TP* [<(2) 2>]> + <JRST MPOPJ> +<END> +î +<TITLE TTY-GET> + <DECLARE ("VALUE" <UVECTOR [REST <PRIMTYPE WORD>]> UVECTOR "OPTIONAL" CHANNEL)> + <HLRE A* AB> + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <ASH A* -1> + <ADDI A* TABEND> + <PUSHJ P* @ 1(A)> + <JRST FINIS> + <TTYGET2> +TABEND <TTYGET1> + +<INTERNAL-ENTRY TTYGET1 1> + <MOVE A* <MQUOTE <RGLOC INCHAN>>> + <ADD A* GLOTOP 1> + <DPUSH TP* (A)> +<INTERNAL-ENTRY TTYGET2 2> + <SUBM M* (P)> + <MOVE A* (TP)> + <MOVE A* 1(A)> ; "CHANNEL NUMBER" + <MOVEI B* 0> + <MOVE C* -2(TP)> ; "UVECTOR OF OUTPUT" + <MOVE D* [<SIXBIT "TTYGET">]> + <PUSHJ P* DOCALL> + <MOVE A* -3(TP)> + <MOVE B* -2(TP)> + <SUB TP* [<(4) 4>]> + <JRST MPOPJ> + +<SUB-ENTRY TTY-SET ("VALUE" UVECTOR UVECTOR "OPTIONAL" CHANNEL)> + <HLRE A* AB> + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <ASH A* -1> + <ADDI A* TABEND1> + <PUSHJ P* @ 1(A)> + <JRST FINIS> + <TTYSET2> +TABEND1 <TTYSET1> + +<INTERNAL-ENTRY TTYSET1 1> + <MOVE A* <MQUOTE <RGLOC INCHAN>>> + <ADD A* GLOTOP 1> + <DPUSH TP* (A)> +<INTERNAL-ENTRY TTYSET2 2> + <SUBM M* (P)> + <MOVE A* (TP)> + <MOVE A* 1(A)> ; "CHANNEL #" + <MOVE B* -2(TP)> ; "INPUTS" + <MOVEI C* 0> ; "NO OUTPUT" + <MOVE D* [<SIXBIT "TTYSET">]> + <PUSHJ P* DOCALL> + <MOVE A* -3(TP)> + <MOVE B* -2(TP)> + <SUB TP* [<(4) 4>]> + <JRST MPOPJ> + +; "DO A SYSTEM CALL. TAKES CHANNEL # IN A, INPUT UVECTOR IN B, OUTPUT +UVECTOR IN C, CALL NAME IN D." +DOCALL <SUBM M* (P)> + <MOVEI O* 0> + <PUSH P* [<SETZ>]> ; "START CALL BLOCK" + <MOVEI E* (P)> ; "ADDRESS OF BLOCK" + <PUSH P* D> ; "CALL NAME" + <HRLI A* (<MOVEI>)> ; "MAKE CHANNEL BE IMMEDIATE" + <PUSH P* A> ; "CHANNEL ARG" + <ADDI O* 3> ; "NUMBER THINGS SO FAR" + <MOVEI A* B> + <HRLI A* (<MOVE>)> + <PUSHJ P* FROBUV> ; "PUSH IT" + <MOVEI A* C> + <HRLI A* (<MOVEM>)> + <PUSHJ P* FROBUV> + <PUSH P* [<SETZB A>]> ; "RANDOM" + <ADDI O* 1> ; "NUMBER OF THINGS PUSHED" + <*CALL (E)> ; "DO THE CALL" + <*LOSE *1400*> + <HRLS O> + <SUB P* O> ; "FLUSH THE CALL BLOCK AND SUCH" + <JRST MPOPJ> + +; "LOCN OF UV IN RH A, CODE IN LH" +FROBUV <SUBM M* (P)> + <HLRE F* (A)> ; "GET LENGTH" + <JUMPGE F* MPOPJ> ; "FLUSH IF 0" + <POP P* D> ; "RETURN ADDRESS" + <PUSH P* A> + <HRLZS (P)> + <HLLZS A> + <IOR A* (P)> + <SUB P* [<(1) 1>]> ; "BUILD <MOVE (n)>" +PUSHLP <PUSH P* A> + <ADDI A* 1> ; "MAKE IT BE <MOVE N(n)>" + <ADDI O* 1> ; "NUMBER PUSHED" + <AOJL F* PUSHLP> + <SUBM M* D> + <JRST @ D> +<END> \ No newline at end of file diff --git a/src/mprog/calcom.umrc04 b/src/mprog/calcom.umrc04 new file mode 100644 index 00000000..81cf0222 --- /dev/null +++ b/src/mprog/calcom.umrc04 @@ -0,0 +1,402 @@ +<PACKAGE "CALCOM"> +<USE "STR" "CALRDR" "CALSYM" "CALUTL" "LEX"> + +<ENTRY + ACT-SUBSYSTEM + SUBSYS-SYMTAB + SUBSYS-EVAL + FILEPRINT + LISTF + FILETPL + XFILE + TABLEPRINT + TABLETHERE + COPY-FILE + ADDTABLE + ADDCOMMAND + KILL-TABLE + CALICO-QUIT + TTY-SCRIPT + END-TTY-SCRIPT + END-ALL-TTY-SCRIPT + TTY-SILENCE-DEPTH + TTY-SILENCE + TTY-UNSILENCE +GLUETABLES +FIXGLUETABLE +FLUSHGLUETABLE +GLUECOMTABLE +COMTABLE +SYSTAT ;"for TENEX" +COMTITLES> + +<DEFINE SUBSYS-EVAL (VEC) + #DECL ((VEC) <VECTOR STRING> (VALUE) STRING) + <2 .VEC>> ;"data-set points at string to be executed" + +<DEFINE ACT-SUBSYSTEM ("AUX" TEM) + #DECL ((VALUE) ATOM (TEM) ANY) +<COND (<OR <GASSIGNED? SUBSYS-SYMTAB> + <AND <SET TEM <USE-DATUM "MUDCAL-SUBSYS-VECTOR">> + <SETG SUBSYS-SYMTAB <MAKEBGST "Subsystems" [4 ,SUBSYS-EVAL !.TEM]>>>> + <COND (<SET TEM <READER ,SUBSYS-SYMTAB "named" + '["type the name of the subsystem to be activated" + "ARC:CALSUB;ACTSUB HELPM"] '["SYM"]>> + <COND (<AND <TYPE? <2 .TEM> STRING> + <SET TEM <USE-DATUM <2 .TEM>>> + <TYPE? .TEM STRING>> + <XFPUSH .TEM T>)> + )>)> + T> + +<DEFINE COPY-FILE (FROMNAME TONAME "AUX" IC OC) + #DECL ((FROMNAME TONAME) STRING (IC OC) <OR CHANNEL FALSE> + (VALUE) ATOM) + <COND (<SET IC <OPENTELL "READ" .FROMNAME>> + <COND (<SET OC <OPENTELL "PRINT" .TONAME>> + <FILECOPY .IC .OC> <CLOSE .OC>)> + <CLOSE .IC>)> +T> + +<DEFINE FILEPRINT (FILENAME "OPTIONAL" (TOCHAN .OUTCHAN) "AUX" CHAN (OC ,OUTCHAN)) + #DECL ((FILENAME) STRING (OUTCHAN TOCHAN OC) CHANNEL (VALUE) ATOM + (CHAN) <OR CHANNEL FALSE>) + <COND (<SET CHAN <OPENTELL "READ" .FILENAME>> + <COND (<==? .TOCHAN .OUTCHAN> <TERPRI>)> + <FILECOPY .CHAN .TOCHAN> + <COND (<==? .TOCHAN .OUTCHAN> <TERPRI>)> + <CLOSE .CHAN>)> + T> + +<DEFINE LISTF (DEVICE "AUX" CHAN N (BFR <ISTRING 100>) + PDEV (STPR %<STRING <ASCII *14*>>)(OS ,TENEX)) + #DECL ((DEVICE STPR BFR) STRING (N) FIX (OUTCHAN) CHANNEL (VALUE) ATOM + (CHAN) <OR CHANNEL FALSE> (PDEV) VECTOR) + <SET PDEV <FSP-PARSE .DEVICE>> + <SET DEVICE <STRING <COND (<TYPE? <1 .PDEV> STRING> <1 .PDEV>) + (ELSE .CALICO-DEV)> + <COND (.OS ":<")(!":)> + <COND (<TYPE? <2 .PDEV> STRING> <2 .PDEV>) + (ELSE .CALICO-SNM)> + <COND (.OS ">")(!";)> + <COND (<NOT .OS> ".FILE.") + (<TYPE? <3 .PDEV> STRING> <3 .PDEV>) + (ELSE "*")> + <COND (.OS !".)(ELSE !" )> + <COND (<NOT .OS> "(DIR)") + (<TYPE? <4 .PDEV> STRING> <4 .PDEV>) + (ELSE "*;*")> + >> +<COND (.OS + <COND (<SET JFN <GTJFN .DEVICE>> + <TERPRI> + <JFNS .JFN *110000000001*> ;"print dev:<dir> first" + <TERPRI> + <REPEAT ((CHANGES 4)) + #DECL ((CHANGES) <OR FALSE FIX>) + <COND (<0? .CHANGES> ;"version only" + <PRINC !",> + <JFNS .JFN *000010000000*> ;"version, no punct") + (<1? .CHANGES> ;"ext changed" + <TERPRI> + <PRINC " "> + <JFNS .JFN *000110000001*> ;"ext;version") + (ELSE + <TERPRI> + <JFNS .JFN *001110000001*>)> + <COND (<NOT <SET CHANGES <GNJFN .JFN>>> + <RETURN <RLJFN .JFN>>)> + > + <TERPRI>)>) +(ELSE + <COND (<SET CHAN <OPENTELL "READ" .DEVICE>> + <TERPRI> + <REPEAT () + <COND (<0? <SET N <READSTRING .BFR .CHAN .STPR '<RETURN>>>> + <RETURN>)> + <PRINTSTRING .BFR .OUTCHAN .N> + > <TERPRI> <CLOSE .CHAN>)>)> + T> + +<DEFINE FILETPL (FILENAME "AUX" TPLCHN) + #DECL ((FILENAME) STRING (TPLCHN) <OR FALSE CHANNEL> (VALUE) ATOM) + <COND (<SET TPLCHN <OPENTELL "PRINT" "TPL:">> <FILEPRINT .FILENAME .TPLCHN> + <CLOSE .TPLCHN>)> + T> + +<DEFINE XFILE (FILENAME "AUX" CHAN) + #DECL ((FILENAME) STRING (CHAN) <OR FALSE CHANNEL> (VALUE) ATOM) + <COND (<SET CHAN <OPENTELL "READ" .FILENAME>> <XFPUSH .CHAN>)> + T> + +<DEFINE TABLEPRINT (TABLE) + #DECL ((TABLE) SYMTABLE (VALUE) ATOM) + <TERPRI> <TERPRI> + <COND (<G? <LENGTH .TABLE> 2> <PRINC <3 .TABLE>> <TERPRI>)> + <APPLY ,<1 .TABLE> 4 <2 .TABLE>> + T> + +<SETG GLUEABLE '[SSTOPS BSTOPS]> + +<DEFINE GETTABLES (MST "EXTRA" FOO (GLUETYPES ,GLUEABLE)) + #DECL ((MST) SYMTABLE (FOO) <OR <VECTOR [REST STRING ANY]> FALSE> + (GLUETYPES) <VECTOR [REST ATOM]>) + <MAPF ,VECTOR + <FUNCTION (X) + #DECL ((X) SYMTABLE) + <COND (<MEMQ <1 .X> .GLUETYPES> + <MAPRET !<2 .X>>) + (<==? <1 .X> MSTOPS> + <COND (<SET FOO <GETTABLES .X>> + <MAPRET !.FOO>) + (<MAPLEAVE <>>)>) + (<MAPLEAVE <>>)> + 0> + <2 .MST>>> + +<DEFINE GLUETABLES ("OPTIONAL" TBL (OPR 1) "EXTRA" (GLUETYPES ,GLUEABLE) VECT) +#DECL ((VECT) <VECTOR [REST STRING ANY]> + (OPR) FIX + (TBL) SYMTABLE + (GLUETYPES) <VECTOR [REST ATOM]>) +<COND (<COND (<ASSIGNED? TBL>) + (<GASSIGNED? COMTABLE> <SET TBL ,COMTABLE>)> + <COND (<MEMQ <1 .TBL> .GLUETYPES> + <SET VECT <2 .TBL>> + <COND (<AND <GASSIGNED? GLUECOMTABLE> + <TYPE? ,GLUECOMTABLE SYMTABLE>> + <REPEAT ((GTBL ,GLUECOMTABLE)) + <COND (<EMPTY? .VECT> <RETURN>)> + <AND <==? 1 .OPR> <LSTINSERT .GTBL <1 .VECT> <2 .VECT>>> + <AND <==? 2 .OPR> <LSTDELETE .GTBL <1 .VECT>>> + <SET VECT <REST .VECT 2>>>) + (<SETG GLUECOMTABLE <MAKELST "Glued Command Table" .VECT>>)> + T) + (<==? <1 .TBL> MSTOPS> + <MAPF <> <FUNCTION (TBL "AUX" VAL) + <OR <SET VAL <GLUETABLES .TBL>> + <SETG GLUECOMTABLE <>> + <MAPLEAVE .VAL>>> <2 .TBL>>) + (<==? <1 .TBL> LSTOPS> + <COND (<AND <GASSIGNED? GLUECOMTABLE> + <TYPE? ,GLUECOMTABLE SYMTABLE>>) + (<SETG GLUECOMTABLE <MAKELST "Glued Command Table" <>>>)> + <COND (<==? 1 .OPR> + <REPEAT ((IDV <1 <1 <2 .TBL>>>) (VALV <2 <2 .TBL>>) + (GTBL ,GLUECOMTABLE)) + #DECL ((IDV) <UVECTOR [REST LEXID]> (VALV) <OR VECTOR UVECTOR> + (GTBL) SYMTABLE) + <COND (<OR <EMPTY? .IDV> <EMPTY? .VALV>> <RETURN>)> + <LSTINSERT .GTBL + <LEX-GET <1 <2 .TBL>> <1 .IDV> ,LEX-SCRATCH-STRING> + <1 .VALV>> + <SET IDV <REST .IDV 1>> + <SET VALV <REST .VALV 1>>>) + (<==? 2 .OPR> + <REPEAT ((IDV <1 <1 <2 .TBL>>>) (GTBL ,GLUECOMTABLE)) + #DECL ((IDV) <UVECTOR [REST LEXID]> (GTBL) SYMTABLE) + <COND (<EMPTY? .IDV> <RETURN>)> + <LSTDELETE .GTBL + <LEX-GET <1 <2 .TBL>> <1 .IDV> ,LEX-SCRATCH-STRING>> + <SET IDV <REST .IDV>>>)> + T) + (#FALSE ("Illegal symbol table type present"))>) + (#FALSE ("No top level symbol table"))>> + + +<DEFINE FIXGLUETABLE () +#DECL ((VALUE) 'T (LXTBL) LEXTABLE) +<COND (<AND <GASSIGNED? GLUECOMTABLE> + <TYPE? ,GLUECOMTABLE SYMTABLE>> + <SET LXTBL <1 <2 ,GLUECOMTABLE>>> + <LEX-FIX-STRING-TBL .LXTBL> + <LEX-FIX-MASTER-TBL .LXTBL>)> +T> + + +<DEFINE FLUSHGLUETABLE ("AUX" LXTBL VALTBL) +#DECL ((LXTBL) LEXTABLE (VALTBL) <OR VECTOR UVECTOR FALSE>) +<COND (<TYPE? <1 <SET LXTBL <1 <2 ,GLUECOMTABLE>>>> UVECTOR> + <PUT .LXTBL 1 <REST <1 .LXTBL> <LENGTH <1 .LXTBL>>>>)> +<COND (<TYPE? <4 .LXTBL> UVECTOR>) + (ELSE + <COND (<TYPE? <2 .LXTBL> UVECTOR> + <PUT .LXTBL 2 <REST <2 .LXTBL> <LENGTH <2 ,LXTBL>>>>)> + <COND (<TYPE? <3 .LXTBL> UVECTOR> + <PUT .LXTBL 3 <REST <3 .LXTBL> <LENGTH <3 .LXTBL>>>>)>)> +<COND (<TYPE? <SET VALTBL <2 <2 ,GLUECOMTABLE>>> VECTOR UVECTOR> + <PUT <2 ,GLUECOMTABLE> 2 <REST .VALTBL <LENGTH .VALTBL>>>)>> + + +<DEFINE ADDTABLE (TABLE) + #DECL ((TABLE) SYMTABLE (VALUE) ATOM) + <COND (<GASSIGNED? COMTABLE> + <COND (<NOT <TABLETHERE <3 .TABLE> <2 ,COMTABLE>>> + <PUT ,COMTABLE 2 [.TABLE !<2 ,COMTABLE>]> + <PUT ,COMTITLES 2 [ <1 <2 ,COMTITLES>> <2 <2 ,COMTITLES>> + <3 .TABLE> .TABLE + !<REST <2 ,COMTITLES> 2>]> + <GLUETABLES .TABLE>)>) + + (ELSE + <SETG COMTABLE <MAKEMST "Current CALICO commands" [.TABLE]>> + <SETG COMTITLES <MAKEGST "Command table titles" [2 + <FUNCTION (A) <2 .A>> <3 .TABLE> .TABLE] >> + <SETG GLUECOMTABLE <>> + <GLUETABLES>)> + T> + +<SETG GLUECOMTABLE <>> + +<DEFINE TABLETHERE (TITLE TABLES) + #DECL ((TITLE) STRING + (VALUE) <OR FALSE SYMTABLE> + (TABLES) <VECTOR [REST SYMTABLE]>) + <REPEAT () <COND (<EMPTY? .TABLES> <RETURN <>>) + (<=? .TITLE <3 <1 .TABLES>>> <RETURN <1 .TABLES>>)> + <SET TABLES <REST .TABLES>>>> + +<DEFINE ADDCOMMAND (NAME VAL "AUX" TEMP) + #DECL ((NAME) STRING + (PERSONALS) SYMTABLE + (VAL) ANY + (TEMP) <OR FALSE VECTOR> + (VALUE) ATOM) + <COND (<TYPE? .VAL SYMBOL> <SET VAL <2 .VAL>>)> + <COND (<GASSIGNED? PERSONALS> + <COND (<SET TEMP <MEMBER .NAME <2 ,PERSONALS>>> + <PUT .TEMP 2 .VAL> + <FLUSHGLUETABLE> + <GLUETABLES>) + (<PUT ,PERSONALS 2 [.NAME .VAL !<2 ,PERSONALS>]> + <GLUETABLES ,PERSONALS>)>) + (ELSE <SETG PERSONALS <MAKESST "Personal commands" [.NAME .VAL]>> + <ADDTABLE ,PERSONALS>)> + T> + +<DEFINE KILL-TABLE (TABLE "AUX" (VT <2 ,COMTABLE>) (VN <2 ,COMTITLES>) TEM) + #DECL ((TABLE) SYMTABLE (VT) <VECTOR [REST SYMTABLE]> + (VN) <PRIMTYPE VECTOR> + (TEM) <OR FALSE <PRIMTYPE VECTOR>> + (VALUE) ATOM) + <COND (<SET TEM <MEMBER .TABLE .VT>> + <AND <==? <LENGTH .TABLE> 4> ;"do killer for table" + <EVAL <4 .TABLE>>> + <PUT .TEM 1 <1 .VT>> ;"write over killed one" + <PUT ,COMTABLE 2 <REST .VT>> ;"and rest the table" + ;"now for titles -- note the 2 first elements of GST have to stay in place" + <SET TEM <REST .VN <+ 2 <* 2 <- <LENGTH .VT> <LENGTH .TEM>>>>>> + <PUT .TEM 1 <3 .VN>> ;"first real entry" + <PUT .TEM 2 <4 .VN>> + <PUT .VN 3 <1 .VN>> ;"GST info retains index" + <PUT .VN 4 <2 .VN>> + <PUT ,COMTITLES 2 <REST .VN 2>> ;"flush excess" + <GLUETABLES .TABLE 2>)> + + T> + +<DEFINE CALICO-QUIT () + #DECL ((VALUE) ATOM) + <REPEAT () <COND (<EMPTY? <2 ,COMTABLE>> <RETURN T>) + (ELSE <KILL-TABLE <1 <2 ,COMTABLE>>>)>> + <LOGOUT> + <QUIT> +T> + +<DEFINE TTY-SCRIPT (FNAME "AUX" (TOP-CHAN <TOP .OUTCHAN>) C) + #DECL ((FNAME) STRING (C) <OR FALSE CHANNEL> + (TOP-CHAN) <VECTOR LIST> (VALUE) ATOM) + ;"SCRIPT-CHANNEL LIST HAS SPECIAL BITS IN RHW! OF TYPE WORD + DECLED TOP-CHAN KEEPS COMPILER FROM MUNGING THEM" + <COND (<SET C <OPENTELL "PRINT" .FNAME>> + <PUT .TOP-CHAN 1 (.C !<1 .TOP-CHAN>)>)> +T> + +<DEFINE END-TTY-SCRIPT ("AUX" (FC <TOP .OUTCHAN>)) + #DECL ((VALUE) ATOM (FC) <VECTOR LIST>) + <COND (<NOT <EMPTY? <1 .FC>>> + <CLOSE <1 <1 .FC>>> + <PUT .FC 1 <REST <1 .FC>>>) + (ELSE <PRINC "No console script file open now.">)> +T> + +<DEFINE END-ALL-TTY-SCRIPT ("AUX" (TOP-CHAN <TOP .OUTCHAN>) (CHNS <1 .TOP-CHAN>)) + #DECL ((VALUE) ATOM + (TOP-CHAN) <VECTOR LIST> + (CHNS) <LIST [REST CHANNEL]>) + <PUT .TOP-CHAN 1 ()> + <MAPF <> ,CLOSE .CHNS> +T> + +<SET TTY-SILENCE-DEPTH 0> + +<DEFINE TTY-SILENCE ("AUX" (JFCL *255000000000*)) + #DECL ((JFCL) FIX (VALUE) ATOM) + <COND (<NOT <ASSIGNED? TTY-OUTPUT-WORD>> + <SET TTY-OUTPUT-WORD <12 .OUTCHAN>>)> + <SET TTY-SILENCE-DEPTH <+ .TTY-SILENCE-DEPTH 1>> + <PUT .OUTCHAN 12 .JFCL> +T> + +<DEFINE TTY-UNSILENCE () + #DECL ((VALUE) ATOM) + <COND (<AND <ASSIGNED? TTY-OUTPUT-WORD> <1? .TTY-SILENCE-DEPTH>> + <PUT .OUTCHAN 12 .TTY-OUTPUT-WORD> + <SET TTY-SILENCE-DEPTH <- .TTY-SILENCE-DEPTH 1>>)> +T> + +<DEFINE SYSTAT ("AUX" JOBTTY JOBDIR JOBNAM SNAMES SYSTAT) + #DECL ((JOBTTY JOBDIR JOBNM SNAMES SYSTAT ENT) + <OR FALSE <PRIMTYPE WORD>> + (VALUE) ATOM) + <COND (<SET SYSTAT <SYSGT "SYSTAT">> + <TERPRI> + <PRINC "Load avg: "> + <PRINC <CHTYPE <GETAB *14* .SYSTAT> FLOAT>> + <PRINC ", "> + <PRINC <CHTYPE <GETAB *15* .SYSTAT> FLOAT>> + <PRINC ", "> + <PRINC <CHTYPE <GETAB *16* .SYSTAT> FLOAT>> + <PRINC !".><TERPRI>)> + <COND (<AND <SET JOBTTY <SYSGT "JOBTTY">> + <SET JOBDIR <SYSGT "JOBDIR">> + <SET SNAMES <SYSGT "SNAMES">> + <SET JOBNAM <SYSGT "JOBNAM">> + > + <SET LEN <CHTYPE + <GETBITS .JOBTTY <BITS 18 18>> FIX>> ;"length of table" + <OR <0? .LEN> + <SET LEN <- <PUTBITS -1 <BITS 18> .LEN>>>> + <TERPRI> + <PRINC "JOB TTY SUBSYS LOG"> + <TERPRI> + <REPEAT () + <COND (<L? <SET LEN <- .LEN 1>> 0> <RETURN T>)> + <SET ENT + <CHTYPE <GETBITS <GETAB .LEN .JOBTTY> + <BITS 18 18>> FIX>> + <COND (<0? .ENT><AGAIN>)> ;"don't print anything for job" + <PRINCJ .LEN> ;"job #" + <PRINC " "> + <COND (<==? .ENT *777777*> + <PRINC "DET">) + (ELSE <PRINCJ .ENT>)> ;"tty #" + <PRINC " "> + <SET ENT <GETBITS <GETAB .LEN .JOBNAM> <BITS 18>>> + ;"index into snames" + <PRINC <SIXTOS <GETAB .ENT .SNAMES>>> ;"print subsys name" + <PRINC " "> + <SET ENT <GETAB .LEN .JOBDIR>> + <OR <DIRST <GETBITS .ENT <BITS 18>>><PRINC "?">> + <TERPRI> +>)> +T> + +<DEFINE PRINCJ (FX) + #DECL ((VALUE FX) FIX) + <COND (<L? .FX 100><PRINC " ">)> + <COND (<L? .FX 10><PRINC " ">)> + <PRINC .FX>> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog/caldes.ueb017 b/src/mprog/caldes.ueb017 new file mode 100644 index 00000000..9c2dd0d4 --- /dev/null +++ b/src/mprog/caldes.ueb017 @@ -0,0 +1,134 @@ +<PACKAGE "CALDES"> + +<ENTRY PDESC CALDESC TABMAP MASTER-DESC-FILE MASTER-DESC-CHAN> + +<USE "CALCOM" "CALSYM" "LEX" "PMAP" "SDML"> + +<SETG ARRSTR " => "> + +<SETG MASTER-DESC-FILE <COND (,TENEX "<MUDDLE>[DESC].MASTER") ("CALSUB;DESC MASTER")>> + +<SETG MASTER-DESC-CHAN <>> + +<DEFINE GETABFIL (NAM "AUX" VAL) +#DECL ((VALUE) <OR PMCHAN FALSE> (NAM) STRING (VAL) ANY) +<COND (<OR <TYPE? ,MASTER-DESC-CHAN PMCHAN> + <AND <SET VAL <SDMOPN ,MASTER-DESC-FILE>> + <SETG MASTER-DESC-CHAN .VAL>>> + <COND (<AND <TYPE? <SET VAL <SDMGET ,MASTER-DESC-CHAN .NAM>> STRING> + <SET VAL <SDMOPN .VAL>>>)>)>> + +<DEFINE FLSTABFIL ("OPTIONAL" (PCHAN <>)) +<COND (<TYPE? .PCHAN PMCHAN> <SDMDCT .PCHAN>)> +<COND (<TYPE? ,MASTER-DESC-CHAN PMCHAN> <SDMDCT ,MASTER-DESC-CHAN>)> +T> + + + + +<DEFINE PDESC ("TUPLE" TABS "AUX" AT DAT) + #DECL ((AT) ATOM (DAT) VECTOR (TABS) <TUPLE [REST SYMTABLE]>) +<MAPF <> <FUNCTION (TAB) + #DECL ((TAB) SYMTABLE) + <SET DAT <2 .TAB>> ;"data vector" + <COND (<==? <SET AT <1 .TAB>> MSTOPS> + <PDESC !.DAT> ;"data is vector of tables") + (<==? .AT LSTOPS> + <TABMAP .DAT 1 <3 .TAB>>) + (<OR <==? .AT GSTOPS> <==? .AT BGSTOPS>> ;"GST types" + <TABMAP <REST .DAT 2> <1 .DAT> <3 .TAB>>) + (<TABMAP .DAT 2 <3 .TAB>>)> + > +.TABS> +T> + +<DEFINE TABMAP (DAT N TABNAM "AUX" TEM) + #DECL ((TEM) ANY (DAT) VECTOR (N) FIX (VALUE) ATOM (TABNAM) STRING + (TABFIL) <OR PMCHAN FALSE>) +<COND (<SET VAL <GETABFIL .TABNAM>> <SET TABFIL .VAL>) (<SET TABFIL <>>)> +<COND (<AND <NOT <EMPTY? .DAT>> <TYPE? <1 .DAT> LEXTABLE>> + <REPEAT ((UV <1 <1 .DAT>>) (LXTBL <1 .DAT>) NAM) + #DECL ((UV) <UVECTOR [REST LEXID]> (LXTBL) LEXTABLE (NAM) STRING) + <COND (<OR <EMPTY? .UV> <NOT .TABFIL>> <RETURN>) + (<AND <SET TEM <LEX-GET .LXTBL <1 .UV> ,LEX-SCRATCH-STRING>> + <TYPE? .TEM STRING> + <SET TEM <SDMGETCHAN .TABFIL <SET NAM .TEM>>>> + <TERPRI> + <PRINC .NAM> + <PRINTDAT .TEM> + <COND (<AND <TYPE? .TEM CHANNEL> <G? <1 .TEM> 0>> + <CLOSE .TEM>)>)> + <SET UV <REST .UV 1>>>) + (<REPEAT () + <COND (<EMPTY? .DAT><RETURN>) + (<SET TEM <OR <GET .DAT COMMENT> + <AND .TABFIL <SDMGETCHAN .TABFIL <1 .DAT>>>>> + <TERPRI> + <PRINC <1 .DAT>> ;"only if comment exists" + <PRINTDAT .TEM> + <COND (<AND <TYPE? .TEM CHANNEL> <G? <1 .TEM> 0>> <CLOSE .TEM>)>)> + <SET DAT <REST .DAT .N>>>)> +<FLSTABFIL .TABFIL> +T> + +<DEFINE CALDESC ("TUPLE" TUP) + #DECL ((TUP) <TUPLE [REST SYMBOL]>) +<COND (<EMPTY? .TUP> + <PDESC ,COMTABLE>) + (ELSE + <MAPF <> <FUNCTION (S "AUX" (TAB <2 .S>) PCHAN VAL TEM) + #DECL ((S) <PRIMTYPE VECTOR> (TAB VAL TEM) ANY (PCHAN) PMCHAN) + <TERPRI> + <COND (<TYPE? .TAB SYMTABLE> + <PRINC " "> + <PRINC <3 .TAB>> ;"title" + <PDESC .TAB>) + (ELSE ;"must be symbol" + <TERPRI> + <PRINC <1 .S>> ;"print symbol" + <COND (<AND <SET TEM <GETSYMOFF <1 .S> ,COMTABLE>> + <COND (<SET VAL <GET <1 .TEM> COMMENT>> + <PRINTDAT .VAL>) + (<SET VAL <GETABFIL <2 .TEM>>> + <SET PCHAN .VAL> + <OR <AND <SET VAL <SDMGETCHAN .PCHAN <1 .S>>> + <PRINTDAT .VAL>> + <PRINC " No info?">> + <SDMDCT .PCHAN>)>>) + (ELSE <PRINC " No info?">)> )> + > + .TUP>)> +<FLSTABFIL> T> + +<DEFINE PRINTDAT (VAL "AUX" (OUTCHAN .OUTCHAN)) +#DECL ((OUTCHAN) <SPECIAL CHANNEL> (VAL) ANY) + <PRINC ,ARRSTR> + <COND (<TYPE? .VAL ATOM> + <COND (<GASSIGNED? .VAL><PRINC ,.VAL>) + (<ASSIGNED? .VAL><PRINC ..VAL>)>) + (<TYPE? .VAL CHANNEL> + <COND (<G? <1 .VAL> 0> <FILECOPY .VAL .OUTCHAN>)>) + + (ELSE <PRINC .VAL>)> +> + +<DEFINE GETSYMOFF (STR TAB "AUX" TST VAL) + #DECL ((TST VALUE) <OR FALSE <PRIMTYPE VECTOR>> + (STR) STRING + (TAB) <PRIMTYPE VECTOR>) + <COND (<==? <1 .TAB> MSTOPS> ;"if multiple, map/recurse" + <MAPF <> <FUNCTION (TT) + <COND (<SET TST <GETSYMOFF .STR .TT>> + <MAPLEAVE .TST>)> <>> + <2 .TAB>>) + (<==? <1 .TAB> LSTOPS> + <COND (<LEX-LOOKUP <1 <2 .TAB>> .STR> + <PUT <PUT ,GETSYM2VCT 1 <1 <1 <2 .TAB>>>> 2 <3 .TAB>>)>) + (<SET VAL <MEMBER .STR <2 .TAB>>> + <PUT <PUT ,GETSYM2VCT 1 .VAL> 2 <3 .TAB>>)>> + +<SETG GETSYM2VCT [0 0]> + + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog/calrdr.umrc07 b/src/mprog/calrdr.umrc07 new file mode 100644 index 00000000..695f4c38 --- /dev/null +++ b/src/mprog/calrdr.umrc07 @@ -0,0 +1,1040 @@ + +<PACKAGE "CALRDR"> + +<ENTRY IMLAC? + COMMAPRINT + BLTREST ;"copies tuple into vector -- tuple may contain els from vector" + LKPR + ;"vector for symtab lookup results -- used to be specialled in READER" + READER-NULL-LINE + READER-ABORT + OTTY ;"saves tty status during reader call" + MULTLIST + READER + READARGS + RTOBRK ;"ASSEMBLY-CODED" + LAST-READER-BREAK + CALRDRINIT + BFR ;"reader buffer" + LEN ;"number of chars used" + CSACT + RDRHAND + RDRHEAD + CONFIRMS + COMPLETES + TERMINS + NSTERMS + POSCHAR + HELPCHAR + ABORTCHAR + MULTCHAR + RUBCHAR + LINEKILL + WORDKILL + BUFFERKILL + CRETYPE + DRETYPE + MASTER + MULT-CR-MASTER ;"string for RTOBRK" + MASTER-STRING + QUOTCHAR + INTTYCHAR + EXACT-MATCH-CHAR + PARTIAL-MATCH-CHAR + NO-MATCH-CHAR + CALICO-FILE-ATOMS + SPCCHAR-TEMPLATE + SPCCHARS + XSPCCHARS> + +<USE "CALSYM" "CALUTL" "STR" "TTY" "BLT" "TIMFCN"> + +<SETG READER-NULL-LINE #FALSE ("Null line")> + +<SETG READER-ABORT #FALSE (#FALSE ())> + +<SET LKPR [0 0 "" 0]> + +<SET FN-ATOMS + '[CALICO-DEV CALICO-SNM CALICO-NM1 CALICO-NM2]> + +<SET FN-SEPS + <COND (,TENEX '(":<" !\> !\. !\ )) (ELSE ":; ")>> + +<SET TORDR <IVECTOR 4>> + +<SETG SPCCHAR-TEMPLATE + [POSCHAR + '<DO-POSSYM> + ALLCHAR + '<WINNER-TAKE-ALL> + HELPCHAR + '<HELP-MESSAGE> + ABORTCHAR + '<RETURN ,READER-ABORT .LEAVE-READER> + MULTCHAR + '<CHECK-FOR-MULT> + INTTYCHAR + '<INPUT-FROM-TTY> + RUBCHAR + '<RUBOUT-ONE> + WORDKILL + '<BACKUPRUB " "> + LINEKILL + '<BACKUPRUB " "> + BUFFERKILL + '<KILLBUFFER> + CRETYPE + '<RETYPE-BUFFER <>> + DRETYPE + '<RETYPE-BUFFER T> + QUOTCHAR + '<QUOTE-NEXT-CHAR>]> + +<TITLE RTOBRK> + <DECLARE ("VALUE" <OR FALSE CHARACTER> + ATOM ATOM ATOM + STRING FIX + STRING + "OPTIONAL" STRING STRING STRING STRING STRING)> + +<PSEUDO <SET PBIN #OPCODE *104000000073*>> ;"JSYS 73" + <MOVE B* <MQUOTE IMLAC?>> ;"check CONSOLE" + <PUSHJ P* CILVAL> + <GETYP A* A> + <PUSH P* [0]> + <CAIE A* TFALSE> + <SETOM (P)> ;"-1 FOR IMLAC, 0 FOR PRINTING -2(P)" + + <MOVE B* <MQUOTE TENEX>> ;"check OS" + <PUSHJ P* CIGVAL> + <GETYP A* A> + <PUSH P* [0]> + <CAIN A* TFALSE> + <SETOM (P)> ;"-1 FOR ITS, 0 FOR TENEX -1(P)" + + <MOVE B* <MQUOTE READER-SILENCE>> + <PUSHJ P* CILVAL> + <SETZM B> + <GETYP A* A> + <CAIN A* TFALSE> + <SETOM B> + <PUSH P* B> ; "Save silence switch on P stack" + <MOVE B* 1(AB)> ; "Get value of input arg" + <PUSHJ P* CILVAL> + <PUSH TP* A> ; "Save on TP stack" + <PUSH TP* B> + <PUSH TP* $TCHARACTER> ; "Make a slot on stack" + <PUSH TP* [0]> + <PUSH TP* $TFIX> ; "Make slot for char count" + <PUSH TP* [0]> + <MOVE B* <MQUOTE OUTCHAN>> + <PUSHJ P* CILVAL> + <PUSH TP* A> ; "Save value of OUTCHAN" + <PUSH TP* B> + +LOOP <GETYP A* (TB)> ; "Get type of first arg" + <CAIN A* TFALSE> ; "False?" + <JRST DOIOT> ; "Yes - go do IOT on TTY" + <CAIN A* TSTRING> ; "String?" + <JRST DOILDB> ; "Yes - go get char from string" + <PUSHJ P* NCH> ; "Must be channel - get next char" + <MOVEM A* 3(TB)> ; "Save char" + <CAIE A* 3> ; "EOF?" + <JRST GOTCHR> ; "No - use this char" + <JRST LOOP> ; "Yes - try again with new CURXCHAN" + + +DOILDB <HRRZ B* (TB)> ; "Get string length" +ILDBLP <JUMPE B* STGPOP> ; "Quit if string is empty" + <ILDB D* 1(TB)> ; "Get first char" + <SOS B> ; "Decrease count" + <CAIN D* 10> ; "Line feed" + <JRST ILDBLP> ; "yes - don't want it" + <MOVEM D* 3 (TB)> + <HRRM B* (TB)> ; "Restore count" + <MOVE E* 1(TB)> ; "Get bptr for bumping out of string" +ILDBLP2 <JUMPE B* STGPOP2> ; "Pop if string is empty" + <ILDB D* E> ; "Get next chr" + <CAIN D* 10> ; "Line feed" + <SOJA B* ILDBLP2> ; "If everything else is lf - flush" + <JRST GOTCHR> + +STGPOP <MCALL 0 XFPOP> + <MOVEM A* (TB)> ; "Pop and save new CURXCHAN" + <MOVEM B* 1(TB)> + <JRST LOOP> ; "Try again" + +STGPOP2 <MCALL 0 XFPOP> + <MOVEM A* (TB)> ; "Pop and save new CURXCHAN" + <MOVEM B* 1(TB)> + <JRST GOTCHR> ; "But use last character of string" + +DOIOT <AOSE INTFLG> + <JSR LCKINT> + <SKIPE -1(P)> ; "SKIP IF tenex" + <JRST ITSCHR> + <PBIN> ;"char to A from primary input file" + <CAIN A* 31> ;"tenex uses EOL, not CR" + <MOVEI A* 13> ;"convert back to CR" + <SKIPA> +ITSCHR <(*40000*) B* A> ;"iot into A" + <MOVEM A* 3(TB)> + <SETZM INTFLG> + +GOTCHR <MOVE A* 3(TB)> ; "Check char" + <CAIN A* 10> ; "Reject line feeds" + <JRST LOOP> + <MOVEI E* 1> ; "Initialize loop" + <PUSH P* [0]> + <MOVE D* AB> + <ADD D* [*12000012*]> ; "Point at test strings" +SCLOOP <HRRZ A* (D)> ; "Get length of next string" + <JUMPE A* ESCL> ; "If empty - ignore" + <MOVE B* 1(D)> ; "Get byte pointer" +SCLIL <ILDB C* B> ; "Get next character" + <CAMN C* 3(TB)> ; "Match?" + <JRST MATCH> ; "Yes" + <SOJG A* SCLIL> ; "No - keep looking" +ESCL <ADD D* [*2000002*]> ; "Move to next string" + <LSH E* 1> ; "Update bit position" + <JUMPL D* SCLOOP> ; "Keep going if more strings" + <SKIPN (P)> ; "In any group?" + <JRST ACCEPT> ; "Not a break char - accept it" + <JRST GOTBRK> ; "Got a break - go return" + +MATCH <IORM E* (P)> ; "Got one - set the corresponding bit" + <JRST ESCL> + +ACCEPT <POP P* (P)> ; "Flush P stack" + <SKIPN (P)> ; "Silence switch set?" + <JRST BMPCHR> ; "Yes - no rubout - no echo" + <SKIPN -2(P)> ; "skips if IMLAC" + <JRST OUTCHR> ; "don't use ctl-p if printing tty" + <SKIPE -1(P)> ; "don't RO on TENEX -- should check IMLAC?" + <SKIPG 9(AB)> ; "Any extra characters to flush" + <JRST OUTCHR> ; "No" +RO <MOVEI A* 16> ; "Rubout with ^P and X" + <MOVE B* 7(TB)> + <MOVNI 3> ;"ctl-P,X,+DELETED CHR" + <ADDM 27 (B)> ;"reduce line pos, so won't CR" + <PUSHJ P* W1C> + <MOVEI A* 88> + <MOVE B* 7(TB)> + <PUSHJ P* W1C> + <SOSLE 9(AB)> + <JRST RO> ; "More - keep going" +OUTCHR <MOVE A* 3(TB)> ; "Echo the char" + <MOVE B* 7(TB)> ; "Get OUTCHAN" + <PUSHJ P* W1C> + <MOVE A* 3(TB)> ; "Was it a carriage return?" + <CAIE A* *15*> + <JRST BMPCHR> ; "No - done" + <MOVEI A* *12*> ; "Follow up with line feed" + <MOVE B* 7(TB)> + <PUSHJ P* W1C> + +BMPCHR <AOS 5(TB)> ; "Bump char count" + <HRRZ B* 6(AB)> ; "Get length of buffer" + <SOS B> ; "Decrease for char to go in now" + <MOVE A* 3(TB)> ; "Get the char" + <IDPB A* 7(AB)> ; "Put char into buffer" + <HRRM B* 6(AB)> ; "And update count" + <JUMPLE B* LOSER> ; "If more room in buffer - keep on" + <CAIE A* *15*> +;"didn't break at CR (JFCL INSTEAD OF CAIE TO RETURN TO FORMER METHOD)" + <JRST LOOP> ;"continue input" + <MOVEI A* *12*> ;"make a LF" + <MOVEM A* 3 (TB)> ;"put back in char slot" + <JRST BMPCHR> ;"add to BFR -- makes strings win" +LOSER <MOVE C* 1(AB)> ; "Must reset input arg" + <MOVE A* (TB)> + <MOVE B* 1(TB)> + <PUSHJ P* CISET> + <MOVE C* 5(AB)> ; "Reset length" + <MOVE A* 4(TB)> + <MOVE B* 5(TB)> + <PUSHJ P* CISET> + <MOVSI A* TFALSE> ; "Return false" + <SETZM B> + <JRST FINIS> + + +GOTBRK <POP P* B> ; "Get bit pattern back" + <MOVE C* 3(AB)> ; "Set the bit pattern arg" + <MOVSI A* TWORD> + <PUSHJ P* CISET> + <MOVE C* 1(AB)> ; "Now set input arg to what it is now" + <MOVE A* (TB)> + <MOVE B* 1(TB)> + <PUSHJ P* CISET> + <MOVE C* 5(AB)> ; "Reset length" + <MOVE A* 4(TB)> + <MOVE B* 5(TB)> + <PUSHJ P* CISET> + <MOVE A* 2(TB)> ; "Return the break character" + <MOVE B* 3(TB)> + <JRST FINIS> + + +; "Following code taken mostly from interpreter (INEOF)" + + + +NCH <SUBM M* (P)> ; "Magic" + +NCHLOOP <MOVE B* 1(TB)> ; "Get channel" + <PUSHJ P* R1C> ; "Get next char" + <ANDI A* *177*> ; "Isolate character" + <CAIN A* 10> ; "Line feed?" + <JRST NCHLOOP> ; "Yes - ignore" + <CAIE A* 3> ; "EOF?" + <JRST MPOPJ> ;"no --return the char" + ;"Can't see the need for lookahead. Change is to return and let the next +read catch the EOF char, whereupon <AGAIN .CSACT> is performed to +display prompt if READER-SILENCE is now false." +NCHPOP <PUSH P* A> ; "Save character to return" + <MCALL 0 XFPOP> + <MOVE B* <MQUOTE CSACT>> + <PUSHJ P* CILVAL> ;"get the activation" + <PUSH TP* A> + <PUSH TP* B> + <MCALL 1 AGAIN> ;"let the silence be checked" + + <JRST FINIS> ;"should not get here" + + <END> + + +<DEFINE PBREAK () + #DECL ((READER-SILENCE) <OR FALSE ATOM> (BREAK) CHARACTER) + <COND (<NOT .READER-SILENCE> + <COND (<==? .BREAK <ASCII 13>> <TERPRI>) + (ELSE <PRINC .BREAK>)>)>> + +<DEFINE COMPLETE (STR LEN TO TOLEN) + #DECL ((STR TO) STRING (LEN) FIX (OUTCHAN) CHANNEL (TOLEN VALUE) FIX) + <SET TOLEN <- .TOLEN .LEN>> ;"EXTRA CHARS" + <COND (<G? .TOLEN 0> + <SET TO <REST .TO .LEN>> + <COND (<NOT .READER-SILENCE> <PRINTSTRING .TO .OUTCHAN .TOLEN>)> + ;"copy extra chars into the buffer" + <EXTRACT .TO <REST .STR .LEN> .TOLEN>)> + .TOLEN> + +<DEFINE TPROMPT (STR SYN + "OPTIONAL" (SYNSW T) (LEVEL T) (INMULT <>) + "AUX" X Y LEN) + #DECL ((STR Y) STRING (LEN) FIX (SYN) VECTOR (X) <OR ATOM FALSE> + (SYNSW LEVEL) <OR FALSE ATOM> (VALUE) ATOM (INMULT) <OR LIST FALSE>) + <AND .INMULT <COMMAPRINT .INMULT>> + <COND + (.LEVEL + <COND (<G? <14 .OUTCHAN> 40> <TERPRI>) (ELSE <PRINC !\ >)> + <PRINC .STR> + <COND (.SYNSW + <PRINC " ("> + <REPEAT () + <COND (<EMPTY? .SYN> <RETURN>)> + <PRINC <1 .SYN>> + <COND (<1? <LENGTH .SYN>> <PRINC ")">) (ELSE <PRINC "|">)> + <SET SYN <REST .SYN>>> + <PRINC ": ">)>) + (ELSE + <TERPRI> + <PRINC .STR> + <TERPRI> + <COND (.SYNSW + <PRINC "("> + <SET Y + <COND (<1? <LENGTH .SYN>> " is allowed.)") + (<MEMBER "MULT" .SYN> + <PRINC "multiple "> + " (s) are allowed.)") + (" are allowed.)")>> + <REPEAT () + <COND (<EMPTY? .SYN> <RETURN>)> + <PRINC <COND (<SET X <LOOKUP <1 .SYN> ,FULLSYN>> <1 ,.X>) + (<MEMQ <PARSE <1 .SYN>> <ALLTYPES>> + <PRINC "Object of type "> + <1 .SYN>) + (<=? <1 .SYN> "MULT"> "") + ;"don't print unknown" + (ELSE "Unknown type")>> + <COND (<1? <LENGTH .SYN>> <PRINC .Y>) + (<=? <1 .SYN> "MULT">) + (ELSE <PRINC ", ">)> + <SET SYN <REST .SYN>>> + <TERPRI> + <COND (<==? .MODE 3> + <PRINC "Current default is "> + <MAPF <> + <FUNCTION (A B C) + #DECL ((A) <OR ATOM FALSE STRING> + (B) <OR STRING CHARACTER> (C) ATOM) + <PRINC <COND (<TYPE? .A ATOM> ..A) (.A) (..C)>> + <PRINC .B>> ;"separator char" + <COND (<EMPTY? .TABLE> .FN-ATOMS) (.TABLE)> + .FN-SEPS + .FN-ATOMS> + <COND (<EMPTY? .TABLE> T) + (<L? <SET LEN <LENGTH .TABLE>> 4> + <MAPF <> + <FUNCTION (A B) + #DECL ((A) ATOM (B) CHARACTER) + <PRINC ..A> + <PRINC .B>> + <REST .FN-ATOMS .LEN> + <REST .FN-SEPS .LEN>>)> + <TERPRI>) + (<==? .MODE 5> + <PRINC "Current default is "> + <COND (<EMPTY? .TABLE> + <PDATE <DATE>>) + (<PDATE <1 .TABLE>>)> + <PRINC "."> + <TERPRI>)> + <PRINC ": ">)>)> + T> + +<DEFINE READER (TABLE P1 P2 SYN + "OPTIONAL" (SYNSW T) (MULTSW FOO) + (BFR + <COND (<AND <ASSIGNED? BFR> <TYPE? .BFR STRING>> + <COND (<AND <ASSIGNED? LEN> <TYPE? .LEN FIX>> + <REST .BFR .LEN>) + (ELSE .BFR)>) + (ELSE <ISTRING 100>)>) + "AUX" FOO I TEMP BITP LENS BREAK (XTRCHR 0) (LEN 0) OTTY + (WD0 #WORD *000000000000*) (INSTRING <>) (INCHARACTER <>) + (HELPSW <>) (XFPOPSW <>) (CAL-PARSE 0) + (MODE + <COND (<AND <MEMBER "SYM" .SYN> <NOT <EMPTY? .TABLE>>> 0) + (<MEMBER "TEXT" .SYN> 1) + (<MEMBER "LINE" .SYN> 2) + (<MEMBER "FILE" .SYN> 3) + (<OR <MEMBER "FORM" .SYN> + <MEMBER "VECTOR" .SYN> + <MEMBER "LIST" .SYN> + <MEMBER "OBJECT" .SYN>> + 4) + (<MEMBER "OBJECTS" .SYN> <SET CAL-PARSE 1> 4) + (<MEMBER "DATE" .SYN> 5) + (6)>) ST1 ST2 ST3 ST4) + #DECL ((VALUE VAL) ANY (I) FIX (LEN LENS XTRCHR MODE) <SPECIAL FIX> + (XSPCCHARS TEMP) <VECTOR [REST CHARACTER FORM]> (WD0) WORD + (BITP) <SPECIAL WORD> (BFR P1) <SPECIAL STRING> + (P2) <SPECIAL <OR TUPLE VECTOR STRING>> + (LKPR) <VECTOR FIX ANY STRING FIX> (ST1 ST2 ST3 ST4) STRING + (TABLE) <SPECIAL <OR SYMTABLE VECTOR>> + (SYN) <SPECIAL <VECTOR [REST STRING]>> + (INSTRING INCHARACTER XFPOPSW SYNSW MULTSW) <SPECIAL <OR FALSE ATOM>> + (HELPSW) <SPECIAL <OR FALSE ATOM CHANNEL>> + (CONFIRMS COMPLETES NSTERMS TERMINS SPCCHARS) STRING + (MASTER MULTCHAR) CHARACTER (IMLAC?) <OR FIX FALSE> + (FOO READER-SILENCE) <OR ATOM FALSE> + (CURXCHAN) <OR FALSE CHANNEL STRING> + (BREAK) <SPECIAL <OR FALSE CHARACTER>> (CAL-PARSE) <SPECIAL FIX> + (OTTY) <SPECIAL <OR UVECTOR WORD>>) + <COND (<NOT <ASSIGNED? IMLAC?>> <CALRDRINIT>)> + <OR .MULTSW <SET MULTSW FOO>> + <SET ST1 <COND (<0? .MODE> ,CONFIRMS) ("")>> + <SET ST2 <COND (<0? .MODE> ,COMPLETES) ("")>> + <SET ST4 <COND (<0? .MODE> ,NSTERMS) ("")>> + <SET ST3 + <COND (<OR <1? .MODE> <==? .MODE 4>> ,MASTER-STRING) + (<OR <==? .MODE 2> <==? .MODE 5>> <REST ,MULT-CR-MASTER>) ;"cr and master" + (<==? .MODE 3> + <COND (<MEMBER "MULT" .SYN> ,MULT-CR-MASTER) + (ELSE <REST ,MULT-CR-MASTER>)>) + (ELSE ,TERMINS)>> + <COND (<TYPE? .P2 STRING> <SET P2 [.P2 ""]>)> + <UNWIND + <PROG () + <COND (<NOT .CURXCHAN> <SET OTTY <TTY-GET>> <CAREFUL-TTY-OFF>)> + ;"save tty status and set new status" + <PROG CSACT () + #DECL ((CSACT) <SPECIAL ACTIVATION>) + <COND (<NOT .READER-SILENCE> + <TPROMPT .P1 .SYN .SYNSW> + <PRINTSTRING .BFR .OUTCHAN .LEN>)> + <SET .MULTSW <>> + <SET VAL + <REPEAT LEAVE-READER () + #DECL ((LEAVE-READER) <SPECIAL ACTIVATION>) + ;"Read the input stream through the next break" + <SET BREAK + <COND (.INSTRING + <RTOBRK CURXCHAN + BITP + LENS + <REST .BFR .LEN> + .XTRCHR + "" + "" + "" + ,SPCCHARS + "" + "\"">) + (ELSE + <RTOBRK CURXCHAN + BITP + LENS + <REST .BFR .LEN> + .XTRCHR + .ST1 + .ST2 + .ST3 + ,SPCCHARS + .ST4 + "\"">)>> + <SET LAST-READER-BREAK .BREAK> + <COND (<G? .LENS 0> + <SET XTRCHR 0> + <SET LEN <+ .LEN .LENS>> + <COND (<TYPE? .HELPSW CHANNEL> <CLOSE .HELPSW>)> + <SET HELPSW <>>)> + ;"First check to see if RTOBRK returned because it ran out of buffer space." + <COND (<NOT .BREAK> <SET BFR <EXTRACT .BFR <* .LEN 2>>>) + (<AND <L? <- <LENGTH .BFR> .LEN> 2> + ;"leave breathing-space" + <SET BFR <EXTRACT .BFR <* .LEN 2>>> + <>>) + (<AND <==? .BREAK !\"> + <NOT <==? .MODE 1>> + <NOT <==? .MODE 2>> + ;"ignore quotes in text and line modes" + <SET BITP #WORD *000000000000*> + <SET INSTRING <NOT .INSTRING>> + ;"complement the inside-a-string flag" + <AND <NOT <0? .LEN>> + <OR .INCHARACTER <==? <NTH .BFR .LEN> !\!>> + <SET INCHARACTER T> + ;"in char, not string (only cleared by RUBOUTCHR)" + <SET INSTRING <NOT .INSTRING>>> + <>>) + ; +"Now check to see if user typed a special character. If so execute handler for it." + (<AND <N==? <ANDB .BITP 8> #WORD *000000000000*> + <SET TEMP <MEMQ .BREAK ,XSPCCHARS>> + <EVAL <2 .TEMP>>>) + ;"Are we in symbol input mode? If so, was symbol oriented char typed?" + (<AND <0? .MODE> + <N==? <ANDB .BITP 7> #WORD *000000000000*>> + <SYMBOL-ANALYZE>) + (<N==? <ANDB .BITP 4> #WORD *000000000000*> + <RUBOUTCHR .XTRCHR> + <PBREAK> ;"print the break" + <COND (<L=? .MODE 2> <RETURN <EXTRACT .BFR .LEN>>) + (<==? .MODE 5> + <RETURN <DATE-FIXUP <EXTRACT .BFR .LEN>>>) + (<==? .MODE 3> + <RETURN <FSP-FIXUP <EXTRACT .BFR .LEN>>>) + (ELSE <RETURN <READER-PARSE .BFR .LEN>>)>) + (ELSE + <PUT .BFR <SET LEN <+ 1 .LEN>> .BREAK> + <PBREAK> ;"print the break")>>>> + <AND <ASSIGNED? OTTY> <TTY-SET .OTTY>> + <COND (.XFPOPSW <XFPOP>)>> ;"unwind scope" + <AND <ASSIGNED? OTTY> <TTY-SET .OTTY>>> + .VAL> + +<DEFINE SUBSTRUC* (OBJ RESTNUM TO) + #DECL ((OBJ) TUPLE (RESTNUM) FIX (TO) <VECTOR [4 ANY]>) + <MAPR <> + <FUNCTION (FRM INTO) + #DECL ((FRM) TUPLE (INTO) VECTOR) + <PUT .INTO + 1 + <COND (<TYPE? <1 .FRM> FORM> <EVAL <1 .FRM>>) + (ELSE <1 .FRM>)>>> + <REST .OBJ .RESTNUM> + .TO>> + +<DEFINE READARGS ( + "TUPLE" RDARGS + "AUX" SYNTAX TEMP (MULTERM <>) (N 1) (I 1) + (LEN <LENGTH .RDARGS>) (INMULT <>) SETAT + (ARGVCT <IVECTOR </ .LEN 4>>) ML (MULTLIST ())) + #DECL ((RDARGS) TUPLE (N I LEN) FIX (SYNTAX) <VECTOR [REST STRING]> + (ARGVCT) VECTOR (VALUT) <OR VECTOR FALSE> (TEMP) ANY + (MULTERM) <SPECIAL <OR FALSE ATOM>> (MULTLIST) <SPECIAL LIST> + (INMULT) <OR FALSE ATOM> (TORDR) <VECTOR [4 ANY]> + (SETAT) <OR ATOM FALSE>) + <REPEAT () + <AND <L? .N 1> <RETURN ,READER-ABORT>> ;"control-R to excess" + <AND <G? .N .LEN> + <RETURN <COND (<==? <SET I <- .I 1>> + <SET TEMP <LENGTH .ARGVCT>>> + .ARGVCT) + (ELSE + <BLTREST <REST .ARGVCT <- .TEMP .I>> + !.ARGVCT>)>>> + <COND (.INMULT T) + (<TYPE? <NTH .RDARGS .N> ATOM> + <SET SETAT <NTH .RDARGS .N>> + <SET N <+ .N 1>>) + (ELSE <SET SETAT <>>)> + <SUBSTRUC* .RDARGS <- .N 1> .TORDR> + <COND + (<SET TEMP + <COND (<NOT <1 .TORDR>> <CHTYPE (FLUSHED !<1 .TORDR>) FALSE>) + (<READER <1 .TORDR> + <COND (.INMULT "and ") (ELSE <2 .TORDR>)> + <3 .TORDR> + <SET SYNTAX <4 .TORDR>> + <NOT .INMULT> + MULTERM>)>> + <COND (.INMULT + <COND (<TYPE? .TEMP SPLICE> + <SET ML + <REST <PUTREST .ML .TEMP> <- <LENGTH .ML> 1>>>) + (<SET ML <REST <PUTREST .ML (.TEMP)>>>)>) + (<MEMBER "MULT" .SYNTAX> + <SET INMULT T> + <COND (<TYPE? .TEMP SPLICE> + <SET MULTLIST <CHTYPE .TEMP LIST>> + <SET ML <REST .MULTLIST <- <LENGTH .MULTLIST> 1>>>) + (<SET MULTLIST <SET ML (.TEMP)>>)>)> + <COND (.MULTERM <SET INMULT T>) + (.INMULT + <SET TEMP .MULTLIST> + <SET MULTLIST ()> + <SET INMULT <>>)> + <COND (<NOT .INMULT> + <PUT .ARGVCT .I .TEMP> + <AND .SETAT <SET .SETAT .TEMP>> + <SET I <+ .I 1>> + <SET N <+ .N 4>>)>) + (<1 .TEMP> ;"gets here if null line, etc." + <COND (<==? <1 .TEMP> FLUSHED> + <SET TEMP + <COND (<1? <LENGTH .TEMP>> #FALSE ("Aborted")) + (<2 .TEMP>)>>) + (.INMULT <SET TEMP .MULTLIST> <SET INMULT <>>) + (<MEMBER "MULT" .SYNTAX> <SET TEMP ()>)> + <PUT .ARGVCT .I .TEMP> + <AND .SETAT <SET .SETAT .TEMP>> + <SET I <+ .I 1>> + <SET N <+ .N 4>>) + (.INMULT ;"gets here if abort char typed" + <COND (<NOT <LENGTH? .MULTLIST 1>> ;"if length > 1, can putrest" + <PUTREST <SET ML <REST .MULTLIST <- <LENGTH .MULTLIST> 2>>> + ()> + <COND (<NOT .READER-SILENCE> <COMMAPRINT .MULTLIST>)>) + (ELSE <SET INMULT <>> <SET MULTLIST ()>)>) + (ELSE + <TERPRI> + <AND <G? .N 1> + <TYPE? <NTH .RDARGS <- .N 1>> ATOM> + <SET N <- .N 1>>> ;"back up over atom hack" + <PROG () + <SET I <- .I 1>> + <SET N <- .N 4>> + <AND <L? .N 1> <RETURN>> ;"let abort happen in REPEAT" + <SET TEMP <NTH .RDARGS .N>> + <AND <TYPE? .TEMP FORM> <SET TEMP <EVAL .TEMP>>> + ;"see if FALSE" + <COND (<AND <G? .N 1> <TYPE? <NTH .RDARGS <- .N 1>> ATOM>> + <SET SETAT <NTH .RDARGS <SET N <- .N 1>>>>) + (ELSE <SET SETAT <>>)> + <OR .TEMP <AGAIN>>> ;"back up beyond last FLUSH")>>> + +<DEFINE CALRDRINIT () + #DECL ((IMLAC?) <OR 'T FALSE> (SYN) <VECTOR [REST STRING]> + (POSCHAR HELPCHAR ABORTCHAR MULTCHAR RUBCHAR LINEKILL WORDKILL + BUFFERKILL CRETYPE DRETYPE MASTER QUOTCHAR STRCHAR) CHARACTER + (COMPLETES CONFIRMS NSTERMS TERMINS SPCCHARS) CHARACTER + (XSPCCHARS) <VECTOR [REST CHARACTER FORM]> (OUTCHAN) CHANNEL + (XTRCHR MODE LEN) FIX (BFR P2 P1) STRING + (SYNSW INSTRING) <OR ATOM FALSE> (VALUE MULTSW) ATOM + (WD0 BITP) WORD (CURXCHAN) <OR CHANNEL STRING FALSE> + (BREAK) CHARACTER (TABLE) SYMTABLE) + <SET IMLAC? <==? <MOD <11 ,INCHAN> 128> 2>> + <SET READER-SILENCE <>> + <SETG FULLSYN <MOBLIST SYNOB>> + <MAPF <> + <FUNCTION (A) + #DECL ((A) <LIST STRING VECTOR>) + <SETG <OR <LOOKUP <1 .A> ,FULLSYN> + <INSERT <1 .A> ,FULLSYN>> + <2 .A>>> + '[("FIX" ["integer" FIX]) + ("FLOAT" ["floating point number" FLOAT]) + ("ATOM" ["MUDDLE atom name" ATOM]) + ("CHARACTER" ["character preceded by !\"" CHARACTER]) + ("LIST" ["list of objects" LIST]) + ("VECTOR" ["vector of objects" VECTOR]) + ("FORM" ["MUDDLE form" FORM]) + ("OBJECT" ["any EVALable object" ANY]) + ("OBJECTS" ["any number of EVALable objects" LIST]) + ("ANY" ["any EVALable object" ANY]) + ("STRING" ["string of characters" STRING]) + ("FILE" ["file specification" STRING]) + ("DATE" ["date specification" STRING]) + ("LINE" ["line of text" STRING]) + ("TEXT" ["text terminated by master break" STRING]) + ("SYM" ["symbol" SYMBOL])]> + <SETG EXACT-MATCH-CHAR !\!> + <SETG PARTIAL-MATCH-CHAR + <COND (,TENEX <ASCII 7>) (ELSE !\&)>> + <SETG NO-MATCH-CHAR !\?> + <SETG POSCHAR <ASCII 6>> + <SETG HELPCHAR !\?> + <SETG ABORTCHAR <ASCII 18>> + <SETG MULTCHAR !\,> + <SETG RUBCHAR <ASCII <COND (,TENEX 1) (ELSE 127)>>> + <SETG LINEKILL <ASCII 25>> + <SETG WORDKILL <ASCII 23>> + <SETG BUFFERKILL <ASCII 0>> + <SETG CRETYPE <ASCII 12>> + <SETG DRETYPE <ASCII 4>> + <SETG MASTER <ASCII 27>> + <SETG ALLCHAR <COND (,TENEX <ASCII 21>) + (ELSE <ASCII 1>)>> + <SETG QUOTCHAR <ASCII 17>> + <SETG INTTYCHAR <ASCII 20>> + <SETG MASTER-STRING + <REST <SETG MULT-CR-MASTER <STRING !\, <ASCII 13> <ASCII 27>>> + 2>> + <SETG COMPLETES " "> + <SETG CONFIRMS ""> + <SETG NSTERMS ""> + <SETG TERMINS "î ,"> + <SETG SPCCHARS + <MAPF ,STRING + <FUNCTION (A) + #DECL ((A) <OR ATOM FORM>) + <COND (<TYPE? .A ATOM> + ,.A) + (ELSE <MAPRET>)>> ,SPCCHAR-TEMPLATE>> + <SETG XSPCCHARS + <MAPF ,VECTOR + <FUNCTION (A) + #DECL ((A) <OR ATOM FORM>) + <COND (<TYPE? .A ATOM> + ,.A) + (ELSE .A)>> ,SPCCHAR-TEMPLATE>> + T> + +<DEFINE KILLBUFFER () + <SET XTRCHR <SET LEN 0>> + <TPROMPT .P1 .SYN .SYNSW>> + +<DEFINE DATE-FIXUP (INP "EXTRA" INPARSE) + #DECL ((INP) STRING (INPARSE) <OR FALSE <LIST [3 FIX]>> (XTRCHR LEN) FIX) + <COND (<EMPTY? .TABLE> + <SET INPARSE <DATE-PARSE .INP <DATE>>>) + (<SET INPARSE <DATE-PARSE .INP <1 .TABLE>>>)> + <COND (.INPARSE) + (T <TERPRI> + <PRINC "Date unrecognizable. Please retype."> + <TERPRI> + <SET XTRCHR <SET LEN 0>> + <AGAIN .CSACT>)>> + +<DEFINE FSP-FIXUP (INP "AUX" FSPV (OS ,TENEX)) + #DECL ((INP VALUE) STRING (FSPV) VECTOR (OS) <OR ATOM FALSE>) + <SET FSPV <FSP-PARSE .INP>> + <COND (<EMPTY? .TABLE> ;"symbol-table can contain defaults" + <MAPF <> + <FUNCTION (A B) + #DECL ((A) ATOM (B) <OR LOSE STRING>) + <COND (<TYPE? .B STRING> <SET .A .B>)>> + (CALICO-DEV CALICO-SNM CALICO-NM1 CALICO-NM2) + .FSPV> + <OR <TYPE? <1 .FSPV> STRING> ;"user gave device" + <AND <TYPE? <2 .FSPV> STRING> <SET CALICO-DEV "DSK">>> + ;"else if sname, dev=dsk" + <STRING .CALICO-DEV + <COND (.OS ":<") (ELSE !\:)> + .CALICO-SNM + <COND (.OS !\>) (ELSE !\;)> + .CALICO-NM1 + <COND (.OS !\.) (ELSE !\ )> + .CALICO-NM2>) + (ELSE ;"defaults in TABLE, USE CALICO-FOO otherwise" + <MAPR <> + <FUNCTION (A B) + #DECL ((A) VECTOR (B) <OR FALSE STRING>) + <COND (<NOT <TYPE? <1 .A> STRING>> + <PUT .A 1 <1 .B>>)>> + .FSPV + .TABLE> + <MAPF ,STRING + <FUNCTION (A B C) + #DECL ((A) <OR STRING LOSE FALSE> (B) ATOM + (C) <OR STRING CHARACTER>) + <COND (<TYPE? .A STRING> <MAPRET .A .C> T) + (ELSE <MAPRET ..B .C> T)>> + .FSPV + .FN-ATOMS + .FN-SEPS>)>> + +<DEFINE RUBOUTCHR ("OPTIONAL" (ARGN 1) + "AUX" N (SPCPRT " î") (SOSCH <REST .OUTCHAN 13>)) + #DECL ((ARGN) <OR CHARACTER FIX> (VALUE) ATOM (SPCPRT) STRING + (MODE N) FIX (IMLAC?) <OR FIX FALSE> (SOSCH) <VECTOR FIX>) + <COND (<NOT .READER-SILENCE> + <COND (<TYPE? .ARGN CHARACTER> + <AND <==? .ARGN !\"> + <NOT <==? .MODE 1>> + <NOT <==? .MODE 2>> + <COND (.INCHARACTER + <AND <==? <NTH .BFR <- .LEN 1>> !\!> + <SET INCHARACTER <>>>) + (ELSE <SET INSTRING <NOT .INSTRING>>)>> + ;"rubbed out a double-quote" + <COND (<NOT .IMLAC?> + <COND (,TENEX <PRINC !\\\>)> + <PRINC .ARGN>) + (<AND <L? <SET N <ASCII .ARGN>> 32> + <NOT <MEMBER .ARGN .SPCPRT>>> + <SET N 2>) + (ELSE <SET N 1>)>) + (ELSE <SET N .ARGN>)> + <COND (.IMLAC? + <REPEAT () + <COND (<L? <SET N <- .N 1>> 0> <RETURN T>)> + <PRINC "X"> + <PUT .SOSCH 1 <- <NTH .SOSCH 1> 3>> + ;"account for ^P,X and rubbed-out char in .OUTCHAN">)>)> + T> + +<DEFINE BACKUPRUB ("OPTIONAL" (STPRS "") "AUX" (NBREAKFLAG <>)) + #DECL ((VALUE) ATOM + (BFR STPRS P1) STRING + (SYN) <VECTOR [REST STRING]> + (SYNSW NBREAKFLAG) <OR ATOM FALSE> + (XTRCHR LEN) FIX) + <COND (<0? .LEN> <TPROMPT .P1 .SYN .SYNSW>) + (ELSE <RUBOUTCHR .XTRCHR> + <SET XTRCHR 0> + <REPEAT () + <COND (<MEMBER <NTH .BFR .LEN> .STPRS> + <COND (.NBREAKFLAG <RETURN T>)>) + (<SET NBREAKFLAG T>)> ;"REACHED NON-STOPPER" + <RUBOUTCHR <NTH .BFR .LEN>> ;"RUB OUT NON-STPR, TRAILING STPRS" + <COND (<0? <SET LEN <- .LEN 1>>> <RETURN T>)> + > + <SET XTRCHR 0>)> + T> + +<DEFINE SYMBOL-ANALYZE ("AUX" I (WD0 #WORD *000000000000*)) + #DECL ((MODE LEN XTRCHR I) FIX (BITP WD0) WORD (TABLE) SYMTABLE + (LKPR) <VECTOR FIX ANY STRING FIX> (BFR) STRING (VALUE) ATOM) + <APPLY ,<1 .TABLE> 1 .BFR .LEN <2 .TABLE> .LKPR> + <SET I + <COND (<N==? <ANDB .BITP 1> .WD0> + <COND (<==? <1 .LKPR> 3> 0) + (<AND <0? <1 .LKPR>> <N==? <ANDB .BITP 16> .WD0>> 1) + (<AND <N==? <1 .LKPR> 0> <N==? <ANDB .BITP 2> .WD0>> + 2) + (3)>) + (<N==? <ANDB .BITP 2> .WD0> + <COND (<0? <1 .LKPR>> + <COND (<N==? <ANDB .BITP 16> .WD0> 1) (3)>) + (<AND <N==? <1 .LKPR> 2> <N==? <ANDB .BITP 4> .WD0>> + 0) + (2)>) + (<=? <1 .LKPR> 3> 0) + (1)>> ;"I=0 => return symbol" + <COND (<0? .I> + <COMPLETE .BFR .LEN <3 .LKPR> <4 .LKPR>> + <RUBOUTCHR .XTRCHR> + <PBREAK> ;"print the break" + <RETURN <APPLY ,<1 .TABLE> 2 <2 .LKPR> <2 .TABLE>> + .LEAVE-READER>) + (<1? .I> + <RUBOUTCHR .XTRCHR> + <PBREAK> ;"print the break" + <RETURN <READER-PARSE .BFR .LEN> .LEAVE-READER>) + (<==? .I 2> + <COND (<AND <NOT .READER-SILENCE> <==? .LEN <LENGTH <3 .LKPR>>>> + <PRINC ,EXACT-MATCH-CHAR> + <SET XTRCHR <+ .XTRCHR 1>>) + (ELSE + <COMPLETE .BFR .LEN <3 .LKPR> <4 .LKPR>> + <SET LEN <4 .LKPR>> + <COND (<AND <NOT .READER-SILENCE> + <L? .LEN <LENGTH <3 .LKPR>>>> + <PRINC ,PARTIAL-MATCH-CHAR> + <SET XTRCHR <+ .XTRCHR 1>>)>)>) + (<AND <NOT .READER-SILENCE> <==? .I 3>> + <PRINC ,NO-MATCH-CHAR> + <SET XTRCHR <+ .XTRCHR 1>>)> + T> + +<DEFINE READER-PARSE (BFR ALEN "AUX" TEMP FS (OKSYN .SYN) TYPE-NAME) + #DECL ((BFR) STRING (LEN ALEN XTRCHR) FIX (TEMP) ANY + (FS) <OR ATOM FALSE <VECTOR [REST STRING ATOM]>> (TYPE-NAME) ATOM + (OKSYN SYN) <VECTOR [REST STRING]> (VALUE) ANY) + <REPEAT () + <COND + (<0? .ALEN> <RETURN ,READER-NULL-LINE>) + (<OR <==? <1 .BFR> !\ > <==? <1 .BFR> !\ >> + <SET BFR <REST .BFR>> + <SET ALEN <- .ALEN 1>>) + (ELSE + <PUT .BFR <+ .ALEN 1> !\!> + <PUT .BFR <+ .ALEN 2> !\> + <SET TEMP <LPARSE .BFR>> + <COND (<0? .CAL-PARSE> + <AND <EMPTY? .TEMP> <RETURN ,READER-NULL-LINE>> + <SET TEMP <1 .TEMP>>)> + <RETURN <REPEAT () + <COND (<EMPTY? .OKSYN> + <TERPRI> + <PRINC +"Type of input unacceptable. Please retype."> + <TERPRI> + <SET XTRCHR <SET LEN 0>> + <AGAIN .CSACT>) + (<AND <SET FS <LOOKUP <1 .OKSYN> ,FULLSYN>> + <SET FS ,.FS> + <OR <==? <TYPE .TEMP> <2 .FS>> + <==? ANY <2 .FS>> + <AND <==? FLOAT <2 .FS>> + <TYPE? .TEMP FIX> + <SET TEMP <FLOAT .TEMP>>>>> + <RETURN .TEMP>) + (<AND <SET TYPE-NAME <PARSE <1 .OKSYN>>> + <==? <TYPE .TEMP> .TYPE-NAME>> + <RETURN .TEMP>)> + <SET OKSYN <REST .OKSYN>>>>)>>> + +<DEFINE HELP-MESSAGE ("AUX" BFR L) + #DECL ((BFR) STRING (L LEN) FIX (BITP) WORD (VALUE) <OR ATOM FALSE> + (HELPSW) <OR FALSE ATOM CHANNEL> (P2) <VECTOR STRING STRING> + (SYN) <VECTOR [REST STRING]>) + <COND (.READER-SILENCE T) + (<NOT <0? .LEN>> + <SET BITP #WORD *000000000000*> + <RUBOUTCHR .XTRCHR> + <SET XTRCHR 0> + <>) + (<AND .HELPSW + <NOT <EMPTY? <2 .P2>>> + <OR <TYPE? .HELPSW CHANNEL> + <SET HELPSW <OPEN "READ" <2 .P2>>>>> + <SET BFR <ISTRING 50>> + <REPEAT () + <COND (<0? <SET L + <READSTRING .BFR + .HELPSW + <STRING <ASCII 12> <ASCII 3>>>>> + <RETURN T>)> + <PRINTSTRING .BFR .OUTCHAN .L> + <COND (<L? .L 50> <RETURN T>)>> + <COND (<NOT <READCHR .HELPSW <>>> + <CLOSE .HELPSW> + <TERPRI> + <PRINC "End of help message."> + <TERPRI> + <SET HELPSW <>>)> + T ;"don't print the break") + (ELSE <TPROMPT <1 .P2> .SYN T <>> <SET HELPSW T>)>> + +<DEFINE WINNER-TAKE-ALL () + #DECL ((MODE XTRCHR LEN) FIX (TABLE) <OR VECTOR SYMTABLE> (BFR) STRING + (SYN) VECTOR (SYNSW) <OR ATOM FALSE>) + <COND (<AND <0? .MODE> + <MEMBER "MULT" .SYN> + <SET WINLIST <APPLY ,<1 .TABLE> 6 .BFR .LEN <2 .TABLE>>> + <NOT <EMPTY? .WINLIST>>> + <CHECK-FOR-MULT> + <BACKUPRUB> + <COMMAPRINT .WINLIST <>> + <RETURN <CHTYPE .WINLIST SPLICE> .LEAVE-READER>)>> + +<DEFINE DO-POSSYM () + #DECL ((MODE XTRCHR LEN) FIX (TABLE) <OR VECTOR SYMTABLE> + (BFR P1) STRING (SYN) VECTOR (SYNSW) <OR ATOM FALSE> + (VALUE) ATOM) + <COND (.READER-SILENCE) + (<0? .MODE> + <APPLY ,<1 .TABLE> + 3 + .BFR + .LEN + <2 .TABLE> + " +The following are possible: +" + "No symbol begins like that."> + <TERPRI> + <TPROMPT .P1 .SYN .SYNSW> + <PRINTSTRING .BFR .OUTCHAN .LEN> + <SET XTRCHR 0>) + (ELSE + <TERPRI> + <PRINC "Symbol input not currently available."> + <TERPRI>)> + T> + +<DEFINE CHECK-FOR-MULT () + #DECL ((SYN) <VECTOR [REST STRING]> (MULTSW) ATOM (VALUE) FALSE) + <COND (<MEMBER "MULT" .SYN> <SET .MULTSW T> <>)>> + +<DEFINE RUBOUT-ONE () + #DECL ((LEN XTRCHR) FIX (P1 BFR) STRING (SYN) VECTOR + (SYNSW) <OR ATOM FALSE> (VALUE) ATOM) + <COND (<0? .LEN> <SET XTRCHR 0> <TPROMPT .P1 .SYN .SYNSW>) + (ELSE + <RUBOUTCHR .XTRCHR> + <RUBOUTCHR <NTH .BFR .LEN>> + <SET XTRCHR 0> + <SET LEN <- .LEN 1>>)> + T> + +<DEFINE RETYPE-BUFFER (PRE) + #DECL ((PRE SYNSW) <OR ATOM FALSE> (P1 BFR) STRING (SYN) VECTOR + (LEN XTRCHR) FIX (VALUE) ATOM) + <COND (<NOT .READER-SILENCE> + <COND (.PRE <TERPRI>) + (,TENEX <PRINC <ASCII 12>>) ;"form-feed" + (ELSE <PRINC "C">)> ;"ITS clear-screen" + <TPROMPT .P1 + .SYN + .SYNSW + T + <AND <ASSIGNED? MULTLIST> .MULTLIST>> + <PRINTSTRING .BFR .OUTCHAN .LEN> + <SET XTRCHR 0>)> + T> + +<DEFINE QUOTE-NEXT-CHAR ("AUX" (XBFR <ISTRING 1 !\ >) I J) + #DECL ((XBFR) STRING (I BITP) WORD (J XTRCHR) FIX (BREAK) CHARACTER + (VALUE) ATOM) + <RTOBRK CURXCHAN I J .XBFR .XTRCHR ""> + <PUT .BFR <SET LEN <+ .LEN 1>> <1 .XBFR>> + <SET XTRCHR 0> + T> + +<DEFINE INPUT-FROM-TTY () + #DECL ((P1 BFR) STRING (SYN) VECTOR + (SYNSW READER-SILENCE XFPOPSW) <OR ATOM FALSE> (LEN) FIX + (VALUE) ATOM) + <XFPUSH <>> + <TPROMPT .P1 .SYN .SYNSW> + <PRINTSTRING .BFR .OUTCHAN .LEN> + <SET XFPOPSW T> + T> + +<SET BREAKS '"� î! "> + +<DEFINE COMMAPRINT (STRUC "OPTIONAL" (TERP!-INITIAL T)) + #DECL ((STRUC) STRUCTURED) + <AND .TERP!-INITIAL <TERPRI>> + <MAPF <> + <FUNCTION (X) + <COND (<TYPE? .X SYMBOL> <PRINC <1 .X>>) (<PRIN1 .X>)> + <PRINC ", ">> + .STRUC>> + + <DEFINE BLTREST (TOVEC "TUPLE" FROMTUP) + #DECL ((TOVEC VALUE) <OR TUPLE <PRIMTYPE VECTOR>> (FROMTUP) TUPLE) + <BLT .FROMTUP .TOVEC>> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog/calsym.ueb005 b/src/mprog/calsym.ueb005 new file mode 100644 index 00000000..07dc091d --- /dev/null +++ b/src/mprog/calsym.ueb005 @@ -0,0 +1,592 @@ + +<PACKAGE "CALSYM"> + +<ENTRY MAKEBST + BSTOPS + BSTSORT + BGSTOPS + BGSTSORT + MAKEBGST + MAKESST + SSTOPS + MAKEMST + MSTOPS + MAKEGST + GSTOPS + SYMBOL + SYMTABLE + READER-SILENCE + CURXCHAN + CALICO-DEV + CALICO-SNM + CALICO-NM1 + CALICO-NM2 + PROMPT1 + PROMPT2 + MUDPRM + DSPLEVEL + SAVEREP + COMPS + SORTCHK + STRCOMP-NC + TENEX> + +<USE "SORTX"> + +<NEWTYPE SYMTABLE VECTOR '<VECTOR ATOM [REST ANY]>> + +<NEWTYPE SYMBOL VECTOR '<VECTOR STRING ANY>> + +<SETG TENEX <>> + +<SET CURXCHAN <>> + +<SET DSPLEVEL 0> + +<SET CALICO-DEV "DSK"> + +<SET CALICO-SNM ,SNM> + +<SET CALICO-NM1 ,SNM> + +<SET CALICO-NM2 !">> + +<DEFINE SSTOPS (OPCODE + "TUPLE" ARGS + "AUX" (OPLIST '[SSTLKP SSTEVAL SSTPOSSYM SSTPRINT SSTEXACT SSTALLPOSS])) + #DECL ((OPCODE) FIX (ARGS) TUPLE (OPLIST) <VECTOR [REST ATOM]>) + <COND (<AND <G? .OPCODE 0> <L=? .OPCODE <LENGTH .OPLIST>>> + <APPLY ,<NTH .OPLIST .OPCODE> !.ARGS>)>> + +<DEFINE SSTLKP (STR COUNT TABLE RETURNS "AUX" (N 1) CSTR TEMP) + #DECL ((STR CSTR) STRING (TABLE) <VECTOR [REST STRING ANY]> + (COUNT TEMP N) FIX (RETURNS VALUE) <VECTOR FIX ANY STRING FIX>) + <PUT .RETURNS 1 0> + <REPEAT () + <COND (<EMPTY? .TABLE> <RETURN .RETURNS>) + (<=? <COMPS .STR <SET CSTR <1 .TABLE>> .COUNT> .COUNT> + <COND (<=? .COUNT <LENGTH .CSTR>> + <PUT .RETURNS 1 3> + <PUT .RETURNS 2 .N> + <PUT .RETURNS 3 .CSTR> + <PUT .RETURNS 4 .COUNT> + <RETURN .RETURNS>) + (<0? <SET TEMP <1 .RETURNS>>> + <PUT .RETURNS 1 1> + <PUT .RETURNS 2 .N> + <PUT .RETURNS 3 .CSTR> + <PUT .RETURNS 4 <LENGTH .CSTR>>) + (ELSE + <PUT .RETURNS 1 2> + <COND (<L? <SET TEMP <COMPS .CSTR <3 .RETURNS>>> + <4 .RETURNS>> + <PUT .RETURNS 4 .TEMP>)> + <COND (<G? <LENGTH .CSTR> <LENGTH <3 .RETURNS>>> + <PUT .RETURNS 2 .N> + <PUT .RETURNS 3 .CSTR>)>)>)> + <SET N <+ 1 .N>> + <SET TABLE <REST .TABLE 2>>>> + + +<DEFINE SSTALLPOSS (STR CNT TBL) + #DECL ((STR) STRING (CNT N) FIX (TBL) <VECTOR [REST STRING ANY]>) + <MAPR ,LIST + <FUNCTION (X) + <COND (<0? <MOD <LENGTH .X> 2>> + <COND (<=? <COMPS .STR <1 .X> .CNT> .CNT> + <CHTYPE [<1 .X> <2 .X>] SYMBOL>) + (<MAPRET>)>) + (<MAPRET>)>> + .TBL>> + +<DEFINE SSTPOSSYM (STR CNT TBL "OPTIONAL" (S1 "") (S2 "") "AUX" (N 0)) + #DECL ((STR S1 S2) STRING (VALUE CNT N) FIX + (TBL) <VECTOR [REST STRING ANY]>) + <REPEAT () + <COND (<EMPTY? .TBL> <COND (<0? .N> <PRINC .S2>)> <RETURN .N>) + (<=? <COMPS .STR <1 .TBL> .CNT> .CNT> + <COND (<0? .N> <PRINC .S1>)> + <PRINC <1 .TBL>> + <TERPRI> + <SET N <+ .N 1>>)> + <SET TBL <REST .TBL 2>>>> + +<DEFINE SSTEVAL (SYMBID SYMBOLS "AUX" (T1 <* 2 .SYMBID>) (T2 <- .T1 1>)) + #DECL ((SYMBID T1 T2) FIX (SYMBOLS) <VECTOR [REST STRING ANY]> + (VALUE) SYMBOL) + <CHTYPE [<NTH .SYMBOLS .T2> <NTH .SYMBOLS .T1>] SYMBOL>> + +<DEFINE SSTPRINT (TABLE "AUX" TEMP (POS 0) (LINESIZE <13 .OUTCHAN>)) + #DECL ((TABLE) <VECTOR [REST STRING ANY]> (TEMP POS LINESIZE) FIX) + <REPEAT () + <COND (<EMPTY? .TABLE> <TERPRI> <RETURN T>) + (<AND <G? <+ .POS <SET TEMP <+ 4 <LENGTH <1 .TABLE>>>>> + .LINESIZE> + <G? .POS 0>> + <SET POS 0> + <TERPRI>)> + <SET POS <+ .POS .TEMP>> + <PRINC " "> + <PRINC <1 .TABLE>> + <SET TABLE <REST .TABLE 2>>>> + +<DEFINE SSTEXACT (STR TABLE "AUX" (L <LENGTH .STR>)) + #DECL ((STR) STRING (TABLE) VECTOR (L) FIX (VALUE) <OR FALSE SYMBOL>) + <REPEAT () + <COND (<EMPTY? .TABLE> <RETURN <>>) + (<==? <COMPS <1 .TABLE> .STR> .L> + <RETURN <CHTYPE [<1 .TABLE> <2 .TABLE>] SYMBOL>>) + (ELSE <SET TABLE <REST .TABLE 2>>)>>> + +<DEFINE MAKESST (TITLE CONTENTS "OPTIONAL" (KILLER <>)) + #DECL ((TITLE) STRING (CONTENTS) <VECTOR [REST STRING ANY]> + (SSTOPS) FUNCTION (VALUE) SYMTABLE) + <CHTYPE [SSTOPS .CONTENTS .TITLE .KILLER] SYMTABLE>> + +<DEFINE MSTOPS (OPCODE + "TUPLE" ARGS + "AUX" (OPLIST [MSTLKP MSTEVAL MSTPOSSYM MSTPRINT MSTEXACT MSTALLPOSS])) + #DECL ((OPCODE) FIX (ARGS) TUPLE (OPLIST) <VECTOR [REST ATOM]>) + <COND (<AND <G? .OPCODE 0> <L=? .OPCODE <LENGTH .OPLIST>>> + <APPLY ,<NTH .OPLIST .OPCODE> !.ARGS>)>> + +<DEFINE MSTLKP (STR LEN TABLE INFO "AUX" TEMP (N 1) (TINFO [0 0 "" 0])) + #DECL ((STR) STRING (LEN TEMP N) FIX + (VALUE TINFO INFO) <VECTOR FIX ANY STRING FIX> + (TABLE) <VECTOR [REST SYMTABLE]>) + <PUT .INFO 1 0> + <REPEAT () + <COND (<EMPTY? .TABLE> <RETURN .INFO>)> + <APPLY ,<1 <1 .TABLE>> 1 .STR .LEN <2 <1 .TABLE>> .TINFO> + <SET TEMP <1 .TINFO>> + <COND (<0? .TEMP>) + (<OR <=? .TEMP 3> <0? <1 .INFO>>> + <PUT .INFO 2 [.N <2 .TINFO>]> + <PUT .INFO 3 <3 .TINFO>> + <PUT .INFO 4 <4 .TINFO>> + <COND (<=? .TEMP 3> <RETURN <PUT .INFO 1 3>>) + (ELSE <PUT .INFO 1 .TEMP>)>) + (ELSE + <PUT .INFO 1 2> + <PUT .INFO + 4 + <COMPS <3 .INFO> + <3 .TINFO> + <MIN <4 .INFO> <4 .TINFO>>>> + <COND (<G? <LENGTH <3 .TINFO>> <LENGTH <3 .INFO>>> + <PUT .INFO 2 [.N <2 .TINFO>]> + <PUT .INFO 3 <3 .TINFO>>)>)> + <SET N <+ .N 1>> + <SET TABLE <REST .TABLE>>>> + +<DEFINE MSTEVAL (ID TABLE "AUX" (TBLNUM <1 .ID>)) + #DECL ((ID) <VECTOR FIX ANY> (TBLNUM) FIX (VALUE) SYMBOL + (TABLE) <VECTOR [REST SYMTABLE]>) + <APPLY ,<1 <NTH .TABLE .TBLNUM>> + 2 + <2 .ID> + <2 <NTH .TABLE .TBLNUM>>>> + +<DEFINE MSTALLPOSS (STR CNT TABLE + "AUX" (N 0) TEMP) + #DECL ((STR) STRING (CNT N TEMP) FIX + (TABLE) <VECTOR [REST SYMTABLE]>) + <MAPF ,LIST + <FUNCTION (X) + <COND (<SET RES + <APPLY ,<1 .X> + 6 + .STR + .CNT + <2 .X>>> + <MAPRET !.RES>) + (<L? .CNT 0> T) + (<MAPRET>) + >> + .TABLE>> + +<DEFINE MSTPOSSYM (STR CNT TABLE + "OPTIONAL" (S1 "") (S2 "") + "AUX" (TS1 .S1) (N 0) TEMP) + #DECL ((STR S1 S2 TS1) STRING (CNT N TEMP VALUE) FIX + (TABLE) <VECTOR [REST SYMTABLE]>) + <REPEAT () + <COND (<EMPTY? .TABLE> <COND (<0? .N> <PRINC .S2>)> <RETURN .N>) + (<NOT <0? <SET TEMP + <APPLY ,<1 <1 .TABLE>> + 3 + .STR + .CNT + <2 <1 .TABLE>> + .TS1>>>> + <SET N <+ .N .TEMP>> + <SET TS1 "">)> + <SET TABLE <REST .TABLE>>>> + +<DEFINE MSTPRINT (TABLE "OPTIONAL" (N 0) "AUX" (I 0)) + #DECL ((N I) FIX (VALUE) ATOM (TABLE) <VECTOR [REST SYMTABLE]>) + <REPEAT () + <COND (<EMPTY? .TABLE> <RETURN T>) + (<OR <0? .N> <=? .N .I>> + <COND (<G=? <LENGTH <1 .TABLE>> 3> + <PRINC <3 <1 .TABLE>>> + <TERPRI>)> + <APPLY ,<1 <1 .TABLE>> 4 <2 <1 .TABLE>>>)> + <SET I <+ .I 1>> + <SET TABLE <REST .TABLE>>>> + +<DEFINE MSTEXACT (STR TABLE "AUX" TEMP) + #DECL ((STR) STRING (TABLE) <VECTOR [REST SYMTABLE]> + (TEMP VALUE) <OR SYMBOL FALSE>) + <REPEAT () + <COND (<EMPTY? .TABLE> <RETURN <>>) + (<SET TEMP <APPLY ,<1 <1 .TABLE>> 5 .STR <2 <1 .TABLE>>>> + <RETURN .TEMP>) + (ELSE <SET TABLE <REST .TABLE>>)>>> + +<DEFINE MAKEMST (TITLE CONTENTS "OPTIONAL" (KILLER <>)) + #DECL ((TITLE) STRING (CONTENTS) <VECTOR SYMTABLE> (MSTOPS) FUNCTION + (VALUE) SYMTABLE) + <CHTYPE [MSTOPS .CONTENTS .TITLE .KILLER] SYMTABLE>> + +<DEFINE GSTOPS (OPCODE "TUPLE" ARGS) + #DECL ((OPCODE) FIX (ARGS) TUPLE) + <COND (<1? .OPCODE> <GSTLKP !.ARGS>) + (<==? .OPCODE 2> <GSTEVAL !.ARGS <>>) + (<==? .OPCODE 3> <GSTPOSSYM !.ARGS>) + (<==? .OPCODE 4> <GSTPRINT !.ARGS>) + (<==? .OPCODE 5> <GSTEXACT !.ARGS>) + (<==? .OPCODE 6> <GSTALLPOSS !.ARGS>)>> + +<DEFINE GSTLKP (STR COUNT TABLE RETURNS + "AUX" (N 2) CSTR TEMP (SYMSIZ <1 .TABLE>) + (SYMNAMS <REST .TABLE 2>)) + #DECL ((STR CSTR) STRING (TABLE) <VECTOR FIX ANY> (SYMNAMS) VECTOR + (COUNT TEMP N SYMSIZ) FIX + (RETURNS VALUE) <VECTOR FIX ANY STRING FIX>) + <PUT .RETURNS 1 0> + <REPEAT () + <COND (<EMPTY? .SYMNAMS> <RETURN .RETURNS>) + (<=? <COMPS .STR <SET CSTR <1 .SYMNAMS>> .COUNT> .COUNT> + <COND (<=? .COUNT <LENGTH .CSTR>> + <PUT .RETURNS 1 3> + <PUT .RETURNS 2 .N> + <PUT .RETURNS 3 .CSTR> + <PUT .RETURNS 4 .COUNT> + <RETURN .RETURNS>) + (<0? <SET TEMP <1 .RETURNS>>> + <PUT .RETURNS 1 1> + <PUT .RETURNS 2 .N> + <PUT .RETURNS 3 .CSTR> + <PUT .RETURNS 4 <LENGTH .CSTR>>) + (ELSE + <PUT .RETURNS 1 2> + <COND (<L? <SET TEMP <COMPS .CSTR <3 .RETURNS>>> + <4 .RETURNS>> + <PUT .RETURNS 4 .TEMP>)> + <COND (<G? <LENGTH .CSTR> <LENGTH <3 .RETURNS>>> + <PUT .RETURNS 2 .N> + <PUT .RETURNS 3 .CSTR>)>)>)> + <SET N <+ .SYMSIZ .N>> + <SET SYMNAMS <REST .SYMNAMS .SYMSIZ>>>> + +<DEFINE GSTPOSSYM (STR CNT TBL + "OPTIONAL" (S1 "") (S2 "") + "AUX" (N 0) (NAMES <REST .TBL 2>)) + #DECL ((STR S1 S2) STRING (VALUE CNT N) FIX (TBL) <VECTOR FIX ANY> + (NAMES) VECTOR) + <REPEAT () + <COND (<EMPTY? .NAMES> <COND (<0? .N> <PRINC .S2>)> <RETURN .N>) + (<=? <COMPS .STR <1 .NAMES> .CNT> .CNT> + <COND (<0? .N> <PRINC .S1>)> + <PRINC <1 .NAMES>> + <TERPRI> + <SET N <+ .N 1>>)> + <SET NAMES <REST .NAMES <1 .TBL>>>>> + +<DEFINE GSTALLPOSS (STR CNT TBL "AUX" (N 2) (NAMES <REST .TBL 2>)) + #DECL ((STR) STRING (CNT N) FIX (TBL) <VECTOR FIX ANY> (NAMES) VECTOR) + <REPEAT ((LST ())) + <COND (<EMPTY? .NAMES> <RETURN .LST>) + (<=? <COMPS .STR <1 .NAMES> .CNT> .CNT> + <SET LST <CONS <GSTEVAL .N .TBL <>> .LST>>)> + <SET N <+ .N <1 .TBL>>> + <SET NAMES <REST .NAMES <1 .TBL>>>>> + +<DEFINE GSTEVAL (SYMBID SYMBOLS SORTED + "AUX" (EVALER <2 .SYMBOLS>) + (FRONT + <REST .SYMBOLS + <COND (.SORTED <+ .SYMBID 1>) (.SYMBID)>>)) + #DECL ((SYMBID) FIX (SORTED) <OR 'T FALSE> (SYMBOLS) <VECTOR FIX ANY> + (EVALER) ANY (FRONT) VECTOR (VALUE) SYMBOL) + <CHTYPE [<1 .FRONT> + <COND (<APPLICABLE? .EVALER> <APPLY .EVALER .FRONT>) + (ELSE .EVALER)>] + SYMBOL>> + +<DEFINE GSTPRINT (TABLE + "AUX" TEMP (POS 0) (NAMES <REST .TABLE 2>) + (LINESIZE <13 .OUTCHAN>)) + #DECL ((TABLE) VECTOR (NAMES) VECTOR (TEMP POS LINESIZE) FIX) + <REPEAT () + <COND (<EMPTY? .NAMES> <TERPRI> <RETURN T>) + (<AND <G? <+ .POS <SET TEMP <+ 4 <LENGTH <1 .NAMES>>>>> + .LINESIZE> + <G? .POS 0>> + <SET POS 0> + <TERPRI>)> + <SET POS <+ .POS .TEMP>> + <PRINC " "> + <PRINC <1 .NAMES>> + <SET NAMES <REST .NAMES <1 .TABLE>>>>> + +<DEFINE GSTEXACT (STR TABLE + "AUX" (N 2) (SZ <1 .TABLE>) (NAMES <REST .TABLE 2>) + (L <LENGTH .STR>)) + #DECL ((STR) STRING (TABLE) VECTOR (N SZ L) FIX (NAMES) VECTOR + (VALUE) <OR FALSE SYMBOL>) + <REPEAT () + <COND (<EMPTY? .NAMES> <RETURN <>>) + (<==? <COMPS <1 .NAMES> .STR> .L> + <RETURN <GSTEVAL .N .TABLE <>>>) + (ELSE <SET NAMES <REST .NAMES .SZ>>)> + <SET N <+ .N 1>>>> + +<DEFINE MAKEGST (TITLE CONTENTS "OPTIONAL" (KILLER <>)) + #DECL ((TITLE) STRING (SYMSIZE) FIX (EVALER) ANY + (CONTENTS) <VECTOR FIX ANY> (GSTOPS) FUNCTION (VALUE) SYMTABLE) + <CHTYPE [GSTOPS .CONTENTS .TITLE .KILLER] SYMTABLE>> + +<DEFINE BSTSORT (TABLE "OPTIONAL" (LEN 2) (KEYOFF 0)) + #DECL ((LEN KEYOFF) FIX) + <SORT ,SORTCHK .TABLE .LEN .KEYOFF>> + +<DEFINE SORTCHK (S1 S2) + #DECL ((S1 S2) STRING (VALUE) <OR FALSE ATOM>) + <COND (<G=? <STRCOMP-NC .S1 .S2> 0>)>> + +<DEFINE MAKEBST (NM TAB "OPTIONAL" (KILLING <>)) + #DECL ((NM) STRING (KILLING) <OR FALSE FORM> + (TAB) <VECTOR [REST STRING ANY]> (VALUE) SYMTABLE) + <CHTYPE [BSTOPS .TAB .NM .KILLING] SYMTABLE>> + +<DEFINE BSTOPS (NUM "TUPLE" TUP) + #DECL ((NUM) FIX) + <COND (<1? .NUM> <BSTLOOKUP !.TUP>) + (<==? .NUM 2> <BSTEVAL !.TUP>) + (<==? .NUM 3> <BSTPOSSYM !.TUP>) + (<==? .NUM 4> <BSTPRINT !.TUP>) + (<==? .NUM 5> <BSTEXACT !.TUP>) + (<==? .NUM 6> <BSTALLPOSS !.TUP>)>> + +<DEFINE BSTLOOKUP (STR FX DATA SCRATCH "AUX" SS TEM LONGEST TT (OFFSET 2)) + #DECL ((VALUE SCRATCH) <VECTOR FIX ANY STRING FIX> (STR SS) STRING + (FX TEM LONGEST OFFSET TT) FIX (DATA) VECTOR) + <PUT .SCRATCH 1 0> + <PUT .SCRATCH 4 0> + <COND (<EMPTY? .DATA> <SET TEM 3>) + (<TYPE? <1 .DATA> FIX> + <AND <==? <LENGTH .DATA> 2> <SET TEM 3>> + <SET OFFSET <1 .DATA>> + <SET DATA <REST .DATA 2>>)> + <OR <ASSIGNED? TEM> + <SET TEM <GETINDEX .DATA .STR .FX .OFFSET>>> + <REPEAT () + <COND (<G? .TEM <LENGTH .DATA>> <RETURN .SCRATCH>)> + <SET TT <COMPS <SET SS <NTH .DATA .TEM>> .STR .FX>> + <COND (<L? .TT .FX> <RETURN .SCRATCH>) ;"not prefix of any" + (<=? .TT <LENGTH .SS>> + <PUT .SCRATCH 1 3> ;"exact" + <PUT .SCRATCH 2 .TEM> + <PUT .SCRATCH 3 .SS> + <PUT .SCRATCH 4 .TT> + <RETURN .SCRATCH>) + (<0? <1 .SCRATCH>> + <PUT .SCRATCH 1 1> + <PUT .SCRATCH 2 .TEM> + <PUT .SCRATCH 3 .SS> + <PUT .SCRATCH 4 <SET LONGEST <LENGTH .SS>>>) + (<OR <1? <1 .SCRATCH>> <==? <1 .SCRATCH> 2>> + <PUT .SCRATCH 1 2> + <PUT .SCRATCH 4 <COMPS <3 .SCRATCH> .SS <4 .SCRATCH>>> + ;"longest prefix" + <COND (<G? <LENGTH .SS> .LONGEST> + <PUT .SCRATCH 3 .SS> + <PUT .SCRATCH 2 .TEM> + <SET LONGEST <LENGTH .SS>>)>)> + <SET TEM <+ .TEM .OFFSET>>>> + +<DEFINE BSTEVAL (FX DATA) + #DECL ((VALUE) SYMBOL (FX) FIX (DATA) <VECTOR [REST STRING ANY]>) + <CHTYPE [<NTH .DATA .FX> <NTH .DATA <+ .FX 1>>] SYMBOL>> + +<DEFINE BSTPOSSYM (STR FX DATA + "OPTIONAL" (STRFIRST "") (STRLAST "") + "AUX" (FIRSTFLAG 0) TEM (OFFSET 2)) + #DECL ((STR STRFIRST STRLAST) STRING (FX FIRSTFLAG TEM OFFSET) FIX + (DATA) VECTOR) + <COND (<EMPTY? .DATA> <SET TEM 3>) + (<TYPE? <1 .DATA> FIX> + <AND <==? <LENGTH .DATA> 2> <SET TEM 3>> + <SET OFFSET <1 .DATA>> + <SET DATA <REST .DATA 2>>)> + <OR <ASSIGNED? TEM> + <SET TEM <GETINDEX .DATA .STR .FX .OFFSET>>> ;"find position" + <REPEAT () + <COND (<G? .TEM <LENGTH .DATA>> + <COND (<0? .FIRSTFLAG> <PRINC .STRLAST>)> + <RETURN .FIRSTFLAG>) + (<==? <COMPS .STR <NTH .DATA .TEM> .FX> .FX> + <COND (<0? .FIRSTFLAG> <PRINC .STRFIRST>)> + <SET FIRSTFLAG <+ .FIRSTFLAG 1>> + <PRINC <NTH .DATA .TEM>> + <SET TEM <+ .TEM .OFFSET>> + <TERPRI>) + (ELSE <SET TEM <+ <LENGTH .DATA> 1>>)>>> + +<DEFINE BSTALLPOSS (STR FX DATA "AUX" TEM (OFFSET 2) (BGST <>)) + #DECL ((STR) STRING (FX FIRSTFLAG TEM OFFSET) FIX (BGST) <OR FALSE 'T> + (DATA) VECTOR) + <COND (<EMPTY? .DATA> <SET TEM 3>) + (<TYPE? <1 .DATA> FIX> + <SET BGST T> + <AND <==? <LENGTH .DATA> 2> <SET TEM 3>> + <SET OFFSET <1 .DATA>> + <SET DATA <REST .DATA 2>>)> + <OR <ASSIGNED? TEM> + <SET TEM <GETINDEX .DATA .STR .FX .OFFSET>>> ;"find position" + <REPEAT ((L ()) ML (FIRSTSW <>) TEMP) + #DECL ((L ML) <LIST [REST SYMBOL]> (FIRSTSW) <OR 'T FALSE> + (TEMP) SYMBOL) + <COND (<G? .TEM <LENGTH .DATA>> <RETURN .L>) + (<==? <COMPS .STR <NTH .DATA .TEM> .FX> .FX> + <SET TEMP + <COND (.BGST <GSTEVAL .TEM <BACK .DATA 2> T>) + (<CHTYPE <SUBSTRUC .DATA <- .TEM 1> 2> + SYMBOL>)>> + <COND (.FIRSTSW <SET ML <REST <PUTREST .ML (.TEMP)>>>) + (<SET FIRSTSW T> <SET L <SET ML (.TEMP)>>)> + <SET TEM <+ .TEM .OFFSET>>) + (ELSE <SET TEM <+ <LENGTH .DATA> 1>>)>>> + +<DEFINE BSTEXACT (STR DATA "AUX" TEM) + #DECL ((STR) STRING (DATA) VECTOR (TEM) FIX) + <AND <TYPE? <1 .DATA> FIX> <SET DATA <REST .DATA 2>>> + <SET TEM <GETINDEX .DATA .STR>> + <COND (<G? .TEM <LENGTH .DATA>> <>) ;"out of bounds" + (<==? <COMPS <NTH .DATA .TEM> .STR> + <LENGTH <NTH .DATA .TEM>>> + <CHTYPE [.STR <NTH .DATA <+ .TEM 1>>] SYMBOL>)>> + +<DEFINE UPPERCHAR (C "AUX" (N <ASCII .C>)) + #DECL ((C) CHARACTER (N VALUE) FIX) + <COND (<AND <G=? .N 97> <L=? .N 122>> <- .N 32>) (.N)>> + +<DEFINE GETINDEX (DATA STR + "OPTIONAL" (FX <LENGTH .STR>) (OFFSET 2) + "AUX" (L </ <LENGTH .DATA> .OFFSET>) (POS 1) TCHAR FCHAR TEM + TT HL RHFLAG) + #DECL ((L VALUE TT FCHAR POS FX OFFSET HL TCHAR RHFLAG) FIX + (STR TEM) STRING (DATA) VECTOR) + <COND (<0? .FX> 1) + (ELSE + <SET FCHAR <UPPERCHAR <1 .STR>>> + <REPEAT () + <SET HL </ .L 2>> + <SET TEM <NTH .DATA <+ .POS <* .HL .OFFSET>>>> + ;"<* .HL .OFFSET> N.E. .L" + <SET TCHAR <UPPERCHAR <1 .TEM>>> + <SET RHFLAG 0> ;"indicates lh initially" + <COND (<=? .FCHAR .TCHAR> ;"changes to COMPS search" + <COND (<G? <SET TT <STRCOMP-NC .STR .TEM .FX>> 0> + ;"el should be in right half" + <SET RHFLAG 1>) + (<0? .TT> + <RETURN <+ .POS <* .HL .OFFSET>>>)>) + (<G? .FCHAR .TCHAR> <SET RHFLAG 1>)> + <COND (<1? .RHFLAG> + <SET POS <+ .POS <* .HL .OFFSET>>> + <AND <1? <CHTYPE <ANDB .L 1> FIX>> + <SET POS <+ .POS .OFFSET>>>)> + <COND (<1? .L> <RETURN .POS>)> + <SET L .HL>>)>> + +<DEFINE STRCOMP-NC (S1 S2 "OPTIONAL" (CNT <LENGTH .S1>) "AUX" CH1 CH2) + #DECL ((CH1 CH2) FIX (CNT VALUE) FIX (S1 S2) STRING) + <COND (<EMPTY? .S2> <COND (<EMPTY? .S1> 0) (ELSE 1)>) + (<EMPTY? .S1> -1) + (<L=? .CNT 0> 0) + (ELSE + <REPEAT () + <SET CH1 <UPPERCHAR <1 .S1>>> + <SET CH2 <UPPERCHAR <1 .S2>>> + <COND (<L? .CH1 .CH2> <RETURN -1>) + (<G? .CH1 .CH2> <RETURN 1>) + (<0? <SET CNT <- .CNT 1>>> + <COND (<EMPTY? .S2> <RETURN 0>) + (ELSE <RETURN -1>)>)> ;"all =" + <SET S1 <REST .S1>> + <COND (<EMPTY? <SET S2 <REST .S2>>> <RETURN 1>)> + ;"S2 prefix of S1">)>> + +<DEFINE BGSTOPS (NUM "TUPLE" T) + #DECL ((NUM) FIX) + <COND (<1? .NUM> <BSTLOOKUP !.T>) + (<==? .NUM 2> <GSTEVAL !.T T>) + (<==? .NUM 3> <BSTPOSSYM !.T>) + (<==? .NUM 4> <GSTPRINT !.T>) + (<==? .NUM 5> <BSTEXACT !.T>) + (<==? .NUM 6> <BSTALLPOSS !.T>)>> + +<DEFINE MAKEBGST (NAME TABLE "OPTIONAL" (KILLING <>)) + #DECL ((NAME) STRING (TABLE) VECTOR (KILLING) ANY) + <CHTYPE [BGSTOPS .TABLE .NAME .KILLING] SYMTABLE>> + +<DEFINE BGSTSORT (TABLE "EXTRA" SORTED) + #DECL ((TABLE SORTED) VECTOR) + <BACK <BSTSORT <REST .TABLE 2> <1 .TABLE>> 2>> + +<DEFINE BSTPRINT (DATA) + #DECL ((DATA) <VECTOR [REST STRING ANY]> (VALUE) ATOM) + <REPEAT () + <COND (<EMPTY? .DATA> <TERPRI> <RETURN T>) + (<G? <+ 5 <LENGTH <1 .DATA>>> + <- <13 .OUTCHAN> <14 .OUTCHAN>>> + <TERPRI>)> + <PRINC <1 .DATA>> + <PRINC " "> + <SET DATA <REST .DATA 2>>> + T> + +<SETG COMPS + %<FIXUP!-RSUBRS '[ +#CODE ![23851171840 23851171841 23851171842 23851171843 -19864223735 26038501372 +23088857097 23751557133 23085678503 23851171844 23851171845 23751557137 +23085678503 25614352384 23849037825 23852220461 29527900160 25614352384 +17199529984 -20397948931 26441416704 17196646400 -20397948933 26441416704 +17196646400 28205908009 18656264194 -24142413822 17191403516 17208180734 +12381585409 12389974019 27682406405 23088857128 27011317765 22582132741 +26618101792 26206011482 23088857129 25937576001 22971416606 17859346433 +-20384317438 25328615470 23085695322 32767 1572870 5691682056 0 2!] + COMPS + #DECL ("VALUE" FIX STRING STRING "OPTIONAL" FIX)] + '(50 + FINIS!-MUDDLE + 229287 + (13 9) + $TLOSE!-MUDDLE + 225280 + (15) + MPOPJ!-MUDDLE + 246106 + (45))>> + +<AND <ASSIGNED? GLUE> + .GLUE + <PUT ,COMPS + GLUE + '![5246992 1048592 1141899264 786449 524301!]>> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog/caltop.umrc02 b/src/mprog/caltop.umrc02 new file mode 100644 index 00000000..2f31a44c --- /dev/null +++ b/src/mprog/caltop.umrc02 @@ -0,0 +1,142 @@ +<PACKAGE "CALTOP"> + +<ENTRY TOPCOMTABLE> + +<USE "CALDES" + "CALSYM" + "LEX" + "CALUTL" + "CALCOM" + "COMMAND" + "MUDCAL" + "CALRDR" + "JOBS" + "TAILOR"> + + +<DEFINE COMBINE-SYMTABS () + <COND (<NOT <GASSIGNED? COMBSYMS>> + <SETG COMBSYMS <MAKEMST "Combined commands and symbol-tables" + [,COMTITLES ,COMTABLE]>>)> + ,COMBSYMS> + +<SET TOPCOMTABLE <MAKELST "Top level commands" '[ + "activate.subsystem" <ACT-SUBSYSTEM> + "commands" + <CALICO-COMMAND + <FUNCTION (A) <COND (<TYPE? .A SYMTABLE> + <TABLEPRINT .A>) + (ELSE <TERPRI> <PRINC + "No such command table.">)>> + [,COMTITLES "from" +'["Type the name of the current command table +whose contents you wish to examine. Type ^F +to see the titles of all current tables." ""]["SYM"]] + [,COMTITLES]> + "describe" + + <CALICO-COMMAND ,CALDESC + '[<COMBINE-SYMTABS> + "command" + ["Type the name of the command or +symbol-table you would like described." ""] + ["MULT" "SYM"]] '[] "SEGMENT-EACH"> + "who" + <LISTF "TTY:"> + "listf" + <CALICO-COMMAND ,LISTF '[[] "Device" +["Type the name of the device +whose directory you wish to list." ""] ["FILE"]] '["DSK:"]> + "print.file" + <CALICO-COMMAND ,FILEPRINT '[[] "" +["Type the name of the file you wish to print." ""] ["FILE"]] '[""]> + "copy.file" + <CALICO-COMMAND ,COPY-FILE '[[] "from" +["Type the name of the file to be copied from." ""] ["FILE"] [] "to" +["Type the name of the new file to get the +copy of the original file." ""] ["FILE"]]> + "copy.to.printer" + + <CALICO-COMMAND ,FILETPL '[[] "from" +["Type the name of the file to be copied to +the line-printer." ""] ["FILE"]]> + "delete.file" + <CALICO-COMMAND ,RENAME '[[] "named" +["Type the name of the file you wish to be +deleted." ""] ["FILE"]] '[] "PRINT-RESULT"> + "rename.file" + <CALICO-COMMAND <FUNCTION (A B) <RENAME .A TO .B>> +'[[] "from" +["Type the current name of the file to be +renamed." ""] ["FILE"] [] "to" ["Type the new name to be given to the file." ""] +["FILE"]] '[] "PRINT-RESULT"> + + "execute.file" + <CALICO-COMMAND ,XFILE '[[] "from" +["Type the name of the file whose contents is to +be used as console input." ""] ["FILE"]] '["MUDCAL (INIT)"]> + "script" + + <CALICO-COMMAND ,TTY-SCRIPT '[[] "to" +["Type the name of the file into which the +tty script should be placed." ""] ["FILE"]]> + "end.script" + + <END-TTY-SCRIPT> + "end.all.scripts" + <END-ALL-TTY-SCRIPT> + "turn.tty.off" + + <TTY-SILENCE> + "turn.tty.on" + + <TTY-UNSILENCE> + "kill" + + <CALICO-COMMAND ,KILL-TABLE [,COMTITLES "table title" +'["Type the title of the table to be removed +from the current command set." ""] '["SYM"]] [<1 <2 ,COMTABLE>>]> + "quit" + + <CALICO-QUIT> + "recurse.to.muddle" + + <RECURSEFCN> + "fload" + <CALICO-COMMAND ,FLOAD '[[] "" + ["Type the name of the file you want to load." ""] + ["FILE"]] + '[""]> + "continue" + <ERRET T> + "erret" + + <CALICO-COMMAND ,ERRET '[[] "value" + ["Type the value that you want to ERRET." ""] + ["OBJECTS"]] '[] "SEGMENT-EACH"> + "top.level" + <TOP-LEVEL-FCN> + "evaluate" + <CALICO-COMMAND ,PRINT '[[] "" + ["Type the MUDDLE object you want to evaluate." ""] + ["FORM"]] '[()]> + "frames" + + <FRAMES> + "tailor" + + <TAILOR> + "run" + <CALICO-COMMAND ,RUN '[[] "job" + ["type the name of the job to be run as an inferior" + "ARC:CALSUB;RUN HELPM"] + ["LINE"] + [] "JCL" + ["type a command stream to be given to the job." + "ARC:CALSUB;RUN HELPM"] + ["LINE"] + ]["TIME"] "SEGMENT-EACH"> + ] 2>>> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog/calutl.umrc01 b/src/mprog/calutl.umrc01 new file mode 100644 index 00000000..6b70374f --- /dev/null +++ b/src/mprog/calutl.umrc01 @@ -0,0 +1,285 @@ + +<PACKAGE "CALUTL"> + +<USE "STR" "CALSYM" "TTY" "TIMFCN"> + +<ENTRY FSP-PARSE + DATE-PARSE + XFPUSH + XFPOP + NOTTY? + CAREFUL-TTY-OFF + OPENTELL + RDBLOUT + XFSTACK + XFLEVEL> + + +<TITLE SSNAM> + <DECLARE ("VALUE" <PRIMTYPE WORD> <PRIMTYPE WORD>)> + <PSEUDO <SET *SUSET #OPCODE *43540000000*>> + <MOVE C* [*400016000001*]> ;".ssnam" + <ADDI C* (AB)> ;"addr=1(AB)" + <*SUSET C> + <MOVE A* (AB)> + <MOVE B* 1 (AB)> + <JRST FINIS> + +<TITLE NOTTY?> + <DECLARE ("VALUE" <OR FALSE ATOM>)> + <SKIPN NOTTY> + <JRST GORETFALSE> + <MOVSI A* TATOM> + <MOVE B* <MQUOTE T>> + <JRST FINIS> +GORETFALSE + <MOVSI A* TFALSE> + <MOVEI B* 0> + <JRST FINIS> + + +<TITLE FSP-PARSE> + <DECLARE ("VALUE" <VECTOR [REST <OR LOSE STRING>]> STRING)> + <PUSH TP* $TFIX> ; "Build empty vector" + <PUSH TP* [4]> + <MCALL 1 IVECTOR> + <PUSH TP* A> ; "Save it" + <PUSH TP* B> + +LOOP <HRRZ A* (AB)> ; "Check string length" + <MOVE D* 1(AB)> ; "Get byte pointer" +ILOOP <JUMPE A* DONE> ; "Quit when string is empty" + <ILDB B* D> ; "Get next char" + <CAIE B* *11*> ; "Tab?" + <CAIN B* *40*> ; "Space?" + <SKIPA> ; "Yes - keep scanning" + <JRST SFIELD> ; "No - start of a field" + <MOVEM D* 1(AB)> ; "Update byte pointer" + <SOJA A* ILOOP> ; "Yes - and count" + +SFIELD <HRRM A* (AB)> ; "Update string count" + <SETZM C> ; "Count sub-field" +COUNT <CAIE B* *40*> ; "Space?" + <CAIN B* *11*> ; "Tab?" + <JRST EFIELD> ; "Yes - end" + <CAIE B* !":> ; "Colon?" + <CAIN B* !";> ; "Semi-colon" + <JRST EFIELD> ; "Yes - end" + <AOS C> ; "Bump field size" + <ILDB B* D> ; "Get next char" + <SOJG A* COUNT> ; "Keep looking unless end of string" +EFIELD <PUSH TP* $TFIX> ; "Now get a string of the right length" + <PUSH TP* C> + <MCALL 1 ISTRING> + <PUSH TP* A> ; "Save the string" + <PUSH TP* B> + <HRRZS A> ; "Isolate length" + <HRRZ C* (AB)> ; "Get current input string length" +COPY <ILDB D* 1(AB)> ; "Copy characters" + <IDPB D* B> + <SOS C> + <SOJG A* COPY> + <HRRM C* (AB)> ; "Update input string length" + <JUMPE C* FNAME> ; "If end of string - file name" + <SOS (AB)> ; "Otherwise - get next char" + <ILDB A* 1(AB)> ; "And see what it is" + <CAIE A* *40*> + <CAIN A* *11*> + <JRST FNAME> ; "Space or tab - file name" + <CAIN A* !":> + <JRST DEV> ; "Colon - device" + <CAIN A* !";> + <JRST DIR> ; "Semi-colon - directory" + <JRST FNAME> ; "Huh?? - how did we get here" + +FNAME <MOVE A* 1(TB)> ; "Get vector pointer" + <GETYP E* 4(A)> ; "Get file name 1" + <CAIN E* TSTRING> ; "Is it alread a string" + <JRST FNAME2> ; "Yes - file name 2" + <POP TP* 5(A)> ; "No - string on stack is file name 1" + <POP TP* 4(A)> + <JRST LOOP> + +FNAME2 <POP TP* 7(A)> ; "String - file name 2" + <POP TP* 6(A)> + <JRST LOOP> + +DEV <MOVE A* 1(TB)> ; "String is device" + <POP TP* 1(A)> + <POP TP* (A)> + <JRST LOOP> + +DIR <MOVE A* 1(TB)> ; "String is directory" + <POP TP* 3(A)> + <POP TP* 2(A)> + <JRST LOOP> + +DONE <POP TP* B> ; "Return the vector" + <POP TP* A> + <JRST FINIS> + +<END> + + +<DEFINE CAREFUL-TTY-OFF () + <COND (<NOTTY?> + <SSNAM <STRTOX "NO-TTY">> ;"peek" + <PROG () <SLEEP 2> <RESET ,INCHAN> <AND <NOTTY?> <AGAIN>>> + <SSNAM <STRTOX <SNAME>>>)> + <TTY-OFF>> + +<DEFINE OPENTELL (MODE FILENAME "AUX" CHAN) + #DECL ((MODE FILENAME) STRING (CHAN VALUE) <OR CHANNEL FALSE>) + <COND (<SET CHAN <OPEN .MODE .FILENAME>> .CHAN) + (ELSE + <TERPRI> + <PRINC .FILENAME> + <TERPRI> + <PRINC <1 .CHAN>> + .CHAN)>> + +<DEFINE XFPUSH (NEWXF "OPTIONAL" (SILMODE <>)) + #DECL ((NEWXF CURXCHAN) <OR CHANNEL STRING FALSE> (VALUE) ATOM + (SILMODE) <OR ATOM FALSE> + (XFSTACK) <LIST [REST FIX <OR CHANNEL STRING FALSE>]> + (XFLEVEL DSPLEVEL) FIX) + <COND (.CURXCHAN + <SET XFSTACK + (.XFLEVEL .CURXCHAN .READER-SILENCE !.XFSTACK)>)> + <SET CURXCHAN .NEWXF> + <SET XFLEVEL .DSPLEVEL> + <SET READER-SILENCE .SILMODE> + <COND (<NOT .CURXCHAN> <CAREFUL-TTY-OFF>)> + T> + +<DEFINE XFPOP () + #DECL ((VALUE CURXCHAN) <OR CHANNEL STRING FALSE> + (XFSTACK) <LIST [REST FIX <OR CHANNEL STRING FALSE>]> + (DSPLEVEL XFLEVEL) FIX) + <COND (<TYPE? .CURXCHAN CHANNEL> <CLOSE .CURXCHAN>)> + <COND (<AND <NOT <EMPTY? .XFSTACK>> <G=? <1 .XFSTACK> .DSPLEVEL>> + <SET XFLEVEL <1 .XFSTACK>> + <SET CURXCHAN <2 .XFSTACK>> + <SET READER-SILENCE <3 .XFSTACK>> + <SET XFSTACK <REST .XFSTACK 3>>) + (ELSE + <SET CURXCHAN <>> + <SET XFLEVEL .DSPLEVEL> + <SET READER-SILENCE <>>)> + <COND (<NOT .CURXCHAN> <CAREFUL-TTY-OFF>)> + .CURXCHAN> + +<SET SPCPRT + [9 + "[TAB]" + 10 + "[LF]" + 12 + "[FF]" + 13 + "[CR]" + 27 + "[ESC]" + 32 + "[SP]" + 127 + "[DEL]"]> + +<DEFINE RDBLOUT (STR "OPTIONAL" (OUTCHAN .OUTCHAN) "AUX" TMP C) + #DECL ((VALUE) ATOM (STR) <OR STRING CHARACTER> + (SPCPRT) <VECTOR [REST FIX STRING]> (OUTCHAN) CHANNEL + (C) CHARACTER (TMP) <OR <VECTOR [REST FIX STRING]> FALSE>) + <REPEAT () + <COND (<TYPE? .STR CHARACTER> <SET C .STR>) + (<EMPTY? .STR> <RETURN T>) + (ELSE <SET C <1 .STR>>)> + <COND (<SET TMP <MEMBER <ASCII .C> .SPCPRT>> + <PRINC <2 .TMP> .OUTCHAN>) + (<L? <ASCII .C> 32> + <PRINC !"^ .OUTCHAN> + <PRINC <ASCII <+ <ASCII .C> 64>> .OUTCHAN>) + (ELSE <PRINC .C .OUTCHAN>)> + <COND (<TYPE? .STR CHARACTER> <RETURN T>)> + <SET STR <REST .STR>>>> + +<DEFINE DATE-PARSE (HAIRY-STRING "OPTIONAL" (DV (0 0 0)) + "EXTRA" (HAIRY-LIST <LPARSE .HAIRY-STRING>) (LOST <>) + (DL ())) + #DECL ((HAIRY-STRING) STRING (HAIRY-LIST) LIST (DV) <LIST [3 FIX]> + (DL) LIST (LOST) ANY (VALUE) <OR FALSE <LIST [3 FIX]>>) + <MAPF <> + <FUNCTION (X) + <AND <TYPE? .X FORM> ;"Takes care of , and ." + <MEMQ <1 .X> '[LVAL GVAL]> + <SET X <2 .X>>> + <COND + (<TYPE? .X FIX> + <COND (<G? .X 31> + <COND (<G? .X 99> + <SET STR <UNPARSE .X>> + <COND (<==? <LENGTH .STR> 4> + <PUT .DV 1 <PARSE <REST .STR 2>>>) + (<MAPLEAVE <SET LOST .STR>>)>) + (<PUT .DV 1 .X>)>) + (<PUT .DV 3 .X>)>) + (<TYPE? .X ATOM> + <SET STR <UNPARSE .X>> + <COND (<SET P <POSQ !"/ .STR T>> ;"Its a FOO/BAR/BLETCH" + <SET DL (<PARSE <SUBSTRUC .STR 0 <- .P 1>>> !.DL)> + <SET STR <REST .STR .P>> + <COND (<SET P <POSQ !"/ .STR T>> + <SET DL (<PARSE <SUBSTRUC .STR 0 <- .P 1>>> !.DL)> + <SET STR <REST .STR .P>> + <OR <EMPTY? .STR> <SET DL (<PARSE .STR> !.DL)>>) + (<NOT <EMPTY? .STR>> <SET DL (<PARSE .STR> !.DL)>)> + <COND (<NOT <DECL? .DL '<LIST [REST FIX]>>> + <MAPLEAVE <SET LOST .DL>>)> + <COND (<1? <LENGTH .DL>> <PUT .DV 3 <1 .DL>>) + (<==? <LENGTH .DL> 2> + <PUT .DV 3 <1 .DL>> + <PUT .DV 2 <2 .DL>>) + (<PUT .DV 1 <1 .DL>> + <PUT .DV 3 <2 .DL>> + <PUT .DV 2 <3 .DL>>)> + <MAPLEAVE T>)> + <COND + (<MAPF <> + <FUNCTION (Y) + <COND (<==? <COMPS .STR .Y> 3> + <MAPLEAVE <PUT .DV 2 <POSQ .Y .MONTHS <>>>>)>> + .MONTHS>) + (<MAPLEAVE <SET LOST .STR>>)>)>> + .HAIRY-LIST> + <COND (<OR <G? <1 .DV> 99> ;"Losing dates" + <G? <2 .DV> 12> + <G? <3 .DV> + <COND (<AND <==? <2 .DV> 2> <0? <MOD <1 .DV> 4>>> 29) + (<NTH '![31 28 31 30 31 30 31 31 30 31 30 31!] + <2 .DV>>)>> + <L? <1 .DV> 0> + <L? <2 .DV> 0> + <L? <3 .DV> 0>> + <SET LOST .DV>)> + <COND (.LOST <CHTYPE (.LOST) FALSE>) (<LIST !.DV>)>> + +<SET MONTHS + ["JAN" + "FEB" + "MAR" + "APR" + "MAY" + "JUN" + "JUL" + "AUG" + "SEP" + "OCT" + "NOV" + "DEC"]> + +<DEFINE POSQ (OBJ STR R=? "EXTRA" M) + #DECL ((OBJ) ANY (STR M) STRUCTURED (R=?) <OR 'T FALSE> (VALUE) <OR FIX FALSE>) + <COND (<SET M <COND (.R=? <MEMQ .OBJ .STR>) (<MEMBER .OBJ .STR>)>> + <+ <- <LENGTH .STR> <LENGTH .M>> 1>)>> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog/celest.usg072 b/src/mprog/celest.usg072 new file mode 100644 index 00000000..151f60d7 --- /dev/null +++ b/src/mprog/celest.usg072 @@ -0,0 +1,919 @@ +<PACKAGE "CELEST"> + +<ENTRY PHASE NEXT-PHASE NEXT-SEASON SUNRISE NOON SUNSET MOONRISE MOONSET> + +<USE "TIMFCN"> + +;<SETG DT-REUSE ((0 0 0) (0 0 0) <TIMEZONE>)> ;"bugs somewhere using this" +;<GDECL (DT-REUSE) <LIST <LIST [REST FIX]> <LIST [REST FIX]>>> + +<DEFINE PHASE ("OPTIONAL" (DT <DTNOW ;,DT-REUSE>)) + #DECL ((VALUE) FLOAT (DT) LIST) + <RANGE <- <MOON-TRUE-POS .DT> <SUN-TRUE-POS .DT>>>> + +<DEFINE NEXT-PHASE + ;"computes next change of phase to nearest appx. 6 minutes (.05 deg) + -- or last change if .NEXT? is 0" + ("OPTIONAL" (DT <DTNOW ;,DT-REUSE>) (TOL 0.05) (NEXT? 1) + "AUX" (PH <PHASE .DT>) DIFF + (TARGET <* 90.0 <MOD </ <FIX <+ <* .NEXT? 90.0> .PH>> 90> 4>>)) + #DECL ((VALUE) <VECTOR FIX LIST> (DT) LIST + (TOL DIFF TARGET PH) FLOAT (NEXT?) FIX) + <REPEAT () + <SET DIFF <- .TARGET .PH>> + <AND <G? .DIFF +180.0> <SET DIFF <- .DIFF 360.0>>> + <AND <L? .DIFF -180.0> <SET DIFF <+ .DIFF 360.0>>> + <COND (<L? <ABS .DIFF> .TOL> <RETURN [</ <FIX .TARGET> 90> .DT]>) + (T <SET PH <PHASE + <SET DT <DTADD .DT + (() (0 0 <FIX <* 6557.2 .DIFF>>)) + ;,DT-REUSE>>>>)>>> + +<DEFINE NEXT-SEASON + ;"computes next change of season to nearest appx. 6 min (.004 deg) + -- or last change if .NEXT? is 0" + ("OPTIONAL" (DT <DTNOW ;,DT-REUSE>) (TOL 0.004) (NEXT? 1) + "AUX" (POS <SUN-TRUE-POS .DT>) DIFF + (TARGET <* 90.0 <MOD </ <FIX <+ <* .NEXT? 90.0> .POS>> 90> 4>>)) + #DECL ((VALUE) <VECTOR FIX LIST> (DT) LIST + (TOL DIFF TARGET POS) FLOAT (NEXT?) FIX) + <REPEAT () + <SET DIFF <- .TARGET .POS>> + <AND <G? .DIFF +180.0> <SET DIFF <- .DIFF 360.0>>> + <AND <L? .DIFF -180.0> <SET DIFF <+ .DIFF 360.0>>> + <COND (<L? <ABS .DIFF> .TOL> <RETURN [</ <FIX .TARGET> 90> .DT]>) + (T <SET POS <SUN-TRUE-POS + <SET DT <DTADD .DT + (() (0 0 <FIX <* 87657.6 .DIFF>>)) + ;,DT-REUSE>>>>)>>> + +<DEFINE SUNRISE ("OPTIONAL" (DT <DTNOW ;,DT-REUSE>) (TOL 0.5)) + ;"computes time of sunrise on this date" + #DECL ((VALUE DT) LIST (TOL) FLOAT) + <SUNRISE/SET <DTNORM .DT ;,DT-REUSE> .TOL -1>> + +<DEFINE SUNSET ("OPTIONAL" (DT <DTNOW ;,DT-REUSE>) (TOL 0.5)) + #DECL ((VALUE DT) LIST (TOL) FLOAT) + <SUNRISE/SET <DTNORM .DT ;,DT-REUSE> .TOL +1>> + +<DEFINE SUNRISE/SET (DT TOL WHICH) + #DECL ((VALUE DT) LIST (TOL) FLOAT (WHICH) FIX) + <SET DT (<1 .DT> (<+ 12 <* .WHICH 6>> 0 0))> ;"Start at 6 AM or PM." + <REPEAT (ELEV (OELEV 0.0) (ODT .DT) (OOELEV 0.0) (OODT .DT) DTS + (FACTOR <* .WHICH + </ 60.0> 0.25 ;"Sun moves 1 degree in 4 minutes." + <COS <* ,PI </ 180.0> <DDMMSS ,LATITUDE> + ;"appx angle with horizon">>>)) + #DECL ((ELEV OELEV OOELEV FACTOR) FLOAT (ODT OODT) LIST (DTS) FIX) + <SET ELEV <DDMMSS <SUN-ELEV .DT>>> + <COND (<L? <ABS .ELEV> .TOL> ;"close enough?" + <RETURN .DT>) + (<=? .ODT <SET DT ;"stuck on one value?" + <DTADD .DT (() (0 0 <FIX </ .ELEV .FACTOR>>)) ;,DT-REUSE>>> + <RETURN .DT>) + (<AND <L? <* .ELEV .OELEV> 0.0> ;"can't get any closer?" + <1? <ABS <SET DTS <- <DTSECS .ODT> <DTSECS .DT>>>>>> + <RETURN .DT>) + (T + <COND (<=? .DT .OODT> ;"cycle of length 2?" + <SET DT <DTADD .DT (() (0 0 </ .DTS 2>))>>)> + <SET OOELEV .OELEV> <SET OODT .ODT> + <SET OELEV .ELEV> <SET ODT .DT>)>>> + +<DEFINE NOON ("OPTIONAL" (DT <DTNOW>) (TOL 0.5E-1)) + ;"computes time of noon (sun due south) on this date" + #DECL ((VALUE DT) LIST (TOL) FLOAT) + <SET DT (<1 <DTNORM .DT>> (12 0 0))> + <REPEAT (AZIM (OAZIM 0.0) (ODT .DT) S (FACTOR </ -0.25 30.0>)) + #DECL ((AZIM OAZIM FACTOR) FLOAT (ODT) LIST (S) <LIST ATOM FIX>) + <2 <SET S <SUN-AZIM .DT>> <- <2 .S> 180>> + <SET AZIM <DDMMSS .S>> + <COND (<L? <ABS .AZIM> .TOL> <RETURN .DT>) + (<=? .ODT + <SET DT + <DTADD .DT + (() (0 0 <FIX </ .AZIM .FACTOR>>))>>> + <RETURN .DT>) + (<AND <L? <* .AZIM .OAZIM> 0.0> + <1? <ABS <- <DTSECS .ODT> <DTSECS .DT>>>>> + <RETURN .DT>) + (T <SET OAZIM .AZIM> <SET ODT .DT>)>>> + +<DEFINE SUN-ELEV ("OPTIONAL" (DT <DTNOW ;,DT-REUSE>)) + #DECL ((VALUE DT) LIST) + <SET DT <DTNORM .DT ;,DT-REUSE>> + <1 <SUN ,LONGITUDE + ,LATITUDE + <1 .DT> + <UPDATE <2 .DT> ,GMT-OFFSET>>>> + +<DEFINE SUN-AZIM ("OPTIONAL" (DT <DTNOW>)) + #DECL ((VALUE DT) LIST) + <SET DT <DTNORM .DT>> + <2 <SUN ,LONGITUDE + ,LATITUDE + <1 .DT> + <UPDATE <2 .DT> ,GMT-OFFSET>>>> + +<DEFINE MOONRISE ("OPTIONAL" (DT <DTNOW>) (TOL 0.5)) + ;"computes time of moonrise on this date" + #DECL ((VALUE) <OR LIST FALSE> (DT) LIST (TOL) FLOAT) + <MOONRISE/SET <DTNORM .DT> .TOL -1>> + +<DEFINE MOONSET ("OPTIONAL" (DT <DTNOW>) (TOL 0.5)) + #DECL ((VALUE) <OR LIST FALSE> (DT) LIST (TOL) FLOAT) + <MOONRISE/SET <DTNORM .DT> .TOL +1>> + +<DEFINE MOONRISE/SET (DT TOL WHICH + "AUX" (DAY (<1 .DT> (0 0 0))) (P <PHASE .DT>)) + #DECL ((VALUE) <OR LIST FALSE> (DT DAY) LIST (TOL P) FLOAT (WHICH) FIX) + <SET DT <DTNORM + (<1 .DT> + (<+ 12 <* .WHICH 6>> + <FIX <* -4.0 <COND (<OR <AND <==? +1 .WHICH> <G? .P 90.0>> + <AND <==? -1 .WHICH> <G? .P 270.0>>> + <- .P 360.0>) + (T .P)>>>))>> ;"initial guess" + <REPEAT (ELEV (YESTER <>) (MORROW <>) ;"Did we slop over into these days?" + (FACTOR <* .WHICH + 0.25 ;"Elev changes 1 degree in 4 minutes." + <COS <* ,PI </ 180.0> <DDMMSS ,LATITUDE> + ;"appx angle with horizon">>>)) + #DECL ((ELEV FACTOR) FLOAT (YESTER MORROW) <OR 'T FALSE>) + <SET ELEV <DDMMSS <MOON-ELEV .DT>>> + <COND (<L? <ABS .ELEV> .TOL> + <COND (<=? <1 .DAY> <1 .DT>> <RETURN .DT>) + (<BEFORE? .DT .DAY> <COND (.MORROW <RETURN <>>) + (<SET YESTER T> + <SET DT <DTADD .DT '((1)())>> + <AGAIN>)>) + (.YESTER <RETURN <>>) + (<SET MORROW T> <SET DT <DTADD .DT '((-1)())>> <AGAIN>)>) + (T + <SET DT <DTADD .DT (() (0 <FIX </ .ELEV .FACTOR>>)) ;,DT-REUSE>>)>>> + +<DEFINE MOON-ELEV ("OPTIONAL" (DT <DTNOW>)) + #DECL ((VALUE) ANY (DT) LIST) + <MOON ,LONGITUDE ,LATITUDE <DTNORM .DT>>> + +<DEFINE MOON (LONG LATI DT + "AUX" (MLONG <MOON-TRUE-POS .DT>) (UT <DT-TO-UT .DT>) + (OBLIQ <OBLIQUITY .UT>)) + #DECL ((VALUE LONG LATI DT) LIST (MLONG UT OBLIQ) FLOAT) + <ANGLED <1 <SKY-ANGLES + <DDMMSS .LONG> + <DDMMSS .LATI> + <- 360.0 + <RANGE <- <RANGE <GHA-ARIES .UT>> + <RIGHT-ASCENSION .MLONG .OBLIQ>>>> + <DECLINATION .MLONG .OBLIQ> ;<MOON-TRUE-LAT .DT>>>>> + +;"from IMPROVED LUNAR EPHEMERIS 1952-1959, by the Nautical Almanac +Offices of the United States of America and the United Kingdom. +U.S. Government Printing Office, Washington, 1954. 523.3/U58/ni" + +<DEFINE l ("OPTIONAL" (DT <DTNOW ;,DT-REUSE>)) ;"mean anomaly of moon" + #DECL ((VALUE) FLOAT (DT) LIST) + <- <MOON-MEAN-POS .DT> <MOON-MEAN-PGEE .DT>>> + +<DEFINE lp ("OPTIONAL" (DT <DTNOW ;,DT-REUSE>)) ;"mean anomaly of sun" + #DECL ((VALUE) FLOAT (DT) LIST) + <- <SUN-MEAN-POS .DT> <SUN-MEAN-PGEE .DT>>> + +<DEFINE F ("OPTIONAL" (DT <DTNOW ;,DT-REUSE>)) + ;"mean argument of moon's latitude" + #DECL ((VALUE) FLOAT (DT) LIST) + <- <MOON-MEAN-POS .DT> <MOON-MEAN-NODE .DT>>> + +<DEFINE D ("OPTIONAL" (DT <DTNOW ;,DT-REUSE>)) + #DECL ((VALUE) FLOAT (DT) LIST) + <MOON-MEAN-ELONG .DT>> + +<DEFINE MOON-TRUE-POS ("OPTIONAL" (DT <DTNOW ;,DT-REUSE>) + "AUX" (FADS ![<l .DT> <lp .DT> <F .DT> <D .DT>])) + #DECL ((VALUE) FLOAT (DT) LIST (FADS) <UVECTOR [REST FLOAT]>) + <+ <MOON-MEAN-POS .DT> + </ <MAPF ,+ + <FUNCTION (COEFF+ARG) + #DECL ((COEFF+ARG) <VECTOR FLOAT <UVECTOR [4 FIX]>>) + <* <1 .COEFF+ARG> + <SIND <MAPF ,+ ,* <2 .COEFF+ARG> .FADS>>>> + ,SOLAR-TERMS-IN-LONGITUDE> + 3600.0>>> + +;<DEFINE MOON-TRUE-LAT ("OPTIONAL" (DT <DTNOW>) S GF GF2 (dd <d .DT>) + "AUX" (FADS ![<l .DT> <lp .DT> <F .DT> <D .DT>])) + #DECL ((VALUE S dd GF GF2) FLOAT (DT) LIST + (FADS) <UVECTOR [REST FLOAT]>) + <SET S + <+ <F .DT> + </ <TL .dd '![ 0.53733431 -10104982E-12 191E-16]> 360.0> + ;"additive term for MOON-MEAN-POS, Ser. No. 1636, ILE p. 290" + </ <TL .dd '![-0.71995354 147094228E-12 -43E-16]> 360.0> + </ <TL .dd '![-0.48398132 147269147E-12 -43E-16]> 360.0> + ;"additive terms for MOON-MEAN-NODE, Ser. Nos. 1670-1, ILE p. 291" + </ <MAPF ,+ + <FUNCTION (COEFF+ARG) + #DECL ((COEFF+ARG) + <VECTOR FLOAT <UVECTOR [4 FIX]>>) + <* <1 .COEFF+ARG> + <SIND <MAPF ,+ ,* <2 .COEFF+ARG> .FADS>>>> + ,SOLAR-TERMS-IN-LATITUDE:S> + 3600.0>>> + <SET GF + <+ 1 2.708E-6 + <* 139.978 + <+ <TL .dd '![0.71995354 -147094228E-12 43E-16]> + <TL .dd '![0.48398132 -147269147E-12 43E-16]> + <TL .dd '![0.52453688 -147162675E-12 43E-16]>>>>> + ;"diff. betw. prelim. & final values, ILE pp. 344 & 350" + <SET GF2 <* .GF .GF>> + <* + </ <+ 18518.511 1.189> 3600.0> ;"A" + <+ <* .GF <SIND .S>> + <* -336992E-9 .GF .GF2 <SIND <* 3.0 .S>>> + <* 216E-9 .GF .GF2 .GF2 <SIND <* 5.0 .S>>> + <* 53996E-9 + </ <MAPF ,+ + <FUNCTION (COEFF+ARG) + #DECL ((COEFF+ARG) + <VECTOR FLOAT <UVECTOR [4 FIX]>>) + <* <1 .COEFF+ARG> + <SIND <MAPF ,+ ,* <2 .COEFF+ARG> .FADS>>>> + ,SOLAR-TERMS-IN-LATITUDE:N> + 3600.0>>>>> + +;<SETG SOLAR-TERMS-IN-LATITUDE:S + ;"(Only terms with coeff > 10s have been included here.)" + '![[ -112.79 ![ 0 0 0 +1]] + [+2373.36 ![ 0 0 0 +2]] + [ +14.06 ![ 0 0 0 +4]] + [ +192.72 ![+1 0 0 +2]] + [ -13.51 ![+1 0 0 +1]] + [22609.07 ![+1 0 0 0]] + [-4578.13 ![+1 0 0 -2]] + [ -38.64 ![+1 0 0 -4]] + [ +14.78 ![+2 0 0 +2]] + [ +767.96 ![+2 0 0 0]] + [ -152.53 ![+2 0 0 -2]] + [ -34.07 ![+2 0 0 -4]] + [ +50.64 ![+3 0 0 0]] + [ -16.40 ![+3 0 0 -2]] + [ -25.10 ![ 0 +1 0 +2]] + [ +17.93 ![ 0 +1 0 +1]] + [ -126.98 ![ 0 +1 0 0]] + [ -165.06 ![ 0 +1 0 -2]] + [ -16.35 ![ 0 +2 0 -2]] + [ -11.75 ![+1 +1 0 +2]] + [ -115.18 ![+1 +1 0 0]] + [ -182.36 ![+1 +1 0 -2]] + [ -23.59 ![-1 +1 0 +2]] + [ -138.76 ![-1 +1 0 0]] + [ -31.70 ![-1 +1 0 -2]] + [ -10.56 ![+2 +1 0 0]] + [ +11.67 ![+2 -1 0 0]] + [ -52.14 ![ 0 0 +2 -2]] + [ -85.13 ![-1 0 +2 0]]]> + +;<SETG SOLAR-TERMS-IN-LATITUDE:N + ;"(Only terms with coeff > 10s have been included here.)" + '![[-526.069 ![ 0 0 +1 -2]] + [ +44.297 ![+1 0 +1 -2]] + [ +20.599 ![-1 0 +1 0]] + [ -30.598 ![-1 0 +1 -2]] + [ -24.649 ![-2 0 +1 0]] + [ -22.571 ![ 0 +1 +1 -2]] + [ +10.985 ![ 0 -1 +1 -2]]]> + +;<GDECL (SOLAR-TERMS-IN-LATITUDE:S SOLAR-TERMS-IN-LATITUDE:N) + <UVECTOR [REST <VECTOR FLOAT <UVECTOR [REST FIX]>>]>> + +<SETG SOLAR-TERMS-IN-LONGITUDE + ;"(Only terms with coeff > 10s have been included here.)" + '![[22639.500 ![ 1 0 0 0]] + [-4586.465 ![ 1 0 0 -2]] + [+2369.912 ![ 0 0 0 2]] + [ +769.016 ![ 2 0 0 0]] + [ -668.146 ![ 0 1 0 0]] + [ -411.608 ![ 0 0 2 0]] + [ -211.656 ![ 2 0 0 -2]] + [ -205.962 ![ 1 1 0 -2]] + [ +191.953 ![ 1 0 0 2]] + [ -165.145 ![ 0 1 0 -2]] + [ +147.687 ![ 1 -1 0 0]] + [ -125.154 ![ 0 0 0 1]] + [ -109.673 ![ 1 1 0 0]] + [ -55.173 ![ 0 0 2 -2]] + [ -45.099 ![ 1 0 2 0]] + [ +39.528 ![ 1 0 -2 0]] + [ -38.428 ![ 1 0 0 -4]] + [ +36.124 ![ 3 0 0 0]] + [ -30.773 ![ 2 0 0 -4]] + [ +28.475 ![ 1 -1 0 -2]] + [ -24.420 ![ 0 1 0 2]] + [ +18.609 ![ 1 0 0 -1]] + [ +18.023 ![ 0 1 0 1]] + [ +14.577 ![ 1 -1 0 2]] + [ +14.387 ![ 2 0 0 2]] + [ +13.902 ![ 0 0 0 4]] + [ -13.193 ![ 3 0 0 -2]]]> + +<GDECL (SOLAR-TERMS-IN-LONGITUDE) + <UVECTOR [REST <VECTOR FLOAT <UVECTOR [REST FIX]>>]>> + + +;"from EXPLANATORY SUPPLEMENT TO THE ASTRONOMICAL EPHEMERIS AND THE +AMERICAN EPHEMERIS AND NAUTICAL ALMANAC, by H.M. Nautical Almanac +Office. H.M. Stationery Office, London, 1961. QB8.G78" + +<DEFINE d (DT "AUX" (DTN <DTNORM .DT ;,DT-REUSE>) (T <2 .DTN>)) + ;"days since 1900 January 0.5 E.T." + #DECL ((VALUE) FLOAT (DT) LIST + (DTN) <LIST [2 LIST] STRING> (T) <LIST [3 FIX]>) + <+ <DAYS !<1 .DTN>> ;"days since 1960 January 0" + 21914.5 + </ <+ <1 .T> <TZDIFF <3 .DTN> "GMT">> + 24.0> + </ <2 .T> 1440.0> + </ <3 .T> 86400.0>>> + +<DEFINE JD (DT) ;"Julian Date" + #DECL ((VALUE) FLOAT (DT) LIST) + <+ <d .DT> 2415020.0>> + +;<==? <JD '((77 6 1) (-4) "EDT")> 2443295.5> + +<DEFINE TL (D COEFF "AUX" (DN </ 1.0 .D>) F) + ;"Taylor-series approx'n to celestial longitude" + #DECL ((VALUE) FLOAT (D DN) FLOAT (COEFF) <UVECTOR [REST FLOAT]> + (F) FIX) + <SET D <MAPF ,+ + <FUNCTION (C) #DECL ((C) FLOAT) + <* .C <SET DN <* .D .DN>>>> + .COEFF>> + <SET F <FIX .D>> + <+ <MOD .F 360> <- .D .F>>> + +<DEFINE SUN-MEAN-POS ("OPTIONAL" (DT <DTNOW ;,DT-REUSE>)) + ;"geometric mean longitude of sun (p 98)" + #DECL ((VALUE) FLOAT (DT) LIST) + <TL <d .DT> '![279.696678 00.9856473354 +0.2267E-12]>> + +;<==? <SUN-MEAN-POS ,SUMMER> 90.0 ;"(p 203)"> + +;<==? <SUN-MEAN-POS '((60 3 7) (-4) "EDT")> 344.71805 + ;"Ex. 4.1 (p 99) (Epoch 1960.0)"> + +<DEFINE SUN-MEAN-PGEE ("OPTIONAL" (DT <DTNOW ;,DT-REUSE>)) + ;"mean longitude of solar perigee (p 98)" + #DECL ((VALUE) FLOAT (DT) LIST) + <TL <d .DT> '![281.220833 00.0000470684 +0.339E-12 0.7E-19]>> + +<DEFINE MOON-MEAN-POS ("OPTIONAL" (DT <DTNOW ;,DT-REUSE>)) + ;"mean longitude of moon (p 107)" + #DECL ((VALUE) FLOAT (DT) LIST) + <TL <d .DT> '![270.434164 13.1763965268 -0.850E-12 0.39E-19]>> + +;<==? <MOON-MEAN-POS '((60 3 7) (-4) "EDT")> 94.217611 ;"Ex. 4.10 (p 108)"> + +<DEFINE MOON-MEAN-ELONG ("OPTIONAL" (DT <DTNOW ;,DT-REUSE>)) + ;"mean elongation of moon from sun = MOON-MEAN-POS - SUN-MEAN-POS (p 107)" + #DECL ((VALUE) FLOAT (DT) LIST) + <TL <d .DT> '![350.737486 12.1907491914 -1.076E-12 0.39E-19]>> + +;<==? <MOON-MEAN-ELONG .FQ> 90.0 ;"(p 204)"> + +<DEFINE MOON-MEAN-PGEE ("OPTIONAL" (DT <DTNOW ;,DT-REUSE>)) + ;"mean longitude of lunar perigee (p 107)" + #DECL ((VALUE) FLOAT (DT) LIST) + <TL <d .DT> '![334.329556 00.1114040803 -7.739E-12 -0.26E-18]>> + +<DEFINE MOON-MEAN-NODE ("OPTIONAL" (DT <DTNOW ;,DT-REUSE>)) + ;"mean longitude of mean ascending node of lunar orbit on ecliptic (p 107)" + #DECL ((VALUE) FLOAT (DT) LIST) + <TL <d .DT> '![259.183275 -0.0529539222 +1.557E-12 +0.05E-18]>> + +<DEFINE DT-TO-UT ("OPTIONAL" (DT <DTNOW>)) + #DECL ((VALUE) FLOAT (DT) LIST) + <- <d .DT> <d '((75 1 1) (-4) "EDT")>>> + +<DEFINE SUN-TRUE-POS ("OPTIONAL" (DT <DTNOW ;,DT-REUSE>)) + #DECL ((VALUE) FLOAT (DT) LIST) + <4 <SUN-POSITION <DT-TO-UT .DT>>>> + +;"from AI:BKPH;SUNONR 15" + +;" +SUN + +COPYRIGHT Berthold K. P. Horn, 1977 + +Program to calculate sun-elevation and sun-azimuth. +Given observers geographical position and time of observation. + +UT = time in (universal) days since 1975/01/01 U.T. 00:00:00 +ET = time in (ephemeris) days since 1975/01/01 E.T. 00:00:00 + +DT = ET - UT reduction from universal time to ephemeris time. +DT = +45.6 seconds for 1975/01/01 + +Note, starting epoch is 27393.5 days later than epoch usually used, +namely, 1900/01/00 12:00:00. + +GEOMETRIC MEAN LONGITUDE (OF SUN) (L) = 280.0271 + .98564734 * ET +Relative to equinox of date (that is luni-solar and planetary +precession included). [Not directly used here]. + +MEAN ANOMALY (M) = Geometric Mean Longitude - Mean Longitude of Perigee. +M = 357.5166 + .98560026 * ET + +Eccentricity e = .016720 - .0000000011 * ET + +ECCENTRIC ANOMALY (E) -- useful auxillary angle. +Anomaly measured from center of ellipse to circumscribed circle. +E + e sin(E) = M. Transcendental equation (due to Kepler ...). + +TRUE ANOMALY (N): +Anomaly measured from focus of ellipse to actual position. +tan (N/2) = SQRT((1+e)/(1-e)) tan(E/2) + +LONGITUDE OF EARTH PERIGEE (G) = 282.5105 + .00004709 * ET +Relative to equinox of date (that is luni-solar and planetary +precession included). + +TRUE LONGITUDE = LONGITUDE OF PERIGEE + TRUE ANOMALY + +Position of MOON'S NODE (O) = 248.59 - .052954 * ET + + OBLIQUITY OF ECLIPTIC PLANE (X) = 23.4425 - .000000036 ET + Nutation in obliquity = + .0026 * cos(O) ( +9s.210) + Nutation in longitude = - .0048 * sin(O) (-17s.234) + + Radius-Vector = (1 - e * e) / (1 + e * cos(N) ) = 1 - e * cos (E) + + Semi-Diameter = .2670 / Radius-Vector (16m 01s.18) + Parallax = .0024 / Radius-Vector ( 8s.794) + Abberation = .0057 / Radius-Vector (20s.496) + + DECLINATION of sun PHI = asin( sin(L) * sin(X) ) + RIGHT ASCENSION of sun THETA = atan( sin(L) * cos(X) / cos(L) ) + + Mean Sidereal Time = Mean Greenwich Hour Angle of Equinox + GHA(ARIES) = 100.0215 + 360.98564734 * UT + + True GHA-Equinox = Mean GHA-Equinox + Nut-Lon * cos(X) + + LONGITUDE(SUB-SOLAR POINT) = R.A.(SUN) - GHA(ARIES) + LATITUDE(SUB-SOLAR POINT) = DECLINATION(SUN) + + Latitude and Declination increase Northward. + Longitude and Righ Ascension increase Eastward. + Hour Angles increase Westward (sigh...) + +Significant digits: + + Angles -- 4 digits (.3s accuracy) + Angular rates -- 8 digits (1s.3 accuracy per century) + Quadratic terms -- l2 digits (5s accuracy per century) + + Lunar node -- use two digits less, used indirectly. + + Eccentricity -- use two digits more, for rad-to-deg conversion. + +" + + +<GDECL (PI ET-UT REFR-INDEX) FLOAT (LONGITUDE LATITUDE) LIST (GMT-OFFSET) FIX + ;(TRACEF ANGLEF) ;<OR ANY FALSE>> + +<SETG PI <* 4.0 <ATAN 1.0>>> +;<SETG TRACEF <SETG ANGLEF <>>> + +;"Calculate GHA and DECLINATION and SEMI-DIAMETER of SUN. +Given time (UT) in days since 1975/01/01 U.T. 00:00:00 +Result is list, (GHA DEC SD), numbers in decimal degrees." + +<DEFINE SUN-POSITION (UT "AUX" + ET ECC MEANA ECCEA GUESA TRUEA LAMBDM LAMBDA PERI OMEGA OBLIQ + PHI THETA GHAGAM SEMID RADVEC ABBER PARAL NUT-OBLIQ + NUT-LONGIT) + #DECL ((VALUE) <LIST [REST FLOAT]> (UT + ET ECC MEANA ECCEA GUESA TRUEA LAMBDM LAMBDA PERI OMEGA OBLIQ + PHI THETA GHAGAM SEMID RADVEC ABBER PARAL NUT-OBLIQ + NUT-LONGIT) FLOAT) + <SET ET <+ .UT ,ET-UT>> + <SET ECC <ECCENTRICITY .ET>> + <SET MEANA <MEANANOM .ET>> + <SET GUESA <TRUEANOM .MEANA .ECC>> + <SET GUESA <ECCENANOM .GUESA .MEANA .ECC>> + <SET ECCEA <ECCENANOM .GUESA .MEANA .ECC>> + <SET TRUEA <TRUEANOM .ECCEA .ECC>> + <SET PERI <PERIGEE .ET>> + <SET LAMBDM <RANGE <+ .TRUEA .PERI <PERTURB-L .ET>>>> + <SET OBLIQ <OBLIQUITY .ET>> + ;<COND (,TRACEF <PRINT <LIST 'ECCENTRICITY .ECC>>)> + ;<COND (,TRACEF <BARF 'MEAN-ANOMALY <RANGE .MEANA>> + <BARF 'ECCEN-ANOMALY <RANGE .ECCEA>> + <BARF 'TRUE-ANOMALY <RANGE .TRUEA>> + <BARF 'PERIGEE <RANGE .PERI>> + <BARF 'MEAN-OBLIQUITY .OBLIQ> + <BARF 'MEAN-LONGITUDE <RANGE .LAMBDM>>)> + <SET OMEGA <MOON-NODE .ET>> + <SET NUT-OBLIQ <* <COSD .OMEGA> 2.6E-3>> + <SET NUT-LONGIT <* <SIND .OMEGA> -4.7E-3>> + <SET OBLIQ <+ .OBLIQ .NUT-OBLIQ>> + <SET LAMBDA <+ .LAMBDM .NUT-LONGIT>> + ;<COND (,TRACEF <BARF 'MOON-NODE <RANGE .OMEGA>> + <BARF 'NUT-OBLIQUITY .NUT-OBLIQ> + <BARF 'NUT-LONGITUDE .NUT-LONGIT> + <BARF 'TRUE-OBLIQUITY .OBLIQ> + <BARF 'TRUE-LONGITUDE <RANGE .LAMBDA>>)> + <SET RADVEC <RADIUS-VECTOR-T .TRUEA .ECC .ET>> + <SET SEMID </ 0.267 .RADVEC>> + <SET PARAL </ 2.4E-3 .RADVEC>> + <SET ABBER </ 5.7E-3 .RADVEC>> + <SET LAMBDA <- .LAMBDA .ABBER>> + ;<COND (,TRACEF <PRINT <LIST 'TRUE-DISTANCE .RADVEC>>)> + ;<COND (,TRACEF <BARF 'SEMI-DIAMETER .SEMID> + <BARF 'PARALLAX .PARAL> + <BARF 'ABBERATION .ABBER> + <BARF 'APPARENT-LONGITUDE <RANGE .LAMBDA>>)> + <SET PHI <DECLINATION .LAMBDA .OBLIQ>> + <SET THETA <RIGHT-ASCENSION .LAMBDA .OBLIQ>> + <SET GHAGAM <RANGE <GHA-ARIES .UT>>> + ;<COND (,TRACEF <BARF 'DECLINATION .PHI> + <BARF 'RIGHT-ASCENSION <RANGE .THETA>> + <BARF 'MEAN-GHA-EQUINOX .GHAGAM>)> + <SET GHAGAM <+ .GHAGAM <* .NUT-LONGIT <COSD .OBLIQ>>>> + <SET THETA <RANGE <- .GHAGAM .THETA>>> + ;<COND (,TRACEF <BARF 'TRUE-GHA-EQUINOX <RANGE .GHAGAM>> + <BARF 'TRUE-GHA-SUN .THETA> + <BARF 'TRUE-DECLINATION-SUN .PHI>)> + <LIST .THETA .PHI .SEMID .LAMBDA>> + + +;" CALCULATES ELEVATION AND AZIMUTH AT OBSERVERS LOCATION. + THETA1 PHI1 OBSERVERS LONGITUDE AND LATITUDE (decimal degrees). + THETA2 PHI2 CELESTIAL OBJECTS LONGITUDE AND LATITUDE (decimal degrees). + Result is list, (ELEV AZIM), numbers are decimal degrees. + (Does not take into account parallax and refraction)" + +<DEFINE SKY-ANGLES (THETA1 PHI1 THETA2 PHI2) + #DECL ((VALUE) <LIST [REST FLOAT]> + (THETA1 PHI1 THETA2 PHI2) FLOAT) + <LIST <ASIND <+ <* <SIND .PHI1> <SIND .PHI2>> + <* <COSD .PHI1> <COSD .PHI2> <COSD <- .THETA2 .THETA1>>>>> + <ATANE <* <COSD .PHI2> <SIND <- .THETA2 .THETA1>>> + <- <* <COSD .PHI1> <SIND .PHI2>> + <* <SIND .PHI1> <COSD .PHI2> <COSD <- .THETA2 .THETA1>>>>>>> + +;"Calculate sun-elevation and sun-azimuth and semi-diameter. +Given observer longitude and latitude, date and time. +Input format: (A DD MM SS), (A DD MM SS), (YYYY MM DD), (HH MM SS). + +RETURNS (ELEVATION AZIMUTH SEMI), +format ((A DD MM SS) (A DD MM SS) (A DD MM SS)) +AZIMUTH MEASURED CLOCKWISE FROM NORTH." + +<DEFINE SUN (LONG LATI DAT HOURS "AUX" SUNPOS SKYANG) + #DECL ((VALUE) <LIST [REST LIST]> (LONG LATI DAT HOURS SKYANG) LIST + (SUNPOS) <LIST [REST FLOAT]>) + <SET SUNPOS <SUN-POSITION <+ <JULIAN .DAT> <HHMMSS .HOURS>>>> + <SET SKYANG <SKY-ANGLES <DDMMSS .LONG> + <DDMMSS .LATI> + <- 360.0 <1 .SUNPOS>> + <2 .SUNPOS>>> + <LIST <ANGLED <1 .SKYANG>> <ANGLED <2 .SKYANG>> <ANGLED <3 .SUNPOS>>>> + +;<DEFINE BARF (A B) + #DECL ((A) ATOM (B) FLOAT) + <PRINT <LIST .A <COND (,ANGLEF <ANGLED .B>) + (T .B)>>>> + +;" CALCULATE DAYS SINCE 1975/01/01 -- INPUT format (YY MM DD) + JULIAN DATE EQUALS RESULT PLUS 2442414.5" + +<DEFINE JULIAN (DATED) + #DECL ((VALUE) FLOAT (DATED) LIST) + <FLOAT <- <DAYS !.DATED> <DAYS 75 1 1>>>> + +;"CALCULATE DATE, GIVEN DAYS SINCE 1975/01/01 -- OUTPUT format (YY MM DD) +ARGUMENT IS (JULIAN DATE - 2442414.5)" + +<DEFINE DATED (JULIANS) + #DECL ((VALUE) LIST (JULIANS) FLOAT) + <1 <DTADD '((75 1 1) ()) ((<FIX .JULIANS>) ()) ;,DT-REUSE>>> + +;"NEGATE ANGLE IN FUNNY FORMAT" + +<DEFINE INVERT (L) + #DECL ((VALUE L) LIST) + <COND (<==? <1 .L> +> <LIST - !<REST .L>>) + (<==? <1 .L> -> <LIST + !<REST .L>>) + (T <ERROR TYPE-MISMATCH!-ERRORS INVERT>)>> + +;"CONVERT FROM HOURS -- format (HH MM SS) -- TO DECIMAL DAYS." + +<DEFINE HHMMSS (TIMED) + #DECL ((VALUE) FLOAT (TIMED) <LIST [REST FIX]>) + </ <+ <FLOAT <1 .TIMED>> + </ <+ <FLOAT <2 .TIMED>> </ <FLOAT <3 .TIMED>> 60.0>> 60.0>> + 24.0>> + +;"CONVERT FROM DECIMAL DAYS TO HOURS -- format (HH MM SS)." + +<DEFINE TIMED (HHMMSS "AUX" HH MM SS TMP) + #DECL ((VALUE) LIST (HHMMSS TMP) FLOAT (HH MM SS) FIX) + <SET HHMMSS <* 24.0 .HHMMSS>> + <SET HH <FIX .HHMMSS>> + <SET TMP <* 60.0 <- .HHMMSS <FLOAT .HH>>>> + <SET MM <FIX .TMP>> + <SET TMP <* 60.0 <- .TMP <FLOAT .MM>>>> + <SET SS <FIX <+ 0.5 .TMP>>> + <LIST .HH .MM .SS>> + +;"CONVERT FROM ANGLE -- format (A DD MM SS) -- TO DECIMAL DEGREES." + +<DEFINE DDMMSS (ANGLED) + #DECL ((VALUE) FLOAT (ANGLED) <LIST ATOM [3 FIX]>) + <COND (<==? <1 .ANGLED> -> <- 0.0 <DDMMSS <INVERT .ANGLED>>>) + (T + <+ <FLOAT <2 .ANGLED>> + </ <+ <FLOAT <3 .ANGLED>> </ <FLOAT <4 .ANGLED>> 60.0>> + 60.0>>)>> + +;"CONVERT FROM DECIMAL DEGREES TO ANGLE -- format (A DD MM SS)." + +<DEFINE ANGLED (DDMMSS "AUX" DD MM SS TMP) + #DECL ((VALUE) <LIST ATOM [3 FIX]> (DDMMSS TMP) FLOAT (DD MM SS) FIX) + <COND (<L? .DDMMSS 0.0> <INVERT <ANGLED <- 0.0 .DDMMSS>>>) + (T + <SET DD <FIX .DDMMSS>> + <SET TMP <* 60.0 <- .DDMMSS <FLOAT .DD>>>> + <SET MM <FIX .TMP>> + <SET TMP <* 60.0 <- .TMP <FLOAT .MM>>>> + <SET SS <FIX <+ 0.5 .TMP>>> + <LIST + .DD .MM .SS>)>> + +<DEFINE HOURS-TO-ANGLE (HOURS) + #DECL ((HOURS) <LIST [REST FIX]>) + <ANGLED <* 360.0 <HHMMSS .HOURS>>>> + +<DEFINE ANGLE-TO-HOURS (ANGLE) + #DECL ((ANGLE) <LIST ATOM [3 FIX]>) + <COND (<==? <1 .ANGLE> -> <TIMED <+ 1.0 </ <DDMMSS .ANGLE> 360.0>>>) + (<==? <1 .ANGLE> +> <TIMED </ <DDMMSS .ANGLE> 360.0>>) + (T <ERROR ERROR-IN-ANGLE!-ERRORS .ANGLE ANGLE-TO-HOURS>)>> + +;"Calculate MEAN GHA of vernal equinox -- given UNIVERSAL TIME" + +<DEFINE GHA-ARIES (TIM) + #DECL ((VALUE TIM) FLOAT) + <+ <* .TIM 0.985647348> <* <FRACTION .TIM> 360.0> 100.0215>> + +;"Calculate geometric mean longitude of sun -- given EPHEMERIS TIME +Not used now -- " + +<DEFINE LONGITUD (TIM) #DECL ((VALUE TIM) FLOAT) + <+ 280.0271 <* .TIM 0.985647348>>> + +;"Calculate longitude of sun's perigee -- given EPHEMERIS TIME" + +<DEFINE PERIGEE (TIM) #DECL ((VALUE TIM) FLOAT) + <+ 282.5105 <* .TIM 4.7087E-5>>> + +;"Calculate obliquity of ecliptic -- given EPHEMERIS TIME" + +<DEFINE OBLIQUITY (TIM) #DECL ((VALUE TIM) FLOAT) <- 23.4425 <* .TIM 3.56E-7>>> + +;"Calculate longitude of moon's node -- given EPHEMERIS TIME" + +<DEFINE MOON-NODE (TIM) #DECL ((VALUE TIM) FLOAT) + <- 248.59 <* .TIM 0.0529538>>> + +;"Calculate eccentricity of earth orbit -- given EPHEMERIS TIME" + +<DEFINE ECCENTRICITY (TIM) #DECL ((VALUE TIM) FLOAT) + <- 0.01672 <* .TIM 1.15E-9>>> + +;"Calculate mean anomaly -- given EPHEMERIS TIME" + +<DEFINE MEANANOM (TIM) #DECL ((VALUE TIM) FLOAT) + <+ 357.5167 <* .TIM 0.985600261>>> + +;"FIRST FEW TERMS IN PERTURBATION OF MEAN LONGITUDE OF SUN +FROM TABLES OF SIMON NEWCOMB <1895> + +MV, ME, MM, MJ ARE MEAN ANOMALIES OF VENUS, EARTH, MARS AND JUPITER. +DD IS THE ELONGATION OF THE MOON FROM THE SUN. +LP IS A LONG-PERIOD PLANETARY TERM" + +<DEFINE PERTURB-L (ET "AUX" (MV <+ 180.56 <* 1.6021302 .ET>>) + (ME <+ 357.52 <* 0.9856003 .ET>>) + (MM <+ 274.29 <* 0.5240208 .ET>>) + (MJ <+ 341.60 <* 0.0830912 .ET>>) + (DD <+ 218.02 <* 12.1907491 .ET>>) + (LP <+ 246.35 <* 5.5305E-4 .ET>>)) + #DECL ((VALUE ET MV ME MM MJ DD LP) FLOAT) + <+ <* 1.34E-3 <COSD <+ 299.1 <- .MV .ME>>>> + <* 1.54E-3 <COSD <+ 148.3 <- <* 2.0 .MV> <* 2.0 .ME>>>>> + <* 6.9E-4 <COSD <+ 315.9 <- <* 2.0 .MV> <* 3.0 .ME>>>>> + <* 4.3E-4 <COSD <+ 345.3 <- <* 3.0 .MV> <* 4.0 .ME>>>>> + <* 2.8E-4 <COSD <+ 318.2 <- <* 3.0 .MV> <* 5.0 .ME>>>>> + <* 5.7E-4 <COSD <+ 343.9 <- <* 2.0 .ME> <* 2.0 .MM>>>>> + <* 4.9E-4 <COSD <+ 200.4 <- .ME <* 2.0 .MM>>>>> + <* 2.0E-3 <COSD <+ 179.5 <- .ME .MJ>>>> + <* 7.2E-4 <COSD <- 263.2 .MJ>>> + <* 7.6E-4 <COSD <+ 87.1 <- <* 2.0 .ME> <* 2.0 .MJ>>>>> + <* 4.5E-4 <COSD <+ 109.5 <- .ME <* 2.0 .MJ>>>>> + <* 1.78E-3 <SIND .LP>> + <* 1.79E-3 <SIND .DD>>>> + +;"FIRST FEW TERMS IN PERTURBATION OF RADIUS-VECTOR +FROM TABLES OF SIMON NEWCOMB <1895> + +MV, ME, MM, MJ ARE MEAN ANOMALIES OF VENUS, EARTH, MARS AND JUPITER. +DD IS THE ELONGATION OF THE MOON FROM THE SUN." + +<DEFINE PERTURB-R (ET "AUX" (MV <+ 180.56 <* 1.6021302 .ET>>) + (ME <+ 357.52 <* 0.9856003 .ET>>) + ;(MM <+ 274.29 <* 0.5240208 .ET>>) + (MJ <+ 341.60 <* 0.0830912 .ET>>) + (DD <+ 218.02 <* 12.1907491 .ET>>)) + #DECL ((VALUE ET MV ME ;MM MJ DD) FLOAT) + <+ <* 1.6E-5 <COSD <+ 58.3 <- <* 2.0 .MV> <* 2.0 .ME>>>>> + <* 1.6E-5 <COSD <+ 89.5 <- .ME .MJ>>>> + <* 9.0E-6 <COSD <+ 357.1 <- <* 2.0 .ME> <* 2.0 .MJ>>>>> + <* 3.1E-5 <COSD .DD>>>> + +;"Calculate true anomaly, given eccentric anomaly. +(Also gives first approximation of eccentric anomaly from mean anomaly)" + +<DEFINE TRUEANOM (THETA ECC) + #DECL ((VALUE THETA ECC) FLOAT) + <* 2.0 + <ATAND <* <SQRT <+ 1.0 .ECC>> <SIND </ .THETA 2.0>>> + <* <SQRT <- 1.0 .ECC>> <COSD </ .THETA 2.0>>>>>> + +;"Calculate eccentric anomaly from mean anomaly. +Iterative approximation to Kepler's transcendental equation." + +<DEFINE ECCENANOM (THETA MEANA ECC) + #DECL ((VALUE THETA MEANA ECC) FLOAT) + <+ .MEANA <* <RAD-TO-DEG .ECC> <SIND .THETA>>>> + +;"Calculate declination given celestial longitude and obliquity" + +<DEFINE DECLINATION (LAMBD OBLIQ) + #DECL ((VALUE LAMBD OBLIQ) FLOAT) + <ASIND <* <SIND .LAMBD> <SIND .OBLIQ>>>> + +;"Calculate right ascension given celestial longitude and obliquity" + +<DEFINE RIGHT-ASCENSION (LAMBD OBLIQ) + #DECL ((VALUE LAMBD OBLIQ) FLOAT) + <ATAND <* <SIND .LAMBD> <COSD .OBLIQ>> <COSD .LAMBD>>> + +;"Calculate radius-vector from sun to earth -- ECCENTRIC ANOMALY" + +<DEFINE RADIUS-VECTOR-E (ECCA ECC ET) + #DECL ((VALUE ECCA ECC ET) FLOAT) + <+ <- 1.0 <* <COSD .ECCA> .ECC>> <PERTURB-R .ET>>> + +;"Calculate radius-vector from sun to earth -- TRUE ANOMALY" + +<DEFINE RADIUS-VECTOR-T (TRUEA ECC ET) + #DECL ((VALUE TRUEA ECC ET) FLOAT) + <+ </ <- 1.0 <* .ECC .ECC>> <+ 1.0 <* <COSD .TRUEA> .ECC>>> + <PERTURB-R .ET>>> + +;"Calculate change in elevation due to refraction. +Fits data in Nautical Almanac. +Sea-level, normal athmospheric pressure and temperature. + +NOT TO BE USED FOR ELEVATIONS BELOW ABOUT 10 DEGREES" + +<DEFINE REFRACTION-NA (ELEV) + #DECL ((VALUE ELEV) FLOAT) + <* <TAND <- 90.0 .ELEV>> + <+ 0.016167 <* 1.7E-5 <SQUARE <TAND <- 90.0 .ELEV>>>>>>> + +;"Calculate elevation of direction outside athmosphere from viewer elevation" + +<DEFINE ELEV-SPACE(ELEV) #DECL ((VALUE ELEV) FLOAT) + <ACOSD <* <COSD .ELEV> ,REFR-INDEX>>> + +;"Calculate viewer elevation from direction outside athmosphere" + +<DEFINE ELEV-VIEW (ELEV) #DECL ((VALUE ELEV) FLOAT) + <ACOSD </ <COSD .ELEV> ,REFR-INDEX>>> + +;"Calculate change in elevation due to refraction. +Analytic Model. Does not take into account earth's curvature." + +<DEFINE ELEVATION-AN (ELEV) #DECL ((VALUE ELEV) FLOAT) + <- .ELEV <ELEV-SPACE .ELEV>>> + +<DEFINE SQUARE (X) #DECL ((VALUE X) FLOAT) <* .X .X>> + +;"Restrict angle to 0.0 to 360.0 degree range." + +<DEFINE RANGE (THETA) + #DECL ((VALUE THETA) FLOAT) + <COND (<L? .THETA 0.0> <RANGE <+ .THETA 360.0>>) + (<L? .THETA 360.0> .THETA) + (T <RANGE <- .THETA 360.0>>)>> + +<DEFINE RAD-TO-DEG (X) #DECL ((VALUE X) FLOAT) <* </ .X ,PI> 180.0>> + +<DEFINE DEG-TO-RAD (X) #DECL ((VALUE X) FLOAT) <* </ .X 180.0> ,PI>> + +<DEFINE SIND (X) #DECL ((VALUE X) FLOAT) <SIN </ <* ,PI .X> 180.0>>> + +<DEFINE COSD (X) #DECL ((VALUE X) FLOAT) <COS </ <* ,PI .X> 180.0>>> + +;"RETURN RESULT BETWEEN 0 AND 360 DEGREES" + +<DEFINE ATANE (Y X "AUX" Z) ;"0 <= VALUE < 360" + #DECL ((VALUE X Y Z) FLOAT) + <SET Z <* 180.0 </ <ATAN </ .Y .X>> ,PI>>> ;"-90 < Z <= +90" + <COND (<L? .X 0.0> <+ .Z 180.0>) + (<L? .Y 0.0> <+ .Z 360.0>) + (T .Z)>> + +;"RETURN RESULT BETWEEN -180 AND +180 DEGREES" + +<DEFINE ATAND (X Y "AUX" A) + #DECL ((VALUE X Y A) FLOAT) + <SET A <- 90.0 <* 180.0 </ <ATAN </ .Y .X>> ,PI>>>> + <COND (<L? .X 0.0> <- .A 180.0>) + (T .A)>> + +<DEFINE TAND (X) #DECL ((VALUE X) FLOAT) </ <SIND .X> <COSD .X>>> + +;"RETURNS RESULT IN RANGE -90 TO +90 DEGREES" + +<DEFINE ASIND (X) #DECL ((VALUE X) FLOAT) <ATAND .X <SQRT <- 1.0 <* .X .X>>>>> + +;"RETURN RESULT IN RANGE 0 TO 180 DEGREES" + +<DEFINE ACOSD (X) #DECL ((VALUE X) FLOAT) <ATANE <SQRT <- 1.0 <* .X .X>>> .X>> + +<DEFINE FRACTION (X) #DECL ((VALUE X) FLOAT) <- .X <FLOAT <FIX .X>>>> + +;"ADD OFFSETS TO FIRST COMPONENT OF THREE-LIST." + +<DEFINE UPDATE (L offset) + #DECL ((VALUE L) <LIST [3 FIX]> (offset) FIX) + <LIST <+ <1 .L> .offset> <2 .L> <3 .L>>> + +;"CALCULATE POSITION OF SUN AT PRESENT TIME, HERE." + +<DEFINE SUN-NOW-HERE () + #DECL ((VALUE) <LIST [REST LIST]>) + <SUN ,LONGITUDE + ,LATITUDE + <1 <DTNOW ;,DT-REUSE>> + <UPDATE <2 <DTNOW ;,DT-REUSE>> ,GMT-OFFSET>>> + +;"CALCULATE DATE OF LAST SUNDAY IN PRESENT MONTH (WITH N DAYS)" + +<DEFINE LAST-SUNDAY (DAT N) + #DECL ((VALUE N) FIX (DAT) <LIST FIX FIX>) + <- .N <DATE-DOW (<1 .DAT> <2 .DAT> .N)>>> + +;"TO ADJUST FOR THAT CROCK CALLED DAY-LIGHT-SAVINGS TIME. +SWITCH LAST SUNDAY OF APRIL AND LAST SUNDAY OF OCTOBER (?)" + +<DEFINE DAY-SAVE-CROCK (DAT "AUX" (M <2 .DAT>) (D <3 .DAT>)) + #DECL ((VALUE) FIX (DAT) <LIST FIX FIX FIX>) + <COND (<OR <L? .M 4> + <G? .M 10> + <AND <=? .M 4> + <L? .D <LAST-SUNDAY .DAT 30>>> + <AND <=? .M 10> + <G? <- .D 1> <LAST-SUNDAY .DAT 31>>>> + 0) + (T -1)>> + +;"OFFSET OF EPHEMERIS TIME FROM UNIVERSAL TIME (1975/01/01) +REFRACTIVE INDEX OF ATMOSPHERE AT STANDARD PRESSURE AND TEMPERATURE" + +<SETG ET-UT 5.28E-4> +<SETG REFR-INDEX 1.0002824> + +;"GEOGRAPHICAL POSITION OF M.I.T. - A.I. LAB AND OFFSET FROM G.M.T. +MODIFY TO YOUR OWN CONVENIENCE AND YOUR OWN LOCATION AND TIME SYSTEM." + +<SETG LONGITUDE '(- 71 5 20)> +<SETG LATITUDE '(+ 42 21 50)> + +;"GIVE NORMAL OFFSET FROM G.M.T. IN HOURS AS SECOND ARGUMENT" + +<SETG GMT-OFFSET <+ <DAY-SAVE-CROCK <1 <DTNOW ;,DT-REUSE>>> 5>> + +;"CALCULATE POSITION OF SUN AT THIS TIME AND FOR THIS PLACE." + +;<SUN-NOW-HERE> + +<ENDPACKAGE> diff --git a/src/mprog/coder.udl030 b/src/mprog/coder.udl030 new file mode 100644 index 00000000..2c045a29 --- /dev/null +++ b/src/mprog/coder.udl030 @@ -0,0 +1,114 @@ + +<PACKAGE "CODER"> + +<ENTRY CODER CODE-DEFAULT> + +<SETG CODE-DEFAULT "CODE"> ;"dir to look for samples on" + +<GDECL (CODE-DEFAULT) STRING> + +"CODER -- Convert raw form code sample into a UVECTOR of floats" + +<DEFINE CODER (FS + "OPTIONAL" (CHECK? T) (INFO? T) + "AUX" LAST TMP (INFO <>) COD XLIST C (OUTCHAN .OUTCHAN)) + #DECL ((FS) STRING (CHECK? INFO?) <OR ATOM FALSE> (TMP) <OR UVECTOR FALSE> + (COD) UVECTOR (LAST) FIX + (INFO) <OR FALSE VECTOR> (XLIST) LIST (C) <OR FALSE CHANNEL> + (OUTCHAN) CHANNEL (VALUE) <OR FALSE <LIST ANY <UVECTOR FLOAT> LIST>>) + <PROG () + <COND (<SET C + <PROG ((SNM ,CODE-DEFAULT)) + #DECL ((SNM) <SPECIAL STRING>) + <OPEN "READB" .FS>>> + <COND (<SET TMP <READ-BLOCK .C>>) + (ELSE <CLOSE .C> <RETURN .TMP>)> + <COND (<AND .INFO? <NOT <EMPTY? .TMP>>> + <SET INFO <CODE-HEADER .TMP <STRCH .C>>>)> + <COND (<SET TMP <READ-BLOCK .C>>) + (ELSE <CLOSE .C> <RETURN .TMP>)> + <SET COD .TMP> + <MAPR <> + <FUNCTION (UV) + #DECL ((UV) UVECTOR) + <COND (<NOT .CHECK?>) + (<0? <CHTYPE <ANDB <EQVB <1 .UV> .LAST> 32768> + FIX>>) + (<G=? <CHTYPE <1 .UV> FIX> 32768> + <PRINT "TWO-MARKS-IN-A-ROW-AT"> + <PRIN1 <- <LENGTH .COD> <LENGTH .UV>>>) + (ELSE + <PRINT "TWO-SPACES-IN-A-ROW-AT"> + <PRIN1 <- <LENGTH .COD> <LENGTH .UV>>>)> + <SET LAST <CHTYPE <1 .UV> FIX>> + <PUT .UV 1 <FLOAT <CHTYPE <ANDB <1 .UV> 32767> FIX>>>> + <CHUTYPE .COD FLOAT>> + <COND (<SET XLIST <READ .C '()>>)> + <CLOSE .C> + <LIST .INFO .COD .XLIST>)>>> + +<DEFINE READ-BLOCK (C "AUX" BUF (UV ,TUV) L TMP) + #DECL ((C) CHANNEL (BUF UV) <UVECTOR [REST FIX]> (L) FIX (TMP) <OR FIX FALSE>) + <COND (<AND <SET TMP <READB .UV .C '<>>> <L? <1 .UV> 0>> + <COND (<G? <SET L <- <- <1 .UV>> 1>> 0> + <SET BUF <IUVECTOR .L 0>> + <COND (<AND <SET TMP <READB .BUF .C '<>>> <==? .TMP .L>> + .BUF) + (ELSE #FALSE ("SAMPLE SIZE INCORRECT"))>) + (ELSE '[])>) + (.TMP #FALSE ("BAD SAMPLE HEADER"))>> + +<DEFINE CODE-HEADER (I C) + #DECL ((I) UVECTOR (C) STRING) + <VECTOR .C ;"file" + <SIXSTR <1 .I>> ;"message name" + <2 .I> ;"message id" + <3 .I> ;"sender name" + <4 .I> ;"version number" + <COND (<==? <5 .I> -1> -1) + (<MQDATE <5 .I>>)> ;"when sent" + <COND (<==? <6 .I> -1> -1) + (<CHTYPE <6 .I> FLOAT>)> ;"time constant">> + +<DEFINE STRCH (C) + #DECL ((C) CHANNEL (VALUE) STRING) + <STRING <9 .C> ":" + <10 .C> ";" + <7 .C> " " + <8 .C>>> + +<SETG TUV ![0!]> + +<GDECL (TUV) <UVECTOR FIX>> + +"MQDATE -- make standard date/time list from disk format date" + +<DEFINE MQDATE (X "AUX" (HS <CHTYPE <GETBITS .X <BITS 18>> FIX>)) + #DECL ((X HS) FIX) + <LIST <LIST <CHTYPE <GETBITS .X <BITS 7 27>> FIX> + <CHTYPE <GETBITS .X <BITS 4 23>> FIX> + <CHTYPE <GETBITS .X <BITS 5 18>> FIX>> + <LIST </ .HS 7200> + <PROG () <SET HS <MOD .HS 7200>> </ .HS 120>> + <PROG () <SET HS <MOD .HS 120>> </ .HS 2>>>>> + +<DEFINE SIXSTR (X "AUX" C) + #DECL ((X) <PRIMTYPE WORD> (C) FIX) + <MAPF ,STRING + <FUNCTION (B) + #DECL ((B) BITS) + <COND (<0? <SET C <CHTYPE <GETBITS .X .B> FIX>>> <MAPSTOP>) + (ELSE <MAPRET <CHTYPE <+ .C 32> CHARACTER>>)>> + ,SIXBITS>> + +<SETG SIXBITS + <UVECTOR <BITS 6 30> + <BITS 6 24> + <BITS 6 18> + <BITS 6 12> + <BITS 6 6> + <BITS 6>>> + +<MANIFEST SIXBITS> + +<ENDPACKAGE> diff --git a/src/mprog/column.udl001 b/src/mprog/column.udl001 new file mode 100644 index 00000000..775cef57 --- /dev/null +++ b/src/mprog/column.udl001 @@ -0,0 +1,40 @@ +<PACKAGE "COLUMNS"> + +<ENTRY COLFILE COLUMNS> + +<DEFINE COLFILE (IT OF "AUX" (OC <OPEN "PRINT" .OF>) OUTCHAN) + #DECL ((OUTCHAN) <SPECIAL CHANNEL>) + <COND (.OC <SET OUTCHAN .OC> <PUT .OUTCHAN 13 120> + <PRINC <ASCII 12> .OUTCHAN> + <COLUMNS .IT 50 8> + <CLOSE .OC> + "DONE")>> + +"COLUMNS -- print a vector of strings in columns HIGH high and WIDE wide" + +<DEFINE COLUMNS (IT + "OPTIONAL" (HIGH 50) (WIDE 12) + "AUX" (H 0) (WIDTH </ <13 .OUTCHAN> .WIDE>) (LAST <>)) + #DECL ((IT) <VECTOR [REST <OR STRING ATOM>]> (HIGH WIDE H WIDTH) FIX) + <REPEAT ((II .IT) (I .II)) + #DECL ((II I) <VECTOR [REST <OR STRING ATOM>]>) + <SET I .II> + <COND (<EMPTY? .I> <TERPRI> <PRINC <ASCII 12>> <RETURN "DONE">)> + <REPEAT ((W 0)) + #DECL ((W) FIX) + <PRINC <1 .I>> + <COND (<==? <SET W <+ .W 1>> .WIDE> <RETURN>) + (ELSE <INDENT-TO <* .WIDTH .W>>)> + <COND (<G? <LENGTH .I> .HIGH> <SET I <REST .I .HIGH>>) + (ELSE <SET LAST T> <RETURN>)>> + <TERPRI> + <COND (<==? <SET H <+ .H 1>> .HIGH> + <SET H 0> + <PRINC <ASCII 12>> + <AND .LAST <RETURN "DONE">> + <TERPRI> + <SET II <REST .I>>) + (ELSE <SET II <REST .II>>)>>> + +<ENDPACKAGE> +\ \ No newline at end of file diff --git a/src/mprog/comand.ueb003 b/src/mprog/comand.ueb003 new file mode 100644 index 00000000..f8327a93 --- /dev/null +++ b/src/mprog/comand.ueb003 @@ -0,0 +1,75 @@ +<PACKAGE "COMMAND"> + +<USE "CALSYM" "CALRDR"> + +<ENTRY CALICO-COMMAND CONFIRM> + +<DEFINE CONFIRM ("EXTRA" RD) + #DECL ((RD) <OR FALSE SYMBOL>) + <AND <SET RD <READER ,CONF "Confirm" '[" +Please confirm the command by typing either T, True, Y, or Yes" ""] ["SYM"]>> + <==? <2 .RD> T>>> + +<SETG CONF + <MAKEBST "CONFIRM" + %<BSTSORT ["T" T "True" T "Y" T "Yes" T "No" <> "N" <> "F" <> "False" <>]>>> + +<DEFINE CALICO-COMMAND COM-EXIT (FUNC PRM + "OPTIONAL" (DEF '[]) + "TUPLE" FLAGS + "AUX" INPUT GETI (EVALSW 0) (SEGSW 1) (SYMSW 0) + (HACKMULTSW 0)(FLGS .FLAGS)) + #DECL ((FUNC) APPLICABLE (PRM DEF) VECTOR (INPUT) VECTOR + (GETI) <OR FALSE VECTOR> (FLAGS FLGS) <TUPLE [REST STRING]> + (HACKMULTSW EVALSW SEGSW SYMSW) <SPECIAL FIX> (A VALUE) ANY) + <COND (<NOT <SET GETI <READARGS !.PRM>>> + <RETURN .GETI .COM-EXIT>)> + <COND (<NOT .READER-SILENCE> <TERPRI>)> + <SET INPUT .GETI> + <COND (<MEMBER "DON'T-EVAL" .FLAGS> <SET EVALSW 1>)> + <COND (<MEMBER "GIVE-SYMBOLS" .FLAGS> <SET SYMSW 1>)> + <REPEAT () + <COND (<EMPTY? .FLAGS> <RETURN T>) + (<=? <1 .FLAGS> "HACK-MULTS"> + <SET HACKMULTSW 1> + <SET FLAGS <REST .FLAGS>>) + (<=? <1 .FLAGS> "INPUT"> <RETURN <SET SEGSW 0>>) + (<=? <1 .FLAGS> "SEGMENT-INPUT"> <RETURN <SET SEGSW 1>>) + (<=? <1 .FLAGS> "SEGMENT-EACH"> <RETURN <SET SEGSW 2>>) + (ELSE <SET FLAGS <REST .FLAGS>>)>> + <SET A + <MAPF <COND (<0? .SEGSW> ,VECTOR) (ELSE .FUNC)> + <FUNCTION (A) + #DECL ((DEFSW) <OR FALSE 'T>) + <COND (<NOT <EMPTY? .DEF>> + <COND (<OR <==? .A ,READER-NULL-LINE> + <AND <=? .A '()> <MEMBER "MULT" <4 .PRM>>>> + <SET A <1 .DEF>>)> + <SET DEF <REST .DEF>>)> + <COND (<1? .HACKMULTSW> + <AND <TYPE? .A LIST> + <MEMBER "MULT" <4 .PRM>> + <MAPR <> + <FUNCTION (X) + <COND (<TYPE? <1 .X> SYMBOL> + <PUT .X 1 <2 <1 .X>>>)>> + .A>>)> + <SET PRM <REST .PRM <COND (<TYPE? <1 .PRM> ATOM> 5)(4)>>> + <COND (<0? .EVALSW> <SET A <EVAL .A>>)> + <COND (<AND <0? .SYMSW> <TYPE? .A SYMBOL>> <SET A <2 .A>>)> + <COND (<0? .SEGSW> <MAPRET .A>) + (<AND <==? .SEGSW 2> + <STRUCTURED? .A> + <NOT <TYPE? .A STRING>>> + <COND (<==? .A ,READER-NULL-LINE> <MAPRET>) + (ELSE <MAPRET !.A>)>) + (ELSE <MAPRET .A>)> + T> + .INPUT>> + <AND <0? .SEGSW> <SET A <APPLY .FUNC .A>>> ;".A Is a VECTOR, in this case" + <COND (<AND <MEMBER "PRINT-RESULT" .FLGS> <NOT .READER-SILENCE>> + <PRINT .A>)> + .A> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog/comps.umss02 b/src/mprog/comps.umss02 new file mode 100644 index 00000000..20b0ed1c --- /dev/null +++ b/src/mprog/comps.umss02 @@ -0,0 +1,36 @@ +;"This RSUBR is used in the CALSYM package of MUDCAL" + +<TITLE COMPS> + <HRRZ A* (AB)> ;" GET LENGTH OF FIRST STRING" + <HRRZ B* 2(AB)> ;" GET LENGTH OF SECOND STRING" + <CAMLE A* B> ;" USE THE SMALLER" + <MOVE A* B> + <HLR B* AB> ;" GET NUMBER OF ARGS" + <CAIE B* -4> ;" SEE IF LENGTH IS SUPPLIED" + <MOVE B* 5(AB)> ;" YES - GET SUPPLIED LENGTH" + <CAMLE A* B> ;" USE THE SMALLEST" + <MOVE A* B> + <SETZM 0> ;" INITIALIZE COUNT" + <JUMPE A* DONE> ;" IF LENGTH IS ZERO - RETURN ZERO" + <MOVE B* 1(AB)> ;" GET THE BYTE POINTERS" + <MOVE C* 3(AB)> +LOOP <ILDB D* B> ;" GET NEXT CHARS" + <CAIL D* <ASCII !"a>> ;" CONVERT TO UPPER CASE" + <CAILE D* <ASCII !"z>> + <SKIPA> + <SUBI D* 32> + <ILDB E* C> + <CAIL E* <ASCII !"a>> + <CAILE E* <ASCII !"z>> + <SKIPA> + <SUBI E* 32> + <CAME D* E> ;" ARE THEY THE SAME?" + <JRST A* DONE> ;" NO - DONE" + <AOS 0> ;" YES - BUMP COUNT" + <SOJG A* LOOP> ;" NO - KEEP SCANNING" + +DONE <MOVE A* $TFIX> ;" RETURN INTEGER OF AMOUNT IN COMMON" + <MOVE B* 0> + <JRST FINIS> + +  \ No newline at end of file diff --git a/src/mprog/corblk.ubkd02 b/src/mprog/corblk.ubkd02 new file mode 100644 index 00000000..41740e8b --- /dev/null +++ b/src/mprog/corblk.ubkd02 @@ -0,0 +1,58 @@ +;"RSUBR FOR MAPPING PAGES" + +<TITLE CORE-BLOCK> ;"MAP A PAGE" + <DECLARE ("VALUE" <OR FIX FALSE> <PRIMTYPE WORD> FIX FIX FIX FIX)> + <*CALL CORE> + <JRST FAIL> + <MOVSI A* TFIX> + <MOVE B* (AB) 5> ;"CORE BLOCK NUMBER" + <LSH B* 10> ;"CHANGE TO ADDRESS" + <JRST FINIS> + +FAIL <MOVE C* <TYPE-WORD FIX>> + <MOVEI E* 0> + <PUSHJ P* CICONS> + <MOVSI A* <TYPE-CODE FALSE>> + <JRST FINIS> + +CORE <SETZ> + <SIXBIT "CORBLK"> + <(AB) 1> ;"MODE" + <(AB) 3> ;"INTO" + <(AB) 5> + <(AB) 7> ;"FROM" + <(AB) 9> + <SETZB D> ; "ERROR" + +;"RSUBR TO FIND FREE CORE PAGES" + +<TITLE PAGE-FIND> + <DECLARE ("VALUE" <OR FIX FALSE> "OPTIONAL" FIX)> + <MOVEI A* 1> ;"DEFAULT NUMBER OF PAGES TO FIND" + <SKIPGE AB> ;"ARG SUPPLIED ?" + <MOVE A* (AB) 1> ;"YES, GET IT" + <JUMPLE A* WRONGT> + <PUSHJ P* PGFIND> + <JUMPL B* [<MOVSI A* TFALSE> <SETZ B*> <JRST FINIS>]> + <MOVSI A* TFIX> + <JRST FINIS> + +;"RSUBR TO GIVE BACK CORE PAGES" + +<TITLE PAGE-GIVE> + <DECLARE ("VALUE" FIX FIX "OPTIONAL" FIX)> + <MOVEI A* 1> ;"DEFAULT NUMBER OF PAGES TO GIVE" + <CAMGE AB* [<(-2)>]> ;"SECOND ARG SUPPLIED ?" + <MOVE A* (AB) 3> ;"YES, GET IT" + <JUMPLE A* WRONGT> + <MOVE B* (AB) 1> ;"GET NUMBER OF FIRST BLOCK" + <JUMPL B* WRONGT> + <MOVEI O* (B)> + <ADDI O* (A)> + <CAIGE B* 256> ;"VALID FIRST BLOCK NUMBER ?" + <CAILE O* 256> ;"VALID LAST+1 BLOCK NUMBER ?" + <JRST WRONGT> ;"NO, LOSE" + <PUSHJ P* PGGIVE> + <MOVSI A* TFIX> + <JRST FINIS> + \ No newline at end of file diff --git a/src/mprog/count.udl002 b/src/mprog/count.udl002 new file mode 100644 index 00000000..5e5c6f93 --- /dev/null +++ b/src/mprog/count.udl002 @@ -0,0 +1,42 @@ +<TITLE COUNT-WORDS> + <DECLARE ("VALUE" <OR FIX FALSE> FIX <UVECTOR [REST FIX]> FIX)> + <MOVE C* 3(AB)> ; "directory" + <MOVE A* 1(AB)> ; "count of desc bytes" + <IDIVI A* 6> ; "number of words into desc area" + <ADDI A* 11> + <HRLS A> + <ADD C* A> + <JUMPGE C* LOSER> ; "C/ vector pointer to desc word" + <MOVE D* C> + <HRLI D* *440600*> ; "6bit byte pointer to start of desc" +; "update for remainder of division" + <JUMPE B* BLKLUP> + <ILDB O* D> + <SOJG B* HERE -1> + +BLKLUP <ILDB O* D> ; "pick up a byte" + <JUMPE O* LSTBYT> ; "if 0, end of descriptor" + <CAILE O* 12> ; "UDTKMX: if >12, can just add" + <JRST ADDTHEM> + <ADD B* 0> + <JRST BLKLUP> + +ADDTHEM <CAIGE O* 31> ; "UDTPWH: place holder" + <AOJA B* BLKLUP> + <CAIN O* 31> + <JRST BLKLUP> + <IBP D> + <IBP D> + <AOJA B* BLKLUP> + +LSTBYT <MOVE A* <TYPE-WORD FIX>> + <JUMPE B* FINIS> ; "if zero blocks" + <SOS B> + <IMULI B* 1024> ; "convert to words" + <ADD B* 5 (AB)> ; "extra words" + <JRST FINIS> + +LOSER <MOVE A* <TYPE-WORD FALSE>> + <SETZ B*> + <JRST FINIS> + \ No newline at end of file diff --git a/src/mprog/cpyreq.udl001 b/src/mprog/cpyreq.udl001 new file mode 100644 index 00000000..cbbd09ba --- /dev/null +++ b/src/mprog/cpyreq.udl001 @@ -0,0 +1,32 @@ +; "takes request, buffer, direction (0=read), returns buffer" + +<TITLE COPY-REQ> + <SYMDEF *RDTIME #OPCODE *42000000017*> + <DECLARE ("VALUE" UVECTOR + <VECTOR UVECTOR FIX FIX> + <UVECTOR [4 FIX]> + FIX)> + <MOVE A* (AB) 1> + <MOVE B* (A) 1> + <MOVE C* (A) 3> + <MOVE D* (A) 5> + <ANDI D* *1777*> + <MOVE A* (AB) 3> + <MOVE E* (A) 1> + <LSH E* 10> + <ADD D* E> + <HRL B* D> + <SKIPE (AB) 5> + <MOVSS B> + <MOVE E* B> + <ADD E* C> + <BLT B* (E) -1> + <*RDTIME B*> + <MOVE A* (AB) 3> + <CAML B* (A) 3> + <MOVEM B* (A) 3> + <MOVE A* (AB) 1> + <MOVE B* (A) 1> + <MOVSI A* TUVECTOR> + <JRST FINIS> +  <M \ No newline at end of file diff --git a/src/mprog/crime.udl001 b/src/mprog/crime.udl001 new file mode 100644 index 00000000..ea2b4c8d --- /dev/null +++ b/src/mprog/crime.udl001 @@ -0,0 +1,156 @@ +<PACKAGE "CRIME"> + +<ENTRY COMBAT-STATS GATHER SORTEM PRINTEM> + +<SETG MYOBS ,CRIME!-PACKAGE> + +<SETG CDT 1> + +<SETG CUSR 2> + +<SETG CTYP 3> + +<SETG CRES 4> + +<SETG CTIM 5> + +<MANIFEST CDT CUSR CTYP CRES CTIM> + +<GDECL (PLANNERS) <LIST [REST ATOM]> (TOTAL) <VECTOR ATOM [4 FIX]>> + +"Read and grovel a file full of data about COMBATs. Each item of +data looks like: + + [(date time) uname RIOT/PLAN WON/LOST cputime] +" + +<DEFINE COMBAT-STATS ("OPTIONAL" (IN "DSK:COMPIL;COMPIL MAIL") + (OUT "DSK:COMPIL STATS") + "AUX" OUTCHAN TMP) + #DECL ((IN OUT) STRING (OUTCHAN) <SPECIAL <OR CHANNEL FALSE>>) + <COND (<SET TMP <GATHER .IN>> + <SORTEM .TMP 5> + <COND (<SET OUTCHAN <OPEN "PRINT" .OUT>> + <PRINTEM .TMP> + <PRINC <ASCII 12>> + <CLOSE .OUTCHAN>)> + "DONE")>> + +<DEFINE GATHER (FIL "AUX" (IN <OPEN "READ" .FIL>) U) + #DECL ((FIL) STRING (IN) <OR CHANNEL FALSE> (U) <OR VECTOR FALSE>) + <COND (.IN + <SETG PLANNERS ()> + <SETG TOTAL [TOTAL 0 0 0 0]> + <REPEAT () + <BLOCK ,MYOBS> + <SET U <READ .IN '<>>> + <COND (.U <UPDATE .U>) + (ELSE <CLOSE .IN> <ENDBLOCK> <RETURN>)>> + <MAPF ,UVECTOR + <FUNCTION (X "AUX" (Y <GETPROP .X DATA>)) + #DECL ((X) ATOM (Y) VECTOR) + <PUT .Y 3 </ <* <3 .Y> 100> <2 .Y>>> + <PUT .Y 4 </ <* <4 .Y> 100> <2 .Y>>>> + ,PLANNERS>)>> + +<DEFINE UPDATE (DATA "AUX" (OLD <GETPROP <CUSR .DATA> DATA>)) + #DECL ((DATA) <VECTOR LIST [3 ATOM] FLOAT> + (OLD) <VECTOR ATOM [4 FIX]>) + <COND (<NOT <MEMQ <CUSR .DATA> ,PLANNERS>> + <SETG PLANNERS (<CUSR .DATA> !,PLANNERS)> + <PUTPROP <CUSR .DATA> + DATA + <SET OLD [<CUSR .DATA> 0 0 0 0]>>)> + <PUT .OLD 2 <+ <2 .OLD> 1>> + <COND (<==? <CTYP .DATA> RIOT> <PUT .OLD 3 <+ <3 .OLD> 1>>)> + <COND (<==? <CRES .DATA> LOST> <PUT .OLD 4 <+ <4 .OLD> 1>>)> + <PUT .OLD 5 <+ <5 .OLD> <FIX <CTIM .DATA>>>>> + +<DEFINE SORTEM (DATA N) + #DECL ((DATA) <UVECTOR [REST VECTOR]> (N) <SPECIAL FIX>) + <SORT <FUNCTION (X Y) <L? <NTH .X .N> <NTH .Y .N>>> .DATA>> + +<DEFINE PRINTEM (DATA "AUX" (TOT ,TOTAL)) + #DECL ((DATA) <UVECTOR [REST VECTOR]> (TOT) <VECTOR ATOM [4 FIX]>) + <TERPRI> + <MAPR <> + <FUNCTION (X) + #DECL ((X) <VECTOR [REST FIX]>) + <PUT .X 1 0>> + <REST .TOT>> + <PRINC +"NAME____ COMBATS_______ %RIOT_____ %LOSE_____ AV TIM______ TOT TIM_______ +"> + <BLOCK ,MYOBS> + <MAPF <> + <FUNCTION (X) + #DECL ((X) <VECTOR ATOM [4 FIX]>) + <LINPR .X> + <MAPR <> + <FUNCTION (D T) + #DECL ((D T) <VECTOR [REST FIX]>) + <PUT .T 1 <+ <1 .T> <1 .D>>>> + <REST .X> + <REST .TOT>>> + .DATA> + <TERPRI> + <PUT .TOT 3 </ <3 .TOT> <LENGTH .DATA>>> + <PUT .TOT 4 </ <4 .TOT> <LENGTH .DATA>>> + <LINPR .TOT> + <TERPRI> + <ENDBLOCK> + ,NULL> + +<DEFINE LINPR (X) + #DECL ((X) <VECTOR ATOM [4 FIX]>) + <PRINT <1 .X>> + <INDENT-TO 8> + <NUMPR <2 .X>> + <INDENT-TO 16> + <NUMPR <3 .X>> + <INDENT-TO 24> + <NUMPR <4 .X>> + <INDENT-TO 32> + <TIMPR </ <5 .X> <2 .X>>> + <INDENT-TO 42> + <TIMPR <5 .X>>> + +<DEFINE NUMPR (N) + #DECL ((N) FIX) + <COND (<L? .N 10> <PRINC " ">) + (<L? .N 100> <PRINC " ">) + (<L? .N 1000> <PRINC " ">) + (<L? .N 10000> <PRINC " ">) + (<L? .N 100000> <PRINC " ">) + (<L? .N 1000000> <PRINC " ">) + (<L? .N 10000000> <PRINC " ">)> + <PRINC .N>> + +<DEFINE TIMPR (N + "AUX" (HH </ .N 3600>) (MM </ <MOD .N 3600> 60>) + (SS <MOD .N 60>)) + #DECL ((N HH MM SS) FIX) + <PRINC " "> + <FOOPR .HH> + <COND (<NOT <0? .HH>> <PRINC ":">) (ELSE <PRINC " ">)> + <COND (<0? .HH> <FOOPR .MM>) (ELSE <BARPR .MM>)> + <COND (<AND <0? .HH> <0? .MM>> <PRINC " ">) + (ELSE <PRINC ":">)> + <COND (<AND <0? .HH> <0? .MM>> <FOOPR .SS>) + (ELSE <BARPR .SS>)> + ,NULL> + +<DEFINE FOOPR (HH) + #DECL ((HH) FIX) + <COND (<0? .HH> <PRINC " ">) + (<L? .HH 10> <PRINC " "> <PRINC .HH>) + (ELSE <PRINC .HH>)>> + +<DEFINE BARPR (HH) + #DECL ((HH) FIX) + <COND (<0? .HH> <PRINC "00">) + (<L? .HH 10> <PRINC "0"> <PRINC .HH>) + (ELSE <PRINC .HH>)>> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog/data.ubkd01 b/src/mprog/data.ubkd01 new file mode 100644 index 00000000..1ac6eb71 --- /dev/null +++ b/src/mprog/data.ubkd01 @@ -0,0 +1,270 @@ + +<PACKAGE "DATA"> + +<ENTRY DATA-TYPE DATA-ITEM NUMBER> + +<USE-DEFER "TEMPLATE"> + +<DEFINE DATA-ITEM (NAME KIND "ARGS" DESCR "EXTRA" L (PRIMT <TYPEPRIM .KIND>) FNAME) + #DECL ((NAME) <OR ATOM <LIST ATOM <OR FALSE ATOM>>> (FNAME) <OR FALSE ATOM> + (KIND) ATOM (DESCR) LIST (L) <UVECTOR LIST LIST LIST>) + <COND (<TYPE? .NAME ATOM> <SET FNAME .NAME>) + (ELSE <SET FNAME <2 .NAME>> <SET NAME <1 .NAME>>)> + <COND (<==? .PRIMT TEMPLATE> + <SET L <IDATA .DESCR>> + <PUT .NAME DECL + <VUL-DECL .KIND <1 .L> <2 .L> <3 .L>>> + <AND .FNAME + <GASSIGN .FNAME ;"Define a constuctor for this data type" + <CHTYPE (<CHTYPE ('("ARGS" T) + <FORM FORM + .KIND + '!.T>) FUNCTION>) + MACRO>>>) + (<OR <==? .PRIMT VECTOR> + <==? .PRIMT UVECTOR> + <==? .PRIMT LIST>> + <SET L <IDATA .DESCR>> + <PUT .NAME DECL + <VUL-DECL .PRIMT <1 .L> <2 .L> <3 .L>>> + <AND .FNAME + <GASSIGN .FNAME ;"Define a constuctor for this data type" + <CHTYPE (<CHTYPE ('("ARGS" T) + <COND (<==? .KIND .PRIMT> + <FORM FORM .PRIMT '!.T>) + (ELSE <FORM FORM + CHTYPE + <FORM FORM .PRIMT '!.T> + .KIND>)>) FUNCTION>) + MACRO>>>) + (<==? .PRIMT WORD> + <PUT .NAME DECL .KIND> + <COND (.FNAME <GASSIGN .FNAME <W-DATA .KIND .DESCR>>) + (ELSE <W-NUMBER .DESCR>)>) + (<==? .PRIMT TUPLE> ;"Assign offsets for tuple" + <SET L <IDATA .DESCR>> + <PUT .NAME DECL <VUL-DECL TUPLE <1 .L> <2 .L> <3 .L>>>) + (ELSE <ERROR BAD-TYPE-NAME!-ERRORS DATA-ITEM>)> + .NAME> + +<DEFINE DATA-TYPE (NAME KIND "ARGS" DESCR "EXTRA" L (PRIMT <TYPEPRIM .KIND>) FNAME) + #DECL ((NAME) <OR ATOM <LIST ATOM <OR FALSE ATOM>>> (FNAME) <OR FALSE ATOM> + (KIND) ATOM (DESCR) LIST (L) <UVECTOR LIST LIST LIST>) + <COND (<TYPE? .NAME ATOM> <SET FNAME .NAME>) + (ELSE <SET FNAME <2 .NAME>> <SET NAME <1 .NAME>>)> + <NEWTYPE .NAME .KIND> + <COND (<==? .PRIMT TEMPLATE> + <SET L <IDATA .DESCR>> + <TEMPLATE .NAME + !<1 .L> + !<COND (<EMPTY? <2 .L>> ()) + (ELSE ("OPTIONAL" !<2 .L>))> + !<COND (<EMPTY? <3 .L>> ()) + (ELSE ("REST" !<3 .L>))>> + <COND (<NOT .FNAME> <GUNASSIGN .NAME>) + (<N==? .NAME .FNAME> + <GASSIGN .FNAME ,.NAME> + <GUNASSIGN .NAME>)>) + (<OR <==? .PRIMT VECTOR> + <==? .PRIMT UVECTOR> + <==? .PRIMT LIST>> + <SET L <IDATA .DESCR>> + <PUT .NAME DECL + <VUL-DECL .PRIMT <1 .L> <2 .L> <3 .L>>> + <AND .FNAME + <GASSIGN .FNAME ;"Define a constuctor for this data type" + <CHTYPE (<CHTYPE ('("ARGS" T) + <FORM FORM + CHTYPE + <FORM FORM .PRIMT '!.T> + .NAME>) FUNCTION>) + MACRO>>>) + (<==? .PRIMT WORD> + <COND (.FNAME <GASSIGN .FNAME <W-DATA .NAME .DESCR>>) + (ELSE <W-NUMBER .DESCR>)>) + (<==? .PRIMT TUPLE> ;"Assign offsets for tuple" + <SET L <IDATA .DESCR>> + <PUT .NAME DECL <VUL-DECL TUPLE <1 .L> <2 .L> <3 .L>>>) + (ELSE <ERROR BAD-TYPE-NAME!-ERRORS DATA-TYPE>)> + .NAME> + +<DEFINE IDATA (FIELDS + "EXTRA" (REQ <LIST T>) (OPT <LIST T>) (RST <LIST T>) (F .REQ) + (CNT 0) S1) + #DECL ((FIELDS) LIST (REQ OPT RST F) <LIST ANY> + (VALUE) <UVECTOR LIST LIST LIST> (CNT) FIX) + <MAPF <> + <FUNCTION (FIELD) + <COND (<TYPE? .FIELD ATOM> + <DEFN .FIELD <SET CNT <+ .CNT 1>>> + <PUTREST .F <SET F (ANY)>>) + (<AND <TYPE? .FIELD LIST> + <NOT <EMPTY? .FIELD>> + <TYPE? <1 .FIELD> ATOM>> + <DEFN <1 .FIELD> <SET CNT <+ .CNT 1>>> + <PUTREST .F + <SET F + (<COND (<EMPTY? <SET FIELD <REST .FIELD>>> ANY) + (<LENGTH? .FIELD 1> <1 .FIELD>) + (ELSE .FIELD)>)>>) + (<AND <TYPE? .FIELD STRING> + <OR <SET S1 <=? .FIELD "OPTIONAL">> + <NOT <SET S1 <N=? .FIELD "REST">>>>> + <COND (.S1 <SET F .OPT>) (ELSE <SET F .RST>)>) + (ELSE <ERROR BAD-ARGUMENT!-ERRORS DATA!-PACKAGE>)>> + .FIELDS> + <UVECTOR <REST .REQ> <REST .OPT> <REST .RST>>> + +<DEFINE VUL-DECL (NAME LN LO LR "AUX" RESTR COMPX COMPE) + #DECL ((LN LO LR) LIST (COMPX COMPE) <LIST ANY> (NAME) ATOM) + <SET RESTR + <COND (<EMPTY? .LR> '[REST <NOT ANY>]) (ELSE [REST !.LR])>> + <COND (<EMPTY? .LO> + <FORM <FORM PRIMTYPE <TYPEPRIM .NAME>> !.LN .RESTR>) + (ELSE + <SET COMPX (ANY !.LN)> + <SET COMPE <REST .COMPX <- <LENGTH .COMPX> 1>>> + <FORM OR + !<MAPF ,LIST + <FUNCTION (X "EXTRA" F) + <SET F + <FORM <FORM PRIMTYPE <TYPEPRIM .NAME>> + !<REST .COMPX> + '[REST <NOT ANY>]>> + <PUTREST .COMPE <SET COMPE (.X)>> + .F> + .LO> + <FORM <FORM PRIMTYPE <TYPEPRIM .NAME>> + !<REST .COMPX> + .RESTR>>)>> + +<DEFINE W-DATA (NAME FIELDS + "EXTRA" (BIT 0) (MODE 0) (ARGL <LIST ANY>) (ARGE .ARGL) BODY + (CBODY (ANY)) (PBODY .CBODY)) + #DECL ((NAME) ATOM (FIELDS) LIST (BIT MODE) FIX (VALUE) MACRO + (ARGL ARGE) LIST (CBODY PBODY) LIST) + <MAPF <> + <FUNCTION (FIELD "EXTRA" FNAME (FSIZE 1)) + #DECL ((FNAME) ATOM (FSIZE) FIX) + <PROG () + <COND (<TYPE? .FIELD ATOM> <SET FNAME .FIELD>) + (<AND <TYPE? .FIELD LIST> + <NOT <EMPTY? .FIELD>> + <TYPE? <1 .FIELD> ATOM>> + <SET FNAME <1 .FIELD>> + <COND (<EMPTY? <SET FIELD <REST .FIELD>>>) + (<TYPE? <1 .FIELD> FIX> <SET FSIZE <1 .FIELD>>) + (<NOT <EMPTY? <SET FIELD <REST .FIELD>>>> + <SET FSIZE <1 .FIELD>>)>) + (<AND <=? .FIELD "OPTIONAL"> <==? .MODE 0>> + <PUTREST .ARGE <SET ARGE (.FIELD)>> + <SET MODE 1> + <RETURN>) + (<AND <=? .FIELD "REST"> <L? .MODE 2>> + <ERROR NOT-IMPLEMENTED!-ERRORS "REST" WORD DATA!-PACKAGE> + <MAPLEAVE>) + (ELSE + <ERROR BAD-ARGUMENT!-ERRORS .FIELD DATA!-PACKAGE> + <RETURN>)> + <DEFN .FNAME <BITS .FSIZE .BIT>> + <COND (<G? <SET BIT <+ .BIT .FSIZE>> ,WORD-SIZE> + <ERROR TOO-MANY-BITS!-ERRORS DATA!-PACKAGE>)> + <PUTREST .ARGE <SET ARGE (<FORM QUOTE .FNAME>)>> + <COND + (<0? .MODE> + <SET BODY + <COND (<NOT <ASSIGNED? BODY>> <FORM LVAL .FNAME>) + (ELSE + <FORM FORM + PUTBITS + .BODY + ,.FNAME + <FORM LVAL .FNAME>>)>>) + (<NOT <ASSIGNED? BODY>> + <SET BODY 0> + <PUTREST .PBODY + (<FORM COND + (<FORM ASSIGNED? .FNAME> + <FORM SET BODY <FORM LVAL .FNAME>>)>)> + <SET PBODY <REST <2 <2 .PBODY>>>>) + (ELSE + <PUTREST .PBODY + (<FORM COND + (<FORM ASSIGNED? .FNAME> + <FORM SET + BODY + <FORM FORM + PUTBITS + <FORM LVAL BODY> + ,.FNAME + <FORM LVAL .FNAME>>>)>)> + <SET PBODY <REST <2 <2 .PBODY>>>>)>>> + .FIELDS> + <COND (<1? .MODE> <PUTREST .ARGE ("EXTRA" (BODY .BODY))>)> + <CHTYPE (<CHTYPE (<REST .ARGL> + !<REST .CBODY> + <FORM FORM + CHTYPE + <COND (<1? .MODE> <FORM LVAL BODY>) + (<ASSIGNED? BODY> .BODY) + (ELSE 0)> + .NAME>) + FUNCTION>) + MACRO>> + +<DEFINE W-NUMBER (FIELDS "EXTRA" (BIT 0) (MODE 0)) + #DECL ((FIELDS) LIST (BIT MODE) FIX) + <MAPF <> + <FUNCTION (FIELD "EXTRA" FNAME (FSIZE 1)) + #DECL ((FNAME) ATOM (FSIZE) FIX) + <PROG () + <COND (<TYPE? .FIELD ATOM> <SET FNAME .FIELD>) + (<AND <TYPE? .FIELD LIST> + <NOT <EMPTY? .FIELD>> + <TYPE? <1 .FIELD> ATOM>> + <SET FNAME <1 .FIELD>> + <COND (<EMPTY? <SET FIELD <REST .FIELD>>>) + (<TYPE? <1 .FIELD> FIX> <SET FSIZE <1 .FIELD>>) + (<NOT <EMPTY? <SET FIELD <REST .FIELD>>>> + <SET FSIZE <1 .FIELD>>)>) + (<AND <=? .FIELD "OPTIONAL"> <==? .MODE 0>> + <SET MODE 1> <RETURN>) + (<AND <=? .FIELD "REST"> <L? .MODE 2>> + <ERROR NOT-IMPLEMENTED!-ERRORS "REST" WORD DATA!-PACKAGE> + <MAPLEAVE>) + (ELSE + <ERROR BAD-ARGUMENT!-ERRORS .FIELD DATA!-PACKAGE> + <RETURN>)> + <DEFN .FNAME <BITS .FSIZE .BIT>> + <COND (<G? <SET BIT <+ .BIT .FSIZE>> ,WORD-SIZE> + <ERROR TOO-MANY-BITS!-ERRORS DATA!-PACKAGE>)>>> + .FIELDS>> + +<DEFINE NUMBER (INITIAL "TUPLE" NAMES) + #DECL ((INITIAL) FIX (NAMES) <TUPLE [REST ATOM]> + (VALUE) <UVECTOR [REST ATOM]>) + <MAPF ,UVECTOR <FUNCTION (NAME) + #DECL ((VALUE NAME) ATOM) + <DEFN .NAME .INITIAL> + <SET INITIAL <+ .INITIAL 1>> + .NAME> + .NAMES>> + +<DEFINE DEFN (NAME F) + #DECL ((NAME) ATOM) + <AND <GASSIGN .NAME .F> <MANIFEST .NAME>>> + +<DEFINE GASSIGN (ATM VAL) + #DECL ((ATM) ATOM) + <COND (<OR <NOT <GASSIGNED? .ATM>> + <=? .VAL ,.ATM> + <ERROR .ATM + ALREADY-DEFINED-ERRET-NON-FALSE-TO-REDEFINE!-ERRORS>> + <SETG .ATM .VAL> + .ATM)>> + +<SETG WORD-SIZE 36> + +<MANIFEST WORD-SIZE> + +<ENDPACKAGE> diff --git a/src/mprog/datime.udl006 b/src/mprog/datime.udl006 new file mode 100644 index 00000000..a79c26d7 --- /dev/null +++ b/src/mprog/datime.udl006 @@ -0,0 +1,152 @@ +<RPACKAGE ôQ Ô“ù±Q>ñCE<‹NTRY DATE RTIME RTIME:SEC GETTIMEZONE FIX-DATE> + +<TITLE DATE> + <DECLARE ("VALUE" <LIST FIX FIX FIX> "OPTIONAL" <LIST FIX FIX FIX>)> + <JUMPL AB* RDARG> + <PUSHJ P* IDATE> + <JRST FINIS> + +RDARG <DPUSH TP* (AB)> + <PUSHJ P* IDATE1> + <JRST FINIS> + +<INTERNAL-ENTRY IDATE1 1> + <SUBM M* (P)> + <MOVE B* (TP)> + <JRST DATER> + +<INTERNAL-ENTRY IDATE 0> + <SUBM M* (P)> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* [<0>]> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* [<0>]> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* [<0>]> + <MOVEI A* 3> + <PUSHJ P* IILIST> + <PUSH TP* A> + <PUSH TP* B> + +DATER <*CALL RDATEC> + <SETO C*> + <LDB [<(*330700*) C>]> + <MOVEM 1(B)> + <HRRZ B* (B)> + <LDB [<(*270400*) C>]> + <MOVEM 1(B)> + <HRRZ B* (B)> + <LDB [<(*220500*) C>]> + <MOVEM 1(B)> + <POP TP* B> + <POP TP* A> + <JRST MPOPJ> + +RDATEC <SETZ> + <SIXBIT "RQDATE"> + <SETZM C> + +<TITLE RTIME> + <DECLARE ("VALUE" <LIST FIX FIX FIX> "OPTIONAL" <LIST FIX FIX FIX>)> + <JUMPL AB* RTARG> + <PUSHJ P* IRTIME> + <JRST FINIS> + +RTARG <DPUSH TP* (AB)> + <PUSHJ P* IRTIME1> + <JRST FINIS> + +<INTERNAL-ENTRY IRTIME1 1> + <SUBM M* (P)> + <MOVE B* (TP)> + <JRST RTIMER> + +<INTERNAL-ENTRY IRTIME 0> + <SUBM M* (P)> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* [<0>]> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* [<0>]> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* [<0>]> + <MOVEI A* 3> + <PUSHJ P* IILIST> + <PUSH TP* A> + <PUSH TP* B> +RTIMER <*CALL RTIMEC> + <SETO C*> + <HRRZS C> + <IDIVI C* 7200> + <MOVEM C* 1(B)> + <MOVE C* D> + <HRRZ B* (B)> + <IDIVI C* 120> + <MOVEM C* 1(B)> + <HRRZ B* (B)> + <LSH D* -1> + <MOVEM D* 1(B)> + <POP TP* B> + <POP TP* A> + <JRST MPOPJ> +RTIMEC <SETZ> + <SIXBIT "RQDATE"> + <SETZM C> + +<TITLE RTIME:SEC> + <DECLARE ("VALUE" FIX)> + <PUSHJ P* IRTIME:SEC> + <JRST FINIS> + +<INTERNAL-ENTRY IRTIME:SEC 0> + <SUBM M* (P)> + <SETZ B*> + <*CALL [<SETZ> + <SIXBIT "RQDATE"> + <SETZM B>]> + <JFCL> + <HRRZS B> + <LSH B* -1> + <MOVE A* <TYPE-WORD FIX>> + <JRST MPOPJ> + +<TITLE GETTIMEZONE> + <DECLARE ("VALUE" STRING)> + <PUSHJ P* IGETTIMEZONE> + <JRST FINIS> + +<INTERNAL-ENTRY IGETTIMEZONE 0> + <SUBM M* (P)> + <*RYEAR C*> + <MOVE A* <MQUOTE "EDT"> -1> + <MOVE B* <MQUOTE "EDT">> + <TLNN C* *100000*> + <MOVE B* <MQUOTE "EST">> + <JRST MPOPJ> + +<TITLE FIX-DATE> + <DECLARE ("VALUE" FIX)> + <PUSHJ P* FIXD1> + <JRST FINIS> + +<INTERNAL-ENTRY FIXD1 0> + <*RDATE B*> + <MOVEI C* 3> + <MOVEI E* 0> + LOOP + <SETZ A*> + <LSHC A* 6> + <MOVEI D* (A) -16> + <IMULI D* 10.> + <SETZ A*> + <LSHC A* 6> + <ADDI D* (A) -16> + <IMULI E* 100.> + <ADDI E* (D)> + <SOJG C* LOOP> + <MOVE B* E> + <MOVSI A* <TYPE-CODE FIX>> + <POPJ P*> + +<END> + +<ENDPACKAGE> \ No newline at end of file diff --git a/src/mprog/declm.udl002 b/src/mprog/declm.udl002 new file mode 100644 index 00000000..51cbfa1b --- /dev/null +++ b/src/mprog/declm.udl002 @@ -0,0 +1,115 @@ +<PACKAGE "DECLM"> + +<ENTRY DECL-MATCH? OBJ-DECL ELE-DECL> + +<DEFINE DECL-MATCH? (OBJ DEC) + #DECL ((VALUE) <OR ATOM FALSE> (OBJ DEC) ANY) + <COND (<AND <TYPE? .DEC FORM> + <==? <LENGTH .DEC> 2> + <MEMQ <1 .DEC> '(SPECIAL UNSPECIAL)>> + <OBJ-DECL .OBJ <2 .DEC>>) + (ELSE <OBJ-DECL .OBJ .DEC>)>> + +<DEFINE OBJ-DECL (O D "AUX" (R T) (ALLT <ALLTYPES>)) + #DECL ((VALUE R) <OR ATOM FALSE> (O D) ANY (ALLT) <VECTOR [REST ATOM]>) + <COND (<TYPE? .D ATOM> + <COND (<==? .D STRUCTURED> + <COND (<STRUCTURED? .O>)(T <DBAD "NOT STRUCTURED" .O>)>) + (<==? .D APPLICABLE> + <COND (<APPLICABLE? .O>)(T <DBAD "NOT APPLICABLE" .O>)>) + (<==? .D LOCATIVE> + <COND (<LOCATIVE? .O>)(T <DBAD "NOT LOCATIVE" .O>)>) + (<==? .D ANY> T) + (<MEMQ .D .ALLT> + <COND (<TYPE? .O .D>)(T <DBAD "TYPES DIFFER" .O .D>)>)>) + (<TYPE? .D FORM> + <COND (<NOT <G=? <LENGTH .D> 2>> + <DBAD "FORM IN DECL TOO SHORT" .D>) + (<==? <LENGTH .D> 2> + <COND (<==? <1 .D> QUOTE> + <COND (<=? .O <2 .D>>) + (LOSE <DBAD "QUOTED OBJECTS NOT =?" .O <2 .D>>)>) + (<==? <1 .D> PRIMTYPE> + <COND (<NOT <AND <TYPE? <2 .D> ATOM> + <MEMQ <2 .D> .ALLT> + <==? <2 .D> <TYPEPRIM <2 .D>>>>> + <DBAD "PRIMTYPE OF NON-PRIMTYPE" .D>) + (<==? <PRIMTYPE .O> <2 .D>>) + (LOSE <DBAD "PRIMTYPES DIFFER" .O <2 .D>>)>) + (<OR <MEMQ <1 .D> .ALLT> <TYPE? <1 .D> FORM>> + <COND (<SET R <OBJ-DECL .O <1 .D>>> + <ELE-DECL .O <REST .D>>) + (LOSE .R)>) + (<==? <1 .D> OR> <OBJ-DECL .O <2 .D>>) + (LOSE <DBAD "ILLEGAL FIRST ELEMENT OF FORM" .D>)>) + (<OR <MEMQ <1 .D> .ALLT> + <TYPE? <1 .D> FORM> + <==? <1 .D> STRUCTURED>> + <COND (<SET R <OBJ-DECL .O <1 .D>>> <ELE-DECL .O <REST .D>>) + (LOSE .R)>) + (<==? <1 .D> OR> + <REPEAT ((OD <REST .D>)) + #DECL ((OD) STRUCTURED) + <COND (<EMPTY? .OD> + <RETURN <DBAD "DOES NOT MATCH ANY 'OR'" .O .D>>) + (<OBJ-DECL .O <1 .OD>> <RETURN T>)> + <SET OD <REST .OD>>>) + (ELSE <DBAD "ILLEGAL FIRST ELEMENT OF FORM" .D>)>) + (ELSE <DBAD "DECL ELEMENT NOT FORM OR ATOM" .D>)>> + +<DEFINE ELE-DECL ELE (O D) + #DECL ((O D) STRUCTURED (VALUE) <OR ATOM FALSE> (ELE) ACTIVATION) + <COND + (<EMPTY? .D> <DBAD "NO DECL ELEMENTS" .O .D>) + (<REPEAT ((R T)) + #DECL ((R) <OR ATOM FALSE>) + <COND + (<EMPTY? .D> <RETURN T>) + (<AND <TYPE? <1 .D> VECTOR> <G=? <LENGTH <1 .D>> 2>> + <COND (<TYPE? <1 <1 .D>> FIX> + <COND (<NOT <G? <1 <1 .D>> 0>> + <RETURN <DBAD "REST LENGTH SPEC TOO SMALL" <1 <1 .D>>> .ELE>)> + <REPEAT ((N <1 <1 .D>>) (DD <REST <1 .D>>)) + #DECL ((N) FIX (DD) STRUCTURED) + <COND (<0? .N> <RETURN T>) + (<EMPTY? .O> + <RETURN <DBAD "OBJECT TOO SHORT" .O .D> .ELE>) + (<SET R <ELE-DECL .O .DD>> + <SET O <REST .O <LENGTH .DD>>> + <SET N <- .N 1>>) + (LOSE <RETURN .R .ELE>)>> + <SET D <REST .D>>) + (<==? <1 <1 .D>> REST> + <REPEAT ((DD <REST <1 .D>>)) + #DECL ((DD) STRUCTURED) + <COND (<EMPTY? .O> + <SET D <REST .D>> + <COND (<EMPTY? .D> <RETURN T .ELE>) + (LOSE + <RETURN <DBAD "DECL ELEMENTS AFTER 'REST'" + .D> + .ELE>)>) + (<SET R <ELE-DECL .O .DD>> + <SET O <REST .O <LENGTH .DD>>>) + (ELSE <RETURN .R .ELE>)>>) + (LOSE + <RETURN <DBAD "ONE OF VECTOR NOT FIX OR REST" <1 .D>> .ELE>)>) + (<EMPTY? .O> + <RETURN <DBAD "OBJECT TOO SHORT" .O .D> .ELE>) + (<TYPE? <1 .D> FORM ATOM> + <COND (<SET R <OBJ-DECL <1 .O> <1 .D>>> + <SET O <REST .O>> + <SET D <REST .D>>) + (LOSE + <RETURN .R .ELE>)>) + (LOSE + <RETURN <DBAD "DECL FOR STRUCTURE NOT FORM ATOM OR LEGAL VECTOR" + <1 .D>> + .ELE>)>>)>> + +<DEFINE DBAD ("TUPLE" X) + #DECL ((VALUE) FALSE (X) TUPLE) + <CHTYPE <LIST !.X> FALSE>> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog/dir.udl006 b/src/mprog/dir.udl006 new file mode 100644 index 00000000..953d8ce3 --- /dev/null +++ b/src/mprog/dir.udl006 @@ -0,0 +1,204 @@ + +<PACKAGE "DIR"> + +<ENTRY GET-DIRECTORY + PARSE-DIRECTORY + DESC-AREA + NAME-AREA + DESC-PTR + PACK-NUMBER + LINK-BIT + OPEN-WRITE + GC-MARK-BIT + DELETE-ON-CLOSE + DELETE-FROM-UNMOUNTED-PACK + DELETED + IGNORED + DUMP-BIT + EXTRA-WORDS + CREATION-TIME + CREATION-DATE + REF-DATE + MONTH + DAY + YEAR + DISK-DATE> + +<USE "NSTR"> + +<SETG DESC-AREA 11> + +<SETG NAME-AREA 2> + +<SETG DESC-PTR <BITS 13>> + +<SETG PACK-NUMBER <BITS 5 13>> + +<SETG LINK-BIT #WORD *000001000000*> + +<SETG OPEN-WRITE #WORD *000004000000*> + +<SETG GC-MARK-BIT #WORD *000010000000*> + +<SETG DELETE-ON-CLOSE #WORD *000020000000*> + +<SETG DELETE-FROM-UNMOUNTED-PACK #WORD *000040000000*> + +<SETG DELETED + <ANDB ,DELETE-ON-CLOSE ,DELETE-FROM-UNMOUNTED-PACK>> + +<SETG IGNORED <ANDB ,DELETED ,OPEN-WRITE>> + +<SETG DUMP-BIT #WORD *400000000000*> + +<SETG EXTRA-WORDS <BITS 10 24>> + +<SETG CREATION-TIME <BITS 18>> + +<SETG CREATION-DATE <BITS 16 18>> + +<SETG REF-DATE <BITS 16 18>> + +<SETG MONTH <BITS 4 23>> + +<SETG DAY <BITS 5 18>> + +<SETG YEAR <BITS 7 27>> + +<SETG SIXBYTES + (<BITS 6 30> + <BITS 6 24> + <BITS 6 18> + <BITS 6 12> + <BITS 6 6> + <BITS 6 0>)> + +<MANIFEST DESC-AREA + NAME-AREA + DESC-PTR + PACK-NUMBER + LINK-BIT + OPEN-WRITE + GC-MARK-BIT + DELETE-ON-CLOSE + DELETE-FROM-UNMOUNTED-PACK + DELETED + IGNORED + DUMP-BIT + EXTRA-WORDS + CREATION-TIME + CREATION-DATE + REF-DATE + MONTH + DAY + YEAR + SIXBYTES> + +<DEFINE FIELD (W B) + #DECL ((W) <PRIMTYPE WORD> (B) BITS (VALUE) FIX) + <CHTYPE <GETBITS .W .B> FIX>> + +<DEFINE CDATE (W) + #DECL ((W) <PRIMTYPE WORD> (VALUE) <LIST [3 FIX]>) + (<FIELD .W ,YEAR> <FIELD .W ,MONTH> <FIELD .W ,DAY>)> + +<DEFINE CTIME (W "AUX" H M S) + #DECL ((W) <PRIMTYPE WORD> (H M S) FIX (VALUE) <LIST [3 FIX]>) + <SET W </ <FIELD .W ,CREATION-TIME> 2>> + <SET H </ .W 3600>> + <SET W <MOD .W 3600>> + <SET M </ .W 60>> + <SET S <MOD .W 60>> + (.H .M .S)> + +<DEFINE DISK-DATE ("OPTIONAL" (DT <DTNOW>) "AUX" (D <1 .DT>) (T <2 .DT>)) + #DECL ((VALUE) WORD (DT) LIST (D T) <LIST [3 FIX]>) + <PUTBITS + <PUTBITS <PUTBITS <PUTBITS #WORD 0 ,YEAR <1 .D>> ,MONTH <2 .D>> ,DAY <3 .D>> + ,CREATION-TIME + <* 2 <+ <3 .T> <* 60 <+ <2 .T> <* 60 <1 .T>>>>>>>> + +<DEFINE OTHER-CRUFT (N "OPTIONAL" (L <>) "AUX" (O ())) + #DECL ((N) <PRIMTYPE WORD> (L) ANY (O) <LIST [REST CHARACTER]>) + <COND (<BIT-ON? .N ,OPEN-WRITE> <SET O (!\W !.O)>)> + <COND (<BIT-ON? .N ,DELETE-ON-CLOSE> <SET O (!\C !.O)>)> + <COND (<AND <NOT .L> <NOT <BIT-ON? .N ,DUMP-BIT>>> + <SET O (!\X !.O)>)> + .O> + +<DEFINE BIT-ON? (W BIT) + #DECL ((W BIT) <PRIMTYPE WORD> (VALUE) ANY) + <NOT <0? <CHTYPE <ANDB .W .BIT> FIX>>>> + +<DEFINE WORDS-LINK (W DIR) + #DECL ((W) <PRIMTYPE WORD> (DIR) <UVECTOR [1024 FIX]> + (VALUE) <OR LIST FIX>) + <COND (<BIT-ON? .W ,LINK-BIT> + <LINK-TO <FIELD .W ,DESC-PTR> .DIR>) + (ELSE + <COUNT-WORDS <FIELD .W ,DESC-PTR> + .DIR + <FIELD .W ,EXTRA-WORDS>>)>> + +<DEFINE LINK-TO (DESC DIR "AUX" (N <+ 1 <MOD .DESC 6>>)) + #DECL ((DESC) FIX (DIR) <SPECIAL <UVECTOR [REST FIX]>> (N) <SPECIAL + FIX> + (VALUE) <LIST [3 STRING]>) + <SET DIR <REST .DIR <+ ,DESC-AREA </ .DESC 6>>>> + <ILIST 3 '<LINK-PART>>> + +<DEFINE LINK-PART ("AUX" W CH (NN 0)) + #DECL ((W) <SPECIAL <PRIMTYPE WORD>> (CH) CHARACTER (NN N) FIX + (DIR) <UVECTOR [REST FIX]>) + <SET W <1 .DIR>> +<MAPF ,STRING + <FUNCTION () + <COND (<PROG ((Q T)) + #DECL ((Q) <OR ATOM FALSE>) + <SET CH <SIX-TO-ASCII <FIELD .W <NTH ,SIXBYTES .N>>>> + <COND (<AND .Q <==? .CH !\:>> <DO-ILDB> <SET Q <>> <AGAIN>) + (<==? .NN 6> <RETURN <>>) + (<AND .Q <==? .CH !\;>> <DO-ILDB> <RETURN <>>) + (<==? .CH !\ > <RETURN <>>) + (ELSE <DO-ILDB> T)>> + <PROG () <SET NN <+ .NN 1>> .CH>) + (T <MAPSTOP>)>>>> + +<DEFINE DO-ILDB () + #DECL ((N) FIX (DIR) <UVECTOR [REST FIX]> (W) <PRIMTYPE WORD>) + <COND (<G? <SET N <+ .N 1>> 6> + <SET N <MOD .N 6>> + <SET DIR <REST .DIR>> + <SET W <1 .DIR>>)>> + +<DEFINE SIX-TO-ASCII (S) + #DECL ((S) FIX (VALUE) CHARACTER) + <CHTYPE <+ 32 .S> CHARACTER>> + +<DEFINE GET-DIRECTORY ("OPTIONAL" (SNM <SNAME>) (BUF <IUVECTOR 1024 0>) + "AUX" (INCHAN + <OPEN "READB" ".FILE." "(DIR)" "DSK" .SNM>)) + #DECL ((SNM) STRING (BUF) <UVECTOR [1024 FIX]> + (INCHAN) <OR CHANNEL FALSE> (VALUE) <OR UVECTOR FALSE>) + <COND (.INCHAN <READB .BUF .INCHAN> <CLOSE .INCHAN> .BUF)>> + +<DEFINE PARSE-DIRECTORY (DIR "AUX" (L </ <- 1024 <2 .DIR>> 5>)) + #DECL ((DIR) <UVECTOR [REST FIX]> (L) FIX + (VALUE) <VECTOR [REST VECTOR]>) + <SET DIR <REST .DIR <- <2 .DIR> 5>>> + <IVECTOR .L + '<PROG (WORDS) + #DECL ((WORDS) <OR FIX LIST>) + <SET DIR <REST .DIR 5>> + [<SIXTOS <1 .DIR>> + <SIXTOS <2 .DIR>> + <CDATE <4 .DIR>> + <CTIME <4 .DIR>> + <CDATE <5 .DIR>> + <SET WORDS <WORDS-LINK <3 .DIR> <TOP .DIR>>> + <FIELD <3 .DIR> ,PACK-NUMBER> + <OTHER-CRUFT <3 .DIR> <TYPE? .WORDS LIST>>]>>> + +<FLOAD "MBPROG;COUNT"> + +<ENDPACKAGE> diff --git a/src/mprog/dirhak.usg003 b/src/mprog/dirhak.usg003 new file mode 100644 index 00000000..4397eeea --- /dev/null +++ b/src/mprog/dirhak.usg003 @@ -0,0 +1,49 @@ + +<PACKAGE "DIRHAK"> + +<ENTRY DIR-DIFF SN&DT> + +<USE "STR"> + +<DEFINE DIR-DIFF (NAME OLD NEW) + #DECL ((VALUE) <UVECTOR [2 LIST]> (NAME) FIX (OLD NEW) <<PRIMTYPE UVECTOR> FIX>) + <REPEAT ((OLD <SN&DT .NAME .OLD>) (NEW <SN&DT .NAME .NEW>) (CAME '()) + (GONE '())) + #DECL ((OLD NEW) <UVECTOR [REST FIX]> (CAME GONE) <LIST [REST FIX]>) + <COND (<=? .OLD .NEW> <RETURN <UVECTOR .CAME .GONE>>) + (<EMPTY? .OLD> + <RETURN <UVECTOR <LIST !<ALL-FILES .NEW> !.CAME> .GONE>>) + (<EMPTY? .NEW> + <RETURN <UVECTOR .CAME <LIST !<ALL-FILES .OLD> !.GONE>>>) + (<==? <1 .OLD> <1 .NEW>> + <OR <==? <2 .OLD> <2 .NEW>> + <SET CAME <CONS <1 .NEW> .CAME>>> + <SET OLD <REST .OLD 2>> + <SET NEW <REST .NEW 2>>) + (<L? <1 .OLD> <1 .NEW>> + <SET CAME <CONS <1 .NEW> .CAME>> + <SET NEW <REST .NEW 2>>) + (<SET GONE <CONS <1 .OLD> .GONE>> <SET OLD <REST .OLD 2>>)>>> + +<DEFINE SN&DT (NAM DIR) + #DECL ((VALUE) <UVECTOR [REST FIX]> (NAM) FIX (DIR) <<PRIMTYPE UVECTOR> FIX>) + <SORT <> + ![!<REPEAT ((D <MEMQ .NAM <REST .DIR <2 .DIR>>>) (L ()) SN) + #DECL ((D) <OR FALSE <<PRIMTYPE UVECTOR> [REST FIX]>> (L) LIST) + <COND (<OR <EMPTY? .D> <N==? .NAM <1 .D>>> <RETURN .L>) + (<AND <0? <CHTYPE <ANDB <3 .D> #WORD *64000000*> FIX>> + <TYPE? <SET SN <PARSE <SIXTOS <2 .D>>>> FIX>> + <SET L <LIST .SN <4 .D> !.L>>)> + <SET D <REST .D 5>>>!] + 2>> + +<DEFINE ALL-FILES (L "AUX" (F T)) + #DECL ((VALUE L) <UVECTOR [REST FIX]> (F) <OR 'T FALSE>) + <MAPF ,UVECTOR + #FUNCTION ((N) + #DECL ((VALUE N) FIX) + <COND (<SET F <NOT .F>> <MAPRET>) (T .N)>) + .L>> + +<ENDPACKAGE> +  \ No newline at end of file diff --git a/src/mprog/doops.udl001 b/src/mprog/doops.udl001 new file mode 100644 index 00000000..9bab749f --- /dev/null +++ b/src/mprog/doops.udl001 @@ -0,0 +1,60 @@ +<PACKAGE "DOOPS"> + +<ENTRY DOOPS DUPS> + +<SETG DUPS ()> +<GDECL (DUPS) <LIST [REST ATOM]>> + +<DEFINE DOOPS ("OPTIONAL" (ALL? <>) "AUX" (OBS ()) (A <ASSOCIATIONS>) V + (PCKOB <GET PACKAGE OBLIST>) (RPCKOB <GET RPACKAGE OBLIST>)) + #DECL ((ALL?) <OR ATOM FALSE> (OBS) LIST (A) <OR FALSE ASOC> (V) ANY + (PCKOB RPCKOB) OBLIST) + <SETG DUPS ()> + <REPEAT () + <COND (<AND <==? <INDICATOR .A> OBLIST> + <TYPE? <ITEM .A> ATOM> + <TYPE? <SET V <AVALUE .A>> OBLIST>> + <COND (<OR <==? <ROOT> .V> + <==? <ERRORS> .V> + <==? <INTERRUPTS> .V> + <==? .PCKOB .V> + <==? .RPCKOB .V>>) + (<SET OBS (.V !.OBS)>)>)> + <COND (<NOT <SET A <NEXT .A>>> <RETURN>)>> + <MAPF <> + <FUNCTION (O) + #DECL ((O) OBLIST) + <COND (<OR .ALL? <LOOKUP <SPNAME <GET .O OBLIST>> .PCKOB>> + <MAPF <> + <FUNCTION (L) + #DECL ((L) LIST) + <MAPF <> + <FUNCTION (A) + #DECL ((A) ATOM) + <COND (<NOT <MEMQ .A ,DUPS>> + <AOOPS .A .OBS>)>> + .L>> + .O>)>> + .OBS>> + +<DEFINE AOOPS (A OBS "AUX" (D? <>) D (OUTCHAN .OUTCHAN)) + #DECL ((A) ATOM (OBS) <LIST [REST OBLIST]> (D D?) <OR ATOM FALSE> + (OUTCHAN) CHANNEL) + <MAPF <> + <FUNCTION (O) + #DECL ((O) OBLIST) + <COND (<==? .O <OBLIST? .A>>) + (<SET D <LOOKUP <SPNAME .A> .O>> + <COND (<NOT .D?> + <SETG DUPS (.A !,DUPS)> + <CRLF> + <PRINC <SPNAME .A>> + <PRINC " <=> "> + <PRINC <SPNAME <GET <OBLIST? .A> OBLIST>>> + <SET D? T>)> + <PRINC " = "> + <PRINC <SPNAME <GET .O OBLIST>>> + <SETG DUPS (.D !,DUPS)>)>> + .OBS>> + +<ENDPACKAGE> diff --git a/src/mprog/dow.undr02 b/src/mprog/dow.undr02 new file mode 100644 index 00000000..0538c0a4 --- /dev/null +++ b/src/mprog/dow.undr02 @@ -0,0 +1,18 @@ +<RPACKAGE "DOW"> + +<ENTRY DOW> + +<TITLE DOW> + <DECLARE ("VALUE" FIX)> + <PUSHJ P* IDOW> + <JRST FINIS> + +<INTERNAL-ENTRY IDOW 0> + <SUBM M* (P)> + <*RLPDT> + <LDB B* [<(*320300*) A>]> + <MOVSI A* <TYPE-CODE FIX>> + <JRST MPOPJ> +<END> + +<ENDPACKAGE> diff --git a/src/mprog/fillen.udl003 b/src/mprog/fillen.udl003 new file mode 100644 index 00000000..7a784a0a --- /dev/null +++ b/src/mprog/fillen.udl003 @@ -0,0 +1,28 @@ +; "rsubr to find the length of a file" + +<TITLE *FILE-LENGTH> + <SYMDEF *CALL #OPCODE *43000000000*> + <DECLARE ("VALUE" <OR FIX FALSE> CHANNEL)> + <MOVE A* (AB) 1> + <MOVE B* (A) 21> ; "status slot" + <ANDI B* *77*> + <CAIE B* *43*> + <JRST NOTDSK> + <*CALL FILLEN> + <JRST FAIL> + <MOVSI A* TFIX> + <JRST FINIS> + +NOTDSK <MOVE A* <TYPE-WORD FIX>> + <SETZ B*> + <JRST FINIS> + +FAIL <MOVSI A* TFALSE> + <SETZ B*> + <JRST FINIS> + +FILLEN <SETZ> + *465154544556* ; "SIXBIT /FILLEN/" + <(A) 1> ; "io channel #" + <SETZM B> + F \ No newline at end of file diff --git a/src/mprog/fmacro.ubkd10 b/src/mprog/fmacro.ubkd10 new file mode 100644 index 00000000..9b6026ea --- /dev/null +++ b/src/mprog/fmacro.ubkd10 @@ -0,0 +1,47 @@ + +<PACKAGE "FMACRO"> + +<ENTRY FAST-MACROS> + +<USE "HASH"> + +<NEWTYPE NORMAL-MACRO LIST> + +<COND (<NOT <APPLYTYPE NORMAL-MACRO>> ;"Not already setup" + <APPLYTYPE NORMAL-MACRO MACRO> + <SETG FAST-MACRO (T)>)> + +<GDECL (FAST-MACRO) LIST ;"Association Indicator for Expansions"> + +<DEFINE FAST-MACROS ("OPTIONAL" (FLAG T)) + <COND (.FLAG + <APPLYTYPE MACRO ,FAST-MACROER>) + (ELSE + <APPLYTYPE MACRO ,APPLY> + <SETG FAST-MACRO (T)>)> + "DONE"> + +<DEFINE FAST-MACROER (MAC "ARGS" BODY + "EXTRA" (HASHB <HASH .BODY>) SAVED EXP + "ACT" FMR) + #DECL ((MAC) MACRO (BODY) LIST (FMR) ACTIVATION + (SAVED) <OR FALSE <VECTOR HASH ANY>> (HASHB) HASH) + <COND (<AND <SET SAVED <GETPROP <COND (<EMPTY? .BODY> .MAC) + (.BODY)> + ,FAST-MACRO>> + <==? <1 .SAVED> .HASHB>> ;"Old expansion saved ?" + <SET EXP <2 .SAVED>>) + (ELSE ;"Generate expansion and save it" + <SET EXP <EXPAND <CHTYPE (<CHTYPE .MAC NORMAL-MACRO> !.BODY) FORM>>> + <PUTPROP <COND (<EMPTY? .BODY> .MAC) + (.BODY)> + ,FAST-MACRO [.HASHB .EXP]>)> + <COND (<==? <FUNCT <COND (<TYPE? ,FAST-MACROER RSUBR RSUBR-ENTRY> + <FRAME <FRAME <CHTYPE .FMR FRAME>>>) + (ELSE <FRAME <CHTYPE .FMR FRAME>>)>> + EXPAND> ;"Macro expansion only called for" + .EXP) + (ELSE ;"Macro evaluation called for" + <EVAL .EXP>)>> + +<ENDPACKAGE> diff --git a/src/mprog/fold.ubkd04 b/src/mprog/fold.ubkd04 new file mode 100644 index 00000000..c978da9f --- /dev/null +++ b/src/mprog/fold.ubkd04 @@ -0,0 +1,127 @@ +<PACKAGE "FOLD"> + +<ENTRY FOLD SHARE-FLG MACRO-FOLD SUBR-FOLD> +; +"******************************************************** +The following code simplifies the application of a routine + to strictly constant arguments + when that routine has no side effects. + Called by <FOLD atom> where atom is a Group name. +*********************************************************" + +<AND? <SETG SHARE-FLG <>> ;"Check for legality of structured expansions ?" + <SETG MACRO-FOLD <>> ;"Fold calls to macros ?" + <SETG SUBR-FOLD T> ;"Fold calls to subrs ?" + <SETG COUNT 0> + <GDECL (SHARE-FLG SUBR-FOLD MACRO-FOLD) <OR ATOM FALSE> + (COUNT) FIX>> + +<DEFINE FOLD (GROUP-NAME "TUPLE" FCN-NAMES "EXTRA" GRP) + #DECL ((GROUP-NAME) ATOM (FCN-NAMES) <SPECIAL <TUPLE [REST ATOM]>>) + <COND (<AND <ASSIGNED? .GROUP-NAME> + <TYPE? <SET GRP ..GROUP-NAME> LIST>> + <SETG COUNT 0> + <MAPR <> ,FOLD1 .GRP> + <PUT .GROUP-NAME CHANNEL> ;"Redefinition flag" + (,COUNT "CONSTANTS FOLDED")) + (ELSE #FALSE ("NOT-A-GROUP"))>> + +<DEFINE FOLD1 (CODE "EXTRA" OBJECT EOBJECT "ACT" FOLDER) +;"If <1 .CODE> is one of the special cases that evals to a constant +then perform the appropriate substitution into .CODE. +Also return the number 1 if <1 .CODE> is a constant or evals to a constant." + #DECL ((VALUE) FIX (CODE) <<OR LIST VECTOR UVECTOR> ANY> + (FCN-NAMES) TUPLE (FOLDER) ACTIVATION) + <SET OBJECT <COND (<TYPE? .CODE LIST> <1 .CODE>) + (<TYPE? .CODE VECTOR> <1 .CODE>) + (<TYPE? .CODE UVECTOR> <1 .CODE>)>> + <COND + (<TYPE? .OBJECT FORM SEGMENT> ;"Application of Function to Args ?" + <COND + (<OR <EMPTY? .OBJECT> + <==? <1 .OBJECT> QUOTE> + <AND <==? <1 .OBJECT> GVAL> + <TYPE? <2 .OBJECT> ATOM> + <MANIFEST? <2 .OBJECT>>>> + 0 ;"Always Constant") + (<AND <0? <MAPR ,+ ,FOLD1 <REST .OBJECT 0>>> ;"Constant args ?" + <TYPE? <1 .OBJECT> ATOM> + <OR <AND ,SUBR-FOLD <MEMQ <1 .OBJECT> ,SUBRS>> + <MEMQ <1 .OBJECT> .FCN-NAMES>> ;"And Constant function ?"> + <SET EOBJECT <EVAL .OBJECT>> + <COND + (<AND ,CHECK <NOT <GOOD-EXPANSION? .OBJECT .EOBJECT>>> + <ERROR POOR-EVALUATION-RESULT!-ERRORS + .OBJECT + EVALS-TO:!-ERRORS + .EOBJECT + FOLD>) + (ELSE + <SETG COUNT <+ ,COUNT 1>> + <PUT .CODE 1 <COND (<OR <TYPE? .EOBJECT FORM SEGMENT LIST VECTOR UVECTOR> + <EVALTYPE <TYPE .EOBJECT>>> + <MAKTYPE (QUOTE .EOBJECT) .OBJECT>) + (ELSE .EOBJECT)>>)> + 0 ;"Result is Constant") + (<AND ,MACRO-FOLD + <TYPE? <1 .OBJECT> ATOM> + <GASSIGNED? <1 .OBJECT>> + <TYPE? ,<1 .OBJECT> MACRO>> ;"Call on Macro to be folded ?" + <SET EOBJECT <EXPAND .OBJECT>> + <SETG COUNT <+ ,COUNT 1>> + <COND (<AND <TYPE? .EOBJECT SPLICE> + <TYPE? .CODE LIST> + <NOT <EMPTY? <SET EOBJECT (!.EOBJECT !<REST .CODE>)>>>> + ;"Special case hack--disappearing macro expansion" + <PUT .CODE 1 <1 .EOBJECT>> + <PUTREST .CODE <REST .EOBJECT>> + <AGAIN .FOLDER>) + (<TYPE? .EOBJECT FORM> + <PUT .CODE 1 <MAKTYPE .EOBJECT .OBJECT>> + <AGAIN .FOLDER>)>) + (ELSE 1 ;"Not Constant")>) + (<TYPE? .OBJECT LIST VECTOR UVECTOR> ;"Creation of Structured Object ?" + <MAPR <> ,FOLD1 .OBJECT> + 1 ;"EVALs to a copy, therefore not Constant") + (ELSE ;"Object EVALs to itself and is Constant" + 0)>> + +<DEFINE MAKTYPE (NEW OLD) + #DECL ((NEW) <PRIMTYPE LIST> (OLD VALUE) <OR FORM SEGMENT>) + <COND (<TYPE? .OLD FORM> <CHTYPE .NEW FORM>) + (ELSE <CHTYPE .NEW SEGMENT>)>> + +<DEFINE GOOD-EXPANSION? (OBJECT EOBJECT) + #DECL ((OBJECT) <OR FORM SEGMENT>) + <OR <MONAD? .EOBJECT> + <MEMQ .EOBJECT <REST .OBJECT>> + <MEMQ <SET EOBJECT <CHTYPE .EOBJECT <PRIMTYPE .EOBJECT>>> + <REST .OBJECT>> + <MAPF <> + <FUNCTION (OB "EXTRA" (CHOB <CHTYPE .OB <PRIMTYPE .OB>>) VAL) + <COND (<==? .CHOB .EOBJECT> + <MAPLEAVE T>) + (<OR <NOT <TYPE? .OB FORM>> + <N==? 2 <LENGTH? .OB 2>>>) + (<AND <==? <1 .OB> QUOTE> + <==? .CHOB .EOBJECT>> + <MAPLEAVE T>) + (<AND <==? <1 .OB> GVAL> + <TYPE? <SET VAL <2 .OB>> ATOM> + <MANIFEST? .VAL> + <==? <CHTYPE <SET VAL ,.VAL> + <PRIMTYPE .VAL>> + .EOBJECT>> + <MAPLEAVE T>)>> + .OBJECT>>> + +<SETG SUBRS ;"SUBRs that have no side effects" + '![* + - / 0? 1? ==? =? ABS ANDB ASCII ATAN BITS CHTYPE COS DECL? EMPTY? + EQVB EXP FIX FLOAT G=? G? GETBITS L=? L? LOG MAX MIN MOD MONAD? N==? + N=? ORB PNAME PRIMTYPE PUTBITS SIN SQRT STRCOMP STRUCTURED? TYPE TYPE? + TYPEPRIM XORB!]> + +<GDECL (SUBRS) UVECTOR> + +<ENDPACKAGE> + diff --git a/src/mprog/gc.ubkd13 b/src/mprog/gc.ubkd13 new file mode 100644 index 00000000..361ae8bd --- /dev/null +++ b/src/mprog/gc.ubkd13 @@ -0,0 +1,150 @@ +;"Now offs blocked interrupt when error occurs, to +prevent instantaneous garbage collection." + +<PACKAGE "GC"> + +<ENTRY DIVERT PREVENT-GC DIVERT-MAX DIVERT-LMT DIVERT-INC BLOAT? HAIRY-GC> + +<SETG DIVERT-CNT 0> + +<SETG DIVERT-MAX 10> + +<SETG DIVERT-INC 4000> + +<SETG DIVERT-AMT 0> + +<SETG DIVERT-LMT 100000> + +<SETG HAIRY-GC <>> + +<SETG HAIRY-CT 0> + +<SETG HAIRY-FLAG <>> + +<GDECL (DIVERT-CNT DIVERT-MAX DIVERT-INC DIVERT-AMT DIVERT-LMT) FIX + (HAIRY-GC) <OR ATOM FALSE FIX> (HAIRY-CT) FIX (HAIRY-FLAG) <OR ATOM FALSE>> + +<DEFINE DIVERT ("OPTIONAL" (FLG T)) + <COND (.FLG + <HANDLER ,DIVERT-INT ,DIVERT-HAND> + <HANDLER ,ERROR-INT ,ERROR-HAND>) + (ELSE <OFF ,DIVERT-HAND> <OFF ,ERROR-HAND> + <OFF ,BLOCK-HAND>)> + "DONE"> + +<DEFINE PREVENT-GC () + <COND (<0? ,DIVERT-CNT>) + (T <SETG DIVERT-CNT <SETG DIVERT-AMT 0>> + <OFF ,BLOCK-HAND> + <OFF ,GC-HAND>)>> + +<DEFINE DIVERT-FCN (AMT REASON) + <SETG DIVERT-CNT <+ ,DIVERT-CNT 1>> + <SETG DIVERT-AMT <+ ,DIVERT-AMT ,DIVERT-INC .AMT>> + <COND (<OR <G? ,DIVERT-CNT ,DIVERT-MAX> + <G? ,DIVERT-AMT ,DIVERT-LMT>> ;"Too much diversion ?" + <SETG DIVERT-AMT <SETG DIVERT-CNT 0>> + <GC-FCN> + <GC 0 ,HAIRY-FLAG> + <SETG HAIRY-FLAG <>>) + (ELSE ;"Divert this request for storage" + <COND (<1? ,DIVERT-CNT> ;"First diversion ?" + <HANDLER ,BLOCK-INT ,BLOCK-HAND> + <HANDLER ,GC-INT ,GC-HAND>)> + <BLOAT <+ .AMT ,DIVERT-INC>> + ;"Get storage desired plus extra increment")>> + +<SETG DIVERT-HAND <HANDLER <SETG DIVERT-INT <EVENT "DIVERT-AGC" 1000>> + ,DIVERT-FCN>> + + +<OFF ,DIVERT-HAND> + +<DEFINE BLOCK-FCN (PROCESS) <GC-FCN> <GC 0 ,HAIRY-FLAG>> + +<SETG BLOCK-HAND <HANDLER <SETG BLOCK-INT <EVENT "BLOCKED" 10>> + ,BLOCK-FCN>> + +<OFF ,BLOCK-HAND> + +<DEFINE ERROR-FCN (FRM "TUPLE" ARGS) + <PREVENT-GC>> + +<SETG ERROR-HAND <HANDLER <SETG ERROR-INT <EVENT "ERROR" 20>> ,ERROR-FCN>> + +<OFF ,ERROR-HAND> + +<DEFINE GC-FCN ("TUPLE" T "AUX" (HAIRY-GC ,HAIRY-GC)) + #DECL ((HAIRY-GC) <OR ATOM FALSE FIX>) + <COND (<NOT .HAIRY-GC>) + (<TYPE? .HAIRY-GC ATOM> + <SETG HAIRY-FLAG T> + <AND <GC-MON> <PRINC "HAIRY-GC ">>) + (<G=? <SETG HAIRY-CT <+ ,HAIRY-CT 1>> .HAIRY-GC> + <SETG HAIRY-CT 0> + <SETG HAIRY-FLAG T> + <AND <GC-MON> <PRINC "HAIRY-GC " ,OUTCHAN>>)> + <OFF ,BLOCK-HAND> + <OFF ,GC-HAND> + <SETG DIVERT-AMT <SETG DIVERT-CNT 0>>> + +<SETG GC-HAND <HANDLER <SETG GC-INT <EVENT "GC" 11>> + ,GC-FCN>> + +<OFF ,GC-HAND> + + +<DEFINE BLOAT? (OLD + "OPTIONAL" (CAREFUL <>) + "EXTRA" (NEW <BLOAT-STAT ,BUF>) (NUMS ())) + #DECL ((OLD NEW) <UVECTOR [27 FIX]> (NUMS) LIST) + <SET NUMS + <ALLOC .NUMS + <COND (<OR .CAREFUL + <N==? <7 .OLD> <7 .NEW>> + <N==? <8 .OLD> <8 .NEW>>> ;"Blown P stack ?" + <- <27 .NEW> <26 .NEW>> ;"MAX P stack") + (ELSE 0 ;"NO P stack")>>> + <SET NUMS + <ALLOC .NUMS + <+ <- <23 .OLD> <23 .NEW>> <- <22 .NEW> <22 .OLD>>>>> + ;"Storage" + <SET NUMS <ALLOC .NUMS <- <21 .NEW> <21 .OLD>>>> ;"Types" + <SET NUMS + <ALLOC .NUMS + <+ <- <19 .NEW> <19 .OLD>> + <COND (.CAREFUL <- <18 .NEW> <19 .NEW>>) (ELSE 0)>>>> + ;"Globals" + <SET NUMS + <ALLOC .NUMS + <+ <- <17 .NEW> <17 .OLD>> + <COND (.CAREFUL <- <16 .NEW> <17 .NEW>>) (ELSE 0)>>>> + ;"Locals" + <SET NUMS + <ALLOC .NUMS + <COND (<OR .CAREFUL + <N==? <2 .OLD> <2 .NEW>> + <N==? <8 .OLD> <8 .NEW>>> ;"Blown TP stack ?" + <- <15 .NEW> <14 .NEW>> ;"MAX TP stack") + (ELSE 0 ;"NO TP stack")>>> + <SET NUMS <ALLOC .NUMS <- <12 .NEW> <12 .OLD>>>> + <CHTYPE (BLOAT !.NUMS) FORM>> + +<SETG BUF <IUVECTOR 27 0>> + +<GDECL (BUF) <UVECTOR [27 FIX]>> + +<DEFINE ALLOC (NUMS NUM) + #DECL ((NUMS VALUE) LIST (NUM) FIX) + <COND (<AND <L=? .NUM 0> <EMPTY? .NUMS>> .NUMS) + (<L=? .NUM 0> (1 !.NUMS)) + (ELSE + (<REPEAT ((MUL 1)) + #DECL ((MUL) FIX) + <COND (<L? .NUM 15> <RETURN <* <+ .NUM 1> .MUL>>)> + <SET MUL <* .MUL 10>> + <SET NUM </ .NUM 10>>> + !.NUMS))>> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog/grpchk.undr13 b/src/mprog/grpchk.undr13 new file mode 100644 index 00000000..c7cc1571 --- /dev/null +++ b/src/mprog/grpchk.undr13 @@ -0,0 +1,654 @@ + +<PACKAGE "GRPCHK"> + +<ENTRY GROUP-CHECK + TRACE-CHECK + TRACE-BLESS + FUNCT-CHECK + GROUP-BLESS> + +<DEFINE F-CHECK (IT + "OPTIONAL" (BLESSED-FUNCTS ()) + "AUX" TMP (BAD-FUNCTS ()) (SPECS ()) (GOOD-FUNCTS ()) + (FRIENDLY-FUNCTS ()) (NON-SPECIAL-BOUND ()) + (GLOBAL-USED ()) (NSB-USED ())) + #DECL ((IT) <OR FUNCTION FORM> + (BAD-FUNCTS GOOD-FUNCTS FRIENDLY-FUNCTS SPECS BLESSED-FUNCTS + NON-SPECIAL-BOUND NSB-USED GLOBAL-USED) <SPECIAL LIST> + (VALUE) LIST) + (<EXT-CHECK .IT> + <CLNR .SPECS> + .BAD-FUNCTS + .GOOD-FUNCTS + .FRIENDLY-FUNCTS + <SET TMP <CLNR .NSB-USED>> + <CLNR .NON-SPECIAL-BOUND> + .GLOBAL-USED + <ROOT-ATOMS .TMP>)> + +<DEFINE CLNR (TMP "AUX" (LST .TMP) (FOO ())) + #DECL ((TMP FOO LST) LIST) + <REPEAT () + <COND (<EMPTY? .TMP> <RETURN .LST>)> + <SET TMP <REST <PUT .TMP 1 <1 <SET FOO <1 .TMP>>>>>>>> + +<DEFINE EXT-CHECK (G "OPTIONAL" (DF ()) (EX ()) (FIRST T) "AUX" TMP) + #DECL ((G) <PRIMTYPE LIST> + (DF BAD-FUNCTS NSB-USED GOOD-FUNCTS FRIENDLY-FUNCTS BLESSED-FUNCTS + NON-SPECIAL-BOUND GLOBAL-USED) LIST (EX) <SPECIAL LIST> (FIRST) ANY) + <PROG () + <COND (<EMPTY? .G> <RETURN .EX>)> + <COND + (<COND (<TYPE? .G FUNCTION> + <COND (<AND <N==? .FIRST MAPF> <N==? .FIRST MAPR>> <SET DF ()>) + (T)>) + (<AND <TYPE? .G FORM SEGMENT> + <OR <==? <1 .G> PROG> <==? <1 .G> REPEAT>>> + <SET G <REST .G>>) + (<AND <TYPE? .G FORM> + <G? <LENGTH .G> 2> + <==? <1 .G> FUNCTION>> + <COND (<AND <N==? .FIRST MAPF> <N==? .FIRST MAPR>> <SET DF ()>)> + <SET G <REST .G 1>>)> + <COND (<TYPE? <1 .G> ATOM> + <SET DF (<1 .G> !.DF)> + <DCL-SPEC <1 .G> + <COND (<AND <G? <LENGTH .G> 2> <TYPE? <3 .G> DECL>> + <3 .G>) + (())> + .DF> + <SET G <REST .G>>)> + <COND + (<TYPE? <1 .G> LIST> + <SET DF + <DEF-GET <1 .G> + .DF + <COND (<AND <NOT <EMPTY? <SET G <REST .G>>>> + <TYPE? <SET TMP <1 .G>> DECL>> + <SET G <REST .G>> + .TMP) + (())>>>)>)> + <COND + (<AND <TYPE? .G FORM SEGMENT> + <L? 1 <LENGTH .G>> + <OR <==? <1 .G> LVAL> <==? <1 .G> SET>> + <TYPE? <2 .G> ATOM>> + <COND + (<SET TMP <MEMQ <2 .G> .DF>> + <COND (<NOT <OR <MEMQ .TMP .NSB-USED> <MEMQ .TMP .SPECS>>> + <SET NSB-USED (.TMP !.NSB-USED)> + <COND (<==? <1 .NON-SPECIAL-BOUND> .TMP> + <SET NON-SPECIAL-BOUND <REST .NON-SPECIAL-BOUND>>) + (<REPEAT ((NSB .NON-SPECIAL-BOUND)) + #DECL ((NSB) LIST) + <COND (<==? .TMP <2 .NSB>> + <PUTREST .NSB <REST .NSB 2>> + <RETURN>)> + <SET NSB <REST .NSB>>>)>)>) + (<NOT <MEMQ <2 .G> .EX>> <SET EX (<2 .G> !.EX)>)>)> + <COND (<AND <TYPE? .G FORM SEGMENT> + <L? 1 <LENGTH .G>> + <OR <==? <1 .G> GVAL> <==? <1 .G> SETG>> + <TYPE? <2 .G> ATOM>> + <OR <MEMQ <2 .G> .GLOBAL-USED> + <SET GLOBAL-USED (<2 .G> !.GLOBAL-USED)>>)> + <COND (<AND <TYPE? .G FORM SEGMENT> <TYPE? <1 .G> ATOM>> + <COND (<NOT <GASSIGNED? <1 .G>>> + <OR <MEMQ <1 .G> .BAD-FUNCTS> + <SET BAD-FUNCTS (<1 .G> !.BAD-FUNCTS)>>) + (<MEMQ <1 .G> .BLESSED-FUNCTS> + <OR <MEMQ <1 .G> .FRIENDLY-FUNCTS> + <SET FRIENDLY-FUNCTS (<1 .G> !.FRIENDLY-FUNCTS)>>) + (<NOT <TYPE? ,<1 .G> SUBR FSUBR>> + <OR <MEMQ <1 .G> .GOOD-FUNCTS> + <SET GOOD-FUNCTS (<1 .G> !.GOOD-FUNCTS)>>)>)> + <REPEAT ((G1 <1 .G>) + (GMAP <COND (<MEMQ .G1 '![MAPF MAPR!]> <3 .G>)>)) + <COND (<EMPTY? .G> <RETURN .EX>) + (<AND .GMAP <==? <PRIMTYPE .GMAP> LIST> <==? <1 .G> .GMAP>> + <SET EX <EXT-CHECK <1 .G> .DF .EX .G1>>) + (<TYPE? <1 .G> FORM SEGMENT> + <SET EX <EXT-CHECK <1 .G> .DF .EX>>) + (<TYPE? <1 .G> LIST FUNCTION CLOSURE> + <SET EX <EXT-CHECK <1 .G> .DF .EX>>) + (<TYPE? <1 .G> VECTOR UVECTOR> + <SET EX <STR-CHECK <1 .G> .DF .EX>>)> + <SET G <REST .G>>>>> + +<DEFINE DEF-GET (DFS DF DECLS "AUX" ADF TF IT) + #DECL ((DFS DF ADF) LIST (TF) FORM (NON-SPECIAL-BOUND) LIST) + <REPEAT () + <COND (<EMPTY? .DFS> <RETURN .DF>) + (<TYPE? <1 .DFS> ATOM> + <SET DF (<1 .DFS> !.DF)> + <DCL-SPEC <1 .DFS> .DECLS .DF>) + (<AND <TYPE? <1 .DFS> FORM> + <==? 2 <LENGTH <SET TF <1 .DFS>>>> + <==? <1 .TF> QUOTE>> + <SET DF (<2 .TF> !.DF)> + <DCL-SPEC <2 .TF> .DECLS .DF>) + (<AND <TYPE? <1 .DFS> LIST> + <SET ADF <1 .DFS>> + <==? 2 <LENGTH .ADF>> + <OR <TYPE? <SET IT <1 .ADF>> ATOM> + <AND <TYPE? <1 .ADF> FORM> + <==? 2 <LENGTH <SET TF <1 .ADF>>>> + <==? <1 .TF> QUOTE> + <SET IT <2 .TF>>>>> + <COND (<TYPE? <2 .ADF> LIST FORM SEGMENT FUNCTION> + <SET EX <EXT-CHECK <2 .ADF> .DF .EX>>) + (<TYPE? <2 .ADF> VECTOR UVECTOR> + <SET EX <STR-CHECK <2 .ADF> .DF .EX>>)> + <SET DF (.IT !.DF)> + <DCL-SPEC .IT .DECLS .DF>)> + <SET DFS <REST .DFS>>>> + +<DEFINE STR-CHECK (G DF EX) + #DECL ((DF) LIST (EX) <SPECIAL LIST>) + <REPEAT () + <COND (<EMPTY? .G> <RETURN .EX>) + (<TYPE? <1 .G> LIST FORM SEGMENT FUNCTION> + <SET EX <EXT-CHECK <1 .G> .DF .EX>>) + (<TYPE? <1 .G> VECTOR UVECTOR> + <SET EX <STR-CHECK <1 .G> .DF .EX>>)> + <SET G <REST .G>>>> + +<DEFINE DCL-SPEC (ATM DCL FLAG "AUX" FOO) + #DECL ((DCL) <<PRIMTYPE LIST> [REST LIST ANY]> (FOO) FORM + (SPECS NON-SPECIAL-BOUND) LIST) + <REPEAT () + <COND (<EMPTY? .DCL> + <SET NON-SPECIAL-BOUND (.FLAG !.NON-SPECIAL-BOUND)> + <RETURN>) + (<AND <TYPE? <2 .DCL> FORM> + <NOT <EMPTY? <SET FOO <2 .DCL>>>> + <==? SPECIAL <1 .FOO>> + <MEMQ .ATM <1 .DCL>>> + <SET SPECS (.FLAG !.SPECS)> + <RETURN>)> + <SET DCL <REST .DCL 2>>>> + +<DEFINE FUNCT-CHECK (ATM "OPTIONAL" (OUTCHAN .OUTCHAN) (PRINT-NONE T) "AUX" TMP) + + #DECL ((OUTCHAN) <SPECIAL CHANNEL> (PRINT-NONE) <SPECIAL ANY>) + <DESCRIBER <SET TMP (((.ATM) !<F-CHECK ,.ATM>))> + "" + "function" + <GET-INDXS (1) .TMP> + "" + "external atoms set or used" + 1 + 2 + "" + "atoms declared special" + 1 + 3 + "" + "non-special atoms bound, unused" + 1 + 8 + "" + "non-special atoms bound, used" + 1 + 7 + "" + "atoms used globally" + 1 + 9 + "" + "undefined functions referenced" + 1 + 4 + "" + "defined functions referenced" + 1 + 5> + <TERPRI> + "CHECKED"> + +<DEFINE GROUP-CHECK ("TUPLE" FOO) <GROUP-CHECKER ,GCER !.FOO>> + +<DEFINE GCER (GOODS) + <TERPRI> + <DESCRIBER .GOODS + "function in group" + "function" + <GET-INDXS (1) .GOODS> + "atoms which are unbound and whose lval's are set or used" + "external atoms" + 1 + 2 + "atoms which are declared special" + "special atoms" + 1 + 3 + "atoms not declared special and not used" + "unused atoms" + 1 + 8 + "atoms in root, not special, bound, and used" + "root atoms used" + 1 + 10 + "atoms used globally" + "global atoms" + 1 + 9 + "undefined functions referenced" + "undefined functions" + 1 + 4 + "defined functions external to group referenced" + "external functions" + 1 + 5 + "functions internal to group referenced" + "internal functions" + 1 + 6 + "functions internal to group which reference it" + "used by" + 6 + 1> + <DESCRIBER .GOODS + "defined function external to group which is referenced" + "external function" + <GET-INDXS (5) .GOODS> + "functions in group which reference it" + "used by" + 5 + 1> + <DESCRIBER .GOODS + "undefined function which is referenced" + "undefined function" + <GET-INDXS (4) .GOODS> + "functions in group which reference it" + "used by" + 4 + 1> + <DESCRIBER .GOODS + "atoms used globally" + "global atoms" + <GET-INDXS (9) .GOODS> + "functions in which globally used" + "global in" + 9 + 1> + <DESCRIBER .GOODS + "atom which is special or used non-locally or unused" + "atom" + <GET-INDXS (2 3 8 10) .GOODS> + "functions which reference its lval non-locally" + "external in" + 2 + 1 + "functions in which it is declared special" + "special in" + 3 + 1 + "functions in which it is bound, not special, and unused" + "unused in" + 8 + 1 + "functions in which it is bound, not special, and used" + "used in" + 7 + 1>> + +<DEFINE GROUP-BLESS ("TUPLE" FOO) <GROUP-CHECKER ,BLSER !.FOO>> + +<DEFINE BLSER (GOODS + "AUX" (SPECL <GET-INDXS (3) .GOODS>) + (USED-IN <GET-INDXS (2) .GOODS>) + (UNUSED <GET-INDXS (8) .GOODS>) + (ROOT-A <GET-INDXS (10) .GOODS>) + (NON-SPEC <GET-INDXS (7) .GOODS>)) + <TERPRI> + <DESCRIBER .GOODS + "" + "undefined function" + <GET-INDXS (4) .GOODS> + "" + "used by" + 4 + 1> + <DESCRIBER .GOODS + "" + "atom" + <LSORT (!.ROOT-A + !<GET-DIF .SPECL .USED-IN> + !<GET-DIF .USED-IN .SPECL> + !<GET-INTERSECT .SPECL .NON-SPEC> + !.UNUSED + !<ROOT-ATOMS .SPECL .USED-IN>)> + "" + "external in" + 2 + 1 + "" + "special in" + 3 + 1 + "" + "unused in" + 8 + 1 + "" + "used in" + 7 + 1>> + +<DEFINE GROUP-CHECKER (TODO ATML + "OPTIONAL" (OUTCHAN .OUTCHAN) (PRINT-NONE T) + "AUX" GRP TMP F (FS ()) (GOODS ()) FNCT + (OBL <COND (<EMPTY? .OBLIST> FULL-OBL) (T BLOCK)>) + (OOBLIST .OBLIST) (OBLIST ()) + (ATMLST + <COND (<TYPE? .ATML ATOM> (.ATML)) (.ATML)>)) + #DECL ((FNCT) ATOM (GRP) LIST (OUTCHAN) <SPECIAL CHANNEL> (F) FORM + (FS GOODS) LIST (OBLIST) <SPECIAL ANY> (PRINT-NONE) <SPECIAL + ANY> + (ATMLST) <LIST [REST ATOM]> (ATML) <OR ATOM <LIST [REST ATOM]>>) + <PROG () + <REPEAT (OB ATM) + <COND (<EMPTY? .ATMLST> <RETURN>)> + <SET ATM <1 .ATMLST>> + <SET ATMLST <REST .ATMLST>> + <COND (<OR <NOT <ASSIGNED? .ATM>> + <NOT <TYPE? <SET TMP ..ATM> LIST>>> + <RETURN #FALSE ("NOT A GROUP")>)> + <SET GRP .TMP> + <SET OB <GET .ATM .OBL '.OOBLIST>> + <REPEAT ((NOT-YET T)) + <COND (<EMPTY? .GRP> <RETURN T>) + (<AND <TYPE? <1 .GRP> FORM> + <NOT <EMPTY? <SET F <1 .GRP>>>> + <==? <1 .F> DEFINE> + <SET FNCT <GET <2 .F> VALUE '<2 .F>>> + <GASSIGNED? .FNCT>> + <SET NOT-YET <>> + <SET FS (.FNCT !.FS)>)> + <COND (.NOT-YET <SET OB <GET .GRP .OBL '.OB>>)> + <SET GRP <REST .GRP>>> + <SET OBLIST <MERGE-OBL .OBLIST .OB>>> + <REPEAT ((L .FS)) + #DECL ((L) <LIST [REST ATOM]>) + <COND (<EMPTY? .L> <RETURN>)> + <SET GOODS (((<1 .L>) !<F-CHECK ,<1 .L> .FS>) !.GOODS)> + <SET L <REST .L>>> + <APPLY .TODO .GOODS> + "CHECKED">> + +<DEFINE TRACE-CHECKER (TODO ATM + "OPTIONAL" (OUTCHAN .OUTCHAN) (PRINT-NONE T) + "AUX" (FLIST <COND (<TYPE? .ATM LIST> .ATM) ((.ATM))>) + (RLIST <LIST !.FLIST>) (GOODS ()) (THIS ())) + #DECL ((OUTCHAN) <SPECIAL CHANNEL> (PRINT-NONE) <SPECIAL ANY> + (FLIST RLIST) <LIST [REST ATOM]> (GOODS THIS) <LIST [REST LIST]>) + <REPEAT () + <COND (<EMPTY? .RLIST> <RETURN>)> + <SET THIS ((<1 .RLIST>) !<F-CHECK ,<1 .RLIST>>)> + <REPEAT ((L (!<5 .THIS> !<9 .THIS>))) + #DECL ((L) <LIST [REST ATOM]>) + <COND (<EMPTY? .L> <RETURN>) + (<AND <GASSIGNED? <1 .L>> + <TYPE? ,<1 .L> FUNCTION> + <NOT <MEMQ <1 .L> .FLIST>>> + <SET FLIST (<1 .L> !.FLIST)> + <PUTREST .RLIST + <PUTREST (<1 .L>) <REST .RLIST>>>)> + <SET L <REST .L>>> + <SET GOODS (.THIS !.GOODS)> + <SET RLIST <REST .RLIST>>> + <APPLY .TODO .GOODS> + "CHECKED"> + +<DEFINE TRACE-CHECK ("TUPLE" FOO) <TRACE-CHECKER ,TCER !.FOO>> + +<DEFINE TCER (GOODS) + <TERPRI> + <DESCRIBER .GOODS + "" + "function" + <GET-INDXS (1) .GOODS> + "" + "external atoms" + 1 + 2 + "" + "special atoms" + 1 + 3 + "" + "unused atoms" + 1 + 8 + "" + "root atoms used" + 1 + 10 + "" + "global atoms" + 1 + 9 + "" + "undefined functions" + 1 + 4 + "" + "functions called" + 1 + 5 + "" + "used by" + 5 + 1> + <DESCRIBER .GOODS + "" + "undefined function" + <GET-INDXS (4) .GOODS> + "" + "used by" + 4 + 1> + <DESCRIBER .GOODS + "" + "atom" + <GET-INDXS (9) .GOODS> + "" + "global in" + 9 + 1> + <DESCRIBER .GOODS + "" + "atom" + <GET-INDXS (2 3 8 10) .GOODS> + "" + "external in" + 2 + 1 + "" + "special in" + 3 + 1 + "" + "unused in" + 8 + 1 + "" + "used in" + 7 + 1>> + +<DEFINE TRACE-BLESS ("TUPLE" FOO) <TRACE-CHECKER ,BLSER !.FOO>> + +<DEFINE MERGE-OBL (OB1 OB2) + #DECL ((OB1) <LIST [REST OBLIST]>) + <COND + (<TYPE? .OB2 OBLIST> + <COND (<MEMQ .OB2 .OB1> .OB1) (T (.OB2 !.OB1))>) + (T + <REPEAT ((TMP .OB2) (POS ())) + #DECL ((TMP POS) <LIST [REST OBLIST]>) + <COND (<EMPTY? .TMP> <RETURN .OB1>)> + <COND (<NOT <MEMQ <1 .TMP> .OB1>> + <COND (<EMPTY? .POS> <SET OB1 <SET POS (<1 .TMP> !.OB1)>>) + (T + <SET POS + <REST <PUTREST .POS + <PUTREST (<1 .TMP>) <REST .POS>>>>>)>)> + <SET TMP <REST .TMP>>>)>> + +<DEFINE LSORT (L "AUX" (M ()) (B ()) (TMP ()) (IT ()) (N 0)) + #DECL ((L M B TMP IT) LIST (N) FIX) + <PROG () + <COND (<L? <SET N <LENGTH .L>> 2> <RETURN .L>)> + <SET B <REST <SET TMP <REST .L <- </ .N 2> 1>>>>> + <PUTREST .TMP ()> + <SET L <LSORT .L>> + <SET B <LSORT .B>> + <SET TMP ()> + <REPEAT () + <COND (<EMPTY? .L> + <COND (<EMPTY? .TMP> <RETURN .B>) + (T <PUTREST .TMP .B> <RETURN .M>)>) + (<EMPTY? .B> + <COND (<EMPTY? .TMP> <RETURN .L>) + (T <PUTREST .TMP .L> <RETURN .M>)>) + (<==? <1 .L> <1 .B>> <SET L <REST .L>>) + (T + <COND (<L? <STRCOMP <1 .L> <1 .B>> 0> + <SET L <REST <SET IT .L>>>) + (T <SET B <REST <SET IT .B>>>)> + <PUTREST .IT ()> + <COND (<EMPTY? .M> <SET M <SET TMP .IT>>) + (T <SET TMP <REST <PUTREST .TMP .IT>>>)>)>>>> + +<DEFINE LBLPRNT (LABL LST + "OPTIONAL" (LMAR <+ 3 <LENGTH .LABL>>) + "AUX" (RT <ROOT>) (RMAR <13 .OUTCHAN>) + (PN <COND (<ASSIGNED? PRINT-NONE> .PRINT-NONE) (T)>)) + #DECL ((LABL) STRING (LST) LIST (LMAR RMAR) FIX) + <COND (<OR .PN <NOT <EMPTY? .LST>>> + <PRINTSTRING .LABL> + <PRINTSTRING ": "> + <INDENT-TO .LMAR> + <COND (<EMPTY? .LST> <PRINTSTRING "--">) + (T + <REPEAT () + <PROG ((OBLIST .OBLIST)) + #DECL ((OBLIST) <SPECIAL ANY>) + <COND (<==? <OBLIST? <1 .LST>> .RT> + <SET OBLIST ()>)> + <PRIN1 <1 .LST>>> + <SET LST <REST .LST>> + <COND (<EMPTY? .LST> <RETURN>) + (<L? <FLATSIZE <1 .LST> 1000> + <- .RMAR <14 .OUTCHAN> 5>> + <PRINTSTRING " ">) + (T <TERPRI> <INDENT-TO .LMAR>)>>)> + <TERPRI>)> + T> + +<DEFINE IS-IN (GOODIE L N "OPTIONAL" (R 1) "AUX" (LST ())) + #DECL ((L) <LIST [REST LIST]> (N R) FIX (LST) LIST) + <REPEAT (IT) + #DECL ((IT) LIST) + <COND (<EMPTY? .L> <RETURN>) + (<MEMQ .GOODIE <SET IT <NTH <1 .L> .N>>> + <SET LST (!<NTH <1 .L> .R> !.LST)>)> + <SET L <REST .L>>> + <LSORT .LST>> + +<DEFINE DESCRIBER (ALL DESC SDESC GOODIES + "TUPLE" RST + "AUX" (LMAR + <+ 3 + <REPEAT ((N <LENGTH .SDESC>) (RST .RST)) + #DECL ((N) FIX (RST) TUPLE) + <COND (<EMPTY? .RST> <RETURN .N>)> + <SET N <MAX .N <LENGTH <2 .RST>>>> + <SET RST <REST .RST 4>>>>)) + #DECL ((ALL) LIST (GOODIES) <LIST [REST ATOM]> (DESC) <OR STRING FALSE> + (RST) <TUPLE [REST STRING STRING FIX FIX]>) + <COND + (<NOT <EMPTY? .GOODIES>> + <COND (<AND .DESC <NOT <EMPTY? .DESC>>> + <TERPRI> + <PRINTSTRING .DESC> + <PRINTSTRING ": "> + <PRINTSTRING .SDESC> + <REPEAT ((R .RST)) + #DECL ((R) TUPLE) + <COND (<EMPTY? .R> <RETURN>)> + <TERPRI> + <PRINTSTRING <1 .R>> + <PRINTSTRING ": "> + <PRINTSTRING <2 .R>> + <SET R <REST .R 4>>> + <TERPRI>)> + <REPEAT () + <COND (<EMPTY? .GOODIES> <RETURN>)> + <TERPRI> + <TERPRI> + <LBLPRNT .SDESC (<1 .GOODIES>) .LMAR> + <REPEAT ((R .RST)) + #DECL ((R) TUPLE) + <COND (<EMPTY? .R> <RETURN>) + (T + <LBLPRNT <2 .R> + <IS-IN <1 .GOODIES> + .ALL + <3 .R> + <4 .R>> + .LMAR>)> + <SET R <REST .R 4>>> + <SET GOODIES <REST .GOODIES>>> + <TERPRI> + <PRINC <ASCII 12>> + <TERPRI>)>> + +<DEFINE ROOT-ATOMS ("TUPLE" TUP "AUX" (LST ()) (RT <ROOT>)) + #DECL ((TUP) <TUPLE [REST LIST]> (LST) <LIST [REST ATOM]>) + <MAPF <> + #FUNCTION ((L) + #DECL ((L) <LIST [REST ATOM]>) + <MAPF <> + #FUNCTION ((ATM) + #DECL ((ATM) ATOM) + <COND (<==? <OBLIST? .ATM> .RT> + <SET LST (.ATM !.LST)>)>) + .L>) + .TUP> + <LSORT .LST>> + +<DEFINE GET-INDXS (INDXS ALL "AUX" (GOODIES ())) + #DECL ((INDXS) <LIST [REST FIX]> (GOODIES) <LIST [REST ATOM]>) + <REPEAT () + <COND (<EMPTY? .INDXS> <RETURN>)> + <REPEAT ((INDX <1 .INDXS>) (ALL .ALL)) + #DECL ((ALL) <LIST [REST LIST]> (INDX) FIX) + <COND (<EMPTY? .ALL> <RETURN>)> + <SET GOODIES (!<NTH <1 .ALL> .INDX> !.GOODIES)> + <SET ALL <REST .ALL>>> + <SET INDXS <REST .INDXS>>> + <SET GOODIES <LSORT .GOODIES>>> + +<DEFINE GET-INTERSECT (L1 L2 "AUX" (SECT ())) + #DECL ((L1 L2 SECT) <LIST [REST ATOM]>) + <REPEAT () + <COND (<EMPTY? .L1> <RETURN>) + (<MEMQ <1 .L1> .L2> <SET SECT (<1 .L1> !.SECT)>)> + <SET L1 <REST .L1>>> + <LSORT .SECT>> + +<DEFINE GET-DIF (L1 L2 "AUX" (DIF ())) + #DECL ((L1 L2 DIF) <LIST [REST ATOM]>) + <REPEAT () + <COND (<EMPTY? .L1> <RETURN>) + (<MEMQ <1 .L1> .L2>) + (T <SET DIF (<1 .L1> !.DIF)>)> + <SET L1 <REST .L1>>> + <LSORT .DIF>> + +<ENDPACKAGE> diff --git a/src/mprog/hash.ubkd07 b/src/mprog/hash.ubkd07 new file mode 100644 index 00000000..8f2eb3dd --- /dev/null +++ b/src/mprog/hash.ubkd07 @@ -0,0 +1,47 @@ +<PACKAGE "HASH"> + +<ENTRY HASH> + +<NEWTYPE HASH WORD> + +<DEFINE HASH (OB "AUX" (HASHNO 3.14159) OBPRIM) + #DECL ((OB OBPRIM) ANY (VALUE) HASH (HASHNO) <PRIMTYPE WORD>) + <CHTYPE + <XORB <RAND <RAND <CHTYPE <TYPE-C <TYPE .OB>> FIX>>> + <COND (<LOCATIVE? .OB> <HASH <IN .OB>>) + (<TYPE? .OB RSUBR RSUBR-ENTRY> + ;"Avoid possible infinite recursion" + <XORB <HASH <1 .OB>> <HASH <2 .OB>> <HASH <3 .OB>>> + ;"Use Code, Name, and Decl only") + (<STRUCTURED? .OB> + <MAPF <> + <FUNCTION (X) + <SET HASHNO + <XORB <ROTATE .HASHNO <CHTYPE .HASHNO FIX>> + <HASH .X>>>> + .OB> + .HASHNO) + (<TYPE? <SET OBPRIM <CHTYPE .OB <PRIMTYPE .OB>>> ATOM STRING> + <HASHER .OBPRIM>) + (<TYPE? .OBPRIM WORD> + <RAND <CHTYPE .OBPRIM FIX>>) + (<TYPE? .OBPRIM LOCR> <RGLOC-CHTYPE .OBPRIM>) + (<TYPE? .OBPRIM FRAME> + <XORB <HASH <FUNCT .OBPRIM>> <HASH <ARGS .OBPRIM>>>) + (<TYPE? .OBPRIM ASOC> + <XORB <HASH <ITEM .OBPRIM>> + <HASH <INDICATOR .OBPRIM>> + <HASH <AVALUE .OBPRIM>>>) + (ELSE <ERROR WRONG-TYPE!-ERRORS .OB HASH>)>> + HASH>> + + +<FLOAD "MUDDLE;RAND NBIN"> + +<FLOAD "MUDDLE;ROTATE NBIN"> + +<FLOAD "MUDDLE;RGLOCS NBIN"> + +<FLOAD "MUDDLE;HASHER NBIN"> + +<ENDPACKAGE> diff --git a/src/mprog/helpld.6 b/src/mprog/helpld.6 new file mode 100644 index 00000000..525f8e35 --- /dev/null +++ b/src/mprog/helpld.6 @@ -0,0 +1,100 @@ + +<BLOCK (<ROOT>)> + +<NEWTYPE INTERNAL-RSUBR WORD> + +<NEWTYPE INTERNAL-RSUBR-TABLE UVECTOR> + +<ENDBLOCK> + +<FLOAD "BTB;LOC NBIN"> + +<FLOAD "BTB;SUBLOD NBIN"> + +<DEFINE INTERNAL-RSUBR (NAME NUMARGS "OPTIONAL" (FLG <LOOKUP "COMPILE" <ROOT>>) + "AUX" RSB NN + (RNM <CHTYPE <ANDB .NUMARGS *777777*> FIX>)) + #DECL ((NAME) ATOM (NUMARGS) FIX) + <COND (.FLG <BUILD-INTERNAL-RSUBR <RGLOC .NAME T> .NUMARGS>) + (<AND <GASSIGNED? .NAME> + <TYPE? <SET RSB ,.NAME> RSUBR RSUBR-ENTRY>> + <COND (<MEMBER "TUPLE" <3 .RSB>> + <SET NN 1>) + (ELSE + <SET NN <LENGTH <MEMBER "OPTIONAL" <3 .RSB>>>> + <COND (<0? .NN><SET NN 1>)>)> + <COND (<TYPE? .RSB RSUBR> <RSUBR-HACK .RSB .RNM 0 .NAME .NN>) + (<RSUBR-HACK <1 .RSB> .RNM <ENTRY-LOC .RSB> .NAME .NN>)>) + (<ERROR BAD-CALL-TO-INTERNAL-RSUBR!-RSUBRS>)>> + +<DEFINE RSUBR-HACK (RSUBR ARGNUM STARTLOC NAME NN "AUX" OBJ) + #DECL ((RSUBR) RSUBR (ARGNUM NN STARTLOC) FIX) + <COND + (<AND <==? <LENGTH .RSUBR> 4> + <TYPE? <SET OBJ <4 .RSUBR>> INTERNAL-RSUBR-TABLE> + <==? <UTYPE .OBJ> FIX>> + <SET STARTLOC <+ .STARTLOC <LOC <1 .RSUBR>>>> + <REPEAT () + <COND (<L=? .STARTLOC + <CHTYPE + <GETBITS <MOVIT <CHTYPE <GETBITS <1 .OBJ> <BITS 18>> FIX>> + <BITS 18>> + FIX>> + <RETURN>)> + <COND (<EMPTY? <SET OBJ <REST .OBJ>>> + <ERROR BAD-CALL-TO-INTERNAL-RSUBR!-ERRORS>)>> + <REPEAT (WRD) + <COND + (<==? <CHTYPE <GETBITS <SET WRD <1 .OBJ>> <BITS 18 18>> FIX> .ARGNUM> + <RETURN <BUILD-INTERNAL-RSUBR + <RGLOC .NAME> <CHTYPE <GETBITS .WRD <BITS 18>> FIX>>>)> + <COND (<OR <0? <SET NN <- .NN 1>>> + <EMPTY? <SET OBJ <REST .OBJ>>>> + <ERROR BAD-CALL-TO-INTERNAL-RSUBR!-ERRORS>)>>) + (<ERROR BAD-CALL-TO-INTERNAL-RSUBR!-ERRORS>)>> + +<DEFINE IRSUBR-PRINT (ITM "AUX" VAL ITEM) + #DECL ((ITEM ITM) <PRIMTYPE WORD>) + <SET VAL <GET-LOCATION .ITM>> + <COND (<OR <L? <SET ITEM <CHTYPE <GETBITS .ITM <BITS 18>> FIX>> 200> + <AND <==? .ITEM *777777*> <SET ITEM -1>>> + <PRINC "%<INTERNAL-RSUBR "> + <PRIN1 <SPEC-GET-LOC .ITM>> + <PRINC " "> + <PRIN1 .ITEM> + <PRINC ">">) + (<TYPE? .VAL RSUBR> + <PRINT-INTERNAL-RSUBR <2 .VAL> .ITEM .VAL 0>) + (<TYPE? .VAL RSUBR-ENTRY> + <PRINT-INTERNAL-RSUBR <2 .VAL> + .ITEM + <1 .VAL> + <ENTRY-LOC .VAL>>) + (<ERROR CANT-PRINT-INTERNAL-RSUBR!-ERRORS>)>> + +<DEFINE PRINT-INTERNAL-RSUBR (NAME ADDR RSUBR STARTLOC "AUX" OBJ) + #DECL ((NAME) ATOM (ADDR) FIX (RSUBR) RSUBR) + <COND (<AND <==? <LENGTH .RSUBR> 4> + <TYPE? <SET OBJ <4 .RSUBR>> INTERNAL-RSUBR-TABLE> + <==? <UTYPE .OBJ> FIX>> + <REPEAT () + <COND (<L=? .STARTLOC + <CHTYPE <GETBITS <1 .OBJ> <BITS 18>> FIX>> + <RETURN>)> + <COND (<EMPTY? <SET OBJ <REST .OBJ>>> + <ERROR BAD-CALL-TO-INTERNAL-RSUBR!-ERRORS>)>> + <REPEAT (WRD) + <COND (<==? <CHTYPE <GETBITS <SET WRD <1 .OBJ>> <BITS 18>> + FIX> + .ADDR> + <PRINC "%<INTERNAL-RSUBR "> + <PRIN1 .NAME> + <PRINC !" > + <PRIN1 <CHTYPE <GETBITS .WRD <BITS 18 18>> FIX>> + <PRINC !">> + <RETURN>)> + <COND (<EMPTY? <SET OBJ <REST .OBJ>>> + <ERROR CANT-PRINT-INTERNAL-RSUBR!-ERRORS>)>>) + (<ERROR CANT-PRINT-INTERNAL-RSUBR!-ERRORS>)>> + +<PRINTTYPE INTERNAL-RSUBR ,IRSUBR-PRINT> diff --git a/src/mprog/hosts.1 b/src/mprog/hosts.1 new file mode 100644 index 00000000..f935d522 --- /dev/null +++ b/src/mprog/hosts.1 @@ -0,0 +1,660 @@ +<PACKAGE "HOSTS"> + +<ENTRY DO-HOST-LOAD DO-HOST-FLUSH HOST SERVER MACHINE-NAME SYSTEM-NAME + HOSTNAMES GATEWAYS ARPA-NET CHAOS-NET> + +<OR <GASSIGNED? HOST-PAGE> <SETG HOST-PAGE <>>> +<OR <GASSIGNED? HOST-LEN> <SETG HOST-LEN 0>> +<SETG ARPA-NET *12*> +<SETG CHAOS-NET 7> +<MANIFEST ARPA-NET CHAOS-NET> +<SETG NET-SEARCH-LIST ![,ARPA-NET ;"ARPA" + ,CHAOS-NET ;"CHAOS"]> +<SETG GATEWAY-LIST [,CHAOS-NET + ["MIT-MC" "MIT-AI"]]> +%%<SETG NWNET <BITS 8 27> ; "NETWORK NUMBER"> +%%<SETG ARIMP <BITS 16 9> ; "IMP NUMBER IN ARPANET ADDRESS"> +%%<SETG ARHST <BITS 8 0> ; "HOST NUMBER IN ARPANET ADDRESS"> +%%<SETG ARPA-NET *12*> +%%<SETG OARIMP <BITS 6 0> ; "OLD-FORMAT ARPA IMP NUMBER"> +%%<SETG OARHST <BITS 2 6> ; "OLD-FORMAT ARPA HOST NUMBER"> + +; "RANDOM OFFSETS" + +; "TABLE LOCATIONS" +%%<SETG NAMPTR *10*> +%%<SETG SITPTR *11*> +%%<SETG NETPTR *12*> + +; "NETWORK TABLE" +%%<SETG NETNUM 0> ; "NETWORK NUMBER" +%%<SETG NTRTAB 1> ; "RH-ADDRESS OF ADDRESS TABLE" + +; "ADDRESS TABLES" +%%<SETG ADDADR 0> ; "ADDRESS" +%%<SETG ADLSIT 1> ; "LH-SITE TABLE ENTRY" +%%<SETG ADRCDR 1> ; "RH-NEXT ON CHAIN" + +; "SITE TABLE" +%%<SETG STLNAM 0> ; "LH-OFFICIAL NAME POINTER" +%%<SETG STRADR 0> ; "RH-ADDRESS CHAIN" +%%<SETG STLSYS 1> ; "LH-SYSTEM NAME" +%%<SETG STRMCH 1> ; "RH-MACHINE NAME" +%%<SETG STLFLG 2> ; "LH-FLAGS" +%%<SETG STFSRV *400000*>; "SERVER BIT" + +; "NAMES TABLE" +%%<SETG NMLSIT 0> ; "LH-SITE TABLE" +%%<SETG NMRNAM 0> ; "RH-NAME" + +<TITLE DO-HOST-LOAD> + <DECLARE ("VALUE" <OR FIX FALSE> "OPTIONAL" <OR ATOM FALSE>)> + <JUMPL AB* DO-ONE> + <PUSHJ P* IDOHL0> + <JRST FINIS> +DO-ONE <DPUSH TP* (AB)> + <PUSHJ P* IDOHL1> + <JRST FINIS> + +<INTERNAL-ENTRY IDOHL0 0> + <PUSH TP* <TYPE-WORD FALSE>> + <PUSH TP* [0]> +<INTERNAL-ENTRY IDOHL1 1> + <SUBM M* (P)> + <MOVE B* <MQUOTE <RGLOC HOST-PAGE>>> + <ADD B* GLOTOP 1> + <GETYP O* (B)> + <CAIN O* <TYPE-CODE FALSE>> + <JRST DOOPEN> + <SKIPL (TP)> ; "RELOAD ANYWAY?" + <JRST [ +<IFOPSYS (ITS <HRLZ A* 1(B)> + <ADD A* [<(*200*) C>]> + <*SUSET A> ; ".RPMAP OF FIRST PAGE" + <JUMPE C* DOOPEN> ; "PAGE DOESN'T EXIST, SO RELOAD" + <MOVE B* 1(B)>) + (TOPS20 <MOVE C* B> ; "SAVE LOCATIVE" + <HRRZ A* 1(B)> + <HRLI A* *400000*> + <RMAP> + <JUMPE B* DOOPEN> + <MOVE B* 1(C)>)> + <MOVSI A* <TYPE-CODE FIX>> + <JRST HLOUT>]> +DOOPEN <DPUSH TP* <PQUOTE "READ">> +<IFOPSYS +(TOPS20 <DPUSH TP* <PQUOTE "<SYSTEM>HOSTS2.BIN">>) +(ITS <DPUSH TP* <PQUOTE "SYSBIN;HOSTS2 >">>)> + <MCALL 2 OPEN> ; "TRY TO OPEN IT" + <JUMPGE B* HLOUT> ; "FAIL" + <DPUSH TP* A> ; "SAVE THE CHANNEL" + +<IFOPSYS +(TOPS20 <PUSH P* 1(B)> ; "SAVE CHANNEL" + <MOVE A* 1(B)> + <SIZEF> + <HALTF> + <MOVE A* C> ; "NUMBER OF 512 WD PAGES" + <ADDI A* 1> + <LSH A* -1> + <POP P* C>) +(ITS <MOVE C* 1(B)> ; "PICK UP THE CHANNEL NUMBER" + <*CALL [<SETZ> + <SIXBIT "FILLEN"> + <MOVE C> + <SETZM A>]> ; "GET THE FILE LENGTH" + <*LOSE *1400*> + <IDIVI A* *2000*> + <JUMPE B* NOREM> + <ADDI A* 1>)> +; "NUMBER OF PAGES NEEDED IS IN A" +NOREM <MOVE B* <MQUOTE <RGLOC HOST-PAGE>>> + <ADD B* GLOTOP 1> + <GETYP O* (B)> + <CAIE O* <TYPE-CODE FALSE>> + <JRST [<MOVE D* <MQUOTE <RGLOC HOST-LEN>>> + <ADD D* GLOTOP 1> + <CAMG A* 1(D)> ; "HAS THE FILE GROWN ENOUGH TO NEED A NEW PAGE?" + <JRST DO-MAP> ; "NO" + <PUSH P* A> + <PUSH P* C> + <PUSHJ P* IFLUSH> ; "FLUSH THE OLD TABLE, THEN" + <POP P* C> + <POP P* A> + <JRST FOO>]> ; "AND START FROM SCRATCH" +; "GET PAGES FOR HOST TABLE. NUMBER NEEDED IS IN A; CHANNEL # IS IN C" +FOO <PUSH P* C> + <PUSH P* A> + <PUSHJ P* PGFIND> + <JUMPLE B* [<ERRUUO* <MQUOTE CANT-GET-PAGES>>]> + <POP P* A> + <POP P* C> + <MOVE D* <MQUOTE <RGLOC HOST-LEN>>> + <ADD D* GLOTOP 1> + <MOVEM A* 1(D)> + <MOVSI O* <TYPE-CODE FIX>> + <MOVEM O* (D)> ; "SETG HOST-LEN" + <MOVE D* <MQUOTE <RGLOC HOST-PAGE>>> + <ADD D* GLOTOP 1> + <IFOPSYS (TOPS20 <LSH B* 1>)> ; "SO SAVE 20X PAGE #" + <MOVEM B* 1(D)> + <MOVEM O* (D)> ; "SETG HOST-PAGE" + <JRST DO-MAP1> +; "# PAGES TO MAP IN A, CHANNEL IN C, CORE PAGE IN B (AT DO-MAP1) + OR LOCATIVE IN B (AT DO-MAP)" +DO-MAP <MOVE B* 1(B)> ; "GET HOST-PAGE INTO B (ASSUMES LOCD IN B)" +DO-MAP1 <PUSH P* B> +<IFOPSYS +(ITS <MOVNS A> + <HRL B* A> + <*CALL [<SETZ> + <SIXBIT "CORBLK"> + <MOVEI *10000*> ; "%CBNDR" + <MOVEI -1> ; "%JSELF" + <MOVE B> + <SETZ C>]> + <*LOSE *1000*>) +(TOPS20 <EXCH A* C> + <HRLZS A> + <HRLI B* *400000*> + <LSH C* 1> ;"ITTY BITTY TWENEX PAGES" + <HRLI C* *600000*> ;"PM%CNT+PM%RD" + <PMAP>)> + <MCALL 1 CLOSE> ; "WE PUSHED THE CHANNEL A WHILE BACK, REMEMBER?" + <POP P* B> + <MOVSI A* <TYPE-CODE FIX>> +HLOUT <SUB TP* [<(2) 2>]> + <JRST MPOPJ> + +<SUB-ENTRY DO-HOST-FLUSH ("VALUE" ATOM)> + <PUSHJ P* IFLUSH> + <JRST FINIS> + +<INTERNAL-ENTRY IFLUSH 0> + <SUBM M* (P)> + <MOVE C* <MQUOTE <RGLOC HOST-PAGE>>> + <ADD C* GLOTOP 1> + <GETYP O* (C)> + <CAIN O* <TYPE-CODE FALSE>> + <JRST FLUSHO> + <MOVE B* 1(C)> ; "PAGE NUMBER" + <MOVSI O* <TYPE-CODE FALSE>> + <MOVEM O* (C)> + <SETZM 1(C)> ; "MAKE IT BE FALSE" + <MOVE C* <MQUOTE <RGLOC HOST-LEN>>> + <ADD C* GLOTOP 1> + <MOVE A* 1(C)> ; "NUMBER OF PAGES" + <SETZM 1(C)> ; "ZERO IT" + <PUSH P* A> + <PUSH P* B> +<IFOPSYS +(ITS <MOVNI C* (A)> + <HRLS C> + <HRR C* B> ; "AOBJN POINTER" + <*CALL [<SETZ> + <SIXBIT "CORBLK"> + <MOVEI 0> + <MOVEI -1> + <SETZ C>]> ; "FLUSH THE PAGES" + <JFCL>) +(TOPS20 <MOVE C* A> + <LSH C* 1> ;"ITTY BITTY TWENEX PAGES" + <HRLI C* *400000*> ;"PM%CNT" + <MOVNI A* 1> + <HRLI B* *400000*> + <PMAP>)> + <POP P* B> + <POP P* A> +<IFOPSYS (TOPS20 + <LSH B* -1>)> + <PUSHJ P* PGGIVE> ; "GIVE BACK TO INTERPRETER" +FLUSHO <MOVSI A* <TYPE-CODE ATOM>> + <MOVE B* <MQUOTE T>> + <JRST MPOPJ> + + +; "TAKE HOST NUMBER OR NAME, RETURN NAME IF GIVEN NUMBER, NUMBER IF GIVEN + NAME, FALSE IF NOT FOUND." +<SUB-ENTRY HOST ("VALUE" <OR FALSE STRING FIX> <OR FIX STRING> + "OPTIONAL" <OR FIX FALSE>)> + <MOVE A* AB> +HPLOOP <PUSH TP* (AB)> + <AOBJN AB* HPLOOP> + <HLRES A> + <ASH A* -1> + <ADDI A* HPTABE> + <PUSHJ P* @ (A) 1> + <JRST FINIS> + <IHOST2> +HPTABE <IHOST1> + +<INTERNAL-ENTRY IHOST1 1> + <PUSH TP* <TYPE-WORD FALSE>> + <PUSH TP* [0]> +<INTERNAL-ENTRY IHOST2 2> + <SUBM M* (P)> + <PUSH TP* -3(TP)> + <PUSH TP* -3(TP)> + <PUSHJ P* NUMTBS> ; "SEARCH RIGHT TABLE. RETURNS SITE TABLE ENTRY" + ; "INSTEAD OF TYPE IN A, RETURNS TABLE ADDRESS" + <JRST OTFALS> ; "FAILED, RETURN FALSE" + <GETYP O* -1(TP)> + <CAIE O* <TYPE-CODE FIX>> + <JRST NUMHAK> ; "RETURN A NET ADDRESS" + <HLRZ B* STLNAM(B)> ; "GET FILE ADDRESS OF OFFICIAL NAME" + <ADDI B* (A)> ; "CORE ADDRESS" + <PUSHJ P* STRGET> ; "RETURN STRING POINTER IN A AND B" +HSTOUT <SUB TP* [<(6) 6>]> + <JRST MPOPJ> +; "RETURN A FALSE" +OTFALS <MOVSI A* <TYPE-CODE FALSE>> + <MOVEI B* 0> + <JRST HSTOUT> + +; "POINTER TO SITE IN A & B, RETURN PREFERRED ADDRESS OR FALSE, +ALSO IN A AND B" +NUMHAK <PUSH P* B> + <PUSH P* C> + <PUSH P* E> + <PUSH P* F> + <GETYP O* -3(TP)> + <CAIE O* <TYPE-CODE FIX>> + <JRST ANYNET> + <SKIPN E* -2(TP)> + <JRST ANYNET> + <MOVEI F* 0> + <JRST NUMSL1> +ANYNET <MOVE B* <MQUOTE <RGLOC NET-SEARCH-LIST T>>> + <ADD B* GLOTOP 1> + <MOVE F* 1(B)> +NUMSL <MOVE E* (F)> +NUMSL1 <MOVE B* -3(P)> + <HRRZ B* STRADR(B)> ;"ADDRESS OF FIRST ADDRESS TABLE ENTRY" + <JUMPE B* NUMFAL> + <PUSHJ P* NUMLOP> + <JRST NUMNXT> +; <LDB C* [<NWNET B>]> +; <CAIE C* ARPA-NET> +; <JRST NUMNOZ> +; <MOVEI C* 0> +; <DPB C* [<NWNET B>]> ; "FOR NOW, ZERO THE NETWORK NUMBER" +NUMNOZ <POP P* F> + <POP P* E> + <POP P* C> + <SUB P* [<(1) 1>]> + <JRST HSTOUT> ; "RETURN" +NUMNXT <AOBJN F* NUMSL> +NUMFAL <POP P* F> + <POP P* E> + <POP P* C> + <POP P* B> + <JRST OTFALS> + +; "SITE IN A, ADDRESS TABLE POINTER IN B, NET IN E. RETURNS # IN B, SKIPS +IF WON" +NUMLOP <ADDI B* (A)> + <MOVE C* ADDADR(B)> + <LDB D* [<NWNET C>]> ; "GET NETWORK #" + <CAMN D* E> ; "RIGHT NETWORK?" + <JRST NUMFND> + <HRRZ B* ADRCDR(B)> + <JUMPN B* NUMLOP> ; "NEXT" + <POPJ P*> ; "FAILED" +NUMFND <MOVSI A* <TYPE-CODE FIX>> + <MOVE B* C> + <AOS (P)> + <POPJ P*> + +; "TAKE CORE ADDRESS IN B, RETURN STRING POINTER IN A AND B" +STRGET <PUSH P* C> + <SUBI B* 1> + <HRLI B* *010700*> ; "BYTE POINTER" + <PUSH P* B> ; "SAVE IT" + <MOVEI A* 0> +STRLOP <ILDB C* B> + <JUMPE C* STRGOT> + <AOJA A* STRLOP> +STRGOT <HLL A* <TYPE-WORD STRING>> + <POP P* B> + <POP P* C> + <POPJ P*> + +; "RETURN NAME OF MACHINE (PDP10, ETC.)" +<SUB-ENTRY MACHINE-NAME ("VALUE" <OR FALSE STRING FIX> <OR FIX STRING>)> + <DPUSH TP* (AB)> + <PUSHJ P* IMACH> + <JRST FINIS> + +<INTERNAL-ENTRY IMACH 1> + <SUBM M* (P)> + <PUSHJ P* NUMTBS> + <JRST OTFALS> ; "NO SUCH MACHINE" + <HRRZ B* STRMCH(B)> ; "GET POINTER TO MACHINE NAME" + <JUMPE B* RETZERO> ; "UNKNOWN" + <ADDI B* (A)> ; "ADDRESS OF NAME" + <PUSHJ P* STRGET> ; "MAKE A STRING POINTER" + <JRST HSTOUT> +RETZERO <MOVSI A* <TYPE-CODE FIX>> + <MOVEI B* 0> + <JRST HSTOUT> + +<SUB-ENTRY SYSTEM-NAME ("VALUE" <OR FALSE STRING FIX> <OR FIX STRING>)> + <DPUSH TP* (AB)> + <PUSHJ P* ISYS> + <JRST FINIS> + +<INTERNAL-ENTRY ISYS 1> + <SUBM M* (P)> + <PUSHJ P* NUMTBS> + <JRST OTFALS> + <HLRZ B* STLSYS(B)> + <JUMPE B* RETZERO> + <ADDI B* (A)> + <PUSHJ P* STRGET> + <JRST HSTOUT> + +<SUB-ENTRY SERVER ("VALUE" <OR FALSE FIX> <OR FIX STRING>)> + <DPUSH TP* (AB)> + <PUSHJ P* ISERVER> + <JRST FINIS> + +<INTERNAL-ENTRY ISERVER 1> + <SUBM M* (P)> + <PUSHJ P* NUMTBS> + <JRST OTFALS> + <HLRZ C* STLFLG(B)> + <MOVEI B* 0> + <TRNE C* STFSRV> + <MOVNI B* 1> + <MOVSI A* <TYPE-CODE FIX>> + <JRST HSTOUT> + +; "RETURN VECTOR CONTAINING ALL NAMES FOR HOST" +<SUB-ENTRY HOSTNAMES ("VALUE" <OR FALSE <VECTOR [REST STRING]>> <OR FIX STRING>)> + <DPUSH TP* (AB)> + <PUSHJ P* IHOSTN> + <JRST FINIS> + +<INTERNAL-ENTRY IHOSTN 1> + <SUBM M* (P)> + <PUSHJ P* NUMTBS> + <JRST OTFALS> + <SUBI B* (A)> ; "TURN BACK INTO FILE ADDRESS" + <PUSH P* A> + <PUSH P* B> + <MOVE C* NAMPTR(A)> ; "FILE ADDRESS OF NAME TABLE" + <ADDI C* 2(A)> ; "SKIP HEADER OF NAME TABLE" + <MOVN D* -2(C)> ; "- NUMBER OF ENTRIES" + <IMUL D* -1(C)> ; "MULTIPLY BY WORDS/ENTRY" + <MOVE E* -1(C)> + <HRLS E> ; "WORDS/ENTRY,,WORDS/ENTRY" + <PUSH P* E> + <HRL C* D> ; "AOBJN POINTER TO TABLE" + <PUSH P* [0]> ; "COUNTER" +HSNLOP <HLRZ E* NMLSIT(C)> + <CAME E* -2(P)> ; "SAME AS SAVED SITE TABLE?" + <JRST ENDLOP> + <HRRZ B* NMRNAM(C)> ; "GET THE NAME POINTER" + <ADD B* -3(P)> ; "IN CORE" + <PUSHJ P* STRGET> + <DPUSH TP* A> + <AOS (P)> +ENDLOP <ADD C* -1(P)> + <JUMPL C* HSNLOP> + <POP P* A> + <SUB P* [<(3) 3>]> + <PUSHJ P* CIVEC> ; "RETURN A VECTOR" + <JRST HSTOUT> ; "FLUSH" + +<SUB-ENTRY GATEWAYS ("VALUE" <OR FALSE <VECTOR [REST STRING]>> FIX)> + <DPUSH TP* (AB)> + <PUSHJ P* IGATE> + <JRST FINIS> + +<INTERNAL-ENTRY IGATE 1> + <SUBM M* (P)> + <LDB A* [<NWNET (TP)>]> + <MOVE B* <MQUOTE <RGLOC GATEWAY-LIST T>>> + <ADD B* GLOTOP 1> + <MOVE B* 1(B)> +GATLOP <CAMN A* 1(B)> + <JRST GATOUT> + <ADD B* [<(4) 4>]> + <JUMPL B* GATLOP> + <JRST OTFALS> +GATOUT <MOVE A* 2(B)> + <MOVE B* 3(B)> + <SUB TP* [<(2) 2>]> + <JRST MPOPJ> + +; " +ROUTINE TO SEARCH NAMES TABLE OR ADDRESS TABLE FOR HOST (STRING OR FIX). +SKIPS IF SUCCESS. ON SUCCESS, RETURNS POINTER TO HOST TABLE IN A, CORE +ADDRESS OF SITE TABLE ENTRY FOR SPECIFIED HOST IN B. ARG IS TOP OF TP +STACK, NOT POPPED." + +NUMTBS <SUBM M* (P)> +ERRTRY <PUSHJ P* IDOHL0> ; "MAKE SURE HOST TABLE LOADED" + <GETYP O* A> + <CAIE O* <TYPE-CODE FIX>> + <JRST [<DPUSH TP* <PQUOTE CANT-LOAD-HOST-TABLE>> + <DPUSH TP* A> + <DPUSH TP* <PQUOTE NUMTBS>> + <MCALL 3 ERROR> + <JRST ERRTRY>]> + <IFOPSYS (TOPS20 <IMULI B* *1000*>) + (ITS <IMULI B* *2000*>)> ; "CORE ADDRESS OF HOST TABLE" + <PUSH P* B> + <GETYP O* -1(TP)> + <CAIE O* <TYPE-CODE FIX>> ; "ARG A FIX?" + <JRST STRSRC> ; "NO, SO STRING-->FIX" + <MOVE A* (TP)> ; "HOST ADDRESS" + <PUSHJ P* OTONEW> ; "CONVERT TO NEW FORMAT, IF NOT ALREADY" + <MOVEM A* (TP)> ; "SAVE" +; "FIRST, GET RIGHT ADDRESS TABLE BY SEARCHING NETWORK TABLE" + <MOVE C* NETPTR(B)> ; "NETWORK TABLE ADDRESS" + <ADDI C* (B)> ; "CORE ADDRESS" + <MOVN D* (C)> ; "NUMBER OF ENTRIES" + <IMUL D* 1(C)> ; "LENGTH OF TABLE" + <HRL C* D> + <MOVE D* 1(C)> + <HRLS D> ; "LEN,,LEN" + <ADDI C* 2> ; "BEGINNING OF TABLE" + <LDB E* [<NWNET (TP)>]> ; "GET NET NUMBER" +NETLOP <CAMN E* NETNUM (C)> ; "COMPARE" + <JRST NETWON> ; "FOUND IT" + <ADD C* D> + <JUMPL C* NETLOP> + <JRST NUMLOS> ; "NO SUCH NET" +NETWON <HRRZ B* NTRTAB(C)> ; "FILE ADDRESS OF ADDRESS TABLE" + <ADD B* (P)> ; "CORE ADDRESS" + <PUSH P* B> + <PUSH P* [<PUSHJ P* HADCMP>]> ; "HOST ADDRESS COMPARISON" + <MOVE F* -2(P)> ; "BASE ADDRESS" + <PUSHJ P* BINSRC> + <JRST NUMLOS> + <HLRZ B* ADLSIT (B)> ; "SITE TABLE ENTRY" + <ADD B* (P)> ; "CORE ADDRESS" +NUMWIN <SOS -1(P)> +NUMLOS <POP P* A> + <JRST MPOPJ> +; "STRING-->FIX HACK" +STRSRC <MOVE C* NAMPTR(B)> + <ADDI C* (B)> + <PUSH P* C> + <PUSH P* [<PUSHJ P* STRCMP>]> + <MOVE F* -2(P)> ; "BASE ADDRESS" + <PUSHJ P* BINSRC> + <JRST NUMLOS> + <HLRZ B* NMLSIT(B)> + <ADD B* (P)> + <JRST NUMWIN> + +; "CONVERT OLD-STYLE ARPA ADDRESS TO NEW FORMAT, IF THING IN A IS OLD-STYLE. + RETURN HOST ADDRESS IN A." +OTONEW <PUSH P* B> + <LDB B* [<NWNET A>]> ; "NETWORK # TO B" + <JUMPN B* OTONEO> ; "MUST BE NEW FORMAT ALREADY, SO FLUSH" + <CAIL A* *400*> + <JRST NETSTF> ; "NEW-STYLE WITH 0 NET, SO PUT THAT IN" + <PUSH P* C> + <LDB C* [<OARIMP A>]> ; "GET THE IMP NUMBER" + <DPB C* [<ARIMP B>]> + <LDB C* [<OARHST A>]> + <DPB C* [<ARHST B>]> + <POP P* C> + <MOVE A* B> +NETSTF <MOVEI B* ARPA-NET> ; "NOW PUT IN THE NETWORK NUMBER" + <DPB B* [<NWNET A>]> +OTONEO <POP P* B> + <POPJ P*> + +; "COMPARISON ROUTINES FOR BINARY SEARCH. ALL TAKE POINTER TO APPROPRIATE TABLE + ENTRY IN B. MAY CLOBBER AC 0. SKIP 0, 1, OR 2 TIMES, DEPENDING ON HOW THE + COMPARISON COMES OUT. EXPECT TARGET TO BE (TP)." + +; "COMPARISON FOR ADDRESS TABLE. ADDRESS IS TOP OF STACK." +HADCMP <MOVE O* ADDADR(B)> ; "PICK UP NET # FROM TABLE" +NUMCMP <CAMLE O* (TP)> + <POPJ P*> ; "NO SKIP IF TABLE OFFSET IS TOO HIGH" + <AOS (P)> ; "AT LEAST ONE SKIP OTHERWISE" + <CAML O* (TP)> + <AOS (P)> + <POPJ P*> + +; "COMPARISON FOR NAME TABLE. SORTED BY TREATING NAMES AS VECTORS OF SIGNED + INTEGERS (IN CONTRAST TO TREATING THEM AS ASCII STRINGS, WHICH WOULD MAKE + THIS MUCH SIMPLER)(BUT SLOWER IN GENERAL)." +STRCMP <SUBM M* (P)> + <INTGO> + <PUSH P* A> + <PUSH P* B> + <PUSH P* C> + <PUSH P* D> + <PUSH P* E> + <HRRZ B* NMRNAM(B)> ; "POINTER TO NAME" + <ADDI B* (F)> ; "CORE ADDRESS OF TABLE" + <MOVE A* (TP)> + <HRRZ C* -1(TP)> ; "GET LENGTH OF OUR STRING" +STRCLP <PUSHJ P* GETWRD> ; "GET A WORD OF ASCII FROM OUR STRING, IN D" + <MOVE E* (B)> + <LSH E* -1> + <CAMGE D* E> ; "COMPARE WITH NEXT WORD OF FILE STRING" + <JRST STROUT> ; "FLUSH, NO SKIPS" + <CAME D* E> + <JRST STROU1> ; "FLUSH, ONE SKIP" + <JUMPLE C* CHFDON> ; "OUR STRING IS DONE, SO CHECK FILE" + <LDB D* [<(*010702*) 0>]> ; "EXAMINE LAST BYTE OF THIS WORD OF FILE STRING" + <JUMPE D* FILSHR> ; "FILE STRING IS SHORTER" + <SKIPE 1(B)> ; "IS NEXT WORD OF STRING ALL ZERO?" + <JRST STRCON> ; "NO" +; "HERE IF FILE STRING IS SHORTER THAN USER STRING" +FILSHR <JRST STROU1> ; "NULL SORTS AHEAD OF EVERYTHING" + +; "USER STRING EXHAUSTED. CHECK FILE STRING" +CHFDON <LDB D* [<(*010702*) 0>]> + <JUMPE D* STROU2> ; "SO'S THE FILE STRING, SO WIN" + <SKIPN D* 1(B)> + <JRST STROU2> ; "NEXT WORD ALL 0, SO EXHAUSTED ANYWAY" + <JRST STROUT> ; "DECREASE TABLE OFFSET" + +; "NEITHER STRING EXHAUSTED, STILL EQUAL." +STRCON <AOJA B* STRCLP> ; "POINT TO NEXT FILE WORD, CONTINUE" + +STROU2 <SOS -5(P)> +STROU1 <SOS -5(P)> +STROUT <POP P* E> + <POP P* D> + <POP P* C> + <POP P* B> + <POP P* A> + <JRST MPOPJ> + +; "GET A WORD OF ASCII FROM A MUDDLE STRING. POINTER IS IN A, LENGTH IN C, + RESULT GOES IN D. O IS SCRATCH." +GETWRD <PUSH P* E> + <TLNN A* *760000*> ; "DON'T SKIP IF ALREADY WORD-ALIGNED" + <JRST [<MOVE D* 1(A)> ; "GET THE WORD" + <ADDI A* 1> + <SUBI C* 5> ; "UPDATE LENGTH" + <JUMPGE C* UPPERC> + <MOVEI O* [<(*776000*) 0> + <(*777770*) 0> + <(*777777*) *740000*> + <(*777777*) *777600*>] 4> + <ADD O* C> + <AND D* @ O> + <JRST UPPERC>]> + <MOVE E* [<(*440700*) D>]> ; "POINTER TO D" + <MOVEI D* 0> +GETLOP <ILDB O* A> ; "GET A CHAR" + <IDPB O* E> + <SUBI C* 1> + <TLNE E* *760000*> ; "SKIP IF D IS FULL" + <JUMPG C* GETLOP> ; "JUMP IF D NOT FULL & CHARS LEFT IN STRING" +UPPERC <MOVE E* [<(*402010*) *40200*>]> + <AND E* D> ; "MASK FOR CHARS > 100" + <LSH E* -1> ; "MASK 40 BITS IN SUCH CHARS" + <TDZ D* E> ; "AND TURN THEM OFF" + <LSH D* -1> ; "LSH RIGHT, TO CLEAR SIGN BIT" + <POP P* E> + <POPJ P*> + + +; "DO BINARY SEARCH. TAKES TWO ARGUMENTS, ON P: FIRST IS CORE ADDRESS OF TABLE + TO SEARCH, SECOND IS INSTRUCTION TO EXECUTE FOR COMPARISONS. ALL TABLES ARE + ASSUMED TO HAVE TWO-WORD HEADER: # ENTRIES, WORDS/ENTRY. RETURNS IN B A POINTER + TO THE WINNING ENTRY, IF IT SKIPS. + CALLED WITH BASE ADDRESS IN F, FOR NO GOOD REASON + CLOBBERS EVERY CONCEIVABLE AC. + THE THING BEING SEARCHED FOR IS ASSUMED BY THE COMPARISON ROUTINES TO BE (TP), + THOUGH OBVIOUSLY IT COULD BE ELSEWHERE; BINSRC DOESN'T DO ANYTHING TO TP, SO THIS + WILL WORK. COMPARISON ROUTINES SHOULD SKIP TWICE IF A MATCH, ONCE IF >, NOT AT ALL + IF <. THEY ARE CALLED WITH A POINTER TO THE APPROPRIATE TABLE ENTRY IN B, AND SHOULD + CLOBBER NO AC'S OTHER THAN 0." + +BINSRC <SUBM M* (P)> + <INTGO> + <MOVE B* -2(P)> ; "CORE ADDRESS OF TABLE" + <MOVE A* (B)> ; "NUMBER OF ENTRIES" + <PUSH P* A> + <PUSH P* A> + <PUSH P* 1(B)> ; "WORDS/ENTRY" + <IMUL A* (P)> ; "LENGTH OF TABLE" + <PUSH P* A> + <ADDI B* 2> ; "POINT TO FIRST ENTRY" + <ADDM B* (P)> ; "FIRST WORD PAST TABLE" + <PUSH P* B> +BINLOP <MOVE A* -4(P)> + <JUMPE A* BINOUT> ; "TERMINATE" + <SKIPN -3(P)> ; "DIDN'T CHANGE?" + <JRST BINOUT> ; "FLUSH" + <ASH A* -1> ; "DIVIDE LENGTH BY TWO" + <MOVEM A* -3(P)> ; "SAVE" + <IMUL A* -2(P)> ; "OFFSET" + <ADDI B* (A)> + <CAML B* -1(P)> + <JRST BINDWN> + <XCT -6(P)> ; "COMPARISON INSTRUCTION" + <JRST BINDWN> ; "REDUCE OFFSET" + <JRST BINUP> ; "INCREASE OFFSET" + <SOS -5(P)> ; "WON" +BINOUT <MOVE A* -5(P)> ; "RETURN ADDRESS" + <SUB P* [<(8) 8>]> + <SUBM M* A> + <JRST (A)> ; "RETURN" + +; "REDUCE TABLE OFFSET" +BINDWN <MOVE B* (P)> ; "JUST RESTORE TABLE BEGINNING" + <MOVE A* -3(P)> + <MOVEM A* -4(P)> ; "NEW LENGTH" + <JRST BINLOP> + +; "INCREASE TABLE OFFSET" +BINUP <MOVE A* -4(P)> + <SUB A* -3(P)> + <MOVEM A* -4(P)> + <MOVEM B* (P)> ; "NEW TABLE BEGINNING" + <JRST BINLOP> +<END> +<ENDPACKAGE> \ No newline at end of file diff --git a/src/mprog/hosts.utaa78 b/src/mprog/hosts.utaa78 new file mode 100644 index 00000000..d850746f --- /dev/null +++ b/src/mprog/hosts.utaa78 @@ -0,0 +1,653 @@ +<PACKAGE "HOSTS"> + +<ENTRY DO-HOST-LOAD DO-HOST-FLUSH HOST SERVER MACHINE-NAME SYSTEM-NAME + HOSTNAMES GATEWAYS ARPA-NET CHAOS-NET> + +<OR <GASSIGNED? HOST-PAGE> <SETG HOST-PAGE <>>> +<OR <GASSIGNED? HOST-LEN> <SETG HOST-LEN 0>> +<SETG ARPA-NET *12*> +<SETG CHAOS-NET 7> +<MANIFEST ARPA-NET CHAOS-NET> +<SETG NET-SEARCH-LIST ![,ARPA-NET ;"ARPA" + ,CHAOS-NET ;"CHAOS"]> +<SETG GATEWAY-LIST [,CHAOS-NET + ["MIT-MC" "MIT-AI"]]> +%%<SETG NWNET <BITS 8 27> ; "NETWORK NUMBER"> +%%<SETG ARIMP <BITS 16 9> ; "IMP NUMBER IN ARPANET ADDRESS"> +%%<SETG ARHST <BITS 8 0> ; "HOST NUMBER IN ARPANET ADDRESS"> +%%<SETG ARPA-NET *12*> +%%<SETG OARIMP <BITS 6 0> ; "OLD-FORMAT ARPA IMP NUMBER"> +%%<SETG OARHST <BITS 2 6> ; "OLD-FORMAT ARPA HOST NUMBER"> + +; "RANDOM OFFSETS" + +; "TABLE LOCATIONS" +%%<SETG NAMPTR *10*> +%%<SETG SITPTR *11*> +%%<SETG NETPTR *12*> + +; "NETWORK TABLE" +%%<SETG NETNUM 0> ; "NETWORK NUMBER" +%%<SETG NTRTAB 1> ; "RH-ADDRESS OF ADDRESS TABLE" + +; "ADDRESS TABLES" +%%<SETG ADDADR 0> ; "ADDRESS" +%%<SETG ADLSIT 1> ; "LH-SITE TABLE ENTRY" +%%<SETG ADRCDR 1> ; "RH-NEXT ON CHAIN" + +; "SITE TABLE" +%%<SETG STLNAM 0> ; "LH-OFFICIAL NAME POINTER" +%%<SETG STRADR 0> ; "RH-ADDRESS CHAIN" +%%<SETG STLSYS 1> ; "LH-SYSTEM NAME" +%%<SETG STRMCH 1> ; "RH-MACHINE NAME" +%%<SETG STLFLG 2> ; "LH-FLAGS" +%%<SETG STFSRV *400000*>; "SERVER BIT" + +; "NAMES TABLE" +%%<SETG NMLSIT 0> ; "LH-SITE TABLE" +%%<SETG NMRNAM 0> ; "RH-NAME" + +<TITLE DO-HOST-LOAD> + <DECLARE ("VALUE" <OR FIX FALSE> "OPTIONAL" <OR ATOM FALSE>)> + <JUMPL AB* DO-ONE> + <PUSHJ P* IDOHL0> + <JRST FINIS> +DO-ONE <DPUSH TP* (AB)> + <PUSHJ P* IDOHL1> + <JRST FINIS> + +<INTERNAL-ENTRY IDOHL0 0> + <PUSH TP* <TYPE-WORD FALSE>> + <PUSH TP* [0]> +<INTERNAL-ENTRY IDOHL1 1> + <SUBM M* (P)> + <MOVE B* <MQUOTE <RGLOC HOST-PAGE>>> + <ADD B* GLOTOP 1> + <GETYP O* (B)> + <CAIN O* <TYPE-CODE FALSE>> + <JRST DOOPEN> + <SKIPL (TP)> ; "RELOAD ANYWAY?" + <JRST [ +<IFOPSYS (ITS <HRLZ A* 1(B)> + <ADD A* [<(*200*) C>]> + <*SUSET A> ; ".RPMAP OF FIRST PAGE" + <JUMPE C* DOOPEN> ; "PAGE DOESN'T EXIST, SO RELOAD" + <MOVE B* 1(B)>) + (TOPS20 <MOVE C* B> ; "SAVE LOCATIVE" + <HRRZ A* 1(B)> + <HRLI A* *400000*> + <RMAP> + <JUMPE B* DOOPEN> + <MOVE B* 1(C)>)> + <MOVSI A* <TYPE-CODE FIX>> + <JRST HLOUT>]> +DOOPEN <DPUSH TP* <PQUOTE "READ">> +<IFOPSYS +(TOPS20 <DPUSH TP* <PQUOTE "<SYSTEM>HOSTS2.BIN">>) +(ITS <DPUSH TP* <PQUOTE "SYSBIN;HOSTS2 >">>)> + <MCALL 2 OPEN> ; "TRY TO OPEN IT" + <JUMPGE B* HLOUT> ; "FAIL" + <DPUSH TP* A> ; "SAVE THE CHANNEL" + +<IFOPSYS +(TOPS20 <PUSH P* 1(B)> ; "SAVE CHANNEL" + <MOVE A* 1(B)> + <SIZEF> + <HALTF> + <MOVE A* C> ; "NUMBER OF 512 WD PAGES" + <ADDI A* 1> + <LSH A* -1> + <POP P* C>) +(ITS <MOVE C* 1(B)> ; "PICK UP THE CHANNEL NUMBER" + <*CALL [<SETZ> + <SIXBIT "FILLEN"> + <MOVE C> + <SETZM A>]> ; "GET THE FILE LENGTH" + <*LOSE *1400*> + <IDIVI A* *2000*> + <JUMPE B* NOREM> + <ADDI A* 1>)> +; "NUMBER OF PAGES NEEDED IS IN A" +NOREM <MOVE B* <MQUOTE <RGLOC HOST-PAGE>>> + <ADD B* GLOTOP 1> + <GETYP O* (B)> + <CAIE O* <TYPE-CODE FALSE>> + <JRST [<MOVE D* <MQUOTE <RGLOC HOST-LEN>>> + <ADD D* GLOTOP 1> + <CAMG A* 1(D)> ; "HAS THE FILE GROWN ENOUGH TO NEED A NEW PAGE?" + <JRST DO-MAP> ; "NO" + <PUSH P* A> + <PUSH P* C> + <PUSHJ P* IFLUSH> ; "FLUSH THE OLD TABLE, THEN" + <POP P* C> + <POP P* A> + <JRST FOO>]> ; "AND START FROM SCRATCH" +; "GET PAGES FOR HOST TABLE. NUMBER NEEDED IS IN A; CHANNEL # IS IN C" +FOO <PUSH P* C> + <PUSH P* A> + <PUSHJ P* PGFIND> + <JUMPLE B* [<ERRUUO* <MQUOTE CANT-GET-PAGES>>]> + <POP P* A> + <POP P* C> + <MOVE D* <MQUOTE <RGLOC HOST-LEN>>> + <ADD D* GLOTOP 1> + <MOVEM A* 1(D)> + <MOVSI O* <TYPE-CODE FIX>> + <MOVEM O* (D)> ; "SETG HOST-LEN" + <MOVE D* <MQUOTE <RGLOC HOST-PAGE>>> + <ADD D* GLOTOP 1> + <IFOPSYS (TOPS20 <LSH B* 1>)> ; "SO SAVE 20X PAGE #" + <MOVEM B* 1(D)> + <MOVEM O* (D)> ; "SETG HOST-PAGE" + <JRST DO-MAP1> +; "# PAGES TO MAP IN A, CHANNEL IN C, CORE PAGE IN B (AT DO-MAP1) + OR LOCATIVE IN B (AT DO-MAP)" +DO-MAP <MOVE B* 1(B)> ; "GET HOST-PAGE INTO B (ASSUMES LOCD IN B)" +DO-MAP1 <PUSH P* B> +<IFOPSYS +(ITS <MOVNS A> + <HRL B* A> + <*CALL [<SETZ> + <SIXBIT "CORBLK"> + <MOVEI *10000*> ; "%CBNDR" + <MOVEI -1> ; "%JSELF" + <MOVE B> + <SETZ C>]> + <*LOSE *1000*>) +(TOPS20 <EXCH A* C> + <HRLZS A> + <HRLI B* *400000*> + <LSH C* 1> ;"ITTY BITTY TWENEX PAGES" + <HRLI C* *600000*> ;"PM%CNT+PM%RD" + <PMAP>)> + <MCALL 1 CLOSE> ; "WE PUSHED THE CHANNEL A WHILE BACK, REMEMBER?" + <POP P* B> + <MOVSI A* <TYPE-CODE FIX>> +HLOUT <SUB TP* [<(2) 2>]> + <JRST MPOPJ> + +<SUB-ENTRY DO-HOST-FLUSH ("VALUE" ATOM)> + <PUSHJ P* IFLUSH> + <JRST FINIS> + +<INTERNAL-ENTRY IFLUSH 0> + <SUBM M* (P)> + <MOVE C* <MQUOTE <RGLOC HOST-PAGE>>> + <ADD C* GLOTOP 1> + <GETYP O* (C)> + <CAIN O* <TYPE-CODE FALSE>> + <JRST FLUSHO> + <MOVE B* 1(C)> ; "PAGE NUMBER" + <MOVSI O* <TYPE-CODE FALSE>> + <MOVEM O* (C)> + <SETZM 1(C)> ; "MAKE IT BE FALSE" + <MOVE C* <MQUOTE <RGLOC HOST-LEN>>> + <ADD C* GLOTOP 1> + <MOVE A* 1(C)> ; "NUMBER OF PAGES" + <SETZM 1(C)> ; "ZERO IT" +<IFOPSYS +(ITS <MOVNI C* (A)> + <HRLS C> + <HRR C* B> ; "AOBJN POINTER" + <*CALL [<SETZ> + <SIXBIT "CORBLK"> + <MOVEI 0> + <MOVEI -1> + <SETZ C>]> ; "FLUSH THE PAGES" + <JFCL>) +(TOPS20 <MOVE C* A> + <LSH C* 1> ;"ITTY BITTY TWENEX PAGES" + <HRLI C* *400000*> ;"PM%CNT" + <MOVNI A* 1> + <HRLI B* *400000*>)> + <PUSHJ P* PGGIVE> ; "GIVE BACK TO INTERPRETER" +FLUSHO <MOVSI A* <TYPE-CODE ATOM>> + <MOVE B* <MQUOTE T>> + <JRST MPOPJ> + + +; "TAKE HOST NUMBER OR NAME, RETURN NAME IF GIVEN NUMBER, NUMBER IF GIVEN + NAME, FALSE IF NOT FOUND." +<SUB-ENTRY HOST ("VALUE" <OR FALSE STRING FIX> <OR FIX STRING> + "OPTIONAL" <OR FIX FALSE>)> + <MOVE A* AB> +HPLOOP <PUSH TP* (AB)> + <AOBJN AB* HPLOOP> + <HLRES A> + <ASH A* -1> + <ADDI A* HPTABE> + <PUSHJ P* @ (A) 1> + <JRST FINIS> + <IHOST2> +HPTABE <IHOST1> + +<INTERNAL-ENTRY IHOST1 1> + <PUSH TP* <TYPE-WORD FALSE>> + <PUSH TP* [0]> +<INTERNAL-ENTRY IHOST2 2> + <SUBM M* (P)> + <PUSH TP* -3(TP)> + <PUSH TP* -3(TP)> + <PUSHJ P* NUMTBS> ; "SEARCH RIGHT TABLE. RETURNS SITE TABLE ENTRY" + ; "INSTEAD OF TYPE IN A, RETURNS TABLE ADDRESS" + <JRST OTFALS> ; "FAILED, RETURN FALSE" + <GETYP O* -1(TP)> + <CAIE O* <TYPE-CODE FIX>> + <JRST NUMHAK> ; "RETURN A NET ADDRESS" + <HLRZ B* STLNAM(B)> ; "GET FILE ADDRESS OF OFFICIAL NAME" + <ADDI B* (A)> ; "CORE ADDRESS" + <PUSHJ P* STRGET> ; "RETURN STRING POINTER IN A AND B" +HSTOUT <SUB TP* [<(6) 6>]> + <JRST MPOPJ> +; "RETURN A FALSE" +OTFALS <MOVSI A* <TYPE-CODE FALSE>> + <MOVEI B* 0> + <JRST HSTOUT> + +; "POINTER TO SITE IN A & B, RETURN PREFERRED ADDRESS OR FALSE, +ALSO IN A AND B" +NUMHAK <PUSH P* B> + <PUSH P* C> + <PUSH P* E> + <PUSH P* F> + <GETYP O* -3(TP)> + <CAIE O* <TYPE-CODE FIX>> + <JRST ANYNET> + <SKIPN E* -2(TP)> + <JRST ANYNET> + <MOVEI F* 0> + <JRST NUMSL1> +ANYNET <MOVE B* <MQUOTE <RGLOC NET-SEARCH-LIST T>>> + <ADD B* GLOTOP 1> + <MOVE F* 1(B)> +NUMSL <MOVE E* (F)> +NUMSL1 <MOVE B* -3(P)> + <HRRZ B* STRADR(B)> ;"ADDRESS OF FIRST ADDRESS TABLE ENTRY" + <JUMPE B* NUMFAL> + <PUSHJ P* NUMLOP> + <JRST NUMNXT> +; <LDB C* [<NWNET B>]> +; <CAIE C* ARPA-NET> +; <JRST NUMNOZ> +; <MOVEI C* 0> +; <DPB C* [<NWNET B>]> ; "FOR NOW, ZERO THE NETWORK NUMBER" +NUMNOZ <POP P* F> + <POP P* E> + <POP P* C> + <SUB P* [<(1) 1>]> + <JRST HSTOUT> ; "RETURN" +NUMNXT <AOBJN F* NUMSL> +NUMFAL <POP P* F> + <POP P* E> + <POP P* C> + <POP P* B> + <JRST OTFALS> + +; "SITE IN A, ADDRESS TABLE POINTER IN B, NET IN E. RETURNS # IN B, SKIPS +IF WON" +NUMLOP <ADDI B* (A)> + <MOVE C* ADDADR(B)> + <LDB D* [<NWNET C>]> ; "GET NETWORK #" + <CAMN D* E> ; "RIGHT NETWORK?" + <JRST NUMFND> + <HRRZ B* ADRCDR(B)> + <JUMPN B* NUMLOP> ; "NEXT" + <POPJ P*> ; "FAILED" +NUMFND <MOVSI A* <TYPE-CODE FIX>> + <MOVE B* C> + <AOS (P)> + <POPJ P*> + +; "TAKE CORE ADDRESS IN B, RETURN STRING POINTER IN A AND B" +STRGET <PUSH P* C> + <SUBI B* 1> + <HRLI B* *010700*> ; "BYTE POINTER" + <PUSH P* B> ; "SAVE IT" + <MOVEI A* 0> +STRLOP <ILDB C* B> + <JUMPE C* STRGOT> + <AOJA A* STRLOP> +STRGOT <HLL A* <TYPE-WORD STRING>> + <POP P* B> + <POP P* C> + <POPJ P*> + +; "RETURN NAME OF MACHINE (PDP10, ETC.)" +<SUB-ENTRY MACHINE-NAME ("VALUE" <OR FALSE STRING FIX> <OR FIX STRING>)> + <DPUSH TP* (AB)> + <PUSHJ P* IMACH> + <JRST FINIS> + +<INTERNAL-ENTRY IMACH 1> + <SUBM M* (P)> + <PUSHJ P* NUMTBS> + <JRST OTFALS> ; "NO SUCH MACHINE" + <HRRZ B* STRMCH(B)> ; "GET POINTER TO MACHINE NAME" + <JUMPE B* RETZERO> ; "UNKNOWN" + <ADDI B* (A)> ; "ADDRESS OF NAME" + <PUSHJ P* STRGET> ; "MAKE A STRING POINTER" + <JRST HSTOUT> +RETZERO <MOVSI A* <TYPE-CODE FIX>> + <MOVEI B* 0> + <JRST HSTOUT> + +<SUB-ENTRY SYSTEM-NAME ("VALUE" <OR FALSE STRING FIX> <OR FIX STRING>)> + <DPUSH TP* (AB)> + <PUSHJ P* ISYS> + <JRST FINIS> + +<INTERNAL-ENTRY ISYS 1> + <SUBM M* (P)> + <PUSHJ P* NUMTBS> + <JRST OTFALS> + <HLRZ B* STLSYS(B)> + <JUMPE B* RETZERO> + <ADDI B* (A)> + <PUSHJ P* STRGET> + <JRST HSTOUT> + +<SUB-ENTRY SERVER ("VALUE" <OR FALSE FIX> <OR FIX STRING>)> + <DPUSH TP* (AB)> + <PUSHJ P* ISERVER> + <JRST FINIS> + +<INTERNAL-ENTRY ISERVER 1> + <SUBM M* (P)> + <PUSHJ P* NUMTBS> + <JRST OTFALS> + <HLRZ C* STLFLG(B)> + <MOVEI B* 0> + <TRNE C* STFSRV> + <MOVNI B* 1> + <MOVSI A* <TYPE-CODE FIX>> + <JRST HSTOUT> + +; "RETURN VECTOR CONTAINING ALL NAMES FOR HOST" +<SUB-ENTRY HOSTNAMES ("VALUE" <OR FALSE <VECTOR [REST STRING]>> <OR FIX STRING>)> + <DPUSH TP* (AB)> + <PUSHJ P* IHOSTN> + <JRST FINIS> + +<INTERNAL-ENTRY IHOSTN 1> + <SUBM M* (P)> + <PUSHJ P* NUMTBS> + <JRST OTFALS> + <SUBI B* (A)> ; "TURN BACK INTO FILE ADDRESS" + <PUSH P* A> + <PUSH P* B> + <MOVE C* NAMPTR(A)> ; "FILE ADDRESS OF NAME TABLE" + <ADDI C* 2(A)> ; "SKIP HEADER OF NAME TABLE" + <MOVN D* -2(C)> ; "- NUMBER OF ENTRIES" + <IMUL D* -1(C)> ; "MULTIPLY BY WORDS/ENTRY" + <MOVE E* -1(C)> + <HRLS E> ; "WORDS/ENTRY,,WORDS/ENTRY" + <PUSH P* E> + <HRL C* D> ; "AOBJN POINTER TO TABLE" + <PUSH P* [0]> ; "COUNTER" +HSNLOP <HLRZ E* NMLSIT(C)> + <CAME E* -2(P)> ; "SAME AS SAVED SITE TABLE?" + <JRST ENDLOP> + <HRRZ B* NMRNAM(C)> ; "GET THE NAME POINTER" + <ADD B* -3(P)> ; "IN CORE" + <PUSHJ P* STRGET> + <DPUSH TP* A> + <AOS (P)> +ENDLOP <ADD C* -1(P)> + <JUMPL C* HSNLOP> + <POP P* A> + <SUB P* [<(3) 3>]> + <PUSHJ P* CIVEC> ; "RETURN A VECTOR" + <JRST HSTOUT> ; "FLUSH" + +<SUB-ENTRY GATEWAYS ("VALUE" <OR FALSE <VECTOR [REST STRING]>> FIX)> + <DPUSH TP* (AB)> + <PUSHJ P* IGATE> + <JRST FINIS> + +<INTERNAL-ENTRY IGATE 1> + <SUBM M* (P)> + <LDB A* [<NWNET (TP)>]> + <MOVE B* <MQUOTE <RGLOC GATEWAY-LIST T>>> + <ADD B* GLOTOP 1> + <MOVE B* 1(B)> +GATLOP <CAMN A* 1(B)> + <JRST GATOUT> + <ADD B* [<(4) 4>]> + <JUMPL B* GATLOP> + <JRST OTFALS> +GATOUT <MOVE A* 2(B)> + <MOVE B* 3(B)> + <SUB TP* [<(2) 2>]> + <JRST MPOPJ> + +; " +ROUTINE TO SEARCH NAMES TABLE OR ADDRESS TABLE FOR HOST (STRING OR FIX). +SKIPS IF SUCCESS. ON SUCCESS, RETURNS POINTER TO HOST TABLE IN A, CORE +ADDRESS OF SITE TABLE ENTRY FOR SPECIFIED HOST IN B. ARG IS TOP OF TP +STACK, NOT POPPED." + +NUMTBS <SUBM M* (P)> +ERRTRY <PUSHJ P* IDOHL0> ; "MAKE SURE HOST TABLE LOADED" + <GETYP O* A> + <CAIE O* <TYPE-CODE FIX>> + <JRST [<DPUSH TP* <PQUOTE CANT-LOAD-HOST-TABLE>> + <DPUSH TP* A> + <DPUSH TP* <PQUOTE NUMTBS>> + <MCALL 3 ERROR> + <JRST ERRTRY>]> + <IFOPSYS (TOPS20 <IMULI B* *1000*>) + (ITS <IMULI B* *2000*>)> ; "CORE ADDRESS OF HOST TABLE" + <PUSH P* B> + <GETYP O* -1(TP)> + <CAIE O* <TYPE-CODE FIX>> ; "ARG A FIX?" + <JRST STRSRC> ; "NO, SO STRING-->FIX" + <MOVE A* (TP)> ; "HOST ADDRESS" + <PUSHJ P* OTONEW> ; "CONVERT TO NEW FORMAT, IF NOT ALREADY" + <MOVEM A* (TP)> ; "SAVE" +; "FIRST, GET RIGHT ADDRESS TABLE BY SEARCHING NETWORK TABLE" + <MOVE C* NETPTR(B)> ; "NETWORK TABLE ADDRESS" + <ADDI C* (B)> ; "CORE ADDRESS" + <MOVN D* (C)> ; "NUMBER OF ENTRIES" + <IMUL D* 1(C)> ; "LENGTH OF TABLE" + <HRL C* D> + <MOVE D* 1(C)> + <HRLS D> ; "LEN,,LEN" + <ADDI C* 2> ; "BEGINNING OF TABLE" + <LDB E* [<NWNET (TP)>]> ; "GET NET NUMBER" +NETLOP <CAMN E* NETNUM (C)> ; "COMPARE" + <JRST NETWON> ; "FOUND IT" + <ADD C* D> + <JUMPL C* NETLOP> + <JRST NUMLOS> ; "NO SUCH NET" +NETWON <HRRZ B* NTRTAB(C)> ; "FILE ADDRESS OF ADDRESS TABLE" + <ADD B* (P)> ; "CORE ADDRESS" + <PUSH P* B> + <PUSH P* [<PUSHJ P* HADCMP>]> ; "HOST ADDRESS COMPARISON" + <MOVE F* -2(P)> ; "BASE ADDRESS" + <PUSHJ P* BINSRC> + <JRST NUMLOS> + <HLRZ B* ADLSIT (B)> ; "SITE TABLE ENTRY" + <ADD B* (P)> ; "CORE ADDRESS" +NUMWIN <SOS -1(P)> +NUMLOS <POP P* A> + <JRST MPOPJ> +; "STRING-->FIX HACK" +STRSRC <MOVE C* NAMPTR(B)> + <ADDI C* (B)> + <PUSH P* C> + <PUSH P* [<PUSHJ P* STRCMP>]> + <MOVE F* -2(P)> ; "BASE ADDRESS" + <PUSHJ P* BINSRC> + <JRST NUMLOS> + <HLRZ B* NMLSIT(B)> + <ADD B* (P)> + <JRST NUMWIN> + +; "CONVERT OLD-STYLE ARPA ADDRESS TO NEW FORMAT, IF THING IN A IS OLD-STYLE. + RETURN HOST ADDRESS IN A." +OTONEW <PUSH P* B> + <LDB B* [<NWNET A>]> ; "NETWORK # TO B" + <JUMPN B* OTONEO> ; "MUST BE NEW FORMAT ALREADY, SO FLUSH" + <CAIL A* *400*> + <JRST NETSTF> ; "NEW-STYLE WITH 0 NET, SO PUT THAT IN" + <PUSH P* C> + <LDB C* [<OARIMP A>]> ; "GET THE IMP NUMBER" + <DPB C* [<ARIMP B>]> + <LDB C* [<OARHST A>]> + <DPB C* [<ARHST B>]> + <POP P* C> + <MOVE A* B> +NETSTF <MOVEI B* ARPA-NET> ; "NOW PUT IN THE NETWORK NUMBER" + <DPB B* [<NWNET A>]> +OTONEO <POP P* B> + <POPJ P*> + +; "COMPARISON ROUTINES FOR BINARY SEARCH. ALL TAKE POINTER TO APPROPRIATE TABLE + ENTRY IN B. MAY CLOBBER AC 0. SKIP 0, 1, OR 2 TIMES, DEPENDING ON HOW THE + COMPARISON COMES OUT. EXPECT TARGET TO BE (TP)." + +; "COMPARISON FOR ADDRESS TABLE. ADDRESS IS TOP OF STACK." +HADCMP <MOVE O* ADDADR(B)> ; "PICK UP NET # FROM TABLE" +NUMCMP <CAMLE O* (TP)> + <POPJ P*> ; "NO SKIP IF TABLE OFFSET IS TOO HIGH" + <AOS (P)> ; "AT LEAST ONE SKIP OTHERWISE" + <CAML O* (TP)> + <AOS (P)> + <POPJ P*> + +; "COMPARISON FOR NAME TABLE. SORTED BY TREATING NAMES AS VECTORS OF SIGNED + INTEGERS (IN CONTRAST TO TREATING THEM AS ASCII STRINGS, WHICH WOULD MAKE + THIS MUCH SIMPLER)(BUT SLOWER IN GENERAL)." +STRCMP <SUBM M* (P)> + <INTGO> + <PUSH P* A> + <PUSH P* B> + <PUSH P* C> + <PUSH P* D> + <PUSH P* E> + <HRRZ B* NMRNAM(B)> ; "POINTER TO NAME" + <ADDI B* (F)> ; "CORE ADDRESS OF TABLE" + <MOVE A* (TP)> + <HRRZ C* -1(TP)> ; "GET LENGTH OF OUR STRING" +STRCLP <PUSHJ P* GETWRD> ; "GET A WORD OF ASCII FROM OUR STRING, IN D" + <MOVE E* (B)> + <LSH E* -1> + <CAMGE D* E> ; "COMPARE WITH NEXT WORD OF FILE STRING" + <JRST STROUT> ; "FLUSH, NO SKIPS" + <CAME D* E> + <JRST STROU1> ; "FLUSH, ONE SKIP" + <JUMPLE C* CHFDON> ; "OUR STRING IS DONE, SO CHECK FILE" + <LDB D* [<(*010702*) 0>]> ; "EXAMINE LAST BYTE OF THIS WORD OF FILE STRING" + <JUMPE D* FILSHR> ; "FILE STRING IS SHORTER" + <SKIPE 1(B)> ; "IS NEXT WORD OF STRING ALL ZERO?" + <JRST STRCON> ; "NO" +; "HERE IF FILE STRING IS SHORTER THAN USER STRING" +FILSHR <JRST STROU1> ; "NULL SORTS AHEAD OF EVERYTHING" + +; "USER STRING EXHAUSTED. CHECK FILE STRING" +CHFDON <LDB D* [<(*010702*) 0>]> + <JUMPE D* STROU2> ; "SO'S THE FILE STRING, SO WIN" + <SKIPN D* 1(B)> + <JRST STROU2> ; "NEXT WORD ALL 0, SO EXHAUSTED ANYWAY" + <JRST STROUT> ; "DECREASE TABLE OFFSET" + +; "NEITHER STRING EXHAUSTED, STILL EQUAL." +STRCON <AOJA B* STRCLP> ; "POINT TO NEXT FILE WORD, CONTINUE" + +STROU2 <SOS -5(P)> +STROU1 <SOS -5(P)> +STROUT <POP P* E> + <POP P* D> + <POP P* C> + <POP P* B> + <POP P* A> + <JRST MPOPJ> + +; "GET A WORD OF ASCII FROM A MUDDLE STRING. POINTER IS IN A, LENGTH IN C, + RESULT GOES IN D. O IS SCRATCH." +GETWRD <PUSH P* E> + <TLNN A* *760000*> ; "DON'T SKIP IF ALREADY WORD-ALIGNED" + <JRST [<MOVE D* 1(A)> ; "GET THE WORD" + <ADDI A* 1> + <SUBI C* 5> ; "UPDATE LENGTH" + <JUMPGE C* UPPERC> + <MOVEI O* [<(*776000*) 0> + <(*777770*) 0> + <(*777777*) *740000*> + <(*777777*) *777600*>] 4> + <ADD O* C> + <AND D* @ O> + <JRST UPPERC>]> + <MOVE E* [<(*440700*) D>]> ; "POINTER TO D" + <MOVEI D* 0> +GETLOP <ILDB O* A> ; "GET A CHAR" + <IDPB O* E> + <SUBI C* 1> + <TLNE E* *760000*> ; "SKIP IF D IS FULL" + <JUMPG C* GETLOP> ; "JUMP IF D NOT FULL & CHARS LEFT IN STRING" +UPPERC <MOVE E* [<(*402010*) *40200*>]> + <AND E* D> ; "MASK FOR CHARS > 100" + <LSH E* -1> ; "MASK 40 BITS IN SUCH CHARS" + <TDZ D* E> ; "AND TURN THEM OFF" + <LSH D* -1> ; "LSH RIGHT, TO CLEAR SIGN BIT" + <POP P* E> + <POPJ P*> + + +; "DO BINARY SEARCH. TAKES TWO ARGUMENTS, ON P: FIRST IS CORE ADDRESS OF TABLE + TO SEARCH, SECOND IS INSTRUCTION TO EXECUTE FOR COMPARISONS. ALL TABLES ARE + ASSUMED TO HAVE TWO-WORD HEADER: # ENTRIES, WORDS/ENTRY. RETURNS IN B A POINTER + TO THE WINNING ENTRY, IF IT SKIPS. + CALLED WITH BASE ADDRESS IN F, FOR NO GOOD REASON + CLOBBERS EVERY CONCEIVABLE AC. + THE THING BEING SEARCHED FOR IS ASSUMED BY THE COMPARISON ROUTINES TO BE (TP), + THOUGH OBVIOUSLY IT COULD BE ELSEWHERE; BINSRC DOESN'T DO ANYTHING TO TP, SO THIS + WILL WORK. COMPARISON ROUTINES SHOULD SKIP TWICE IF A MATCH, ONCE IF >, NOT AT ALL + IF <. THEY ARE CALLED WITH A POINTER TO THE APPROPRIATE TABLE ENTRY IN B, AND SHOULD + CLOBBER NO AC'S OTHER THAN 0." + +BINSRC <SUBM M* (P)> + <INTGO> + <MOVE B* -2(P)> ; "CORE ADDRESS OF TABLE" + <MOVE A* (B)> ; "NUMBER OF ENTRIES" + <PUSH P* A> + <PUSH P* A> + <PUSH P* 1(B)> ; "WORDS/ENTRY" + <IMUL A* (P)> ; "LENGTH OF TABLE" + <PUSH P* A> + <ADDI B* 2> ; "POINT TO FIRST ENTRY" + <ADDM B* (P)> ; "FIRST WORD PAST TABLE" + <PUSH P* B> +BINLOP <MOVE A* -4(P)> + <JUMPE A* BINOUT> ; "TERMINATE" + <SKIPN -3(P)> ; "DIDN'T CHANGE?" + <JRST BINOUT> ; "FLUSH" + <ASH A* -1> ; "DIVIDE LENGTH BY TWO" + <MOVEM A* -3(P)> ; "SAVE" + <IMUL A* -2(P)> ; "OFFSET" + <ADDI B* (A)> + <CAML B* -1(P)> + <JRST BINDWN> + <XCT -6(P)> ; "COMPARISON INSTRUCTION" + <JRST BINDWN> ; "REDUCE OFFSET" + <JRST BINUP> ; "INCREASE OFFSET" + <SOS -5(P)> ; "WON" +BINOUT <MOVE A* -5(P)> ; "RETURN ADDRESS" + <SUB P* [<(8) 8>]> + <SUBM M* A> + <JRST (A)> ; "RETURN" + +; "REDUCE TABLE OFFSET" +BINDWN <MOVE B* (P)> ; "JUST RESTORE TABLE BEGINNING" + <MOVE A* -3(P)> + <MOVEM A* -4(P)> ; "NEW LENGTH" + <JRST BINLOP> + +; "INCREASE TABLE OFFSET" +BINUP <MOVE A* -4(P)> + <SUB A* -3(P)> + <MOVEM A* -4(P)> + <MOVEM B* (P)> ; "NEW TABLE BEGINNING" + <JRST BINLOP> +<END> +<ENDPACKAGE> \ No newline at end of file diff --git a/src/mprog/imlac.ubkd09 b/src/mprog/imlac.ubkd09 new file mode 100644 index 00000000..196b9be9 --- /dev/null +++ b/src/mprog/imlac.ubkd09 @@ -0,0 +1,112 @@ +;"******************************************************************************** + RSUBR to send one character to the IMLAC in image-mode + ********************************************************************************" + +<TITLE IMLAC-OUT> + <DECLARE (CHARACTER)> + +<PSEUDO +<DEFINE OUTPUT (WHERE) <CHTYPE + ('<PUSH TP* $TFIX> + <FORM PUSH TP* .WHERE> + '<MOVE B* <MQUOTE OUTCHAN>> + '<PUSHJ P* IGVAL> + '<CAME A* $TCHANNEL> + '<JRST WRONGT> + '<PUSH TP* A> + '<PUSH TP* B> + '<MCALL 2 IMAGE>) SPLICE>>> + + <MOVE B* (AB) 1> ;"Get character from input" + <CAILE B* *37*> ;"Control character ?" + <JRST SNDTTY> ;"No, just go output it" + <CAIE B* *15*> ;"Allow cr" + <CAIN B* *12*> ;" and lf" + <JRST SNDTTY> + <CAIE B* *11*> ;"Allow tab" + <CAIN B* *10*> ;" and backspace" + <JRST SNDTTY> + <CAIN B* *33*> ;"Allow altmode" + <JRST SNDTTY> + +CTLSND <OUTPUT [!"]> ;"Precede a control character by control B" + <MOVE B* (AB) 1> ;"Regobble control character" +SNDTTY <OUTPUT B> ;"Send to SCREEN" + <JRST FINIS> + ;"******************************************************************************** + RSUBR to receive one character from the IMLAC + ********************************************************************************" + +<TITLE IMLAC-IN> + <DECLARE ("VALUE" CHARACTER)> + +<PSEUDO <DEFINE GET-CHAR () + '<*IOT B* B>>> + + <PUSHJ P* INPUT> ;"Go input" + <MOVSI A* TCHARACTER> + <JRST FINIS> + +INPUT <SKIPN <IQUOTE 0 XMIT? ;"XMIT flag for imlac"> 1> + ;"In process of XMITing ?" + <JRST XCL-ALT> ;"NO, don't gobble new char" + <GET-CHAR> + <CAIL B* *40*> ;"Control character ?" + <POPJ P*> ;"NO, so it can't be special, return" + <JUMPL B* [<MCALL 0 ERROR>]> + <CAIN B* !"> ;"Character a control B ?" + <JRST INPUT1> ;"YES, quote next char" + <CAIE B* *15*> ;"Either CR character," + <CAIN B* *34*> ;" or long-line kludge character" + <JRST ACKN> ;"Acknowledge its reception to Imlac" + <CAIE B* !"> ;"End of page xmit ?" + <POPJ P*> ;"NO, therefore char wasn't special, return" + <SETZM XMIT? 1> ;"Return to non-XMIT state" +XCL-ALT <MOVEI B* *400033*> ;"Equivalent to !$" + <POPJ P*> + +ACKN <PUSH P* B> ;"Save the character in question" + <PUSH TP* $TFIX> + <PUSH TP* [ 6 ]> ;"Cntrl F character" + <PUSH TP* $TATOM> + <PUSH TP* <MQUOTE OUTCHAN>> + <MCALL 1 GVAL> + <CAME A* $TCHANNEL> + <JRST [<PUSH TP* $TATOM> + <PUSH TP* <MQUOTE BAD-ECHO-CHANNEL!-ERRORS>> + <JRST CALER1>]> + <PUSH TP* A> + <PUSH TP* B> + <MCALL 2 IMAGE> ;"Signal imlac to continue" + <POP P* B> ;"Regobble character in question" + <CAIN B* *15*> ;"CR character ?" + <POPJ P*> ;"YES, return" + <JRST INPUT> ;"NO, ignore and try again" + +INPUT1 <GET-CHAR> + <POPJ P*> + + +<SUB-ENTRY IMLAC-COMMAND ("VALUE" <OR FALSE CHARACTER>)> + <SKIPE XMIT? 1> ;"No commands when in XMIT" + <JRST IC-FALSE> + <GET-CHAR> + <MOVSI A* TCHARACTER> + <CAIE B* *34*> ;"Start of XMIT ?" + <JRST FINIS> + <SETOM XMIT? 1> +IC-FALSE + <MOVSI A* TFALSE> + <SETZ B*> + <JRST FINIS> + +<SUB-ENTRY IMLAC-RESET> +IR-LOOP <SKIPN XMIT? 1> + <JRST IR-RETURN> + <PUSHJ P* INPUT> + <JRST IR-LOOP> + +IR-RETURN + <DMOVE A* <PQUOTE T>> + <JRST FINIS> + \ No newline at end of file diff --git a/src/mprog/jobass.usg013 b/src/mprog/jobass.usg013 new file mode 100644 index 00000000..558b0a8b --- /dev/null +++ b/src/mprog/jobass.usg013 @@ -0,0 +1,212 @@ +<PACKAGE "JOBASS"> +<ENTRY ATTY DTTY FILE-LOAD JOB-CREATE JOB-GET-NUM UCLOSE> +<EXTERNAL "ITS" "STR"> + +<TITLE ATTY> +<DECLARE ("VALUE" <OR CHANNEL <FALSE [REST]>> CHANNEL)> + + <MOVE C* 1(AB)> ; "CHAN" + <HRLZ C* 1(C)> + <LSH C* 5> + <IOR C* [<*ATTY>]> + <MOVE A* $TFALSE> + <MOVE B* <MQUOTE ()>> + <XCT C> + <JRST FINIS> + <MOVE A* 0(AB)> + <MOVE B* 1(AB)> + <JRST FINIS> + +<TITLE DTTY> +<DECLARE ("VALUE" <OR CHANNEL <FALSE [REST]>> CHANNEL)> + + <MOVE C* 1(AB)> ; "CHAN" + <HRLZ C* 1(C)> + <LSH C* 5> + <IOR C* [<*DTTY>]> + <MOVE A* $TFALSE> + <MOVE B* <MQUOTE ()>> + <XCT C> + <JRST FINIS> + <MOVE A* 0(AB)> + <MOVE B* 1(AB)> + <JRST FINIS> + +<TITLE FILE-LOAD> +<DECLARE ("VALUE" <OR WORD <FALSE STRING>> CHANNEL CHANNEL)> + + <MOVE A* 1(AB)> ; "CPTR TO IN CHAN" + <MOVE A* 1(A)> ; "ITS CHAN IN" + <MOVE B* 3(AB)> ; "CPTR TO OUT CHAN" + <MOVE B* 1(B)> ; "ITS CHAN OUT" + <*CALL PLDBLK> + <JRST BADPLD> + <PUSHJ P* READ1> + <JRST EOFP> + <MOVE A* $TWORD> + <JRST FINIS> + +EOFP <MOVE A* $TFALSE> + <MOVE B* <MQUOTE ("FILE-LOAD: Premature end of file.")>> + <JRST FINIS> + +READ1 <MOVE A* 1(AB)> + <HRLZ A* 1(A)> + <LSH A* 5> + <IOR A* [<*IOT 0>]> + <HRROI 0 B> + <XCT A> + <SKIPL 0> + <AOS (P)> + <POPJ P*> + +BADPLD <MOVE A* $TFALSE> + <MOVE B* <MQUOTE ("FILE-LOAD: .CALL LOAD failed.")>> + <JRST FINIS> + +PLDBLK <SETZ> + <#OPCODE *545741440000*> ; "SIXBIT /LOAD/" + <B> + <SETZ A> + +<TITLE JOB-CREATE> ;" S.W.GALLEY (SG) 2 MAY 74" +<DECLARE ("VALUE" <OR CHANNEL <FALSE STRING>> STRING)> + +; "Find an unused ITS channel." + <MOVE C* [<*STATU A* B>]> ; "Test chan statuses, starting with 1." +CHNLP <XCT C> + <ANDI B* *77*> ; "Isolate device code." + <JUMPE B* CHNFND> ; "Jump if this chan not in use." + <ADD C* [<(*40*)>]> ; "Move on to next chan," + <TLNE C* *740*> + <JRST CHNLP> ; "if any." + <MOVE B* <MQUOTE ("NO CHANNELS AVAILABLE.")>> + <MOVSI A* TFALSE> ; "No chans unused: quit." + <JRST FINIS> + +; "We found a chan." +CHNFND <PUSH TP* 0(AB)> ; "Remember input string." + <PUSH TP* 1(AB)> + <LDB D* [<(*270400*) C>]> ; "Isolate chan." + <HRLI D* 8> ; "foreign-job open mode" + <PUSH P* D> ; "Save it." + <PUSH TP* $TFIX> ; "Lock out intrpts." + <PUSH TP* [<#OPCODE *377777777777*>]> + <MCALL 1 INT-LEVEL> + <PUSH TP* A> ; "Remember old intrpt level." + <PUSH TP* B> + <PUSH TP* 0(AB)> ; "Convert arg to sixbit." + <PUSH TP* 1(AB)> + <MCALL 1 STRTOX> + <MOVE 0 B> ; "Save candidate JNAME in 0." + <POP P* D> ; "Retrieve mode + chan." + +; "Obtain JNAMEs of existing inferiors." + <PUSH P* [<0>]> ; "Put marker on stack." + <MOVEI E* 7> ; "counter for inferiors" +INFLP <MOVSI A* 1> ; "Make intrpt bit in A." + <LSH A* (E)> + <*UTRAN A> ; "Get U/JNAME for bit." + <JRST HERE 2> ; "If there is an inferior," + <PUSH P* C> ; "save JNAME on stack." + <SOJGE E* INFLP> ; "Go on to next bit." + <HRRZ E* D> ; "Isolate found chan." + <MOVSI B* *656362*> ; "Put device USR in B for OPEN." + <SETZI C*> ; "Put default UNAME in C." + +; "Ensure JNAME in 0 is not inferior." +INFLUK <MOVEI A* (P)> ; "pntr to first inferior JNAME" +INFLU1 <SKIPN (A)> + <JRST OPFJOB> ; "Jump if done." + <CAME 0 (A)> ; "JNAMEs equal?" + <SOJA A* INFLU1> ; "No -- continue." +ADD0 <ADD 0 [<(*100*)>]> ; "Yes - try another JNAME, with no embedded spaces." + <JRST INFLUK> + +; "Ensure JNAME in 0 is not a foreign job." +OPFJOB <*CALL OPNBLK> ; "Try to open foreign job." + <JRST NOFJOB> ; "No foreign job: jump." + <*CALL CLSBLK> ; "A foreign job: close unwanted chan." + <JFCL> + <JRST ADD0> ; "Try another JNAME." + +NOFJOB <POP P* A> ; "Reset P-stack." + <JUMPN A* NOFJOB> + +; "Open a Muddle Channel to create a new inferior." + <PUSH TP* <MQUOTE "PRINTB"> -1> + <PUSH TP* <MQUOTE "PRINTB">> + <PUSH TP* $TFIX> ; "Convert my UNAME to string." + <*SUSET [<(4)A>]> + <PUSH TP* A> + <PUSH P* 0> ; "Don't clobber good JNAME!" + <MCALL 1 SIXTOS> + <POP P* 0> + <PUSH TP* A> + <PUSH TP* B> + <PUSH TP* $TFIX> ; "Convert good JNAME to string." + <PUSH TP* 0> + <MCALL 1 SIXTOS> + <PUSH TP* A> + <PUSH TP* B> + <PUSH TP* <MQUOTE "USR"> -1> + <PUSH TP* <MQUOTE "USR">> + <MCALL 4 OPEN> + +; "Restore previous intrpt level, fix up channel, and return." + <PUSH TP* (TP)-1> ; "Put old intrpt level on stack again." + <PUSH TP* (TP)-1> + <MOVEM A* (TP)-3> ; "Save Channel on stack." + <MOVEM B* (TP)-2> + <MCALL 1 INT-LEVEL> ; "Restore intrpt level." + <POP TP* B> ; "Channel again" + <POP TP* A> + <MOVEI C* E -7> + <CAMN A* $TCHANNEL> ; "If it's really a Channel," + <MOVE C* B> + <POP TP* 7(C)> ; "put input string in input-name2 slot." + <POP TP* 6(C)> + <JRST FINIS> + +; "*CALL blocks" +OPNBLK <SETZ 0> + <#OPCODE *576045560000*> ; "SIXBIT /OPEN/" + <D> ; "mode and channel" + <B> ; "[SIXBIT /USR/]" + <C> ; "[SIXBIT /<-uname->/]" + <0> ; "[SIXBIT /<-jname->/]" + <SETZ C> + +CLSBLK <SETZ 0> + <#OPCODE *435457634500*> ; "SIXBIT /CLOSE/" + <SETZ E> ; "channel" + +<TITLE JOB-GET-NUM> +<DECLARE ("VALUE" FIX CHANNEL)> + + <PUSH TP* 0(AB)> ; "CHAN" + <PUSH TP* 1(AB)> + <PUSH TP* $TWORD> + <PUSH TP* [<*11*>]> ; ".RINTB" + <MCALL 2 USET> + <JFFO B* HERE 1> + <SUBI C* 17> + <MOVN B* C> + <MOVE A* $TFIX> + <JRST FINIS> + +<TITLE UCLOSE> +<DECLARE ("VALUE" CHANNEL CHANNEL)> + + <MOVE A* 1(AB)> ; "CPTR TO CHAN" + <HRLZ A* 1(A)> ; "ITS CHAN" + <LSH A* 5> + <IOR A* [<*UCLOS>]> ; "INSN IN A" + <XCT A> + <MOVE A* 0(AB)> ; "RETURN CHANNEL." + <MOVE B* 1(AB)> + <JRST FINIS> +<END> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog/l.undr03 b/src/mprog/l.undr03 new file mode 100644 index 00000000..fb4eb2b6 --- /dev/null +++ b/src/mprog/l.undr03 @@ -0,0 +1,82 @@ + +<RPACKAGE "L"> + +<USE "SDML"> + +<ENTRY L-RETRIEVE L-LISTE L-LISTP L-PATH L-OBL L-LISTPE + L-COUNTE L-COUNTP L-FILE L-WHERE> + +<DEFINE L-RETRIEVE (PCKNM "OPTIONAL" (FILNM .PCKNM) (LIBNM "LIBMUD;LIBMUD")) + #DECL ((PCKNM FILNM LIBNM) STRING) + <L-DOITEM .LIBNM ,L-ITEMS-NAME <> ,SDMGETARC .PCKNM .FILNM>> + +<DEFINE L-LISTE ("OPTIONAL" (LIBNM "LIBMUD;LIBMUD") (OUTCHAN .OUTCHAN)) + #DECL ((LIBNM) STRING (OUTCHAN) <SPECIAL CHANNEL>) + <AND <L-DOITEM .LIBNM ,L-INDEX-NAME <> ,SDMLST> ,NULL>> + +<DEFINE L-COUNTE ("OPTIONAL" (LIBNM "LIBMUD;LIBMUD")) + #DECL ((LIBNM) STRING) + <L-DOITEM .LIBNM ,L-INDEX-NAME <> ,SDMGDL>> + +<DEFINE L-LISTP ("OPTIONAL" (LIBNM "LIBMUD;LIBMUD") (OUTCHAN .OUTCHAN)) + #DECL ((LIBNM) STRING (OUTCHAN) <SPECIAL CHANNEL>) + <AND <L-DOITEM .LIBNM ,L-ITEMS-NAME <> ,SDMLST> ,NULL>> + +<DEFINE L-COUNTP ("OPTIONAL" (LIBNM "LIBMUD;LIBMUD")) + #DECL ((LIBNM) STRING) + <L-DOITEM .LIBNM ,L-ITEMS-NAME <> ,SDMGDL>> + +<DEFINE L-PATH () + <MAPF <> + <FUNCTION (X) #DECL ((X) OBLIST) <PRINT <GET .X OBLIST>>> + .OBLIST> + ,NULL> + +<DEFINE L-OBL (ATM) + #DECL ((ATM) ATOM) + <GET <OBLIST? .ATM> OBLIST>> + +<DEFINE L-LISTPE (PCKNM + "OPTIONAL" (LIBNM "LIBMUD;LIBMUD") (OUTCHAN .OUTCHAN) + "AUX" TMP) + #DECL ((PCKNM LIBNM) STRING (OUTCHAN) <SPECIAL CHANNEL>) + <AND <SET TMP + <L-DOITEM .LIBNM + ,L-INDEX-NAME + <> + ,SDMGET + <STRING <ASCII 127> .PCKNM>>> + <REPEAT () + <COND (<EMPTY? .TMP> <RETURN ,NULL>)> + <TERPRI> + <PRINTSTRING <1 .TMP> + .OUTCHAN + <- <LENGTH <1 .TMP>> + <LENGTH <MEMQ !\! <1 .TMP>>>>> + <SET TMP <REST .TMP>>>>> + +<DEFINE L-FILE (NAM "OPTIONAL" (LIBNM "LIBMUD;LIBMUD")) + #DECL ((LIBNM NAM) STRING (OUTCHAN) <SPECIAL CHANNEL>) + <OR <L-DOITEM .LIBNM ,L-ITEMS-NAME <> ,SDMGET .NAM ,SDBIGN> + <AND <L-DOITEM .LIBNM ,L-ITEMS-NAME <> ,SDMDSRC .NAM> + #FALSE ("PACKAGE IS ARC, NOT VARC")>>> + +<DEFINE L-WHERE (NAM "OPTIONAL" (L-LIBRARIES .L-LIBRARIES) + "AUX" VAL CHN) + #DECL ((VALUE) <OR <VECTOR [REST STRING]> FALSE> (CHN) <OR CHANNEL FALSE> + (L-LIBRARIES) <LIST [REST STRING]> + (NAM) STRING (VAL) ANY) + <SET VAL + <REPEAT ((L .L-LIBRARIES)) + #DECL ((L) <LIST [REST STRING]>) + <COND (<EMPTY? .L> <RETURN <>>) + (<SET VAL <L-DOITEM <1 .L> ,L-ITEMS-NAME <> ,SDMGET .NAM ,SDBIGN>> + <RETURN .VAL>) + (<L-DOITEM <1 .L> ,L-ITEMS-NAME <> ,SDMDSRC .NAM> + <RETURN <CHTYPE ("PACKAGE/DATUM ARCHIVED IN LIBRARY.") FALSE>>)> + <SET L <REST .L>>>> + <COND (<AND .VAL <SET CHN <OPEN "READ" .VAL>>> + <CLOSE .CHN> + [<7 .CHN> <8 .CHN> <9 .CHN> <10 .CHN>])>> + +<ENDPACKAGE> diff --git a/src/mprog/locks.ueb015 b/src/mprog/locks.ueb015 new file mode 100644 index 00000000..e95cc2a8 --- /dev/null +++ b/src/mprog/locks.ueb015 @@ -0,0 +1,687 @@ +<PACKAGE "LOCKS"> + +<ENTRY + LOCK-PAGES + LOCKED? + SHARE-LOCKS + HARD-LOCK + SOFT-LOCK + LOCK + INIT44 + PAGE-LOCK + UNLOCK + PAGE-INIT + LOCK-BASE-ADDRESS> + +<USE "PMAP"> + +<SET DEFAULT-FILE "MUDDLE;LOCKS PAGE"> +<SET LOCK-PAGES ()> +<SETG LOCK-BASE-ADDRESS <>> + +<SETG SENSITIVE-RSUBRS (LOCK PAGE-LOCK UNLOCK PAGE-INIT)> + +<DEFINE FREEZE-IT (RN "AUX" (RS ,.RN)) + <RSUBR <CHTYPE <PUT .RS 1 <CHTYPE <FREEZE <1 .RS>> CODE>> VECTOR>>> + + +<DEFINE SHARE-LOCKS ("OPTIONAL" (LOCK-FILE <>) + "AUX" CH BASE (FNI <OR .LOCK-FILE .DEFAULT-FILE>)) + #DECL ((VALUE BASE) WORD + (LOCK-PAGES) <LIST [REST LIST]> + (CH) <OR FALSE CHANNEL> + (LOCK-FILE) <OR FALSE STRING> + (FNI) STRING) +<SET BASE +<COND (<AND <SET CH <OPEN "READ" .FNI>> + <MAPF <> + <FUNCTION (EL) + <AND <=? <1 .EL><7 .CH>> + <=? <2 .EL><8 .CH>> + <=? <3 .EL><10 .CH>> ;"snm" + <MAPLEAVE <4 .EL>>>> ;"page already there" + .LOCK-PAGES>>) + (ELSE ;"page not in already" + <OR .CH ;"read file exists?" + <PROG () ;"make a file" + <SET CH <OPEN "PRINTB" .FNI>> ;"so make one" + <REPEAT ((N *20*) (UV <IUVECTOR *100* 0>)) + <PRINTB .UV .CH> ;"write 1K of 0's" + <COND (<0? <SET N <- .N 1>>> + <RETURN <CLOSE .CH>>)>> + <SET CH <OPEN "READ" .FNI>>>> ;"better win now" + <SET BASE + <CHTYPE + <CORE-BLOCK + *640000* ;"read,write and public" + -1 ;"into my map" + <PAGE-FIND> ;"at this page" + <1 .CH> ;"from the file" + 0 ;"first block" + > + WORD>> + <SET LOCK-PAGES ((<7 .CH><8 .CH><10 .CH> .BASE) !.LOCK-PAGES)> + .BASE)>> +<OR .LOCK-FILE <SETG LOCK-BASE-ADDRESS .BASE>> ;"set default page offset" +<CLOSE .CH> +<PAGE-INIT .BASE> ;"make sure it is initialized, and no system +crash since last set up." +.BASE> + +<DEFINE SOFT-LOCK (NM "OPTIONAL" (RETRIES 3) (LSLEEP 3) + (LOCK-BASE <OR ,LOCK-BASE-ADDRESS <SHARE-LOCKS>>) + "AUX" (VAL #FALSE (COULD-NOT-LOCK-PAGE))) + #DECL ((NM) STRING (RETRIES LSLEEP) FIX (LOCK-BASE) WORD + (VAL VALUE) <OR WORD FALSE>) + <COND (<PAGE-LOCK .LOCK-BASE> + <PROG () + <COND (<SET VAL <LOCK .LOCK-BASE .NM 1>> .VAL) + (<0? <SET RETRIES <- .RETRIES 1>>> .VAL) + (ELSE <SLEEP .LSLEEP> <AGAIN>)>> + <UNLOCK .LOCK-BASE>)> + .VAL> + +<DEFINE HARD-LOCK (NM "OPTIONAL" (RETRIES 3) (LSLEEP 3) + (LOCK-BASE <OR ,LOCK-BASE-ADDRESS <SHARE-LOCKS>>) + "AUX" (VAL #FALSE (COULD-NOT-LOCK-PAGE))) + #DECL ((NM) STRING (RETRIES LSLEEP) FIX (LOCK-BASE) WORD + (VAL VALUE) <OR WORD FALSE>) + <COND (<PAGE-LOCK .LOCK-BASE> + <PROG () + <COND (<SET VAL <LOCK .LOCK-BASE .NM 0>> .VAL) + (<0? <SET RETRIES <- .RETRIES 1>>> .VAL) + (ELSE <SLEEP .LSLEEP> <AGAIN>)>> + <UNLOCK .LOCK-BASE>)> + .VAL> + +<TITLE INIT44> ;"takes two fixes, in*44*format + -- addr1,,addr2 ? instruction" +<DECLARE ("VALUE" STORAGE FIX FIX)> +<PSEUDO <SET *SUSET #OPCODE *43540000000*>> + + +<PSEUDO +<PROG () + ;"note: All references to the page need to be offset by the + address of the base of the page -- different users may map into + different virtual pages" + <SET PLOCK 0> ;"page lock (-1 => free)" + <SET INITRQ 2> ;"init flag = system up time if init has begun" + <SET INITDN 3> ;"init done flag = INITRQ if init finished" + <SET TABLEP 4> ;"AOBJN pointer to hash table" + <SET QUINTP 5> ;"aobjn pointer to free space (quintuples)" + <SET FREEP 6> ;"pointer to free list of quintuples" + <SET LUNAM 7> ;"hard-lock owner uname" + <SET LJNAM 8> ;"hard-lock owner jname" +;"debugging counts" + <SET NUSED 9> ;"number of quints taken by GETFREE" + <SET NFREED 10> ;"number of quints freed by GARBCL" +;"end of debugging counts" + <SET TABLEN 113> ;"length of hash table" + <SET INFOLEN *20*> ;"first few words for scratch" + <SET *CALL #OPCODE *043000000000*> + <SET *SLEEP #OPCODE *042000000003*> + <SET *SUSET #OPCODE *043540000000*> + <SET LEN44 30> ;"initial length of '44' table" + >> + +<PSEUDO <PROG () + <SET Q.PTRS 0> ;"next pointer in lock lists" + <SET Q.ASCII 1> ;"3 words of ASCII -- name of lock" + <SET Q.LOCK 4> ;"actual lock -- -1=hard, 0=un, >0=soft" + >> + +;"INIT44 CODE BEGINS HERE -- TITLE NEEDED AT START TO TURN ON ASSEM READER" + +<SKIPE *44*> +<JRST GOT44> ;"been initialized" +<PUSH TP* $TFIX> +<PUSH TP* [<LEN44>]> ;"enough for 10 sensitive portions" +<MCALL 1 ISTORAGE> + +<ADD B* [<LEN44 (LEN44)>]> ;"rest till empty" +<MOVEM B* *44*> +;"now lets the system know we are hacking locks" + +<*SUSET [*000054000000*]> ; "get .optio bits" +<TLO *1000*> ;"bit for lock enable" +<*SUSET [*400054000000*]> ;"set 'OPTIONS' from register 0" + + +GOT44 +<HLRE A* *44*> ;"-length" +<MOVM A* A> ;"positive" +<HRRZ B* *44*> ;"ptr" +<ADDI B* 1 (A)> ;"second dope" +<HLRZ B* (B)> ;"length" +<CAMG B* A> ;"any room?" +<PUSHJ P* FULLTABLE> ;"none" +<MOVE B* *44*> +<SUB B* [*2000002*]> ;"new slot" +<MOVE A* 1 (AB)> ;"first word" +<MOVEM A* (B)> +<MOVE A* 3 (AB)> +<MOVEM A* 1 (B)> +<MOVEM B* *44*> ;"reset 'sensitive code' pointer" +<MOVSI A* TSTORAGE> +<MOVEM A* <MQUOTE ![]> -1> ;"save for debugging" +<MOVEM B* <MQUOTE ![]>> +<JRST FINIS> + +FULLTABLE ;"here to grow the 'sensitive code' table" +<SUBM M* (P)> ;"make locn insensitive" +<PUSH TP* $TFIX> +<ADD A* *24*> +<PUSH TP* A> +<MCALL 1 ISTORAGE> ;"get bigger table" +<HLRE A* B> ;"- length" +<SUB B* A> ;"B->dope" +<HLRE A* *44*> ;"- length old" +<ADD A* B> ;"A/ 'to'" +<HRL A* *44*> ;"A/ 'from',,'to'" +<BLT A* -1 (B)> ;"copy old" +<PUSH TP* $TSTORAGE> +<PUSH TP* *44*> ;"for FREE" +<HRRM A* *44*> ;"sneaky identity switch -leave length to end the same" +<MCALL 1 FREE> +<SUBM M* (P)> ;"relocate return addr" +<POPJ P*>î + + + +<TITLE PAGE-LOCK> +<DECLARE ("VALUE" <OR WORD FALSE> <PRIMTYPE WORD> "OPTIONAL" FIX FIX)> +;"takes PAGE address, #times to retry, sleep time" +<PUSH P* [1]> ;"sleep time" +<PUSH P* [1]> ;"# retries" +<HLRZ A* AB> ;"0,,-#args*2" +<CAIN A* -2> +<JRST NOOPT> +<MOVE B* 3 (AB)> ;"# retries" +<MOVEM B* (P)> +<CAIN A* -4> +<JRST NOOPT> +<MOVM B* 5 (AB)> ;"sleep time, making sure it's positive" +<MOVEM B* -1 (P)> + +NOOPT ;"come here with no optionals" +<SKIPN <MQUOTE 654321>> ;"initialized?" +<JRST LOCKIT> +<HRLI A* SENSIN> ;"sensitive" +<HRRI A* SENSOUT> ;"non-sensitive" +<PUSH TP* $TFIX> +<PUSH TP* A> +<PUSH TP* $TFIX> +<PUSH TP* UNLOCKIT> +<MCALL 2 INIT44> ;"make safe for democracy" +<SETZM <MQUOTE 654321>> + +LOCKIT +<HRRZ C* 1 (AB)> ;"pointer to lock" +<AOSE PLOCK (C)> ;"attempt lock" +<JRST LOCKED> +SENSIN +<MOVE D* *43*> ;"start of list" +<HLL D* UNLOCKIT> ;"get unlock instruction" +<TLZ D* *20*> ;"turn off @ bit" +<MOVEM D* PLOCK 1 (C)> +<MOVEM C* *43*> +SENSOUT +<ADD C* [<LUNAM (4)>]> ;".RUNAM,,LUNAM" +<*SUSET C> ;"saves UNAME of locker" +<AOBJN C* NOWJN> +NOWJN +<*SUSET C> ;"now JNAME" +<MOVSI A* TWORD> +<MOVE B* 1 (AB)> ;"returns address" +<JRST FINIS> + +LOCKED +<SOSGE B* (P)> ;"decrement # retries" +<JRST RUNOUT> +<PUSH TP* $TFIX> +<PUSH TP* -1 (P)> +<MCALL 1 SLEEP> ;"he asked for it" +<JRST LOCKIT> + +RUNOUT +<MOVSI A* TFALSE> +<SETZ B*> +<JRST FINIS> +UNLOCKIT +<SETOM @ C> ;"AOSE-type switch" + + +<TITLE LOCK> + ;"***page must be locked!!!!" + ;"call with address of lock page, string (lock name) + optional: fix (0(default)=>hard lock, else soft lock)," + <DECLARE ("VALUE" <OR WORD FALSE> <PRIMTYPE WORD> STRING + "OPTIONAL" FIX)> + <PSEUDO <PROG () + <SET HORSOFF 1> ;"refers to TB" + <SET FREEBLKOFF 3> +;"used to have sleep optionals -- better done in MUDDLE code" + + <DEFINE PUSHER ("TUPLE" ACS) + <CHTYPE <MAPF ,LIST <FUNCTION (AC) + <FORM PUSH P* .AC>> .ACS> + SPLICE>> + <DEFINE POPPER ("TUPLE" ACS) + <CHTYPE <MAPF ,LIST <FUNCTION (AC) + <FORM PUSH P* .AC>> .ACS> + SPLICE>> + >> +;"first send sensitive locs to 44" + <SKIPN <MQUOTE 654321>> + <JRST INITED> + <HRLI A* HLCK1> ;"hard and sensitive" + <HRRI A* HLCK2> + <MOVE B* UNHARD> + <PUSHJ P* BLESS44> + + <HRLI A* SLCK1> ;"soft and sensitive" + <HRRI A* SLCK2> + <MOVE B* UNSOFT> + <PUSHJ P* BLESS44> + + <HRLI A* SF1> ;"free storage with undo if killed" + <HRRI A* SF2> + <MOVE B* SF4> + <ADD B* 1 (AB)> ;"relocate (index not allowed in *44*)" + <PUSHJ P* BLESS44> + + <HRLI A* SF2> + <HRRI A* SF3> + <MOVE B* SF2> + <PUSHJ P* BLESS44> + + <SETZM <MQUOTE 654321>> +INITED <PUSH TP* $TFIX> + <PUSH TP* [0]> ;"default hard lock" + <PUSH TP* $TFIX> + <PUSH TP* [2]> + <MCALL 1 ISTORAGE> ;"get free block for 43" + <PUSH TP* A> + <PUSH TP* B> + <HLRZ A* AB> + <CAIN A* -4> + <JRST NOOPT> ;"no optionals" + <MOVE B* 5 (AB)> + <MOVEM B* HORSOFF (TB)> +NOOPT <HRRZ A* 1 (AB)> ;"base of locks page" + <HRRZ C* 2 (AB)> + <MOVE B* 3 (AB)> ;"string bp" + <PUSHJ P* HASHGEN> ;"leaves bucket index in D" +GCLRET <HRRZ C* TABLEP (A)> + <ADD C* D> ;"get bucket offset in page" + <ADD C* A> + <SKIPA> +NOTHIS <HRRZ C* E> + <HRRZ E* (C)> ;"get pointer to next list el" + <JUMPE E* GETFREE> ;"C/ pointer to prev" + <ADD E* A> + <MOVE O* -2 (P)> ;"compare ascii" + <CAME O* Q.ASCII (E)> + <JRST NOTHIS> + <MOVE O* -1 (P)> + <CAME O* Q.ASCII 1 (E)> + <JRST NOTHIS> + <MOVE O* (P)> + <CAME O* Q.ASCII 2 (E)> + <JRST NOTHIS> +;"*** have winning quint" +GDQUINT + <HRRZ D* FREEBLKOFF (TB)> ;"get two-word block" + <HRRZ B* *43*> + <ADDI E* Q.LOCK> ;"point at lock" + <SKIPGE (E)> + <JRST WAITSOME> ;"is hard locked" + <SKIPE HORSOFF (TB)> + <JRST WANTSOFT> +;"hard lock" + <SKIPE (E)> + <JRST WAITSOME> ;"already soft locked" + <SETOM (E)> ;"unlock w/SETZM" +HLCK1 <HLL B* UNHARD> + <MOVEM B* 1 (D)> + <HRRZM E* 0 (D)> + <MOVEM D* *43*> +HLCK2 <MOVSI A* TWORD> + <HRRZ B* E> + <JRST FINIS> +UNHARD <SETZM @ E> + +;"soft lock" +WANTSOFT + <AOS (E)> +SLCK1 <HLL B* UNSOFT> + <MOVEM B* 1 (D)> + <HRRZM E* 0 (D)> + <MOVEM D* *43*> +SLCK2 <JRST HLCK2> +UNSOFT <SOS @ E> + +HASHGEN + <POP P*> ;"save return address" + <PUSH P* [0]> + <PUSH P* [0]> + <PUSH P* [0]> + <SETZ D*> + <SKIPN C> + <JRST @ 0> ;"quit if count = 0" + <CAILE C* 15> ;"max string length" + <MOVEI C* 15> + <MOVEI E* -2 (P)> + <HRLI E* *440700*> +LOOP <ILDB D* B> + <IDPB D* E> + <SOJG C* LOOP> + + <MOVE C* -2 (P)> + <XOR C* -1 (P)> + <XOR C* 0 (P)> ;"hash em up" + <HLRE D* TABLEP (A)> ;"get length of table" + <IDIV C* D> ;"and map into table" + <MOVM D* D> ;"don't let it be negative" + <JRST @ 0> + +GETFREE + <HRRZ E* FREEP (A)> ;"free pointer" + <JUMPE E* GARBCL> ;"nul pointer, clear up garbage" + <AOS NUSED (A)> ;"***debugging # quints used" + <MOVE D* E> ;"save relative value for later" + <ADD E* A> ;"make absolute" + <POP P* Q.ASCII 2 (E)> + <POP P* Q.ASCII 1 (E)> + <POP P* Q.ASCII (E)> ;"saves ascii in lock" + <SETZM Q.LOCK (E)> + <HRRZ O* Q.PTRS (E)> + <MOVEM O* FREEP (A)> +SF1 <SETZM Q.PTRS (E)> ;"new block is end of list" +SF2 <MOVEM D* @ C> ;"link into bucket's list" +SF3 <JRST GDQUINT> + +SF4 <MOVEM D* FREEP> ;"go back-- link block into free" +;"contents of SF4 get relocated before use" + +WAITSOME + <MOVSI A* TSTORAGE> + <MOVE B* FREEBLKOFF (TB)> + <MCALL 1 FREE> ;"free up 2 word block" + <MOVSI A* TFALSE> + <MOVE B* <MQUOTE (ALREADY-LOCKED)>> + <JRST FINIS> + +GARBCL <PUSH P* A> + <PUSH P* D> ;"contains the bucket #" + <SKIPN <MQUOTE 765432>> + <JRST GARBIN> + <PUSH P* A> ;"save page address" + <HRLI A* S1> ;"free storage return with undo" + <HRRI A* S2> + <MOVE B* S1UNLK> + <ADD B* 1 (AB)> ;"relocate (index not allowed)" + <PUSHJ P* BLESS44> + + <HRLI A* S2> + <HRRI A* S3> + <MOVE B* S2UNLK> + <PUSHJ P* BLESS44> + <SETZM <MQUOTE 765432>> + <POP P* A> ;"get back the page address" +GARBIN <MOVE E* TABLEP (A)> + <ADD E* A> ;"make absolute ptr to table" +LP1 <PUSH P* E> +LP2 <HRRZ C* E> +LP3 <HRRZ E* (C)> ;"next pointer" + <JUMPE E* EOLP1> ;"end of bucket list" + <ADD E* A> ;"make absolute" + <SKIPE Q.LOCK (E)> ;"is lock set?" + <JRST LP2> ;"if set, go to next element" +;"here to free an unlocked quint -- lock contains 0" + <HRRZ O* (C)> + <HRRZ B* FREEP (A)> ;"rel ptr to free space" + <HRRZ D* (E)> ;"get rest pointer" + <MOVEM B* (E)> ;"link this quint to free" +S1 <MOVEM D* (C)> ;"splice quint out of bucket list" +S2 <MOVEM O* FREEP (A)> +S3 + <AOS NFREED (A)> ;"***debugging--# quints retrieved" + <JRST LP3> ;"get rest of buckets" +EOLP1 <POP P* E> + <AOBJN E* LP1> ;"look at next bucket" + <POP P* D> + <POP P* A> + <SKIPE FREEP (A)> ;"still none free ?" + <JRST GCLRET> ;"freed some quints, retry" + <MOVSI A* TFALSE> + <MOVE B* <MQUOTE (NO-FREE-SPACE)>> + <JRST FINIS> +S1UNLK <SETAM D* @ E> ;"link the bucket list back together" +S2UNLK <SETAM O* FREEP> ;"free the quint even if user kills job" + +BLESS44 <SUBM M* (P)> ;"make position insensitive" + <PUSH TP* $TFIX> + <PUSH TP* A> ;"location bounds in A (S1,,S2)" + <PUSH TP* $TFIX> + <PUSH TP* B> ;"undo instruction in B" + <MCALL 2 INIT44> + <SUBM M* (P)> ;"relocate" + <POPJ P*> + <TITLE UNLOCK> +<DECLARE ("VALUE" WORD <PRIMTYPE WORD> "OPTIONAL" FIX)> +;"takes base of lock page + -or- + address of lock and optional hard (0) or soft (1) + optional arg gives error if wrong flavor." + <PUSH TP* $TFIX> + <PUSH TP* [-1]> ;"default indicates no error lossage" + <HLRZ A* AB> + <CAIN A* -2> + <JRST NOOPTION> + <MOVE A* 3 (AB)> + <MOVEM A* (TP)> +NOOPTION +<SKIPN <MQUOTE 6543210>> ;"initialized?" +<JRST FIND-LOCK> + <HRLI A* SENSIN> ;"sensitive" + <HRRI A* SENSOUT> ;"non-sensitive" + <MOVE B* SENSIN> ;"instruction to unlock" + <PUSHJ P* BLESS44> ;"mark sensitive code" + + <HRLI A* SENSI2> + <HRRI A* SENSO2> + <MOVE B* SENSI2> + <PUSHJ P* BLESS44> + + <HRLI A* SENSI3> + <HRRI A* SENSO3> + <MOVE B* SENSI3> + <PUSHJ P* BLESS44> +<SETZM <MQUOTE 6543210>> + +FIND-LOCK + <HRRZ D* 1 (AB)> ;"get lock address" + <MOVSI C* *20*> ;"for indirect bit testing" + <MOVEI B* *42*> +LOOKFOR <MOVE A* B> + <HRRZ B* 1 (A)> ;"get next" + <JUMPE B* LOSE> ;"no chain?" + <CAMN D* B> ;"same as pointer?" + <JRST WIN> ;"yes, go unlock" + <CAME D* (B)> ;"if indirect, (B) contains address" + <JRST LOOKFOR> ;"try next element in chain" + <TDNN C* 1 (B)> ;"test indirect bit" + <JRST LOOKFOR> ;"if not, continue search" +;"here we have a winning indirect lock" + <HRR C* D> ;"address" + <HLL C* 1 (B)> ;"get instruction" + <TLZ C* *37*> ;"clear index and indirect, just in case" + <HRL A* 1 (B)> + <TLNE C* <GETBITS + <ANDB!- <CHTYPE ,SETZM FIX> + <XORB!- <CHTYPE ,SETZM FIX><CHTYPE ,SOS FIX>>> + <BITS 18 18>>> ;"skip if SOS, not SETZM" + <JRST SETZMUP> ;"must be hard lock" + <SKIPN 1 (TB)> + <JRST IS-SOFT-ERR> ;"0=>user expected hard?" + <HLRM A* 1 (A)> +SENSI2 <SOS @ C> +SENSO2 <PUSH TP* $TSTORAGE> ;"going to free the 2-word block" + <HRLI B* -2> + <PUSH TP* B> + <MCALL 1 FREE> + <JRST SENSOUT> + +SETZMUP <SKIPLE 1 (TB)> ;"1=>user expected soft" + <JRST IS-HARD-ERR> ;"user wanted hard?" + <HLRM A* 1 (A)> ;"unlink 43 block" +SENSI3 <SETZM @ C> +SENSO3 <JRST SENSO2> + + +WIN + <HRL A* 1 (B)> ;"get next" + <HLRM A* 1 (A)> ;"and unlink lock from list" +SENSIN + <SETOM @ B> +SENSOUT + <MOVSI A* TWORD> + <MOVE B* 1 (AB)> + <JRST FINIS> + +LOSE + <PUSH TP* $TATOM> + <PUSH TP* <MQUOTE NOT-LOCKED-BY-YOU!-ERRORS>> + <JRST CALER1> + +BLESS44 <SUBM M* (P)> ;"make position insensitive" + <PUSH TP* $TFIX> + <PUSH TP* A> + <PUSH TP* $TFIX> + <PUSH TP* B> + <MCALL 2 INIT44> + <SUBM M* (P)> ;"relocate" + <POPJ P*> + +IS-SOFT-ERR + <PUSH TP* $TATOM> + <PUSH TP* <MQUOTE HARD-UNLOCK-OF-SOFT-LOCKED-LOCK!-ERRORS>> + <JRST CALER1> + +IS-HARD-ERR + <PUSH TP* $TATOM> + <PUSH TP* <MQUOTE SOFT-UNLOCK-OF-HARD-LOCKED-LOCK!-ERRORS>> + <JRST CALER1> + +<TITLE LOCKED?> +<DECLARE ("VALUE" <OR FALSE FIX> WORD)> + <HRRZ D* 1 (AB)> ;"lock address" + <MOVSI C* *20*> ;"for testing indirect bit" + <MOVEI B* *42*> ;"seed for chain" +LOOKFOR <MOVE A* B> + <HRRZ B* 1 (A)> ;"next pointer" + <JUMPE B* RFALSE> + <CAMN D* B> ;"is pointer same as lock address?" + <JRST RETB> ;"yes, return value" + <CAME D* (B)> ;"try indirect flavor" + <JRST LOOKFOR> ;"test next element in 43 chain" + <TDNN C* 1 (B)> ;"see if @ on in unlock instruction" + <JRST LOOKFOR> ;"not the lock for me" + <SKIPA B* (D)> ;"COOOOOOOOOKIE!!!!!" +RETB <MOVE B* (B)> + <MOVSI A* TFIX> + <JRST FINIS> +RFALSE <MOVSI A* TFALSE> + <SETZ B*> + <JRST FINIS> + <TITLE PAGE-INIT> +<DECLARE ("VALUE" WORD <PRIMTYPE WORD>)> +;"takes the page base address, + returns the system up time" +<SKIPN <MQUOTE 0123456>> ;"44-init-flag" +<JRST 44-INIT-DONE> +<PUSH TP* $TFIX> +<HRLI A* ISENSIN> +<HRRI A* ISENSOUT> +<PUSH TP* A> ;"bounds of sensitive code" +<PUSH TP* $TFIX>î +<MOVE A* [<SETAM A* INITRQ>]> ;"unlock instruction" +<ADD A* 1 (AB)> ;"lock base address (relocation)" +<PUSH TP* A> +<MCALL 2 INIT44> +<SETZM <MQUOTE 0123456>> +44-INIT-DONE + +<MOVE C* 1 (AB)> ;"lock page base address" +INIT +<*CALL [<SETZ> + *626144416445* ;"sixbit 'RQDATE'" + <MOVEM A> + <SETZM A>]> ;"get system up time in A" +<JRST *CALL-ERROR> +<JUMPL A* [ <SOSLE <MQUOTE 4>> ;"gives up eventually" + <JRST *UP-TIME-ERROR> + <MOVEI A* 300.> ;"system doesn't know time" + <*SLEEP A*> ;"wait 10 seconds and try again" + <JRST INIT>]> +<MOVE B* A> ;"for test" +<EXCH A* INITRQ (C)> ;"first test word" +ISENSIN +;"here, the test word has been changed, but the init is not complete" +<CAMN A* INITRQ (C)> +<JRST WAITER> ;"wait till init complete" +;"actual init" +<SETOM PLOCK (C)> ;"clear page-lock" +;"hash table init" +<MOVE E* [<INFOLEN (<- .TABLEN>)>]> ;"initialize pointer" +<MOVEM E* TABLEP (C)> ;"and set it" +<ADD E* C> ;"relocate the pointer" +<HLRE D* E> ;"- hash table length" +<HRL E* E> +<SUBM E* D> ;"D-> one beyond table" +<SETZM (E)> ;"clear entry" +<ADDI E* 1> +<BLT E* -1 (D)> ;"zero the hash table" +;"free space init" +<MOVE E* [<INFOLEN TABLEN (<+ -1024 .INFOLEN .TABLEN>)>]> +<MOVEM E* QUINTP (C)> ;"initialize quint area pointer" +<HRRZM E* FREEP (C)> ;"initialize free space pointer" +<MOVE D* [<-5 (D)>]> ;"next instr ovflows into index => (E)" +<ADD D* 1 (AB)> ;"relocate for access, but store loc insens ptr" +LP +<ADD E* [<5 (5)>]> +<HRRZM E* @ D> ;"make forward pointer" +<JUMPL E* LP> +<SETZM @ D> ;"last link is 0" +<MOVEM B* INITDN (C)> ;"finished, pant, pant" +ISENSOUT +<MOVSI A* TWORD> ;"returns system up time" +<JRST FINIS> + +WAITER +<CAMN B* INITDN (C)> ;"init done?" +<JRST ISENSOUT> ;"done, word1=word2" +<MOVEI D* 300.> +<*SLEEP D*> ;"wait 10 seconds" +<JRST ISENSIN> +;"and retry -- the user that changed word1 may have quit before finishing init" + + + +*CALL-ERROR +<PUSH TP* $TATOM> +<PUSH TP* <MQUOTE DOT-CALL-LOST!-ERRORS>> +<JRST CALER1> +*UP-TIME-ERROR +<PUSH TP* $TATOM> +<PUSH TP* <MQUOTE DOT-CALL-RQDATE-LOST!-ERRORS>> +<JRST CALER1> + +<END> + +<MAPF <> ,FREEZE-IT ,SENSITIVE-RSUBRS> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog/login.ujfh14 b/src/mprog/login.ujfh14 new file mode 100644 index 00000000..fae7c502 --- /dev/null +++ b/src/mprog/login.ujfh14 @@ -0,0 +1,98 @@ +<PACKAGE "LOGIN"> + +<ENTRY LOGIN IPC-ENABLE FLUSH-DEMON> + +<TITLE LOGIN> + <DECLARE ("VALUE" <OR ATOM FALSE> STRING)> + + <DPUSH TP* (AB)> + <PUSHJ P* ILOGIN> + <JRST FINIS> + + <INTERNAL-ENTRY ILOGIN 1> + <SUBM M* (P)> + <MOVE A* (TP)> + <MOVE C* [#OPCODE *440600000002*]> + <MOVEI D* 6> + <HRRZ B* -1(TP)> + <CAMG B* D> + <MOVE D* B> + <JUMPLE D* LOGLOSE> + <SETZM B> +LOOP <ILDB E* A> + <SUBI E* *40*> + <CAIL E* *100*> + <SUBI E* *40*> + <IDPB E* C> + <SOJG D* LOOP> + <MOVEI C* 0> + <*CALL LOGCALL> + <JRST LOGLOSE> + <MOVE A* <MQUOTE T> -1> + <MOVE B* <MQUOTE T>> +ILOGX <SUB TP* [<2(2)>]> + <JRST MPOPJ> + +LOGLOSE <MOVE A* <TYPE-WORD FALSE>> + <SETZ B*> + <JRST ILOGX> + +LOGCALL <SETZ> + <SIXBIT "LOGIN"> + <B> + <SETZ C> + +<TITLE IPC-ENABLE> + <PUSHJ P* IILO-ENABLE> + <JRST FINIS> + + <INTERNAL-ENTRY IILO-ENABLE 0> + <SUBM M* (P)> + <MOVNI B* 1> + <*SUSET [<(*400021*) B>]> + <MOVE A* <MQUOTE T> -1> + <MOVE B* <MQUOTE T>> + <JRST MPOPJ> + +<TITLE FLUSH-DEMON> + <DECLARE ("VALUE" <OR ATOM FALSE> STRING)> + <DPUSH TP* (AB)> + <PUSHJ P* IFLUSH-DEMON> + <JRST FINIS> + + <INTERNAL-ENTRY IFLUSH-DEMON 1> + <SUBM M* (P)> + <MOVE A* (TP)> + <MOVE C* [#OPCODE *440600000002*]> + <MOVEI D* 6> + <HRRZ B* -1(TP)> + <CAMG B* D> + <MOVE D* B> + <JUMPLE D* FLSLOSE> +LOOP2 <ILDB E* A> + <SUBI E* *40*> + <CAIL E* *100*> + <SUBI E* *40*> + <IDPB E* C> + <SOJG D* LOOP2> + <SETZB C* D> + <*CALL FLSCALL> + <JRST FLSLOSE> + <MOVE A* <MQUOTE T> -1> + <MOVE B* <MQUOTE T>> +IFLSX <SUB TP* [<2 (2)>]> + <JRST MPOPJ> + +FLSLOSE <MOVE A* <TYPE-WORD FALSE>> + <SETZ B*> + <JRST IFLSX> + +FLSCALL <SETZ> + <SIXBIT "STDMST"> + <B> + <C> + <SETZ D> +<END> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog/lsthck.undr01 b/src/mprog/lsthck.undr01 new file mode 100644 index 00000000..91c78243 --- /dev/null +++ b/src/mprog/lsthck.undr01 @@ -0,0 +1,69 @@ + +<PACKAGE "LIST-HACKS"> + +<ENTRY LSHUFFLE LSORT LREVERSE> + +<DEFINE LSHUFFLE (LST + "OPTIONAL" (N <FIX <+ 1 </ <LOG <LENGTH .LST>> <LOG 2>>>>) + "AUX" (A (())) (B (())) (AP .A) (BP .B) (TMP ())) + #DECL ((LST A B AP BP TMP VALUE) LIST (N) FIX) + <REPEAT () + <COND (<L? <SET N <- .N 1>> 0> <RETURN .LST>)> + <REPEAT () + <COND (<EMPTY? .LST> + <PUTREST .AP <REST .B>> + <SET LST <REST .A>> + <PUTREST .A ()> + <PUTREST .B ()> + <SET AP .A> + <SET BP .B> + <RETURN>)> + <SET TMP <REST .LST>> + <PUTREST .LST ()> + <COND (<0? <MOD + <CHTYPE <XORB <CHTYPE <TIME> FIX> <RANDOM>> FIX> 2>> + <SET AP <REST <PUTREST .AP .LST>>>) + (<SET BP <REST <PUTREST .BP .LST>>>)> + <SET LST .TMP>>>> + +<DEFINE LSORT (L + "OPTIONAL" (CMPRSN <>) (ELIM-DUP <>) + "AUX" (M ()) (B ()) (TMP ()) (IT ()) (N 0)) + #DECL ((L M B TMP IT VALUE) LIST (N) FIX (CMPRSN) <OR FALSE APPLICABLE>) + <PROG () + <COND (<L? <SET N <LENGTH .L>> 2> <RETURN .L>)> + <SET B <REST <SET TMP <REST .L <- </ .N 2> 1>>>>> + <PUTREST .TMP ()> + <SET L <LSORT .L .CMPRSN .ELIM-DUP>> + <SET B <LSORT .B .CMPRSN .ELIM-DUP>> + <SET TMP ()> + <REPEAT () + <COND (<EMPTY? .L> + <COND (<EMPTY? .TMP> <RETURN .B>) + (T <PUTREST .TMP .B> <RETURN .M>)>) + (<EMPTY? .B> + <COND (<EMPTY? .TMP> <RETURN .L>) + (T <PUTREST .TMP .L> <RETURN .M>)>) + (<AND .ELIM-DUP <=? <1 .L> <1 .B>>> + <SET L <REST .L>>) + (T + <COND (<COND (.CMPRSN + <APPLY .CMPRSN <1 .L> <1 .B>>) + (T <L? <STRCOMP <1 .L> <1 .B>> 0>)> + <SET L <REST <SET IT .L>>>) + (T <SET B <REST <SET IT .B>>>)> + <PUTREST .IT ()> + <COND (<EMPTY? .M> <SET M <SET TMP .IT>>) + (T <SET TMP <REST <PUTREST .TMP .IT>>>)>)>>>> + + +<DEFINE LREVERSE (LST "AUX" (VAL ()) TMP) + #DECL ((LST VAL TMP VALUE) LIST) + <REPEAT () + <COND (<EMPTY? .LST> <RETURN .VAL>)> + <SET TMP <REST .LST>> + <SET VAL <PUTREST .LST .VAL>> + <SET LST .TMP>>> + +<ENDPACKAGE> +< \ No newline at end of file diff --git a/src/mprog/lup.undr04 b/src/mprog/lup.undr04 new file mode 100644 index 00000000..e620ea13 --- /dev/null +++ b/src/mprog/lup.undr04 @@ -0,0 +1,475 @@ + +<PACKAGE "LUP"> + +<USE "SDM"> + +<ENTRY LUP-ACT LUP-DCT LUP-DEC LUP-ADD-DATUM LUP-ADD-PACK LUP-MOVE + LUP-ADD-ENTRY LUP-DEL-ENTRY LUP-DEL> + +<OR <GASSIGNED? FC-BUF> <SETG FC-BUF <IUVECTOR 100 0>>> + +<DEFINE FC (I O "AUX" (IC <OPEN "READB" .I>) (OC <OPEN "PRINTB" .O>)) + #DECL ((I O) STRING (IC OC) <OR CHANNEL FALSE>) + <COND (<NOT <AND .IC .OC>> + <AND .IC <CLOSE .IC>> + <AND .OC <CLOSE .OC>> + <AND .IC .OC>) + (T + <REPEAT ((N <FILE-LENGTH .IC>) (BUF ,FC-BUF)) + #DECL ((N) FIX (BUF) <UVECTOR [REST FIX]>) + <COND (<0? .N> <RETURN>) + (<G=? .N <LENGTH .BUF>> + <READB .BUF .IC> + <PRINTB .BUF .OC> + <SET N <- .N <LENGTH .BUF>>>) + (<SET BUF <REST .BUF <- <LENGTH .BUF> .N>>>)>> + <CLOSE .IC> + <CLOSE .OC> + T)>> + +<DEFINE LOCK (FILNM + "AUX" CHN (LNAME <STRING .FILNM " _LOCK_">) + (BNM <STRING .FILNM " _BLOK_">)) + <REPEAT () + <COND (<SET CHN <OPEN "PRINTO" .LNAME>> <RETURN .CHN>) + (<=? <1 .CHN> "FILE LOCKED"> <RETURN .CHN>)> + <COND (<SET CHN <OPEN "PRINT" .BNM>>) (<RETURN .CHN>)> + <CLOSE .CHN> + <RENAME .BNM TO .LNAME>>> + +<DEFINE UNLOCK (CHN "AUX" (SNM <6 .CHN>)) + #DECL ((CHN) CHANNEL (SNM) <SPECIAL STRING>) + <RENAME .CHN "_UN LOCK_"> + <CLOSE .CHN> + <RENAME "_UN LOCK_">> + +<OR <GASSIGNED? ACTIVE-LUP> <SETG ACTIVE-LUP <>>> + +<OR <GASSIGNED? DBASE-LOCKED> <SETG DBASE-LOCKED <>>> + +<DEFINE LUP-ACT (FIL + "OPTIONAL" (DO-GC <>) + "AUX" (TMS <STRING .FIL " _" ,L-ITEMS-NAME>) + (NDX <STRING .FIL " _" ,L-INDEX-NAME>) + (OTMS <STRING .FIL " " ,L-ITEMS-NAME>) + (ONDX <STRING .FIL " " ,L-INDEX-NAME>) TMP VAL + (IN-LOCK <>)) + #DECL ((FIL TMS NDX OTMS ONDX) STRING) + <SET VAL + <PROG () + <COND (,ACTIVE-LUP + <RETURN <CHTYPE (,ACTIVE-LUP "CURRENTLY ACTIVATED") + FALSE>>)> + <COND (<SETG DBASE-LOCKED <SET IN-LOCK <LOCK .FIL>>>) + (T <RETURN #FALSE ("DATA BASE LOCKED")>)> + <COND (<SET TMP <SDMACT .OTMS>> <SDMDCT .TMP>) + (<RETURN .TMP>)> + <COND (<SET TMP <SDMACT .ONDX>> <SDMDCT .TMP>) + (<RETURN .TMP>)> + <COND (.DO-GC <SET TMP ,SDMGBC>) (T <SET TMP ,FC>)> + <APPLY .TMP .OTMS .TMS> + <APPLY .TMP .ONDX .NDX> + <SETG INDX-CHN <SDMACT .NDX>> + <SETG ITMS-CHN <SDMACT .TMS>> + <COND (<NOT <AND ,INDX-CHN ,ITMS-CHN>> + <AND ,INDX-CHN <SDMDCT ,INDX-CHN>> + <AND ,ITMS-CHN <SDMDCT ,ITMS-CHN>> + <RETURN <AND ,INDX-CHN ,ITMS-CHN>>)> + <SETG UPN1 .TMS> + <SETG UPN2 .NDX> + <SETG OSNM <SNAME>> + <SETG ON1 .OTMS> + <SETG ON2 .ONDX> + <SETG ACTIVE-LUP .FIL> + <CRLF> + <PRINC .FIL> + <PRINC " ACTIVATED"> + <RETURN ,NULL>>> + <COND (<AND <NOT .VAL> .IN-LOCK> + <RENAME .TMS> + <RENAME .NDX> + <UNLOCK .IN-LOCK> + <SETG DBASE-LOCKED <>>)> + .VAL> + +<DEFINE LUP-DCT ("AUX" (SNM ,OSNM) RN1 RN2) + #DECL ((SNM) <SPECIAL STRING>) + <PROG () + <OK-BASE?> + <COND (<NOT ,ACTIVE-LUP> <RETURN #FALSE ("NO DATA BASE ACTIVE")>)> + <SDMDCT ,INDX-CHN> + <SDMDCT ,ITMS-CHN> + <SET RN1 <OPEN "PRINTO" ,UPN1>> + <SET RN2 <OPEN "PRINTO" ,UPN2>> + <COND (<NOT <AND .RN1 .RN2>> <RETURN <AND .RN1 .RN2>>)> + <RENAME .RN1 ,ON1> + <RENAME .RN2 ,ON2> + <CLOSE .RN1> + <CLOSE .RN2> + <UNLOCK ,DBASE-LOCKED> + <SETG DBASE-LOCKED <>> + <SETG ACTIVE-LUP <>> + T>> + +<DEFINE DEL-ENTS (CHN PCK-NAM ENTS + "AUX" ENAM (UNAML ()) REC OLD-ENTS + (FNY-NAM <STRING <ASCII 127> .PCK-NAM>) (OBLIST ())) + #DECL ((PCK-NAM FNY-NAM ENAM) STRING (OLD-ENTS) <LIST [REST STRING]> + (ENTS) <LIST [REST ATOM]> (UNAML) <LIST [REST STRING]> + (REC) <LIST [REST <LIST [2 STRING]>]> (OBLIST) <SPECIAL ANY>) + <REPEAT ((ENTS .ENTS)) + #DECL ((ENTS) <LIST [REST ATOM]>) + <COND (<EMPTY? .ENTS> <RETURN>)> + <SET REC + <OR <SDMGET .CHN <SET ENAM <PNAME <1 .ENTS>>>> ()>> + <SET UNAML (<UNPARSE <1 .ENTS>> !.UNAML)> + <REPEAT ((L (() !.REC)) (TOP .L)) + #DECL ((L) <LIST LIST [REST <LIST [2 STRING]>]>) + <COND (<EMPTY? <REST .L>> <RETURN>) + (<=? .PCK-NAM <2 <2 .L>>> + <PUTREST .L <REST .L 2>> + <SET REC <REST .TOP>> + <RETURN>)> + <SET L <REST .L>>> + <COND (<EMPTY? .REC> <SDMDLI .CHN .ENAM>) + (T <SDMPUT .CHN .ENAM .REC>)> + <SET ENTS <REST .ENTS>>> + <SET OLD-ENTS <OR <SDMGET .CHN .FNY-NAM> ()>> + <REPEAT ((L (() !.OLD-ENTS)) (TL .L)) + #DECL ((L) <LIST ANY [REST STRING]>) + <COND (<EMPTY? <REST .L>> <SET OLD-ENTS <REST .TL>> <RETURN>) + (<MEMBER <2 .L> .UNAML> <PUTREST .L <REST .L 2>> <AGAIN>)> + <SET L <REST .L>>> + <COND (<EMPTY? .OLD-ENTS> <SDMDLI .CHN .FNY-NAM>) + (T <SDMPUT .CHN .FNY-NAM .OLD-ENTS>)> + T> + +<DEFINE ADD-ENTS A-E-ACT (CHN PCK-NAM ENTS + "AUX" REC OLD-ENTS (NEW-ENTS ()) ENAM (OBLIST ()) UNAM + (UNAML ()) + (FNY-NAM <STRING <ASCII 127> .PCK-NAM>)) + #DECL ((PCK-NAM FNY-NAM) STRING (OBLIST) <SPECIAL ANY> (ENAM UNAM) STRING + (UNAML) <LIST [REST STRING]> (ENTS) <LIST [REST ATOM]> + (NEW-ENTS) + <LIST [REST <LIST STRING <LIST [REST <LIST [2 STRING]>]>>]> + (OLD-ENTS) <LIST [REST STRING]> (REC) <LIST [REST <LIST [2 STRING]>]>) + <REPEAT ((ENTS .ENTS)) + #DECL ((ENTS) <LIST [REST ATOM]>) + <COND (<EMPTY? .ENTS> <RETURN>)> + <SET REC + <OR <SDMGET .CHN <SET ENAM <PNAME <1 .ENTS>>>> ()>> + <SET UNAM <UNPARSE <1 .ENTS>>> + <SET UNAML (.UNAM !.UNAML)> + <REPEAT ((R .REC)) + <COND (<EMPTY? .R> + <SET REC ((.UNAM .PCK-NAM) !.REC)> + <RETURN>) + (<=? .PCK-NAM <2 <1 .R>>> <RETURN>) + (<==? <OBLIST? <1 .ENTS>> <ROOT>> + <RETURN <CHTYPE ("ROOT ENTRY NOT ONLY ENTRY" + <1 <1 .R>> + "ALSO PRESENT IN" + <2 <1 .R>>) + FALSE> + .A-E-ACT>) + (<=? "!- " <MEMQ !"! <1 <1 .R>>>> + <RETURN <CHTYPE ("ROOT ENTRY" + <1 <1 .R>> + "IN PACKAGE" + <2 <1 .R>> + "ALREADY PRESENT") + FALSE> + .A-E-ACT>)> + <SET R <REST .R>>> + <SET NEW-ENTS ((.ENAM .REC) !.NEW-ENTS)> + <SET ENTS <REST .ENTS>>> + <REPEAT (TMP) + #DECL ((TMP) <LIST STRING <LIST [REST <LIST [2 STRING]>]>>) + <COND (<EMPTY? .NEW-ENTS> <RETURN>)> + <SET TMP <1 .NEW-ENTS>> + <SET NEW-ENTS <REST .NEW-ENTS>> + <SDMPUT .CHN <1 .TMP> <2 .TMP>>> + <SET OLD-ENTS <OR <SDMGET .CHN .FNY-NAM> ()>> + <REPEAT () + <COND (<EMPTY? .UNAML> <RETURN>) + (<NOT <MEMBER <1 .UNAML> .OLD-ENTS>> + <SET OLD-ENTS (<1 .UNAML> !.OLD-ENTS)>)> + <SET UNAML <REST .UNAML>>> + <SDMPUT .CHN .FNY-NAM .OLD-ENTS> + T> + +<DEFINE COB (ATM "AUX" (FOO .ATM) (R <ROOT>) (I <GET INITIAL OBLIST>)) + #DECL ((ATM) ATOM (R I) OBLIST) + <REPEAT () + <COND + (<OR <NOT <SET FOO <OBLIST? .FOO>>> <==? .FOO .R>> + <RETURN>) + (<==? .FOO .I> + <RETURN <CHTYPE (<STRING "ATOM, " + <PROG ((OBLIST ())) + #DECL ((OBLIST) <SPECIAL ANY>) + <UNPARSE .ATM>> + ", GOES THROUGH INITIAL">) + FALSE>>) + (<NOT <SET FOO <GET .FOO OBLIST>>> <RETURN>)>>> + +<DEFINE CL (LST "AUX" (ENTS ()) (GOOD-OB <ROOT>) TF TA TMP (PKNM <>)) + #DECL ((LST) LIST (ENTS) <LIST [REST ATOM]> (GOOD-OB) <OR OBLIST FALSE> + (TF) FORM (TA) ATOM (PKNM) <OR STRING FALSE>) + <REPEAT () + <COND (<EMPTY? .LST> <RETURN (.PKNM <MAPR ,LIST <FUNCTION (L) + #DECL ((L) <LIST [REST ATOM]>) + <COND (<MEMQ <1 .L> <REST .L>> <MAPRET>) (<1 .L>)>> + .ENTS>)>) + (<AND <TYPE? <1 .LST> FORM> + <NOT <EMPTY? <SET TF <1 .LST>>>>> + <COND (<==? <1 .TF> PACKAGE> + <SET GOOD-OB + <GET <LOOKUP <2 .TF> <GET PACKAGE OBLIST>> + OBLIST>> + <SET PKNM <2 .TF>>) + (<==? <1 .TF> RPACKAGE> <SET PKNM <2 .TF>>) + (<==? <1 .TF> ENTRY> + <SET ENTS (!<REST .TF> !.ENTS)>) + (<==? <1 .TF> ENDPACKAGE> <SET GOOD-OB <ROOT>>) + (<==? <1 .TF> DEFINE> + <COND (<==? .GOOD-OB <OBLIST? <SET TA <GATM <2 .TF>>>>> + <SET ENTS (.TA !.ENTS)>)> + <COND (<NOT <SET TMP <CPL .TF T>>> <RETURN .TMP>)>) + (<AND <==? <1 .TF> SETG> + <APPLICABLE? ,<SET TMP <GATM <2 .TF>>>> + <NOT <TYPE? ,.TMP FIX>>> + <COND (<==? .GOOD-OB <OBLIST? .TMP>> + <SET ENTS (.TMP !.ENTS)>)> + <COND (<NOT <SET TMP <CPL .TF T>>> <RETURN .TMP>)>) + (T + <COND (<NOT <SET TMP <CPL .TF <>>>> <RETURN .TMP>)>)>) + (<==? <PRIMTYPE <1 .LST>> LIST> + <COND (<NOT <SET TMP <CPL <1 .LST> <>>>> <RETURN .TMP>)>) + (<STRUCTURED? <1 .LST>> + <COND (<NOT <SET TMP <CPA <1 .LST> <>>>> <RETURN .TMP>)>) + (<TYPE? <1 .LST> ATOM> + <COND (<NOT <SET TMP <COB <1 .LST>>>> <RETURN .TMP>)>)> + <SET LST <REST .LST>>>> + +<DEFINE CPL (ITM OK-T-F "AUX" TMP) + #DECL ((ITM) <PRIMTYPE LIST>) + <PROG () + <COND (<EMPTY? .ITM> <RETURN>) + (<AND <NOT .OK-T-F> <TYPE? .ITM FORM> <==? <1 .ITM> FLOAD>> + <RETURN #FALSE ("FLOAD ENCOUNTERED")>)> + <REPEAT () + <COND (<EMPTY? .ITM> <RETURN>) + (<TYPE? <1 .ITM> ATOM> + <COND (<NOT <SET TMP <COB <1 .ITM>>>> + <RETURN .TMP>)>) + (<==? <PRIMTYPE <1 .ITM>> LIST> + <COND (<NOT <SET TMP <CPL <1 .ITM> .OK-T-F>>> + <RETURN .TMP>)>) + (<STRUCTURED? <1 .ITM>> + <COND (<NOT <SET TMP <CPA <1 .ITM> .OK-T-F>>> + <RETURN .TMP>)>)> + <SET ITM <REST .ITM>>>>> + +<DEFINE CPA (ITM OK-T-F "AUX" TMP) + #DECL ((ITM) STRUCTURED) + <COND (<AND <==? <PRIMTYPE .ITM> UVECTOR> + <==? <TYPEPRIM <UTYPE .ITM>> WORD>> + T) + (T + <REPEAT () + <COND (<EMPTY? .ITM> <RETURN>) + (<TYPE? <1 .ITM> ATOM> + <COND (<NOT <SET TMP <COB <1 .ITM>>>> + <RETURN .TMP>)>) + (<==? <PRIMTYPE <1 .ITM>> LIST> + <COND (<NOT <SET TMP <CPL <1 .ITM> .OK-T-F>>> + <RETURN .TMP>)>) + (<STRUCTURED? <1 .ITM>> + <COND (<NOT <SET TMP <CPA <1 .ITM> .OK-T-F>>> + <RETURN .TMP>)>)> + <SET ITM <REST .ITM>>>)>> + +<DEFINE GATM (ITM) + <COND (<TYPE? .ITM ATOM> .ITM) + (<GET .ITM VALUE>) + (<AND <TYPE? .ITM FORM> + <==? <LENGTH .ITM> 2> + <==? <1 .ITM> ENTRY>> + <2 .ITM>) + (T <ERROR BAD-FIRST-ARG-TO-DEFINE-OR-SETG!-ERRORS .ITM>)>> + +<OR <GASSIGNED? DBASE-BAD> <SETG DBASE-BAD <>>> + +<OR <LOOKUP "NULL" <ROOT>> + <SETG <INSERT "NULL" <ROOT>> + <INSERT <STRING <ASCII 127>> <ROOT>>>> + +<DEFINE OK-BASE? () + <REPEAT () + <COND (,DBASE-BAD + <ERROR DATA-BASE-MUNGED!-ERRORS + DEACTIVATION-NOT-ALLOWED>) + (<NOT ,ACTIVE-LUP> + <ERROR NO-ACTIVE-DATA-BASE!-ERRORS + ERRET-NON-FALSE-TO-RETRY>) + (<RETURN>)>>> + +<DEFINE FNEXP (STR "AUX" (C <CHANNEL "READ" .STR>)) + (<3 .C> <STRING <5 .C> !": <6 .C> !"; <3 .C> !" <4 .C>>)> + +<DEFINE LUP-DEL (NM "AUX" LST (VAL "DELETED")) + #DECL ((NM) STRING (LST) <LIST [REST STRING]>) + <OK-BASE?> + <SETG DBASE-BAD T> + <OR <SDMGETYPE ,ITMS-CHN .NM> + <SET VAL "OBJECT APPARENTLY NOT PRESENT">> + <SDMDLI ,ITMS-CHN .NM> + <SET LST + <OR <SDMGET ,INDX-CHN <STRING <ASCII 127> .NM>> ()>> + <DEL-ENTS ,INDX-CHN .NM <MAPF ,LIST ,PARSE .LST>> + <SETG DBASE-BAD <>> + .VAL> + +<DEFINE LUP-ADD-DATUM (DATUM-NAME FLSPC + "OPTIONAL" (UPDT <>) (REALARC <>) + "AUX" (FULFLSPC <FNEXP .FLSPC>) FN TMP) + #DECL ((FLSPC DATUM-NAME) STRING (FULFLSPC) <LIST [2 STRING]>) + <PROG () + <OK-BASE?> + <COND (<AND <NOT .UPDT> + <SDMGETYPE ,ITMS-CHN .DATUM-NAME> + <NOT <ERROR + ITEM-ALREADY-PRESENT!-ERRORS + ERRET-NON-FALSE-TO-UPDATE!-ERRORS + LUP-ADD-DATUM + .DATUM-NAME>> + <RETURN <>>>)> + <COND (.REALARC <SET FN ,SDMPUTARC>) + (T <SET FN ,SDMPUTVARC>)> + <SETG DBASE-BAD T> + <COND (<NOT <SET TMP + <APPLY .FN ,ITMS-CHN .DATUM-NAME <2 .FULFLSPC>>>> + <RETURN .TMP>)> + <SETG DBASE-BAD <>> + "DATUM ADDED">> + +<DEFINE LUP-ADD-PACK (FLSPC + "OPTIONAL" (UPDT <>) (REALARC <>) + "AUX" (FULFLSPC <FNEXP .FLSPC>) FN ENTL FNM PNM EL TMP) + #DECL ((FLSPC FNM PNM) STRING (FULFLSPC) <LIST [2 STRING]> + (ENTL) <PRIMTYPE LIST> (EL) <LIST [REST ATOM]>) + <PROG () + <OK-BASE?> + <COND (<NOT <SET ENTL + <CL .<OR <SET TMP <GROUP-LOAD .FLSPC RECYCLED-GROUP-NAME>> + <REPEAT () + <ERROR .TMP LUP-ADD-PACK>>>>>> + <RETURN .ENTL>) + (<SET FNM + <STRING <ASCII 127> <SET PNM <OR <1 .ENTL> <1 .FULFLSPC>>>>>)> + <COND (<AND <NOT .UPDT> + <OR <SDMGETYPE ,ITMS-CHN .PNM> + <SDMGETYPE ,INDX-CHN .FNM>> + <NOT + <ERROR + PACKAGE-ALREADY-PRESENT!-ERRORS + ERRET-NON-FALSE-TO-UPDATE!-ERRORS + LUP-ADD-PACK + .PNM>> + <RETURN <>>>)> + <SET EL + <MAPF ,LIST ,PARSE <OR <SDMGET ,INDX-CHN .FNM> ()>>> + <SETG DBASE-BAD T> + <DEL-ENTS ,INDX-CHN .PNM <LDIF .EL <2 .ENTL>>> + <COND (<NOT <SET TMP <ADD-ENTS ,INDX-CHN .PNM <LDIF <2 .ENTL> .EL>>>> + <RETURN .TMP>)> + <COND (.REALARC <SET FN ,SDMPUTARC>) + (T <SET FN ,SDMPUTVARC>)> + <COND (<NOT <SET TMP <APPLY .FN ,ITMS-CHN .PNM <2 .FULFLSPC>>>> + <RETURN .TMP>)> + <SETG DBASE-BAD <>> + [.PNM <2 .ENTL>]>> + +<DEFINE LDIF (L1 L2) + #DECL ((L1) <LIST [REST ATOM]> (L2) <SPECIAL LIST>) + <MAPF ,LIST + <FUNCTION (ATM) + #DECL ((ATM) ATOM (L2) <LIST [REST ATOM]>) + <COND (<MEMQ .ATM .L2> <MAPRET>)> + .ATM> + .L1>> + +<DEFINE LUP-HACK-ENTRY (PCK ENT ADD? + "AUX" AENT ENTL EL + (FNM <STRING <ASCII 127> .PCK>)) + #DECL ((PCK FNM) STRING (ENT) <OR ATOM <LIST [REST ATOM]>> + (AENT ENTL EL VALUE) <LIST [REST ATOM]> + (ADD?) <OR 'T FALSE>) + <SET ENTL <COND (<TYPE? .ENT LIST> .ENT) ((.ENT))>> + <OK-BASE?> + <COND (<SDMGETYPE ,ITMS-CHN .PCK> + <SET EL + <MAPF ,LIST ,PARSE <OR <SDMGET ,INDX-CHN .FNM> '()>>> + <SETG DBASE-BAD T> + <COND (.ADD? + <ADD-ENTS ,INDX-CHN + .PCK + <SET AENT <LDIFA .ENTL .EL>>>) + (<DEL-ENTS ,INDX-CHN + .PCK + <SET AENT <LINCA .ENTL .EL>>>)> + <SETG DBASE-BAD <>> + .AENT) + (<ERROR PACKAGE-NOT-PRESENT!-ERRORS LUP-HACK-ENTRY .PCK>)>> + + +<DEFINE LUP-ADD-ENTRY (PCK ENT) + #DECL ((PCK) STRING (ENT) <OR ATOM <LIST [REST ATOM]>>) + <LUP-HACK-ENTRY .PCK .ENT T>> + + +<DEFINE LUP-DEL-ENTRY (PCK ENT) + #DECL ((PCK) STRING (ENT) <OR ATOM <LIST [REST ATOM]>>) + <LUP-HACK-ENTRY .PCK .ENT <>>> + + +<DEFINE LUP-MOVE (PCK FIL "AUX" (FILE <FNEXP .FIL>)) + #DECL ((PCK FIL) STRING (FILE) <LIST STRING STRING [REST <NOT ANY>]>) + <OK-BASE?> + <COND (<SET CH <OPEN "READ" .FIL>> + <CLOSE .CH> + <SETG DBASE-BAD T> + <SDMPUTVARC ,ITMS-CHN .PCK <2 .FILE>> + <SETG DBASE-BAD <>> + <2 .FILE>) + (<ERROR FILE-DOES-NOT-EXIST!-ERRORS LUP-MOVE .FIL>)>> + +<DEFINE LINCA (L1 L2) + #DECL ((L1) <LIST [REST ATOM]> (L2) <SPECIAL LIST>) + <MAPR <> + <FUNCTION (X) + <PUT .X 1 <SPNAME <1 .X>>>> + .L2> + <MAPF ,LIST + <FUNCTION (ATM) + #DECL ((ATM) ATOM (L2) <LIST [REST STRING]>) + <COND (<MEMBER <SPNAME .ATM> .L2> .ATM) (<MAPRET>)>> + .L1>> + +<DEFINE LDIFA (L1 L2) + #DECL ((L1) <LIST [REST ATOM]> (L2) <SPECIAL LIST>) + <MAPR <> + <FUNCTION (X) + <PUT .X 1 <SPNAME <1 .X>>>> + .L2> + <MAPF ,LIST + <FUNCTION (ATM) + #DECL ((ATM) ATOM (L2) <LIST [REST STRING]>) + <COND (<MEMBER <SPNAME .ATM> .L2> <MAPRET>)> + .ATM> + .L1>> + +<ENDPACKAGE> + + \ No newline at end of file diff --git a/src/mprog/macro.ubkd03 b/src/mprog/macro.ubkd03 new file mode 100644 index 00000000..c2b209d9 --- /dev/null +++ b/src/mprog/macro.ubkd03 @@ -0,0 +1,463 @@ + +<PACKAGE "MACRO" "MAC"> + +<ENTRY FILE-MACRO + GROUP-MACRO + FUNCTION-MACRO + MACRO-NEVER + MACRO-ALWAYS + ENTRY-ALLOW> + +<SETG MACRO-NEVER 150> + +;"Limits size of largest Function to be Macroed" + +<SETG MACRO-ALWAYS 25> + +;"Size below which one always macros" + +<SETG ENTRY-ALLOW <>> + +;"Flag allow macroification of Package Entries" + +<GDECL (MACRO-NEVER MACRO-ALWAYS) FIX> + +<SETG LINEAR <>> + +\ + +; +"This function creates a list, STATS, which has the Info of all the functions in +the file it is munging. It contains certain properties about the function. +LEN is the length of the function. CALLED is the number of times called. +Initially set to 0. It then applies the function CALL? to the group +and adds the property CALLS to determine who is called by this member." + +<DEFINE FILE-MACRO (NAM "OPTIONAL" (OUT .NAM) (MESSAGE <>)) + #DECL ((OUT) STRING (NAM) <OR ATOM STRING> (MESSAGE) <OR FALSE CHANNEL>) + <SET NAM <GROUP-LOAD .NAM>> ;"Input group" + <GROUP-MACRO .NAM .MESSAGE> ;"Process group" + <GROUP-DUMP .OUT .NAM> ;"Output group"> + +<DEFINE GROUP-MACRO (NAME + "OPTIONAL" (MESSAGE <>) + "AUX" (INFO (INFO)) (STATS ()) DEFAULT-STAT) + #DECL ((NAME) ATOM (INFO) <SPECIAL LIST> (VALUE) ATOM + (STATS) <SPECIAL <LIST [REST INFO]>> + (DEFAULT-STAT) <SPECIAL INFO> (MESSAGE) <OR FALSE CHANNEL>) + <COND (.MESSAGE + <PRINC "MACRO-PROCESSING GROUP: " .MESSAGE> + <PRIN1 .NAME> + <TERPRI .MESSAGE>)> + <SET DEFAULT-STAT + <CHTYPE [DEFAULT-STAT 0 0 0 <> <> <> <> <> ()] INFO>> + <REPEAT ((N 1) (GRP ..NAME) OB NAM STAT) + #DECL ((N) FIX (GRP) LIST (STAT) <OR FALSE INFO>) + <COND (<EMPTY? .GRP> <RETURN>) + (<OR <NOT <TYPE? <SET OB <1 .GRP>> FORM>> + <LENGTH? .OB 2>>) + (<AND <==? <1 .OB> DEFINE> + <TYPE? <SET NAM <GETPROP <2 .OB> VALUE '<2 .OB>>> + ATOM> + <GASSIGNED? .NAM> + <TYPE? ,.NAM FUNCTION>> ;"Function definition" + <SET STATS + (<CHTYPE [.NAM <SIZE .OB> 0 .N <> <> <> <> <> ()] + INFO> + !.STATS)> + <PUTPROP .NAM .INFO <1 .STATS>>) + (<AND <==? <1 .OB> SETG> + <TYPE? <SET NAM <GETPROP <2 .OB> VALUE '<2 .OB>>> + ATOM> + <TYPE? <3 .OB> FORM> + <==? <LENGTH? <SET OB <3 .OB>> 2> 2> + <==? <1 .OB> GVAL> + <TYPE? <2 .OB> ATOM> + <SET STAT <GETPROP <2 .OB> .INFO>>> + ;"Function psuedonym" + <PUTPROP .NAM .INFO .STAT>)> + <SET GRP <REST .GRP>> + <SET N <+ .N 1>>> + <MAPF <> + <FUNCTION (OB "EXTRA" STAT ARGL GOB) + #DECL ((STAT) <OR FALSE INFO> (ARGL) LIST) + <COND (<OR <NOT <TYPE? .OB FORM SEGMENT>> <LENGTH? .OB 1>> + <SCAN .OB>) + (<AND <==? <1 .OB> DEFINE> + <SET STAT <GET <2 .OB> .INFO>>> + <SET ARGL + <COND (<TYPE? <1 ,<FNAME .STAT>> LIST> + <1 ,<FNAME .STAT>>) + (<2 ,<FNAME .STAT>>)>> + <COND (<NOT <OR <MEMBER "TUPLE" .ARGL> + <MEMBER "ARGS" .ARGL> + <MEMBER "CALL" .ARGL> + <MEMBER "BIND" .ARGL>>> + <PUT .STAT ,CALLS '()> + <CALL? .STAT ,<FNAME .STAT>>)>) + (<AND <==? <1 .OB> SETG> + <TYPE? <GETPROP <2 .OB> VALUE '<2 .OB>> ATOM> + <TYPE? <3 .OB> FORM> + <==? <LENGTH? <SET GOB <3 .OB>> 2> 2> + <==? <1 .GOB> GVAL> + <TYPE? <2 .GOB> ATOM> + <GETPROP <2 .GOB> .INFO>> ;"Ignore") + (<==? <1 .OB> ENTRY> <PROCESS-ENTRY <REST .OB>>) + (ELSE <SCAN .OB>)>> + ..NAME> + <MAPF <> + <FUNCTION (STAT) + #DECL ((STAT) INFO) + <AND <DECIDER .STAT> + <FUNCTION-MACRO <FNAME .STAT> + .MESSAGE + .STAT + <NTH ..NAME <OFFSET .STAT>>> + <PUT ..NAME + <OFFSET .STAT> + <CHTYPE <REST <MCODE .STAT>> FORM>>>> + .STATS> + .NAME> + +\ + +<PROG () + <SETG FNAME 1> + <SETG LEN 2> + <SETG CALLED 3> + <SETG OFFSET 4> + <SETG CALLS 5> + <SETG MCODE 6> + <SETG REJECT 7> + <SETG PROGM 8> + <SETG ACT 9> + <SETG COUNT 10> + <MANIFEST FNAME + LEN + CALLED + OFFSET + CALLS + MCODE + REJECT + PROGM + ACT + COUNT> + <NEWTYPE INFO + VECTOR + '<VECTOR ATOM + FIX + FIX + FIX + <PRIMTYPE LIST> + ANY + ANY + ANY + ANY + LIST>>> + +<DEFINE SIZE (X) ;"Attempt to estimate the SIZE of compiled version" + #DECL ((VALUE) FIX) + <COND (<MONAD? .X> 2) + (<TYPE? .X LIST VECTOR UVECTOR FUNCTION> + <+ 1 <MAPF ,+ ,SIZE .X>>) + (<NOT <TYPE? .X FORM SEGMENT>> 2) + (<EMPTY? .X> 2) + (<==? <1 .X> QUOTE> 2) + (<==? <1 .X> LVAL> <SIZE <2 .X>>) + (<MEMQ <1 .X> + '![MAPF MAPR IVECTOR IUVECTOR ILIST IFORM MEMQ!]> + ;"Hairy ?" + <+ 10 <MAPF ,+ ,SIZE .X>>) + (ELSE <MAPF ,+ ,SIZE .X>)>> + +\ + +; +"CALL? is given the Info of a function and a part or all of the actual function. It +recursively goes through hunting for calls to other functions on the STATS list and +alters CALLED and CALLS accordingly. It also rejects functions that are called with +GVAL or are entries." + +<DEFINE CALL? (FUNCN VAL "EXTRA" VSTAT) + #DECL ((VAL) ANY (FUNCN) INFO (VSTAT) <OR FALSE INFO>) + <COND (<OR <MONAD? .VAL> <EMPTY? .VAL> <TYPE? .VAL STRING>>) + (<NOT <TYPE? .VAL FORM SEGMENT>> + <MAPF <> <FUNCTION (X) <CALL? .FUNCN .X>> .VAL>) + (<AND <SET VSTAT <GETPROP <1 .VAL> .INFO>> + <MEMQ .VSTAT .STATS> + <PUT .VSTAT ,CALLED <+ 1 <CALLED .VSTAT>>> + <OR <MEMQ <1 .VAL> <CALLS .FUNCN>> + <PUT .FUNCN ,CALLS (<1 .VAL> !<CALLS .FUNCN>)>>> + <MAPF <> <FUNCTION (X) <CALL? .FUNCN .X>> <REST .VAL>>) + (<AND <==? <1 .VAL> GVAL> + <SET VSTAT <GETPROP <2 .VAL> .INFO>>> + <PUT .VSTAT ,REJECT T> + <MAPF <> <FUNCTION (X) <CALL? .FUNCN .X>> <REST .VAL 2>>) + (<MAPF <> <FUNCTION (X) <CALL? .FUNCN .X>> .VAL>)>> + +<DEFINE SCAN (VAL "EXTRA" VSTAT) + #DECL ((VSTAT) <OR FALSE INFO>) + <COND (<OR <MONAD? .VAL> <EMPTY? .VAL> <TYPE? .VAL STRING>>) + (<TYPE? .VAL FUNCTION> <CALL? .DEFAULT-STAT .VAL>) + (<OR <NOT <TYPE? .VAL FORM SEGMENT>> <LENGTH? .VAL 1>> + <MAPF <> ,SCAN .VAL>) + (<OR <==? <1 .VAL> FUNCTION> <==? <1 .VAL> DEFINE>> + <CALL? .DEFAULT-STAT <REST .VAL>>) + (<AND <==? <1 .VAL> GVAL> + <SET VSTAT <GETPROP <2 .VAL> .INFO>>> + <PUT .VSTAT ,REJECT T> + <MAPF <> ,SCAN <REST .VAL 2>>) + (ELSE <MAPF <> ,SCAN .VAL>)>> + +<DEFINE FUNCTION-MACRO (NAME + "OPTIONAL" (MESSAGE <>) + (STAT + <CHTYPE [.NAME 0 0 0 <> <> <> <> <> ()] + INFO>) DEFCODE + "EXTRA" (REDEFINE T) FCN ARGL A) + + ; +"Calls MACMAK which generates the macro + and places it on the function's MCODE property list." + #DECL ((NAME) ATOM (MESSAGE) <OR FALSE CHANNEL> (STAT) INFO + (DEFCODE) FORM (REDEFINE) <SPECIAL ANY> (FCN) FUNCTION + (ARGL) LIST) + <PROG () + <COND (<NOT <AND <GASSIGNED? .NAME> <TYPE? ,.NAME FUNCTION>>> + <RETURN #FALSE ("NOT A FUNCTION")>)> + <SET FCN ,.NAME> + <SET ARGL + <COND (<TYPE? <1 .FCN> LIST> <1 .FCN>) (ELSE <2 .FCN>)>> + <COND (<OR <MEMBER "TUPLE" .ARGL> + <MEMBER "ARGS" .ARGL> + <MEMBER "CALL" .ARGL> + <MEMBER "BIND" .ARGL>> + <RETURN #FALSE ("FUNCTION CAN'T BE MACROED")>)> + <COND (.MESSAGE + <PRINC "MACROING FUNCTION: " .MESSAGE> + <PRIN1 .NAME .MESSAGE> + <TERPRI .MESSAGE>)> + <COND (<NOT <ASSIGNED? DEFCODE>> + <SET DEFCODE <FORM DEFINE .NAME !.FCN>>)> + <MACMAK .STAT .DEFCODE> + <COND (<MCODE .STAT> + <EVAL <SET A <CHTYPE <REST <MCODE .STAT>> FORM>>> + <PUT <GLOC <2 .A>> DEFINE> + ;"Tells GROUP-DUMP that it has been changed" + .NAME)>>> + +\ + +;"Determines whether functions may become macros." + +<DEFINE DECIDER (FUNCN) + #DECL ((FUNCN) INFO) + <AND <NOT <REJECT .FUNCN>> + <CALLS .FUNCN> ;"IF TRUE HAS A TUPLE" + <NOT <MEMQ <FNAME .FUNCN> <CALLS .FUNCN>>> ;"Not recursive" + <N==? <CALLED .FUNCN> 0> ;"Used at least once ?" + <L? <* <CALLED .FUNCN> + <COND (,LINEAR 1) (ELSE <CALLED .FUNCN>)> + <- <LEN .FUNCN> ,MACRO-ALWAYS>> + ,MACRO-NEVER> ;"Not too long ?">> + +;"Creates macros from functions approved by DECIDER." + +<DEFINE MACMAK (FUNCN FUNC "AUX" ARGL) + #DECL ((ARGL) LIST (FUNC) FORM (FUNCN) INFO) + <SET ARGL + <COND (<==? <TYPE <3 .FUNC>> LIST> <3 .FUNC>) + (<PUT .FUNCN ,ACT <3 .FUNC>> <4 .FUNC>)>> + <MAPF <> + <FUNCTION (X) + #DECL ((X) <OR LIST STRING ATOM>) + <COND (<TYPE? .X ATOM> + <PUT .FUNCN ,COUNT (.X 0 !<COUNT .FUNCN>)>)>> + .ARGL> + <PUT .FUNCN ,MCODE <RECFORM .FUNCN .FUNC .ARGL>> + <PROGMAK .FUNCN .ARGL>> + +; +"This is called by MACMAK and finishes the transformation. It fixes the arg lists + and makes progs if needed." + +<DEFINE PROGMAK (FUNCN ARGL + "EXTRA" NODECL TEMP PROGL DELETE NARGL OPTIONAL AUX DECLP) + #DECL ((DECLP) FIX (NODECL AUX OPTIONAL DELETE) <OR ATOM FALSE> + (NARGL PROGL ARGL) LIST (FUNCN) INFO (TEMP) FORM) + <SET TEMP <MCODE .FUNCN>> ;"change format when this works" + <PUT .TEMP 2 DEFMAC> + <REPEAT ((COUNTL <COUNT .FUNCN>)) ;"if arg used >1 make prog" + #DECL ((COUNTL) <LIST [REST ATOM FIX]>) + <COND (<EMPTY? .COUNTL> <RETURN>) + (<G? <2 .COUNTL> 1> <PUT .FUNCN ,PROGM T> <RETURN>)> + <SET COUNTL <REST .COUNTL 2>>> + <SET PROGL ()> + <SET DELETE <>> + <SET NARGL ()> + <SET OPTIONAL <>> + <SET AUX <>> + <MAPF <> + <FUNCTION (X) + #DECL ((X) <OR LIST STRING ATOM>) + <COND (<OR <=? .X "ACT"> <=? .X "NAME">> <SET DELETE T>) + (.DELETE <PUT .FUNCN ,ACT .X> <SET DELETE <>>) + (<OR <=? .X "AUX"> <=? .X "EXTRA">> + <SET AUX T> + <PUT .FUNCN ,PROGM T>) + (.AUX <SET PROGL <LIST !.PROGL <RECFORM .FUNCN .X ()>>>) + (<=? .X "OPTIONAL"> + <PUT .FUNCN ,PROGM T> + <SET NARGL <LIST !.NARGL .X>> + <SET OPTIONAL T>) + (.OPTIONAL + <COND (<TYPE? .X LIST> + <SET PROGL + <LIST !.PROGL <LIST <1 .X> <FORM LVAL <1 .X>>>>> + <SET NARGL + <LIST !.NARGL + <LIST <FORM QUOTE <1 .X>> + <FORM QUOTE <2 .X>>>>>) + (<SET PROGL + <LIST !.PROGL + <FORM COND + <LIST <FORM ASSIGNED? .X> + <LIST .X <FORM LVAL .X>>> + <LIST T .X>>>> + <SET NARGL <LIST !.NARGL <FORM QUOTE .X>>>)>) + (T + <SET PROGL <LIST !.PROGL <LIST .X <FORM LVAL .X>>>> + <SET NARGL <LIST !.NARGL <FORM QUOTE .X>>>)>> + .ARGL> + <OR <PROGM .FUNCN> <ARGFIX .TEMP .ARGL>> ;"if a prog is not used then " + <COND (<TYPE? <4 .TEMP> ATOM> ;"if act is present remove and put on proplist" + <PUT .FUNCN ,ACT <4 .TEMP>> + <SET TEMP <FORM FORM DEFMAC <3 .TEMP> !<REST .TEMP 4>>>)> + <PUT .TEMP 4 .NARGL> + <SET DECLP + <COND (<TYPE? <5 .TEMP> DECL> <SET NODECL <>> 5) + ;"notes if decl is present and # is " + (<SET NODECL T> 4)>> ;"resting of struc for PROGFIX" + <COND (<AND <ACT .FUNCN> <PROGM .FUNCN>> + <PUTREST <REST .TEMP <- .DECLP 1>> + <FORM <CHTYPE (FORM + PROG + <ACT .FUNCN> + .PROGL + !<REST .TEMP .DECLP>) + FORM>>>) + (<ACT .FUNCN> + <PUTREST <REST .TEMP <- .DECLP 1>> + <FORM <CHTYPE (FORM + PROG + <ACT .FUNCN> + () + !<REST .TEMP .DECLP>) + FORM>>>) + (<PROGM .FUNCN> + <PUTREST <REST .TEMP <- .DECLP 1>> + <FORM <CHTYPE <CONS FORM + <CONS PROG + <CONS .PROGL <REST .TEMP .DECLP>>>> + FORM>>>)> + <OR .NODECL <DECLS .TEMP .FUNCN>> + <OR <PROGM .FUNCN> <LENGTH-CHECK .TEMP>> ;"if forms > 1 put in prog." + <PUT .FUNCN ,MCODE .TEMP>> + +; +"If the function has more than 1 form it's body should be surrounded + by an empty prog." + +<DEFINE LENGTH-CHECK (FUNC) + #DECL ((FUNC) FORM (VALUE) <OR LIST FALSE>) + <COND (<G? <LENGTH .FUNC> 5> + <PUTREST <REST .FUNC 3> + <FORM <FORM FORM PROG () !<REST .FUNC 4>>>>)>> + +;"Turns code into formed stuff for macro insertion." + +<DEFINE RECFORM (FUNCN FUNC ARGLIST "EXTRA" COUNTL EXPR) + #DECL ((FUNCN) INFO (ARGLIST) LIST (FUNC) ANY (COUNTL) <OR FALSE LIST>) + <COND + (<OR <MONAD? .FUNC> <==? <TYPE .FUNC> STRING>> .FUNC) + (<TYPE? .FUNC FORM SEGMENT> + <AND <==? <1 .FUNC> LVAL> + ;"hunts for lval's of arglist and keeps a count " + <SET COUNTL <MEMQ <2 .FUNC> <COUNT .FUNCN>>> + <PUT .COUNTL 2 <+ 1 <2 .COUNTL>>>> + <SET EXPR + <CHTYPE <CONS FORM + <MAPF ,LIST + <FUNCTION (X) <RECFORM .FUNCN .X .ARGLIST>> + .FUNC>> + FORM>> + <COND (<TYPE? .FUNC FORM> .EXPR) + (ELSE <FORM CHTYPE .EXPR SEGMENT>)>) + (<TYPE? .FUNC DECL> .FUNC) + (T + <CHTYPE <MAPF ,<PRIMTYPE .FUNC> + <FUNCTION (X) <RECFORM .FUNCN .X .ARGLIST>> + .FUNC> + <TYPE .FUNC>>)>> + +; +"This fixes function that are not progs. Used because recform helps to + determine whether functions should get progs. This deletes the FORM in + <FORM LVAL ARG>" + +<DEFINE ARGFIX (STRUC ARGLIS) + #DECL ((STRUC VALUE) ANY (ARGLIS) LIST) + <COND (<OR <MONAD? .STRUC> <TYPE? .STRUC STRING>>) + (<REPEAT ((N <LENGTH .STRUC>) (ELE <NTH .STRUC .N>)) + #DECL ((N) FIX (ELE VALUE) ANY) + <COND (<TYPE? .ELE FORM> + <AND <G? <LENGTH .ELE> 2> + <==? <2 .ELE> LVAL> + <MEMQ <3 .ELE> .ARGLIS> + <PUT .STRUC .N <FORM LVAL <3 .ELE>>>> + <ARGFIX .ELE .ARGLIS>) + (<TYPE? .ELE SEGMENT> + <AND <==? <2 .ELE> LVAL> + <MEMQ <3 .ELE> .ARGLIS> + <PUT .STRUC + .N + <CHTYPE <FORM LVAL <3 .ELE>> SEGMENT>>> + <ARGFIX .ELE .ARGLIS>) + (<TYPE? .ELE DECL>) + (<ARGFIX .ELE .ARGLIS>)> + <SET N <- .N 1>> + <COND (<0? .N> <RETURN T>) + (<SET ELE <NTH .STRUC .N>>)>>)>> + +;"Moves the decl into the prog" + +<DEFINE DECLS (FUNC FUNCN "EXTRA" PROGL) + #DECL ((FUNC) FORM (FUNCN) INFO (VALUE) LIST) + <COND (<NOT <PROGM .FUNCN>>) ;"if no prog" + (<SET PROGL <NTH .FUNC 6>> + <PUT .FUNC + 6 + <FORM FORM + PROG + <NTH .PROGL 3> + <NTH .FUNC 5> + !<REST .PROGL 3>>>)> + <PUTREST <REST .FUNC 3> <REST .FUNC 5>> ;"remove old decl"> + +;"Takes a list of entries and PUTs a REJECT tag on them." + +<DEFINE PROCESS-ENTRY (FUNL) + #DECL ((FUNL) LIST) + <MAPF <> + <FUNCTION (X "EXTRA" STAT) + #DECL ((X) ATOM (STAT) <OR FALSE INFO>) + <COND (<NOT <SET STAT <GETPROP .X .INFO>>>) + (<NOT ,ENTRY-ALLOW> <PUT .STAT ,REJECT T>) + (<TYPE? ,ENTRY-ALLOW FIX> + <PUT .STAT + ,CALLED + <+ ,ENTRY-ALLOW <CALLED .STAT>>>) + (ELSE <PUT .STAT ,CALLED 1000>)>> + .FUNL>> + +<ENDPACKAGE> diff --git a/src/mprog/macros.ubkd02 b/src/mprog/macros.ubkd02 new file mode 100644 index 00000000..f1d4c0cf --- /dev/null +++ b/src/mprog/macros.ubkd02 @@ -0,0 +1,245 @@ + +<RPACKAGE "MACROS"> + +<ENTRY DO CASE INC DEC CHOP IF IF-NOT PRIMTYPE?> + +; +"Sample DO usage +<DO ((X 1 10) + \"UNTIL\" (<==? .Y STOP> + <ERROR EARLY-STOP> + #FALSE (\"NO-MORE\")) + \"GEN\" (Z .FOO <REST .FOO .X> <EMPTY? .Z> <ERROR Z-RAN-OUT> T) + \"EXTRA\" Y) + <COND (<SET Y <NTH ,DATA .X>> + <PRINT .Y>)> + <PRIN1 <1 .Z>>> +" + +<DEFMAC DO ('ARGL + "ARGS" BODY + "EXTRA" (PRE-CODE ()) (POST-CODE ()) (PRE-TEST ()) (POST-TEST ()) + (STATE ,:FOR) (RETURNS ())) + #DECL ((ARGL BODY) LIST (STATE) FIX (RETURNS) <SPECIAL LIST> + (POST-CODE PRE-TEST POST-TEST) <SPECIAL <LIST [REST <LIST ANY>]>> + (PRE-CODE) <SPECIAL LIST> (VALUE) FORM) + <SET ARGL + <MAPF ,LIST + <FUNCTION (NAM) + <COND (<TYPE? .NAM STRING> + <COND (<=? .NAM "FOR"> <SET STATE ,:FOR>) + (<=? .NAM "GEN"> <SET STATE ,:GEN>) + (<=? .NAM "WHILE"> + <SET STATE ,:WHILE>) + (<=? .NAM "UNTIL"> + <SET STATE ,:UNTIL>) + (<=? .NAM "VALUE"> + <SET STATE ,:VALUE>) + (<OR <=? .NAM "EXTRA"> <=? .NAM "AUX">> + <SET STATE ,:NONE>) + (ELSE <SET STATE ,:NONE> <MAPRET .NAM>)>) + (<==? .STATE ,:NONE> <MAPRET .NAM>) + (ELSE + <COND (<NOT <TYPE? .NAM LIST>> + <SET NAM (.NAM)>)> + <CASE ,==? .STATE + (,:FOR <MAPRET <DO-FOR !.NAM>>) + (,:GEN <MAPRET <DO-GEN !.NAM>>) + (,:WHILE <DO-WHILE !.NAM>) + (,:UNTIL <DO-UNTIL !.NAM>) + (,:VALUE <DO-VALUE !.NAM>)>)> + <MAPRET>> + .ARGL>> + <SET RETURNS <COND-BODY '(<RETURN T>) .RETURNS>> + <FORM REPEAT + .ARGL + !<MAPF ,LIST <FUNCTION (L) + #DECL ((L) <LIST ANY>) + <MAKE-COND <1 .L> .RETURNS <REST .L>>> + .PRE-CODE> ;"FOR tests" + !<MAPF ,LIST <FUNCTION (L) + #DECL ((L) <LIST ANY>) + <MAKE-COND <1 .L> .RETURNS <REST .L>>> + .PRE-TEST> ;"WHILE tests" + !.BODY + !<MAPF ,LIST <FUNCTION (L) + #DECL ((L) <LIST ANY>) + <MAKE-COND <1 .L> .RETURNS <REST .L>>> + .POST-TEST> ;"UNTIL tests" + !.POST-CODE ;"FOR updates">> + + +<AND? <SETG :NONE 0> + <SETG :FOR 1> + <SETG :GEN 2> + <SETG :UNTIL 3> + <SETG :WHILE 4> + <SETG :VALUE 5> + <MANIFEST :NONE :FOR :GEN :UNTIL :WHILE :VALUE>> +\ + +;"Generators for DO" + +<DEFINE DO-FOR ;"Make a variable declaration and a test for FOR looping" + (VARIABLE "OPTIONAL" (INITIAL 1) FINAL (STEP 1) "TUPLE" VAL) + #DECL ((VAL) TUPLE (PRE-CODE POST-CODE) LIST) + <COND (<OR <NOT <ASSIGNED? FINAL>> + <==? .STEP 0> + <==? .STEP 0.0000000>>) + (<AND <TYPE? .STEP FIX FLOAT> <G? .STEP 0>> ;"Stepping up ?" + <SET PRE-CODE + (!.PRE-CODE + (<FORM G? <FORM LVAL .VARIABLE> .FINAL> !.VAL))>) + (<AND <TYPE? .STEP FIX FLOAT> <L? .STEP 0>> ;"Stepping down ?" + <SET PRE-CODE + (!.PRE-CODE + (<FORM L? <FORM LVAL .VARIABLE> .FINAL> !.VAL))>) + (ELSE ;"Assume unknown stepping direction" + <SET PRE-CODE + (!.PRE-CODE + (<FORM COND + (<FORM G? .STEP 0> + <FORM G? <FORM LVAL .VARIABLE> .FINAL>) + (<FORM L? .STEP 0> + <FORM L? <FORM LVAL .VARIABLE> .FINAL>)> + !.VAL))>)> + <SET POST-CODE + (!.POST-CODE + <FORM SET .VARIABLE <FORM + <FORM LVAL .VARIABLE> .STEP>>)> + (.VARIABLE .INITIAL)> + +<DEFINE DO-GEN ;"Make a variable declaration and a test for FOR looping" + (VARIABLE "OPTIONAL" (INITIAL ()) STEP PRED "TUPLE" VAL) + #DECL ((VARIABLE) ATOM (VAL) TUPLE (PRE-CODE POST-CODE) LIST) + <COND (<ASSIGNED? PRED> + <SET PRE-CODE + (!.PRE-CODE (.PRED !.VAL))>)> + <COND (<ASSIGNED? STEP> + <SET POST-CODE (!.POST-CODE <FORM SET .VARIABLE .STEP>)>)> + (.VARIABLE .INITIAL)> + +<DEFINE DO-WHILE (EXPR "TUPLE" VAL) ;"Make a test to do looping WHILE" + #DECL ((VAL) TUPLE (PRE-TEST) LIST) + <SET PRE-TEST + (!.PRE-TEST + (<FORM NOT .EXPR> !.VAL))>> + +<DEFINE DO-UNTIL (EXPR "TUPLE" VAL) ;"Make a test to do looping UNTIL" + #DECL ((VAL) TUPLE (POST-TEST) LIST) + <SET POST-TEST + (!.POST-TEST (.EXPR !.VAL))>> + +<DEFINE DO-VALUE ("TUPLE" BODY) + #DECL ((BODY) TUPLE (RETURNS) LIST) + <COND (<NOT <EMPTY? .RETURNS>> + <ERROR TOO-MANY!-ERRORS "VALUE" DO>) + (ELSE <SET RETURNS (!.BODY)>)>> + +<DEFINE MAKE-COND (PRED DEF BODY) + #DECL ((VALUE) <FORM ATOM LIST> (DEF BODY) LIST) + <FORM COND (.PRED !<COND-BODY .DEF .BODY>)>> + +<DEFINE COND-BODY (DEF BODY) + #DECL ((VALUE) LIST (DEF BODY) LIST) + <COND (<EMPTY? .BODY> .DEF) + (ELSE + <SET DEF <REST .BODY <- <LENGTH .BODY> 1>>> + <PUT .DEF 1 <FORM RETURN <1 .DEF>>> + .BODY)>> + +\ + +; +"Sample CASE usage +<CASE ,TYPE? <GET .FOO DATA> + (ATOM <PRINT IDENTIFIER> 0) + (FIX <PRINT INTEGER> 1) + (FLOAT <PRINT REAL> 2) + DEFAULT + (<PRINT OTHER> 3) + (!'(LIST VECTOR UVECTOR ,XTRA) <PRINT STRUCTURE> 4) + (STRING <PRINT STRING> 5)> +" + +<DEFMAC CASE ('PRED 'EXPR "ARGS" CASES "EXTRA" (DEFAULT-CASE <>)) + #DECL ((CASES) LIST (DEFAULT-CASE) <OR FALSE LIST> (VALUE) FORM) + <COND (<AND <TYPE? .PRED FORM> + <==? <LENGTH .PRED> 2> + <==? <1 .PRED> GVAL> + <TYPE? <2 .PRED> ATOM>> + <SET PRED <2 .PRED>>)> + <FORM + BIND + ((OB .EXPR)) + <FORM + COND + !<MAPF ,LIST + <FUNCTION (PHRASE "EXTRA" EXPR) + <COND (<==? .PHRASE DEFAULT> + <COND (.DEFAULT-CASE + <ERROR TOO-MANY-DEFAULTS!-ERRORS CASE>) + (ELSE <SET DEFAULT-CASE ()>)> + <MAPRET>) + (<OR <NOT <TYPE? .PHRASE LIST>> <EMPTY? .PHRASE>> + <ERROR BAD-CLAUSE!-ERRORS CASE>) + (<AND .DEFAULT-CASE <EMPTY? .DEFAULT-CASE>> + <SET DEFAULT-CASE ((DEFAULT !.PHRASE))> + <MAPRET>) + (<NOT <TYPE? <SET EXPR <1 .PHRASE>> SEGMENT>> + (<FORM .PRED '.OB .EXPR> !<REST .PHRASE>)) + (<EMPTY? .EXPR> (<FORM .PRED '.OB> !<REST .PHRASE>)) + (<==? <1 .EXPR> QUOTE> + <COND (<OR <EMPTY? <REST .EXPR>> + <NOT <STRUCTURED? <2 .EXPR>>>> + <ERROR ILLEGAL-SEGMENT!-ERRORS CASE>) + (ELSE + (<DO-SEG .PRED (!<2 .EXPR>)> !<REST .PHRASE>))>) + (ELSE (<FORM .PRED '.OB .EXPR> !<REST .PHRASE>))>> + .CASES> + !.DEFAULT-CASE>>> + +<DEFINE DO-SEG (PRED OPS) + #DECL ((OPS) LIST (VALUE) FORM) + <COND (<OR <==? .PRED TYPE?> <==? .PRED PRIMTYPE?> <EMPTY? .OPS>> + <CHTYPE (.PRED '.OB !.OPS) FORM>) + (ELSE + <CHTYPE (OR + !<MAPF ,LIST + <FUNCTION (X) <FORM .PRED '.OB .X>> + .OPS>) + FORM>)>> + +\ + +<DEFMAC INC ('ATM "OPTIONAL" ('AMT 1)) + <FORM SET .ATM <FORM + <FORM LVAL .ATM> .AMT>>> + +<DEFMAC DEC ('ATM "OPTIONAL" ('AMT 1)) + <FORM SET .ATM <FORM - <FORM LVAL .ATM> .AMT>>> + +<DEFMAC CHOP ('ATM "OPTIONAL" ('AMT 1)) + <FORM SET .ATM <FORM REST <FORM LVAL .ATM> .AMT>>> + +<DEFMAC IF ("ARGS" BODY) <FORM COND .BODY>> + +<DEFMAC IF-NOT ('PRED "ARGS" BODY) <FORM COND (<FORM NOT .PRED> !.BODY)>> + +<DEFMAC PRIMTYPE? ('EXPR "ARGS" BODY) + #DECL ((BODY) LIST) + <COND (<EMPTY? .BODY> + <ERROR TOO-FEW-ARGUMENTS-SUPPLIED!-ERRORS PRIMTYPE?>) + (<EMPTY? <REST .BODY>> + <FORM ==? <FORM PRIMTYPE .EXPR> <1 .BODY>>) + (ELSE + <FORM PROG + ((OB <FORM PRIMTYPE .EXPR>)) + #DECL ((OB) ATOM (VALUE) <OR FALSE ATOM>) + <FORM COND + (<CHTYPE (OR + !<MAPF ,LIST + <FUNCTION (X) <FORM ==? '.OB .X>> + .BODY>) + FORM> + '.OB)>>)>> + +<ENDPACKAGE> diff --git a/src/mprog/mcomb.ubkd29 b/src/mprog/mcomb.ubkd29 new file mode 100644 index 00000000..614e29c5 --- /dev/null +++ b/src/mprog/mcomb.ubkd29 @@ -0,0 +1,161 @@ + +<PACKAGE "MCOMB"> + +;"MESSAGE COMB" + +<ENTRY SAVE-MCOMB MCOMB SHORTPR JUNK-MAIL? MSG-QUERY?> + +<USE "M.DAC" "GC"> + +<SETG MSG-QUERY? <>> ;"Query user before printing whole message?" + +<GDECL (MSG-QUERY?) <OR ATOM FALSE> + (JUNK-MAIL?) APPLICABLE ;"User's Mail Filter Function"> + +<DEFINE MCOMB ("EXTRA" H) + #DECL ((H) HANDLER) + <COND (<AND <NOT <OPEN "READ" "LIBCOM;STAY DOWN">> + <DOPEN>> + <SET H <ON "CHAR" ,COMBH 100 0 .INCHAN>> + <DO-COMB> + <OFF .H> <DCLOSE> + "DONE") + (ELSE <TERPRI> + <PRINC "Mail Data Base not available.">)>> + +<DEFINE DO-COMB ("EXTRA" N NXTMSG "ACT" MC) + #DECL ((N) <OR FALSE FIX> (NXTMSG) FIX (MC) <SPECIAL ACTIVATION>) + <COND (<SET N <MSG-NUMBER "LIBCOM;NXTMSG >">> <SET NXTMSG .N>) + (ELSE <ERROR .N>)> + <COND (<SET N <MSG-NUMBER "_MCOMB >">> + <FLOAD "_MCOMB >"> ;"Load user's initialization") + (ELSE + <SET N <OR <MSG-NUMBER "LIBTMP;MDB <"> .NXTMSG>> + <CLOSE <OPEN "PRINT" "_MCOMB" <UNPARSE .N>>>)> + <RESET .INCHAN> + <REPEAT ((MSG .N) (OUTCHAN .OUTCHAN) (INCHAN .INCHAN)) + #DECL ((MSG) FIX (OUTCHAN INCHAN) CHANNEL) + <COND (<L? .MSG .NXTMSG> ;"More Messages left to process?") + (<NOT <SET N <MSG-NUMBER "LIBCOM;NXTMSG >">>> + <ERROR .N>) + (<L? .MSG <SET NXTMSG .N>> ;"New arrivals?") + (ELSE <RETURN>)> + <COND (<SHORTPR .MSG> + <PREVENT-GC> + <PUT .OUTCHAN 14 0> <PRINC "A--Next?--NA"> + <RESET .INCHAN>)> + <SET MSG <+ .MSG 1>> ;"Go on to next Message" + <RENAME "_MCOMB >" TO "_MCOMB" <UNPARSE .MSG>>>> + +<DEFINE MSG-NUMBER (STR "EXTRA" CHN S X) + #DECL ((STR S) STRING (CHN) <OR FALSE CHANNEL> (VALUE X) <OR FALSE FIX>) + <PROG () + <COND (<NOT <SET CHN <OPEN "READ" .STR>>> + <RETURN <CHTYPE ("NO FILE" .STR) FALSE>>)> + <SET S <8 .CHN>> + <CLOSE .CHN> + <COND (<NOT <TYPE? <SET X <PARSE .S>> FIX>> + <RETURN <CHTYPE ("BAD FILE" .STR) FALSE>>)> + .X>> + +<DEFINE SHORTPR (MSG "AUX" FROM TO S L (OUTCHAN .OUTCHAN) CH H "ACT" SP) + #DECL ((MSG) FIX (VALUE) <OR FALSE ATOM> (CH) CHARACTER + (S) ANY (TO L) <OR FALSE LIST> (FROM) <OR FALSE STRING> + (OUTCHAN) CHANNEL (SP) <SPECIAL ACTIVATION>) + <COND (<NOT <MSLOCK .MSG>> + <PUT .OUTCHAN 14 0> <PRINC "CMESSAGE #"> + <PRIN1 .MSG> <PRINC " CAN'T BE LOCKED."> + <RETURN T .SP>)> + <SET FROM <DRDMSG "" "FROM">> + <SET TO <DRDMSG "" "TO">> + <COND (<AND <GASSIGNED? JUNK-MAIL?> + <APPLY ,JUNK-MAIL? .MSG .FROM .TO>> + <RETURN <> .SP>)> + <PUT .OUTCHAN 14 0> <PRINC "CMESSAGE #"> <PRIN1 .MSG> + <COND (<OR ,MSG-QUERY? <==? <SET H <DRDMSG "" "RECEIVED-FROM-HOST">> 70>> + <COND (.FROM + <PUT .OUTCHAN 14 0> + <PRINC "AFrom: "> + <PRINC .FROM>)> + <COND (.TO + <PUT .OUTCHAN 14 0> + <PRINC "ATo: "> + <PR-ADRL .TO " ">)> + <COND (<SET L <DRDMSG "" "CARBON-COPY-TO">> + <PUT .OUTCHAN 14 0> + <PRINC "AAlso To: "> + <PR-ADRL .L " ">)> + <COND (<SET S <DRDMSG "" "SUBJECT">> + <PUT .OUTCHAN 14 0> + <PRINC "ASubject: "> + <PRINC .S>)>) + (<OR <==? .H 134> <==? .H 198> <==? .H 236>> + <COND (.TO + <PUT .OUTCHAN 14 0> + <PRINC "ATo: "> + <PR-ADRL .TO " ">)>)> + <COND (<AND ,MSG-QUERY? <OR .FROM .TO>> + <PUT .OUTCHAN 14 0> + <PRINC "A--Text?--"> + <RESET .INCHAN> + <PREVENT-GC> + <SET CH <TYI>> + <TERPRI> + <COND (<N==? .CH <ASCII 32>> <RETURN <> .SP>)>)> + <PUT .OUTCHAN 14 0> <PRINC "A"> + <COND (<SET S <DRDMSG "" "TEXT">> <PRINC .S>) + (ELSE <PRINC "(UNAVAILABLE)"> + <COND (,MSG-QUERY? <RETURN <> .SP>)>)> + T> + +<DEFINE PR-ADRL (L "OPTIONAL" PREFIX + "EXTRA" (OUTCHAN .OUTCHAN) (LL <13 .OUTCHAN>) U) + #DECL ((L) LIST (OUTCHAN) CHANNEL (PREFIX U) STRING (LL) FIX) + <REPEAT () + <COND (<EMPTY? .L> <RETURN>) + (<TYPE? <1 .L> STRING> <SET U <1 .L>>) + (ELSE <SET U <UNPARSE <1 .L>>>)> + <COND (<G? <+ <14 .OUTCHAN> <LENGTH .U> 3> .LL> + <TERPRI> + <COND (<ASSIGNED? PREFIX> <PRINC .PREFIX>)>)> + <PRINC .U> + <COND (<NOT <EMPTY? <SET L <REST .L>>>> <PRINC ", ">)>>> + +<DEFINE COMBH (CHAR CHAN "EXTRA" X) + #DECL ((CHAR) CHARACTER (CHAN) CHANNEL (X) ANY) + <COND (<==? .CHAR <ASCII 19>> ;"^S" + <RESET .CHAN> + <COND (<AND <ASSIGNED? SP> + <TYPE? <SET X .SP> ACTIVATION> + <LEGAL? .X>> + <RESET ,OUTCHAN> + <DISMISS T .X>)> + <DISMISS T>) + (<==? .CHAR <ASCII 7>> ;"^G" + <RESET .CHAN> + <COND (<AND <ASSIGNED? MC> + <TYPE? <SET X .MC> ACTIVATION> + <LEGAL? .X>> + <RESET ,OUTCHAN> + <DISMISS T .X>)> + <DISMISS T>) + (<==? .CHAR <ASCII 26>> ;"^Z" + <RESET .CHAN> + <RESET ,OUTCHAN> + <INT-LEVEL 0> + <ERROR CONTROL-G?!-ERRORS>)>> + +<DEFINE SAVE-MCOMB ("OPTIONAL" (FIL "LIBSAV;MCOMB SAVE") (GC? T) + "EXTRA" (SN <SNAME>)) + #DECL ((FIL SN) STRING (GC?) <OR FALSE ATOM>) + <AND .GC? <GC 0 T>> + <SNAME ""> + <COND (<=? <SAVE .FIL <>> "SAVED"> <SNAME .SN> .FIL) + (ELSE + <PUT .OUTCHAN 14 0> <PRINC "CMAIL COMB"> + <DIVERT> <SETG DIVERT-LMT 40000> + <COND (<=? <JNAME> "STOP"> <ERRET>)> + <MCOMB> + <QUIT>)>> + +<ENDPACKAGE> diff --git a/src/mprog/mfd.udl004 b/src/mprog/mfd.udl004 new file mode 100644 index 00000000..4c802068 --- /dev/null +++ b/src/mprog/mfd.udl004 @@ -0,0 +1,63 @@ + +<PACKAGE "MFD"> + +<ENTRY GET-MFD DIR-FREE ALL-FREE FREE-DESC> + +<SET CRSP <STRING <ASCII 13> <ASCII 32>>> + +<SET CBUF <ISTRING 10 <ASCII 32>>> + +<DEFINE DIR-FREE ("OPTIONAL" (DIR <SNAME>) BUF + "AUX" (D <COND (<ASSIGNED? BUF> <GET-DIRECTORY .DIR .BUF>) + (ELSE <GET-DIRECTORY .DIR>)>) + (DESC </ <+ <1 .D> 5> 6>)) + #DECL ((DIR) STRING (BUF) UVECTOR (D) <UVECTOR [REST FIX]> (VALUE) FIX) + <+ <- <2 .D> </ .DESC 6> 11> + <FREE-DESC <REST .D 11> .DESC>>> + +<DEFINE GET-DIRECTORY ("OPTIONAL" (SNM <SNAME>) (BUF <IUVECTOR 1024 0>) + "AUX" (INCHAN + <OPEN "READB" ".FILE." "(DIR)" "DSK" .SNM>)) + #DECL ((SNM) STRING (BUF) <UVECTOR [1024 FIX]> + (INCHAN) <OR CHANNEL FALSE> (VALUE) <OR UVECTOR FALSE>) + <COND (.INCHAN <READB .BUF .INCHAN> <CLOSE .INCHAN> .BUF)>> + +<DEFINE ALL-FREE ("OPTIONAL" MFD "AUX" (BUF <IUVECTOR 1024 0>)) + #DECL ((MFD) VECTOR (BUF) <UVECTOR [REST FIX]>) + <COND (<NOT <ASSIGNED? MFD>> <SET MFD <GET-MFD>>)> + <MAPR <> + <FUNCTION (M "AUX" (M1 <1 .M>)) + #DECL ((M) VECTOR (M1) STRING) + <PUT .M 1 (.M1 <DIR-FREE .M1 .BUF>)>> + .MFD> + .MFD> + +<DEFINE GET-MFD ("OPTIONAL" (DEV "DSK") + "AUX" S (INCHAN <OPEN "READ" "M.F.D." "(FILE)" .DEV>) MFD) + #DECL ((S) <OR STRING FALSE> (DEV CBUF CRSP) STRING + (VALUE MFD) <VECTOR [REST STRING]> (INCHAN) <SPECIAL <OR FALSE CHANNEL>>) + <COND (.INCHAN + <SET MFD + <MAPF + ,VECTOR + <FUNCTION () + <COND + (<PROG (CNT) + #DECL ((CNT) FIX) + <READCHR> + <COND (<SET CNT <READSTRING .CBUF .INCHAN .CRSP '<>>> + <SET S <SUBSTRUC .CBUF 0 .CNT>> + <COND (<READSTRING .CBUF .INCHAN " " '<>> + <READCHR>)>)>> + .S) + (T <MAPSTOP>)>>>> + <CLOSE .INCHAN> + <SORT <> .MFD>)>> + +<SETG FREE-DESC %<FIXUP!-RSUBRS!- '[#CODE ![17207394305 -25073401472 17215782915 +-34342961152 -34351349760 32383434765 12348030979 28189130762 -26038239231 +23088857093 28734390276 -34091302911 30621827077 17188483073 20552089606 +23085678206 6006031871 0 2!] FREE-DESC #DECL ("VALUE" FIX UVECTOR FIX)] '(49 +$TLOSE!-MUDDLE 225280 (14) FINIS!-MUDDLE 228990 (16))>> + +<ENDPACKAGE> diff --git a/src/mprog/mudcom.utt045 b/src/mprog/mudcom.utt045 new file mode 100644 index 00000000..fcdcd43e --- /dev/null +++ b/src/mprog/mudcom.utt045 @@ -0,0 +1,239 @@ +<DEFINE N-KILL (LIST POS) + #DECL ((LIST VALUE) LIST (POS) FIX) + <COND (<1? .POS> <REST .LIST>) + (<PUTREST <REST .LIST <- .POS 2>> <REST .LIST .POS>> .LIST)>> + +<DEFINE N-APPEND (LIST1 LIST2) + #DECL ((LIST1 LIST2 VALUE) LIST) + <COND (<EMPTY? .LIST1> .LIST2) + (<PUTREST <REST .LIST1 <- <LENGTH .LIST1> 1>> .LIST2> + .LIST1)>> + +<DEFINE APPEND (A B) #DECL ((A B VALUE) LIST) (!.A !.B)> + +<DEFINE N-APPENDG (LIST-OF-LISTS) + #DECL ((LIST-OF-LISTS) <LIST [REST LIST]> (VALUE) LIST) + <REPEAT ((TEMP-POS <LENGTH .LIST-OF-LISTS>) + (NEW-LIST + <COND (<0? .TEMP-POS> <RETURN ()>) + (<NTH .LIST-OF-LISTS .TEMP-POS>)>)) + #DECL ((VALUE NEW-LIST) LIST (TEMP-POS) FIX) + <SET TEMP-POS <- .TEMP-POS 1>> + <AND <0? .TEMP-POS> <RETURN .NEW-LIST>> + <SET NEW-LIST + <N-APPEND <NTH .LIST-OF-LISTS .TEMP-POS> .NEW-LIST>>>> + +<DEFINE APPENDG (LIST-OF-LISTS) + #DECL ((LIST-OF-LISTS) <LIST [REST LIST]> (VALUE) LIST) + <REPEAT ((NEW-LIST ()) (TEMP-POS <LENGTH .LIST-OF-LISTS>)) + #DECL ((NEW-LIST VALUE) LIST (TEMP-POS) FIX) + <AND <0? .TEMP-POS> <RETURN .NEW-LIST>> + <SET NEW-LIST + <APPEND <NTH .LIST-OF-LISTS .TEMP-POS> .NEW-LIST>> + <SET TEMP-POS <- .TEMP-POS 1>>>> + +<DEFINE TOP-LEVEL1 (LIST) + #DECL ((LIST VALUE) LIST) + <REPEAT ((LIST1 ()) (LIST2 ())) + #DECL ((LIST1 LIST2 VALUE) LIST) + <AND <EMPTY? .LIST> + <RETURN <APPEND .LIST1 <APPENDG .LIST2>>>> + <COND (<OR <==? <TYPE <1 .LIST>> LIST> + <==? <TYPE <1 .LIST>> VECTOR> + <==? <TYPE <1 .LIST>> UVECTOR>> + <SET LIST2 <CONS <1 .LIST> .LIST2>>) + (<SET LIST1 <CONS <1 .LIST> .LIST1>>)> + <SET LIST <REST .LIST>>>> + +<DEFINE UNION2 (BIG-SET SMALL-SET) + #DECL ((BIG-SET SMALL-SET VALUE) LIST) + <REPEAT () + #DECL ((VALUE) LIST) + <AND <EMPTY? .SMALL-SET> <RETURN .BIG-SET>> + <OR <MEMBER <1 .SMALL-SET> .BIG-SET> + <SET BIG-SET <CONS <1 .SMALL-SET> .BIG-SET>>> + <SET SMALL-SET <REST .SMALL-SET>>>> + +<DEFINE UNION (SET-OF-SETS) + #DECL ((SET-OF-SETS) <LIST [REST LIST]> (VALUE) LIST) + <REPEAT ((NEW-SET-OF-SETS ())) + #DECL ((NEW-SET-OF-SETS VALUE) LIST) + <AND <EMPTY? .SET-OF-SETS> <RETURN .NEW-SET-OF-SETS>> + <SET NEW-SET-OF-SETS + <UNION2 .NEW-SET-OF-SETS <1 .SET-OF-SETS>>> + <SET SET-OF-SETS <REST .SET-OF-SETS>>>> + +<DEFINE SET-MINUS (BIG-SET SMALL-SET "OPTIONAL" (TAG CHANGED?)) + #DECL ((BIG-SET SMALL-SET VALUE) LIST + (TAG) ATOM + (CHANGED?) <SPECAIL ATOM>) + <PROG () + #DECL ((VALUE) LIST) + <SET .TAG <>> + <REPEAT ((DIFFERENCE ())) + #DECL ((DIFFERENCE) LIST) + <AND <EMPTY? .BIG-SET> <RETURN .DIFFERENCE>> + <COND (<MEMBER <1 .BIG-SET> .SMALL-SET> <SET .TAG T>) + (<SET DIFFERENCE <CONS <1 .BIG-SET> .DIFFERENCE>>)> + <SET BIG-SET <REST .BIG-SET>>>>> + +<DEFINE ADD-TO (SET ITEM) + #DECL ((SET VALUE) LIST) + <COND (<MEMBER .ITEM .SET> .SET) (<CONS .ITEM .SET>)>> + +<DEFINE RE-GROUP (GROUP-OF-SETS SET) + #DECL ((GROUP-OF-SETS) <LIST [REST LIST]> + (VALUE SET) LIST) + <REPEAT ((NEW-GROUP ()) + (TEST-SET .SET) + (CHECKED-GROUP ()) + (UNCHECKED-GROUP .GROUP-OF-SETS) + changed?) + #DECL ((TEST-SET VALUE) LIST + (NEW-GROUP CHECKED-GROUP UNCHECKED-GROUP) + <LIST [REST LIST]> + (changed?) <SPECIAL ANY>) + <AND <EMPTY? .TEST-SET> + <RETURN <N-APPENDG ((<APPENDG .NEW-GROUP>) + .CHECKED-GROUP + .UNCHECKED-GROUP)>>> + <AND <EMPTY? .UNCHECKED-GROUP> + <RETURN <CONS <APPENDG <CONS .TEST-SET .NEW-GROUP>> + .CHECKED-GROUP>>> + <SET TEST-SET + <SET-MINUS .TEST-SET <1 .UNCHECKED-GROUP> changed?>> + <COND (.changed? + <SET NEW-GROUP <CONS <1 .UNCHECKED-GROUP> .NEW-GROUP>>) + (<SET CHECKED-GROUP + <CONS <1 .UNCHECKED-GROUP> .CHECKED-GROUP>>)> + <SET UNCHECKED-GROUP <REST .UNCHECKED-GROUP>>>> + + +<DEFINE PRINT&SET (ATOM CHANNEL) + #DECL ((ATOM) ATOM (CHANNEL) CHANNEL) + <PROG () + <PRINC "<SET " .CHANNEL> + <PRIN1 .ATOM .CHANNEL> + <PRINC " " .CHANNEL> + <PPRINT ..ATOM .CHANNEL> + <PRINC "> +" .CHANNEL>>> + +<DEFINE SIMPLIFY (SET) + #DECL ((SET VALUE) LIST) + <REPEAT ((NEW-SET ())) + #DECL ((NEW-SET VALUE) LIST) + <AND <EMPTY? .SET> <RETURN .NEW-SET>> + <OR <MEMBER <1 .SET> .NEW-SET> + <SET NEW-SET <CONS <1 .SET> .NEW-SET>>> + <SET SET <REST .SET>>>> + +<DEFINE STRUCTURE (SO) + #DECL ((SO) STRUCTURED (VALUE) SUBR) + <COND (<==? <PRIMTYPE .SO> LIST> ,LIST) + (<==? <PRIMTYPE .SO> VECTOR> ,VECTOR) + (<==? <PRIMTYPE .SO> UVECTOR> ,UVECTOR) + (<==? <PRIMTYPE .SO> STRING> ,STRING)>> + +<DEFINE ISTRUCTURE (SO) + #DECL ((SO) STRUCTURED (VALUE) SUBR) + <COND (<==? <PRIMTYPE .SO> LIST> ,ILIST) + (<==? <PRIMTYPE .SO> VECTOR> ,IVECTOR) + (<==? <PRIMTYPE .SO> UVECTOR> ,IUVECTOR) + (<==? <PRIMTYPE .SO> STRING> ,ISTRING) + (<==? <PRIMTYPE .SO> STORAGE> ,ISTORAGE)>> + +<DEFINE N-SECTION (SO BEG-POS END-POS) + #DECL ((SO VALUE) STRUCTURED (BEG-POS END-POS) FIX) + <REPEAT ((LEN1 <- .BEG-POS 1>) + (NEW-SO + <REST .SO <- <LENGTH .SO> <+ <- .END-POS .BEG-POS> 1>>>) + (TEMP-POS <LENGTH .NEW-SO>)) + #DECL ((LEN1 TEMP-POS) FIX (VALUE NEW-SO) STRUCTURED) + <AND <0? .TEMP-POS> <RETURN .NEW-SO>> + <PUT .NEW-SO .TEMP-POS <NTH .SO <+ .LEN1 .TEMP-POS>>> + <SET TEMP-POS <- .TEMP-POS 1>>>> + +<DEFINE SECTION (SO BEG-POS END-POS) + #DECL ((SO VALUE) STRUCTURED (BEG-POS END-POS) FIX) + <PROG ((NEW-SO <APPLY <ISTRUCTURE .SO> <- .END-POS .BEG-POS -1>>)) + #DECL ((NEW-SO VALUE) STRUCTURED) + <AND <==? <PRIMTYPE .SO> UVECTOR> + <CHUTYPE .NEW-SO <UTYPE .SO>>> + <REPEAT ((TEMP-POS .END-POS)) + #DECL ((TEMP-POS) FIX (VALUE) STRUCTURED) + <AND <L? .TEMP-POS .BEG-POS> <RETURN .NEW-SO>> + <PUT .NEW-SO <- .TEMP-POS .BEG-POS -1> <NTH .SO .TEMP-POS>> + <SET TEMP-POS <- .TEMP-POS 1>>>>> + +<DEFINE N-GET-RID-OF (SO BEG-POS END-POS) + #DECL ((SO VALUE) STRUCTURED (BEG-POS END-POS) FIX) + <REPEAT ((NEW-SO <REST .SO <+ 1 <- .END-POS .BEG-POS>>>) + (TEMP-POS <- .BEG-POS 1>)) + #DECL ((NEW-SO VALUE) STRUCTURED (TEMP-POS) FIX) + <AND <0? .TEMP-POS> <RETURN .NEW-SO>> + <PUT .NEW-SO .TEMP-POS <NTH .SO .TEMP-POS>> + <SET TEMP-POS <- .TEMP-POS 1>>>> + +<DEFINE GET-RID-OF (SO BEG-POS END-POS) + #DECL ((SO VALUE) STRUCTURED (BEG-POS END-POS) FIX) + <PROG ((GARBAGE-LEN <- .END-POS .BEG-POS -1>) + (NEW-SO <APPLY <ISTRUCTURE .SO> <- <LENGTH .SO> .GARBAGE-LEN>>)) + #DECL ((GARBAGE-LEN) FIX (NEW-SO VALUE) STRUCTURED) + <AND <==? <PRIMTYPE .SO> UVECTOR> + <CHUTYPE .NEW-SO <UTYPE .SO>>> + <REPEAT ((TEMP-POS <- .BEG-POS 1>)) + #DECL ((TEMP-POS) FIX) + <AND <0? .TEMP-POS> <RETURN>> + <PUT .NEW-SO .TEMP-POS <NTH .SO .TEMP-POS>> + <SET TEMP-POS <- .TEMP-POS 1>>> + <REPEAT ((TEMP-POS <LENGTH .SO>)) + #DECL ((TEMP-POS) FIX) + <AND <==? .END-POS .TEMP-POS> <RETURN>> + <PUT .NEW-SO <- .TEMP-POS .GARBAGE-LEN> <NTH .SO .TEMP-POS>> + <SET TEMP-POS <- .TEMP-POS 1>>> + <RETURN <CHTYPE .NEW-SO <TYPE .SO>>>>> + +<DEFINE N-REVERSE (SO) + #DECL ((SO VALUE) STRUCTURED) + <REPEAT ((TEMP-POS <LENGTH .SO>) TEMP-VAL) + #DECL ((TEMP-POS) FIX (VALUE) STRUCTURED) + <AND <L=? .TEMP-POS </ <LENGTH .SO> 2>> <RETURN .SO>> + <SET TEMP-VAL <NTH .SO <- <LENGTH .SO> .TEMP-POS -1>>> + <PUT .SO <- <LENGTH .SO> .TEMP-POS -1> <NTH .SO .TEMP-POS>> + <PUT .SO .TEMP-POS .TEMP-VAL> + <SET TEMP-POS <- .TEMP-POS 1>>>> + +<DEFINE REVERSE (SO) + #DECL ((SO VALUE) STRUCTURED) + <PROG ((NEW-SO <APPLY <ISTRUCTURE .SO> <LENGTH .SO>>)) + #DECL ((NEW-SO VALUE) STRUCTURED) + <AND <==? <PRIMTYPE .SO> UVECTOR> + <CHUTYPE .NEW-SO <UTYPE .SO>>> + <REPEAT ((TEMP-POS <LENGTH .SO>)) + #DECL ((TEMP-POS) FIX (VALUE) STRUCTURED) + <AND <0? .TEMP-POS> <RETURN .NEW-SO>> + <PUT .NEW-SO + <- <LENGTH .SO> .TEMP-POS -1> + <NTH .SO .TEMP-POS>> + <SET TEMP-POS <- .TEMP-POS 1>>>>> + +<DEFINE SWAP (NAME1 NAME2) + #DECL ((NAME1 NAME2) ATOM) + <PROG (TEMP) + <SET TEMP ..NAME1> + <SET .NAME1 ..NAME2> + <SET .NAME2 .TEMP>>> + +<DEFINE SGN (NUM) + #DECL ((NUM) <OR FIX FLOAT> (VALUE) FIX) + <COND (<L? .NUM 0> -1) (1)>> + +<DEFINE LAMBDA (BVL BODY) + #DECL ((BVL) LIST (BODY) FORM (VALUE) FUNCTION) + <CHTYPE (.BVL .BODY) FUNCTION>> + +<DEFINE COPY (SO) + <COND (<MONAD? .SO> .SO) + (<CHTYPE <MAPF <STRUCTURE .SO> ,COPY .SO> <TYPE .SO>>)>> +  \ No newline at end of file diff --git a/src/mprog/now.ujfh09 b/src/mprog/now.ujfh09 new file mode 100644 index 00000000..1c47adff --- /dev/null +++ b/src/mprog/now.ujfh09 @@ -0,0 +1,46 @@ +<PACKAGE "NOW"> + +<ENTRY NOW> + +<USE "ITIME"> + +<DEFINE NOW ("AUX" (L <LTIME>) (DAT <1 .L>) (TIME <2 .L>) (DAY <+ <IDAY> 1>)) + #DECL ((L) <LIST LIST LIST> (DAT TIME) <LIST FIX FIX FIX> + (DAY) FIX (VALUE) STRING) + <STRING <NTH '["Sunday" + "Monday" + "Tuesday" + "Wednesday" + "Thursday" + "Friday" + "Saturday"] + .DAY> + ", " + <UNPARSE <3 .DAT>> + " " + <NTH '["Jan" + "Feb" + "Mar" + "Apr" + "May" + "Jun" + "Jul" + "Aug" + "Sep" + "Oct" + "Nov" + "Dec"] + <2 .DAT>> + " " + "19" + <UNPARSE <1 .DAT>> + " " + <COND (<L? <1 .TIME> 10> "0") (ELSE "")> + <UNPARSE <1 .TIME>> + ":" + <COND (<L? <2 .TIME> 10> "0") (ELSE "")> + <UNPARSE <2 .TIME>> + " " + <3 .L>>> + +<ENDPACKAGE> diff --git a/src/mprog/pages.udl004 b/src/mprog/pages.udl004 new file mode 100644 index 00000000..74d018a8 --- /dev/null +++ b/src/mprog/pages.udl004 @@ -0,0 +1,126 @@ +<PACKAGE "PAGES"> + +<RENTRY CORE-BLOCK PAGE-FIND PAGE-GIVE> + +;"PMAP RSUBRS" + +;"RSUBR FOR MAPPING PAGES" + +<TITLE CORE-BLOCK> ;"MAP A PAGE" + <DECLARE ("VALUE" <OR FIX FALSE> <PRIMTYPE WORD> FIX FIX FIX FIX)> + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* ICORE-BLOCK> + <JRST FINIS> + +<INTERNAL-ENTRY ICORE-BLOCK 5> + <SUBM M* (P)> +<IFOPSYS + (ITS + <*CALL CORE> + <JRST FAIL>) + (TENEX + <MOVE C* -8 (TP)> + <HRR B* -4 (TP)> + <LSH B* 1> + <HRL B* -6 (TP)> + <MOVE A* (TP)> + <CAME A* [<(-1) -1>]> + <LSH A* 1> + <HRL A* -2 (TP)> + <PMAP> ; "GET FIRST PAGE" + <CAME A* [<(-1) -1>]> + <AOS A> + <AOS B> + <PMAP> ; "GET SECOND PAGE")> + <MOVSI A* <TYPE-CODE FIX>> + <MOVE B* -4 (TP)> ;"CORE BLOCK NUMBER" + <LSH B* 10> +CBX <SUB TP* [<10 (10)>]> + <JRST MPOPJ> + +FAIL <MOVSI C* <TYPE-CODE FIX>> + <MOVEI E* 0> + <PUSHJ P* CICONS> + <MOVSI A* <TYPE-CODE FALSE>> + <JRST CBX> + +<IFOPSYS + (ITS +CORE <SETZ> + <SIXBIT "CORBLK"> + <(TP) -8> ;"MODE" + <(TP) -6> ;"INTO" + <(TP) -4> + <(TP) -2> ;"FROM" + <(TP)> + <SETZB D> ; "ERROR")> + +;"RSUBR TO FIND FREE CORE PAGES" + +<TITLE PAGE-FIND> + <DECLARE ("VALUE" <OR FIX FALSE> "OPTIONAL" FIX)> + <JUMPGE AB* ONEARG> + <DPUSH TP* (AB)> + <PUSHJ P* IPAGE-FIND2> + <JRST FINIS> + +ONEARG <PUSHJ P* IPAGE-FIND1> + <JRST FINIS> + +<INTERNAL-ENTRY IPAGE-FIND1 0> + <SUBM M* (P)> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* [<1>]> + <JRST PF1> + +<INTERNAL-ENTRY IPAGE-FIND2 1> + <SUBM M* (P)> +PF1 <MOVE A* (TP)> ;"YES, GET IT" + <JUMPLE A* WRONGT> + <PUSHJ P* PGFIND> + <JUMPL B* [<MOVSI A* TFALSE> + <SETZ B*> + <JRST PFX>]> + <MOVSI A* <TYPE-CODE FIX>> +PFX <SUB TP* [<2 (2)>]> + <JRST MPOPJ> + +;"RSUBR TO GIVE BACK CORE PAGES" + +<TITLE PAGE-GIVE> + <DECLARE ("VALUE" FIX FIX "OPTIONAL" FIX)> + <DPUSH TP* (AB)> + <AOBJN AB* HERE 1> + <AOBJP AB* ONEARG> + <DPUSH TP* (AB)> + <PUSHJ P* IPAGE-GIVE2> + <JRST FINIS> + +ONEARG <PUSHJ P* IPAGE-GIVE1> + <JRST FINIS> + +<INTERNAL-ENTRY IPAGE-GIVE1 1> + <SUBM M* (P)> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* [<1>]> + <JRST PG1> + +<INTERNAL-ENTRY IPAGE-GIVE2 2> + <SUBM M* (P)> +PG1 <MOVE A* (TP)> ;"YES, GET IT" + <JUMPLE A* WRONGT> + <MOVE B* (TP) -2> ;"GET NUMBER OF FIRST BLOCK" + <JUMPL B* WRONGT> + <MOVEI O* (B)> + <ADDI O* (A)> + <CAIGE B* 256> ;"VALID FIRST BLOCK NUMBER ?" + <CAILE O* 256> ;"VALID LAST+1 BLOCK NUMBER ?" + <JRST WRONGT> ;"NO, LOSE" + <PUSHJ P* PGGIVE> + <MOVSI A* <TYPE-CODE FIX>> + <SUB TP* [<4 (4)>]> + <JRST MPOPJ> +<END> + +<ENDPACKAGE> diff --git a/src/mprog/parse.umss02 b/src/mprog/parse.umss02 new file mode 100644 index 00000000..7a73033b --- /dev/null +++ b/src/mprog/parse.umss02 @@ -0,0 +1,83 @@ +;"This RSUBR is used in the CALUTL package of MUDCAL (EHB)" + +<TITLE FSP-PARSE> + <DECLARE ("VALUE" <VECTOR [REST <OR LOSE STRING>]> STRING)> + <PUSH TP* $TFIX> ; "Build empty vector" + <PUSH TP* [4]> + <MCALL 1 IVECTOR> + <PUSH TP* A> ; "Save it" + <PUSH TP* B> + +LOOP <HRRZ A* (AB)> ; "Check string length" + <MOVE D* 1(AB)> ; "Get byte pointer" +ILOOP <JUMPE A* DONE> ; "Quit when string is empty" + <ILDB B* D> ; "Get next char" + <CAIE B* *11*> ; "Tab?" + <CAIN B* *40*> ; "Space?" + <SKIPA> ; "Yes - keep scanning" + <JRST SFIELD> ; "No - start of a field" + <MOVEM D* 1(AB)> ; "Update byte pointer" + <SOJA A* ILOOP> ; "Yes - and count" + +SFIELD <HRRM A* (AB)> ; "Update string count" + <SETZM C> ; "Count sub-field" +COUNT <CAIE B* *40*> ; "Space?" + <CAIN B* *11*> ; "Tab?" + <JRST EFIELD> ; "Yes - end" + <CAIE B* !":> ; "Colon?" + <CAIN B* !";> ; "Semi-colon" + <JRST EFIELD> ; "Yes - end" + <AOS C> ; "Bump field size" + <ILDB B* D> ; "Get next char" + <SOJG A* COUNT> ; "Keep looking unless end of string" +EFIELD <PUSH TP* $TFIX> ; "Now get a string of the right length" + <PUSH TP* C> + <MCALL 1 ISTRING> + <PUSH TP* A> ; "Save the string" + <PUSH TP* B> + <HRRZS A> ; "Isolate length" + <HRRZ C* (AB)> ; "Get current input string length" +COPY <ILDB D* 1(AB)> ; "Copy characters" + <IDPB D* B> + <SOS C> + <SOJG A* COPY> + <HRRM C* (AB)> ; "Update input string length" + <JUMPE C* FNAME> ; "If end of string - file name" + <SOS (AB)> ; "Otherwise - get next char" + <ILDB A* 1(AB)> ; "And see what it is" + <CAIE A* *40*> + <CAIN A* *11*> + <JRST FNAME> ; "Space or tab - file name" + <CAIN A* !":> + <JRST DEV> ; "Colon - device" + <CAIN A* !";> + <JRST DIR> ; "Semi-colon - directory" + <JRST FNAME> ; "Huh?? - how did we get here" + +FNAME <MOVE A* 1(TB)> ; "Get vector pointer" + <GETYP E* 4(A)> ; "Get file name 1" + <CAIN E* TSTRING> ; "Is it alread a string" + <JRST FNAME2> ; "Yes - file name 2" + <POP TP* 5(A)> ; "No - string on stack is file name 1" + <POP TP* 4(A)> + <JRST LOOP> + +FNAME2 <POP TP* 7(A)> ; "String - file name 2" + <POP TP* 6(A)> + <JRST LOOP> + +DEV <MOVE A* 1(TB)> ; "String is device" + <POP TP* 1(A)> + <POP TP* (A)> + <JRST LOOP> + +DIR <MOVE A* 1(TB)> ; "String is directory" + <POP TP* 3(A)> + <POP TP* 2(A)> + <JRST LOOP> + +DONE <POP TP* B> ; "Return the vector" + <POP TP* A> + <JRST FINIS> + +  \ No newline at end of file diff --git a/src/mprog/pck.undr13 b/src/mprog/pck.undr13 new file mode 100644 index 00000000..b2c1b917 --- /dev/null +++ b/src/mprog/pck.undr13 @@ -0,0 +1,712 @@ + +<BLOCK <ROOT>> + +PACKAGE + +RPACKAGE + +ENTRY + +EXTERNAL + +USE + +USE-TOTAL + +DROP + +NULL-OBLIST + +ENDPACKAGE + +FILSTR + +FILPRS + +L-SEARCH-PATH + +L-SECOND-NAMES + +L-TEMP-PATH + +L-LOAD + +L-DOITEM + +L-ITEMS-NAME + +L-INDEX-NAME + +L-DATUM + +USE-DATUM + +L-NO-FILES + +L-NO-MAGIC + +L-ALWAYS-INQUIRE + +L-HANDLER + +L-UNUSE + +L-FIND + +USE-DEFER + +L-GASSIGNED? + +L-NO-DEFER + +L-NOISY + +INDENT-TO + +L-TRANSLATIONS + +TRANSLATE + +UNTRANSLATE + +<MOBLIST PACKAGE 29> + +<MOBLIST PKG!-PACKAGE 17> + +<SETG OBLIST (<GET INITIAL OBLIST> <ROOT>)> + +<BLOCK (<MOBLIST IPKG!-PKG!-PACKAGE 23> + <GET PKG!-PACKAGE OBLIST> + <ROOT>)> + +<SETG PKG!-PACKAGE .OBLIST> + +<SETG PKG-OB <GET PACKAGE OBLIST>> + +<SETG COL-OB <MOBLIST RPACKAGE 7>> + +<SET L-SEARCH-PATH '("LIBMUD" "LIBMUD;LIBMUD" [] ["MBPROG"] ["MPROG" ">"])> + +<SETG L-SECOND-NAMES '["FBIN" "GBIN" "NBIN" ">"]> +<GDECL (L-SECOND-NAMES) VECTOR> + +<SETG L-ITEMS-NAME "ITEMS"> + +<SETG L-INDEX-NAME "INDEX"> + +<SETG L-NO-FILES <>> + +<SETG L-NOISY T> + +<SET L-TEMP-PATH <>> + +<SETG L-TRANSLATIONS ()> + +<SETG L-NULL-TRANS ()> + +<DEFINE FILSTR ("TUPLE" T "AUX" (CHN <CHANNEL "READ" !.T>)) + #DECL ((VALUE) STRING (T) <TUPLE [REST STRING]> (CHN) CHANNEL) + <STRING <9 .CHN> !\: <10 .CHN> !\; <7 .CHN> !\ <8 .CHN>>> + +<DEFINE FILPRS (FIL "AUX" (CHN <CHANNEL "READ" .FIL>)) + #DECL ((VALUE) <LIST [REST STRING]> (FIL) STRING (CHN) CHANNEL) + (<7 .CHN> <8 .CHN> <9 .CHN> <10 .CHN>)> + +<DEFINE FIND/LOAD (STR + "OPTIONAL" (L <OR .L-TEMP-PATH .L-SEARCH-PATH>) + "AUX" CHN TMP (OUTCHAN ,OUTCHAN) (L-TEMP-PATH <>) + (OBLIST .OBLIST) TSTR TEMP) + #DECL ((STR) STRING (L) LIST (OUTCHAN) <SPECIAL CHANNEL> + (L-TEMP-PATH) <SPECIAL ANY> (TSTR) <OR STRING FALSE> + (TEMP) <OR LIST FALSE>) + <COND (<SET TEMP <TRANSLATE? .STR>> + <SET TSTR <1 .TEMP>>) + (<SET TSTR .STR>)> + <COND (<AND .TSTR <SET TMP <LOOKUP .TSTR ,PKG-OB>> <GASSIGNED? .TMP>> + .TMP) + (<SET CHN <SEARCH .STR .L>> + <COND (,L-NOISY + <PRINC "/"> + <PRINC .STR> + <COND (<N==? .STR .TSTR> + <PRINC !\=> + <COND (<NOT .TSTR> + <PRINC "<>">) + (<PRINC .TSTR>)>)> + <PRINC !\ >)> + <UNWIND + <PROG () + <LOAD .CHN> + <COND (.TSTR + <OR <LOOKUP .TSTR ,PKG-OB> + <PROG () + <SET TMP <INSERT .STR ,PKG-OB>> + <SETG .TMP .OBLIST> + .TMP>>) + (T)>> + <PROG (PCK (LN ,L-NULL-TRANS)) + #DECL ((PCK) <OR ATOM FALSE> (LN) <LIST [REST <OR ATOM FALSE>]>) + <COND (<NOT <0? <1 .CHN>>> <CLOSE .CHN>)> + <COND (<AND <SET PCK <GET .OBLIST IN-COLLECTION>> + <=? .TSTR <SPNAME .PCK>>> + <PUT .OBLIST IN-COLLECTION> + <SETG L-NULL-TRANS <REST .LN>> + <ENDBLOCK>) + (<1 .LN> + <SETG L-NULL-TRANS <REST .LN>>)>>>) + (T .CHN)>> + +<DEFINE SEARCH (IND L) + #DECL ((L) <LIST [REST <OR STRING VECTOR>]>) + <REPEAT SEARCH (CH SPEC DIR (L-NO-FILES ,L-NO-FILES)) + #DECL ((CH) <OR CHANNEL FALSE> (SPEC) <OR STRING VECTOR> + (SEARCH) ACTIVATION) + <COND (<EMPTY? .L> <RETURN <>>)> + <COND (<TYPE? <SET SPEC <1 .L>> STRING> + <COND (<SET CH <AND <GASSIGNED? GDCHN> + <GDCHN .IND .SPEC ,L-ITEMS-NAME>>> + <RETURN .CH>)>) + (<NOT .L-NO-FILES> + <COND (<OR <EMPTY? .SPEC> + <NOT <1 .SPEC>>> + <SET DIR <SNAME>>) + (<SET DIR <1 .SPEC>>)> + <COND (<LENGTH? .SPEC 1> + <SET SPEC ,L-SECOND-NAMES>) + (<SET SPEC <REST .SPEC>>)> + <MAPF <> + <FUNCTION (X) #DECL ((X) STRING) + <COND (<SET CH <OPEN "READ" .IND .X "DSK" .DIR>> + <RETURN .CH .SEARCH>)>> + .SPEC>)> + <SET L <REST .L>>>> + +<DEFINE PACKAGE (NAME + "OPTIONAL" (INAME .NAME) (SIZE 19) (ISIZE 23) + "EXTRA" TNAME ATM IATM OBL IOBL TMP) + #DECL ((NAME INAME) STRING (SIZE ISIZE) FIX (ATM IATM VALUE) ATOM + (OBL IOBL) OBLIST (TNAME) <OR FALSE STRING>) + <COND (<SET TMP <TRANSLATE? .NAME>> + <SET TNAME <1 .TMP>>) + (<SET TNAME .NAME>)> + <COND (.TNAME + <COND (<==? .INAME .NAME> <SET INAME <STRING !\I .TNAME>>)> + <SET ATM + <OR <LOOKUP .TNAME ,PKG-OB> <INSERT .TNAME ,PKG-OB>>> + <SET OBL <MOBLIST .ATM .SIZE>> + <SET IATM <OR <LOOKUP .INAME .OBL> <INSERT .INAME .OBL>>> + <SET IOBL <MOBLIST .IATM .ISIZE>> + <BLOCK <SETG .ATM <SET TMP (.IOBL .OBL <ROOT>)>>> + <PUT .ATM IOBLIST .IATM> + <PUT .TMP IN-COLLECTION .ATM> + <SETG L-NULL-TRANS (<> !,L-NULL-TRANS)> + .ATM) + (<SETG L-NULL-TRANS (T !,L-NULL-TRANS)> + T)>> + +<DEFINE RPACKAGE (NAME + "OPTIONAL" (INAME .NAME) (ISIZE 23) + "AUX" ATM IATM IOBL TMP TNAME) + #DECL ((NAME INAME) STRING (ISIZE) FIX (ATM IATM VALUE) ATOM + (IOBL) OBLIST (TNAME) <OR FALSE STRING>) + <COND (<SET TMP <TRANSLATE? .NAME>> + <SET TNAME <1 .TMP>>) + (<SET TNAME .NAME>)> + <COND (.TNAME + <COND (<N==? .NAME .INAME> <SET INAME <STRING !\I .NAME>>)> + <SET ATM + <OR <LOOKUP .TNAME ,PKG-OB> <INSERT .TNAME ,PKG-OB>>> + <SET IATM + <OR <LOOKUP .INAME ,COL-OB> <INSERT .INAME ,COL-OB>>> + <SET IOBL <MOBLIST .IATM .ISIZE>> + <BLOCK <SETG .ATM <SET TMP (.IOBL <ROOT>)>>> + <PUT .ATM IOBLIST .IATM> + <PUT .TMP IN-COLLECTION .ATM> + <SETG L-NULL-TRANS (<> !,L-NULL-TRANS)> + .ATM) + (<SETG L-NULL-TRANS (T !,L-NULL-TRANS)>)>> + +<DEFINE ENTRY ("TUPLE" NAMES "AUX" (NAME T)) + #DECL ((VALUE NAME) ATOM (NAMES) <TUPLE [REST ATOM]>) + <COND (<NOT <1 ,L-NULL-TRANS>> + <REPEAT ((OBLIST .OBLIST)) + #DECL ((OBLIST) LIST) + <COND (<EMPTY? .NAMES> <RETURN .NAME>)> + <SET NAME <1 .NAMES>> + <SET NAMES <REST .NAMES>> + <PUT .NAME USE-DEFER> + <COND (<NOT <GET .OBLIST IN-COLLECTION>> + <ERROR ENTRY NOT-IN-PACKAGE-OR-COLLECTION!-ERRORS>) + (<==? <OBLIST? .NAME> <1 .OBLIST>> + <INSERT <REMOVE .NAME> <2 .OBLIST>>) + (<NOT <==? <OBLIST? .NAME> <2 .OBLIST>>> + <ERROR ENTRY .NAME ALREADY-USED-ELSEWHERE!-ERRORS>)>>) + (T)>> + +<DEFINE USE ("TUPLE" NAMES "AUX" (OBLIST .OBLIST) NAME PK OBL N M) + #DECL ((VALUE) ATOM (NAMES) <TUPLE [REST STRING]> (PK) <OR ATOM FALSE> + (NAME) STRING (OBL) <OR FALSE OBLIST> (N M) FIX + (OBLIST) <LIST [REST OBLIST]>) + <REPEAT () + <COND (<EMPTY? .NAMES> <RETURN USE>)> + <SET NAME <1 .NAMES>> + <SET NAMES <REST .NAMES>> + <SET PK <FIND/LOAD .NAME>> + <COND + (<NOT .PK> <ERROR PACKAGE .NAME NOT-FOUND!-ERRORS>) + (<==? .PK T>) + (<AND <SET OBL <GET .PK OBLIST>> <NOT <MEMQ .OBL .OBLIST>>> + <COND (<NOT <0? <SET N <LENGTH <MEMQ ,PKG-OB .OBLIST>>>>> + <PUTREST <REST .OBLIST <- <SET M <LENGTH .OBLIST>> .N 1>> + (.OBL !<REST .OBLIST <- .M .N>!>)>) + (T + <PUTREST <REST .OBLIST <- <LENGTH .OBLIST> 1>> (.OBL)>)>)>>> + +<DEFINE USE-TOTAL ("TUPLE" NAMES "AUX" (OBLIST .OBLIST) NAME PK OBL N M) + #DECL ((VALUE) ATOM (NAMES) <TUPLE [REST STRING]> (PK) <OR ATOM FALSE> + (NAME) STRING (OBL) <OR FALSE OBLIST> (N M) FIX + (OBLIST) <LIST [REST OBLIST]>) + <REPEAT () + <COND (<EMPTY? .NAMES> <RETURN USE>)> + <SET NAME <1 .NAMES>> + <SET NAMES <REST .NAMES>> + <SET PK <FIND/LOAD .NAME>> + <COND + (<NOT .PK> <ERROR PACKAGE .NAME NOT-FOUND!-ERRORS>) + (<==? .PK T>) + (<AND <SET OBL <GET .PK OBLIST>> <NOT <MEMQ .OBL .OBLIST>>> + <COND (<NOT <0? <SET N <LENGTH <MEMQ ,PKG-OB .OBLIST>>>>> + <PUTREST <REST .OBLIST <- <SET M <LENGTH .OBLIST>> .N 1>> + (.OBL !<REST .OBLIST <- .M .N>!>)>) + (T + <PUTREST <REST .OBLIST <- <LENGTH .OBLIST> 1>> (.OBL)>)>)> + <COND + (<AND <SET PK <OR <GET .PK IOBLIST> + <LOOKUP <STRING !\I <SPNAME .PK>> <GET .PK OBLIST>>>> + <SET OBL <GET .PK OBLIST>> + <NOT <MEMQ .OBL .OBLIST>>> + <COND (<NOT <0? <SET N <LENGTH <MEMQ ,PKG-OB .OBLIST>>>>> + <PUTREST <REST .OBLIST <- <SET M <LENGTH .OBLIST>> .N 1>> + (.OBL !<REST .OBLIST <- .M .N>!>)>) + (T + <PUTREST <REST .OBLIST <- <LENGTH .OBLIST> 1>> (.OBL)>)>)>>> +<SETG L-NO-DEFER <>> + +<DEFINE L-GASSIGNED? (ATM "AUX" TMP (L-TEMP-PATH .L-SEARCH-PATH)) + #DECL ((L-TEMP-PATH) <SPECIAL LIST> (TMP) <PRIMTYPE LIST>) + <COND (<GASSIGNED? .ATM>) + (<SET TMP <GET .ATM USE-DEFER>> + <SET L-TEMP-PATH <REST .TMP>> + <USE <1 .TMP>> + <COND (<NOT <GASSIGNED? .ATM>> + <ERROR PACKAGE "PACKAGE DID NOT DEFINE FUNCTION">)> + T)>> + +<SETG EXTERNAL ,USE> + +<DEFINE DROP ("TUPLE" NAMES "AUX" NAME PK OBL N) + #DECL ((VALUE) ATOM (NAMES) <TUPLE [REST STRING]> (PK) <OR ATOM FALSE> + (N) FIX (NAME) <OR STRING FALSE> (OBL) <OR FALSE OBLIST> + (OBLIST) <LIST [REST OBLIST]>) + <REPEAT ((OBLIST .OBLIST) TMP) + #DECL ((OBLIST) LIST (TMP) <OR <LIST <OR STRING FALSE>> FALSE>) + <COND (<EMPTY? .NAMES> <RETURN DROP>)> + <SET NAME <1 .NAMES>> + <SET NAMES <REST .NAMES>> + <COND (<AND <SET TMP <TRANSLATE? .NAME>> + <NOT <SET NAME <1 .TMP>>>> + <AGAIN>)> + <COND (<NOT <SET PK <LOOKUP .NAME ,PKG-OB>>> + <ERROR PACKAGE .NAME NOT-PACKAGE-OR-COLLECTION!-ERRORS>)> + <SET OBL <GET .PK OBLIST>> + <COND (<NOT <0? <SET N <LENGTH <MEMQ .OBL .OBLIST>>>>> + <PUTREST <REST .OBLIST <SET N <- <LENGTH .OBLIST> .N 1>>> + <REST .OBLIST <+ .N 2>>>)> + <COND (<AND <SET PK <OR <GET .PK IOBLIST> + <LOOKUP <STRING !\I <SPNAME .PK>> + .OBL>>> + <SET OBL <GET .PK OBLIST>>> + <COND (<NOT <0? <SET N <LENGTH <MEMQ .OBL .OBLIST>>>>> + <PUTREST <REST .OBLIST <SET N <- <LENGTH .OBLIST> .N 1>>> + <REST .OBLIST <+ .N 2>>>)>)>>> + +<SETG NULL-OBLIST <MOBLIST NULL 1>> + +<DEFINE ENDPACKAGE ("AUX" (OBLIST .OBLIST) + (PK <GET .OBLIST IN-COLLECTION>) IATM OBL VAL + (LNT ,L-NULL-TRANS)) + #DECL ((PK) <OR ATOM FALSE> (VALUE) ATOM + (IATM) <OR ATOM FALSE> (LNT) <LIST [REST <OR ATOM FALSE>]> + (OBL) <OR OBLIST FALSE> + (VAL) ANY (OBLIST) <OR OBLIST LIST>) + <COND (<1 .LNT> + <SETG L-NULL-TRANS <REST .LNT>> + T) + (.PK + <PUT .OBLIST IN-COLLECTION> + <ENDBLOCK> + <SETG L-NULL-TRANS <REST .LNT>> + <COND (<AND <SET IATM <OR <GET .PK IOBLIST> + <LOOKUP <STRING !\I <SPNAME .PK>> + <GET .PK OBLIST>>>> + <SET OBL <GET .IATM OBLIST>> + <MAPF <> + <FUNCTION (L) + #DECL ((L) LIST) + <COND (<EMPTY? .L>) + (ELSE <MAPLEAVE <>>)>> + .OBL>> + <PUT <PUT .IATM OBLIST> OBLIST> + <PUT .PK IOBLIST> + <COND (<AND <GASSIGNED? .PK> + <TYPE? ,.PK LIST> + <SET VAL <MEMQ .OBL ,.PK>>> + <PUT .VAL 1 ,NULL-OBLIST>)>)> + .PK) + (ELSE + <ERROR UNMATCHED-ENDPACKAGE-OR-ENDCOLLECTION!-ERRORS>)>> + +<DEFINE L-UNUSE (STR "AUX" TMP IATM) + #DECL ((STR) <OR STRING FALSE> (TMP) ANY (IATM) <OR ATOM FALSE>) + <COND (<SET TMP <TRANSLATE? .STR>> + <SET STR <1 .TMP>>)> + <COND (<NOT .STR>) + (<AND <SET TMP <LOOKUP .STR ,PKG-OB>> <GASSIGNED? .TMP>> + <DROP .STR> + <COND (<SET IATM <OR <PUT .TMP IOBLIST> + <LOOKUP <STRING !\I <SPNAME .TMP>> <GET .TMP OBLIST>>>> + <PUT <PUT .IATM OBLIST> OBLIST>)> + <GUNASSIGN .TMP> + <PUT <PUT .TMP OBLIST> OBLIST> + <REMOVE .TMP ,PKG-OB> + "PACKAGE REMOVED") + (<SET TMP <LOOKUP .STR ,UDOB>> + <REMOVE .TMP ,UDOB> + "DATUM REMOVED") + (T #FALSE ("NOT PACKAGE OR DATUM"))>> + +<DEFINE TRANSLATE? (NAME "OPTIONAL" (HAIR? <>) "AUX" (L ,L-TRANSLATIONS)) + #DECL ((NAME) STRING (HAIR?) <OR ATOM FALSE> + (L) <LIST [REST STRING <OR STRING FALSE>]>) + <REPEAT (TEMP) + <COND (<EMPTY? .L> + <RETURN <>>) + (<NOT .HAIR?> + <COND (<=? <1 .L> .NAME> + <RETURN <REST .L>>)>) + (T + <COND (<AND <==? <MEMBER <SET TEMP <1 .L>> .NAME> .NAME> + <==? <MEMBER "!-" .NAME> <REST .NAME <LENGTH .TEMP>>>> + <RETURN <REST .L>>)>)> + <SET L <REST .L 2>>>> + +"/* MAGIC KLUDGE, LOAD SDML HERE, WHERE ENOUGH IS DEFINED, BUT NOT THE + PART THAT DEPENDS ON SDML, OLD BOOTSTRAPPING PROBLEM */" + +<EXTERNAL "PMAP" "SDML"> + +<DEFINE USE-DEFER ("TUPLE" NAMES "AUX" (OBLIST .OBLIST) NAME TMP T1 (POB <>) M N NMLST) + #DECL ((NAMES) <TUPLE [REST STRING]> (NAME) STRING (M N) FIX + (TMP) <PRIMTYPE LIST> (ATMLST) <LIST [REST ATOM]> + (NMLST) <SPECIAL LIST> (OBLIST) <LIST [REST OBLIST]>) + <COND + (,L-NO-DEFER <USE !.NAMES> USE-DEFER) + (T + <REPEAT () + <COND (<EMPTY? .NAMES> <RETURN USE-DEFER>)> + <SET NAME <1 .NAMES>> + <SET NAMES <REST .NAMES>> + <COND (<AND <SET T1 <LOOKUP .NAME ,PKG-OB>> <GASSIGNED? .T1>> + <SET POB <GET .T1 OBLIST>>) + (<NOT <SET TMP + <GDCHN <STRING <ASCII 127> .NAME> + .L-SEARCH-PATH + ,L-INDEX-NAME + ,SDMGET>>> + <ERROR PACKAGE .NAME NOT-FOUND!-ERRORS> + <AGAIN>) + (<NOT <EMPTY? .TMP>> + <SET POB <OBLIST? <PARSE <1 .TMP>>>> + <SET NMLST <LIST .NAME !.L-SEARCH-PATH>> + <MAPF <> + #FUNCTION ((X) <PUT <PARSE .X> USE-DEFER .NMLST>) + .TMP>)> + <COND (<AND .POB + <NOT <==? .POB <ROOT>>> + <NOT <MEMQ .POB .OBLIST>>> + <COND (<NOT <0? <SET N <LENGTH <MEMQ ,PKG-OB .OBLIST>>>>> + <PUTREST <REST .OBLIST <- <SET M <LENGTH .OBLIST>> .N 1>> + (.POB !<REST .OBLIST <- .M .N>!>)>) + (T + <PUTREST <REST .OBLIST <- <LENGTH .OBLIST> 1>> + (.POB)>)>)>>)>> + +<DEFINE L-DATUM (IND "OPTIONAL" (L .L-SEARCH-PATH) "AUX" CHN TMP) + <COND (<SET CHN <SEARCH .IND .L>> + <SET TMP <READ .CHN '<>>> + <CLOSE .CHN> + .TMP) + (T #FALSE ("DATUM NOT FOUND"))>> + +<SETG UDOB <MOBLIST USE-DATUM 17>> + +<DEFINE USE-DATUM (IND "AUX" TMP) + <COND (<SET TMP <TRANSLATE? .IND>> + <SET IND <1 .TMP>>)> + <COND (<SET TMP <LOOKUP .IND ,UDOB>> ,.TMP) + (<SET TMP <L-DATUM .IND>> <SETG <INSERT .IND ,UDOB> .TMP>) + (T .TMP)>> + +<DEFINE TRANSLATE (FROM TO "AUX" (L ,L-TRANSLATIONS)) + #DECL ((FROM) STRING (TO) <OR FALSE STRING> + (L) <LIST [REST STRING <OR FALSE STRING>]>) + <REPEAT () + <COND (<EMPTY? .L> + <SETG L-TRANSLATIONS (.FROM .TO !,L-TRANSLATIONS)> + <RETURN>) + (<=? <1 .L> .FROM> + <PUT .L 2 .TO> + <RETURN>)> + <SET L <REST .L 2>>> + .TO> + +<DEFINE UNTRANSLATE (NAME "AUX" (L ,L-TRANSLATIONS)) + #DECL ((NAME) STRING (L) <LIST [REST STRING <OR FALSE STRING>]>) + <REPEAT ((L1 .L) L2) + #DECL ((L1 L2) <LIST [REST STRING]>) + <COND (<EMPTY? .L1> + <RETURN #FALSE ("NOT TRANSLATED")>) + (<=? <1 .L1> .NAME> + <COND (<==? .L .L1> + <SETG L-TRANSLATIONS <REST .L 2>>) + (<PUTREST <REST .L2> <REST .L1 2>>)> + <RETURN .NAME>)> + <SET L2 .L1> + <SET L1 <REST .L1 2>>>> + +<DEFINE GDCHN (IND LST MODIF "OPTIONAL" (FNC ,SDMGETCHAN)) + #DECL ((IND MODIF) STRING (LST) <OR LIST STRING>) + <COND (<TYPE? .LST LIST> + <REPEAT ((L .LST) TMP SPEC) + #DECL ((L) LIST (SPEC) <OR VECTOR STRING>) + <COND (<EMPTY? .L> <RETURN <>>) + (<AND <TYPE? <SET SPEC <1 .L>> STRING> + <SET TMP <GDCHN .IND <1 .L> .MODIF .FNC>>> + <RETURN .TMP>)> + <SET L <REST .L>>>) + (<L-DOITEM .LST .MODIF <> .FNC .IND>)>> + +<DEFINE L-LOAD (STR "OPTIONAL" (L .L-SEARCH-PATH) "AUX" CHN) + <COND (<SET CHN <GDCHN .STR .L ,L-ITEMS-NAME>> <LOAD .CHN>) + (T .CHN)>> + +<SETG DBASEOB <MOBLIST DBASEOB 7>> + +<DEFINE L-DOITEM (BASE MODIF CREATE? TODO + "TUPLE" JUNK + "AUX" TMP TC TV VAL ITM SN + (DB + <COND (<LOOKUP .BASE ,DBASEOB>) + (<SET TMP <INSERT .BASE ,DBASEOB>> + <SETG .TMP ()> + .TMP)>) + (DV ,.DB)) + #DECL ((BASE MODIF SN) STRING (DV) <LIST [REST VECTOR]> + (TV) <PRIMTYPE VECTOR> (ITM) <VECTOR STRING ANY CHANNEL ANY> + (JUNK) TUPLE (TC) CHANNEL (DB) ATOM) + <PROG () + <REPEAT () + <COND + (<EMPTY? .DV> + <SETG .DB + <SET DV + ([.MODIF + <NOT <MEMQ !\; .BASE>> + <SET TC <CHANNEL "READ" <STRING .BASE " " .MODIF>>> + <SET TV <PCLOSE <POPEN "PRINT" "NUL:">>>] + !,.DB)>> + <PUT .TV 1 .TC> + <PUT .TV 7 0>)> + <COND (<=? <1 <SET ITM <1 .DV>>> .MODIF> <RETURN>)> + <SET DV <REST .DV>>> + <COND (<AND <2 .ITM> + <NOT <=? <SET SN <SNAME>> <6 <SET TC <3 .ITM>>>>>> + <PUT .TC 6 .SN> + <PUT .TC 10 .SN> + <PUT .TC 7 <3 .TC>> + <PUT .TC 8 <4 .TC>>)> + <PUT <SET TC <3 .ITM>> 2 "READ"> + <RESET .TC> + <COND (<0? <1 .TC>> + <COND (.CREATE? + <SDMDCT <SDMACT <STRING .BASE " " .MODIF>>> + <SET CREATE? <>> + <AGAIN>)>) + (T + <PRESET <SET TV <4 .ITM>>> + <SET VAL <APPLY .TODO .TV !.JUNK>> + <PCLOSE .TV> + .VAL)>>> + +<DEFINE DOSEARCH (LST MODIF IND "AUX" (RSLT ()) RPOS) + #DECL ((LST) LIST (RSLT RPOS) <LIST [REST LIST]> (MODIF) STRING) + <REPEAT () + <COND + (<EMPTY? .LST> <RETURN .RSLT>) + (<REPEAT ((IT <1 .LST>) ITM TMP (WON <>)) + #DECL ((ITM) STRING) + <COND (<TYPE? .IT VECTOR> <RETURN .WON>) + (<TYPE? .IT LIST STRING> + <COND (<TYPE? .IT LIST> + <COND (<EMPTY? .IT> <RETURN .WON>) + (<SET ITM <1 .IT>>)>) + (<SET ITM .IT>)> + <COND (<SET TMP <L-DOITEM .ITM .MODIF <> ,SDMGET .IND>> + <SET WON T> + <COND (<EMPTY? .RSLT> + <SET RSLT <SET RPOS ((.TMP .ITM))>>) + (T + <SET RPOS + <REST <PUTREST .RPOS + ((.TMP .ITM))>>>)>)> + <COND (<TYPE? .IT LIST> <SET IT <REST .IT>>) + (T <RETURN .WON>)>) + (<ERROR BAD-ARG!-ERRORS DOSEARCH .IT .LST>)>> + <RETURN .RSLT>)> + <SET LST <REST .LST>>>> + +<DEFINE EXSEARCH (LST MODIF IND + "AUX" (SL <DOSEARCH .LST .MODIF .IND>) (RL ()) RP) + #DECL ((SL) <LIST [REST <LIST ANY ANY>]> (RL RP) <LIST [REST LIST]>) + <REPEAT () + <COND (<EMPTY? .SL> <RETURN .RL>)> + <REPEAT ((IN <2 <1 .SL>>) (L <1 <1 .SL>>)) + #DECL ((IN) STRING (L) LIST) + <COND (<EMPTY? .L> <RETURN>)> + <REPEAT ((V <1 .L>) (EL .RL)) + #DECL ((EL) <LIST [REST <LIST ANY ANY>]>) + <COND (<EMPTY? .EL> + <COND (<EMPTY? .RL> <SET RL <SET RP ((.V .IN))>>) + (T <SET RP <REST <PUTREST .RP ((.V .IN))>>>)> + <RETURN>) + (<=? .V <1 <1 .EL>>> <RETURN>)> + <SET EL <REST .EL>>> + <SET L <REST .L>>> + <SET SL <REST .SL>>>> + +<DEFINE L-FIND (STR "AUX" (LST <EXSEARCH .L-SEARCH-PATH ,L-INDEX-NAME .STR>) TMP) + #DECL ((STR) STRING (LST) LIST) + <AND <NOT <EMPTY? + <SET TMP + <MAPF ,UVECTOR + #FUNCTION ((X) + #DECL ((X) + <LIST <LIST [2 STRING]> STRING>) + [<2 <1 .X>> <2 .X>]) + .LST>>>> + .TMP>> + +<SETG L-NO-MAGIC <>> + +<SETG L-ALWAYS-INQUIRE <>> + +<SETG IOB <GET <LOOKUP "INITIAL" <ROOT>> OBLIST>> + +<DEFINE L-HANDLER (FRM + "TUPLE" JUNK + "AUX" ATM N POSSIB PN TMP RSLT GOODS FINOB + (REDEFINE + <COND (<ASSIGNED? REDEFINE> .REDEFINE) (T <>)>) + PCK-NAME TPCK-NAME) + #DECL ((FRM) FRAME (JUNK) TUPLE (ATM) ATOM (N) FIX + (POSSIB) <LIST [REST LIST]> (PN) STRING (PCK-NAME) STRING + (TPCK-NAME) <OR STRING FALSE> + (GOODS) <LIST <LIST [2 STRING]> STRING> (REDEFINE) <SPECIAL ANY>) + <PROG () + <COND (<OR <NOT <==? 3 <LENGTH .JUNK>>> + <NOT <OR <AND <==? <1 .JUNK> UNASSIGNED-VARIABLE!-ERRORS> + <==? <3 .JUNK> GVAL>> + <AND <==? <1 .JUNK> UNBOUND-VARIABLE!-ERRORS> + <OR <==? <3 .JUNK> VALUE> + <==? <3 .JUNK> CALLER>>>>>> + <RETURN>)> + <COND (<L-GASSIGNED? <SET ATM <2 .JUNK>>> + <INT-LEVEL 0> + <APPLY ,ERRET ,.ATM .FRM>) + (<OR ,L-NO-MAGIC <NOT <==? <OBLIST? .ATM> ,IOB>>> <RETURN>)> + <COND (<EMPTY? <SET POSSIB + <EXSEARCH .L-SEARCH-PATH + ,L-INDEX-NAME + <SET PN <SPNAME .ATM>>>>> + <RETURN>)> + <INT-LEVEL 0> + <COND (<OR <G? <LENGTH .POSSIB> 1> ,L-ALWAYS-INQUIRE> + <SET N <DISP-CHOICE .POSSIB .PN>>) + (<SET N 1>)> + <COND (<OR <L? .N 1> <G? .N <LENGTH .POSSIB>>> <RETURN>)> + <SET REDEFINE T> + <SET GOODS <NTH .POSSIB .N>> + <SET PCK-NAME <2 <1 .GOODS>>> + <COND (<SET TMP <TRANSLATE? .PCK-NAME>> + <SET TPCK-NAME <1 .TMP>>) + (<SET TPCK-NAME .PCK-NAME>)> + <SET FINOB + <COND (<=? " " <SET TMP <REST <MEMQ !\! <1 <1 .GOODS>>> 2>>> + <ROOT>) + (<==? .TPCK-NAME .PCK-NAME> + <MOBLIST <PARSE .TMP> 17>) + (.TPCK-NAME + <MOBLIST <PARSE <STRING .TPCK-NAME "!-PACKAGE!- ">> 17>) + (<1 .OBLIST>)>> + <COND (<NOT .TPCK-NAME> + <SET RSLT .ATM>) + (<SET TMP <LOOKUP .PN .FINOB>> + <SUBSTITUTE .TMP <REMOVE .ATM>> + <SET RSLT .TMP>) + (<SET RSLT <INSERT <REMOVE .ATM> .FINOB>>)> + <PROG ((L-TEMP-PATH <REST .GOODS>)) + #DECL ((L-TEMP-PATH) <SPECIAL <LIST <OR STRING VECTOR>>>) + <USE <2 <1 .GOODS>>>> + <COND (<NOT <GASSIGNED? .RSLT>> + <ERROR "PACKAGE DID NOT DEFINE FUNCTION" + .RSLT + <2 <1 .GOODS>>>) + (T <INT-LEVEL 0> <APPLY ,ERRET ,.RSLT .FRM>)>>> + +<DEFINE DISP-CHOICE (POSSIB PN "AUX" (OUTCHAN ,OUTCHAN) IN P) + #DECL ((P) <LIST <LIST [2 STRING]> STRING> (POSSIB) <LIST [REST LIST]> + (OUTCHAN) <SPECIAL CHANNEL>) + <PRINTSTRING " +TO GET "> + <PRINTSTRING .PN> + <PRINTSTRING " DYNAMICALLY LOAD +0 NONE -- GENERATE ERROR +"> + <REPEAT ((N 1)) + #DECL ((N) FIX) + <COND (<EMPTY? .POSSIB> <RETURN>)> + <SET P <1 .POSSIB>> + <PRINC .N> + <PRINTSTRING " "> + <PRINC <2 <1 .P>>> + <INDENT-TO 18> + <PRINTSTRING "in "> + <PRINC <2 .P>> + <TERPRI> + <SET N <+ .N 1>> + <SET POSSIB <REST .POSSIB>>> + <PROG () + <PRINTSTRING "# to load? "> + <SET IN <READ ,INCHAN>> + <COND (<NOT <TYPE? .IN FIX>> <TERPRI> <AGAIN>)> + <TERPRI> + .IN>> + +<ENDBLOCK> + +<ENDBLOCK> + +<SET OBLIST ,OBLIST> + +<ON "ERROR" ,L-HANDLER 100> + \ No newline at end of file diff --git a/src/mprog/pcond.ubkd01 b/src/mprog/pcond.ubkd01 new file mode 100644 index 00000000..dfd30a4c --- /dev/null +++ b/src/mprog/pcond.ubkd01 @@ -0,0 +1,42 @@ +<PACKAGE "PCOND"> + +<ENTRY PCOND> +;"***** PCOND (PROG/COND) Example: + <PCOND (<EMPTY? .X> #FALSE (none)) + <SET Y <1 .X>> + (<NOT <TYPE? .Y ATOM>> #FALSE (not-simple)) + (<NOT <GASSIGNED? .Y>> #FALSE (not-defined)) + <SET Z ,.Y> + (<TYPE? .Z MACRO> <EXPAND .X>)> +*****" + +<DEFMAC PCOND ("ARGS" L) + #DECL ((L) LIST) + <COND-CODE .L>> + +<DEFINE COND-CODE (L) ;"Make a COND Form using the Phrases from L" + #DECL ((L) LIST) + <CHTYPE <PUTREST (COND) + <MAPR ,LIST <FUNCTION (RL "EXTRA" (X <1 .RL>)) + #DECL ((RL) <LIST ANY>) + <COND (<TYPE? .X LIST> ;"COND Phrase ?" + .X ;"Include It in COND") + (ELSE ;"Random MUDDLE Expression" + <MAPSTOP <ELSE-CODE .RL>> + ;"End COND with an ELSE Phrase")>> + .L>> + FORM>> + +<DEFINE ELSE-CODE (L) ;"Make an ELSE Phrase using the Expressions from L" + #DECL ((L) <LIST ANY>) + <PUTREST (T) + <MAPR ,LIST <FUNCTION (RL "EXTRA" (X <1 .RL>)) + #DECL ((RL) <LIST ANY>) + <COND (<TYPE? .X LIST> ;"COND Phrase ?" + <MAPSTOP <COND-CODE .RL>> + ;"End Phrase with another COND") + (ELSE ;"Random MUDDLE Expression" + .X ;"Include It in Phrase")>> + .L>>> + +<ENDPACKAGE> diff --git a/src/mprog/pdump.ubtb26 b/src/mprog/pdump.ubtb26 new file mode 100644 index 00000000..b60db03f --- /dev/null +++ b/src/mprog/pdump.ubtb26 @@ -0,0 +1,302 @@ + +<PACKAGE "PDUMP"> + +<BLOCK (<ROOT>)> + +<SET GLUE T> + +PGLUE + +TMP + +IMPURE + +<ENDBLOCK> + +<FLOAD "CLR;BYTER NBIN"> + +<MANIFEST R HW INDEX-FIELD> + +<SETG R 14> + +<SETG HW <BITS 18>> + +<SETG INDEX-FIELD <BITS 4 18>> + +<ENTRY PDUMP SAVDIR> + +<SET TMPOB <MOBLIST TMP 7>> + +<GDECL (SAVDIR) STRING (NDIRS) FIX> + +<COND (<==? ,MUDDLE 51> <SETG NDIRS 2>) + (<==? ,MUDDLE 52> <SETG NDIRS 3>) + (ELSE + <SETG NDIRS + <ERROR ERRET-NUMBER-OF-DIRS-FOR-THIS-VERSION!-ERRORS>>)> + +<SETG SAVDIR + <COND (<N==? ,MUDDLE 49> <STRING "MUD" <UNPARSE ,MUDDLE>>) + (49 "MHILIB")>> + +<FLOAD "MUDDLE;PDRSUBR BIN"> + +<DEFINE TYPE-C-OUT (TC "AUX" (THIS <NTH <ALLTYPES> <+ 1 <CHTYPE .TC FIX>>>)) + <PRINTSTRING "%<"> + <PRIN1 <TYPE .TC>> + <PRINTSTRING " "> + <PRIN1 .THIS> + <PRINTSTRING " "> + <PRIN1 <TYPEPRIM .THIS>> + <PRINC "> ">> + +<DEFINE TYPE-W-OUT (TW + "AUX" (RH <CHTYPE <GETBITS .TW <BITS 18>> FIX>) + (LH <GETBITS .TW <BITS 18 18>>) + (THIS <NTH <ALLTYPES> <+ 1 <CHTYPE .LH FIX>>>)) + <PRINTSTRING "%<"> + <PRIN1 <TYPE .TW>> + <PRINTSTRING " "> + <PRIN1 .THIS> + <PRINTSTRING " "> + <PRIN1 <TYPEPRIM .THIS>> + <COND (<NOT <0? .RH>> <PRINTSTRING " "> <PRIN1 .RH>)> + <PRINC "> ">> + +<DEFINE FIXUP-MUNG (GOODS OFFSET + "AUX" TMP TYP IT FOO (POS 0) + (FIXUPS <CHUTYPE .GOODS WORD>)) + #DECL ((FIXUPS) <<PRIMTYPE UVECTOR> [REST WORD]> + (OFFSET TMP FOO EXTRA-COUNT) FIX (GOODS) <PRIMTYPE UVECTOR> + (EXTRA-SLOT-POS) LIST (IT FOO) <PRIMTYPE WORD>) + <SET GOODS <REST .GOODS>> + <SET FIXUPS <REST .FIXUPS>> + <REPEAT () + <COND (<EMPTY? .FIXUPS> <RETURN .GOODS>)> + <COND (<G? <SET TMP <CHTYPE <1 .FIXUPS> FIX>> 0> + <SET FIXUPS <REST .FIXUPS <+ 1 .TMP>>> + <SET TYP <*HLRE <1 .FIXUPS>>> + <SET POS ,*HRRE> + <REPEAT () + <SET IT <1 .FIXUPS>> + <SET FOO <APPLY .POS .IT>> + <COND (<0? .FOO> + <SET GOODS <SET FIXUPS <REST .FIXUPS>>> + <RETURN>) + (<L? .FOO 0> ;"TYPE-WORD FIXUP" + <SET FOO <- .FOO>> + <TYPE-WORD-SMASH .COD <- .FOO 1> .EXTRA-COUNT> + <PUTREST .EXTRA-SLOT-POS + <LIST <CHTYPE <NTH .COD .FOO> TYPE-W>>>) + (T ;"TYPE-CODE FIXUP" + <SET IT <NTH .COD .FOO>> + <SET IT + <PUTBITS <NTH .COD .FOO> + <BITS 23> + <+ .EXTRA-COUNT 7864320>>> + <PUT .COD .FOO .IT> + <PUTREST .EXTRA-SLOT-POS + <LIST <CHTYPE .TYP TYPE-C>>>)> + <SET EXTRA-SLOT-POS <REST .EXTRA-SLOT-POS>> + <SET EXTRA-COUNT <+ .EXTRA-COUNT 2>> + <COND (<==? .POS ,*HLRE> <SET POS ,*HRRE>) + (T <SET FIXUPS <REST .FIXUPS>> <SET POS ,*HLRE>)>>) + (<SET FIXUPS <REST .FIXUPS>> + <SET POS 0> + <REPEAT () + <SET IT <1 .FIXUPS>> + <COND (<0? <SET FOO + <CHTYPE <GETBITS .IT <BITS 18 .POS>> FIX>>> + <SET FIXUPS <REST .FIXUPS>> + <RETURN>)> + <SET IT <PUTBITS .IT <BITS 18 .POS> <+ .FOO .OFFSET>>> + <PUT .FIXUPS 1 .IT> + <COND (<0? .POS> <SET FIXUPS <REST .FIXUPS>> <SET POS 18>) + (<SET POS 0>)>>)>>> + +<DEFINE RSUB-DMP (RSUB NAM BINCHN FIXCHN + "AUX" OFF FIXES (EXTRA-SLOTS (1)) + (EXTRA-SLOT-POS .EXTRA-SLOTS) + (EXTRA-COUNT <+ <* <LENGTH .RSUB> 2> 1>) + (COD <SUBSTRUC <1 .RSUB>>) GB RNAM) + #DECL ((RSUB) RSUBR (NAM) STRING + (COD) <SPECIAL <<PRIMTYPE UVECTOR> [REST <PRIMTYPE WORD>]>> + (EXTRA-COUNT) <SPECIAL <PRIMTYPE WORD>> (OFF) <PRIMTYPE WORD> + (GB FIXES) <OR FALSE <UVECTOR [REST <PRIMTYPE WORD>]>> + (EXTRA-SLOTS) LIST (EXTRA-SLOT-POS) <SPECIAL LIST>) + <SET OFF <17 .BINCHN>> + <SET FIXES + <SET FIXES + <GET .RSUB RSUBR '<ERROR "NO FIXUPS AVAILABLE">>>> + <COND (<NOT <TYPE? .FIXES UVECTOR>> + <ERROR "RSUBRS NOT IN MAGIC FORMAT">)> + <SET FIXES <FIXUP-MUNG <UVECTOR !.FIXES> .OFF>> + <PRINTB .FIXES .FIXCHN> + <PRINTB .COD .BINCHN> + <PRINC " %<RSUBR!- '[ %<PCODE!- "> + <PRIN1 .NAM> + <PRINC " "> + <PRINC .OFF> + <PRINC ">"> + <REPEAT ((GOODS <LIST !<REST .RSUB> !<REST .EXTRA-SLOTS>>)) + <COND (<EMPTY? .GOODS> <RETURN>)> + <PRINC " "> + <COND (<NOT <TYPE? <1 .GOODS> RSUBR RSUBR-ENTRY>> + <PRIN1 <1 .GOODS>>) + (<OR <GASSIGNED? <SET RNAM <2 <1 .GOODS>>>> + <TYPE? <1 .GOODS> RSUBR-ENTRY>> + <PRIN1 <2 <1 .GOODS>>>) + (T + <PUT <1 .GOODS> + 2 + <OR <LOOKUP <SET RNAM <PNAME .RNAM>> .TMPOB> + <INSERT .RNAM .TMPOB>>> + <RSUB-DMP <1 .GOODS> .NAM .BINCHN .FIXCHN>)> + <SET GOODS <REST .GOODS>>> + <PRINC "]>"> + <COND (<SET GB <GET .RSUB GLUE>> + <PROG (XG (COD <1 .RSUB>) IL + (LN + <- <LENGTH .COD> + <CHTYPE <GETBITS <NTH .COD <SET IL <LENGTH .COD>>> + <BITS 18>> + FIX> + <CHTYPE <GETBITS <NTH .COD .IL> <BITS 18 18>> FIX> + 1>) + (NG + <BYTER <SET XG <IUVECTOR <+ 1 </ <LENGTH .RSUB> 16>> 0>>>) + (OG <BYTER .GB>) WD (CT 0)) + #DECL ((LN CT) FIX (WD) <PRIMTYPE WORD> (OG NG) STRING + (XG) <UVECTOR [REST <PRIMTYPE WORD>]> (COD) CODE) + <REPEAT () + <AND <G? <SET CT <+ .CT 1>> .LN> <RETURN>> + <SET WD <NTH .COD .CT>> + <AND <NOT <0? <CHTYPE <1 .OG> FIX>>> + <==? <CHTYPE <GETBITS .WD ,INDEX-FIELD> FIX> ,R> + <PUT .NG + <+ </ <CHTYPE <GETBITS .WD ,HW> FIX> 2> 1> + <1 .OG>>> + <SET OG <REST .OG>>> + <PUT .RSUB PGLUE .XG>>)>> + +<DEFINE PDUMP ("TUPLE" NAMS + "AUX" RSUB NAM TMP DIR + (PNAM + <REPEAT ((INAM + <COND (<TYPE? <SET TMP <1 .NAMS>> STRING> + <SET NAMS <REST .NAMS>> + .TMP) + (<PNAME <1 .NAMS>>)>) + (N 0) + (NM .INAM) + CHN) + #DECL ((NM INAM) STRING (N) FIX) + <SET DIR + <COND + (<==? ,MUDDLE 49> ,SAVDIR) + (ELSE + <STRING + <ASCII + <+ 48 + <MOD <- <ASCII <NTH .NM <MIN <LENGTH .NM> 6>>> + 32> + ,NDIRS>>> + ,SAVDIR>)>> + <COND (<SET CHN <OPEN-NR "READ" .NM ">" "DSK" .DIR>> + <CLOSE .CHN> + <SET N <+ .N 1>> + <SET NM <STRING <UNPARSE .N> .INAM>>) + (T <RETURN .NM>)>>) BINCHN FIXCHN + (OBL <COND (<EMPTY? .OBLIST> FULL-OBL) (BLOCK)>) + (OOBLIST .OBLIST) GOODS THIS-FORM FIXUPS POS OBLIST) + #DECL ((PNAM MUDNUM) STRING (POS) FIX (FIXUPS) <UVECTOR <PRIMTYPE WORD>> + (THIS-FORM) FORM (OBLIST) <SPECIAL ANY> (GOODS) LIST + (BINCHN FIXCHN) <OR FALSE CHANNEL>) + <PROG () + <COND + (<NOT <SET BINCHN + <OPEN "PRINTB" + .PNAM + <STRING "SAV" <UNPARSE ,MUDDLE>> + "DSK" + .DIR>>> + <RETURN .BINCHN>) + (<NOT <SET FIXCHN <OPEN "PRINTB" .PNAM "FIXUP" "ARC" .DIR>>> + <CLOSE .BINCHN> + <RETURN .FIXCHN>) + (ELSE + <PRINTB '![0 0!] .FIXCHN> + <REPEAT (OUTCHAN) + #DECL ((OUTCHAN) <SPECIAL <OR FALSE CHANNEL>>) + <COND (<EMPTY? .NAMS> <RETURN>)> + <SET NAM <1 .NAMS>> + <PROG () + <COND + (<SET OUTCHAN <OPEN "PRINT" "_PDMP_" ">" "DSK" <SNAME>>>) + (ELSE + <ERROR OUTPUT-OPEN-FAILED-ERRET-ANYTHING-TO-RETRY-ERRORS + PDUMP + .OUTCHAN> + <AGAIN>)>> + <PROG () + <COND (<NOT <ASSIGNED? .NAM>> + <RETURN '#FALSE ("OBJECT NOT GROUP NAME")>)> + <SET GOODS ..NAM> + <SET OBLIST <GET .NAM .OBL '.OOBLIST>> + <PRINC "'<PCODE "> + <PRIN1 .PNAM> + <PRINC ">"> + <CRLF> + <REPEAT (MCR) + <COND (<EMPTY? .GOODS> <RETURN>)> + <COND (<AND <TYPE? <1 .GOODS> FORM> + <SET THIS-FORM <1 .GOODS>> + <==? 3 <LENGTH .THIS-FORM>> + <OR <AND <SET MCR <TYPE? <3 .THIS-FORM> MACRO>> + <TYPE? <SET RSUB <1 <3 .THIS-FORM>>> + RSUBR>> + <TYPE? <SET RSUB <3 .THIS-FORM>> RSUBR>> + <COND (<TYPE? <1 .RSUB> CODE>) + (ELSE + <PRINC "PURE-RSUBR-IN-GROUP " ,OUTCHAN> + <PRIN1 <2 .THIS-FORM> ,OUTCHAN> + <TERPRI ,OUTCHAN>)> + <NOT <GET .RSUB IMPURE>>> + <TERPRI> + <PRINC "<"> + <PRIN1 <1 .THIS-FORM>> + <PRINC " "> + <PRIN1 <2 .THIS-FORM>> + <PRINC " "> + <COND (.MCR <PRINC "#MACRO (">)> + <RSUB-DMP .RSUB .PNAM .BINCHN .FIXCHN> + <PRINC <COND (.MCR ")> ") (ELSE "> ")>> + <AND <GET .RSUB PGLUE> + <PRINT <FORM AND + '<ASSIGNED? GLUE> + '.GLUE + <FORM PUT + <FORM GVAL <2 .RSUB>> + PGLUE + <GET .RSUB PGLUE>>>>>) + (T <PRINT <1 .GOODS>>)> + <TERPRI> + <SET OBLIST <GETPROP .GOODS .OBL '.OBLIST>> + <SET GOODS <REST .GOODS>>>> + <COND + (<RENAME .OUTCHAN <PNAME .NAM> "FBIN">) + (ELSE + <ERROR + RENAME-OF-TEMP-FAILED-ERRET-ANYTHING-TO-CONTINUE-ERRORS + PDUMP + .NAM>)> + <CLOSE .OUTCHAN> + <SET NAMS <REST .NAMS>>> + <SET POS <17 .FIXCHN>> + <ACCESS .FIXCHN 0> + <PRINTB <UVECTOR .POS ,MUDDLE> .FIXCHN> + <CLOSE .BINCHN> + <CLOSE .FIXCHN> + "DUMPED")>>> + +<ENDPACKAGE> diff --git a/src/mprog/pmap.udl076 b/src/mprog/pmap.udl076 new file mode 100644 index 00000000..364fa246 --- /dev/null +++ b/src/mprog/pmap.udl076 @@ -0,0 +1,411 @@ + +<RPACKAGE "PMAP"> + +<ENTRY PMCHAN + POPEN + PREAD + PWRITE + PRESET + PCLOSE + PBUFFERS + PWIRE + PUNWIRE + PMMPLEX + PMCHANLIST + PMMAX + PMAP-RESTORE + CORE-BLOCK + PAGE-FIND + PAGE-GIVE + SHARERS> + +<SETG PMTIME 0> + +<SETG PMCHANLIST ()> + +<SETG PMMAX 4> + +<GDECL (PRVCT) + <UVECTOR [REST <VECTOR [3 ANY]>]> + (PMTIME PMMAX) + FIX + (PMCHANLIST) + <LIST [REST PMCHAN]>> + +<NEWTYPE PMCHAN + VECTOR + '<VECTOR CHANNEL STRING FIX LIST FIX APPLICABLE FIX FIX>> + +<FLOAD "MBPROG;PMAPR"> + +<DEFINE PMMPLEX ("OPTIONAL" CHAN "AUX" (OC 0) (OLD <>)) + #DECL ((CHAN) PMCHAN (OLD) <SPECIAL <OR FALSE PMCHAN>> (OC) <SPECIAL FIX>) + <COND (<L? ,PMMAX 0>) + (<ASSIGNED? CHAN> <CLOSE <1 .CHAN>>) + (ELSE + <MAPF <> + <FUNCTION (C) + #DECL ((C) PMCHAN (OLD) <OR FALSE PMCHAN> (OC) FIX) + <COND (<G? <1 <1 .C>> 0> + <SET OC <+ .OC 1>> + <COND (<AND <N=? <2 .C> "LOCKED"> + <OR <NOT .OLD> <G? <8 .OLD> <8 .C>>>> + <SET OLD .C>)>)>> + ,PMCHANLIST> + <COND (<AND <G=? .OC ,PMMAX> .OLD> <CLOSE <1 .OLD>>)>)>> + +<DEFINE PMAP-RESTORE () + <MAPF <> + <FUNCTION (C) + #DECL ((C) PMCHAN) + <MAPF <> + <FUNCTION (B) + #DECL ((B) <UVECTOR [3 FIX]>) + <PAGE-GIVE <2 .B>>> + <4 .C>> + <PUT .C 4 ()>> + ,PMCHANLIST> + "DONE"> + +<DEFINE POPEN (MODE FILE "OPTIONAL" (MAXBUF 2) (SWAPPER ,BUF-LRU) "AUX" CHAN) + #DECL ((MODE FILE) STRING (MAXBUF) FIX (SWAPPER) APPLICABLE + (CHAN) <OR CHANNEL FALSE> (VALUE) <OR PMCHAN FALSE>) + <PROG (PC TMP FL) + #DECL ((PC) PMCHAN (TMP FL) ANY) + <COND (<=? .MODE "READ"> + <COND (<NOT <SET CHAN <OPEN "READ" .FILE>>> <RETURN .CHAN>)>) + (<=? .MODE "PRINT"> + <COND (<AND <NOT <SET CHAN <OPEN "READ" .FILE>>> + <NOT <SET CHAN <OPEN "PRINTB" .FILE>>>> + <RETURN .CHAN>)> + <DISK-UPDATE .CHAN>) + (<=? .MODE "LOCKED"> + <COND (<NOT <SET CHAN <OPEN "PRINTO" .FILE>>> <RETURN .CHAN>)>) + (ELSE <RETURN #FALSE ("MODE NOT READ, PRINT, OR LOCKED")>)> + <PMMPLEX> + <COND (<N=? <9 .CHAN> "DSK"> <SET FL 0>) + (<SET FL <*FILE-LENGTH .CHAN>>) + (ELSE <ERROR FILE-LENGTH-FAILED!-ERRORS POPEN>)> + <SET PC + <CHTYPE <VECTOR .CHAN + .MODE + <COND (<=? .MODE "READ"> 18253611008) + (<MEMBER .MODE ("PRINT" "LOCKED")> + -25769803776)> + () + .MAXBUF + .SWAPPER + .FL + 0> + PMCHAN>> + <COND + (<AND <=? .MODE "LOCKED"> <NOT <0? <7 .PC>>>> + <COND + (<SET TMP + <REPEAT ((D 0) (L </ <- <7 .PC> 1> 1024>) (P <PAGE-BUY .PC>)) + #DECL ((D L P) FIX) + <GET-CORE-BLOCK <3 .PC> -1 .P <1 <1 .PC>> .D> + <COND (<G? <SHARERS .P> 1> + <CORE-BLOCK 0 -1 .P 0 0> + <CLOSE <1 .PC>> + <RETURN <CHTYPE ("PAGE OF LOCKED FILE IS SHARED" .D) + FALSE>>)> + <COND (<G=? <SET D <+ .D 1>> .L> + <CORE-BLOCK 0 -1 .P 0 0> + <PAGE-GIVE .P> + <RETURN T>)>>>) + (THEN <RETURN .TMP>)>)> + <1 <SETG PMCHANLIST (.PC !,PMCHANLIST)>>>> + +<DEFINE PREAD (CHAN VCT D1 "AUX" RQ) + #DECL ((CHAN) PMCHAN (VCT) UVECTOR (D1) FIX (RQ) LIST) + <COND (<EMPTY? <SET RQ <PIOT .CHAN .VCT .D1 0>>> .VCT) + (ELSE <CHTYPE .RQ FALSE>)>> + +<DEFINE PWRITE (CHAN VCT D1 + "AUX" (MODE <2 .CHAN>) RQ (EOF </ <7 .CHAN> 1024>) + RL (ITSMODE <2 <1 .CHAN>>)) + #DECL ((CHAN) <SPECIAL PMCHAN> (VCT) UVECTOR (D1) FIX (EOF) <SPECIAL FIX> + (RL) ANY (RQ) LIST (MODE ITSMODE) STRING) + <COND (<OR <=? "PRINT" .MODE> <=? "LOCKED" .MODE>> + <COND (<EMPTY? <SET RQ <PIOT .CHAN .VCT .D1 -1>>> .VCT) + (ELSE + <MAPF <> + <FUNCTION (B) + #DECL ((B) <UVECTOR [4 FIX]> (EOF) FIX) + <COND (<==? .EOF <1 .B>> + <GET-CORE-BLOCK 0 -1 <2 .B> 0 0> + <PUT .B 1 -1> + <PUT .B 4 -1> + <MAPLEAVE>)>> + <4 .CHAN>> + <COND (<NOT <OR <=? .ITSMODE "PRINTB"> <=? .ITSMODE "PRINTO">>> + <PRESET .CHAN "PRINTO">) + (<0? <1 <1 .CHAN>>> <PMMPLEX> + <PROG () + <OR <SET RL <RESET <1 .CHAN>>> + <NOT <ERROR RESET-FAILED!-ERRORS .RL <1 .CHAN> PWRITE>> + <AGAIN>>>)> + <MAPF <> + <FUNCTION (R) + #DECL ((R) <VECTOR <OR UVECTOR ATOM> FIX FIX> + (CHAN) PMCHAN) + <PUT .CHAN 7 <IOT-REQ .R .CHAN>>> + .RQ> + <COND (<=? .MODE "LOCKED"> <ACCESS <1 .CHAN> 0>) + (ELSE <PRESET .CHAN "READ">)> + .VCT)>) + (ELSE #FALSE ("ATTEMPT-TO-PRINT-ON-NON-PRINT-CHANNEL"))>> + +<DEFINE PIOT (CHAN VCT D1 IN-OUT + "AUX" (REQ <REQUESTS .VCT .D1 <7 .CHAN>>) (BUFLIST <4 .CHAN>)) + #DECL ((CHAN) <SPECIAL PMCHAN> (VCT) UVECTOR (D1) FIX (IN-OUT) <SPECIAL FIX> + (REQ) <SPECIAL <LIST [REST VECTOR]>> (VALUE) <LIST [REST VECTOR]> + (BUFLIST) <LIST [REST UVECTOR]>) + <PUT .CHAN 8 <PMCOUNT>> + <MAPF <> + <FUNCTION (BUF "AUX" (DPAGE <1 .BUF>) (R .REQ)) + #DECL ((BUF) <UVECTOR [4 FIX]> (DPAGE) FIX + (R) <LIST [REST <VECTOR [3 ANY]>]>) + <REPEAT (RR) + #DECL ((RR) <VECTOR UVECTOR FIX FIX>) + <COND (<EMPTY? .R> <RETURN>)> + <COND (<==? <1 <1 .R>> PAST-EOF>) + (ELSE + <SET RR <1 .R>> + <COND (<OR <EMPTY? <1 .RR>> <G=? <3 .RR> <7 .CHAN>>>) + (<==? </ <3 .RR> 1024> .DPAGE> + <COPY-REQ .RR .BUF .IN-OUT> + <PUT <1 .R> + 1 + <REST <1 .RR> <LENGTH <1 .RR>>>>)>)> + <SET R <REST .R>>>> + .BUFLIST> + <SET REQ + <MAPF ,LIST + <FUNCTION (R) + #DECL ((R) <VECTOR <OR ATOM UVECTOR> FIX FIX> + (CHAN) PMCHAN (IN-OUT) FIX) + <COND (<AND <TYPE? <1 .R> UVECTOR> <EMPTY? <1 .R>>> + <MAPRET>) + (<G=? <3 .R> <7 .CHAN>> <MAPRET .R>) + (ELSE + <COPY-REQ .R <GET-BUF .R .CHAN> .IN-OUT> + <MAPRET>)> + T> + .REQ>>> + +<DEFINE PMCOUNT () #DECL ((VALUE) FIX) <SETG PMTIME <+ ,PMTIME 1>>> + +<DEFINE PCLOSE (CHAN) + #DECL ((VALUE) PMCHAN (CHAN) <SPECIAL PMCHAN>) + <MAPF <> + <FUNCTION (B) + #DECL ((B) <UVECTOR [4 FIX]>) + <COND (<G=? <2 .B> 0> + <CORE-BLOCK 0 -1 <2 .B> 0 0> + <PAGE-GIVE <2 .B>> + <PUT .B 1 -1> + <PUT .B 4 -1>)>> + <4 .CHAN>> + <PUT .CHAN 4 ()> + <SETG PMCHANLIST + <MAPF ,LIST + <FUNCTION (C) + #DECL ((C CHAN) PMCHAN) + <COND (<==? .C .CHAN> <MAPRET>) (ELSE <MAPRET .C>)> + T> + ,PMCHANLIST>> + <CLOSE <1 .CHAN>> + .CHAN> + +<DEFINE PRESET (CHAN "OPTIONAL" (MODE "READ") "AUX" (CH <1 .CHAN>) RL FL) + #DECL ((CHAN VALUE) PMCHAN (CH) CHANNEL (MODE) STRING + (RL) ANY (FL) <OR FIX FALSE>) + <CLOSE .CH> + <PUT .CH 2 .MODE> + <PMMPLEX> + <PROG () + <OR <SET RL <RESET .CH>> + <NOT <ERROR RESET-FAILED!-ERRORS .RL .CH PRESET>> + <AGAIN>>> + <COND (<SET FL <*FILE-LENGTH .CH>>) + (ELSE <ERROR FILE-LENGTH-FAILED!-ERRORS PRESET>)> + <PUT .CHAN 7 .FL> + .CHAN> + +<DEFINE PBUFFERS (CHAN MAX + "AUX" (BUFLIST <4 .CHAN>) (BL <- <LENGTH .BUFLIST> .MAX>)) + #DECL ((CHAN) PMCHAN (MAX BL) FIX (BUFLIST) <LIST [REST <UVECTOR [4 FIX]>]>) + <COND + (<G? .MAX 0> + <PUT .CHAN 5 .MAX> + <COND + (<G? .BL 0> + <REPEAT (F) + <COND (<G? .BL 0> + <PAGE-GIVE <2 <SET F <APPLY <6 .CHAN> .BUFLIST>>>> + <PUT .F 1 -1> + <SET BL <- .BL 1>>) + (ELSE + <PUT .CHAN + 4 + <MAPF ,LIST + <FUNCTION (B) + #DECL ((B) <UVECTOR [4 FIX]>) + <COND (<G? <1 .B> 0> <MAPRET .B>) + (ELSE <MAPRET>)> + T> + .BUFLIST>> + <RETURN>)>>)> + .MAX)>> + +<DEFINE PWIRE (CHAN DPAGE) + #DECL ((CHAN) PMCHAN (DPAGE) FIX) + <PUT <REPEAT ((B <4 .CHAN>)) + #DECL ((B) <LIST [REST <UVECTOR [4 FIX]>]>) + <COND (<EMPTY? .B> + <RETURN <GET-BUF [![!] 0 <* .DPAGE 1024>] .CHAN>>) + (<==? <1 <1 .B>> .DPAGE> <RETURN <1 .B>>)> + <SET B <REST .B>>> + 4 + 34359738367>> + +<DEFINE PUNWIRE (CHAN DPAGE) + #DECL ((CHAN) PMCHAN (DPAGE) <SPECIAL FIX>) + <REPEAT ((B <4 .CHAN>)) + #DECL ((B) <LIST [REST <UVECTOR [4 FIX]>]>) + <COND (<EMPTY? .B> + <RETURN #FALSE ("BUFFER NOT CURRENTLY MAPPED")>) + (<==? <1 <1 .B>> .DPAGE> <PUT <1 .B> 4 0> <RETURN T>)> + <SET B <REST .B>>>> + +<DEFINE GET-BUF (R C "AUX" (BL <4 .C>) B P) + #DECL ((R) <VECTOR UVECTOR FIX FIX> (C) PMCHAN + (BL) <LIST [REST UVECTOR]> (B VALUE) <UVECTOR [4 FIX]> + (P) <OR FIX FALSE>) + <PAGE-MAP .C + <COND (<REPEAT ((B .BL)) + #DECL ((B) <LIST [REST UVECTOR]>) + <COND (<EMPTY? .B> <RETURN <>>) + (<==? <1 <1 .B>> -1> <RETURN <1 .B>>)> + <SET B <REST .B>>>) + (<L? <LENGTH .BL> <5 .C>> + <SET P <PAGE-BUY .C>> + <PUT .C 4 (<SET B <UVECTOR -1 .P <* .P 1024> 0>> !<4 .C>)> + .B) + (ELSE <APPLY <6 .C> .BL>)> + </ <3 .R> 1024>>> + +<DEFINE PAGE-MAP (CHAN BUF DSKPAGE "AUX" RL) + #DECL ((CHAN) PMCHAN (BUF VALUE) <UVECTOR [4 FIX]> (DSKPAGE) FIX) + <COND (<0? <1 <1 .CHAN>>> <PMMPLEX> + <PROG () + <OR <SET RL <RESET <1 .CHAN>>> + <NOT <ERROR RESET-FAILED!-ERRORS .RL <1 .CHAN> PAGE-MAP>> + <AGAIN>>>)> + <GET-CORE-BLOCK <3 .CHAN> + -1 + <2 .BUF> + <1 <1 .CHAN>> + .DSKPAGE> + <PUT .BUF 1 .DSKPAGE> + .BUF> + +<SETG PRVCT <IUVECTOR 4 '<VECTOR 0 0 0>>> + +<DEFINE APPEND (A B C D "AUX" T) + #DECL ((A VALUE) LIST (T) VECTOR (B C D) ANY) + <COND (<EMPTY? ,PRVCT> <SET T <VECTOR .B .C .D>>) + (ELSE + <SET T <1 ,PRVCT>> + <PUT .T 1 .B> + <PUT .T 2 .C> + <PUT .T 3 .D> + <SETG PRVCT <REST ,PRVCT>>)> + <REST <PUTREST .A (.T)>>> + +<DEFINE REQUESTS (VCT DSK EOF + "AUX" (N <LENGTH .VCT>) (DD <+ .DSK .N>) (L (T)) (LL .L)) + #DECL ((VCT) UVECTOR (DSK EOF N DD) FIX (L LL) LIST + (VALUE) <LIST [REST <VECTOR <OR UVECTOR ATOM> FIX FIX>]>) + <SETG PRVCT <TOP ,PRVCT>> + <COND (<L? .DSK 0> + <ERROR READ-OR-WRITE-ADDRESS-NEGATIVE?!-ERRORS PIOT>)> + <REPEAT (DDM DDL) + #DECL ((DDM DDL) FIX) + <SET DDM + <COND (<==? .DSK .EOF> .DD) + (<G? .DSK .EOF> + <SET LL <APPEND .LL PAST-EOF <- .DSK .EOF> .EOF>> + .DD) + (<NXTBLK .DSK .EOF>)>> + <SET DDL <- <COND (<L? .DD .DDM> .DD) (.DDM)> .DSK>> + <SET LL <APPEND .LL .VCT .DDL .DSK>> + <COND (<0? <SET N <- .N .DDL>>> <RETURN <REST .L>>) + (ELSE + <SET DSK <+ .DSK .DDL>> + <SET VCT <REST .VCT .DDL>>)>>> + +<DEFINE NXTBLK (N EOF "AUX" (B <+ 1 <CHTYPE <ORB .N 1023> FIX>>)) + #DECL ((N EOF B VALUE) FIX) + <COND (<L? .EOF .B> .EOF) (.B)>> + +<DEFINE BUF-LRU (BUFLIST "AUX" (OLD <1 .BUFLIST>)) + #DECL ((BUFLIST) <LIST [REST <UVECTOR [4 FIX]>]> + (OLD VALUE) <UVECTOR [4 FIX]>) + <REPEAT ((B <REST .BUFLIST>)) + <COND (<EMPTY? .B> <RETURN .OLD>) + (<G? <4 .OLD> <4 <1 .B>>> <SET OLD <1 .B>>)> + <SET B <REST .B>>>> + +<DEFINE IOT-REQ (RQ CHAN "AUX" (CH <1 .CHAN>)) + #DECL ((RQ) <VECTOR <OR UVECTOR ATOM> FIX FIX> (CHAN) PMCHAN + (CH) CHANNEL) + <ACCESS .CH <3 .RQ>> + <COND (<==? <1 .RQ> PAST-EOF> + <3 <PUT .RQ 3 <PAGE-BUY .CHAN>>> + <APPEND-IOT <2 .RQ> + <GET-CORE-BLOCK -25769803776 -1 <3 .RQ> 131073 0> + .CH> + <CORE-BLOCK 0 -1 <3 .RQ> 0 0> + <PAGE-GIVE <3 .RQ>> + <+ <7 .CHAN> <2 .RQ>>) + (ELSE <PRINTB <1 .RQ> .CH> <+ <3 .RQ> <2 .RQ>>)>> + +<DEFINE GET-CORE-BLOCK (MM MJ1 MP1 MJ2 MP2 "AUX" R) + #DECL ((R) <OR FIX <FALSE FIX>> (MM MJ1 MP1 MJ2 MP2) <PRIMTYPE WORD> + (VALUE) <PRIMTYPE WORD>) + <PROG () + <COND + (<SET R <CORE-BLOCK .MM .MJ1 .MP1 .MJ2 .MP2>>) + (<N==? <1 .R> *37*> ;"not no-core error?" + <ERROR BAD-CALL!-ERRORS CORE-BLOCK <1 .R> [.MM .MJ1 .MP1 .MJ2 .MP2]>) + (<ERROR CANT-GET-CORE-ERRET-NON-FALSE-TO-RETRY!-ERRORS> + <AGAIN>) + (ELSE <ERROR CORE-EXHAUSTED-YOU-LOSE!-ERRORS>)>>> + +<DEFINE PAGE-BUY (CHAN "AUX" (P <PAGE-FIND>)) + #DECL ((VALUE) FIX (CHAN) PMCHAN (P) <OR FIX FALSE>) + <OR .P + <REPEAT ((C (.CHAN !,PMCHANLIST)) B BL) + #DECL ((C) <LIST [REST PMCHAN]> (B) <UVECTOR [4 FIX]> (BL) LIST) + <COND (<EMPTY? .C> + <ERROR MUDDLE-CORE-EXHAUSTED-YOU-LOSE!-ERRORS>) + (<NOT <EMPTY? <SET BL <4 <1 .C>>>>> + <SET B <BUF-LRU .BL>> + <PUT <1 .C> 4 <REMOVE-FROM .BL .B>> + <RETURN <2 .B>>)> + <SET C <REST .C>>>>> + +<DEFINE REMOVE-FROM (L E "AUX" (R <MEMQ .E .L>) (L1 <LENGTH .L>)) + #DECL ((VALUE L) LIST (E) ANY (R) <OR LIST FALSE> (L1) FIX) + <COND (.R + <COND (<==? .R .L> <REST .L>) + (ELSE + <PUTREST <REST .L <- .L1 <+ <LENGTH .R> 1>>> <REST .R 1>> + .L)>) + (ELSE .L)>> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog/pmapr.udl004 b/src/mprog/pmapr.udl004 new file mode 100644 index 00000000..e2b711de --- /dev/null +++ b/src/mprog/pmapr.udl004 @@ -0,0 +1,288 @@ +;"PMAP RSUBRS" + +;"RSUBR FOR MAPPING PAGES" + +<TITLE CORE-BLOCK> ;"MAP A PAGE" + <DECLARE ("VALUE" <OR FIX FALSE> <PRIMTYPE WORD> FIX FIX FIX FIX)> + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* ICORE-BLOCK> + <JRST FINIS> + +<INTERNAL-ENTRY ICORE-BLOCK 5> + <SUBM M* (P)> + <*CALL CORE> + <JRST FAIL> + <MOVSI A* <TYPE-CODE FIX>> + <MOVE B* -4 (TP)> ;"CORE BLOCK NUMBER" + <LSH B* 10> ;"CHANGE TO ADDRESS" +CBX <SUB TP* [<10 (10)>]> + <JRST MPOPJ> + +FAIL <MOVSI C* <TYPE-CODE FIX>> + <MOVEI E* 0> + <PUSHJ P* CICONS> + <MOVSI A* <TYPE-CODE FALSE>> + <JRST CBX> + +CORE <SETZ> + <SIXBIT "CORBLK"> + <(TP) -8> ;"MODE" + <(TP) -6> ;"INTO" + <(TP) -4> + <(TP) -2> ;"FROM" + <(TP)> + <SETZB D> ; "ERROR" + +;"RSUBR TO FIND FREE CORE PAGES" + +<TITLE PAGE-FIND> + <DECLARE ("VALUE" <OR FIX FALSE> "OPTIONAL" FIX)> + <JUMPGE AB* ONEARG> + <DPUSH TP* (AB)> + <PUSHJ P* IPAGE-FIND2> + <JRST FINIS> + +ONEARG <PUSHJ P* IPAGE-FIND1> + <JRST FINIS> + +<INTERNAL-ENTRY IPAGE-FIND1 0> + <SUBM M* (P)> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* [<1>]> + <JRST PF1> + +<INTERNAL-ENTRY IPAGE-FIND2 1> + <SUBM M* (P)> +PF1 <MOVE A* (TP)> ;"YES, GET IT" + <JUMPLE A* WRONGT> + <PUSHJ P* PGFIND> + <JUMPL B* [<MOVSI A* TFALSE> + <SETZ B*> + <JRST PFX>]> + <MOVSI A* <TYPE-CODE FIX>> +PFX <SUB TP* [<2 (2)>]> + <JRST MPOPJ> + +;"RSUBR TO GIVE BACK CORE PAGES" + +<TITLE PAGE-GIVE> + <DECLARE ("VALUE" FIX FIX "OPTIONAL" FIX)> + <DPUSH TP* (AB)> + <AOBJN AB* HERE 1> + <AOBJP AB* ONEARG> + <DPUSH TP* (AB)> + <PUSHJ P* IPAGE-GIVE2> + <JRST FINIS> + +ONEARG <PUSHJ P* IPAGE-GIVE1> + <JRST FINIS> + +<INTERNAL-ENTRY IPAGE-GIVE1 1> + <SUBM M* (P)> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* [<1>]> + <JRST PG1> + +<INTERNAL-ENTRY IPAGE-GIVE2 2> + <SUBM M* (P)> +PG1 <MOVE A* (TP)> ;"YES, GET IT" + <JUMPLE A* WRONGT> + <MOVE B* (TP) -2> ;"GET NUMBER OF FIRST BLOCK" + <JUMPL B* WRONGT> + <MOVEI O* (B)> + <ADDI O* (A)> + <CAIGE B* 256> ;"VALID FIRST BLOCK NUMBER ?" + <CAILE O* 256> ;"VALID LAST+1 BLOCK NUMBER ?" + <JRST WRONGT> ;"NO, LOSE" + <PUSHJ P* PGGIVE> + <MOVSI A* <TYPE-CODE FIX>> + <SUB TP* [<4 (4)>]> + <JRST MPOPJ> + +<TITLE APPEND-IOT> + <DECLARE ("VALUE" <PRIMTYPE WORD> + FIX ; "number of words to write" + <PRIMTYPE WORD> ; "buffer" + CHANNEL)> ; "channel to write on" + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* IAPPEND-IOT> + <JRST FINIS> + +<INTERNAL-ENTRY IAPPEND-IOT 3> + <SUBM M* (P)> + <MOVE B* -4 (TP)> + <MOVNS B> +; "make fake uvector" +APPLOOP <ADDI B* 1000> + <PUSH P* B> + <SKIPG B> + <SETZ B*> + <SUBI B* 1000> + <HRLS B> + <HRR B* -2 (TP)> + <HLRE A* B> + <MOVMS A> + <ADDI A* (B)> + <SETZM (A)> +; "call printb" + <MOVE C* -1 (TP)> + <MOVE D* (TP)> + <PUSH TP* <TYPE-WORD UVECTOR>> + <PUSH TP* B> + <DPUSH TP* C> + <MCALL 2 PRINTB> + <POP P* B> + <JUMPL B* APPLOOP> +; "return the buffer pointer" + <MOVE A* -3 (TP)> + <MOVE B* -2 (TP)> + <SUB TP* [<6 (6)>]> + <JRST MPOPJ> + +; "rsubr to find the length of a file" + +<TITLE *FILE-LENGTH> + <DECLARE ("VALUE" <OR FIX FALSE> CHANNEL)> + <DPUSH TP* (AB)> + <PUSHJ P* IFILE-LENGTH> + <JRST FINIS> + +<INTERNAL-ENTRY IFILE-LENGTH 1> + <SUBM M* (P)> + <MOVE A* (TP)> + <MOVE B* (A) 21> ; "status slot" + <ANDI B* *77*> + <CAIE B* *43*> + <JRST NOTDSK> + <*CALL FILLEN> + <JRST FAIL> + <MOVSI A* <TYPE-CODE FIX>> +FLX <SUB TP* [<2 (2)>]> + <JRST MPOPJ> + +NOTDSK <MOVSI A* <TYPE-CODE FIX>> + <SETZ B*> + <JRST FLX> + +FAIL <MOVSI A* <TYPE-CODE FALSE>> + <SETZ B*> + <JRST FLX> + +FILLEN <SETZ> + <SIXBIT "FILLEN"> + <(A) 1> ; "io channel #" + <SETZM B> + +<TITLE DISK-UPDATE> + <DECLARE ("VALUE" <OR 'T FALSE> CHANNEL)> + <DPUSH TP* (AB)> + <PUSHJ P* IDISK-UPDATE> + <JRST FINIS> + +<INTERNAL-ENTRY IDISK-UPDATE 1> + <SUBM M* (P)> + <MOVE A* (TP)> + <MOVE A* 1(A)> + <*CALL DSKUPD> + <JRST UPD-LOST> + <DMOVE A* <PQUOTE T>> +DUX <SUB TP* [<2 (2)>]> + <JRST MPOPJ> +UPD-LOST + <MOVSI A* <TYPE-CODE FALSE>> + <SETZM B> + <JRST DUX> + +DSKUPD + <SETZ> + <SIXBIT "DSKUPD"> + <SETZ A> + +; "takes request, buffer, direction (0=read), returns buffer" + +<TITLE COPY-REQ> + <PSEUDO <SETG *RDTIME #OPCODE *42000000017*>> + <DECLARE ("VALUE" UVECTOR + <VECTOR UVECTOR FIX FIX> + <UVECTOR [4 FIX]> + FIX)> + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* ICOPY-REQ> + <JRST FINIS> + +<INTERNAL-ENTRY ICOPY-REQ 3> + <SUBM M* (P)> + <MOVE A* (TP) -4> + <MOVE B* (A) 1> + <MOVE C* (A) 3> + <MOVE D* (A) 5> + <ANDI D* *1777*> + <MOVE A* (TP) -2> + <MOVE E* (A) 1> + <LSH E* 10> + <ADD D* E> + <HRL B* D> + <SKIPE (TP)> + <MOVSS B> + <MOVE E* B> + <ADD E* C> + <BLT B* (E) -1> + <*RDTIME B*> + <MOVE A* (TP) -2> + <CAML B* (A) 3> + <MOVEM B* (A) 3> + <MOVE A* (TP) -4> + <MOVE B* (A) 1> + <MOVSI A* <TYPE-CODE UVECTOR>> + <SUB TP* [<6 (6)>]> + <JRST MPOPJ> + +<TITLE SHARERS> + <DECLARE ("VALUE" <OR FIX FALSE> + <PRIMTYPE WORD> + "OPTIONAL" <PRIMTYPE WORD>)> + <DPUSH TP* (AB)> + <AOBJN AB* HERE 1> + <AOBJP AB* ONEARG> + <DPUSH TP* (AB)> + <PUSHJ P* ISHARERS2> + <JRST FINIS> + +ONEARG <PUSHJ P* ISHARERS1> + <JRST FINIS> + +<INTERNAL-ENTRY ISHARERS1 1> + <SUBM M* (P)> + <MOVSI A* <TYPE-CODE FIX>> + <MOVNI B* 1> + <EXCH A* -1 (TP)> + <EXCH B* (TP)> + <DPUSH TP* A> + <JRST SH2> + +<INTERNAL-ENTRY ISHARERS2 2> + <SUBM M* (P)> +SH2 <*CALL CORE> + <JRST FAIL> + <MOVSI A* <TYPE-CODE FIX>> + <HRRZS B> +SHX <SUB TP* [<4 (4)>]> + <JRST MPOPJ> + +; "failed" +FAIL <MOVSI A* <TYPE-CODE FALSE>> + <SETZ B*> + <JRST SHX> + +; ".call block" +CORE <SETZ> + <SIXBIT "CORTYP"> + <-2 (TP)> ; "JOB" + <(TP)> ; "PAGE" + <MOVEM B> + <MOVEM B> + <MOVEM B> + <SETZM B> ; "# OF SHARERS" diff --git a/src/mprog/qput.ujhm01 b/src/mprog/qput.ujhm01 new file mode 100644 index 00000000..59cc2a46 --- /dev/null +++ b/src/mprog/qput.ujhm01 @@ -0,0 +1,135 @@ +<PACKAGE "QPUT"> + +<ENTRY PUTAWAY UNPUTAWAY + READ-PUTAWAY UNPUTAWAY-WRITE + MAKE-TEMPLATE FALSE-PRIME> + +<NEWTYPE FALSE-PRIME LIST> + + ; "PUTAWAY CONVERTS EXTERNAL FORMAT INTO A COMPLETE, NEW STRUCTURE," + ; "LIKE THE TEMPLATE, WITH A FALSE FOR EVERY NON-SPECIFIED FIELD" + ; "EXTERNAL FORMAT IS AN ASSOCIATIVE STRUCTURE OF ATOMS AND OBJECTS" + ; "WHERE THE ATOMS MUST GVAL TO A FIX" + +<DEFINE PUTAWAY (TEMPLAT DATA "OPTIONAL" (ERRORFUNC ,ERROR) + "AUX" (RESULT <CHTYPE <APPLY ,<PRIMTYPE .TEMPLAT> !.TEMPLAT> + <TYPE .TEMPLAT>>)) + #DECL ((VALUE TEMPLAT DATA RESULT) STRUCTURED + (ERRORFUNC) APPLICABLE) + + <REPEAT () + <COND (<EMPTY? .DATA> <RETURN .RESULT>) + (<AND <TYPE? <1 .DATA> ATOM> + <GASSIGNED? <1 .DATA>> + <TYPE? ,<1 .DATA> FIX>> + <PUT .RESULT ,<1 .DATA> <2 .DATA>>) + (.ERRORFUNC + <APPLY .ERRORFUNC <1 .DATA> <2 .DATA> + ILLEGAL-FIELD-NAME PUTAWAY>)> + <SET DATA <REST .DATA 2>> >> + + + ; "READ-PUTAWAY READS A PUTAWAY FORM OF DATA STRUCTURE ACCORDING TO THE" + ; "GIVEN TEMPLATE, AND CONVERTS IT INTO INTERNAL FORM (SEE PUTAWAY ABOVE)" + +<DEFINE READ-PUTAWAY (TEMPLAT CHNL + "OPTIONAL" (EF ,ERROR) (OBL .OBLIST) "AUX" D) + #DECL ((VALUE TEMPLAT) STRUCTURED (CHNL) CHANNEL + (EF) APPLICABLE (D) ANY + (OBL) <LIST [REST OBLIST]>) + + <PROG ((OBLIST .OBL)) + #DECL ((OBLIST) <SPECIAL LIST>) + <SET D <READ .CHNL <> >>> + <COND (<OR <=? <PRIMTYPE .D> VECTOR> <=? <PRIMTYPE .D> LIST>> + <PUTAWAY .TEMPLAT .D .EF>)> > + + + ; "UNPUTAWAY-WRITE WRITES THE EXTERNAL FORM OF A DATA BASE, WRITING" + ; "OUT ONLY NON-FALSE FIELDS SPECIFIED BY ITS LIST OF ATOMS" + ; "AN OBJECT OF TYPE 'FALSE-PRIME' WILL BE OUTPUT AS AN EMPTY FALSE" + +<DEFINE UNPUTAWAY-WRITE (ATOMS DATA CHNL + "OPTIONAL" (EF ,ERROR) (OBL .OBLIST) "AUX" D) + #DECL ((VALUE) ATOM + (ATOMS) <VECTOR [REST ATOM]> + (DATA) STRUCTURED + (CHNL) CHANNEL + (EF) APPLICABLE + (OBL) <LIST [REST OBLIST]> + (D) <VECTOR [REST ATOM ANY]>) + + <SET D <UNPUTAWAY .ATOMS .DATA .EF>> + <PRINC !"[ .CHNL> + <REPEAT ((OBLIST .OBL)) + #DECL ((OBLIST) <SPECIAL LIST>) + <COND (<EMPTY? .D> <RETURN T>)> + <PRIN1 <1 .D> .CHNL> + <PRINC <ASCII 9> .CHNL> + <PRIN1 <2 .D> .CHNL> + <TERPRI .CHNL> + <SET D <REST .D 2>> > + <PRINC !"] .CHNL> + <TERPRI .CHNL> + T> + + + ; "UNPUTAWAY CONVERTS INTERNAL FORM OF A DATA BASE INTO EXTERNAL" + ; "FORM; THAT IS, AN ASSOCIATIVE OBJECT OF ATOMS (NAMING THE SUB FIELDS)" + ; "AND THEIR RESPECTIVE 'VALUES'. 'FALSE' FIELDS ARE NOT WRITTEN" + ; "OUT, BUT A FIELD OF TYPE 'FALSE-PRIME!-QPUT!-PACKAGE!- ' WILL BE" + ; "CONVETED INTO AN EMPTY FALSE" + +<DEFINE UNPUTAWAY (ATOMS DATA "OPTIONAL" (ERRORFUNC ,ERROR) + "AUX" (L <LENGTH .DATA>)) + #DECL ((VALUE) <VECTOR [REST ATOM ANY]> + (ATOMS) <VECTOR [REST ATOM]> (L) FIX + (DATA) STRUCTURED + (ERRORFUNC) APPLICABLE) + + <MAPF ,VECTOR + #FUNCTION ((A "AUX" DATUM) #DECL((A) ATOM (DATUM) ANY) + <COND (<AND <GASSIGNED? .A> + <TYPE? ,.A FIX> + <G? ,.A 0> + <L=? ,.A .L>> + <COND (<TYPE? <SET DATUM <NTH .DATA ,.A>> FALSE-PRIME> + <MAPRET .A %<>>) + (.DATUM <MAPRET .A .DATUM>) + (<MAPRET>)>) + (T + <APPLY .ERRORFUNC + .A + ILLEGAL-FIELD-NAME + UNPUTAWAY> + <MAPRET>)> + T ; "MAKE COMPILER HAPPY") + .ATOMS> > + + + ; "MAKE-TEMPLATE GENERATES A TEMPLATE FOR THE ABOVE FUNCTIONS TO USE" + ; "IT SHOULD BE CALLED WITH A STRUCTURE (USUALLY VECTOR) CONTAINING" + ; "ATOMS (WATCH THE OBLIST) AND THEIR INITIAL VALUES FOR READIN" + ; "(DEFAULT VALUES WILL BE FALSE)" + + +<DEFINE MAKE-TEMPLATE (ATOMVAL + "AUX" (POS 1) (TMPL <IVECTOR </ <LENGTH .ATOMVAL> 2>>)) + #DECL ((TMPL VALUE) VECTOR + (ATOMVAL) <STRUCTURED [REST ATOM ANY]> + (POS) FIX) + + <REPEAT () + <COND (<EMPTY? .ATOMVAL> <RETURN .TMPL>)> + <SET <1 .ATOMVAL> .POS> + <COND (<NOT <GASSIGNED? <1 .ATOMVAL>>> + <SETG <1 .ATOMVAL> .POS> + <MANIFEST <1 .ATOMVAL>>) + (<N==? ,<1 .ATOMVAL> .POS> + <ERROR TEMPLATE-INDICES-DIFFER <1 .ATOMVAL> MAKE-TEMPLATE>)> + <PUT .TMPL .POS <2 .ATOMVAL>> + <SET POS <+ .POS 1>> + <SET ATOMVAL <REST .ATOMVAL 2>> >> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog/releas.ujmb04 b/src/mprog/releas.ujmb04 new file mode 100644 index 00000000..f6daecea --- /dev/null +++ b/src/mprog/releas.ujmb04 @@ -0,0 +1,71 @@ +<TITLE RELEASE> ; "TELLS MUDDLE TO RECYCLE THIS OBJECT" +<DECLARE ("VALUE" ATOM <OR <PRIMTYPE LIST> + <PRIMTYPE VECTOR> + <PRIMTYPE UVECTOR> + <PRIMTYPE STRING> + <PRIMTYPE BYTES>>)> + + <DPUSH TP* (AB)> + <PUSHJ P* RL> + <JRST FINIS> + + <INTERNAL-ENTRY RL 1> + <SUBM M* (P)> + <HLRZ A* -1 (TP)> ; "GET STORAGE ALLOCATION TYPE" + <PUSHJ P* SAT> + <CAIN A* 2> ; "IS IT A LIST?" + <JRST PUTLST> + <CAIE A* 16> ; "IS IT A STRING OR BYTES?" + <CAIN A* 12> + <JRST PUTSTR> + <HLRE A* (TP)> ; "NEGATIVE NUMBER OF WORDS" + <HRRZ B* (TP)> + <SUBI B* -1 (A)> ; "SECOND DOPE WORD" +PUTVEC <HRRZ C* RCLV> ; "FRONT OF CURRENT RECYCLE CHAIN" + <HRRM C* (B)> ; "CONS VECTOR ONTO IT" + <HRRZM B* RCLV> ; "REPLACE CHAIN POINTER" + <HLRZ A* (B)> ; "GET NUMBER OF WORDS" + <SUBI A* 2> ; "SUBTRACT DOPE WORDS" + <JUMPE A* DONE> ; "EMPTY?" + <SUBI B* 2> ; "LAST NON-DOPE WORD" +ZERO <SETZM (B)> ; "CLEAR VECTOR" + <SOJ B*> + <SOJN A* ZERO> +DONE <SUB TP* [<(2) 2>]> + <MOVSI A* <TYPE-CODE ATOM>> + <MOVE B* <MQUOTE T>> + <JRST MPOPJ> + +PUTSTR <MOVE B* (TP)> + <LDB B* [<(*300600*) B>]> ; "GET BYTE SIZE" + <MOVEI A* 36> + <IDIV A* B> ; "BYTES PER WORD" + <HRRZ B* -1 (TP)> ; "NUMBER OF BYTES" + <ADDI B* -1 (A)> + <IDIV B* A> ; "NUMBER OF WORDS" + <MOVE C* (TP)> ; "GET BYTE POINTER" + <IBP C> ; "INCREMENT IT TO POINT TO FIRST WORD" + <ADDI B* 1 (C)> ; "ADD # WORDS +1 TO FIND 2ND DOPE WORD" + <JRST PUTVEC> + +PUTLST <HRRZ A* (TP)> + <JUMPE A* DONE> + <MOVE B* A> +NXTCEL <HRRZ C* (B)> ; "GET POINTER TO FOLLOWING CELL" + <HLRZ D* (B)> ; "GET TYPE-CODE OF NEXT CELL" + <CAIN D* TDEFER> ; "IF A DEFER, PICKUP STRING POINTER" + <JRST GOTDFR> +NXTCL1 <JUMPE C* LSTCEL> ; "LAST CELL?" + <MOVE B* C> + <JRST NXTCEL> +GOTDFR <HRRZ D* 1 (B)> ; "GET POINTER TO STRING POINTER" + <HRRM D* (B)> ; "MUNG DEFER TO POINT TO SP" + <HRRM C* (D)> ; "MUNG SP TO POINT TO NEXT CELL" + <MOVE B* C> + <SKIPE C> + <JRST NXTCEL> + <MOVE B* D> +LSTCEL <MOVE C* RCL> ; "FRONT OF CURRENT RECYCLE LIST" + <HRRM C* (B)> ; "CONS LIST ONTO IT" + <MOVEM A* RCL> ; "REPLACE LIST POINTER" + <JRST DONE> diff --git a/src/mprog/rjs.ujfh17 b/src/mprog/rjs.ujfh17 new file mode 100644 index 00000000..fb5cbe5c --- /dev/null +++ b/src/mprog/rjs.ujfh17 @@ -0,0 +1,303 @@ +<PACKAGE "RJS"> + +<ENTRY MAKE-DEMON + COMMAND-LOOP + REPORT-TO DEMON-LOOP + VERSION DEBUG + CLEANUP + OUTPUT-FETCH> + + + +<USE "FTPUSR"> + +<USE "RJSDAT"> + +<USE "RJSTEL"> + +<USE "RJSCRD"> + +<USE "RJSUTI"> + +<USE "RJSJOB"> + +<USE "RJSRET"> + +<USE "RJSCHN"> + +<USE "STDMST"> + +<USE "RJSCMD"> + +<USE "NOW"> + +<USE "ICP"> + +<USE "LOGIN"> + +<MANIFEST COMMAND-TABLE> + +<GDECL (COMMAND-TABLE) VECTOR (ERROR-HANDLER) HANDLER (VERSION) FIX> + +<SETG COMMAND-TABLE <PUT <IVECTOR 14 0> 14 <ASCII 27>>> + +<DEFINE MAKE-DEMON ( "AUX" S F) + #DECL ((S) STRING (F) ANY) +<SETUP> + <SETG DEBUG <>> + <PRINC "VERSION NUMBER: "> + <SET F <READ>><TERPRI><TERPRI> + <COND (<TYPE? .F FIX>)(ELSE <SET F <ERROR VERSION-NOT-FIX-ERRET-FIX-TO-WIN>>)> +<SETG VERSION .F> +<PRINC "CREATING NETRJS DAEMON, VERSION: "><PRINC ,VERSION> +<TERPRI><PRINC "MUDDLE VERSION: "><PRINC ,MUDDLE> +<TERPRI><PRINC "FILE TO BE CREATED: "> +<PRINC <SET S <STRING "DSK:NETWRK;NETRJS " <UNPARSE .F> "SV" <UNPARSE ,MUDDLE>>>> +<TERPRI> +<COND (<=? <FSAVE + .S> "SAVED"> + <SETG DEBUG T> + T) + (ELSE <COND (<LOGIN ,DEMON-NAME><DEMON-LOOP><LOGOUT>) + (ELSE <COMMAND-LOOP>)>)>> + +<DEFINE COMMAND-LOOP ("AUX" (READ-TABLE ,COMMAND-TABLE) C) + #DECL ((READ-TABLE) <SPECIAL VECTOR> (INCHAN) <SPECIAL CHANNEL> + (C) <OR FALSE CHANNEL>) + <COND (<NOT ,DEBUG> + <COND (<GASSIGNED? ERROR-HANDLER> <OFF ,ERROR-HANDLER>)> + <SETG ERROR-HANDLER <ON "ERROR" ,ERROR-TRAP 4>>)> + <SOAK> + <PUT <2 <TOP .INCHAN>> 6 #LOSE *000000000015*> + <OUTINFO INFORM + 0 + "MIT-DMS CCN-RJS INTERFACE, VERSION " + <UNPARSE ,VERSION> + ", " + <NOW>> + <CMDDO> + <COND (<SET C <OPEN "READ" ,JOB-INPUT-FILE>> + <CLOSE .C><SETG NEWJOB T>)> + <COND (,NEWJOB + <OUTINFO INFORM + 0 + "SIGNALLING SYSTEM TO WAKE UP DEMON"> + <OR <DEMSIG ,DEMON-NAME> + <STDMST ,DEMON-NAME 1 0 1> + <OUTINFO INFORM 0 "DEMON NOT AVAILABLE, SORRY.">>)> + <COND (<NOT ,DEBUG> <QUIT>)>> + +<DEFINE DEMON-LOOP ("AUX" C JIN + (OUTCHAN + <COND (<AND <NOT ,DEBUG> + <OPEN "PRINT" + <USE-DATUM "NETRJS-SCRIPT-LOCATION">>>) + (ELSE .OUTCHAN)>)) + #DECL ((OUTCHAN) <SPECIAL CHANNEL> (C) FIX) + <COND (<NOT ,DEBUG> + <COND (<GASSIGNED? ERROR-HANDLER> <OFF ,ERROR-HANDLER>)> + <SETG ERROR-HANDLER <ON "ERROR" ,ERROR-TRAP 4>>)> + <COND + (<PROG ERRLOC () + #DECL ((ERRLOC) <SPECIAL ACTIVATION>) + <SOAK> + <OUTINFO INFORM 0 "NETRJS DEMON VERSION " <UNPARSE ,VERSION> ", " <NOW>> + <REPEAT () + <OR <RENAME "DSK:NETWRK;RJSAGN >" TO ,JOB-INPUT-FILE><RETURN>>> + <REPEAT () + <COND (<SETG INPUT <OPEN "READ" ,JOB-INPUT-FILE>> + <SETG SCRIPT <>> + <COND (<SET JIN + <PROG ERRLOC () + #DECL ((ERRLOC) <SPECIAL ACTIVATION>) + <CMDDO>>> + <CLOSE ,INPUT> + <SETG INPUT <>> + <RENAME ,JOB-INPUT-FILE>) + (ELSE + <CLOSE ,INPUT> + <SETG INPUT <>> + <SET C <1 .JIN>> + <COND (<MEMQ .C '[601 701 504 403]> + <OUTINFO INFORM + 0 + "INPUT FAILED, WILL TRY LATER"> + <RENAME ,JOB-INPUT-FILE TO "RJSAGN >"> + <SETG LATER T>) + (<MEMQ .C '[401 404]> + <OUTINFO ERROR 0 "CAN'T SUBMIT JOB"> + <RENAME ,JOB-INPUT-FILE TO "RJSLSR >">) + (<==? .C 301> + <OUTINFO INFORM + 0 + "SIGNON FAILED, WILL TRY LATER"> + <RENAME ,JOB-INPUT-FILE TO "RJSAGN >"> + <SETG LATER T>) + (ELSE <ERROR RJS-ERROR !.JIN>)>)> + <CLEANUP>) + (ELSE <RETURN>)>> + <OUTINFO INFORM 0 "CHECKING FOR OUTPUT"> + <SET JIN + <PROG ERRLOC () + #DECL ((ERRLOC) <SPECIAL ACTIVATION> + (LERR\ !-INTERRUPTS) FRAME) + <OUTPUT-FETCH>>> + <COND (<AND <NOT .JIN> <==? <1 .JIN> 501>> + <OUTINFO INFORM 0 "CCN ABORTED CONNECTION, WILL TRY LATER">) + (<NOT .JIN> <ERROR RJS-ERROR !.JIN>)> + <COND (<SETG INPUT <OPEN "READ" ,JOB-INPUT-FILE>> + <CLOSE ,INPUT> + <SETG INPUT <>> + <COND (<NOT ,LATER> + <OUTINFO INFORM + 0 + "MORE JOB INPUT HAS ARRIVED," + " REENTERING DEMON LOOP"> + <AGAIN>)>)> + <OUTINFO INFORM 0 "RESCHEDULING DEMON"> + <RESCHEDULE> + <OUTINFO INFORM 0 "DEMON FINISHED, " <NOW>> + T>) + (ELSE + <OUTINFO FATAL 0 "ERROR, FATAL (BUG) "> + + <REPORT-TO "FATAL BUG DETECTED IN RJS DEMON-LOOP"> + <SETG BUGFATAL T> + <RESCHEDULE> + <RENAME .OUTCHAN "CRASH >"> + <LOGOUT>)>> + +<DEFINE CLEANUP ("AUX" IL) + #DECL ((IL) FIX) + <SET IL <INT-LEVEL 8>> + <COND (,TELNET-CHANNELS <SIGNOFF> <SETG TELNET-CHANNELS <>>)> + <COND (,JOB-INPUT-CHANNEL + <CLOSE-CHAN ,JOB-INPUT-CHANNEL> + <SETG JOB-INPUT-CHANNEL <>>)> + <COND (,FILE-INPUT-CHANNEL <CLOSE-CHAN ,FILE-INPUT-CHANNEL>)> + <COND (,CARD-READER-CHANNEL + <CLOSE ,CARD-READER-CHANNEL> + <SETG CARD-READER-CHANNEL <>>)> + <COND (,OUTPUT-CHANNEL + <CLOSE ,OUTPUT-CHANNEL> + <SETG OUTPUT-CHANNEL <>>)> + <COND (,PNCHAN <CLOSE-CHAN ,PNCHAN> <SETG PNCHAN <>>)> + <COND (,PUCHAN <CLOSE-CHAN ,PUCHAN> <SETG PUCHAN <>>)> + <COND (,SCRIPT + <OUTINFO INFORM 0 "CLOSING SCRIPT"> + <CLOSE-CHAN ,SCRIPT> + <SETG SCRIPT <>>)> + <INT-LEVEL .IL>> + +<DEFINE OUTPUT-FETCH ("AUX" (JD <REST <LOAD-JOB-DATA>>) ANS D C) + #DECL ((JD) LIST (ANS) <OR ATOM FALSE> (VALUE) ATOM (C) FIX + (D) <OR FALSE VECTOR STRING>) + <REPEAT () + <COND (<EMPTY? .JD> <RETURN T>) + (<JOB-EXIST? <1 .JD>> + <COND (<SET D <JOB-SCRIPT <1 .JD>>> + <SETG SCRIPT <GET-CHAN .D T>> + <OUTINFO INFORM + 0 + "SCRIPT OPEN TO " + <COND (<TYPE? .D STRING> .D) + (ELSE <UNPARSE .D>)>>) + (ELSE <SETG SCRIPT <>>)> + <SET ANS <PROG ERRLOC () <GET-OUTPUT <1 .JD>>>> + <COND (<NOT .ANS> + <SET C <1 .ANS>> + <COND (<MEMQ .C '[201 203 204 205 206 207]> + <OUTINFO ERROR + 0 + "OUTPUT SYNTAX UNPROCESSABLE"> + <JOB-SUSPEND .SIGN>) + (<MEMQ .C '[502 209]> + <OUTINFO ERROR + 0 + "CAN'T OPEN OUTPUT FROM CCN"> + <SETG LATER T>) + (<==? .C 301> + <OUTINFO INFORM 0 "SIGNON FAILED"> + <SETG LATER T>) + (<MEMQ .C '[601 208]> + <OUTINFO INFORM + 0 + "CANNOT OPEN OUTPUT VIA FTP," + " WILL TRY LATER"> + <SETG LATER T>) + (<==? .C 701> + <OUTINFO INFORM + 0 + "DATA BASE LOCKED," + " WILL TRY LATER"> + <SETG LATER T>) + (ELSE <ERROR RJS-ERROR !.ANS>)>)>)> + <CLEANUP><SET JD <REST .JD 2>>>> + +<DEFINE GET-OUTPUT (SIGN "AUX" JOBS ANS C) + #DECL ((JOBS) <UVECTOR [REST FIX]> (SIGN) STRING (C) FIX + (ANS) <OR ATOM FALSE>) + <PROG () + <SIGNON .SIGN> + <SET JOBS <STATUS-JOBS>> + <COND (<OR <N==? <2 .JOBS> 0> <N==? <1 .JOBS> 0>> + <OUTINFO INFORM 0 "JOB OUTPUT AVAILABLE"> + <COND (<SETG OUTPUT-CHANNEL + <OPEN "READB" + <+ 1 <3 <2 ,TELNET-CHANNELS>>> ;"U+4" + <+ 2 <4 <1 ,TELNET-CHANNELS>>> ;"S+3" + "NET" + 65 + 8>> + <OUTINFO INFORM 0 "OUTPUT CONNECTION OPEN TO CCN"> + <OUTINFO SUCCESS + 0 + "PRINTER TRANSFER COMPLETE, " + <GET-DATA ,OUTPUT-CHANNEL> + " BYTES TRANSFERRED."> + <CLEANUP> + <JOB-REMOVE ,JOBNAME .SIGN> + <AGAIN>) + (ELSE + <ERROR RJS-ERROR + 209 + "CAN'T OPEN OUTPUT FROM CCN">)>)> + <SIGNON .SIGN> + <SET JOBS <STATUS-JOBS>> + <COND (<G? <+ !.JOBS> 0> <SETG MORE T>) + (ELSE <JOB-SET-EXIST .SIGN <>>)> + <SIGNOFF> T>> + +<DEFINE ERROR-TRAP (FRM "TUPLE" ARGS "ACT" ERRACT) + #DECL ((ERRLOC) ACTIVATION (FRM) FRAME (ARGS) TUPLE + (LERR\ !-INTERRUPTS) FRAME) + <COND (<AND <GASSIGNED? DEBUG> ,DEBUG> + <PRINC "PASSING ERROR TO HIGHER REP LEVEL."> + <TERPRI> + T) + (<AND <ASSIGNED? ERRLOC> <LEGAL? .ERRLOC> + <==? <1 .ARGS> RJS-ERROR>> + <INT-LEVEL 0> + <RETURN <CHTYPE (<2 .ARGS> <3 .ARGS>) FALSE> .ERRLOC>) + (ELSE <OUTINFO ERROR 0 "FATAL ERROR, BUG"> + <SETG BUGFATAL T> + <SET LERR\ !-INTERRUPTS <CHTYPE .ERRACT FRAME>> + <REPORT-TO "FATAL BUG DETECTED IN ERROR-TRAP"> + <BUFOUT .OUTCHAN> + <LOGOUT>)>> + + +<DEFINE REPORT-TO (RPRT "AUX" C) +#DECL ((RPRT) STRING (C) <OR FALSE CHANNEL>) +<COND (<SET C <OPEN "PRINT" !<USE-DATUM "COMSYS-INPUT-FILE">>> + <PRINC "\"TO\" \"NETRJS-MAINTAINER\" + \"FROM\" \"NETRJS\" +\"SUBJECT\" \"Daemon Crash\" +\"TEXT\" " +.C> + <PRINT .RPRT .C> + <PRINC "\"SCHEDULE\" (\"SENDING\")" .C > + <CLOSE .C>)> +T> + +<ENDPACKAGE> diff --git a/src/mprog/scr.uta001 b/src/mprog/scr.uta001 new file mode 100644 index 00000000..c5c9b80f --- /dev/null +++ b/src/mprog/scr.uta001 @@ -0,0 +1,255 @@ + +<PACKAGE "SCR"> + +<ENTRY TTY + STREAM + TERM-MOVE? + SCR-INIT + GET-TTY + TTY-SETUP + TTY-SCR + SET-ECHO-MODE + SET-IMAGE-MODE + TTY-RESET + CLEAR-SCREEN + CLEAR-EOL + CLEAR-EOS + FRESH-LINE + KILL-CHAR + ERASE-CHAR + HOME-CURSOR + BOTTOM-CURSOR + HOR-POS-CURSOR + VER-POS-CURSOR + MOVE-CURSOR + BACK-CURSOR + DOWN-CURSOR + UP-CURSOR + FORWARD-CURSOR + SAVE-CURSOR + RESTORE-CURSOR + DO-OUTPUT + DO-INPUT + DO-BIN + TCHAN + TICHAN + TWIDTH + THEIGHT + TCURSX + TCURSY + TSCRIPT> + +<NEWSTRUC TTY VECTOR + TCHAN CHANNEL ;"Channel to tty" + TICHAN CHANNEL ;"Input channel" + TSVMOD <UVECTOR [3 WORD]> ;"Saved RFMOD" + TCMOD <UVECTOR [3 WORD]> ;"Current setting of RFMOD" + TSCRIPT <OR FALSE <LIST [REST <OR UVECTOR STRING>]>>> + +<FLOAD "MPROG;VTSDEF >"> +<FLOAD "MBPROG;SCRCRF NBIN"> +<FLOAD "MPROG;SCRMAC >"> + +<DEFINE TERM-MOVE? (TTY) + <NOT <0? <CHTYPE <ANDB <5 <CNSGET ,CNSUV <TICHAN .TTY>>> ,TOERS> FIX>>>> + +<DEFINE NORMAL-OUT (TTY CHRS "OPTIONAL" (LENGTH -1) (TERMB <ASCII 0>)) + #DECL ((TTY) TTY (CHRS) <OR STRING CHARACTER> + (LENGTH) FIX (TERMB) CHARACTER) + <COND (<TSCRIPT .TTY> + <ADDSCRIPT .TTY .CHRS>)> + <COND (<TYPE? .CHRS CHARACTER> + <IOT 0 <TCHAN .TTY> .CHRS>) + (T + <SIOT .CHRS 0 <TCHAN .TTY> .LENGTH>)>> + +<DEFINE IMAGE-OUT (TTY CHRS + "OPTIONAL" (LENGTH -1) (TERMB <ASCII 0>) + "AUX" NEWCHRS) + #DECL ((LENGTH) FIX (TERMB) CHARACTER (TTY) TTY + (CHRS) <OR FIX CHARACTER STRING> + (NEWCHRS) <OR CHARACTER STRING>) + <COND + (<TSCRIPT .TTY> + <ADDSCRIPT .TTY .CHRS>)> + <COND (<TYPE? .CHRS STRING> + <SIOT .CHRS ,TJDIS <TCHAN .TTY> .LENGTH>) + (<IOT ,TJDIS <TCHAN .TTY> .CHRS>)>> + +<DEFINE ADDSCRIPT (TTY CHRS "AUX" TL) + #DECL ((TTY) TTY (CHRS) <OR CHARACTER STRING>) + <COND (<EMPTY? <SET TL <TSCRIPT .TTY>>> + <TSCRIPT .TTY (.CHRS)>) + (<PUTREST <REST .TL <- <LENGTH .TL> 1>> (.CHRS)>)>> + + +<DEFINE SCR-INIT ("OPTIONAL" (FORCE? <>)) + #DECL ((FORCE?) <OR ATOM FALSE>) + "DONE"> + +<DEFINE GET-TTY (CHN ICHN "OPTIONAL" (PROPS 0) + "AUX" (TUV <IUVECTOR 3 #WORD 0>)) + #DECL ((ICHN CHN) CHANNEL (TWORD) <UVECTOR [REST WORD]> + (PROPS) <PRIMTYPE WORD>) + <SCR-INIT <>> + <CHTYPE [.CHN .ICHN <TTY-GET .TUV .ICHN> <UVECTOR !.TUV> + <>] TTY>> + +;"CHARACTER GROUP MODES FOR USE IN GETSTRACT" + +<SETG TTY1 #WORD *020202020202*> + +;"DON'T ECHO CTL CHARS" + +<SETG TTY2 #WORD *030202020202*> + +<DEFINE TTY-SETUP (TTY "AUX" (TUV <TCMOD .TTY>)) + #DECL ((TTY) TTY) + <PUT .TUV 1 ,TTY1> + <PUT .TUV 2 ,TTY2> + <TTY-SET .TUV <TCHAN .TTY>>> + +<DEFINE SET-ECHO-MODE (TTY VAL) + #DECL ((TTY) TTY (VAL) <OR ATOM FALSE>) + .TTY> + +<DEFINE SET-IMAGE-MODE (TTY VAL) + #DECL ((TTY) TTY (VAL) <OR ATOM FALSE>) + .TTY> + +<DEFINE TTY-SCR (TTY) + #DECL ((TTY) TTY) + <TTY-SETUP .TTY>> + +<DEFINE TTY-RESET (TTY) + #DECL ((TTY) TTY) + <COND (<N=? <TCMOD .TTY> <TSVMOD .TTY>> + <TTY-SET <TSVMOD .TTY> <TICHAN .TTY>> + <MAPR <> + <FUNCTION (X Y) + <PUT .X 1 <1 .Y>>> + <TCMOD .TTY> <TSVMOD .TTY>>)> + .TTY> + + +"SUBTITLE User output routines" + +<SETG TEMPSTRING " "> + +<GDECL (TEMPSTRING) STRING> + +<DEFINE DO-OUTPUT (TTY STR + "OPTIONAL" (ECHO? <>) + (LEN + <COND (<TYPE? .STR CHARACTER> 1) + (<LENGTH .STR>)>)) + #DECL ((TTY) TTY (STR) <OR CHARACTER STRING> (ECHO?) <OR ATOM FALSE> + (LEN) FIX) + <COND (<TYPE? .STR CHARACTER> + <PUT ,TEMPSTRING 1 .STR> + <SET STR ,TEMPSTRING>)> + <NORMAL-OUT .TTY .STR .LEN>> + +<DEFINE DO-INPUT (TTY "OPTIONAL" (ECHO? <>) "AUX" CHR) + #DECL ((TTY) TTY (ECHO?) <OR ATOM FALSE STRING> (CHR) CHARACTER) + <SET CHR <IOT 0 <TICHAN .TTY>>> + <COND (<AND .ECHO? + <OR <TYPE? .ECHO? ATOM> + <NOT <MEMQ .CHR .ECHO?>>>> + <DO-OUTPUT .TTY .CHR T>)> + .CHR> + +<SETG JUNKSTR " "> +<DEFINE CTRL-P (TTY LET "OPTIONAL" (ARG1 <>) (ARG2 <>) "AUX" (JUNK ,JUNKSTR) + (CT 2)) + #DECL ((TTY) TTY (LET) CHARACTER (ARG1 ARG2) <OR FALSE FIX> (JUNK) STRING + (CT) FIX) + <PUT .JUNK 2 .LET> + <COND (.ARG1 + <PUT .JUNK 3 <ASCII <+ .ARG1 8>>> + <COND (.ARG2 + <PUT .JUNK 4 <ASCII <+ .ARG2 8>>> + <SET CT 4>) + (<SET CT 3>)>)> + <IMAGE-OUT .TTY .JUNK .CT>> + +<DEFINE DPYOP (TTY OPR "OPTIONAL" (ARG1 <>) (ARG2 <>) "AUX" OPSP) + #DECL ((TTY) TTY (OPR) FIX (ARG1 ARG2) <OR FIX FALSE> + (OPSP) <OR APPLICABLE STRING FALSE>) + <CASE ,==? .OPR + (,VTCLR + <CTRL-P .TTY !\C>) + (,VTCEL + <CTRL-P .TTY !\L>) + (,VTCEW + <CTRL-P .TTY !\E>) + (,VTADV + <COND (<NOT .ARG1> <SET ARG1 1>)> + <REPEAT () + <COND (<L? <SET ARG1 <- .ARG1 1>> 0> <RETURN>)> + <CTRL-P .TTY !\A>>) + (,VTERA + <CTRL-P .TTY !\K>) + (,VTBEC + <COND (<NOT .ARG1> <SET ARG1 1>)> + <REPEAT () + <COND (<L? <SET ARG1 <- .ARG1 1>> 0> <RETURN>)> + <CTRL-P .TTY !\X>>) + (,VTHOM + <CTRL-P .TTY !\P>) + (,VTHMD + <CTRL-P .TTY !\Z>) + (,VTHRZ + <CTRL-P .TTY !\H .ARG1>) + (,VTVRT + <CTRL-P .TTY !\V .ARG1>) + (,VTMOV + <CTRL-P .TTY !\V .ARG2> + <CTRL-P .TTY !\H .ARG1>) + (,VTBCK + <COND (<NOT .ARG1> <SET ARG1 1>)> + <REPEAT () + <COND (<L? <SET ARG1 <- .ARG1 1>> 0> <RETURN>)> + <CTRL-P .TTY !\B>>) + (,VTDWN + <COND (<NOT .ARG1><SET ARG1 1>)> + <REPEAT () + <COND (<L? <SET ARG1 <- .ARG1 1>> 0> <RETURN>)> + <CTRL-P .TTY !\D>>) + (,VTUP + <COND (<NOT .ARG1> <SET ARG1 1>)> + <REPEAT () + <COND (<L? <SET ARG1 <- .ARG1 1>> 0> <RETURN>)> + <CTRL-P .TTY !\U>>) + (,VTFWD + <COND (<NOT .ARG1> <SET ARG1 1>)> + <REPEAT () + <COND (<L? <SET ARG1 <- .ARG1 1>> 0> <RETURN>)> + <CTRL-P .TTY !\F>>) + (,VTSAV + <CTRL-P .TTY !\S>) + (,VTRES + <CTRL-P .TTY !\R>)>> + + +<SETG CNSUV <IUVECTOR 5 0>> +<GDECL (CNSUV) <UVECTOR [REST FIX]>> +<DEFINE TWIDTH (TTY "AUX" (CUV ,CNSUV)) + #DECL ((TTY) TTY (CUV) <UVECTOR [REST FIX]>) + <CNSGET .CUV <TICHAN .TTY>> + <2 .CUV>> + +<DEFINE THEIGHT (TTY "AUX" (CUV ,CNSUV)) + #DECL ((TTY) TTY (CUV) <UVECTOR [REST FIX]>) + <CNSGET .CUV <TICHAN .TTY>> + <1 .CUV>> + +<DEFINE TCURSX (TTY) + #DECL ((TTY) TTY) + <CHTYPE <GETBITS <RCPOS <TCHAN .TTY>> <BITS 18 0>> FIX>> + +<DEFINE TCURSY (TTY) + #DECL ((TTY) TTY) + <CHTYPE <GETBITS <RCPOS <TCHAN .TTY>> <BITS 18 18>> FIX>> + +<ENDPACKAGE> diff --git a/src/mprog/scrcrf.uta002 b/src/mprog/scrcrf.uta002 new file mode 100644 index 00000000..fd371d5a --- /dev/null +++ b/src/mprog/scrcrf.uta002 @@ -0,0 +1,266 @@ +; "Hand-coded stuff for SCR package on ITS" +<TITLE IOT> + <DECLARE ("VALUE" CHARACTER "OPTIONAL" <PRIMTYPE WORD> CHANNEL CHARACTER)> + <HLRE A* AB> + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <ASH A* -1> + <ADDI A* TABEND> + <PUSHJ P* @ (A)> + <JRST FINIS> + <IOT3> + <IOT2> + <IOT1> +TABEND <IOT0> + +<INTERNAL-ENTRY IOT0 0> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* [0]> +<INTERNAL-ENTRY IOT1 1> + <MOVE A* <MQUOTE <RGLOC INCHAN>>> + <ADD A* GLOTOP 1> + <DPUSH TP* (A)> +<INTERNAL-ENTRY IOT2 2> + <PUSH TP* <TYPE-WORD CHARACTER>> + <PUSH TP* [0]> +<INTERNAL-ENTRY IOT3 3> + <SUBM M* (P)> + <MOVE A* -2(TP)> ; "CHANNEL" + <MOVE A* 1(A)> + <AOSN INTFLG> + <JSR LCKINT> ; "ENABLE INTERRUPTS" + <*CALL [<SETZ> + <SIXBIT "IOT"> + <MOVS -4(TP)> ; "CONTROL BITS" + <MOVE A> ; "CHANNEL" + <SETZ (TP)>]> ; "LOCATION OF TRANSFER" + <*LOSE *1400*> + <SETZM INTFLG> ; "DISABLE INTERRUPTS" + <POP TP* B> + <POP TP* A> + <SUB TP* [<(4) 4>]> + <JRST MPOPJ> +<END> + +<TITLE SIOT> + <DECLARE ("VALUE" STRING STRING "OPTIONAL" <PRIMTYPE WORD> CHANNEL FIX)> + <HLRE A* AB> + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <ASH A* -1> + <ADDI A* TABEND> + <PUSHJ P* @ 1(A)> + <JRST FINIS> + <SIOT4> + <SIOT3> + <SIOT2> +TABEND <SIOT1> + +<INTERNAL-ENTRY SIOT1 1> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* [0]> +<INTERNAL-ENTRY SIOT2 2> + <MOVE A* <MQUOTE <RGLOC OUTCHAN>>> + <ADD A* GLOTOP 1> + <DPUSH TP* (A)> +<INTERNAL-ENTRY SIOT3 3> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* [-1]> +<INTERNAL-ENTRY SIOT4 4> + <SUBM M* (P)> + <MOVE A* -2(TP)> ; "CHANNEL" + <MOVE A* 1(A)> ; "CHANNEL #" + <SKIPGE C* (TP)> ; "CHARS TO PRINT" + <HRRZ C* -7(TP)> ; "LENGTH, IF # IS <0" + <MOVEM C* (TP)> ; "SAVE IT AWAY" +HACK <MOVE B* -6(TP)> ; "BPTR" + <MOVEI D* INTFROB> + <HRLI D* (<PUSHJ P*>)> + <MOVEM D* ONINT> ; "SET UP INTERRUPT RECOVERY" + <AOSN INTFLG> + <JRST LCKINT> ; "ENABLE INTERRUPTS" + <*CALL [<SETZ> + <SIXBIT "SIOT"> + <MOVS -4(TP)> ; "CONTROL BITS" + <MOVE A> ; "CHANNEL" + <MOVE B> ; "BPTR" + <SETZ C>]> ; "LENGTH" + <*LOSE *1400*> + <SETZM INTFLG> ; "DISABLE INTERRUPTS" + <SETZM ONINT> + <MOVE A* -7(TP)> + <MOVE B* -6(TP)> + <SUB TP* [<(8) 8>]> + <JRST MPOPJ> + +; "PUSHJ'ED TO BY INSN IN ONINT" +INTFROB <PUSH P* A> + <PUSH P* B> + <MOVE B* (TP)> + <MOVEM C* (TP)> ; "NUMBER OF CHARACTERS TO PRINT" + <SUB B* C> ; "NUMBER OF CHARACTERS PRINTED" + <HRRZ A* -7(TP)> ; "STRING LENGTH" + <SUBI A* (B)> ; "REST OFF PRINTED CHARS" + <HRRM A* -7(TP)> ; "SAVE AWAY LENGTH" + <POP P* B> + <MOVEM B* -6(TP)> ; "AND BPTR" + <JUMPLE A* INTOUT> + <MOVEI A* HACK> + <HRRM A* LCKINT> ; "SET THIS BACK UP WHEN WE GET OUT OF INT" +INTOUT <SETZM ONINT> + <POP P* A> + <POPJ P*> +<END> + +<TITLE RCPOS> + <DECLARE ("VALUE" FIX "OPTIONAL" CHANNEL)> + <JUMPGE AB* NOARG> + <DPUSH TP* (AB)> + <PUSHJ P* IRCPOS1> + <JRST FINIS> +NOARG <PUSHJ P* IRCPOS0> + <JRST FINIS> + +<INTERNAL-ENTRY IRCPOS0 0> + <MOVE A* <MQUOTE <RGLOC INCHAN>>> + <ADD A* GLOTOP 1> + <DPUSH TP* (A)> +<INTERNAL-ENTRY IRCPOS1 1> + <SUBM M* (P)> + <MOVE A* (TP)> + <*CALL [<SETZ> + <SIXBIT "RCPOS"> + <MOVE 1(A)> + <SETZM B>]> + <*LOSE *1400*> + <MOVSI A* <TYPE-CODE FIX>> + <SUB TP* [<(2) 2>]> + <JRST MPOPJ> +<END> +î +<TITLE TTY-GET> + <DECLARE ("VALUE" <UVECTOR [REST <PRIMTYPE WORD>]> UVECTOR "OPTIONAL" CHANNEL)> + <HLRE A* AB> + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <ASH A* -1> + <ADDI A* TABEND> + <PUSHJ P* @ 1(A)> + <JRST FINIS> + <TTYGET2> +TABEND <TTYGET1> + +<INTERNAL-ENTRY TTYGET1 1> + <MOVE A* <MQUOTE <RGLOC INCHAN>>> + <ADD A* GLOTOP 1> + <DPUSH TP* (A)> +<INTERNAL-ENTRY TTYGET2 2> + <SUBM M* (P)> + <MOVE A* (TP)> + <MOVE A* 1(A)> ; "CHANNEL NUMBER" + <MOVEI B* 0> + <MOVE C* -2(TP)> ; "UVECTOR OF OUTPUT" + <MOVE D* [<SIXBIT "TTYGET">]> + <PUSHJ P* DOCALL> + <MOVE A* -3(TP)> + <MOVE B* -2(TP)> + <SUB TP* [<(4) 4>]> + <JRST MPOPJ> + +<SUB-ENTRY CNSGET ("VALUE" UVECTOR UVECTOR "OPTIONAL" CHANNEL)> + <HLRE A* AB> + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <ASH A* -1> + <ADDI A* TABENDN> + <PUSHJ P* @ 1(A)> + <JRST FINIS> + <CNSGET2> +TABENDN <CNSGET1> + +<INTERNAL-ENTRY CNSGET1 1> + <MOVE A* <MQUOTE <RGLOC INCHAN>>> + <ADD A* GLOTOP 1> + <DPUSH TP* (A)> +<INTERNAL-ENTRY CNSGET2 2> + <SUBM M* (P)> + <MOVE A* (TP)> + <MOVE A* 1(A)> + <MOVEI B* 0> + <MOVE C* -2(TP)> + <MOVE D* [<SIXBIT "CNSGET">]> + <PUSHJ P* DOCALL> + <MOVE A* -3(TP)> + <MOVE B* -2(TP)> + <SUB TP* [<(4) 4>]> + <JRST MPOPJ> + +<SUB-ENTRY TTY-SET ("VALUE" UVECTOR UVECTOR "OPTIONAL" CHANNEL)> + <HLRE A* AB> + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <ASH A* -1> + <ADDI A* TABEND1> + <PUSHJ P* @ 1(A)> + <JRST FINIS> + <TTYSET2> +TABEND1 <TTYSET1> + +<INTERNAL-ENTRY TTYSET1 1> + <MOVE A* <MQUOTE <RGLOC INCHAN>>> + <ADD A* GLOTOP 1> + <DPUSH TP* (A)> +<INTERNAL-ENTRY TTYSET2 2> + <SUBM M* (P)> + <MOVE A* (TP)> + <MOVE A* 1(A)> ; "CHANNEL #" + <MOVE B* -2(TP)> ; "INPUTS" + <MOVEI C* 0> ; "NO OUTPUT" + <MOVE D* [<SIXBIT "TTYSET">]> + <PUSHJ P* DOCALL> + <MOVE A* -3(TP)> + <MOVE B* -2(TP)> + <SUB TP* [<(4) 4>]> + <JRST MPOPJ> + +; "DO A SYSTEM CALL. TAKES CHANNEL # IN A, INPUT UVECTOR IN B, OUTPUT +UVECTOR IN C, CALL NAME IN D." +DOCALL <SUBM M* (P)> + <MOVEI O* 0> + <PUSH P* [<SETZ>]> ; "START CALL BLOCK" + <MOVEI E* (P)> ; "ADDRESS OF BLOCK" + <PUSH P* D> ; "CALL NAME" + <HRLI A* (<MOVEI>)> ; "MAKE CHANNEL BE IMMEDIATE" + <PUSH P* A> ; "CHANNEL ARG" + <ADDI O* 3> ; "NUMBER THINGS SO FAR" + <MOVEI A* B> + <HRLI A* (<MOVE>)> + <PUSHJ P* FROBUV> ; "PUSH IT" + <MOVEI A* C> + <HRLI A* (<MOVEM>)> + <PUSHJ P* FROBUV> + <PUSH P* [<SETZB A>]> ; "RANDOM" + <ADDI O* 1> ; "NUMBER OF THINGS PUSHED" + <*CALL (E)> ; "DO THE CALL" + <*LOSE *1400*> + <HRLS O> + <SUB P* O> ; "FLUSH THE CALL BLOCK AND SUCH" + <JRST MPOPJ> + +; "LOCN OF UV IN RH A, CODE IN LH" +FROBUV <SUBM M* (P)> + <HLRE F* (A)> ; "GET LENGTH" + <JUMPGE F* MPOPJ> ; "FLUSH IF 0" + <POP P* D> ; "RETURN ADDRESS" + <PUSH P* A> + <HRLZS (P)> + <HLLZS A> + <IOR A* (P)> + <SUB P* [<(1) 1>]> ; "BUILD <MOVE (n)>" +PUSHLP <PUSH P* A> + <ADDI A* 1> ; "MAKE IT BE <MOVE N(n)>" + <ADDI O* 1> ; "NUMBER PUSHED" + <AOJL F* PUSHLP> + <SUBM M* D> + <JRST @ D> +<END> \ No newline at end of file diff --git a/src/mprog/scrmac.uta002 b/src/mprog/scrmac.uta002 new file mode 100644 index 00000000..c846be07 --- /dev/null +++ b/src/mprog/scrmac.uta002 @@ -0,0 +1,54 @@ +"Macros for SCR package. Common to all versions." +<DEFMAC CLEAR-SCREEN ('TTY) + <FORM DPYOP .TTY ,VTCLR>> + +<DEFMAC CLEAR-EOL ('TTY) + <FORM DPYOP .TTY ,VTCEL>> + +<DEFMAC CLEAR-EOS ('TTY) + <FORM DPYOP .TTY ,VTCEW>> + +<DEFMAC FRESH-LINE ('TTY "OPTIONAL" ('N 1)) + <FORM DPYOP .TTY ,VTADV .N>> + +<DEFMAC KILL-CHAR ('TTY) + <FORM DPYOP .TTY ,VTERA>> + +<DEFMAC ERASE-CHAR ('TTY "OPTIONAL" ('N 1)) + <FORM DPYOP .TTY ,VTBEC .N>> + +"SUBTITLE Cursor movement of various sorts" + +<DEFMAC HOME-CURSOR ('TTY) + <FORM DPYOP .TTY ,VTHOM>> + +<DEFMAC BOTTOM-CURSOR ('TTY) + <FORM DPYOP .TTY ,VTHMD>> + +<DEFMAC HOR-POS-CURSOR ('TTY 'X) + <FORM DPYOP .TTY ,VTHRZ .X>> + +<DEFMAC VER-POS-CURSOR ('TTY 'Y) + <FORM DPYOP .TTY ,VTVRT .Y>> + +<DEFMAC MOVE-CURSOR ('TTY 'X 'Y) + <FORM DPYOP .TTY ,VTMOV .X .Y>> + +<DEFMAC BACK-CURSOR ('TTY "OPTIONAL" ('N 1)) + <FORM DPYOP .TTY ,VTBCK .N>> + +<DEFMAC DOWN-CURSOR ('TTY "OPTIONAL" ('N 1)) + <FORM DPYOP .TTY ,VTDWN .N>> + +<DEFMAC UP-CURSOR ('TTY "OPTIONAL" ('N 1)) + <FORM DPYOP .TTY ,VTUP .N>> + +<DEFMAC FORWARD-CURSOR ('TTY "OPTIONAL" ('N 1)) + <FORM DPYOP .TTY ,VTFWD .N>> + + +<DEFMAC SAVE-CURSOR ('TTY) + <FORM DPYOP .TTY ,VTSAV>> + +<DEFMAC RESTORE-CURSOR ('TTY) + <FORM DPYOP .TTY ,VTRES>> diff --git a/src/mprog/sharer.udl001 b/src/mprog/sharer.udl001 new file mode 100644 index 00000000..77853b51 --- /dev/null +++ b/src/mprog/sharer.udl001 @@ -0,0 +1,38 @@ +<TITLE SHARERS> + <DECLARE ("VALUE" <OR FIX FALSE> + <PRIMTYPE WORD> + "OPTIONAL" <PRIMTYPE WORD>)> + <HLRZ A* AB> + <CAIE A* -2> + <JRST TWOARGS> +; "here for single arg -- page number" + <SETO A*> + <MOVE B* 1 (AB)> + <JRST DOCALL> +; "here for job and page numbers" +TWOARGS <MOVE A* 1 (AB)> + <MOVE B* 3 (AB)> + +; "perform .call" +DOCALL <*CALL CORE> + <JRST FAIL> + <MOVSI A* TFIX> + <HRRZS B> + <JRST FINIS> + +; "failed" +FAIL <MOVSI A* TFALSE> + <SETZ B*> + <JRST FINIS> + +; ".call block" +CORE <SETZ> + <SIXBIT "CORTYP"> + <A> ; "JOB" + <B> ; "PAGE" + <(*2000*) A> + <(*2000*) A> + <(*2000*) A> + <(*2000*) B> ; "# OF SHARERS" + <SETZ> + "P \ No newline at end of file diff --git a/src/mprog/skyfan.usg017 b/src/mprog/skyfan.usg017 new file mode 100644 index 00000000..a89f95a6 --- /dev/null +++ b/src/mprog/skyfan.usg017 @@ -0,0 +1,146 @@ +<PACKAGE "SKY-FANS"> +<ENTRY SKY-FANS-MSG M.I.T. C.I.T. STANFORD D.C. C.M.U.> +<USE "CELEST" "DATIME" "TIMFCN"> +<USE-DEFER "LSRHIL" "MFD"> + +<SETG M.I.T. '((- 71 5 20) (+ 42 21 50) 5 !\E)> ;"10 sec = 1000 ft" +<SETG C.I.T. '((- 118 7 30) (+ 34 8 0) 8 !\P)> +<SETG STANFORD '((- 122 10 0) (+ 37 25 50) 8 !\P)> +<SETG D.C. '((- 77 1 0) (+ 38 54 0) 5 !\E)> +<SETG C.M.U. '((- 79 56 20) (+ 40 26 30) 5 !\E)> + +<DEFINE SKY-FANS-MSG ("OPTIONAL" (TO "SKY-FANS")(SUBJ "upcoming events in sky") + (LONG <1 ,M.I.T.>) (LAT <2 ,M.I.T.>) + (TZ <3 ,M.I.T.>) (TZL <4 ,M.I.T.>) + (BIRTHDAYS? <>) (DTARG <DTNOW>) + "AUX" DT) + #DECL ((TO SUBJ) STRING (LONG LAT) LIST (TZ) FIX (TZL) CHARACTER + (BIRTHDAYS?) <OR FALSE ANY> (DTARG) <LIST LIST> + (DT) <LIST <LIST FIX FIX FIX>>) + <SETG LONGITUDE!-ICELEST .LONG> <SETG LATITUDE!-ICELEST .LAT> + <SETG GMT-OFFSET!-ICELEST <+ .TZ <DAY-SAVE-CROCK!-ICELEST <1 <DTNOW>>>>> + <SETG ZONSTR <PUT <GETTIMEZONE> 1 .TZL>> + <SET DT (<1 <DTNORM .DTARG>> ())> ;"zero o'clock" + <SET DT <DTADD .DT ((<- 5 <DATE-DOW <1 .DT>>>) ())>> ;"Friday" + <REPEAT ((NDAYS 7) H BL + (NP <NEXT-PHASE <DTADD .DT '((1) ())>>) ;"next phase of moon" + (NP2 <2 .NP>) ;"day & time of ditto" + (NP2 <COND (<AND <DST?> <NOT <DST? .NP2>>> <DTADD .NP2 '(() (-1))>) + (<AND <NOT <DST?>> <DST? .NP2>> <DTADD .NP2 '(() (+1))>) + (T .NP2)>) ;"adjusted for standard/daylight time" + (NPD <1 .NP2>) ;"day number" + (NS <NEXT-SEASON <DTADD .DT '((1) ())>>) ;"next seasonal change" + (NS2 <2 .NS>) ;"etc." + (NS2 <COND (<AND <DST?> <NOT <DST? .NS2>>> <DTADD .NS2 '(() (-1))>) + (<AND <NOT <DST?>> <DST? .NS2>> <DTADD .NS2 '(() (+1))>) + (T .NS2)>) + (NSD <1 .NS2>) + (MSG ( ;"skeleton of message as list of lines" +"Key: <> bracket sunrise/set + () bracket moonrise/set +" " + 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 +" !<ILIST 7 '<STRING +" | | | | | | | | | | | | | | | | | | | | | | | | | +">>)) + (MMSG <REST .MSG>) ;"cd..dr" MMSG1 ;"cad..dr" + (KEYMSG .MSG) ;"place to add items to 'Key:'" + (SRMSG <REST ;"digital form of sunrise times" +" Sunrises: +" 5>) + (SSMSG <REST +" Sunsets: +" 5>) + C OUTCHAN) + #DECL ((MMSG1 SRMSG SSMSG) STRING (H) <OR FALSE STRING> + (NP NS) <VECTOR FIX <LIST LIST <LIST FIX FIX>>> + (NP2 NS2) <LIST LIST <LIST FIX FIX>> + (NDAYS) FIX + (MSG MMSG KEYMSG) <LIST [REST STRING]> + (BL NPD NSD) LIST + (C) <OR FALSE CHANNEL> (OUTCHAN) <SPECIAL CHANNEL>) + <COND + (<G=? <SET NDAYS <- .NDAYS 1>> 0> + <SET MMSG1 <1 <SET MMSG <REST .MMSG>>>> + <SET SRMSG <REST .SRMSG 9>> + <SET SSMSG <REST .SSMSG 9>> + <SET DT <DTADD .DT '((1) ())>> + <SUBSTRUC <UNPARSE <+ 100 <3 <1 .DT>>>> 1 2 .MMSG1> ;"day of month" + <COND (<SET H <OR <HOLIDAY? <1 .DT>> + <NON-MIT-HOLIDAY? <1 .DT>>>> + <SUBSTRUC .H 0 <LENGTH .H> <REST .MMSG1 4>>)> + <MUNG .MMSG1 "<" <SUNRISE .DT 3E-4> .SRMSG>;"sunrise to nearest second" + <MUNG .MMSG1 ">" <SUNSET .DT 3E-4> .SSMSG> ;"sunset to nearest second" + <MUNG .MMSG1 "(" <MOONRISE .DT>> ;"moonrise" + <MUNG .MMSG1 ")" <MOONSET .DT>> ;"moonset" + <COND (<=? <1 .DT> .NPD> ;"change of phase of moon" + <SUBSTRUC <NTH '["*0Q" "*1Q" "*2Q" "*3Q"] <+ 1 <1 .NP>>> + 0 3 <REST .MMSG1 + <FIX <+ <* 3 <1 <2 .NP2>>> + </ <2 <2 .NP2>> 20.0> + 4.5>>>> + <SET KEYMSG <REST <PUTREST .KEYMSG + (<NTH '[" *0Q = new moon +" " *1Q = moon at first quarter +" " *2Q = full moon +" " *3Q = moon at third quarter +"] <+ 1 <1 .NP>>> + !<REST .KEYMSG>)>>>)> + <COND (<=? <1 .DT> .NSD> ;"change of season" + <SUBSTRUC <NTH '["*VE" "*SS" "*AE" "*WS"] <+ 1 <1 .NS>>> + 0 3 <REST .MMSG1 + <FIX <+ <* 3 <1 <2 .NS2>>> + </ <2 <2 .NS2>> 20.0> + 4.5>>>> + <SET KEYMSG <REST <PUTREST .KEYMSG + (<NTH '[" *VE = vernal equinox +" " *SS = summer solstice +" " *AE = autumnal equinox +" " *WS = winter solstice +"] <+ 1 <1 .NS>>> + !<REST .KEYMSG>)>>>)> + <COND (<AND .BIRTHDAYS? + <NOT <EMPTY? <SET BL <BD? <GET-MFD "DM"> .DT>>>>> + <SET H <COND (<LENGTH? .BL 1> <1 .BL>) + (<LENGTH? .BL 2> <STRING <1 .BL> " and " <2 .BL>>) + (T <STRING <1 .BL> + <MAPF ,STRING + <FUNCTION (S) #DECL ((S) STRING) + <MAPRET ", " .S>> + <REST .BL>>>)>> + <COND (<TYPE? .H STRING> <SUBSTRUC .H 0 <LENGTH .H> .MMSG1>)>)>) + (T ;"Now send message." + <COND (<SET C <OPEN "PRINT" "COMSYS;_SKY >">> + <SET OUTCHAN .C> + <MAPF <> + ,PRINT + ("TO" (.TO) + "FROM" <XUNAME> + "ACTION-TO" (.TO) + "SUBJECT" .SUBJ + "TEXT" <STRING !.MSG <TOP .SRMSG> <TOP .SSMSG>> + "SCHEDULE" '("SENDING" #FALSE ()))> + <RENAME .C "M >"> + <CLOSE .C>)> + <RETURN>)>>> + +<DEFINE MUNG (LINE S DT "OPTIONAL" (M #FALSE ()) "AUX" DTH DTM DTS) + #DECL ((LINE S) STRING (DT) <OR FALSE <LIST <LIST FIX FIX FIX> LIST>> + (M) <OR FALSE STRING> (DTH DTM DTS) FIX) + <COND (.DT + <SET DT <COND (<AND <DST?> <NOT <DST? .DT>>> <DTADD .DT '(() (-1))>) + (<AND <NOT <DST?>> <DST? .DT>> <DTADD .DT '(() (+1))>) + (T .DT)>> + <SET DTH <1 <2 .DT>>> + <SET DTM <2 <2 .DT>>> + <SET DTS <3 <2 .DT>>> + <SUBSTRUC .S 0 <LENGTH .S> + <REST .LINE <FIX <+ <* 3 .DTH> </ .DTM 20.0> 4.5>>>> + <COND (.M + <SUBSTRUC <UNPARSE <+ 100 .DTH>> 1 2 .M> + <PUT .M 3 !\:> + <SUBSTRUC <UNPARSE <+ 100 .DTM>> 1 2 <REST .M 3>> + <PUT .M 6 !\:> + <SUBSTRUC <UNPARSE <+ 100 .DTS>> 1 2 <REST .M 6>>)>)>> + +<ENDPACKAGE> diff --git a/src/mprog/squoze.undr04 b/src/mprog/squoze.undr04 new file mode 100644 index 00000000..6f961a8a --- /dev/null +++ b/src/mprog/squoze.undr04 @@ -0,0 +1,31 @@ +<PACKAGE "SQUOZE"> + +<ENTRY SQUOZE> + +<DEFINE SQUOZE (STR + "OPTIONAL" (HIBITS 0) + "AUX" (MULF <* 40 40 40 40 40 40>) (VAL 0) (COUNT 6) C (TC 0)) + #DECL ((HIBITS) <PRIMTYPE WORD> (VAL COUNT TC MULF) FIX (C) CHARACTER + (STR) STRING) + <REPEAT () + <COND (<OR <EMPTY? .STR> <L? .COUNT 1>> + <RETURN <CHTYPE <PUTBITS .VAL <BITS 4 32> .HIBITS> + WORD>>)> + <SET TC <CHTYPE <SET C <1 .STR>> FIX>> + <SET STR <REST .STR>> + <COND (<AND <G=? .TC <ASCII !"0>> <L=? .TC <ASCII !"9>>> + <SET TC <- .TC 47>>) + (<AND <G=? .TC <ASCII !"A>> <L=? .TC <ASCII !"Z>>> + <SET TC <- .TC 54>>) + (<AND <G=? .TC <ASCII !"a>> <L=? .TC <ASCII !"z>>> + <SET TC <- .TC 86>>) + (<==? .C !".> <SET TC 37>) + (<==? .C !"$> <SET TC 38>) + (<==? .C !"%> <SET TC 39>) + (T <AGAIN>)> + <SET COUNT <- .COUNT 1>> + <SET VAL <+ .VAL <* .TC <SET MULF </ .MULF 40>>>>>>> + + +<ENDPACKAGE> +COU \ No newline at end of file diff --git a/src/mprog/str.ueb008 b/src/mprog/str.ueb008 new file mode 100644 index 00000000..a33572e0 --- /dev/null +++ b/src/mprog/str.ueb008 @@ -0,0 +1,532 @@ +<PACKAGE "STR"> + +<ENTRY +;"this file contains the following functions -- LEX is the only non-RSUBR." +BACKS ;"Searches backwards in a string." +FIRST-OF ;"Searches for any member of first arg in second arg." +LEX ;"Returns a list of tokens (strings) from a string." +EXTRACT ;"Useful for copying a substring." +SUBSTR ;"Searches for a substring. Obsolete -- use MEMBER" +SUBSNC ;"Like SUBSTR, but ignores case." +UPPERCASE ;"Changes a string to all uppercase." +RSHIFT ;"Right-shifts a string by N in its muddle vector -- useful for + buffers which have free-space in them but need to be looked + at by functions which take standard strings." +SIXTOS ;"SIXbit-TO-String -- returns six chars!! " +STRTOX ;"STRing-TO-siXbit." +> + +<DEFINE LEX (STR N BREAKS) ;"RETURNS LIST OF TOKENS" + #DECL ((VALUE) <LIST [REST STRING]> + (STR BREAKS) <SPECIAL STRING> + (N) <SPECIAL FIX>) + <REPEAT ((TKNS ())) + #DECL ((TKNS) <LIST [REST STRING]>) + <AND <OR <L? .N 1><EMPTY? .STR>><RETURN .TKNS>> + <SET TKNS ( + <MAPR ,STRING <FUNCTION (CHRS "AUX" (TEM <1 .CHRS>)) + #DECL ((CHRS) STRING (TEM) CHARACTER) + <COND (<L? <SET N <- .N 1>> 0> + <MAPSTOP> ;"RETS STRING") + (<MEMQ .TEM .BREAKS> + <SET STR <REST .CHRS>> ;"REST OFF PREV" + <MAPSTOP> ;"AND RET STRING")> + .TEM> ;"ELSE STRING THE CHARS" + .STR> + !.TKNS)> + >> + +<TITLE SIXTOS> + <DECLARE ("VALUE" STRING <PRIMTYPE WORD>)> + <MOVE O* 1 (AB)> + <MOVSI C* *440600*> + <MOVEI D* 6> +LOOP + <ILDB A* C> + <ADDI A* *40*> ;"TO ASCII" + <PUSH TP* $TCHARACTER> + <PUSH TP* A> + <SOJN D* LOOP> + <MCALL 6 STRING> + <JRST FINIS> + +<TITLE STRTOX> + <DECLARE ("VALUE" FIX STRING)> + <HRRZ D* (AB)> ;"COUNT" + <CAIL D* 6> + <MOVEI D* 6> ;"MIN (6,LENGTH)" + <SETZM B> ;"ACCUMULATOR" + <JUMPE D* OUT> ;"NO CHARS" + <MOVE C* [*440600000002*]> ;"SIXBIT POINTER TO B" + <MOVE O* 1 (AB)> ;"ASCII POINTER" +LOOP + <ILDB A* O> ;"GET CHARACTER" + <CAIL A* *140*> ;"lower case" + <SUBI A* *40*> ;"goes to upper case" + <SUBI A* *40*> ;"MAKE SIXBIT" + <IDPB A* C> ;"DEPOSIT IN C" + <SOJN D* LOOP> +OUT + <MOVSI A* TFIX> + <JRST FINIS> + +<TITLE SUBSTR> + <DECLARE ("VALUE" <OR STRING FALSE> STRING STRING "OPTIONAL" FIX)> + <HLRZ O* AB> + <CAILE O* -4> ;"AT LEAST 2 ARGS" + <JRST WNA> + <JUMPE O* WNA> + <GETYP D* 0 (AB)> + <GETYP A* 2 (AB)> + <CAIN D* TSTRING> + <CAIE A* TSTRING> + <JRST WRONGT> + <HRRZ C* 0 (AB)> ;"L(S1)" + <HRRZ A* 2 (AB)> ;"L(S2)" +;"CHECKS FOR THIRD ARG, WHICH IS THE 'EFFECTIVE LENGTH' OF S1, + AND LIMITS THE SEARCH FOR THE SUBSTR." + <CAIE O* -6> ;"3 ARGS?" + <JRST NOT3> + <GETYP E* 4 (AB)> + <CAIE E* TFIX> ;"FIX, MAX FOR SEARCH" + <JRST WRONGT> + <SKIPE E* 5 (AB)> ;"CAN'T HAVE SUBSTR OF STRING OF LENGTH 0" + <CAMGE E* A> ;"IS MAX < L(S1)" + <MOVE A* E> ;"YES, SUBSTITUTE" +NOT3 + <CAMLE C* A> ;"IS LENGTH OF SUBSTR TO LARGE?" + <JRST RETFALSE> + <PUSH P* A> ;"SAVE MAX ON STACK" + <PUSH P* 1 (AB)> ;"BP2" + <MOVE B* 3 (AB)> + <JUMPE A* RETFALSE> ;"LENGTH 0?" + <JUMPE C* RETFALSE> + <ILDB E* (P)> + <PUSH P* E> ;"SAVE FIRST CHAR OF SUBSTR" + <SUBI C* 1> ;"HAVE REST OF SUBSTR" + <PUSH P* C> ;"AND SAVE COUNT" +;"AT THIS POINT, STACK VARIABLES ARE: + -3(P) MAX (ARG3 OR L(S1)) + -2(P) BYTE-POINTER TO REST OF SUBSTR + -1(P) FIRST CAHR OF SUBSTR + 0(P) COUNT OF REST OF SUBSTR" + +FIRST? ;"LOOKS FOR INSTANCE OF FIRST CHAR" + <ILDB O* B> + <CAMN O* E> ;"=? FIRST CHAR OF SUBSTR" + <JRST CHECKREST> ;"THEN LOOK AT REST" +FIRSTCON + <SOJG A* FIRST?> ;"ELSE LOOK FURTHER" + <JRST RETFALSE> ;"COUNTED OUT STRING" +CHECKREST + <SKIPN C* 0 (P)> ;"SINGLE CHAR?" + <JRST GOTCHA> ;"MATCH ONE=> MATCH SUBSTR" + <CAILE C* -1 (A)> ;"A NOT DECREMENTED YET" + <JRST RETFALSE> ;"NOT ENOUGH CHARS REMAIN" + <MOVE D* -2(P)> ;"RESTORE BP TO SUBSTR" + <PUSH P* B> ;"SAVE BP INTO STRING" +LOOPR + <ILDB E* D> + <ILDB O* B> + <CAME O* E> ;"COMPARE FIRSTS" + <JRST CONTIN> ;"NO MATCH" + <SOJG C* LOOPR> ;"WIN IF COUNT OUT C(C)" + <POP P* B> ;"GET BACK INCREMENTED BP TO STRING" +GOTCHA + <ADD B* [*070000000000*]> ;"DECREMENT BP" + <SUB A* -3 (P)> ;"REMAINING LENGTH - MAX" + <ADD A* 2 (AB)> ;"ADD LENGTH OF ORIGINAL STRING" + ;"(GET TYPE GRATIS)" + <JRST FINIS> +RETFALSE + <MOVSI A* TFALSE> + <SETZ B*> + <JRST FINIS> +CONTIN + <POP P* B> ;"RESTORE BP" + <MOVE E* -1 (P)> ;"AND FIRST SUBSTR CHAR" + <JRST FIRSTCON> ;"LOOK FOR ANOTHER INSTANCE OF THE FIRST CHAR" + + +<TITLE SUBSNC> + <DECLARE ("VALUE" <OR STRING FALSE> STRING STRING "OPTIONAL" FIX)> +;"CHECKS FOR THIRD ARG, WHICH IS THE 'EFFECTIVE LENGTH' OF S2, + AND LIMITS THE SEARCH FOR THE SUBSTR (S1)." +<PSEUDO <DEFINE UPPERAC (AC*) + #DECL ((AC*) ATOM (VALUE) SPLICE) + <CHTYPE + (<FORM CAIL .AC* '<ASCII !"a>> + <FORM CAILE .AC* '<ASCII !"z>> + '<SKIPA> + <FORM SUBI .AC* 32>) SPLICE>>> + <HLRZ O* AB> + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <CAIE O* -6> ;"three args" + <JRST ONLY2> + <PUSHJ P* ISUBSNC3> + <JRST FINIS> +ONLY2 <PUSHJ P* ISUBSNC2> + <JRST FINIS> +<INTERNAL-ENTRY ISUBSNC2 2> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* -2(TP)> ;"length of main" + <HRRZS (TP)> ;"flush rhw" +<INTERNAL-ENTRY ISUBSNC3 3> + <SUBM M* (P)> + <HRRZ A* 0(TP)> ;"length of main to examine" + <HRRZ B* -3(TP)> ;"length of main" + <CAMLE A* B> ;"get min" + <MOVE A* B> + <HRRZ C* -5(TP)> ;"get length of substring" + <CAMLE C* A> ;"IS LENGTH OF SUBSTR TO LARGE?" + <JRST RETFALSE> + <PUSH P* A> ;"SAVE MAX ON STACK" + <PUSH P* -4 (TP)> ;"SUBSTRING BYTE POINTER" + <MOVE B* -2 (TP)> ;"main byte pointer" + <JUMPE A* RETFALSE> ;"LENGTH 0?" + <JUMPE C* RETFALSE> + <ILDB E* (P)> + <UPPERAC E*> ;"make upper case" + <PUSH P* E> ;"SAVE FIRST CHAR OF SUBSTR" + <SUBI C* 1> ;"HAVE REST OF SUBSTR" + <PUSH P* C> ;"AND SAVE COUNT" +;"AT THIS POINT, STACK VARIABLES ARE: + -3(P) MAX (ARG3 OR L(S1)) + -2(P) BYTE-POINTER TO REST OF SUBSTR + -1(P) FIRST CAHR OF SUBSTR + 0(P) COUNT OF REST OF SUBSTR" + +FIRST? ;"LOOKS FOR INSTANCE OF FIRST CHAR" + <ILDB O* B> + <UPPERAC O*> ;"don't distinguish case" + <CAMN O* E> ;"=? FIRST CHAR OF SUBSTR" + <JRST CHECKREST> ;"THEN LOOK AT REST" +FIRSTCON + <SOJG A* FIRST?> ;"ELSE LOOK FURTHER" + <JRST RETFALSEPOP> ;"COUNTED OUT STRING" +CHECKREST + <SKIPN C* 0 (P)> ;"SINGLE CHAR?" + <JRST GOTCHA> ;"MATCH ONE=> MATCH SUBSTR" + <CAILE C* -1 (A)> ;"A NOT DECREMENTED YET" + <JRST RETFALSEPOP> ;"NOT ENOUGH CHARS REMAIN" + <MOVE D* -2(P)> ;"RESTORE BP TO SUBSTR" + <PUSH P* B> ;"SAVE BP INTO STRING" +LOOPR + <ILDB E* D> + <UPPERAC E*> + <ILDB O* B> + <UPPERAC O*> + <CAME O* E> ;"COMPARE FIRSTS" + <JRST CONTIN> ;"NO MATCH" + <SOJG C* LOOPR> ;"WIN IF COUNT OUT C(C)" + <POP P* B> ;"GET BACK INCREMENTED BP TO STRING" +GOTCHA + <ADD B* [*070000000000*]> ;"DECREMENT BP" + <SUB A* -3 (P)> ;"REMAINING LENGTH - MAX" + <ADD A* -3 (TP)> ;"ADD LENGTH OF ORIGINAL STRING" + ;"(GET TYPE GRATIS)" + <SUB P* [<4 (4)>]> ;"restore stacks" + <SUB TP* [<6 (6)>]> + <JRST MPOPJ> +RETFALSEPOP + <SUB P* [<4 (4)>]> +RETFALSE + <MOVE A* <TYPE-WORD FALSE>> + <SETZ B*> + <SUB TP* [<6 (6)>]> + <JRST MPOPJ> + +CONTIN + <POP P* B> ;"RESTORE BP" + <MOVE E* -1 (P)> ;"AND FIRST SUBSTR CHAR" + <JRST FIRSTCON> ;"LOOK FOR ANOTHER INSTANCE OF THE FIRST CHAR" + + + + +<TITLE EXTRACT> + +<DECLARE ("VALUE" <OR STRING FALSE> STRING "OPTIONAL" <OR FIX STRING FALSE> FIX)> + + <HLRE A* AB> + <MOVMS A> + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <CAIE A* 6> + <JRST EXTOPT> + <PUSHJ P* IEXTRACT3> + <JRST FINIS> + +EXTOPT <CAIE A* 4> + <JRST EXT1ARG> + <PUSHJ P* IEXTRACT2> + <JRST FINIS> + +EXT1ARG <PUSHJ P* IEXTRACT1> + <JRST FINIS> + + +<INTERNAL-ENTRY IEXTRACT1 1> + + <SUBM M* (P)> + <HRRZ A* -1(TP)> +IEXTR1 <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* A> + <MCALL 1 ISTRING> + <DPUSH TP* A> + <HRRZS A> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* A> + <JRST IEXTR3> + +<INTERNAL-ENTRY IEXTRACT2 2> + + <SUBM M* (P)> + <GETYP O* -1(TP)> + <CAIE O* <TYPE-CODE FIX>> + <JRST IEXT11> + <HRRZ A* (TP)> + <SUB TP* [<2(2)>]> + <JRST IEXTR1> +IEXT11 <CAIE O* <TYPE-CODE STRING>> + <JRST EXTFLS> + <HRRZ A* -3(TP)> + <HRRZ B* -1(TP)> + <SKIPLE A* B> + <MOVE A* B> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* A> + <JRST IEXTR3> + + +<INTERNAL-ENTRY IEXTRACT3 3> + + <SUBM M* (P)> +IEXTR3 <GETYP O* -5(TP)> + <CAIE O* <TYPE-CODE STRING>> + <JRST EXTFLS> + <HRRZ A* -5(TP)> + <GETYP O* -3(TP)> + <CAIE O* <TYPE-CODE STRING>> + <JRST EXTFLS> + <HRRZ B* -3(TP)> + <GETYP O* -1(TP)> + <CAIE O* <TYPE-CODE FIX>> + <JRST EXTFLS> + <MOVE C* (TP)> + <CAMLE C* A> ;"skips if amount being extracted is < or = + length of source string" + <MOVE C* A> + <CAMLE C* B> + <MOVE C* B> + <MOVE A* -4(TP)> + <MOVE B* -2(TP)> + <ILDB D* A> + <SOJL C* HERE 3> + <IDPB D* B> + <JRST HERE -3> + <DMOVE A* -3(TP)> +EXTRET <SUB TP* [<6(6)>]> + <JRST MPOPJ> + +EXTFLS <DPUSH TP* <PQUOTE BAD-ARGS-TO-EXTRACT!-ERRORS>> + <PUSH TP* -7(TP)> + <PUSH TP* -7(TP)> + <PUSH TP* -7(TP)> + <PUSH TP* -7(TP)> + <PUSH TP* -7(TP)> + <PUSH TP* -7(TP)> + <MCALL 4 ERROR> + <JRST EXTFLS> + + <TITLE RSHIFT> + <DECLARE ("VALUE" STRING STRING FIX)> + <HRRZ C* 0 (AB)> ;"COUNT" + <CAMGE C* 3 (AB)> ;"COMPARE TO SHIFT QTTY" + <JRST OUTR> ;"ARG OUT OF RANGE" + + <LDB D* [*360611000001*]> ;"P BITS" + <IDIVI D* 7> ;"GIVES # BYTES INTO WORD" + <SUBM C* D> ;"L-P INTO D" + <IDIVI D* 5> ;"E CONTAINS Q -- # BYTES IN LAST WORD" + <SKIPN E> ;"Q=0=>Q=5, #WORDS=#WORDS-1" + <SUBI D* 1> + <SKIPN E> + <MOVEI E* 5> + <MOVEI C* 1 (D)> ;"# WORDS INCLUDING FIRST" + <SETZM D> + <CAMLE E* 3 (AB)> ;"IS Q > SHIFT QTTY ?" + <JRST NOWORDS> ;"THEN DON'T DO ANY SHIFTING" <MOVE D* 3 (AB)> ;"# BYTES TO SHIFT" + <ADDI D* 5> + <SUB D* E> ;"-Q" + <IDIVI D* 5> ;"D/# WORDS TO BACK UP" +;"CROCK IS FLOOR(M+5-Q) MOD 5, WHERE M IS AMOUNT OF SHIFT, + Q IS NUMBER OF REAL BYTES IN LAST WORD" + + <SUBI C* -1 (D)> ;"COUNT OF TRANSFERS" + <HRRZ A* 1 (AB)> ;"POINTER TO TOP" + <ADDI A* -1 (C)> ;"POINT AT END" + + <MOVE B* D> ;"# WORDS TO MOVE" + <HRLI B* A> ;"INDEX ON A" +LOOP + <MOVE (A)> + <MOVEM @ B> + <SUBI A* 1> ;"DEC POINTER" + <SOJG C* LOOP> +NOWORDS + <MOVE B* 1 (AB)> + <ADD B* D> ;"3 WORDS HACKED" + <MOVE A* 0 (AB)> ;"TYPE,,COUNT" + <SUB A* 3 (AB)> ;"SUBTRACT SHIFT QTTY" + <JRST FINIS> + + +OUTR + <PUSH TP* $TATOM> + <PUSH TP* <MQUOTE ARG-OUT-OF-RANGE>> + <JRST CALER1> + + <TITLE BACKS> + <DECLARE ("VALUE" <OR STRING FALSE> STRING STRING "OPTIONAL" FIX)> + ;"string to search, match(es), max to back, returns backed string/FALSE" +<PUSH TP* $TFIX> +<PUSH TP* RETFLS> ;"large fix" +<HLRZ AB> +<CAIE -6> +<JRST NOT3> +<MOVE 5 (AB)> +<MOVEM 1 (TB)> ;"fix was given" +;"find real max, top string" +NOT3 +<HRRZ A* 0 (AB)> +<LDB D* [*360611000001*]> ;"get P bits from 1(AB)" +<IDIV D* [-7]> ;"find -(# chars in first word)" +<ADDI A* 5 (D)> ;"simulate *440700* pointer" +<IDIVI A* 5> ;"# chrs/word" +<SKIPE B> ;"number of chars in partial word" +<ADDI A* 1> +<ADD A* 1 (AB)> +<HLRZ C* 1 (A)> ;"vector length" +<SUBI C* 2> ;"account for dope words" +<IMULI C* 5> ;"full words" +<SKIPE B> ;"no partial end word=>skip" +<SUBI B* 5> ;"B gets # extra chars in C" +<ADD C* B> ;"account for partial word" +<MOVE A* 0 (AB)> ;"get visible length" +<SUBI C* (A)> ;"find 'invisible' length" +<CAMGE C* 1 (TB)> ;"check against 'user' length" +<MOVEM C* 1 (TB)> ;"use least length" +;"check lengths" +<MOVE C* 1 (TB)> +<JUMPLE C* RETFLS> +<HRRZ C* 2 (AB)> +<JUMPLE C* RETFLS> +;"now start back" +<MOVE B* 1 (AB)> ;"A contains type,,length" +LOOP1 +<PUSHJ P* BACK1> +<AOS A> +<HRRZ O* 2 (AB)> ;"length string 2" +<MOVE D* 3 (AB)> +LOOP2 +<ILDB E* D> +<CAMN E* C> +<JRST FMATCH> ;"found match" +<SOJG O* LOOP2> +<SOSLE 1 (TB)> ;"count down max" +<JRST LOOP1> +;"here to return FALSE" +RETFLS +<MOVSI A* TFALSE> +<SETZ B*> +<JRST FINIS> +FMATCH +<HRLI A* TSTRING> +<JRST FINIS> + +BACK1 +<JUMPGE B* JUSTBP> +<SOS B> +<HRLI B* *010700*> +JUSTBP +<LDB C* B> ;"get a byte" +<ADD B* [<0 (*070000*)>]> +<POPJ P*> + + <TITLE FIRST-OF> +<DECLARE ("VALUE" <OR STRING FALSE> STRING STRING "OPTIONAL" FIX)> +<HRRZ E* 2 (AB)> +<HLRZ D* AB> +<CAIE D* -6> ;"opt given?" +<JRST NOTHIRD> +<CAMLE E* 5 (AB)> +<MOVE E* 5 (AB)> ;"least of two lengths" +NOTHIRD +<HRRZ D* 2 (AB)> ;"length" +<SUB D* E> ;"number of extra chars, not tested" +<PUSH P* D> ;"save for the end" +<PUSH P* E> ;"number to test" +<JUMPE E* DONEF> +<HRRZ E* 0 (AB)> ;"length of test string" +<JUMPE E* DONEF> +<MOVE B* 3 (AB)> ;"second string" +LOOP +<ILDB A* B> ;"get char" +<HRRZ C* 0 (AB)> +<MOVE D* 1 (AB)> +ILOOP +<ILDB E* D> ;"get test char" +<CAMN E* A> +<JRST DONET> ;"found one" +<SOJG C* ILOOP> ;"try next" +<SOSE (P)> ;"count down" +<JRST LOOP> +DONEF ;"not found" +<MOVSI A* TFALSE> +<SETZ B*> +<JRST FINIS> + +DONET +<POP P* A> ;"count remaining" +<ADD A* (P)> ;"number untested" +<HRLI A* TSTRING> +<JUMPG B* BACKBYTE> +<MOVSI B* *100700*> +<AOSA B> +BACKBYTE +<ADD B* [<0 (*070000*)>]> +<JRST FINIS> + + + <TITLE UPPERCASE> + <DECLARE ("VALUE" STRING STRING "OPTIONAL" FIX)> + <HRRZ D* 0 (AB)> ;"LENGTH OF ARG1" + <HLRZ C* AB> + <CAIE C* -4> ;"ARE THERE TWO ARGS?" + <JRST JUST1> + <CAMLE D* 3 (AB)> ;"NOT > LENGTH (STRING)" + <MOVE D* 3 (AB)> +JUST1 + <JUMPE D* FLUSH> ;"COUNT=0" + <MOVE C* 1 (AB)> ;"BP" +LOOP + <ILDB E* C> + <CAILE E* <ASCII !"z>> + <JRST NOTUC> ;"TOO LARGE" + <CAIGE E* <ASCII !"a>> + <JRST NOTUC> ;"TOO SMALL" + <SUBI E* *40*> ;"CONVERT TO LC" + <DPB E* C> ;"PUT BACK IN STRING" +NOTUC + <SOJG D* LOOP> +FLUSH + <MOVE A* 0 (AB)> + <MOVE B* 1 (AB)> + <JRST FINIS> + +<END> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog/subsys.udl001 b/src/mprog/subsys.udl001 new file mode 100644 index 00000000..6a09a3d4 --- /dev/null +++ b/src/mprog/subsys.udl001 @@ -0,0 +1,37 @@ +<PACKAGE "SUBSYS"> + +<ENTRY SAVE-ME HERALD> + +<DEFINE SAVE-ME ("BIND" O + FILE "OPTIONAL" (NM <7 <CHANNEL "READ" .FILE>>) MFILE + (BEFORE 1) (AFTER 1) + "AUX" (S <SNAME>) (S? <MEMQ !"; .FILE>) FNM) + <EVAL .BEFORE .O> + <COND (.S? <SET FNM .FILE>) + (ELSE <SET FNM <STRING .S !"; .FILE>>)> + <SNAME ""> + <COND (<=? <FSAVE .FNM> "SAVED"> + <EVAL .AFTER .O> + <SNAME .S>) + (ELSE + <EVAL .AFTER .O> + <COND (<ASSIGNED? MFILE> <HERALD .NM .MFILE>) + (ELSE <HERALD .NM>)> + <ERRET>)>> + +<DEFINE HERALD (NM "OPTIONAL" (FILE <STRING "MUDSUB;" .NM " MESSAG">) + "AUX" (I <OPEN "READ" .FILE>)) + <TERPRI> + <PRINC .NM> + <PRINC +" (MUDDLE."> + <PRIN1 ,MUDDLE> + <PRINC ") +"> + <COND (.I + <FILECOPY .I .OUTCHAN> + <CLOSE .I>)> + ,NULL> + +<ENDPACKAGE> + > \ No newline at end of file diff --git a/src/mprog/sun.lbh085 b/src/mprog/sun.lbh085 new file mode 100644 index 00000000..f5fc4d28 --- /dev/null +++ b/src/mprog/sun.lbh085 @@ -0,0 +1,288 @@ + +;;; COPYRIGHT Berthold K. P. Horn, 1977 +;;; +;;; Program to calculate sun-elevation and sun-azimuth. +;;; Given observers geographical position and time of observation. +;;; +;;; T = time in days since 1975/01/01 U.T. 00:00:00 +;;; +;;; MEAN ANOMALY (M) = Geometric Mean Longitude - Mean Longitude of Perigee +;;; M = -2.4834 + .98560026 * T +;;; +;;; Mean Eccentricity e = .0l67343 +;;; SQRT((1+e)/(1-e)) = 1.016877 in the mean +;;; +;;; ECCENTRIC ANOMALY (E) = Anomaly measured from center of ellipse to circle +;;; E + e sin(E) = M. Transcendental equation. +;;; +;;; TRUE ANOMALY (N): tan (N/2) = SQRT((1+e)/(1-e)) tan(E/2) +;;; +;;; LONGITUDE OF EARTH PERIGEE (G) = 282.5103 + .00004707 * T +;;; (Includes precession of earth's pole AND precession of orbit) +;;; +;;; TRUE LONGITUDE = LONGITUDE OF PERIGEE + TRUE ANOMALY +;;; +;;; (PRECESSION 50".47 per year, added to celestial longitude) +;;; (ABBERATION -20".47 taken off celestial longitude) +;;; +;;; Position of MOON'S NODE (O) = 248.58 - .052955 * T +;;; NUTATION in celestial longitude = -17".234 * sin(O) +;;; NUTATION in obliquity = 9".210 * cos(O) +;;; +;;; SEMI-DIAMETER .267 * (1 + e * cos(N) ) +;;; OBLIQUITY OF ECLIPTIC PLANE (X)= 23.4425 + .0025575 * cos(O) +;;; +;;; DECLINATION of sun PHI = asin( sin(L) * sin(X) ) +;;; RIGHT ASCENSION of sun THETA = atan( sin(L) * cos(X) / cos(L) ) +;;; +;;; GHA(ARIES) = 100.025 + 360.9856473 * T +;;; +;;; GHA(SUN) = GHA(ARIES) + R.A.(SUN) +;;; LONGITUDE(SUB-SOLAR POINT) = 360.0 - GHA(SUN) +;;; LATITUDE(SUB-SOLAR POINT) = DECLINATION(SUN) +;;; + +(SETQ BASE (+ 5. 5.) IBASE (+ 5. 5.)) + +(declare (special longitude latitude gmt-offset)) + +(declare (flonum julians hhmmss ddmmss tmp x)) + +;;; Calculate GHA and Declination AND Semi-Diameter of sun. +;;; Given time (T) in days since 1975/01/01 U.T. 00:00:00 +;;; Result is list, (GHA DEC SD), numbers in decimal degrees. +;;; + (DEFUN SUN-POSITION (TIME) + (PROG (MEANA GUESA ECCEA TRUEA LAMBD OMEGA OBLIQ PHI THETA + GHAGAM SEMID) + (SETQ MEANA (-$ (*$ TIME 0.9856) 2.4832) + GUESA (TRUEANOM MEANA) + GUESA (ECCENANOM GUESA MEANA) + ECCEA (ECCENANOM GUESA MEANA) + TRUEA (TRUEANOM ECCEA)) + (SETQ LAMBD (+$ TRUEA 282.5104 (//$ TIME 21120.0)) + OMEGA (-$ 248.6 (//$ TIME 18.884)) + OBLIQ (+$ 23.4425 (//$ (COSD OMEGA) 391.0)) + LAMBD (-$ LAMBD (//$ (SIND OMEGA) 209.0))) + (SETQ SEMID (*$ 0.267 (+$ 1.0 (//$ (COSD TRUEA) 60.0))) + PHI (ASIND (*$ (SIND LAMBD) (SIND OBLIQ))) + THETA (-$ (ATAND (*$ (SIND LAMBD) (COSD OBLIQ)) + (COSD LAMBD)))) + (SETQ GHAGAM (+$ (*$ TIME 0.9856473) + (*$ (FRACTION TIME) 360.0) + 100.025) + THETA (RANGE (+$ THETA GHAGAM))) + + (RETURN (LIST THETA PHI SEMID)))) + +;;; CALCULATES ELEVATION AND AZIMUTH AT OBSERVERS LOCATION. +;;; THETA1 PHI1 OBSERVERS LONGITUDE AND LATITUDE (decimal degrees). +;;; THETA2 PHI2 CELESTIAL OBJECTS LONGITUDE AND LATITUDE (decimal degrees). +;;; Result is list, (ELEV AZIM), numbers are decimal degrees. + +(DEFUN SKY-ANGLES (THETA1 PHI1 THETA2 PHI2) + (LIST (ASIND (+$ (*$ (SIND PHI1) (SIND PHI2)) + (*$ (COSD PHI1) + (COSD PHI2) + (COSD (-$ THETA2 THETA1))))) + (ATANE (*$ (COSD PHI2) (SIND (-$ THETA2 THETA1))) + (-$ (*$ (COSD PHI1) (SIND PHI2)) + (*$ (SIND PHI1) (COSD PHI2) (COSD (-$ THETA2 THETA1))))))) + + +;;; Calculate sun-elevation and sun-aximuth and semi-diameter. +;;; Given observer longitude and latitude, date and time. +;;; Input format: (A DD MM SS), (A DD MM SS), (YYYY MM DD), (HH MM SS). +;;; EAST IS POSITIVE for longitude, NORTH IS POSITIVE for latitude. +;;; RETURNS (ELEVATION AZIMUTH SEMI), format ((A DD MM SS) (A DD MM SS) (A DD MM SS)) +;;; AZIMUTH MEASURED CLOCKWISE FROM NORTH. + (DEFUN SUN (LONG LATI DATE HOURS) + (PROG (SUNPOS SKYANG) + (SETQ SUNPOS (SUN-POSITION (+$ (JULIAN DATE) + (HHMMSS HOURS))) + SKYANG (SKY-ANGLES (DDMMSS LONG) + (DDMMSS LATI) + (-$ 360.0 (CAR SUNPOS)) + (CADR SUNPOS))) + (RETURN (LIST (ANGLED (CAR SKYANG)) + (ANGLED (CADR SKYANG)) + (ANGLED (CADDR SUNPOS)))))) + +;;; CALCULATE DAYS SINCE 1975/01/01 -- INPUT format (YY MM DD) +;;; JULIAN DATE EQUALS RESULT PLUS 2442414. + +(DEFUN JULIAN (DATE) + (PROG (YEAR MONTH DAY DYR YRS) + (SETQ YEAR (CAR DATE) + MONTH (CADR DATE) + DAY (CADDR DATE)) + (SETQ DYR (- (// (- 14. MONTH) 12.)) + YRS (+ DYR YEAR 4800.)) + (RETURN (FLOAT (+ (- (// (* 367. + (- (- MONTH 2.) (* DYR 12.))) + 12.) + (// (* 3. (1+ (// YRS 100.))) 4.)) + (+ (// (* 1461. YRS) 4.) + (- DAY (+ 32075. 2442414.)))))))) + +;;; CALCULATE DATE, GIVEN DAYS SINCE 1975/01/01 -- OUTPUT format (YY MM DD) +;;; ARGUMENT IS (JULIAN DATE - 2442414.) + +(DEFUN DATED (JULIANS) + (PROG (LOFF NOFF IOFF JOFF KOFF) + (SETQ LOFF (+ (FIX JULIANS) 68569. 2442414.) + NOFF (// (* LOFF 4.) 146097.) + LOFF (- LOFF (// (+ (* 146097. NOFF) 3.) 4.)) + IOFF (// (* 4000. (1+ LOFF)) 1461001.) + LOFF (- LOFF (- (// (* 1461. IOFF) 4.) 31.)) + JOFF (// (* 80. LOFF) 2447.) + KOFF (- LOFF (// (* 2447. JOFF) 80.)) + LOFF (// JOFF 11.) + JOFF (- JOFF (- (* 12. LOFF) 2.)) + IOFF (+ IOFF (* 100. (- NOFF 49.)) LOFF)) + (RETURN (LIST IOFF JOFF KOFF)))) + +;;; NEGATE ANGLE IN FUNNY FORMAT + +(DEFUN INVERT (L) + (COND ((EQUAL (CAR L) '+) (CONS '- (CDR L))) + ((EQUAL (CAR L) '-) (CONS '+ (CDR L))) + (T (PRINT 'ERROR-IN-ANGLE-FORMAT)))) + +;;; CONVERT FROM HOURS -- format (HH MM SS) -- TO DECIMAL DAYS. + (DEFUN HHMMSS (TIMED) + (//$ (+$ (FLOAT (CAR TIMED)) + (//$ (+$ (FLOAT (CADR TIMED)) + (//$ (FLOAT (CADDR TIMED)) 60.0)) + 60.0)) + 24.0)) + +;;; CONVERT FROM DECIMAL DAYS TO HOURS -- format (HH MM SS). + +(DEFUN TIMED (HHMMSS) + (PROG (HH MM SS TMP) + (SETQ HHMMSS (*$ 24.0 HHMMSS) + HH (FIX HHMMSS) + TMP (*$ 60.0 (-$ HHMMSS (FLOAT HH))) + MM (FIX TMP) + TMP (*$ 60.0 (-$ TMP (FLOAT MM))) + SS (FIX (+$ 0.5 TMP))) + (RETURN (LIST HH MM SS)))) + +;;; CONVERT FROM ANGLE -- format (A DD MM SS) -- TO DECIMAL DEGREES. + +(DEFUN DDMMSS (ANGLED) + (COND ((EQUAL (CAR ANGLED) '-) + (-$ 0.0 (DDMMSS (INVERT ANGLED)))) + (T (+$ (FLOAT (CADR ANGLED)) + (//$ (+$ (FLOAT (CADDR ANGLED)) + (//$ (FLOAT (CADDDR ANGLED)) 60.0)) + 60.0))))) + +;;; CONVERT FROM DECIMAL DEGREES TO ANGLE -- format (A DD MM SS). + +(DEFUN ANGLED (DDMMSS) + (PROG (DD MM SS TMP) + (COND ((< DDMMSS 0.0) + (RETURN (INVERT (ANGLED (-$ 0.0 DDMMSS)))))) + (SETQ DD (FIX DDMMSS) + TMP (*$ 60.0 (-$ DDMMSS (FLOAT DD))) + MM (FIX TMP) + TMP (*$ 60.0 (-$ TMP (FLOAT MM))) + SS (FIX (+$ 0.5 TMP))) + (RETURN (LIST '+ DD MM SS)))) + +;;; Calculate true anomaly, given eccentric anomaly. +;;; Also gives first approximation of eccentric anomaly from mean anomaly. +;;; (Provided eccentricty is small) + +(DEFUN TRUEANOM (THETA) + (*$ 2.0 (ATAND (*$ 1.01686 (TAND (//$ THETA 2.0))) 1.0))) + +;;; Calculate eccentric anomaly from mean anomaly. +;;; Iterative approximation to Kepler's transcendental equation. + +(DEFUN ECCENANOM (THETA MEAN) (+$ MEAN (*$ 0.958 (SIND THETA)))) + +;;; Restrict angle to 0.0 to 360.0 degree range. + (DEFUN RANGE (THETA) + (COND ((< THETA 0.0) (RANGE (+$ THETA 360.0))) + ((> THETA 360.0) (RANGE (-$ THETA 360.0))) + (T THETA))) + +(DEFUN SIND (X) (SIN (//$ (*$ 3.14159265 X) 180.0))) + +(DEFUN COSD (X) (COS (//$ (*$ 3.14159265 X) 180.0))) + +(DEFUN ATANE (Y X) + (*$ (//$ (ATAN Y X) 3.14159265) 180.0)) + +(DEFUN ATAND (Y X) + (*$ (-$ (//$ (ATAN (-$ Y) (-$ X)) 3.14159265) 1.0) + 180.0)) + +(DEFUN TAND (X) (//$ (SIND X) (COSD X))) + +;;; RETURNS RESULT IN RANGE -90 TO +90 DEGREES + +(DEFUN ASIND (X) (ATAND X (SQRT (-$ 1.0 (*$ X X))))) + +;;; RETURN RESULT IN RANGE 0 TO 180 DEGREES + +(DEFUN ACOSD (X) (ATANE (SQRT (-$ 1.0 (*$ X X))) X)) + +(DEFUN FRACTION (X) (-$ X (FLOAT (FIX X)))) + +;;; ADD OFFSETS TO FIRST COMPONENT OF THREE-LIST. + +(DEFUN UPDATE (L OFFSET) (LIST (+ (CAR L) OFFSET) (CADR L) (CADDR L))) + +;;; CALCULATE POSITION OF SUN AT PRESENT TIME, HERE. + +(DEFUN SUN-NOW-HERE NIL + (SUN LONGITUDE + LATITUDE + (UPDATE (STATUS DATE) 1900.) + (UPDATE (STATUS DAYTIME) GMT-OFFSET))) + +;;; CALCULATE DAY OF WEEK FROM DAYS SINCE 1975/01/01 +;;; MONDAY IS 1, TUESDAY IS 2, ... SUNDAY IS 7. + +(DEFUN DAY-OF-WEEK (JULIANS) (1+ (REMAINDER (+ JULIANS 2.) 7.))) + +;;; CALCULATE DATE OF LAST SUNDAY IN PRESENT MONTH (WITH N DAYS) + +(DEFUN LAST-SUNDAY (DATE N) + (- N (PREMUTE (DAY-OF-WEEK (FIX (JULIAN (CONSTRUCT DATE N))))))) + +(DEFUN PREMUTE (N) (COND ((= N 7.) 0.) (T N))) + +(DEFUN CONSTRUCT (DATE N) + (CONS (CAR DATE) (CONS (CADR DATE) (CONS N NIL)))) + +;;; TO ADJUST FOR THAT CROCK CALLED DAY-LIGHT-SAVINGS TIME. +;;; SWITCH LAST SUNDAY OF APRIL AND LAST SUNDAY OF OCTOBER (?) + (DEFUN DAY-SAVE-CROCK (DATE) + (COND ((OR (< (CADR DATE) 4.) + (> (CADR DATE) 10.) + (AND (= (CADR DATE) 4.) + (< (CADDR DATE) (LAST-SUNDAY DATE 30.))) + (AND (= (CADR DATE) 10.) + (> (1- (CADDR DATE)) (LAST-SUNDAY DATE 31.)))) + 0.) + (T -1.))) + +;;; GEOGRAPHICAL POSITION OF M.I.T. - A.I. LAB AND OFFSET FROM G.M.T. +;;; MODIFY TO YOUR OWN CONVENIENCE AND YOUR OWN LOCATION AND TIME SYSTEM. + +(SETQ LONGITUDE '(- 71. 5. 20.)) + +(SETQ LATITUDE '(+ 42. 21. 50.)) + +;;; GIVE NORMAL OFFSET FROM G.M.T. IN HOURS AS SECOND ARGUMENT + +(SETQ GMT-OFFSET (+ (DAY-SAVE-CROCK (UPDATE (STATUS DATE) 1900.)) 5.)) + +;;; CALCULATE POSITION OF SUN AT THIS TIME AND FOR THIS PLACE. + +(SUN-NOW-HERE) diff --git a/src/mprog/sunnew.lbh041 b/src/mprog/sunnew.lbh041 new file mode 100644 index 00000000..45221f78 --- /dev/null +++ b/src/mprog/sunnew.lbh041 @@ -0,0 +1,466 @@ + +;;; SUN +;;; +;;; COPYRIGHT Berthold K. P. Horn, 1977 +;;; +;;; Program to calculate sun-elevation and sun-azimuth. +;;; Given observers geographical position and time of observation. +;;; +;;; UT = time in (universal) days since 1975/01/01 U.T. 00:00:00 +;;; ET = time in (ephemeris) days since 1975/01/01 E.T. 00:00:00 +;;; +;;; DT = ET - UT reduction from universal time to ephemeris time. +;;; DT = +45.6 seconds for 1975/01/01 +;;; +;;; GEOMETRIC MEAN LONGITUDE (OF SUN) (L) = 280.0271 + .98564734 * ET +;;; Relative to equinox of date (that is luni-solar and planetary +;;; precession included). [Not directly used here]. +;;; +;;; MEAN ANOMALY (M) = Geometric Mean Longitude - Mean Longitude of Perigee. +;;; M = -2.4834 + .98560026 * ET +;;; +;;; Eccentricity e = .016720 - .0000000011 * ET +;;; +;;; ECCENTRIC ANOMALY (E) -- useful auxillary angle. +;;; Anomaly measured from center of ellipse to circumscribed circle. +;;; E + e sin(E) = M. Transcendental equation (due to Kepler ...). +;;; +;;; TRUE ANOMALY (N): +;;; Anomaly measured from focus of ellipse to actual position. +;;; tan (N/2) = SQRT((1+e)/(1-e)) tan(E/2) +;;; +;;; LONGITUDE OF EARTH PERIGEE (G) = 282.5105 + .00004709 * ET +;;; Relative to equinox of date (that is luni-solar and planetary +;;; precession included). +;;; +;;; TRUE LONGITUDE = LONGITUDE OF PERIGEE + TRUE ANOMALY +;;; +;;; Position of MOON'S NODE (O) = 248.59 - .052954 * ET +;;; +;;; NUTATION in celestial longitude = -17".234 * sin(O) +;;; NUTATION in obliquity = 9".210 * cos(O) +;;; +;;; OBLIQUITY OF ECLIPTIC PLANE (X) = 23.4425 - .000000036 ET +;;; Nutation in obliquity = + .0026 * cos(O) +;;; Nutation in longitude = - .0048 * sin(O) +;;; +;;; SEMI-DIAMETER AT UNIT DISTANCE 16' 01".18 +;;; ABBERATION CONSTANT 20".496 +;;; PARALLAX CONSTANT 8".794 +;;; +;;; Radius-Vector = (1 - e * e) / (1 + e * cos(N) ) = 1 - e * cos (E) +;;; Semi-Diameter = .2670 / Radius-Vector +;;; Parallax = .0024 / Radius-Vector +;;; Abberation = .0057 / Radius-Vector (subtract from longitude). +;;; +;;; DECLINATION of sun PHI = asin( sin(L) * sin(X) ) +;;; RIGHT ASCENSION of sun THETA = atan( sin(L) * cos(X) / cos(L) ) +;;; +;;; Mean Sidereal Time = Mean Greenwich Hour Angle of Equinox +;;; GHA(ARIES) = 100.0215 + 360.98564734 * UT +;;; +;;; True GHA-Equinox = Mean GHA-Equinox + Nut-Lon * cos(X) +;;; +;;; LONGITUDE(SUB-SOLAR POINT) = R.A.(SUN) - GHA(ARIES) +;;; LATITUDE(SUB-SOLAR POINT) = DECLINATION(SUN) +;;; +;;; Latitude and Declination increase Northward. +;;; Longitude and Righ Ascension increase Eastward. +;;; Hour Angles increase Westward (sigh...) +;;; +;;; Significant digits: +;;; +;;; Angles -- 4 digits (.3" accuracy) +;;; Angular rates -- 8 digits (1".3 accuracy per century) +;;; Quadratic terms -- l2 digits (5" accuracy per century) +;;; +;;; Lunar node -- use two digits less, used indirectly. +;;; +;;; Eccentricity -- use two digits more, for rad-to-deg conversion. +;;; + +(DECLARE (SPECIAL PI LONGITUDE LATITUDE GMT-OFFSET TRACEF ET-UT + INDEX)) + +(DECLARE (FLONUM JULIANS HHMMSS DDMMSS TMP X)) + +(SETQ BASE (+ 5. 5.) + IBASE (+ 5. 5.) + PI (*$ 4.0 (ATAN 1.0 1.0)) + TRACEF NIL) + +;;; Calculate GHA and DECLINATION and SEMI-DIAMETER of SUN. +;;; Given time (UT) in days since 1975/01/01 U.T. 00:00:00 +;;; Result is list, (GHA DEC SD), numbers in decimal degrees. +;;; + +(DEFUN SUN-POSITION (UT) + (PROG (ET ECC MEANA ECCEA GUESA TRUEA LAMBD PERI OMEGA OBLIQ + PHI THETA GHAGAM SEMID RADVEC ABBER PARAL NUT-OBLIQ + NUT-LONGIT) + (SETQ ET (+$ UT ET-UT) + ECC (ECCENTRICITY ET) + MEANA (MEANANOM ET) + GUESA (TRUEANOM MEANA ECC) + GUESA (ECCENANOM GUESA MEANA ECC) + ECCEA (ECCENANOM GUESA MEANA ECC) + TRUEA (TRUEANOM ECCEA ECC) + PERI (PERIGEE ET) + LAMBD (RANGE (+$ TRUEA PERI)) + OBLIQ (OBLIQUITY ET)) + (COND (TRACEF (PRINT (LIST 'ECCENTRICITY ECC)) + (PRINT (LIST 'MEAN-ANOMALY + (RANGE MEANA))) + (PRINT (LIST 'ECCEN-ANOMALY + (RANGE ECCEA))) + (PRINT (LIST 'TRUE-ANOMALY + (RANGE TRUEA))) + (PRINT (LIST 'PERIGEE (RANGE PERI))) + (PRINT (LIST 'MEAN-OBLIQUITY OBLIQ)) + (PRINT (LIST 'LONGITUDE LAMBD)))) + (SETQ OMEGA (MOON-NODE ET) + NUT-OBLIQ (*$ (COSD OMEGA) 2.6E-3) + NUT-LONGIT (*$ (SIND OMEGA) -4.7E-3) + OBLIQ (+$ OBLIQ NUT-OBLIQ) + LAMBD (+$ LAMBD NUT-LONGIT)) + (COND (TRACEF (PRINT (LIST 'MOON-NODE + (RANGE OMEGA))) + (PRINT (LIST 'NUT-OBLIQUITY + NUT-OBLIQ)) + (PRINT (LIST 'NUT-LONGITUDE + NUT-LONGIT)) + (PRINT (LIST 'TRUE-OBLIQUITY OBLIQ)) + (PRINT (LIST 'TRUE-LONGITUDE + LAMBD)))) + (SETQ RADVEC (RADIUS-VECTOR-T TRUEA ECC) + SEMID (//$ 0.267 RADVEC) + PARAL (//$ 2.4E-3 RADVEC) + ABBER (//$ 5.7E-3 RADVEC) + LAMBD (-$ LAMBD ABBER)) + (COND (TRACEF (PRINT (LIST 'TRUE-DISTANCE RADVEC)) + (PRINT (LIST 'SEMI-DIAMETER SEMID)) + (PRINT (LIST 'PARALLAX PARAL)) + (PRINT (LIST 'ABBERATION ABBER)) + (PRINT (LIST 'APPARENT-LONGITUDE + LAMBD)))) + (SETQ PHI (DECLINATION LAMBD OBLIQ) + THETA (RIGHT-ASCENSION LAMBD OBLIQ) + GHAGAM (RANGE (GHA-ARIES UT))) + (COND (TRACEF (PRINT (LIST 'DECLINATION PHI)) + (PRINT (LIST 'RIGHT-ASCENSION + (RANGE THETA))) + (PRINT (LIST 'MEAN-GHA-EQUINOX + GHAGAM)))) + (SETQ GHAGAM (+$ GHAGAM (*$ NUT-LONGIT (COSD OBLIQ)))) + (SETQ THETA (RANGE (-$ GHAGAM THETA))) + (COND (TRACEF (PRINT (LIST 'TRUE-GHA-EQUINOX + GHAGAM)) + (PRINT (LIST 'TRUE-GHA-SUN THETA)) + (PRINT (LIST 'TRUE-DECLINATION-SUN + PHI)))) + (RETURN (LIST THETA PHI SEMID)))) + +;;; CALCULATES ELEVATION AND AZIMUTH AT OBSERVERS LOCATION. +;;; THETA1 PHI1 OBSERVERS LONGITUDE AND LATITUDE (decimal degrees). +;;; THETA2 PHI2 CELESTIAL OBJECTS LONGITUDE AND LATITUDE (decimal degrees). +;;; Result is list, (ELEV AZIM), numbers are decimal degrees. +;;; (Does not take into account parallax and refraction) + +(DEFUN SKY-ANGLES (THETA1 PHI1 THETA2 PHI2) + (LIST (ASIND (+$ (*$ (SIND PHI1) (SIND PHI2)) + (*$ (COSD PHI1) + (COSD PHI2) + (COSD (-$ THETA2 THETA1))))) + (ATANE (*$ (COSD PHI2) (SIND (-$ THETA2 THETA1))) + (-$ (*$ (COSD PHI1) (SIND PHI2)) + (*$ (SIND PHI1) + (COSD PHI2) + (COSD (-$ THETA2 THETA1))))))) + +;;; Calculate sun-elevation and sun-azimuth and semi-diameter. +;;; Given observer longitude and latitude, date and time. +;;; Input format: (A DD MM SS), (A DD MM SS), (YYYY MM DD), (HH MM SS). +;;; +;;; RETURNS (ELEVATION AZIMUTH SEMI), +;;; format ((A DD MM SS) (A DD MM SS) (A DD MM SS)) +;;; AZIMUTH MEASURED CLOCKWISE FROM NORTH. + +(DEFUN SUN (LONG LATI DATE HOURS) + (PROG (SUNPOS SKYANG) + (SETQ SUNPOS (SUN-POSITION (+$ (JULIAN DATE) + (HHMMSS HOURS))) + SKYANG (SKY-ANGLES (DDMMSS LONG) + (DDMMSS LATI) + (-$ 360.0 (CAR SUNPOS)) + (CADR SUNPOS))) + (RETURN (LIST (ANGLED (CAR SKYANG)) + (ANGLED (CADR SKYANG)) + (ANGLED (CADDR SUNPOS)))))) + +;;; CALCULATE DAYS SINCE 1975/01/01 -- INPUT format (YY MM DD) +;;; JULIAN DATE EQUALS RESULT PLUS 2442414. + +(DEFUN JULIAN (DATE) + (PROG (YEAR MONTH DAY DYR YRS) + (SETQ YEAR (CAR DATE) MONTH (CADR DATE) DAY (CADDR DATE)) + (SETQ DYR (- (// (- 14. MONTH) 12.)) + YRS (+ DYR YEAR 4800.)) + (RETURN (FLOAT (+ (- (// (* 367. + (- (- MONTH 2.) (* DYR 12.))) + 12.) + (// (* 3. (1+ (// YRS 100.))) 4.)) + (+ (// (* 1461. YRS) 4.) + (- DAY (+ 32075. 2442414.)))))))) + +;;; CALCULATE DATE, GIVEN DAYS SINCE 1975/01/01 -- OUTPUT format (YY MM DD) +;;; ARGUMENT IS (JULIAN DATE - 2442414.) + +(DEFUN DATED (JULIANS) + (PROG (LOFF NOFF IOFF JOFF KOFF) + (SETQ LOFF (+ (FIX JULIANS) 68569. 2442414.) + NOFF (// (* LOFF 4.) 146097.) + LOFF (- LOFF (// (+ (* 146097. NOFF) 3.) 4.)) + IOFF (// (* 4000. (1+ LOFF)) 1461001.) + LOFF (- LOFF (- (// (* 1461. IOFF) 4.) 31.)) + JOFF (// (* 80. LOFF) 2447.) + KOFF (- LOFF (// (* 2447. JOFF) 80.)) + LOFF (// JOFF 11.) + JOFF (- JOFF (- (* 12. LOFF) 2.)) + IOFF (+ IOFF (* 100. (- NOFF 49.)) LOFF)) + (RETURN (LIST IOFF JOFF KOFF)))) + +;;; NEGATE ANGLE IN FUNNY FORMAT + +(DEFUN INVERT (L) + (COND ((EQUAL (CAR L) '+) (CONS '- (CDR L))) + ((EQUAL (CAR L) '-) (CONS '+ (CDR L))) + (T (PRINT 'ERROR-IN-ANGLE-FORMAT)))) + +;;; CONVERT FROM HOURS -- format (HH MM SS) -- TO DECIMAL DAYS. + (DEFUN HHMMSS (TIMED) + (//$ (+$ (FLOAT (CAR TIMED)) + (//$ (+$ (FLOAT (CADR TIMED)) + (//$ (FLOAT (CADDR TIMED)) 60.0)) + 60.0)) + 24.0)) + +;;; CONVERT FROM DECIMAL DAYS TO HOURS -- format (HH MM SS). + +(DEFUN TIMED (HHMMSS) + (PROG (HH MM SS TMP) + (SETQ HHMMSS (*$ 24.0 HHMMSS) + HH (FIX HHMMSS) + TMP (*$ 60.0 (-$ HHMMSS (FLOAT HH))) + MM (FIX TMP) + TMP (*$ 60.0 (-$ TMP (FLOAT MM))) + SS (FIX (+$ 0.5 TMP))) + (RETURN (LIST HH MM SS)))) + +;;; CONVERT FROM ANGLE -- format (A DD MM SS) -- TO DECIMAL DEGREES. + +(DEFUN DDMMSS (ANGLED) + (COND ((EQUAL (CAR ANGLED) '-) + (-$ 0.0 (DDMMSS (INVERT ANGLED)))) + (T (+$ (FLOAT (CADR ANGLED)) + (//$ (+$ (FLOAT (CADDR ANGLED)) + (//$ (FLOAT (CADDDR ANGLED)) 60.0)) + 60.0))))) + +;;; CONVERT FROM DECIMAL DEGREES TO ANGLE -- format (A DD MM SS). + +(DEFUN ANGLED (DDMMSS) + (PROG (DD MM SS TMP) + (COND ((< DDMMSS 0.0) + (RETURN (INVERT (ANGLED (-$ 0.0 DDMMSS)))))) + (SETQ DD (FIX DDMMSS) + TMP (*$ 60.0 (-$ DDMMSS (FLOAT DD))) + MM (FIX TMP) + TMP (*$ 60.0 (-$ TMP (FLOAT MM))) + SS (FIX (+$ 0.5 TMP))) + (RETURN (LIST '+ DD MM SS)))) + +;;; Calculate MEAN GHA of vernal equinox -- given UNIVERSAL TIME + +(DEFUN GHA-ARIES (TIME) + (+$ (*$ TIME 0.98564734) (*$ (FRACTION TIME) 360.0) 100.0215)) + +;;; Calculate geometric mean longitude of sun -- given EPHEMERIS TIME +;;; Not used now -- + +(DEFUN LONGITUDE (TIME) (+$ 280.0271 (*$ TIME 0.98564734))) + +;;; Calculate longitude of sun's perigee -- given EPHEMERIS TIME + +(DEFUN PERIGEE (TIME) (+$ 282.5105 (*$ TIME 4.709E-5))) + +;;; Calculate obliquity of ecliptic -- given EPHEMERIS TIME + +(DEFUN OBLIQUITY (TIME) (-$ 23.4425 (*$ TIME 3.60000002E-7))) + +;;; Calculate longitude of moon's node -- given EPHEMERIS TIME + +(DEFUN MOON-NODE (TIME) (-$ 248.59 (*$ TIME 0.052954))) + +;;; Calculate eccentricity of earth orbit -- given EPHEMERIS TIME + +(DEFUN ECCENTRICITY (TIME) (-$ 0.01672 (*$ TIME 1.2E-9))) + +;;; Calculate mean anomaly -- given EPHEMERIS TIME + +(DEFUN MEANANOM (TIME) (-$ (*$ TIME 0.98560026) 2.4834)) + +;;; Calculate true anomaly, given eccentric anomaly. +;;; (Also gives first approximation of eccentric anomaly from +;;; mean anomaly. Provided eccentricty is small). + +(DEFUN TRUEANOM (THETA ECC) + (*$ 2.0 + (ATAND (*$ (SQRT (//$ (+$ 1.0 ECC) (-$ 1.0 ECC))) + (TAND (//$ THETA 2.0))) + 1.0))) + +;;; Calculate eccentric anomaly from mean anomaly. +;;; Iterative approximation to Kepler's transcendental equation. + +(DEFUN ECCENANOM (THETA MEANA ECC) + (+$ MEANA (*$ (RAD-TO-DEG ECC) (SIND THETA)))) + +;;; Calculate declination given celestial longitude and obliquity + +(DEFUN DECLINATION (LAMBD OBLIQ) + (ASIND (*$ (SIND LAMBD) (SIND OBLIQ)))) + +;;; Calculate right ascension given celestial longitude and obliquity + +(DEFUN RIGHT-ASCENSION (LAMBD OBLIQ) + (ATAND (*$ (SIND LAMBD) (COSD OBLIQ)) (COSD LAMBD))) + +;;; Calculate radius-vector from sun to earth -- ECCENTRIC ANOMALY + +(DEFUN RADIUS-VECTOR-E (ECCA ECC) (-$ 1.0 (*$ (COSD ECCA) ECC))) + +;;; Calculate radius-vector from sun to earth -- TRUE ANOMALY + +(DEFUN RADIUS-VECTOR-T (TRUEA ECC) + (//$ (-$ 1.0 (*$ ECC ECC)) (+$ 1.0 (*$ (COSD TRUEA) ECC)))) + +;;; Calculate change in elevation due to refraction. +;;; Fits data in Nautical Almanac. +;;; Sea-level, normal athmospheric pressure and temperature. +;;; +;;; NOT TO BE USED FOR ELEVATIONS BELOW ABOUT 10 DEGREES + +(DEFUN REFRACTION-NA (ELEV) + (*$ (TAND (-$ 90.0 ELEV)) + (+$ 0.016167 (*$ 1.7E-5 (SQUARE (TAND (-$ 90.0 ELEV))))))) + +;;; Calculate elevation of direction outside athmosphere from viewer elevation + +(DEFUN ELEV-SPACE (ELEV) (ACOSD (*$ (COSD ELEV) INDEX))) + +;;; Calculate viewer elevation from direction outside athmosphere + +(DEFUN ELEV-VIEW (ELEV) (ACOSD (//$ (COSD ELEV) INDEX))) + +;;; Calculate change in elevation due to refraction. +;;; Analytic Model. Does not take into account earth's curvature. + +(DEFUN ELEVATION-AN (ELEV) (-$ ELEV (ELEV-SPACE ELEV))) + +(DEFUN SQUARE (X) (*$ X X)) + +;;; Restrict angle to 0.0 to 360.0 degree range. + +(DEFUN RANGE (THETA) + (COND ((< THETA 0.0) (RANGE (+$ THETA 360.0))) + ((< THETA 360.0) THETA) + (T (RANGE (-$ THETA 360.0))))) + +(DEFUN RAD-TO-DEG (X) (*$ (//$ X PI) 180.0)) + +(DEFUN DEG-TO-RAD (X) (*$ (//$ X 180.0) PI)) + +(DEFUN SIND (X) (SIN (//$ (*$ PI X) 180.0))) + +(DEFUN COSD (X) (COS (//$ (*$ PI X) 180.0))) + +;;; RETURN RESULT BETWEEN 0 AND 360 DEGREES + +(DEFUN ATANE (Y X) (*$ (//$ (ATAN Y X) PI) 180.0)) + +;;; RETURN RESULT BETWEEN -180 AND +180 DEGREES + +(DEFUN ATAND (Y X) (*$ (-$ (//$ (ATAN (-$ Y) (-$ X)) PI) 1.0) 180.0)) + +(DEFUN TAND (X) (//$ (SIND X) (COSD X))) + +;;; RETURNS RESULT IN RANGE -90 TO +90 DEGREES + +(DEFUN ASIND (X) (ATAND X (SQRT (-$ 1.0 (*$ X X))))) + +;;; RETURN RESULT IN RANGE 0 TO 180 DEGREES + +(DEFUN ACOSD (X) (ATANE (SQRT (-$ 1.0 (*$ X X))) X)) + +(DEFUN FRACTION (X) (-$ X (FLOAT (FIX X)))) + +;;; ADD OFFSETS TO FIRST COMPONENT OF THREE-LIST. + +(DEFUN UPDATE (L OFFSET) (LIST (+ (CAR L) OFFSET) (CADR L) (CADDR L))) + +;;; CALCULATE POSITION OF SUN AT PRESENT TIME, HERE. + +(DEFUN SUN-NOW-HERE NIL + (SUN LONGITUDE + LATITUDE + (UPDATE (STATUS DATE) 1900.) + (UPDATE (STATUS DAYTIME) GMT-OFFSET))) + +;;; CALCULATE DAY OF WEEK FROM DAYS SINCE 1975/01/01 +;;; MONDAY IS 1, TUESDAY IS 2, ... SUNDAY IS 7. + +(DEFUN DAY-OF-WEEK (JULIANS) (1+ (REMAINDER (+ JULIANS 2.) 7.))) + +;;; CALCULATE DATE OF LAST SUNDAY IN PRESENT MONTH (WITH N DAYS) + +(DEFUN LAST-SUNDAY (DATE N) + (- N + (PREMUTE (DAY-OF-WEEK (FIX (JULIAN (CONSTRUCT DATE N))))))) + +(DEFUN PREMUTE (N) (COND ((= N 7.) 0.) (T N))) + +(DEFUN CONSTRUCT (DATE N) + (CONS (CAR DATE) (CONS (CADR DATE) (CONS N NIL)))) + +;;; TO ADJUST FOR THAT CROCK CALLED DAY-LIGHT-SAVINGS TIME. +;;; SWITCH LAST SUNDAY OF APRIL AND LAST SUNDAY OF OCTOBER (?) + +(DEFUN DAY-SAVE-CROCK (DATE) + (COND ((OR (< (CADR DATE) 4.) + (> (CADR DATE) 10.) + (AND (= (CADR DATE) 4.) + (< (CADDR DATE) (LAST-SUNDAY DATE 30.))) + (AND (= (CADR DATE) 10.) + (> (1- (CADDR DATE)) (LAST-SUNDAY DATE 31.)))) + 0.) + (T -1.))) + +;;; OFFSET OF EPHEMERIS TIME FROM UNIVERSAL TIME (1975/01/01) +;;; REFRACTIVE INDEX OF ATMOSPHERE AT STANDARD PRESSURE AND TEMPERATURE + +(SETQ ET-UT 5.28E-4 INDEX 1.0002824) + +;;; GEOGRAPHICAL POSITION OF M.I.T. - A.I. LAB AND OFFSET FROM G.M.T. +;;; MODIFY TO YOUR OWN CONVENIENCE AND YOUR OWN LOCATION AND TIME SYSTEM. + +(SETQ LONGITUDE '(- 71. 5. 20.)) + +(SETQ LATITUDE '(+ 42. 21. 50.)) + +;;; GIVE NORMAL OFFSET FROM G.M.T. IN HOURS AS SECOND ARGUMENT + +(SETQ GMT-OFFSET (+ (DAY-SAVE-CROCK (UPDATE (STATUS DATE) 1900.)) 5.)) + +;;; CALCULATE POSITION OF SUN AT THIS TIME AND FOR THIS PLACE. + +(SUN-NOW-HERE) diff --git a/src/mprog/sunonr.lbh016 b/src/mprog/sunonr.lbh016 new file mode 100644 index 00000000..6c308c18 --- /dev/null +++ b/src/mprog/sunonr.lbh016 @@ -0,0 +1,574 @@ + +;;; SUN +;;; +;;; COPYRIGHT Berthold K. P. Horn, 1977 +;;; +;;; Program to calculate sun-elevation and sun-azimuth. +;;; Given observers geographical position and time of observation. +;;; +;;; UT = time in (universal) days since 1975/01/01 U.T. 00:00:00 +;;; ET = time in (ephemeris) days since 1975/01/01 E.T. 00:00:00 +;;; +;;; DT = ET - UT reduction from universal time to ephemeris time. +;;; DT = +45.6 seconds for 1975/01/01 +;;; +;;; Note, starting epoch is 27393.5 days later than epoch usually used, +;;; namely, 1900/01/00 12:00:00. +;;; +;;; GEOMETRIC MEAN LONGITUDE (OF SUN) (L) = 280.0271 + .98564734 * ET +;;; Relative to equinox of date (that is luni-solar and planetary +;;; precession included). [Not directly used here]. +;;; +;;; MEAN ANOMALY (M) = Geometric Mean Longitude - Mean Longitude of Perigee. +;;; M = 357.5166 + .98560026 * ET +;;; +;;; Eccentricity e = .016720 - .0000000011 * ET +;;; +;;; ECCENTRIC ANOMALY (E) -- useful auxillary angle. +;;; Anomaly measured from center of ellipse to circumscribed circle. +;;; E + e sin(E) = M. Transcendental equation (due to Kepler ...). +;;; +;;; TRUE ANOMALY (N): +;;; Anomaly measured from focus of ellipse to actual position. +;;; tan (N/2) = SQRT((1+e)/(1-e)) tan(E/2) +;;; +;;; LONGITUDE OF EARTH PERIGEE (G) = 282.5105 + .00004709 * ET +;;; Relative to equinox of date (that is luni-solar and planetary +;;; precession included). +;;; +;;; TRUE LONGITUDE = LONGITUDE OF PERIGEE + TRUE ANOMALY +;;; +;;; Position of MOON'S NODE (O) = 248.59 - .052954 * ET +;;; +;;; OBLIQUITY OF ECLIPTIC PLANE (X) = 23.4425 - .000000036 ET +;;; Nutation in obliquity = + .0026 * cos(O) ( +9".210) +;;; Nutation in longitude = - .0048 * sin(O) (-17".234) +;;; +;;; Radius-Vector = (1 - e * e) / (1 + e * cos(N) ) = 1 - e * cos (E) +;;; +;;; Semi-Diameter = .2670 / Radius-Vector (16' 01".18) +;;; Parallax = .0024 / Radius-Vector ( 8".794) +;;; Abberation = .0057 / Radius-Vector (20".496) +;;; +;;; DECLINATION of sun PHI = asin( sin(L) * sin(X) ) +;;; RIGHT ASCENSION of sun THETA = atan( sin(L) * cos(X) / cos(L) ) +;;; +;;; Mean Sidereal Time = Mean Greenwich Hour Angle of Equinox +;;; GHA(ARIES) = 100.0215 + 360.98564734 * UT +;;; +;;; True GHA-Equinox = Mean GHA-Equinox + Nut-Lon * cos(X) +;;; +;;; LONGITUDE(SUB-SOLAR POINT) = R.A.(SUN) - GHA(ARIES) +;;; LATITUDE(SUB-SOLAR POINT) = DECLINATION(SUN) +;;; +;;; Latitude and Declination increase Northward. +;;; Longitude and Righ Ascension increase Eastward. +;;; Hour Angles increase Westward (sigh...) +;;; +;;; Significant digits: +;;; +;;; Angles -- 4 digits (.3" accuracy) +;;; Angular rates -- 8 digits (1".3 accuracy per century) +;;; Quadratic terms -- l2 digits (5" accuracy per century) +;;; +;;; Lunar node -- use two digits less, used indirectly. +;;; +;;; Eccentricity -- use two digits more, for rad-to-deg conversion. +;;; + +(DECLARE (SPECIAL PI LONGITUDE LATITUDE GMT-OFFSET TRACEF ANGLEF ET-UT + INDEX)) + +(DECLARE (FLONUM JULIANS HHMMSS DDMMSS TMP X)) + +(SETQ BASE (+ 5. 5.) + IBAS (+ 5. 5.) + PI (*$ 4.0 (ATAN 1.0 1.0)) + TRACEF NIL + ANGLEF NIL) + +;;; Calculate GHA and DECLINATION and SEMI-DIAMETER of SUN. +;;; Given time (UT) in days since 1975/01/01 U.T. 00:00:00 +;;; Result is list, (GHA DEC SD), numbers in decimal degrees. + + +(DEFUN SUN-POSITION (UT) + (PROG (ET ECC MEANA ECCEA GUESA TRUEA LAMBDM LAMBDA PERI + OMEGA OBLIQ PHI THETA GHAGAM SEMID RADVEC ABBER PARAL + NUT-OBLIQ NUT-LONGIT) + (SETQ ET (+$ UT ET-UT) + ECC (ECCENTRICITY ET) + MEANA (MEANANOM ET) + GUESA (TRUEANOM MEANA ECC) + GUESA (ECCENANOM GUESA MEANA ECC) + ECCEA (ECCENANOM GUESA MEANA ECC) + TRUEA (TRUEANOM ECCEA ECC) + PERI (PERIGEE ET) + LAMBDM (RANGE (+$ TRUEA PERI (PERTURB-L ET))) + OBLIQ (OBLIQUITY ET)) + + (COND (TRACEF (PRINT (LIST 'ECCENTRICITY ECC)))) + (COND (TRACEF (BARF 'MEAN-ANOMALY (RANGE MEANA)) + (BARF 'ECCEN-ANOMALY (RANGE ECCEA)) + (BARF 'TRUE-ANOMALY (RANGE TRUEA)) + (BARF 'PERIGEE (RANGE PERI)) + (BARF 'MEAN-OBLIQUITY OBLIQ) + (BARF 'MEAN-LONGITUDE (RANGE LAMBDM)))) + + (SETQ OMEGA (MOON-NODE ET) + NUT-OBLIQ (*$ (COSD OMEGA) 2.6E-3) + NUT-LONGIT (*$ (SIND OMEGA) -4.7E-3) + OBLIQ (+$ OBLIQ NUT-OBLIQ) + LAMBDA (+$ LAMBDM NUT-LONGIT)) + + (COND (TRACEF (BARF 'MOON-NODE (RANGE OMEGA)) + (BARF 'NUT-OBLIQUITY NUT-OBLIQ) + (BARF 'NUT-LONGITUDE NUT-LONGIT) + (BARF 'TRUE-OBLIQUITY OBLIQ) + (BARF 'TRUE-LONGITUDE (RANGE LAMBDA)))) + + (SETQ RADVEC (RADIUS-VECTOR-T TRUEA ECC ET) + SEMID (//$ 0.267 RADVEC) + PARAL (//$ 2.4E-3 RADVEC) + ABBER (//$ 5.7E-3 RADVEC) + LAMBDA (-$ LAMBDA ABBER)) + + (COND (TRACEF (PRINT (LIST 'TRUE-DISTANCE RADVEC)))) + (COND (TRACEF (BARF 'SEMI-DIAMETER SEMID) + (BARF 'PARALLAX PARAL) + (BARF 'ABBERATION ABBER) + (BARF 'APPARENT-LONGITUDE (RANGE LAMBDA)))) + + (SETQ PHI (DECLINATION LAMBDA OBLIQ) + THETA (RIGHT-ASCENSION LAMBDA OBLIQ) + GHAGAM (RANGE (GHA-ARIES UT))) + + (COND (TRACEF (BARF 'DECLINATION PHI) + (BARF 'RIGHT-ASCENSION (RANGE THETA)) + (BARF 'MEAN-GHA-EQUINOX GHAGAM))) + + (SETQ GHAGAM (+$ GHAGAM (*$ NUT-LONGIT (COSD OBLIQ))) + THETA (RANGE (-$ GHAGAM THETA))) + + (COND (TRACEF (BARF 'TRUE-GHA-EQUINOX (RANGE GHAGAM)) + (BARF 'TRUE-GHA-SUN THETA) + (BARF 'TRUE-DECLINATION-SUN PHI))) + (RETURN (LIST THETA PHI SEMID)))) + +;;; CALCULATES ELEVATION AND AZIMUTH AT OBSERVERS LOCATION. +;;; THETA1 PHI1 OBSERVERS LONGITUDE AND LATITUDE (decimal degrees). +;;; THETA2 PHI2 CELESTIAL OBJECTS LONGITUDE AND LATITUDE (decimal degrees). +;;; Result is list, (ELEV AZIM), numbers are decimal degrees. +;;; (Does not take into account parallax and refraction) + +(DEFUN SKY-ANGLES (THETA1 PHI1 THETA2 PHI2) + (LIST (ASIND (+$ (*$ (SIND PHI1) (SIND PHI2)) + (*$ (COSD PHI1) + (COSD PHI2) + (COSD (-$ THETA2 THETA1))))) + (ATANE (*$ (COSD PHI2) (SIND (-$ THETA2 THETA1))) + (-$ (*$ (COSD PHI1) (SIND PHI2)) + (*$ (SIND PHI1) + (COSD PHI2) + (COSD (-$ THETA2 THETA1))))))) + +;;; Calculate sun-elevation and sun-azimuth and semi-diameter. +;;; Given observer longitude and latitude, date and time. +;;; Input format: (A DD MM SS), (A DD MM SS), (YYYY MM DD), (HH MM SS). +;;; +;;; RETURNS (ELEVATION AZIMUTH SEMI), +;;; format ((A DD MM SS) (A DD MM SS) (A DD MM SS)) +;;; AZIMUTH MEASURED CLOCKWISE FROM NORTH. + +(DEFUN SUN (LONG LATI DATE HOURS) + (PROG (SUNPOS SKYANG) + (SETQ SUNPOS (SUN-POSITION (+$ (JULIAN DATE) + (HHMMSS HOURS))) + SKYANG (SKY-ANGLES (DDMMSS LONG) + (DDMMSS LATI) + (-$ 360.0 (CAR SUNPOS)) + (CADR SUNPOS))) + (RETURN (LIST (ANGLED (CAR SKYANG)) + (ANGLED (CADR SKYANG)) + (ANGLED (CADDR SUNPOS)))))) + +(DEFUN BARF (A B) + (PRINT (LIST A (COND (ANGLEF (ANGLED B)) + (T B))))) + + +;;; CALCULATE DAYS SINCE 1975/01/01 -- INPUT format (YY MM DD) +;;; JULIAN DATE EQUALS RESULT PLUS 2442414.5 + +(DEFUN JULIAN (DATE) + (PROG (YEAR MONTH DAY DYR YRS) + (SETQ YEAR (CAR DATE) MONTH (CADR DATE) DAY (CADDR DATE)) + (SETQ DYR + (- (// (- 14. MONTH) 12.)) + YRS + (+ DYR YEAR 4800.)) + (RETURN (FLOAT (+ (- (// (* 367. + (- (- MONTH 2.) (* DYR 12.))) + 12.) + (// (* 3. (1+ (// YRS 100.))) 4.)) + (+ (// (* 1461. YRS) 4.) + (- DAY (+ 32075. 2442414.)))))))) + +;;; CALCULATE DATE, GIVEN DAYS SINCE 1975/01/01 -- OUTPUT format (YY MM DD) +;;; ARGUMENT IS (JULIAN DATE - 2442414.5) + +(DEFUN DATED (JULIANS) + (PROG (LOFF NOFF IOFF JOFF KOFF) + (SETQ LOFF + (+ (FIX JULIANS) 68569. 2442414.) + NOFF + (// (* LOFF 4.) 146097.) + LOFF + (- LOFF (// (+ (* 146097. NOFF) 3.) 4.)) + IOFF + (// (* 4000. (1+ LOFF)) 1461001.) + LOFF + (- LOFF (- (// (* 1461. IOFF) 4.) 31.)) + JOFF + (// (* 80. LOFF) 2447.) + KOFF + (- LOFF (// (* 2447. JOFF) 80.)) + LOFF + (// JOFF 11.) + JOFF + (- JOFF (- (* 12. LOFF) 2.)) + IOFF + (+ IOFF (* 100. (- NOFF 49.)) LOFF)) + (RETURN (LIST IOFF JOFF KOFF)))) + +;;; NEGATE ANGLE IN FUNNY FORMAT + +(DEFUN INVERT (L) + (COND ((EQUAL (CAR L) '+) (CONS '- (CDR L))) + ((EQUAL (CAR L) '-) (CONS '+ (CDR L))) + (T (PRINT 'ERROR-IN-ANGLE-FORMAT)))) + +;;; CONVERT FROM HOURS -- format (HH MM SS) -- TO DECIMAL DAYS. + +(DEFUN HHMMSS (TIMED) + (//$ (+$ (FLOAT (CAR TIMED)) + (//$ (+$ (FLOAT (CADR TIMED)) + (//$ (FLOAT (CADDR TIMED)) 60.0)) + 60.0)) + 24.0)) + +;;; CONVERT FROM DECIMAL DAYS TO HOURS -- format (HH MM SS). + +(DEFUN TIMED (HHMMSS) + (PROG (HH MM SS TMP) + (SETQ HHMMSS + (*$ 24.0 HHMMSS) + HH + (FIX HHMMSS) + TMP + (*$ 60.0 (-$ HHMMSS (FLOAT HH))) + MM + (FIX TMP) + TMP + (*$ 60.0 (-$ TMP (FLOAT MM))) + SS + (FIX (+$ 0.5 TMP))) + (RETURN (LIST HH MM SS)))) + +;;; CONVERT FROM ANGLE -- format (A DD MM SS) -- TO DECIMAL DEGREES. + +(DEFUN DDMMSS (ANGLED) + (COND ((EQUAL (CAR ANGLED) '-) + (-$ 0.0 (DDMMSS (INVERT ANGLED)))) + (T (+$ (FLOAT (CADR ANGLED)) + (//$ (+$ (FLOAT (CADDR ANGLED)) + (//$ (FLOAT (CADDDR ANGLED)) 60.0)) + 60.0))))) + +;;; CONVERT FROM DECIMAL DEGREES TO ANGLE -- format (A DD MM SS). + +(DEFUN ANGLED (DDMMSS) + (PROG (DD MM SS TMP) + (COND ((< DDMMSS 0.0) + (RETURN (INVERT (ANGLED (-$ 0.0 DDMMSS)))))) + (SETQ DD + (FIX DDMMSS) + TMP + (*$ 60.0 (-$ DDMMSS (FLOAT DD))) + MM + (FIX TMP) + TMP + (*$ 60.0 (-$ TMP (FLOAT MM))) + SS + (FIX (+$ 0.5 TMP))) + (RETURN (LIST '+ DD MM SS)))) + +(DEFUN HOURS-TO-ANGLE (HOURS) + (ANGLED (*$ 360.0 (HHMMSS HOURS)))) + +(DEFUN ANGLE-TO-HOURS (ANGLE) + (COND ((EQUAL (CAR ANGLE) '-) (TIMED (+$ 1.0 (//$ (DDMMSS ANGLE) 360.0)))) + ((EQUAL (CAR ANGLE) '+) (TIMED (//$ (DDMMSS ANGLE) 360.0))) + (T 'ERROR-IN-ANGLE)))) + +;;; Calculate MEAN GHA of vernal equinox -- given UNIVERSAL TIME + +(DEFUN GHA-ARIES (TIME) + (+$ (*$ TIME 0.985647348) (*$ (FRACTION TIME) 360.0) 100.0215)) + +;;; Calculate geometric mean longitude of sun -- given EPHEMERIS TIME +;;; Not used now -- + +(DEFUN LONGITUDE (TIME) (+$ 280.0271 (*$ TIME 0.985647348))) + +;;; Calculate longitude of sun's perigee -- given EPHEMERIS TIME + +(DEFUN PERIGEE (TIME) (+$ 282.5105 (*$ TIME 4.7087E-5))) + +;;; Calculate obliquity of ecliptic -- given EPHEMERIS TIME + +(DEFUN OBLIQUITY (TIME) (-$ 23.4425 (*$ TIME 3.56E-7))) + +;;; Calculate longitude of moon's node -- given EPHEMERIS TIME + +(DEFUN MOON-NODE (TIME) (-$ 248.59 (*$ TIME 0.0529538))) + +;;; Calculate eccentricity of earth orbit -- given EPHEMERIS TIME + +(DEFUN ECCENTRICITY (TIME) (-$ 0.016720 (*$ TIME 1.15E-9))) + +;;; Calculate mean anomaly -- given EPHEMERIS TIME + +(DEFUN MEANANOM (TIME) (+$ 357.5167 (*$ TIME 0.985600261))) + +;;; FIRST FEW TERMS IN PERTURBATION OF MEAN LONGITUDE OF SUN +;;; FROM TABLES OF SIMON NEWCOMB (1895) +;;; +;;; MV, ME, MM, MJ ARE MEAN ANOMALIES OF VENUS, EARTH, MARS AND JUPITER. +;;; DD IS THE ELONGATION OF THE MOON FROM THE SUN. +;;; LP IS A LONG-PERIOD PLANETARY TERM + +(DEFUN PERTURB-L (ET) + (PROG (MV ME MM MJ DD LP) + (SETQ MV + (+$ 180.56 (*$ 1.6021302 ET)) + ME + (+$ 357.52 (*$ 0.9856003 ET)) + MM + (+$ 274.29 (*$ 0.5240208 ET)) + MJ + (+$ 341.60 (*$ 0.0830912 ET)) + DD + (+$ 218.02 (*$ 12.1907491 ET)) + LP + (+$ 246.35 (*$ 5.5305E-4 ET))) + (RETURN (+$ (*$ 1.34E-3 (COSD (+$ 299.1 (-$ MV ME)))) + (*$ 1.54E-3 + (COSD (+$ 148.3 + (-$ (*$ 2.0 MV) (*$ 2.0 ME))))) + (*$ 6.9E-4 + (COSD (+$ 315.9 + (-$ (*$ 2.0 MV) (*$ 3.0 ME))))) + (*$ 4.3E-4 + (COSD (+$ 345.3 + (-$ (*$ 3.0 MV) (*$ 4.0 ME))))) + (*$ 2.8E-4 + (COSD (+$ 318.2 + (-$ (*$ 3.0 MV) (*$ 5.0 ME))))) + (*$ 5.7E-4 + (COSD (+$ 343.9 + (-$ (*$ 2.0 ME) (*$ 2.0 MM))))) + (*$ 4.9E-4 + (COSD (+$ 200.4 (-$ ME (*$ 2.0 MM))))) + (*$ 2.0E-3 (COSD (+$ 179.5 (-$ ME MJ)))) + (*$ 7.2E-4 (COSD (-$ 263.2 MJ))) + (*$ 7.6E-4 + (COSD (+$ 87.1 + (-$ (*$ 2.0 ME) (*$ 2.0 MJ))))) + (*$ 4.5E-4 + (COSD (+$ 109.5 (-$ ME (*$ 2.0 MJ))))) + (*$ 1.78E-3 (SIND LP)) + (*$ 1.79E-3 (SIND DD)))))) + +;;; FIRST FEW TERMS IN PERTURBATION OF RADIUS-VECTOR +;;; FROM TABLES OF SIMON NEWCOMB (1895) +;;; +;;; MV, ME, MM, MJ ARE MEAN ANOMALIES OF VENUS, EARTH, MARS AND JUPITER. +;;; DD IS THE ELONGATION OF THE MOON FROM THE SUN. + +(DEFUN PERTURB-R (ET) + (PROG (MV ME MM MJ DD) + (SETQ MV + (+$ 180.56 (*$ 1.6021302 ET)) + ME + (+$ 357.52 (*$ 0.9856003 ET)) + MM + (+$ 274.29 (*$ 0.5240208 ET)) + MJ + (+$ 341.60 (*$ 0.0830912 ET)) + DD + (+$ 218.02 (*$ 12.1907491 ET))) + (RETURN (+$ (*$ 1.6E-5 + (COSD (+$ 58.3 + (-$ (*$ 2.0 MV) (*$ 2.0 ME))))) + (*$ 1.6E-5 (COSD (+$ 89.5 (-$ ME MJ)))) + (*$ 9.0E-6 + (COSD (+$ 357.1 + (-$ (*$ 2.0 ME) (*$ 2.0 MJ))))) + (*$ 3.1E-5 (COSD DD)))))) + +;;; Calculate true anomaly, given eccentric anomaly. +;;; (Also gives first approximation of eccentric anomaly from mean anomaly) + +(DEFUN TRUEANOM (THETA ECC) + (*$ 2.0 + (ATAND (*$ (SQRT (+$ 1.0 ECC)) (SIND (//$ THETA 2.0))) + (*$ (SQRT (-$ 1.0 ECC)) (COSD (//$ THETA 2.0)))))) + +;;; Calculate eccentric anomaly from mean anomaly. +;;; Iterative approximation to Kepler's transcendental equation. + +(DEFUN ECCENANOM (THETA MEANA ECC) + (+$ MEANA (*$ (RAD-TO-DEG ECC) (SIND THETA)))) + +;;; Calculate declination given celestial longitude and obliquity + +(DEFUN DECLINATION (LAMBD OBLIQ) + (ASIND (*$ (SIND LAMBD) (SIND OBLIQ)))) + +;;; Calculate right ascension given celestial longitude and obliquity + +(DEFUN RIGHT-ASCENSION (LAMBD OBLIQ) + (ATAND (*$ (SIND LAMBD) (COSD OBLIQ)) (COSD LAMBD))) + +;;; Calculate radius-vector from sun to earth -- ECCENTRIC ANOMALY + +(DEFUN RADIUS-VECTOR-E (ECCA ECC ET) + (+$ (-$ 1.0 (*$ (COSD ECCA) ECC)) (PERTURB-R ET))) + +;;; Calculate radius-vector from sun to earth -- TRUE ANOMALY + +(DEFUN RADIUS-VECTOR-T (TRUEA ECC ET) + (+$ (//$ (-$ 1.0 (*$ ECC ECC)) (+$ 1.0 (*$ (COSD TRUEA) ECC))) + (PERTURB-R ET))) + +;;; Calculate change in elevation due to refraction. +;;; Fits data in Nautical Almanac. +;;; Sea-level, normal athmospheric pressure and temperature. +;;; +;;; NOT TO BE USED FOR ELEVATIONS BELOW ABOUT 10 DEGREES + +(DEFUN REFRACTION-NA (ELEV) + (*$ (TAND (-$ 90.0 ELEV)) + (+$ 0.016167 (*$ 1.7E-5 (SQUARE (TAND (-$ 90.0 ELEV))))))) + +;;; Calculate elevation of direction outside athmosphere from viewer elevation + +(DEFUN ELEV-SPACE (ELEV) (ACOSD (*$ (COSD ELEV) INDEX))) + +;;; Calculate viewer elevation from direction outside athmosphere + +(DEFUN ELEV-VIEW (ELEV) (ACOSD (//$ (COSD ELEV) INDEX))) + +;;; Calculate change in elevation due to refraction. +;;; Analytic Model. Does not take into account earth's curvature. + +(DEFUN ELEVATION-AN (ELEV) (-$ ELEV (ELEV-SPACE ELEV))) + +(DEFUN SQUARE (X) (*$ X X)) + +;;; Restrict angle to 0.0 to 360.0 degree range. + +(DEFUN RANGE (THETA) + (COND ((< THETA 0.0) (RANGE (+$ THETA 360.0))) + ((< THETA 360.0) THETA) + (T (RANGE (-$ THETA 360.0))))) + +(DEFUN RAD-TO-DEG (X) (*$ (//$ X PI) 180.0)) + +(DEFUN DEG-TO-RAD (X) (*$ (//$ X 180.0) PI)) + +(DEFUN SIND (X) (SIN (//$ (*$ PI X) 180.0))) + +(DEFUN COSD (X) (COS (//$ (*$ PI X) 180.0))) + +;;; RETURN RESULT BETWEEN 0 AND 360 DEGREES + +(DEFUN ATANE (Y X) (*$ (//$ (ATAN Y X) PI) 180.0)) + +;;; RETURN RESULT BETWEEN -180 AND +180 DEGREES + +(DEFUN ATAND (Y X) (*$ (-$ (//$ (ATAN (-$ Y) (-$ X)) PI) 1.0) 180.0)) + +(DEFUN TAND (X) (//$ (SIND X) (COSD X))) + +;;; RETURNS RESULT IN RANGE -90 TO +90 DEGREES + +(DEFUN ASIND (X) (ATAND X (SQRT (-$ 1.0 (*$ X X))))) + +;;; RETURN RESULT IN RANGE 0 TO 180 DEGREES + +(DEFUN ACOSD (X) (ATANE (SQRT (-$ 1.0 (*$ X X))) X)) + +(DEFUN FRACTION (X) (-$ X (FLOAT (FIX X)))) + +;;; ADD OFFSETS TO FIRST COMPONENT OF THREE-LIST. + +(DEFUN UPDATE (L OFFSET) (LIST (+ (CAR L) OFFSET) (CADR L) (CADDR L))) + +;;; CALCULATE POSITION OF SUN AT PRESENT TIME, HERE. + +(DEFUN SUN-NOW-HERE NIL + (SUN LONGITUDE + LATITUDE + (UPDATE (STATUS DATE) 1900.) + (UPDATE (STATUS DAYTIME) GMT-OFFSET))) + +;;; CALCULATE DAY OF WEEK FROM DAYS SINCE 1975/01/01 +;;; MONDAY IS 1, TUESDAY IS 2, ... SUNDAY IS 7. + +(DEFUN DAY-OF-WEEK (JULIANS) (1+ (REMAINDER (+ JULIANS 2.) 7.))) + +;;; CALCULATE DATE OF LAST SUNDAY IN PRESENT MONTH (WITH N DAYS) + +(DEFUN LAST-SUNDAY (DATE N) + (- N + (PREMUTE (DAY-OF-WEEK (FIX (JULIAN (CONSTRUCT DATE N))))))) + +(DEFUN PREMUTE (N) (COND ((= N 7.) 0.) (T N))) + +(DEFUN CONSTRUCT (DATE N) + (CONS (CAR DATE) (CONS (CADR DATE) (CONS N NIL)))) + +;;; TO ADJUST FOR THAT CROCK CALLED DAY-LIGHT-SAVINGS TIME. +;;; SWITCH LAST SUNDAY OF APRIL AND LAST SUNDAY OF OCTOBER (?) + +(DEFUN DAY-SAVE-CROCK (DATE) + (COND ((OR (< (CADR DATE) 4.) + (> (CADR DATE) 10.) + (AND (= (CADR DATE) 4.) + (< (CADDR DATE) (LAST-SUNDAY DATE 30.))) + (AND (= (CADR DATE) 10.) + (> (1- (CADDR DATE)) (LAST-SUNDAY DATE 31.)))) + 0.) + (T -1.))) + +;;; OFFSET OF EPHEMERIS TIME FROM UNIVERSAL TIME (1975/01/01) +;;; REFRACTIVE INDEX OF ATMOSPHERE AT STANDARD PRESSURE AND TEMPERATURE + +(SETQ ET-UT 5.28E-4 INDEX 1.0002824) + +;;; GEOGRAPHICAL POSITION OF M.I.T. - A.I. LAB AND OFFSET FROM G.M.T. +;;; MODIFY TO YOUR OWN CONVENIENCE AND YOUR OWN LOCATION AND TIME SYSTEM. + +(SETQ LONGITUDE '(- 71. 5. 20.)) + +(SETQ LATITUDE '(+ 42. 21. 50.)) + +;;; GIVE NORMAL OFFSET FROM G.M.T. IN HOURS AS SECOND ARGUMENT + +(SETQ GMT-OFFSET (+ (DAY-SAVE-CROCK (UPDATE (STATUS DATE) 1900.)) 5.)) + +;;; CALCULATE POSITION OF SUN AT THIS TIME AND FOR THIS PLACE. + +(SUN-NOW-HERE) diff --git a/src/mprog/syntax.ubkd23 b/src/mprog/syntax.ubkd23 new file mode 100644 index 00000000..3cb60a5f --- /dev/null +++ b/src/mprog/syntax.ubkd23 @@ -0,0 +1,539 @@ + +<PACKAGE "SYNTAX"> + +;" SYNTAX Package for parsing BNF grammers. +To use, prepare BNF grammer as per .INFO.;YACC INFO. +Use the YACC System program to create a TABLES file. +Load the Teco macro found in MUDDLE;SYNTAX MACRO +into a Teco Q-Reg and execute with the buffer containing +the previously mentioned TABLES file. +This converts from C-Format to MUDDLE-Format. +Fload this converted file into a MUDDLE with SYNTAX. +Call <PRS> to perform a parse." + +<ENTRY PRS DEBUG ERR-DEBUG TFLAG XFLAG TABLES> + +<ENTRY GETTOK DGETTOK TOKEN STERM> + +<ENTRY ACT DACT LHS SNTERM LINE LINES> + +<ENTRY PTOKEN DPTOKEN> + +<USE "MACROS"> + +<NEWTYPE TOKEN VECTOR '<<PRIMTYPE VECTOR> FIX ANY FIX>> + +<DEFINE TOKEN (t i l "OPTIONAL" (v <IVECTOR 3>)) + #DECL ((t l) FIX (i) ANY (v) <<PRIMTYPE VECTOR> [3 ANY]> (VALUE) TOKEN) + <CHTYPE <PUT <PUT <PUT .v ,type .t> ,index .i> ,line .l> + TOKEN>> + +<AND? <SETG type 1> + <SETG index 2> + <SETG line 3> + <MANIFEST type index line>> + + +<SETG DEBUG #FALSE ()> + +; +"Flag for printing out debugging information +whenever PRS does something significant. +In particular: goes to a new state + performs a reduction + stacks a token" + +<SETG ERR-DEBUG #FALSE ()> + +; +"Flag for printing out debugging information +whenever PRS detects a syntax error or attempts +a new correction to a previous error" + +<SETG XFLAG #FALSE ()> + +;"Flag that turns off semantics" + +<SETG TFLAG #FALSE ()> + +; +"Flag that causes each token to be printed +on .OUTCHAN as it is 'read' by lex." + + +<SETG pssize 200> + +<SETG tbsize 50> + +<GDECL (pssize tbsize) FIX> + +<GDECL (DEBUG ERR-DEBUG XFLAG TFLAG) <OR ATOM FALSE>> + +<SET ps <CHUTYPE <IUVECTOR ,pssize> FIX>> + +<SET pss <CHUTYPE <IUVECTOR ,pssize> FIX>> + +<SET pl <CHUTYPE <IUVECTOR ,pssize> FIX>> + +<SET psl <CHUTYPE <IUVECTOR ,pssize> FIX>> + +<SET pv <IVECTOR ,pssize>> + +<SET psv <IVECTOR ,pssize>> + + +<SET twp <IUVECTOR ,tbsize '<TOKEN 0 0 0>>> + + +<NEWTYPE TABLES + VECTOR + '<VECTOR VECTOR + <UVECTOR [REST FIX]> + <UVECTOR [REST FIX]> + <VECTOR [REST STRING]> + <VECTOR [REST STRING]> + <UVECTOR [REST FIX]> + <UVECTOR [REST FIX]> + <UVECTOR [REST FIX]> + FIX + FIX + <UVECTOR [REST FIX]> + <UVECTOR [REST FIX]>>> + +<EVALTYPE TABLES + <FUNCTION (TBLS) + #DECL ((VALUE TBLS) TABLES) + <CHTYPE <VECTOR <EVAL <1 .TBLS>> !<REST .TBLS>> TABLES>>> + +\ + +<DEFINE PRS ("OPTIONAL" (TABLES <VALUE TABLES>) + ;" VARIABLES WHICH MAY BE SET TO INDICATE OPTIONS " + (DEBUG? <VALUE DEBUG>) (ERR-DEBUG? <VALUE ERR-DEBUG>) + (XFLAG? <VALUE XFLAG>) (TFLAG? <VALUE TFLAG>) + "EXTRA" (act <REST <1 .TABLES>>) (r1 <REST <2 .TABLES>>) + (r2 <REST <3 .TABLES>>) (STERM <REST <4 .TABLES>>) + (SNTERM <REST <5 .TABLES>>) (g <6 .TABLES>) + (pg <REST <7 .TABLES>>) (sq <REST <8 .TABLES>>) + (nwpbt <10 .TABLES>) (a <11 .TABLES>) + (pa <REST <12 .TABLES>>) + LHS ;"Left Hand Side (index into SNTERM)" + val ;"set to indicate translation element of LHS" + LINE ;"set to indicate line number of LHS" + (s .ps) ;"parser stack - states" + (v .pv) ;"parser stack - translation elements" + (l .pl) ;"parser stack - line numbers" + pv ;"used to reference translations of RHS" + pl ;"used to reference line numbers of RHS" + ps ;"parser stack pointer - states" + sps ;"save stack pointer - states" + spv ;"save stack pointer - translation elements" + spl ;"save stack pointer - line numbers" + (ss .pss) ;"save stack - states" + (sv .psv) ;"save stack - translation elements" + (sl .psl) ;"save stack - line numbers" + (pss .ss) (psv .sv) (psl .sl) ;"tops of save stacks" + (tskip 0) ;"number of tokens skipped" + (spop 0) ;"number of states popped" + LINES (must 7) (errcount 0) (errmode 0) + (tw .twp) (ctp .tw) (twp .tw) + (tokmode 0) ;"VARIABLES INTERNAL" + ac op n state ap gp control i r tlimit slimit p fp t tp + "ACT" PARSER) + #DECL ((TABLES) TABLES (DEBUG? ERR-DEBUG? XFLAG? TFLAG?) <OR FALSE ATOM> (act) VECTOR + (g pg r1 r2 a pa sq) <UVECTOR [REST FIX]> (nwpbt) FIX + (STERM SNTERM) <SPECIAL <VECTOR [REST STRING]>> + (pl ps sps spl s l ss sl pss psl LINES) <SPECIAL <UVECTOR [REST FIX]>> + (pv spv v sv psv) <SPECIAL VECTOR> (val) <SPECIAL ANY> + (LHS LINE must errcount errmode tokmode) <SPECIAL FIX> + (ac op n state control i r tlimit slimit t spop tskip) FIX + (ap gp p) <UVECTOR [REST FIX]> (fp) ANY + (tw ctp twp) <SPECIAL <UVECTOR [REST TOKEN]>> + (tp) <UVECTOR [REST TOKEN]> (PARSER) ACTIVATION) + <COND (<NOT <GASSIGNED? GETTOK>> + <SETG GETTOK ,DGETTOK> ;"Default Token Input Routine")> + <COND (<NOT <GASSIGNED? ACT>> + <SETG ACT ,DACT> ;"Default Action Routine")> + <COND (<NOT <GASSIGNED? PTOKEN>> + <SETG PTOKEN ,DPTOKEN> ;"Default Token Printing Routine")> + <SET ps <SET s <REST .s>>> <PUT .ps 1 1> + <SET pv <SET v <REST .v>>> <PUT .pv 1 T> + <SET pl <SET l <REST .l>>> <PUT .pl 1 0> + <SET state 1> + <SET ctp <lex .TFLAG?>> + <REPEAT () + <SET ap <REST .a <NTH .pa .state>>> + <COND (.DEBUG? + <PROG ((OUTCHAN .OUTCHAN)) + <TERPRI> + <PRINC "executing state "> + <PRIN1 .state> + <PRINC ", token="> + <PRIN1 <type <1 .ctp>>> + <PRINC <ASCII 9> ;"Char Tab">>)> + <PROG () + <SET ac <1 .ap>> + <SET ap <REST .ap>> + <SET n <CHTYPE <ANDB .ac 4095> FIX>> + <CASE ,==? <SET op </ .ac 4096>> ;"BKD SHIFT RIGHT 12 BITS" + (1 ;"SKIP ON TEST" + <COND (<N==? <type <1 .ctp>> .n> <SET ap <REST .ap>>)> + <AGAIN>) + (2 <SET state .n> + <SET control <shift .spop .tskip .sq .TFLAG?>>) + (3 ;"MAKE A REDUCTION" + <COND (.DEBUG? + <PROG ((OUTCHAN .OUTCHAN)) + <TERPRI> + <PRINC "reduce "> + <PRIN1 .n> + <PRINC <ASCII 9> ;"Char Tab">>)> + <SET r <NTH .r2 .n>> + <SET LHS <NTH .r1 .n>> ;"Left Hand Side of reduction" + <COND (<G? .r 0> + <SET ps <BACK .ps .r>> + <SET pv <BACK .pv .r>> + <SET pl <BACK .pl .r>> + <SET LINE <2 .pl>> <SET val <2 .pv>>) + (ELSE <SET LINE 0> <SET val T>)> + <COND (<AND <NOT .XFLAG?> + <0? .errmode> + <SET fp <OR <NTH .act .n> ,ACT>>> + <COND (<TYPE? .fp FIX> + <COND (<OR <L=? .fp 0> <G? .fp .r>> + <ERROR BAD-ACTION-INTEGER>) + (ELSE <SET val <NTH .pv <+ 1 .fp>>>)>) + (<APPLICABLE? .fp> ;"Action Routine ?" + <SET i 1> + <SET LINES <REST .sl>> ;"Lines for action routines" + <SET val + <MAPF .fp + <FUNCTION () + <COND (<G? .i .r> <MAPSTOP>)> + <NTH .pv <SET i <+ .i 1>>>>>>) + (ELSE <SET val .fp>)>)> + <SET state <1 .ps>> + <SET gp <REST .g <NTH .pg .LHS>>> + <REPEAT () + <COND (<0? <1 .gp>> <RETURN>) + (<==? <1 .gp> .state> <RETURN>)> + <SET gp <REST .gp 2>>> + <SET state <1 <SET gp <REST .gp>>>> + <SET control 1> ;"stack new state") + (5 ;"SHIFT ON MASK" + <SET t <type <1 .ctp>>> + <COND (<NOT <0? <CHTYPE <GETBITS <NTH .ap <+ 1 </ .t 16>>> + <BITS 1 <CHTYPE <ANDB .t 15> FIX>>> + FIX>>> ;"bit on" + <SET state <NTH .a <+ .n .t>>> + <SET control <shift .spop .tskip .sq .TFLAG?>>) + (ELSE <SET ap <REST .ap .nwpbt>> <AGAIN>)>) + (4 ;"ACCEPT INPUT" + <COND (<NOT <0? .errmode>> <SET ctp <dmperr .spop .tskip .sq>> <SET control 0>) + (ELSE <RETURN <1 .pv> .PARSER>)>) + (0 ;"SYNTAX ERROR" + <COND (<0? .errmode> ;"NEW ERROR" + <COND (.ERR-DEBUG? + <PROG ((OUTCHAN .OUTCHAN)) + <TERPRI> + <PRINC "errmode=0:st="> + <PRIN1 .state> + <PRINC ",nst="> + <PRIN1 <- <LENGTH .s> <LENGTH .ps>>> + <PRINC ",tok="> + <PRIN1 <type <1 .ctp>>> + <PRINC <ASCII 9> ;"Char Tab">>)> + <synerr <line <1 .ctp>>> ;"report syntax error" + <SET p .s> + <REPEAT () + <qprint <1 .p> .sq> + <COND (<==? .p .ps> <RETURN>)> + <SET p <REST .p>>> + <pcursor> + <tkeem> ;"enter error mode to save tokens" + <SET i 0> + <REPEAT () + <SET tp <tok .i>> + <COND (<==? <type <1 .tp>> 1> <RETURN>)> + <tprint .tp> + <COND (<G=? <SET i <+ .i 1>> 5> <RETURN>)>> + <save> ;"save parser stack" + <SET errcount .must> + <SET errmode 1> ;"turn off action routnes" + <SET tlimit <- <LENGTH .tw> .must 2>> + <SET slimit <- <LENGTH .s> <LENGTH .ps>>> + <SET tskip 0> + <SET spop 0>)> + <restore> ;"try next recovery attempt" + <SET tp .ctp> + <SET ctp .tw> ;"Reset" + <COND (<OR <1? <type <1 .tp>>> + <G? <SET tskip <+ .tskip 1>> .tlimit>> + <SET tskip 0> + <SET spop <+ .spop 1>>)> + <COND (<L=? .spop .slimit> + <SET ctp <tok .tskip>> + <SET control <- .spop>>) + (ELSE + <giveup <line <1 .tp>>> ;"give up" + <RETURN #FALSE ("CAN'T PARSE") .PARSER>)> + <COND (.ERR-DEBUG? + <PROG ((OUTCHAN .OUTCHAN)) + <TERPRI> + <PRINC "spop="> + <PRIN1 .spop> + <PRINC ",tskip="> + <PRIN1 .tskip> + <PRINC ",token="> + <PRIN1 <type <1 .ctp>>> + <PRINC <ASCII 9> ;"Char Tab">>)>) + DEFAULT (<ERROR INTERNAL-ERROR!-ERRORS .op PRS>)> + <COND (<G? .control 0> + <COND (.DEBUG? + <PROG ((OUTCHAN .OUTCHAN)) + <TERPRI> + <PRINC "stack st="> + <PRIN1 .state> + <PRINC " val="> + <&1 .val> + <PRINC <ASCII 9> ;"Char Tab">>)> + <COND (<EMPTY? <REST .ps>> ;"stack overflow" + <stkovf <line <1 .ctp>>> + <RETURN #FALSE ("OVERFLOW") .PARSER>)> + <PUT <SET ps <REST .ps>> 1 .state> + <PUT <SET pv <REST .pv>> 1 .val> + <PUT <SET pl <REST .pl>> 1 .LINE>) + (<L? .control 0> + <COND (<G? <- <LENGTH .ps> .control> <LENGTH .s>> ;"stack underflow" + <stkunf <line <1 .ctp>>> + <RETURN #FALSE ("UNDERFLOW") .PARSER>)> + <SET pv <BACK .pv <- .control>>> + <SET ps <BACK .ps <- .control>>> + <SET pl <BACK .pl <- .control>>>)> + <SET state <1 .ps>>>>> + + +<DEFINE shift (spop tskip sq TFLAG? "EXTRA" ecnt) + #DECL ((VALUE errcount ecnt) FIX (ctp) <UVECTOR [REST TOKEN]> + (spop tskip) FIX (sq) <UVECTOR [REST FIX]> + (TFLAG?) <OR FALSE ATOM>) + <SET val <index <1 .ctp>>> + <SET LINE <line <1 .ctp>>> + <SET ctp <lex .TFLAG?>> + <COND (<AND <NOT <0? <SET ecnt .errcount>>> + <0? <SET errcount <- .ecnt 1>>>> + <SET ctp <dmperr .spop .tskip .sq>> + 0) + (ELSE 1 ;"ASSUME: stack new state")>> + +\ + +<DEFINE dmperr (spop tskip sq) + #DECL ((VALUE ctp tw) <UVECTOR [REST TOKEN]> (spop tskip) FIX + (sq ps pl) <UVECTOR [REST FIX]> (pv) VECTOR) + <restore> + <SET ctp .tw> ;"Reset" + <COND (<G? .spop 0> + <SET ps <BACK .ps .spop>> + <SET pv <BACK .pv .spop>> + <SET pl <BACK .pl .spop>> + <delmsg <line <1 .ctp>>> + <REPEAT ((i 1)) + #DECL ((i) FIX) + <COND (<G? .i .spop> <RETURN>)> + <qprint <NTH .ps <SET i <+ .i 1>>> .sq> + ;"print symbol associated with state">)> + <COND (<G? .tskip 0> + <skpmsg <line <1 .ctp>>> + <REPEAT ((i 0)) + #DECL ((i) FIX) + <tprint <tok .i>> ;"print token skipped" + <COND (<G=? <SET i <+ .i 1>> .tskip> <RETURN>)>>)> + <SET errmode 0> + <SET errcount 0> + <SET tokmode 0> ;"tklem routine" + <tok .tskip>> + +\ + +<DEFINE save ("EXTRA" N) + #DECL ((s ss ps l sl pl) <UVECTOR [REST FIX]> (v sv pv) VECTOR (N) FIX) + <SET sps .ps> ;"Save State Numbers" + <SET N <- <LENGTH .s> <LENGTH .ps> -1>> + <SUBSTRUC .s 0 .N .ss> <SET pss <REST .ss .N>> + <SET spv .pv> ;"Save Translation Values" + <SET N <- <LENGTH .v> <LENGTH .pv> -1>> + <SUBSTRUC .v 0 .N .sv> <SET psv <REST .sv .N>> + <SET spl .pl> ;"Save Line Numbers" + <SET N <- <LENGTH .l> <LENGTH .pl> -1>> + <SUBSTRUC .l 0 .N .sl> <SET psl <REST .sl .N>>> + +<DEFINE restore ("EXTRA" N) + #DECL ((s ss ps sps l sl pl spl) <UVECTOR [REST FIX]> + (v sv pv spv) VECTOR (N) FIX (must) FIX) + <SET ps .sps> ;"Restore State Numbers" + <SET N <- <LENGTH .s> <LENGTH .ps> -1>> + <SUBSTRUC .ss 0 .N .s> + <SET pv .spv> ;"Restore Translation Values" + <SET N <- <LENGTH .v> <LENGTH .pv> -1>> + <SUBSTRUC .sv 0 .N .v> + <SET pl .spl> ;"Restore Line Numbers" + <SET N <- <LENGTH .l> <LENGTH .pl> -1>> + <SUBSTRUC .sl 0 .N .l> + <SET errcount .must>> + +\ + +<DEFINE lex (TFLAG?) + #DECL ((TFLAG?) <OR FALSE ATOM> (VALUE ctp twp tw) <UVECTOR [REST TOKEN]>) + <COND (<L=? <LENGTH <SET ctp <REST .ctp>>> <LENGTH .twp>> + ; +" If true, it is neccessary to read in another token. + If in normal mode, place the token in the first + element of the buffer. + " + <COND (<0? .tokmode> <SET ctp <SET twp .tw>>) + (<EMPTY? .twp> <tkbovf <line <1 .ctp>>>) + (<L? <LENGTH .ctp> <LENGTH .twp>> + <badtwp <line <1 .ctp>>>)> + <rtoken .twp> ;"read token into next slot" + <SET twp <REST .twp>>)> + <COND (<AND .TFLAG? <0? .tokmode>> + <PTOKEN <1 .ctp>> + <COND (<G? <14 .OUTCHAN> 60> <TERPRI>) + (ELSE <PRINC <ASCII 32> ;"Char Space">)>)> + <line <1 .ctp>> + .ctp> + +<DEFINE tok (i "EXTRA" p (ctp .ctp)) + #DECL ((VALUE p ctp twp tw) <UVECTOR [REST TOKEN]> (i) FIX) + <COND (<OR <G? <- <LENGTH .ctp> .i> <LENGTH .tw>> + <L=? <- <LENGTH .ctp> .i> 0>> + <badtok <line <1 .ctp>> .i>)> + <COND (<G=? .i 0> <SET p <REST .ctp .i>>) + (ELSE <SET p <BACK .ctp <- .i>>>)> + <REPEAT ((Lp <LENGTH .p>)) + #DECL ((Lp) FIX) + <COND (<G? .Lp <LENGTH .twp>> <RETURN>)> + <rtoken .twp> + <SET twp <REST .twp>>> + .p> + +<DEFINE tkeem ("EXTRA" i) + #DECL ((i) FIX (ctp twp tw) <UVECTOR [REST TOKEN]>) + <SET tokmode 1> + <SET i <- <LENGTH .ctp> <LENGTH .twp>>> + <COND (<G? .i 0> + <REPEAT ((i .i) (tp1 .tw) (tp2 .ctp)) + #DECL ((i) FIX (tp1 tp2) <UVECTOR [REST TOKEN]>) + <COND (<0? .i> <RETURN>)> + <SET i <- .i 1>> + <SUBSTRUC <1 .tp2> 0 3 <REST <1 .tp1> 0>> + <SET tp1 <REST .tp1>> + <SET tp2 <REST .tp2>>>)> + <SET ctp .tw> + <SET twp <REST .ctp .i>>> + +<DEFINE rtoken (p) + #DECL ((p) <UVECTOR [REST TOKEN]>) + <PUT .p 1 <GETTOK <1 .p>>>> + +\ + +<DEFINE synerr (line-num "EXTRA" (OUTCHAN .OUTCHAN)) + #DECL ((line-num) FIX (OUTCHAN) ANY) + <TERPRI> + <PRIN1 .line-num> + <PRINC ": Syntax Error. Parse So Far: ">> + +<DEFINE giveup (line-num "EXTRA" (OUTCHAN .OUTCHAN)) + #DECL ((line-num) FIX (OUTCHAN) ANY) + <TERPRI> + <PRIN1 .line-num> + <PRINC ": I Give Up. ">> + +<DEFINE stkovf (line-num "EXTRA" (OUTCHAN .OUTCHAN)) + #DECL ((line-num) FIX (OUTCHAN) ANY) + <TERPRI> + <PRIN1 .line-num> + <PRINC ": Parser Stack Overflow ">> + +<DEFINE delmsg (line-num "EXTRA" (OUTCHAN .OUTCHAN)) + #DECL ((line-num) FIX (OUTCHAN) ANY) + <TERPRI> + <PRIN1 .line-num> + <PRINC ": Deleted: ">> + +<DEFINE skpmsg (line-num "EXTRA" (OUTCHAN .OUTCHAN)) + #DECL ((line-num) FIX (OUTCHAN) ANY) + <TERPRI> + <PRIN1 .line-num> + <PRINC ": Skipped: ">> + +<DEFINE tprint (tp) + #DECL ((tp) <UVECTOR [REST TOKEN]>) + <PRINC <ASCII 32> ;"Char Space"> <PTOKEN <1 .tp>>> + +<DEFINE pcursor () <PRINC " |_">> + +<DEFINE stkunf (line-num "EXTRA" (OUTCHAN .OUTCHAN)) + #DECL ((line-num) FIX (OUTCHAN) ANY) + <TERPRI> + <PRIN1 .line-num> + <PRINC ": Parser Stack Underflow! ">> + +<DEFINE tkbovf (line-num "EXTRA" (OUTCHAN .OUTCHAN)) + #DECL ((line-num) FIX (OUTCHAN) ANY) + <TERPRI> + <PRIN1 .line-num> + <PRINC ": Token Buffer Overflow! ">> + +<DEFINE badtwp (line-num "EXTRA" (OUTCHAN .OUTCHAN)) + #DECL ((line-num) FIX (OUTCHAN) ANY) + <TERPRI> + <PRIN1 .line-num> + <PRINC ": Inconsistent Internal Pointers! ">> + +<DEFINE badtok (line-num i "EXTRA" (OUTCHAN .OUTCHAN)) + #DECL ((line-num i) FIX (OUTCHAN) ANY) + <TERPRI> + <PRIN1 .line-num> + <PRINC ": Bad Reference to Tok("> + <PRIN1 .i> + <PRINC ")! ">> + +<DEFINE qprint (q sq "EXTRA" p (OUTCHAN .OUTCHAN)) + #DECL ((p) STRING (q) FIX (sq) <UVECTOR [REST FIX]> + (STERM SNTERM) <VECTOR [REST STRING]> (OUTCHAN) ANY) + <PRINC <ASCII 32> ;"Char Space"> + <SET q <NTH .sq .q>> + <COND (<OR <0? .q> <==? .q 4096>> <SET p "">) + (<G? .q 4096> <SET p <NTH .SNTERM <- .q 4096>>>) + (else <SET p <NTH .STERM .q>>)> + <PRINC .p>> + +\ + +<DEFINE DPTOKEN (TOK) ;"Default Token Printing Routine" + #DECL ((TOK) TOKEN (STERM) <VECTOR [REST STRING]>) + <PRINC <NTH .STERM <type .TOK>>>> + +<DEFINE DACT ("TUPLE" TUP) ;"Default Action Routine" + #DECL ((LHS) FIX (TUP) TUPLE (SNTERM) <VECTOR [REST STRING]>) + (<NTH .SNTERM .LHS> !.TUP)> + +<DEFINE DGETTOK (TOK "OPTIONAL" (X <READ>) + "EXTRA" (STERM .STERM) Y) ;"Default Token Input Routine" + #DECL ((VALUE TOK) TOKEN (STERM) <VECTOR [REST STRING]> + (Y) <OR FALSE VECTOR> (X) ANY) + <COND (<AND <TYPE? .X ATOM> <SET Y <MEMBER <SPNAME .X> .STERM>>> + <TOKEN <- <LENGTH .STERM> <LENGTH .Y> -1> .X 0 .TOK>) + (<AND <TYPE? .X STRING> <SET Y <MEMBER .X .STERM>>> + <TOKEN <- <LENGTH .STERM> <LENGTH .Y> -1> .X 0 .TOK>) + (<AND <TYPE? .X FIX> <G? .X 0> <L=? .X <LENGTH .STERM>>> + <TOKEN .X <NTH .STERM .X> 0 .TOK>) + (<AND <STRUCTURED? .X> <==? 2 <LENGTH .X>>> + <PUT <DGETTOK .TOK <1 .X>> 2 <2 .X>>) + (ELSE <TOKEN 2 .X 0 .TOK>)>> + +<ENDPACKAGE> diff --git a/src/mprog/timfcn.umss44 b/src/mprog/timfcn.umss44 new file mode 100644 index 00000000..e60ada78 --- /dev/null +++ b/src/mprog/timfcn.umss44 @@ -0,0 +1,573 @@ + +<PACKAGE "TIMFCN"> + +<ENTRY DAYS + SECONDS + SECS-DTNORM + DTSECS + GOOD-DTSECS + TIME-STRING + TIMEST + REL-TIMEST + TIME-STR + TIME-DIF + SPDATE + PTIME + PDATE + GOOD-DTNORM + DTNORM + DTADD + DTADD-2NORM + DTDIFF + DTPRINT + SINCE60 + TZDIFF + TIMEZONE + BEFORE? + PAST? + DTNOW + INMONTH + DAYS-BETWEEN + DATE-DOW + HOLIDAY? + NON-MIT-HOLIDAY? + DST? + ZONSTR> + +<GDECL (ZONSTR) <OR STRING FALSE>> + +<USE "DATIME"> + +<SETG BASE-YEAR 60> + +<SETG SECS-P-MIN 60> + +<SETG MINS-P-HOUR 60> + +<SETG HOURS-P-DAY 24> + +<SETG DAYS-P-YEAR 365> + +<SETG SECS-P-HOUR <* ,SECS-P-MIN ,MINS-P-HOUR>> + +<SETG SECS-P-DAY <* ,SECS-P-HOUR ,HOURS-P-DAY>> + +<SETG SECS-P-YEAR <* ,DAYS-P-YEAR ,SECS-P-DAY>> + +<SETG SECS-P-4YEAR <+ <* ,SECS-P-YEAR 4> ,SECS-P-DAY>> + +<MANIFEST BASE-YEAR + SECS-P-MIN + MINS-P-HOUR + HOURS-P-DAY + DAYS-P-YEAR + SECS-P-HOUR + SECS-P-DAY + SECS-P-YEAR + SECS-P-4YEAR> + +<DEFINE SECONDS (YEAR MONTH DAY "OPTIONAL" (HOURS 0) (MINUTES 0) (SECS 0)) + #DECL ((YEAR MONTH DAY SECS HOURS MINUTES) FIX (VALUE) FIX) + <COND (<L? .MONTH 1> + <SET YEAR <+ .YEAR -1 </ .MONTH 12>>> + <SET MONTH <+ 1 <MOD <- .MONTH 1> 12>>>) + (<G? .MONTH 12> + <SET YEAR <+ .YEAR </ .MONTH 12>>> + <SET MONTH <+ 1 <MOD <- .MONTH 1> 12>>>)> + <COND (<G? .YEAR 1900> + <SET YEAR <- .YEAR 1900>>)> + <SET YEAR <- .YEAR ,BASE-YEAR>> + <+ <* .YEAR ,SECS-P-YEAR> + <COND (<L=? .YEAR 0> <* </ <- .YEAR 4> 4> ,SECS-P-DAY>) + (ELSE <* </ <- .YEAR 1> 4> ,SECS-P-DAY>)> + <* <COND (<0? <MOD .YEAR 4>> + <NTH '![0 31 60 91 121 152 182 213 244 274 305 335!] + .MONTH>) + (T + <NTH '![0 31 59 90 120 151 181 212 243 273 304 334!] + .MONTH>)> + ,SECS-P-DAY> + <* .DAY ,SECS-P-DAY> + <* .HOURS ,SECS-P-HOUR> + <* .MINUTES ,SECS-P-MIN> + .SECS>> + +<DEFINE DAYS (YEAR MONTH DAY "OPTIONAL" (HOURS 0) (MINUTES 0)) + #DECL ((YEAR MONTH DAY HOURS MINUTES VALUE) FIX) + </ <SECONDS .YEAR .MONTH .DAY .HOURS .MINUTES> ,SECS-P-DAY>> + +<DEFINE TIME-STRING (TI) #DECL ((TI) <LIST FIX FIX FIX> (VALUE) STRING) + <TIMEST <1 .TI> <2 .TI> <3 .TI>>> + +<DEFINE TIMEST (TEMH TEMM TEMS) + #DECL ((TEMH) FIX (TEMM TEMS) <OR FIX FLOAT> (VALUE) STRING) + <STRING !<COND (<0? .TEMH> '("")) + (ELSE (<UNPARSE .TEMH> + " hour" + <COND (<1? .TEMH> " ") + (ELSE "s ")>))> + <COND (<AND <0? .TEMS> + <NOT <0? .TEMH>> + <NOT <0? .TEMM>>> + "and ")(ELSE "")> + !<COND (<0? .TEMM> '("")) + (ELSE (<UNPARSE .TEMM> + " minute" + <COND (<1? .TEMM> " ") + (ELSE "s ")>))> + + <COND (<AND <OR <NOT <0? .TEMH>> + <NOT <0? .TEMM>>> + <NOT <0? .TEMS>>> + "and ") (ELSE "")> + !<COND (<AND <0? .TEMS> + <OR <NOT <0? .TEMH>> + <NOT <0? .TEMM>>>> + '("")) + (ELSE (<UNPARSE .TEMS> + " second" + <COND (<1? .TEMS> " ") + (ELSE "s ")>))>>> + +<DEFINE REL-TIMEST (RDT + "AUX" (Y <1 <1 .RDT>>) (M <2 <1 .RDT>>) (D <3 <1 .RDT>>) + (NT? + <AND <0? <1 <2 .RDT>>> + <0? <2 <2 .RDT>>> + <0? <3 <2 .RDT>>>>)) + #DECL ((VALUE) STRING (RDT) <LIST LIST <LIST [3 FIX]>> + (Y M D) FIX (NT?) <OR 'T FALSE>) + <STRING !<COND (<0? .Y> '("")) + (ELSE + (<UNPARSE .Y> " year" <COND (<1? .Y> " ") (ELSE "s ")>))> + <COND (<AND .NT? <0? .D> <NOT <0? .Y>> <NOT <0? .M>>> "and ") + (ELSE "")> + !<COND (<0? .M> '("")) + (ELSE + (<UNPARSE .M> " month" <COND (<1? .M> " ") (ELSE "s ")>))> + <COND (<AND .NT? <OR <NOT <0? .Y>> <NOT <0? .M>>> <NOT <0? .D>>> + "and ") + (ELSE "")> + !<COND (<AND <0? .D> <OR <NOT <0? .Y>> <NOT <0? .M>>>> '("")) + (ELSE + (<UNPARSE .D> " day" <COND (<1? .D> " ") (ELSE "s ")>))> + <COND (.NT? "") (T <TIMEST !<2 .RDT>>)>>> + +<DEFINE TIME-STR (NSEC "AUX" (NMIN </ <FIX .NSEC> 60>) + (NHRS </ .NMIN 60>)) + #DECL ((NSEC) <OR FIX FLOAT> (NMIN NHRS) FIX (VALUE) STRING) + <TIMEST .NHRS + <- .NMIN <* .NHRS 60>> + <- .NSEC <* .NMIN 60>>>> + +<DEFINE TIME-DIF (D1 D2 T1 T2 "AUX" (DY <- <DAYS <1 .D2> + <2 .D2> + <3 .D2>> + <DAYS <1 .D1> + <2 .D1> + <3 .D1>>>)) + #DECL ((D1 D2 T1 T2) <LIST FIX FIX FIX> (DY) FIX (VALUE) STRING) + <TIME-STR <- <+ <* .DY 3600 24> + <* <1 .T2> 3600> + <* <2 .T2> 60> + <3 .T2>> + <+ <* <1 .T1> 3600> + <* <2 .T1> 60> + <3 .T1>>>>> + +<DEFINE SPDATE (DAT "OPTIONAL" (CH .OUTCHAN)) + #DECL ((DAT) <LIST FIX FIX FIX> (CH) CHANNEL (VALUE) FIX) + <PRINC <3 .DAT> .CH> + <PRINC " " .CH> + <PRINC <NTH '["JAN" + "FEB" + "MAR" + "APR" + "MAY" + "JUN" + "JUL" + "AUG" + "SEP" + "OCT" + "NOV" + "DEC"] + <2 .DAT>> + .CH> + <PRINC " " .CH> + <PRINC <1 .DAT> .CH>> + +<DEFINE PTIME (DAT "OPTIONAL" (CH .OUTCHAN)) + #DECL ((DAT) <LIST FIX FIX FIX> (CH) CHANNEL) + <COND (<L? <1 .DAT> 10> <PRINC "0" .CH>)> + <PRINC <1 .DAT> .CH> + <COND (<L? <2 .DAT> 10> <PRINC "0" .CH>)> + <PRINC <2 .DAT> .CH> + <PRINC " " .CH> + <COND (<LENGTH? .DAT 3> <PRINC <TIMEZONE> .CH>) + (ELSE <PRINC " " .CH> <PRINC <4 .DAT> .CH>)>> + +<DEFINE PDATE (DAT "OPTIONAL" (CH .OUTCHAN)) + #DECL ((DAT) <LIST FIX FIX FIX> (CH) CHANNEL) + <PRINC <2 .DAT> .CH> + <PRINC "/" .CH> + <PRINC <3 .DAT> .CH> + <PRINC "/" .CH> + <PRINC <1 .DAT> .CH>> + +<DEFINE SECS-DTNORM (S + "OPTIONAL" (L ((0 0 0) (0 0 0) "")) + "AUX" (Y 0) (Y4 0) (D 0) (M 0) (H 0) (GUESS 0) (DL <1 .L>) + (TL <2 .L>)) + #DECL ((Y Y4 S D M H GUESS) FIX (DL TL) <LIST FIX FIX FIX> + (L VALUE) <LIST [2 <LIST FIX FIX FIX>] STRING>) + <SET Y4 <* <FNY/ .S ,SECS-P-4YEAR> 4>> + <SET Y + <+ .Y4 + <FNY/ <- .S ,SECS-P-DAY <* </ .Y4 4> ,SECS-P-4YEAR>> + ,SECS-P-YEAR>>> + <SET S + <- .S + <+ <* <- .Y .Y4> ,SECS-P-YEAR> <* </ .Y4 4> ,SECS-P-4YEAR>> + <OR <AND <==? .Y .Y4> <- ,SECS-P-DAY>> 0>>> + <COND (<0? <SET D </ .S ,SECS-P-DAY>>> + <COND (<0? <MOD <SET Y <- .Y 1>> 4>> + <SET D <+ .D 366>> + <SET S <+ .S ,SECS-P-YEAR 1>>) + (ELSE <SET D <+ .D 365>> <SET S <+ .S ,SECS-P-YEAR>>)>)> + <PUT .DL 1 <+ .Y ,BASE-YEAR>> + <SET S <- .S <* .D ,SECS-P-DAY>>> + <PUT .TL 1 <SET H </ .S ,SECS-P-HOUR>>> + <SET S <- .S <* .H ,SECS-P-HOUR>>> + <PUT .TL 2 <SET M </ .S ,SECS-P-MIN>>> + <PUT .TL 3 <- .S <* .M ,SECS-P-MIN>>> + <SET GUESS <MAX 1 <MIN </ .D 28> 12>>> + <REPEAT ((MV + <COND (<NOT <0? <MOD .Y 4>>> + '![0 31 59 90 120 151 181 212 243 273 304 334 365!]) + (ELSE + '![0 31 60 91 121 152 182 213 244 274 305 335 366!])>)) + #DECL ((MV) <UVECTOR [REST FIX]>) + <COND (<AND <G? .D <NTH .MV .GUESS>> + <L=? .D <NTH .MV <+ .GUESS 1>>>> + <RETURN <SET D <- .D <NTH .MV .GUESS>>>>)> + <SET GUESS <+ .GUESS 1>>> + <PUT .DL 2 .GUESS> + <PUT .DL 3 .D> + <COND (<=? <3 .L> <TIMEZONE>>) + (ELSE <PUT .L 3 <TIMEZONE>>)> + .L> + +<DEFINE GOOD-DTSECS (DT "AUX" D) + #DECL ((DT) <LIST [2 <LIST FIX FIX FIX>] STRING> (D) <LIST FIX FIX FIX>) + <SECONDS <1 <SET D <1 .DT>>> + <2 .D> + <3 .D> + <+ <1 <SET D <2 .DT>>> <TZDIFF <3 .DT>>> + <2 .D> + <3 .D>>> + +<DEFINE DTSECS (DT + "AUX" (D <1 .DT>) (TI <2 .DT>) (LD <LENGTH .D>) + (LT <LENGTH .TI>) (TEM 0) (FD <FIX-DATE>)) + #DECL ((DT) <LIST LIST LIST> (D TI) <LIST [REST FIX]> (LD LT TEM FD) FIX) + <SECONDS <COND (<==? .LD 3> <SET TEM <1 .D>> <SET D <REST .D>> .TEM) + (ELSE </ .FD 10000>)> + <COND (<G=? .LD 2> <SET TEM <1 .D>> <SET D <REST .D>> .TEM) + (ELSE </ <MOD .FD 10000> 100>)> + <COND (<0? .LD> <MOD .FD 100>) (ELSE <1 .D>)> + <+ <COND (<0? .LT> 0) (ELSE <1 .TI>)> + <COND (<==? <LENGTH .DT> 3> <TZDIFF <3 .DT>>) (ELSE 0)>> + <COND (<G=? .LT 2> <2 .TI>) (ELSE 0)> + <COND (<==? .LT 3> <3 .TI>) (ELSE 0)>>> + +<DEFINE GOOD-DTNORM (DT "OPTIONAL" (L ((0 0 0) (0 0 0) ""))) + <SECS-DTNORM <GOOD-DTSECS .DT> .L>> + +<DEFINE DTNORM (DT "OPTIONAL" (L ((0 0 0) (0 0 0) ""))) + #DECL ((DT) <LIST <LIST [REST FIX]> <LIST [REST FIX]>>) + <SECS-DTNORM <DTSECS .DT> .L>> + + +<DEFINE DTADD (DT1 DT2 "OPTIONAL" (LL ((0 0 0) (0 0 0) "")) + "AUX" (I 0)(J 0) DT21 DT11) + #DECL ((VALUE LL) <LIST [2 <LIST [3 FIX]>]> (DT1 DT2) <LIST [OPTIONAL LIST]> + (I J) FIX (DT21 DT11) <LIST [REST FIX]>) + <SET DT11 <1 <SET LL <DTNORM .DT1 .LL>>>> + <COND (<NOT <LENGTH? .DT2 1>> + <SET I <LENGTH <SET DT21 <1 .DT2>>>> <SET J 3> + <REPEAT () <COND (<L=? .I 0> <RETURN T>)> + <PUT .DT11 .J <+ <NTH .DT11 .J> <NTH .DT21 .I>>> + <SET I <- .I 1>> + <SET J <- .J 1>>> + <SET DT2 <REST .DT2>>)> + <MAPR <> + <FUNCTION (A B) <PUT .A 1 <+ <1 .A> <1 .B>>>> + <SET DT11 <2 .LL>> + <SET DT21 <1 .DT2>>> + <GOOD-DTNORM .LL .LL>> + +<DEFINE DTADD-2NORM (DT2 + "OPTIONAL" (L ((0 0 0) (0 0 0))) + "AUX" TMP N (TMP2 <1 .L>) TMPP) + #DECL ((VALUE L) <LIST [2 <LIST [3 FIX]>]> (DT2) <LIST [REST LIST]> + (TMP2 TMP) LIST (N) FIX (TMPP) <LIST [3 FIX]>) + <COND (<NOT <OR <LENGTH? .DT2 1> + <AND <SET TMP <1 .DT2>> + <SET DT2 <REST .DT2>> + <EMPTY? .TMP>>>> + <SET N <LENGTH .TMP>> + <MAPF <> + <FUNCTION (IT) + #DECL ((IT) FIX) + <PUT .TMP2 <- 3 <SET N <- .N 1>>> .IT>> + .TMP>)> + <COND (<NOT <OR <EMPTY? .DT2> <AND <SET TMP <1 .DT2>> <EMPTY? .TMP>>>> + <MAPR <> + <FUNCTION (L1 L2) + #DECL ((L1 L2) <LIST FIX>) + <PUT .L1 1 <1 .L2>>> + <2 .L> + .TMP>)> + <SET TMPP <2 .L>> + <AND <N==? <SET N <FNY/ <3 .TMPP> 60>> 0> + <PUT .TMPP 3 <MOD <3 .TMPP> 60>> + <PUT .TMPP 2 <+ .N <2 .TMPP>>>> + <AND <N==? <SET N <FNY/ <2 .TMPP> 60>> 0> + <PUT .TMPP 2 <MOD <2 .TMPP> 60>> + <PUT .TMPP 1 <+ .N <1 .TMPP>>>> + <AND <N==? <SET N <FNY/ <1 .TMPP> 24>> 0> + <PUT .TMPP 1 <MOD <1 .TMPP> 24>> + <PUT <1 .L> 3 <+ .N <3 <1 .L>>>>> + .L> + +<DEFINE DTDIFF (DT1 "OPTIONAL" (DT2 <DTNOW>)) + #DECL ((DT1 DT2) LIST (VALUE) FLOAT) + </ <- <DTSECS .DT1> <DTSECS .DT2>> 60.0>> + +<DEFINE DTPRINT (DT "OPTIONAL" (OUTCHAN .OUTCHAN) "AUX" (NDT <DTNORM .DT>)) + #DECL ((DT) LIST (OUTCHAN) <SPECIAL CHANNEL> (NDT) <LIST [2 <LIST [3 FIX]>] STRING> + (VALUE) ATOM) + + <PRINC <3 <1 .NDT>>> <PRINC !"/> + <PRINC <2 <1 .NDT>>> <PRINC !"/> + <PRINC <1 <1 .NDT>>> <PRINC !" > + <PRINC <1 <2 .NDT>>> <PRINC !":> + <PRINC <2 <2 .NDT>>> <PRINC !":> + <PRINC <3 <2 .NDT>>> <PRINC !" > + <PRINC <3 .NDT>> + T> + +<DEFINE SINCE60 (DT) + #DECL ((DT) <LIST <LIST FIX FIX FIX> <LIST FIX FIX FIX> STRING> + (VALUE) FLOAT) + <+ <* <FLOAT <DAYS !<1 .DT>>> 1440.0> + <* <FLOAT <1 <2 .DT>>> 60.0> + <2 <2 .DT>> + </ <FLOAT <3 <2 .DT>>> 60.0>>> + +<SETG ZONES '["GMT" 4 + "AST" 0 "ADT" 1 + "EST" -1 "EDT" 0 + "CST" -2 "CDT" -1 + "MST" -3 "MDT" -2 + "PST" -4 "PDT" -3 + "YST" -5 "YDT" -4 + "HST" -6 "HDT" -5 + "BST" -7 "BDT" -6 + ;"military:" + "A"3 "B"2 "C"1 "D"0 "E"-1 "F"-2 "G"-3 "H"-4 "I"-5 "K"-6 "L"-7 "M"-8 + "N"5 "O"6 "P"7 "Q"8 "R"9 "S"10 "T"11 "U"12 "V"13 "W"14 "X"15 "Y"16 "Z"4]> + +<GDECL (ZONES) <VECTOR [REST STRING FIX]>> + +<DEFINE TZDIFF (ZONE1 "OPTIONAL" (ZONE2 <TIMEZONE>) + "AUX" (ZONEMAP ,ZONES) DIFF1 DIFF2 X) + #DECL ((VALUE DIFF1 DIFF2) FIX) + <COND (<=? .ZONE1 .ZONE2> 0) + (ELSE + <COND (<SET X <MEMBER .ZONE1 .ZONEMAP>> <SET DIFF1 <2 .X>>) + (ELSE <SET DIFF1 <ERROR UNKNOWN-TIME-ZONE .ZONE1>>)> + <COND (<SET X <MEMBER .ZONE2 .ZONEMAP>> <SET DIFF2 <2 .X>>) + (ELSE <SET DIFF2 <ERROR UNKNOWN-TIME-ZONE .ZONE2>>)> + <- .DIFF2 .DIFF1>)>> + +<SETG ZONSTR <>> + +<DEFINE TIMEZONE () + #DECL ((VALUE) STRING) + <OR ,ZONSTR <SETG ZONSTR <GETTIMEZONE>>>> + +<DEFINE BEFORE? (DT1 DT2) + <COND (<L? <DTDIFF .DT1 .DT2> 0> T) (ELSE <>)>> + +<DEFINE PAST? (DT) <BEFORE? .DT <DTNOW>>> + +<DEFINE DTNOW ("OPTIONAL" L) + #DECL ((L) <LIST LIST LIST STRING>) + <COND (<NOT <ASSIGNED? L>> (<DATE!-> <RTIME!-> <TIMEZONE>)) + (ELSE + <PUT .L 1 <DATE!- <1 .L>>> + <PUT .L 2 <RTIME!- <2 .L>>> + <AND <N==? <3 .L> ,ZONSTR> <PUT .L 3 <TIMEZONE>>> + .L)>> + +<DEFINE INMONTH (MONTH YEAR "AUX" (NDMS '![31 28 31 30 31 30 31 31 30 31 30 31])) + #DECL ((MONTH YEAR VALUE) FIX (NDMS) <UVECTOR [12 FIX]>) + <COND (<AND <==? .MONTH 2> <0? <MOD .YEAR 4>>> 29) + (ELSE <NTH .NDMS .MONTH>)>> + +<DEFINE FNY/ (X Y "AUX" (Z </ .X .Y>)) + #DECL ((X Y Z VALUE) FIX) + <COND (<L? .X 0> <- .Z 1>) + (ELSE .Z)>> + +<DEFINE DAYS-BETWEEN (DT1 DT2) + #DECL ((VALUE) FIX (DT1 DT2) <LIST <LIST FIX FIX FIX>>) + <- <DAYS !<1 .DT1!>> <DAYS !<1 .DT2>>>> + +<DEFINE DATE-DOW ("OPTIONAL" (ARG <1 <DTNOW>>) + "AUX" (DAY <1 <DTNORM (.ARG '())>>) C (Y <1 .DAY>) + (M <- <2 .DAY> 2>) (D <3 .DAY>)) + #DECL ((VALUE C Y M D) FIX (ARG DAY) <LIST [3 FIX]>) + <AND <L? .Y 100> <SET Y <+ 1900 .Y>>> + <AND <L? .M 1> <SET M <+ 12 .M>> <SET Y <- .Y 1>>> + <SET C </ .Y 100>> + <SET Y <MOD .Y 100>> + <MOD <+ </ <- <* 13 .M> 1> 5> + .D + .Y + </ .Y 4> + </ .C 4> + <* -2 .C>> + 7>> + +<DEFINE HOLIDAY? ("OPTIONAL" (ARG <1 <DTNOW>>) + "AUX" (DAY <1 <DTNORM (.ARG '())>>) (M <2 .DAY>) (D <3 .DAY>) + (W <DATE-DOW .DAY>)) + #DECL ((VALUE) <OR STRING FALSE> (ARG DAY) <LIST [3 FIX]> (M D W) FIX) + <COND (<AND <==? 1 .M> <==? 1 .D>> "New Year's Day") + (<AND <==? 1 .M> <==? 2 .D> <==? 1 .W>> + "New Year's Day observed") + (<AND <==? 1 .M> <==? 15 .D>> "Martin Luther King Day") + (<AND <==? 1 .M> <==? 16 .D> <==? 1 .W>> + "Martin Luther King Day") + (<AND <==? 2 .M> <==? 1 .W> <L=? 15 .D> <G=? 21 .D>> + "Presidents' Day") ;"3rd Mon" + (<AND <==? 4 .M> <==? 1 .W> <L=? 15 .D> <G=? 21 .D>> + "Patriots' Day") ;"3rd Mon" + (<AND <==? 5 .M> <==? 1 .W> <L=? 25 .D> <G=? 31 .D>> + "Memorial Day") ;"last Mon" + (<AND <==? 7 .M> <==? 4 .D>> "Independence Day") + (<AND <==? 7 .M> <==? 5 .D> <==? 1 .W>> + "Independence Day observed") + (<AND <==? 9 .M> <==? 1 .W> <L=? 1 .D> <G=? 7 .D>> + "Labor Day") ;"1st Mon" + (<AND <==? 10 .M> <==? 1 .W> <L=? 8 .D> <G=? 14 .D>> + "Columbus Day") ;"2nd Mon" + (<AND <==? 11 .M> <==? 11 .D>> "Veterans' Day") + (<AND <==? 11 .M> <==? 12 .D> <==? 1 .W>> + "Veterans' Day observed") + (<AND <==? 11 .M> <==? 4 .W> <L=? 22 .D> <G=? 28 .D>> + "Thanksgiving Day") ;"4th Thu" + (<AND <==? 12 .M> <==? 25 .D>> "Christmas Day") + (<AND <==? 12 .M> <==? 26 .D> <==? 1 .W>> + "Christmas Day observed") + (<FILE-EXISTS? "HOLIDAY" + <STRING <UNPARSE <1 .DAY>> + <REST <UNPARSE <+ 100 .M>>> + <REST <UNPARSE <+ 100 .D>>>> + "DSK" "COMBAT"> + "ad-hoc holiday")>> + +<DEFINE NON-MIT-HOLIDAY? ("OPTIONAL" (ARG <1 <DTNOW>>) + "AUX" (DAY <1 <DTNORM (.ARG '())>>) + (Y <1 .DAY>) (M <2 .DAY>) (D <3 .DAY>) + (W <DATE-DOW .DAY>) (E <EASTER .Y>) + (DAYS <DAYS !.DAY>) (ED <DAYS !.E>)) + #DECL ((VALUE) <OR STRING FALSE> (ARG DAY E) <LIST [3 FIX]> + (Y M D W DAYS ED) FIX) + <COND (<AND <==? 1 .M> <==? 31 .D>> + "[Setting sun is aligned with M.I.T. main corridor.]") + (<AND <==? 2 .M> <==? 2 .D>> "[Ground-hog Day]") + (<AND <==? 2 .M> <==? 14 .D>> "[St. Valentine's Day]") + (<AND <==? 2 .M> <==? 29 .D>> "[Leap Day]") + (<AND <==? 3 .M> <==? 1 .D>> "[St. David's Day]") + (<AND <==? 3 .M> <==? 17 .D>> "[St. Patrick's Day]") + (<AND <==? 4 .M> <==? 1 .D>> "[All Fools' Day]") + (<AND <==? 4 .M> <==? 23 .D>> "[St. George's Day]") + (<AND <==? 5 .M> <==? 1 .D>> "[May Day]") + (<AND <==? 5 .M> <==? 0 .W> <L=? 8 .D> <G=? 14 .D>> + "[Mothers' Day]") ;"2nd Sun" + (<AND <==? 5 .M> <==? 3 .W> <L=? 15 .D> <G=? 21 .D>> + "[Victoria Day]") ;"3rd Wed" + (<AND <==? 6 .M> <==? 0 .W> <L=? 8 .D> <G=? 14 .D>> + "[Childrens' Day]") ;"2nd Sun" + (<AND <==? 6 .M> <==? 14 .D>> "[Flag Day]") + (<AND <==? 6 .M> <==? 0 .W> <L=? 15 .D> <G=? 21 .D>> + "[Fathers' Day]") ;"3rd Sun" + (<AND <==? 7 .M> <==? 1 .D>> "[Canadian Dominion Day]") + (<AND <==? 7 .M> <==? 14 .D>> "[Bastille Day]") + (<AND <==? 10 .M> <==? 1 .W> <L=? 1 .D> <G=? 7 .D>> + "[U.N. Childrens' Day]") ;"1st Mon" + (<AND <==? 10 .M> <==? 31 .D>> "[All Hallows' Eve]") + (<AND <==? 11 .M> <==? 2 .W> <L=? 2 .D> <G=? 8 .D>> + "[Election Day]") + (<AND <==? 11 .M> <==? 12 .D>> + "[Setting sun is aligned with M.I.T. main corridor.]") + (<AND <==? 11 .M> <==? 30 .D>> "[St. Andrew's Day]") + (<AND <==? 12 .M> <==? 6 .D>> "[St. Nicholas's Day]") + (<==? .DAYS <- .ED 47>> "[Mardi Gras]") + (<==? .DAYS <- .ED 46>> "[Ash Wednesday]") + (<==? .DAYS <- .ED 7>> "[Palm Sunday]") + (<==? .DAYS <- .ED 2>> "[Good Friday]") + (<=? .DAY .E> "[Easter Sunday]") + (<==? .DAYS <+ .ED 49>> "[Whitsunday]")>> + +<DEFINE EASTER (Y ;"from Knuth ACP 1.3.2" + "AUX" (YY <COND (<L? .Y 100> <+ .Y 1900>) (T .Y)>) + G C X Z D E N) + #DECL ((VALUE) <LIST [3 FIX]> (Y YY G C X Z D E N) FIX) + <SET G <+ 1 <MOD .YY 19>>> ;"golden number" + <SET C <+ 1 </ .YY 100>>> ;"century number" + <SET X <- </ <* 3 .C> 4> 12>> ;"number of non-leap '00s" + <SET Z <- </ <+ <* 8 .C> 5> 25> 5>> ;"correction" + <SET D <- </ <* 5 .YY> 4> .X 10>> ;"March -D is a Sunday." + <SET E <MOD <+ <* 11 .G> 20 .Z <- .X>> 30>> + <COND (<OR <AND <==? .E 25> <G? .G 11>> + <==? .E 24>> + <SET E <+ 1 .E>>)> ;"epact" + <SET N <- 44 .E>> + <COND (<L? .N 21> <SET N <+ 30 .N>>)> ;"March N is a full moon." + <SET N <- .N -7 <MOD <+ .D .N> 7>>> ;"March N is a Sunday." + <COND (<L? .N 32> (.Y 3 .N)) + (T (.Y 4 <- .N 31>))>> + +<DEFINE DST? ("OPTIONAL" (DTA <DTNOW>) + ;"Is/was Daylight Saving Time in effect at this time?" + "AUX" (B74 '((74 1 6) (1 0 0) "EST")) + (E74 '((74 10 1) (1 0 0) "EST")) + (B75 '((75 2 23) (1 0 0) "EST")) + (E75 '((75 10 26) (1 0 0) "EST")) + (DT <DTNORM .DTA>) (DAY <1 .DT>) (H <1 <2 .DT>>) + (Y <1 .DAY>) (M <2 .DAY>) (D <3 .DAY>) S) + #DECL ((VALUE) <OR 'T FALSE> (DTA) LIST (DT) <LIST LIST LIST STRING> + (B74 E74 B75 E75 DAY) LIST (Y M D H S) FIX) + <COND (<==? .Y 74> <AND <BEFORE? .B74 .Y> <BEFORE? .Y .E74>>) + (<==? .Y 75> <AND <BEFORE? .B75 .Y> <BEFORE? .Y .E75>>) + (<AND <G? .M 4> <L? .M 10>>) + (<==? .M 4> + <SET S <- 30 <DATE-DOW (.Y 4 30)>>> ;"last Sunday" + <COND (<L? .D .S> <>) + (<G? .D .S>) + (<L? .H 1> <>) + (<G? .H 2>) + (<AND <G? .H 1> <==? !\S <2 <3 .DT>>>>)>) + (<==? .M 10> + <SET S <- 31 <DATE-DOW (.Y 10 31)>>> + <COND (<L? .D .S>) + (<G? .D .S> <>) + (<L? .H 1>) + (<G? .H 2> <>) + (<AND <L? .H 2> <==? !\D <2 <3 .DT>>>>)>)>> + +<ENDPACKAGE> diff --git a/src/mprog/tty.udl027 b/src/mprog/tty.udl027 new file mode 100644 index 00000000..2790728f --- /dev/null +++ b/src/mprog/tty.udl027 @@ -0,0 +1,281 @@ +<PACKAGE "TTY"> + +<ENTRY TTY-GET TTY-SET CNS-GET CNS-SET TTY-ON TTY-OFF IOT RCPOS SCML> + +<TITLE IOT> +<DECLARE ("VALUE" CHARACTER "OPTIONAL" <PRIMTYPE WORD>)> + <JUMPL AB* [<DPUSH TP* (AB)> + <PUSHJ P* IIOT> + <JRST FINIS>]> + <PUSHJ P* IIOT0> + <JRST FINIS> + +<INTERNAL-ENTRY IIOT0 0> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* [0]> +<INTERNAL-ENTRY IIOT 1> + <SUBM M* (P)> + <MOVSI A* <TYPE-CODE CHARACTER>> + <AOSE INTFLG> ; "?????" + <JSR LCKINT> ; "?????" + <*CALL [<SETZ> + <SIXBIT "IOT"> + <MOVS (TP)> + <MOVEI B> + <SETZ B>]> + <*LOSE *1000*> + <SETZM INTFLG> + <SUB TP* [<(2) 2>]> + <JRST MPOPJ> + + ; "NOTE that the defaults are ,OUTCHAN, instead of .OUTCHAN" + ; "A* contains <-location of channel number>- -1 + B* the uvector" + +<TITLE TTY-SET> + <DECLARE (<OR <UVECTOR [2 <PRIMTYPE WORD>]> <UVECTOR [3 <PRIMTYPE WORD>]>> + "OPTIONAL" CHANNEL)> + <MOVE B* (AB) 1> + <MOVEI A* one-1> ; "channal# of ,OUCHAN is 1" + <CAMGE AB* [<(-2) 0>]> + <MOVE A* (AB) 3> + <PUSHJ P* ttyset> + <MOVSI A* <TYPE-CODE UVECTOR>> + <JRST FINIS> + +<SUB-ENTRY TTY-OFF ("OPTIONAL" CHANNEL)> + + <MOVE B* <MQUOTE ![*020202020202* *030202020202*]>> + <SKIPA> + +<SUB-ENTRY TTY-ON ("OPTIONAL" CHANNEL)> + <MOVE B* <MQUOTE ![*232323232323* *232323330323*]>> + <MOVEI A* one-1> + <SKIPGE AB> + <MOVE A* (AB) 1> + <PUSHJ P* ttyset> + <MOVSI A* <TYPE-CODE ATOM>> + <MOVE B* <MQUOTE T>> + <JRST FINIS> + +ttyset <MOVE [<*CALL set3>]> + <CAML B* [<(-2) 0>]> ; "2 arguments only?" + <MOVE [<*CALL set2>]> + <XCT> + <ERRUUO* <MQUOTE TTYSET-FAILURE!-ERRORS>> +one-1 <POPJ P*> + 1 + +set3 <SETZ> + <SIXBIT "TTYSET"> + <1 (A)> + <(B)> + <1 (B)> + <SETZ 2 (B)> + +set2 <SETZ> + <SIXBIT "TTYSET"> + <1 (A)> + <(B)> + <SETZ 1 (B)> + +<TITLE TTY-GET> + <DECLARE ("OPTIONAL" <OR FALSE <UVECTOR [3 <PRIMTYPE WORD>]>> <OR CHANNEL FIX>)> + + <JUMPGE AB* noarg> + <CAML AB* [<(-2) 0>]> + <JRST 1arg> + +2arg <MOVE B* 1 (AB)> + <GETYP A* (AB)> + <CAIE A* <TYPE-CODE UVECTOR>> + <PUSHJ P* get3b> + <MOVE A* 3 (AB)> + <MOVE O* [<*CALL getchan>]> + <GETYP E* 2 (AB)> + <CAIE E* <TYPE-CODE CHANNEL>> + <MOVE O* [<*CALL getfix>]> + <JRST doit> + +1arg <MOVE B* 1 (AB)> + <GETYP A* (AB)> + <CAIE A* <TYPE-CODE UVECTOR>> + +noarg <PUSHJ P* get3b> + <MOVEI A* one-1> + <MOVE O* [<*CALL getchan>]> + +doit <XCT> + <ERRUUO* <MQUOTE TTYGET-FAILURE!-ERRORS>> + <MOVSI A* <TYPE-CODE UVECTOR>> +one-1 <JRST FINIS> + 1 + +get3b <SUBM M* (P)> + <HRLI A* <TYPE-CODE WORD>> + <HRRI A* 3> + <MOVEI O* IBLOCK> + <PUSHJ P* RCALL> + <SUBM M* (P)> + <POPJ P*> + +getchan <SETZ> + <SIXBIT "TTYGET"> + <1 (A)> + <MOVEM (B)> + <MOVEM 1 (B)> + <SETZM 2 (B)> + +getfix <SETZ> + <SIXBIT "TTYGET"> + <MOVEI (A) *400000*> + <MOVEM (B)> + <MOVEM (B) 1> + <SETZM (B) 2> + +<TITLE CNS-GET> + <DECLARE ("OPTIONAL" <OR FALSE <UVECTOR [5 <PRIMTYPE WORD>]>> CHANNEL)> + <JUMPGE AB* CNOARG> + <CAML AB* [<(-2)>]> + <JRST C1ARG> + <MOVE B* 1(AB)> + <GETYP A* (AB)> + <CAIE A* <TYPE-CODE UVECTOR>> + <PUSHJ P* GET5B> + <MOVE A* 3(AB)> + <MOVE [<*CALL GETCNS>]> + <GETYP E* 2(AB)> + <CAIE E* <TYPE-CODE CHANNEL>> + <MOVE [<*CALL GETCNS1>]> + <JRST CDOIT> + +C1ARG <MOVE B* 1(AB)> + <GETYP A* (AB)> + <CAIE A* <TYPE-CODE UVECTOR>> + +CNOARG <PUSHJ P* GET5B> + <MOVEI A* CGONE> + <MOVE [<*CALL GETCNS>]> + +CDOIT <XCT> + <ERRUUO* <MQUOTE CNSGET-FAILURE!-ERRORS>> + <MOVSI A* <TYPE-CODE UVECTOR>> +CGONE <JRST FINIS> + 1 +GET5B <SUBM M* (P)> + <HRLI A* <TYPE-CODE WORD>> + <HRRI A* 5> + <MOVEI IBLOCK> + <PUSHJ P* RCALL> + <SUBM M* (P)> + <POPJ P*> + +GETCNS <SETZ> + <SIXBIT "CNSGET"> + <1 (A)> + <MOVEM (B)> + <MOVEM 1(B)> + <MOVEM 2(B)> + <MOVEM 3(B)> + <SETZM 4(B)> + +GETCNS1 <SETZ> + <SIXBIT "CNSGET"> + <MOVEI *400000* (A)> + <MOVEM (B)> + <MOVEM 1(B)> + <MOVEM 2(B)> + <MOVEM 3(B)> + <SETZM 4(B)> + +<TITLE CNS-SET> + <DECLARE (<UVECTOR [5 <PRIMTYPE WORD>]> "OPTIONAL" CHANNEL)> + <MOVE B* (AB) 1> + <MOVEI A* CONE> + <CAMGE AB* [<(-2) 0>]> + <MOVE A* (AB) 3> + <*CALL CSET> + <ERRUUO* <MQUOTE CNSSET-FAILURE!-ERRORS>> + <MOVSI A* <TYPE-CODE UVECTOR>> +CONE <JRST FINIS> + 1 + +CSET <SETZ> + <SIXBIT "CNSSET"> + <1 (A)> + <(B)> + <1 (B)> + <2 (B)> + <3 (B)> + <SETZ 4 (B)> + + + +;"does RCPOS system call. + returns a recycled uvector, + 1/ echo vert + 2/ echo hoz + 3/ main vert + 4/ main hoz" + +<TITLE RCPOS> +<DECLARE ("OPTIONAL" <OR FALSE <UVECTOR [4 <PRIMTYPE WORD>]>> CHANNEL)> + + <JUMPGE AB* rnoarg> + <CAML AB* [<(-2) 0>]> + <JRST r1arg> + +r2arg <MOVE E* (AB) 3> + <MOVE E* (E) 1> + <SKIPA> + +r1arg <MOVEI E* 1> + <MOVE B* (AB) 1> + <GETYP A* (AB)> + <CAIE A* <TYPE-CODE UVECTOR>> + <PUSHJ P* get4b> + <JRST rdoit> + +rnoarg <MOVEI E* 1> + <PUSHJ P* get4b> + +rdoit <*CALL [<SETZ> + <SIXBIT "RCPOS"> + <MOVE E> + <(*2000*) C> + <SETZM D>]> + <ERRUUO* <MQUOTE RCPOS-FAILURE!-ERRORS>> + <HRRZM D* (B) 3> ;"main horizontal" + <HLRZM D* (B) 2> + <HRRZM C* (B) 1> ;"echo horizontal" + <HLRZM C* (B)> + <MOVSI A* <TYPE-CODE UVECTOR>> + <JRST FINIS> + +get4b <SUBM M* (P)> + <PUSH P* E> + <HRLI A* <TYPE-CODE FIX>> + <HRRI A* 4> + <MOVEI O* IBLOCK> + <PUSHJ P* RCALL> + <POP P* E> + <SUBM M* (P)> + <POPJ P*> + +<TITLE SCML> +<DECLARE ("VALUE" FIX FIX CHANNEL)> + + <MOVE C* (AB) 3> + <MOVE C* (C) 1> + <MOVE B* (AB) 1> + <*CALL [<SETZ> + <SIXBIT "SCML"> + <MOVE C> + <SETZ B>]> + <ERRUUO* <MQUOTE SCML-FAILURE!-ERRORS>> + <MOVSI A* <TYPE-CODE FIX>> + <JRST FINIS> +<END> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog/unload.ubkd08 b/src/mprog/unload.ubkd08 new file mode 100644 index 00000000..b9408efb --- /dev/null +++ b/src/mprog/unload.ubkd08 @@ -0,0 +1,48 @@ +<PACKAGE "UNLOAD"> +<ENTRY UNLOAD> + +<DEFINE UNLOAD (PS "EXTRA" P IP OBL) + #DECL ((PS) STRING (P IP) <OR FALSE ATOM> + (OBL) <OR FALSE OBLIST>) + <COND (<AND <SET P <LOOKUP .PS <GETPROP PACKAGE OBLIST>>> + <SET IP <PUTPROP .P IOBLIST!-IPKG!-PKG!-PACKAGE>>> + <DROP .PS> + <IOBK <GETPROP .IP OBLIST + '<ERROR NO-INTERNAL-OBLIST!-ERRORS .IP UNLOAD>>> + <COND (<SET OBL <GETPROP .P OBLIST>> + <IOBK .OBL>)> + <ATOMK .P> + <ATOMK .IP> + "DONE") + (ELSE <ERROR NO-PACKAGE!-ERRORS .PS UNLOAD>)>> + +<DEFINE OBK (OBNM) + #DECL ((OBNM) ATOM) + <IOBK <GETPROP .OBNM OBLIST + '<ERROR NO-OBLIST!-ERRORS .OBNM>>>> + +<DEFINE IOBK (OB "EXTRA" (DC <DECL-CHECK <>>)) + #DECL ((OB) OBLIST) + <MAPF <> + <FUNCTION (B) + #DECL ((B) <LIST [REST ATOM]>) + <MAPF <> ,ATOMK .B>> + .OB> + <PUTPROP <PUTPROP .OB OBLIST> OBLIST> + <DECL-CHECK .DC> + "DONE"> + +<DEFINE ATOMK (A) + #DECL ((A) ATOM) + <REPEAT ((AS <ASSOCIATIONS>)) + #DECL ((AS) <OR FALSE ASOC>) + <COND (<NOT .AS> <RETURN>) + (<OR <==? <ITEM .AS> .A> + <==? <INDICATOR .AS> .A>> + <PUTPROP <ITEM .AS> <INDICATOR .AS>>)> + <SET AS <NEXT .AS>>> + <REMOVE .A> + <GUNASSIGN .A> + <UNASSIGN .A>> + +<ENDPACKAGE> diff --git a/src/mprog/vtsdef.uta002 b/src/mprog/vtsdef.uta002 new file mode 100644 index 00000000..0be5b23d --- /dev/null +++ b/src/mprog/vtsdef.uta002 @@ -0,0 +1,52 @@ +"CONSTANTS FOR SCR PACKAGE" +; "RANDOM CONSTANTS FOR VTSOP, RTMOD, RTCHR" +<MSETG VTNOP 0> +<MSETG VTFWD 1> +<MSETG VTBCK 2> +<MSETG VTUP 3> +<MSETG VTDWN 4> +<MSETG VTHRZ 5> +<MSETG VTVRT 6> +<MSETG VTMOV 7> +<MSETG VTHOM 8> +<MSETG VTHMD 9> +<MSETG VTADV 10> +<MSETG VTSAV 11> +<MSETG VTRES 12> +<MSETG VTCLR 13> +<MSETG VTCEW 14> +<MSETG VTCEL 15> +<MSETG VTERA 16> +<MSETG VTBEC 17> +<MSETG VTLID 18> +<MSETG VTCID 19> +<MSETG VTESC 20> + +<MSETG DPAG1 *200000*> +<MSETG DPAG2 *100000*> +; "TERMINAL MODE WORD (LEFT HALF ONLY)" +<MSETG TMDPY *400000*> +<MSETG TMSCR *200000*> +<MSETG TMMOR *100000*> +<MSETG TMMVR *040000*> +<MSETG TMMSM *020000*> +<MSETG TMVBL *010000*> +<MSETG TMITP *000001*> + +; "TERMINAL CHARACTERISTICS WORD" +<MSETG TCMOV *400000*> +<MSETG TCBS *200000*> +<MSETG TCHOM *100000*> +<MSETG TCCLR *040000*> +<MSETG TCSCL *020000*> +<MSETG TCLID *010000*> +<MSETG TCCID *004000*> +<MSETG TCVBL *002000*> +<MSETG TCMET *001000*> +<MSETG TCSCR *000400*> +<MSETG TCRSC *000200*> +<MSETG TCOVR *000100*> +<MSETG TCPRT *000001*> +; "ITS IOT BITS" +<MSETG TJDIS *4000*> +<MSETG TOERS *40000000000*> diff --git a/src/mprog1/acom.ujm019 b/src/mprog1/acom.ujm019 new file mode 100644 index 00000000..9f9a9d5a --- /dev/null +++ b/src/mprog1/acom.ujm019 @@ -0,0 +1,413 @@ +<PACKAGE "ACOM"> + +<ENTRY GET-F/A-DEFAULTS> + +<USE "AHACK" "EUTL" "CALSYM" "CALRDR" "CALCOM" "EHACK" + "COMMAND" "BUF" "ACHECK" "AMAKE" "EGROUP" "ANOTES"> + +<USE-DEFER "ALIB"> + +<DEFINE NOTES-FUN (CALL ITEMX GNAM FILE "EXTRA" (OUTCHAN .OUTCHAN)) + #DECL ((CALL) ATOM (ITEMX) <OR STRING ATOM FALSE> (GNAM) <OR FALSE ATOM> + (FILE) STRING (OUTCHAN) <SPECIAL <OR CHANNEL FALSE>>) + <COND (.ITEMX + <COND (<NOT <MEMBER "TTY:" .FILE>> + <SET OUTCHAN <OPEN "PRINT" .FILE>>)> + <COND (<TYPE? .ITEMX STRING> + <COND (<NOT .GNAM><SET GNAM &&NOTES&&>)> + <GROUP-LOAD .ITEMX .GNAM> + <SET ITEMX .GNAM>)> + <EVAL <FORM .CALL .ITEMX>> + <COND (<NOT <MEMBER "TTY:" .FILE>> + <CLOSE .OUTCHAN>)>)>> + +<DEFINE MYABSTR-NOTES (ITEM GNA FILE) + #DECL ((ITEM) <OR FALSE ATOM STRING>) + <NOTES-FUN ABSTR-NOTES .ITEM .GNA .FILE>> + +<DEFINE MYABSTR-SHORT (ITEM GNA FILE) + #DECL ((ITEM) <OR FALSE ATOM STRING>) + <NOTES-FUN ABSTR-SHORT .ITEM .GNA .FILE>> + +<DEFINE MYFILE-ABSTRACT F-A-ACT ("OPTIONAL" GROUP "EXTRA" GNAME (GCONT ())) + #DECL ((INFILE) <OR FALSE STRING ATOM> (OFILE) STRING (LOAD?) ANY + (GNAME) <OR FALSE ATOM> (GCONT) LIST (F-A-ACT) <SPECIAL ACTIVATION>) + <COND (<ASSIGNED? GROUP> + <SET INFILE <READER '[] "group named" '[" +Name of the group to abstract" ""] '["ATOM"]>>) + (<PROG ((OBLIST (<GET INITIAL OBLIST><ROOT>))) + #DECL ((OBLIST) <SPECIAL <LIST [REST OBLIST]>>) + <SET INFILE <READER '[] "file named" '[" +Name of the file to abstract" ""] '["FILE"]>>>)> + <OR .INFILE <RETURN T .F-A-ACT>> + <PROG DO-OFILE-OVER () + <SET OFILE <READER '[#FALSE () #FALSE () <COND (<TYPE? .INFILE ATOM> + <PNAME .INFILE>) + (.CALICO-NM1)> "ABSTR"] + "to output file" + '[" +File to output the abstracts to." ""] + '["FILE"]>> + <OR .OFILE <AGAIN .F-A-ACT>> + <SET GRPNAME <READER '[] "to composer group" '[" +If given, the abstracts will be loaded for the composer with this name"""] '["ATOM"]>> + <AND <=? #FALSE (#FALSE ()) .GRPNAME> + <AGAIN .DO-OFILE-OVER>>> + <FILE-ABSTRACT .INFILE .OFILE> + <COND (<AND .GRPNAME <ASSIGNED? .GRPNAME>> + <TERPRI> + <PRINC "Loading for composer"> + <MAPF <> + <FUNCTION (X) + <SET GCONT (<ADD-OBJECT .X> !.GCONT)>> + ..GRPNAME> + <AND <NOT <EMPTY? .GCONT>> + <PUT <GET Abstract AGROUP-TABLE> + 2 + [<PNAME .GRPNAME> + .GCONT + !<2 <GET Abstract AGROUP-TABLE!>>]>> + <COMMAND-UPDATE> + <TERPRI> + <PRINC "Ready">)>> + +<DEFINE GET-BATCH-JOB (FRFILE TOFILE RECFILE REABS AUTH "AUX" OUTC) + #DECL ((FRFILE TOFILE RECFILE) STRING + (OUTC) <OR CHANNEL FALSE>) + <COND (<SET OUTC <OPEN "PRINT" "MABSTR;> BATABS">> + <PRINT .FRFILE .OUTC> + <PRINT .TOFILE .OUTC> + <PRINT .RECFILE .OUTC> + <PRINT .REABS .OUTC> + <PRINT <COND (<EMPTY? .AUTH><SNAME>) + (T <VECTOR !.AUTH>)> + .OUTC> + <CLOSE .OUTC> + T) + (T <PRINT .OUTCHAN>)>> + +<DEFINE MYCHECK-ABSTR (SYMLIST) + #DECL ((SYMLIST) STRUCTURED) + <MAPF <> ,CHECK-ABSTR <SYM-SORT .SYMLIST>>> + +<DEFINE MYOLD-NEW (SYMLIST) + #DECL ((SYMLIST) STRUCTURED) + <MAPF <> ,OLD-NEW <SYM-SORT .SYMLIST>>> + +<DEFINE DUMPER-ALIB (ID FILE NAME) + #DECL ((ID) <OR LIST FIX FALSE STRING> (FILE) STRING (NAME) ATOM) + <COND (.ID + <COND (<MEMBER " NAME ABSTR" .FILE> + <EVAL <FORM .NAME .ID>>) + (<EVAL <FORM .NAME .ID .FILE>>)>) + (T)>> + +<DEFINE MYLOAD-ENTRY (ID "EXTRA" IRS-IN) + #DECL ((ID) <OR FIX STRING FALSE> (IRS-IN) ANY) + <COND (.ID + <SET IRS-IN <LOAD-ENTRY .ID>> + <COND (.IRS-IN + <ADD-OBJECT .IRS-IN> + <COMMAND-UPDATE>) + (<PRINT .IRS-IN>)>) + (T)>> + +<DEFINE MYLOAD-PACKAGE (ID NAME? "EXTRA" IRS-IN) + #DECL ((ID) <OR FIX STRING FALSE> (NAME? IRS-IN) ANY) + <COND (.ID + <SET IRS-IN <LOAD-PACKAGE .ID .NAME?>> + <COND (<NOT .IRS-IN><PRINT .IRS-IN>) + (<TYPE? <1 .IRS-IN> VECTOR> + <MAPF <> ,ADD-OBJECT .IRS-IN> + <COMMAND-UPDATE>) + (<TYPE? <1 .IRS-IN> STRING> + <PRINT .IRS-IN>)>) + (T)>> + +<DEFINE MYLOAD-BUNCH (ID "EXTRA" IRS-IN) + #DECL ((ID) <OR FALSE LIST> (IRS-IN) ANY) + <COND (.ID + <SET IRS-IN <LOAD-BUNCH .ID>> + <OR <EMPTY? .IRS-IN> + <PROG () + <MAPF <> ,ADD-OBJECT .IRS-IN> + <COMMAND-UPDATE>>>) + (T)>> + +<DEFINE GET-F/A-DEFAULTS ("EXTRA" FOO) + #DECL ((FOO) ANY) + <SET FOO + <READER '[] " +Record file to " '[" +If a file is given, a record of the abstracting will be printed into the file +rather than to the tty" ""] '["FILE"]>> + <COND (<=? .FOO <STRING .CALICO-DEV !\: .CALICO-SNM !\; + .CALICO-NM1 !\ .CALICO-NM2>> + <AND <ASSIGNED? RECORD><UNASSIGN RECORD>>) + (<SET RECORD .FOO>)> + <SET FOO <READARGS '[] " +Items to re-abstract " '[" +If given, only those items named will be abstracted" ""] '["ATOM" "MULT"]>> + <COND (<EMPTY? <1 .FOO>><AND <ASSIGNED? REABSTRACT><UNASSIGN REABSTRACT>>) + (<SET REABSTRACT <1 .FOO>>)> + <SET FOO <READARGS '[] " +Author (if not <SNAME>) " '[" +If given, the author field will be set to the names given, instead of <SNAME>" ""] '["STRING" "MULT"]>> + <COND (<EMPTY? <1 .FOO>><AND <ASSIGNED? AUTHOR><UNASSIGN AUTHOR>>) + (<SET AUTHOR <VECTOR !<1 .FOO>>>)> + <SET FOO <READER '[] "Quiet-mode? " '[" +If non-false, no output will go to tty (so you need not hang the tty waiting)" ""] '["ANY"]>> + <COND (.FOO <SET QUIET T>)(<SET QUIET <>>)>> + + +<SETG IRSTAB + <MAKEBST "Library retrieval commands" + %<BSTSORT + '["Load.entry" + '<CALICO-COMMAND ,MYLOAD-ENTRY + '[[] + "with id" + [" +IRS identifier for the entry to be loaded from MUDIRS data base +(either number or full trailered name)"""] + ["STRING" "FIX"]]> + "Load.package" + '<CALICO-COMMAND ,MYLOAD-PACKAGE + '[[] + "with id" + [" +IRS identifier for the package to be loaded from MUDIRS data base +(either number or full trailered name)"""] + ["STRING" "FIX"] + [] + "Name only?" + [" +If non-false, only the names of the items in the package will be printed"""] + ["ANY"]]> + "Load.bunch" + '<CALICO-COMMAND ,MYLOAD-BUNCH + '[[] + "with id's" + [" +The IRS identifiers of the items to be loaded from MUDIRS data base +(either numbers or full trailered names)"""] + ["FIX" "STRING" "MULT"]]> + "Dump.entry" + '<CALICO-COMMAND ,DUMPER-ALIB + '[[] + "with id" + [" +IRS Identifier of the entry to be dumped from MUDIRS to a file +(either number or full unique trailered name)" ""] + ["FIX" "STRING"] + [#FALSE () #FALSE () " NAME" "ABSTR"] ;"NOTE SPACES" + "to file (opt)" + [" +File into which the entry will be dumped (default is <name> ABSTR)" ""] + ["FILE"] + #FALSE (DUMP-ENTRY) "" [] ["SYM"]]> + "Dump.package" + '<CALICO-COMMAND ,DUMPER-ALIB + '[[] + "with id" + [" +IRS Identifier of the package to be dumped from MUDIRS data base to a file +(either a number or full unique trailered name)" ""] + ["FIX" "STRING"] + [#FALSE () #FALSE () " NAME" "ABSTR"] ;"NOTE SPACES" + "to file (opt)" + [" +File into which the package will be dumped (default is <name> ABSTR)" ""] + ["FILE"] + #FALSE (DUMP-PACKAGE) ""[]["SYM"]]> + "Dump.bunch" + '<CALICO-COMMAND ,DUMPER-ALIB + '[[] + "with id's" + [" +IRS Identifiers of the entries to be dumped from MUDIRS data base to a file +(either numbers or full trailered names)" ""] + ["FIX" "STRING" "MULT"] + [#FALSE () #FALSE () " NAME" "ABSTR"] + "to file (opt)" + [" +File into which the entries will be dumped (default is <name> ABSTR)" ""] + ["FILE"] + #FALSE (DUMP-BUNCH) ""[]["SYM"]]> + "Delete.entry" + '<CALICO-COMMAND #FUNCTION ((X)<AND .X <DELETE-ENTRY .X>>) + '[[] + "with id" + [" +Identifier of the entry to be deleted from the MUDIRS data base" ""] + ["FIX" "STRING"]]> + "Delete.package" + '<CALICO-COMMAND #FUNCTION ((X)<AND .X <DELETE-PACKAGE .X>>) + '[[] + "with id" + [" +Identifier of the package to be deleted from the MUDIRS data base" ""] + ["FIX" "STRING"]]>]>>> + +<ADDTABLE ,IRSTAB> + + + +<SETG AB-CREATE-COM + <MAKEBST "Abstract creation commands" + %<BSTSORT + '["File.abstract" + '<MYFILE-ABSTRACT> + "Group.abstract" + '<MYFILE-ABSTRACT T> + "Abstract.notes" + '<CALICO-COMMAND ,MYABSTR-NOTES + '[GRPFIL + [] + "for group-name/file-spec" + [" +Enter name of group or file-specification for which ABSTR-NOTES will be done" ""] + ["ATOM" "STRING"] + <COND (<TYPE? .GRPFIL ATOM> + <CHTYPE (.GRPFIL) FALSE>) + ([])> + "with group name (opt)" + [" +This will give the loaded file a group name (if you will need it later)" ""] + ["ATOM"] + ["TTY"] + "to (opt) file" + [" +File to recieve the output"] + ["FILE"]]> + "Batch.abstract" + '<CALICO-COMMAND ,GET-BATCH-JOB + '[[] + "from file" + ["" ""] + ["FILE"] + [#FALSE () #FALSE () #FALSE () "ABSTR"] + "to file (opt)" + ["" ""] + ["FILE"] + [#FALSE () #FALSE () #FALSE () "ARCORD"] + "record to file" + ["" ""] + ["FILE"] + [] + "Items to re-abstract" + [" +If given, only those items named will be abstracted" ""] + ["ATOM" "MULT"] + [] + "Author (if not <SNAME>)" + [" +If given, the author field will be set to this value" ""] + ["STRING" "MULT"]]> + "Set.file.abstract.defaults" + '<GET-F/A-DEFAULTS> + "Abstract.short" + '<CALICO-COMMAND ,MYABSTR-SHORT + '[GRPFIL + [] + "for group-name/file-spec" + [" +Enter name of group or file-specification for which short checking will be done" ""] + ["ATOM" "STRING"] + <COND (<TYPE? .GRPFIL ATOM> + <CHTYPE (.GRPFIL) FALSE>) + ([])> + "with group name (opt)" + [" +This will give the loaded file a group name (if you will need it later)" ""] + ["ATOM"] + ["TTY"] + "to (opt) file" + [" +File to recieve the output"] + ["FILE"]]> + "Check.file" + '<CALICO-COMMAND ,CHECK-FILE + '[[] + "named" + [" +All abstracts in the file specified will be checked for correctness of form" ""] + ["FILE"]]> + "Check.abstract" + '<CALL/APPLY '<CALICO-COMMAND ,MYCHECK-ABSTR + [,OBJLOADTAB + "named" + [" +The abstract provided will be checked for correctness of form" ""] + ["SYM""MULT"]]> LOAD> + "Old.new" + '<CALL/APPLY '<CALICO-COMMAND ,MYOLD-NEW + [,OBJLOADTAB + "for abstract(s)" + [" +Abstracts provided will be changed from the old format to the new format +(i.e. NOTES field will be added, etc.)" ""] + ["SYM""MULT"]]> LOAD>]>>> + +<ADDTABLE ,AB-CREATE-COM> + + + +<SETG COMTAB + <MAKEBST "XABSTR commands" + %<BSTSORT + '[ + "Copy.abstract" + '<CALL/APPLY '<CALICO-COMMAND ,COPY-ABSTR + [,OBJONLYTAB + "named" + '[" +Name of the abstract or template to be copied" ""] + '["SYM"] + '[] + "to unique name(s)" + '[" +Names for the copies of the abstracts (these will be placed in the unique +name field. All other fields will be copied.)" ""] + '["ATOM" "MULT"] + '[] + "to be known as" + '["optional group name for the new abstracts" ""] + '["ATOM"]]> LOAD> + "Create.template.field" + '<CREATE-TEMPLATE> + "Save.abstracts" + '<CALICO-COMMAND ,ABSTR-SAVE + '[[#FALSE () #FALSE () "ABSTR" "WORLD"] + "to file (opt.)" + [" +Saves the abstracts (all of them) in a file. Default file is ABSTR WORLD. +Also saved are scratches and automatic modes." ""] + ["FILE"] + [] + "only dump scratches and auto-modes?" + [" +If non-false, will dump automatic modes and scratches only" ""] + ["ATOM"]]> + "Restore.abstracts" + '<CALICO-COMMAND ,ABSTR-RESTORE + '[[#FALSE () #FALSE () "ABSTR" "WORLD"] + "from file (opt.)" + [" +Restores a file of abstracts as may have been SAVEd previously. Default file +is ABSTR WORLD." ""] + ["FILE"]]> + "Report.bug" + '<ABSTR-BUG> + "Help.for.node" + '<CALICO-COMMAND ,GET-HELP + '[<GET Abstract ALLNODES> + "named" + [" +Name of the node for which information is sought" ""] + ["SYM"]]>]>>> + +<ADDTABLE ,COMTAB> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog1/calndr.uga158 b/src/mprog1/calndr.uga158 new file mode 100644 index 00000000..0a80f672 --- /dev/null +++ b/src/mprog1/calndr.uga158 @@ -0,0 +1,1827 @@ +" CALNDR + +For operating instructions see GCA;CALNDR DOC + +Global variables: + + INPUT current command argument string + (next 5 PARSEd out of ,INPUT by PARSE-INPUT) + BUFFER association; holds text to-be-processed + (including control characters) + + TEXT literal from ,INPUT - appointments, etc. + + TAGTYPE one of !\D !\W !\M !\Q !\Y, #FALSE () + + START minutes after 00:00 + + STOP as START + + DURATION minutes, default. Reset on each specification + + DATELIST UVECTOR of dates specified in command line + + CURMOD current mode of display (1=D, 2=M, 3=Y) + with YEAR, MONTH, and DAY properties + indicating the current date of display + PREVMOD association; previous mode of display + DATE association; current date + + TODAY '=' value; GDECL'd + + CURPOS current cursor position - one two-list + for each display mode (x and y components) + + POSNLIST one four-list for each display mode; + (x-offset x-step y-offset y-step) + GDECL'd + + MONTHSTR list of string representations for months + GDECL'd + + DATA-CHAN channel for REF and CALNDR structure + GDECL'd + + DISPLAY-CHAN channel for main cursor + (also used for hardcopy output) + GDECL'd + + HARD-CHAN hardcopy output channel, kept open + until exit + GDECL'd + + MACROS list of SETG instructions to define + global variables (in the `calmacs' oblist) + which hold macro definitions. False until + a macro is called; then loaded from SNAME;CALNDR MACROS + and eval'd. File replaced if used at all. + + +Contained within CALNDR DAT, CALNDR's database, in order: + + REF reference month (see diagram below) + + CALNDR list of months: main database, + arranged as follows: + + #CALENDAR ![#MONTH ![#DAY[] [] [] ... []] each month holds a list for + #MONTH ![#DAY[] [] [] ... []] each day of that month... + #MONTH ![#DAY[] [] [] ... []] + #MONTH ![#DAY[] [] [] ... []] <- REF = 4; this month + #MONTH ![#DAY[] [] [] ... []] (default) + . + . + . + #MONTH ![#DAY[] [] [] ... []]] + \ + list of (defaultly) + 25 months, updated + the first of each + month by GCA;CALNDR + MAINT which rests off + the first (oldest, 3 + ago) month and tacks + on a new list of the + appropriate number of + days. + + Days within CALNDR look like this: + +#DAY [{#TAGS [5 STRING]} {#EVENT [FIX FIX STRING] #EVENT [FIX FIX STRING] ...}] + + where {} is optional. Events are kept sorted according + to times. + + + +See also GCA;CALNDR DOC + GCA;CALNDR MAINT + GCA;CALNDR INIT + + + + + + macro definitions first" + +<DEFMAC SAFETY () ;"dump calendar to disk" + <FORM PROG () + '<RESET ,DATA-CHAN> ;"_CLNDR > until" + '<GC-DUMP ,REF ,DATA-CHAN> ;" exit" + '<GC-DUMP ,CALNDR ,DATA-CHAN>>> + +<DEFMAC FC ('DATE) ;"fresh copy of a date" + <FORM BOOT DATE + <FORM NTH .DATE 1> + <FORM NTH .DATE 2> + <FORM NTH .DATE 3>>> + +<DEFMAC CURDATE ("OPTIONAL" 'DATE) ;"get/put current date" + <COND (<ASSIGNED? DATE> + <FORM PROG () + <FORM PUTPROP CURMOD DATE .DATE> + <FORM GETPROP CURMOD DATE>>) + (ELSE + '<FC <GETPROP CURMOD DATE>>)>> + +<DEFMAC CURYAR ("OPTIONAL" 'YEAR) + <COND (<ASSIGNED? YEAR> + <FORM PROG () + <FORM PUTPROP CURMOD DATE + <FORM Y <FORM CURDATE> .YEAR>> + <FORM GETPROP CURMOD DATE>>) + (ELSE + <FORM NTH <FORM CURDATE> 1>)>> + +<DEFMAC CURMON ("OPTIONAL" 'MONTH) + <COND (<ASSIGNED? MONTH> + <FORM PROG () + <FORM PUTPROP CURMOD DATE + <FORM M <FORM CURDATE> .MONTH>> + <FORM GETPROP CURMOD DATE>>) + (ELSE + <FORM NTH <FORM CURDATE> 2>)>> + +<DEFMAC CURDAY ("OPTIONAL" 'DAY) + <COND (<ASSIGNED? DAY> + <FORM PROG () + <FORM PUTPROP CURMOD DATE + <FORM D <FORM CURDATE> .DAY>> + <FORM GETPROP CURMOD DATE>>) + (ELSE + <FORM NTH <FORM CURDATE> 3>)>> + +<DEFMAC DATE-SET ('INTO 'FROM) + <FORM PROG () + <FORM PUT .INTO 1 <FORM NTH .FROM 1>> + <FORM PUT .INTO 2 <FORM NTH .FROM 2>> + <FORM PUT .INTO 3 <FORM NTH .FROM 3>>>> + +<DEFMAC Y ('DATE "OPTIONAL" 'YEAR) + <COND (<ASSIGNED? YEAR> + <FORM PUT .DATE 1 .YEAR>) + (ELSE + <FORM NTH .DATE 1>)>> + +<DEFMAC M ('DATE "OPTIONAL" 'MONTH) + <COND (<ASSIGNED? MONTH> + <FORM PUT .DATE 2 .MONTH>) + (ELSE + <FORM NTH .DATE 2>)>> + +<DEFMAC D ('DATE "OPTIONAL" 'DAY) + <COND (<ASSIGNED? DAY> + <FORM PUT .DATE 3 .DAY>) + (ELSE + <FORM NTH .DATE 3>)>> + +<DEFMAC PREVMOD ("OPTIONAL" 'MODE) + <COND (<ASSIGNED? MODE> + <FORM PUTPROP CURMOD PREVMOD .MODE>) + (ELSE + <FORM GETPROP CURMOD PREVMOD>)>> + +<DEFMAC BUFFER ("OPTIONAL" 'TEXT) ;"get/put input buffer" + <COND (<ASSIGNED? TEXT> + <FORM PUTPROP INPUT BUFFER .TEXT>) + (ELSE + <FORM GETPROP INPUT BUFFER>)>> + +<DEFMAC BUFF ('MORE) ;"add to input buffer" + <FORM BUFFER <FORM STRING '<BUFFER> .MORE>>> + +<DEFMAC FFUB ('EROM) ;"add to front of input buffer" + <FORM BUFFER <FORM STRING .EROM '<BUFFER>>>> + +<DEFMAC CHOP ('ATM "OPTIONAL" ('AMT 1)) + <FORM SET .ATM + <FORM CHTYPE + <FORM REST <FORM LVAL .ATM> .AMT> + <FORM TYPE <FORM LVAL .ATM>>>>> + +<DEFMAC GCHOP ('ATM "OPTIONAL" ('AMT 1)) ;"to complement CHOP" + <FORM SETG .ATM + <FORM CHTYPE + <FORM REST <FORM GVAL .ATM> .AMT> + <FORM TYPE <FORM GVAL .ATM>>>>> + +<DEFMAC X-POS ("OPTIONAL" 'VALU ('MODE ',CURMOD)) ;"get/put current x position" + <COND (<ASSIGNED? VALU> ;"as a function of the display mode" + <FORM SETG ;"in units as per ,POSNLIST" + CURPOS + <FORM PUT + <FORM GVAL CURPOS> + .MODE + <FORM PUT + <FORM NTH <FORM GVAL CURPOS> .MODE> + 1 + .VALU>>>) + (ELSE + <FORM NTH <FORM NTH <FORM GVAL CURPOS> .MODE> 1>)>> + +<DEFMAC Y-POS ("OPTIONAL" 'VALU ('MODE ',CURMOD)) + <COND (<ASSIGNED? VALU> + <FORM SETG + CURPOS + <FORM PUT + <FORM GVAL CURPOS> + .MODE + <FORM PUT + <FORM NTH <FORM GVAL CURPOS> .MODE> + 2 + .VALU>>>) + (ELSE + <FORM NTH <FORM NTH <FORM GVAL CURPOS> .MODE> 2>)>> + +<DEFMAC UPDATE-DISPLAY () ;"clean sweep over entire screen" + <FORM PROG () + '<APPLY ,<NTH [DAY MONTH YEAR] ,CURMOD>> ;"invoke display subr" + <EXPAND '<PREVMOD ,CURMOD>> ;"and set prevmod">> + +<DEFMAC ^ ('STR) <FORM CHTYPE .STR COMMAND-STRING>> ;"show carets in commands" + + ;"initialize the environment" + +<PROG () + <NEWTYPE COMMAND-STRING STRING '<PRIMTYPE STRING>> + <PRINTTYPE + COMMAND-STRING + <FUNCTION (STR) #DECL ((STR) COMMAND-STRING) + <MAPF <> + <FUNCTION (C) #DECL ((C) CHARACTER) + <PRINC <COND (<AND <N=? <ASCII .C> *033*> + <L? <ASCII .C> 32>> + <PRINC "^"> + <ASCII + <+ <ASCII .C> + <ASCII !\A> -1>>) + (.C)>>> + .STR> + .STR>> + <NEWTYPE DATE UVECTOR '!<UVECTOR [3 FIX]>> ;"![y m d!]" + <PRINTTYPE + DATE + <FUNCTION (D) #DECL ((D) DATE) + <PRINC <PDATE .D>>>> + <NEWTYPE EVENT VECTOR '<VECTOR [2 FIX] STRING>> + <NEWTYPE TAGS VECTOR '<VECTOR [5 STRING]>> + <NEWTYPE DAY VECTOR '<OR <VECTOR [REST EVENT]> + <VECTOR TAGS [REST EVENT]>>> + <NEWTYPE MONTH UVECTOR '<UVECTOR [REST DAY]>> + <NEWTYPE CALENDAR UVECTOR '<UVECTOR [REST MONTH]>> + <DEFINE BOOT (TYPE "TUPLE" TUP) ;"Build Object Of Type" + #DECL ((TYPE) ATOM + (TUP) TUPLE) + <CHTYPE <,<TYPEPRIM .TYPE> !.TUP> .TYPE>> + <GDECL (INPUT) STRING + (TODAY) DATE + (CURMOD REF STOP) FIX + (START) <OR FIX FALSE> + (MONTHSTR) !<LIST [24 STRING]> + (CURPOS) !<LIST [3 !<LIST FIX FIX>]> + (POSNLIST) !<LIST [3 !<LIST [4 FIX]>]> + (CALNDR) CALENDAR + (DATELIST) <UVECTOR [REST DATE]> + (DURATION) FIX + (TEXT) STRING + (TAGTYPE) <OR STRING CHARACTER FALSE> + (DISPLAY-CHAN DATA-CHAN HARD-CHAN) <OR CHANNEL FALSE> + (MACROS) <OR FALSE <LIST [REST FORM]>>> + <USE "DATIME" "MACROS" "TTY" "JCL" "SORTX"> + <DECL-CHECK 'T> + <SETG DURATION 30> ;"initial duration default" + <SETG START %<>> + <SETG TEXT ""> + <SETG INPUT ""> + <PREVMOD 1> ;"previous mode" + <SETG CURMOD 1> ;"initial display: DAY" + <SETG CURPOS ((0 0) (0 0) (0 0))> ;"per display mode" + <SETG POSNLIST '((0 0 0 0) (4 11 3 3) (5 24 3 3))> + <SETG MONTHSTR + '("Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec" + "JAN" "FEB" "MAR" "APR" "MAY" "JUN" "JUL" "AUG" "SEP" "OCT" "NOV" "DEC")> + <SETG MACROS %<>> + <GUNASSIGN HARD-CHAN> ;"assigned when opened and open when assigned" + <FLOAD "GCA;CRUFT NBIN"> ;"thanks to TAA"> + + "Controlling function for calendar system - + invoke with <CALENDAR>$" + +<DEFINE CALENDAR ("AUX" TEMP "ACT" RUFFLED) + #DECL ((TEMP) ANY + (RUFFLED) ACTIVATION) + + ;"initialize and load old calendar" + + <SNAME <UNAME>> ;"user's database only" + <SETG TODAY <FC <DATE>>> + <CURDATE <FC ,TODAY>> ;"start out looking at today" + <BUFFER <COND (<READJCL>) (ELSE "")>> ;"incoming info here" + <AND <NOT <FILE-EXISTS? "CALNDR DAT">> ;"if no database," + <AND <NOT <DECL? <SET TEMP <LPARSE ,INPUT>> '<LIST FIX FIX>>> + <SET TEMP '(25 4)>> + <FLOAD "GCA;INIT >"> ;" make one" + <INIT <NTH .TEMP 1> <NTH .TEMP 2>> + <GUNASSIGN INIT>> + <SETG DATA-CHAN <OPEN "READB" "CALNDR DAT">> ;"retrieve database" + <SETG REF <GC-READ ,DATA-CHAN>> ;"this month in ,CALNDR" + <SETG CALNDR <GC-READ ,DATA-CHAN>> ;"calendar database" + <CLOSE ,DATA-CHAN> + <SETG DATA-CHAN <OPEN "PRINTB" "_CLNDR >">> ;"temporary-updated" + <REOPEN> ;"send outchan to echo area" + <SCML 4 ,INCHAN> ;"input window" + <SETG DISPLAY-CHAN <OPEN "PRINT" "TTY:">> ;"pretty pictures here" + <PUT ,DISPLAY-CHAN 13 *277777777777*> ;"avoid system cr/lf" + <PUT .OUTCHAN 13 *277777777777*> ;"(also to echo area)" + <TTYECHO ,INCHAN %<>> ;"reenable echo by QUITting" + <TYI> ;"drop pending esc" + <UPDATE-DISPLAY> + + <REPEAT (CHAR "ACT" MAIN) + #DECL ((CHAR) CHARACTER (MAIN) ACTIVATION) + <SET CHAR <DEBUFFER>> ;"text to ,INPUT" + <CASE ,==? .CHAR + (%<ASCII *021*> ;"^Q, quit" + <CLEAN-QUIT>) + (%<ASCII *027*> ;"^W, list macro(s)" + <LIST-MACROS>) + (%<ASCII *030*> ;"^X, do or define macro" + <FFUB <COND (<GET-MACRO-DEFN>) (ELSE "")>> + <AGAIN .MAIN>) + (%<ASCII *031*> ;"^Y, delete macro" + <FORGET-MACRO> + <AGAIN .MAIN>) + DEFAULT + (<WARN <PRESTIDIGITATE .CHAR>> + <FFUB ,INPUT>) ;"if input not processed, restore it.">>> + +<DEFINE CLEAN-QUIT () + <ECHO "Quit"> + <SAFETY> + <CLOSE ,DATA-CHAN> + <RENAME "CALNDR DAT"> + <RENAME "_CLNDR >" TO "CALNDR DAT"> + <AND ,MACROS + <SET CHAN <OPEN "PRINT" "CALNDR MACROS">> + <PPRINT ,MACROS .CHAN> + <CLOSE .CHAN>> + <AND <GASSIGNED? HARD-CHAN> + <CLOSE ,HARD-CHAN> + <NOT <SETG HARD-CHAN %<>>> ;"here we come, WARN!" + <AND <WARN "Tipple hardcopy (space for yes)? " !\ > + <FILECOPY <OPEN "READ" "_HCAL >"> + <OPEN "PRINT" <STRING ".LPTR.;" <SNAME> " ^H">>> + <RENAME "_HCAL >">>> + <PRNT "C"> + <QUIT>> + +<DEFINE DEBUFFER ("AUX" CHAR) + #DECL ((CHAR) CHARACTER) + <SET CHAR %<ASCII *041*>> ;">040" + <SETG INPUT + <MAPR ,STRING + <FUNCTION (STR) + #DECL ((STR) STRING) + <AND <L? <ASCII <SET CHAR <NTH .STR 1>>> *037*> + <BUFFER <REST .STR>> + <MAPSTOP>> + .CHAR> + <BUFFER>>> + <COND (<L? <ASCII .CHAR> *040*> + .CHAR) + (ELSE + <ECHO <^ <BUFFER>>> + <KBI>)>> + +<DEFINE KBI ("AUX" CHAR) + #DECL ((CHAR) CHARACTER) + <REPEAT (TEMP) + #DECL ((TEMP) ANY) + <SET CHAR <TYI>> + <CASE ,==? .CHAR + (%<ASCII *177*> + <COND (<0? <SET TEMP <LENGTH <BUFFER>>>> ;"del" + <ECHO %<ASCII *007*>>) + (ELSE + <PRINC <NDEL <NTH <BUFFER> .TEMP>>> + <BUFFER + <SUBSTRUC <BUFFER> 0 <- .TEMP 1>>>)>) + (%<ASCII *026*> <ECHO <^ <BUFFER>>>) + (%<ASCII *012*> <BUFFER ""> <ECHO "">) + (%<ASCII *035*> ;"^], quote" + <PRINC <^ <STRING <SET TEMP <TYI>>>>> + <BUFF .TEMP>) + DEFAULT + (<COND (<L? <ASCII .CHAR> *040*> + <BUFF .CHAR> + <RETURN <DEBUFFER>>) + (ELSE + <PRINC .CHAR> ;"echo 'normal' characters here" + <BUFF .CHAR>)>)>>> + + "macro handling routines" + +<DEFINE GET-MACRO-DEFN ("AUX" NAME MACDEF "ACT" G-M-D) + #DECL ((NAME) ATOM + (MACDEF) <OR STRING FORM> + (G-M-D) ACTIVATION) + <AND <OR <=? ,INPUT ""> + <N=? + <TYPE <SET NAME <PARSE <STRING ,INPUT "!-calmacs">>>> + ATOM>> + <WARN "Unusable macro name"> + <SETG INPUT ""> + <RETURN %<> .G-M-D>> + <AND <NOT ,MACROS> + <LOAD-MACROS>> + <COND (<GASSIGNED? .NAME> + <SETG INPUT ""> + <RETURN ,.NAME .G-M-D>) + (ELSE + <SET MACDEF ""> + <PRINC ": "> + <REPEAT (CHAR TEMP) + #DECL ((CHAR) CHARACTER (TEMP) ANY) + <SET CHAR <TYI>> + <CASE ,==? .CHAR + (%<ASCII *030*> <RETURN>) ;"^X gets us out" + (%<ASCII *012*> <SET MACDEF ""> <RETURN>);"^J fub" + (%<ASCII *026*> + <ECHO <^ <STRING ,INPUT ": " .MACDEF>>>) + (%<ASCII *177*> + <COND (<0? <SET TEMP <LENGTH .MACDEF>>> + <PRINC %<ASCII *007*>>) + (ELSE + <PRINC <NDEL <NTH .MACDEF .TEMP>>> + <SET MACDEF + <SUBSTRUC .MACDEF 0 <- .TEMP 1>>>)>) + (%<ASCII *035*> + <PRINC <^ <STRING <SET TEMP <TYI>>>>> + <SET MACDEF <STRING .MACDEF .TEMP>>) + DEFAULT + (<PRINC <^ <STRING .CHAR>>> + <SET MACDEF <STRING .MACDEF .CHAR>>)>> + <COND (<=? .MACDEF ""> ;"delete or abort defn" + <REMOVE .NAME> + <SETG INPUT ""> + <RETURN %<> .G-M-D>) + (ELSE + <EVAL <SET MACDEF <FORM SETG .NAME .MACDEF>>> + <SETG MACROS (!,MACROS .MACDEF)> + <RETURN ,INPUT .G-M-D>)>)>> + +<DEFINE FORGET-MACRO ("AUX" NAME "ACT" F-M) + #DECL ((NAME) ANY + (F-M) ACTIVATION) ;"returns T regardless" + <AND <OR <=? ,INPUT ""> + <N=? + <TYPE <SET NAME <PARSE <STRING ,INPUT "!-calmacs">>>> + ATOM>> + <WARN "Unusable macro name"> + <SETG INPUT ""> + <RETURN 'T .F-M>> + <COND (,MACROS ;"is this method or the serial one better?" + <COND (<GASSIGNED? .NAME> + <AND <NOT + <WARN + <STRING "Space to undefine " ,INPUT " -"> !\ >> + <RETURN 'T .F-M>> + <REMOVE .NAME> + <REPEAT ((COUNT 1)) + #DECL ((COUNT) FIX) + <AND <=? <NTH <NTH ,MACROS .COUNT> 2> .NAME> + <SETG MACROS + <LIST !<SUBSTRUC ,MACROS 0 + <- .COUNT 1>> + !<REST ,MACROS .COUNT>>>> + <AND <G? <SET COUNT <+ 1 .COUNT>> + <LENGTH ,MACROS>> + <RETURN>>> + <RETURN 'T .F-M>) + (ELSE + <WARN <STRING "Macro " ,INPUT " undefined">> + <SETG INPUT ""> + <RETURN 'T .F-M>)>) + (ELSE + <LOAD-MACROS> + <FORGET-MACRO>)>> + +<DEFINE LIST-MACROS ("AUX" (MACRO-NAMELIST []) + MACRO-ALIST + OB + "ACT" L-M) + #DECL ((MACRO-NAMELIST) <VECTOR [REST STRING]> + (MACRO-ALIST) <VECTOR [REST ATOM]> + (OB) <OR FALSE OBLIST> + (L-M) ACTIVATION) + <AND <NOT ,MACROS> + <LOAD-MACROS>> + <AND <OR <NOT <SET OB <GETPROP calmacs OBLIST>>> + <PROG () + <MAPF %<> + <FUNCTION (L) #DECL ((L) <LIST [REST ATOM]>) + <MAPF %<> + <FUNCTION (A) #DECL ((A) ATOM) + <SET MACRO-NAMELIST + [<MACRO-PNAME .A> + !.MACRO-NAMELIST]>> + .L>> + .OB> + <EMPTY? .MACRO-NAMELIST>>> + <WARN "No macros defined"> + <SETG INPUT ""> + <RETURN 'T .L-M>> + <SORT %<> .MACRO-NAMELIST> + <SET MACRO-ALIST + <MAPF ,VECTOR + <FUNCTION (N) #DECL ((VALUE) ATOM (N) STRING) + <PARSE <STRING .N "!-calmacs">>> + .MACRO-NAMELIST>> + <PRNT "C"> + <PRNTCRLF><PRNTCRLF><PRNTCRLF> + <REPEAT ("ACT" RL1A) + <REPEAT ((COUNT 20)) + <PRNT <NTH .MACRO-NAMELIST 1>> + <PRNT ": "> ;":^I" + <PRNT <^ ,<NTH .MACRO-ALIST 1>>> + <PRNTCRLF> + <COND (<EMPTY? <CHOP MACRO-NAMELIST>> + <WARN "Restore -" %<ASCII *040*>> + <RETURN %<> .RL1A>)> + <CHOP MACRO-ALIST> + <AND <0? <SET COUNT <- .COUNT 1>>> + <RETURN %<>>>> + <AND <NOT <WARN "More definitions -" %<ASCII *040*>>> + <RETURN %<> .RL1A>>> + <UPDATE-DISPLAY>> + +<DEFINE MACRO-PNAME (A) ;"drop !-calmacs for printing" + #DECL ((VALUE) STRING + (A) ATOM) + <SUBSTRUC <UNPARSE .A> 0 <- <INSTR <UNPARSE .A> !\!> 1>>> + +<DEFINE LOAD-MACROS ("AUX" CHAN) + #DECL ((CHAN) CHANNEL) + <COND (<FILE-EXISTS? "CALNDR MACROS"> ;"editable" + <SET CHAN <OPEN "READ" "CALNDR MACROS">> + <SETG MACROS <READ .CHAN>> + <CLOSE .CHAN> + <EVAL ,MACROS>) ;"load definitions" + (ELSE ;"predefined macros go here" + <SETG MACROS +'(<SETG z!-calmacs "(\" *\")�(\"Z\");use ^R if tomorrow is sunday"> + <SETG m!-calmacs "(\" *\")�(\"M\")"> + <SETG t!-calmacs "(\" *\")�(\"T\")"> + <SETG w!-calmacs "(\" *\")�(\"W\")"> + <SETG r!-calmacs "(\" *\")�(\"R\")"> + <SETG f!-calmacs "(\" *\")�(\"F\")"> + <SETG s!-calmacs "(\" *\")�(\"S\")"> + <SETG tnx!-calmacs "(1-nov \"&&&R\") D">)> + <EVAL ,MACROS>)>> + + "supporting functions" + +<DEFINE PRESTIDIGITATE (OPERATION + "AUX" TEMP + "ACT" TOTOPLEV) + #DECL ((OPERATION) CHARACTER + (TEMP) ANY + (TOTOPLEV) <SPECIAL ACTIVATION>) + <CASE ,==? .OPERATION + DEFAULT + (<RETURN "Unrecognized control" .TOTOPLEV>) + (%<ASCII *025*> + <CURSOR-UP>) + (%<ASCII *004*> + <CURSOR-DOWN>) + (%<ASCII *014*> + <CURSOR-LEFT>) + (%<ASCII *022*> + <CURSOR-RIGHT>) + (%<ASCII *011*> ;"^I, modebounce in" + <SETG CURMOD <+ ,CURMOD -1 <* 3 </ 1 ,CURMOD>>>> <UPDATE-DISPLAY>) + (%<ASCII *017*> ;"^O, modebounce out" + <SETG CURMOD <+ ,CURMOD 1 <* -3 </ ,CURMOD 3>>>> <UPDATE-DISPLAY>) + (%<ASCII *001*> ;"^A, add" + <ADD-APPOINTMENTS>) + (%<ASCII *005*> ;"^E, erase" + <DEL-APPOINTMENTS>) + (%<ASCII *006*> ;"^F, find" + <FIND-EVENTS>) + (%<ASCII *024*> ;"^T, tag" + <TAG-DATES>) + (%<ASCII *033*> ;"$, display" + <DISPLAY-DATES>) + (%<ASCII *020*> ;"^P, permanent entry (done by maint)" + <RETURN "Soon, but not implemented yet." .TOTOPLEV> + <SET TEMP ,INPUT> + <PARSE-INPUT>) + (%<ASCII *000*> ;"^@, change current date" + <CHANGE-CURRENT-DEFAULTS>) + (%<ASCII *010*> ;"^H, hardcopy output" + <APPEND-HARDCOPY>)> + %<> ;"no errors"> + +<DEFINE CURSOR-UP ("AUX" TEMP (DATE <CURDATE>)) + #DECL ((TEMP) FIX (DATE) DATE) + <CASE ,==? ,CURMOD ;"^U, cursor up" + (1 + <REPEAT ((CNT 7)) ;"different strokes" + #DECL ((CNT) FIX) + <AND <DECCURDATE> + <RETURN "Out of bounds - Up" .TOTOPLEV>> + <AND <0? <SET CNT <- .CNT 1>>> <RETURN>>> + <UPDATE-DISPLAY>) + (2 + <REPEAT ((CNT 7)) + #DECL ((CNT) FIX) + <AND <DECCURDATE> + <RETURN "Out of bounds - Up" .TOTOPLEV>> + <AND <0? <SET CNT <- .CNT 1>>> <RETURN>>> + <SET TEMP <- <Y-POS> 1>> + <Y-POS .TEMP> + <COND (<L? .TEMP 0> <UPDATE-DISPLAY>) + (ELSE <PUTCURSOR>)>) + (3 + <AND <L? <M <M .DATE <- <CURMON> 3>>> 1> + <M .DATE <+ 12 <M .DATE>>> + <Y .DATE <- <Y .DATE> 1>>> + <COND (<DATECHK .DATE> + <RETURN "Out of bounds - Up" .TOTOPLEV>) + (ELSE + <CURYAR <Y .DATE>> + <CURMON <M .DATE>> + <SET TEMP <- <Y-POS> 1>> + <Y-POS .TEMP> + <COND (<G? .TEMP -1> + <PUTCURSOR>) + (ELSE <UPDATE-DISPLAY>)>)>)>> + +<DEFINE CURSOR-DOWN ("AUX" TEMP (DATE <CURDATE>)) + #DECL ((TEMP) FIX (DATE) DATE) + <CASE ,==? ,CURMOD ;"^D, cursor down" + (1 + <REPEAT ((CNT 7)) + #DECL ((CNT) FIX) + <AND <INCCURDATE> + <RETURN "Out of bounds - Down" .TOTOPLEV>> + <AND <0? <SET CNT <- .CNT 1>>> <RETURN>>> + <UPDATE-DISPLAY>) + (2 + <REPEAT ((CNT 7)) + #DECL ((CNT) FIX) + <AND <INCCURDATE> + <RETURN "Out of bounds - Down" .TOTOPLEV>> + <AND <0? <SET CNT <- .CNT 1>>> <RETURN>>> + <SET TEMP <+ 1 <Y-POS>>> + <Y-POS .TEMP> + <COND (<G? .TEMP 4> + <UPDATE-DISPLAY>) + (ELSE <PUTCURSOR>)>) + (3 + <AND <G? <M <M .DATE <+ <CURMON> 3>>> 12> + <M .DATE <- <M .DATE> 12>> + <Y .DATE <+ <Y .DATE> 1>>> + <COND (<DATECHK <D <FC .DATE> 1>> + <RETURN "Out of bounds - Down" .TOTOPLEV>) + (ELSE + <CURYAR <Y .DATE>> + <CURMON <M .DATE>> + <SET TEMP <+ 1 <Y-POS>>> + <Y-POS .TEMP> + <COND (<L? .TEMP 4> + <PUTCURSOR>) + (ELSE <UPDATE-DISPLAY>)>)>)>> + +<DEFINE CURSOR-LEFT ("AUX" TEMP (DATE <CURDATE>)) + #DECL ((TEMP) FIX (DATE) DATE) + <CASE ,==? ,CURMOD ;"^L, cursor left" + (1 + <COND (<DECCURDATE> + <RETURN "Out of bounds - Left" .TOTOPLEV>) + (ELSE <UPDATE-DISPLAY>)>) + (2 + <COND (<DECCURDATE> + <RETURN "Out of bounds - Left" .TOTOPLEV>) + (ELSE + <SET TEMP <- <X-POS> 1>> + <COND (<G? .TEMP -1> + <X-POS .TEMP> <PUTCURSOR>) + (ELSE + <X-POS 6> + <SET TEMP <- <Y-POS> 1>> + <Y-POS .TEMP> + <COND (<L? .TEMP 0> + <UPDATE-DISPLAY>) + (ELSE <PUTCURSOR>)>)>)>) + (3 + <AND <0? <M <M .DATE <- <CURMON> 1>>>> + <M .DATE 12> + <Y .DATE <- <Y .DATE> 1>>> + <COND (<DATECHK .DATE> + <RETURN "Out of bounds - Left" .TOTOPLEV>) + (ELSE + <CURYAR <Y .DATE>> + <CURMON <M .DATE>> + <SET TEMP <- <X-POS> 1>> + <COND (<G? .TEMP -1> + <X-POS .TEMP> <PUTCURSOR>) + (ELSE + <X-POS 2> + <SET TEMP <- <Y-POS> 1>> + <Y-POS .TEMP> + <COND (<L? .TEMP 0> + <UPDATE-DISPLAY>) + (ELSE <PUTCURSOR>)>)>)>)>> + +<DEFINE CURSOR-RIGHT ("AUX" TEMP (DATE <CURDATE>)) + #DECL ((TEMP) FIX (DATE) DATE) + <CASE ,==? ,CURMOD ;"^R, cursor right" + (1 + <COND (<INCCURDATE> + <RETURN "Out of bounds - Right" .TOTOPLEV>) + (ELSE + <UPDATE-DISPLAY>)>) + (2 + <COND (<INCCURDATE> + <RETURN "Out of bounds - Right" .TOTOPLEV>) + (ELSE + <SET TEMP <+ 1 <X-POS>>> + <COND (<L? .TEMP 7> + <X-POS .TEMP> <PUTCURSOR>) + (ELSE + <X-POS 0> + <SET TEMP <+ <Y-POS> 1>> + <Y-POS .TEMP> + <COND (<G? .TEMP 4> + <UPDATE-DISPLAY>) + (ELSE <PUTCURSOR>)>)>)>) + (3 + <AND <G? <M <M .DATE <+ 1 <CURMON>>>> 12> + <M .DATE 1> + <Y .DATE <+ 1 <Y .DATE>>>> + <COND (<DATECHK .DATE> + <RETURN "Out of bounds - Right" .TOTOPLEV>) + (ELSE + <CURYAR <Y .DATE>> + <CURMON <M .DATE>> + <SET TEMP <+ 1 <X-POS>>> + <COND (<L? .TEMP 3> + <X-POS .TEMP> <PUTCURSOR>) + (ELSE + <X-POS 0> + <SET TEMP <+ 1 <Y-POS>>> + <Y-POS .TEMP> + <COND (<G? .TEMP 3> + <UPDATE-DISPLAY>) + (ELSE <PUTCURSOR>)>)>)>)>> + +<DEFINE ADD-APPOINTMENTS ("AUX" TEMP + ERR) + #DECL ((TEMP) ANY + (ERR) <OR STRING FALSE>) + <PARSE-INPUT> + <COND (<NOT ,START> <RETURN "Time needed" .TOTOPLEV>) + (<G? <+ 1 ,START> ,STOP> + <RETURN "Curfew after midnight" .TOTOPLEV>) + (ELSE + <SET TEMP ,CURMOD> + <SETG CURMOD 1> + <MAPF %<> + <FUNCTION (DATE) #DECL ((DATE) DATE) + <CURDATE .DATE> + <AND <SET ERR <ADD>> + <NOT <WARN + <STRING .ERR " * space to resume -"> + %<ASCII *040*>>> + <MAPSTOP>> + <AND <=? ,TAGTYPE !\Y> <UPDATE-DISPLAY>>> + ,DATELIST> + <COND (<AND .ERR <N=? ,TAGTYPE !\Y> <N=? .TEMP 1>> + <UPDATE-DISPLAY> + <RETURN .ERR .TOTOPLEV>) + (ELSE + <COND (<N=? ,TAGTYPE !\Y> + <AND <=? .TEMP 1> <UPDATE-DISPLAY>>) + (<N=? .TEMP 1> + <SETG CURMOD .TEMP> + <UPDATE-DISPLAY>)>)>)>> + +<DEFINE DEL-APPOINTMENTS ("AUX" TEMP + ERR) + #DECL ((TEMP) ANY + (ERR) <OR STRING FALSE>) + <PARSE-INPUT> + <COND (<AND ,START <G? <+ 1 ,START> ,STOP>> + <RETURN "Negative duration?" .TOTOPLEV>) + (ELSE + <SET TEMP ,CURMOD> + <SETG CURMOD 1> + <MAPF %<> + <FUNCTION (DATE) #DECL ((DATE) DATE) + <CURDATE .DATE> + <AND <SET ERR <ERASE>> + <NOT <WARN + <STRING .ERR " * space to resume -"> + %<ASCII *040*>>> + <MAPSTOP>> + <AND <=? ,TAGTYPE !\Y> <UPDATE-DISPLAY>>> + ,DATELIST> + <COND (<AND .ERR <N=? ,TAGTYPE !\Y> <N=? .TEMP 1>> + <UPDATE-DISPLAY> + <RETURN .ERR .TOTOPLEV>) + (ELSE + <COND (<N=? ,TAGTYPE !\Y> + <AND <=? .TEMP 1> <UPDATE-DISPLAY>>) + (<N=? .TEMP 1> + <SETG CURMOD .TEMP> + <UPDATE-DISPLAY>)>)>)>> + +<DEFINE FIND-EVENTS () + <PARSE-INPUT> + <MAPF %<> + <FUNCTION (DATE) #DECL ((DATE) DATE) + <RETURN "Not yet" .TOTOPLEV>> + ,DATELIST> + <RETURN "Search failed." .TOTOPLEV>> + +<DEFINE TAG-DATES ("AUX" (PREVDATE <CURDATE>)) + #DECL ((PREVDATE) DATE) + <PARSE-INPUT> + <COND (ELSE ;"pre-err checks here" + <MAPF %<> + <FUNCTION (DATE "AUX" TEMP) #DECL ((DATE) DATE (TEMP) ANY) + <CURDATE .DATE> + <CHTAG>> + ,DATELIST> + <CASE ,==? ,CURMOD + (1 <UPDATE-DISPLAY>) + (2 ;"this pays attention only to last change!!" + <COND (<OR <N=? <M .PREVDATE> <CURMON>> + <N=? <Y .PREVDATE> <CURYAR>> + <=? ,TAGTYPE !\D> + <AND <=? ,TAGTYPE !\W> + <=? "Sun" <PDAY <CURDATE>>>> + <AND <=? ,TAGTYPE !\M> + <=? <CURDAY> 1>>> + <UPDATE-DISPLAY>) + (ELSE + <SET TEMP + <+ <DAYSBETWEEN + "SUN" + <LC-TO-UC + <PDAY + <D <CURDATE> 1>>>> + <CURDAY> + -1>> + <X-POS <MOD .TEMP 7>> + <Y-POS </ .TEMP 7>> + <PUTCURSOR>)>) + (3 <COND (<OR <N=? <Y .PREVDATE> <CURYAR>> + <=? ,TAGTYPE !\M> + <AND <=? ,TAGTYPE !\Q> + <=? <CURMON> 1> + <=? <MOD <CURMON> 3> 1>> + <AND <=? ,TAGTYPE !\Y> + <=? <CURDAY> 1> + <=? <CURMON> 1>>> + <UPDATE-DISPLAY>) + (ELSE + <SET TEMP <- <CURMON> 1>> + <X-POS <MOD .TEMP 3>> + <Y-POS </ .TEMP 3>> + <PUTCURSOR>)>)>)>> + +<DEFINE DISPLAY-DATES ("AUX" (PREVDATE <CURDATE>)) + #DECL ((PREVDATE) DATE) + <COND + (<=? ,INPUT "?"> + <SETG INPUT ""> + <PRNT "C"> + <PRNTCRLF " ?[esc] This brief command summary + For more detailed information, :INFO CALENDAR + ^V Verify (retype) input + [lf] Delete input + ^U Move cursor up + ^D Move cursor down + ^R Move cursor right + ^L Move cursor left + ^I Modebounce in + ^O Modebounce out + ^A Add entry to calendar + ^E Erase entry from calendar + ^T Tag + [esc] Update display + ^] Quote + ^@ Change current date (no display update) + ^H Hardcopy output (to _HCAL >) + ^Q Quit +"> + <WARN "Restore -" !\ > + <UPDATE-DISPLAY>) + (ELSE + <PARSE-INPUT> + <PREVMOD ,CURMOD> + <AND ,TAGTYPE + <SETG CURMOD <+ 1 </ <INSTR "DWMQY" ,TAGTYPE> 2>>>> + <MAPF %<> + <FUNCTION (DATE) #DECL ((DATE) DATE) + <SET PREVDATE <CURDATE>> + <CURDATE .DATE> + <COND + (<N=? <PREVMOD> ,CURMOD> + <UPDATE-DISPLAY>) + (ELSE + <CASE ,==? ,CURMOD + (1 + <COND (<OR <N=? <Y .PREVDATE> <CURYAR>> + <N=? <M .PREVDATE> <CURMON>> + <N=? <D .PREVDATE> <CURDAY>>> + <UPDATE-DISPLAY>)>) + (2 + <COND (<OR <N=? <Y .PREVDATE> <CURYAR>> + <N=? <M .PREVDATE> <CURMON>>> + <UPDATE-DISPLAY>) + (ELSE + <SET TEMP + <+ <DAYSBETWEEN "SUN" + <LC-TO-UC + <PDAY <D <CURDATE> 1>>>> + <CURDAY> + -1>> + <X-POS <MOD .TEMP 7>> + <Y-POS </ .TEMP 7>> + <PUTCURSOR>)>) + (3 + <COND (<N=? <Y .DATE> <CURYAR>> + <UPDATE-DISPLAY>) + (ELSE + <SET TEMP <- <CURMON> 1>> + <X-POS <MOD .TEMP 3>> + <Y-POS </ .TEMP 3>> + <PUTCURSOR>)>)>)> + <AND <NOT <WARN "Space to continue -" !\ >> + <RETURN %<> .TOTOPLEV>>>;"not quite right" + ,DATELIST>)>> + +<DEFINE CHANGE-CURRENT-DEFAULTS () + <PARSE-INPUT> + <AND ,TAGTYPE + <PREVMOD ,CURMOD> + <SETG CURMOD <+ 1 </ <INSTR "DWMQY" ,TAGTYPE> 2>>>> + <AND <N=? <LENGTH ,DATELIST> 1> + <RETURN "One date only" .TOTOPLEV>> + <CURDATE <NTH ,DATELIST 1>>> + +<DEFINE APPEND-HARDCOPY ("AUX" TEMP) + #DECL ((TEMP) CHANNEL) + <PARSE-INPUT> + <ECHO "(Working)"> + <PUTPROP TEMP MODE ,CURMOD> + <AND ,TAGTYPE + <SETG CURMOD <+ 1 </ <INSTR "DWMQY" ,TAGTYPE> 2>>>> + <AND <NOT <GASSIGNED? HARD-CHAN>> + <SETG HARD-CHAN <OPEN "PRINT" "_HCAL >">>> + <SET TEMP ,DISPLAY-CHAN> ;"put normal display on hold" + <SETG DISPLAY-CHAN ,HARD-CHAN> + <MAPF %<> + <FUNCTION (DATE) #DECL ((DATE) DATE) + <CURDATE .DATE> + <UPDATE-DISPLAY>> + ,DATELIST> + <SETG CURMOD <GETPROP TEMP MODE>> + <SETG DISPLAY-CHAN .TEMP> + <ECHO ,INPUT>> + +<DEFINE PARSE-INPUT ("AUX" (DATE <CURDATE>) + STOPDATE + TEMP + (ERR %<>) + "ACT" PARSED) + #DECL ((VALUE) <OR STRING FALSE> + (DATE STOPDATE) <OR DATE FALSE> + (TEMP) ANY + (ERR) <OR STRING CHARACTER FALSE> + (PARSED) ACTIVATION) + <AND <=? ,INPUT ""> <SETG INPUT ";">> + <SETG DATELIST <IUVECTOR 0>> + <SETG START %<>> + <SETG STOP 0> + <SETG TAGTYPE %<>> ;"let each routine alter this as it sees fit." + <AND <MEMBER !\; ,INPUT> + <SETG INPUT + <SUBSTRUC ,INPUT 0 + <- <LENGTH ,INPUT> + <LENGTH <SETG TEXT <REST <MEMBER !\; ,INPUT>>>> + 1>>>> + <SETG INPUT <LC-TO-UC ,INPUT>> ;"deal only with uc" + <SET PARSD <LPARSE ,INPUT>> ;"Hmmm" + <AND <EMPTY? .PARSD> ;"if nothing at all, assume current date" + <SETG DATELIST <UVECTOR <CURDATE>>> + <SETG INPUT ""> + <RETURN %<> .PARSED>> + <REPEAT (ELEM PRVER "ACT" RL1A) + #DECL ((ELEM) ANY (PRVER) STRING (RL1A) ACTIVATION) + <SET ELEM <NTH .PARSD 1>> ;"ponder one element" + <CHOP PARSD> ;" at a time" + <CASE ,TYPE? .ELEM + (!'(FIX FLOAT) ;"fixes are duration" + <SETG DURATION <FIX <+ .5 .ELEM>>>) ;"(round up)" + (ATOM ;"atoms are varied:" + <SET PRVER <PNAME .ELEM>> + <COND (<MEMBER !\- .PRVER> ;" a date (hence NN-)" + <SET DATE <CURDATE>> + <UNPDATE .PRVER .DATE> + <SETG DATELIST <UVECTOR !,DATELIST <FC .DATE>>>) + (<MEMBER !\: .PRVER> ;" a time" + <COND (<NOT ,START> <SETG START <MINS .PRVER>>) + (<SETG STOP <MINS .PRVER>>)>) + (<AND ;" a tagtype" + <1? <LENGTH .PRVER>> <MEMBER .PRVER "DWMQY">> + <SETG TAGTYPE <NTH .PRVER 1>>) + (<AND ;" a weekday" + <NOT <FIND-WEEKDAY .PRVER .DATE>> + <SETG DATELIST <UVECTOR !,DATELIST <FC .DATE>>>>) + (<=? "=" .PRVER> ;" or to-day." + <SETG DATELIST <UVECTOR !,DATELIST <FC ,TODAY>>>) + (ELSE + <SETG INPUT ""> <RETURN <STRING "???: " .PRVER> .TOTOPLEV>)>) + (LIST ;"lists are compact" + <SET STOPDATE %<>> ;"stopping date" + <SET DATE %<>> ;"date representation" + <SET PATTRN "*......"> + <SET REPS 0> + <REPEAT (SUBELEM (ERR %<>) "ACT" RL2A) + #DECL ((SUBELEM) ANY (ERR) <OR STRING CHARACTER FALSE> + (RL2A) ACTIVATION) + <COND (<EMPTY? .ELEM> <RETURN .ERR .RL2A>) + (ELSE + <SET SUBELEM <NTH .ELEM 1>> <CHOP ELEM>)> + <CASE ,TYPE? .SUBELEM + (FIX <SET REPS .SUBELEM>) + (STRING <SET PATTRN .SUBELEM>) + (ATOM + <COND (<=? = .SUBELEM> + <SET DATE <FC ,TODAY>>) + (<NOT <0? <INSTR <PNAME .SUBELEM> !\->>> + <COND (<NOT .DATE>;"first date is starting date" + <SET DATE <CURDATE>> + <UNPDATE <PNAME .SUBELEM> .DATE>) + (ELSE ;"further dates are stop date" + <SET STOPDATE <CURDATE>> + <UNPDATE <PNAME .SUBELEM> .STOPDATE>)>) + (.STOPDATE + <NOT + <FIND-WEEKDAY <PNAME .SUBELEM> .STOPDATE>>) + (.DATE + <NOT + <FIND-WEEKDAY <PNAME .SUBELEM> .DATE>>)>) + DEFAULT + (<SETG INPUT ""> + <RETURN <STRING "(?): " .SUBELEM> .TOTOPLEV>)>> + <AND <NOT .DATE> ;"if no startdate, default" + <SET DATE <CURDATE>>> + <AND <NOT .STOPDATE> ;"if no stopdate and no reps default to one rep" + <0? .REPS> + <SET REPS 1>> ;"default to one pattern repetition" + <COND (<MEMBER "*" .PATTRN> ;"pattern -> datelist" + <REPEAT ((AMPRSND 1)) ;"expand &'s first" + #DECL ((AMPRSND) FIX) + <AND <0? <SET AMPRSND <INSTR .PATTRN !\& .AMPRSND>>> + <COND (<0? <MOD <LENGTH .PATTRN> 7>> + <RETURN>) + (ELSE + <SET AMPRSND + <LENGTH <SET PATTRN + <STRING .PATTRN !\&>>>>)>> + <SET PATTRN ;"fill out rest of week" + <STRING + <SUBSTRUC .PATTRN 0 <- .AMPRSND 1>> + <REST "......." + <MOD <- .AMPRSND 1> 7>> + <REST .PATTRN .AMPRSND>>>> + <REPEAT ("ACT" RL2B) + #DECL ((RL2B) ACTIVATION) + <REPEAT ((P 1) "ACT" RL3A) + #DECL ((P) FIX (RL3A) ACTIVATION) + <AND <=? !\* <NTH .PATTRN .P>> + <SETG DATELIST + <UVECTOR !,DATELIST <FC .DATE>>>> + <AND .STOPDATE ;"stopdate<=current date?" + <OR <L? <Y .STOPDATE> <Y .DATE>> + <AND <=? <Y .STOPDATE> <Y .DATE>> + <L? <M .STOPDATE> <M .DATE>>> + <AND <=? <Y .STOPDATE> <Y .DATE>> + <=? <M .STOPDATE> <M .DATE>> + <L=? <D .STOPDATE> <D .DATE>>>> + <RETURN %<> .RL2B>> + <AND <INCDATE .DATE> + <SETG INPUT ""> + <RETURN "(?) Expansion" .TOTOPLEV>> + <COND (<G? <SET P <+ 1 .P>> <LENGTH .PATTRN>> + <RETURN %<> .RL3A>)>> + <AND <0? <SET REPS <- .REPS 1>>> + <RETURN %<> .RL2B>>>) + (ELSE + <SET PATTRN <STRING .PATTRN !\&>> + <REPEAT ((DOW <+ 1 + </ <- 21 + <LENGTH <MEMBER <PDAY .DATE> + "SunMonTueWedThuFriSat">>> + 3>>) + (DAYS "ZMTWRFS") + "ACT" RL2B) + <REPEAT ((OFFSET 1) + (NXTAMPRSND <INSTR .PATTRN !\&>) + "ACT" RL3A) + <REPEAT ((COUNT 7) + "ACT" RL4A) + <AND + <NOT <0? <SET TEMP + <INSTR .PATTRN + <NTH .DAYS .DOW> + .OFFSET>>>> + <L? .TEMP .NXTAMPRSND> + <SETG DATELIST + <UVECTOR !,DATELIST <FC .DATE>>>> + <AND <INCDATE .DATE> + <SETG INPUT ""> + <RETURN "(?) Expansion" .TOTOPLEV>> + <SET DOW + <+ 1 .DOW <* -7 </ .DOW 7>>>> + <AND <0? <SET COUNT <- .COUNT 1>>> + <RETURN %<> .RL4A>>> + <SET OFFSET <+ 1 .NXTAMPRSND>> + <AND <0? <SET NXTAMPRSND + <INSTR .PATTRN !\& .OFFSET>>> + <RETURN %<> .RL3A>>> + <AND <0? <SET REPS <- .REPS 1>>> + <RETURN %<> .RL2B>>>)>) + DEFAULT + (<SETG INPUT ""> + <RETURN <STRING "???: " <UNPARSE .ELEM>> .TOTOPLEV>)> + <AND <EMPTY? .PARSD> + <SETG INPUT ""> + <RETURN .ERR .RL1A>>> + <AND <EMPTY? ,DATELIST> ;"current date" + <SETG DATELIST <UVECTOR <CURDATE>>>> + <AND ,START <0? ,STOP> + <SETG STOP <+ ,START ,DURATION>>> + <SETG INPUT ""> ;"no parsing errors" + %<>> + +<DEFINE PUTCURSOR () ;"top left is 0,0; x increases to the right and" + <PRNT "T"> ;"y increases down" + <PRNT <STRING "V" ;"and both depend on ,CURMOD" + <ASCII <+ 8 + <NTH <NTH ,POSNLIST ,CURMOD> 3> + <* <Y-POS> + <NTH <NTH ,POSNLIST ,CURMOD> 4>>>>>> + <PRNT <STRING "H" + <ASCII <+ 8 + <NTH <NTH ,POSNLIST ,CURMOD> 1> + <* <X-POS> + <NTH <NTH ,POSNLIST ,CURMOD> 2>>>>>>> + +<DEFINE DAY ("AUX" (HARD? <N=? <NTH ,DISPLAY-CHAN 5> "TTY">) ;"DAY dislay" + (DATE <CURDATE>) + (DAYLIST <DAYLIST .DATE>) + (TAGLIST <TAGLIST .DATE>) + (TAGNAMES "*DWMQY") + (LINECT 21) + (UNDERLINE +"+-------+-------+------------------------------------------------------------+")) + #DECL ((DATE) DATE + (DAYLIST) DAY + (TAGLIST) <OR FALSE TAGS> + (TAGNAMES UNDERLINE) STRING + (LINECT) FIX + (HARD?) <OR FALSE ATOM>) + <PRNT <COND (.HARD? %<ASCII *014*>) + (ELSE "C")>> + <PRNTCRLF <STRING " - " + <PDAY .DATE> + ", " + <PDATE .DATE> + " -" + %<ASCII *012*>>> + <AND .TAGLIST + <PRNTCRLF " *Tags*"> + <SET LINECT <- .LINECT 1>> + <MAPF <> + <FUNCTION (STR) #DECL ((STR) STRING) + <CHOP TAGNAMES> + <AND <N=? .STR ""> + <PRNTCRLF <STRING + " " + <NTH .TAGNAMES 1> + ": " .STR>> + <SET LINECT <- .LINECT 1>>>> + .TAGLIST>> + <PRNTCRLF " +| start | stop | event ..."> + <REPEAT (EVENT START STOP TEXT) + #DECL ((START STOP) FIX (TEXT) STRING) + <COND (<EMPTY? .DAYLIST> <PRNTCRLF .UNDERLINE> <RETURN>)> + <SET EVENT <NTH .DAYLIST 1>> + <SET START <NTH .EVENT 1>> + <SET STOP <NTH .EVENT 2>> + <AND <=? <LENGTH <SET TEXT <NTH .EVENT 3>>> 0> + <SET TEXT " ">> ;"cover for modulo error" + <CHOP DAYLIST> + <PRNTCRLF .UNDERLINE> + <SET TEXT + <STRING .TEXT + <ISTRING <MOD <- 5900 <LENGTH .TEXT>> 59> !\ >>> + <REPEAT ((CNT 0)) + #DECL ((CNT) FIX) + <PRNTCRLF <STRING "| " + <COND (<0? .CNT> <PTIME .START>) + (ELSE " ")> + " | " + <COND (<0? .CNT> <PTIME .STOP>) + (ELSE " ")> + " | " + <SUBSTRUC .TEXT 0 59> + "|">> + <SET LINECT <- .LINECT 1>> + <SET CNT <+ 1 .CNT>> + <AND <0? <LENGTH <CHOP TEXT 59>>> + <RETURN>>> + <AND <L=? <SET LINECT <- .LINECT 2>> 0> + <PRNTCRLF .UNDERLINE> + <AND <NOT .HARD?> + <COND (<WARN <STRING "-- more of " + <PDATE .DATE> + " --"> + !\ > + <SET LINECT 28> + <PRNT "C">) + (ELSE <RETURN>)>>>>> + +<DEFINE MONTH ("AUX" (HARD? <N=? <NTH ,DISPLAY-CHAN 5> "TTY">) + (DATE <CURDATE>) + (UNKNOWN 0) TEMP NTEMP + (UNDERLINE +"+----------+----------+----------+----------+----------+----------+----------+")) + #DECL ((DATE) DATE + (UNKNOWN) <OR FIX FALSE> + (TEMP NTEMP) ANY + (UNDERLINE) STRING + (HARD?) <OR FALSE ATOM>) + <D .DATE 1> + <PRNT <COND (.HARD? %<ASCII *014*>) + (ELSE "C")>> + <PRNTCRLF <STRING " - " + <REST <PDATE .DATE> 3> " -">> + <COND (<SET TEMP <TAGLIST .DATE>> + <PRNTCRLF <NTH .TEMP 3>>) + (��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������D <0? <SET COL <- .COL 1>>> <RETURN>>> + <PRNTCRLF> + <PRNTCRLF + <COND + (<AND <NOT <DATECHK .DATE>> + <SET TEMP <TAGLIST .DATE>>> + <SET TEMP <NTH .TEMP 2>> + <COND (<N=? .TEMP ""> + <STRING <SUBSTRUC .UNDERLINE + 0 + <SET NTEMP </ <- 75 <LENGTH .TEMP>> 2>>> + "^ " + .TEMP + " ^" + <REST .UNDERLINE <+ .NTEMP <LENGTH .TEMP> 4>>>) + (.UNDERLINE)>) + (ELSE .UNDERLINE)>> + <AND <0? <SET ROW <- .ROW 1>>> <RETURN>> + <SET DATE <FC .TDATE>>>> + +<DEFINE YEAR ("AUX" (HARD? <N=? <NTH ,DISPLAY-CHAN 5> "TTY">) + (DATE <CURDATE>) + TDATE TEMP NTEMP + (UNDERLINE +"+-----------------------+-----------------------+-----------------------+")) + #DECL ((DATE TDATE) DATE + (TEMP NTEMP) ANY + (UNDERLINE) STRING + (HARD?) <OR FALSE 'T>) + <M .DATE 1> + <D .DATE 1> + <PRNT <COND (.HARD? %<ASCII *014*>) + (ELSE "C")>> + <PRNTCRLF <STRING " - '" + <PAD <UNPARSE <Y .DATE>>> + " -">> + <COND (<AND <NOT <DATECHK .DATE>> + <SET TEMP <TAGLIST .DATE>>> + <PRNTCRLF <NTH .TEMP 5>>) + (ELSE <PRNTCRLF>)> + <PRNTCRLF .UNDERLINE> + <REPEAT ((ROW 4)) + #DECL ((ROW) FIX) + <REPEAT ((COL 3)) + #DECL ((COL) FIX) + <PRNT "| "> + <COND (<DATECHK .DATE> <PRNT "???">) + (ELSE + <PRNT <NTH ,MONTHSTR <M .DATE>>> + <AND <=? <M .DATE> <CURMON>> + <X-POS <- 3 .COL>> + <Y-POS <- 4 .ROW>>>)> + <PRNT " "> + <AND <0? <SET COL <- .COL 1>>> + <M .DATE <- <M .DATE> 2>> + <RETURN>> + <M .DATE <+ <M .DATE> 1>>> + <PRNTCRLF "|"> + <REPEAT ((COL 3)) + #DECL ((COL) FIX) + <PRNT "|"> + <PRNT <SUBSTRUC + <STRING <COND (<AND <NOT <DATECHK .DATE>> + <SET TEMP <TAGLIST .DATE>>> + <NTH .TEMP 3>) + (ELSE "")> + " "> + 0 + 23>> + <M .DATE <+ 1 <M .DATE>>> + <AND <0? <SET COL <- .COL 1>>> + <RETURN>>> + <PRNTCRLF "|"> + <SET TDATE <FC .DATE>> + <PRNTCRLF + <COND + (<AND <NOT <DATECHK <M .TDATE <- <M .DATE> 3>>>> + <SET TEMP <TAGLIST .TDATE>>> + <SET TEMP <NTH .TEMP 4>> + <COND (<N=? .TEMP ""> + <STRING <SUBSTRUC .UNDERLINE + 0 + <SET NTEMP </ <- 69 <LENGTH .TEMP>> 2>>> + "^ " + .TEMP + " ^" + <REST .UNDERLINE <+ .NTEMP <LENGTH .TEMP> 4>>>) + (.UNDERLINE)>) + (ELSE .UNDERLINE)>> + <AND <0? <SET ROW <- .ROW 1>>> + <RETURN>>>> + +<DEFINE UNPDATE (STR DATE "AUX" TEMP) ;"string -> numeric" + #DECL ((VALUE) <OR STRING FALSE> + (STR) STRING + (DATE) DATE + (TEMP) FIX) + ;"unspec'd parts default to entry DATE" + <COND (<L? <LENGTH .STR> 5> + <SET STR <SUBSTRUC .STR 0 <- <LENGTH .STR> 1>>> + <AND <OR <=? .STR ""> <NOT <TYPE? <PARSE .STR> FIX>>> + <SETG INPUT ""> + <RETURN <STRING "NN- expected: " .STR> .TOTOPLEV>> + <D .DATE <PARSE .STR>>) + (ELSE + <AND <0? <SET TEMP <INSTR .STR !\- 2>>> + <SETG INPUT ""> + <RETURN "Date format is YY-Mmm-DD" .TOTOPLEV>> + <D .DATE <PARSE <SUBSTRUC .STR 0 <- .TEMP 1>>>> + <CHOP STR .TEMP> + <AND <NOT <0? <SET TEMP <INSTR .STR !\- 2>>>> + <Y .DATE <PARSE <REST .STR .TEMP>>> + <SET STR <SUBSTRUC .STR 0 <- .TEMP 1>>>> + <AND <0? <SET TEMP <LENGTH <MEMBER .STR ,MONTHSTR>>>> + <SETG INPUT ""> + <RETURN <STRING "Nonmonth: " .STR> .TOTOPLEV>> + <M .DATE <+ 1 <MOD <- <LENGTH ,MONTHSTR> .TEMP> 12>>>)> + <AND <DATECHK .DATE> + <SETG INPUT ""> + <RETURN <STRING "Invalid date: " <PDATE .DATE>> .TOTOPLEV>>> + +<DEFINE DATECHK (DATE "AUX" (MONUM <MONTHNUM .DATE>)) ;"date illegal?" + #DECL ((VALUE) <OR 'T FALSE> + (DATE) DATE + (MONUM) FIX) + <COND (<OR <0? <Y .DATE>> + <0? <M .DATE>> + <0? <D .DATE>> + <L=? .MONUM 0> + <G? .MONUM <LENGTH ,CALNDR>> + <G? <D .DATE> <LENGTH <NTH ,CALNDR .MONUM>>>> + T) + (ELSE %<>)>> + +<DEFINE ADD ("AUX" (DATE <CURDATE>) ;"add an appointment" + (DAYLIST <DAYLIST .DATE>) + (LEN <LENGTH .DAYLIST>) + "ACT" ADD) + #DECL ((DATE) DATE + (LEN) FIX + (DAYLIST) DAY + (ADD) ACTIVATION) + <COND (<0? .LEN> ;"beat boundary condns" + <CHANGE-DAYLIST + .DATE + <BOOT DAY + <BOOT EVENT ,START ,STOP ,TEXT>>> + <RETURN %<> .ADD>) + (<L=? ,STOP <NTH <NTH .DAYLIST 1> 1>> + <CHANGE-DAYLIST + .DATE + <SQUEEZEIN .DAYLIST 0 + <BOOT EVENT ,START ,STOP ,TEXT>>> + <RETURN %<> .ADD>) + (<G=? ,START <NTH <NTH .DAYLIST .LEN> 2>> + <CHANGE-DAYLIST .DATE + <SQUEEZEIN .DAYLIST .LEN + <BOOT EVENT ,START ,STOP ,TEXT>>> + <RETURN %<> .ADD>)> + <REPEAT ((BUSY 1) START STOP) + #DECL ((BUSY START STOP) FIX) + <SET START <NTH <NTH .DAYLIST 1> 1>> + <SET STOP <NTH <NTH .DAYLIST 1> 2>> + <COND (<OR <AND <G? ,START .START> + <L? ,START .STOP>> + <AND <G? ,STOP .START> + <L? ,STOP .STOP>> + <AND <L=? ,START .START> + <G=? ,STOP .STOP>>> + <RETURN <STRING "Conflicts with " + <PTIME .START> + " " + <PTIME .STOP> + " ;" + <NTH <NTH .DAYLIST 1> 3>>>) + (<AND <G=? ,START .STOP> + <L=? ,STOP <NTH <NTH .DAYLIST <+ 1 .BUSY>> 1>>> + <CHANGE-DAYLIST .DATE + <SQUEEZEIN .DAYLIST .BUSY + <BOOT EVENT ,START ,STOP ,TEXT>>> + <RETURN %<> .ADD>)> + <SET BUSY <+ 1 .BUSY>>>> + +<DEFINE SQUEEZEIN (VEC POS "TUPLE" NEWELS) ;"NEWELS after .POS" + #DECL ((VEC) <PRIMTYPE VECTOR> ;"limited use" + (POS) FIX + (NEWELS) TUPLE) + <BOOT <TYPE .VEC> + !<SUBSTRUC .VEC 0 .POS> !.NEWELS !<REST .VEC .POS>>> + +<DEFINE ERASE ("AUX" (DATE <CURDATE>) ;"erase appointment" + (DAYLIST <DAYLIST .DATE>) + "ACT" ERASE) + #DECL ((DATE) DATE + (DAYLIST) DAY + (ERASE) ACTIVATION) + <AND <EMPTY? .DAYLIST> + <RETURN + <STRING <PDATE .DATE> " free day; nothing to delete"> + .ERASE>> + <REPEAT ((TEMP <BOOT DAY>) + (ERR + <STRING "Not found: " + <PDATE .DATE> + <COND (,START <STRING " " <PTIME ,START>>) + (ELSE "")> + ";" ,TEXT>)) + #DECL ((TEMP) DAY + (ERR) <OR STRING FALSE>) + <COND (<AND <COND (<0? <LENGTH ,TEXT>> T) + (ELSE <MEMBER ,TEXT <NTH <NTH .DAYLIST 1> 3>>)> + <COND (<NOT ,START>) + (ELSE <=? <NTH <NTH .DAYLIST 1> 1> ,START>)> + <WARN <STRING "Space to delete " + <PDATE .DATE> " " + <PTIME <NTH <NTH .DAYLIST 1> 1>> " " + <PTIME <NTH <NTH .DAYLIST 1> 2>> " ;" + <NTH <NTH .DAYLIST 1> 3>> + !\ > + <NOT <SET ERR %<>>>>) + (ELSE + <SET TEMP + <BOOT DAY + !.TEMP + <BOOT EVENT + !<NTH .DAYLIST 1>>>>)> + <AND <EMPTY? <CHOP DAYLIST>> + <CHANGE-DAYLIST .DATE .TEMP> + <RETURN .ERR .ERASE>>>> + +<DEFINE CHTAG ("AUX" (DATE <CURDATE>) + (TAGLIST <TAGLIST .DATE>) + "ACT" TAGOUT) + #DECL ((DATE) DATE + (TAGLIST) <OR FALSE TAGS> + (TAGOUT) ACTIVATION) + <PUT <COND (.TAGLIST) + (ELSE <SET TAGLIST <BOOT TAGS !<IVECTOR 5 "">>>)> + <COND (,TAGTYPE + <INSTR "DWMQY" ,TAGTYPE>) + (ELSE <- <* 2 ,CURMOD> 1>)> + ,TEXT> + <CHANGE-TAGLIST .DATE <COND (<=? .TAGLIST #TAGS ["" "" "" "" ""]> + %<>) + (ELSE .TAGLIST)>> + %<>> + +<DEFINE LOCDAY (DATE) ;"easy way?" + #DECL ((DATE) DATE) + <AT <IN <AT ,CALNDR <MONTHNUM .DATE>>> <D .DATE>>> + +<DEFINE GETDAY (DATE) ;"get list for day" + #DECL ((DATE) DATE) + <IN <LOCDAY .DATE>>> + +<DEFINE PUTDAY (DATE LIST) ;"replace daylist" + #DECL ((DATE) DATE + (LIST) DAY) + <SETLOC <LOCDAY .DATE> .LIST>> + +<DEFINE DAYLIST (DATE "AUX" (DAYLIST <GETDAY .DATE>)) + #DECL ((VALUE DAYLIST) DAY + (DATE) DATE) + <COND (<AND <NOT <0? <LENGTH .DAYLIST>>> ;"if tags are present," + <DECL? <NTH .DAYLIST 1> TAGS>> ;"drop them" + <CHTYPE <REST .DAYLIST> DAY>);"boot?" + (ELSE .DAYLIST)>> + +<DEFINE CHANGE-DAYLIST (DATE "OPTIONAL" (DAYLIST <BOOT DAY>) + "AUX" (TAGLIST <TAGLIST .DATE>)) + #DECL ((DATE) DATE + (DAYLIST) DAY + (TAGLIST) <OR TAGS FALSE>) + <PUTDAY .DATE + <COND (.TAGLIST <BOOT DAY .TAGLIST !.DAYLIST>) + (ELSE .DAYLIST)>> + T> + +<DEFINE PRCNT-USED (DATE "AUX" (EVENTLIST <DAYLIST .DATE>) (TOTAL 0)) + #DECL ((VALUE) FIX + (DATE) DATE + (EVENTLIST) DAY + (TOTAL) FIX) + <SET TOTAL + <MAPF ,+ <FUNCTION (E) #DECL ((E) EVENT) + <COND (<=? <NTH <NTH .E 3> 1> !\!> 0) + (<- <NTH .E 2> <NTH .E 1>>)>> + .EVENTLIST>> + <MIN <FIX <+ .5 <* 100. </ <FLOAT .TOTAL> %<* 8. 60.>>>>> 99>> + +<DEFINE TAGLIST (DATE "AUX" (TEMP <GETDAY .DATE>));"note: date presumed valid!" + #DECL ((VALUE) <OR TAGS FALSE> + (TEMP) DAY) + <COND (<AND <NOT <EMPTY? .TEMP>> + <DECL? <NTH .TEMP 1> TAGS>> + <NTH .TEMP 1>) + (ELSE %<>)>> + +<DEFINE CHANGE-TAGLIST (DATE "OPTIONAL" (TAGLIST %<>)) + #DECL ((DATE) DATE + (TAGLIST) <OR TAGS FALSE>) + <PUTDAY .DATE + <COND (.TAGLIST + <BOOT DAY + .TAGLIST !<DAYLIST .DATE>>) + (ELSE <DAYLIST .DATE>)>> + T> + +<DEFINE MONTHNUM (DATE) ;"offset in monthlist" + #DECL ((VALUE) FIX + (DATE) DATE) + <+ ,REF + <M .DATE> + <- <M ,TODAY>> + <* 12 + <- <Y .DATE> + <Y ,TODAY>>>>> + +<DEFINE DAYOFWEEK (DATE + "AUX" TEMP + (Y <Y .DATE>) + (M <M .DATE>) + (D <D .DATE>)) ;"TI'S abhorithm" + #DECL ((VALUE) FIX + (DATE) DATE + (Y M D TEMP) FIX) + <SET TEMP <+ <* 365 <+ .Y 1900>> .D <* 31 <- .M 1>>>> + <SET TEMP + <+ .TEMP + <COND (<L? .M 3> + <+ </ <+ .Y 1899> 4> + <- </ <* 3 <+ 1 </ <+ .Y 1899> 100>>> 4>>>) + (ELSE + <+ <- <FIX <+ 2.3 <* .M 0.4>>>> + </ <+ .Y 1900> 4> + <- </ <* <+ 1 </ <+ 1900 .Y> 100>> 3> 4>>>)>>> + <+ 1 <MOD .TEMP 7>>> + +<DEFINE DECDATE (DATE ;"decrement date" + "AUX" (TDATE <FC .DATE>) + (TEMP .TDATE) + "ACT" ABORT) + #DECL ((VALUE) <OR 'T FALSE> + (DATE TDATE TEMP) DATE + (ABORT) ACTIVATION) + <COND (<0? <D <D .DATE <- <D .DATE> 1>>>> + <AND <0? <M <M .DATE <- <M .DATE> 1>>>> + <M .DATE 12> + <Y .DATE <- <Y .DATE> 1>>> + <SET TEMP <D <SET TEMP .DATE> 1>> + <AND <DATECHK .TEMP> + <DATE-SET .DATE .TDATE> + <RETURN 'T .ABORT>> + <D .DATE <LENGTH <NTH ,CALNDR <MONTHNUM .DATE>>>>)> + %<>> + +<DEFINE DECCURDATE ("AUX" (DATE <CURDATE>)) + #DECL ((DATE) DATE) + <COND (<DECDATE .DATE> 'T) + (ELSE + <CURDATE .DATE> %<>)>> + +<DEFINE INCDATE (DATE + "AUX" (TDATE <FC .DATE>) + "ACT" ABORT) + #DECL ((VALUE) <OR 'T FALSE> + (DATE TDATE) DATE + (ABORT) ACTIVATION) + <AND <DATECHK .DATE> <RETURN 'T .ABORT>> ;"is this really necessary?" + <AND <G? <D <D .DATE <+ <D .DATE> 1>>> + <LENGTH <NTH ,CALNDR <MONTHNUM .DATE>>>> + <D .DATE 1> + <AND <G? <M <M .DATE <+ <M .DATE> 1>>> 12> + <M .DATE 1> + <Y .DATE <+ <Y .DATE> 1>>>> + <AND <DATECHK .DATE> + <DATE-SET .DATE .TDATE> + <RETURN 'T .ABORT>> + %<>> + +<DEFINE INCCURDATE ("AUX" (DATE <CURDATE>)) + #DECL ((DATE) DATE) + <COND (<INCDATE .DATE> 'T) + (ELSE + <CURDATE .DATE> %<>)>> + +<DEFINE FIND-WEEKDAY (STR DATE + "AUX" (TDATE <FC .DATE>) + (NDAYS %<>) + TEMP + "ACT" FOUND) + ;"return false if no errors, + return 0 if no such weekday + return #days off edge of calendar if ye mo da is out of bounds" + + #DECL ((VALUE) <OR FIX FALSE> + (STR) STRING + (DATE TDATE) DATE + (NDAYS) <OR FIX FALSE> + (FOUND) ACTIVATION) + <REPEAT () + <COND (<=? .STR <SET TEMP <LC-TO-UC <PDAY .DATE>>>> + <RETURN %<> .FOUND>) + (<=? .TEMP "SUN"> + <DATE-SET .DATE .TDATE> + <INCDATE .DATE> + <RETURN>) + (<DECDATE .DATE> + <COND (<G=? <SET NDAYS <DAYSBETWEEN .TEMP .STR>> 0> + <RETURN>) + (ELSE <RETURN .NDAYS .FOUND>)>)>> + <REPEAT () + <COND (<=? .STR <SET TEMP <LC-TO-UC <PDAY .DATE>>>> + <RETURN %<> .FOUND>) + (<=? .TEMP "SAT"> + <DATE-SET .DATE .TDATE> + <RETURN 0 .FOUND>) + (<INCDATE .DATE> + <RETURN <DAYSBETWEEN .TEMP .STR> .FOUND>)>>> + +<DEFINE DAYSBETWEEN (BEGIN END) ;"for MONTH()" + #DECL ((VALUE) FIX (BEGIN END) STRING) + <- </ <- 21 <LENGTH <MEMBER .END "SUNMONTUEWEDTHUFRISAT">>> 3> + </ <- 21 <LENGTH <MEMBER .BEGIN "SUNMONTUEWEDTHUFRISAT">>> 3>>> + +<DEFINE PDATE (DATE) ;"date -> string" + #DECL ((VALUE) STRING + (DATE) DATE) + <STRING <PAD <UNPARSE <D .DATE>> !\ > + "-" + <NTH ,MONTHSTR <M .DATE>> + "-" + <PAD <UNPARSE <Y .DATE>>>>> + +<DEFINE PDAY (DATE) ;"day of week" + #DECL ((VALUE) STRING + (DATE) DATE) + <NTH '("Sat" "Sun" "Mon" "Tue" "Wed" "Thu" "Fri") + <DAYOFWEEK .DATE>>> + +<DEFINE PTIME (MINS) + #DECL ((VALUE) STRING (MINS) FIX) + <STRING <PAD <UNPARSE </ .MINS 60>> !\ > + ":" + <PAD <UNPARSE <MOD .MINS 60>>>>> + +<DEFINE PAD (NUMSTR "OPTIONAL" (WITH !\0)) ;"two columns only" + #DECL ((VALUE) STRING (NUMSTR) <OR CHARACTER STRING> (WITH) CHARACTER) + <COND (<1? <LENGTH .NUMSTR>> <STRING .WITH .NUMSTR>) + (ELSE .NUMSTR)>> + +<DEFINE MINS (STR "AUX" COLON) ;"string -> #" + #DECL ((STR) STRING (COLON) FIX) + <SET COLON <INSTR .STR !\:>> + <AND <OR <=? .COLON 1> <=? .COLON <LENGTH .STR>>> + <SETG INPUT ""> + <RETURN <STRING "Bad time format: " .STR> .TOTOPLEV>> + <SET MINUTES <PARSE <SUBSTRUC .STR 0 <- .COLON 1>>>> + <SET HOURS <PARSE <REST .STR .COLON>>> + <AND <OR <N=? <TYPE .MINUTES> FIX> <N=? <TYPE .HOURS> FIX>> + <RETURN <STRING "Bad time format: " .STR> .TOTOPLEV>> + <SET COLON <+ <* 60 .MINUTES> .HOURS>> + <COND (<G? .COLON 1439> + <RETURN <STRING .STR " is not a valid time of day"> .TOTOPLEV>) + (ELSE .COLON)>> + +<DEFINE LC-TO-UC (STR) ;"type string only!" + #DECL ((VALUE) STRING (STR) STRING) + <MAPF ,STRING + <FUNCTION (CHAR "AUX" ASC) + #DECL ((CHAR) CHARACTER) + <SET ASC <ASCII .CHAR>> + <AND <G=? .ASC 97> + <L=? .ASC 122> + <SET ASC <+ .ASC 65 -97>>> + <ASCII .ASC>> + .STR>> + +<DEFINE INSTR (STR CHAR "OPTIONAL" (STARTWITH 1) + "AUX" (LEN <LENGTH .STR>) + "ACT" INSTR) + #DECL ((VALUE) FIX (STR) STRING (CHAR) CHARACTER ;"find char in str" + (STARTWITH LEN) FIX + (INSTR) ACTIVATION) + <AND <OR <0? .LEN> + <G? .STARTWITH .LEN>> + <RETURN 0 .INSTR>> + <REPEAT ((COUNT .STARTWITH)) + #DECL ((COUNT) FIX) + <COND (<=? .CHAR <NTH .STR .COUNT>> <RETURN .COUNT>) + (<G? <SET COUNT <+ 1 .COUNT>> .LEN> + <RETURN 0>)>>> + +<DEFINE WARN (TEXT ;"allows for input" + "OPTIONAL" (TIME 2) "AUX" TEMP INCHR "ACT" WARM) + #DECL ((TEXT) <OR <PRIMTYPE STRING> FALSE> + (TIME) <OR CHARACTER FIX> + (TEMP) ANY + (INCHR) CHARACTER + (WARM) ACTIVATION) + <COND (<NOT .TEXT> <RETURN %<> .WARM>)> ;"cleaner to check here" + <ECHO .TEXT> + <COND (<=? <TYPE .TIME> CHARACTER> + <SET TEMP <=? <SET INCHR <TYI ,INCHAN>> .TIME>> + <AND <=? .INCHR %<ASCII *021*>> + <OR <NOT <GASSIGNED? HARD-CHAN>> + ,HARD-CHAN> ;"if not already quitting" + <CLEAN-QUIT>> ;"quit noww" + <AND <L? <ASCII .INCHR> *040*> + <BUFF .INCHR> + <RETURN %<> .TOTOPLEV>> + <AND <NOT .TEMP> ;"if no, stash character" + <N=? .INCHR *177*> ;"(unless del)" + <BUFF .INCHR>>) ;"examine error" + (ELSE <SLEEP .TIME> <SET TEMP .TEXT>)> ;"return T/F or text" + <ECHO ,INPUT> + .TEMP> + +<DEFINE ECHO (STR "AUX" RTIME) ;"clean up input area" + #DECL ((STR) ANY (RTIME) !<LIST [3 FIX]>) + <PRINC "C"> + <PRINC "T"> + <PRINC "("> + <PRINC <PAD <UNPARSE <NTH <SET RTIME <RTIME>> 1>> !\ >> + <PRINC ":"> + <PRINC <PAD <UNPARSE <NTH .RTIME 2>>>> + <PRINC ") "> + <PRINC <CURDATE>> ;"header with current date" + <CRLF><CRLF> + <PRINC .STR> + <AND <=? <NTH ,DISPLAY-CHAN 5> "TTY">;"juggle cursor iff output to tty" + <PUTCURSOR>>> + +<DEFINE NDEL (N) + #DECL ((N) CHARACTER) ;"#chars to delete" + <COND (<AND <N=? <ASCII .N> *033*> ;"escape" + <L? <ASCII .N> *040*>> + <STRING %<ASCII *010*>"K"%<ASCII *010*>"K">) + (ELSE + <STRING %<ASCII *010*>"K">)>> + +<DEFINE PRNT (STR) ;"output to main disp" + #DECL ((STR) <OR CHARACTER STRING COMMAND-STRING>) + <PRINC .STR ,DISPLAY-CHAN>> + +<DEFINE PRNTCRLF ("OPTIONAL" (STR "")) + #DECL ((VALUE) 'T (STR) <OR CHARACTER STRING COMMAND-STRING>) + <PRNT .STR> + <CRLF ,DISPLAY-CHAN>> \ No newline at end of file diff --git a/src/mprog1/cca.umsb07 b/src/mprog1/cca.umsb07 new file mode 100644 index 00000000..65a33ce9 --- /dev/null +++ b/src/mprog1/cca.umsb07 @@ -0,0 +1,581 @@ +<PACKAGE "CCA"> + +<ENTRY CCA-ACTIVATE CCA-DEACTIVATE CCA-KILL + CCA-READ CCA-PRINT + CCA-COMMAND CCA-ERR-SYNC + CCA-ACTIVATE-SCRIPT CCA-DEACTIVATE-SCRIPT CCA-ALLOW-SCRIPT? + CCA-CHAN CCA-SCRIPT-CHAN + NETCLOSE> + +<ENTRY CCA-OPEN CCA-CLOSE CCA-LOGIN + CCA-CONNECT CCA-ACTIVATE-DATA-CHAN CCA-DEACTIVATE-DATA-CHAN + CCA-DATA-CHAN CCA-DATA-MODE + CCA-ASSIGN + CCA-GET CCA-SEND + CCA-LIST> + + +<USE "CPYFIL"> + +<GDECL (CCA-CHAN) <OR <LIST CHANNEL CHANNEL> FALSE> + (CCA-DATA-CHAN) <OR CHANNEL FALSE> + (CCA-DATA-MODE) <OR <LIST STRING FIX> FALSE> + (CCA-SCRIPT-CHAN) <OR CHANNEL FALSE> + (CCA-ALLOW-SCRIPT?) ANY + (CCA-BUFFER CCA-STR RDYMSG SYNMSG) STRING + (CCA-UVCT) UVECTOR> + +<SETG CCA-CHAN <>> +<SETG CCA-SCRIPT-CHAN <>> +<SETG CCA-ALLOW-SCRIPT? T> +<SETG CCA-DATA-CHAN <>> +<SETG CCA-DATA-MODE <>> +<SETG CCA-BUFFER <ISTRING 200 !" >> +<SETG CCA-UVCT <IUVECTOR 200 0>> +<SETG CCA-STR <ISTRING 1000 !" >> +<SETG RDYMSG ".I210"> +<SETG SYNMSG ".I220"> + + + + + + +<DEFINE CCA-ACTIVATE CCA-ACT ("OPTIONAL" (WAITIME 120) (SOC *103*) (HOST 31)) +#DECL ((VALUE) <OR STRING FALSE> + (WAITIME SOC HOST) FIX + (CCA-ACT) <SPECIAL ACTIVATION>) +<COND (,CCA-CHAN) + (<SETG CCA-CHAN <ICP .HOST .SOC .WAITIME>> + <CCA-READ ,RDYMSG>)>> + + +<DEFINE CCA-DEACTIVATE ("AUX" NIN NOUT) +#DECL ((VALUE) <OR 'T FALSE> (NIN NOUT) CHANNEL) +<COND (<AND <TYPE? ,CCA-CHAN LIST> + <==? 2 <LENGTH ,CCA-CHAN>> + <TYPE? <SET NIN <1 ,CCA-CHAN>> CHANNEL> + <TYPE? <SET NOUT <2 ,CCA-CHAN>> CHANNEL>> + <COND (<AND + <COND (<MEMQ <1 <NETSTATE .NOUT>> '![5 6!]> + <OFF "CHAR" .NOUT> + <PRINC <ASCII 26> .NOUT> + <NETS .NOUT> + <CCA-READ ".J900">)> + <NETCLOSE .NIN> + <NETCLOSE .NOUT>> + <SETG CCA-CHAN <>> + T) + (<CCA-KILL>)>)>> + + + + +<DEFINE CCA-KILL ("AUX" CHAN) +#DECL ((VALUE) <OR 'T FALSE> (CHAN) <OR <LIST CHANNEL CHANNEL> FALSE>) +<COND (<AND <TYPE? <SET CHAN ,CCA-CHAN> LIST> + <==? 2 <LENGTH .CHAN>> + <TYPE? <1 .CHAN> CHANNEL> + <TYPE? <2 .CHAN> CHANNEL>> + <NETCLOSE <1 .CHAN>> + <NETCLOSE <2 .CHAN>> + <SETG CCA-CHAN <>> + T)>> + + + + +<DEFINE CCA-READ CCA-ACT ("TUPLE" CODEST "AUX" (BUF ,CCA-BUFFER) + (CHAN <>) CNT VAL NIN) +#DECL ((VALUE) <OR STRING FALSE> (CODEST) <TUPLE [REST STRING]> + (BUF) STRING + (CNT) FIX + (NIN) <OR CHANNEL FALSE> + (VAL) ANY + (CHAN) <OR CHANNEL FALSE> + (OUTCHAN) <SPECIAL CHANNEL> + (CCA-ACT) <SPECIAL ACTIVATION>) +<COND (<TYPE? <SET CHAN ,CCA-SCRIPT-CHAN> CHANNEL>) + (<ASSIGNED? OUTCHAN> <SET CHAN .OUTCHAN>) + (ELSE <SET CHAN <>>)> +<COND (<AND <TYPE? <SET VAL <OR ,CCA-CHAN <CCA-ACTIVATE>>> LIST> + <==? 2 <LENGTH .VAL>> + <TYPE? <1 .VAL> CHANNEL> + <TYPE? <2 .VAL> CHANNEL>> + <SET NIN <1 .VAL>> + <REPEAT () + <COND (<AND <G? <1 .NIN> 0> + <MEMQ <SET VAL <1 <NETSTATE .NIN>>> '![5 8 9!]>> + <COND (<OR <==? 13 <SET VAL <ASCII <NEXTCHR .NIN>>>> <==? 10 .VAL>> + <READCHR .NIN>) + (<AND <TYPE? <SET VAL <READSTRING .BUF .NIN " +" '<>>> FIX> + <G? <SET CNT .VAL> 0>> + <COND (<AND <TYPE? .CHAN CHANNEL> ,CCA-ALLOW-SCRIPT?> + <PRINC " +**RCVD** " .CHAN> + <PRINTSTRING .BUF .CHAN .CNT>)> + <COND (<OR <==? <SET VAL <1 .BUF>> !"?> + <==? .VAL !"-> + <==? .VAL !"+> + <MAPR <> <FUNCTION (S1 S2) + #DECL ((VALUE) <OR 'T FALSE> + (S1 S2) STRING) + <COND (<==? <1 .S1> <1 .S2>>) + (<MAPLEAVE <>>) (T)>> + ,SYNMSG .BUF>> + <SET VAL <ISTRING .CNT>> + <MAPR <> <FUNCTION (S1 S2) + #DECL ((VALUE S1 S2) STRING) + <PUT .S1 1 <1 .S2>>> + .VAL .BUF> + <RETURN <CHTYPE (<STRING <1 .VAL> <2 .VAL> + <3 .VAL> <4 .VAL> <5 .VAL>> + .VAL) FALSE>>) + (<OR <EMPTY? .CODEST> + <NOT <MAPF <> <FUNCTION (STR) + #DECL ((STR) STRING) + <COND (<MAPR <> <FUNCTION (S1 S2) + #DECL ((VALUE) <OR 'T FALSE> + (S1 S2) STRING) + <COND (<==? <1 .S1> <1 .S2>>) + (<MAPLEAVE <>>) (T)>> + .STR .BUF> + <MAPLEAVE <>>) + (T)>> + .CODEST>>> + <RETURN <STRING <1 .BUF> + <2 .BUF> + <3 .BUF> + <4 .BUF> + <5 .BUF>>>)>)>) + (<MEMQ .VAL '![-1 0 1 3 !]> + <RETURN <CHTYPE ("NET CONNECTION DEAD" <NETSTATE .NIN>) FALSE>>)>>)>> + + + +" * CCA-PRINT *" + +<DEFINE CCA-PRINT CCA-ACT ("TUPLE" OBJ "AUX" VAL CHAN NOUT) +#DECL ((VALUE VAL) ANY + (OBJ) TUPLE + (NOUT) <OR CHANNEL FALSE> + (CHAN) <OR CHANNEL FALSE> + (OUTCHAN) <SPECIAL CHANNEL> + (CCA-ACT) <SPECIAL ACTIVATION>) +<COND (<TYPE? <SET CHAN ,CCA-SCRIPT-CHAN> CHANNEL>) + (<ASSIGNED? OUTCHAN> <SET CHAN .OUTCHAN>) + (ELSE <SET CHAN <>>)> +<COND (<AND <TYPE? <SET VAL <OR ,CCA-CHAN <CCA-ACTIVATE>>> LIST> + <==? 2 <LENGTH .VAL>> + <TYPE? <SET VAL <2 .VAL>> CHANNEL>> + <SET NOUT .VAL>) + (ELSE <RETURN <CHTYPE ("NO CHANNEL" .VAL) FALSE> .CCA-ACT>)> +<COND (<AND <G? <1 .NOUT> 0> + <NOT <MEMQ <1 <NETSTATE .NOUT>> '![-1 0 3!]>>> + <COND (<AND <TYPE? .CHAN CHANNEL> ,CCA-ALLOW-SCRIPT?> + <PRINC " +**SENT** " .CHAN> + <MAPF <> <FUNCTION (VAL) <PRINC .VAL .CHAN>> .OBJ>)> + <MAPF <> <FUNCTION (VAL) <PRINC .VAL .NOUT>> .OBJ> + <NETS .NOUT> + T)>> + + +<DEFINE CCA-COMMAND (TXT "AUX" VAL) +#DECL ((VALUE) <OR 'T FALSE> (TXT) STRING (VAL) ANY) +<COND (<AND <OR ,CCA-CHAN <CCA-ACTIVATE>> + <COND (<AND <TYPE? <SET VAL <OR ,CCA-CHAN <CCA-ACTIVATE>>> LIST> + <==? 2 <LENGTH .VAL>> + <TYPE? <1 .VAL> CHANNEL> + <TYPE? <2 .VAL> CHANNEL>>) + (<CHTYPE ("NOT CONNECTED TO DATACOMPUTER") FALSE>)> + <CCA-PRINT .TXT> + <CCA-READ ,RDYMSG>> + T)>> + + +<DEFINE CCA-ERR-SYNC ("AUX" VAL) +#DECL ((VALUE) <OR 'T FALSE> (VAL) ANY) +<COND (<AND <COND (<AND <TYPE? <SET VAL <OR ,CCA-CHAN <CCA-ACTIVATE>>> LIST> + <==? 2 <LENGTH .VAL>> + <TYPE? <1 .VAL> CHANNEL> + <TYPE? <2 .VAL> CHANNEL>>) + (<CHTYPE ("NOT CONNECTED TO DATACOMPUTER") FALSE>)> + <CCA-PRINT <ASCII 12>> + <REPEAT () <COND (<=? ";I229" <CCA-READ ";I229">> <RETURN>)>> + <CCA-READ ,RDYMSG>> + T)>> + + +<DEFINE CCA-ACTIVATE-SCRIPT (TO "OPTIONAL" TO1 "AUX" CHAN) +#DECL ((VALUE) <OR CHANNEL FALSE> (TO) <OR STRING CHANNEL> (TO1) CHANNEL + (CHAN) <OR CHANNEL FALSE>) +<COND (,CCA-SCRIPT-CHAN) + (<COND (<TYPE? .TO CHANNEL> <SET CHAN .TO>) + (<SET CHAN <OPEN "PRINTB" .TO>>)> + <COND (<AND <ASSIGNED? TO1> <TYPE? .TO1 CHANNEL>> + <PUT <TOP .CHAN> 1 (.TO1)>)> + <SETG CCA-SCRIPT-CHAN .CHAN>)>> + + + +<DEFINE CCA-DEACTIVATE-SCRIPT () +#DECL ((VALUE) <OR 'T FALSE>) +<COND (<TYPE? ,CCA-SCRIPT-CHAN CHANNEL> + <COND (<G? <1 ,CCA-SCRIPT-CHAN> 0> + <CLOSE ,CCA-SCRIPT-CHAN>)> + <SETG CCA-SCRIPT-CHAN <>>)>> + + + + + + + + + +" ** 'SUGARED' FUNCTIONS, PARALLELLING DATALANGUAGE COMMANDS **" + + +<DEFINE CCA-OPEN (FILE "OPTIONAL" (MODE "") "AUX" VAL) +#DECL ((VALUE) <OR 'T FALSE> (FILE MODE) STRING (VAL) ANY) +<COND (<AND <COND (<AND <TYPE? <SET VAL <OR ,CCA-CHAN <CCA-ACTIVATE>>> LIST> + <==? 2 <LENGTH .VAL>> + <TYPE? <1 .VAL> CHANNEL> + <TYPE? <2 .VAL> CHANNEL>>) + (<CHTYPE ("NOT CONNECTED TO DATACOMPUTER") FALSE>)> + <CCA-PRINT "OPEN " .FILE !" .MODE "; +"> + <CCA-READ ,RDYMSG>> + T)>> + + + + +<DEFINE CCA-CLOSE (FILE "AUX" VAL) +#DECL ((VALUE) <OR 'T FALSE> (FILE) STRING (VAL) ANY) +<COND (<AND <COND (<AND <TYPE? <SET VAL <OR ,CCA-CHAN <CCA-ACTIVATE>>> LIST> + <==? 2 <LENGTH .VAL>> + <TYPE? <1 .VAL> CHANNEL> + <TYPE? <2 .VAL> CHANNEL>>) + (<CHTYPE ("NOT CONNECTED TO DATACOMPUTER") FALSE>)> + <CCA-PRINT "CLOSE " .FILE "; +"> + <CCA-READ ,RDYMSG>> + T)>> + + + + +<DEFINE CCA-LOGIN (NODE "AUX" VAL) +#DECL ((VALUE) <OR 'T FALSE> (NODE) STRING (VAL) ANY) +<COND (<AND <OR ,CCA-CHAN <CCA-ACTIVATE>> + <COND (<AND <TYPE? <SET VAL <OR ,CCA-CHAN <CCA-ACTIVATE>>> LIST> + <==? 2 <LENGTH .VAL>> + <TYPE? <1 .VAL> CHANNEL> + <TYPE? <2 .VAL> CHANNEL>>) + (<CHTYPE ("NOT CONNECTED TO DATACOMPUTER") FALSE>)> + <CCA-PRINT "LOGIN " .NODE "; +"> + <CCA-READ ,RDYMSG>> + T)>> + + + + +<DEFINE CCA-CONNECT (PORT MODE "AUX" SOC VAL) +#DECL ((VALUE) <OR 'T FALSE> (PORT MODE) STRING (VAL) ANY (SOC) FIX) +<COND (<AND <COND (,CCA-DATA-CHAN + <CHTYPE ("CONNECTION ALREADY OPEN") FALSE>) (T)> + <COND (<AND <TYPE? <SET VAL <OR ,CCA-CHAN <CCA-ACTIVATE>>> LIST> + <==? 2 <LENGTH .VAL>> + <TYPE? <1 .VAL> CHANNEL> + <TYPE? <2 .VAL> CHANNEL>>) + (<CHTYPE ("NOT CONNECTED TO DATACOMPUTER") FALSE>)> + <COND (<OR <=? "READ" .MODE> <=? "READB" .MODE>> + <SET SOC <+ 2 <7 <1 ,CCA-CHAN>>>>) + (<OR <=? "PRINT" .MODE> <=? "PRINTB" .MODE>> + <SET SOC <+ 2 <7 <2 ,CCA-CHAN>>>>) + (<CHTYPE ("ILLEGAL MODE" .MODE) FALSE>)>> + <AND <CCA-PRINT "CONNECT " .PORT !" .SOC "; +"> + <CCA-READ ,RDYMSG> + <SETG CCA-DATA-MODE (.MODE .SOC)> + T>)>> + + +<DEFINE CCA-ACTIVATE-DATA-CHAN ("OPTIONAL" (WAITIME 120) "AUX" VAL) +#DECL ((VALUE) <OR CHANNEL FALSE> (WAITIME) FIX (VAL) ANY) +<COND (<SET VAL <AND <COND (<NOT ,CCA-DATA-CHAN>) + (<CHTYPE ("CONNECTION ALREADY SET-UP") FALSE>)> + <COND (<AND <TYPE? ,CCA-DATA-MODE LIST> + <==? 2 <LENGTH ,CCA-DATA-MODE>> + <TYPE? <1 ,CCA-DATA-MODE> STRING> + <TYPE? <2 ,CCA-DATA-MODE> FIX>>) + (<CHTYPE ("PORT NOT CONNECTED") FALSE>)> + <COND (<AND <TYPE? <SET VAL <OR ,CCA-CHAN <CCA-ACTIVATE>>> LIST> + <==? 2 <LENGTH .VAL>> + <TYPE? <1 .VAL> CHANNEL> + <TYPE? <2 .VAL> CHANNEL>>) + (<CHTYPE ("NOT CONNECTED TO DATACOMPUTER") FALSE>)> + <COND (<SETG CCA-DATA-CHAN <OPEN <1 ,CCA-DATA-MODE> + <2 ,CCA-DATA-MODE> -1 "NET" -1>>) + (<CHTYPE ("COULDNT OPEN DATA CHANNEL" ,CCA-DATA-CHAN) FALSE>)> + <SET VAL <PROG CCA-DATA-ACT () + #DECL ((CCA-DATA-ACT) <SPECIAL ACTIVATION>) + <INT-LEVEL 4> + <ON "CHAR" ,DATA-NETINT 3 0 ,CCA-DATA-CHAN> + <INT-LEVEL 0> + <COND (<NOT <==? 1 <1 <SET VAL <NETSTATE ,CCA-DATA-CHAN>>>>> + .VAL) + (ELSE <SLEEP .WAITIME> + <NETCLOSE ,CCA-DATA-CHAN> + <SETG CCA-DATA-CHAN <>> + <RETURN <CHTYPE ("TIME-OUT, RFC NOT RECEIVED") + FALSE> + .CCA-DATA-ACT>)>>> + <OFF "CHAR" ,CCA-DATA-CHAN> + <COND (<AND <TYPE? .VAL UVECTOR> <==? 2 <1 .VAL>>>) + (<CHTYPE ("FUNNY STATE ENCOUNTERED" .VAL) FALSE>)> + <COND (<AND <NETACC ,CCA-DATA-CHAN> + <MEMQ <1 <SET VAL <NETSTATE ,CCA-DATA-CHAN>>> + '![5 8 9!]>>) + (<CHTYPE ("COULDNT ACCEPT CONNECTION" <NETSTATE ,CCA-DATA-CHAN>) + FALSE>)>>> + ,CCA-DATA-CHAN) + (ELSE + <COND (<TYPE? ,CCA-DATA-CHAN CHANNEL> + <NETCLOSE ,CCA-DATA-CHAN> + <SETG CCA-DATA-CHAN <>>)> + .VAL)>> + + + +<DEFINE CCA-DEACTIVATE-DATA-CHAN ("AUX" VAL) +#DECL ((VALUE) <OR 'T FALSE> (VAL) ANY) +<COND (<AND <GASSIGNED? CCA-DATA-CHAN> + <TYPE? ,CCA-DATA-CHAN CHANNEL>> + <NETCLOSE ,CCA-DATA-CHAN> + <SETG CCA-DATA-CHAN <>> + <SETG CCA-DATA-MODE <>> + T)>> + + + +<DEFINE CCA-ASSIGN (TO FROM "OPTIONAL" (FLG <>) (WAITIME 120) "AUX" VAL) +#DECL ((VALUE) <OR CHANNEL STRING FALSE> (FROM TO) STRING (VAL FLG) ANY (WAITIME) FIX) +<COND (<AND <COND (<AND <TYPE? <SET VAL <OR ,CCA-CHAN <CCA-ACTIVATE>>> LIST> + <==? 2 <LENGTH .VAL>> + <TYPE? <1 .VAL> CHANNEL> + <TYPE? <2 .VAL> CHANNEL>>) + (<CHTYPE ("NOT CONNECTED TO DATACOMPUTER") FALSE>)> + <CCA-PRINT .TO " = " .FROM "; +"> + <SET VAL <CCA-READ ,RDYMSG ".I230" ".I231" ".I240" ".I241">>> + <COND (<NOT .FLG> .VAL) + (<AND ,CCA-DATA-MODE + <OR <=? .VAL ".I240"> <=? .VAL ".I230">> + <SET VAL <CCA-ACTIVATE-DATA-CHAN .WAITIME>> + <CCA-READ ";I249" ";I239">> + .VAL)>)>> + + +<DEFINE CCA-GET (TO "OPTIONAL" (FROM ,CCA-DATA-CHAN) "AUX" VAL CHAN) +#DECL ((VALUE) <OR CHANNEL 'T FALSE> (TO) <OR CHANNEL STRING> + (FROM CHAN) <OR CHANNEL FALSE> (VAL) ANY) +<COND (<AND <COND (<AND <TYPE? <SET VAL <OR ,CCA-CHAN <CCA-ACTIVATE>>> LIST> + <==? 2 <LENGTH .VAL>> + <TYPE? <1 .VAL> CHANNEL> + <TYPE? <2 .VAL> CHANNEL>>) + (<CHTYPE ("NOT CONNECTED TO DATACOMPUTER") FALSE>)> + <COND (<AND <TYPE? .FROM CHANNEL> + <OR <=? "READ" <2 .FROM>> <=? "READB" <2 .FROM>>>>) + (<CHTYPE ("BAD 'FROM' CHANNEL ARGUMENT" .FROM) FALSE>)> + <COND (<TYPE? .TO CHANNEL> + <COND (<OR <=? "PRINTB" <2 .TO>> <=? "PRINT" <2 .TO>>> + <SET CHAN .TO>)>) + (<AND <TYPE? .TO STRING> <SET CHAN <OPEN "PRINTB" .TO>>>) + (<CHTYPE ("COULDN'T OPEN OUTPUT CHANNEL" .TO) FALSE>)> + <COND (<=? "READ" <2 .FROM>> + <REPEAT ((STR ,CCA-STR)) + #DECL ((STR) STRING) + <COND (<AND <TYPE? <SET VAL <READSTRING .STR .FROM "" '<>>> + FIX> + <G? .VAL 0>> + <PRINTSTRING .STR .CHAN .VAL>) + (ELSE <RETURN>)>>) + (<=? "READB" <2 .FROM>> + <REPEAT ((BUF ,CCA-UVCT) (BUFLNT <LENGTH .BUF>) (CNT 0)) + #DECL ((BUF) UVECTOR (BUFLNT CNT) FIX) + <COND (<AND <TYPE? <SET VAL <READB .BUF .FROM '<>>> FIX> + <G? .VAL 0>> + <COND (<==? .VAL .BUFLNT> <PRINTB .BUF .CHAN>) + (ELSE + <SET CNT 0> + <PRINTB <IUVECTOR .VAL + '<NTH .BUF <SET CNT <+ 1 .CNT>>>> .CHAN> + <RETURN>)>) + (ELSE <RETURN>)>>)>> + <COND (<==? .TO .CHAN> .TO) + (ELSE <CLOSE .CHAN> 'T)>)>> + + + + +<DEFINE CCA-SEND (FROM "OPTIONAL" (TO ,CCA-DATA-CHAN) "AUX" VAL CHAN) +#DECL ((VALUE) <OR CHANNEL 'T FALSE> (FROM) <OR CHANNEL STRING> + (TO CHAN) <OR CHANNEL FALSE> (VAL) ANY) +<COND (<AND <COND (<AND <TYPE? <SET VAL <OR ,CCA-CHAN <CCA-ACTIVATE>>> LIST> + <==? 2 <LENGTH .VAL>> + <TYPE? <1 .VAL> CHANNEL> + <TYPE? <2 .VAL> CHANNEL>>) + (<CHTYPE ("NOT CONNECTED TO DATACOMPUTER") FALSE>)> + <COND (<AND <TYPE? .TO CHANNEL> + <OR <=? "PRINTB" <2 .TO>> <=? "PRINT" <2 .TO>>>>) + (<CHTYPE ("BAD 'TO' CHANNEL ARGUMENT" .TO) FALSE>)> + <COND (<TYPE? .FROM CHANNEL> + <COND (<OR <=? "READB" <2 .TO>> <=? "READ" <2 .FROM>>> + <SET CHAN .FROM>)>) + (<AND <TYPE? .FROM STRING> <SET CHAN <OPEN "READB" .FROM>>>) + (<CHTYPE ("COULDN'T OPEN INPUT CHANNEL" .FROM) FALSE>)> + <PROG CCA-DATA-ACT () + #DECL ((CCA-DATA-ACT) <SPECIAL ACTIVATION>) + <INT-LEVEL 4> + <ON "CHAR" ,DATA-NETINT 3 0 .TO> + <INT-LEVEL 0> + <SET VAL <COND (<=? "PRINTB" <2 .TO>> <COPY-FILE .CHAN .TO>) + (<=? "PRINT" <2 .TO>> <FILECOPY .CHAN .TO>)>> + <OFF "CHAR" .TO> + .VAL>> + <COND (<==? .FROM .CHAN> .FROM) + (ELSE <CLOSE .CHAN> 'T)>)>> + + + + + +<DEFINE CCA-LIST (FILE "OPTIONAL" (MODE "") "AUX" VAL) +#DECL ((VALUE) <OR 'T FALSE> (FILE MODE) STRING (VAL) ANY) +<COND (<AND <COND (<AND <TYPE? <SET VAL <OR ,CCA-CHAN <CCA-ACTIVATE>>> LIST> + <==? 2 <LENGTH .VAL>> + <TYPE? <1 .VAL> CHANNEL> + <TYPE? <2 .VAL> CHANNEL>>) + (<CHTYPE ("NOT CONNECTED TO DATACOMPUTER") FALSE>)> + <CCA-PRINT "LIST " .FILE !" .MODE "; +"> + <CCA-READ ,RDYMSG>> + T)>> + + + + +" * ICP * + +Initiates Initial Connection Protocol with a foreign host" + + +<DEFINE ICP ICPACT (HOST FSOC "OPTIONAL" (WAITIME <* 3 60>) + "AUX" CHICP CH1 CH2 SOC STATE) +#DECL((HOST FSOC) FIX + (CH1 CH2) <OR FALSE CHANNEL> + (CHICP) <SPECIAL <OR CHANNEL FALSE>> + (STATE) <OR UVECTOR FALSE> + (SOC) <OR UVECTOR FIX FALSE> + (WAITIME) FIX + (ICPACT) ACTIVATION) +<COND (<SET CHICP <OPEN "READB" -1 .FSOC "NET" .HOST 32>> + <SET STATE <PROG DONE () + #DECL ((DONE) <SPECIAL ACTIVATION>) + <INT-LEVEL 4> + <ON "CHAR" ,ICP-NETINT 3 0 .CHICP> + <INT-LEVEL 0> + <COND (<NOT <==? 4 <1 <SET STATE <NETSTATE .CHICP>>>>> + <OFF "CHAR" .CHICP> + <RETURN .STATE .DONE>) + (ELSE + <SLEEP .WAITIME> + <NETCLOSE .CHICP> + <RETURN <CHTYPE ("ICP timed out") FALSE> .ICPACT>)>>> + <COND (<AND <OR <==? <1 .STATE> 5> <==? <1 .STATE> 9><==? <1 .STATE> 8>> + <READB <SET SOC '![0!]> .CHICP> + <SET SOC <1 .SOC>> + <SET CH1 <OPEN "READ" <+ 2 <7 .CHICP>> <+ 1 .SOC> + "NET" .HOST 8>> + <SET CH2 <OPEN "PRINT" <+ 3 <7 .CHICP>> .SOC "NET" .HOST 8>> + <PUT .CH2 13 9000000> + <NETCLOSE .CHICP>> + <ON "CHAR" ,FDUPLEX-NETINT 3 0 .CH1> + <ON "CHAR" ,FDUPLEX-NETINT 3 0 .CH2> + (.CH1 .CH2)) + (ELSE <CHTYPE (.STATE) FALSE>)>)>> + + + +" * NETWORK INTERRUPT HANDLERS *" + +<DEFINE ICP-NETINT (STATE CHAN "AUX" A) +#DECL((A) UVECTOR + (STATE) <OR UVECTOR FALSE> + (CHAN) CHANNEL + (DONE) <SPECIAL ACTIVATION> + (CHICP) <SPECIAL <OR CHANNEL FALSE>>) +<COND (<AND <ASSIGNED? DONE> + <TYPE? .DONE ACTIVATION> + <ASSIGNED? CHICP> + <TYPE? .CHICP CHANNEL> + <==? .CHAN .CHICP> + <NOT <==? 4 <1 <SET A <NETSTATE .CHICP>>>>>> + <DISMISS .A .DONE>)> +<DISMISS T>> + + +<DEFINE FDUPLEX-NETINT (VAL CHAN "AUX" NIN NOUT) +#DECL ((CHAN) <OR CHANNEL FALSE> + (CCA-ACT) <SPECIAL ACTIVATION> + (VAL) ANY + (NIN NOUT) CHANNEL) +<COND (<MEMQ <1 <NETSTATE .CHAN>> '![-1 0 3!]> + <COND (<AND <TYPE? ,CCA-CHAN LIST> + <==? 2 <LENGTH ,CCA-CHAN>> + <TYPE? <SET NIN <1 ,CCA-CHAN>> CHANNEL> + <TYPE? <SET NOUT <2 ,CCA-CHAN>> CHANNEL>> + <NETCLOSE .NIN> + <NETCLOSE .NOUT> + <SETG CCA-CHAN <CHTYPE ("INTERRUPT, NET CONNECTION CRASHED") FALSE>>)> + <COND (<AND <GASSIGNED? CCA-DATA-CHAN> + <TYPE? ,CCA-DATA-CHAN CHANNEL>> + <NETCLOSE ,CCA-DATA-CHAN> + <SETG CCA-DATA-CHAN <>>)> + <COND (<ASSIGNED? CCA-ACT> + <DISMISS ,CCA-CHAN .CCA-ACT>)>)> +<DISMISS T>> + + + +<DEFINE DATA-NETINT (VAL CHAN) +#DECL ((CHAN) <OR CHANNEL FALSE> + (CCA-DATA-ACT) <SPECIAL ACTIVATION> + (VAL) ANY) +<COND (<AND <GASSIGNED? CCA-DATA-CHAN> + <==? .CHAN ,CCA-DATA-CHAN> + <ASSIGNED? CCA-DATA-ACT>> + <COND (<==? 2 <1 <SET VAL <NETSTATE .CHAN>>>> + <DISMISS <NETSTATE .CHAN> .CCA-DATA-ACT>) + (<MEMQ <1 .VAL> '![-1 0 3!]> + <DISMISS <CHTYPE ("INTERRUPT, AUX DATA CHAN CRASHED") FALSE> + .CCA-DATA-ACT>)>)> +<DISMISS T>> + + +;" * NETCLOSE *" + +<DEFINE NETCLOSE (VAL "AUX" CHAN) +#DECL ((VALUE VAL) ANY (CHAN) CHANNEL) +<COND (<AND <TYPE? .VAL CHANNEL> <G? <1 <SET CHAN .VAL>> 0>> + <COND (<GET .CHAN INTERRUPT> <OFF "CHAR" .CHAN>)> + <CLOSE .CHAN>)>> + + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog1/charap.ujhm01 b/src/mprog1/charap.ujhm01 new file mode 100644 index 00000000..b59a49b5 --- /dev/null +++ b/src/mprog1/charap.ujhm01 @@ -0,0 +1,84 @@ +<PACKAGE "CHARAP"> + +<ENTRY CHARAPPEND CR FF> + +<USE-DEFER "FP"> ; "THE FPRINT PACKAGE" + +<SETG CR <SET CR " +" >> ; "CR - LF FOR OTHERS TO USE" + +<SETG FF <SET FF <ASCII 12>>> ; "FORM FEED" + +<MANIFEST CR FF> ; "MANIFEST FOR COMPILATIONS" + ; "HOWEVER, THE ATOM CR WILL CAUSE A <TERPRI>" + ; " RATHER THAN A <PRINC ,CR>" + + +<DEFINE CHARAPPEND (OUT-TO PTYP CLSSW "TUPLE" THINGS + "AUX" CHNL LEN TSLEN FNAME (TSTR <ISTRING 10>)) + #DECL ((VALUE CHNL) <OR CHANNEL FALSE> + (TSTR FNAME) STRING + (OUT-TO) <OR STRING CHANNEL> + (THINGS) TUPLE + (PTYP LEN TSLEN) FIX + (A) <OR CHARACTER FALSE>) + + <PROG () + <COND (<TYPE? .OUT-TO CHANNEL> ; "COMPUTE FNAME" + <AND <=? <9 .OUT-TO> "NUL"> <RETURN .OUT-TO>> ; "TO NUL: IS PUNTED" + <SET FNAME <STRING <9 .OUT-TO> !": + <10 .OUT-TO> !"; + <7 .OUT-TO> !" + <8 .OUT-TO>>>) + (<SET FNAME .OUT-TO>)> + + <COND (<=? .FNAME "NUL:"> <RETURN .OUT-TO>) ; "GET CHANNEL TO PRINT ON" + (<=? .FNAME "TTY:"> <SET CHNL .OUTCHAN> <SET CLSSW %<>>) ; "TO TTY IS OK" + (<AND <TYPE? .OUT-TO CHANNEL> ; "ALREADY HAVE PRINT OR PRINTO" + <N==? <1 .OUT-TO> 0> + <MEMBER <2 .OUT-TO> '["PRINT" "PRINTO"]>> + <SET CHNL .OUT-TO>) ; "JUST GO PRINT MORE ON IT" + + (<COND (<AND <TYPE? .OUT-TO CHANNEL> ; "HAVE AN OPEN 'READ' CHANNEL" + <N==? <1 .OUT-TO> 0> + <=? <2 .OUT-TO> "READ">> + <SET CHNL .OUT-TO>) + (<TYPE? .OUT-TO CHANNEL> ; "SOME OTHER OR CLOSED CHANNEL" + <CLOSE .OUT-TO> + <SET CHNL <OPEN "READ" .FNAME>>) ; "CHANGE IT FOR A READ CHANNEL" + (<SET CHNL <OPEN "READ" .FNAME>>)> ; "GET A READ CHANNEL" + + <COND (<=? <9 .CHNL> "NUL"> <RETURN .CHNL>) + (<AND <SET LEN <FILE-LENGTH .CHNL>> ; "MUST HAVE STUFF IN IT" + <G? .LEN 0>> + <ACCESS .CHNL <* <MAX <- </ .LEN 5> 2> 0> + 5>> ; "ACCESS SECOND TO LAST WORD" + <SET TSLEN <READSTRING .TSTR .CHNL 10>> ; "READ THE REMAINS" + <CLOSE .CHNL> + ; "OPEN IN PRINT-OVER MODE" + <OR <SET CHNL <OPEN "PRINTO" .FNAME>> <RETURN .CHNL>> + <ACCESS .CHNL <MAX 0 <- </ .LEN 5> 2>>> ; "GET TO SAME PLACE" + <PRINTSTRING .TSTR .CHNL .TSLEN>) ; "PUT LAST CHARS BACK IN" + (ELSE ; "LENGTH OF THE FILE IS 0 OR UNDEFINED" + <CLOSE .CHNL> ; "SO GET A PRINT CHANNEL" + <OR <SET CHNL <OPEN "PRINT" .FNAME>> <RETURN .CHNL>>)>) + + (<NOT <SET CHNL <OPEN "PRINT" .FNAME>>> ; "NO SUCH FILE YET" + <RETURN .CHNL>)> ; "SO JUST GET A PRINT CHANNEL" + + <COND (<==? 3 .PTYP> ; "PTYP = 3 ==> FPRINT" + <FPRINT <1 .THINGS> .CHNL <REST .THINGS>>) + (ELSE + <REPEAT () ; "ELSE PRINT/PRINC ALL THE GOODIES" + <COND (<EMPTY? .THINGS> <RETURN T>) + (<==? <1 .THINGS> CR> <TERPRI .CHNL>) + (<==? <1 .THINGS> FF> <PRINC %<ASCII 12> .CHNL>) + (<0? .PTYP> <PRINC <1 .THINGS> .CHNL>) + (<1? .PTYP> <PRINT <1 .THINGS> .CHNL>)> + <SET THINGS <REST .THINGS>>>)> + + <COND (.CLSSW <CLOSE .CHNL>)> + .CHNL>> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog1/clean.umsb06 b/src/mprog1/clean.umsb06 new file mode 100644 index 00000000..9af1ab3f --- /dev/null +++ b/src/mprog1/clean.umsb06 @@ -0,0 +1,483 @@ +<PACKAGE "CLEAN"> + +;<ENTRY CLEAN-GRP> + +<ENTRY CLEANUP CLEAR-CLEANUP FLUSH-CLEANUP PRINT-CLEANUP> + +<ENTRY PURELST> + +<ENTRY PRINT-DECLS KEEP-DECLS USE-HASH> + +<ENTRY FLUSH-PKG-OBLS> + +<USE "PURITY"> + +<SETG KEEP-DECLS T> + +<SETG USE-HASH T> + +<NEWTYPE ASOTAB UVECTOR '<<PRIMTYPE UVECTOR> [REST LIST]>> + +<NEWTYPE HASH WORD> + +<SET GLUE T> + +<FLOAD "MUDDLE;PUREQ NBIN"> + +<SETG DECL-TABLE + '[DECL + DECLST + FORM + FORMLST + STRING + STRLST + VECTOR + VECTLST + ANY + GENLST]> + +"Returns - VECTOR of FIXes + 1 # of OBLISTs encountered + 2 # of ATOMs checked + 3 # of DECLs unique'd + 4 # of GDECLs unique'd + 5 # of RSUBRs or RSUBR-ENTRYs in purification list +" + +<DEFINE CLEANUP ( + "OPTIONAL" (PFLG <>) (CLRFLG T) (DECLFLG T) (GDECLFLG T) + (PURFLG T) (CHKFLG T) + (NOBLIST <MAPF ,LIST + <FUNCTION (ATM) + <COND (<GET .ATM OBLIST>) + (ELSE <MAPRET>)>> + '![CLEAN!-PACKAGE + ICLEAN!-CLEAN!-PACKAGE + PURITY!-PACKAGE + IPURITY!-PURITY!-PACKAGE + IPURIFY + MUDDLE + ERRORS + INTERRUPTS + PACKAGE + RPACKAGE]>) + "AUX" (ASS <ASSOCIATIONS>) (OBLCNT 0) (ATMCNT 0) (DECLCNT 0) + (GDECLCNT 0) (PURCNT 0) + (IGNOBL (<ROOT> <GET MUDDLE OBLIST>)) + (PURLST (<FORM SETG SETG ,SETG>)) (RPURLST .PURLST) + (RSUB ()) (PRSUB ()) (RSUBENT ()) (FCN ()) (TYPL ()) OBL + VAL LOCG) + #DECL ((VALUE) <VECTOR [REST FIX]> + (OBLCNT ATMCNT DECLCNT GDECLCNT PURCNT) FIX + (PFLG CLRFLG DECLFLG GDECLFLG PURFLG CHKFLG VAL) ANY + (ASS) <OR ASOC FALSE> (LOCG) LOCATIVE (OBL) OBLIST + (NOBLIST IGNOBL) <LIST [REST OBLIST]> (PURLST RPURLST) <LIST [REST FORM]> + (RSUB PRSUB RSUBENT FCN) <LIST [REST ATOM]> + (TYPL) <LIST [REST ATOM <LIST [REST ATOM]>]>) + <COND (.CLRFLG <CLEAR-CLEANUP>)> + <REPEAT () + <COND + (<AND <TYPE? <SET VAL <ITEM .ASS>> OBLIST> <NOT <MEMQ .VAL .NOBLIST>>> + <SET OBL .VAL> + <SET OBLCNT <+ 1 .OBLCNT>> + <AND .PFLG + <PRINC " +>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Oblist ==> "> + <PRIN1 <GET .OBL OBLIST>>> + <PROG ((OBLIST (.OBL))) + #DECL ((OBLIST) <SPECIAL <LIST [REST OBLIST]>>) + <MAPF <> + <FUNCTION (L) + #DECL ((L) <LIST [REST <PRIMTYPE ATOM>]>) + <MAPF <> + <FUNCTION (ATMV "AUX" (ATM <CHTYPE .ATMV ATOM>) TYP AVAL VCT TMP) + #DECL ((ATM TYP) ATOM (VCT) <PRIMTYPE VECTOR> + (ATMV) <PRIMTYPE ATOM>) + <SET ATMCNT <+ 1 .ATMCNT>> + <AND .PFLG <PRINT .ATM>> + <COND + (<AND <GASSIGNED? .ATM> + <SET AVAL ,.ATM> + <NOT <==? .ATM GROUP-PURIFY>> + <NOT <==? .ATM KILL:PURITY>>> + <COND (<PUREQ .AVAL> <AND .PFLG <PRINC " Already-purified">>) + (ELSE + <COND (<TYPE? .AVAL RSUBR RSUBR-ENTRY> + <COND (<AND .DECLFLG + <G=? <LENGTH <SET VCT .AVAL>> 3> + <TYPE? <3 .VCT> DECL>> + <PUT .VCT 3 <U-DECL <3 .VCT>>> + <SET DECLCNT <+ 1 .DECLCNT>> + <AND .PFLG <PRINC " Uniqued">>)> + <AND .PURFLG + <CHK-FOR-PGLUE .AVAL .PFLG> + <SET RPURLST + <REST <PUTREST .RPURLST + (<FORM SETG .ATM ,.ATM>)>>> + <SET PURCNT <+ 1 .PURCNT>> + .PFLG + <PRINC " Purified">>) + (<AND .GDECLFLG + <NOT <MEMQ .OBL .IGNOBL>> + <GASSIGNED? .ATM> + <SET VAL <GET-DECL <SET LOCG <GLOC .ATM>>>> + <NOT <TYPE? .VAL ATOM FIX>>> + <PUT-DECL .LOCG <U-DECL .VAL>> + <SET GDECLCNT <+ 1 .GDECLCNT>> + <AND .PFLG <PRINC " G-Uniqued">>)>)> + <AND .CHKFLG + <COND (<TYPE? .AVAL RSUBR-ENTRY> + <SET RSUBENT (.ATM !.RSUBENT)> + <AND .PFLG <PRINC " Rsubr-Entry">>) + (<TYPE? .AVAL FUNCTION> + <SET FCN (.ATM !.FCN)> + <AND .PFLG <PRINC " Function">>) + (<TYPE? .AVAL RSUBR> + <COND (<TYPE? <1 .AVAL> PCODE> + <SET PRSUB (.ATM !.PRSUB)> + <AND .PFLG <PRINC " Pure-rsubr">>) + (<TYPE? <1 .AVAL> CODE> + <SET RSUB (.ATM !.RSUB)> + <AND .PFLG <PRINC " Impure-Rsubr">>) + (<ERROR BAD-RSUBR .ATM .AVAL>)>) + (<SET TMP <MEMQ <SET TYP <TYPE .AVAL>> .TYPL>> + <PUT .TMP 2 (.ATM !<2 .TMP>)> + <AND .PFLG <PRINC !\ > <PRIN1 .TYP>>) + (<SET TYPL (.TYP (.ATM) !.TYPL)> + <AND .PFLG <PRINC !\ > <PRIN1 .TYP>>)>>)>> + .L>> + .OBL>>)> + <COND (<SET ASS <NEXT .ASS>>) + (ELSE + <SETG PURELST <REST .PURLST>> + <SETG RSUBLST .RSUB> + <SETG PRSUBLST .PRSUB> + <SETG RSUBENTLST .RSUBENT> + <SETG FCNLST .FCN> + <SETG TYPLST .TYPL> + <RETURN <SETG RETVCT + [.OBLCNT .ATMCNT .DECLCNT .GDECLCNT .PURCNT]>>)>>> + +<DEFINE CHK-FOR-PGLUE (AVAL PFLG "AUX" PVAL) +#DECL ((AVAL) <OR RSUBR RSUBR-ENTRY> + (PFLG) ANY + (PVAL) RSUBR) +<COND (<AND <COND (<TYPE? .AVAL RSUBR> <SET PVAL .AVAL>) + (<AND <TYPE? .AVAL RSUBR-ENTRY> + <TYPE? <1 .AVAL> RSUBR>> + <SET PVAL <1 .AVAL>>) + (<AND <TYPE? .AVAL RSUBR-ENTRY> + <TYPE? <1 .AVAL> ATOM> + <GASSIGNED? <1 .AVAL>> + <TYPE? <GVAL <1 .AVAL>> RSUBR>> + <SET PVAL <GVAL <1 .AVAL>>>)> + <COND (<TYPE? <1 .PVAL> PCODE> <GET .PVAL PGLUE>) + (<TYPE? <1 .PVAL> CODE> <GET .PVAL GLUE>)>> + <COND (<CHK-FOR-GLOCS .AVAL .PFLG>) + (ELSE <PUT .PVAL PGLUE> <PUT .PVAL GLUE> <>)>)>> + + +<DEFINE CHK-FOR-GLOCS (VAL PFLG "OPTIONAL" (RECFLG <>)) + <COND (<MONAD? .VAL> + <COND (<TYPE? .VAL LOCD> + <AND .PFLG <PRINC "***GLOC USED***"> <PRIN1 .VAL>> + <>) + (T)>) + (<AND .RECFLG <TYPE? .VAL STRING RSUBR RSUBR-ENTRY CODE>>) + (<AND <TYPE? .VAL UVECTOR> <==? <TYPEPRIM <UTYPE .VAL>> WORD>>) + (<MAPF <> + <FUNCTION (VAL) + <COND (<CHK-FOR-GLOCS .VAL .PFLG T>) + (ELSE <MAPLEAVE <>>)>> + .VAL>)>> + +<DEFINE U-DECL (DECL "AUX" VAL RESULT) + #DECL ((DECL VAL) ANY) + <SET RESULT + <COND (<TYPE? .DECL ATOM FIX> .DECL) + (,USE-HASH <SET VAL <AD-OBJECT .DECL>>) + (<AND <NOT ,USE-HASH> + <SET VAL + <COND (<TYPE? .DECL DECL> <MEMBER .DECL ,DECLST>) + (<TYPE? .DECL STRING> + <MEMBER .DECL ,STRLST>) + (<TYPE? .DECL FORM> <MEMBER .DECL ,FORMLST>) + (<TYPE? .DECL VECTOR> + <MEMBER .DECL ,VECTLST>) + (<MEMBER .DECL ,GENLST>)>>> + <1 .VAL>)>> + <COND (<NOT <==? .RESULT .DECL>> .RESULT) + (<AND <==? LIST <PRIMTYPE .DECL>> <NOT <PUREQ .DECL>>> + <MAPR <> + <FUNCTION (VAL) + <COND (<NOT <TYPE? <1 .VAL> ATOM FIX>> + <PUT .VAL 1 <U-DECL <1 .VAL>>>)>> + .DECL> + <AND ,KEEP-DECLS + <COND (<TYPE? .DECL FORM> + <SETG FORMLST <CONS .DECL ,FORMLST>>) + (<TYPE? .DECL DECL> + <SETG DECLST <CONS .DECL ,DECLST>>) + (<SETG GENLST <CONS .DECL ,GENLST>>)>> + .DECL) + (<TYPE? .DECL STRING> + <AND ,KEEP-DECLS <SETG STRLST <CONS .DECL ,STRLST>>> + .DECL) + (<AND <TYPE? .DECL VECTOR> <NOT <PUREQ .DECL>>> + <MAPR <> + <FUNCTION (VAL) + <COND (<NOT <TYPE? <1 .VAL> ATOM FIX>> + <PUT .VAL 1 <U-DECL <1 .VAL>>>)>> + .DECL> + <AND ,KEEP-DECLS <SETG VECTLST <CONS .DECL ,VECTLST>>> + .DECL) + (<NOT <TYPE? .DECL ATOM FIX>> + <AND ,KEEP-DECLS <SETG GENLST <CONS .DECL ,GENLST>>> + .DECL)>> + +<DEFINE CLEAR-CLEANUP () + <CREATE 1009> + <SETG DECLST ()> + <SETG FORMLST ()> + <SETG STRLST '("VALUE" "OPTIONAL" "TUPLE" "ARGS" "QUOTE")> + <SETG VECTLST ()> + <SETG GENLST ()> + <MAPF <> + ,GUNASSIGN + '![PURELST RSUBLST PRSUBLST RSUBENTLST FCNLST TYPLST]>> + +<DEFINE FLUSH-CLEANUP () + <MAPF <> + <FUNCTION (OBL) + <MAPF <> + <FUNCTION (L) + #DECL ((L) <LIST [REST <PRIMTYPE ATOM>]>) + <MAPF <> + <FUNCTION (ATMV "AUX" (ATM + <CHTYPE .ATMV ATOM>)) + #DECL ((ATMV) <PRIMTYPE ATOM> + (ATM) ATOM) + <GUNASSIGN .ATM> + <UNASSIGN .ATM>> + .L>> + .OBL>> + [<GET CLEAN!-PACKAGE OBLIST> <GET ICLEAN OBLIST>]> + <L-UNUSE "CLEAN">> + +<DEFINE PRINT-CLEANUP () + <PRINC "A total of "> + <PRIN1 <1 ,RETVCT>> + <PRINC " oblists were examined, +containing a total of "> + <PRIN1 <2 ,RETVCT>> + <PRINC " atoms. +Out of a total of "> + <PRIN1 <+ <LENGTH ,RSUBLST> + <LENGTH ,PRSUBLST> + <LENGTH ,RSUBENTLST>>> + <PRINC " rsubr's found, "> + <PRINT <3 ,RETVCT>> + <PRINC "had their decl's uniquefied, and"> + <PRINT <5 ,RETVCT>> + <PRINC "were added to the purification group. +"> + <PRINC "There were "> + <PRIN1 <4 ,RETVCT>> + <PRINC " atoms whose gdecl's were uniquefied. +"> + <PRINC " +# of VALUES TYPE"> + <PRINT <LENGTH ,RSUBLST>> + <PRINC " RSUBR-Impure"> + <PRINT <LENGTH ,PRSUBLST>> + <PRINC " RSUBR-Pure"> + <PRINT <LENGTH ,RSUBENTLST>> + <PRINC " RSUBR-Entry"> + <PRINT <LENGTH ,FCNLST>> + <PRINC " Function"> + <MAPR <> + <FUNCTION (VAL) + <COND (<TYPE? <1 .VAL> ATOM> + <PRINT <LENGTH <2 .VAL>>> + <PRINC !\ > + <PRIN1 <1 .VAL>>)>> + ,TYPLST> + <CRLF>> + +<DEFINE PRINT-DECLS ("OPTIONAL" (ARG1 <>) "AUX" VAL) + #DECL ((ARG1) <OR <LIST [REST ATOM]> ATOM FALSE> (VAL) ANY) + <COND (<NOT .ARG1> + <REPEAT ((VCT ,DECL-TABLE)) + <COND (<EMPTY? .VCT> <RETURN>)> + <P-DECL <1 .VCT> <2 .VCT>> + <SET VCT <REST .VCT 2>>>) + (<TYPE? .ARG1 LIST> + <MAPF <> + <FUNCTION (ATM) + #DECL ((ATM) ATOM) + <COND (<SET VAL <MEMQ .ATM ,DECL-TABLE>> + <P-DECL .ATM <2 .VAL>>)>> + .ARG1> + T) + (<SET VAL <MEMQ .ARG1 ,DECL-TABLE>> + <P-DECL .ARG1 <2 .VAL>> + T)>> + +<DEFINE P-DECL (TYP ATM "AUX" L) + #DECL ((ATM) ATOM (L) LIST) + <COND (<AND <TYPE? .ATM ATOM> + <GASSIGNED? .ATM> + <TYPE? ,.ATM LIST>> + <SET L ,.ATM> + <PRINC " +************************ "> + <PRIN1 .TYP> + <PRINC "******************************"> + <MAPF <> + <FUNCTION (VAL) <TERPRI> <PRINC !\ > <PRIN1 .VAL>> + .L> + T)>> + +<DEFINE FLUSH-PKG-OBLS ( + "OPTIONAL" (NOTLST '("PMAP" "SDML" "VCTMAN" "CPYFIL")) + "AUX" (OBL <GET PACKAGE OBLIST>) (CNT 0)) + #DECL ((VALUE CNT) FIX (NOTLST) <LIST [REST STRING]> (OBL) OBLIST) + <MAPF <> + <FUNCTION (L) + #DECL ((L) <LIST [REST <PRIMTYPE ATOM>]>) + <MAPF <> + <FUNCTION (ATM "AUX" VAL) + #DECL ((ATM) ATOM (VAL) STRING) + <COND (<MEMBER <SET VAL <PNAME .ATM>> .NOTLST>) + (ELSE + <L-UNUSE .VAL> + <SET CNT <+ 1 .CNT>>)>> + .L>> + .OBL> + .CNT> + +<GDECL (UNIQ.TABLE) <<PRIMTYPE UVECTOR> [REST LIST]>> + +<FLOAD "MUDDLE;RGLOCS NBIN"> + +<FLOAD "MUDDLE;HASHER NBIN"> + +<DEFINE CREATE (X "OPTIONAL" (TYPC <>)) + #DECL ((X) FIX (VALUE) <PRIMTYPE UVECTOR> (UNIQ.SIZE) <SPECIAL FIX>) + <SET UNIQ.SIZE .X> + <SETG UNIQ.TABLE <IUVECTOR .X '()>> + <COND (.TYPC <SETG UNIQ.TABLE <CHTYPE ,UNIQ.TABLE ASOTAB>>) + (ELSE ,UNIQ.TABLE)>> + +<DEFINE AD-OBJECT (OBJ "AUX" HASHNUM REMAINDER UNIQ) + #DECL ((UNIQ) <OR LIST FALSE> (REMAINDER UNIQ.SIZE) FIX (HASHNUM) HASH (OBJ) ANY + (VALUE) ANY) + <SET HASHNUM <HASH .OBJ>> + <SET REMAINDER + <+ 1 <MOD <CHTYPE .HASHNUM FIX> .UNIQ.SIZE>>> + <COND (<SET UNIQ <MEMBER .OBJ <NTH ,UNIQ.TABLE .REMAINDER>>> + <1 .UNIQ>) + (<PUT ,UNIQ.TABLE + .REMAINDER + (.HASHNUM .OBJ !<NTH ,UNIQ.TABLE .REMAINDER>)> + .OBJ)>> + +;<DEFINE AD-HASH (OBJ "AUX" HASHNUM REMAINDER UNIQ) + #DECL ((UNIQ) <OR LIST FALSE> (REMAINDER) FIX (HASHNUM) HASH (OBJ) ANY + (VALUE) LIST) + <SET HASHNUM <HASH .OBJ>> + <SET REMAINDER + <+ 1 <MOD <CHTYPE .HASHNUM FIX> .UNIQ.SIZE>>> + <COND (<SET UNIQ <MEMQ .HASHNUM <NTH ,UNIQ.TABLE .REMAINDER>>> + <COND (<=? .OBJ <2 .UNIQ>> (.HASHNUM <2 .UNIQ>)) + (<REPEAT () + #DECL ((VALUE) <OR FALSE LIST>) + <OR <SET UNIQ <MEMQ .HASHNUM <REST .UNIQ>>> + <RETURN <>>> + <AND <=? .OBJ <2 .UNIQ>> + <RETURN (.HASHNUM <2 .UNIQ>)>>>) + (<PUT ,UNIQ.TABLE + .REMAINDER + (.HASHNUM .OBJ !<NTH ,UNIQ.TABLE .REMAINDER>)> + <LIST .HASHNUM .OBJ>)>) + (<PUT ,UNIQ.TABLE + .REMAINDER + (.HASHNUM .OBJ !<NTH ,UNIQ.TABLE .REMAINDER>)> + <LIST .HASHNUM .OBJ>)>> + +<DEFINE HASH (OBJ "AUX" (HASHNO #HASH *000000000000*)) + #DECL ((OBJ) ANY (VALUE HASHNO) HASH) + <CHTYPE + <XORB <TYPE-C <TYPE .OBJ>> + <COND (<OR <==? <PRIMTYPE .OBJ> STRING> + <==? <PRIMTYPE .OBJ> ATOM>> + <HASHER .OBJ>) + (<TYPE? .OBJ LOCR> <RGLOC-CHTYPE .OBJ>) + (<STRUCTURED? .OBJ> + <MAPF <> + <FUNCTION (X) + <SET HASHNO + <CHTYPE <XORB .HASHNO <HASH .X>> HASH>>> + .OBJ> + .HASHNO) + (.OBJ)>> + HASH>> + +;<DEFINE CHANGE ("OPTIONAL" (NEW <+ <* 2 .UNIQ.SIZE> 1>) "AUX" LEN CUNIQ REM) + #DECL ((VALUE CUNIQ) <PRIMTYPE UVECTOR> (NEW REM LEN) FIX) + <SET CUNIQ <CHTYPE <IUVECTOR .NEW '()> <TYPE ,UNIQ.TABLE>>> + <MAPF <> + <FUNCTION (LIS) + #DECL ((LIS) LIST (VALUE) ATOM) + <SET LEN <LENGTH .LIS>> + <REPEAT ((N + <COND (<TYPE? ,UNIQ.TABLE ASOTAB> <- .LEN 2>) + (ELSE <- .LEN 1>)>)) + #DECL ((N) FIX (VALUE) ATOM) + <OR <G? .N 0> <RETURN T>> + <SET REM + <+ 1 <MOD <CHTYPE <NTH .LIS .N> FIX> .NEW>>> + <PUT .CUNIQ + .REM + <COND (<TYPE? ,UNIQ.TABLE ASOTAB> + (<NTH .LIS .N> + <NTH .LIS <+ .N 1>> + <NTH .LIS <+ .N 2>> + !<NTH .CUNIQ .REM>)) + (ELSE + (<NTH .LIS .N> + <NTH .LIS <+ 1 .N>> + !<NTH .CUNIQ .REM>))>> + <COND (<TYPE? .CUNIQ ASOTAB> <SET N <- .N 3>>) + (ELSE <SET N <- .N 2>>)>>> + ,UNIQ.TABLE> + <SET UNIQ.SIZE .NEW> + <SETG UNIQ.TABLE .CUNIQ>> + +;<DEFINE INSERT-ASSOC (OBJ + "OPTIONAL" (NUM #FALSE ()) + "AUX" HASHNUM REMAINDER UNIQ) + #DECL ((HASHNUM) HASH (REMAINDER) FIX (UNIQ) <OR LIST FALSE>) + <SET HASHNUM <HASH .OBJ>> + <SET REMAINDER + <+ 1 <MOD <CHTYPE .HASHNUM FIX> .UNIQ.SIZE>>> + <COND (<SET UNIQ <MEMBER .OBJ <NTH ,UNIQ.TABLE .REMAINDER>>> + <PUT .UNIQ 2 .NUM> + <1 .UNIQ>) + (<PUT ,UNIQ.TABLE + .REMAINDER + (.HASHNUM .OBJ .NUM !<NTH ,UNIQ.TABLE .REMAINDER>)> + .OBJ)>> + +;<DEFINE LOOKUP-ASSOC (OBJ "AUX" HASHNUM REMAINDER UNIQ) + #DECL ((HASHNUM) HASH (REMAINDER) FIX (UNIQ) <OR LIST FALSE>) + <SET HASHNUM <HASH .OBJ>> + <SET REMAINDER + <+ 1 <MOD <CHTYPE .HASHNUM FIX> .UNIQ.SIZE>>> + <COND (<SET UNIQ <MEMBER .OBJ <NTH ,UNIQ.TABLE .REMAINDER>>> + <2 .UNIQ>)>> + +<CLEAR-CLEANUP> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog1/datred.usg005 b/src/mprog1/datred.usg005 new file mode 100644 index 00000000..8231c921 --- /dev/null +++ b/src/mprog1/datred.usg005 @@ -0,0 +1,33 @@ +÷” ×ø1â EøjR‹øˆŸ A + +÷‘gT¥û()Õ›øÒiS©ôæÏŸú’ A + +ôTúíAüÚyséôeÙü»rîéþh7æAùð¥:E + +÷‘"Æ“ùÑPS«ù±¤Ò§úˆO…ùHO¡ú’g΃ùˆ(ô&Eøõ$ ]ùð¥>Sõ(Šôq"Ùô +Vƒù•b©A÷“é ù6F™ùðj>AõáJSô)Ô¥ú°êU¥ø±<ŸúH#I±ô¦OƒúŸ QùÊPF“û +FŠ<MAPF ,+ + <FUNCTION (E) <COND (<G? <SET N <- .N 1>> 0> .E) (<MAPSTOP .E>)>> + .OBJ>> + +"Create new object by averaging OLD's elts over window of half-size N:" + +<DEFINE SMOOTH (OLD N "AUX" (L <LENGTH .OLD>) (R <+ 1 <* 2 .N>>)) + #DECL ((VALUE OLD) <STRUCTURED <OR FIX FLOAT>> (N L R) FIX) + <CHTYPE + <MAPR ,<PRIMTYPE .OLD> + <FUNCTION (S "AUX" (SL <LENGTH .S>) (M -1)) + <COND (<==? .L .SL> ;"first time around" + <MAPRET !<STACKFORM ,UVECTOR + </ <SUMFIRST .S .M> .M> + <L=? <SET M <+ 2 .M>> .R>>>) + (<L? .SL .R> ;"near end" + <AND <0? <MOD .SL 2>> <MAPRET>> + </ <SUMFIRST .S .SL> .SL>) + (</ <SUMFIRST .S .R> .R>)>> ;"otherwise" + .OLD> + <TYPE .OLD>>> + +<ENDPACKAGE> + + \ No newline at end of file diff --git a/src/mprog1/demcls.ujhm02 b/src/mprog1/demcls.ujhm02 new file mode 100644 index 00000000..42c6bbe0 --- /dev/null +++ b/src/mprog1/demcls.ujhm02 @@ -0,0 +1,157 @@ +<PACKAGE "DEMCLS"> + +<ENTRY SIGNAL-DEMON + SET-DEMON-STATUS + CLEAR-DEMON-STATUS + READ-DEMON-STATUS> + +<USE "STR"> + +<TITLE SIGNAL-DEMON> + <DECLARE ("VALUE" <OR ATOM FALSE> STRING "OPTIONAL" FIX)> + <DPUSH TP* <ARG 1>> ;"save the string for error msg" + <HLRZ A* AB> ;"save the request integer ..." + <CAIN A* -2> ;"is there a second arg?" + <PUSH P* [0]> ;"no, use 0 then" + <CAIE A* -2> + <PUSH P* 1 <ARG 2>> ;"yes, use it" + <DPUSH TP* <ARG 1>> ;"convert the name to sixbit" + <MCALL 1 STRTOX> + <POP P* A> ;"get the request integer back" + <ASH A* -1> ;"convert to 2 minute units" + <*CALL [<SETZ> ;"do it" + <SIXBIT "DEMSIG"> + <B> + <SETZ A>]> + <JRST NO-SUCH-FILE> + <POP TP* 0> ;"flush demon name string" + <POP TP* 0> + <DMOVE A* <PQUOTE T>> ;"and return 'T" + <JRST FINIS> + NO-SUCH-FILE ;"or return a FALSE" + <POP TP* B> ;"get back name" + <POP TP* A> + <DPUSH TP* <PQUOTE "The file SYS;ATSIGN ">> + <DPUSH TP* A> + <DPUSH TP* <PQUOTE " does not exist">> + <MOVEI A* 3> + <PUSHJ P* CISTNG> + <DPUSH TP* A> + <MOVEI A* 1> + <PUSHJ P* IILIST> + <MOVE A* $TFALSE> + <JRST FINIS> + + + +<TITLE READ-DEMON-STATUS> + <DECLARE ("VALUE" <OR <VECTOR [4 FIX]> FALSE> + <OR STRING FIX>)> + <HLRZ A* <ARG 1>> + <MOVE B* 1 <ARG 1>> ;"get jobspec into B" + <CAIN A* <TYPE-CODE FIX>> ;"see if type FIX arg" + <TROA B* *400000*> ;"yes, turn on 2.9 bit and skip" + <SKIPA> + <JRST READ-DEM> + <DPUSH TP* <ARG 1>> ;"no, convert name to sixbit" + <MCALL 1 STRTOX> +READ-DEM + <*CALL [<SETZ> + <SIXBIT "RDDMST"> + <B> + <(*2000*) A> + <(*2000*) C> + <SETZM D>]> + <JRST DEMON-NOT-IN-TABLE> + <PUSH TP* $TFIX> ;"returned vector contains:" + <PUSH TP* A> ;"1: job number of demon" + <HLRZ O* C> + <ASH O* 1> ;"multiply by 2 for the user" + <PUSH TP* $TFIX> + <PUSH TP* O> ;"2: number of minutes between startups" + <HRRZ O* C> + <PUSH TP* $TFIX> + <PUSH TP* O> ;"3: number of startup calls for this demon" + <PUSH TP* $TFIX> + <ASH D* 1> ;"multiply by 2 for the user" + <PUSH TP* D> ;"4: minutes till next startup" + <MOVEI A* 4> + <PUSHJ P* CIVEC> + <JRST FINIS> +DEMON-NOT-IN-TABLE + <DMOVE A* <PQUOTE #FALSE ("Demon not in the system table")>> + <JRST FINIS> + + + +<TITLE CLEAR-DEMON-STATUS> + <DECLARE ("VALUE" <OR ATOM FALSE> <OR STRING FIX>)> + <HLRZ A* <ARG 1>> + <MOVE B* 1 <ARG 1>> + <CAIN A* <TYPE-CODE FIX>> ;"type FIX arg (demon name)?" + <TROA B* *400000*> ;"yes, set 2.9 bit and skip" + <SKIPA> + <JRST DEM-CLEAR> + <DPUSH TP* <ARG 1>> ;"no, convert to sixbit" + <MCALL 1 STRTOX> +DEM-CLEAR + <*CALL [<SETZ> + <SIXBIT "STDMST"> + <B> + [-1] + <SETZ [0]>]> + <JRST DEM-CLEAR-ERROR> + <DMOVE A* <PQUOTE T>> + <JRST FINIS> +DEM-CLEAR-ERROR + <MOVE A* $TFALSE> + <SETZM B> + <JRST FINIS> + + +<TITLE SET-DEMON-STATUS> + <DECLARE ("VALUE" <OR ATOM FALSE> <OR STRING FIX> FIX FIX FIX)> + ;"args are: 1) demon name or job number + 2) number of mins. between signals + 3) number of signals + 4) number or mins. till next signal" + + <MOVE E* <ARG 2> 1> ;"save args 2, 3, 4 on P-stk" + <ASH E* -1> ;"convert arg 2 to 2 min. units" + <PUSH P* E> + <PUSH P* <ARG 3> 1> + <MOVE E* <ARG 4> 1> ;"arg 4 ==> 2 min. units" + <JUMPE E* NO-DIV> ;"if 0, leave it" + <TRNN E* 1> ;"if even, subtract 1 (fudge factor)" + <SOS E> + <ASH E* -1> ;"divide by 2" +NO-DIV <PUSH P* E> + <HLRZ A* <ARG 1>> + <MOVE B* <ARG 1> 1> ;"get jobspec into B" + <CAIN A* <TYPE-CODE FIX>> ;"type FIX first arg (demon name)?" + <TROA B* *400000*> ;"yes, set 2.9 bit and skip" + <SKIPA> + <JRST STDMST1> + <DPUSH TP* <ARG 1>> ;"and convert the name to sixbit" + <MCALL 1 STRTOX> +STDMST1 + <POP P* E> ;"get back args: arg 4" + <POP P* D> ;"arg 3" + <POP P* C> ;"arg 2" + <HRL D* C> ;"combine args 2 & 3 for .CALL" + <*CALL [<SETZ> + <SIXBIT "STDMST"> + <B> + <D> + <SETZ E>]> + <JRST SET-DEM-ERROR> + <DMOVE A* <PQUOTE T>> ;"return a 'T" + <JRST FINIS> +SET-DEM-ERROR + <MOVE A* $TFALSE> ;"return a FALSE" + <SETZM B> + <JRST FINIS> + +<END> + +<ENDPACKAGE> diff --git a/src/mprog1/ecom.ujm010 b/src/mprog1/ecom.ujm010 new file mode 100644 index 00000000..c1762924 --- /dev/null +++ b/src/mprog1/ecom.ujm010 @@ -0,0 +1,232 @@ +<PACKAGE "ECOM"> + +<ENTRY EHACK-COMTAB> + +<USE "EHACK" "EUTL" "EGROUP" "CALSYM" "CALCOM" "COMMAND" "NSTRUC" "CALRDR" "BUF"> + +<DEFINE PRINT-OBJS (OBJS FILNAM "AUX" (OUTCHAN .OUTCHAN)(FILE? <>)) + #DECL ((OBJS) <PRIMTYPE LIST> + (FILNAM) STRING + (OUTCHAN) <OR FALSE CHANNEL> + (FILE?) <OR FALSE ATOM>) + <COND(<NOT <MEMBER "TTY:" .FILNAM>> + <COND (<NOT <SET OUTCHAN <OPEN "PRINT" .FILNAM>>> + <PRINT ("ERROR" .OUTCHAN "ASSUMING-TTY") ,OUTCHAN> + <SET OUTCHAN ,OUTCHAN>) + (<SET FILE? T>)>)> + <MAPR <> + <FUNCTION (X "AUX" WH) + #DECL ((X) <LIST ANY> (WH) <OR FALSE VECTOR>) + <APPLY <4 <3 <VERIFY-MQ <1 .X>>>> + <1 .X>> + <COND (<OR .FILE? <LENGTH? .X 1>>) + (<AND <SET FOO <READER ,YES/NO!-IEHACK + "More?" + '["If yes, the next object will be printed" ""] + '["SYM"]>> + <==? <2 .FOO> T>>) + (<MAPLEAVE T>)>> + <COND (<NOT .OBJS>) + (<EMPTY? .OBJS> + <COND (<GASSIGNED? OBJOPEN> (,OBJOPEN)) + (T ())>) + (<SYM-SORT .OBJS>)>> + <COND (.FILE? <CLOSE .OUTCHAN>)>> + +<DEFINE DUMP-OBJS (OBJS "AUX" OBJT VOBJ) + #DECL ((OBJT) VECTOR (VOBJ) APPLICABLE) + <COND (<NOT <EMPTY? .OBJS>> + <SET OBJS <SYM-SORT .OBJS>> + <SET VOBJ <4 <SET OBJT <VERIFY-MQ <1 .OBJS>>>>> + <COND (<MAPF <> + <FUNCTION (OBJ) + #DECL ((VALUE) FALSE) + <COND (<NOT <APPLY .VOBJ .OBJ>> + <MAPLEAVE T>)>> + <REST .OBJS>> + <PRINC " +OBJECTS OF DIFFERENT TYPES MAY NOT BE DUMPED TOGETHER +">) + (T + <APPLY <2 <3 .OBJT>> .OBJS>)>)>> + +<SETG EHACK-COMTAB + <MAKEBST "Editing commands" + %<BSTSORT + '["Make.group" + '<CALICO-COMMAND ,MAKE-GROUP + '[%<MAKESST "FO" ["Nodes" T "Objects" A]> + "of" + '["Indicate whether you are grouping nodes or objects" ""] + '["SYM"]]> + "Print.group" + '<PRINT-GROUP> + "Load.objects.file" + ,LOAD-ACTION + "Remove.from.open.commands" + '<CALL/APPLY '<CALICO-COMMAND ,CLOSE-ABSTR + [,OBJLOADTAB + "named" + [" +Objects named will be removed from the open commands table. A group +name is acceptable." ""] + ["SYM""MULT"]]> LOAD> + "Dump.object" + '<CALL/APPLY '<CALICO-COMMAND ,DUMP-OBJS + [,OBJLOADTAB + "named" + [" +Objects provided will be printed into an output file. A group name +from Load.objects... may be given. LOADED refers to all objects loaded +so far. OPEN-COMMANDS refers to all objects whose name is still in +the open command table." ""] + ["SYM""MULT"]]> LOAD> + "Open.object" + '<CALL/APPLY ,OPEN-ACTION LOAD> + "Print.object" + '<CALL/APPLY '<CALICO-COMMAND ,PRINT-OBJS + [,OBJLOADTAB + "named" + '[" +Pretty-prints an object in very readable form. Default is open object. +LOADED refers to all objects; OPEN-COMMANDS refers to objects whose name is +still in the open command table." ""] + '["SYM" "MULT"] + '["TTY" #FALSE () #FALSE () #FALSE ()] + "to (opt) file" + '[" +Objects will be prettily printed into the given output file. +Default is TTY:" ""] + '["FILE"]]> LOAD> + "Print.node" + '<CALL/APPLY '<CALICO-COMMAND ,PRINT-NODE + [,AVNODES + "named" + [" +Prints the contents of the node specified (synonymous with the shorthand +version , i.e. /node-name)" ""] + ["SYM"]] + []> OPEN> + "Edit.node" + '<CALL/APPLY '<CALICO-COMMAND ,EDIT-NODE + [,AVNODES + "named" + [" +Causes the contents of the specified node to be edited in the existing edit +mode (which can be altered with Use-(IMEDIT, TECO) commands). The default edit +mode is IMEDIT" ""] + ["SYM"]] + []> OPEN> + "Fill.node" + '<CALL/APPLY '<CALICO-COMMAND ,FILL-NODE + [,AVNODES + "named" + [" +Allows the specified node to be filled in (i.e. in writeover mode) or appended +to (depending on the node)" ""] + ["SYM"]] + []> OPEN> + "Scratch" + '<CALICO-COMMAND ,MAKE-SCRATCH + [,SCRATCH-TABLE + "named" + [" +Returns or creates (if none exists) and returns a \"scratch\" buffer (a la COMPOS) +for use in saving thoughts, etc." ""] + ["SYM" "ATOM" "FIX"]]> + "Edit.with.scratch" + '<CALL/APPLY '<CALICO-COMMAND ,EDIT-SCRATCH + [,SCRATCH-TABLE + "named" + [" +Name of the scratch to be loaded into the editor with the contents of the node" ""] + ["SYM"] + ,AVNODES + ", node" + [" +Name of the node to be called into the editor" ""] + ["SYM"]]> OPEN> + "Append.with.scratch" + '<CALL/APPLY '<CALICO-COMMAND ,APPEND-SCRATCH + [,SCRATCH-TABLE + "named" + [" +Will append the contents of a given scratch to a given node. If the contents of +the node is a VECTOR, the scratch will be added as a STRING. If the contents of +the node is a STRING, the characters of the scratch will be added"""] + ["SYM"] + ,AVNODES + ", node" + [" +Node which will be appended to"""] + ["SYM"]]> OPEN> + "Copy.node" + '<CALL/APPLY '<CALICO-COMMAND ,COPY-NODE + [<MAKEMST "EVNODES" [<GET ,OBJTYPE AUTO-TABLE> + ,AVNODES]> + "named" + [" +Will copy the node or node \"group\" named to any number of objects." ""] + ["SYM"] + ,OBJLOADTAB + " +to objects of unique name" + [" +Object(s) to which the node will be copied" ""] + ["SYM" "MULT"]] + []> OPEN> + "Open?" + '<COND (<GASSIGNED? OBJOPEN> + <PRINT <NNTH ,OBJOPEN ,UNAMEPOS>>) + (T <PRINC "None open">)> + "Recover" + '<RECOVER.EDIT> + "Use.teco" + '<PROG (M) <SET M <MEMBER !" .CHRTABLE>> + <PUT .M 2 ,BUFTECO> + <SETG ABSEDMODE "TECO">> + "Use.imedit" + '<COND (.IMLAC? + <PROG (M) <SET M <MEMBER !" .CHRTABLE>> + <SETG ABSEDMODE "IMEDIT"> + <PUT .M 2 ,IMBUF>>) + (<PRINT "Can not use IMEDIT since your console is not an IMLAC">)> + "Group.automatic.mode" + '<CALL/APPLY '<CALICO-COMMAND ,GROUP-AUTO + [<COND (<LENGTH? <SET 2GAT + <2 <GET ,OBJTYPE AUTO-TABLE>>> 2> + <PRINC " named "> + <CHTYPE (<PRINC <2 .2GAT>>) FALSE>) + (T <GET ,OBJTYPE AUTO-TABLE>)> + "named (opt)" + '["Which automatic mode should be used" ""] + '["SYM"] + ,OBJLOADTAB + "for objects named" + '["Which (group of) object(s) shall the automatic mode be applied to" ""] + '["SYM" "MULT"]]> + LOAD> + "Status" + '<PRINT-STATUS> + "Pop.and.return" + '<CALICO-COMMAND ,PUSHRET + '[[] + "" + [" +Value to return" ""] ["ANY"]]> + "Automatic.mode" + '<CALL/APPLY '<CALICO-COMMAND ,AUTO-MODE + [<COND (<LENGTH? <2 <SET GAT + <GET ,OBJTYPE AUTO-TABLE>>> + 2> + <PRINC " named "> + <PRINC <1 <2 .GAT>>> + <CHTYPE (<2 <2 .GAT>>) FALSE>) + (.GAT)> + "named (opt)" + '["Which automatic mode should be used"""] + '["SYM"]]> OPEN>]>>> + +<ADDTABLE ,EHACK-COMTAB> + +<ENDPACKAGE> \ No newline at end of file diff --git a/src/mprog1/gs.ujm021 b/src/mprog1/gs.ujm021 new file mode 100644 index 00000000..92720163 --- /dev/null +++ b/src/mprog1/gs.ujm021 @@ -0,0 +1,703 @@ + +<PACKAGE "GS"> + +<ENTRY GSOUT DRAW-SEG SPIN-DP-OR-LIST GSEG> +<ENTRY ALL-SEG REMOVED-SEGS OPEN-SEG DEV-DISPATCH GOUTCHAN DEV-X DEV-Y DEV-CM> +<ENTRY GSBEGIN GSEND GSCHANGE GSMOVE GSDRAW GSTEXT GSAPPEND GSREMOVE> +<ENTRY GSEND-UPDATES GSBLANK GSUNBLANK GSDOT GSINQ GSCONTENTS> +<ENTRY GSREADER GSHIT-TEST GSHIT-REFINE> +<ENTRY OFF-BEGIN OFF-END OFF-CHANGE OFF-MOVE OFF-DRAW OFF-TEXT OFF-APPEND OFF-REMOVE> +<ENTRY OFF-END-UPDATES OFF-BLANK OFF-UNBLANK OFF-DOT OFF-INQ OFF-CONTENTS> +<ENTRY OFF-READER OFF-HIT-TEST OFF-HIT-REFINE> +<ENTRY OK APPENDED CHANGED> +<ENTRY SEG-DP SEG-SEED SEG-TAIL SEG-LX SEG-LY SEG-STAT SEG-UINFO SEG-INT-ID SEG-NUM> +<ENTRY SEG-LVS SEG-LL SEG-NVS> +<ENTRY LBOUND RBOUND BBOUND TBOUND LEFT RIGHT BOTTOM GTOP> +<ENTRY USE-INQ-R INQ-RESP DEV-CHAR-SIZE SCALE_VEC IMLAC-INQ BASIC-DISPATCH> +<ENTRY MAKE-SEG USING-TTY> + +<ENTRY + GSSCALE + BOUNDS + WINDOW + GFMUNG + GFMUNGER + POSITION + LINE + REL_LINE + REL_POSITION + MAPPER + LINE_SEG + CONT_L_FLAG> + +<NEWTYPE GSEG VECTOR> + +<SETG OFF-BEGIN 1> +<SETG OFF-END 2> +<SETG OFF-CHANGE 3> +<SETG OFF-MOVE 4> +<SETG OFF-DRAW 5> +<SETG OFF-TEXT 6> +<SETG OFF-APPEND 7> +<SETG OFF-REMOVE 8> +<SETG OFF-END-UPDATES 9> +<SETG OFF-BLANK 10> +<SETG OFF-UNBLANK 11> +<SETG OFF-DOT 12> +<SETG OFF-INQ 13> +<SETG OFF-CONTENTS 14> +;<SETG OFF-HARD-COPY 15> +<SETG OFF-READER 16> +<SETG OFF-HIT-TEST 17> +<SETG OFF-HIT-REFINE 18> + +<SETG SEG-DP 1> +<SETG SEG-SEED 2> +<SETG SEG-TAIL 3> +<SETG SEG-LX 4> +<SETG SEG-LY 5> +<SETG SEG-STAT 6> +<SETG SEG-UINFO 7> +<SETG SEG-INT-ID 8> +<SETG SEG-NUM 9> +<SETG SEG-LVS 10> +<SETG SEG-LL 11> +<SETG SEG-NVS 12> + +<GDECL +(SEG-DP SEG-SEED SEG-TAIL SEG-LX SEG-LY SEG-STAT SEG-UINFO SEG-INT-ID SEG-NUM + SEG-LVS SEG-LL SEG-NVS + OFF-BEGIN OFF-END OFF-CHANGE OFF-MOVE OFF-DRAW OFF-TEXT OFF-APPEND OFF-REMOVE + OFF-END-UPDATES OFF-BLANK OFF-UNBLANK OFF-DOT OFF-INQ OFF-CONTENTS + OFF-READER OFF-HIT-TEST OFF-HIT-REFINE) FIX> + +<MANIFEST + SEG-DP SEG-SEED SEG-TAIL SEG-LX SEG-LY SEG-STAT SEG-UINFO SEG-INT-ID SEG-NUM + SEG-LVS SEG-LL SEG-NVS + OFF-BEGIN OFF-END OFF-CHANGE OFF-MOVE OFF-DRAW OFF-TEXT OFF-APPEND OFF-REMOVE + OFF-END-UPDATES OFF-BLANK OFF-UNBLANK OFF-DOT OFF-INQ OFF-CONTENTS + OFF-READER OFF-HIT-TEST OFF-HIT-REFINE> + + + + +<DEFINE GSOUT (KIND "TUPLE" TAIL) + #DECL( (KIND) FIX (DEV-DISPATCH) <SPECIAL <VECTOR [REST APPLICABLE]>> + (TAIL) TUPLE) + <APPLY <NTH .DEV-DISPATCH .KIND> !.TAIL>> + + +<DEFINE DRAW-SEG (SEG "OPTIONAL" (ADJUST-SEG T) + "AUX" (DEV-DISPATCH .DEV-DISPATCH) ALIST) + #DECL ((SEG) GSEG (ADJUST-SEG) <OR ATOM FALSE> + (ALIST) <PRIMTYPE LIST> + (DEV-X DEV-Y DEV-CM) FIX + (DEV-DISPATCH) <VECTOR [REST APPLICABLE]>) + <SET DEV-CM 0> + <APPLY <NTH .DEV-DISPATCH ,OFF-MOVE> 0 0> + <COND (<NTH .SEG ,SEG-DP> + <APPLY <NTH .SEG ,SEG-DP> <NTH .SEG ,SEG-UINFO>>) + (T + <MAPF <> + <FUNCTION (WHAT) #DECL ((WHAT) <LIST FIX [REST ANY]>) + <APPLY <NTH .DEV-DISPATCH <1 .WHAT>> !<REST .WHAT>>> + <NTH .SEG ,SEG-LL>>)> + <COND (.ADJUST-SEG + <PUT .SEG ,SEG-LX .DEV-X> + <PUT .SEG ,SEG-LY .DEV-Y>)>> + +<DEFINE SPIN-DP-OR-LIST (SEG DEV-DISPATCH "TUPLE" TAI) + #DECL ( (SEG) GSEG + (DEV-DISPATCH) <SPECIAL <VECTOR [REST APPLICABLE]>> + (TAI) TUPLE) + <COND (<NTH .SEG ,SEG-DP> + <APPLY <NTH .SEG ,SEG-DP> <NTH .SEG ,SEG-UINFO> !.TAI>) + (T + <MAPF <> + <FUNCTION (WHAT) #DECL ((WHAT) <LIST FIX [REST ANY]>) + <APPLY <NTH .DEV-DISPATCH <1 .WHAT>> !<REST .WHAT>>> + <NTH .SEG ,SEG-LL>>)>> + + + +<DEFINE GSBEGIN ("TUPLE" YY) + #DECL ((YY) TUPLE (DEV-DISPATCH) <SPECIAL <VECTOR [REST APPLICABLE]>>) + <APPLY <NTH .DEV-DISPATCH ,OFF-BEGIN> !.YY>> +<DEFINE GSEND ("TUPLE" YY) + #DECL ((YY) TUPLE (DEV-DISPATCH) <SPECIAL <VECTOR [REST APPLICABLE]>>) + <APPLY <NTH .DEV-DISPATCH ,OFF-END> !.YY>> +<DEFINE GSCHANGE ("TUPLE" YY) + #DECL ((YY) TUPLE (DEV-DISPATCH) <SPECIAL <VECTOR [REST APPLICABLE]>>) + <APPLY <NTH .DEV-DISPATCH ,OFF-CHANGE> !.YY>> +<DEFINE GSMOVE ("TUPLE" YY) + #DECL ((YY) TUPLE (DEV-DISPATCH) <SPECIAL <VECTOR [REST APPLICABLE]>>) + <APPLY <NTH .DEV-DISPATCH ,OFF-MOVE> !.YY>> +<DEFINE GSDRAW ("TUPLE" YY) + #DECL ((YY) TUPLE (DEV-DISPATCH) <SPECIAL <VECTOR [REST APPLICABLE]>>) + <APPLY <NTH .DEV-DISPATCH ,OFF-DRAW> !.YY>> +<DEFINE GSTEXT ("TUPLE" YY) + #DECL ((YY) TUPLE (DEV-DISPATCH) <SPECIAL <VECTOR [REST APPLICABLE]>>) + <APPLY <NTH .DEV-DISPATCH ,OFF-TEXT> !.YY>> +<DEFINE GSAPPEND ("TUPLE" YY) + #DECL ((YY) TUPLE (DEV-DISPATCH) <SPECIAL <VECTOR [REST APPLICABLE]>>) + <APPLY <NTH .DEV-DISPATCH ,OFF-APPEND> !.YY>> +<DEFINE GSREMOVE ("TUPLE" YY) + #DECL ((YY) TUPLE (DEV-DISPATCH) <SPECIAL <VECTOR [REST APPLICABLE]>>) + <APPLY <NTH .DEV-DISPATCH ,OFF-REMOVE> !.YY>> +<DEFINE GSEND-UPDATES ("TUPLE" YY) + #DECL ((YY) TUPLE (DEV-DISPATCH) <SPECIAL <VECTOR [REST APPLICABLE]>>) + <APPLY <NTH .DEV-DISPATCH ,OFF-END-UPDATES> !.YY>> +<DEFINE GSBLANK ("TUPLE" YY) + #DECL ((YY) TUPLE (DEV-DISPATCH) <SPECIAL <VECTOR [REST APPLICABLE]>>) + <APPLY <NTH .DEV-DISPATCH ,OFF-BLANK> !.YY>> +<DEFINE GSUNBLANK ("TUPLE" YY) + #DECL ((YY) TUPLE (DEV-DISPATCH) <SPECIAL <VECTOR [REST APPLICABLE]>>) + <APPLY <NTH .DEV-DISPATCH ,OFF-UNBLANK> !.YY>> +<DEFINE GSDOT ("TUPLE" YY) + #DECL ((YY) TUPLE (DEV-DISPATCH) <SPECIAL <VECTOR [REST APPLICABLE]>>) + <APPLY <NTH .DEV-DISPATCH ,OFF-DOT> !.YY>> +<DEFINE GSINQ ("TUPLE" YY) + #DECL ((YY) TUPLE (DEV-DISPATCH) <SPECIAL <VECTOR [REST APPLICABLE]>>) + <APPLY <NTH .DEV-DISPATCH ,OFF-INQ> !.YY>> +<DEFINE GSCONTENTS ("TUPLE" YY) + #DECL ((YY) TUPLE (DEV-DISPATCH) <SPECIAL <VECTOR [REST APPLICABLE]>>) + <APPLY <NTH .DEV-DISPATCH ,OFF-CONTENTS> !.YY>> +;<DEFINE GSHARD-COPY ("TUPLE" YY) + #DECL ((YY) TUPLE (DEV-DISPATCH) <SPECIAL <VECTOR [REST APPLICABLE]>>) + <APPLY <NTH .DEV-DISPATCH ,OFF-HARD-COPY> !.YY>> +<DEFINE GSREADER ("TUPLE" YY) + #DECL ((YY) TUPLE (DEV-DISPATCH) <SPECIAL <VECTOR [REST APPLICABLE]>>) + <APPLY <NTH .DEV-DISPATCH ,OFF-READER> !.YY>> +<DEFINE GSHIT-TEST ("TUPLE" YY) + #DECL ((YY) TUPLE (DEV-DISPATCH) <SPECIAL <VECTOR [REST APPLICABLE]>>) + <APPLY <NTH .DEV-DISPATCH ,OFF-HIT-TEST> !.YY>> +<DEFINE GSHIT-REFINE ("TUPLE" YY) + #DECL ((YY) TUPLE (DEV-DISPATCH) <SPECIAL <VECTOR [REST APPLICABLE]>>) + <APPLY <NTH .DEV-DISPATCH ,OFF-HIT-REFINE> !.YY>> + + +<PRINTTYPE GSEG + <FUNCTION (X) #DECL ((X) GSEG) + <PRINC "#GSEG #"> + <PRINC <NTH .X ,SEG-NUM>> + <PRINC " ["> + <PRINC <COND (<NTH .X ,SEG-DP> DP) + (T (<LENGTH <NTH .X ,SEG-LL>> PRIMS))>> + <PRINC "]">>> + +<SET LAST-SEG-NUM -1> + +<DEFINE MAKE-SEG () + #DECL ((VALUE) <GSEG <OR FALSE APPLICABLE> + <OR FALSE LIST> + <OR FALSE LIST> + FIX + FIX + <OR 'OK 'CHANGED 'APPENDED> + ANY + ANY + FIX + <OR 'T FALSE> + <OR FALSE <LIST [REST LIST]>> + <OR 'T FALSE>> + (LAST-SEG-NUM) <SPECIAL FIX>) + <CHTYPE [<> <> <> 0 0 'CHANGED <> <> <SET LAST-SEG-NUM <+ 1 .LAST-SEG-NUM>> + <> <> <>] GSEG>> + +<DEFINE GSEG (NUM "AUX" (VAL <>)) + #DECL ((NUM) FIX (VALUE VAL) <OR FALSE GSEG> + (ALL-SEG) <LIST [REST GSEG]>) + <MAPF <> + <FUNCTION (GS) #DECL ((GS) GSEG) + <COND (<==? .NUM <NTH .GS ,SEG-NUM>> + <SET VAL .GS> + <MAPLEAVE>)>> + .ALL-SEG> + <COND (.VAL) + (T <CHTYPE <LIST NO-CURRENT-SEG-NUM .NUM> FALSE>)>> + + +<DEFINE GSSCALE ("OPTIONAL" (XMIN .LEFT) (XMAX .RIGHT) (YMIN .BOTTOM) + (YMAX .GTOP)) + #DECL ((VALUE SCALE_VEC) <UVECTOR [4 FLOAT]> + (XMIN XMAX YMIN YMAX) <OR FLOAT FIX> + (LEFT RIGHT BOTTOM GTOP + RBOUND LBOUND TBOUND BBOUND) <SPECIAL <OR FLOAT FIX>>) + <SET LEFT .XMIN> + <SET RIGHT .XMAX> + <SET BOTTOM .YMIN> + <SET GTOP .YMAX> + <SET SCALE_VEC + ![</ <FLOAT <- .RBOUND .LBOUND>> <- .RIGHT .LEFT>> + </ <FLOAT <- <* .LBOUND .RIGHT> <* .RBOUND .LEFT>>> + <- .RIGHT .LEFT>> + </ <FLOAT <- .TBOUND .BBOUND>> <- .GTOP .BOTTOM>> + </ <FLOAT <- <* .BBOUND .GTOP> <* .TBOUND .BOTTOM>>> + <- .GTOP .BOTTOM>>!]>> + +<DEFINE POSITION (X Y) + #DECL ((VALUE) 'T (X Y) <OR FLOAT FIX>) + <GFMUNG 0 0 .X .Y>> + +<DEFINE LINE (X Y) + #DECL ((VALUE) 'T (X Y) <OR FIX FLOAT>) + <GFMUNG 1 0 .X .Y>> + +<DEFINE REL_LINE (X Y) + #DECL ((VALUE) 'T (X Y) <OR FLOAT FIX>) + <GFMUNG 1 1 .X .Y>> + +<DEFINE REL_POSITION (X Y) + #DECL ((VALUE) 'T (X Y) <OR FIX FLOAT>) + <GFMUNG 0 1 .X .Y>> + +<DEFINE LINE_SEG (X1 Y1 X2 Y2) + #DECL ((VALUE) 'T (X1 Y1 X2 Y2) <OR FLOAT FIX>) + <GFMUNG 0 0 .X1 .Y1 .X2 .Y2>> + +<DEFINE WINDOW ('TO_DISPLAY + "OPTIONAL" (XMIN .LEFT) (XMAX .RIGHT) (YMIN .BOTTOM) + (YMAX .GTOP) + "AUX" (LBOUND <+ <* <1 .SCALE_VEC> .XMIN> <2 .SCALE_VEC>>) + (RBOUND <+ <* <1 .SCALE_VEC> .XMAX> <2 .SCALE_VEC>>) + (BBOUND <+ <* <3 .SCALE_VEC> .YMIN> <4 .SCALE_VEC>>) + (TBOUND <+ <* <3 .SCALE_VEC> .YMAX> <4 .SCALE_VEC>>) + SCALE_VEC GLOBAL_CONSERVE_SCALE LEFT RIGHT BOTTOM GTOP) + #DECL ((VALUE) 'T + (TO_DISPLAY) STRUCTURED (XMIN XMAX YMIN YMAX) <OR FIX FLOAT> + (LBOUND RBOUND BBOUND TBOUND + LEFT RIGHT BOTTOM GTOP) <SPECIAL <OR FIX FLOAT>> + (SCALE_VEC GLOBAL_CONSERVE_SCALE) <SPECIAL ANY>) + <GSSCALE 0 1 0 1> + <COND (.OPEN-SEG <POSITION 0 0>)> + <EVAL <EVAL .TO_DISPLAY>> + T> + +<DEFINE MAPPER ("BIND" XNV + MAPPING 'TO-DO + "AUX" (MAP-TEM <COND (<ASSIGNED? .MAPPING .XNV> + <LVAL .MAPPING .XNV>) + (T + <SET .MAPPING + [.LEFT .RIGHT .BOTTOM .GTOP .SCALE_VEC] + .XNV>)>) + (LEFT <1 .MAP-TEM>) + (RIGHT <2 .MAP-TEM>) + (BOTTOM <3 .MAP-TEM>) + (GTOP <4 .MAP-TEM>) + (SCALE_VEC <5 .MAP-TEM>) + (LBOUND <+ <* <1 .SCALE_VEC> .LEFT> <2 .SCALE_VEC>>) + (RBOUND <+ <* <1 .SCALE_VEC> .RIGHT> <2 .SCALE_VEC>>) + (BBOUND <+ <* <3 .SCALE_VEC> .BOTTOM> <4 .SCALE_VEC>>) + (TBOUND <+ <* <3 .SCALE_VEC> .GTOP> <4 .SCALE_VEC>>)) + #DECL ((LEFT RIGHT BOTTOM GTOP LBOUND RBOUND BBOUND TBOUND) + <SPECIAL <OR FIX FLOAT>> + (SCALE_VEC) <SPECIAL <UVECTOR [4 FLOAT]>> + (VALUE MAP-TEM) <VECTOR [4 <OR FIX FLOAT>] UVECTOR> + (MAPPING) ATOM (TO-DO) STRUCTURED) + <PROG (MAP-TEM) + <EVAL <EVAL .TO-DO>>> + <PUT .MAP-TEM 1 .LEFT> + <PUT .MAP-TEM 2 .RIGHT> + <PUT .MAP-TEM 3 .BOTTOM> + <PUT .MAP-TEM 4 .GTOP> + <PUT .MAP-TEM 5 .SCALE_VEC>> + +<DEFINE GFMUNG (UP AB "TUPLE" POS) + #DECL ((VALUE) 'T (UP AB) FIX (POS) <TUPLE [REST <OR FIX FLOAT>]>) + <GFMUNGER .UP .AB .POS>> + +<DEFINE GFMUNGER (UP AB POS + "AUX" X Y (SC .SCALE_VEC) + FX FY) + #DECL ((VALUE) 'T + (SC) <UVECTOR [4 FLOAT]> + (FX FY) FLOAT + (AB UP X Y) FIX + (DEV-X DEV-Y) <SPECIAL FIX> + (POS) <STRUCTURED [REST <OR FIX FLOAT>]>) + <COND (<NOT <0? .AB>> + <SET FX <FLOAT .DEV-X>> + <SET FY <FLOAT .DEV-Y>>)> + <SET UP <COND (<0? .UP> ,OFF-MOVE) + (T ,OFF-DRAW)>> + <REPEAT () + <COND (<LENGTH? .POS 1> <RETURN>)> + <SET X + <FIX <+ 0.5 + <SET FX <+ <* <FLOAT <1 .POS>> <1 .SC>> <COND (<0? .AB><2 .SC>) + (T .FX)>>>>>> + <SET Y + <FIX <+ 0.5 + <SET FY <+ <* <FLOAT <2 .POS>> <3 .SC>> <COND (<0? .AB><4 .SC>) + (T .FY)>>>>>> + <GSOUT .UP .X .Y> + <SET UP ,OFF-DRAW> + <SET POS <REST .POS 2>>> + T> + +<DEFINE BOUNDS ("OPTIONAL" (IN_LBOUND .LBOUND) (IN_RBOUND .RBOUND) + (IN_BBOUND .BBOUND) (IN_TBOUND .TBOUND) + "AUX" TEMP) + #DECL ((VALUE TEMP) <VECTOR [4 <OR FIX FLOAT>]> + (IN_LBOUND IN_RBOUND IN_BBOUND IN_TBOUND) <OR FIX FLOAT> + (LBOUND RBOUND BBOUND TBOUND) <SPECIAL <OR FIX FLOAT>>) + <SET TEMP + [<SET LBOUND .IN_LBOUND> + <SET RBOUND .IN_RBOUND> + <SET BBOUND .IN_BBOUND> + <SET TBOUND .IN_TBOUND>]> + <GSSCALE> + .TEMP> + +<DEFINE USE-INQ-R ("AUX" BDS) + #DECL ((BDS) <VECTOR [REST <OR FLOAT FIX>]> + (INQ-RESP DEV-CHAR-SIZE) <SPECIAL VECTOR>) + <SET INQ-RESP <GSINQ>> + <SET DEV-CHAR-SIZE <1 <11 .INQ-RESP>>> + <SET BDS <2 .INQ-RESP>> + <BOUNDS <1 .BDS> <3 .BDS> <2 .BDS> <4 .BDS>> + <GSSCALE>> + + + +<DEFINE BAS-ERR ("TUPLE" X) #DECL ((VALUE) ANY) + <ERROR SLOT-NOT-FILLED-IN-BASIC-DISPATCH!-ERRORS .X>> + +<DEFINE BASIC-DISPATCH () #DECL ((VALUE) <VECTOR [REST APPLICABLE]>) +[ +;"BEGIN SEGMENT: TAKES OPTIONAL FUNCTION WHICH SHOULD +ACT AS A DISPLAY PROCEDURE AND AN OPTIONAL ARGUMENT TO BE +SUPPLIED TO THE FUNCTION WHENEVER IT IS APPLIED. THE DP SHOULD TAKE AN OPTIONAL +ARGUMENT (IN ADDITION TO THE ONE SUPPLIED +IN THE CALL TO GSBEGIN)." + +<FUNCTION ("OPTIONAL" (DP <>)(DP-DATA <>)) + #DECL ( (OPEN-SEG) <OR FALSE GSEG> (DP) <OR APPLICABLE FALSE> + (DEV-X DEV-Y) FIX) + <COND (.OPEN-SEG + <ERROR SEG-ALREADY-OPEN!-ERRORS> + <GNRL-GSEND>)> + <SET ALL-SEG (!.ALL-SEG <SET OPEN-SEG <MAKE-SEG>>)> + <PUT .OPEN-SEG ,SEG-STAT 'CHANGED> + <SET DEV-X <SET DEV-Y 0>> + <COND (.DP + <PUT .OPEN-SEG ,SEG-DP .DP> + <PUT .OPEN-SEG ,SEG-UINFO .DP-DATA>) + (T + <PUT .OPEN-SEG ,SEG-SEED <LIST SEED>> + <PUT .OPEN-SEG ,SEG-TAIL <NTH .OPEN-SEG ,SEG-SEED>>)>> + +;"END SEGMENT: STOPS APPENDING TO THE CURRENTLY OPEN SEGMENT. IF THERE IS NONE , ERROR" +<SETG GNRL-GSEND <FUNCTION ("AUX" TEM) + #DECL ((TEM) GSEG ( OPEN-SEG) <OR FALSE GSEG> + (DEV-X DEV-Y) FIX) + <COND (<NOT .OPEN-SEG><ERROR NO-SEGMENT-IS-OPEN!-ERRORS>) + (T + <PUT <SET TEM .OPEN-SEG> ,SEG-LX .DEV-X> + <PUT .TEM ,SEG-LY .DEV-Y> + <PUT .TEM ,SEG-SEED <CHTYPE <NTH .TEM ,SEG-SEED> FALSE>> + <SET OPEN-SEG <>> + .TEM)>>> + +;"CHANGE SEGMENT: FOR A SEGMENT WITH A DISPLAY PROCEDURE, THIS INDICATES +THAT THE DISPLAY PROCEDURE NEEDS RE-EVALUATION. ERROR IF GIVEN SEG +IS NOT ON LIST OF ALL SEGMENTS OR IF HAS NO DISPLAY PROCEDURE +THIS IS A NO-OP IF THE SEG IS CURRENTLY BLANKED OR WAS +(RECENTLY MEANING SINCE LAST ENDOF BATCHOF ETC) CREATED +OR UNBLANKED." + +<FUNCTION (SEG) + #DECL ( (SEG) GSEG (ALL-SEG) <LIST [REST GSEG]> + (OPEN-SEG) <OR GSEG FALSE>) + <COND (.OPEN-SEG + <ERROR SEG-ALREADY-OPEN!-ERRORS> + <GNRL-GSEND>)> + <COND (<MEMQ .SEG .ALL-SEG> + <SET OPEN-SEG .SEG> + <PUT .SEG ,SEG-STAT 'CHANGED> + <PUT .SEG ,SEG-NVS <>> + <SET DEV-X <SET DEV-Y 0>> + <COND (<NOT <NTH .SEG ,SEG-DP>> + <PUT .SEG ,SEG-SEED <LIST SEED>> + <PUT .SEG ,SEG-TAIL <NTH .SEG ,SEG-SEED>>)>) + (T <ERROR ARG-NOT-VALID-SEGMENT!-ERRORS .SEG>)>> + +;"ABSOLUTE POSITION: MOVE THE BEAM INVISIBLY TO THE GIVEN X Y. +(NOTHING IS DONE IF DOOUT IS FALSE. NOTHING IS OUTPUT TO DEVICE +IF ABOUT TO ERASE THE SCREEN ANYWAY. NOTHING IS CONS'D ONTO THE +LIST OF COMMAND UNITS IF THE LIST SEED IS FALSE)." + +<FUNCTION (X Y "AUX" S) + #DECL ((X Y) FIX (OPEN-SEG) <OR GSEG FALSE> + (S) GSEG + (DEV-X DEV-Y) FIX) + <COND (<NOT .OPEN-SEG> + <ERROR NO-SEGMENT-IN-PROGRESS!-ERRORS>) + (T + <SET S .OPEN-SEG> + <SET DEV-X .X> + <SET DEV-Y .Y> + <COND (<NTH .S ,SEG-SEED> + <PUT .S + ,SEG-TAIL + <REST <PUTREST + <NTH .S ,SEG-TAIL> + ((,OFF-MOVE .X .Y))>>>)>)>> + +;"ABSOLUTE DRAW: DRAW A LINE FROM WHERE THE BEAM IS TO +THE SPECIFIED LOCATION. SEE MOVE ABSOLUTE FOR CONDITIONS. +IF THE LINE IS TOO LONG FOR THE ARDS TO DRAW, IT IS HALVED RECURSIVELY" + +<FUNCTION (X Y "AUX" S) + #DECL ((X Y DEV-X DEV-Y) FIX + (S) GSEG + (OPEN-SEG) <OR FALSE GSEG>) + <COND (<NOT .OPEN-SEG> + <ERROR NO-SEGMENT-IN-PROGRESS!-ERRORS>) + (T + <SET DEV-X .X> + <SET DEV-Y .Y> + <COND (<NTH <SET S .OPEN-SEG> ,SEG-SEED> + <PUT .S + ,SEG-TAIL + <REST <PUTREST + <NTH .S ,SEG-TAIL> + ((,OFF-DRAW .X .Y))>>>)>)>> + +;"OUTPUT TEXT: TAKES A STRING OR A CHARACTER AND PRINC IT. +NOTE THAT IF ONLY AN ASCII LINEFEED CHAR IS +GIVEN THE CHAR IS IMAGE'D, NOT PRINC'D. NOTE CONDITIONS UNDER MOVE ABSOLUTE" + +<FUNCTION (XT + "OPTIONAL" (FIXEDLBOUND <FIX .LBOUND>) + (FIXEDHEIGHT <FIX <2 .DEV-CHAR-SIZE>>) + "AUX" (XXT <COND(<TYPE? .XT STRING> .XT) + (T <STRING .XT>)>) + S) + #DECL( (XT) <OR CHARACTER STRING> (XXT) STRING + (OPEN-SEG) <OR FALSE GSEG> + (S) GSEG + (DEV-X DEV-Y) FIX + (FIXEDHEIGHT FIXEDLBOUND) FIX + (LBOUND) <OR FIX FLOAT> + (DEV-CHAR-SIZE) <VECTOR [REST <OR FIX FLOAT>]>) + <COND (<NOT .OPEN-SEG> + <ERROR NO-SEGMENT-IN-PROGRESS!-ERRORS>) + (T + <MAPF <> + <FUNCTION (XCH "AUX" (NCH <ASCII .XCH>)) + #DECL((XCH) CHARACTER (NCH) FIX) + <COND (<==? .NCH 13> + <SET DEV-X .FIXEDLBOUND>) + (<==? .NCH 10> + <SET DEV-Y <- .DEV-Y .FIXEDHEIGHT>>)>> + .XXT>)> + <COND (<NTH <SET S .OPEN-SEG> ,SEG-SEED> + <PUT .S + ,SEG-TAIL + <REST <PUTREST + <NTH .S ,SEG-TAIL> + ((,OFF-TEXT .XXT .FIXEDLBOUND .FIXEDHEIGHT))>>>)>> + +;"APPEND TO SEGMENT: ERROR IF SOME SEGMENT IS ALREADY OPEN +OR IF THE GIVEN SEGMENT IS NOT ON THE LIST OF SEGMENTS. +NO COMMANDS ACTUALLY GET OUTPUT IF THE SEGMENT HAS A DP AND EITHER +THE NEED-ERASE FLAG IS SET OR THE SEGMENT IS MARKED 'NEW. +RETURNS T IF SHOULD ACTUALLY SHOULD DRAW THE STUFF, <> OTHERWISE. +(<> COULD HAPPEN IF THE SCREEN IS GOING TO BE ERASED ANYWAY AND THE +SEGMENT HAS A DISPLAY PROCEDURE)" + +<FUNCTION (SEG "AUX" SSE SSA) + #DECL ((SEG) GSEG (SSE) <PRIMTYPE LIST> (SSA) <OR ATOM FALSE> + (OPEN-SEG) <OR GSEG FALSE> + (DEV-X DEV-Y) FIX + (ALL-SEG) <LIST [REST GSEG]>) + <COND (.OPEN-SEG + <ERROR SEG-ALREADY-OPEN!-ERRORS> + <GNRL-GSEND>)> + <COND (<NOT <MEMQ .SEG .ALL-SEG>> + <ERROR ARG-NOT-VALID-SEGMENT!-ERRORS .SEG> + <>) + (T + <PUT .SEG ,SEG-NVS <>> + <SET DEV-X <NTH .SEG ,SEG-LX>> + <SET DEV-Y <NTH .SEG ,SEG-LY>> + <SET OPEN-SEG .SEG> + <COND + (<NTH .SEG ,SEG-DP> + <PUT .SEG ,SEG-STAT 'CHANGED>) + (T + <COND (<==? <NTH .SEG ,SEG-STAT> 'OK> + <PUT .SEG ,SEG-STAT 'APPENDED> + <PUT .SEG ,SEG-SEED <LIST SEED>> + <PUT .SEG ,SEG-TAIL <NTH .SEG ,SEG-SEED>>) + (T + <PUT .SEG ,SEG-SEED <CHTYPE <NTH .SEG ,SEG-SEED> LIST>>)>)>)>> + +;"REMOVE SEGMENT: ERROR IF SEGMENT IS NOT ON THE LIST OF SEGMENTS +OTHERWISE THE GIVEN SEG IS REMOVED FROM THE LIST OF ALL SEGMENTS +AND THE NEED-ERASE FLAG IS SET INDICATING THAT THE SCREEN NEEDS +ERASING." + +<FUNCTION (SEG "AUX" RST) + #DECL ((SEG) GSEG (ALL-SEG) <LIST [REST GSEG]> + (REMOVED-SEGS) LIST + (RST) <PRIMTYPE LIST>) + <COND (<==? .OPEN-SEG .SEG> + <ERROR REMOVING-CURRENT-SEGMENT!-ERRORS> + <GNRL-GSEND>)> + <COND (<SET RST <MEMQ .SEG .ALL-SEG>> + <COND (<==? <1 .ALL-SEG> .SEG> + <SET ALL-SEG <REST .ALL-SEG>>) + (T + <PUTREST <REST .ALL-SEG <- <LENGTH .ALL-SEG> + <LENGTH .RST> + 1>> + <REST .RST>>)> + <SET REMOVED-SEGS (.SEG !.REMOVED-SEGS)>) + (T + <ERROR ARG-NOT-VALID-SEGMENT!-ERRORS .SEG>)>> + + +;"END-BATCH-OF-UPDATES: FOR NIL OUTPUT HACKING. +(NOTE ST MEANS SET THE LVStatus TO THE NVStatus. +FIXUP MEANS, FOR NON-DP-SEGMENTS, +ADJUST THE LL TO REFLECT ALTERATIONS MADE + + +STATUS NVS= LVS=T LVS=<> + +CHANGED T FIXUP ST + <> ST - +APPNDD T FIXUP ST + <> ST - +OK T - ST + <> ST - +" +,BASIC-GNU + + +;"BLANK SEGMENT: IF THE SEGMENT IS VISIBLE, IT IS MADE INVISIBLE. +THIS REQUIRES ERASEING THE SCREEN UNLESS THE SEGMENT HAS STATUS 'NEW. +THE STATUS OF A BLANKED SEGMENT IS 'BLANKED." + +<FUNCTION (SEG) + #DECL ((SEG) GSEG (ALL-SEG) <LIST [REST GSEG]>) + <COND (<==? .OPEN-SEG .SEG> + <GNRL-GSEND>) + (<MEMQ .SEG .ALL-SEG> + <PUT .SEG ,SEG-NVS <>>) + (T <ERROR ARG-NOT-VALID-SEGMENT!-ERRORS .SEG>)>> + +;"UNBLANK SEGMENT: MAKES A BLANKED SEGMENT VISIBLE AGAIN." + +<FUNCTION ("OPTIONAL" (OPTSEG .OPEN-SEG) "AUX" SEG) + #DECL ((OPTSEG OPEN-SEG) <OR FALSE GSEG> + (SEG) GSEG (ALL-SEG) <LIST [REST GSEG]>) + <COND (<NOT .OPTSEG> + <ERROR UNBLANK-ARG-DEFAULTED-BUT-NO-CURRENT-SEGMENT!-ERRORS>) + (<==? .OPEN-SEG <SET SEG .OPTSEG>> + <GNRL-GSEND> + <PUT .SEG ,SEG-NVS T>) + (<MEMQ .SEG .ALL-SEG> + <PUT .SEG ,SEG-NVS T>) + (T <ERROR ARG-NOT-VALID-SEGMENT!-ERRORS .SEG>)>> + +;"DOT ABSOLUTE: DRAWS A DOT AT THE GIVEN POSITION. CONDITIONS +AS GIVEN UNDER MOVE ABSOLUTE" + +<FUNCTION (X Y "AUX" S) + #DECL ((X Y DEV-X DEV-Y) FIX + (S) GSEG + (OPEN-SEG) <OR FALSE GSEG>) + <COND (<NOT .OPEN-SEG> + <ERROR NO-SEGMENT-IN-PROGRESS!-ERRORS>) + (T + <SET DEV-X .X> + <SET DEV-Y .Y> + <COND (<NTH <SET S .OPEN-SEG> ,SEG-SEED> + <PUT .S + ,SEG-TAIL + <REST <PUTREST + <NTH .S ,SEG-TAIL> + ((,OFF-DOT .X .Y))>>>)>)>> + + +;"INQUIRY RESPONSE: RETURNS A VECTOR DESCRIBING THE TERMINAL" +,IMLAC-INQ + +;"FOR ALL GRAPHIC ELEMENTS IN ARG1 APPLY +THE APPROPRIATE ELEMENT OF ARG2 (DISPATCH TABLE) TO THE PROPER +ARGUMENTS" +,SPIN-DP-OR-LIST + +;"FREE SLOT" +<FUNCTION ("TUPLE" X) <ERROR FREE-SLOT-REACHED!-ERRORS .X>> + +;"TTY CONTROL READER" +,BAS-ERR + +;"HIT-TEST-INITIATE" +,BAS-ERR + +;"HIT-TEST-REFINE" +,BAS-ERR +]> + +<DEFINE BASIC-GNU ("AUX" (OOPEN-SEG .OPEN-SEG)) + #DECL ((VALUE) 'T + (OPEN-SEG) <SPECIAL <OR FALSE GSEG>> (OOPEN-SEG) <OR FALSE GSEG> + (ALL-SEG REMOVED-SEGS) <LIST [REST GSEG]>) + <SET REMOVED-SEGS ()> + <MAPF <> + <FUNCTION (SEG "AUX" STAT) + #DECL ((SEG) GSEG (STAT) ATOM) + <COND (<N==? .SEG .OOPEN-SEG> + <COND (<==? <SET STAT <NTH .SEG ,SEG-STAT>> 'APPENDED> + <PUTREST <REST <NTH .SEG ,SEG-LL> + <- <LENGTH <NTH .SEG ,SEG-LL>> 1>> + <REST <NTH .SEG ,SEG-SEED>>>) + (<==? .STAT 'CHANGED> + <COND (<NOT <NTH .SEG ,SEG-DP>> + <PUT .SEG ,SEG-LL <REST + <CHTYPE <NTH .SEG ,SEG-SEED> + LIST>>>)>) + (<==? .STAT 'OK>) + (T <ERROR ILLEGAL-STATUS-ATOM!-ERRRS .STAT>)> + <PUT .SEG ,SEG-STAT 'OK> + <PUT .SEG ,SEG-LVS <NTH .SEG ,SEG-NVS>>)>> + .ALL-SEG> + T> + + +<DEFINE IMLAC-INQ () + #DECL ((VALUE) VECTOR) +[ + [ 0 0 0 0 0 0 0 0 ] + [-350 -400 450 400 2] + [1.0 1.0] + 1 + ["IMLAC PDS-1" ""] + 1 + 2 + 1 + <> + 1 + ([11 21 8 12 1]) + () +] +> + +<SET LEFT <SET BOTTOM 0>> +<SET RIGHT <SET GTOP 1>> + +<SET OPEN-SEG <>> +<SET ALL-SEG ()> +<SET REMOVED-SEGS ()> +<SET USING-TTY <>> +<SET DEV-DISPATCH <BASIC-DISPATCH>> +<USE-INQ-R> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog1/inferi.udl026 b/src/mprog1/inferi.udl026 new file mode 100644 index 00000000..2f6f53f8 --- /dev/null +++ b/src/mprog1/inferi.udl026 @@ -0,0 +1,539 @@ + +<PACKAGE "INFERIOR"> + +<ENTRY INF-RUN + INF-READY + INF-LOAD + INF-KILL + INF-START + INF-CONTIN + INF-RESULT + INF-WORD + INF? + INF-HANDLER + INF-ACT + GET-ICHAN + INF-LIST + CURRENT-INF> + +<ENTRY *BREAK-HANDLER *VALUE-HANDLER ^Z-HANDLER VALRET-STRING PASS-JCL-DOWN> + +<ENTRY INF-INT-DEBUG? + INF-BREAK? + INF-DIRS + ACTION-INTERRUPTS + NO-ACTION-INTERRUPTS + NO-ACTION-MESSAGES> + +<ENTRY INF INF-JNAME INF-UCHAN INF-ICHAN INF-INDEX INF-SADDR INF-JCL INF-STATUS> + +<ENTRY *VALUE + *BREAK + *BREAK-16 + :KILL + FINISHED + *BREAK-12 + AOBJN + DDTWRITE + ^Z-TYPED + PIRQC + WANTS-TTY + IOC-ERROR + PROCEEDABLE> + +<USE "INFASS"> + +<NEWTYPE INF VECTOR '<VECTOR STRING [2 <OR FALSE CHANNEL>] [2 FIX] STRING>> + +<AND? <SETG INF-JNAME 1> + <SETG INF-UCHAN 2> + <SETG INF-ICHAN 3> + <SETG INF-INDEX 4> + <SETG INF-SADDR 5> + <SETG INF-JCL 6> + <SETG INF-STATUS 7>> + +<MANIFEST INF-JNAME INF-UCHAN INF-ICHAN INF-INDEX INF-SADDR INF-JCL INF-STATUS> + +<FLOAD "LIBRM4;S-TO-6 NBIN"> + +;"ALSO HAS INF-UV-STR" + +<SETG INF-INT-DEBUG? <>> + +<SETG INF-BREAK? <>> + +<SETG INF-LIST ()> + +<SETG CURRENT-INF <>> + +<SETG INF-DIRS '["" "SYS" "SYS1" "SYS2"]> + +<GDECL (INF-LIST) <LIST [REST FIX INF]> + (CURRENT-INF) <OR INF FALSE> + (INF-DIRS) <VECTOR [REST STRING]>> + +<AND? <SETG RUPC 0> + <SETG RTTY 2> + <SETG RFLS 3> + <SETG RUSTP 7> + <SETG RPIRQC 8> + <SETG RSV40 11> + <SETG RUIND 19> + <SETG ROPTIO 44> + <SETG RXJNAM 61>> + +<MANIFEST RUPC RTTY RFLS RUSTP RPIRQC RSV40 RUIND ROPTIO RXJNAM> + +<DEFINE INF-RUN (JNAME "OPTIONAL" (JCL "") (FIL "") (ATTY? T) (ITTY? T) "AUX" INF) + #DECL ((JNAME JCL FIL) STRING (INF) <OR INF FALSE> + (ATTY? ITTY?) <OR ATOM FALSE>) + <COND (<SET INF <INF-READY .JNAME .JCL .FIL>> + <INF-START .INF .ATTY? .ITTY?>)>> + +<DEFINE INF-READY (JNAME "OPTIONAL" (JCL "") (FIL "") "AUX" INF) + #DECL ((JNAME JCL FIL) STRING (INF) <OR INF FALSE>) + <COND (<EMPTY? .FIL> + <SET FIL <STRING "TS " .JNAME>> + <MAPF <> + <FUNCTION (SNM) + #DECL ((SNM) <SPECIAL STRING>) + <COND (<EMPTY? .SNM> <SET SNM <SNAME>>)> + <COND (<SET INF <INF-LOAD .FIL .JNAME .JCL>> + <MAPLEAVE .INF>)>> + ,INF-DIRS>) + (<SET INF + <PROG ((NM1 "TS") (NM2 .JNAME)) + #DECL ((NM1 NM2) <SPECIAL STRING>) + <INF-LOAD .FIL .JNAME .JCL>>>)>> + +<DEFINE INF-START ("OPTIONAL" (INF ,CURRENT-INF) (ATTY? T) (ITTY? T)) + #DECL ((INF) <OR INF FALSE> (ATTY? ITTY?) <OR ATOM FALSE>) + <COND (.INF + <USET <INF-UCHAN .INF> ,RUPC <INF-SADDR .INF>> + <INF-CONTIN .INF .ATTY? .ITTY?>)>> + +<DEFINE INF-CONTIN ("OPTIONAL" (INF ,CURRENT-INF) + (ATTY? T) (ITTY? T) + "AUX" UCH INFI RES) + #DECL ((INF) <OR INF FALSE> (ATTY? ITTY?) <OR ATOM FALSE> (UCH) CHANNEL + (RES) ANY (INFI) HANDLER) + <COND (.INF + <SET UCH <INF-UCHAN .INF>> + <USET .UCH ,RPIRQC 0> + <USET .UCH + ,RTTY + <COND (.ITTY? #WORD *100000000000*) (#WORD *140000000000*)>> + <PUT .INF ,INF-STATUS <>> + <AND .ATTY? <ATTY .UCH>> + <SETG CURRENT-INF .INF> + <SET INFI <HANDLER ,INF-IHEADER ,INF-IHANDLER>> + <SET RES + <PROG INF-ACT () + #DECL ((INF-ACT) <SPECIAL ACTIVATION>) + <USET .UCH ,RUSTP 0> + <COND (.ATTY? <HANG>)>>> + <COND (.ATTY? <OFF .INFI> <DTTY .UCH>)> + .RES)>> + +<DEFINE INF-HANDLER (N "AUX" (INF ,CURRENT-INF) RES A) + #DECL ((N) FIX (INF) INF (RES) ANY (A) ACTIVATION) + <COND (<AND <==? .N <INF-GET-NUM <INF-UCHAN .INF>>> + <ASSIGNED? INF-ACT> + <LEGAL? <SET A .INF-ACT>>> + <INT-LEVEL 0> + <DISMISS <^Z-HANDLER .INF .A> .A>) + (<SET INF <INF? .N>> + <AND <N==? <SET RES <^Z-HANDLER .INF>> <>> + <INF-RESULT .INF .RES>> + T)>> + +<DEFINE INF-RESULT (INF X "OPTIONAL" (J? T) (OUTCHAN .OUTCHAN)) + #DECL ((INF) INF (X) ANY (OUTCHAN) CHANNEL (J?) <OR ATOM FALSE>) + <COND (<N==? .X ,NULL> + <PRINC " ["> + <COND (.J? <PRINC "JOB "> <PRINC <INF-JNAME .INF>> <PRINC ": ">)> + <COND (<==? <PRIMTYPE .X> LIST> + <AND <NOT .X> <PRINC "ERROR ">> + <MAPR <> + <FUNCTION (X) + #DECL ((X) LIST) + <PRINC <1 .X>> + <OR <LENGTH? .X 1> <PRINC !\ >>> + .X>) + (<TYPE? .X ATOM> <PRIN1 .X>) + (<PRINC .X>)> + <PRINC "] ">)>> + +<DEFINE INF-KILL ("OPTIONAL" (INF ,CURRENT-INF) "AUX" (CI ,CURRENT-INF) (LI ,INF-LIST)) + #DECL ((INF CI) <OR FALSE INF> (LI) <LIST [REST FIX INF]>) + <COND (.INF + <UCLOSE <INF-UCHAN .INF>> + <CLOSE <INF-UCHAN .INF>> + <AND <INF-ICHAN .INF> <CLOSE <INF-ICHAN .INF>>> + <PUT .INF ,INF-UCHAN <>> + <PUT .INF ,INF-ICHAN <>> + <COND (<REPEAT ((IL .LI) L) + #DECL ((IL) <LIST [REST FIX INF]> (L) FIX) + <COND (<EMPTY? .IL> <RETURN <>>) + (<L? <SET L <LENGTH .IL>> 2> + <RETURN <>>) + (<==? .INF <2 .IL>> + <SETG INF-LIST <REST .IL 2>> + <RETURN T>) + (<L? .L 4> <RETURN <>>) + (<==? .INF <4 .IL>> + <PUTREST <REST .IL> <REST .IL 4>> + <RETURN T>)> + <SET IL <REST .IL 2>>> + <COND (<==? .INF .CI> + <SET LI ,INF-LIST> + <SETG CURRENT-INF + <COND (<EMPTY? .LI> <>) + (ELSE <2 .LI>)>>)> + .INF)>)>> + +<DEFINE INF? (JJ "AUX" J (LI ,INF-LIST)) + #DECL ((JJ) <OR INF FIX> (J) FIX (LI) <LIST [REST FIX INF]>) + <COND (<TYPE? .JJ INF> <SET J <INF-GET-NUM <INF-UCHAN .JJ>>>) + (ELSE <SET J .JJ>)> + <REPEAT () + <COND (<EMPTY? .LI> <RETURN <>>) + (<==? <1 .LI> .J> <RETURN <2 .LI>>)> + <SET LI <REST .LI 2>>>> + +<DEFINE INF-LOAD (FILE XJNAM + "OPTIONAL" (JCL "") (SADOFF 0) + "AUX" (JNAM .XJNAM) START-ADDRESS LCH UCH OOPS) + #DECL ((VALUE) <OR INF FALSE> (LCH UCH) <OR CHANNEL FALSE> + (FILE JNAM XJNAM) STRING (SADOFF) <OR FIX FALSE> + (JCL) STRING (START-ADDRESS) FIX (OOPS) <OR WORD FALSE>) + <PROG ((DEV "DSK") (SNM <SNAME>) (NM1 "TS")) + #DECL ((DEV SNM NM1) <SPECIAL STRING>) + <COND (<SET LCH <OPEN "READB" .FILE>>)>> + <COND (<NOT .LCH> .LCH) + (<NOT <SET UCH <INF-CREATE .XJNAM>>> + <CLOSE .LCH> + .UCH) + (<NOT <SET OOPS <INF-LOAD-FILE .LCH .UCH>>> + <UCLOSE .UCH> + <CLOSE .UCH> + <CLOSE .LCH> + .OOPS) + (ELSE + <CLOSE .LCH> + <COND (<GASSIGNED? INF-IHANDLER>) + (ELSE + <SETG INF-IHANDLER <ON "INFERIOR" ,INF-HANDLER 7>> + <SETG INF-IHEADER <GET INFERIOR!-INTERRUPTS INTERRUPT>>)> + <USET .UCH + ,ROPTIO + <COND (<NOT <EMPTY? .JCL>> *60000000000*) + (ELSE *20000000000*)>> + <USET .UCH ,RXJNAM <CHTYPE <S-TO-6 .XJNAM> WORD>> + <USET .UCH + ,RUPC + <SET START-ADDRESS + <+ .SADOFF <CHTYPE <GETBITS .OOPS <BITS 18>> FIX>>>> + <SETG INF-LIST + (<INF-GET-NUM .UCH> + <SETG CURRENT-INF + <CHTYPE [<8 .UCH> + .UCH + <> + <USET .UCH ,RUIND> + .START-ADDRESS + .JCL + <>] + INF>> + !,INF-LIST)> + ,CURRENT-INF)>> + + + +<SETG TUV ![0 0!]> + +<GDECL (TUV) <UVECTOR [2 FIX]>> + +<DEFINE INF-WORD (INF WH "OPTIONAL" VAL "AUX" TMP (UV <REST ,TUV>) CH) + #DECL ((INF) INF (WH TMP) FIX (VAL VALUE) <PRIMTYPE WORD> + (CH) CHANNEL (UV) <UVECTOR [REST FIX]>) + <SET WH <CHTYPE <ANDB .WH *777777*> FIX>> + <COND (<ASSIGNED? VAL> + <ACCESS <SET CH <INF-UCHAN .INF>> .WH> + <PUT .UV 1 .VAL> + <PRINTB .UV .CH> + .VAL) + (<AND <ACCESS <SET CH <GET-ICHAN .INF>> .WH> + <SET TMP <READB .UV .CH '<>>> + <1? .TMP>> + <1 .UV>)>> + +<DEFINE GET-ICHAN (INF "AUX" (ICH <INF-ICHAN .INF>) OCH) + #DECL ((INF) INF (ICH) <OR FALSE CHANNEL> (OCH) CHANNEL) + <COND (.ICH <COND (<0? <1 .ICH>> <RESET .ICH>) (ELSE .ICH)>) + (<SET ICH + <OPEN "READB" + <7 <SET OCH <INF-UCHAN .INF>>> + <8 .OCH> + <9 .OCH> + <10 .OCH>>> + <PUT .INF ,INF-ICHAN .ICH> + .ICH) + (ELSE <ERROR CANT-GET-READ-CHANNEL-TO-INFERIOR .INF>)>> + +<SETG NO-ACTION-INTERRUPTS + '![4 ;"BADPI" + 16 ;"DPY" + 32 ;"ILOPR" + 512 ;"ILUAD" + 2048 ;"1PROCED" + 8192 ;"MPV" + 16384 ;"MAR" + 262144 ;"RES" + 8388608 ;"SUPUUO" + 16777216 ;"PUR" + 33554432 ;"PURW" + 134217728 ;"PARERR"!]> + +<SETG ACTION-INTERRUPTS '![2 ;"^Z" + 128 ;".VALUE" + 256 ;"IOC" + 1024 ;".BREAK" + 268435456 ;"TTY"!]> + +<SETG NO-ACTION-MESSAGES + ["Bad interrupt location" + "Display MPV" + "Illegal instruction" + "Illegal user address" + "One-proceed breakpoint" + "Memory protection violation" + "MAR" + "Restriction violation" + "System UUO trap" + "Pure page trap" + "Attempt to write into read-only memory" + "Parity error"]> + +<GDECL (ACTION-INTERRUPTS NO-ACTION-INTERRUPTS) + <UVECTOR [REST FIX]> + (NO-ACTION-MESSAGES) + <VECTOR [REST STRING]>> + +<DEFINE ^Z-HANDLER (INF "OPTIONAL" (FREE? <>) + "AUX" RES (UCH <INF-UCHAN .INF>) (USTP <USET .UCH ,RUSTP>) + (UPC <USET .UCH ,RUPC>) (FLS <USET .UCH ,RFLS>) + (PIRQC <USET .UCH ,RPIRQC>) (SV40 <USET .UCH ,RSV40>) + (TTY <USET .UCH ,RTTY>)) + #DECL ((INF) INF (UCH) CHANNEL (RES) ANY (FREE?) <OR ACTIVATION FALSE> + (TTY USTP UPC FLS PIRQC SV40) FIX) + <OR ,INF-INT-DEBUG? <USET .UCH ,RPIRQC 0>> + <SET RES + <COND (<AND <0? <CHTYPE <GETBITS .USTP <BITS 1 33>> FIX>> + <0? .FLS>> + RUNNING) + (<0? .PIRQC> + <COND (<0? .FLS> <CHTYPE (PIRQC 0) FALSE>) + (ELSE PROCEEDABLE)>) + (<NOT <0? <CHTYPE <ANDB .PIRQC 2> FIX>>> ^Z-TYPED) + (<MAPF <> + <FUNCTION (BIT MES) + #DECL ((MES) STRING (BIT) FIX) + <COND (<NOT <0? <CHTYPE <ANDB .PIRQC .BIT> FIX>>> + <MAPLEAVE .MES>)>> + ,NO-ACTION-INTERRUPTS + ,NO-ACTION-MESSAGES>) + (<NOT <0? <CHTYPE <ANDB .PIRQC 268435456> FIX>>> + <USET .UCH ,RUPC <- .UPC 1>> + <AND .FREE? <LEGAL? .FREE?> <INT-LEVEL 0> <AGAIN .FREE?>> + WANTS-TTY) + (<NOT <0? <CHTYPE <ANDB .PIRQC 256> FIX>>> + <USET .UCH ,RUPC <- .UPC 1>> + IOC-ERROR) + (<NOT <0? <CHTYPE <ANDB .PIRQC 128> FIX>>> ;".VALUE" + <*VALUE-HANDLER .SV40 .INF>) + (<NOT <0? <CHTYPE <ANDB .PIRQC 1024> FIX>>> + <*BREAK-HANDLER .SV40 .INF .TTY .FREE?>) + (ELSE <CHTYPE (PIRQC .PIRQC) FALSE>)>> + <PUT .INF ,INF-STATUS .RES> + .RES> + +\ + +<AND? <SETG AC-FIELD <BITS 4 23>> + <SETG *BREAK #WORD *045000000000*> + <SETG *VALUE #WORD *043200000000*> + <SETG *LOGOUT #WORD *042000000033*>> + +<MANIFEST AC-FIELD *BREAK *VALUE *LOGOUT> + +<DEFINE *BREAK-HANDLER (SV40 INF TTY FREE? + "AUX" (CI? <==? .INF ,CURRENT-INF>) (UCH <INF-UCHAN .INF>) + (INS <ANDB .SV40 #WORD *777000000000*>) + (LOGO? <==? ,*LOGOUT <ANDB .SV40 #WORD *777000000077*>>) + LH W J TMP + (AC <CHTYPE <GETBITS .SV40 ,AC-FIELD> FIX>) + (EFF <COND (.LOGO? *160000*) + (<CHTYPE <GETBITS .SV40 <BITS 18>> FIX>)>)) + #DECL ((INF) INF (SV40 TTY) <PRIMTYPE WORD> (W AC EFF TMP LH) FIX (UCH) CHANNEL + (INS) WORD (J) STRING (FREE?) <OR ACTIVATION FALSE> + (CI? LOGO?) <OR ATOM FALSE>) + <PROG () + <COND (<AND <N==? ,*BREAK .INS> + <NOT .LOGO?>> + <CHTYPE (*BREAK .INS) FALSE>) + (<AND <==? .AC 10> + <NOT .LOGO?>> + <COND (<L? <SET W <INF-WORD .INF .EFF>> 0> + <SET LH <CHTYPE <GETBITS .W <BITS 17 18>> FIX>> + <COND (<1? .LH> + <PUT .INF ,INF-SADDR <INF-WORD .INF .W>>) + (<==? .LH 5> + <PUT .INF ,INF-JCL <SET J <VALRET-STRING .EFF .INF>>> + <USET ,UCH + ,ROPTIO + <COND (<EMPTY? .J> *20000000000*) + (ELSE *60000000000*)>>) + (,INF-BREAK? <RETURN (*BREAK-12 DDTWRITE)>)>) + (<0? <SET LH <CHTYPE <GETBITS .W <BITS 18 18>> FIX>>> + <RETURN <CHTYPE (*BREAK-12 .W) FALSE>>) + (<==? #WORD *000000600000* + <ANDB .LH #WORD *000000600000*>> + <RETURN (*BREAK-12 AOBJN)>) + (<1? .LH> <INF-WORD .INF .W ,INF-SADDR>) + (<==? .LH 2> + <INF-FILE-NAMES .INF + .W + <9 .UCH> + <10 .UCH> + <7 .UCH> + <8 .UCH>>) + (<==? .LH 5> + <PASS-JCL-DOWN .INF <CHTYPE <ANDB .W 262143> FIX>>) + (<==? .LH 6> + <INF-FILE-NAMES .INF .W>) + (<==? .LH 9> <INF-WORD .INF .W <S-TO-6 <UNAME>>>)> + <COND (.FREE? <AGAIN .INF-ACT>) + (ELSE <INF-CONTIN .INF <G=? <CHTYPE .TTY FIX> 0>>)> + <>) + (<OR <==? .AC 14> .LOGO?> + <COND (<NOT <0? <SET TMP <CHTYPE <GETBITS .EFF <BITS 2 13>> FIX>>>> + <INF-KILL .INF> + <COND (<AND .CI? + <G=? <CHTYPE .TTY FIX> 0> + <NOT <0? <CHTYPE <ANDB .EFF *200000*> FIX>>>> + <CRLF>)> + <COND (.CI? + <COND (<OR <==? .TMP 1> + <NOT <0? <CHTYPE <ANDB .EFF *4000*> + FIX>>>> + ,NULL) + (ELSE :KILL)>) + (<==? .TMP 2> :KILL) + (<==? .TMP 3> FINISHED)>) + (<NOT <0? <CHTYPE <ANDB .EFF 32768> FIX>>> + (*BREAK-16 BACK)) + (ELSE (*BREAK-16 .EFF))>) + (ELSE (*BREAK .AC .EFF))>>> + +<DEFINE INF-FILE-NAMES (INF W + "OPTIONAL" (D <VALUE? DEV "DSK">) (S <VALUE SNM>) + (N1 <VALUE? NM1 "INPUT">) (N2 <VALUE? NM2 ">">)) + #DECL ((INF) INF (W) FIX (D S N1 N2) STRING) + <INF-WORD .INF .W <S-TO-6 .D>> + <INF-WORD .INF <+ .W 1> <S-TO-6 .S>> + <INF-WORD .INF <+ .W 2> <S-TO-6 .N1>> + <INF-WORD .INF <+ .W 3> <S-TO-6 .N2>>> + +<DEFINE VALUE? (ATM DEF) + #DECL ((ATM) ATOM (VALUE DEF) ANY) + <COND (<ASSIGNED? .ATM> ..ATM) + (<GASSIGNED? .ATM> ,.ATM) + (ELSE .DEF)>> + +<DEFINE *VALUE-HANDLER (SV40 INF + "AUX" (INS <ANDB .SV40 #WORD *777600000000*>) ST + (EFF <CHTYPE <GETBITS .SV40 <BITS 18>> FIX>)) + #DECL ((INF) INF (SV40) <PRIMTYPE WORD> (INS) WORD (EFF) FIX (ST) STRING) + <COND (<N==? ,*VALUE .INS> <CHTYPE (*VALUE) FALSE>) + (<0? .EFF> (*VALUE 0)) + (<SET ST <VALRET-STRING .EFF .INF>> (*VALUE .ST))>> + +<DEFINE VALRET-STRING (EFF INF + "AUX" (ICH <GET-ICHAN .INF>) (CNT 0) (E .EFF) U) + #DECL ((U) UVECTOR (EFF CNT E W) FIX (ICH) CHANNEL (INF) INF (VALUE) STRING) + <ACCESS .ICH .EFF> + <SET U + <MAPF ,UVECTOR + <FUNCTION ("AUX" (W <INF-WORD .INF .E>)) + #DECL ((W) FIX) + <COND (<OR <0? .W> + <0? <CHTYPE <GETBITS .W <BITS 7 29>> FIX>>> + <MAPSTOP>) + (<0? <CHTYPE <GETBITS .W <BITS 7 22>> FIX>> + <SET CNT <+ .CNT 1>> + <MAPSTOP .W>) + (<0? <CHTYPE <GETBITS .W <BITS 7 15>> FIX>> + <SET CNT <+ .CNT 2>> + <MAPSTOP .W>) + (<0? <CHTYPE <GETBITS .W <BITS 7 8>> FIX>> + <SET CNT <+ .CNT 3>> + <MAPSTOP .W>) + (<0? <CHTYPE <GETBITS .W <BITS 7 1>> FIX>> + <SET CNT <+ .CNT 4>> + <MAPSTOP .W>) + (ELSE + <SET CNT <+ .CNT 5>> + <SET E <+ .E 1>> + <MAPRET .W>)>>>> + <INF-UV-STR .U .CNT>> + +\ + +<SETG JCL-UV <IUVECTOR 20 0>> + +<GDECL (JCL-UV) <UVECTOR [REST FIX]>> + +<DEFINE PASS-JCL-DOWN (INF ADDR + "AUX" (JCL <INF-JCL .INF>) (C <GET-ICHAN .INF>) + (UCH <INF-UCHAN .INF>) (UV ,JCL-UV) N LB L CR?) + #DECL ((INF) INF (ADDR) FIX (JCL) STRING (C UCH) CHANNEL + (CR?) <OR FALSE STRING> (UV) UVECTOR (N LB L) FIX) + <PROG () + <COND (<EMPTY? .JCL> <RETURN <>>)> + <SET L + <+ 2 + <COND (<SET CR? <MEMQ <ASCII 13> .JCL>> + <- <LENGTH .JCL> <LENGTH .CR?>>) + (ELSE <LENGTH .JCL>)>>> + <COND (<G? <SET N </ <+ 4 .L> 5>> <LENGTH .UV>> <RETURN <>>)> + <COND (<0? <CHTYPE <USET .UCH <+ 128 </ .ADDR 1024>>> FIX>> + <RETURN <>>)> + <COND (<0? <CHTYPE <USET .UCH + <+ 128 + </ <SET LB <+ .ADDR .N -1>> 1024>>> + FIX>> + <SET N <- <* </ .LB 1024> 1024> .ADDR>>)> + <ACCESS .C .ADDR> + <SET UV <REST .UV <- <LENGTH .UV> .N>>> + <SET N <READB .UV .C>> ;"Read from job at addr." + <SET LB 0> + <MAPF <> + <FUNCTION (W) + #DECL ((W) FIX) + <COND (<G? .LB .L> <MAPLEAVE>) + (<0? .W> <SET LB <+ .LB 5>>) + (ELSE <MAPLEAVE>)>> + .UV> + <SET L <MIN .L .LB>> + <ACCESS .UCH .ADDR> + <SET LB <PRINTSTRING .JCL .UCH <- .L 2>>> + <PRINC <ASCII 13> .UCH> + <SET LB <+ .LB 1>> + <COND (<G? <SET LB <MOD .LB 5>> 0> + <PRINTSTRING <ISTRING 5> .UCH <- 5 .LB>>)> + <BUFOUT .UCH> + .JCL>> + +<ENDPACKAGE> diff --git a/src/mprog1/invert.umsb12 b/src/mprog1/invert.umsb12 new file mode 100644 index 00000000..74c80dab --- /dev/null +++ b/src/mprog1/invert.umsb12 @@ -0,0 +1,3647 @@ +;"(c) Copyright 1978 Massachusetts Institute of Technology. All Rights Reserved." + +<PACKAGE "INVERT"> + +<ENTRY INV-INSERT INV-DELETE INV-TEST INV-LENGTH> + +<ENTRY INV> + +<ENTRY INV-VECTOR INV-IUVECTOR INV-RELDATA> + +<ENTRY INV-SRC INV-SRC-MAPF INV-SRC-COUNT> + +<NEWTYPE INV VECTOR '<VECTOR FIX FIX <OR FIX <VECTOR [REST FIX UVECTOR]>>>> + +<USE "MADMAN"> + +;"An INV is a data structure which is conceptually equivalent to an +ordered list of FIXes. It takes advantage of the assumption that the +FIXes tend to exist in specific ranges of numerical value, rather than +being distributed evenly over the 1 to 2**36 range possible. At the +simplest level, a program may insert a new FIX into an INV (it will +be inserted in order, of course), remove a FIX from an INV, determine +the 'length' (number of FIXes) in an INV, and test to see if a +particular FIX already exists in a particular INV. A particular FIX +may appear only once in an INV, so an attempt to insert a FIX which +already exists in a particular INV will result in a successful return, +but will not have changed that INV in any way. Similarly, an atempt +to remove a FIX from an INV which does not contain that FIX will +also produce a successful return, without modifying the INV in question. +The only situation in which removal will produce a FALSE result is if +it removed the last FIX in the INV. There is no such thing as an +empty INV. + Three functions exist which allow a program to perform set +operations on INVs. All three functions require the same type of +'expression' to operate on, and do slightly different things with +the results of evaluating the expression. + A set expression consists of a VECTOR of two or more elements, +the first of which is a FIX, interpreted as a set operator code to +be applied to the rest of the elements of the VECTOR. The other +elements of the VECTOR may be either INVs or set expressions. + +<set-expression> := <opcode> <element> <element> ... +<element> := <INV>|<set-expression> + +The allowable opcodes are: +1 ==> AND +2 ==> Inclusive OR +3 ==> Exclusive OR +4 ==> NAND +5 ==> NOR + +If a set expression contains only an opcode and one element, AND, IOR, +and XOR are defined to produce identity, while NAND and NOR are both +equivalent to NOT. + + The format of an INV is a VECTOR of three elements; +1) a FIX + 1 ==> special form for an INV with only one FIX + 2 ==> multi-fix (normal) form +2) a FIX, the number of FIXes in the INV +3) <OR FIX <VECTOR [REST FIX UVECTOR]>>, if single-FIX form, the FIX is +stored here. Otherwise, it is a block directory VECTOR (see below). +For example, an INV with the single fix 12345 in it would be represented +as #INV [1 1 12345]. + A block is a UVECTOR of maximum length 1022, in which may be stored +up to 32400 FIXes. Each block in the block directory represents a +RANGE of FIXes. For example, block #0 will contain all FIXes whose +values lie between 0 and 32399, and which are in the INV in question. +The directory block VECTOR consists of diads [REST FIX UVECTOR] of +block numbers and blocks. This VECTOR is sorted by block #. The first +step in finding where a FIX belongs in an INV is, therefore, to divide +it by the block range (32400), and use the dividend as that FIX's block +number. The block is then located in the block directory VECTOR via +a binary search. + Each block is further subdivided into 60 'buckets' of 15 words +each, with each bucket representing a range of 540 values within the +block's range. A bucket may actually use anywhere from 0 to 15 words, +depending upon how many FIXes are stored in it. The format of a block +is as follows: + + + ---------------------------------------------------------------------- +| number of fixes in entire block | number of buckets in block | + ---------------------------------------------------------------------- +| constant used for consistency check| offset of bucket directory area | + ---------------------------------------------------------------------- +| data for bucket #3 | + ---------------------------------------------------------------------- +| data for bucket #3 | + ---------------------------------------------------------------------- +| data for bucket #3 | + ---------------------------------------------------------------------- +| data for bucket #0 | + ---------------------------------------------------------------------- +| data for bucket #2 | + ---------------------------------------------------------------------- +| data for bucket #2 | + ---------------------------------------------------------------------- + . + . + . + bucket directory area + ---------------------------------------------------------------------- +| bucket number | + ---------------------------------------------------------------------- +|bucket size| unused | bucket length | offset of bucket data area | + ---------------------------------------------------------------------- +| bucket number | + ---------------------------------------------------------------------- + . + . + . + ---------------------------------------------------------------------- +| first dope word of UVECTOR | | + ---------------------------------------------------------------------- +| second dope word of UVECTOR | | + ---------------------------------------------------------------------- + +bucket-size ==> the number of words of data being used by a bucket +bucket-length ==> the number of FIXes being stored in a bucket + + When a particular bucket has its first FIX inserted into it, that +FIX is stored directly in the bucket's first (and only) data word. As +more FIXes are added to the bucket, its data area is expanded, and those +FIXes are also stored one per word in the data area. When the fifteenth +FIX is added to a bucket, however, its data area is transformed into a +540-bit bit mask (15*36). Subsequent additions to that bucket are made +simply by setting the appropriate bit in the mask. Should enough +removals be made to lower the number of FIXes in a bucket to less than +15, its data area reverts to direct representation. In this way, very +dense inversions are handled efficiently (bit-mask), while sparse ones +don't impose an unreasonable overhead interms of space." + +<SETG BUCKET-LENGTH 15> +<SETG BUCKET-COUNT <* ,BUCKET-LENGTH 36>> +<SETG BUCKETS-PER-BLOCK </ 1024 <+ ,BUCKET-LENGTH 2>>> +<SETG BLOCK-COUNT <* ,BUCKET-COUNT ,BUCKETS-PER-BLOCK>> +<SETG BLNT-BPTR *400400*> +<SETG UNUSED-BPTR *340400*> +<SETG BCNT-BPTR *221200*> +<SETG CHECK-CODE *525252*> + + +<SETG INV-SEARCH-MASTER <>> + +;"##################################################################### +####################################################################### +######################################################################" + + + +<TITLE INV-SRC> + +<DECLARE ("VALUE" <OR INV FIX FALSE> VECTOR <OR INV FALSE> + FIX <OR INV FALSE>)> + + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* IINV-SRC> + <JRST FINIS> + +<INTERNAL-ENTRY IINV-SRC 4> + + <SUBM M* (P)> + <DMOVE A* -7(TP)> + <DMOVE C* -5(TP)> + <PUSHJ P* CNVMESS> + <GETYP O* A> + <CAIE O* <TYPE-CODE VECTOR>> + <JRST SRCFLS> + <DMOVE C* -1(TP)> ;"<OR INV FALSE>" + <GETYP O* C> + <CAIN O* <TYPE-CODE INV>> + <JRST HERE 3> + <MOVE C* <TYPE-WORD FALSE>> + <MOVEI D* 0> + <DPUSH TP* A> + <DPUSH TP* C> + <PUSH P* [0]> + <PUSH P* [-1]> + <PUSH P* [-1]> +SRCLP1 <DMOVE A* -3(TP)> + <MOVE C* -1(P)> + <MOVE D* (P)> + <PUSHJ P* FNDBUCKET> + <GETYP O* A> + <CAIE O* <TYPE-CODE UVECTOR>> + <JRST SRCRET> + <MOVEM C* -1(P)> + <MOVEM D* (P)> +;"Here to add new id's to INV in progress" +;"******************************************************************** +COULD DO THIS MORE EFFICIENTLY BY INSERTING THE ENTIRE BUCKET INTO A SCRATCH +BLOCK. WOULD REQUIRE A FAIR AMOUNT OF PROGRAMMING +********************************************************************" + <MOVE D* (P)> ;"D/ # of current bucket" + <IMULI D* BUCKET-COUNT> + <PUSH P* D> + <MOVE C* (B)> +SRCLP2 <JFFO C* SRCLP3> + <MOVEI D* 36> + <ADDM D* (P)> + <AOBJN B* SRCLP2 -1> + <POP P* O> + <MOVE C* -2(P)> + <CAMGE C* -6(TP)> + <JRST SRCNXT> + <EXCH A* -1(TP)> + <EXCH B* (TP)> + <PUSHJ P* RELDATA> + <DMOVE A* -1(TP)> + <MOVE O* <TYPE-WORD FALSE>> + <MOVEM O* -1(TP)> + <SETZM (TP)> +SRCNXT <PUSHJ P* RELDATA> ;"Releases bucket UVECTOR" + <JRST SRCLP1> + +SRCLP3 <AOS -3(P)> + <MOVN E* D> + <MOVSI O* *400000*> + <LSH O* (E)> + <TDZ C* O> ;"clears id from bucket so it won't be encountered again" + <MOVE O* -3(P)> + <CAML O* -6(TP)> + <JRST SRCLP2> + <ADD D* (P)> + <EXCH A* -1(TP)> + <EXCH B* (TP)> + <DPUSH TP* A> + <PUSH TP* $TFIX> + <PUSH TP* D> + <PUSH P* C> + <MCALL 2 INV-INSERT> + <EXCH A* -1(TP)> + <EXCH B* (TP)> + <POP P* C> + <JRST SRCLP2> + +SRCRET <DPOP TP* A> + <MOVE C* -2(P)> + <SUB P* [<3(3)>]> + <SUB TP* [<10(10)>]> + <GETYP O* A> + <CAIN O* <TYPE-CODE INV>> + <JRST MPOPJ> + <MOVE A* $TFIX> + <MOVE B* C> + <JRST MPOPJ> + +SRCFLS <SUB TP* [<8(8)>]> + <MOVE A* <TYPE-WORD FALSE>> + <MOVEI B* 0> + <JRST MPOPJ> + + + +<SUB-ENTRY INV-SRC-COUNT ("VALUE" <OR FIX FALSE> VECTOR + <OR INV FALSE>)> + + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* IINV-SRC-COUNT> + <JRST FINIS> + +<INTERNAL-ENTRY IINV-SRC-COUNT 2> + + <SUBM M* (P)> + <DMOVE A* -3(TP)> + <DMOVE C* -1(TP)> + <PUSHJ P* CNVMESS> + <GETYP O* A> + <CAIE O* <TYPE-CODE VECTOR>> + <JRST CNTFLS> + <PUSH P* [0]> + <PUSH P* [-1]> + <PUSH P* [-1]> + <DPUSH TP* A> +CNTLP1 <DMOVE A* -1(TP)> + <MOVE C* -1(P)> + <MOVE D* (P)> + <PUSHJ P* FNDBUCKET> + <GETYP O* A> + <CAIE O* <TYPE-CODE UVECTOR>> + <JRST CNTRET> + <MOVEM C* -1(P)> + <MOVEM D* (P)> + <MOVE E* B> +CNTLP2 <MOVE C* (E)> +CNTLP3 <JFFO C* CNTLP4> + <AOBJN E* CNTLP2> + <PUSHJ P* RELDATA> + <JRST CNTLP1> +CNTLP4 <AOS -2(P)> + <LSH C* 1(D)> + <JRST CNTLP3> + +CNTRET <SUB P* [<2(2)>]> + <SUB TP* [<6(6)>]> + <MOVE A* $TFIX> + <POP P* B> + <JRST MPOPJ> + +CNTFLS <SUB TP* [<4(4)>]> + <MOVE A* <TYPE-WORD FALSE>> + <MOVEI B* 0> + <JRST MPOPJ> + + + + +<SUB-ENTRY INV-SRC-MAPF ("VALUE" ANY VECTOR <OR INV FALSE> + <OR APPLICABLE FALSE> <OR APPLICABLE FALSE> <OR VECTOR FALSE>)> + + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* IINV-SRC-MAPF> + <JRST FINIS> + +<INTERNAL-ENTRY IINV-SRC-MAPF 5> + + <SUBM M* (P)> + <DMOVE A* -9(TP)> + <DMOVE C* -7(TP)> + <PUSHJ P* CNVMESS> + <GETYP O* A> + <CAIE O* <TYPE-CODE VECTOR>> + <JRST SRCMAPFLS> + <DPUSH TP* A> + <PUSH P* [0]> + <PUSH P* [-1]> + <PUSH P* [-1]> + <DMOVE A* -7(TP)> + <GETYP O* A> + <CAIN O* <TYPE-CODE FALSE>> + <JRST MAPLP1> + <DPUSH TP* A> + <AOS -2(P)> +MAPLP1 <MOVE E* -2(P)> + <IMULI E* 2> + <SUBM TP* E> + <DMOVE A* -1(E)> + <MOVE C* -1(P)> + <MOVE D* (P)> + <PUSHJ P* FNDBUCKET> + <GETYP O* A> + <CAIE O* <TYPE-CODE UVECTOR>> + <JRST SRCMAPRET> + <MOVEM C* -1(P)> + <MOVEM D* (P)> + <MOVE C* D> + <IMULI C* BUCKET-COUNT> + <PUSH P* C> +MAPLP2 <MOVE C* (B)> +MAPLP3 <JFFO C* MAPLP4> + <MOVEI O* 36> + <ADDM O* (P)> + <AOBJN B* MAPLP2> + <POP P* O> + <PUSHJ P* RELDATA> ;"Releases bucket UVECTOR" + <JRST MAPLP1> + +MAPLP4 <MOVN E* D> + <MOVSI O* *400000*> + <LSH O* (E)> + <TDZ C* O> ;"clears id from bucket so it won't be encountered again" + <ADD D* (P)> + <MOVE E* -3(P)> + <IMULI E* 2> + <SUBM TP* E> + <GETYP O* -5(E)> + <CAIN O* <TYPE-CODE FALSE>> + <JRST MAPNOLOOP> + <DPUSH TP* A> + <PUSH P* C> + <DPUSH TP* -5(E)> ;"Loop function" + <PUSH TP* $TFIX> + <PUSH TP* D> ;"Id" + <MOVEI C* 2> ;"C/ # of things on stack" + <GETYP O* -3(E)> + <CAIN O* <TYPE-CODE VECTOR>> + <SKIPL E* -2(E)> ;"E/ cptr to VECTOR with extra args for loop fcn" + <JRST MAPCALL> +MAPLP5 <DPUSH TP* (E)> + <AOS C> + <ADD E* [<2(2)>]> + <JUMPL E* MAPLP5> +MAPCALL <MOVE A* C> + <ACALL A* APPLY> + <EXCH A* -1(TP)> + <EXCH B* (TP)> ;"B/ cptr to bucket UVECTOR" + <POP P* C> ;"C/ current word of bucket" + <SKIPG -3(P)> + <JRST MAPLP6> + <AOS -3(P)> + <JRST MAPLP3> +MAPLP6 <DPOP TP* D> + <JRST MAPLP3> + +;"Here if no loop fcn supplied" +MAPNOLOOP <SKIPG -3(P)> + <JRST MAPLP3> ;"jumps if no result fcn either" + <AOS -3(P)> + <PUSH TP* $TFIX> + <PUSH TP* D> + <JRST MAPLP3> + + +SRCMAPRET <DMOVE A* <PQUOTE T>> + <SKIPG E* -2(P)> + <JRST HERE 3> + <MOVE A* E> + <ACALL A* APPLY> + <SUB TP* [<12(12)>]> + <SUB P* [<3(3)>]> + <JRST MPOPJ> + +SRCMAPFLS <SUB TP* [<10(10)>]> + <MOVE A* <TYPE-WORD FALSE>> + <MOVEI B* 0> + <JRST MPOPJ> + + + + +<SUB-ENTRY INV-VECTOR ("VALUE" VECTOR "TUPLE" ANY)> + + <MOVEI B* 0> +INVMAKLOOP <JUMPGE AB* INV-MAKCALL> + <DPUSH TP* (AB)> + <ADD AB* [<2(2)>]> + <AOJA B* INVMAKLOOP> +INV-MAKCALL <MOVE A* <TYPE-WORD FIX>> + <PUSHJ P* GETVECTOR> + <JRST FINIS> + + +<SUB-ENTRY INV-IUVECTOR ("VALUE" UVECTOR FIX)> + + <DPUSH TP* (AB)> + <PUSHJ P* IINV-IUVECTOR> + <JRST FINIS> + +<INTERNAL-ENTRY IINV-IUVECTOR 1> + + <SUBM M* (P)> + <MOVE A* (TP)> + <PUSHJ P* GETIUVECTOR> + <SUB TP* [<2(2)>]> + <JRST MPOPJ> + + + +<SUB-ENTRY INV-RELDATA ("VALUE" ANY ANY)> + + <DPUSH TP* (AB)> + <PUSHJ P* IINV-RELDATA> + <JRST FINIS> + +<INTERNAL-ENTRY IINV-RELDATA 1> + + <SUBM M* (P)> + <MOVE A* -1(TP)> + <MOVE B* (TP)> + <PUSHJ P* RELDATA> + <SUB TP* [<2(2)>]> + <JRST MPOPJ> + + + + + + +;"A&B/ internal search expression VECTOR +C/ current blk # +D/ current bucket #" + +FNDBUCKET <SUBM M* (P)> + <DPUSH TP* A> + <PUSH P* C> + <PUSH P* D> +FNDL1 <INTGO> + <SKIPGE C* -1(P)> + <JRST FNDBLK> + <DMOVE A* -1(TP)> + <MOVE D* (P)> + <HRREI E* -1> + <PUSHJ P* NXTBNO> + <JUMPL A* FNDBLK> + <MOVEM A* (P)> + <MOVE C* A> + <DMOVE A* -1(TP)> + <PUSHJ P* CHKBNO> + <CAME A* (P)> + <JRST FNDL1> + <DMOVE A* -1(TP)> + <MOVE C* (P)> + <HRREI D* -1> + <PUSHJ P* GETBUCKET> + <GETYP O* A> + <CAIE O* <TYPE-CODE UVECTOR>> + <JRST FNDL1> + <JUMPE C* FNDL1> + <SUB TP* [<2(2)>]> + <POP P* D> + <POP P* C> + <JRST MPOPJ> + +FNDBLK <INTGO> + <DMOVE A* -1(TP)> + <MOVE C* -1(P)> + <HRREI D* -1> + <PUSHJ P* NXTBLK> + <JUMPL A* FNDFLS> + <MOVE C* A> + <MOVEM C* -1(P)> + <DMOVE A* -1(TP)> + <PUSHJ P* CHKBLK> + <CAME A* -1(P)> + <JRST FNDBLK> + <DMOVE A* -1(TP)> + <MOVE C* -1(P)> + <PUSHJ P* GETBLK> + <CAME A* -1(P)> + <JRST FNDBLK> + <JRST FNDL1> + +FNDFLS <SUB TP* [<2(2)>]> + <POP P* D> + <POP P* C> + <MOVE A* $TFALSE> + <MOVEI B* 0> + <JRST MPOPJ> + + +;"A&B/ search expression VECTOR +C&D/ master inversion (or FALSE) +==> A&B/ internal src VECTOR" + +CNVMESS <SUBM M* (P)> + <DPUSH TP* C> + <HRREI C* -1> + <PUSHJ P* CNVEXP> + <MOVE E* C> + <DPOP TP* C> + <DPUSH TP* A> + <JUMPE E* CNVNOMAST> ;"Jumps if no NANDs, NORs, or NOTs in expression; + don't need A MASTER inversion." + <GETYP O* C> + <CAIE O* <TYPE-CODE INV>> + <JRST CNVNMAST> +;"Here if master inv is an INV" + <DMOVE A* C> + <PUSHJ P* CNVADTBL> +CNVSMAST <GETYP O* A> + <CAIE O* <TYPE-CODE VECTOR>> + <JRST CNVSMAST1> + <PUSH TP* $TFIX> + <PUSH TP* [1]> + <PUSH TP* $TFIX> + <PUSH TP* [-1]> + <DPUSH TP* A> + <MOVE A* $TFIX> + <MOVEI B* 3> + <PUSHJ P* GETVECTOR> +CNVSMAST1 <MOVE C* <MQUOTE '%<RGLOC INV-SEARCH-MASTER T>>> + <ADD C* GLOTOP 1 (TVP)> + <DMOVEM A* (C)> +;"Here when master inversion taken care of, return the internal expression +built by CNVEXP" + <DPOP TP* A> + <JRST MPOPJ> + +;"Here if no master inversion supplied" +CNVNOMAST <MOVE A* $TFALSE> + <MOVEI B* 0> + <JRST CNVSMAST> + +;"Here if no master inv supplied" +CNVNMAST <CAIN O* <TYPE-CODE FALSE>> + <JRST CNVNOMAST> + +CNVBADM <DPOP TP* A> + <DPUSH TP* <PQUOTE ILLEGAL-MASTER-INVERSION-SUPPLIED!-ERRORS>> + <DPUSH TP* A> + <MCALL 2 ERROR> + <JRST CNVBADM> + + +;"A&B/ search expression (or subpart) + C/ -1 ==> top-level, else boolean opcode of parent expression + +==> A&B/ cptr to internal search expression + C/ Zero (0) implies no NAND's or NOR's in expression" + +CNVEXP <SUBM M* (P)> + <HLRE D* B> + <MOVMS D> + <CAIGE D* 4> ;"At least two elements long?" + <JRST CNVBADEXP> + <GETYP O* (B)> + <CAIN O* <TYPE-CODE FIX>> + <SKIPG E* 1(B)> ;"E/ Boolean operator code" + <JRST CNVBADEXP> + <CAIGE E* 4> ;"NAND/NOR/NOT don't distribute" + <CAME E* C> ;"Check if opr same as one in outer expression" + <SKIPA> + <JRST EXPEXP> ;"Oprs the same, distributive rule applies, + expand this expression into the outer one." + <CAIN E* 6> ;"NOT?" + <MOVEI E* 4> ;"Collapse into NAND" + <PUSH P* [0]> ;"Pushes cleared NAND/NOR/NOT flag onto stack" + <CAIL E* 4> ;"Skips if Boolean operator is not NAND, NOR, or NOT." + <SETOM (P)> ;"Sets NAND/NOR/NOT flag" + <PUSH P* [1]> + <PUSH P* E> ;"Saves operator on P-STACK" + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* E> + <PUSH TP* $TFIX> + <PUSH TP* [-1]> + <MOVEI E* 2> + <ADD B* [<2(2)>]> +CNVEXPL1 <GETYP O* (B)> + <CAIE O* <TYPE-CODE INV>> + <JRST CNVEXPREC> + <DPUSH TP* A> + <PUSH P* E> + <DMOVE A* (B)> + <PUSHJ P* CNVADTBL> + <EXCH A* -1(TP)> + <EXCH B* (TP)> + <POP P* E> + <ADDI E* 1> +CNVEXPL2 <ADD B* [<2(2)>]> + <JUMPL B* CNVEXPL1> +CNVEXPRET <MOVE A* $TFIX> + <MOVE B* E> ;"B/ no. of elements pushed onto stack" + <POP P* E> ;"E/ opr in effect" + <POP P* D> ;"D/ flag to determine whether this an expansion or not" + <POP P* C> ;"C/ NAND/NOR flag" + <SKIPGE D> + <JRST MPOPJ> + <CAIG B* 2> + <JRST CNVBADEXP> + <PUSH P* C> + <PUSHJ P* GETVECTOR> + <POP P* C> + <JRST MPOPJ> + +EXPEXP <PUSH P* [-1]> + <PUSH P* [-1]> + <PUSH P* C> + <MOVEI E* 0> + <JRST CNVEXPL2> + +CNVEXPREC <CAIE O* <TYPE-CODE VECTOR>> + <JRST CNVBADEXP> + <DPUSH TP* A> + <DMOVE A* (B)> + <MOVE C* (P)> + <PUSH P* E> ;"Saves element count on stack" + <PUSHJ P* CNVEXP> ;"Recurses" + <POP P* E> + <SKIPE C> ;"If no NAND/NOR/NOT found, leave flag as is." + <SETOM -2(P)> ;"If NAND/NOR/NOT found, set flag for return." + <GETYP O* A> + <CAIE O* <TYPE-CODE VECTOR>> + <JRST CNVRETFIX> + <EXCH A* -1(TP)> + <EXCH B* (TP)> + <ADDI E* 1> + <JRST CNVEXPL2> + +CNVRETFIX <CAIE O* <TYPE-CODE FIX>> + <JRST CNVBADEXP> + <ADD E* B> + <JUMPE B* CNVRETL2> + <MOVE C* TP> + <MOVE D* B> + <IMULI D* 2> + <HRLS D> + <SUB C* D> + <DMOVE A* -1(C)> +CNVRETL1 <CAMN C* TP> + <JRST CNVRETL2> + <MOVE D* 1(C)> + <MOVEM D* -1(C)> + <ADD C* [<1(1)>]> + <JRST CNVRETL1> +CNVRETL2 <SUB TP* [<2(2)>]> + <JRST CNVEXPL2> + +CNVBADEXP <DPUSH TP* <PQUOTE ILLEGAL-SEARCH-EXPRESSION!-ERRORS>> + <DPUSH TP* A> + <MCALL 2 ERROR> + <JRST CNVBADEXP> + + +;"A&B/ INV + Builds 5-word entry for this inversion in the INV-SEARCH-TABLE" +CNVADTBL <SUBM M* (P)> + <DPUSH TP* A> + <PUSH TP* <TYPE-WORD FALSE>> + <PUSH TP* [0]> ;"Holdover from PIO days, used to put CHANP here." + <MOVE O* 1(B)> + <CAIG O* 1> + <JRST SGLINV> + <DPUSH TP* 4(B)> + <PUSH TP* <TYPE-WORD FALSE>> + <PUSH TP* [0]> + <PUSH TP* <TYPE-WORD FALSE>> + <PUSH TP* [0]> +CNVADMAKE <MOVEI B* 5> + <PUSHJ P* GETVECTOR> + <JRST MPOPJ> + +;"Here if a single-id INV" +SGLINV <MOVE C* 5(B)> + <IDIVI C* BLOCK-COUNT> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* C> + <MOVE C* 5(B)> + <IDIVI C* BUCKET-COUNT> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* C> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* 5(B)> + <JRST CNVADMAKE> + + + +;"A&B/ internal search expression +C/ # of blk currently in use +D/ last bucket # used (-1 implies first call) +E/ 'current' bucket # (initially -1, changes when NXTBNO recurses)" + +NXTBNO <SUBM M* (P)> + <PUSH P* C> + <PUSH P* D> + <PUSH P* E> + <SKIPGE 3(B)> + <JRST NBUCRET> + <MOVE C* 1(B)> + <ADD B* [<4(4)>]> + <JUMPGE B* BADINTEXP> + <CAIE C* 4> + <CAIN C* 5> + <JRST NBUCMAST> +NBUCL1 <GETYP O* (B)> + <CAIE O* <TYPE-CODE VECTOR>> + <JRST NOTNXTBUC> + <MOVE E* 1(B)> + <GETYP O* (E)> + <CAIN O* <TYPE-CODE FIX>> + <JRST NBUCREC> + <CAIE O* <TYPE-CODE INV>> + <JRST NOTNXTBUC> +;"Here when inversion is an INV" + <GETYP O* 6(E)> + <CAIE O* <TYPE-CODE UVECTOR>> + <JRST NBUCDW> + <SKIPL D* 7(E)> + <JRST NBUCDEX> + <MOVE C* (D)> +NBUCHKD <CAMG C* -1(P)> + <JRST NBUCRD> +NBUCHK <SKIPL (P)> + <CAMGE C* (P)> +NBUCND <MOVEM C* (P)> + <JRST NBUCL2> +;"Here when bucket dir points to a bucket which is not > the last one." +NBUCRD <ADD D* [<2(2)>]> + <MOVEM D* 7(E)> + <JUMPGE D* NBUCDEX> ;"Exhausted" + <MOVE C* (D)> + <JRST NBUCHKD> +;"Here when bucket dir (and, therefore, the blk) is exhausted" +NBUCDEX <MOVE C* $TFALSE> + <MOVEM C* 6(E)> + <SETZM 7(E)> + <MOVEM C* 8(E)> + <SETZM 9(E)> + <JRST NBUCL2> +;"Here when bucket dir not a UVECTOR" +NBUCDW <CAIE O* <TYPE-CODE FIX>> + <JRST NBUCL2> +;"Here when inversion has a single id instead of a bucket dir" + <MOVE C* 5(E)> ;"C/ blk # of id" + <CAME C* -2(P)> + <JRST NBUCL2> ;"Skips this inversion if not same blk #" + <MOVE C* 7(E)> ;"C/ bucket # of id" + <CAMLE C* -1(P)> + <JRST NBUCHK> +;"Here if single-id inversion exhausted" + <MOVE C* $TFALSE> + <MOVEM C* (E)> + <SETZM D* 1(E)> + <JRST NBUCL2> + +;"Here when a NAND or NOR opr, check master inversion first" +NBUCMAST <MOVE C* <MQUOTE '%<RGLOC INV-SEARCH-MASTER T>>> + <ADD C* GLOTOP 1 (TVP)> + <GETYP O* (C)> + <CAIE O* <TYPE-CODE VECTOR>> + <JRST NBUCL1> + <DPUSH TP* A> + <DMOVE A* (C)> + <MOVE C* -2(P)> + <MOVE D* -1(P)> + <MOVE E* (P)> + <PUSHJ P* NXTBNO> + <MOVEM A* (P)> + <DPOP TP* A> + <JRST NBUCL1> + +;"Here when search expression is complex, recurse" +NBUCREC <DPUSH TP* A> + <DMOVE A* (B)> + <MOVE C* -2(P)> + <MOVE D* -1(P)> + <MOVE E* (P)> + <PUSHJ P* NXTBNO> + <MOVEM A* (P)> + <DPOP TP* A> + <JRST NBUCL2> + +NOTNXTBUC <CAIE O* <TYPE-CODE FALSE>> + <JRST BADINTEXP> +NBUCL2 <ADD B* [<2(2)>]> + <JUMPL B* NBUCL1> +NBUCRET <POP P* A> ;"A/ # of lowest existing bucket not yet examined" + <POP P* O> + <POP P* O> + <JRST MPOPJ> + + + +;"A&B/ internal search expression +C/ last block # used (-1 implies first call) +D/ 'current' block # (initially -1, changes when NXTBLK recurses) + +Ignores the blk-existence FIX which is second element of expression" + +NXTBLK <SUBM M* (P)> + <PUSH P* C> + <PUSH P* D> + <MOVE C* 1(B)> + <ADD B* [<4(4)>]> + <JUMPGE B* BADINTEXP> + <CAIE C* 4> + <CAIN C* 5> + <JRST NBLKMAST> +NBLKL1 <GETYP O* (B)> + <CAIE O* <TYPE-CODE VECTOR>> + <JRST NOTNXTBLK> + <MOVE E* 1(B)> + <GETYP O* (E)> + <CAIN O* <TYPE-CODE FIX>> + <JRST NBLKREC> + <CAIE O* <TYPE-CODE INV>> + <JRST NOTNXTBLK> +;"Here when inversion is an INV" +NBLKINV <GETYP O* 4(E)> + <CAIE O* <TYPE-CODE VECTOR>> + <JRST NBLKIW> + <SKIPN 7(E)> + <JRST NBLKINV1> +;"If old blk pointed to by state vector, flush it" + <MOVE C* $TFALSE> + <MOVEM C* 6(E)> + <MOVEM C* 8(E)> + <SETZM 7(E)> + <SETZM 9(E)> +NBLKINV1 <SKIPL D* 5(E)> + <JRST NBLKIEX> +NBLKHKI <MOVE C* 1(D)> + <CAMG C* -1(P)> + <JRST NBLKRI> +NBLKHK <SKIPL (P)> + <CAMGE C* (P)> + <MOVEM C* (P)> + <JRST NBLKL2> +NBLKRI <ADD D* [<4(4)>]> + <MOVEM D* 5(E)> + <JUMPGE D* NBLKIEX> + <JRST NBLKHKI> +;"Here when blk dir exhausted, entire inversion is exhausted" +NBLKIEX <MOVE C* $TFALSE> + <MOVEM C* (E)> + <SETZM 1(E)> + <JRST NBLKL2> + +;"Here if blk dir not a VECTOR" +NBLKIW <CAIE O* <TYPE-CODE FIX>> + <JRST NBLKL2> + <MOVE C* 5(E)> ;"C/ blk # of single id" + <CAMLE C* -1(P)> + <JRST NBLKHK> +;"Here if single-id inversion exhausted" + <MOVE C* $TFALSE> + <MOVEM C* (E)> + <SETZM D* 1(E)> + <JRST NBLKL2> + + +;"Here when opr is NAND or NOR, check master inversion first" +NBLKMAST <MOVE C* <MQUOTE '%<RGLOC INV-SEARCH-MASTER T>>> + <ADD C* GLOTOP 1 (TVP)> + <GETYP O* (C)> + <CAIE O* <TYPE-CODE VECTOR>> + <JRST NBLKL1> + <DPUSH TP* A> + <DMOVE A* (C)> + <MOVE C* -1(P)> + <MOVE D* (P)> + <PUSHJ P* NXTBLK> + <MOVEM A* (P)> + <DPOP TP* A> + <JRST NBLKL1> + +;"Here when search expression is complex, recurse" +NBLKREC <DPUSH TP* A> + <DMOVE A* (B)> + <MOVE C* -1(P)> + <MOVE D* (P)> + <PUSHJ P* NXTBLK> + <MOVEM A* (P)> + <DPOP TP* A> + <JRST NBLKL2> + +NOTNXTBLK <CAIE O* <TYPE-CODE FALSE>> + <JRST BADINTEXP> +NBLKL2 <ADD B* [<2(2)>]> + <JUMPL B* NBLKL1> + <POP P* A> ;"A/ # of lowest existing blk not yet examined" + <POP P* B> + <JRST MPOPJ> + + + + +;"A&B/ internal search expression +C/ # of block to be read in for each inversion in search expression + +==> A/ original contents of C if any blks found: -1 if none" + +;"ASSUMPTION: The '7' (and '9') slot of each inversion state vector contains +FALSE, put there by NXTBNO when the last blk of that inversion was exhausted. +If a '7' slot is encountered which is non-FALSE, it is assumed that it is +an inversion which appears more than once in the expression and has already +been handled by GETBLK. As a safety measure, NXTBLK also clears any such blks +that it finds." + +GETBLK <SUBM M* (P)> + <PUSH P* 1(B)> ;"Saves operator code" + <PUSH P* [-1]> + <PUSH P* C> ;"Saves # of block to be read" + <SKIPG 3(B)> + <JRST GBLKRET> + <ADD B* [<4(4)>]> + <JUMPGE B* BADINTEXP> + <MOVE C* -2(P)> + <CAIE C* 4> + <CAIN C* 5> + <JRST GBLKMAST> +GBLKL1 <GETYP O* (B)> + <CAIE O* <TYPE-CODE VECTOR>> + <JRST NOTGETBLK> + <MOVE E* 1(B)> + <GETYP O* (E)> + <CAIN O* <TYPE-CODE FIX>> + <JRST GBLKREC> + <CAIE O* <TYPE-CODE INV>> + <JRST NOTGETBLK> +;"Here when inversion is an INV" +GBLKINV <GETYP O* 4(E)> + <CAIE O* <TYPE-CODE VECTOR>> + <JRST GBLKCHKW> + <SKIPL D* 5(E)> + <JRST GBLKCHKOPR> + <MOVE C* 1(D)> + <CAME C* (P)> + <JRST GBLKCHKOPR> + <GETYP O* 6(E)> + <CAIN O* <TYPE-CODE UVECTOR>> + <JRST GBLKL2> +;"Here when required blk of INV exists" + <DMOVE C* 2(D)> + <DMOVEM C* 8(E)> + <HRR O* 1(D)> + <HRL O* 1(D)> + <ADD D* O> + <DMOVEM C* 6(E)> + <MOVE O* (P)> + <MOVEM O* -1(P)> + <JRST GBLKL2> + +;"Here when NAND or NOR opr, get master inversion's blk first" +GBLKMAST <MOVE C* <MQUOTE '%<RGLOC INV-SEARCH-MASTER T>>> + <ADD C* GLOTOP 1 (TVP)> + <GETYP O* (C)> + <CAIE O* <TYPE-CODE VECTOR>> + <JRST GBLKL1> + <DPUSH TP* A> + <DMOVE A* (C)> + <MOVE C* (P)> + <PUSHJ P* GETBLK> + <MOVE C* A> + <DPOP TP* A> + <CAMN C* (P)> + <MOVEM C* -1(P)> + <JRST GBLKL1> + +;"Here when search expression is complex, recurse" +GBLKREC <DPUSH TP* A> + <DMOVE A* (B)> + <MOVE C* (P)> + <PUSHJ P* GETBLK> + <MOVE C* A> + <DPOP TP* A> + <CAME C* (P)> + <JRST GBLKCHKOPR> + <MOVEM C* -1(P)> + <JRST GBLKL2> + +;"Here when blk dir VECTOR or UVECTOR not there" +GBLKCHKW <CAIE O* <TYPE-CODE FIX>> + <JRST GBLKCHKOPR> +;"Here if a single-id inversion" + <MOVE C* 5(E)> + <CAME C* (P)> + <JRST GBLKCHKOPR> + <MOVEM C* -1(P)> + <JRST GBLKL2> + +NOTGETBLK <CAIE O* <TYPE-CODE FALSE>> + <JRST BADINTEXP> +GBLKL2 <ADD B* [<2(2)>]> + <JUMPL B* GBLKL1> +GBLKRET <POP P* O> + <POP P* A> ;"A/ # of blk just read in (-1 if none)" + <POP P* O> + <JRST MPOPJ> + +;"Here when specified blk doesn't exist in an inversion (or sub-expression)" +GBLKCHKOPR <MOVE O* -2(P)> + <CAIE O* 1> ;"Skips if operator is AND" + <JRST GBLKL2> +;"Non-existing blk in an AND flushes whole sub-expression" + <HLRE E* B> + <MOVMS E> + <SUBI E* 2> + <HRLS E> + <ADD B* E> + <SETOM -1(P)> + <JRST GBLKL2> + + + + +;"A&B/ internal search expression +C/ # of bucket to be examined next + +==> A/ original contents of C if wins: -1 if loses + + This checks the candidate bucket number proposed by NXTBNO. +If any sub-expression will be null (for example, because a null bucket +exists in an AND expression), the right half of the flag word (second +element of the sub-expression) is set to -1. Such flags are noted by GETBUCKET." + +CHKBNO <SUBM M* (P)> + <PUSH P* 1(B)> ;"Saves operator code on P-stack" + <PUSH P* C> ;"Saves required bucket # on P-stack" + <DPUSH TP* A> + <SKIPGE 3(B)> + <JRST CBUCRET> + <MOVEI D* -1> + <HRRM D* 3(B)> + <ADD B* [<4(4)>]> + <JUMPGE B* BADINTEXP> + <MOVE C* -1(P)> + <CAIE C* 4> + <CAIN C* 5> + <JRST CBUCMAST> +CBUCL1 <GETYP O* (B)> + <CAIE O* <TYPE-CODE VECTOR>> + <JRST NOTCHKBUC> + <MOVE E* 1(B)> + <GETYP O* (E)> + <CAIN O* <TYPE-CODE FIX>> + <JRST CBUCREC> + <CAIE O* <TYPE-CODE INV>> + <JRST NOTCHKBUC> +;"Here when inversion is an INV" + <GETYP O* 6(E)> + <CAIE O* <TYPE-CODE UVECTOR>> + <JRST CBUCDW> + <SKIPL D* 7(E)> + <JRST CBUCLOSE> + <MOVE C* (D)> + <CAME C* (P)> + <JRST CBUCLOSE> +CBUCWIN <MOVE E* (TP)> + <HRRM C* 3(E)> + <JRST CBUCL2> + +;"Here when bucket dir not a UVECTOR" +CBUCDW <CAIE O* <TYPE-CODE FIX>> + <JRST CBUCLOSE> +;"Here when inversion has a single id instead of a bucket dir" + <MOVE C* 7(E)> ;"C/ bucket # of id" + <CAMN C* (P)> + <JRST CBUCWIN> +;"Here when required bucket doesn't exist" +CBUCLOSE <MOVE O* -1(P)> + <CAIE O* 1> + <JRST CBUCL2> +;"Here when non-existent bucket in an AND, flushes whole sub-expression" + <MOVE E* (TP)> + <MOVEI D* -1> + <HRRM D* 3(E)> + <JRST CBUCRET> + +;"Here when NAND or NOR opr, check master inversion's bucket first" +CBUCMAST <MOVE C* <MQUOTE '%<RGLOC INV-SEARCH-MASTER T>>> + <ADD C* GLOTOP 1 (TVP)> + <GETYP O* (C)> + <CAIE O* <TYPE-CODE VECTOR>> + <JRST CBUCL1> + <DPUSH TP* A> + <DMOVE A* (C)> + <MOVE C* (P)> + <PUSHJ P* CHKBNO> + <MOVE C* A> + <DPOP TP* A> + <CAME C* (P)> + <HRREI C* -1> + <MOVE E* <MQUOTE '%<RGLOC INV-SEARCH-MASTER T>>> + <ADD E* GLOTOP 1 (TVP)> + <MOVE E* 1(E)> + <HRRM C* 3(E)> + <JRST CBUCL1> + + +;"Here when search expression is complex, recurse" +CBUCREC <DPUSH TP* A> + <DMOVE A* (B)> + <MOVE C* (P)> + <PUSHJ P* CHKBNO> + <MOVE C* A> + <DPOP TP* A> + <CAME C* (P)> + <JRST CBUCLOSE> + <JRST CBUCWIN> + +NOTCHKBUC <CAIE O* <TYPE-CODE FALSE>> + <JRST BADINTEXP> + <JRST CBUCLOSE> + +CBUCL2 <ADD B* [<2(2)>]> + <JUMPL B* CBUCL1> +CBUCRET <POP P* C> ;"required bucket #" + <POP P* D> ;"D/ operator code for sub-expression" + <DPOP TP* A> + <HRRE A* 3(B)> + <SKIPL A> + <JRST MPOPJ> +;"Here if no instance of the required bucket found in sub-expression" + <CAIE D* 4> + <CAIN D* 5> + <SKIPA> ;"Skips if opr is NAND or NOR" + <JRST MPOPJ> + <HRRM C* 3(B)> + <MOVE A* C> + <JRST MPOPJ> + + + + +;"A&B/ internal search expression +C/ # of blk to be examined next + +==> A/ original contents of C if wins: -1 if loses + + This checks the candidate blk number proposed by NXTBLK. +If any sub-expression will be null (for example, because a null blk +exists in an AND expression), the right half of the flag word (second +element of the sub-expression) is set to -1. Such flags are noted by GETBLK." + + +CHKBLK <SUBM M* (P)> + <PUSH P* 1(B)> + <PUSH P* C> + <DPUSH TP* A> + <SETOM 3(B)> + <ADD B* [<4(4)>]> + <JUMPGE B* BADINTEXP> + <MOVE C* -1(P)> + <CAIE C* 4> + <CAIN C* 5> + <JRST CBLKMAST> +CBLKL1 <GETYP O* (B)> + <CAIE O* <TYPE-CODE VECTOR>> + <JRST NOTCHKBLK> + <MOVE E* 1(B)> + <GETYP O* (E)> + <CAIN O* <TYPE-CODE FIX>> + <JRST CBLKREC> + <CAIE O* <TYPE-CODE INV>> + <JRST NOTCHKBLK> +;"Here when inversion is an INV" +CBLKINV <GETYP O* 4(E)> + <CAIE O* <TYPE-CODE VECTOR>> + <JRST CBLKIW> + <SKIPL D* 5(E)> + <JRST CBLKLOSE> + <MOVE C* 1(D)> + <CAME C* (P)> + <JRST CBLKLOSE> +;"Here if required blk exists" +CBLKWIN <MOVE E* (TP)> + <HRLS C> + <HRRI C* -1> + <MOVEM C* 3(E)> + <JRST CBLKL2> + +;"Here if blk dir not a UVECTOR" +CBLKIW <CAIE O* <TYPE-CODE FIX>> + <JRST CBLKLOSE> + <MOVE C* 5(E)> ;"C/ blk # of single id" + <CAMN C* (P)> + <JRST CBLKWIN> +;"Here if required blk doesn't exist" +CBLKLOSE <MOVE O* -1(P)> + <CAIE O* 1> + <JRST CBLKL2> +;"Here if non-existent blk in an AND, flush whole sub-expresssion" + <MOVE E* (TP)> + <SETOM 3(E)> + <JRST CBLKRET> + + +;"Here when NAND or NOR opr, check master inversion's blk first" +CBLKMAST <MOVE C* <MQUOTE '%<RGLOC INV-SEARCH-MASTER T>>> + <ADD C* GLOTOP 1 (TVP)> + <GETYP O* (C)> + <CAIE O* <TYPE-CODE VECTOR>> + <JRST CBLKL1> + <DPUSH TP* A> + <DMOVE A* (C)> + <MOVE C* (P)> + <PUSHJ P* CHKBLK> + <MOVE C* A> + <DPOP TP* A> + <CAME C* (P)> + <HRREI C* -1> + <HRLS C> + <HRRI C* -1> + <MOVE E* <MQUOTE '%<RGLOC INV-SEARCH-MASTER T>>> + <ADD E* GLOTOP 1 (TVP)> + <MOVE E* 1(E)> + <MOVEM C* 3(E)> + <JRST CBLKL1> + + +;"Here when search expression is complex, recurse" +CBLKREC <DPUSH TP* A> + <DMOVE A* (B)> + <MOVE C* (P)> + <PUSHJ P* CHKBLK> + <MOVE C* A> + <DPOP TP* A> + <CAME C* (P)> + <JRST CBLKLOSE> + <JRST CBLKWIN> + +NOTCHKBLK <CAIE O* <TYPE-CODE FALSE>> + <JRST BADINTEXP> + <JRST CBLKLOSE> + +CBLKL2 <ADD B* [<2(2)>]> + <JUMPL B* CBLKL1> +CBLKRET <POP P* C> ;"C/ # of required blk" + <POP P* D> ;"D/ operator code for sub-expression" + <DPOP TP* A> + <HLRE A* 3(B)> + <SKIPL A> + <JRST MPOPJ> + <CAIE D* 4> + <CAIN D* 5> + <SKIPA> + <JRST MPOPJ> + <MOVE A* C> + <HRLS C> + <HRRI C* -1> + <MOVEM C* 3(B)> + <JRST MPOPJ> + + + +;"ERROR HANDLERS" + +BADINTEXP <DPUSH TP* <PQUOTE BAD-INTERNAL-SEARCH-EXPRESSION!-ERRORS>> + <DPUSH TP* A> + <MCALL 2 ERROR> + <JRST BADINTEXP> + + + + +;"A&B/ # of args pushed onto TP stack" +GETVECTOR <SUBM M* (P)> + <PUSH P* B> + <MOVE B* <MQUOTE CURSPACE>> + <PUSHJ P* CASSQ> + <JRST VCTNOSPC> +;"Here if a current MADMAN space bound and assigned." + <POP P* A> + <ACALL A* ALVECTOR> + <JRST MPOPJ> + +VCTNOSPC <POP P* A> + <ACALL A* VECTOR> + <JRST MPOPJ> + + + +;"A/ size of required UVECTOR" +GETIUVECTOR <SUBM M* (P)> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* A> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* [0]> + <MOVE B* <MQUOTE CURSPACE>> + <PUSHJ P* CASSQ> + <JRST GETNEWUVCT> +;"Here if MADMAN space bound and assigned." + <MCALL 2 ALIUVECTOR> + <JRST MPOPJ> + +GETNEWUVCT <MCALL 2 IUVECTOR> + <JRST MPOPJ> + + +;"A&B/ UVECTOR to be released" +RELDATA <SUBM M* (P)> + <DPUSH TP* A> + <MOVE B* <MQUOTE CURSPACE>> + <PUSHJ P* CASSQ> + <JRST RELRET> + <MOVE B* <MQUOTE CURSPACE>> + <PUSHJ P* CILVAL> + <DPOP TP* C> + <DPUSH TP* A> + <DPUSH TP* C> + <MCALL 2 ARELEASE> + <JRST MPOPJ> + + +RELRET <SUB TP* [<2(2)>]> + <JRST MPOPJ> + + +;"A&B/ internal search expression vector +C/ # of bucket to be returned +D/ -1 implies top-level of expression + +==> A&B/ bucket UVECTOR (or FALSE) + C/ bucket length: + -1 ==> bit-mask format, scratch + 0 ==> empty + >0 ==> direct format, read-only + BUCKET-LENGTH ==> bit-mask format, read-only" + +GETBUCKET <SUBM M* (P)> + <PUSH TP* $TFALSE> + <PUSH TP* [0]> ;"Saves return value on TP-stack" + <PUSH P* [0]> ;"Saves slot for bucket length" + <PUSH P* D> ;"Saves top-level indicator" + <PUSH P* 1(B)> ;"Saves sub-expression's operator code" + <PUSH P* C> ;"Saves # of bucket being hacked" + <SKIPGE 3(B)> + <JRST GBUCRET> + <ADD B* [<4(4)>]> + <JUMPGE B* BADINTEXP> +GBUCL1 <GETYP O* (B)> + <CAIE O* <TYPE-CODE VECTOR>> + <JRST NOTGETBUC> + <MOVE E* 1(B)> + <GETYP O* (E)> + <CAIN O* <TYPE-CODE FIX>> + <JRST GBUCREC> + <CAIE O* <TYPE-CODE INV>> + <JRST NOTGETBUC> +;"Here when inversion is an INV" + <GETYP O* 6(E)> + <CAIE O* <TYPE-CODE UVECTOR>> + <JRST GBUCDW> + <SKIPL D* 7(E)> + <JRST GBUCLOSE> + <MOVE C* (D)> + <CAME C* (P)> + <JRST GBUCLOSE> +;"Here when bucket exists" + <HRRZ O* 1(D)> + <HRLS O*> + <ADD O* 9(E)> + <LDB E* [<(,BLNT-BPTR) 1(D)>]> ;"E/ length code for new bucket" + <MOVE D* O> ;"D/ cptr to new bucket in INV" +GBUCOPR <GETYP O* -1(TP)> + <CAIE O* <TYPE-CODE UVECTOR>> + <JRST GBUCFIRST> + <DPUSH TP* A> + <PUSH TP* $TUVECTOR> + <PUSH TP* D> + <PUSH P* E> + <DMOVE A* -5(TP)> + <MOVE C* -2(P)> + <ADDI C* OPRTBL> + <MOVE O* -1(C)> + <MOVE C* -4(P)> +;"A&B/ current bucket +C/ length code for A&B +D/ cptr to new bucket +E/ length code for D" + <XCT O> + <EXCH A* -5(TP)> + <EXCH B* -4(TP)> + <EXCH C* -4(P)> + <SKIPGE C> + <CAMN B* -2(TP)> + <SKIPA> + <PUSHJ P* RELDATA> ;"releases original bucket if not needed any longer" + <DPOP TP* A> + <POP P* C> + <SKIPGE C> + <CAMN B* -2(TP)> + <SKIPA> + <PUSHJ P* RELDATA> ;"releases new bucket if not needed any longer" + <DPOP TP* A> + <GETYP O* -1(TP)> + <CAIE O* <TYPE-CODE UVECTOR>> + <JRST GBUCL2> + <SKIPL -3(P)> + <JRST GBUCL2> +;"Here when operator returns a writable bucket, make-sure it is non-empty" + <MOVEI E* BUCKET-LENGTH> + <MOVE D* (TP)> + <MOVE C* (D)> + <JFFO C* GBUCL2> + <ADD D* [<1(1)>]> + <SOJG E* HERE -3> + <EXCH A* -1(TP)> + <EXCH B* (TP)> + <PUSHJ P* RELDATA> + <DMOVE A* -1(TP)> + <MOVE O* $TFALSE> + <MOVEM O* -1(TP)> + <SETZM (TP)> + <SETZM -3(P)> +;"Here if either bucket doesn't exist or operator returned FALSE" +GBUCLOSE <MOVE O* -1(P)> + <CAIE O* 1> + <JRST GBUCL2> + <MOVE O* $TFALSE> + <MOVEM O* -1(TP)> + <SETZM (TP)> + <SETZM -3(P)> + <JRST GBUCRET> + +;"Here when bucket dir not a UVECTOR" +GBUCDW <CAIE O* <TYPE-CODE FIX>> + <JRST GBUCLOSE> +;"Here when inversion has a single id instead of a bucket dir" + <MOVE C* 7(E)> ;"C/ bucket # of id" + <CAME C* (P)> + <JRST GBUCLOSE> + <DPUSH TP* A> + <PUSH P* 9(E)> + <MOVEI A* 1> + <PUSHJ P* GETIUVECTOR> + <DMOVE C* A> + <POP P* (D)> + <DPOP TP* A> + <MOVEI E* 1> + <JRST GBUCOPR> + +;"Here when first bucket of expression found" +GBUCFIRST <MOVE O* $TUVECTOR> + <MOVEM O* -1(TP)> + <MOVEM D* (TP)> + <MOVEM E* -3(P)> + <JRST GBUCL2> + + +;"Here when search expression is complex, recurse" +GBUCREC <DPUSH TP* A> + <DMOVE A* (B)> + <MOVE C* (P)> + <MOVEI D* 1> + <PUSHJ P* GETBUCKET> + <MOVE E* C> ;"E/ length code for new bucket" + <DMOVE C* A> ;"C&D/ new bucket" + <DPOP TP* A> + <GETYP O* C> + <CAIE O* <TYPE-CODE UVECTOR>> + <JRST GBUCLOSE> + <JRST GBUCOPR> + +NOTGETBUC <CAIE O* <TYPE-CODE FALSE>> + <JRST BADINTEXP> + <JRST GBUCLOSE> + +GBUCL2 <ADD B* [<2(2)>]> + <JUMPL B* GBUCL1> +GBUCRET <POP P* D> ;"D/ # of bucket being returned" + <POP P* O> + <DMOVE A* -1(TP)> + <MOVE C* -1(P)> + <CAIE O* 4> + <CAIN O* 5> +;"*************************************************************************** +MAY BE ABLE TO JUST COMPLEMENT BUCKET IF AN 'AND' EXISTS IN A HIGHER +PART OF THE EXPRESSION +*****************************************************************************" + <PUSHJ P* NOTOPR> + <EXCH C* -1(P)> ;"C/ length code for old bucket" + <CAMN B* (TP)> + <JRST GBUCRET1> + <GETYP O* -1(TP)> + <CAIE O* <TYPE-CODE UVECTOR>> + <JRST GBUCRET1> + <JUMPGE C* GBUCRET1> + <EXCH A* -1(TP)> + <EXCH B* (TP)> + <PUSHJ P* RELDATA> + <DMOVE A* -1(TP)> ;"A&B/ new bucket" +GBUCRET1 <SUB TP* [<2(2)>]> + <POP P* D> ;"D/ level indicator(-1 ==> top level)" + <POP P* C> ;"C/ length code for bucket being returned" + <GETYP O* A> + <CAIE O* <TYPE-CODE UVECTOR>> + <JRST MPOPJ> ;"Jumps if no bucket being returned" + <SKIPGE D> ;"Just return if not at top-level" + <SKIPGE C> ;"Just return if bucket is bit-mask, writable" + <JRST MPOPJ> +;"Here if returning from original call to GETBUCKET and the bucket being returned +actually points to the data in an INV." + <CAIL C* BUCKET-LENGTH> + <JRST CPYBUCKET> ;"Jumps if already in bit-mask form, just copy" + <PUSHJ P* CNVBITMSK> + <HRREI C* -1> + <JRST MPOPJ> + +CPYBUCKET <DPUSH TP* A> + <MOVEI A* BUCKET-LENGTH> + <PUSHJ P* GETIUVECTOR> + <MOVE C* B> + <HRL C* (TP)> + <MOVE D* B> + <ADDI D* BUCKET-LENGTH> + <BLT C* -1(D)> + <DPOP TP* C> + <HRREI C* -1> + <JRST MPOPJ> + + + +OPRTBL <PUSHJ P* ANDOPR> + <PUSHJ P* IOROPR> + <PUSHJ P* XOROPR> + <PUSHJ P* ANDOPR> + <PUSHJ P* IOROPR> + + + +;"A&B/ current bucket +C/ length code for B +D/ cptr to new bucket +E/ length code for D" + +ANDOPR <SUBM M* (P)> + <JUMPL C* AND1MSK> + <SKIPL E> + <JRST ANDNEW> + <EXCH B* D> + <EXCH C* E> +;"B/ cptr to writable, bit-mask bucket" +AND1MSK <JUMPL E* AND2MSK> + <CAIL E* BUCKET-LENGTH> + <JRST AND2MSK> +;"Here if new bucket in direct format +Old bucket is bit-format but need not be writable" +ANDNMSK <CAIG E* 1> + <JRST AND1DIR> + <PUSH TP* $TUVECTOR> + <PUSH TP* B> + <PUSH TP* $TUVECTOR> + <PUSH TP* D> + <PUSH P* E> + <MOVEI A* BUCKET-LENGTH> + <PUSHJ P* GETIUVECTOR> + <POP TP* A> ;"A/ cptr to direct format bucket" + <POP TP* O> + <EXCH B* (TP)> ;"B/ cptr to bit-mask bucket" +ANDIRL1 <MOVE C* (A)> + <IDIVI C* BUCKET-COUNT> + <MOVE C* D> + <IDIVI C* 36> + <MOVNS D> + <MOVSI E* *400000*> + <LSH E* (D)> + <MOVE D* C> + <ADD D* B> + <MOVE O* (D)> + <TDNN O* E> + <JRST ANDIRL2> + <ADD C* (TP)> + <MOVE O* (C)> + <TDO O* E> + <MOVEM O* (C)> +ANDIRL2 <ADD A* [<1(1)>]> + <SOSLE (P)> + <JRST ANDIRL1> + <POP P* O> + <DPOP TP* A> ;"A&B/ new bit-mask format bucket UVECTOR" + <HRREI C* -1> + <JRST MPOPJ> + +;"Here when B is bit-mask and D is direct format with length of 1" +AND1DIR <PUSH P* B> + <MOVE A* (D)> + <IDIVI A* BUCKET-COUNT> + <MOVE A* B> + <IDIVI A* 36> + <MOVNS B> + <MOVSI C* *400000*> + <LSH C* (B)> + <POP P* B> + <ADD A* B> + <MOVE O* (A)> + <TDNN O* C> + <JRST ANDFLS> + <MOVE A* $TUVECTOR> + <MOVE B* D> + <MOVEI C* 1> + <JRST MPOPJ> + +;"Here to return FALSE" +ANDFLS <MOVE A* $TFALSE> + <MOVEI B* 0> + <MOVEI C* 0> + <JRST MPOPJ> + +;"Here when both in bit-mask format and B is writable" +AND2MSK <MOVE E* B> + <MOVEI C* BUCKET-LENGTH> + <MOVE O* (D)> + <ANDM O* (E)> + <ADD D* [<1(1)>]> + <ADD E* [<1(1)>]> + <SOJG C* HERE -4> + <MOVE A* $TUVECTOR> + <HRREI C* -1> + <JRST MPOPJ> + + +;"Here if neither bucket writable (may still be in bit-mask format)" +ANDNEW <CAIGE C* BUCKET-LENGTH> + <JRST AND2DIR> + <CAIGE E* BUCKET-LENGTH> + <JRST ANDNMSK> +;"Here if both read-only bit-mask" + <PUSH TP* $TUVECTOR> + <PUSH TP* D> + <PUSH TP* $TUVECTOR> + <PUSH TP* B> + <PUSH P* E> + <MOVEI A* BUCKET-LENGTH> + <PUSHJ P* GETIUVECTOR> + <MOVE C* B> + <HRL C* (TP)> + <MOVE D* B> + <ADDI D* BUCKET-LENGTH> + <BLT C* -1(D)> + <DPOP TP* C> + <DPOP TP* C> + <POP P* E> + <HRREI C* -1> + <JRST AND2MSK> + +AND2DIR <CAIGE E* BUCKET-LENGTH> + <JRST HERE 4> + <EXCH B* D> + <EXCH C* E> + <JRST ANDNMSK> +;"Here when both buckets in direct format" + <CAIE C* 1> + <CAIN E* 1> + <JRST AND2DIR1> + <PUSH TP* $TUVECTOR> + <PUSH TP* B> + <PUSH TP* $TUVECTOR> + <PUSH TP* D> + <PUSH P* C> + <PUSH P* E> + <MOVEI A* BUCKET-LENGTH> + <PUSHJ P* GETIUVECTOR> + <DPOP TP* C> + <MOVEM A* -1(TP)> + <EXCH B* (TP)> + <POP P* E> + <POP P* C> +AND2DL1 <MOVE O* (B)> + <CAMN O* (D)> + <JRST AND2DFND> + <CAML O* (D)> + <JRST AND2DL2> + <ADD B* [<1(1)>]> + <SOJG C* AND2DL1> +AND2DRET <DPOP TP* A> + <HRREI C* -1> + <JRST MPOPJ> +AND2DL2 <ADD D* [<1(1)>]> + <SOJG E* AND2DL1> + <JRST AND2DRET> +AND2DFND <PUSH P* D> + <PUSH P* E> + <MOVE D* (B)> + <IDIVI D* BUCKET-COUNT> + <MOVE D* E> + <IDIVI D* 36> + <MOVNS E> + <MOVSI O* *400000*> + <LSH O* (E)> + <ADD D* (TP)> + <MOVE E* (D)> + <TDO E* O> + <MOVEM E* (D)> + <POP P* E> + <POP P* D> + <ADD B* [<1(1)>]> + <ADD D* [<1(1)>]> + <SOJLE C* AND2DRET> + <SOJG E* AND2DL1> + <JRST AND2DRET> + + +;"Here if either direct-format bucket is only one id long" +AND2DIR1 <CAIN C* 1> + <JRST HERE 3> + <EXCH B* D> + <EXCH C* E> + <MOVE O* (B)> + <MOVE A* $TUVECTOR> + <CAMN O* (D)> + <JRST MPOPJ> + <ADD D* [<1(1)>]> + <SOJG E* HERE -3> + <JRST ANDFLS> + + + +;"A&B/ current bucket +C/ length code for B +D/ cptr to new bucket +E/ length code for D" + +IOROPR <SUBM M* (P)> + <JUMPL C* IOR1MSK> + <SKIPL E> + <JRST IORNEW> + <EXCH B* D> + <EXCH C* E> +;"B/ cptr to writable, bit-mask bucket" +IOR1MSK <JUMPL E* IOR2MSK> + <CAIL E* BUCKET-LENGTH> + <JRST IOR2MSK> +;"Here if new bucket in direct format +Old bucket is bit-format but need not be writable" +IORNMSK <PUSH P* E> + <JUMPL C* IORIRL1> +;"Here if old bucket is read-only, copy it" + <PUSH TP* $TUVECTOR> + <PUSH TP* D> + <PUSH TP* $TUVECTOR> + <PUSH TP* B> + <MOVEI A* BUCKET-LENGTH> + <PUSHJ P* GETIUVECTOR> + <DPOP TP* C> ;"C&D/ cptr to old bit-mask format bucket" + <HRL C* D> + <HRR C* B> + <MOVE E* B> + <ADDI E* BUCKET-LENGTH> + <BLT C* -1(E)> ;"copies bit-format bucket into new uvct" + <DPOP TP* C> ;"C&D/ cptr to new, direct format bucket" +;"A&B/ cptr to bit-mask format bucket, writable" +IORIRL1 <MOVE C* D> +IORIRL2 <MOVE D* (C)> + <IDIVI D* BUCKET-COUNT> + <MOVE D* E> + <IDIVI D* 36> + <MOVNS E> + <MOVSI O* *400000*> + <LSH O* (E)> + <ADD D* B> + <MOVE E* (D)> + <TDO E* O> + <MOVEM E* (D)> + <ADD C* [<1(1)>]> + <SOSLE (P)> + <JRST IORIRL2> + <POP P* O> + <HRREI C* -1> + <JRST MPOPJ> + +;"Here to return FALSE" +IORFLS <MOVE A* $TFALSE> + <MOVEI B* 0> + <MOVEI C* 0> + <JRST MPOPJ> + +;"Here when both in bit-mask format and B is writable" +IOR2MSK <MOVE E* B> + <MOVEI C* BUCKET-LENGTH> + <MOVE O* (D)> + <IORM O* (E)> + <ADD D* [<1(1)>]> + <ADD E* [<1(1)>]> + <SOJG C* HERE -4> + <MOVE A* $TUVECTOR> + <HRREI C* -1> + <JRST MPOPJ> + + +;"Here if neither bucket writable (may still be in bit-mask format)" +IORNEW <CAIGE C* BUCKET-LENGTH> + <JRST IOR2DIR> + <CAIGE E* BUCKET-LENGTH> + <JRST IORNMSK> +;"Here if both read-only bit-mask" + <PUSH TP* $TUVECTOR> + <PUSH TP* D> + <PUSH TP* $TUVECTOR> + <PUSH TP* B> + <PUSH P* E> + <MOVEI A* BUCKET-LENGTH> + <PUSHJ P* GETIUVECTOR> + <MOVE C* B> + <HRL C* (TP)> + <MOVE D* B> + <ADDI D* BUCKET-LENGTH> + <BLT C* -1(D)> + <DPOP TP* C> + <DPOP TP* C> + <POP P* E> + <HRREI C* -1> + <JRST IOR2MSK> + +IOR2DIR <CAIGE E* BUCKET-LENGTH> + <JRST HERE 4> + <EXCH B* D> + <EXCH C* E> + <JRST IORNMSK> +;"Here when both buckets in direct format" + <PUSH TP* $TUVECTOR> + <PUSH TP* B> + <PUSH TP* $TUVECTOR> + <PUSH TP* D> + <PUSH P* C> + <PUSH P* E> + <MOVEI A* BUCKET-LENGTH> + <PUSHJ P* GETIUVECTOR> + <DPOP TP* C> + <MOVEM A* -1(TP)> + <EXCH B* (TP)> + <POP P* E> + <POP P* C> +;"B/ old bucket +C/ length code for B +D/ new bucket +E/ length code of D" +IOR2DL1 <JUMPLE C* HERE 4> + <MOVE O* (B)> + <JUMPLE E* HERE 3> + <CAMLE O* (D)> + <MOVE O* (D)> + <PUSH P* D> + <PUSH P* E> + <MOVE D* O> + <IDIVI D* BUCKET-COUNT> + <MOVE D* E> + <IDIVI D* 36> + <MOVNS E> + <MOVSI O* *400000*> + <LSH O* (E)> + <ADD D* (TP)> + <MOVE E* (D)> + <TDO E* O> + <MOVEM E* (D)> + <POP P* E> + <POP P* D> + <JUMPLE C* IOR2DL2> ;"jumps if B exhausted" + <JUMPLE E* IOR2DL3> ;"jumps if D exhausted" + <MOVE O* (B)> + <CAMN O* (D)> + <JRST IOR2DBOTH> + <CAML O* (D)> + <JRST IOR2DL2> +IOR2DL3 <ADD B* [<1(1)>]> + <SOJG C* IOR2DL1> + <JUMPG E* IOR2DL1> +IOR2DRET <DPOP TP* A> + <HRREI C* -1> + <JRST MPOPJ> +IOR2DL2 <ADD D* [<1(1)>]> + <SOJG E* IOR2DL1> + <JUMPG C* IOR2DL1> + <JRST IOR2DRET> +IOR2DBOTH <ADD B* [<1(1)>]> + <ADD D* [<1(1)>]> + <SOS C> + <SOJG E* IOR2DL1> + <JUMPG C* IOR2DL1> + <JRST IOR2DRET> + + + + + +;"A&B/ current bucket +C/ length code for B +D/ cptr to new bucket +E/ length code for D" + +XOROPR <SUBM M* (P)> + <JUMPL C* XOR1MSK> + <SKIPL E> + <JRST XORNEW> + <EXCH B* D> + <EXCH C* E> +;"B/ cptr to writable, bit-mask bucket" +XOR1MSK <JUMPL E* XOR2MSK> + <CAIL E* BUCKET-LENGTH> + <JRST XOR2MSK> +;"Here if new bucket in direct format +Old bucket is bit-format but need not be writable" +XORNMSK <PUSH P* E> + <JUMPL C* XORIRL1> +;"Here if old bucket is read-only, copy it" + <PUSH TP* $TUVECTOR> + <PUSH TP* D> + <PUSH TP* $TUVECTOR> + <PUSH TP* B> + <MOVEI A* BUCKET-LENGTH> + <PUSHJ P* GETIUVECTOR> + <DPOP TP* C> ;"C&D/ cptr to old bit-mask format bucket" + <HRL C* D> + <HRR C* B> + <MOVE E* B> + <ADDI E* BUCKET-LENGTH> + <BLT C* -1(E)> ;"copies bit-format bucket into new uvct" + <DPOP TP* C> ;"C&D/ cptr to new, direct format bucket" +;"A&B/ cptr to bit-mask format bucket, writable" +XORIRL1 <MOVE C* D> +XORIRL2 <MOVE D* (C)> + <IDIVI D* BUCKET-COUNT> + <MOVE D* E> + <IDIVI D* 36> + <MOVNS E> + <MOVSI O* *400000*> + <LSH O* (E)> + <ADD D* B> + <MOVE E* (D)> + <TDNE E* O> + <TDZA E* O> ;"Removes id if it exists in both buckets" + <TDO E* O> ;"Inserts id if it only exists in one bucket" + <MOVEM E* (D)> + <ADD C* [<1(1)>]> + <SOSLE (P)> + <JRST XORIRL2> + <POP P* O> + <HRREI C* -1> + <JRST MPOPJ> + + +;"Here to return FALSE" +XORFLS <MOVE A* $TFALSE> + <MOVEI B* 0> + <MOVEI C* 0> + <JRST MPOPJ> + +;"Here when both in bit-mask format and B is writable" +XOR2MSK <MOVE E* B> + <MOVEI C* BUCKET-LENGTH> + <MOVE O* (D)> + <XORM O* (E)> + <ADD D* [<1(1)>]> + <ADD E* [<1(1)>]> + <SOJG C* HERE -4> + <MOVE A* $TUVECTOR> + <HRREI C* -1> + <JRST MPOPJ> + +;"Here if neither bucket writable (may still be in bit-mask format)" +XORNEW <CAIGE C* BUCKET-LENGTH> + <JRST XOR2DIR> + <CAIGE E* BUCKET-LENGTH> + <JRST XORNMSK> +;"Here if both read-only bit-mask" + <PUSH TP* $TUVECTOR> + <PUSH TP* D> + <PUSH TP* $TUVECTOR> + <PUSH TP* B> + <PUSH P* E> + <MOVEI A* BUCKET-LENGTH> + <PUSHJ P* GETIUVECTOR> + <MOVE C* B> + <HRL C* (TP)> + <MOVE D* B> + <ADDI D* BUCKET-LENGTH> + <BLT C* -1(D)> + <DPOP TP* C> + <DPOP TP* C> + <POP P* E> + <HRREI C* -1> + <JRST XOR2MSK> + +XOR2DIR <CAIGE E* BUCKET-LENGTH> + <JRST HERE 4> + <EXCH B* D> + <EXCH C* E> + <JRST XORNMSK> +;"Here when both buckets in direct format" + <PUSH TP* $TUVECTOR> + <PUSH TP* B> + <PUSH TP* $TUVECTOR> + <PUSH TP* D> + <PUSH P* C> + <PUSH P* E> + <MOVEI A* BUCKET-LENGTH> + <PUSHJ P* GETIUVECTOR> + <DPOP TP* C> + <MOVEM A* -1(TP)> + <EXCH B* (TP)> + <POP P* E> + <POP P* C> +XOR2DL1 <JUMPG C* HERE 3> + <MOVE O* (D)> + <JRST XOR2DL3> + <MOVE O* (B)> + <JUMPLE E* XOR2DL3> + <CAMN O* (D)> + <JRST XOR2DBOTH> + <CAML O* (D)> + <MOVE O* (D)> +XOR2DL3 <PUSH P* D> + <PUSH P* E> + <MOVE D* O> + <IDIVI D* BUCKET-COUNT> + <MOVE D* E> + <IDIVI D* 36> + <MOVNS E> + <MOVSI O* *400000*> + <LSH O* (E)> + <ADD D* (TP)> + <MOVE E* (D)> + <TDO E* O> + <MOVEM E* (D)> + <POP P* E> + <POP P* D> + <JUMPLE C* XOR2DL2> + <MOVE O* (B)> + <JUMPLE E* HERE 3> + <CAML O* (D)> + <JRST XOR2DL2> + <ADD B* [<1(1)>]> + <SOJG C* XOR2DL1> + <JUMPG E* XOR2DL1> +XOR2DRET <DPOP TP* A> + <HRREI C* -1> + <JRST MPOPJ> +XOR2DL2 <ADD D* [<1(1)>]> + <SOJG E* XOR2DL1> + <JUMPG C* XOR2DL1> + <JRST XOR2DRET> +XOR2DBOTH <ADD B* [<1(1)>]> + <ADD D* [<1(1)>]> + <SOS C> + <SOJG E* XOR2DL1> + <JUMPG C* XOR2DL1> + <JRST XOR2DRET> + + + + + + + +;"A&B/ bucket UVECTOR +C/ length code for bucket +D/ # of bucket being worked on + +==> A&B/ NOT of original bucket + C/ -1" + +NOTOPR <SUBM M* (P)> + <PUSH P* D> + <MOVE E* <MQUOTE '%<RGLOC INV-SEARCH-MASTER T>>> + <ADD E* GLOTOP 1 (TVP)> + <DMOVE D* (E)> + <GETYP O* D> + <CAIE O* <TYPE-CODE VECTOR>> + <JRST NOTERR> + <SKIPGE 3(E)> + <JRST NOTFLS> + <HRRE O* 3(E)> + <JUMPL O* NOTFLS> + <DMOVE D* 4(E)> + <GETYP O* D> + <CAIE O* <TYPE-CODE VECTOR>> + <JRST BADMASTINV> + <GETYP O* (E)> + <CAIE O* <TYPE-CODE INV>> + <JRST NOTFLS> + <GETYP O* 6(E)> + <CAIE O* <TYPE-CODE UVECTOR>> + <JRST NOTCHKW> ;"jumps if no bucket dir in inv state vector" + <SKIPL D* 7(E)> + <JRST NOTFLS> + <MOVE O* (D)> + <CAME O* (P)> + <JRST NOTFLS> + <HRR O* 1(D)> + <HRL O* 1(D)> + <ADD O* 9(E)> + <LDB E* [<(,BLNT-BPTR) 1(D)>]> + <MOVE D* O> + <POP P* O> +;"A&B/ bucket UVECTOR +C/ length code for A&B +D/ bucket UVECTOR from master inversion +E/ length code for D" +NOTOPR1 <GETYP O* A> + <CAIE O* <TYPE-CODE UVECTOR>> + <JRST NOTRETMAST> + <SKIPL C> + <CAIL C* BUCKET-LENGTH> + <SKIPA> + <JRST NOTNEW> ;"jumps if old bucket in direct format" +;"B/ cptr to bit-mask bucket" +NOT1MSK <SKIPL E> + <CAIL E* BUCKET-LENGTH> + <JRST NOT2MSK> ;"jumps if both in bit-mask format" +;"Here if master bucket in direct format and old bucket in bit-mask format" +NOTNMSK <CAIG E* 1> + <JRST NOT1DIR> + <PUSH TP* $TUVECTOR> + <PUSH TP* B> + <PUSH TP* $TUVECTOR> + <PUSH TP* D> + <PUSH P* E> + <MOVEI A* BUCKET-LENGTH> + <PUSHJ P* GETIUVECTOR> + <POP TP* A> ;"A/ cptr to direct format bucket" + <POP TP* O> + <EXCH B* (TP)> ;"B/ cptr to bit-mask bucket" +NOTIRL1 <MOVE C* (A)> + <IDIVI C* BUCKET-COUNT> + <MOVE C* D> + <IDIVI C* 36> + <MOVNS D> + <MOVSI E* *400000*> + <LSH E* (D)> + <MOVE D* C> + <ADD D* B> + <MOVE O* (D)> + <TDNE O* E> + <JRST NOTIRL2> + <ADD C* (TP)> + <MOVE O* (C)> + <TDO O* E> + <MOVEM O* (C)> +NOTIRL2 <ADD A* [<1(1)>]> + <SOSLE (P)> + <JRST NOTIRL1> + <POP P* O> + <DPOP TP* A> ;"A&B/ new bit-mask format bucket UVECTOR" + <HRREI C* -1> + <JRST MPOPJ> + +NOTCHKW <CAIE O* <TYPE-CODE FIX>> + <JRST NOTFLS> + <MOVE O* 7(E)> + <CAME O* (P)> + <JRST NOTFLS> + <DPUSH TP* A> + <PUSH P* C> + <PUSH P* 9(E)> + <MOVEI A* 1> + <PUSHJ P* GETIUVECTOR> + <MOVE D* B> + <POP P* (D)> + <MOVEI E* 1> + <POP P* C> + <DPOP TP* A> + <POP P* O> + <JRST NOTOPR1> + +NOTRETMAST <MOVE A* $TUVECTOR> + <MOVE B* D> + <MOVE C* E> + <JRST MPOPJ> + +;"Here when B is bit-mask and D is direct format with length of 1" +NOT1DIR <PUSH P* B> + <MOVE A* (D)> + <IDIVI A* BUCKET-COUNT> + <MOVE A* B> + <IDIVI A* 36> + <MOVNS B> + <MOVSI C* *400000*> + <LSH C* (B)> + <POP P* B> + <ADD A* B> + <MOVE O* (A)> + <TDNE O* C> + <JRST NOTFLS1> + <MOVE A* $TUVECTOR> + <MOVE B* D> + <MOVEI C* 1> + <JRST MPOPJ> + +;"Here to return FALSE" +NOTFLS <POP P* O> +NOTFLS1 <MOVE A* $TFALSE> + <MOVEI B* 0> + <MOVEI C* 0> + <JRST MPOPJ> + +;"Here when both in bit-mask format" +NOT2MSK <JUMPL C* NOT2MSK1> +;"Here if old bucket read-only, copy it" + <PUSH TP* $TUVECTOR> + <PUSH TP* D> + <PUSH TP* $TUVECTOR> + <PUSH TP* B> + <MOVEI A* BUCKET-LENGTH> + <PUSHJ P* GETIUVECTOR> + <DPOP TP* C> + <HRL C* D> + <HRR C* B> + <MOVE D* B> + <ADDI D* BUCKET-LENGTH> + <BLT C* -1(D)> + <DPOP TP* C> +NOT2MSK1 <MOVE E* B> + <MOVEI C* BUCKET-LENGTH> +NOT2ML <MOVE O* (E)> + <ANDCA O* (D)> + <MOVEM O* (E)> + <ADD D* [<1(1)>]> + <ADD E* [<1(1)>]> + <SOJG C* NOT2ML> + <MOVE A* $TUVECTOR> + <HRREI C* -1> + <JRST MPOPJ> + + +;"Here if old bucket in direct format" +NOTNEW <SKIPL E> + <CAIL E* BUCKET-LENGTH> + <SKIPA> + <JRST NOT2DIR> +;"Here if old bucket in direct format and master bucket in bit-mask" + <PUSH TP* $TUVECTOR> + <PUSH TP* D> + <PUSH P* E> + <PUSHJ P* CNVBITMSK> + <POP P* E> + <POP TP* D> + <POP TP* O> + <JRST NOT2MSK> + +;"Here if both buckets in direct format" +NOT2DIR <CAIN E* 1> + <JRST NOT2DIR1> ;"Jumps if master bucket only 1 long" + <PUSH TP* $TUVECTOR> + <PUSH TP* B> + <PUSH TP* $TUVECTOR> + <PUSH TP* D> + <PUSH P* C> + <PUSH P* E> + <MOVEI A* BUCKET-LENGTH> + <PUSHJ P* GETIUVECTOR> + <DPOP TP* C> + <MOVEM A* -1(TP)> + <EXCH B* (TP)> + <POP P* E> + <POP P* C> +NOT2DL1 <MOVE O* (D)> + <JUMPLE C* NOT2DL2> + <CAMN O* (B)> + <JRST NOT2DFND> + <CAMG O* (B)> + <JRST NOT2DL2> + <ADD B* [<1(1)>]> + <SOJA C* NOT2DL1> +NOT2DRET <DPOP TP* A> + <HRREI C* -1> + <JRST MPOPJ> +NOT2DL2 <PUSH P* D> + <PUSH P* E> + <MOVE D* (D)> + <IDIVI D* BUCKET-COUNT> + <MOVE D* E> + <IDIVI D* 36> + <MOVNS E> + <MOVSI O* *400000*> + <LSH O* (E)> + <ADD D* (TP)> + <MOVE E* (D)> + <TDO E* O> + <MOVEM E* (D)> + <POP P* E> + <POP P* D> + <ADD D* [<1(1)>]> + <SOJG E* NOT2DL1> + <JRST NOT2DRET> +NOT2DFND <ADD B* [<1(1)>]> + <ADD D* [<1(1)>]> + <SOS C> + <SOJG E* NOT2DL1> + <JRST NOT2DRET> + + +;"Here if master (direct-format) bucket is only one id long" +NOT2DIR1 <MOVE O* (D)> + <MOVE A* $TUVECTOR> + <CAMN O* (B)> + <JRST NOTFLS1> + <ADD B* [<1(1)>]> + <SOJG C* HERE -3> + <MOVE A* $TUVECTOR> + <MOVE B* D> + <MOVEI C* 1> + <JRST MPOPJ> + + +NOTERR <DPUSH TP* <PQUOTE TRIED-TO-USE-A-NEGATIVE-OPERATOR!-ERRORS>> + <DPUSH TP* <PQUOTE WITHOUT-A-MASTER-INVERSION!-ERRORS>> + <MCALL 2 ERROR> + <JRST NOTERR> + +BADMASTINV <DPUSH TP* <PQUOTE BAD-STATE-VECTOR-FOR-MASTER-INVERSION!-ERRORS>> + <MCALL 1 ERROR> + <JRST BADMASTINV> + + + + +;"A&B/ bucket UVECTOR +C/ length code for bucket + +==> A&B/ bit-mask version of original bucket + C/ -1" + +CNVBITMSK <SUBM M* (P)> + <SKIPGE C> + <JRST MPOPJ> + <DPUSH TP* A> + <PUSH P* C> + <MOVEI A* BUCKET-LENGTH> + <PUSHJ P* GETIUVECTOR> + <MOVEM A* -1(TP)> + <EXCH B* (TP)> + <POP P* A> +CNVBL1 <MOVE D* (B)> + <IDIVI D* BUCKET-COUNT> + <MOVE D* E> + <IDIVI D* 36> + <MOVNS E> + <MOVSI C* *400000*> + <LSH C* (E)> + <ADD D* (TP)> + <MOVE E* (D)> + <TDO E* C> + <MOVEM E* (D)> + <ADD B* [<1(1)>]> + <SOJG A* CNVBL1> + <DPOP TP* A> + <HRREI C* -1> + <JRST MPOPJ> + + +;"##################################################################### +####################################################################### +######################################################################" + + +<TITLE INV-LENGTH> + +<DECLARE ("VALUE" FIX INV)> + + <DPUSH TP* (AB)> + <PUSHJ P* IINV-LENGTH> + <JRST FINIS> + +<INTERNAL-ENTRY IINV-LENGTH 1> + + <SUBM M* (P)> + <MOVE E* (TP)> + <MOVE A* $TFIX> + <MOVEI B* 0> + <SUB TP* [<2(2)>]> + <SKIPGE E> + <MOVE B* 3(E)> + <JRST MPOPJ> + + + +;"##################################################################### +####################################################################### +######################################################################" + + + +<TITLE INV-INSERT> + +<DECLARE ("VALUE" <OR INV FALSE> <OR INV FALSE> FIX)> + + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* IINV-INSERT> + <JRST FINIS> + +<INTERNAL-ENTRY IINV-INSERT 2> + <SUBM M* (P)> + <MOVM A* (TP)> + <MOVEM A* (TP)> ;"Don't allow negative numbers" + <GETYP O* -3(TP)> + <CAIN O* <TYPE-CODE INV>> + <SKIPL E* -2(TP)> + <JRST INSFIRST> + <MOVE A* 1(E)> + <CAIE A* 2> + <PUSHJ P* INSTWO> + <GETYP O* 4(E)> + <CAIN O* <TYPE-CODE VECTOR>> + <SKIPL D* 5(E)> + <JRST BADINV> + <MOVE A* (TP)> + <IDIVI A* BLOCK-COUNT> + <CAME A* 1(D)> + <JRST N1BLK> + <GETYP O* 2(D)> + <CAIN O* <TYPE-CODE UVECTOR>> + <SKIPL C* 3(D)> + <JRST BADINV> + <HLRZ A* (C)> ;"A/ # of idents in blk" + <MOVE B* 3(E)> ;"B/ # of idents in inversion" + <SUB B* A> + <PUSH P* B> +INSBLK <MOVE O* (TP)> + <PUSH TP* $TVECTOR> + <PUSH TP* D> + <PUSH TP* 2(D)> + <PUSH TP* 3(D)> + <PUSH TP* $TFIX> + <PUSH TP* O> + <MCALL 2 INS-INTO-INV-BLK> + <DPOP TP* C> + <GETYP O* A> + <CAIE O* <TYPE-CODE UVECTOR>> + <JRST BADINS> + <DMOVEM A* 2(D)> + <HLRZ A* (B)> + <POP P* B> + <ADD A* B> + <MOVE E* -2(TP)> + <MOVEM A* 3(E)> + <SUB TP* [<2(2)>]> + <DPOP TP* A> + <JRST MPOPJ> + +INSFIRST <MOVE O* (TP)> + <PUSH TP* $TFIX> + <PUSH TP* [1]> + <PUSH TP* $TFIX> + <PUSH TP* [1]> + <PUSH TP* $TFIX> + <PUSH TP* O> + <MCALL 3 INV-VECTOR> + <MOVEI O* <TYPE-CODE INV>> + <PUTYP O* A> + <SUB TP* [<4(4)>]> + <JRST MPOPJ> + + +INSTWO <SUBM M* (P)> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* [6]> + <MCALL 1 INV-IUVECTOR> + <ADD B* [<6(6)>]> + <MOVE E* -2(TP)> + <DPUSH TP* A> + <PUSH TP* $TFIX> + <PUSH TP* 5(E)> + <MCALL 2 INS-INTO-INV-BLK> + <GETYP O* A> + <CAIE O* <TYPE-CODE UVECTOR>> + <JRST BADINS> + <MOVE E* -2(TP)> + <MOVE C* 5(E)> + <IDIVI C* BLOCK-COUNT> + <PUSH TP* $TFIX> + <PUSH TP* C> + <DPUSH TP* A> + <MCALL 2 INV-VECTOR> + <MOVE E* -2(TP)> + <DMOVEM A* 4(E)> + <MOVEI A* 1> + <MOVEM A* 3(E)> + <MOVEI A* 2> + <MOVEM A* 1(E)> + <JRST MPOPJ> + +;"A/ blk # of ident being inserted +D/ cptr to blk dir vector" + +N1BLK <HLRE B* D> + <MOVMS B> + <IDIVI B* 4> ;"B/ # of entries in blk dir vector" + <MOVE C* D> ;"C/ cptr tp blk dir vector" +SBLKDIR <CAILE B* 3> + <JRST SBLKBIN> +SBLKLP1 <CAMN A* 1(C)> + <JRST FNDBLK> ;"jumps if desired blk exists" + <CAMG A* 1(C)> + <JRST NEWBLK> ;"jumps if a new blk needed" + <ADD C* [<4(4)>]> + <SOJG B* SBLKLP1> +NEWBLK <MOVE E* -2(TP)> + <MOVE D* 5(E)> + <MOVEI B* 0> + <HRRZ O* C> + <SUBI O* (D)> + <HRLS O*> + <PUSH P* O> +NEWBLKLP1 <CAME D* C> + <JRST NEWBLKLP2> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* A> + <PUSH TP* <TYPE-WORD FALSE>> + <PUSH TP* [0]> + <ADDI B* 2> +NEWBLKLP2 <JUMPGE D* NEWBLKLP3> + <DPUSH TP* (D)> + <ADD D* [<2(2)>]> + <AOJ B*> + <JRST NEWBLKLP1> +NEWBLKLP3 <MOVE A* B> + <ACALL A* INV-VECTOR> + <MOVE E* -2(TP)> + <DPUSH TP* 4(E)> + <DMOVEM A* 4(E)> + <MCALL 1 INV-RELDATA> + <MOVE E* -2(TP)> + <DMOVE A* 4(E)> + <POP P* C> + <ADD C* B> + <PUSH P* 3(E)> + <JRST FNDBLK1> + +;"C/ cptr to winning entry in blk dir vector" +FNDBLK <MOVE E* -2(TP)> + <SKIPL D* 3(C)> + <JRST BADINV> + <HLRZ A* (D)> ;"A/ # of idents in blk" + <MOVE B* 3(E)> ;"B/ # of idents in whole inversion" + <SUB B* A> + <PUSH P* B> +FNDBLK1 <MOVE D* C> + <JRST INSBLK> + + +SBLKBIN <MOVE D* B> + <IDIVI D* 2> + <MOVE E* D> + <IMULI E* 4> + <HRLS E> + <ADD E* C> + <CAMGE A* 1(E)> + <JRST SBLKUP> + <CAMN A* 1(E)> + <JRST FNDBLK> + <MOVE C* E> + <SUB B* D> + <JRST SBLKDIR> + +SBLKUP <MOVE B* D> + <JRST SBLKDIR> + + + +BADINV <DMOVE A* -2(TP)> + <DPUSH TP* <PQUOTE INVALID-INVERSION!-ERRORS>> + <DPUSH TP* A> + <MCALL 2 ERROR> + <JRST BADINV> + +BADINS <DMOVE C* -2(TP)> + <DPUSH TP* <PQUOTE COULDNT-INSERT-INTO-INV-BLK!-ERRORS>> + <DPUSH TP* A> + <DPUSH TP* C> + <MCALL 3 ERROR> + <JRST BADINS> + + +<SUB-ENTRY INV-DELETE ("VALUE" <OR INV FALSE> INV FIX)> + + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* IINV-DELETE> + <JRST FINIS> + +<INTERNAL-ENTRY IINV-DELETE 2> + <SUBM M* (P)> + <MOVM A* (TP)> + <MOVEM A* (TP)> ;"Don't allow negative numbers" + <GETYP O* -3(TP)> + <CAIN O* <TYPE-CODE INV>> + <SKIPL E* -2(TP)> + <JRST RETFLS> + <MOVE A* 1(E)> + <CAIE A* 2> + <JRST DELSID> + <GETYP O* 4(E)> + <CAIN O* <TYPE-CODE VECTOR>> + <SKIPL D* 5(E)> + <JRST BADINV> + <MOVE A* (TP)> + <IDIVI A* BLOCK-COUNT> + <CAME A* 1(D)> + <JRST DN1BLK> + <GETYP O* 2(D)> + <CAIN O* <TYPE-CODE UVECTOR>> + <SKIPL C* 3(D)> + <JRST BADINV> + <HLRZ A* (C)> ;"A/ # of idents in blk" + <MOVE B* 3(E)> ;"B/ # of idents in inversion" + <SUB B* A> + <PUSH P* B> +DELID <MOVE O* (TP)> + <PUSH TP* $TVECTOR> + <PUSH TP* D> + <PUSH TP* 2(D)> + <PUSH TP* 3(D)> + <PUSH TP* $TFIX> + <PUSH TP* O> + <MCALL 2 DEL-FROM-INV-BLK> + <DPOP TP* C> + <GETYP O* A> + <CAIE O* <TYPE-CODE UVECTOR>> + <JRST BADDEL> + <JUMPGE B* DELBLK> + <MOVE E* -2(TP)> + <MOVEM B* 3(D)> + <HLRZ A* (B)> + <POP P* B> + <ADD A* B> + <MOVEM A* 3(E)> +DELRET <SUB TP* [<2(2)>]> + <DPOP TP* A> + <JRST MPOPJ> + +RETFLS <SUB TP* [<4(4)>]> + <MOVE A* $TFALSE> + <MOVEI B* 0> + <JRST MPOPJ> + +DELSID <MOVE A* 5(E)> + <CAME A* (TP)> + <JRST DELRET> + <JRST RETFLS> + + +;"A/ blk # of ident being inserted +D/ cptr to blk dir vector" + +DN1BLK <HLRE B* D> + <MOVMS B> + <IDIVI B* 4> ;"B/ # of entries in blk dir vector" + <MOVE C* D> ;"C/ cptr tp blk dir vector" +DSBLKDIR <CAILE B* 3> + <JRST DSBLKBIN> +DSBLKLP1 <CAMN A* 1(C)> + <JRST DFNDBLK> ;"jumps if desired blk exists" + <CAMG A* 1(C)> + <JRST DELRET> + <ADD C* [<4(4)>]> + <SOJG B* DSBLKLP1> + <JRST DELRET> + +;"C/ cptr to winning entry in blk dir vector" +DFNDBLK <MOVE E* -2(TP)> + <SKIPL D* 3(C)> + <JRST BADINV> + <HLRZ A* (D)> ;"A/ # of idents in blk" + <MOVE B* 3(E)> ;"B/ # of idents in whole inversion" + <SUB B* A> + <PUSH P* B> +DFNDBLK1 <MOVE D* C> + <JRST DELID> + + +DSBLKBIN <MOVE D* B> + <IDIVI D* 2> + <MOVE E* D> + <IMULI E* 4> + <HRLS E> + <ADD E* C> + <CAMGE A* 1(E)> + <JRST DSBLKUP> + <MOVE C* E> + <SUB B* D> + <CAMN A* 1(E)> + <JRST DFNDBLK> + <JRST DSBLKDIR> + +DSBLKUP <MOVE B* D> + <JRST DSBLKDIR> + + +;"A&B/ cptr to empty UVCT +C&D/ cptr to blk's entry in dir VECTOR" + +;"Here if DEL-FROM-INV-BLK returned an empty blk" +DELBLK <MOVE E* -2(TP)> + <POP P* O> ;"O/ number of id's in INV, less # in blk being hacked" + <JUMPLE O* RETFLS> ;"jumps if deleted last id in INV" + <MOVEM O* 3(E)> + <MOVE A* 5(E)> ;"A/ cptr to original dir vector" + <ADD A* [<4(4)>]> ;"A/ cptr to 'new' blk dir vector" + <EXCH A* 5(E)> ;"A/ cptr to old blk dir vector" + <CAMN A* D> + <JRST DELRET> + <MOVE B* D> + <ADD B* [<4(4)>]> +MOVLP1 <SUB B* [<1(1)>]> + <SUB D* [<1(1)>]> + <MOVE O* (D)> + <MOVEM O* (B)> + <CAME D* A> + <JRST MOVLP1> + <JRST DELRET> + + + +BADDEL <DMOVE C* -2(TP)> + <DPUSH TP* <PQUOTE COULDNT-DELETE-FROM-INV-BLK>> + <DPUSH TP* A> + <DPUSH TP* C> + <MCALL 3 ERROR> + <JRST BADDEL> + + + + +<SUB-ENTRY INV-TEST ("VALUE" <OR FIX FALSE> INV FIX)> + + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* IINV-TEST> + <JRST FINIS> + +<INTERNAL-ENTRY IINV-TEST 2> + <SUBM M* (P)> + <MOVM A* (TP)> ;"Number being tested" + <MOVEM A* (TP)> ;"Don't allow negative numbers" + <GETYP O* -3(TP)> + <CAIN O* <TYPE-CODE INV>> + <SKIPL E* -2(TP)> ;"E/ cptr to INV being tested" + <JRST RETFLS> ;"FALSE if not a legal INV" + <MOVE A* 1(E)> ;"A/ type code of INV" + <CAIE A* 2> + <JRST TSTSID> ;"Here if 'single id' form" + <GETYP O* 4(E)> + <CAIN O* <TYPE-CODE VECTOR>> + <SKIPL D* 5(E)> ;"D/ cptr to VECTOR of bucket UVECTORS" + <JRST RETFLS> ;"FALSE if not a legal INV" + <MOVE A* (TP)> ;"A/ id being tested" + <IDIVI A* BLOCK-COUNT> ;"A/ blk # of id being tested" + <CAME A* 1(D)> ;"Is the first (probably only) blk it?" + <JRST TN1BLK> ;"No, go search the block directory" +;"Here when block to be tested has been found." +TSTID <MOVE O* (TP)> ;"O/ FIX to be tested" + <PUSH TP* 2(D)> + <PUSH TP* 3(D)> ;"Push block to be tested" + <PUSH TP* $TFIX> + <PUSH TP* O> ;"Push FIX to be tested" + <MCALL 2 TEST-INV-BLK> ;"And TEST it" + <SUB TP* [<4(4)>]> + <JRST MPOPJ> + +;"here to return a non-false result" +TSTRET <DPOP TP* A> + <SUB TP* [<2(2)>]> + <JRST MPOPJ> + +;"Here when INV is of the single-id form" +TSTSID <MOVE A* 5(E)> ;"A/ single id in INV" + <CAME A* (TP)> + <JRST RETFLS> ;"FALSE if id in INV NOT = one being tested" + <JRST TSTRET> ;"Good return if id in INV = one being tested" + + + +;"A/ blk # of ident being inserted +D/ cptr to blk dir vector" + +TN1BLK <HLRE B* D> + <MOVMS B> + <IDIVI B* 4> ;"B/ # of entries in blk dir vector" + <MOVE C* D> ;"C/ cptr to blk dir vector" +TSBLKDIR <CAILE B* 3> + <JRST TSBLKBIN> ;"If search space large, binary search it" +TSBLKLP1 <CAMN A* 1(C)> + <JRST TFNDBLK> ;"jumps if desired blk exists" + <CAMG A* 1(C)> + <JRST RETFLS> ;"FALSE if desired blk # < an existing one" + <ADD C* [<4(4)>]> + <SOJG B* TSBLKLP1> + <JRST RETFLS> ;"FALSE if blk not found" + +;"C/ cptr to winning entry in blk dir vector" +TFNDBLK <MOVE D* C> + <JRST TSTID> + +;"Here to binary search" +TSBLKBIN <MOVE D* B> + <IDIVI D* 2> + <MOVE E* D> + <IMULI E* 4> + <HRLS E> + <ADD E* C> + <CAMGE A* 1(E)> + <JRST TSBLKUP> + <MOVE C* E> + <SUB B* D> + <CAMN A* 1(E)> + <JRST TFNDBLK> + <JRST TSBLKDIR> + +TSBLKUP <MOVE B* D> + <JRST TSBLKDIR> + + + +;"##################################################################### +####################################################################### +######################################################################" + + + +<TITLE INS-INTO-INV-BLK> + +<DECLARE ("VALUE" UVECTOR <OR UVECTOR FALSE> FIX)> + + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* IINS-INTO-INV-BLK> + <JRST FINIS> + +<INTERNAL-ENTRY IINS-INTO-INV-BLK 2> + + <SUBM M* (P)> + <MOVM A* (TP)> + <MOVEM A* (TP)> ;"Don't allow negative numbers" + <GETYP O* -3(TP)> + <CAIE O* TUVECTOR> + <JRST MAKENEWUVCT> + <MOVE A* -2(TP)> + <HLRE B* A> + <JUMPE B* EMPTYUVCT> + <MOVMS B> + <CAIGE B* 5> + <JRST TOOSHORT> + <HLRZ C* 1(A)> + <CAIE C* CHECK-CODE> + <JRST BADCODE> + <HRRZ C* 1(A)> + <SKIPLE C> + <SKIPG (A)> + <JRST BADCOUNT> + <HRLS C> + <HRRZ B* (A)> + <ADD A* C> + <HLRE D* A> + <MOVMS D> + <IDIVI D* 2> + <CAME D* B> + <JRST BADCOUNT> + <MOVE C* (TP)> + <IDIVI C* BUCKET-COUNT> + <PUSHJ P* SRCDIR> + <CAME C* (B)> + <JRST ADDBUCKET> + +;"Here if bucket exists, check length to see what format it is in" + <LDB D* [<(,BLNT-BPTR) 1(B)>]> + <CAIGE D* BUCKET-LENGTH> + <JRST ADDIDENT> + +;"Here if bucket in bit-mask format, turn on appropriate bit" + <MOVE A* -2(TP)> + <HRRZ C* 1(B)> + <ADD C* A> + <MOVE D* (TP)> + <IDIVI D* BUCKET-COUNT> + <MOVE D* E> + <IDIVI D* 36> + <ADD C* D> + <MOVSI D* *400000*> + <MOVNS E> + <LSH D* (E)> + <MOVE E* (C)> + <TDNE E* D> + <JRST INSRET> + <TDO E* D> + <MOVEM E* (C)> + +;"increment appropriate counts and return" + <LDB C* [<(,BCNT-BPTR) 1(B)>]> + <ADDI C* 1> + <DPB C* [<(,BCNT-BPTR) 1(B)>]> ;"increments ident count for bucket" + <MOVSI C* 1> + <ADDM C* (A)> ;"increments ident count for entire block" +INSRET <SUB TP* [<2(2)>]> + <DPOP TP* A> + <JRST MPOPJ> + + +;"B/ cptr to bucket entry in dir +D/ # of words used by bucket (less than BUCKET-LENGTH)" +ADDIDENT <PUSH P* D> + <PUSH P* B> ;"NOT PROTECTED IF A GC HAPPENS (SEE NADDIDENT)" + <HRRZ A* 1(B)> + <HRLS A> + <ADD A* -2(TP)> + <MOVE B* D> + <MOVE C* (TP)> + <PUSHJ P* SRCBUCKET> + <JUMPE A* HERE 3> + <CAMN C* (B)> + <JRST IDENTEXISTS> + <HLRE C* -2(TP)> + <MOVMS C> + <HRRZ D* -2(TP)> + <ADD D* C> + <HLRZ O* 1(D)> + <CAIGE O* 3(C)> ;"skips if enough slush space exists" + <JRST NADDIDENT> + <MOVE A* -2(TP)> + <MOVE C* A> + <SUB C* [<1(1)>]> + <PUSHJ P* INSIDENT> +ADDIRET <POP P* B> ;"B/ cptr to bucket entry in dir" + <SUBI B* -1(A)> + <HRLS B> + <ADD B* C> + <EXCH B* C> ;"B/ cptr to new uvct + C/ cptr to bucket entry in dir of new uvct" + <POP P* D> ;"D/ # of idents in bucket (old)" + <ADDI D* 1> + <DPB D* [<(,BLNT-BPTR) 1(C)>]> ;"stores # of words in bucket" + <DPB D* [<(,BCNT-BPTR) 1(C)>]> ;"stores # of idents in bucket" + <AOS 1(B)> + <MOVSI E* 1> + <ADDM E* (B)> + <HRRZ E* 1(B)> ;"E/ offset of dir in new uvct" + <HRLS E> + <ADD E* B> ;"E/ cptr to dir of new uvct" + <HRRZ O* 1(C)> + <PUSH P* O> +LADDIRET <HRRZ O* 1(E)> + <CAMLE O* (P)> + <AOS 1(E)> + <ADD E* [<2(2)>]> + <JUMPL E* LADDIRET> + <POP P* O> + <CAIL D* BUCKET-LENGTH> + <PUSHJ P* CNVBITMASK> + <MOVE A* -3(TP)> + <SUB TP* [<4(4)>]> + <JRST MPOPJ> + +IDENTEXISTS <POP P* O> + <POP P* O> + <JRST INSRET> + +NADDIDENT <PUSH TP* <TYPE-WORD UVECTOR>> + <PUSH TP* (P)> ;"MUST PROTECT CPTR THROUGH UPCOMING MCALL" + <MOVE A* C> + <ADDI A* 11> + <PUSH TP* $TUVECTOR> + <PUSH TP* B> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* A> + <MCALL 1 INV-IUVECTOR> + <MOVE C* B> + <ADD C* [<10(10)>]> + <POP TP* B> ;"B/ cptr to slot for new ident (original uv)" + <SUB TP* [<1(1)>]> + <POP TP* (P)> ;"(P)/ cptr to slot in bucket dir" + <SUB TP* [<1(1)>]> + <MOVE A* -2(TP)> + <PUSHJ P* INSIDENT> + <HRRZ D* B> + <SUBI D* (A)> + <ADDI D* 1(C)> + <HRL D* B> + <HLRE E* C> + <MOVMS E> + <ADD E* C> + <BLT D* -1(E)> + <JRST ADDIRET> + + +;"A/ cptr to original uvector +B/ cptr to slot for new ident (in original uvct) +C/ cptr to new uvct + C may be a backed cptr to A." +INSIDENT <HRRZ E* B> + <SUBI E* (A)> + <ADDI E* (C)> + <HRL D* A> + <HRR D* C> + <BLT D* -1(E)> + <MOVE O* (TP)> + <MOVEM O* (E)> + <POPJ P*> + + + + +MAKENEWUVCT <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* [15]> + <MCALL 1 INV-IUVECTOR> + <ADD B* [<10(10)>]> +FILLNEWUVCT <MOVE O* [<1(1)>]> + <MOVEM O* (B)> + <MOVEI O* 3> + <HRLI O* CHECK-CODE> + <MOVEM O* 1(B)> + <MOVE D* (TP)> + <MOVEM D* 2(B)> + <IDIVI D* BUCKET-COUNT> + <MOVEM D* 3(B)> + <MOVE O* [<2(*040001*)>]> + <MOVEM O* 4(B)> + <SUB TP* [<4(4)>]> + <JRST MPOPJ> + +EMPTYUVCT <HLRE C* -2(TP)> + <MOVMS C> + <ADD C* -2(TP)> + <HLRZ D* 1(C)> + <CAIGE D* 7> + <JRST MAKENEWUVCT> + <MOVEI B* -5(C)> + <HRLI B* -5> + <MOVE A* -3(TP)> + <JRST FILLNEWUVCT> + + +ADDBUCKET <HLRE C* -2(TP)> + <MOVMS C> + <HRRZ D* -2(TP)> + <ADD D* C> + <HLRZ E* 1(D)> + <CAIGE E* 5(C)> ;"skips if enough slush space exists" + <JRST NADDBUCKET> + <MOVE A* -2(TP)> + <MOVE C* A> + <SUB C* [<3(3)>]> + <PUSHJ P* INSBUCKET> +ADDBRET <MOVE A* -3(TP)> + <MOVE B* C> + <SUB TP* [<4(4)>]> + <JRST MPOPJ> + + +NADDBUCKET <MOVE A* C> + <ADDI A* 13> + <PUSH TP* $TUVECTOR> + <PUSH TP* B> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* A> + <MCALL 1 INV-IUVECTOR> + <MOVE C* B> + <ADD C* [<10(10)>]> + <POP TP* B> + <POP TP* O> + <MOVE A* -2(TP)> + <PUSHJ P* INSBUCKET> + <JUMPGE B* ADDBRET> + <HRRZ D* B> + <SUBI D* (A)> + <ADDI D* 3(C)> + <HRL D* B> + <HLRE E* C> + <MOVMS E> + <ADD E* C> + <BLT D* -1(E)> + <JRST ADDBRET> + + +;"A/ cptr to original uvector +B/ cptr to location of new bucket in original +C/ cptr to new uvct + C may be a backed cptr to A." +INSBUCKET <MOVE D* C> + <HRLI D* (A)> + <HRRZ E* 1(A)> + <ADDI E* (C)> + <BLT D* -1(E)> ;"moves top part of original uvct to top of new uvct" + <MOVE O* (TP)> + <MOVEM O* (E)> ;"stores new indicator in new uvct" + <MOVEI D* 1(E)> + <HRRZ E* 1(C)> + <ADD E* A> + <HRL D* E> + <HRRZ E* B> + <SUBI E* (A)> + <ADDI E* 1(C)> + <CAILE E* (D)> + <BLT D* -1(E)> ;"moves top part of original dir to new uvct" + <MOVE D* (TP)> + <MOVE O* E> + <IDIVI D* BUCKET-COUNT> + <MOVE E* O> + <MOVEM D* (E)> ;"stores new bucket # in new uvct" + <HRLI O* *040001*> + <HRR O* 1(C)> + <MOVEM O* 1(E)> ;"stores new bucket size and offset in new uvct" + <MOVE O* [<1(1)>]> + <ADDM O* (C)> ;"increments indicator and bucket counts in new uvct" + <AOS 1(C)> ;"increments offset of dir in new uvct" + <POPJ P*> + + + +TOOSHORT <DMOVE A* -3(TP)> + <DPUSH TP* <PQUOTE UVECTOR-TOO-SHORT!-ERRORS>> + <DPUSH TP* A> + <MCALL 2 ERROR> + <JRST TOOSHORT> + +BADCODE <DMOVE A* -3(TP)> + <DPUSH TP* <PQUOTE CONSISTENCY-CHECK-DOESNT-MATCH!-ERRORS>> + <DPUSH TP* A> + <MCALL 2 ERROR> + <JRST BADCODE> + +BADCOUNT <DMOVE A* -3(TP)> + <DPUSH TP* <PQUOTE HEADER-INFORMATION-INCORRECT!-ERRORS>> + <DPUSH TP* A> + <MCALL 2 ERROR> + <JRST BADCOUNT> + +TOOMANYIDS <DMOVE A* -3(TP)> + <DPUSH TP* <PQUOTE OVERSIZED-BUCKET!-ERRORS>> + <PUSH TP* $TFIX> + <PUSH TP* D> + <DPUSH TP* A> + <MCALL 3 ERROR> + <JRST TOOMANYIDS> + + + + + + +<SUB-ENTRY DEL-FROM-INV-BLK ("VALUE" <OR UVECTOR FALSE> UVECTOR FIX)> + + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* IDEL-FROM-INV-BLK> + <JRST FINIS> + +<INTERNAL-ENTRY IDEL-FROM-INV-BLK 2> + + <SUBM M* (P)> + <MOVM A* (TP)> + <MOVEM A* (TP)> ;"Don't allow negative numbers" + <GETYP O* -3(TP)> + <CAIE O* <TYPE-CODE UVECTOR>> + <JRST RETFLS> + <SKIPL E* -2(TP)> + <JRST BADUV> + <HLRZ O* 1(E)> + <SKIPLE (E)> + <CAIE O* CHECK-CODE> + <JRST BADUV> + <HRRZ A* 1(E)> + <JUMPLE A* BADUV> + <HRLS A> + <ADD A* E> ;"A/ cptr to dir area of uvct" + <HRRZ B* (E)> + <HLRE C* A> + <MOVMS C> + <IDIVI C* 2> + <CAME C* B> + <JRST BADUV> + <MOVE C* (TP)> + <IDIVI C* BUCKET-COUNT> + <PUSHJ P* SRCDIR> + <CAME C* (B)> + <JRST DELRET> +;"Here if bucket exists" + <LDB O* [<(,BLNT-BPTR) 1(B)>]> + <CAIGE O* BUCKET-LENGTH> + <JRST DELDIRECT> +;"Here if bucket in bit-mask format" + <MOVE A* -2(TP)> + <HRRZ C* 1(B)> + <ADD C* A> + <MOVE D* (TP)> + <IDIVI D* BUCKET-COUNT> + <MOVE D* E> + <IDIVI D* 36> + <ADD C* D> + <MOVSI D* *400000*> + <MOVNS E> + <LSH D* (E)> + <MOVE E* (C)> + <TDNN E* D> + <JRST DELRET> + <LDB O* [<(,BCNT-BPTR) 1(B)>]> + <CAILE O* BUCKET-LENGTH> + <JRST HERE 3> + <PUSHJ P* CNV-TO-DIRECT> + <JRST DELDIRECT> ;"jumps if deletion causes reversion to direct format" + <TDZ E* D> + <MOVEM E* (C)> +;"decrement appropriate counts and return" + <LDB C* [<(,BCNT-BPTR) 1(B)>]> + <SUBI C* 1> + <DPB C* [<(,BCNT-BPTR) 1(B)>]> ;"decrements ident count for bucket" + <HLRZ C* (A)> + <SUBI C* 1> + <HRLM C* (A)> +DELRET <SUB TP* [<2(2)>]> + <DPOP TP* A> + <JRST MPOPJ> + +RETFLS <SUB TP* [<4(4)>]> + <MOVE A* $TFALSE> + <MOVEI B* 0> + <JRST MPOPJ> + +BADUV <DMOVE A* -3(TP)> + <DPUSH TP* <PQUOTE INV-BLK-IN-BAD-FORMAT!-ERRORS>> + <DPUSH TP* A> + <MCALL 2 ERROR> + <JRST BADUV> + + +;"B/ cptr to dir entry of bucket in direct format" + +DELDIRECT <HRRZ A* 1(B)> + <HRLS A> + <ADD A* -2(TP)> + <PUSH P* B> ;"saves cptr to dir entry for bucket" + <LDB B* [<(,BLNT-BPTR) 1(B)>]> + <MOVE C* (TP)> + <PUSHJ P* SRCBUCKET> + <POP P* A> ;"A/ cptr to bucket's dir entry slot" + <MOVE C* (TP)> + <CAMN C* (B)> + <JRST DELFND> + <LDB O* [<(,BLNT-BPTR) 1(A)>]> + <CAIGE O* BUCKET-LENGTH> + <JRST DELRET> +CNVERR <DMOVE C* -2(TP)> + <DPUSH TP* <PQUOTE ID-DISAPPEARED-IN-CONVERSION-TO-DIRECT-FORMAT!-ERRORS>> + <PUSH TP* $TUVECTOR> + <PUSH TP* B> + <DPUSH TP* C> + <MCALL 3 ERROR> + <JRST CNVERR> + +;"Here when id has been located in direct format bucket +A/ cptr to the bucket's dir entry slot +B/ cptr to id's slot in bucket" +DELFND <LDB O* [<(,BLNT-BPTR) 1(A)>]> + <CAIG O* 1> + <JRST DELBUCKET> + <MOVE C* B> +MOVLP1 <SUB C* [<1(1)>]> + <MOVE D* (C)> + <MOVEM D* (B)> + <CAMN C* -2(TP)> + <JRST HERE 3> + <SUB B* [<1(1)>]> + <JRST MOVLP1> + <LDB O* [<(,BLNT-BPTR) 1(A)>]> + <SUBI O* 1> + <DPB O* [<(,BLNT-BPTR) 1(A)>]> + <DPB O* [<(,BCNT-BPTR) 1(A)>]> + <HRRZ C* 1(A)> ;"C/ offset of bucket's data area" + <DMOVE A* -3(TP)> + <ADD B* [<1(1)>]> + <HLRZ D* (B)> + <SUBI D* 1> + <HRLM D* (B)> + <SOS 1(B)> + <HRREI D* -1> + <PUSHJ P* MODOFS> + <SUB TP* [<4(4)>]> + <JRST MPOPJ> + +;"Here when deleting last id in bucket +A/ cptr to the bucket's dir entry slot +B/ cptr to id's slot in bucket" + +DELBUCKET <MOVE E* -2(TP)> + <HRRZ O* (E)> + <CAIG O* 1> + <JRST RETEMPTY> + <HRRZ O* (A)> + <PUSH P* O> ;"Saves offset of bucket's data area" + <MOVE C* A> + <SUB C* [<1(1)>]> + <ADD A* [<1(1)>]> +MOVLP2 <CAMN C* B> + <SUB C* [<1(1)>]> + <MOVE D* (C)> + <MOVEM D* (A)> + <CAMN C* -2(TP)> + <JRST MOVLP3> + <SUB C* [<1(1)>]> + <SUB A* [<1(1)>]> + <JRST MOVLP2> +MOVLP3 <DMOVE A* -3(TP)> + <ADD B* [<3(3)>]> + <POP P* C> + <MOVE D* (B)> + <SUB D* [<1(1)>]> + <MOVEM D* (B)> + <MOVE D* 1(B)> + <SOS 1(B)> + <HRREI D* -1> + <PUSHJ P* MODOFS> + <SUB TP* [<4(4)>]> + <JRST MPOPJ> + +RETEMPTY <SUB TP* [<2(2)>]> + <DPOP TP* A> + <HLRE C* B> + <MOVMS C> + <HRLS C> + <ADD B* C> + <JRST MPOPJ> + + + +;"A&B/ cptr to modified inv blk +C/ offset of effected area +D/ amount of change" + +MODOFS <HRRZ E* 1(B)> + <HRLS E> + <ADD E* B> ;"E/ cptr to dir area of inv blk" +MODLP1 <HRRZ O* 1(E)> + <CAMG O* C> + <JRST MODLP2> + <ADD O* D> + <HRRM O* 1(E)> +MODLP2 <ADD E* [<2(2)>]> + <JUMPL E* MODLP1> + <POPJ P*> + + + + +<SUB-ENTRY TEST-INV-BLK ("VALUE" <OR FIX FALSE> UVECTOR FIX)> + + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* ITEST-INV-BLK> + <JRST FINIS> + +<INTERNAL-ENTRY ITEST-INV-BLK 2> + + <SUBM M* (P)> + <MOVM A* (TP)> + <MOVEM A* (TP)> ;"Don't allow negative numbers" + <GETYP O* -3(TP)> + <CAIN O* <TYPE-CODE UVECTOR>> + <SKIPL E* -2(TP)> ;"E/ cptr to block UVECTOR" + <JRST RETFLS> ;"FALSE if no block exists" + <HLRZ O* 1(E)> ;"O/ consistency check constant" + <SKIPLE (E)> + <CAIE O* CHECK-CODE> + <JRST RETFLS> ;"FALSE if block in bad format" + <HRRZ A* 1(E)> ;"A/ offset of bucket directory area" + <JUMPLE A* RETFLS> ;"FALSE if block in bad format" + <HRLS A> + <ADD A* E> ;"A/ cptr to bucket directory area" + <HRRZ B* (E)> ;"B/ # of buckets in block" + <HLRE C* A> + <MOVMS C> ;"C/ length of bucket directory area" + <IDIVI C* 2> ;"C/ # of buckets in directory" + <CAME C* B> ;"do they agree?" + <JRST RETFLS> ;"FALSE if block in bad format" + <MOVE C* (TP)> ;"C/ FIX being tested for" + <IDIVI C* BUCKET-COUNT> ;"C/ # of bucket in which FIX lives" + <PUSHJ P* SRCDIR> ;"look for that bucket" + <CAME C* (B)> ;"found?" + <JRST RETFLS> ;"No, return FALSE" +;"Here if bucket exists" + <LDB O* [<(,BLNT-BPTR) 1(B)>]> ;"O/ # of words of data in bucket" + <CAIGE O* BUCKET-LENGTH> ;"is bucket a bit-mask?" + <JRST TSTDIRECT> ;"No, direct format" +;"Here if bucket in bit-mask format" + <MOVE A* -2(TP)> ;"A/ cptr to block" + <HRRZ C* 1(B)> ;"C/ offset of data area of bucket" + <ADD C* A> ;"C/ ptr to data area of bucket" + <MOVE D* (TP)> ;"D/ FIX to be tested" + <IDIVI D* BUCKET-COUNT> ;"E/ FIX modulo 540" + <MOVE D* E> ;"D/ bit # in mask to be tested" + <IDIVI D* 36> ;"D/ offset of word to be tested" + <ADD C* D> ;"C/ ptr to word to be tested" + <MOVSI D* *400000*> + <MOVNS E> + <LSH D* (E)> ;"D/ mask for testing bit in word" + <MOVE E* (C)> ;"E/ word to be tested" + <TDNN E* D> ;"skip if bit is on" + <JRST RETFLS> +TSTRET <DPOP TP* A> + <SUB TP* [<2(2)>]> + <JRST MPOPJ> + +;"B/ cptr to dir entry of bucket in direct format" + +TSTDIRECT <HRRZ A* 1(B)> ;"A/ offset of data area for bucket" + <HRLS A> + <ADD A* -2(TP)> ;"A/ cptr to data area for bucket" + <LDB B* [<(,BLNT-BPTR) 1(B)>]> ;"B/ size of data area" + <MOVE C* (TP)> ;"C/ FIX to be found" + <PUSHJ P* SRCBUCKET> ;"look for it" + <MOVE C* (TP)> ;"C/ FIX to be found" + <CAME C* (B)> ;"Was it found?" + <JRST RETFLS> ;"No, return FALSE" + <JRST TSTRET> ;"Yes, win" + + + +;"A/ cptr to dir area of uvct +B/ # of buckets in dir (always positive) +C/ bucket # being searched for + +==> B/ cptr to slot where bucket either is or should be" + +SRCDIR <CAILE B* 3> + <JRST SRCDBIN> + <CAMG C* (A)> + <JRST HERE 3> + <ADD A* [<2(2)>]> + <SOJG B* HERE -3> + <MOVE B* A> + <POPJ P*> + +SRCDBIN <MOVE D* B> + <IDIVI D* 2> + <MOVE E* D> + <IMULI E* 2> + <HRLS E> + <ADD E* A> + <CAMGE C* (E)> + <JRST SRCDUP> + <MOVE A* E> + <SUB B* D> + <JRST SRCDIR> + +SRCDUP <MOVE B* D> + <JRST SRCDIR> + + + +;"A/ cptr to bucket in direct format +B/ # of idents in bucket (always positive) +C/ ident # being searched for + +==> B/ cptr to slot where ident either is or should be" + +SRCBUCKET <CAILE B* 3> + <JRST SRCBBIN> + <CAMG C* (A)> + <JRST HERE 3> + <ADD A* [<1(1)>]> + <SOJG B* HERE -3> + <EXCH B* A> + <POPJ P*> + +SRCBBIN <MOVE D* B> + <IDIVI D* 2> + <MOVE E* D> + <HRLS E> + <ADD E* A> + <CAMGE C* (E)> + <JRST SRCBUP> + <MOVE A* E> + <SUB B* D> + <JRST SRCBUCKET> + +SRCBUP <MOVE B* D> + <JRST SRCBUCKET> + + + +;"B/ cptr to new uvct +C/ cptr to bucket entry in new uvct +D/ # of idents in bucket" + +CNVBITMASK <SUBM M* (P)> + <CAIE D* BUCKET-LENGTH> + <JRST TOOMANYIDS> + <PUSH TP* $TUVECTOR> + <PUSH TP* B> + <PUSH TP* $TUVECTOR> + <PUSH TP* C> + <PUSH P* D> + <PUSH TP* $TFIX> + <PUSH TP* [,BUCKET-LENGTH]> + <MCALL 1 INV-IUVECTOR> + <MOVE A* B> ;"A/ cptr to temporary UVECTOR" + <POP P* D> + <POP TP* C> + <POP TP* O> + <POP TP* B> + <POP TP* O> + <HRRZ E* 1(C)> + <ADDI E* (B)> ;"E/ ptr to bucket in uvct" + <HRLS E> + <HRR E* A> + <MOVEI D* BUCKET-LENGTH> + <ADDI D* (A)> + <BLT E* -1(D)> + <HRRZ D* 1(C)> + <ADDI D* (B)> + <PUSH P* D> + <SETZM (D)> + <HRL O* D> + <HRRI O* 1(D)> + <MOVEI E* BUCKET-LENGTH> + <ADD E* D> + <BLT O* -1(E)> +CNVLOOP <MOVE D* (A)> + <IDIVI D* BUCKET-COUNT> + <MOVE D* E> + <IDIVI D* 36> + <ADD D* (P)> + <MOVSI O* *400000*> + <MOVNS E> + <LSH O* (E)> + <MOVE E* (D)> + <TDO E* O> + <MOVEM E* (D)> + <AOBJN A* CNVLOOP> + <POP P* O> + <PUSH TP* $TUVECTOR> + <PUSH TP* B> + <PUSH TP* $TUVECTOR> + <PUSH TP* A> + <MCALL 1 INV-RELDATA> + <DPOP TP* A> + <JRST MPOPJ> + + +;"B/ cptr to dir entry for bucket + Converts bucket from bit-mask to direct format" + +CNV-TO-DIRECT <SUBM M* (P)> + <PUSH TP* $TUVECTOR> + <PUSH TP* B> + <PUSH TP* $TFIX> + <PUSH TP* [,BUCKET-LENGTH]> + <MCALL 1 INV-IUVECTOR> + <MOVE A* B> ;"A/ cptr to new UVECTOR" + <POP TP* B> ;"B/ cptr to dir entry for bucket" + <POP TP* O> + <HRRZ C* 1(B)> + <ADD C* -2(TP)> ;"C/ cptr to data area of original bucket" +;"Copy bit-mask bucket into temporary UVECTOR" + <HRL D* C> + <HRR D* A> + <HRRZ E* A> + <ADDI E* BUCKET-LENGTH> + <BLT D* -1(E)> +;"A/ cptr to temporary UVECTOR containing bit-mask +B/ cptr to dir entry for bucket +C/ ptr to data area of bucket" + <PUSH P* [<BUCKET-LENGTH>]> + <MOVE D* (B)> + <IMULI D* BUCKET-COUNT> + <PUSH P* D> +CNVLP1 <MOVE D* (A)> +CNVLP2 <JFFO D* FNDID> + <MOVEI D* 36> + <ADDM D* (P)> + <AOBJN A* CNVLP1> +CNVRET <SUB P* [<2(2)>]> + <PUSH TP* $TUVECTOR> + <PUSH TP* B> + <PUSH TP* $TUVECTOR> + <PUSH TP* A> + <MCALL 1 INV-RELDATA> + <DPOP TP* A> + <JRST MPOPJ> + +FNDID <PUSH P* E> + <MOVNS E> + <MOVSI O* *400000*> + <LSH O* (E)> + <TDZ D* O> + <POP P* E> + <ADD E* (P)> ;"E/ id of item found" + <MOVEM E* (C)> + <ADDI C* 1> + <SOSLE -1(P)> + <JRST CNVLP2> + <JRST CNVRET> + + + +;"##################################################################### +####################################################################### +######################################################################" + + + +<END> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog1/its.usg021 b/src/mprog1/its.usg021 new file mode 100644 index 00000000..ea0d9c58 --- /dev/null +++ b/src/mprog1/its.usg021 @@ -0,0 +1,356 @@ +<PACKAGE "ITS"> +<ENTRY ITS-CALL SFTW-INTRPT-DESCRN USET ITS-EVAL ITS-GETLOC ITS-SETLOC> +<EXTERNAL "STR"> + +<TITLE ITS-CALL> +<DECLARE ("VALUE" <OR 'T <FALSE FIX STRING>> + STRING + <UVECTOR [REST <PRIMTYPE WORD>]> + "TUPLE" <TUPLE [REST <OR CHANNEL + UVECTOR + <PRIMTYPE WORD> + <LIST [REST <PRIMTYPE WORD>]>>]>)> + + <DPUSH TP* <ARG 1>> + <MCALL 1 STRTOX> + <MOVE 0 P> ; "SAVE P-STK PNTR." + <PUSH P* [<SETZ 0>]> ; "BUILD .CALL ARGS ON P-STK." + <PUSH P* B> ; "START WITH THE .CALL NAME" + + <SKIPL C* <ARG 2> 1> ; "OUTPUT ARGS FIRST" + <JRST OUTDONE> + <MOVSI A* *2000*> +OUTLOOP <PUSH P* C> ; "SLOT FOR OUTPUT" + <HLLM A* (P)> + <AOBJN C* OUTLOOP> + +OUTDONE <MOVE C* AB> ; "THEN INPUT ARGS AND CONTROL BITS" + <ADD C* [<(4) 5>]> + <SETO E*> ; "REMEMBER (LAST) ITS CHAN NUMBER IN E, IF ANY" + <SETZ B*> ; "WILL XOR ALL CONTROL BITS INTO B" + <JUMPGE C* INDONE> + +INLOOP <HLRZ D* (C) -1> ; "CHECK FOR MUDDLE CHANNEL" + <CAIE D* TCHANNEL> + <JRST NOTCHAN> + <MOVE D* (C)> ; "IF SO, USE AND REMEMBER ITS NUMBER." + <AOS D> + <PUSH P* D> + <HRRZS (P)> + <HRLZ E* (D)> + <JRST CONTIN> + +NOTCHAN <CAIE D* TLIST> ; "CHECK FOR A LIST" + <JRST NOTLIST> + <MOVE D* C> +LISTLP <HRRZ D* (D)> + <JUMPE D* CONTIN> ; "JUMP IF LIST IS EMPTY (YET)" + <XOR B* (D) 1> ; "XOR THE MODE BITS INTO B" + <JRST LISTLP> + +NOTLIST <PUSH P* C> ; "MUST BE A SIMPLE UVECTOR OR WORD'" + <HRRZS (P)> +CONTIN <AOBJP C* INDONE> + <AOBJN C* INLOOP> + +INDONE <JUMPE B* NOCNTRL> ; "ANY CONTROL BITS RESULTING?" + <HRLI B* *5000*> ; "YES, MARK AS IMMEDIATE CONTROL BITS" + <PUSH P* B> ; "AND ADD TO ARG LIST" + +NOCNTRL <MOVSI A* *400000*> ; "INDICATE END OF ARG LIST" + <IORM A* (P)> + + <DMOVE A* <PQUOTE T>> ; "VALUE IF .CALL SKIPS" + <MOVE D* 0> ; "PNTR TO .CALL ARGS" + <ADDI D* 1> + <*CALL (D)> ; "DO IT!" + <JRST NOSKIP> + <MOVE P* 0> + <JRST FINIS> + +NOSKIP <MOVE P* 0> ; "YOU LOSE!" + <DMOVE A* <PQUOTE #FALSE(0 "")>> ; "VALUE IF NO CHANNEL INVOLVED" + <JUMPL E* FINIS> + <ADD E* [<(*120*) B>]> ; ".RIOS,,B" + <*SUSET E> + <HRLI A* TFIX> + <DPUSH TP* A> ; "ITS ERROR CODE" + + <DPUSH TP* <PQUOTE 50>> ; "BUILD STRING FOR ERROR ENGLISH." + <DPUSH TP* <PQUOTE !" >> + <MCALL 2 ISTRING> + <DPUSH TP* A> + <DPUSH TP* <PQUOTE "READ">> + <DPUSH TP* <PQUOTE "ERR:     !">> + <MCALL 2 OPEN> + <HLRZ 0 A> + <CAIN 0 TFALSE> + <JRST NOERR> + <DPUSH TP* A> ; "CHANNEL TO ERR:" + <PUSH TP* (TP)-3> ; "STRING AGAIN" + <PUSH TP* (TP)-3> + <PUSH TP* (TP)-3> ; "CHANNEL AGAIN" + <PUSH TP* (TP)-3> + <DPUSH TP* <PQUOTE "î">> + <MCALL 3 READSTRING> ; "GET ERROR ENGLISH." + <MCALL 1 CLOSE> +NOERR <MCALL 2 LIST> ; "VALUE" + <MOVSI A* TFALSE> + <JRST FINIS> + +<TITLE SFTW-INTRPT-DESCRN> +<DECLARE ("VALUE" STRING <PRIMTYPE WORD>)> + + <MOVE A* 1(AB)> ; "WD OF INTRPT BITS" + <MOVEI D* <MQUOTE "">> + <PUSH TP* (D)-1> + <PUSH TP* (D)> + <MOVEI E* 1> + <MOVE C* [<PUSHJ P* WD1>]> + <TLZE A* *400000*> + <MOVE C* [<PUSHJ P* WD2>]> +IMLOOP <JFFO A* GOTONE> + <ACALL E* STRING> + <JRST FINIS> + +GOTONE <XCT C> + <MOVNS B> + <MOVSI 0 *400000*> + <LSH 0 (B)> + <TDZ A* 0> + <JRST IMLOOP> + +WD1 <MOVEI D* (B)-1> + <ASH D* 1> + <ADD D* <MQUOTE ["Real-time interrupt occurred. +" "Run-time interrupt occurred. +" "[bit 4.6] +" "[bit 4.5] +" "A deferred call was typed while the process had the terminal. +" "Terminal came back from superior process. +" "Process attempted to use terminal without having it. +" "Parity error occurred. +" "Arithmetic floating overflow occurred. +" "Process attempted to write into read-only page. +" "Process attempted to fetch impure instruction when in pure mode. +" "Process executed system call in user-trap mode. +" "[bit 3.5] +" "[bit 3.4] +" "[bit 3.3] +" "System is being debugged. +" "A .LOSE UUO or LOSE system call was executed. +" "CLI-device interrupt occurred. +" "Pushdown-list overflow occurred. +" "Light-pen interrupt or display stop occurred. +" "MAR interrupt occurred. +" "Process attempted to reference a page not in the process's page map. +" "Half-second clock interrupt occurred. +" "Instruction finished in single-instruction mode. +" "A .BREAK was executed. +" "Process attempted to read outside another process's core image. +" "I/O-channel error occurred. +" "A .VALUE was executed. +" "System is going down or being revived. +" "An illegal instruction was executed. +" "The display violated memory protection. +" "Arithmetic overflow occurred. +" "Software-interrupt location had bad contents. +" " was typed at terminal. +" "Character was typed at terminal. +"]>> + <PUSH TP* (D)> + <PUSH TP* (D)+1> + <ADDI E* 1> + <POPJ P*> + +WD2 <MOVEI D* <MQUOTE "Interrupt from software I/O channel ">> + <CAIGE B* *22*> + <MOVEI D* <MQUOTE "Interrupt from inferior process ">> + <PUSH TP* (D)-1> + <PUSH TP* (D)> + <MOVEI D* (B)> + <CAIL B* *22*> + <SUBI D* *22*> + <ASH D* 1> +<PSEUDO <SET X 18>> + <ADD D* <MQUOTE <MAPF ,VECTOR <FUNCTION (N) <STRING <UNPARSE .N> ". +">> <ILIST 18 '<SET X <- .X 1>>>>>> + <PUSH TP* (D)> + <PUSH TP* (D)+1> + <ADDI E* 2> + <POPJ P*> + +<TITLE USET> +<DECLARE ("VALUE" <PRIMTYPE WORD> ; "NUMBER READ OR SET" + <OR CHANNEL ANY> ; "NON-CHANNEL => SELF" + <OR STRING <PRIMTYPE WORD>> ; "NAME OR CODE FOR VAR" + "OPTIONAL" <OR FALSE <PRIMTYPE WORD>> ; "NUMBER TO SET" + <PRIMTYPE WORD>)> ; "ADD TO CODE (FOR .PMAP, .IOS, .IOC)" + + <SETZI A*> ; "BUILD INSN IN A." + <MOVE C* [<*SUSET C>]> + <GETYP B* 0(AB)> + <CAIE B* <TYPE-CODE CHANNEL>> + <JRST SELF> + <HRLI C* (*USET)> + <MOVE A* 1(AB)> ; "CHAN" + <HRLZ A* 1(A)> ; "ITS CHAN" + <LSH A* 5> +SELF <IOR A* C> ; "INSN NOW IN A." + <PUSH P* A> + + <GETYP B* 2(AB)> + <CAIE B* <TYPE-CODE STRING>> + <JRST NUM> + <DPUSH TP* 2(AB)> + <MCALL 1 STRTOX> ; "SIXBIT IN B" + ; "FOLLOWING LIST UPDATED TO DDT 650." + <MOVE A* <MQUOTE <UVECTOR + <CHTYPE <SIXBIT "UPC"> FIX> 0 + <CHTYPE <SIXBIT "VAL"> FIX> 1 + <CHTYPE <SIXBIT "TTY"> FIX> 2 + <CHTYPE <SIXBIT "FLS"> FIX> 3 + <CHTYPE <SIXBIT "UNAME"> FIX> 4 + <CHTYPE <SIXBIT "JNAME"> FIX> 5 + <CHTYPE <SIXBIT "MASK"> FIX> 6 + <CHTYPE <SIXBIT "USTP"> FIX> 7 + <CHTYPE <SIXBIT "PIRQC"> FIX> *10* + <CHTYPE <SIXBIT "INTB"> FIX> *11* + <CHTYPE <SIXBIT "MEMT"> FIX> *12* + <CHTYPE <SIXBIT "SV40"> FIX> *13* + <CHTYPE <SIXBIT "IPIRQ"> FIX> *14* + <CHTYPE <SIXBIT "IPIRQC"> FIX> *14* + <CHTYPE <SIXBIT "APIRQ"> FIX> *15* + <CHTYPE <SIXBIT "APIRQC"> FIX> *15* + <CHTYPE <SIXBIT "SNAM"> FIX> *16* + <CHTYPE <SIXBIT "SNAME"> FIX> *16* + <CHTYPE <SIXBIT "PICLR"> FIX> *17* + <CHTYPE <SIXBIT "MARA"> FIX> *20* + <CHTYPE <SIXBIT "MARPC"> FIX> *21* + <CHTYPE <SIXBIT "UUOH"> FIX> *22* + <CHTYPE <SIXBIT "UIND"> FIX> *23* + <CHTYPE <SIXBIT "RUNT"> FIX> *24* + <CHTYPE <SIXBIT "MSK2"> FIX> *25* + <CHTYPE <SIXBIT "IFPIR"> FIX> *26* + <CHTYPE <SIXBIT "APRC"> FIX> *27* + <CHTYPE <SIXBIT "CNSL"> FIX> *30* + <CHTYPE <SIXBIT "UTRP"> FIX> *31* + <CHTYPE <SIXBIT "IIFPI"> FIX> *32* + <CHTYPE <SIXBIT "IIFPIR"> FIX> *32* + <CHTYPE <SIXBIT "AIFPI"> FIX> *33* + <CHTYPE <SIXBIT "AIFPIR"> FIX> *33* + <CHTYPE <SIXBIT "IMASK"> FIX> *34* + <CHTYPE <SIXBIT "AMASK"> FIX> *35* + <CHTYPE <SIXBIT "IMSK2"> FIX> *36* + <CHTYPE <SIXBIT "AMSK2"> FIX> *37* + <CHTYPE <SIXBIT "JPC"> FIX> *40* + <CHTYPE <SIXBIT "OPC"> FIX> *41* + <CHTYPE <SIXBIT "RTMR"> FIX> *42* + <CHTYPE <SIXBIT "LSPBR"> FIX> *43* + <CHTYPE <SIXBIT "BCHN"> FIX> *44* + <CHTYPE <SIXBIT "MPVA"> FIX> *45* + <CHTYPE <SIXBIT "IDF1"> FIX> *46* + <CHTYPE <SIXBIT "ADF1"> FIX> *47* + <CHTYPE <SIXBIT "IDF2"> FIX> *50* + <CHTYPE <SIXBIT "ADF2"> FIX> *51* + <CHTYPE <SIXBIT "DF1"> FIX> *52* + <CHTYPE <SIXBIT "DF2"> FIX> *53* + <CHTYPE <SIXBIT "OPTIO"> FIX> *54* + <CHTYPE <SIXBIT "OPTION"> FIX> *54* + <CHTYPE <SIXBIT "40ADD"> FIX> *55* + <CHTYPE <SIXBIT "40ADDR"> FIX> *55* + <CHTYPE <SIXBIT "TVCRE"> FIX> *56* + <CHTYPE <SIXBIT "TVCREG"> FIX> *56* + <CHTYPE <SIXBIT "TTST"> FIX> *57* + <CHTYPE <SIXBIT "TTS1"> FIX> *60* + <CHTYPE <SIXBIT "TTS2"> FIX> *61* + <CHTYPE <SIXBIT "WHO1"> FIX> *62* + <CHTYPE <SIXBIT "WHO2"> FIX> *63* + <CHTYPE <SIXBIT "WHO3"> FIX> *64* + <CHTYPE <SIXBIT "SUPPR"> FIX> *65* + <CHTYPE <SIXBIT "SUPPRO"> FIX> *65* + <CHTYPE <SIXBIT "TR1IN"> FIX> *66* + <CHTYPE <SIXBIT "TR1INS"> FIX> *66* + <CHTYPE <SIXBIT "TR2IN"> FIX> *67* + <CHTYPE <SIXBIT "TR2INS"> FIX> *67* + <CHTYPE <SIXBIT "MBOX"> FIX> *70* + <CHTYPE <SIXBIT "MBO1"> FIX> *71* + <CHTYPE <SIXBIT "EBOX"> FIX> *72* + <CHTYPE <SIXBIT "EBO1"> FIX> *73* + <CHTYPE <SIXBIT "XUNAM"> FIX> *74* + <CHTYPE <SIXBIT "XUNAME"> FIX> *74* + <CHTYPE <SIXBIT "XJNAM"> FIX> *75* + <CHTYPE <SIXBIT "XJNAME"> FIX> *75* + <CHTYPE <SIXBIT "FTL1"> FIX> *76* + <CHTYPE <SIXBIT "FTL2"> FIX> *77* + <CHTYPE <SIXBIT "IOC"> FIX> *100* + <CHTYPE <SIXBIT "IOS"> FIX> *120* + <CHTYPE <SIXBIT "IOP"> FIX> *140* + <CHTYPE <SIXBIT "PMAP"> FIX> *200*>>> +FIND <CAMN B* (A)> ; "COMPARE CODE" + <JRST [<MOVE C* 1(A)> + <JRST STR>]> ; "WON" + <ADD A* [<(2) 2>]> + <JUMPL A* FIND> + <MOVEI C* *377777*> ; "ILLEGAL CODE FOR BAD STRING" + <JRST STR> +NUM <MOVE C* 3(AB)> ; "CODE FOR VAR" +STR <CAMG AB* [(*777771*)]> ; "FOURTH ARG?" + <ADD C* 7(AB)> ; "ADD TO CODE" + <HRLS C> + <HRRI C* B> + <POP P* A> + + <TLZ C* *400000*> ; "MAKE BIT FOR READ/SET." + <CAML AB* [(*777773*)]> ; "TEST FOR THIRD ARG." + <JRST DO-IT> + <GETYP D* 4(AB)> + <CAIN D* <TYPE-CODE FALSE>> + <JRST DO-IT> ; "THIRD ARG OF FALSE-->REALLY READ INSTEAD OF SET" + <TLO C* *400000*> + <MOVE B* 5(AB)> ; "DATLOC" + +DO-IT <XCT A> ; "DO THE CALL." + <MOVE A* $TWORD> ; "TYPE FOR READ VAR" + <TLNN C* *400000*> + <JRST FINIS> + <MOVE A* 4(AB)> ; "PASS BACK SET VAR." + <MOVE B* 5(AB)> + <JRST FINIS> + + + +<TITLE ITS-EVAL> + <DECLARE ("VALUE" <OR FIX FALSE> <PRIMTYPE WORD>)> + <MOVE B* 1 (AB)> ; "GET ARG (SQUOZE NAME)" + <*EVAL B*> ; "GET SYSTEM ADDRESS" + <JRST NO-SUCH-SYMBOL> ; "NO DICE" + <MOVE A* $TFIX> ; "RETURN THE SYSTEM ADDRESS" + <JRST FINIS> +NO-SUCH-SYMBOL ; "RETURN A FALSE" + <DMOVE A* <PQUOTE #FALSE ("NO SUCH SYMBOL")>> + <JRST FINIS> + + +<TITLE ITS-GETLOC> + <DECLARE ("VALUE" FIX <PRIMTYPE WORD>)> + <HRLZ C* 1 (AB)> ; "GET ARG (SYSTEM ADDRESS) INTO LEFT HALF OF C" + <HRRI C* B> ; "POINT RIGHT HALF OF C AT B" + <*GETLO C*> ; "READ THE LOCATION" + <MOVE A* $TFIX> ; "RETURN IT AS TYPE FIX" + <JRST FINIS> + + +<TITLE ITS-SETLOC> + <DECLARE ("VALUE" <PRIMTYPE WORD> <PRIMTYPE WORD> <PRIMTYPE WORD>)> + <HRRZ C* 1 (AB)> ; "GET FIRST ARG (SYSTEM ADDR) INTO C" + <HRLI C* B> ; "POINT LEFT HALF OF C AT B" + <MOVE B* 3 (AB)> ; "GET THE VALUE TO COPY TO SYSTEM VARIABLE" + <*SETLO C*> ; "SET THE LOCATION" + <MOVE A* 2 (AB)> ; "AND RETURN ARG" + <JRST FINIS> + +<END> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog1/jobs.usg091 b/src/mprog1/jobs.usg091 new file mode 100644 index 0000000000000000000000000000000000000000..9c10de4e922fcaa6a0e3e0c652c05588c062069a GIT binary patch literal 19705 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 U;&-GF<|YydyDj^+v(w%G2Pf5cQUCw| literal 0 HcmV?d00001 diff --git a/src/mprog1/level.ubkd02 b/src/mprog1/level.ubkd02 new file mode 100644 index 00000000..095d6e35 --- /dev/null +++ b/src/mprog1/level.ubkd02 @@ -0,0 +1,12 @@ +<PACKAGE "LEVEL"> + +<ENTRY LEVEL> + +<TITLE LEVEL> +<DECLARE ("VALUE" FIX)> +<MOVSI A* TFIX> +<HRRZ B* (PVP)> ;"PROCID in PVP" +<JRST FINIS> +<END> + +<ENDPACKAGE> \ No newline at end of file diff --git a/src/mprog1/lib.umsb03 b/src/mprog1/lib.umsb03 new file mode 100644 index 00000000..37e3ec50 --- /dev/null +++ b/src/mprog1/lib.umsb03 @@ -0,0 +1,79 @@ +<PACKAGE "LIB"> + +<ENTRY LIB-CHAN-LIST + LIB-LIST + LIB-ALWAYS-CLOSE + LIB-NOISY? + LIB-NOISY-CHAR + LIB-ACT + LIB-DCT + LIB-LOAD + LIB-DYNAMIC-LOADER + LIB-HANDLER> + +<SETG LIB-CHAN-LIST <>> + +<COND (<NOT <GASSIGNED? LIB-LIST>> + <SETG LIB-LIST ("_LIB_ >")>)> + +<COND (<NOT <GASSIGNED? LIB-ALWAYS-CLOSE>> <SETG LIB-ALWAYS-CLOSE T>)> + +<COND (<NOT <GASSIGNED? LIB-NOISY?>> <SETG LIB-NOISY? <>>)> + +<COND (<NOT <GASSIGNED? LIB-NOISY-CHAR>> <SETG LIB-NOISY-CHAR !"#>)> + + +<DEFINE LIB-ACT ("OPTIONAL" (L ,LIB-LIST)) +<SETG LIB-CHAN-LIST <MAPF ,LIST <FUNCTION (NM "AUX" VAL) + <COND (<AND <TYPE? .NM STRING> + <SET VAL <SDMOPN .NM>>> + <MAPRET .VAL>) + (ELSE <MAPRET>) + (ELSE T)>> + .L>>> + + +<DEFINE LIB-DCT () +<COND (<TYPE? ,LIB-CHAN-LIST LIST> + <MAPF <> <FUNCTION (CHN) + <COND (<TYPE? .CHN PMCHAN> <SDMDCT .CHN>)>> + ,LIB-CHAN-LIST>)>> + + +<DEFINE LIB-LOAD (ATM "AUX" VAL) +<COND (<TYPE? ,LIB-CHAN-LIST LIST>) + (<LIB-ACT>)> +<COND (<AND <TYPE? ,LIB-CHAN-LIST LIST> + <REPEAT ((L ,LIB-CHAN-LIST)) + <COND (<EMPTY? .L> <RETURN <>>) + (<SET VAL <SDMGET <1 .L> .ATM ,SDBEVL>> + <AND ,LIB-ALWAYS-CLOSE + <SDMDCT <1 .L>>> + <RETURN .VAL>)> + <COND (,LIB-ALWAYS-CLOSE <SDMDCT <1 .L>>)> + <SET L <REST .L>>>> + T)>> + + +<DEFINE LIB-DYNAMIC-LOADER (FRM + "TUPLE" JUNK + "AUX" ATM) + #DECL ((FRM) FRAME (JUNK) TUPLE (ATM) ATOM) + <COND (<OR <NOT <==? 3 <LENGTH .JUNK>>> + <NOT <OR <AND <==? <1 .JUNK> UNASSIGNED-VARIABLE!-ERRORS> + <==? <3 .JUNK> GVAL>> + <AND <==? <1 .JUNK> UNBOUND-VARIABLE!-ERRORS> + <OR <==? <3 .JUNK> VALUE> + <==? <3 .JUNK> CALLER>>>>>>) + (ELSE + <COND (<AND <LIB-LOAD <SET ATM <2 .JUNK>>> <GASSIGNED? .ATM>> + <INT-LEVEL 0> + <COND (,LIB-NOISY? <PRINC ,LIB-NOISY-CHAR>)> + <APPLY ,ERRET ,.ATM .FRM>)>)>> + + + +<SETG LIB-HANDLER <ON "ERROR" ,LIB-DYNAMIC-LOADER 100000>> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog1/libmnt.umsb01 b/src/mprog1/libmnt.umsb01 new file mode 100644 index 00000000..03b9292f --- /dev/null +++ b/src/mprog1/libmnt.umsb01 @@ -0,0 +1,55 @@ +<PACKAGE "LIBMNT"> + +<ENTRY LIB-DUMP + LIB-UPDATE> + +<USE "LIB" "SDM"> + + +<DEFINE LIB-DUMP (LIB FILE "AUX" LCHAN CHAN) +#DECL ((LIB FILE) STRING (VALUE) <OR STRING FALSE> (CHAN) <OR CHANNEL FALSE> + (LCHAN) <OR PMCHAN FALSE>) +<LIB-DCT> +<COND (<SET LCHAN <SDMOPN .LIB>> + <COND (<SET CHAN <OPEN "PRINT" .FILE>> + <SDMAPFV <> <FUNCTION (VAL) <PPRINT .VAL .CHAN>> .LCHAN> + <SDMDCT .LCHAN> + <CLOSE .CHAN> + "DUMPED") + (ELSE <SDMDCT .LCHAN> + <CHTYPE ("COULDN'T OPEN OUTPUT FILE" .FILE) FALSE>)>) + (ELSE <CHTYPE ("COULDN'T ACTIVATE LIBRARY FILE" .LIB) FALSE>)>> + + +<DEFINE LIB-UPDATE (LIB FILE "AUX" VAL CHAN LCHAN) +#DECL ((LIB FILE) STRING (VALUE) <OR STRING FALSE> + (CHAN) <OR CHANNEL FALSE> + (LCHAN) <OR PMCHAN FALSE> + (VAL) ANY) +<LIB-DCT> +<COND (<SET CHAN <OPEN "READ" .FILE>> + <COND (<SET LCHAN <SDMACT .LIB>> + <REPEAT () + <COND (<SET VAL <READ .CHAN '<>>> + <COND (<AND <TYPE? .VAL FORM> + <G? <LENGTH .VAL> 2> + <OR <==? <1 .VAL> DEFINE> <==? <1 .VAL> SETG>> + <TYPE? <2 .VAL> ATOM>> + <SDMPUT .LCHAN <2 .VAL> .VAL>) + (ELSE <ERROR BAD-LIBRARY-DATA!-ERRORS + NOT-A-DEFINE-OR-SETG-FORM!-ERRORS + ERRET-ANYTHING-TO-TRY-NEXT-DATUM!-ERRORS + .VAL>)>) + (ELSE <RETURN>)>> + <SDMDCT .LCHAN> + <CLOSE .CHAN> + "LIBRARY UPDATED") + (ELSE + <CLOSE .CHAN> + <CHTYPE ("COULDN'T ACTIVATE LIBRARY FILE" .LIB) FALSE>)>) + (ELSE + <CHTYPE ("COULDN'T OPEN INPUT FILE" .FILE) FALSE>)>> + + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog1/mpck.umsb05 b/src/mprog1/mpck.umsb05 new file mode 100644 index 00000000..2a9187e2 --- /dev/null +++ b/src/mprog1/mpck.umsb05 @@ -0,0 +1,312 @@ +<BLOCK <ROOT>> + +PACKAGE + +RPACKAGE + +ENTRY + +EXTERNAL + +USE + +USE-TOTAL + +DROP + +NULL-OBLIST + +ENDPACKAGE + +FILSTR + +FILPRS + +L-DATUM + +USE-DATUM + +L-TRY-USER + +L-UNUSE + +USE-DEFER + +L-NOISY + +L-DIRECTORIES + +L-SECOND-NAMES + +L-PATH + +L-OBL + +<MOBLIST PACKAGE 29> + +<MOBLIST PKG!-PACKAGE 17> + +<SETG OBLIST (<GET INITIAL OBLIST> <ROOT>)> + +<BLOCK (<MOBLIST IPKG!-PKG!-PACKAGE 23> + <GET PKG!-PACKAGE OBLIST> + <ROOT>)> + +<SETG PKG!-PACKAGE .OBLIST> + +<SETG PKG-OB <GET PACKAGE OBLIST>> + +<SETG COL-OB <MOBLIST RPACKAGE 7>> + +<SETG L-TRY-USER <>> + +<SETG L-NOISY T> + +<SETG L-DIRECTORIES ("MDLLIB" "MDL")> + +<SETG L-SECOND-NAMES ("FBIN" "GBIN" "NBIN" "BINARY" "MUD")> + +<GDECL (COL-OB + PKG-OB) + OBLIST + (L-TRY-USER + L-NOISY) + ANY + (L-DIRECTORIES + L-SECOND-NAMES) + <LIST [REST STRING]>> + + +<DEFINE FILSTR ("OPTIONAL" (N1 "") (N2 "MUD") (DN "DSK") (SN <SNAME>)) +#DECL ((VALUE N1 N2 DN SN) STRING) +<STRING .DN ":<" .SN !"> .N1 !". .N2>> + +<DEFINE FILPRS (FIL "AUX" (CHN <CHANNEL "READ" .FIL>)) +#DECL ((VALUE) <LIST [REST STRING]> (FIL) STRING (CHN) CHANNEL) +(<7 .CHN> <8 .CHN> <9 .CHN> <10 .CHN>)> + +<DEFINE L-PATH () +<MAPF <> <FUNCTION (X) <PRINT <GET .X OBLIST>>> .OBLIST> ,NULL> + +<DEFINE L-OBL (ATM) +#DECL ((ATM) ATOM) +<GET <OBLIST? .ATM> OBLIST>> + + +<DEFINE FIND/LOAD (STR "AUX" CHN TMP (OUTCHAN ,OUTCHAN)) + #DECL ((STR) STRING (OUTCHAN) <SPECIAL CHANNEL>) + <COND (<AND <SET TMP <LOOKUP .STR ,PKG-OB>> <GASSIGNED? .TMP>> + .TMP) + (<SET CHN <SEARCH .STR>> + <COND (,L-NOISY <PRINC "/"> <PRINC .STR>)> + <LOAD .CHN> + <OR <LOOKUP .STR ,PKG-OB> + <PROG () + <SET TMP <INSERT .STR ,PKG-OB>> + <SETG .TMP .OBLIST> + .TMP>>)>> + +<DEFINE SEARCH (IND "AUX" (PATH ,L-DIRECTORIES)) + #DECL ((VALUE) <OR CHANNEL FALSE> + (IND) STRING + (PATH) <LIST [REST STRING]>) + <AND ,L-TRY-USER <SET PATH <CONS <SNAME> .PATH>>> + <MAPF <> + <FUNCTION (DIR "AUX" CHAN) + #DECL ((VALUE) FALSE + (DIR) STRING + (CHAN) <OR CHANNEL FALSE>) + <AND <MAPF <> <FUNCTION (NAME2) + #DECL ((NAME2) STRING) + <COND (<SET CHAN <OPEN "READ" .IND .NAME2 + "DSK" .DIR>> + <MAPLEAVE .CHAN>)>> ,L-SECOND-NAMES> + <MAPLEAVE .CHAN>>> + .PATH>> + +<DEFINE PACKAGE (NAME + "OPTIONAL" (INAME <STRING !"I .NAME>) (SIZE 19) (ISIZE 23) + "EXTRA" ATM IATM OBL IOBL TMP) + #DECL ((NAME INAME) STRING (SIZE ISIZE) FIX (ATM IATM VALUE) ATOM + (OBL IOBL) OBLIST) + <SET ATM + <OR <LOOKUP .NAME ,PKG-OB> <INSERT .NAME ,PKG-OB>>> + <SET OBL <MOBLIST .ATM .SIZE>> + <SET IATM <OR <LOOKUP .INAME .OBL> <INSERT .INAME .OBL>>> + <SET IOBL <MOBLIST .IATM .ISIZE>> + <BLOCK <SETG .ATM <SET TMP (.IOBL .OBL <ROOT>)>>> + <PUT .ATM IOBLIST .IATM> + <PUT .TMP IN-COLLECTION .ATM> + .ATM> + +<DEFINE RPACKAGE (NAME + "OPTIONAL" (INAME <STRING !"I .NAME>) (ISIZE 23) + "AUX" ATM IATM IOBL TMP) + #DECL ((NAME INAME) STRING (ISIZE) FIX (ATM IATM VALUE) ATOM + (IOBL) OBLIST) + <SET ATM + <OR <LOOKUP .NAME ,PKG-OB> <INSERT .NAME ,PKG-OB>>> + <SET IATM + <OR <LOOKUP .INAME ,COL-OB> <INSERT .INAME ,COL-OB>>> + <SET IOBL <MOBLIST .IATM .ISIZE>> + <BLOCK <SETG .ATM <SET TMP (.IOBL <ROOT>)>>> + <PUT .ATM IOBLIST .IATM> + <PUT .TMP IN-COLLECTION .ATM> + .ATM> + +<DEFINE ENTRY ("TUPLE" NAMES "AUX" (NAME T)) + #DECL ((VALUE NAME) ATOM (NAMES) <TUPLE [REST ATOM]>) + <REPEAT () + <COND (<EMPTY? .NAMES> <RETURN .NAME>)> + <SET NAME <1 .NAMES>> + <SET NAMES <REST .NAMES>> + <COND (<NOT <GET .OBLIST IN-COLLECTION>> + <ERROR ENTRY NOT-IN-PACKAGE-OR-COLLECTION!-ERRORS>) + (<==? <OBLIST? .NAME> <1 .OBLIST>> + <INSERT <REMOVE .NAME> <2 .OBLIST>>) + (<NOT <==? <OBLIST? .NAME> <2 .OBLIST>>> + <ERROR ENTRY .NAME ALREADY-USED-ELSEWHERE!-ERRORS>)>>> + +<DEFINE USE ("TUPLE" NAMES "AUX" NAME PK OBL N M) + #DECL ((VALUE) ATOM (NAMES) <TUPLE [REST STRING]> (PK) <OR ATOM FALSE> + (NAME) STRING (OBL) <OR FALSE OBLIST> (N M) FIX + (OBLIST) <LIST [REST OBLIST]>) + <REPEAT () + <COND (<EMPTY? .NAMES> <RETURN USE>)> + <SET NAME <1 .NAMES>> + <SET NAMES <REST .NAMES>> + <SET PK <FIND/LOAD .NAME>> + <COND + (<NOT .PK> <ERROR PACKAGE .NAME NOT-FOUND!-ERRORS>) + (<AND <SET OBL <GET .PK OBLIST>> <NOT <MEMQ .OBL .OBLIST>>> + <COND (<NOT <0? <SET N <LENGTH <MEMQ ,PKG-OB .OBLIST>>>>> + <PUTREST <REST .OBLIST <- <SET M <LENGTH .OBLIST>> .N 1>> + (.OBL !<REST .OBLIST <- .M .N>!>)>) + (T + <PUTREST <REST .OBLIST <- <LENGTH .OBLIST> 1>> (.OBL)>)>)>>> + +<DEFINE USE-TOTAL ("TUPLE" NAMES "AUX" NAME PK OBL N M) + #DECL ((VALUE) ATOM (NAMES) <TUPLE [REST STRING]> (PK) <OR ATOM FALSE> + (NAME) STRING (OBL) <OR FALSE OBLIST> (N M) FIX + (OBLIST) <LIST [REST OBLIST]>) + <REPEAT () + <COND (<EMPTY? .NAMES> <RETURN USE>)> + <SET NAME <1 .NAMES>> + <SET NAMES <REST .NAMES>> + <SET PK <FIND/LOAD .NAME>> + <COND + (<NOT .PK> <ERROR PACKAGE .NAME NOT-FOUND!-ERRORS>) + (<AND <SET OBL <GET .PK OBLIST>> <NOT <MEMQ .OBL .OBLIST>>> + <COND (<NOT <0? <SET N <LENGTH <MEMQ ,PKG-OB .OBLIST>>>>> + <PUTREST <REST .OBLIST <- <SET M <LENGTH .OBLIST>> .N 1>> + (.OBL !<REST .OBLIST <- .M .N>!>)>) + (T + <PUTREST <REST .OBLIST <- <LENGTH .OBLIST> 1>> (.OBL)>)>)> + <COND + (<AND <SET PK <OR <GET .PK IOBLIST> + <LOOKUP <STRING !"I <PNAME .PK>> <GET .PK OBLIST>>>> + <SET OBL <GET .PK OBLIST>> + <NOT <MEMQ .OBL .OBLIST>>> + <COND (<NOT <0? <SET N <LENGTH <MEMQ ,PKG-OB .OBLIST>>>>> + <PUTREST <REST .OBLIST <- <SET M <LENGTH .OBLIST>> .N 1>> + (.OBL !<REST .OBLIST <- .M .N>!>)>) + (T + <PUTREST <REST .OBLIST <- <LENGTH .OBLIST> 1>> (.OBL)>)>)>>> + + + +<SETG USE-DEFER <SETG EXTERNAL ,USE>> + +<DEFINE DROP ("TUPLE" NAMES "AUX" NAME PK OBL N) + #DECL ((VALUE) ATOM (NAMES) <TUPLE [REST STRING]> (PK) <OR ATOM FALSE> + (N) FIX (NAME) STRING (OBL) <OR FALSE OBLIST> + (OBLIST) <LIST [REST OBLIST]>) + <REPEAT () + <COND (<EMPTY? .NAMES> <RETURN DROP>)> + <SET NAME <1 .NAMES>> + <SET NAMES <REST .NAMES>> + <COND (<NOT <SET PK <LOOKUP .NAME ,PKG-OB>>> + <ERROR PACKAGE .NAME NOT-PACKAGE-OR-COLLECTION!-ERRORS>)> + <SET OBL <GET .PK OBLIST>> + <COND (<NOT <0? <SET N <LENGTH <MEMQ .OBL .OBLIST>>>>> + <PUTREST <REST .OBLIST <SET N <- <LENGTH .OBLIST> .N 1>>> + <REST .OBLIST <+ .N 2>>>)> + <COND (<AND <SET PK <OR <GET .PK IOBLIST> + <AND .OBL + <LOOKUP <STRING !"I <PNAME .PK>> .OBL>>>> + <SET OBL <GET .PK OBLIST>>> + <COND (<NOT <0? <SET N <LENGTH <MEMQ .OBL .OBLIST>>>>> + <PUTREST <REST .OBLIST <SET N <- <LENGTH .OBLIST> .N 1>>> + <REST .OBLIST <+ .N 2>>>)>)>>> + +<SETG NULL-OBLIST <MOBLIST NULL 1>> + +<DEFINE ENDPACKAGE ("AUX" (PK <GET .OBLIST IN-COLLECTION>) IATM OBL VAL) + #DECL ((PK) <OR ATOM FALSE> (VALUE) ATOM + (IATM) <OR ATOM FALSE> + (OBL) <OR OBLIST FALSE> + (VAL) ANY) + <COND (.PK + <PUT .OBLIST IN-COLLECTION> + <ENDBLOCK> + <COND (<AND <SET IATM <OR <GET .PK IOBLIST> + <LOOKUP <STRING !"I <PNAME .PK>> + <GET .PK OBLIST>>>> + <SET OBL <GET .IATM OBLIST>> + <MAPF <> <FUNCTION (L) + #DECL ((L) LIST) + <COND (<EMPTY? .L>) + (ELSE <MAPLEAVE <>>)>> .OBL>> + <PUT <PUT .IATM OBLIST> OBLIST> + <PUT .PK IOBLIST> + <COND (<AND <GASSIGNED? .PK> + <TYPE? ,.PK LIST> + <SET VAL <MEMBER .OBL ,.PK>>> + <PUT .VAL 1 ,NULL-OBLIST>)>)> + .PK) + (ELSE + <ERROR UNMATCHED-ENDPACKAGE-OR-ENDCOLLECTION!-ERRORS>)>> + +<DEFINE L-UNUSE (STR "AUX" TMP IATM) +#DECL ((STR) STRING (TMP) ANY (IATM) <OR ATOM FALSE>) + <COND (<AND <SET TMP <LOOKUP .STR ,PKG-OB>> <GASSIGNED? .TMP>> + <DROP .STR> + <COND (<SET IATM <OR <PUT .TMP IOBLIST> + <LOOKUP <STRING !"I <PNAME .TMP>> <GET .TMP OBLIST>>>> + <PUT <PUT .IATM OBLIST> OBLIST>)> + <GUNASSIGN .TMP> + <PUT <PUT .TMP OBLIST> OBLIST> + <REMOVE .TMP ,PKG-OB> + "PACKAGE REMOVED") + (<SET TMP <LOOKUP .STR ,UDOB>> + <REMOVE .TMP ,UDOB> + "DATUM REMOVED") + (T #FALSE ("NOT PACKAGE OR DATUM"))>> + + + + + + +<DEFINE L-DATUM (IND "AUX" CHN TMP) + <COND (<SET CHN <SEARCH .IND>> + <SET TMP <READ .CHN '<>>> + <CLOSE .CHN> + .TMP) + (<CHTYPE ("DATUM NOT FOUND") FALSE>)>> + +<SETG UDOB <MOBLIST USE-DATUM 17>> + +<DEFINE USE-DATUM (IND "AUX" TMP) + <COND (<SET TMP <LOOKUP .IND ,UDOB>> ,.TMP) + (<SET TMP <L-DATUM .IND>> <SETG <INSERT .IND ,UDOB> .TMP>) + (T .TMP)>> + + +<ENDBLOCK> + +<ENDBLOCK> + +<SET OBLIST ,OBLIST> + + \ No newline at end of file diff --git a/src/mprog1/mudtec.udl021 b/src/mprog1/mudtec.udl021 new file mode 100644 index 00000000..c69ad5b1 --- /dev/null +++ b/src/mprog1/mudtec.udl021 @@ -0,0 +1,160 @@ + +<PACKAGE "MUDTEC"> + +<ENTRY TECO + TECO-BUFFER + TECO-LOAD + TECO-KILL + TECO-OPEN + TECO-CLOSE + TECO-ALLOC + TECO-PRINT-BUFFER + TECO-READ-BUFFER + TECO-BUFFER-SIZE> + +<USE "INFERIOR" "INFASS"> + +<GDECL (TECO-BUFFER) <UVECTOR [REST FIX]> + (TECO) <OR FALSE INF>> + +<FLOAD "LIBRM1;ACCHRS NBIN"> + +<DEFINE TECO-LOAD ("OPTIONAL" (NM2 "TECO") (JCL "0FSEXIT") TEC) + #DECL ((VALUE) <OR FALSE INF> (NM2) <SPECIAL STRING> (JCL) STRING + (TEC) <OR FALSE INF>) + <COND (<NOT <GASSIGNED? TECO>> <SET TEC <>>) + (ELSE <SET TEC ,TECO>)> + <COND (<AND .TEC + <TYPE? <INF-UCHAN .TEC> CHANNEL> + <NOT <0? <1 <INF-UCHAN .TEC>>>>> + <INF-KILL .TEC>)> + <COND (<SETG TECO + <MAPF <> + <FUNCTION (W "AUX" R) + #DECL ((W) STRING (R) <OR FALSE INF>) + <COND (<SET R <INF-LOAD .W "MUDTEC" .JCL 2>> + <MAPLEAVE .R>)>> + '["DSK:TS" "DSK:SYS;TS" "DSK:SYS1;TS" "DSK:SYS2;TS"]>> + <SETG TECO-BUFFER <IUVECTOR 9 0>> + ,TECO)>> + +<DEFINE TECO-KILL ("OPTIONAL" (TEC ,TECO)) + #DECL ((TEC) <OR INF FALSE>) + <COND (.TEC <INF-KILL .TEC> <SETG TECO <>>)>> + +<AND? <SETG BEG 1> + <SETG BEGV 2> + <SETG PT 3> + <SETG GPT 4> + <SETG ZV 5> + <SETG Z 6> + <SETG EXTRAC 7> + <SETG JRSTLOC 8> + <SETG ARGLOC 9>> + +<MANIFEST BEG BEGV PT GPT ZV Z EXTRAC JRSTLOC ARGLOC> + +<DEFINE TECO-OPEN ("OPTIONAL" (TEC ,TECO) + "AUX" UCH (TB ,TECO-BUFFER) OLD-BEG) + #DECL ((TEC) <OR INF FALSE> (UCH) CHANNEL (TB) <UVECTOR [REST FIX]> + (VALUE) <OR FIX FALSE> (OLD-BEG) FIX) + <COND (.TEC + <SET UCH <INF-UCHAN .TEC>> + <TBREAD .TB .TEC> + <ACCESS .UCH <SET OLD-BEG </ <BEG .TB> 5>>> + .OLD-BEG)>> + +<DEFINE TECO-CLOSE ("OPTIONAL" (TEC ,TECO) "AUX" UCH AEND B R (TB ,TECO-BUFFER)) + #DECL ((VALUE) <OR FIX FALSE> (AEND B) FIX (TEC) <OR INF FALSE> + (R) FIX (UCH) CHANNEL (TB) <UVECTOR [REST FIX]>) + <COND (.TEC + <SET UCH <INF-UCHAN .TEC>> + <SET AEND <ACCESS-IN-CHARS .UCH>> + <TBREAD .TB .TEC> + <SET B <BEG .TB>> + <SET R <+ <- <Z .TB> .B> <EXTRAC .TB>>> + <PUT .TB ,BEGV .B> + <PUT .TB ,PT .AEND> + <PUT .TB ,GPT .AEND> + <PUT .TB ,ZV .AEND> + <PUT .TB ,Z .AEND> + <PUT .TB ,EXTRAC <- .R <- .AEND .B>>> + <TBPRINT .TB .TEC> + .AEND)>> + +<DEFINE TECO-ALLOC (N "OPTIONAL" (TEC ,TECO) "AUX" PC BB R UCH) + #DECL ((N) FIX (BB) <PRIMTYPE WORD> (TEC) <OR INF FALSE> + (PC) FIX (R) ANY (UCH) CHANNEL) + <COND (.TEC + <SET UCH <INF-UCHAN .TEC>> + <SET PC <USET .UCH 0>> ; "0 IS UPC" + <SET BB <INF-WORD .TEC 2>> + <INF-WORD .TEC <+ .BB 8> .N> + <USET .UCH 0 <+ .BB 7>> + <PROG () + <SET R <INF-CONTIN .TEC>> + <COND (<AND <TYPE? .R LIST> + <==? <1 .R> *BREAK-16> + <==? <2 .R> BACK>> + <USET .UCH 0 .PC>) + (<==? .R ^Z-TYPED> <AGAIN>)>> + .R)>> + +<DEFINE TECO-PRINT-BUFFER (STR "OPTIONAL" (L <LENGTH .STR>) (TEC ,TECO)) + #DECL ((TEC) <OR INF FALSE> (STR) STRING (L) FIX) + <COND (.TEC + <TECO-ALLOC <LENGTH .STR> .TEC> + <TECO-OPEN .TEC> + <PRINTSTRING .STR <INF-UCHAN .TEC> .L> + <TECO-CLOSE> + <INF-CONTIN .TEC>)>> + +<DEFINE TECO-READ-BUFFER ("OPTIONAL" (SS <>) (WINDOW? T) (TEC ,TECO) + "AUX" (DUMMY ,DUMMY) ICH (TB ,TECO-BUFFER) M R B Z G E) + #DECL ((TEC) <OR INF FALSE> (ICH) CHANNEL (TB) <UVECTOR [REST FIX]> + (DUMMY) STRING (B Z G E M) FIX (SS VALUE) <OR STRING FALSE> + (R) <OR FIX FALSE> (WINDOW?) <OR ATOM FALSE>) + <COND (.TEC + <COND (<NOT .SS> + <SET SS <ISTRING <TECO-BUFFER-SIZE .WINDOW? .TEC> !" >>)> + <SET ICH <GET-ICHAN .TEC>> + <SET B <COND (.WINDOW? <BEGV .TB>)(<BEG .TB>)>> + <SET Z <COND (.WINDOW? <ZV .TB>)(<Z .TB>)>> + <SET G <GPT .TB>> + <SET E <EXTRAC .TB>> + <ACCESS .ICH </ .B 5>> + <COND (<NOT <0? <SET M <MOD .B 5>>>> + <READSTRING .DUMMY .ICH .M>)> + <COND (<SET R <READSTRING .SS .ICH <- .G .B> '<>>> + <COND (<L? .R <LENGTH .SS>> + <OR <0? .E> <ACCESS .ICH </ <SET E <+ .G .E>> 5>>> + <COND (<NOT <0? <SET M <MOD .E 5>>>> + <READSTRING .DUMMY .ICH .M>)> + <READSTRING <REST .SS .R> .ICH <- .Z .G>>)> + .SS)>)>> + +<SETG DUMMY " "> + +<GDECL (DUMMY) <STRING [5 CHARACTER]>> + +<DEFINE TECO-BUFFER-SIZE ("OPTIONAL" (WINDOW? T) (TEC ,TECO) "AUX" (TB ,TECO-BUFFER)) + #DECL ((TEC) <OR INF FALSE> (TB) <UVECTOR [REST FIX]> (VALUE) FIX + (WINDOW?) <OR ATOM FALSE>) + <COND (.TEC + <TBREAD .TB .TEC> + <- <COND (.WINDOW? <ZV .TB>)(ELSE <Z .TB>)> + <COND (.WINDOW? <BEGV .TB>)(ELSE <BEG .TB>)>>)>> + +<DEFINE TBREAD (TB INF "AUX" (ICH <GET-ICHAN .INF>)) + #DECL ((VALUE TB) <UVECTOR [REST FIX]> (INF) INF (ICH) CHANNEL) + <ACCESS .ICH <INF-WORD .INF 2>> + <READB .TB .ICH> + .TB> + +<DEFINE TBPRINT (TB INF "AUX" (UCH <INF-UCHAN .INF>)) + #DECL ((VALUE TB) <UVECTOR [REST FIX]> (UCH) CHANNEL (INF) INF) + <ACCESS .UCH <INF-WORD .INF 2>> + <PRINTB .TB .UCH> + .TB> + +<ENDPACKAGE> diff --git a/src/mprog1/netftp.ujfh34 b/src/mprog1/netftp.ujfh34 new file mode 100644 index 00000000..e15d01c5 --- /dev/null +++ b/src/mprog1/netftp.ujfh34 @@ -0,0 +1,293 @@ +<PACKAGE "NETFTP"> + +<ENTRY CONNECT ACC ICP WAITRESP LAST-RESP SOAK UNSOAK> + +<USE "CLOCK"> + +"SOAK and UNSOAK -- enable and disable scripting of ftp transactions" + +<DEFINE SOAK () <SETG SOAK? T>> + +<DEFINE UNSOAK () <SETG SOAK? <>>> + +<SETG SOAK? T> +<GDECL (SOAK?) <OR 'T FALSE>> + +"CONNECT -- connect to ftp server at a specified host + arg1 -- host (fix) + arg2 -- access instructions, or false. if true, must be list + of items, as follows: + 1/ string, arg for user command + 2/ string, to be used as arg to password command, if empty + or false, none will be issued + 3/ string, to be used as arg to account command + arg3 -- type of transfer (string) false--none + arg4 -- byte size (fix) false--none + arg5 -- mode of transfer (string) false--none + + -- returns list of input and output channels, or #false(reason.string)" + +<DEFINE CONNECT (HOST ACC TYP BYT MODE + "AUX" CHS OCH ICH (CR <STRING <ASCII 13> <ASCII 10>>)) + #DECL ((INCHAN) CHANNEL (VALUE) <OR FALSE <LIST CHANNEL CHANNEL>> + (HOST) FIX (CR) STRING (BYT) <OR FIX FALSE> + (TYP MODE) <OR STRING FALSE> (CHS) <OR LIST <FALSE STRING>> + (ACC) <LIST [3 STRING]> (OCH ICH) CHANNEL) + <COND (<SET CHS <ICP .HOST 3>> + <SET ICH <1 .CHS>> + <SET OCH <2 .CHS>> + <WAITRESP <1 .CHS> '(300)> + <COND (.ACC + <PRINC "USER " .OCH> + <PRINC <1 .ACC> .OCH> + <PRINC .CR .OCH> + <WAITRESP <1 .CHS> '(230 200 330)> + <COND (<AND <2 .ACC> <NOT <EMPTY? <2 .ACC>>>> ;"PASSWORD" + <PRINC "PASS " <2 .CHS>> + <PRINC <2 .ACC> <2 .CHS>> + <PRINC .CR <2 .CHS>> + <WAITRESP .ICH '(230 200 331)>)> + <COND (<NOT <EMPTY? <3 .ACC>>> ;"ACCOUNT" + <PRINC "ACCT " .OCH> + <PRINC <3 .ACC> .OCH> + <PRINC .CR .OCH> + <WAITRESP .ICH '(230 200)>)>)> + <COND (.TYP ;"TRANSFER TYPE" + <PRINC "TYPE " .OCH> + <PRINC .TYP .OCH> + <PRINC .CR .OCH> + <WAITRESP .ICH '(200)>)> + <COND (.BYT ;"BYTE SIZE" + <PRINC "BYTE " .OCH> + <PRINC <UNPARSE .BYT> .OCH> + <PRINC .CR .OCH> + <WAITRESP .ICH '(200)>)> + <COND (.MODE ;"MODE" + <PRINC "MODE " .OCH> + <PRINC .MODE .OCH> + <WAITRESP .ICH '(200)>)> + .CHS)>> + +"GETLINE -- get a response from ftp connection, including continuation lines" + +<DEFINE GETLINE (CH "AUX" COD) + #DECL ((CH) CHANNEL (COD VALUE) STRING) + <REPEAT () + <SET COD <RESPONSE-LINE .CH>> + <COND (<NOT <LENGTH? .COD 3>> <RETURN>)>> + <COND (<==? <4 .COD> !\-> ;"CONTINUATION LINE" + <REPEAT (L) + #DECL ((L) STRING) + <SET L <RESPONSE-LINE .CH>> + <COND (<AND <NOT <LENGTH? .L 2>> + <==? <1 .L> <1 .COD>> + <==? <2 .L> <2 .COD>> + <==? <3 .L> <3 .COD>>> + <RETURN>)>>)> + .COD> + +<DEFINE RESPONSE-LINE (CH "AUX" CHAR (CR? <>) L) + #DECL ((CH) CHANNEL (L VALUE) STRING (CHAR) <OR CHARACTER FALSE> + (CR?) <OR ATOM FALSE>) + <SET L + <MAPF ,STRING + <FUNCTION () + <COND (<NOT <SET CHAR <NETCHR .CH>>> + <ERROR CHANNEL-CLOSED RESPONSE-LINE>) + (<AND .CR? <N==? .CHAR <ASCII 13>>> <MAPSTOP>) + (<==? .CHAR <ASCII 13>> <SET CR? T> <MAPRET>) + (<==? .CHAR <ASCII 0>> <MAPRET>) + (ELSE + <MAPRET .CHAR>)>>>> + <COND (<NOT ,SOAK?> + <PROG ((OUTCHAN .OUTCHAN)) + #DECL ((OUTCHAN) CHANNEL) + <OR <0? <14 .OUTCHAN>> <CRLF>> + <PRINC "FTP: "> + <PRINC .L> + <CRLF>>)> + .L> + +"NETCHR -- kludge to handle new telnet protocol without +lossage waiting for response... returns a character, like +readchr, but if sees rubout or 377, reads next char and throws +it away." + +<DEFINE NETCHR (CH "AUX" C) + #DECL ((CH) CHANNEL (VALUE) <OR CHARACTER FALSE> (C) CHARACTER) + <PROG () + <SET C <READCHR .CH '<RETURN <>>>> + <COND (<OR <==? <ASCII .C> *377*> + <==? <ASCII .C> *177*>> + <READCHR .CH '<RETURN <>>> ;"THROW AWAY" + <AGAIN>)> + <RETURN .C>>> + +"WAITRESP -- given a channel, read until one of a supplied set of response + codes is received + --returns code received (fix), or #false(reason) + -- arg1/ channel + -- arg2/ list of fixes, codes to watch for. in all cases, + responses beginning with 0 as a code are ignored" + +<DEFINE WAITRESP (CHNL RESPONSES + "AUX" C ARESP MRESP (NUMS '"0123456789") RES) + #DECL ((CHNL) CHANNEL (RESPONSES) LIST (ARESP) STRING + (NUMS) STRING (RES VALUE) <OR FALSE FIX> + (C) CINT (MRESP) <OR LIST FALSE>) + <SETG LAST-RESP <>> + <SET RES + <REPEAT WAIT-ACT () + #DECL ((WAIT-ACT) <SPECIAL ACTIVATION>) + <SET C <ALARM WAIT-ACT 120.0>> + <SETG LAST-RESP <SET ARESP <GETLINE .CHNL>>> + <COND (<OR <NOT <MEMQ <1 .ARESP> .NUMS>> + <NOT <MEMQ <2 .ARESP> .NUMS>> + <NOT <MEMQ <3 .ARESP> .NUMS>>> + <AGAIN>)> + <COND (<SET MRESP + <MEMQ <PARSE <STRING <1 .ARESP> + <2 .ARESP> + <3 .ARESP>>> + .RESPONSES>> + <RETURN <1 .MRESP>>) + (<==? <1 .ARESP> !\0>) + (<OR <==? <1 .ARESP> !\4> <==? <1 .ARESP> !\5>> + <RETURN <CHTYPE (.ARESP) FALSE>>)>>> + <ALARM-OFF .C> + .RES> + +"WATCH -- error/interrupt handler for net channels + -- returns from an activation (sl) if we are in it (sleeping) +" + +<DEFINE WATCH (ST CH) + #DECL ((ST) <UVECTOR FIX FIX FIX> (CH) CHANNEL (SL) ACTIVATION) + <COND (<OR <==? <1 .ST> 2> <==? <1 .ST> 11>> + <NETACC .CH> + <OFF "CHAR" .CH> + <INT-LEVEL 0> + <RETURN .CH .SL>) + (ELSE <DISMISS T>)>> + +"ACC -- function to issue a ftp command to transfer data + -- opens another socket in direction indicated, and issues a 'sock xxx' + command over ftp telnet channels. waits for channel connection to + be established, and returns the channel. if trouble, returns + #false(reason) + -- arg1/ telnet channel pair + arg2/ command line to issue after 'sock' command + arg3/ direction -- usually read or print + arg4/ byte size for channel opening" + +<DEFINE ACC (CHS COMM DIREC BYT + "AUX" (FTPCHAN <2 .CHS>) HAN (CL <STRING <ASCII 13> <ASCII 10>>) + CHANL) + #DECL ((CHS) <LIST CHANNEL CHANNEL> (FTPCHAN) CHANNEL (HAN) HANDLER + (COMM DIREC CL) STRING (BYT) FIX + (CHANL) <OR FALSE CHANNEL>) + <COND (<SET CHANL <OPEN .DIREC -1 -1 "NET" 0 .BYT>> + <COND (<=? .DIREC "PRINT"> <PUT .CHANL 13 120>)> + <PRINC <STRING "SOCK " <UNPARSE <7 .CHANL>> .CL> .FTPCHAN> + <PRINC .COMM .FTPCHAN> + <TERPRI .FTPCHAN> + <NETS .FTPCHAN> + <INT-LEVEL 3> + <SET HAN <ON "CHAR" ,WATCH 3 0 .CHANL>> + <COND (<OR <==? <1 <NETSTATE .CHANL>> 2> + <==? <1 <NETSTATE .CHANL>> 11>> + <NETACC .CHANL> + <OFF .HAN> + <INT-LEVEL 0> + .CHANL) + (ELSE + <PROG SL () + #DECL ((SL) <SPECIAL ACTIVATION>) + <INT-LEVEL 0> + <SLEEP 30> + <OFF .HAN> + <CLOSE .CHANL> + <RETURN #FALSE ("Datachannel timed-out")>>)>)>> + +"ICP -- icp function, returns false or list of input and output channels + -- arg1/ host number + arg2/ socket to issue icp to + val/ list of input and output channel" + +<SETG SOC <UVECTOR 0>> + +<DEFINE ICP (HOST FSOC "OPTIONAL" (WAITIME 20) + "AUX" CHICP CH1 CH2 (SOC ,SOC) SOCK COD ST) + #DECL ((HOST FSOC COD WAITIME SOCK) FIX (CH1 CH2 CHICP) <OR CHANNEL FALSE> + (ST) <OR UVECTOR FALSE> (SOC) UVECTOR) + <PROG () + <COND (<NOT <SET CHICP <OPEN "READB" -1 .FSOC "NET" .HOST 32>>> + <RETURN .CHICP>)> + <COND (<NOT <SET ST <WAIT-FOR-IT .CHICP .WAITIME>>> <RETURN .ST>)> + <COND (<NOT <OR <==? <SET COD <1 .ST>> 5> <==? .COD 9> <==? .COD 8>>> + <CLOSE .CHICP> + <RETURN #FALSE ("BAD ICP STATE")>)> + <COND (<1? <READB .SOC .CHICP>> <SET SOCK <1 .SOC>>) + (<RETURN #FALSE ("Read of socket number failed")>)> + <COND (<NOT <SET CH1 + <OPEN "READ" <+ <7 .CHICP> 2> <+ 1 .SOCK> "NET" .HOST 8>>> + <CLOSE .CHICP> + <RETURN #FALSE ("No Network Channels Available")>)> + <COND (<NOT <SET ST <WAIT-FOR-IT .CH1 .WAITIME>>> + <CLOSE .CHICP> + <RETURN .ST>)> + <COND (<NOT <OR <==? <SET COD <1 .ST>> 5> <==? .COD 9> <==? .COD 8>>> + <CLOSE .CHICP> + <CLOSE .CH1> + <RETURN #FALSE ("BAD ICP STATE")>)> + <COND (<NOT <SET CH2 <OPEN "PRINT" <+ <7 .CHICP> 3> .SOCK "NET" .HOST 8>>> + <CLOSE .CH1> + <CLOSE .CHICP> + <RETURN #FALSE ("No Network Channels Available")>)> + <PUT .CH2 13 9000000> + <COND (<NOT <SET ST <WAIT-FOR-IT .CH2 .WAITIME>>> + <CLOSE .CH1> + <CLOSE .CH2> + <RETURN .ST>)> + <COND (<NOT <OR <==? <SET COD <1 .ST>> 5> <==? .COD 9> <==? .COD 8>>> + <CLOSE .CHICP> + <CLOSE .CH1> + <CLOSE .CH2> + <RETURN #FALSE ("BAD ICP STATE")>)> + <CLOSE .CHICP> + (.CH1 .CH2)>> + +"WAIT-FOR-IT -- wait for interrupt that indicates channel ready" + +<DEFINE WAIT-FOR-IT (CH WAITIME "AUX" ST) + #DECL ((VALUE) <OR UVECTOR FALSE> (CH) CHANNEL (WAITIME) FIX + (ST) <UVECTOR FIX FIX FIX>) + <PROG ICP-WAIT () + #DECL ((ICP-WAIT) <SPECIAL ACTIVATION>) + <INT-LEVEL 4> + <ON "CHAR" ,ICP-NETINT 3 0 .CH> + <INT-LEVEL 0> + <COND (<NOT <==? 4 <1 <SET ST <NETSTATE .CH>>>>> + <OFF "CHAR" .CH> + .ST) + (ELSE + <SLEEP .WAITIME> + <OFF "CHAR" .CH> + <CLOSE .CH> + #FALSE ("ICP timed out"))>>> + +\ + +"ICP-NETINT -- interrupt handler for icp channels" + +<DEFINE ICP-NETINT (STA CHAN "AUX" ACT) + #DECL ((STA) UVECTOR (VALUE) <OR UVECTOR FALSE> (CHAN) CHANNEL + (ACT) ACTIVATION) + <COND (<AND <ASSIGNED? ICP-WAIT> + <TYPE? <SET ACT .ICP-WAIT> ACTIVATION> + <LEGAL? .ACT> + <NOT <==? <1 .STA> 4>>> + <OFF "CHAR" .CHAN> + <DISMISS .STA .ACT 0>)>> + +<ENDPACKAGE> diff --git a/src/mprog1/pio.umsb02 b/src/mprog1/pio.umsb02 new file mode 100644 index 00000000..2f36c402 --- /dev/null +++ b/src/mprog1/pio.umsb02 @@ -0,0 +1,1604 @@ +"************************************************************** +1. ADD STATISTICS TO CHANP + +2. CONSIDER ADDING PRINT MESSAGES TO OTHER FUNCTIONS (READP, PRINTP ETC.) +***********************************************************************" + +<PACKAGE "PIO"> + +<ENTRY CHANP OPENP CLOSEP FLUSHP RESETP UPDATEP READP PRINTP LENGTHP NAMEP> + +<ENTRY ALLOCP DALLOCP> + +<ENTRY PIO-PRINT-ACTION> + +<ENTRY PIOCHANVCT PIOPAGEVCT PIO-REF-COUNT> + +<ENTRY PIO-PAGE-LIMIT PIO-PAGE-COUNT PIO-DEFAULT-PAGE-LIMIT PIO-DEFAULT-IO-MODE> + +<ENTRY PIO-MAX-EXTRA-ALLOCATION PIO-MIN-EXTRA-ALLOCATION PIO-EXTEND-BY-PAGES?> + +<ENTRY PIO-HANG-ON-UNMAP?> + +<ENTRY PIO-CLEAR-PAGE> + +<ENTRY PIO-ERROR-VECTOR> + +<NEWTYPE CHANP VECTOR> + +%<COND (<GASSIGNED? TENEX?> + <COND (<SETG PIO-TENEX? ,TENEX?> + '<SETG PIO-TENEX? T>) + ('<SETG PIO-TENEX? <>>)>) + (ELSE + <SETG PIO-TENEX? <>> + '<SETG PIO-TENEX? <>>)> + +"*********** OS-DEPENDENT HAND-CODED RSUBRS ******************" + +%<COND (,PIO-TENEX? <USE "TENXIO"> '<USE "TENXIO">) + (ELSE + <USE "ITSIO"> + '<USE "ITSIO">)> + +%<COND (<NOT ,PIO-TENEX?> + <NEWTYPE JFN WORD> + '<NEWTYPE JFN WORD>)> + +"********* OS-INDEPENDENT HAND-CODED RSUBRS *************" +<USE "PIOSUB"> + + +<SETG PIO-PRINT-ACTION <>> + +<GDECL (PIOCHANVCT) <VECTOR [REST <OR CHANP FALSE>]> + (PIOPAGEVCT) <VECTOR [REST <OR UVECTOR FALSE> <OR CHANP FALSE>]> + (PIOREQVCT PIOREQVCT1 PIOREQVCT2) VECTOR + (PIO-REF-COUNT PIO-RECURSION-COUNT) FIX + (PIO-PAGE-LIMIT PIO-PAGE-COUNT PIO-DEFAULT-PAGE-LIMIT) FIX + (PIO-DEFAULT-IO-MODE) ANY + (PIO-MAX-EXTRA-ALLOCATION PIO-MIN-EXTRA-ALLOCATION) FIX + (PIO-EXTEND-BY-PAGES? PIO-HANG-ON-UNMAP? PIO-TENEX?) ANY + (PIO-ERROR-VECTOR) <VECTOR [REST STRING]> + (PIO-UNIT-UV PIO-SCRATCH-SINGLE-UVECTOR) UVECTOR> + +<SETG PIOCHANVCT <IVECTOR 10 <>>> + +<SETG PIOPAGEVCT <IVECTOR 40 <>>> + +<SETG PIOREQVCT <IVECTOR 40 <>>> + +<SETG PIOREQVCT1 <IVECTOR 8 <>>> + +<SETG PIOREQVCT2 <IVECTOR 8 <>>> + +<SETG PIO-REF-COUNT 0> + +<SETG PIO-RECURSION-COUNT 0> + +<SETG PIO-PAGE-COUNT 0> + +<SETG PIO-PAGE-LIMIT 20> + +<SETG PIO-DEFAULT-PAGE-LIMIT 6> + +<SETG PIO-DEFAULT-IO-MODE <>> + +<SETG PIO-UNIT-UV <IUVECTOR 1 0>> + +<SETG PIO-SCRATCH-SINGLE-UVECTOR <IUVECTOR 1 0>> + +<SETG PIO-MAX-EXTRA-ALLOCATION 10> + +<SETG PIO-MIN-EXTRA-ALLOCATION 10> + +<SETG PIO-EXTEND-BY-PAGES? T> + +<SETG PIO-HANG-ON-UNMAP? <>> + +<SETG PIO-ERROR-VECTOR [ +"#1 - Unspecified error" +"#2 - Illegal mode to OPENP" +"#3 - File not found" +"#4 - File Busy" +"#5 - Invalid CHANP supplied" +"#6 - Address is not a FIX" +"#7 - Negative address not allowed" +"#8 - Attempt to READ past end of file" +"#9 - Can't PRINT to a READ-ONLY channel" +"#10 - CHANP not in DEFER mode" +"#11 - No cache file in DEFER mode CHANP" +"#12 - File inconsistent, use UPDATEP" +"#13 - Cache file is empty" +]> + + +"**************** OFFSETS ON 'CHANP' TYPE *********************" + +<SETG PIOFSPC 1> ;"STRING, original file spec" +<SETG PIOMODE 2> ;"FIX, mode of CHANP" +<SETG PIOFPTR 3> ;"JFN or CHANNEL to active file" +<SETG PIOFLNT 4> ;"FIX, length of file" +<SETG PIOCFIL 5> ;"JFN or CHANNEL to CACHE file (FALSE if none)" +<SETG PIOCLNT 6> ;"FIX, virtual EOF of cache file." +<SETG PIOPLIM 7> ;"FIX, max # of pages for mapping" +<SETG PIOPNUM 8> ;"FIX, # of pages currently in use" +<SETG PIOPMAP 9> ;"UVECTOR, page-map for CHANP" +<SETG PIOCSIZ 10> ;"FIX, number of pages in CACHE file" +<SETG PIOCMAP 11> ;"UVECTOR, page-map for CACHE flle (FALSE if none)" +<SETG PIOPMOD 12> ;"ANY, Default I/O mode of CHANP" +<SETG PIOFSTA 13> ;"ANY, flag to determine whether channel is open or not" +<SETG PIOFTBL 14> ;"UVECTOR, free-storage table (FALSE if none)" +<SETG PIOXFLG 15> ;"ANY, flag to determine whether file has been extended" + +<GDECL (PIOFPTR PIOFSPC PIOMODE PIOPLIM PIOPMOD + PIOCFIL PIOPNUM PIOPMAP PIOCMAP PIOFTBL PIOXFLG + PIOFLNT PIOFSTA PIOCSIZ PIOCLNT) FIX> + +<MANIFEST PIOFPTR PIOFSPC PIOMODE PIOPLIM PIOPMOD + PIOCFIL PIOPNUM PIOPMAP PIOCMAP PIOFTBL PIOXFLG + PIOFLNT PIOFSTA PIOCSIZ PIOCLNT> + +<GDECL (PIOWBIT PIOTBIT PIOLHWBIT PIORHWBIT) BITS + (PIOTBIN PIOTRMAP PIOTRWMAP PIOTCWMAP PIOTUNMAP PIOTNWPAG) FIX> + +<SETG PIOLHWBIT <BITS 18 18>> + +<SETG PIORHWBIT <BITS 18 0>> + +<SETG PIOWBIT <BITS 1 35>> + +<SETG PIOTBIT <BITS 3 30>> + +<SETG PIOTBIN 1> ;"Not mapped, BINARY page" +<SETG PIOTRMAP 2> ;"READ-ONLY page" +<SETG PIOTRWMAP 3> ;"READ-WRITE page" +<SETG PIOTCWMAP 4> ;"COPY-ON-WRITE page" +<SETG PIOTUNMAP 5> ;"UNMAP page" +<SETG PIOTNWPAG 6> ;"Get NEW page" + +<MANIFEST PIOLHWBIT PIORHWBIT PIOWBIT PIOTBIT PIOTBIN PIOTRMAP PIOTRWMAP PIOTCWMAP + PIOTUNMAP PIOTNWPAG> + + +"******** FUNCTIONS PREFIXED WITH 'PIO' ARE OPERATING-SYSTEM-DEPENDENT **********" + +%<COND (,PIO-TENEX? +'<DEFINE PIO-FILE-OPEN (FILSPC MODENUM + "AUX" FILPTR VAL (FILJFN <>) + (MODEUV '![-30064705536 -30064672768!]) + (FLAGUV ![*100000000000* 0!])) + #DECL ((VALUE) <OR JFN FALSE> (FILPTR) JFN + (FILSPC) <OR STRING JFN> + (MODENUM) FIX (MODEUV FLAGUV) <UVECTOR [REST FIX]> (VAL) ANY + (FILJFN) <OR JFN FALSE>) + <COND (<AND <OR <TYPE? <SET VAL .FILSPC> JFN> + <SET VAL <GET-FILE .FILSPC <NTH .FLAGUV .MODENUM>>> + <AND <==? 2 .MODENUM> + <G=? <LENGTH .VAL> 1> + <==? <1 .VAL> *600100*> + <SET VAL <GET-FILE .FILSPC *400000000000*>>>> + <SET FILJFN .VAL> + <SET VAL + <OPEN-FILE <SET FILPTR .FILJFN> + <NTH .MODEUV .MODENUM>>>> + .FILPTR) + (ELSE + <COND (<TYPE? .FILJFN JFN> <RELEASE-FILE .FILJFN>)> + "*********DECODE ERROR RESPONSE*************" + <CHTYPE (1) FALSE>)>>) + ( +'<DEFINE PIO-FILE-OPEN (FILSPC MODENUM + "AUX" CHAN) + #DECL ((VALUE CHAN) <OR CHANNEL FALSE> + (FILSPC) <OR STRING CHANNEL> + (MODENUM) FIX) +<COND (<==? 1 .MODENUM> + <COND (<AND <TYPE? .FILSPC STRING> + <TYPE? <SET CHAN <OPEN "READB" .FILSPC>> CHANNEL>> + .CHAN) + (<AND <TYPE? .FILSPC CHANNEL> + <OR <0? <1 .FILSPC>> <CLOSE .FILSPC>> + <PUT .FILSPC 2 "READB"> + <SET CHAN <RESET .FILSPC>>> + .CHAN) + (<AND <ASSIGNED? CHAN> + <TYPE? .CHAN FALSE> + <G=? <LENGTH .CHAN> 1> + <COND (<=? "FILE NOT FOUND" <1 .CHAN>> + <CHTYPE (3) FALSE>) + (<=? "FILE LOCKED" <1 .CHAN>> + <CHTYPE (4) FALSE>)>>)>) + (<==? 2 .MODENUM> + <COND (<AND <TYPE? .FILSPC CHANNEL> + <OR <0? <1 .FILSPC>> <CLOSE .FILSPC>> + <PUT .FILSPC 2 "PRINTO"> + <COND (<SET CHAN <RESET .FILSPC>>) + (<G=? <LENGTH .CHAN> 1> + <COND (<=? "FILE NOT FOUND" <1 .CHAN>> + <CHTYPE (3) FALSE>) + (<=? "FILE LOCKED" <1 .CHAN>> + <CHTYPE (4) FALSE>)>)>>) + (<TYPE? .FILSPC STRING> + <COND (<SET CHAN <OPEN "PRINTO" .FILSPC>>) + (<AND <ASSIGNED? CHAN> + <TYPE? .CHAN FALSE> + <G=? <LENGTH .CHAN> 1>> + <COND (<=? "FILE LOCKED" <1 .CHAN>> + <CHTYPE (4) FALSE>) + (<AND <=? "FILE NOT FOUND" <1 .CHAN>> + <SET CHAN <OPEN "PRINT" .FILSPC>> + <CLOSE .CHAN>> + <SET CHAN <OPEN "PRINTO" .FILSPC>>)>)>)>)>>)>)> + +%<COND (,PIO-TENEX? +'<DEFINE PIO-FILE-CLOSE (FILPTR) + #DECL ((FILPTR) JFN (VALUE) <OR JFN FALSE>) + <OR <CLOSE-FILE .FILPTR 1> + <ERROR CLOSE-FILE-ERROR!-ERRORS .FILPTR>>>) + ( +'<SETG PIO-FILE-CLOSE ,CLOSE>)> + +%<COND (,PIO-TENEX? +'<DEFINE PIO-FILE-FLUSH (FILPTR) + #DECL ((VALUE) <OR JFN FALSE> (FILPTR) JFN) + <OR <RELEASE-FILE .FILPTR> + <ERROR RELEASE-FILE-ERROR!-ERRORS .FILPTR>>>) + ( +'<SETG PIO-FILE-FLUSH ,CLOSE>)> + + +%<COND (,PIO-TENEX? +'<DEFINE PIO-NAME-OF-FILE (FILPTR) +#DECL ((FILPTR) JFN (VALUE) <OR STRING FALSE>) +<NAME-OF-FILE .FILPTR>>) + ( +'<DEFINE PIO-NAME-OF-FILE (CHAN) +#DECL ((CHAN) CHANNEL (VALUE) <OR STRING FALSE>) +<FILSTR <7 .CHAN> <8 .CHAN> <9 .CHAN> <10 .CHAN>>>)> + +%<COND (,PIO-TENEX? +'<DEFINE PIO-FILE-LENGTH (FILPTR) + #DECL ((VALUE) FIX (FILPTR) JFN) + <COND (,PIO-PRINT-ACTION + <PRINC " +Reading length of '"> + <PRINC <NAME-OF-FILE .FILPTR>> + <PRINC "'.">)> + <OR <LENGTH-OF-FILE .FILPTR> + <ERROR FILE-LENGTH!-ERROR .FILPTR>>>) + ( +'<DEFINE PIO-FILE-LENGTH (CHAN) + #DECL ((VALUE) FIX (CHAN) CHANNEL) + <COND (,PIO-PRINT-ACTION + <PRINC " +Reading length of '"> + <PRINC <PIO-NAME-OF-FILE .CHAN>> + <PRINC "'.">)> + <*FILE-LENGTH .CHAN>>)> + + +%<COND (,PIO-TENEX?) + ( +'<DEFINE PIO-SET-DIRECTION (CHAN DIR) +#DECL ((CHAN) CHANNEL (DIR) FIX) +<COND (<==? 1 .DIR> + <COND (<=? <2 .CHAN> "READB">) + (ELSE + <COND (,PIO-PRINT-ACTION + <PRINC " +Resetting '"> + <PRINC <PIO-NAME-OF-FILE .CHAN>> + <PRINC "' to READB mode.">)> + <PUT .CHAN 2 "READB"> + <COND (<RESET .CHAN>) + (<ERROR COULDNT-RESET-CHANNEL-TO-READB!-ERRORS .CHAN>)>)>) + (<==? 2 .DIR> + <COND (<=? <2 .CHAN> "PRINTO">) + (ELSE + <COND (,PIO-PRINT-ACTION + <PRINC " +Resetting '"> + <PRINC <PIO-NAME-OF-FILE .CHAN>> + <PRINC "' to PRINTO mode.">)> + <PUT .CHAN 2 "PRINTO"> + <REPEAT ((CNT 10)) + #DECL ((CNT) FIX (VAL) <OR CHANNEL FALSE>) + <COND (<SET VAL <RESET .CHAN>> <RETURN .VAL>) + (<AND <==? 1 <LENGTH .VAL>> + <=? "FILE LOCKED" <1 .VAL>> + <G? <SET CNT <- .CNT 1>> 0>> + <SLEEP 2>) + (<ERROR COULDNT-RESET-CHANNEL-TO-PRINTO!-ERRORS + .CHAN + .VAL + ERRET-ANYTHING-TO-RETRY!-ERRORS>)>>)>)>>)> + + +%<COND (,PIO-TENEX? +'<DEFINE PIO-READP-FILE (FILPTR UV LNT ADR) + #DECL ((FILPTR) JFN (UV) <OR UVECTOR FIX> (LNT ADR) FIX + (VALUE) <OR FIX UVECTOR FALSE>) + <COND (,PIO-PRINT-ACTION + <PRINC " +Reading "> + <PRIN1 .LNT> + <PRINC " words from location "> + <PRIN1 .ADR> + <PRINC " of file '"> + <PRINC <NAME-OF-FILE .FILPTR>> + <COND (<TYPE? .UV FIX> <PRINC "' into location "> <PRIN1 .UV>) + (<PRINC "' into a UVECTOR.">)>)> +<COND (<AND <ACCESS-FILE .FILPTR .ADR> + <READP-FILE .FILPTR .UV .LNT>>) + (<ERROR READP-ERROR!-ERRORS .FILPTR .UV .LNT>)>>) + ( +'<DEFINE PIO-READP-FILE (CHAN UV LNT ADR) + #DECL ((CHAN) CHANNEL (UV) <OR UVECTOR FIX> (LNT ADR) FIX + (VALUE) <OR FIX UVECTOR FALSE>) +<PIO-SET-DIRECTION .CHAN 1> + <COND (,PIO-PRINT-ACTION + <PRINC " +Reading "> + <PRIN1 .LNT> + <PRINC " words from location "> + <PRIN1 .ADR> + <PRINC " of file '"> + <PRINC <PIO-NAME-OF-FILE .CHAN>> + <COND (<TYPE? .UV FIX> <PRINC "' into location "> <PRIN1 .UV>) + (<PRINC "' into a UVECTOR.">)>)> +<COND (<AND <ACCESS .CHAN .ADR> + <IOT-FILE .CHAN .UV .LNT>>) + (<ERROR READP-ERROR!-ERRORS .CHAN .UV .LNT>)>>)> + +%<COND (,PIO-TENEX? +'<DEFINE PIO-READW-FILE (FILPTR ADR) + #DECL ((FILPTR) JFN (ADR) FIX (VALUE) <OR WORD FALSE>) + <COND (,PIO-PRINT-ACTION + <PRINC " +Reading a single word from location "> + <PRIN1 .ADR> + <PRINC " in file '"> + <PRINC <NAME-OF-FILE .FILPTR>> + <PRINC "'.">)> +<COND (<READW-FILE .FILPTR .ADR>) + (<ERROR READW-ERROR!-ERRORS .FILPTR .ADR>)>>) + ( +'<DEFINE PIO-READW-FILE (CHAN ADR) + #DECL ((CHAN) CHANNEL (ADR) FIX (VALUE) <OR WORD FALSE> (UV) UVECTOR) +<PIO-SET-DIRECTION .CHAN 1> + <COND (,PIO-PRINT-ACTION + <PRINC " +Reading a single word from location "> + <PRIN1 .ADR> + <PRINC " in file '"> + <PRINC <PIO-NAME-OF-FILE .CHAN>> + <PRINC "'.">)> + <COND (<AND <ACCESS .CHAN .ADR> + <IOT-FILE .CHAN <SET UV ,PIO-SCRATCH-SINGLE-UVECTOR> 1>> + <CHTYPE <1 .UV> WORD>) + (<ERROR READW-ERROR!-ERRORS .CHAN .ADR>)>>)> + + +%<COND (,PIO-TENEX? +'<DEFINE PIO-PRINTP-FILE (FILPTR UV LNT ADR) + #DECL ((FILPTR) JFN (UV) <OR UVECTOR FIX> (LNT ADR) FIX + (VALUE) <OR FIX UVECTOR FALSE>) + <COND (,PIO-PRINT-ACTION + <PRINC " +Writing "> + <PRIN1 .LNT> + <PRINC " words to location "> + <PRIN1 .ADR> + <PRINC " of file '"> + <PRINC <NAME-OF-FILE .FILPTR>> + <COND (<TYPE? .UV UVECTOR> <PRINC "' from a UVECTOR.">) + (<TYPE? .UV FIX> <PRINC "' from location "> <PRIN1 .UV>)>)> +<COND (<AND <ACCESS-FILE .FILPTR .ADR> + <PRINTP-FILE .FILPTR .UV .LNT>>) + (<ERROR PRINTP-ERROR!-ERRORS .FILPTR .UV .LNT>)>>) + ( +'<DEFINE PIO-PRINTP-FILE (CHAN UV LNT ADR) + #DECL ((CHAN) CHANNEL (UV) <OR UVECTOR FIX> (LNT ADR) FIX + (VALUE) <OR FIX UVECTOR FALSE>) +<PIO-SET-DIRECTION .CHAN 2> + <COND (,PIO-PRINT-ACTION + <PRINC " +Writing "> + <PRIN1 .LNT> + <PRINC " words to location "> + <PRIN1 .ADR> + <PRINC " of file '"> + <PRINC <PIO-NAME-OF-FILE .CHAN>> + <COND (<TYPE? .UV UVECTOR> <PRINC "' from a UVECTOR.">) + (<TYPE? .UV FIX> <PRINC "' from location "> <PRIN1 .UV>)>)> +<COND (<AND <ACCESS .CHAN .ADR> + <IOT-FILE .CHAN .UV .LNT>>) + (<ERROR PRINTP-ERROR!-ERRORS .CHAN .UV .LNT>)>>)> + +%<COND (,PIO-TENEX? +'<DEFINE PIO-PRINTW-FILE (FILPTR ADR WRD) + #DECL ((FILPTR) JFN (ADR WRD) FIX (VALUE) <OR FIX FALSE>) + <COND (,PIO-PRINT-ACTION + <PRINC " +Writing a single word to location "> + <PRIN1 .ADR> + <PRINC " in file '"> + <PRINC <NAME-OF-FILE .FILPTR>> + <PRINC "'.">)> +<COND (<PRINTW-FILE .FILPTR .ADR .WRD>) + (<ERROR PRINTW-ERROR!-ERRORS .FILPTR .ADR .WRD>)>>) + ( +'<DEFINE PIO-PRINTW-FILE (CHAN ADR WRD) + #DECL ((CHAN) CHANNEL (ADR WRD) FIX (VALUE) <OR FIX FALSE>) +<PIO-SET-DIRECTION .CHAN 2> + <COND (,PIO-PRINT-ACTION + <PRINC " +Writing a single word to location "> + <PRIN1 .ADR> + <PRINC " in file '"> + <PRINC <PIO-NAME-OF-FILE .CHAN>> + <PRINC "'.">)> + <COND (<AND <ACCESS .CHAN .ADR> + <IOT-FILE .CHAN <PUT ,PIO-SCRATCH-SINGLE-UVECTOR 1 .WRD> 1>> + .ADR) + (<ERROR PRINTW-ERROR!-ERRORS .CHAN .ADR .WRD>)>>)> + +%<COND (,PIO-TENEX? +'<DEFINE PIO-PMAP-FILE (FILPTR FILPAG CORPAG MODE + "AUX" (MODEUV + '![0 + *100000000000* + *140000000000* + *140400000000* + 0 + 0!])) +#DECL ((FILPTR) <OR JFN FIX> (FILPAG CORPAG MODE) FIX + (MODEUV) <UVECTOR [REST FIX]>) +<COND (<L=? .MODE 0> + <SET MODE ,PIOTUNMAP>) + (<OR <==? .MODE ,PIOTUNMAP> + <==? .MODE ,PIOTNWPAG>> + <SET FILPTR -1> + <SET FILPAG -1>)> +<COND (,PIO-PRINT-ACTION + <COND (<OR <==? .MODE ,PIOTUNMAP> <==? .MODE ,PIOTNWMAP>> + <PRINC " +Flushing core page "> + <PRIN1 .CORPAG>) + (<PRINC " +Mapping page "> + <PRIN1 .FILPAG> + <PRINC " of file '"> + <PRINC <NAME-OF-FILE .FILPTR>> + <PRINC "' into core page "> + <PRIN1 .CORPAG> + <PRINC " in "> + <PRINC <NTH ["Unknown" + "Read-only" + "Read-Write" + "Copy-on-Write" + "Unmap" + "New-Page"] + .MODE>> + <PRINC " mode.">)>)> +<COND (<AND <L=? .MODE <LENGTH .MODEUV>> + <G? .MODE 0> + <SET MODE <NTH .MODEUV .MODE>> + <PMAP-FILE .FILPTR + <COND (<==? .FILPAG -1> -1) (<* .FILPAG 2>)> + *400000* + <* .CORPAG 2> + .MODE> + <PMAP-FILE .FILPTR + <COND (<==? .FILPAG -1> -1) (<+ 1 <* .FILPAG 2>>)> + *400000* + <+ 1 <* .CORPAG 2>> + .MODE>>) + (<ERROR PMAP-ERROR!-ERRORS .FILPTR .FILPAG .CORPAG .MODE>)>>) + ( +'<DEFINE PIO-PMAP-FILE (CHAN FILPAG CORPAG MODE + "AUX" (UNMAPFLG <>) CHANNUM (MODEUV + '![0 + *210000000000* + *500000000000* + *004000000000* + 0 + *500000000000*!])) + #DECL ((CHAN) <OR CHANNEL FIX> (FILPAG CORPAG MODE CHANNUM) FIX + (MODEUV) <UVECTOR [REST FIX]> + (UNMAPFLG) ANY) + <COND (,PIO-PRINT-ACTION + <COND (<==? .MODE ,PIOTUNMAP> + <PRINC " +Unmapping core page "> + <PRIN1 .CORPAG>) + (<==? .MODE ,PIOTNWPAG> + <PRINC " +Initializing core page "> + <PRIN1 .CORPAG>) + (<PRINC " +Mapping page "> + <PRIN1 .FILPAG> + <PRINC " of file '"> + <PRINC <PIO-NAME-OF-FILE .CHAN>> + <PRINC "' into core page "> + <PRIN1 .CORPAG> + <PRINC " in "> + <PRINC <NTH ["Unknown" + "Read-only" + "Read-Write" + "Copy-on-Write" + "Unmap" + "New-Page"] + .MODE>> + <PRINC " mode.">)>)> + <COND (<AND <OR <AND <TYPE? .CHAN CHANNEL> + <G? <SET CHANNUM <1 .CHAN>> 0>> + <AND <==? .MODE ,PIOTUNMAP> + <SET CHANNUM 0> + <SET FILPAG 0> + <SET UNMAPFLG T>> + <AND <==? .MODE ,PIOTNWPAG> + <SET CHANNUM -5> + <SET FILPAG 0>>> + <AND <L=? .MODE <LENGTH .MODEUV>> + <G? .MODE 0> + <SET MODE <NTH .MODEUV .MODE>> + <COND (<AND .UNMAPFLG + ,PIO-HANG-ON-UNMAP? + <COND (,PIO-PRINT-ACTION + <PRINC + ", hanging till written to disk.">) (T)> + <PAGE-WRITE .FILPAG>>) (T)> + <MAP-PAGE .MODE -1 .CORPAG .CHANNUM .FILPAG>>>) + (<ERROR PMAP-ERROR!-ERRORS .CHAN .FILPAG .CORPAG .MODE>)>>)> + +%<COND (,PIO-TENEX? +'<DEFINE PIO-EXTEND-FILE (FILPTR FADR TADR "AUX" (PG <GET-CLEAR-PAGE>)) + #DECL ((FILPTR) <OR JFN FALSE> (FADR TADR PG) FIX) + <COND (,PIO-PRINT-ACTION + <PRINC " +Extending file '"> + <PRINC <NAME-OF-FILE .FILPTR>> + <PRINC "' from location "> + <PRIN1 .FADR> + <PRINC " to location "> + <PRIN1 .TADR>)> + <COND (<G? .TADR .FADR> + <ACCESS-FILE .FILPTR .FADR> + <REPEAT ((LNT <- .TADR .FADR>)) + <COND (<G? .LNT 1024> + <PRINTP-FILE .FILPTR <* .PG 1024> 1024> + <SET LNT <- .LNT 1024>>) + (ELSE + <PRINTP-FILE .FILPTR <* .PG 1024> .LNT> + <RETURN>)>>)>>) + ( +'<DEFINE PIO-EXTEND-FILE (CHAN FADR TADR "AUX" (PG <GET-CLEAR-PAGE>)) + #DECL ((CHAN) CHANNEL (FADR TADR PG) FIX) +<PIO-SET-DIRECTION .CHAN 2> + <COND (,PIO-PRINT-ACTION + <PRINC " +Extending file '"> + <PRINC <PIO-NAME-OF-FILE .CHAN>> + <PRINC "' from location "> + <PRIN1 .FADR> + <PRINC " to location "> + <PRIN1 .TADR>)> + <COND (<G? .TADR .FADR> + <ACCESS .CHAN .FADR> + <REPEAT ((LNT <- .TADR .FADR>)) + <COND (<G? .LNT 1024> + <IOT-FILE .CHAN <* .PG 1024> 1024> + <SET LNT <- .LNT 1024>>) + (ELSE + <IOT-FILE .CHAN <* .PG 1024> .LNT> + <RETURN>)>>)>>)> + +%<COND (,PIO-TENEX?) + ( +'<DEFINE PIO-FORCE-FILE (CHAN) +#DECL ((CHAN) CHANNEL) +<COND (<AND <TYPE? .CHAN CHANNEL> + <G? <1 .CHAN> 0>> + <COND (,PIO-PRINT-ACTION + <TERPRI> + <PRINC "Forcing buffer of "> + <PRINC <PIO-NAME-OF-FILE .CHAN>> + <PRINC " to be written out to disk.">)> + <CLOSE .CHAN> + <RESET .CHAN> ;<FLUSH-FILE .CHAN>)>>)> + + + +"********** INTERNAL FUNCTIONS WHICH ARE OS-INDEPENDENT ****************" + + +<DEFINE FIXUP-EXTENSIONS (CHAN "AUX" VAL ITSCHN) +#DECL ((CHAN) CHANP (VAL) ANY (ITSCHN) CHANNEL) +<COND (<AND <PIOXFLG .CHAN> + <NOT ,PIO-TENEX?>> + <COND (<OR <AND <==? 2 <PIOMODE .CHAN>> + <TYPE? <SET VAL <PIOFPTR .CHAN>> CHANNEL> + <G? <1 <SET ITSCHN .VAL>> 0>> + <AND <==? 3 <PIOMODE .CHAN>> + <TYPE? <SET VAL <PIOCFIL .CHAN>> CHANNEL> + <G? <1 <SET ITSCHN .VAL>> 0>>> + <PIO-FORCE-FILE .ITSCHN> + <PROG () <PUT .CHAN ,PIOXFLG <>> T>)>)>> + + + +<DEFINE FLUSH-PAGE (CHAN PGMPUV + "OPTIONAL" (UNMAPFLG ,PIO-HANG-ON-UNMAP?) + "AUX" VAL FILPTR ADR) + #DECL ((CHAN) CHANP (PGMPUV) UVECTOR (FILPTR) <OR JFN CHANNEL> (VAL UNMAPFLG) ANY + (ADR) FIX) + <COND + (<AND <G=? <1 .PGMPUV> 0> <G=? <2 .PGMPUV> 0>> + <COND + (<AND + <1? <CHTYPE <GETBITS <3 .PGMPUV> ,PIOWBIT> FIX>> + <OR <==? ,PIOTBIN + <SET VAL <CHTYPE <GETBITS <3 .PGMPUV> ,PIOTBIT> FIX>>> + <==? ,PIOTCWMAP .VAL>> + <COND (<AND <==? 3 <PIOMODE .CHAN>> + <OR <AND <TYPE? <PIOCMAP .CHAN> UVECTOR> + <SET VAL + <SEARCH-CACHE-MAP + <PIOCMAP .CHAN> <1 .PGMPUV>>>> + <SET VAL <ASSIGN-CACHE-PAGE .CHAN <1 .PGMPUV> <>>>>> + <SET FILPTR <PIOCFIL .CHAN>> + <SET ADR <* .VAL 1024>>) + (<==? 2 <PIOMODE .CHAN>> + <SET ADR <* <1 .PGMPUV> 1024>> + <SET FILPTR <PIOFPTR .CHAN>>)>> + <PIO-PRINTP-FILE .FILPTR <* <2 .PGMPUV> 1024> 1024 .ADR> + <PUT .CHAN ,PIOXFLG T> + <PUT .PGMPUV 3 <PUTBITS <3 .PGMPUV> ,PIOWBIT 0>>)> + <COND (.UNMAPFLG + <PIO-PMAP-FILE -1 -1 <2 .PGMPUV> ,PIOTUNMAP>)> + <PUT .PGMPUV 1 -1> + <PUT .PGMPUV 3 0> + .PGMPUV)>> + +<DEFINE ASSIGN-CACHE-PAGE (CHAN PG PFLG "AUX" CPG OCPG FADR) + #DECL ((VALUE) FIX (CHAN) CHANP (PG CPG OCPG FADR) FIX (PFLG) ANY) + <PUT .CHAN + ,PIOCMAP + <INSERT-INTO-CACHE-MAP + <OR <PIOCMAP .CHAN> '![!]> + .PG + <SET CPG <+ 1 <SET OCPG <PIOCSIZ .CHAN>>>>>> + <COND (.PFLG + <COND (<0? .OCPG> <SET FADR 0>) (<SET FADR <* .CPG 1024>>)> + <PIO-EXTEND-FILE <PIOCFIL .CHAN> .FADR <* <+ 1 .CPG> 1024>> + <PUT .CHAN ,PIOXFLG T>) + (<0? .OCPG> + <PIO-EXTEND-FILE <PIOCFIL .CHAN> 0 1024> + <PUT .CHAN ,PIOXFLG T>)> + <PUT .CHAN ,PIOCSIZ .CPG> + .CPG> + + +<DEFINE FIND-LRU-PAGE (PGMPUV) + #DECL ((VALUE) <OR UVECTOR FALSE> (PGMPUV) UVECTOR) + <REPEAT ((UV <>)) + #DECL ((UV) <OR UVECTOR FALSE>) + <COND (<EMPTY? .PGMPUV> <RETURN .UV>) + (<AND <G=? <1 .PGMPUV> 0> + <OR <NOT .UV> <L? <4 .PGMPUV> <4 .UV>>>> + <SET UV .PGMPUV>)> + <SET PGMPUV <REST .PGMPUV 4>>>> + +<DEFINE GET-PAGE (CHAN "AUX" PGMPUV PG) + #DECL ((VALUE) UVECTOR (CHAN) CHANP (PGMPUV) UVECTOR (PG) FIX) + <COND (<L? <PIOPNUM .CHAN> <PIOPLIM .CHAN>> + <SET PG <FIND-PAGE>> + <REPEAT ((PGMPUV <PIOPMAP .CHAN>)) + #DECL ((PGMPUV) UVECTOR) + <COND (<EMPTY? .PGMPUV> + <ERROR NO-EMPTY-SLOT-IN-PAGE-MAP!-ERRORS .PGMPUV>) + (<L? <1 .PGMPUV> 0> + <PUT .PGMPUV 2 .PG> + <PUT .CHAN ,PIOPNUM <+ 1 <PIOPNUM .CHAN>>> + <PUT .PGMPUV 3 0> + <RETURN .PGMPUV>)> + <SET PGMPUV <REST .PGMPUV 4>>>) + (<SET PGMPUV <FIND-LRU-PAGE <PIOPMAP .CHAN>>> + <FLUSH-PAGE .CHAN .PGMPUV> + .PGMPUV)>> + +<DEFINE FIND-PAGE ("OPTIONAL" (UNMAPFLG ,PIO-HANG-ON-UNMAP?) "AUX" PG VAL) + #DECL ((PG) <OR FIX FALSE> (VALUE) FIX (VAL UNMAPFLG) ANY) + <COND + (<AND <G? ,PIO-PAGE-LIMIT ,PIO-PAGE-COUNT> + <TYPE? <SET PG <PIO-PAGE-FIND 1>> FIX>> + <AND .UNMAPFLG <PIO-PMAP-FILE -1 -1 .PG ,PIOTUNMAP>> + <SETG PIO-PAGE-COUNT <+ 1 ,PIO-PAGE-COUNT>> + .PG) + (ELSE + <REPEAT ((V ,PIOCHANVCT) (CHAN <>) (PGMPUV <>)) + #DECL ((V) VECTOR (CHAN) <OR CHANP FALSE> (PGMPUV) <OR UVECTOR FALSE>) + <COND (<EMPTY? .V> + <COND (<AND .CHAN .PGMPUV> + <SET PG <2 .PGMPUV>> + <FLUSH-PAGE .CHAN .PGMPUV .UNMAPFLG> + <PUT .CHAN ,PIOPNUM <- <PIOPNUM .CHAN> 1>> + <PUT .PGMPUV 2 -1> + <RETURN .PG>) + (<ERROR CANT-GET-A-FREE-PAGE-ANYWHERE!-ERRORS>)>) + (<AND <TYPE? <1 .V> CHANP> + <SET VAL <FIND-LRU-PAGE <PIOPMAP <1 .V>>>> + <OR <NOT .CHAN> <NOT .PGMPUV> <L? <4 .VAL> <4 .PGMPUV>>>> + <SET CHAN <1 .V>> + <SET PGMPUV .VAL>)> + <SET V <REST .V>>>)>> + +<DEFINE GIVE-PAGE (PG) + #DECL ((PG) FIX) + <PIO-PAGE-GIVE .PG 1> + <SETG PIO-PAGE-COUNT <- ,PIO-PAGE-COUNT 1>>> + +<DEFINE GET-CLEAR-PAGE ("AUX" PG) + #DECL ((PG VALUE) FIX) +<COND (<AND <GASSIGNED? PIO-CLEAR-PAGE> + <TYPE? ,PIO-CLEAR-PAGE FIX>> + <SET PG ,PIO-CLEAR-PAGE>) + (<SET PG <SETG PIO-CLEAR-PAGE <FIND-PAGE T>>>)> +<PIO-PMAP-FILE -1 -1 .PG ,PIOTNWPAG> +<FILL-UP <* .PG 1024> 1024 0> +.PG> + + +<DEFINE GET-ALLOC-TABLE (CHAN "AUX" VAL ADR TBL) +#DECL ((VALUE) <OR UVECTOR FALSE> (CHAN) CHANP (ADR) FIX + (TBL) <UVECTOR [REST FIX]> + (VAL) ANY) +<COND (<==? 1 <PIOMODE .CHAN>> <CHTYPE (9) FALSE>) + (<TYPE? <SET VAL <PIOFTBL .CHAN>> UVECTOR> .VAL) + (<AND <TYPE? <SET VAL <PIOFTBL .CHAN>> FIX> + <G? .VAL 0>> + <SET ADR .VAL> + <COND (<AND <SET VAL <READP .CHAN <- .ADR 1>>> + <SET VAL <CHTYPE .VAL FIX>> + <COND (<0? <MOD .VAL 2>>) + (<SET VAL <- .VAL 1>>)> + <G? .VAL 0> + <L? .VAL *400000*> + <SET TBL <IUVECTOR .VAL 0>> + <READP .CHAN .ADR .TBL>> + <PUT .CHAN ,PIOFTBL .TBL> + <DALLOCP .CHAN .ADR> + <PIOFTBL .CHAN>) + (<ERROR COULDNT-FIND-ALLOCATION-TABLE .CHAN .ADR .VAL>)>) + (<SET TBL <IUVECTOR 10 0>> + <PUT .CHAN ,PIOFTBL .TBL> + .TBL)>> + + + +<DEFINE SAVE-ALLOC-TABLE (CHAN "AUX" TBL VAL ADR LNT) +#DECL ((VALUE) <OR 'T FALSE> (CHAN) CHANP (ADR LNT) FIX + (TBL) <UVECTOR [REST FIX]> + (VAL) ANY) +<COND (<==? 1 <PIOMODE .CHAN>> T) + (<AND <TYPE? <SET VAL <PIOFTBL .CHAN>> UVECTOR> + <G? <LENGTH <SET TBL .VAL>> 1> + <G? <2 .TBL> 0>> + <COND (<SET VAL <ALLOCP .CHAN <SET LNT <+ 4 <* <2 .TBL> 2>>> 0>> + <PRINTP .CHAN <SET ADR .VAL> <PIOFTBL .CHAN> .LNT> + <PRINTP .CHAN 0 .ADR 1> + <PUT .CHAN ,PIOFTBL .ADR> + T) + (<ERROR COULDNT-ALLOCATE-SPACE-FOR-TABLE .CHAN .LNT .TBL>)>) + (<TYPE? <PIOFTBL .CHAN> UVECTOR> + <PRINTP .CHAN 0 0 1> + <PUT .CHAN ,PIOFTBL 0> + T) + (T)>> + + +"************ ENTRY POINTS OF 'PIO' PACKAGE *****************" + +<DEFINE CHANP (FILPTR FILSPC MODENUM PAGLIM PAGMODE CACHEFILE FILNTH FTBLADR + "AUX" CHAN VAL) + #DECL ((CHAN VALUE) CHANP (FILSPC) STRING (MODENUM PAGLIM FILNTH) FIX + (CACHEFILE) <OR JFN CHANNEL FALSE> (FILPTR) <OR JFN CHANNEL> + (VAL PAGMODE) ANY + (FTBLADR) <OR FIX FALSE>) + <SET CHAN + <CHTYPE <VECTOR .FILSPC + .MODENUM + .FILPTR + .FILNTH + .CACHEFILE + .FILNTH + .PAGLIM + 0 + <IUVECTOR <* .PAGLIM 4> -1> + 0 + <> + .PAGMODE + T + .FTBLADR + <>> + CHANP>> + <COND (<SET VAL <MEMBER <> ,PIOCHANVCT>> <PUT .VAL 1 .CHAN>) + (<SETG PIOCHANVCT + <VECTOR !,PIOCHANVCT .CHAN !<IUVECTOR 10 <>>>>)> + .CHAN> + +<DEFINE OPENP (MODESTR FILSPC + "OPTIONAL" PAGLIM PAGMODE CACHEFILE + "AUX" (FTBLADR <>) VAL MODENUM FILPTR CACHEFILPTR LNT) + #DECL ((FILSPC MODESTR) STRING (PAGLIM MODENUM LNT) FIX + (PAGMODE VAL) ANY (CACHEFILE) <OR FALSE STRING> + (FILPTR CACHEFILPTR) <OR FALSE JFN CHANNEL> + (FTBLADR) <OR FIX FALSE>) + <PROG () + <COND (<AND <ASSIGNED? PAGLIM> + <TYPE? .PAGLIM FIX> + <G? .PAGLIM 0>>) + (<SET PAGLIM ,PIO-DEFAULT-PAGE-LIMIT>)> + <COND (<ASSIGNED? PAGMODE>) + (<SET PAGMODE ,PIO-DEFAULT-IO-MODE>)> + <COND (<AND <ASSIGNED? CACHEFILE> <TYPE? .CACHEFILE STRING>>) + (<SET CACHEFILE <>>)> + <COND (<=? "READ" .MODESTR> <SET MODENUM 1>) + (<=? "PRINT" .MODESTR> <SET MODENUM 2>) + (<=? "DEFER" .MODESTR> <SET MODENUM 3>) + (ELSE <RETURN <CHTYPE (2) FALSE>>)> + <COND (<SET FILPTR + <PIO-FILE-OPEN .FILSPC + <COND (<==? .MODENUM 3> 1) + (.MODENUM)>>>) + (<AND <==? 3 .MODENUM> + <SET FILPTR <PIO-FILE-OPEN .FILSPC 2>> + <PIO-FILE-CLOSE .FILPTR> + <PIO-FILE-OPEN .FILPTR 1>>) + (ELSE <RETURN .FILPTR>)> + <COND (<G? <SET LNT <PIO-FILE-LENGTH .FILPTR>> 0> + <SET VAL <PIO-READW-FILE .FILPTR 0>> + <COND (<1? <CHTYPE <GETBITS .VAL ,PIOWBIT> FIX>> + <PIO-FILE-CLOSE .FILPTR> + <PIO-FILE-FLUSH .FILPTR> + <RETURN <CHTYPE (12) FALSE>>)> + <SET FTBLADR <CHTYPE <GETBITS .VAL %<BITS 35 0>> FIX>>)> + <COND (<==? .MODENUM 3> + <COND (<SET CACHEFILPTR <PIO-FILE-OPEN .CACHEFILE 2>>) + (<RETURN .CACHEFILPTR>)>) + (<SET CACHEFILPTR <>>)> + <CHANP .FILPTR + .FILSPC + .MODENUM + .PAGLIM + .PAGMODE + .CACHEFILPTR + .LNT + .FTBLADR>>> + +<DEFINE CLOSEP (CHAN "AUX" VAL) + #DECL ((VALUE) 'T (CHAN) CHANP (VAL) <OR VECTOR FALSE>) + <FLUSHP .CHAN> + <COND (<SET VAL <MEMBER .CHAN ,PIOCHANVCT>> <PUT .VAL 1 <>>)> + <AND <PIOFPTR .CHAN> <PIO-FILE-FLUSH <PIOFPTR .CHAN>>> + <PUT .CHAN ,PIOFPTR <>> + <AND <PIOCFIL .CHAN> <PIO-FILE-CLOSE <PIOCFIL .CHAN>> + <PIO-FILE-FLUSH <PIOCFIL .CHAN>>> + <PUT .CHAN ,PIOCFIL <>> + <PUT .CHAN ,PIOCMAP <>> + <AND <==? 3 <PIOMODE .CHAN>> <PUT .CHAN ,PIOMODE 1>> + T> + +<DEFINE FLUSHP (CHAN "AUX" PGMPUV) + #DECL ((VALUE) <OR CHANP FALSE> (CHAN) CHANP + (PGMPUV) <UVECTOR [REST FIX]>) + <COND (<AND <PIOFPTR .CHAN> + <TYPE? <PIOFTBL .CHAN> UVECTOR>> + <SAVE-ALLOC-TABLE .CHAN>)> + <COND (<AND <G? <PIOPNUM .CHAN> 0> <PIOFPTR .CHAN>> + <COND (<==? 0 <MOD <LENGTH <SET PGMPUV <PIOPMAP .CHAN>>> 4>> + <REPEAT () + <COND (<EMPTY? .PGMPUV> <RETURN>) + (<G=? <1 .PGMPUV> 0> + <FLUSH-PAGE .CHAN .PGMPUV T> + <GIVE-PAGE <2 .PGMPUV>> + <PUT .PGMPUV 2 -1>)> + <SET PGMPUV <REST .PGMPUV 4>>>) + (ELSE <ERROR BAD-PAGE-MAP!-ERRORS .CHAN .PGMPUV>)>)> + <AND <PIOFPTR .CHAN> + <PIOFSTA .CHAN> + <PIO-FILE-CLOSE <PIOFPTR .CHAN>>> + <PUT .CHAN ,PIOFSTA <>> + <PUT .CHAN ,PIOPNUM 0> + .CHAN> + +<DEFINE RESETP (CHAN "AUX" VAL) + #DECL ((CHAN) CHANP (VAL) ANY) + <FLUSHP .CHAN> + <COND (<NOT <PIOFPTR .CHAN>> <SET VAL <PIOFSPC .CHAN>>) + (<SET VAL <PIOFPTR .CHAN>>)> + <COND (<SET VAL + <PIO-FILE-OPEN .VAL + <COND (<==? <PIOMODE .CHAN> 3> 1) + (<PIOMODE .CHAN>)>>> + <PUT .CHAN ,PIOFPTR .VAL> + <PUT .CHAN ,PIOFLNT <PIO-FILE-LENGTH <PIOFPTR .CHAN>>> + <PUT .CHAN ,PIOFSTA T>) + (ELSE <ERROR COULDNT-RESET-CHANP!-ERRORS .CHAN .VAL>)>> + +<DEFINE READP (CHAN ADR + "OPTIONAL" (DAT <>) DATLNT PGMOD + "AUX" VAL DUV RV PGMPUV FILPTR PG) + #DECL ((VALUE) <OR UVECTOR WORD FALSE> (CHAN) CHANP (ADR PG) FIX + (DAT) <OR UVECTOR <PRIMTYPE WORD> FALSE> + (DATLNT) <OR FIX FALSE> + (PGMOD VAL) ANY (DUV) <OR UVECTOR WORD> (PGMPUV) UVECTOR + (RV) VECTOR (FILPTR) <OR JFN CHANNEL>) + <SETG PIO-RECURSION-COUNT <+ 1 ,PIO-RECURSION-COUNT>> + <SET VAL + <PROG () + <COND (<TYPE? .CHAN CHANP>) (<RETURN <CHTYPE (5) FALSE>>)> + <COND (<NOT <PIOFSTA .CHAN>> <RESETP .CHAN>)> + <COND (<TYPE? .ADR FIX> + <COND (<L? .ADR 0> <RETURN <CHTYPE (7) FALSE>>)>) + (<RETURN <CHTYPE (6) FALSE>>)> + <COND (<TYPE? .DAT UVECTOR> + <COND (<EMPTY? .DAT> <RETURN .DAT>) (ELSE <SET DUV .DAT>)>) + (<TYPE? .DAT BITS> <SET DUV <CHTYPE .DAT WORD>>) + (ELSE <SET DUV ,PIO-UNIT-UV>)> + <COND (<AND <ASSIGNED? DATLNT> + <TYPE? .DATLNT FIX> + <G? .DATLNT 0> + <OR <AND <TYPE? .DUV UVECTOR> + <L=? .DATLNT <LENGTH .DUV>>> + <TYPE? .DUV WORD>>>) + (<TYPE? .DUV UVECTOR> + <SET DATLNT <LENGTH .DUV>>) + (<SET DATLNT 1>)> + <COND (<ASSIGNED? PGMOD>) + (ELSE <SET PGMOD <PIOPMOD .CHAN>>)> + <COND (<G? <+ .ADR .DATLNT> + <MAX <PIOFLNT .CHAN> <PIOCLNT .CHAN>>> + <RETURN <CHTYPE (8) FALSE>>)> + <SET RV <REQUEST-NORM .DUV + .DATLNT + .ADR + <COND (<1? ,PIO-RECURSION-COUNT> ,PIOREQVCT) + (<==? 2 ,PIO-RECURSION-COUNT> ,PIOREQVCT1) + (<==? 3 ,PIO-RECURSION-COUNT> ,PIOREQVCT2) + ('[])>>> + <SET RV <FILL-PAGE-REQUESTS .RV <PIOPMAP .CHAN> T>> + <COND + (<EMPTY? .RV>) + (<NOT .PGMOD> + <REPEAT () + <COND + (<EMPTY? .RV> <RETURN>) + (<1 .RV> + <SET PGMPUV <GET-PAGE .CHAN>> + <COND (<==? 1 <PIOMODE .CHAN>> + <PIO-PMAP-FILE <PIOFPTR .CHAN> + <1 .RV> + <2 .PGMPUV> + ,PIOTRMAP> + <PUT .PGMPUV 3 <PUTBITS 0 ,PIOTBIT ,PIOTRMAP>>) + (<==? 2 <PIOMODE .CHAN>> + <FIXUP-EXTENSIONS .CHAN> + <PIO-PMAP-FILE <PIOFPTR .CHAN> + <1 .RV> + <2 .PGMPUV> + ,PIOTRWMAP> + <PUT .PGMPUV 3 <PUTBITS 0 ,PIOTBIT ,PIOTRWMAP>>) + (<==? 3 <PIOMODE .CHAN>> + <FIXUP-EXTENSIONS .CHAN> + <COND (<AND <SET VAL <PIOCMAP .CHAN>> + <SET VAL <SEARCH-CACHE-MAP .VAL <1 .RV>>>> + <PIO-PMAP-FILE <PIOCFIL .CHAN> + .VAL + <2 .PGMPUV> + ,PIOTRWMAP> + <PUT .PGMPUV 3 <PUTBITS 0 ,PIOTBIT ,PIOTRWMAP>>) + (ELSE + <PIO-PMAP-FILE <PIOFPTR .CHAN> + <1 .RV> + <2 .PGMPUV> + ,PIOTCWMAP> + <PUT .PGMPUV 3 <PUTBITS 0 ,PIOTBIT ,PIOTCWMAP>>)>) + (<ERROR ILLEGAL-MODE!-ERRORS <PIOMODE .CHAN> .CHAN>)> + <PUT .PGMPUV 1 <1 .RV>> + <PUT .PGMPUV 4 <SETG PIO-REF-COUNT <+ 1 ,PIO-REF-COUNT>>> + <SET RV <FILL-PAGE-REQUESTS .RV <PIOPMAP .CHAN> T>>) + (<SET RV <REST .RV 4>>)>>) + (<AND .PGMOD + <OR <==? 1 <PIOMODE .CHAN>> <==? 2 <PIOMODE .CHAN>>>> + <REPEAT ((UV <>) (DADR 0) (LNT 0)) + #DECL ((UV) <OR UVECTOR FALSE> (DADR LNT) FIX) + <COND + (<OR <EMPTY? .RV> <TYPE? <1 .RV> FALSE>> + <COND + (.UV + <COND (<G? .LNT 1> + <PIO-READP-FILE <PIOFPTR .CHAN> .UV .LNT .DADR>) + (<1? .LNT> + <PUT .UV + 1 + <CHTYPE <PIO-READW-FILE <PIOFPTR .CHAN> .DADR> + <UTYPE .UV>>>)> + <SET UV <>>)> + <COND (<EMPTY? .RV> <RETURN>)>) + (.UV <SET LNT <+ .LNT <4 .RV>>>) + (<SET UV <3 .RV>> + <SET DADR <+ <* <1 .RV> 1024> <2 .RV>>> + <SET LNT <4 .RV>>)> + <SET RV <REST .RV 4>>>) + (<AND .PGMOD <==? <PIOMODE .CHAN> 3>> + <REPEAT () + <COND (<EMPTY? .RV> <RETURN>) + (<1 .RV> + <COND (<AND <SET VAL <PIOCMAP .CHAN>> + <SET VAL <SEARCH-CACHE-MAP .VAL <1 .RV>>>> + <SET PG .VAL> + <SET FILPTR <PIOCFIL .CHAN>>) + (ELSE <SET PG <1 .RV>> <SET FILPTR <PIOFPTR .CHAN>>)> + <COND (<G? <4 .RV> 1> + <PIO-READP-FILE .FILPTR <3 .RV> <4 .RV> + <+ <* .PG 1024> <2 .RV>>>) + (<1? <4 .RV>> + <PUT <3 .RV> + 1 + <CHTYPE <PIO-READW-FILE + .FILPTR <+ <* .PG 1024> <2 .RV>>> + <UTYPE <3 .RV>>>>)> + <PUT .RV 1 <>>)> + <SET RV <REST .RV 4>>>)> + <COND (<TYPE? .DAT UVECTOR> .DUV) + (<TYPE? .DUV UVECTOR> + <CHTYPE <1 .DUV> WORD>) + (.DUV)>>> + <AND <L? <SETG PIO-RECURSION-COUNT <- ,PIO-RECURSION-COUNT 1>> + 0> + <ERROR UNBALANCED-RECURSION-COUNT!-ERRORS + ,PIO-RECURSION-COUNT>> + .VAL> + +<DEFINE PRINTP (CHAN ADR DAT + "OPTIONAL" DATLNT PGMOD OLDADR + "AUX" DUV RV VAL PGMPUV UV DADR PG CPG LNT) + #DECL ((VALUE) <OR FIX FALSE> (CHAN) CHANP (ADR OLDADR DADR LNT PG CPG) FIX + (DAT) <OR UVECTOR <PRIMTYPE WORD>> + (DATLNT) <OR FIX FALSE> + (PGMOD VAL) ANY + (PGMPUV UV) UVECTOR + (DUV) <OR UVECTOR <PRIMTYPE WORD>>) + <SETG PIO-RECURSION-COUNT <+ 1 ,PIO-RECURSION-COUNT>> + <SET VAL + <PROG () + <COND (<TYPE? .CHAN CHANP>) (<RETURN <CHTYPE (5) FALSE>>)> + <COND (<NOT <PIOFSTA .CHAN>> <RESETP .CHAN>)> + <COND (<TYPE? .ADR FIX>) (<RETURN <CHTYPE (6) FALSE>>)> + <COND (<TYPE? .DAT UVECTOR> + <COND (<EMPTY? .DAT> <RETURN .ADR>)> + <SET DUV .DAT>) + (<TYPE? .DAT BITS> + <SET DUV <CHTYPE .DAT WORD>>) + (<1? ,PIO-RECURSION-COUNT> + <SET DUV <PUT ,PIO-UNIT-UV 1 <CHTYPE .DAT FIX>>>) + (<SET DUV <UVECTOR .DAT>>)> + <COND (<AND <ASSIGNED? DATLNT> + <TYPE? .DATLNT FIX> + <G? .DATLNT 0> + <OR <AND <TYPE? .DUV UVECTOR> + <L=? .DATLNT <LENGTH .DUV>>> + <TYPE? .DUV WORD>>>) + (<TYPE? .DUV UVECTOR> + <SET DATLNT <LENGTH .DUV>>) + (<SET DATLNT 1>)> + <COND (<OR <==? 2 <PIOMODE .CHAN>> <==? 3 <PIOMODE .CHAN>>>) + (<RETURN <CHTYPE (9) FALSE>>)> + <COND (<ASSIGNED? PGMOD>) (<SET PGMOD <PIOPMOD .CHAN>>)> + <COND (<AND <L? .ADR 0> + <ASSIGNED? OLDADR> + <TYPE? .OLDADR FIX> + <G? .OLDADR 0> + <SET VAL <READP .CHAN <- .OLDADR 1>>> + <G? <SET VAL <CHTYPE .VAL FIX>> 0> + <G=? .VAL .DATLNT>> + <SET ADR .OLDADR> + <SET OLDADR -1>) + (<L? .ADR 0> + <SET ADR <ALLOCP .CHAN .DATLNT>>)> + <COND (<AND <ASSIGNED? OLDADR> + <TYPE? .OLDADR FIX> + <G? .OLDADR 0>> + <DALLOCP .CHAN .OLDADR>)> + <SET RV <REQUEST-NORM .DUV + .DATLNT + .ADR + <COND (<1? ,PIO-RECURSION-COUNT> ,PIOREQVCT) + (<==? 2 ,PIO-RECURSION-COUNT> ,PIOREQVCT1) + (<==? 3 ,PIO-RECURSION-COUNT> ,PIOREQVCT2) + ('[])>>> + <COND (<AND <G? <+ .ADR .DATLNT> + <SET VAL <MAX <PIOFLNT .CHAN> <PIOCLNT .CHAN>>>> + <G? <MOD .VAL 1024> 0>> + <REPEAT ((PG </ .VAL 1024>) (UV <PIOPMAP .CHAN>)) + #DECL ((PG) FIX (UV) UVECTOR) + <COND (<EMPTY? .UV> <RETURN>) + (<==? <1 .UV> .PG> + <FLUSH-PAGE .CHAN .UV T> + <GIVE-PAGE <2 .UV>> + <PUT .UV 2 -1> + <PUT .CHAN ,PIOPNUM <- <PIOPNUM .CHAN> 1>> + <RETURN>)> + <SET UV <REST .UV 4>>>)> + <SET RV <FILL-PAGE-REQUESTS .RV <PIOPMAP .CHAN> <>>> + <COND + (<EMPTY? .RV>) + (<AND .PGMOD <==? 2 <PIOMODE .CHAN>>> + <REPEAT ((UV <>) (DADR 0) (LNT 0)) + #DECL ((UV) <OR UVECTOR FALSE> (DADR LNT) FIX) + <COND (<OR <EMPTY? .RV> <TYPE? <1 .RV> FALSE>> + <COND (.UV + <COND (<G? .DADR <PIOFLNT .CHAN>> + <PIO-EXTEND-FILE + <PIOFPTR .CHAN> <PIOFLNT .CHAN> .DADR>)> + <COND (<G? .LNT 1> + <PIO-PRINTP-FILE <PIOFPTR .CHAN> .UV .LNT .DADR>) + (<1? .LNT> + <PIO-PRINTW-FILE <PIOFPTR .CHAN> .DADR <1 .UV>>)> + <PUT .CHAN ,PIOXFLG T> + <COND (<G? <SET VAL <+ .DADR .LNT>> <PIOFLNT .CHAN>> + <PUT .CHAN ,PIOFLNT .VAL>)> + <SET UV <>>)> + <COND (<EMPTY? .RV> <RETURN>)>) + (.UV <SET LNT <+ .LNT <4 .RV>>>) + (<SET UV <3 .RV>> + <SET DADR <+ <* <1 .RV> 1024> <2 .RV>>> + <SET LNT <4 .RV>>)> + <SET RV <REST .RV 4>>>) + (<==? 2 <PIOMODE .CHAN>> + <REPEAT () + <COND + (<EMPTY? .RV> <RETURN>) + (<1 .RV> + <COND + (<L? <+ <* <1 .RV> 1024> <2 .RV> <4 .RV>> <PIOFLNT .CHAN>> + <FIXUP-EXTENSIONS .CHAN> + <SET PGMPUV <GET-PAGE .CHAN>> + <PIO-PMAP-FILE <PIOFPTR .CHAN> + <1 .RV> + <2 .PGMPUV> + ,PIOTRWMAP> + <PUT .PGMPUV 3 <PUTBITS 0 ,PIOTBIT ,PIOTRWMAP>> + <PUT .PGMPUV 1 <1 .RV>> + <PUT .PGMPUV 4 <SETG PIO-REF-COUNT <+ 1 ,PIO-REF-COUNT>>> + <SET RV <FILL-PAGE-REQUESTS .RV <PIOPMAP .CHAN> <>>>) + (ELSE + <SET UV <3 .RV>> + <SET DADR <+ <* <1 .RV> 1024> <2 .RV>>> + <SET LNT <4 .RV>> + <REPEAT ((FLG <>)) + #DECL ((FLG) ANY) + <SET RV <REST .RV 4>> + <COND + (<EMPTY? .RV> <RETURN>) + (<1 .RV> + <AND .FLG <ERROR NON-CONTIGUOUS-REQUEST-VECTOR!-ERRORS>> + <SET LNT <+ .LNT <4 .RV>>>) + (<SET FLG T>)>> + <COND (<G? .DADR <PIOFLNT .CHAN>> + <PIO-EXTEND-FILE <PIOFPTR .CHAN> <PIOFLNT .CHAN> .DADR>)> + <COND (<G? .LNT 1> + <PIO-PRINTP-FILE <PIOFPTR .CHAN> .UV .LNT .DADR>) + (<1? .LNT> <PIO-PRINTW-FILE <PIOFPTR .CHAN> .DADR <1 .UV>>)> + <PUT .CHAN ,PIOXFLG T> + <PUT .CHAN ,PIOFLNT <+ .DADR .LNT>>)>) + (<SET RV <REST .RV 4>>)>>) + (<==? 3 <PIOMODE .CHAN>> + <REPEAT () + <COND + (<EMPTY? .RV> <RETURN>) + (<NOT <1 .RV>> <SET RV <REST .RV 4>>) + (<AND <PIOCMAP .CHAN> + <SET VAL <SEARCH-CACHE-MAP <PIOCMAP .CHAN> <1 .RV>>>> + <SET CPG .VAL> + <COND + (<AND <L=? <+ <SET DADR <+ <* <1 .RV> 1024> <2 .RV>>> <4 .RV>> + <PIOCLNT .CHAN>> + <NOT .PGMOD>> + <FIXUP-EXTENSIONS .CHAN> + <SET PGMPUV <GET-PAGE .CHAN>> + <PIO-PMAP-FILE <PIOCFIL .CHAN> .CPG <2 .PGMPUV> ,PIOTRWMAP> + <PUT .PGMPUV 3 <PUTBITS 0 ,PIOTBIT ,PIOTRWMAP>> + <PUT .PGMPUV 1 <1 .RV>> + <PUT .PGMPUV 4 <SETG PIO-REF-COUNT <+ 1 ,PIO-REF-COUNT>>> + <SET RV <FILL-PAGE-REQUESTS .RV <PIOPMAP .CHAN> <>>>) + (ELSE + <COND (<G? .DADR <PIOCLNT .CHAN>> + <PIO-EXTEND-FILE + <PIOCFIL .CHAN> + <+ <* .CPG 1024> <MOD <PIOCLNT .CHAN> 1024>> + <+ <* .CPG 1024> <2 .RV>>>)> + <COND (<G? <4 .RV> 1> + <PIO-PRINTP-FILE <PIOCFIL .CHAN> <3 .RV> <4 .RV> + <+ <* .CPG 1024> <2 .RV>>>) + (<1? <4 .RV>> + <PIO-PRINTW-FILE <PIOCFIL .CHAN> + <+ <* .CPG 1024> <2 .RV>> + <1 <3 .RV>>>)> + <PUT .CHAN ,PIOXFLG T> + <PUT .CHAN + ,PIOCLNT + <MAX <PIOCLNT .CHAN> <+ .DADR <4 .RV>>>> + <PUT .RV 1 <>> + <SET RV <REST .RV 4>>)>) + (<AND <G? <PIOFLNT .CHAN> 0> + <L? <1 .RV> </ <PIOFLNT .CHAN> 1024>>> + <SET PGMPUV <GET-PAGE .CHAN>> + <OR ,PIO-TENEX? + <PIO-PMAP-FILE -1 -1 <2 .PGMPUV> ,PIOTUNMAP>> ;"GETS AROUND 'ITS' BUG" + <PIO-PMAP-FILE -1 -1 <2 .PGMPUV> ,PIOTNWPAG> + <PIO-READP-FILE <PIOFPTR .CHAN> <* <2 .PGMPUV> 1024> 1024 <* <1 .RV> 1024>> + <PUT .PGMPUV 3 <PUTBITS 0 ,PIOTBIT ,PIOTBIN>> + <PUT .PGMPUV 1 <1 .RV>> + <COND (.PGMOD <PUT .PGMPUV 4 0>) + (<PUT .PGMPUV 4 <SETG PIO-REF-COUNT <+ 1 ,PIO-REF-COUNT>>>)> + <ASSIGN-CACHE-PAGE .CHAN <1 .RV> <NOT .PGMOD>> + <SET RV <FILL-PAGE-REQUESTS .RV <PIOPMAP .CHAN> <>>>) + (<AND <G? <PIOFLNT .CHAN> 0> + <==? <1 .RV> </ <PIOFLNT .CHAN> 1024>> + <G? <SET LNT <MOD <PIOFLNT .CHAN> 1024>> 0>> + <SET CPG <ASSIGN-CACHE-PAGE .CHAN <1 .RV> <>>> + <SET PG <GET-CLEAR-PAGE>> + <PIO-READP-FILE <PIOFPTR .CHAN> <* .PG 1024> .LNT <* <1 .RV> 1024>> + <PIO-PRINTP-FILE <PIOCFIL .CHAN> + <* .PG 1024> + <MAX .LNT <2 .RV>> + <* .CPG 1024>> + <PUT .CHAN ,PIOXFLG T> + <PUT .CHAN + ,PIOCLNT + <+ <* <1 .RV> 1024> <MAX .LNT <2 .RV>>>>) + (<OR <0? <PIOFLNT .CHAN>> + <G? <1 .RV> <SET VAL </ <PIOCLNT .CHAN> 1024>>> + <AND <==? <1 .RV> .VAL> <0? <MOD <PIOCLNT .CHAN> 1024>>>> + <REPEAT () + <COND (<==? <1 .RV> </ <PIOCLNT .CHAN> 1024>> + <ASSIGN-CACHE-PAGE .CHAN <1 .RV> <>> + <RETURN>) + (<G? <SET LNT <MOD <PIOCLNT .CHAN> 1024>> 0> + <COND (<SET VAL <SEARCH-CACHE-MAP <PIOCMAP .CHAN> + </ <PIOCLNT .CHAN> 1024>>> + <SET CPG .VAL> + <PIO-EXTEND-FILE <PIOCFIL .CHAN> + <+ .LNT <* .CPG 1024>> + <* <+ 1 .CPG> 1024>> + <PUT .CHAN ,PIOXFLG T> + <PUT .CHAN ,PIOCLNT <* <+ 1 </ <PIOCLNT .CHAN> 1024>> 1024>>) + (<ERROR IMPOSSIBLE-TO-REACH-THIS-POINT!-ERRORS .CHAN .RV>)>) + (<G? <1 .RV> <SET VAL </ <PIOCLNT .CHAN> 1024>>> + <ASSIGN-CACHE-PAGE .CHAN .VAL T> + <PUT .CHAN ,PIOCLNT <* <+ 1 .VAL> 1024>>) + (<ERROR ALSO-IMPOSSIBLE-TO-REACH-THIS-POINT!-ERRORS .CHAN .RV>)>>)>>)> + .ADR>> + <AND <L? <SETG PIO-RECURSION-COUNT <- ,PIO-RECURSION-COUNT 1>> + 0> + <ERROR UNBALANCED-RECURSION-COUNT!-ERRORS + ,PIO-RECURSION-COUNT>> + .VAL> + +<DEFINE UPDATEP (CHAN + "OPTIONAL" CACHEFILE + "AUX" FILPTR EOF CFILPTR CEOF CMAP VAL TMP ADR LNT PG) + #DECL ((CHAN) <OR CHANP STRING> (CACHEFILE) STRING (FILPTR CFILPTR) <OR JFN CHANNEL> + (EOF CEOF ADR LNT PG) FIX (CMAP) <OR UVECTOR FALSE> (VAL TMP) ANY) + <PROG () + <COND + (<TYPE? .CHAN CHANP> + <FLUSHP .CHAN> + <COND (<==? 3 <PIOMODE .CHAN>>) + (<RETURN <CHTYPE (10) FALSE>>)> + <COND (<TYPE? <SET VAL <PIOFPTR .CHAN>> JFN CHANNEL> <SET FILPTR .VAL>) + (<RETURN <CHTYPE (5) FALSE>>)> + <COND (<TYPE? <SET VAL <PIOCFIL .CHAN>> JFN CHANNEL> <SET CFILPTR .VAL>) + (<RETURN <CHTYPE (11) FALSE>>)> + <SET EOF <PIOFLNT .CHAN>> + <SET CEOF <PIOCLNT .CHAN>> + <SET CMAP <PIOCMAP .CHAN>> + <COND (<TYPE? .CMAP UVECTOR> + <COND (<L=? <LENGTH .CMAP> 1021> <SET VAL 3>) + (ELSE + <PIO-FILE-CLOSE .CFILPTR> + <PIO-FILE-OPEN .CFILPTR 2> + <SET VAL <PIO-FILE-LENGTH .CFILPTR>>)> + <PIO-PRINTW-FILE .CFILPTR 0 .VAL> + <PIO-PRINTW-FILE .CFILPTR 1 .CEOF> + <PIO-PRINTW-FILE .CFILPTR 2 <LENGTH .CMAP>> + <PIO-PRINTP-FILE .CFILPTR .CMAP <LENGTH .CMAP> .VAL> + <COND (<SET VAL <SEARCH-CACHE-MAP .CMAP 0>> + <SET TMP <PIO-READW-FILE .CFILPTR <* .VAL 1024>>> + <PIO-PRINTW-FILE + .CFILPTR + <* .VAL 1024> + <CHTYPE <PUTBITS .TMP ,PIOWBIT 1> FIX>>)> + <PIO-FILE-CLOSE .CFILPTR> + <AND <PIOFSTA .CHAN> <PIO-FILE-CLOSE .FILPTR>> + <PIO-FILE-OPEN .FILPTR 2> + <PIO-FILE-OPEN .CFILPTR 1> + <PUT .CHAN ,PIOFPTR <>> + <PUT .CHAN ,PIOCFIL <>> + <PUT .CHAN ,PIOFSTA <>> + <PUT .CHAN ,PIOMODE 1>)>) + (<AND <TYPE? .CHAN STRING> <TYPE? .CACHEFILE STRING>> + <COND (<TYPE? <SET VAL <PIO-FILE-OPEN .CHAN 2>> JFN CHANNEL> + <SET FILPTR .VAL>) + (<RETURN <CHTYPE (13) FALSE>>)> + <COND (<TYPE? <SET VAL <PIO-FILE-OPEN .CACHEFILE 1>> JFN CHANNEL> + <SET CFILPTR .VAL>) + (<RETURN <CHTYPE (14) FALSE>>)> + <SET EOF <PIO-FILE-LENGTH .FILPTR>> + <COND (<AND <G? <PIO-FILE-LENGTH .CFILPTR> 0> + <SET VAL <PIO-READW-FILE .CFILPTR 0>> + <G? <SET ADR <CHTYPE .VAL FIX>> 0> + <SET VAL <PIO-READW-FILE .CFILPTR 1>> + <G? <SET CEOF <CHTYPE .VAL FIX>> 0> + <SET VAL <PIO-READW-FILE .CFILPTR 2>> + <G? <SET VAL <CHTYPE .VAL FIX>> 0> + <SET CMAP <IUVECTOR .VAL -1>> + <PIO-READP-FILE .CFILPTR .CMAP .VAL .ADR>>) + (<SET CMAP <>>)>)> + <COND + (<TYPE? .CMAP UVECTOR> + <COND (<G? <PIO-FILE-LENGTH .FILPTR> 0> + <SET VAL <PIO-READW-FILE .FILPTR 0>>) + (<SET VAL 0>)> + <PIO-PRINTW-FILE .FILPTR + 0 + <CHTYPE <PUTBITS .VAL ,PIOWBIT 1> FIX>> + <PIO-FILE-CLOSE .FILPTR> + <PIO-FILE-OPEN .FILPTR 2> + <SET PG <GET-CLEAR-PAGE>> + <REPEAT ((PGADR <* .PG 1024>) + FPAG + CPAG) + #DECL ((PGADR FPAG CPAG) FIX) + <COND (<EMPTY? .CMAP> + <SET VAL <PIO-READW-FILE .FILPTR 0>> + <PIO-PRINTW-FILE + .FILPTR 0 <CHTYPE <PUTBITS .VAL ,PIOWBIT 0> FIX>> + <PIO-FILE-CLOSE .FILPTR> + <PIO-FILE-FLUSH .FILPTR> + <PIO-FILE-CLOSE .CFILPTR> + <PIO-FILE-FLUSH .CFILPTR> + <GIVE-PAGE .PG> + <RETURN>) + (<G? <CHTYPE <1 .CMAP> FIX> 0> + <COND (<==? <SET FPAG + <CHTYPE <GETBITS <1 .CMAP> ,PIOLHWBIT> + FIX>> + </ .CEOF 1024>> + <SET LNT <MOD .CEOF 1024>>) + (<SET LNT 1024>)> + <PIO-READP-FILE .CFILPTR .PGADR .LNT + <* 1024 <SET CPAG <CHTYPE <GETBITS <1 .CMAP> ,PIORHWBIT> FIX>>>> + <PIO-PRINTP-FILE .FILPTR .PGADR .LNT <* 1024 .FPAG>>)> + <SET CMAP <REST .CMAP>>>) + (<CHTYPE (13) FALSE>)>>> + + + + +<DEFINE LENGTHP (CHAN) +#DECL ((CHAN) CHANP (VALUE) FIX) +<MAX <PIOFLNT .CHAN> <PIOCLNT .CHAN>>> + + +<DEFINE NAMEP (CHAN) +#DECL ((CHAN) CHANP (VALUE) <OR STRING FALSE>) +<COND (<TYPE? <PIOFPTR .CHAN> JFN CHANNEL> + <PIO-NAME-OF-FILE <PIOFPTR .CHAN>>)>> + + + + + +<DEFINE ALLOCP (CHAN SIZ "OPTIONAL" MAXEXTRA (EXTFLG ,PIO-EXTEND-BY-PAGES?) + "AUX" VAL TBL TBLUV MAXSIZ LNT ADR) +#DECL ((CHAN) CHANP + (VALUE) <OR FIX FALSE> + (TBL TBLUV) <UVECTOR [REST FIX]> + (SIZ MAXEXTRA MAXSIZ LNT ADR) FIX + (VAL EXTFLG) ANY) +<COND (<SET VAL <GET-ALLOC-TABLE .CHAN>> + <SET TBL .VAL> + <SET SIZ <+ 1 .SIZ>> + <COND (<ASSIGNED? MAXEXTRA> <SET MAXSIZ <+ .SIZ .MAXEXTRA>>) + (<L? .SIZ ,PIO-MIN-EXTRA-ALLOCATION> <SET MAXSIZ .SIZ>) + (<SET MAXSIZ <+ .SIZ <MIN </ .SIZ 10> ,PIO-MAX-EXTRA-ALLOCATION>>>)> + <COND (<AND <G? <2 .TBL> 0> + <G=? <1 .TBL> .SIZ> + <SET VAL <REPEAT ((UV <REST .TBL 2>) (CNT <2 .TBL>) (TUV <>)) + #DECL ((UV) <UVECTOR [REST FIX]> (CNT) FIX + (TUV) <OR UVECTOR FALSE>) + <COND (<OR <L? <SET CNT <- .CNT 1>> 0> <EMPTY? .UV>> + <RETURN .TUV>) + (<==? <1 .UV> .SIZ> + <RETURN .UV>) + (<G? <1 .UV> .SIZ> + <COND (<OR <NOT .TUV> <L? <1 .UV> <1 .TUV>>> + <SET TUV .UV>)>)> + <SET UV <REST .UV 2>>>>> + <SET TBLUV .VAL> + <COND (<L=? <1 .TBLUV> <+ 1 .MAXSIZ>> + <SET LNT <1 .TBLUV>> + <SET ADR <2 .TBLUV>> + <PUT .TBL 2 <SET VAL <- <2 .TBL> 1>>> + <COND (<AND <G? .VAL 0> + <G? <SET VAL <- .VAL + </ <- <LENGTH .TBL> <LENGTH .TBLUV> 2> 2>>> + 0>> + <REPEAT ((CNT .VAL)) + <PUT .TBLUV 1 <3 .TBLUV>> + <PUT .TBLUV 2 <4 .TBLUV>> + <COND (<L=? <SET CNT <- .CNT 1>> 0> <RETURN>)> + <SET TBLUV <REST .TBLUV 2>>>)>) + (ELSE + <PUT .TBLUV 1 <- <1 .TBLUV> <SET LNT .SIZ>>> + <PUT .TBLUV 2 <+ <SET ADR <2 .TBLUV>> .LNT>>)> + <PRINTP .CHAN .ADR <- .LNT 1> 1> + <+ .ADR 1>) + (<NOT .EXTFLG> + <COND (<AND <G? <2 .TBL> 0> + <SET TBLUV <REST .TBL <* <2 .TBL> 2>>> + <==? <SET VAL <LENGTHP .CHAN>> + <+ <1 .TBLUV> <2 .TBLUV>>>> + <SET ADR <2 .TBLUV>> + <PUT .TBL 2 <- <2 .TBL> 1>>) + (<L? <SET ADR <LENGTHP .CHAN>> 1> + <SET ADR 1>)> + <PRINTP .CHAN .ADR <- .SIZ 1> 1> + <PRINTP .CHAN <- <+ .ADR .SIZ> 1> 0 1> + <+ .ADR 1>) + (.EXTFLG + <COND (<AND <G? <2 .TBL> 0> + <SET TBLUV <REST .TBL <* <2 .TBL> 2>>> + <==? <SET VAL <LENGTHP .CHAN>> + <+ <1 .TBLUV> <2 .TBLUV>>>> + <SET ADR <2 .TBLUV>> + <PUT .TBL 2 <- <2 .TBL> 1>>) + (<L? <SET ADR <LENGTHP .CHAN>> 1> + <SET ADR 1>)> + <PRINTP .CHAN .ADR <- .SIZ 1> 1> + <PRINTP .CHAN <SET LNT <- <* <+ 1 </ <SET VAL <- <+ .ADR .SIZ> 1>> + 1024>> 1024> 1>> + 0 1> + <COND (<G? <SET LNT <- .LNT .VAL>> 0> + <PUT .TBL 2 <+ <2 .TBL> 1>> + <COND (<L=? <* <2 .TBL> 2> <- <LENGTH .TBL> 2>> + <PUT .TBL <+ 1 <* <2 .TBL> 2>> .LNT> + <PUT .TBL <+ 2 <* <2 .TBL> 2>> <+ .ADR .SIZ>>) + (ELSE + <PUT .CHAN ,PIOFTBL <SET TBL <UVECTOR !.TBL .LNT + <+ .ADR .SIZ> 0 0 0 0 0 0 0 0>>>)>)> + <PUT .TBL 1 <MAX .LNT <1 .TBL>>> + <+ .ADR 1>)>)>> + + + +<DEFINE DALLOCP (CHAN ADR "AUX" LNT TBL VAL SAV1 SAV2) +#DECL ((CHAN) CHANP (VALUE) <OR 'T FALSE> (LNT ADR SAV1 SAV2) FIX + (TBL) <UVECTOR [REST FIX]> (VAL) ANY) +<COND (<SET VAL <GET-ALLOC-TABLE .CHAN>> + <SET TBL .VAL> + <SET ADR <- .ADR 1>> + <COND (<AND <G? .ADR 0> + <L? .ADR <LENGTHP .CHAN>> + <SET VAL <READP .CHAN .ADR <> 1>> + <L=? <+ .ADR <SET LNT <CHTYPE .VAL FIX>>> <LENGTHP .CHAN>> + <G? .LNT 0>> + <SET LNT <+ 1 .LNT>> + <COND (<AND <0? <2 .TBL>> + <G=? <LENGTH .TBL> 4>> + <PUT .TBL 1 .LNT> + <PUT .TBL 2 1> + <PUT .TBL 3 .LNT> + <PUT .TBL 4 .ADR> + T) + (<0? <2 .TBL>> + <PUT .CHAN ,PIOFTBL + <SET TBL <UVECTOR .LNT 1 .LNT .ADR 0 0 0 0 0 0>>> + T) + (<G? <2 .TBL> 0> + <REPEAT ((UV <REST .TBL 2>) (CNT <2 .TBL>) (LRGST 0)) + #DECL ((UV) <UVECTOR [REST FIX]> + (CNT LRGST) FIX) + <COND (<EMPTY? .UV> + <PUT .CHAN ,PIOFTBL + <SET TBL <UVECTOR !.TBL .LNT .ADR 0 0 0 0 0 0>>> + <PUT .TBL 2 <+ 1 <2 .TBL>>> + <PUT .TBL 1 <MAX .LNT .LRGST>> + <RETURN>) + (<L? <SET CNT <- .CNT 1>> 0> + <PUT .UV 1 .LNT> + <PUT .UV 2 .ADR> + <PUT .TBL 2 <+ <2 .TBL> 1>> + <PUT .TBL 1 <MAX .LNT .LRGST>> + <RETURN>) + (<==? <+ <1 .UV> <2 .UV>> .ADR> + <PUT .UV 1 <+ <1 .UV> .LNT>> + <COND (<AND <G=? <LENGTH .UV> 4> + <G? .CNT 0> + <==? <4 .UV> <+ <1 .UV> <2 .UV>>>> + <PUT .UV 1 <+ <1 .UV> <3 .UV>>> + <REPEAT ((V .UV) (C .CNT)) + #DECL ((V) UVECTOR (C) FIX) + <COND (<AND <G=? <SET C <- .C 1>> 0> + <G=? <LENGTH <SET V <REST .V 2>>> 4>> + <PUT .V 1 <3 .V>> + <PUT .V 2 <4 .V>>) + (ELSE <RETURN>)>> + <PUT .TBL 2 <- <2 .TBL> 1>>)> + <PUT .TBL 1 <MAX <1 .UV> .LRGST <1 .TBL>>> + <RETURN>) + (<==? <2 .UV> <+ .ADR .LNT>> + <PUT .UV 1 <+ <1 .UV> .LNT>> + <PUT .UV 2 .ADR> + <PUT .TBL 1 <MAX <1 .UV> .LRGST <1 .TBL>>> + <RETURN>) + (<AND <G? <2 .UV> .ADR> + <G? <2 .UV> <+ .ADR .LNT>>> + <COND (<G? <LENGTH .TBL> <+ 2 <* <2 .TBL> 2>>> + <SET SAV1 <1 .UV>> + <SET SAV2 <2 .UV>> + <PUT .UV 1 .LNT> + <PUT .UV 2 .ADR> + <REPEAT ((C .CNT)) + <SET UV <REST .UV 2>> + <SET VAL <1 .UV>> + <PUT .UV 1 .SAV1> + <SET SAV1 .VAL> + <SET VAL <2 .UV>> + <PUT .UV 2 .SAV2> + <SET SAV2 .VAL> + <AND <L? <SET C <- .C 1>> 0> <RETURN>>>) + (ELSE + <SET TBL <INSERT-INTO-ALLOC-TBL .TBL + <- <LENGTH .TBL> <LENGTH .UV>> + .LNT .ADR>> + <PUT .CHAN ,PIOFTBL .TBL>)> + <PUT .TBL 1 <MAX .LNT .LRGST <1 .TBL>>> + <PUT .TBL 2 <+ 1 <2 .TBL>>> + <RETURN>) + (<L? <+ <1 .UV> <2 .UV>> .ADR> + <AND <G? <1 .UV> .LRGST> <SET LRGST <1 .UV>>> + <SET UV <REST .UV 2>>) + (<==? <2 .UV> .ADR> + <AND <ERROR ATTEMPT-TO-DEALLOCATE-BLOCK!-ERRORS + WHICH-IS-ALREADY-DEALLOCATED!-ERRORS + ERRET-T-TO-IGNORE!-ERRORS + .ADR .LNT .UV> + <RETURN>> + <RETURN <>>) + (ELSE + <AND + <ERROR ATTEMPT-TO-DEALLOCATE-OVERLAPPING-BLOCK!-ERRORS + ERRET-T-TO-IGNORE!-ERRORS + .ADR .LNT .UV> + <RETURN>>)>>)>)>)>> + + + + + + + + + + + + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog1/piosub.umsb01 b/src/mprog1/piosub.umsb01 new file mode 100644 index 00000000..a6c2185d --- /dev/null +++ b/src/mprog1/piosub.umsb01 @@ -0,0 +1,451 @@ +<PACKAGE "PIOSUB"> + +<ENTRY PIO-PAGE-FIND + PIO-PAGE-GIVE + REQUEST-NORM + FILL-PAGE-REQUESTS + FILL-UP + SEARCH-CACHE-MAP + INSERT-INTO-CACHE-MAP + INSERT-INTO-ALLOC-TBL> + + +;"RSUBR TO FIND FREE CORE PAGES" + +<TITLE PIO-PAGE-FIND> + <DECLARE ("VALUE" <OR FIX FALSE> "OPTIONAL" FIX)> + <JUMPGE AB* ONEARG> + <DPUSH TP* (AB)> + <PUSHJ P* IPIO-PAGE-FIND2> + <JRST FINIS> + +ONEARG <PUSHJ P* IPIO-PAGE-FIND1> + <JRST FINIS> + +<INTERNAL-ENTRY IPIO-PAGE-FIND1 0> + <SUBM M* (P)> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* [<1>]> + <JRST PF1> + +<INTERNAL-ENTRY IPIO-PAGE-FIND2 1> + <SUBM M* (P)> +PF1 <MOVE A* (TP)> ;"YES, GET IT" + <JUMPLE A* WRONGT> + <PUSHJ P* PGFIND> + <JUMPL B* [<MOVE A* <TYPE-WORD FALSE>> + <SETZ B*> + <JRST PFX>]> + <MOVE A* <TYPE-WORD FIX>> +PFX <SUB TP* [<2 (2)>]> + <JRST MPOPJ> + + + +;"RSUBR TO GIVE BACK CORE PAGES" + +<TITLE PIO-PAGE-GIVE> + <DECLARE ("VALUE" FIX FIX "OPTIONAL" FIX)> + <DPUSH TP* (AB)> + <AOBJN AB* HERE 1> + <AOBJP AB* ONEARG> + <DPUSH TP* (AB)> + <PUSHJ P* IPIO-PAGE-GIVE2> + <JRST FINIS> + +ONEARG <PUSHJ P* IPIO-PAGE-GIVE1> + <JRST FINIS> + +<INTERNAL-ENTRY IPIO-PAGE-GIVE1 1> + <SUBM M* (P)> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* [<1>]> + <JRST PG1> + +<INTERNAL-ENTRY IPIO-PAGE-GIVE2 2> + <SUBM M* (P)> +PG1 <MOVE A* (TP)> ;"YES, GET IT" + <JUMPLE A* WRONGT> + <MOVE B* (TP) -2> ;"GET NUMBER OF FIRST BLOCK" + <JUMPL B* WRONGT> + <MOVEI O* (B)> + <ADDI O* (A)> + <CAIGE B* 256> ;"VALID FIRST BLOCK NUMBER ?" + <CAILE O* 256> ;"VALID LAST+1 BLOCK NUMBER ?" + <JRST WRONGT> ;"NO, LOSE" + <PUSHJ P* PGGIVE> + <MOVSI A* <TYPE-CODE FIX>> + <SUB TP* [<4 (4)>]> + <JRST MPOPJ> + + + + + +<TITLE REQUEST-NORM> + +<DECLARE ("VALUE" <VECTOR [REST <OR FIX FALSE> <OR FIX FALSE> + <OR UVECTOR <PRIMTYPE WORD> FALSE> + <OR FIX FALSE>]> + <OR UVECTOR <PRIMTYPE WORD>> <PRIMTYPE WORD> + <PRIMTYPE WORD> VECTOR)> + +;" +ARG1/ UVECTOR (or core address) from/to which transfer is to be made +ARG2/ FIX, length of transfer +ARG3/ address from/to which transfer is to be made +ARG4/ VECTOR to fill + +RETURNS ==> VECTOR, filled with quads: + 1/ number of page in file referenced (1024 words/page) + 2/ offset of beginning of transfer in file page + 3/ UVECTOR, RESTed down to appropriate place (or PRIMTYPE WORD, core address) + 4/ number of words to be transferred between UVECTOR and page (or vice versa)" + + + + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* IREQUEST-NORM> + <JRST FINIS> + +<INTERNAL-ENTRY IREQUEST-NORM 4> + + <SUBM M* (P)> + <HRRZ A* -4(TP)> + <IDIVI A* 1024> + <ADDI A* 2> + <IMULI A* 8> + <HLRE C* (TP)> + <MOVMS C> + <CAMGE C* A> + <PUSHJ P* REQ-NEW-VCT> + <SUB C* A> + <HRLS C> + <ADDM C* (TP)> + <MOVE E* (TP)> +RQLOOP <MOVE A* -2(TP)> + <IDIVI A* 1024> + <MOVE O* <TYPE-WORD FIX>> + <MOVEM O* (E)> + <MOVEM A* 1(E)> + <MOVEM O* 2(E)> + <MOVEM B* 3(E)> + <MOVE O* -7(TP)> + <MOVEM O* 4(E)> + <MOVE O* -6(TP)> + <MOVEM O* 5(E)> + <HRRZ B* -4(TP)> + <MOVEI C* 1(A)> + <IMULI C* 1024> + <SUB C* -2(TP)> + <CAMG B* C> + <JRST RQLAST> + <MOVE O* <TYPE-WORD FIX>> + <MOVEM O* 6(E)> + <MOVEM C* 7(E)> + <ADDM C* -2(TP)> + <SUB B* C> + <MOVEM B* -4(TP)> + <HRLS C> + <ADDM C* -6(TP)> + <ADD E* [<8(8)>]> + <JUMPL E* RQLOOP> +OVFERR <DPUSH TP* <PQUOTE OVERFLOWED-REQUEST-VECTOR!-ERRORS>> + <MCALL 1 ERROR> + <JRST OVFERR> + + +RQLAST <MOVE O* <TYPE-WORD FIX>> + <MOVEM O* 6(E)> + <MOVEM B* 7(E)> + <ADD E* [<8(8)>]> + <POP TP* B> + <POP TP* A> + <SUB TP* [<6(6)>]> +LASTLOOP <JUMPGE E* MPOPJ> + <MOVE O* <TYPE-WORD FALSE>> + <MOVEM O* (E)> + <SETZM 1(E)> + <ADD E* [<2(2)>]> + <JRST LASTLOOP> + + +REQ-NEW-VCT <SUBM M* (P)> + <IDIVI A* 2> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* A> + <PUSH TP* <TYPE-WORD FALSE>> + <PUSH TP* [<0>]> + <MCALL 2 IVECTOR> + <MOVEM A* -1(TP)> + <MOVEM B* (TP)> + <HLRE A* (TP)> + <MOVMS A> + <MOVE C* A> + <JRST MPOPJ> + + + + + + +<TITLE FILL-PAGE-REQUESTS> + +<DECLARE ("VALUE" VECTOR VECTOR UVECTOR ANY)> + + + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* IFILL-PAGE-REQUESTS> + <JRST FINIS> + +;" +ARG1/ VECTOR, normalized request VECTOR from REQUEST-NORM +ARG2/ UVECTOR, page-map from file +ARG3/ ANY, non-FALSE signals READ from file, FALSE signals + WRITE to file. + +RETURNS ==> normalized request vector, all FILLED requests are + turned off by putting a FALSE in the first member of the quad." + + +<INTERNAL-ENTRY IFILL-PAGE-REQUESTS 3> + + <SUBM M* (P)> + <MOVE E* -4(TP)> + <HLRE A* E> + <MOVMS A> + <JUMPE A* FILLRET> + <IDIVI A* 8> + <JUMPN B* FILLRET> + <HLRE A* -2(TP)> + <MOVMS A> + <JUMPE A* FILLRET> + <IDIVI A* 4> + <JUMPN B* FILLRET> +RQLOOP <GETYP O* (E)> + <CAIE O* <TYPE-CODE FIX>> + <JRST NXTREQ> + <MOVE D* -2(TP)> +MPLOOP <SKIPL A* (D)> + <CAME A* 1(E)> + <JRST NXTPAG> + <SKIPG A* 1(D)> + <JRST NXTREQ> + <GETYP O* -1(TP)> + <CAIN O* <TYPE-CODE FALSE>> + <JRST RQWRITE> + <IMULI A* 1024> + <ADD A* 3(E)> + <HRLS A> + <HRR A* 5(E)> + <MOVE B* 5(E)> + <ADD B* 7(E)> +RQDONE <BLT A* -1(B)> + <MOVE O* <TYPE-WORD FALSE>> + <MOVEM O* (E)> + <SETZM 1(E)> + <MOVE A* <MQUOTE '%<RGLOC PIO-REF-COUNT T>>> + <ADD A* GLOTOP 1 (TVP)> + <MOVE B* 1(A)> + <ADDI B* 1> + <MOVEM B* 3(D)> + <MOVEM B* 1(A)> + <JRST NXTREQ> + +RQWRITE <MOVE C* 2(D)> + <TLO C* *400000*> + <MOVEM C* 2(D)> + <MOVE A* 1(D)> + <IMULI A* 1024> + <ADD A* 3(E)> + <HRL A* 5(E)> + <MOVE B* 7(E)> + <ADD B* A> + <JRST RQDONE> + +NXTPAG <ADD D* [<4(4)>]> + <JUMPL D* MPLOOP> +NXTREQ <ADD E* [<8(8)>]> + <JUMPL E* RQLOOP> +FILLRET <SUB TP* [<4(4)>]> + <POP TP* B> + <POP TP* A> +RETLOOP <GETYP O* (B)> + <CAIE O* <TYPE-CODE FALSE>> + <JRST MPOPJ> + <ADD B* [<8(8)>]> + <JUMPL B* RETLOOP> + <JRST MPOPJ> + + + +<TITLE FILL-UP> + +<DECLARE ("VALUE" FIX FIX FIX FIX)> + + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* IFILL-UP> + <JRST FINIS> + +<INTERNAL-ENTRY IFILL-UP 3> + + <SUBM M* (P)> + <MOVE A* -4(TP)> + <MOVE B* (TP)> + <MOVEM B* (A)> + <ADDI A* 1> + <HRL A* -4(TP)> + <MOVE B* -4(TP)> + <ADD B* -2(TP)> + <BLT A* -1(B)> + <DMOVE A* -1(TP)> + <SUB TP* [<6(6)>]> + <JRST MPOPJ> + + + +<TITLE SEARCH-CACHE-MAP> + +<DECLARE ("VALUE" <OR FIX FALSE> UVECTOR FIX)> + + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* ISEARCH-CACHE-MAP> + <JRST FINIS> + +<INTERNAL-ENTRY ISEARCH-CACHE-MAP 2> + + <SUBM M* (P)> + <MOVE E* -2(TP)> + <JUMPGE E* SRCFLD> +SRCLOOP <SKIPG (E)> + <JRST SRCFLD> + <HLRZ A* (E)> + <CAMN A* (TP)> + <JRST SRCWON> + <AOBJN E* SRCLOOP> +SRCFLD <MOVE A* <TYPE-WORD FALSE>> + <MOVEI B* 0> +SRCRET <SUB TP* [<4(4)>]> + <JRST MPOPJ> + +SRCWON <MOVE A* <TYPE-WORD FIX>> + <HRRZ B* (E)> + <JRST SRCRET> + + + +<TITLE INSERT-INTO-CACHE-MAP> + +<DECLARE ("VALUE" UVECTOR UVECTOR FIX FIX)> + + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* IINSERT-INTO-CACHE-MAP> + <JRST FINIS> + +<INTERNAL-ENTRY IINSERT-INTO-CACHE-MAP 3> + + <SUBM M* (P)> + <MOVE E* -4(TP)> + <JUMPGE E* NEWUVCT> +SRCLOOP <SKIPG (E)> + <JRST GOTSLOT> + <HLRZ A* (E)> + <CAMN A* -2(TP)> + <JRST INSERR> + <AOBJN E* SRCLOOP> +NEWUVCT <HLRE A* -4(TP)> + <MOVMS A> + <MOVE B* A> + <IDIVI B* 5> + <CAILE B* 50> + <MOVEI B* 50> + <CAIGE B* 10> + <MOVEI B* 10> + <ADD A* B> + <MOVEI O* IBLOCK> + <PUSHJ P* RCALL> + <HLRE C* B> + <MOVMS C> + <ADDI C* (B)> + <MOVEI O* <TYPE-CODE FIX>> + <PUTYP O* (C)> + <MOVE C* -4(TP)> + <HLRE D* C> + <MOVMS D> + <ADDI D* (B)> + <HRLS C> + <HRR C* B> + <BLT C* -1(D)> + <HRL E* -2(TP)> + <HRR E* (TP)> + <MOVEM E* (D)> +INSRET <SUB TP* [<6(6)>]> + <JRST MPOPJ> + +GOTSLOT <HRL A* -2(TP)> + <HRR A* (TP)> + <MOVEM A* (E)> + <DMOVE A* -5(TP)> + <JRST INSRET> + +INSERR <DPUSH TP* <PQUOTE PAGE-ALREADY-IN-CACHE-MAP!-ERRORS>> + <MCALL 1 ERROR> + <JRST INSERR> + + + +<TITLE INSERT-INTO-ALLOC-TBL> + +<DECLARE ("VALUE" UVECTOR UVECTOR FIX FIX FIX)> + + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* IINSERT-INTO-ALLOC-TBL> + <JRST FINIS> + +<INTERNAL-ENTRY IINSERT-INTO-ALLOC-TBL 4> + + <SUBM M* (P)> + <HLRE A* -6(TP)> + <MOVMS A> + <ADDI A* 10> + <PUSH P* A> + <MOVEI O* IBLOCK> + <PUSHJ P* RCALL> + <POP P* C> + <ADDI C* (B)> + <MOVEI O* <TYPE-CODE FIX>> + <PUTYP O* (C)> + <HRRZ C* -4(TP)> + <ADDI C* (B)> + <HRL D* -6(TP)> + <HRR D* B> + <PUSH P* C> + <BLT D* -1(C)> + <POP P* C> + <MOVE D* -2(TP)> + <MOVEM D* (C)> + <MOVE D* (TP)> + <MOVEM D* 1(C)> + <ADDI C* 2> + <MOVE D* -4(TP)> + <ADD D* -6(TP)> + <HRL C* D> + <HLRE D* -6(TP)> + <MOVMS D> + <SUB D* -4(TP)> + <ADDI D* (C)> + <BLT C* -1(D)> + <SUB TP* [<8(8)>]> + <JRST MPOPJ> + +<END> + + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog1/plotso.ujm065 b/src/mprog1/plotso.ujm065 new file mode 100644 index 00000000..40076576 --- /dev/null +++ b/src/mprog1/plotso.ujm065 @@ -0,0 +1,1005 @@ + +<PACKAGE "PLOTSO"> + +<ENTRY + GRAPH + GRFUNC + PLOT + REGRAPH + ERASE_S + SCALE + SURPRESS-GRAPH-NUMBERS + GRAPH_DATA + GRAPH_TITLE + GRAPH_X + GRAPH_Y + GRAPH_COMMENT + CLEAR-GRAPHS + NUMPRINT + DEMO + NO-DRAW + END_DEMO + GRFLIST + BACKSPACE> + +<USE "GS"> + +<NEWTYPE GRFLIST LIST> + +<PRINTTYPE GRFLIST <FUNCTION (X) T>> + +<USE-DEFER "GSTTYC"> + +<COND (<NOT <GASSIGNED? G_R>> + <PRINC "YOU MAY WANT TO EVALUATE <G_R>"> + <USE "GSTTYC"> + <G_R <>>)> +<DROP "GSTTYC"> + + <SET GLOBAL_GRAPHS <CHTYPE () GRFLIST>> + +<SET GLOBAL_MAKE_GRID T> + +<SET GLOBAL_CONSERVE_SCALE <>> + +<SET SMOOTH-TOL '0.5> + +<SET OLD_INC .05> + +<SET OLD_MIN 0> + +<SET OLD_MAX 1> + +<SET OLD_VAR T> + +<SET OLD_FORM '<SIN .T>> + +<DEFINE GRFUNC (FUNC + "OPTIONAL" MIN-MY + (MAX-MY .OLD_MAX) + (INC <COND (<ASSIGNED? MIN-MY> + </ <- .MAX-MY .MIN-MY> 100.0>) + (T <SET MIN-MY .OLD_MIN> + .OLD_INC)>) + "AUX" (NOERASE T) (GG <GIVE-GG>)) + #DECL ((FUNC) <OR FUNCTION SUBR FSUBR RSUBR> (TITLE NOERASE) <SPECIAL ANY> + (GG VALUE) <GRFLIST [REST VECTOR]> + (MIN-MY MAX-MY INC) <OR FLOAT FIX> + (OLD_INC OLD_MIN OLD_MAX) <SPECIAL <OR FIX FLOAT>>) + <COND (<G=? .MIN-MY .MAX-MY><ERROR MIN-IS-G=?-MAX!-ERROR GRFUNC>)> + <SET OLD_MIN .MIN-MY> + <SET OLD_MAX .MAX-MY> + <SET OLD_INC .INC> + <VEC_PLOTTER <SET GLOBAL_GRAPHS <PUT <CHTYPE + (!.GG + <PUT <VEC_CALC .FUNC .MIN-MY .MAX-MY .INC> + GRF + ('"FUNCTION = " + <UNPARSE .FUNC> + '" MIN = " + .MIN-MY + '" MAX = " + .MAX-MY + '" INC = " + .INC + '" +")>) GRFLIST> TITLE <GET .GG TITLE>>> + .GLOBAL_MAKE_GRID + .GLOBAL_CONSERVE_SCALE> + .GLOBAL_GRAPHS> + +<DEFINE GRAPH ("OPTIONAL" (FORM-MY .OLD_FORM) (VAR .OLD_VAR) + MIN-MY (MAX-MY .OLD_MAX) + (INC <COND (<ASSIGNED? MIN-MY> + </ <- .MAX-MY .MIN-MY> 100.0>) + (T <SET MIN-MY .OLD_MIN> + .OLD_INC)>) + "AUX" (NOERASE T)(TLIST (1)) (VARLIST .TLIST) (MARKER (1)) + (GG <GIVE-GG>)) + #DECL ((FORM-MY) <OR FORM FLOAT FIX FALSE> + (GLOBAL_GRAPHS GG VALUE) <GRFLIST [REST VECTOR]> + (VARLIST MARKER TITLE NOERASE) <SPECIAL ANY> + (VAR) <OR ATOM FALSE> (MIN-MY MAX-MY INC) <OR FIX FLOAT> + (OLD_INC OLD_MIN OLD_MAX OLD_VAR OLD_FORM) <SPECIAL ANY>) + <COND (<G=? .MIN-MY .MAX-MY><ERROR MIN-IS-G=?-MAX!-ERROR GRAPH>)> + <SET FORM-MY <OR .FORM-MY .OLD_FORM>> + <SET OLD_VAR <SET VAR <OR .VAR .OLD_VAR>>> + <SET OLD_INC .INC> + <SET OLD_FORM .FORM-MY> + <SET OLD_MIN .MIN-MY> + <SET OLD_MAX .MAX-MY> + <PUT .VAR .MARKER T> + <GET_VARS .FORM-MY> + <VEC_PLOTTER <SET GLOBAL_GRAPHS <PUT <CHTYPE + (!.GG + <PUT <VEC_CALC <CHTYPE ((.VAR) .FORM-MY) FUNCTION> .MIN-MY .MAX-MY .INC> + GRF + ('"FORM = " + .FORM-MY + '" VAR = " + .VAR + '" MIN = " + .MIN-MY + '" MAX = " + .MAX-MY + '" INC = " + .INC + '" + " + !<REST .TLIST!>)>) GRFLIST> TITLE <GET .GG TITLE>>> + .GLOBAL_MAKE_GRID + .GLOBAL_CONSERVE_SCALE> + .GLOBAL_GRAPHS> + +<DEFINE GET_VARS (FORM-MY) + #DECL ((VALUE) 'T (FORM-MY) ANY + (VARLIST) <SPECIAL LIST>) + <AND <STRUCTURED? .FORM-MY> + <OR <AND <TYPE? .FORM-MY FORM> + <MEMQ <1 .FORM-MY> '[LVAL GVAL VALUE]> + <NOT <GET <2 .FORM-MY> .MARKER>> + <PUT <2 .FORM-MY> .MARKER T> + <PUTREST .VARLIST (.FORM-MY '" = " <EVAL .FORM-MY> '" ")> + <SET VARLIST <REST .VARLIST 4>>> + <MAPF <> ,GET_VARS .FORM-MY>>> + T> + +<DEFINE VEC_CALC (FUNC XMIN XMAX OINC + "AUX" (YMIN <MIN>) (YMAX <MAX>) + (INC <MAX .OINC </ <FLOAT <- .XMAX .XMIN>><- .RBOUND .LBOUND>>>) + (VEC + <IUVECTOR <* 2 + <+ 1 + <FIX <+ 1.0E-2 + </ <- .XMAX .XMIN> .INC>>>>> + 0.0000000>) + VAR VAL) + #DECL ((FUNC) <OR FUNCTION FSUBR RSUBR SUBR> + (XMIN XMAX INC OINC VAR) <OR FLOAT FIX> (YMIN YMAX) FLOAT + (LBOUND RBOUND BBOUND TBOUND) <SPECIAL <OR FIX FLOAT>> + (VEC) UVECTOR) + <SET VAR .XMIN> + <REPEAT ((V .VEC)) + #DECL ((V) UVECTOR) + <COND (<EMPTY? .V> <RETURN>) + (T + <PUT .V 1 <FLOAT .VAR>> + <PUT .V 2 <FLOAT <APPLY .FUNC .VAR>>> + <SET YMIN <MIN .YMIN <2 .V>>> + <SET YMAX <MAX .YMAX <2 .V>>> + <SET VAR <+ .VAR .INC>> + <SET V <REST .V 2>>)>> + <SET VAL + <COND (<LENGTH? .VEC 5> + [.VEC .XMIN .XMAX .YMIN .YMAX 0 <>]) + (T <REPEAT ((YTOL </ <* <- .YMAX .YMIN> .SMOOTH-TOL> + <- .TBOUND .BBOUND>>) + (V <REST .VEC <- <LENGTH .VEC> 4>>) + (W .V) + (YDEL <- <2 .W> <4 .V>>) + (YCHK <2 .W>)) + <SET YCHK <+ .YDEL .YCHK>> + <SET W <BACK .W 2>> + <COND (<G? <ABS <- .YCHK <2 .W>>> .YTOL> + <SET V <BACK .V 2>> + <SET YDEL <- <2 .W> <4 .V>>> + <SET YCHK <2 .W>>)> + <PUT .V 2 <2 .W>> + <PUT .V 1 <1 .W>> + <COND (<==? .W .VEC> + <RETURN [.V .XMIN .XMAX .YMIN .YMAX 0 <>]>)>>)>> + <PUT .VAL 6 <GSBEGIN ,DO_VEC_P .VAL>> + <GSUNBLANK> + .VAL> + + <DEFINE PLOT (X-MY + "OPTIONAL" (OY-MY .X-MY) (LINE <>) (CHAR T) + "AUX" (NOERASE T) + (XFORM <GET_ITEM_FORMER X-MY>) + (YFORM + <COND (<==? .X-MY .OY-MY> .XFORM) (T <GET_ITEM_FORMER OY-MY>)>) + (TEMP <PLOT_CALC .XFORM .YFORM>) + SAVE-THIN + (GG <GIVE-GG>)) + #DECL ((GG GLOBAL_GRAPHS) <GRFLIST [REST VECTOR]> + (GRIT_EXPLNTN_POSN) <SPECIAL FIX> + (X-MY OY-MY NOERASE) <SPECIAL ANY> (THIN-PLOT) <SPECIAL FUNCTION> + (SAVE-THIN) <OR FALSE LIST>) + <COND(<OR <NOT <OR .LINE .CHAR>><EMPTY? <1 .TEMP>>> + <ERROR NOTHING-PLOTTED!-ERRORS>) + (T + <COND (<AND .LINE + <SET SAVE-THIN <THIN-PLOT .TEMP>>> + <PUT .TEMP + <COND (.CHAR THIN-PLOT) (1)> + .SAVE-THIN>)> + <PUT .TEMP PLOT <COND (.LINE <>) + (T <SET GRIT_EXPLNTN_POSN <+ 1 .GRIT_EXPLNTN_POSN>>)>> + <PUT .TEMP FANCY_CHAR .CHAR> + <AGRITCH .TEMP .CHAR .GG> + <PUT .TEMP GRF ('"plot +")> + <PUT .TEMP 6 <GSBEGIN ,DO_VEC_P .TEMP>> + <GSUNBLANK> + <COND (<EMPTY? .GG> + <SET GG <PUT <CHTYPE (.TEMP) GRFLIST> TITLE <GET .GG TITLE>>>) + (T + <PUTREST <REST .GG <- <LENGTH .GG> 1>> (.TEMP)>)> + <VEC_PLOTTER <SET GLOBAL_GRAPHS .GG> + .GLOBAL_MAKE_GRID + .GLOBAL_CONSERVE_SCALE>)> + .GLOBAL_GRAPHS> + +<DEFINE GET_ITEM_FORMER (VAR) + #DECL ((VAR) ATOM) + <COND (<TYPE? ..VAR CHANNEL> + <FORM PROG + '(GIFTEMP) + <FORM SET GIFTEMP <FORM READ ..VAR <>>> + '<AND <TYPE? .GIFTEMP FIX FLOAT> .GIFTEMP>>) + (<TYPE? ..VAR FIX FLOAT> ..VAR) + (<TYPE? ..VAR FUNCTION FSUBR SUBR RSUBR> <FORM ..VAR>) + (<TYPE? ..VAR FORM> ..VAR) + (<AND ..VAR <STRUCTURED? ..VAR>> + <FORM PROG + '(GIFTEMP) + <FORM AND + <FORM NOT <FORM EMPTY? <FORM LVAL .VAR>>> + <FORM SET GIFTEMP <FORM 1 <FORM LVAL .VAR>>> + <FORM SET .VAR <FORM REST <FORM LVAL .VAR>>> + '<AND <TYPE? .GIFTEMP FIX FLOAT> .GIFTEMP>>>) + (T + <SET .VAR 0> + <FORM SET .VAR <FORM + 1 <FORM LVAL .VAR>>>)>> + +<DEFINE PLOT_CALC (XFORM YFORM + "AUX" (RESULT (0)) (HERE .RESULT) IX IY IIX IIY + (XMIN <MIN>) (YMIN <MIN>) (XMAX <MAX>) (YMAX <MAX>)) + #DECL ((RESULT HERE) LIST (XMIN YMIN XMAX YMAX) FLOAT + (IX IY) <OR FALSE FIX FLOAT> (IIX IIY) <OR FIX FLOAT>) + <REPEAT () + <OR <AND <SET IX <EVAL .XFORM>> <SET IY <EVAL .YFORM>>> + <RETURN [<REST .RESULT> + .XMIN + .XMAX + .YMIN + .YMAX + 0 + <>]>> + <SET XMIN <MIN .XMIN <SET IIX .IX>>> + <SET XMAX <MAX .XMAX .IIX>> + <SET YMIN <MIN .YMIN <SET IIY .IY>>> + <SET YMAX <MAX .YMAX .IIY>> + <PUTREST .HERE (.IIX .IIY)> + <SET HERE <REST .HERE 2>>>> + +<DEFINE THIN-PLOT (ARG + "AUX" (XTOL </ <* <- <3 .ARG><2 .ARG>> .SMOOTH-TOL> + <- .RBOUND .LBOUND>>) + (YTOL </ <* <- <5 .ARG><4 .ARG>> .SMOOTH-TOL> + <- .TBOUND .BBOUND>>) + (TVAL #FALSE(NO-CHANGES)) + (VAL <LIST !<1 .ARG>>)) + #DECL ((VAL) LIST (XTOL YTOL) FLOAT (TVAL) <OR FALSE 'T> + (RBOUND LBOUND BBOUND TBOUND) <SPECIAL <OR FIX FLOAT>>) + <REPEAT ((SO .VAL) XD YD XD1 YD1 XD2 YD2) + #DECL ((SO) <LIST [REST <OR FIX FLOAT>]> + (XD YD XD1 YD1 XD2 YD2) FLOAT) + <COND (<LENGTH? .SO 4><RETURN>)> + <SET XD <SET XD1 <FLOAT <- <3 .SO> <1 .SO>>>>> + <SET YD <SET YD1 <FLOAT <- <4 .SO> <2 .SO>>>>> + <COND (<0? <MAX <ABS .XD><ABS .YD>>> + <PUTREST <REST .SO><REST .SO 4>> + <SET TVAL T> + <AGAIN>)> + <REPEAT () + <COND (<LENGTH? .SO 5><RETURN>)> + <SET XD2 <FLOAT <- <5 .SO> <1 .SO>>>> + <SET YD2 <FLOAT <- <6 .SO><2 .SO>>>> + <COND (<AND + <G=? <* .XD1 <- .XD2 .XD1>> 0.000> + <G=? <* .YD1 <- .YD2 .YD1>> 0.000> + <COND (<L? <ABS .YD><ABS .XD>> + <L? <ABS <- <* .XD2 </ .YD .XD>> .YD2>> .YTOL>) + (T + <L? <ABS <- <* .YD2 </ .XD .YD>> .XD2>> .XTOL>)>> + <SET XD1 .XD2> + <SET YD1 .YD2> + <PUTREST <REST .SO> <REST .SO 4>> + <SET TVAL T>) + (T <RETURN>)>> + <SET SO <REST .SO 2>>> + <COND (.TVAL .VAL) + (T .TVAL)> + > + +<DEFINE AGRITCH (APLT CODE-MY GG) + #DECL ((APLT VALUE) VECTOR (CODE-MY) ANY (GG) <GRFLIST [REST VECTOR]>) + <COND (<OR <TYPE? .CODE-MY FALSE FORM> + <AND <TYPE? .CODE-MY FIX> + <G? .CODE-MY 0>>> + <PUT .APLT 7 .CODE-MY>) + (T + <PUT .APLT 7 + <MAPF <FUNCTION ("TUPLE" USED "AUX" (GNUM 1)) + #DECL ((GNUM VALUE) FIX (USED) TUPLE) + <PROG () + <COND (<MEMQ .GNUM .USED> + <SET GNUM <+ .GNUM 1>> + <AGAIN>)>> + .GNUM> + 7 + .GG>>)>> + + <SET NEED-BLANKING <SET HAVE-BLANKED <>>> + +<SET GRIT_EXPLNTN_POSN -1> + +<SET GRID-IS-NULL <>> + +<DEFINE REGRAPH ("TUPLE" TO_GRAPH) + #DECL ((TO_GRAPH) <TUPLE [REST FIX]> (GLOBAL_GRAPHS) GRFLIST) + <REGRAPHER .GLOBAL_GRAPHS !.TO_GRAPH>> + +<DEFINE REGRAPHER (X-MY + "TUPLE" ITEMS + "AUX" (CONSCAL #FALSE ()) + (NOERASE T) + (TITLE + <OR <AND <NOT .NEED-BLANKING> + <NOT .HAVE-BLANKED> + <GET .GLOBAL_GRAPHS TITLE>> + <GET .X-MY TITLE>>) + FEW-ITEMS GGTAIL GNUM) + #DECL ((TITLE NOERASE) <SPECIAL ANY> (ITEMS) <TUPLE [REST FIX]> + (FEW-ITEMS) <VECTOR [REST FIX]> + (X-MY GLOBAL_GRAPHS) <SPECIAL <GRFLIST [REST VECTOR]>> + (GGTAIL) LIST (GNUM) FIX) + <COND (<EMPTY? .X-MY> + <ERROR EMPTY-GRFLIST-ARGUMENT--ERRET-ANYTHING!-ERRORS>) + (T + <SET FEW-ITEMS + <MAPR <FUNCTION ("TUPLE" STUFF "AUX" (J 0)) + #DECL ((STUFF) TUPLE (J) <SPECIAL FIX> (VALUE) VECTOR) + <COND (<EMPTY? .STUFF> + <IVECTOR <LENGTH .X-MY> '<SET J <+ 1 .J>>>) + (T <VECTOR !.STUFF>)>> + <FUNCTION (DTAIL "AUX" (DEX <1 .DTAIL>)) + #DECL ((DTAIL) <TUPLE [REST FIX]> (DEX) FIX) + <COND (<0? .DEX><MAPRET>) + (<LENGTH? .X-MY <- <ABS .DEX> 1>> + <ERROR REGRAPH-INDEX-OUT-OF-RANGE--ERRET-ANYTHING!-ERRORS .DEX> + <MAPRET>) + (<OR <MEMQ .DEX <REST .DTAIL>> + <MEMQ <- .DEX> <REST .DTAIL>>> + <ERROR DUPL-REGRAPH-INDEX--ERRET-ANYTHING!-ERROR .DEX> + <MAPRET>)> + .DEX> + .ITEMS>> + <COND (<==? .GLOBAL_GRAPHS .X-MY> + <COND (.NEED-BLANKING + <MAPF <> + <FUNCTION (VEC) #DECL ((VEC) VECTOR) + <GSBLANK <6 .VEC>>> + .X-MY>)> + <COND (<OR .NEED-BLANKING .HAVE-BLANKED> + <SET GLOBAL_MAKE_GRID T> + <MAPF <> + <FUNCTION (DEX) #DECL ((DEX) FIX) + <COND (<G? .DEX 0> + <GSCHANGE <6 <NTH .X-MY .DEX>>> + <GSUNBLANK>)>> + .FEW-ITEMS>) + (T + <MAPF <> + <FUNCTION (DEX) #DECL ((DEX) FIX) + <COND (<G? .DEX 0> + <GSUNBLANK <6 <NTH .X-MY .DEX>>>) + (T <GSBLANK <6 <NTH .X-MY <- .DEX>>>>)>> + .FEW-ITEMS>)>) + (<OR .NEED-BLANKING .HAVE-BLANKED + <EMPTY? .GLOBAL_GRAPHS>> + <MAPF <> + <FUNCTION (VEC) #DECL ((VEC) VECTOR) + <COND (<NOT <MEMQ .VEC .X-MY>> + <GSREMOVE <6 .VEC>> + <PUT .VEC 6 <>>)>> + .GLOBAL_GRAPHS> + <SET GRIT_EXPLNTN_POSN -1> + <MAPF <> + <FUNCTION (VEC) #DECL ((VEC) VECTOR) + <COND (<GET .VEC PLOT> + <PUT .VEC PLOT <SET GRIT_EXPLNTN_POSN + <+ 1 .GRIT_EXPLNTN_POSN>>>)> + <PUT .VEC 7 <>>> + .X-MY> + <MAPF <> + <FUNCTION (VEC) + <AGRITCH .VEC <GET .VEC FANCY_CHAR> .X-MY>> + .X-MY> + <SET GNUM 0> + <MAPF <> + <FUNCTION (VEC) #DECL ((VEC) VECTOR) + <COND (<6 .VEC> + <GSCHANGE <6 .VEC>>) + (T + <PUT .VEC 6 <GSBEGIN ,DO_VEC_P .VEC>>)> + <COND (<MEMQ <SET GNUM <+ .GNUM 1>> .FEW-ITEMS> + <GSUNBLANK>) + (T + <GSEND>)>> + .X-MY> + <SET GLOBAL_MAKE_GRID T> + <SET GLOBAL_GRAPHS .X-MY>) + (T + <SET GGTAIL <REST .GLOBAL_GRAPHS <- <LENGTH .GLOBAL_GRAPHS> 1>>> + <MAPF <> + <FUNCTION (DEX "AUX" VEC) #DECL ((DEX) FIX (VEC) VECTOR) + <COND (<MEMQ <SET VEC <NTH .X-MY <ABS .DEX>>> .GLOBAL_GRAPHS> + <COND (<G? .DEX 0> + <GSUNBLANK <6 .VEC>>) + (T <GSBLANK <6 .VEC>>)>) + (T + <COND (<GET .VEC PLOT> + <PUT .VEC PLOT <SET GRIT_EXPLNTN_POSN + <+ 1 .GRIT_EXPLNTN_POSN>>>)> + <AGRITCH .VEC <GET .VEC FANCY_CHAR> .GLOBAL_GRAPHS> + <COND (<6 .VEC><ERROR>)> + <PUT .VEC 6 <GSBEGIN ,DO_VEC_P .VEC>> + <COND (<G? .DEX 0> + <GSUNBLANK>) + (T <GSBLANK>)> + <SET GGTAIL <REST <PUTREST .GGTAIL (.VEC)>>>)>> + .FEW-ITEMS>)> + <PUT .GLOBAL_GRAPHS TITLE .TITLE> + <SET HAVE-BLANKED <SET NEED-BLANKING <>>> + <VEC_PLOTTER .GLOBAL_GRAPHS .GLOBAL_MAKE_GRID .CONSCAL>)> + <CHTYPE .GLOBAL_GRAPHS GRFLIST>> + +<APPLYTYPE GRFLIST ,REGRAPHER> + +<DEFINE CLEAR-GRAPHS ("AUX" (NOERASE T)) + #DECL ((VALUE) FALSE (NOERASE) <SPECIAL ANY>) + <SET NEED-BLANKING T> + <GIVE-GG> + <GSBLANK .PLOT-SEGMENT> + <GSEND-UPDATES> + <SET GLOBAL_CONSERVE_SCALE <>>> + +<DEFINE GIVE-GG () + #DECL ((VALUE GLOBAL_GRAPHS) <GRFLIST [REST VECTOR]>) + <COND (<OR .NEED-BLANKING .HAVE-BLANKED> + <MAPF <> + <FUNCTION (VEC) #DECL ((VEC) VECTOR) + <GSREMOVE <6 .VEC>> + <PUT .VEC 6 <>>> + .GLOBAL_GRAPHS> + <SET GLOBAL_MAKE_GRID T> + <SET GRIT_EXPLNTN_POSN -1> + <SET GLOBAL_GRAPHS <CHTYPE <LIST> GRFLIST>> + <SET HAVE-BLANKED <SET NEED-BLANKING <>>>)> + .GLOBAL_GRAPHS> + +<DEFINE VEC_PLOTTER (PLOT_LIST + "OPTIONAL" (MAKE_GRID <>) (CONSERVE_SCALE <>) + "AUX" XMIN XMAX YMIN YMAX + XMIN1 XMAX1 YMIN1 YMAX1 + PS1 PS2 PS3 PS4 + T1 T2 T3 T4) + #DECL ((PLOT_LIST) STRUCTURED (VALUE) 'T + (PLOT_SCALE) <VECTOR [4 <OR FIX FLOAT>] <UVECTOR [4 FLOAT]>> + (CONSERVE_SCALE XMIN XMIN1 XMAX XMAX1 YMIN YMIN1 YMAX YMAX1) + <SPECIAL ANY> + (GLOBAL_GRAPHS) GRFLIST (PLOT-SEGMENT) GSEG) + <PROG () + <SET XMIN <MAPF ,MIN + #FUNCTION ((F) #DECL ((VALUE) <OR FIX FLOAT> + (F) <VECTOR [5 ANY] GSEG>) + <COND (<NOT <OR <NTH <6 .F> ,SEG-LVS> + <NTH <6 .F> ,SEG-NVS>>><MAPRET>)> + <2 .F>) + .PLOT_LIST>> + <COND (<==? <MIN> .XMIN><RETURN>)> + <SET XMAX <MAPF ,MAX + #FUNCTION ((F) #DECL ((VALUE) <OR FIX FLOAT> + (F) <VECTOR [5 ANY] GSEG>) + <COND (<NOT <OR <NTH <6 .F> ,SEG-LVS> + <NTH <6 .F> ,SEG-NVS>>><MAPRET>)> + <3 .F>) + .PLOT_LIST>> + <SET YMIN <MAPF ,MIN + #FUNCTION ((F) #DECL ((VALUE) <OR FIX FLOAT> + (F) <VECTOR [5 ANY] GSEG>) + <COND (<NOT <OR <NTH <6 .F> ,SEG-LVS> + <NTH <6 .F> ,SEG-NVS>>><MAPRET>)> + <4 .F>) + .PLOT_LIST>> + <SET YMAX <MAPF ,MAX + #FUNCTION ((F) #DECL ((VALUE) <OR FIX FLOAT> + (F) <VECTOR [5 ANY] GSEG>) + <COND (<NOT <OR <NTH <6 .F> ,SEG-LVS> + <NTH <6 .F> ,SEG-NVS>>><MAPRET>)> + <5 .F>) + .PLOT_LIST>> + <SET T1 <NUML? <SET XMIN1 <MIN .XMIN <SET PS1 <1 .PLOT_SCALE>>>> .PS1>> + <SET T2 <NUMG? <SET XMAX1 <MAX .XMAX <SET PS2 <2 .PLOT_SCALE>>>> .PS2>> + <SET T3 <NUML? <SET YMIN1 <MIN .YMIN <SET PS3 <3 .PLOT_SCALE>>>> .PS3>> + <SET T4 <NUMG? <SET YMAX1 <MAX .YMAX <SET PS4 <4 .PLOT_SCALE>>>> .PS4>> + <COND + (<OR .T1 .T2 .T3 .T4 .MAKE_GRID> + <MAPPER PLOT_SCALE + <COND (.CONSERVE_SCALE <GSSCALE .XMIN1 .XMAX1 .YMIN1 .YMAX1>) + (T + <GENEROUS_SCALE .XMIN .XMAX .YMIN .YMAX>)>> + <COND (<AND <ASSIGNED? NO-DRAW> .NO-DRAW> <RETURN>)> + <COND (<OR <N==? .PS1 <1 .PLOT_SCALE>> + <N==? .PS2 <2 .PLOT_SCALE>> + <N==? .PS3 <3 .PLOT_SCALE>> + <N==? .PS4 <4 .PLOT_SCALE>>> + <GSCHANGE .PLOT-SEGMENT> + <GSUNBLANK> + <MAPF <> + <FUNCTION (X "AUX" SEG) #DECL ((X) VECTOR (SEG) GSEG) + <COND (<NTH <SET SEG <6 .X>> ,SEG-LVS> + <GSCHANGE .SEG> + <GSUNBLANK .SEG>)>> + .GLOBAL_GRAPHS>)>) + (T + <COND (<AND <ASSIGNED? NO-DRAW> .NO-DRAW> <RETURN>)>)> + <COND (.GRID-IS-NULL + <SET GRID-IS-NULL <>> + <GSCHANGE .PLOT-SEGMENT>)> + <GSUNBLANK .PLOT-SEGMENT> + <SET NOERASE <>> + <GSEND-UPDATES> + >T> + + <DEFINE GRSTORE ("OPTIONAL" A1 HITTEST) + <COND (.NEED-BLANKING <SET GRID-IS-NULL T>) + (T <MAPPER PLOT_SCALE <GRID>>)>> + +<DEFINE GRID ("OPTIONAL" (DGTL .DGTL) (XINC <NICE_INC <- .RIGHT .LEFT>>) + (YINC <NICE_INC <- .GTOP .BOTTOM>>) + "AUX" (BOTTOM .BOTTOM)(LEFT .LEFT)(GTOP .GTOP)(RIGHT .RIGHT) + (XBOUNDS <NICE_BOUNDS .LEFT .RIGHT .XINC>) + (YBOUNDS <NICE_BOUNDS .BOTTOM .GTOP .YINC>) + (VL <* .DGTL <- .GTOP .BOTTOM>>) + (HL <* .DGTL <- .RIGHT .LEFT>>) + (LT .GTOP) (LB <- .GTOP .VL>) + (LR .RIGHT) (LL <- .RIGHT .HL>) + (BLN <+ .BOTTOM .VL>) + (LLN <+ .LEFT .HL>) + (XCENTER + <COND (<G=? <* .LEFT .RIGHT> 0> + .LEFT) + (<G=? .LLN <- .HL>> + <SET LLN .HL> + 0.0) + (T + <SET LL <- .HL>> + <SET LR <MIN .RIGHT .HL>> + 0.0)>) + (YCENTER + <COND (<G=? <* .BOTTOM .GTOP> 0.0> + .BOTTOM) + (<G=? .BLN <- .VL>> + <SET BLN .VL> + 0.0) + (T + <SET LB <- .VL>> + <SET LT <MIN .GTOP .VL>> + 0.0)>) + (TITLE <GET .GLOBAL_GRAPHS TITLE>) + (MARK-X-AXIS <AND .TITLE <2 .TITLE>>) + (MARK-Y-AXIS <AND .TITLE <3 .TITLE>>)) + #DECL ((VALUE) 'T (XINC YINC DGTL) <OR FIX FLOAT> + (XBOUNDS YBOUNDS) <VECTOR [2 <OR FIX FLOAT>]> + (XCENTER YCENTER BOTTOM LEFT RIGHT GTOP + VL HL LT LB LR LL BLN LLN) <OR FIX FLOAT>) + <SET GLOBAL_MAKE_GRID <>> + <GFMUNG 0 + 0 + .LEFT + .BOTTOM + .LEFT + .GTOP + .RIGHT + .GTOP + .RIGHT + .BOTTOM + .LEFT + .BOTTOM> + <COND (<AND .MARK-X-AXIS + <COND (<TYPE? .MARK-X-AXIS LIST> + <PROG ((YDEL <* 0.03 <- .GTOP .BOTTOM>>) + (XMID <* 0.5 <+ .RIGHT .LEFT>>) + (YSTART <- .BOTTOM <* 0.05 <- .GTOP .BOTTOM>>>)) + <MAPF + <> + <FUNCTION (LIN) #DECL ((LIN) <OR STRING CHARACTER>) + <POSITION .XMID <SET YSTART <- .YSTART .YDEL>>> + <AND <TYPE? .LIN STRING> + <BSPACE </ <- <LENGTH .LIN> 1> 2>>> + <GSTEXT .LIN> + T> + .MARK-X-AXIS>> + <>) + (<EVAL .MARK-X-AXIS>)>>) + (T + <AND <G? .YCENTER .BOTTOM> + <LINE_SEG .LEFT .YCENTER .RIGHT .YCENTER>> + <REPEAT ((POS <1 .XBOUNDS>)) + <LINE_SEG .POS .BLN .POS .BOTTOM> + <GSTEXT <ASCII 10>> + <NUMPRINT .POS .XINC 2> + <COND (<NUMG? <SET POS <+ .POS .XINC>> <2 .XBOUNDS>> + <RETURN T>)>> + <REPEAT ((POS <1 .XBOUNDS>)) + <LINE_SEG .POS .LB .POS .LT> + <COND (<NUMG? <SET POS <+ .POS .XINC>> <2 .XBOUNDS>> + <RETURN T>)>>)> + <COND (<AND .MARK-Y-AXIS + <COND (<TYPE? .MARK-Y-AXIS LIST> + <PROG ((YDEL <* 0.03 <- .GTOP .BOTTOM>>) + (XSTART <+ <* 1.3 .LEFT><* -0.3 .RIGHT>>) + (YSTART <+ <* 0.5 + <+ <LENGTH .MARK-Y-AXIS> 1> + .YDEL> + <* 0.5 <+ .GTOP .BOTTOM>>>)) + <MAPF + <> + <FUNCTION (LIN) + <POSITION .XSTART <SET YSTART <- .YSTART .YDEL>>> + <GSTEXT .LIN> + T> + .MARK-Y-AXIS>> + <>) + (<EVAL .MARK-Y-AXIS>)>>) + (T + <AND <G? .XCENTER .LEFT> + <LINE_SEG .XCENTER .GTOP .XCENTER .BOTTOM>> + <REPEAT ((POS <1 .YBOUNDS>)) + <LINE_SEG .LLN .POS .LEFT .POS> + <GSTEXT !"> + <NUMPRINT .POS .YINC 1> + <COND (<NUMG? <SET POS <+ .POS .YINC>> <2 .YBOUNDS>> + <RETURN T>)>> + <REPEAT ((POS <1 .YBOUNDS>)) + <LINE_SEG .LR .POS .LL .POS> + <COND (<NUMG? <SET POS <+ .POS .YINC>> <2 .YBOUNDS>> + <RETURN T>)>>)> + <GSTEXT " "> + <GSTEXT !"> + <COND (<AND .TITLE <SET TITLE <1 .TITLE>>> + <PROG ((YDEL <* 0.03 <- .GTOP .BOTTOM>>) + (XMID <* 0.5 <+ .RIGHT .LEFT>>) + (YSTART <+ .GTOP + <* 0.05 <- .GTOP .BOTTOM>> + <* .YDEL <LENGTH .TITLE>>>)) + <MAPF <> + <FUNCTION (LIN) + <POSITION .XMID <SET YSTART <- .YSTART .YDEL>>> + <COND (<TYPE? .LIN STRING> + <BSPACE </ <- <LENGTH .LIN> 1> 2>>)> + <GSTEXT .LIN> + T> + .TITLE>>)> + T> + +<DEFINE NUMPRINT (NUM DIFF + "OPTIONAL" (BS #FALSE ()) + "AUX" (TOL <* 0.09999999 <TEN_ROUND .DIFF>>) (SIGN <>) (B 1) + TEMPA TEMPB) + #DECL ((NUM DIFF) <OR FLOAT FIX> (TOL) FLOAT (B) FIX + (TEMPA) <OR FIX STRING> (TEMPB) STRING) + <COND + (<OR <TYPE? .NUM FIX> + <AND <G? .DIFF 9.0><SET NUM <FIX <+ .NUM 0.5>>>>> + <AND .BS <BSPACE </ <FLATSIZE .NUM 100> .BS>>> + <GSTEXT <UNPARSE .NUM>>) + (T + <COND (<NUML? .NUM 0> + <SET SIGN T> + <SET B <+ .B 1>> + <SET NUM <ABS .NUM>>)> + <SET NUM + <MAX 0.0000000 + <- .NUM <SET TEMPA <FIX <+ .NUM <* 0.5 .TOL>>>>>>> + <SET TEMPA <UNPARSE .TEMPA>> + <SET NUM <FIX <+ 0.5 + <* 10.0 + </ <+ 1 .NUM> <TEN_ROUND .DIFF>>>>>> + <SET TEMPB <REST <UNPARSE + <COND (<0? <MOD .NUM 10>> </ .NUM 10>) + (T .NUM)>>>> + <AND .BS + <BSPACE </ <+ .B <LENGTH .TEMPA> <LENGTH .TEMPB>> .BS>>> + <AND .SIGN <GSTEXT !"->> + <GSTEXT <STRING .TEMPA + !". + .TEMPB>>)>> + +<DEFINE NUMG? (A B) + #DECL ((A B) <OR FIX FLOAT>) + <NOT <OR <L? .A .B> <NUMEQ? .A .B>>>> + +<DEFINE NUML? (A B) + #DECL ((A B) <OR FIX FLOAT>) + <NOT <OR <G? .A .B> <NUMEQ? .A .B>>>> + +<DEFINE NUMEQ? (A B) + #DECL ((A B) <OR FIX FLOAT>) + <L? <ABS </ <- .A .B> <MAX 0.99999994E-4 <ABS <FLOAT .B>>>>> + 1.0E-5>> + +<DEFINE BSPACE (N) #DECL ((N) FIX (BSPACES) STRING) + <GSTEXT <REST .BSPACES <- 100 .N>>>> + +<SET BSPACES <ISTRING 100 <ASCII 8>>> + +<SET DGTL 0.15000000E-1> + +<SET DESIRED_INC 6> + +<DEFINE GENEROUS_SCALE (XMIN XMAX YMIN YMAX) + #DECL ((XMIN XMAX YMIN YMAX) <OR FLOAT FIX>) + <GSSCALE !<GENEROUS_BOUNDS .XMIN .XMAX!> + !<GENEROUS_BOUNDS .YMIN .YMAX!>>> + +<DEFINE GENEROUS_BOUNDS (MIN-MY MAX-MY + "AUX" (DESIRED_INC <- .DESIRED_INC 1>) + (INC <NICE_INC <- .MAX-MY .MIN-MY>>)) + #DECL ((MIN-MY MAX-MY) <OR FIX FLOAT> (DESIRED_INC) <SPECIAL <OR FIX FLOAT>> + (INC) FLOAT) + [<* .INC <FIX <- </ <FLOAT .MIN-MY> .INC> 0.09999999>>> + <* .INC <FIX <+ </ <FLOAT .MAX-MY> .INC> 1.0999999>>>]> + +<DEFINE NICE_BOUNDS (MIN-MY MAX-MY INC) + #DECL ((MIN-MY MAX-MY INC) <OR FLOAT FIX> (VALUE) VECTOR) + [<* .INC <FIX <+ </ <FLOAT .MIN-MY> .INC> 1.0100000>>> + <* .INC <FIX <+ </ <FLOAT .MAX-MY> .INC> -1.0E-2>>>]> + +<DEFINE NICE_INC (X) + #DECL ((X) <OR FLOAT FIX> (VALUE) FLOAT) + <MAX <TEN_ROUND </ .X <* 1.0 .DESIRED_INC>>> + <* 2.0 <TEN_ROUND </ .X <* 2.0 .DESIRED_INC>>>> + <* 5.0 <TEN_ROUND </ .X <* 5.0 .DESIRED_INC>>>>>> + +<DEFINE TEN_ROUND (X) + #DECL ((X) <OR FLOAT FIX> (VALUE) FLOAT) + <AND <0? .X> <SET X 0.10000000E-2>> + <EXP <* <LOG 10> <- <FIX <+ </ <LOG .X> <LOG 10>> 100>> 100>>>> + + <DEFINE DO_VEC_P (XX "OPTIONAL" YY ZZ "AUX" GRFNUM) + #DECL ((XX GRFNUM) <SPECIAL ANY> + (GLOBAL_GRAPHS) GRFLIST) + <COND (<AND <NOT .NEED-BLANKING> + <SET GRFNUM <MEMQ .XX .GLOBAL_GRAPHS>>> + <SET GRFNUM <+ 1 <- <LENGTH .GLOBAL_GRAPHS><LENGTH .GRFNUM>>>> + <MAPPER PLOT_SCALE <VEC_P .XX .GRFNUM>>)>> + +<DEFINE VEC_P (VEC GRFNUM + "AUX" (HERE <1 .VEC>) CHR TEMP + IGRITCH_POS X1 X2 Y1) + #DECL ((VEC) STRUCTURED (THIN-PLOT SURPRESS-GRAPH-NUMBERS) <SPECIAL ANY> + (X1 X2 Y1) FLOAT (GRFNUM) FIX + (LEFT RIGHT BOTTOM GTOP) <SPECIAL <OR FIX FLOAT>>) + <AND <NOT <EMPTY? .HERE>> + <AND <SET TEMP <7 .VEC>> + <SET CHR <OR <AND <TYPE? .TEMP FORM> .TEMP> + <FANCY_CHAR .TEMP>>> + <REPEAT () + <GFMUNG 0 0 <1 .HERE> <2 .HERE>> + <EVAL .CHR> + <AND <EMPTY? <SET HERE <REST .HERE 2>>> <RETURN T>>>>> + <OR <SET IGRITCH_POS <GET .VEC PLOT>> + <GFMUNGER 0 0 <OR <GET .VEC THIN-PLOT><1 .VEC>>>> + <COND (<EMPTY? <1 .VEC>> T) + (<OR + <AND .IGRITCH_POS + <SET X1 <+ .LEFT <* <- .RIGHT .LEFT> + <+ 0.05 <* 0.15000000 <MOD .IGRITCH_POS 6>>>>>> + <SET X2 <+ .X1 <* 0.3E-1 <- .RIGHT .LEFT>>>> + <SET Y1 <- .BOTTOM <* <+ 0.75E-1 <* .03 </ .IGRITCH_POS 6>>> + <- .GTOP .BOTTOM>>>> + <POSITION .X1 .Y1> + <EVAL .CHR> + <POSITION .X2 .Y1>> + <NOT <AND <ASSIGNED? SURPRESS-GRAPH-NUMBERS> + .SURPRESS-GRAPH-NUMBERS>>> + <GSTEXT <UNPARSE (.GRFNUM)>>)>> + +<SET DFCS 0.10000000E-1> + +<SET FANCY_CHARS + '[<FORM GFMUNG 0 1 .H 0 .-H .-V .-H .V .H .V .H .-V> + <FORM GFMUNG 0 1 .H .-V .-H2 0 0 .V2 .H2 0 0 .-V2> + <FORM GFMUNG 0 1 .H .V .-H2 .-V2 .H .V .-H .V .H2 .-V2> + <FORM GFMUNG 0 1 0 .V 0 .-V2 0 .V .-H 0 .H2 0> + <FORM GFMUNG 0 1 .H .V .-H2 0 .H2 .-V2 .-H2 0 .H2 .V2> + <FORM GFMUNG 0 1 .H .V 0 .-V2 .-H2 .V2 0 .-V2 .H2 .V2>]> + +<DEFINE FANCY_CHAR ("OPTIONAL" (N 1) (SIZE .DFCS) + "AUX" (H <* .SIZE <- .RIGHT .LEFT>>) + (V <* .SIZE <- .GTOP .BOTTOM>>) (-H <- .H>) + (-V <- .V>) (H2 <* 2 .H>) (V2 <* 2 .V>) + (-H2 <* -2 .H>) (-V2 <* -2 .V>)) + #DECL ((H V -H -V H2 V2 -H2 -V2 RIGHT LEFT BOTTOM GTOP DFCS) + <SPECIAL <OR FIX FLOAT>> (N) FIX + (FANCY_CHARS) VECTOR) + <OR <AND <NOT <G? .N <LENGTH .FANCY_CHARS>>> + <EVAL <NTH .FANCY_CHARS .N>>> + <FORM GSTEXT + <ASCII <OR <AND <L? <SET N <- .N <LENGTH .FANCY_CHARS>>> 27> + <+ .N 64>> + <+ 96 <MOD .N 26>>>>>>> + + <DEFINE CONT-L-SEARCH (CR CN) + #DECL ((CR) CHARACTER) + <COND (<==? .CR <ASCII 12>> <ERASE_S>)>> + +<DEFINE ERASE_S () + #DECL ((VALUE) ANY + (NOERASE NEED-BLANKING HAVE-BLANKED GLOBAL_CONSERVE_SCALE) <SPECIAL ANY> + (GLOBAL_GRAPHS) <GRFLIST [REST VECTOR]> (DEV-DISPATCH) VECTOR) + <COND(<NOT <OR <EMPTY? .GLOBAL_GRAPHS> + .HAVE-BLANKED + <AND <ASSIGNED? NOERASE> .NOERASE>>> + <COND (<==? <NTH .DEV-DISPATCH ,OFF-BEGIN> + <NTH .DEV-DISPATCH ,OFF-UNBLANK>> + <SET NEED-BLANKING T>) + (T + <SET HAVE-BLANKED T> + <SET NEED-BLANKING <>> + <GSBLANK .PLOT-SEGMENT> + <MAPF <> + <FUNCTION (X) #DECL ((X) <VECTOR [7 ANY]>) + <GSBLANK <6 .X>>> + .GLOBAL_GRAPHS> + <GSEND-UPDATES>)> + <SET GLOBAL_CONSERVE_SCALE <>>)>> + +<DEFINE GRAPH_TITLE (TITLE "OPTIONAL" (TGRF .GLOBAL_GRAPHS) + "AUX" (CTIT <GET .TGRF TITLE>)) + #DECL ((TITLE) <SPECIAL ANY> (VALUE) ANY + (TGRF GLOBAL_GRAPHS) GRFLIST (PLOT-SEGMENT) GSEG) + <SET TITLE <COND(<TYPE? .TITLE STRING CHARACTER> + (.TITLE)) + (<TYPE? .TITLE LIST> + <COND (<EMPTY? .TITLE> '("()")) + (T <MAPF ,LIST + <FUNCTION (LIN) + <COND (<TYPE? .LIN STRING CHARACTER> + .LIN) + (<UNPARSE .LIN>)>> + .TITLE>)>) + (<NOT .TITLE> .TITLE) + ((<UNPARSE .TITLE>))>> + <COND (.CTIT <PUT .CTIT 1 .TITLE>) + (T <PUT .TGRF TITLE [.TITLE <> <>]>)> + <AND <==? .TGRF .GLOBAL_GRAPHS> + <NOT <EMPTY? .GLOBAL_GRAPHS>> + <PROG () <GSCHANGE .PLOT-SEGMENT> + <GSUNBLANK>>> + .TITLE> + +<DEFINE GRAPH_X (XTITLE "OPTIONAL" (TGRF .GLOBAL_GRAPHS) "AUX" (CTIT <GET .TGRF TITLE>)) + #DECL ((XTITLE) <OR FALSE + STRING + CHARACTER + <LIST [REST <OR STRING CHARACTER>]> + FORM> + (VALUE) <OR FALSE <LIST [REST <OR STRING CHARACTER>]> FORM> + (TGRF GLOBAL_GRAPHS) GRFLIST (PLOT-SEGMENT) GSEG) + <COND (<TYPE? .XTITLE STRING CHARACTER> + <SET XTITLE (.XTITLE)>)> + <COND (.CTIT <PUT .CTIT 2 .XTITLE>) + (T <PUT .TGRF TITLE [<> .XTITLE <>]>)> + <AND <==? .TGRF .GLOBAL_GRAPHS> + <NOT <EMPTY? .GLOBAL_GRAPHS>> + <PROG () <GSCHANGE .PLOT-SEGMENT> + <GSUNBLANK>>> + .XTITLE> + +<DEFINE GRAPH_Y (YTITLE "OPTIONAL" (TGRF .GLOBAL_GRAPHS) "AUX" (CTIT <GET .TGRF TITLE>)) + #DECL ((YTITLE) <OR FALSE + STRING + CHARACTER + <LIST [REST <OR STRING CHARACTER>]> + FORM> + (VALUE) <OR FALSE <LIST [REST <OR STRING CHARACTER>]> FORM> + (TGRF GLOBAL_GRAPHS) GRFLIST (PLOT-SEGMENT) GSEG) + <COND (<TYPE? .YTITLE STRING CHARACTER> + <SET YTITLE (.YTITLE)>)> + <COND (.CTIT <PUT .CTIT 3 .YTITLE>) + (T <PUT .TGRF TITLE [<> <> .YTITLE]>)> + <AND <==? .TGRF .GLOBAL_GRAPHS> + <NOT <EMPTY? .GLOBAL_GRAPHS>> + <PROG () <GSCHANGE .PLOT-SEGMENT> + <GSUNBLANK>>> + .YTITLE> + +<DEFINE GRAPH_COMMENT (COMMENT-MY + "OPTIONAL" ITEM-MY + "AUX" (TEMP .GLOBAL_GRAPHS)) + #DECL ((VALUE ITEM-MY COMMENT-MY) ANY + (TEMP GLOBAL_GRAPHS) GRFLIST) + <COND (<OR <ASSIGNED? ITEM-MY> + <AND <NOT <EMPTY? .TEMP>> + <SET ITEM-MY <NTH .TEMP <LENGTH .TEMP>>>>> + <PUT .ITEM-MY COMMENT .COMMENT-MY>)> + .COMMENT-MY> + +<DEFINE GRAPH_DATA ("OPTIONAL" (GRFS .GLOBAL_GRAPHS) + "AUX" (GFNUM 0) (TITLE <GET .GRFS TITLE>)) + #DECL ((GFNUM) FIX (VALUE) ATOM (GRFS GLOBAL_GRAPHS) GRFLIST) + <COND (.TITLE + <AND <1 .TITLE> + <PRINC <STRING "TITLE: " <UNPARSE <1 .TITLE>> " +">>> + <AND <2 .TITLE> + <PRINC <STRING "X-AXIS TITLE: " <UNPARSE <2 .TITLE>> " +">>> + <AND <3 .TITLE> + <PRINC <STRING "Y-AXIS TITLE: " <UNPARSE <3 .TITLE>> " +">>>)> + <MAPF <> + <FUNCTION (GF "AUX" TEMP) + <PRINT (<SET GFNUM <+ .GFNUM 1>>)> + <AND <SET TEMP <GET .GF COMMENT>> <PRINC .TEMP> <TERPRI>> + <AND <SET TEMP <GET .GF GRF>> <MAPF <> ,PRINC .TEMP>> + <TERPRI>> + .GRFS> + T> + + <DEFINE DEMO ("OPTIONAL" (FILE "DSK:MUDDLE;UGRF DEMO")) + #DECL ((VALUE) '"BEGINNING" (RINCHAN INCHAN) <SPECIAL CHANNEL> + (CHRS) <SPECIAL STRING> (FILE) STRING) + <SET CHRS ""> + <AND <SET RINCHAN <OPEN "READ" .FILE>> + <SET INCHAN <OPEN "READ" "INT:" ,CHARGIVER>> + "BEGINNING">> + +<DEFINE CHARGIVER ("AUX" TEMP) + #DECL ((VALUE TEMP) CHARACTER (CHRS) <SPECIAL STRING> + (RINCHAN) <SPECIAL CHANNEL>) + <COND (<EMPTY? .CHRS> + <SET TEMP <READCHR ,INCHAN>> + <AND <==? .TEMP <ASCII 27>> + <SET CHRS <UNPARSE <READ .RINCHAN '<ASCII 3>>>>> + .TEMP) + (<SET TEMP <1 .CHRS>> + <SET CHRS <REST .CHRS>> + <PRINC .TEMP>)>> + +<DEFINE END_DEMO () + #DECL ((INCHAN RINCHAN) <SPECIAL CHANNEL> (VALUE) '"DONE") + <CLOSE .INCHAN> <CLOSE .RINCHAN> <SET INCHAN ,INCHAN> "DONE" +> + + <DEFINE SCALE ("TUPLE" ZZ "AUX" (Z .ZZ)) + #DECL ((VALUE) 'T (Z) <SPECIAL ANY> + (GLOBAL_CONSERVE_SCALE GLOBAL_MAKE_GRID) <OR 'T FALSE>) + <MAPPER PLOT_SCALE '<GSSCALE !.Z>> + <VEC_PLOTTER <GIVE-GG> + <SET GLOBAL_MAKE_GRID T> + <SET GLOBAL_CONSERVE_SCALE T>>> + +<HANDLER <GET .INCHAN INTERRUPT> ,CONT-L-SEARCH> + +<SET BACKSPACE <INSERT <REMOVE ,NULL> <ROOT>>> + +<PROG () +<SET PLOT-SEGMENT <GSBEGIN ,GRSTORE>> +<GSEND>> + +<MAPPER PLOT_SCALE + <PROG ((TEM <* 0.05 <- .TBOUND .BBOUND>>)) + <SET LBOUND <+ <* .90 .LBOUND> + <* .10 .RBOUND>>> + <SET TBOUND <- .TBOUND .TEM>> + <SET BBOUND <+ .BBOUND .TEM>> + <GSSCALE>>> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog1/smms.usg142 b/src/mprog1/smms.usg142 new file mode 100644 index 00000000..0b95cb4f --- /dev/null +++ b/src/mprog1/smms.usg142 @@ -0,0 +1,595 @@ + +<PACKAGE "SMMS"> + +<ENTRY SM SM-MAIL SM-S SM-LIST-POST SIGNUP-SHEETS-POST SM-TALK STYI-DRY> + +<USE-DEFER "BIGPRINT" "CELEST" "ITS" "LSRHIL" "MFD" "STR" "TIMFCN"> + +<GDECL (SM-S) <UVECTOR [REST <VECTOR FIX <VECTOR [REST STRING]>>]>> + +<SETG SM-S + ;"Decreasing dates; each must correspond to the first member of the vector!" + ![[<DAYS 78 11 21> '["AV" "SWG" "MSB" "PDL" "SSP"]] ;115 + [<DAYS 78 9 22> '["AV" "SWG" "MSB" "PDL"]] ;113 + [<DAYS 78 9 12> '["AV" "DSY" "MSB" "SWG" "PDL"]] ;113 + [<DAYS 78 6 2> '["AV" "TAA" "DSY" "MSB" "SWG" "PDL"]] ;111 + [<DAYS 78 1 28> '["AV" "DSY" "MSB" "SWG" "PDL"]] ;105 + [<DAYS 77 12 5> '["AV" "DS" "MSB" "SWG" "MB" "PDL"]] ;100 + [<DAYS 77 9 1> '["AV" "MSB" "SWG" "MB" "PDL"]] ;98 + [<DAYS 77 8 1> '["JMB" "TAA" "MSB" "VANISH" "SWG" "MB" "PDL" "AV"]] ;97 + [<DAYS 77 6 28> '["CLR" "MSB" "SWG" "MB" "PDL" "ERB" "AV" "JMB" "TAA"]];94 + [<DAYS 77 6 12> '["CLR" "MSB" "SWG" "MB" "PDL" "ERB" "AV" "JMB"]];93 + [<DAYS 77 2 24> '["CLR" "MSB" "SWG" "MB" "PDL" "ERB" "JFH" "AV" "JMB"]];87 + [<DAYS 77 1 25> '["CLR" "MSB" "SWG" "MB" "PDL" "ERB" "EHB" "JFH" "AV" "JMB"]];86 + [<DAYS 76 8 25> '["CLR" "MSB" "SWG" "MB" "PDL" "ERB" "EHB" "JFH" "AV"]] ;81 + [<DAYS 76 6 24> '["CLR" "MSB" "SWG" "MB" + "MARC" "PDL" "ERB" "EHB" + "JMB" "TAA" "JFH" "AV"]] ;80 + [<DAYS 76 6 3> '["CLR" "MSB" "SWG" "MB" "PDL" "ERB" "EHB" + "JMB" "TAA" "JFH" "AV"]] ;79!]> + +<DEFINE SM ("OPTIONAL" (DT <DTNOW>) ;"Who is SM at this time?" + "AUX" N (D <DAYS !<1 <SET DT <DTNORM .DT>>>>)) + #DECL ((VALUE) <OR STRING FALSE> (DT) <LIST LIST> (D N) FIX) + <MAPF <> + <FUNCTION (V) + <COND (<G=? <SET N <- .D <1 .V>>> 0> + <MAPLEAVE <NTH <2 .V> + <+ 1 <MOD .N <LENGTH <2 .V>>>>>>)>> + ,SM-S>> + +<DEFINE SM-MAIL ("OPTIONAL" ;"COMSYS-mail MSG to SM of given date/time." + (MSG "You are System Manager today. Please do the tape dump.") + (DT <DTNOW>) + (TO <SM .DT>) + (SUBJ "dooties") + "AUX" (C <OPEN "PRINT" "COMSYS;M">) OUTCHAN) + #DECL ((MSG SUBJ) STRING (DT) LIST (TO) <OR FALSE STRING> + (C) <OR FALSE CHANNEL> (OUTCHAN) <SPECIAL CHANNEL>) + <COND (<AND .TO .C> + <SET OUTCHAN .C> + <MAPF <> + ,PRINT + ("TO" + (.TO) + "FROM" + <XUNAME> + "ACTION-TO" + (.TO) + "SUBJECT" + .SUBJ + "TEXT" + .MSG + "SCHEDULE" + '("SENDING" #FALSE ()))> + <CLOSE .C>)>> + +<DEFINE SM-LIST-POST ("OPTIONAL" (C <OPEN "PRINT" "HUDINI;SM LIST">) + (DT <DTNOW>) + "AUX" S M W Y OUTCHAN (CR <STRING <ASCII 13> <ASCII 10>>)) + #DECL ((VALUE) <OR LIST FALSE> (C) <OR CHANNEL FALSE> + (OUTCHAN) <SPECIAL CHANNEL> + (DT) <LIST LIST> (S CR) STRING (M W Y) FIX) + <COND + (.C + <SET OUTCHAN <PUT .C 13 120>> + <SET DT <DTNORM .DT>> + <SET DT <DTNORM ((<1 <1 .DT>> <+ 1 <2 <1 .DT>>> 0) '())>> ;"last of month" + <SET M <+ 2 <2 <1 .DT>>>> ;"month following listing" + <SET Y <1 <1 .DT>>> + <COND (<G? .M 12> <SET M <- .M 12>> <SET Y <+ 1 .Y>>)> + <SET S + <MAPF ,STRING + <FUNCTION () + <COND (<N==? .M <2 <1 <SET DT <DTADD .DT '((1)(0))>>>>> + <STRING .CR + <NTH '[" SUN" + "MON" + "TUE" + "WED" + "THU" + "FRI" + " SAT"] + <SET W <+ 1 <DATE-DOW <1 .DT>>>>> + !\ + <UNPARSE <3 <1 .DT>>> + !\ + <SM .DT> + !\ + <OR <HOLIDAY? <1 .DT>> "">>) + (T <MAPSTOP>)>>>> + <PRINC <ASCII 12>> + <MAPF <> + #FUNCTION ((TIT) + #DECL ((TIT) STRING) + <BIGPRINT <STRING <NTH '["DEC" + "JAN" + "FEB" + "MAR" + "APR" + "MAY" + "JUN" + "JUL" + "AUG" + "SEP" + "OCT" + "NOV"] + .M> + <ASCII 32> + <UNPARSE <COND (<1? .M> <- .Y 1>) (.Y)>>> + 2> + <TERPRI> + <TERPRI> + <PRINC "SYSTEM MANAGER LIST FOR "> + <PRINC .TIT> + <TERPRI> + <PRINC .S> + <TERPRI> + <TERPRI> + <TERPRI> + <PRINC " +AV 3-1450 235-4612 PDL 3-1440 646-3063 +DSY 3-1428 232-6884 SWG 3-1418 646-4256 +MSB 3-1420 TAA 3-1448 494-8292 +"> + <PRINC <ASCII 12>>) + '["SECOND-FLOOR ENTRY" "ROOM 214B" "ROOM 221" "ROOM 930"]> + <COND (<NOT <==? .OUTCHAN ,OUTCHAN>> + ;<ITS-CALL "SDMPBT" '![!] .OUTCHAN 1> + <CLOSE .OUTCHAN> + <ITS-CALL "MLINK" + '![!] + !<MAPF ,UVECTOR + ,STRTOX + ["DSK" + "PLEASE" + "POST" + ".LPTR." + <7 .OUTCHAN> + <8 .OUTCHAN> + <10 .OUTCHAN>]>>)> + .DT)>> + +<GDECL (HOURS) <UVECTOR [REST FIX]>> + +<DEFINE SIGNUP-SHEET ("OPTIONAL" (DTARG <DTNOW>) "AUX" DT) + #DECL ((VALUE) STRING (DTARG) <LIST LIST> (DT) <LIST <LIST FIX FIX FIX>>) + <SET DT (<1 <DTNORM .DTARG>> ())> ;"zero o'clock" + <SET DT <DTADD .DT ((<- 5 <DATE-DOW <1 .DT>>>) ())>> ;"Friday" + <COND (<NOT <AND <GASSIGNED? SHEET> <GASSIGNED? HOURS>>> + <FLOAD "SYSBIN;SIGNUP SHEET">)> + <REPEAT (IT H BL (S <STRING ,SHEET>) (SUB .S) SUBB STR + SR SRH SRHS SRM SS SSH SSHS SSM + (NP <NEXT-PHASE <DTADD .DT '((1) ())>>) ;"next phase of moon" + (NP2 <2 .NP>) + (NP2 <COND (<AND <DST?> <NOT <DST? .NP2>>> <DTADD .NP2 '(() (-1))>) + (<AND <NOT <DST?>> <DST? .NP2>> <DTADD .NP2 '(() (+1))>) + (T .NP2)>) + (NPD <1 .NP2>) + (NPM <2 <2 .NP2>>) + (NPH <1 <2 .NP2>>) + (NPHS <REST ,HOURS .NPH>) + (NS <NEXT-SEASON <DTADD .DT '((1) ())>>) ;"next seasonal change" + (NS2 <2 .NS>) + (NS2 <COND (<AND <DST?> <NOT <DST? .NS2>>> <DTADD .NS2 '(() (-1))>) + (<AND <NOT <DST?>> <DST? .NS2>> <DTADD .NS2 '(() (+1))>) + (T .NS2)>) + (NSD <1 .NS2>) + (NSM <2 <2 .NS2>>) + (NSH <1 <2 .NS2>>) + (NSHS <REST ,HOURS .NSH>) + (MSG <ILIST 7 '<STRING +" | | | | | | | | | | | | | | | | | | | | | | | | | +">>) + (MSG ( +"Legend: <> bracket sunrise/set, () bracket moonrise/set, * = special event + + 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 +" !.MSG)) + (MMSG .MSG) MMSG1 + (SRMSG <REST +" Sunrises: +" 5>) + (SSMSG <REST +" Sunsets: +" 5>)) + #DECL ((S IT STR MMSG1 SRMSG SSMSG) STRING (SUB SUBB H) <OR FALSE STRING> + (NP NS) <VECTOR FIX <LIST LIST <LIST FIX FIX>>> + (NP2 NS2) <LIST LIST <LIST FIX FIX>> + (SR SS) <OR FALSE <LIST LIST <LIST FIX FIX FIX>>> + (SRH SRM SSH SSM NPM NPH NSM NSH) FIX + (SRHS SSHS NPHS NSHS) <UVECTOR FIX FIX> + (MSG MMSG) <LIST [REST STRING]> + (BL NPD NSD) LIST) + <COND + (<AND <SET SUB <MEMBER "sm" .SUB>> ;"Any more days in signup sheet?" + <SET SUBB <MEMBER "nn" .SUB>>> + <SET MMSG1 <1 <SET MMSG <REST .MMSG>>>> + <SET SRMSG <REST .SRMSG 9>> + <SET SSMSG <REST .SSMSG 9>> + <SET DT <DTADD .DT '((1) ())>> + + <SUBSTRUC <SET IT <SM .DT>> 0 <LENGTH .IT> .SUB> ;"system manager" + <SUBSTRUC <SET STR <UNPARSE <+ 100 <3 <1 .DT>>>>> 1 2 .SUBB> + <SUBSTRUC .STR 1 2 .MMSG1> ;"day of month" + <SUBSTRUC <NTH '["JAN" "FEB" "MAR" "APR" "MAY" "JUN" + "JUL" "AUG" "SEP" "OCT" "NOV" "DEC"] + <2 <1 .DT>>> + 0 + 3 + <REST .SUBB 3>> ;"month" + <SUBSTRUC <UNPARSE <1 <1 .DT>>> 0 2 <REST .SUBB 7>> ;"year" + + <COND (<SET H <OR <HOLIDAY? <1 .DT>> ;"Either MIT holiday" + <NON-MIT-HOLIDAY? <1 .DT>>>> ;"or other holiday" + <SUBSTRUC .H 0 <LENGTH .H> <REST .SUB 5>> + <SUBSTRUC .H 0 <LENGTH .H> <REST .MMSG1 4>> ;"holiday" + <SET SUBB <REST .SUB <+ 5 <LENGTH .H>>>> ;"Blot out signups." + <REPEAT ((S <MEMQ <ASCII 13> .SUBB>) + (N <- <LENGTH .SUBB> <LENGTH .S> 15>) + (S .SUBB)) + #DECL ((S) STRING (N) FIX) + <PUT .S 1 !\*> + <SET S <REST .S>> + <AND <0? <SET N <- .N 1>>> <RETURN>>>)> + + <SET SR <SUNRISE .DT 3E-4>> ;"sunrise to nearest second" + <SET SR <COND (<AND <DST?> <NOT <DST? .SR>>> <DTADD .SR '(() (-1))>) + (<AND <NOT <DST?>> <DST? .SR>> <DTADD .SR '(() (+1))>) + (T .SR)>> + <SET SRH <1 <2 .SR>>> + <SET SRHS <REST ,HOURS .SRH>> + <SET SRM <2 <2 .SR>>> + <PUT .SUB + <FIX <+ <1 .SRHS> 1.5 + </ <* <- <2 .SRHS> <1 .SRHS>> .SRM> 60.0>>> + !\>> + <PUT .MMSG1 <FIX <+ <* 3 .SRH> </ .SRM 20.0> 5.5>> !\<> + <SUBSTRUC <UNPARSE <+ 100 .SRH>> 1 2 .SRMSG> + <PUT .SRMSG 3 !\:> + <SUBSTRUC <UNPARSE <+ 100 .SRM>> 1 2 <REST .SRMSG 3>> + <PUT .SRMSG 6 !\:> + <SUBSTRUC <UNPARSE <+ 100 <3 <2 .SR>>>> 1 2 <REST .SRMSG 6>> + + <SET SS <SUNSET .DT 3E-4>> ;"sunset to nearest second" + <SET SS <COND (<AND <DST?> <NOT <DST? .SS>>> <DTADD .SS '(() (-1))>) + (<AND <NOT <DST?>> <DST? .SS>> <DTADD .SS '(() (+1))>) + (T .SS)>> + <SET SSH <1 <2 .SS>>> + <SET SSHS <REST ,HOURS .SSH>> + <SET SSM <2 <2 .SS>>> + <PUT .SUB + <FIX <+ <1 .SSHS> 1.5 + </ <* <- <2 .SSHS> <1 .SSHS>> .SSM> 60.0>>> + !\<> + <PUT .MMSG1 <FIX <+ <* 3 .SSH> </ .SSM 20.0> 5.5>> !\>> + <SUBSTRUC <UNPARSE <+ 100 .SSH>> 1 2 .SSMSG> + <PUT .SSMSG 3 !\:> + <SUBSTRUC <UNPARSE <+ 100 .SSM>> 1 2 <REST .SSMSG 3>> + <PUT .SSMSG 6 !\:> + <SUBSTRUC <UNPARSE <+ 100 <3 <2 .SS>>>> 1 2 <REST .SSMSG 6>> + + <COND (<SET SR <MOONRISE .DT>> ;"moonrise" + <SET SR <COND (<AND <DST?> <NOT <DST? .SR>>> <DTADD .SR '(() (-1))>) + (<AND <NOT <DST?>> <DST? .SR>> <DTADD .SR '(() (+1))>) + (T .SR)>> + <SET SRH <1 <2 .SR>>> + <SET SRHS <REST ,HOURS .SRH>> + <SET SRM <2 <2 .SR>>> + <PUT .SUB + <FIX <+ <1 .SRHS> 1.5 + </ <* <- <2 .SRHS> <1 .SRHS>> .SRM> 60.0>>> + !\)> + <PUT .MMSG1 <FIX <+ <* 3 .SRH> </ .SRM 20.0> 5.5>> !\(>)> + + <COND (<SET SS <MOONSET .DT>> ;"moonset" + <SET SS <COND (<AND <DST?> <NOT <DST? .SS>>> <DTADD .SS '(() (-1))>) + (<AND <NOT <DST?>> <DST? .SS>> <DTADD .SS '(() (+1))>) + (T .SS)>> + <SET SSH <1 <2 .SS>>> + <SET SSHS <REST ,HOURS .SSH>> + <SET SSM <2 <2 .SS>>> + <PUT .SUB + <FIX <+ <1 .SSHS> 1.5 + </ <* <- <2 .SSHS> <1 .SSHS>> .SSM> 60.0>>> + !\(> + <PUT .MMSG1 <FIX <+ <* 3 .SSH> </ .SSM 20.0> 5.5>> !\)>)> + + <COND (<=? <1 .DT> .NPD> ;"change of phase of moon" + <SUBSTRUC <SET STR <NTH '["*New Moon" "*First Quarter" + "*Full Moon" "*Last Quarter"] + <+ 1 <1 .NP>>>> + 0 + <LENGTH .STR> + <REST .SUB + <FIX <+ <1 .NPHS> + </ <* <- <2 .NPHS> <1 .NPHS>> .NPM> 60.0> + 0.5>>>> + <SUBSTRUC <NTH '["*NM" "*FQ" "*FM" "*LQ"] <+ 1 <1 .NP>>> + 0 3 <REST .MMSG1 + <FIX <+ <* 3 .NPH> + </ .NPM 20.0> + 4.5>>>>)> + + <COND (<=? <1 .DT> .NSD> ;"change of season" + <SUBSTRUC <SET STR <NTH '[ "*Vernal Equinox" "*Summer Solstice" + "*Autumnal Equinox" "*Winter Solstice"] + <+ 1 <1 .NS>>>> + 0 + <LENGTH .STR> + <REST .SUB + <FIX <+ <1 .NSHS> + </ <* <- <2 .NSHS> <1 .NSHS>> .NSM> 60.0> + 0.5>>>> + <SUBSTRUC <NTH '["*VE" "*SS" "*AE" "*WS"] <+ 1 <1 .NS>>> + 0 3 <REST .MMSG1 + <FIX <+ <* 3 .NSH> + </ .NSM 20.0> + 4.5>>>>)> + + <COND (<NOT <EMPTY? <SET BL <BD? <GET-MFD "DM"> .DT>>>> ;"birthday(s)" + <SUBSTRUC "Happy birthday to " 0 18 <SET SUBB <REST .SUB 169>>> + <SUBSTRUC <SET H <COND (<LENGTH? .BL 1> <1 .BL>) + (<LENGTH? .BL 2> + <STRING <1 .BL> " and " <2 .BL>>) + (T <STRING <1 .BL> + <MAPF ,STRING + <FUNCTION (S) #DECL ((S) STRING) + <MAPRET ", " .S>> + <REST .BL>>>)>> + 0 + <LENGTH .H> + <SET SUBB <REST .SUBB 18>>> + <PUT .SUBB <+ 1 <LENGTH .H>> !\!> + <SUBSTRUC .H 0 <LENGTH .H> .MMSG1>)>) + + (T + <SM-MAIL <STRING !.MSG <TOP .SRMSG> <TOP .SSMSG>> + '() "SKY-FANS" "upcoming events in sky"> + <RETURN .S>)>>> + +;<DEFINE NEXT-PHASE ("OPTIONAL" (DT <DTNOW>) "AUX" (PHASE '((7) (9 11 1)))) + #DECL ((VALUE) <VECTOR LIST FIX> (DT PHASE) LIST) + <SET DT <DTNORM .DT>> + <REPEAT ((PDT '((77 4 18) (2 52 6) "EST")) (P 0)) ;"NEW MOON" + <COND (<BEFORE? .DT .PDT> <RETURN [.PDT <+ 1 <MOD .P 4>>]>) + (T <SET P <+ 1 .P>> <SET PDT <DTADD .PDT .PHASE>>)>>> + +<GDECL (BIGNUMS) <UVECTOR [REST <VECTOR [REST STRING]>]>> + +<SETG BIGNUMS + '![[" XXXXXXXXX " + " XXXXXXXXXXXXX " + "XXX XXX" + "XXX XXX" + " XXXXXXXXXXXXX " + " XXXXXXXXX "] + ["XXX XX " + "XXX XXX" + "XXXXXXXXXXXXXXX" + "XXXXXXXXXXXXXXX" + "XXX " + "XXX "] + ["XXX XXX " + "XXXX XXX " + "XXXXX XXX" + "XXX XXX XXX" + "XXX XXX XXX " + "XXX XXXXXX "] + [" XXX XXX " + "XXX XXX" + "XX XXX XX" + "XXX XXX XXX" + " XXXXXXXXXXXXX " + " XXXXXXXXX "] + [" XXXXXXXXXX" + " XXXXXXXXXX" + " XXX " + " XXX " + "XXXXXXXXXXXXXXX" + "XXXXXXXXXXXXXXX"] + [" XXX XXXXXXX" + "XXX XXXXXXX" + "XXX XX XX" + "XX XX XX" + "XXXXXXXXXX XX" + " XXXXXXXX XX"] + [" XXXXXXXX " + " XXXXXXXXXXXX " + "XXX XXX XXX " + "XXX XXX XXX" + " XXXXXXX XXX" + " XXX XXX "] + ["XXXX XXXXX" + " XXXX XXX" + " XXXX XXX" + " XXXX XXX" + " XXXXXXX" + " XXXXX"]!]> + +<GDECL (TTYNUMS) <VECTOR [REST STRING]>> + +<DEFINE SIGNUP-SHEETS-POST ("OPTIONAL" (C <OPEN "PRINT" "HUDINI;SIGNUP SHEETS">) + (DT <DTNOW>) + "AUX" S (IX <IUVECTOR <* 2 <LENGTH <1 ,BIGNUMS>>> 0>)) + #DECL ((C) <OR CHANNEL FALSE> (DT) LIST (S) STRING + (IX) <UVECTOR [REST FIX]>) + <COND + (.C + <COND (<NOT <GASSIGNED? TTYNUMS>> <FLOAD "SYSBIN;SIGNUP SHEET">)> + <SET S <SIGNUP-SHEET .DT>> + <MAPF <> + <FUNCTION (NUM) + #DECL ((NUM) STRING) + <REPEAT ((SUB .S) (RIX .IX) + (NUMVEC + <NTH ,BIGNUMS <- <ASCII <1 .NUM>> <ASCII !\0> -1>>)) + #DECL ((SUB) STRING (RIX) <UVECTOR [REST FIX]> + (NUMVEC) <VECTOR [REST STRING]>) + <COND (<NOT <EMPTY? .RIX>> + <COND (<0? <1 .RIX>> + <SET SUB <MEMQ !\. .SUB>> + <PUT .RIX 1 <- <LENGTH .S> <LENGTH .SUB>>>) + (T <SET SUB <REST .S <1 .RIX>>>)> + <SUBSTRUC <1 .NUMVEC> 0 <LENGTH <1 .NUMVEC>> .SUB> + <SET RIX <REST .RIX>> + <SET NUMVEC <REST .NUMVEC>> + <AND <EMPTY? .NUMVEC> + <SET NUMVEC + <NTH ,BIGNUMS + <- <ASCII <2 .NUM>> + <ASCII !\0> + -1>>>>) + (T <PRINC .S .C> <RETURN>)>>> + ,TTYNUMS> + <COND (<NOT <==? .C ,OUTCHAN>> + ;<ITS-CALL "SDMPBT" '![!] .C 1> + <CLOSE .C> + ;<ITS-CALL "MLINK" + '![!] + !<MAPF ,UVECTOR ,STRTOX + ["DSK" "PLEASE" "POST" ".LPTR." <7 .C> <8 .C> <10 .C>]>>)> + T)>> + +;<DEFINE STYI-DRY ("OPTIONAL" (C .INCHAN)) ;"Suck dry a STYI channel." + #DECL ((C) CHANNEL) + <REPEAT () + <AND <==? -1 <READCHR .C>> <RETURN>>>> + +;<DEFINE SM-TALK ("AUX" L SM CH (TRASH <ISTRING 99>) (UN <UNAME>) + (MSG <STRING "(SMTALK) " .UN " needs help.">) + INCHAN OUTCHAN + (OC <OPEN "PRINT" "STY:">) (IC <OPEN "READ" "STY:">) + (SML <2 <1 ,SM-S>>) (N-SM-S <LENGTH .SML>) + (OUT " +We hope we have been of help. +")) + #DECL ((CH) <OR FIX CHARACTER> (L) <VECTOR [REST STRING]> + (SM TRASH MSG OUT UN) STRING (INCHAN OUTCHAN) <SPECIAL CHANNEL> + (OC IC) <OR FALSE CHANNEL>) + <COND + (<OR <NOT .IC> <NOT .OC>> ;"Check goodness of STY channels." + <PRINC "I'm sorry, but my communication facility is busy." ,OUTCHAN> + <TERPRI ,OUTCHAN> + <AND .IC <CLOSE .IC>> + <AND .OC <CLOSE .OC>> + <AND .IC .OC>) ;"Return the non-channel." + (ELSE + <SET INCHAN .IC> + <SET OUTCHAN .OC> + <PRINC "I will try to find a Staff Member with whom you can consult." + ,OUTCHAN> + <TERPRI ,OUTCHAN> ;"Tell user we're here." + <SET L <COND (<MEMBER <SM> .SML>) ;"Set search list to current SM " + (<REST .SML <MOD <RANDOM> .N-SM-S>>)>> ;"or to a random one." + <TERPRI> ;"Avoid ITS !CRLF's on STY input." + <PROG ACT3 ((IL <INT-LEVEL>)) + #DECL ((IL) FIX) + <REPEAT ACT1 ((N .N-SM-S)) + #DECL ((N) FIX) + <AND <EMPTY? .L> <SET L <TOP .L>>> ;"Loop thru SM list " + <AND <G? 0 <SET N <- .N 1>>> ;"until all have been tried." + <SET OUT "I'm sorry, but no Staff Member is on-line. +"> + <RETURN T .ACT3>> + <REPEAT ((SMS (<1 .L> <STRING <1 .L> ".SM">))) + #DECL ((SMS) <LIST [REST STRING]>) + <AND <=? .UN <1 .SMS>> ;"Don't try myself." + <EMPTY? <SET SMS <REST .SMS>>> + <RETURN>> + <STYI-DRY> + <PRINC <STRING "C" <SET SM <1 .SMS>> <ASCII 13>>> + ;"Try to make link." + <READSTRING .TRASH .INCHAN <+ 5 <LENGTH .SM>>> + ;"Suck out the echo." + <COND (<==? !\W <SET CH <READCHR>>> + ;"SM is in query mode." + <READCHR> ;"SPACE" + <AND <==? -1 <SET CH <READCHR>>> + <INT-LEVEL <+ 2 .IL>> + ;"Be sure we'll get intrpt when char comes." + <ON "CHAR" + #FUNCTION ((CHAN "AUX" + (CHAR <READCHR .CHAN>)) + #DECL ((CHAN) CHANNEL + (CHAR) CHARACTER) + <AND <OR <==? !\G .CHAR> + <==? !\N .CHAR>> + ;"On G or N, wake up." + <RETURN .CHAR .ACT2>>) + <+ 1 .IL> + <ME> + .INCHAN> + <==? -1 <SET CH <READCHR>>> + ;"If char is there, don't go to sleep." + <SET CH + <PROG ACT2 () + #DECL ((ACT2) <SPECIAL ACTIVATION>) + <INT-LEVEL .IL> + <SLEEP 10> + !\T>> + <OFF "CHAR" .INCHAN>> + <INT-LEVEL .IL> + <COND (<==? !\N .CH>) ;"If N, try next guy." + (<==? !\G .CH> + <PRINT .MSG> + <TERPRI> + <RETURN T .ACT1>) ;"Win!" + (ELSE <PRINC "N">)>);"Give up on timeout." + (<==? !\G .CH> ;"SM is logged in." + <READCHR> ;"SPACE" + <PRINC !\> + <SLEEP 1> + <PRINC !\> + <SLEEP 1> + <PRINC !\> ;"Alert the guy." + <PRINT .MSG> + <TERPRI> + <READSTRING .TRASH .INCHAN <+ 13 <LENGTH .MSG>>> + ;"Suck out the echo." + <OR <==? -1 <READCHR>> <RETURN T .ACT1>> + ;"Look for any char to be typed. (Should wait for a certain char?)" + <READSTRING .TRASH .INCHAN + <LENGTH <PRINC "--MORE--">>> + ;"Tell SM we're waiting." + <OR <==? -1 <READCHR>> <RETURN T .ACT1>> + ;"Return if char there." + <INT-LEVEL <+ 2 .IL>> + <ON "CHAR" + #FUNCTION ((CHAN) + #DECL ((CHAN) CHANNEL) + <OFF "CHAR" .CHAN> + <RETURN 1 .ACT2>) + <+ 1 .IL> + <ME> + .INCHAN> + <OR <==? -1 <READCHR>> + <AND <OFF "CHAR" .INCHAN> <RETURN T .ACT1>>> + ;"If char is there, don't go to sleep." + <AND <1? <PROG ACT2 () + #DECL ((ACT2) <SPECIAL ACTIVATION>) + <INT-LEVEL .IL> + <SLEEP 10> + 0>> + <RETURN T .ACT1>>;"If a char came, go ahead." + <OFF "CHAR" .INCHAN> + <PRINC "N">)> ;"Else go on to next guy." + <AND <EMPTY? <SET SMS <REST .SMS>>> <RETURN>>> + <SET L <REST .L>>> + <INT-LEVEL .IL> + <PRINC <STRING "You are being linked to " + .SM + ". +The following two lines come from our operating system:"> + ,OUTCHAN> ;"Let user know what is happening." + <ITS-CALL "LISTEN" '![!] ,INCHAN> + ;"Make sure previous msg has been typed." + <PRINC <STRING "C" <UNAME> <ASCII 13> "N">>> + ;"Connect to myself and release STY." + <STYI-DRY> ;"Play it safe for next time." + <CLOSE .OUTCHAN> + <CLOSE .INCHAN> + <PRINC .OUT ,OUTCHAN> ;"Print this when link is broken." + "DONE")>> + +<ENDPACKAGE> diff --git a/src/mprog1/smmssp.771 b/src/mprog1/smmssp.771 new file mode 100644 index 00000000..7e3c1c6f --- /dev/null +++ b/src/mprog1/smmssp.771 @@ -0,0 +1,27 @@ +[ORIGINATOR "SWG" +TASK-NAME "MUDSAV-DUMP" +TASK-STATE "RUNNABLE" +TIME-OF-NEXT-RUN ((78 10 27) (1 0 0) "EDT") +TASK-TYPE "SHORT" +WHEN-ORIGINATED ((78 3 3) (1 28 54) "EDT") +RESCHEDULE-INFO ((0 0 21) (0 0 0)) +FILE-TO-RUN ["SYS" "SWG" "TS" "MUDDLE"] +INPUT-STREAM +" +<USE \"SMMS\" \"TIMFCN\"> +<SM-MAIL +\" You are SM on the third Friday. + Please dump MUDSAV files according to the + instructions in MUDSAV; DUMP MUDSAV.\"> +<QUIT> +" +OUTPUT-FILE "DSK:HUDINI;DUMP MUDSAV" +DELIMITER-STRING "î" +TIME-LIMIT 5.0 +RESTART-SWITCH T +LAST-STARTING-TIME ((78 10 6) (1 5 20) "EDT") +LAST-COMPLETION-TIME ((78 10 6) (1 7 11) "EDT") +LAST-CPU-TIME-USED 0.28450100 +ACCUMULATED-CPU-TIME 3.1031887 +NUMBER-OF-TIMES-RUN 12 +] diff --git a/src/mprog1/stk.ueb022 b/src/mprog1/stk.ueb022 new file mode 100644 index 00000000..b5922008 --- /dev/null +++ b/src/mprog1/stk.ueb022 @@ -0,0 +1,53 @@ +÷” ×ø1â Eúu%¢} + +÷‘gT¥û(&Á—ø´êKñH AôR‹ú”êKñH AôMƒùqiÔ—úÃE Aô AúiÈñH AôPŸúE Aô AøñjS©ùcE Aô AújS©ùcE Aô Aù”êKñH AôS©ùcE Aô Aúu%ÖñH AôUúu%ô Aô#R‹ø´êK­ñ¢ Aô úQbÓ©ùcE Aô AøÔ¢Å™ø³£Ô‘÷ÃE;Eù°eŧú’Ð-[ô`Ë‹úh  §úaËñHR‹ú”êKAô V úQbÓAø()ÔƒørÆŠAôgS©ùh [õ¨(O¡úh  §úaËAú“ÐE›ú$΋útÑ A + +÷“¢×©û4" §ú’ë ­ø°êO¥ô ÞV‹øu'ÒAût¢Ó©ôgY»÷Ï A + +÷“¢×©û4" §ú’ÐV‹øu'ÒAôï+E‡ú“é §ú’ë>} + +÷”âÔô©E‹ù‘gG©ù0}ñ¢¢‰ø± Õ™úˆ&Eøõ$ ŸøÈ)ÔƒørÐV‹øu'Ò§ôH A + +÷”âÔô©E‹úu%ô Aô!È©û4" yúÑaÔŸúHC‘ú–hEA÷”¢Ó©ô$Ö‹øu'ÒAõ‘©E‹ù‘gG©ù,úQbÌ‹ùÑêH}ñ¢„‰ô AôêK­÷φŠô AôêK}÷È A + +÷”âÔô©E‹úu%ÖñH AôC‘ú–hEA÷•¢Ã©ùô<‡ù,Ћô)E§úˆI­ø°êO¥ô #R‹ø³"Îú’ YøÔ¢Å™ø³£Ô‘÷ÃE ñ( Aô)Ô—úÏŸ ñ( Aô)Ô—÷Ï A + +÷‘âE‡ùˆF¥ø±iÔ—ô©E‹úu%ÖSôêK} + +÷‘"Æ“ùÑPMƒùqiÔ—ô +O¡ú’g΃ùˆ(ô #R‹ø³"Îú’©Añ¢„£‰ø°æ Qõ Ì«øªPS©ùhNSô¤ØSñ¢„¼‡ùó¢ Q÷”'ÐAõ‘©E‹úu% y÷Ï”‰ô A÷h©E©ú´§ ƒô©E‹ôêA‡ùh†Šô Aô +C‘ú–hEA÷•¢Ã©ùô<›ø2âÓ©ùu.÷ÏS©ùo”¾} + +÷‘"Æ“ùÑPMƒùqiÔ—úÈ"Ÿú$Ïø3 QùÈF¥ø±fEøõ$)SôE Gø‘aÌAõ +')AøÒl QúÐfU‹õ()Ô—úÊFŠ÷äT³úP<‡ùó¢ Q÷”'ÐAõ‘©E‹úu%ÖA÷Ÿ)ô Aô¢ùè"Ò¥ùôIôfЩû(†Šñ( AôE™úqP<¥ø´ê yù5¢Ã©ùô.÷ÈN}õ/†Šñ4êK­÷Ï A + +÷‘"Æ“ùÑPR‹ú”êKAõêKSôâE‡ùˆ(§ú’Ô §ú’Ô yúiÈAõ‘©E‹úu% yú³©Ô—ô ©Ô—÷ÏŸ A + +÷‘"Æ“ùÑPUúu% Qúu% Eø5l"Aõë yö(S©ùo” QùˆL‹ùÑêHAõÔë>SôáJSôE Gø‘aÌAõ +)Ô—ô Ì«øªPS©ùhO…ùJPAû(S­õ()Ô—úÈLSô¤ØSñ¢„¼¥ø´"Á©ô +ñ"^CŸùÑ(yöÐ.™÷ÈR‹ú•iNAõÔêK}õ/†Šñ/)Å©ôáJA÷“ªHAõÔë ]ùŸ ñ"^CŸùÑ(yú–hEô §Â•ôêK­÷ÃE ô AôP«úr,úQbÓ©ùu<¥ø´ê ]úu.™÷φŠñ( Aô<§øµS­ô §Â•÷ÊFŠñ( AôE™úqFŠñ( Aô<¥øµ*Òô(U©ô ©Ô—ô P<‡ù,Ћô)E§úˆS­ô ¦>Aúu%Ö}÷Ï”¾ñBD¼§øµLA÷“"Îú’.§úÏŸ>} + +÷‘"Æ“ùÑPP«úr(§ú’ÐO…ùHA«û(§úÈC‘ú–hEA÷ŒP.§ú’ß ­ø°êO¥÷ÊPE§úÊP ñ(âE‡ùˆ(§úÈ"Ó­õ(O¥ô¢Ã©ùôS©ùuŸ Qúu%©Aúu% Qùð¥)Aø3¬©ñB^CŸùÑ(y÷¯_ yú“è ]úuŸ ]úuŸ ñ"P AôÑF«ù“ ñ( Aô<§øµE§úÈBƒørÐ<›ø2âÓ©ùu<™ø³£Ô‘ô ©Ö}÷ÏŸ ñ( Aô<¡úµ.‹úu1A÷äT³úP.§úÈ)Ô—úÏŸ Aô wôTêA‡ùh*H‹ôlT‹ùÔäÏôCE Aô Aô(U©ô ©Ô—ô P<‡ù,Ћô(U©ô!A‡ùhE§úÏ1AõÓáJ}ôêK­÷Ï”ñ( AôE™úqP<¡úµ.§ú’Ð1A÷äT³úP<¡úµ<…ø0å ]úuŸ cô §Â•÷È)Ô—úÏŸ)}÷È A + +÷‘"Æ“ùÑPPŸúS©ùhO¡ú’g΃ùˆ(‹úTŸ ©õ(A«û(§úÈ1AõÔêK}õ('•õ(Šôq"Ùô +S­õ(O¥ô¢Ã©ùôS©ùuŸ QúÐfU‹ôáJAø´©?SôgYAõêKSôêKSñ¢„¼‡ùó¢ Q÷‘fЩû/Ð.§úÏ„‰ô Aô;EùÓêH“ùÑÐIôêA‡ùh†Šô AôAøˆE¥úOÐ<‹úT§ÒAùõ¢Ò¡ùô­‹úT§Ò§ô'Ð}÷ÊFŠô Aô +AøˆL‹ùÑêHô ©ÖAö/<©û4"¿A÷”âÔAùð¥ yö(S­÷ÏS©ùuŸ>ñBP Aô yúiÈAõ‘©E‹úu%ÖA÷”¢Ó©ô ©Ö}÷ÃE ñ"P AôÑF¥ø±PT‘ø¨'̉ôlT‹ùÔäÏô +*Y¡ø¯kE‡ú“é)Eñ¢„ Aô A÷”*ÔAõÔêKAö(C‘ú–hEA÷”¢Ó©ô §Â•÷È)Ô—úÏŸ ñ( Aô<cô §Â•÷ÊFŠô Aô +"̧ø¢D‰ô¢ƒúˆ&EƒúuOø¨$Ô‹ù¨&Eúˆ†Šô AôS‹úˆ'•ô ]úuŸ>ñBP Aô yúj ]úu% cô!È©û4" yúQiÔAõÔë>Aúu%Ö}÷ÃE Aô Aô §Â•õ/Ÿ A + +÷‘"Æ“ùÑPG‹ú”êKAõêKAôSèT“ùó ÌEô +' cõ(E¥úOÐTSô Õ±ôHS­ô ]úu%¾SôáJSôE AôâE‡ùˆ(§ú’Ô §ú’Ð(­ø3*ÅAù𥠋úTŸ©Aø3¬ Qúu” yùôV‹øu'ÒAúu%Ö}õ#E Aô)E¡ø°j Qõ#E AôCŸùÑŠô Q÷‘fЩû/Ð.§úφŠô A÷”¢Ô«úS<ƒùÑ.‹úTŸñ"D A÷‘iRŸúH$Ήø¶Ï«ú‹gÆ[úPgG‹ô+bÒ¥ùô© øµ)Ô—÷ÏŸ)ñBP Aô +Lô § yúqj ™ø³<™ø³£Ô‘ô ©Ö}÷Ï„‰Aô Aô¢“ùÈ)AøñQ ñ( Aô)E©ú´§ yùÕ$ ]úu.÷Ï”ñ( Aõ¿AõÓ.™ø³Ÿ ñ( AôÑMƒû(!EAø3E±ú‘gS“ùó‘ ñ( Aô!Ïøˆ<©û4"¿A÷”âÔAùð¥ yùÕ$ ]úu.÷ÏS©ùuŸ yúQjU¥ùÈ1AõÓáJ}÷ÊFŠñ( Qø³)ÅA÷”¢Ô«úS.ŸøRŸ)}ñ( AôÑLƒúuI©ø³PIôêA‡ùh”ñ( Aõ*Y¡ø¯Ð<§øµO…ùHN©ùS­ô ¦E÷ÏS©ùuŸ ñ"D‰ñ(¢§ø±PIôlT‹ùÔäÏôlI§ú”Ñ ñ( Aô)Å©ô<[ô § ]ù‘g [ö/Ÿ ñ( A÷h©E‰ú°â “ùÑ"ØEñ¢„ Aô<§øµS­ô §Â•÷ÂD‰Aô A÷h¦OŸùh$ÎAø¶*EúrgÎEõ#E Aô(‹ù”â yúqj §úÈR‹úu.§úÈL‹ùÏŸ ô;Eøñj ‹úT§ÒEõ/Ÿ>A + +÷‘"Æ“ùÑPP«ú”êKAõêKAùÈ$Ô‹ù¨O¡ú’g΃ùˆ(‹úTŸ ©õ(A«û(§úÈ1AõÔêK}õ*P ô#‰ø°æ QõêKSôêKAõ Ì«ø¨'•ôjE›ôiRõ( γô +)ÖSô'ÒAúÑaÔŸúH)Ô—úÏ”ô<¥ø´"Á©ô +ñ( yøsçDñBP Aô +E›ú,¿AõÔë>ñBP AôR‹ú•iNA÷gDAõÑiRñ¢„‰ôE¥úSé “ùÑ"Ø[ùõj-ŸøËiAøñP­‹úT§Ò§ô*Ô§ú’ß>}õ#E Aô(yùÐ.ô)Å©ô"ÎA÷“"Îú’.§úÏŸ>ñ( Aô wôRg ¥ø3£ÅEñ¢„ Aô<¡úµ.§úÈNAõÒjE›÷ÂD‰ñ(;Eø“ÐP«úˆ†Šô A÷”¢Ô«úS.§ú’ß)ñBP Aô +=ô § ]ù‘g>ñ"P Aô¢›ø6PB‹ôg ‹û"Χù3ç"ñBP AôCŸùÑ(yú–hEô)Å©ôáJA÷“ªHAõÔë ]ùÏŸ §ú’ë>A÷”*ÔAõÓáJAö(I©ø³_)ñBD Aô +"̧ø¨P«úˆS­ô ¦Eô ¤Ô‹ù¯”¾ô AôÑLƒúuI©ø³PIôêA‡ùh†Šô A÷”¢Ô«úS.§ú’ß)ñBP Aô +T³ú_ yúqj ŸøR<ú’.§úÈL‹ùÏŸ §ú’ë>ñBD‰ñ"P;Eúqb “øÈ"Ø©ø³©ÉŸùÈ"Ø“úu)¢ñBP AôS‹úˆ' yõ¨NAõÓ"ÎAõ¬_>ñ"P AôÑR‹ø•aÅAù3¢E±ôCE Aô yúqj §úÈO…ùO„‰ô AôÑLŸùòÐIôlT‹ùÔäÏôJFŠô Qø³)ÅA÷”âÔAúu<¥ø´ê ]úu.™ø³Ÿ>ñ( wôQâÔAø´©O¥ôJ_>} + +÷‘"Æ“ùÑPL§ú’Ð(§ú’Ð"ƒú¶ QùÈ)Aõë yö(S©ùo”©Añ¢„£‰ø°æ QõêKSôêKAõVƒù•b©AøÒl Qúu” yùôS©ùuV‹øu'Ò}õ#E yúQhEƒúˆ)ñBD¼‡ùó¢ Q÷‘fЩû/Ð.§úÏ<¥øµ*Òô §>Sñ¢„‰Aô Aõ*Y¡ø¯Ð<§øµO…ùHN©ùS­ô)Å©ô<™ø³£Ô‘ô ©Ö}÷ÏŸ ñ"D Aô §ú’ë>ñ"P Aô;Eü¾:eÝþzwîôCE ô AôS‹úˆ& yõ¨LAö/Ÿ Aô;Eø0áÏ«ùÕFŸúH(U§ùb ‹û"Χù3ç"ñBD Aô A÷”âÔAúu.ŸøRŸ ô AôÑGŸô'Ï—ôçÍ‹ôgÒ‹ôJFŠñ( AôE™úqP<§øµS­ô íÝ}õ/†Šñ/)Å©ô<Wô § ]ùŸ>} + +÷‘gD¡ø0åÁø¯ A + diff --git a/src/mprog1/systat.ujhm02 b/src/mprog1/systat.ujhm02 new file mode 100644 index 00000000..eeace8f2 --- /dev/null +++ b/src/mprog1/systat.ujhm02 @@ -0,0 +1,62 @@ +<PACKAGE!- "SYSTAT"> + +<ENTRY!- SYSTATUS> + +<USE!- "STR"> + +<TITLE SYSTATUS> + <DECLARE ("VALUE" <VECTOR <OR FALSE FIX> <OR ATOM FALSE FIX> + FIX FIX FIX STRING>)> + <*CALL [<SETZ> + <SIXBIT "SSTATU"> + <(*2000*) O> ;"system downtime" + <(*2000*) A> ;"debugging-the-system" + <(*2000*) B> ;"number of trees of jobs" + <(*2000*) C> ;"memory errors" + <(*2000*) D> ;"system up time" + <SETZM E>]> ;"system name" + <JFCL> + <JUMPGE O* GOING-DOWN> + <PUSH TP* $TFALSE> ;"not going down, return a FALSE" + <PUSH TP* [0]> + <JRST DEBUGGING?> +GOING-DOWN + <PUSH TP* $TFIX> ;"return time till sysdown" + <PUSH TP* O> +DEBUGGING? + <JUMPG A* DEBUGGING-BUT> + <JUMPE A* NO-DEBUGGING> + <MOVN A* A> ;"system being debugged, consoles n" + <PUSH TP* $TFIX> ;" and 0 may log in" + <PUSH TP* A> + <JRST GO-ON> +DEBUGGING-BUT + <PUSH TP* $TATOM> ;"system being debugged -- but users" + <PUSH TP* <MQUOTE T>> ;" may login" + <JRST GO-ON> +NO-DEBUGGING + <PUSH TP* $TFALSE> ;"system not being debugged" + <PUSH TP* [0]> +GO-ON <PUSH TP* $TFIX> ;"number of logged in trees of jobs" + <PUSH TP* B> + <PUSH TP* $TFIX> ;"number of memory parity errors" + <PUSH TP* C> + <PUSH TP* $TFIX> ;" 30 * number of secs system has been up" + <PUSH TP* D> + <PUSH TP* $TFIX> ;"system name" + <LSH E* -24.> ;"SIXTOS doesn't flush spaces, so..." + <PUSH TP* E> + <MCALL 1 SIXTOS> + <SUBI A* 4> ;"string 6 chars --> 4 chars" + <PUSH TP* A> + <IBP B> ;"rest that ptr 4 times, get rid of spaces" + <IBP B> + <IBP B> + <IBP B> + <PUSH TP* B> + <MOVEI A* 6> + <PUSHJ P* CIVEC> + <JRST FINIS> +<END> + +<ENDPACKAGE!-> diff --git a/src/mprog1/tenxio.umsb03 b/src/mprog1/tenxio.umsb03 new file mode 100644 index 00000000..48067112 --- /dev/null +++ b/src/mprog1/tenxio.umsb03 @@ -0,0 +1,835 @@ +%%<USE "JSYS"> + + +<PACKAGE "TENXIO"> + +<ENTRY JFN GET-FILE OPEN-FILE CLOSE-FILE RELEASE-FILE ACCESS-FILE> + +<ENTRY ACCESS-OF-FILE LENGTH-OF-FILE SIZE-OF-FILE NAME-OF-FILE> + +<ENTRY READW-FILE PRINTW-FILE> + +<ENTRY READB-FILE PRINTB-FILE> + +<ENTRY READS-FILE PRINTS-FILE> + +<ENTRY READP-FILE PRINTP-FILE> + +<ENTRY PMAP-FILE> + +<ENTRY GET-PRIMARY-JFNS> + +<ENTRY FIND-FIRST-FREE-FILE-PAGE FIND-FIRST-USED-FILE-PAGE> + +<ENTRY GET-JOB-INFO GET-DIR-ALLOC> + +<ENTRY STR-TO-DIRNUM DIRNUM-TO-STR> + +<ENTRY CON-TO-DIR EXPUNGE-DIR EXPUNGE-CON-DIR> + +<NEWTYPE JFN WORD> + +%%<USE "JSYS"> + + +"******************* ASSEMBLY CODE ************************************" + + +<TITLE GET-FILE> + +<DECLARE ("VALUE" <OR JFN FALSE> STRING <PRIMTYPE WORD>)> + + <DPUSH TP* (AB)> + <DPUSH TP* 2(AB)> + <PUSHJ P* IGET-FILE> + <JRST FINIS> + +<INTERNAL-ENTRY IGET-FILE 2> + + <SUBM M* (P)> + <GETYP O* -3(TP)> + <CAIE O* TSTRING> + <JRST P2RETFLS> + <MOVEI C* -3(TP)> + <PUSHJ P* GETDOP> + <SOS A> + <PUSH P* (A)> + <PUSH P* A> + <SETZM (A)> + <MOVE A* (TP)> + <MOVE B* -2(TP)> + <TLO A* 1> + <TLZ A* 2> + <GTJFN> + <JRST GTFLD> + <POP P* E> + <POP P* (E)> + <HRRZ B* A> + <HRLZI A* <TYPE-CODE JFN>> +P2RET <SUB TP* [<4(4)>]> + <JRST MPOPJ> + +GTFLD <POP P* E> + <POP P* (E)> +P2RETFLD <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* A> + <MCALL 1 LIST> + <MOVE A* <TYPE-WORD FALSE>> + <JRST P2RET> + +P2RETFLS <MOVE A* <TYPE-WORD FALSE>> + <MOVEI B* 0> + <JRST P2RET> + + +;"GETS A POINTER TO THE SECOND DOPE WORD OF A STRING, LEAVES IN AC1" +;"C/ POINTER TO TYPE/VALUE PAIR OF STRING" +GETDOP <SUBM M* (P)> + <MOVE B* 1(C)> + <LDB D* [<(*360600*)2>]> + <LDB E* [<(*300600*)2>]> + <MOVEI A* (E)> + <IDIVI D* (E)> + <HRRZ E* (C)> + <SUBM E* D> + <JUMPL D* GETDO1> + <MOVEI B* 36> + <IDIVM B* A> + <ADDI D* -1(A)> + <IDIVI D* (A)> + <ADD D* 1(C)> + <MOVEI A* 2(D)> + <JRST MPOPJ> +GETDO1 <MOVEI A* 1(B)> + <CAME D* [-5]> + <AOJA A* MPOPJ> + <JRST MPOPJ> + + +<SUB-ENTRY OPEN-FILE ("VALUE" <OR JFN FALSE> JFN <PRIMTYPE WORD>)> + + <DPUSH TP* (AB)> + <DPUSH TP* 2(AB)> + <PUSHJ P* IOPEN-FILE> + <JRST FINIS> + +<INTERNAL-ENTRY IOPEN-FILE 2> + + <SUBM M* (P)> + <GETYP O* -3(TP)> + <CAIE O* <TYPE-CODE JFN>> + <JRST P2RETFLS> + <MOVE A* -2(TP)> + <MOVE B* (TP)> + <OPENF> + <JRST P2RETFLD> + <DMOVE A* -3(TP)> + <JRST P2RET> + + + +<SUB-ENTRY CLOSE-FILE ("VALUE" <OR JFN FALSE> JFN <PRIMTYPE WORD>)> + + <DPUSH TP* (AB)> + <DPUSH TP* 2(AB)> + <PUSHJ P* ICLOSE-FILE> + <JRST FINIS> + +<INTERNAL-ENTRY ICLOSE-FILE 1> + + <SUBM M* (P)> + <GETYP O* -3(TP)> + <CAIE O* <TYPE-CODE JFN>> + <JRST P1RETFLS> + <MOVE A* -2(TP)> + <SKIPGE (TP)> + <HRREI A* -1> + <SKIPE (TP)> + <TLO A* *400000*> + <CLOSF> + <JRST P1RETFLD> + <DMOVE A* -3(TP)> +P1RET <SUB TP* [<2(2)>]> + <JRST MPOPJ> + +P1RETFLD <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* A> + <MCALL 1 LIST> + <MOVE A* <TYPE-WORD FALSE>> + <JRST P1RET> + +P1RETFLS <MOVE A* <TYPE-WORD FALSE>> + <MOVEI B* 0> + <JRST P1RET> + + + +<SUB-ENTRY RELEASE-FILE ("VALUE" <OR JFN FALSE> JFN)> + + <DPUSH TP* (AB)> + <PUSHJ P* IRELEASE-FILE> + <JRST FINIS> + +<INTERNAL-ENTRY IRELEASE-FILE 1> + + <SUBM M* (P)> + <GETYP O* -1(TP)> + <CAIE O* <TYPE-CODE JFN>> + <JRST P1RETFLD> + <MOVE A* (TP)> + <RLJFN> + <JRST P1RETFLD> + <DMOVE A* -1(TP)> + <JRST P1RET> + + + +<SUB-ENTRY ACCESS-FILE ("VALUE" <OR JFN FALSE> JFN <PRIMTYPE WORD>)> + + <DPUSH TP* (AB)> + <DPUSH TP* 2(AB)> + <PUSHJ P* IACCESS-FILE> + <JRST FINIS> + +<INTERNAL-ENTRY IACCESS-FILE 2> + + <SUBM M* (P)> + <GETYP O* -3(TP)> + <CAIE O* <TYPE-CODE JFN>> + <JRST P2RETFLS> + <MOVE A* -2(TP)> + <MOVE B* (TP)> + <SFPTR> + <JRST P2RETFLD> + <DMOVE A* -3(TP)> + <JRST P2RET> + + + +<SUB-ENTRY NAME-OF-FILE ("VALUE" <OR STRING FALSE> JFN)> + + <DPUSH TP* (AB)> + <PUSHJ P* INAME-OF-FILE> + <JRST FINIS> + +<INTERNAL-ENTRY INAME-OF-FILE 1> + + <SUBM M* (P)> + <GETYP O* -1(TP)> + <CAIE O* <TYPE-CODE JFN>> + <JRST P1RETFLS> + <PUSHJ P* TMTNXS> + <HRROI A* 1(E)> + <MOVE B* (TP)> + <MOVEI C* 0> + <PUSH P* E> + <JFNS> + <POP P* E> + <MOVEI B* 1(E)> + <SUBM P* E> + <PUSHJ P* TNXSTR> + <SUB P* E> + <JRST P1RET> + + +TMTNXS <POP P* D> + <MOVE E* P> + <MOVEI O* 20> + <PUSH P* [0]> + <SOJG O* HERE -1> + <JRST (D)> + + +TNXSTR <SUBI B* (P)> + <PUSH P* B> + <ADDI B* -1(P)> + <SUBI B* (A)> + <IMULI B* 5> + <LDB O* [<(*360600*)A>]> + <IDIVI O* 7> + <MOVNS O> + <ADDI O* 5> + <SUBM O* B> + <PUSH P* B> + <MOVEI A* 4(B)> + <IDIVI A* 5> + <MOVEI O* IBLOCK> + <PUSHJ P* RCALL> + <POP P* A> + <POP P* C> + <ADDI C* (P)> + <MOVE D* B> + <MOVE O* (C)> + <MOVEM O* (D)> + <ADDI C* 1> + <AOBJN D* HERE -3> + <HRLI A* <TYPE-CODE STRING>> + <SUBI B* 1> + <HRLI B* *010700*> + <POPJ P* > + + + +<SUB-ENTRY SIZE-OF-FILE ("VALUE" <OR FIX FALSE> JFN)> + + <DPUSH TP* (AB)> + <PUSHJ P* ISIZE-OF-FILE> + <JRST FINIS> + +<INTERNAL-ENTRY ISIZE-OF-FILE 1> + + <SUBM M* (P)> + <GETYP O* -1(TP)> + <CAIE O* <TYPE-CODE JFN>> + <JRST P1RETFLS> + <MOVE A* (TP)> + <SIZEF> + <JRST P1RETFLD> + <MOVE A* <TYPE-WORD FIX>> + <MOVE B* C> + <JRST P1RET> + + +<SUB-ENTRY LENGTH-OF-FILE ("VALUE" <OR FIX FALSE> JFN)> + + <DPUSH TP* (AB)> + <PUSHJ P* ILENGTH-OF-FILE> + <JRST FINIS> + +<INTERNAL-ENTRY ILENGTH-OF-FILE 1> + + <SUBM M* (P)> + <GETYP O* -1(TP)> + <CAIE O* <TYPE-CODE JFN>> + <JRST P1RETFLS> + <MOVE A* (TP)> + <SIZEF> + <JRST P1RETFLD> + <MOVE A* <TYPE-WORD FIX>> + <JRST P1RET> + + + +<SUB-ENTRY ACCESS-OF-FILE ("VALUE" <OR FIX FALSE> JFN)> + + <DPUSH TP* (AB)> + <PUSHJ P* IACCESS-OF-FILE> + <JRST FINIS> + +<INTERNAL-ENTRY IACCESS-OF-FILE 1> + + <SUBM M* (P)> + <GETYP O* -1(TP)> + <CAIE O* <TYPE-CODE JFN>> + <JRST P1RETFLS> + <MOVE A* (TP)> + <RFPTR> + <JRST P1RETFLD> + <MOVE A* <TYPE-WORD FIX>> + <JRST P1RET> + + + +<SUB-ENTRY READB-FILE ("VALUE" <OR UVECTOR FALSE> JFN UVECTOR)> + + <DPUSH TP* (AB)> + <DPUSH TP* 2(AB)> + <PUSHJ P* IREADB-FILE> + <JRST FINIS> + +<INTERNAL-ENTRY IREADB-FILE 2> + + <SUBM M* (P)> + <GETYP O* -3(TP)> + <CAIE O* <TYPE-CODE JFN>> + <JRST P2RETFLS> + <GETYP O* -1(TP)> + <CAIE O* <TYPE-CODE UVECTOR>> + <JRST P2RETFLS> + <MOVE A* -2(TP)> + <MOVE B* (TP)> + <HLRE C* B> + <HRLI B* *444400*> + <MOVM D* C> + <ADDI D* (B)> + <PUSH P* D> + <SIN-JSYS> + <POP P* D> + <CAIE D* 1(B)> + <JRST P2RETFLS> + <DMOVE A* -1(TP)> + <JRST P2RET> + + +<SUB-ENTRY PRINTB-FILE ("VALUE" <OR UVECTOR FALSE> JFN UVECTOR)> + + <DPUSH TP* (AB)> + <DPUSH TP* 2(AB)> + <PUSHJ P* IPRINTB-FILE> + <JRST FINIS> + +<INTERNAL-ENTRY IPRINTB-FILE 2> + + <SUBM M* (P)> + <GETYP O* -3(TP)> + <CAIE O* <TYPE-CODE JFN>> + <JRST P2RETFLS> + <GETYP O* -1(TP)> + <CAIE O* <TYPE-CODE UVECTOR>> + <JRST P2RETFLS> + <MOVE A* -2(TP)> + <MOVE B* (TP)> + <HLRE C* B> + <HRLI B* *444400*> + <MOVM D* C> + <ADDI D* (B)> + <PUSH P* D> + <SOUT> + <POP P* D> + <CAIE D* 1(B)> + <JRST P2RETFLS> + <DMOVE A* -1(TP)> + <JRST P2RET> + + +<SUB-ENTRY READS-FILE ("VALUE" <OR STRING FALSE> JFN STRING)> + + <DPUSH TP* (AB)> + <DPUSH TP* 2(AB)> + <PUSHJ P* IREADS-FILE> + <JRST FINIS> + +<INTERNAL-ENTRY IREADS-FILE 2> + + <SUBM M* (P)> + <GETYP O* -3(TP)> + <CAIE O* <TYPE-CODE JFN>> + <JRST P2RETFLS> + <GETYP O* -1(TP)> + <CAIE O* <TYPE-CODE STRING>> + <JRST P2RETFLS> + <MOVE A* -2(TP)> + <MOVE B* (TP)> + <HRRZ C* -1(TP)> + <MOVNS C> + <SIN-JSYS> + <DMOVE A* -1(TP)> + <JRST P2RET> + + +<SUB-ENTRY PRINTS-FILE ("VALUE" <OR STRING FALSE> JFN STRING)> + + <DPUSH TP* (AB)> + <DPUSH TP* 2(AB)> + <PUSHJ P* IPRINTS-FILE> + <JRST FINIS> + +<INTERNAL-ENTRY IPRINTS-FILE 2> + + <SUBM M* (P)> + <GETYP O* -3(TP)> + <CAIE O* <TYPE-CODE JFN>> + <JRST P2RETFLS> + <GETYP O* -1(TP)> + <CAIE O* <TYPE-CODE STRING>> + <JRST P2RETFLS> + <MOVE A* -2(TP)> + <MOVE B* (TP)> + <HRRZ C* -1(TP)> + <MOVNS C> + <SOUT> + <DMOVE A* -1(TP)> + <JRST P2RET> + + +<SUB-ENTRY READW-FILE ("VALUE" <OR WORD FALSE> JFN FIX)> + + <DPUSH TP* (AB)> + <DPUSH TP* 2(AB)> + <PUSHJ P* IREADW-FILE> + <JRST FINIS> + +<INTERNAL-ENTRY IREADW-FILE 2> + + <SUBM M* (P)> + <GETYP O* -3(TP)> + <CAIE O* <TYPE-CODE JFN>> + <JRST P2RETFLS> + <GETYP O* -1(TP)> + <CAIE O* <TYPE-CODE FIX>> + <JRST P2RETFLS> + <MOVE A* -2(TP)> + <MOVE C* (TP)> + <RIN> + <MOVE A* <TYPE-WORD WORD>> + <JRST P2RET> + + +<SUB-ENTRY PRINTW-FILE ("VALUE" <OR <PRIMTYPE WORD> FALSE> JFN FIX <PRIMTYPE WORD>)> + + <DPUSH TP* (AB)> + <DPUSH TP* 2(AB)> + <DPUSH TP* 4(AB)> + <PUSHJ P* IPRINTW-FILE> + <JRST FINIS> + +<INTERNAL-ENTRY IPRINTW-FILE 3> + + <SUBM M* (P)> + <GETYP O* -5(TP)> + <CAIE O* <TYPE-CODE JFN>> + <JRST P3RETFLS> + <GETYP O* -3(TP)> + <CAIE O* <TYPE-CODE FIX>> + <JRST P3RETFLS> + <MOVE A* -4(TP)> + <MOVE B* (TP)> + <MOVE C* -2(TP)> + <ROUT> + <DMOVE A* -1(TP)> +P3RET <SUB TP* [<6(6)>]> + <JRST MPOPJ> + +P3RETFLS <MOVE A* <TYPE-WORD FALSE>> + <MOVEI B* 0> + <JRST P3RET> + + + + +<SUB-ENTRY READP-FILE ("VALUE" <OR UVECTOR FIX FALSE> JFN <OR UVECTOR FIX> FIX)> + + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* IREADP-FILE> + <JRST FINIS> + +<INTERNAL-ENTRY IREADP-FILE 3> + + <SUBM M* (P)> + <GETYP O* -5(TP)> + <CAIE O* <TYPE-CODE JFN>> + <JRST P3RETFLS> + <MOVE A* -4(TP)> + <MOVE B* -2(TP)> + <GETYP O* -3(TP)> + <CAIN O* <TYPE-CODE UVECTOR>> + <HRRZS B> + <MOVE C* (TP)> + <MOVE D* B> + <ADD D* C> + <CAMLE D* [*777777*]> + <JRST P3RETFLS> + <HRLI B* *444400*> + <MOVNS C> + <PUSH P* D> + <SIN-JSYS> + <POP P* D> + <CAIE D* 1(B)> + <JRST P3RETFLS> + <DMOVE A* -3(TP)> + <JRST P3RET> + + + +<SUB-ENTRY PRINTP-FILE ("VALUE" <OR FIX UVECTOR FALSE> JFN <OR FIX UVECTOR> FIX)> + + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* IPRINTP-FILE> + <JRST FINIS> + +<INTERNAL-ENTRY IPRINTP-FILE 3> + + <SUBM M* (P)> + <GETYP O* -5(TP)> + <CAIE O* <TYPE-CODE JFN>> + <JRST P3RETFLS> + <MOVE A* -4(TP)> + <MOVE B* -2(TP)> + <GETYP O* -3(TP)> + <CAIN O* <TYPE-CODE UVECTOR>> + <HRRZS B> + <MOVE C* (TP)> + <MOVE D* B> + <ADD D* C> + <CAMLE D* [*777777*]> + <JRST P3RETFLS> + <HRLI B* *444400*> + <MOVNS C> + <PUSH P* D> + <SOUT> + <POP P* D> + <CAIE D* 1(B)> + <JRST P3RETFLS> + <DMOVE A* -3(TP)> + <JRST P3RET> + + + + + + +<SUB-ENTRY PMAP-FILE ("VALUE" <OR 'T FALSE> <PRIMTYPE WORD> <PRIMTYPE WORD> + <PRIMTYPE WORD> <PRIMTYPE WORD> <PRIMTYPE WORD>)> + + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* IPMAP-FILE> + <JRST FINIS> + +<INTERNAL-ENTRY IPMAP-FILE 5> + + <SUBM M* (P)> + <HRL A* -8(TP)> + <HRR A* -6(TP)> + <HRL B* -4(TP)> + <HRR B* -2(TP)> + <MOVE C* (TP)> + <PMAP> + <DMOVE A* <PQUOTE T>> + <SUB TP* [<10(10)>]> + <JRST MPOPJ> + + +<SUB-ENTRY GET-PRIMARY-JFNS ("VALUE" <VECTOR [2 JFN]> "OPTIONAL" <PRIMTYPE WORD>)> + + <HLRE O* AB> + <JUMPL O* GPJ1> + <PUSHJ P* IGPJ> + <JRST FINIS> + +GPJ1 <PUSHJ P* IGPJ1> + <JRST FINIS> + + +<INTERNAL-ENTRY IGPJ 0> + + <SUBM M* (P)> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* [<*400000*>]> + <JRST IGPJ11> + +<INTERNAL-ENTRY IGPJ1 1> + + <SUBM M* (P)> +IGPJ11 <HRRZ A* (TP)> + <GPJFN> + <PUSH TP* <TYPE-WORD JFN>> + <HLRZ C* B> + <PUSH TP* C> + <PUSH TP* <TYPE-WORD JFN>> + <HRRZ C* B> + <PUSH TP* C> + <MCALL 2 VECTOR> + <SUB TP* [<2(2)>]> + <JRST MPOPJ> + + +<SUB-ENTRY FIND-FIRST-FREE-FILE-PAGE ("VALUE" <OR FIX FALSE> JFN)> + + <DPUSH TP* (AB)> + <PUSHJ P* IFFFFP> + <JRST FINIS> + +<INTERNAL-ENTRY IFFFFP 1> + + <SUBM M* (P)> + <MOVE A* (TP)> + <FFFFP> + <SKIPGE A> + <JRST FFFFPFLS> + <HRRZ B* A> + <MOVE A* <TYPE-WORD FIX>> + <SUB TP* [<2(2)>]> + <JRST MPOPJ> + +FFFFPFLS <MOVE A* <TYPE-WORD FALSE>> + <MOVEI B* 0> + <SUB TP* [<2(2)>]> + <JRST MPOPJ> + + + +<SUB-ENTRY FIND-FIRST-USED-FILE-PAGE ("VALUE" <OR FIX FALSE> JFN FIX)> + + <DPUSH TP* (AB)> + <DPUSH TP* 2(AB)> + <PUSHJ P* IFFUFP> + <JRST FINIS> + +<INTERNAL-ENTRY IFFUFP 2> + + <SUBM M* (P)> + <HRL A* -2(TP)> + <HRR A* (TP)> + <FFUFP> + <JRST FFUFPFLS> + <HRRZ B* A> + <MOVE A* <TYPE-WORD FIX>> + <SUB TP* [<4(4)>]> + <JRST MPOPJ> + +FFUFPFLS <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* A> + <MCALL 1 LIST> + <MOVE A* <TYPE-WORD FALSE>> + <SUB TP* [<4(4)>]> + <JRST MPOPJ> + + + +<SUB-ENTRY GET-JOB-INFO ("VALUE" <UVECTOR FIX FIX FIX FIX>)> + + <PUSHJ P* IGET-JOB-INFO> + <JRST FINIS> + +<INTERNAL-ENTRY IGET-JOB-INFO 0> + + <SUBM M* (P)> + <GJINF> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* A> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* B> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* C> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* D> + <MCALL 4 UVECTOR> + <JRST MPOPJ> + + + + +<SUB-ENTRY STR-TO-DIRNUM ("VALUE" <OR FIX FALSE> STRING)> + + <DPUSH TP* (AB)> + <PUSHJ P* ISTR-TO-DIRNUM> + <JRST FINIS> + +<INTERNAL-ENTRY ISTR-TO-DIRNUM 1> + + <SUBM M* (P)> + <GETYP O* -1(TP)> + <CAIE O* TSTRING> + <JRST P1RETFLS> + <MOVEI C* -1(TP)> + <PUSHJ P* GETDOP> + <SOS A> + <PUSH P* (A)> + <PUSH P* A> + <SETZM (A)> + <MOVEI A* 1> + <MOVE B* (TP)> + <MOVEI C* 0> + <STDIR> + <JFCL> + <JRST STDFLD> + <POP P* E> + <POP P* (E)> + <HRRZ B* A> + <MOVE A* <TYPE-WORD FIX>> + <JRST P1RET> +STDFLD <POP P* E> + <POP P* (E)> + <JRST P1RETFLS> + + +<SUB-ENTRY DIRNUM-TO-STR ("VALUE" <OR STRING FALSE> FIX)> + + <DPUSH TP* (AB)> + <PUSHJ P* IDIRNUM-TO-STR> + <JRST FINIS> + +<INTERNAL-ENTRY IDIRNUM-TO-STR 1> + + <SUBM M* (P)> + <PUSHJ P* TMTNXS> + <HRROI A* 1(E)> + <MOVE B* (TP)> + <DIRST> + <JRST P1RETFLS> + <MOVEI B* 1(E)> + <SUBM P* E> + <PUSHJ P* TNXSTR> + <SUB P* E> + <JRST P1RET> + + + + +<SUB-ENTRY CON-TO-DIR ("VALUE" <OR 'T FALSE> FIX)> + + <DPUSH TP* (AB)> + <PUSHJ P* ICON-TO-DIR> + <JRST FINIS> + +<INTERNAL-ENTRY ICON-TO-DIR 1> + + <SUBM M* (P)> + <GETYP O* -1(TP)> + <CAIE O* TFIX> + <JRST P1RETFLS> + <HRRZ A* (TP)> + <MOVE B* 0> + <CNDIR> + <JRST P1RETFLS> + <DMOVE A* <PQUOTE T>> + <JRST P1RET> + + + +<SUB-ENTRY EXPUNGE-DIR ("VALUE" 'T)> + + <PUSHJ P* IEXPUNGE-DIR> + <JRST FINIS> + +<INTERNAL-ENTRY IEXPUNGE-DIR 0> + + <SUBM M* (P)> + <GJINF> + <DELDF> + <DMOVE A* <PQUOTE T>> + <JRST MPOPJ> + + + +<SUB-ENTRY EXPUNGE-CON-DIR ("VALUE" 'T)> + + + <PUSHJ P* IEXPUNGE-CON-DIR> + <JRST FINIS> + +<INTERNAL-ENTRY IEXPUNGE-CON-DIR 0> + + <SUBM M* (P)> + <GJINF> + <MOVE A* B> + <DELDF> + <DMOVE A* <PQUOTE T>> + <JRST MPOPJ> + + +<SUB-ENTRY GET-DIR-ALLOC ("VALUE" <OR <UVECTOR FIX FIX> FALSE> FIX)> + + <DPUSH TP* (AB)> + <PUSHJ P* IGET-DIR-ALLOC> + <JRST FINIS> + +<INTERNAL-ENTRY IGET-DIR-ALLOC 1> + + <SUBM M* (P)> + <MOVE A* (TP)> + <GTDAL> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* A> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* B> + <MCALL 2 UVECTOR> + <JRST P1RET> + +<END> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog1/transl.abstr b/src/mprog1/transl.abstr new file mode 100644 index 00000000..d35e9d5c --- /dev/null +++ b/src/mprog1/transl.abstr @@ -0,0 +1,331 @@ + +[ +; "Unique-name" "TRANSLATE!-TRANSL!-PACKAGE!- " +; "Name" "TRANSLATE" +; "Author" "JHM" +; "Object-type" "FUNCTION" +; "Contents" [] +; "Category" ["I/O" "SYSTEM"] +; "Descriptor" ["TRANSLATE" "ADD"] +; "External-interactions" [ + ; "Side-effect" ["DATA" "ENVIRONMENT" "I/O"] + ; "Variables" [ + ; "Global" [ + ; "Setg'd" [#DECL ()] + ; "Used" [#DECL ()]] + ; "Local" [ + ; "Set" [#DECL ()] + ; "Used" [#DECL ()] + ; "Special" [#DECL ()]]] + ; "Functions" [ITS-CALL!-ITS STRTOX!-STR] + ; "Environment" [ + ; "Required" ["ITS"] + ; "During" [] + ; "After" []] + ; "Packages-used" [] + ; "Datums-used" [] + ; "Called-by" [TRANSLATE-STY!-TRANSL]] +; "Location" "TRANSL!-PACKAGE!- " +; "Reference" ["TRANSL!-PACKAGE!- "] +; "Description" + ["Adds an i/o translation entry to one of two lists belonging to a job." + +"Adds an i/o translation entry to one of two possible lists +associated with an ITS job. The first list is for the +job itself; the second is for the job and all its inferiors. +Translations can be (independently) made for input and for output; +and can be atomic (an atomic translation has the last word). +Any existing translation with the same 'from' specification will +be automatically deleted."] +; "Argument" [ + ; "Template" + [#DECL ("VALUE" <OR ATOM FALSE> + <OR CHANNEL FALSE <PRIMTYPE WORD>> <VECTOR [REST + <OR STRING FALSE>]> + <VECTOR [REST <OR STRING FALSE>]> "OPTIONAL" ANY ANY ANY ANY) + +"Argument 1 is the job specification. This can be + 1) A channel open on the USR, JOB, or BOJ + device (like JOB-LOAD!-JOBS returns) + 2) Something of primtype WORD -- the user index of + some ITS job (should be yourself or an inferior) + 3) A FALSE -- meaning 'myself'. + +Argument 2 is the 'from' file specification. This is a + vector of 1 to 4 elements. Each element + specifies a sub-name, in order: the device, + first name, second name, and directory. + Each specification can be a STRING name, or + a FALSE, or the STRING \"*\". Omitted names, + like \"*\" and FALSE, mean 'any name in this slot'. + +Argument 3 is the 'to' filespec. This is similar to the 'from' + filespec, only \"*\" (or equivalents) mean 'use the + same name in this slot'. + +(Optional arguments) +Argument 4, if non-false, makes the translation work for Input. + Default is T. +Argument 5, if non-false, makes the translation work for Output. + Default is T. +Argument 6, if non-false, means use the list for 'this job plus + its inferiors'. Default is T. +Argument 7, if non-false, creates an 'Atomic' translation; which + cannot be translated further. Default is FALSE. + +Returns -- T if successful, and explanatory FALSE otherwise. +"] + ; "Argument-type" [ANY + VECTOR + PRIMTYPE-WORD + FALSE + CHANNEL] + ; "Result-type" [FALSE ATOM]] +; "Example" + [<TRANSLATE!-TRANSL <> + ["DSK" "*" "*" "YOU"] + ["DSK" "*" "*" "ME"] + "INPUT" + "OUTPUT" + <> + <>> + +"Creates a non-atomic translation for input and output, for (just) the +muddle that executed this. All future OPENs on the directory 'YOU', +DSK device, will now be intercepted and turned into refrences to the +directory 'ME' (DSK device), unless re-translated."] +; "Notes" [] +] + +[ +; "Unique-name" "TRANSLATE-DELETE!-TRANSL!-PACKAGE!- " +; "Name" "TRANSLATE-DELETE" +; "Author" "JHM" +; "Object-type" "FUNCTION" +; "Contents" [] +; "Category" ["SYSTEM" "I/O"] +; "Descriptor" ["TRANSLATE" "DELETE" "REMOVE"] +; "External-interactions" [ + ; "Side-effect" ["DATA" "ENVIRONMENT" "I/O"] + ; "Variables" [ + ; "Global" [ + ; "Setg'd" [#DECL ()] + ; "Used" [#DECL ()]] + ; "Local" [ + ; "Set" [#DECL ()] + ; "Used" [#DECL ()] + ; "Special" [#DECL ()]]] + ; "Functions" [ITS-CALL!-ITS STRTOX!-STR] + ; "Environment" [ + ; "Required" ["ITS"] + ; "During" [] + ; "After" []] + ; "Packages-used" [] + ; "Datums-used" [] + ; "Called-by" []] +; "Location" "TRANSL!-PACKAGE!- " +; "Reference" ["TRANSL!-PACKAGE!- "] +; "Description" + ["Removes an i/o translation" + +"Removes an i/o translation, such as one created by TRANSLATE!-TRANSL. +It is possible to clear just the bit(s) associated with input or +output."] +; "Argument" [ + ; "Template" + [#DECL ("VALUE" <OR ATOM FALSE> + <OR CHANNEL FALSE <PRIMTYPE WORD>> <VECTOR <OR STRING FALSE> + [REST + <OR STRING FALSE>]> + "OPTIONAL" ANY ANY ANY) + +"Argument 1 is the jobspec. This is the same as for TRANSLATE!-TRANSL +Argument 2 is the 'from filespec' as in TRANSLATE!-TRANSL +(Optional arguments) +Argument 3, if non-false, says to clear the Input bit associated withî + this translation. Default is T. +Argument 4, if non-false, says to clear the Output bit associated with + this translation. Default is T. If both Input and Output + bits are zero, the translation will completely dissapear + from the translation list. +Argument 5 indicates which translation list associated with the job is + to be used. Non-false means the list for 'this job only'; + FALSE means the list for 'this job and its inferiors'. + Default is T. +Returns -- A T if successful, an explanatory FALSE otherwise ('no such + translation to delete' is a possible message) +"] + ; "Argument-type" [ANY + VECTOR + PRIMTYPE-WORD + FALSE + CHANNEL] + ; "Result-type" [FALSE ATOM]] +; "Example" + [<TRANSLATE-DELETE!-TRANSL <> + ["DSK" "*" "*" "YOU"] + "INPUT" + "OUTPUT"> + "Erases the translation created in the example for TRANSLATE!-TRANSL"] +; "Notes" [] +] + +[ +; "Unique-name" "TRANSLATE-CLEAR!-TRANSL!-PACKAGE!- " +; "Name" "TRANSLATE-CLEAR" +; "Author" "JHM" +; "Object-type" "FUNCTION" +; "Contents" [] +; "Category" ["I/O" "SYSTEM"] +; "Descriptor" ["TRANSLATE" "CLEAR" "EMPTY"] +; "External-interactions" [ + ; "Side-effect" ["I/O" "ENVIRONMENT"] + ; "Variables" [ + ; "Global" [ + ; "Setg'd" [#DECL ()] + ; "Used" [#DECL ()]] + ; "Local" [ + ; "Set" [#DECL ()] + ; "Used" [#DECL ()] + ; "Special" [#DECL ()]]] + ; "Functions" [ITS-CALL!-ITS] + ; "Environment" [ + ; "Required" ["ITS"] + ; "During" [] + ; "After" []] + ; "Packages-used" [] + ; "Datums-used" [] + ; "Called-by" []] +; "Location" "TRANSL!-PACKAGE!- " +; "Reference" ["TRANSL!-PACKAGE!- "] +; "Description" + ["Clears one or both i/o translation lists for a job" + "(ditto)"] +; "Argument" [ + ; "Template" + [#DECL ("VALUE" <OR ATOM FALSE> + <OR CHANNEL FALSE <PRIMTYPE WORD>> "OPTIONAL" ANY ANY) + +"Argument 1 is the jobspec, as in TRANSLATE!-TRANSL +(Optional arguments) +Argument 2, if non-false, says to clear the list for the 'job itself'. + Default is T. +Argument 3, if non-false, says to clear the list for the 'job plus all + of its inferiors'. Default is T. +Returns -- T if successful, an explanatory FALSE otherwise +"] + ; "Argument-type" [ANY PRIMTYPE-WORD FALSE CHANNEL] + ; "Result-type" [FALSE ATOM]] +; "Example" + [<TRANSLATE-CLEAR!-TRANSL <> "INPUT" "OUTPUT"> + "Will clear any translations created for the muddle that +executes this"] +; "Notes" [] +] + +[ +; "Unique-name" "TRANSLATE-STY!-TRANSL!-PACKAGE!- " +; "Name" "TRANSLATE-STY" +; "Author" "JHM" +; "Object-type" "FUNCTION" +; "Contents" [] +; "Category" ["I/O" "SYSTEM"] +; "Descriptor" ["TRANSLATE" "STY"] +; "External-interactions" [ + ; "Side-effect" ["ENVIRONMENT" "I/O"] + ; "Variables" [ + ; "Global" [ + ; "Setg'd" [#DECL ()] + ; "Used" [#DECL ()]] + ; "Local" [ + ; "Set" [#DECL ()] + ; "Used" [#DECL ()] + ; "Special" [#DECL ()]]] + ; "Functions" [TRANSLATE!-TRANSL SIXTOS!-STR USET!-ITS] + ; "Environment" [ + ; "Required" ["ITS"] + ; "During" [] + ; "After" []] + ; "Packages-used" [] + ; "Datums-used" [] + ; "Called-by" []] +; "Location" "TRANSL!-PACKAGE!- " +; "Reference" ["TRANSL!-PACKAGE!- "] +; "Description" + ["Translates a TTY into a STY +" + +"Translates a TTY (presumably of an inferior) into the +'other end' of a STY; so that i/o to the presumed TTY +really comes out/from your STY. This must be done +before the job opens the TTY. +"] +; "Argument" [ + ; "Template" + [#DECL ("VALUE" <OR ATOM FALSE> CHANNEL <OR CHANNEL <PRIMTYPE WORD>>) + +"Argument 1 -- The output channel to the STY (you should have an input + channel open too) +Argument 2 -- Specification (handle) to the job to translate for. This + can be any 'jobspec' acceptable to TRANSLATE!-TRANSL +Returns -- T iff successful, an explanatory FALSE otherwise +"] + ; "Argument-type" [PRIMTYPE-WORD CHANNEL] + ; "Result-type" [FALSE ATOM]] +; "Example" + [<TRANSLATE!-TRANSL!-PACKAGE .STY!-INITIAL + .INFERIOR!-INITIAL> + "Will translate the STY open (in .STY) for the inferior open +(in .INFERIOR)"] +; "Notes" [] +] + +[ +; "Unique-name" "TRANSL!-PACKAGE!- " +; "Name" "TRANSL" +; "Author" "JHM" +; "Object-type" "PACKAGE" +; "Contents" [ + ; "Ports" + [TRANSLATE!-TRANSL + TRANSLATE-DELETE!-TRANSL + TRANSLATE-CLEAR!-TRANSL + TRANSLATE-STY!-TRANSL] + ; "Internal-functions" [] + ; "Data-ports" [ + ; "Data-ports-global" [#DECL ()] + ; "Data-ports-local" [#DECL ()]] + ; "Internal-data" [ + ; "Internal-data-global" [#DECL ()] + ; "Internal-data-local" [#DECL ()]]] +; "Category" ["I/O" "SYSTEM"] +; "Descriptor" ["TRANSLATE"] +; "External-interactions" [ + ; "Side-effect" ["DATA"] + ; "Variables" [ + ; "Global" [ + ; "Setg'd" [#DECL ()] + ; "Used" [#DECL ()]] + ; "Local" [ + ; "Set" [#DECL ()] + ; "Used" [#DECL ()] + ; "Special" [#DECL ()]]] + ; "Functions" [STRTOX!-STR + ITS-CALL!-ITS + SIXTOS!-STR + USET!-ITS] + ; "Environment" [ + ; "Required" ["ITS"] + ; "During" [] + ; "After" []] + ; "Packages-used" ["ITS" "STR"] + ; "Datums-used" []] +; "Location" "LIBRARY" +; "Reference" [] +; "Description" ["Create and destroy i/o translations" + "(ditto)"] +; "Argument" [] +; "Example" [<USE "TRANSL">] +; "Notes" [] +] +  \ No newline at end of file diff --git a/src/mprog1/transl.ujhm08 b/src/mprog1/transl.ujhm08 new file mode 100644 index 00000000..2286ab87 --- /dev/null +++ b/src/mprog1/transl.ujhm08 @@ -0,0 +1,453 @@ +<PACKAGE "TRANSL"> + +<ENTRY TRANSLATE-DEVICE TRANSLATE-DELETE TRANSLATE-CLEAR + TRANSLATE-STY> + +<USE "ITS" "STR"> + +;'[ +; "Unique-name" "TRANSL!-PACKAGE!- " +; "Name" "TRANSL" +; "Author" "JHM" +; "Object-type" "PACKAGE" +; "Contents" [ + ; "Ports" + [TRANSLATE-DEVICE!-TRANSL + TRANSLATE-DELETE!-TRANSL + TRANSLATE-CLEAR!-TRANSL + TRANSLATE-STY!-TRANSL] + ; "Internal-functions" [] + ; "Data-ports" [ + ; "Data-ports-global" [#DECL ()] + ; "Data-ports-local" [#DECL ()]] + ; "Internal-data" [ + ; "Internal-data-global" [#DECL ()] + ; "Internal-data-local" [#DECL ()]]] +; "Category" ["I/O" "SYSTEM"] +; "Descriptor" ["TRANSLATE"] +; "External-interactions" [ + ; "Side-effect" ["DATA"] + ; "Variables" [ + ; "Global" [ + ; "Setg'd" [#DECL ()] + ; "Used" [#DECL ()]] + ; "Local" [ + ; "Set" [#DECL ()] + ; "Used" [#DECL ()] + ; "Special" [#DECL ()]]] + ; "Functions" [STRTOX!-STR + ITS-CALL!-ITS + SIXTOS!-STR + USET!-ITS] + ; "Environment" [ + ; "Required" ["ITS"] + ; "During" [] + ; "After" []] + ; "Packages-used" ["ITS" "STR"] + ; "Datums-used" []] +; "Location" "LIBRARY" +; "Reference" [] +; "Description" ["Create and destroy i/o translations" + "(ditto)"] +; "Argument" [] +; "Example" [<USE "TRANSL">] +; "Notes" [] +] + +;'[ +; "Unique-name" "TRANSLATE-DEVICE!-TRANSL!-PACKAGE!- " +; "Name" "TRANSLATE-DEVICE" +; "Author" "JHM" +; "Object-type" "FUNCTION" +; "Contents" [] +; "Category" ["I/O" "SYSTEM"] +; "Descriptor" ["TRANSLATE" "ADD"] +; "External-interactions" [ + ; "Side-effect" ["DATA" "ENVIRONMENT" "I/O"] + ; "Variables" [ + ; "Global" [ + ; "Setg'd" [#DECL ()] + ; "Used" [#DECL ()]] + ; "Local" [ + ; "Set" [#DECL ()] + ; "Used" [#DECL ()] + ; "Special" [#DECL ()]]] + ; "Functions" [ITS-CALL!-ITS STRTOX!-STR] + ; "Environment" [ + ; "Required" ["ITS"] + ; "During" [] + ; "After" []] + ; "Packages-used" [] + ; "Datums-used" [] + ; "Called-by" [TRANSLATE-STY!-TRANSL]] +; "Location" "TRANSL!-PACKAGE!- " +; "Reference" ["TRANSL!-PACKAGE!- "] +; "Description" + ["Adds an i/o translation entry to one of two lists belonging to a job." + +"Adds an i/o translation entry to one of two possible lists +associated with an ITS job. The first list is for the +job itself; the second is for the job and all its inferiors. +Translations can be (independently) made for input and for output; +and can be atomic (an atomic translation has the last word). +Any existing translation with the same 'from' specification will +be automatically deleted."] +; "Argument" [ + ; "Template" + [#DECL ("VALUE" <OR ATOM FALSE> + <OR CHANNEL FALSE <PRIMTYPE WORD>> <VECTOR [REST + <OR STRING FALSE>]> + <VECTOR [REST <OR STRING FALSE>]> "OPTIONAL" ANY ANY ANY ANY) + +"Argument 1 is the job specification. This can be + 1) A channel open on the USR, JOB, or BOJ + device (like JOB-LOAD!-JOBS returns) + 2) Something of primtype WORD -- the user index of + some ITS job (should be yourself or an inferior) + 3) A FALSE -- meaning 'myself'. + +Argument 2 is the 'from' file specification. This is a + vector of 1 to 4 elements. Each element + specifies a sub-name, in order: the device, + first name, second name, and directory. + Each specification can be a STRING name, or + a FALSE, or the STRING \"*\". Omitted names, + like \"*\" and FALSE, mean 'any name in this slot'. + +Argument 3 is the 'to' filespec. This is similar to the 'from' + filespec, only \"*\" (or equivalents) mean 'use the + same name in this slot'. + +(Optional arguments) +Argument 4, if non-false, makes the translation work for Input. + Default is T. +Argument 5, if non-false, makes the translation work for Output. + Default is T. +Argument 6, if non-false, means use the list for 'this job plus + its inferiors'. Default is T. +Argument 7, if non-false, creates an 'Atomic' translation; which + cannot be translated further. Default is FALSE. + +Returns -- T if successful, and explanatory FALSE otherwise. +"] + ; "Argument-type" [ANY + VECTOR + PRIMTYPE-WORD + FALSE + CHANNEL] + ; "Result-type" [FALSE ATOM]] +; "Example" + [<TRANSLATE-DEVICE!-TRANSL <> + ["DSK" "*" "*" "YOU"] + ["DSK" "*" "*" "ME"] + "INPUT" + "OUTPUT" + <> + <>> + +"Creates a non-atomic translation for input and output, for (just) the +muddle that executed this. All future OPENs on the directory 'YOU', +DSK device, will now be intercepted and turned into refrences to the +directory 'ME' (DSK device), unless re-translated."] +; "Notes" [] +] + +<DEFINE TRANSLATE-DEVICE (JOBSPEC FROM TO + "OPTIONAL" (INPUT? T) (OUTPUT? T) (INFERIORS? T) (ATOMIC? <>) + "AUX" SIXBIT-FROM SIXBIT-TO MODE-BITS A) + + #DECL ((VALUE A) <OR ATOM FALSE> + (JOBSPEC) <OR CHANNEL FALSE <PRIMTYPE WORD>> + (FROM TO) <VECTOR [REST <OR STRING FALSE>]> + (INPUT? OUTPUT? INFERIORS? ATOMIC?) ANY + (SIXBIT-FROM SIXBIT-TO) UVECTOR + (MODE-BITS) <PRIMTYPE WORD>) + + <SET SIXBIT-FROM ; "SYSTEM WANTS CPTR (UVECTOR) TO FILESPEC DATA" + <MAPF ,UVECTOR ; "IN CONTIGUOUS SIXBIT WORDS" + #FUNCTION ((S) <COND (.S <STRTOX .S>) (0)>) + .FROM>> + + <SET SIXBIT-TO ; "FOR BOTH FILESPECS" + <MAPF ,UVECTOR + #FUNCTION ((S) <COND (.S <STRTOX .S>) (0)>) + .TO>> + + <SET MODE-BITS <ORB <COND (.INPUT? *1*) ; "SET UP MODE BITS" + (0)> + <COND (.OUTPUT? *2*) + (0)> + <COND (.INFERIORS? *200000*) + (0)> + <COND (.ATOMIC? *400000*) + (0)>>> + + ; "DO TRANSLATE" + <COND (<SET A <ITS-CALL "TRANAD" + '![] + (.MODE-BITS) + <COND (<TYPE? .JOBSPEC CHANNEL> .JOBSPEC) + (.JOBSPEC <PUTBITS .JOBSPEC %<BITS 1 17> 1>) + (*777777*)> + .SIXBIT-FROM + .SIXBIT-TO>>) + (<==? < 1 .A> 5> #FALSE ("NO ROOM IN SYSTEM FOR NEW TRANSLATION ENTRY")) + (T <CHTYPE <REST .A> FALSE>)> > + +;'[ +; "Unique-name" "TRANSLATE-DELETE!-TRANSL!-PACKAGE!- " +; "Name" "TRANSLATE-DELETE" +; "Author" "JHM" +; "Object-type" "FUNCTION" +; "Contents" [] +; "Category" ["SYSTEM" "I/O"] +; "Descriptor" ["TRANSLATE" "DELETE" "REMOVE"] +; "External-interactions" [ + ; "Side-effect" ["DATA" "ENVIRONMENT" "I/O"] + ; "Variables" [ + ; "Global" [ + ; "Setg'd" [#DECL ()] + ; "Used" [#DECL ()]] + ; "Local" [ + ; "Set" [#DECL ()] + ; "Used" [#DECL ()] + ; "Special" [#DECL ()]]] + ; "Functions" [ITS-CALL!-ITS STRTOX!-STR] + ; "Environment" [ + ; "Required" ["ITS"] + ; "During" [] + ; "After" []] + ; "Packages-used" [] + ; "Datums-used" [] + ; "Called-by" []] +; "Location" "TRANSL!-PACKAGE!- " +; "Reference" ["TRANSL!-PACKAGE!- "] +; "Description" + ["Removes an i/o translation" + +"Removes an i/o translation, such as one created by TRANSLATE-DEVICE!-TRANSL. +It is possible to clear just the bit(s) associated with input or +output."] +; "Argument" [ + ; "Template" + [#DECL ("VALUE" <OR ATOM FALSE> + <OR CHANNEL FALSE <PRIMTYPE WORD>> <VECTOR <OR STRING FALSE> + [REST + <OR STRING FALSE>]> + "OPTIONAL" ANY ANY ANY) + +"Argument 1 is the jobspec. This is the same as for TRANSLATE-DEVICE!-TRANSL +Argument 2 is the 'from filespec' as in TRANSLATE-DEVICE!-TRANSL +(Optional arguments) +Argument 3, if non-false, says to clear the Input bit associated withî + this translation. Default is T. +Argument 4, if non-false, says to clear the Output bit associated with + this translation. Default is T. If both Input and Output + bits are zero, the translation will completely dissapear + from the translation list. +Argument 5 indicates which translation list associated with the job is + to be used. Non-false means the list for 'this job only'; + FALSE means the list for 'this job and its inferiors'. + Default is T. +Returns -- A T if successful, an explanatory FALSE otherwise ('no such + translation to delete' is a possible message) +"] + ; "Argument-type" [ANY + VECTOR + PRIMTYPE-WORD + FALSE + CHANNEL] + ; "Result-type" [FALSE ATOM]] +; "Example" + [<TRANSLATE-DELETE!-TRANSL <> + ["DSK" "*" "*" "YOU"] + "INPUT" + "OUTPUT"> + "Erases the translation created in the example for TRANSLATE-DEVICE!-TRANSL"] +; "Notes" [] +] + +<DEFINE TRANSLATE-DELETE (JOBSPEC FILESPEC + "OPTIONAL" (INPUT? T) (OUTPUT? T) (INFERIORS? T) + "AUX" SIXBIT-FILESPEC MODE-BITS A) + #DECL ((VALUE A) <OR ATOM FALSE> + (JOBSPEC) <OR CHANNEL FALSE <PRIMTYPE WORD>> + (FILESPEC) <VECTOR <OR STRING FALSE> [REST <OR STRING FALSE>]> + (INPUT? OUTPUT? INFERIORS?) ANY + (SIXBIT-FILESPEC) UVECTOR + (MODE-BITS) <PRIMTYPE WORD>) + + <SET SIXBIT-FILESPEC ; "CPTR TO FILESPEC" + <MAPF ,UVECTOR + #FUNCTION ((S) <COND (.S <STRTOX .S>) (0)>) + .FILESPEC>> + + <SET MODE-BITS <ORB <COND (.INPUT? *1*) ; "SETUP MODE BITS" + (0)> + <COND (.OUTPUT? *2*) + (0)> + <COND (.INFERIORS? *200000*) + (0)>>> + + + ; "DELETE TRANSLATION ENTRY" + <COND (<SET A <ITS-CALL "TRANDL" + '![] + (.MODE-BITS) + <COND (<TYPE? .JOBSPEC CHANNEL> .JOBSPEC) + (.JOBSPEC <PUTBITS .JOBSPEC %<BITS 1 17> 1>) + (*777777*)> + .SIXBIT-FILESPEC>>) + (<==? <1 .A> 4> #FALSE ("NO SUCH TRANSLATION ENTRY TO DELETE")) + (T <CHTYPE <REST .A> FALSE>)> > + +;'[ +; "Unique-name" "TRANSLATE-CLEAR!-TRANSL!-PACKAGE!- " +; "Name" "TRANSLATE-CLEAR" +; "Author" "JHM" +; "Object-type" "FUNCTION" +; "Contents" [] +; "Category" ["I/O" "SYSTEM"] +; "Descriptor" ["TRANSLATE" "CLEAR" "EMPTY"] +; "External-interactions" [ + ; "Side-effect" ["I/O" "ENVIRONMENT"] + ; "Variables" [ + ; "Global" [ + ; "Setg'd" [#DECL ()] + ; "Used" [#DECL ()]] + ; "Local" [ + ; "Set" [#DECL ()] + ; "Used" [#DECL ()] + ; "Special" [#DECL ()]]] + ; "Functions" [ITS-CALL!-ITS] + ; "Environment" [ + ; "Required" ["ITS"] + ; "During" [] + ; "After" []] + ; "Packages-used" [] + ; "Datums-used" [] + ; "Called-by" []] +; "Location" "TRANSL!-PACKAGE!- " +; "Reference" ["TRANSL!-PACKAGE!- "] +; "Description" + ["Clears one or both i/o translation lists for a job" + "(ditto)"] +; "Argument" [ + ; "Template" + [#DECL ("VALUE" <OR ATOM FALSE> + <OR CHANNEL FALSE <PRIMTYPE WORD>> "OPTIONAL" ANY ANY) + +"Argument 1 is the jobspec, as in TRANSLATE-DEVICE!-TRANSL +(Optional arguments) +Argument 2, if non-false, says to clear the list for the 'job itself'. + Default is T. +Argument 3, if non-false, says to clear the list for the 'job plus all + of its inferiors'. Default is T. +Returns -- T if successful, an explanatory FALSE otherwise +"] + ; "Argument-type" [ANY PRIMTYPE-WORD FALSE CHANNEL] + ; "Result-type" [FALSE ATOM]] +; "Example" + [<TRANSLATE-CLEAR!-TRANSL <> "INPUT" "OUTPUT"> + "Will clear any translations created for the muddle that +executes this"] +; "Notes" [] +] + +<DEFINE TRANSLATE-CLEAR (JOBSPEC + "OPTIONAL" (OWN-LIST? T) (INFERIORS-LIST? T) + "AUX" MODE-BITS A) + + #DECL ((VALUE A) <OR ATOM FALSE> + (JOBSPEC) <OR CHANNEL FALSE <PRIMTYPE WORD>> + (OWN-LIST? INFERIORS-LIST?) ANY + (MODE-BITS) <PRIMTYPE WORD>) + + <SET MODE-BITS <ORB <COND (.OWN-LIST? *100000*) ; "SETUP MODE BITS" + (0)> + <COND (.INFERIORS-LIST? *200000*) + (0)>>> + + + <COND (<SET A <ITS-CALL "TRANCL" + '![] + (.MODE-BITS) + <COND (<TYPE? .JOBSPEC CHANNEL> .JOBSPEC) + (.JOBSPEC <PUTBITS .JOBSPEC %<BITS 1 17> 1>) + (*777777*)>>>) ; "CLEAR TRANSLATION TABLE(S)" + (T <CHTYPE <REST .A> FALSE>)>> + +;'[ +; "Unique-name" "TRANSLATE-STY!-TRANSL!-PACKAGE!- " +; "Name" "TRANSLATE-STY" +; "Author" "JHM" +; "Object-type" "FUNCTION" +; "Contents" [] +; "Category" ["I/O" "SYSTEM"] +; "Descriptor" ["TRANSLATE" "STY"] +; "External-interactions" [ + ; "Side-effect" ["ENVIRONMENT" "I/O"] + ; "Variables" [ + ; "Global" [ + ; "Setg'd" [#DECL ()] + ; "Used" [#DECL ()]] + ; "Local" [ + ; "Set" [#DECL ()] + ; "Used" [#DECL ()] + ; "Special" [#DECL ()]]] + ; "Functions" [TRANSLATE-DEVICE!-TRANSL SIXTOS!-STR USET!-ITS] + ; "Environment" [ + ; "Required" ["ITS"] + ; "During" [] + ; "After" []] + ; "Packages-used" [] + ; "Datums-used" [] + ; "Called-by" []] +; "Location" "TRANSL!-PACKAGE!- " +; "Reference" ["TRANSL!-PACKAGE!- "] +; "Description" + ["Translates a TTY into a STY +" + +"Translates a TTY (presumably of an inferior) into the +'other end' of a STY; so that i/o to the presumed TTY +really comes out/from your STY. This must be done +before the job opens the TTY. +"] +; "Argument" [ + ; "Template" + [#DECL ("VALUE" <OR ATOM FALSE> CHANNEL <OR CHANNEL <PRIMTYPE WORD>>) + +"Argument 1 -- The output channel to the STY (you should have an input + channel open too) +Argument 2 -- Specification (handle) to the job to translate for. This + can be any 'jobspec' acceptable to TRANSLATE-DEVICE!-TRANSL +Returns -- T iff successful, an explanatory FALSE otherwise +"] + ; "Argument-type" [PRIMTYPE-WORD CHANNEL] + ; "Result-type" [FALSE ATOM]] +; "Example" + [<TRANSLATE-STY!-TRANSL!-PACKAGE .STY!-INITIAL + .INFERIOR!-INITIAL> + "Will translate the STY open (in .STY) for the inferior open +(in .INFERIOR)"] +; "Notes" [] +] + +<DEFINE TRANSLATE-STY (STY-CHAN JOBSPEC "AUX" TNM NM) + #DECL ((VALUE) <OR ATOM FALSE> + (STY-CHAN) CHANNEL + (JOBSPEC) <OR CHANNEL <PRIMTYPE WORD>> + (NM) WORD + (TNM) STRING) + + <SET NM <USET <> <+ *100* <1 .STY-CHAN>>>> ; "GET Tnm FOR OTHER END OF STY" + <SET TNM <SIXTOS <PUTBITS <PUTBITS %<STRTOX "T00 "> ; "TURN IT INTO A STRING" + %<BITS 3 18> + <GETBITS .NM %<BITS 3 18>>> + %<BITS 3 24> + <GETBITS .NM %<BITS 3 21>>>>> + + <TRANSLATE-DEVICE .JOBSPEC '["TTY"] [.TNM] "INPUT" "OUTPUT" "INFERIORS">> + +<ENDPACKAGE> diff --git a/src/mprog1/vsort.ueb001 b/src/mprog1/vsort.ueb001 new file mode 100644 index 00000000..2c93c276 --- /dev/null +++ b/src/mprog1/vsort.ueb001 @@ -0,0 +1,27 @@ +<PACKAGE "VSORT"> +<ENTRY VSORT> + +<DEFINE VSORT (FCN VEC "OPTIONAL" (RECL 1) (KEYOFF 0) "TUPLE" MOREVECS) + #DECL ((VALUE) <PRIMTYPE VECTOR> + (VEC) <SPECIAL <PRIMTYPE VECTOR>> + (RECL KEYOFF) <SPECIAL FIX> + (MOREVECS) <SPECIAL <TUPLE [REST <PRIMTYPE VECTOR>]>> + (FCN) <SPECIAL <OR FALSE APPLICABLE>>) +<MAPR ,IVSORT + <FUNCTION (A) + <OR <PUT .A COMMENT> ;"flush old comment" + <PUT <REST .A 0> COMMENT>>> + .VEC> +.VEC> + +<DEFINE IVSORT ("TUPLE" TUP "AUX" (IRECL .RECL)) + #DECL ((IRECL) FIX) + <SORT .FCN .VEC .IRECL .KEYOFF .TUP .IRECL !.MOREVECS> ;"sort comments too" + <MAPR <> + <FUNCTION (V C) + #DECL ((V) VECTOR (C) ANY) + <PUT .V COMMENT <1 .C>>> + .VEC .TUP>> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog1/when.udl003 b/src/mprog1/when.udl003 new file mode 100644 index 00000000..7498afed --- /dev/null +++ b/src/mprog1/when.udl003 @@ -0,0 +1,80 @@ + +<PACKAGE "WHEN"> + +<ENTRY FIGURE-WHEN> + +<USE "TIMFCN"> + +<SETG HH (0 0 0)> + +<SETG DD (0 0 0)> + +<SETG SPACERS + <STRING !", !" <ASCII 9> <ASCII 13> <ASCII 10> <ASCII 12>>> + +<MANIFEST SPACERS> + +<DEFINE FIGURE-WHEN (STR + "AUX" (+FLAG <>) (+DAYS <>) (HFLAG <>) (DFLAG <>) (NUM 0) + (TIME-NOW <DTNOW>) (H ,HH) (D ,DD) C) + #DECL ((STR) STRING (+FLAG +DAYS HFLAG DFLAG) <OR FALSE ANY> + (H D) <LIST [REST FIX]> (C) CHARACTER + (VALUE) <OR <LIST LIST LIST STRING> FALSE>) + <REPEAT () + <COND + (<OR <EMPTY? .STR> <MEMQ <SET C <1 .STR>> ,SPACERS>> + <COND (.DFLAG + <COND (<EMPTY? .D> <RETURN <CHTYPE (.STR) FALSE>>) + (<SET D <REST <PUT .D 1 .NUM>>> <SET NUM 0>)>) + (.HFLAG + <COND (<EMPTY? .H> <RETURN <CHTYPE (.STR) FALSE>>) + (<SET H <REST <PUT .H 1 .NUM>>> <SET NUM 0>)>) + (<AND <==? .H ,HH> <==? .D ,DD>> + <SET +DAYS T> + <PUT .D 1 <COND (.+FLAG 0)(<2 <1 .TIME-NOW>>)>> + <PUT .D 2 .NUM> + <PUT .D 3 <COND (.+FLAG 0)(<1 <1 .TIME-NOW>>)>> + <SET D <REST .D 3>> + <SET NUM 0>)> + <MAPR <> <FUNCTION (H) <PUT .H 1 0>> .H> + <MAPR <> + <FUNCTION (D) + <COND (<AND <==? <LENGTH .D> 1> <NOT .+FLAG>> + <PUT .D 1 <1 <1 .TIME-NOW>>>) + (ELSE <PUT .D 1 0>)>> + .D> + <COND (<EMPTY? .STR> + <SET D ,DD> + <SET NUM <3 .D>> + <PUT .D 3 <2 .D>> + <PUT .D 2 <1 .D>> + <PUT .D 1 .NUM> + <RETURN <COND (.+FLAG + <SET TMP + <DTADD .TIME-NOW + (<LIST !,DD> <LIST !,HH>)>> + <COND (.+DAYS <PUT .TMP 2 (0 0 0)>) + (ELSE .TMP)>) + (ELSE (<LIST !,DD> <LIST !,HH> "EST"))>>) + (ELSE <SET HFLAG <SET DFLAG <>>>)>) + (<==? .C !"+> <SET +FLAG T>) + (<MEMQ .C "0123456789"> + <SET NUM <+ <- <ASCII .C> 48> <* 10 .NUM>>>) + (<==? .C !"/> + <COND (.HFLAG <RETURN <CHTYPE (.STR) FALSE>>) + (<EMPTY? .D> <RETURN <CHTYPE (.STR) FALSE>>) + (ELSE + <SET DFLAG T> + <SET D <REST <PUT .D 1 .NUM>>> + <SET NUM 0>)>) + (<==? .C !":> + <COND (.DFLAG <RETURN <CHTYPE (.STR) FALSE>>) + (<EMPTY? .H> <RETURN <CHTYPE (.STR) FALSE>>) + (ELSE + <SET HFLAG T> + <SET H <REST <PUT .H 1 .NUM>>> + <SET NUM 0>)>) + (ELSE <RETURN <>>)> + <SET STR <REST .STR>>>> + +<ENDPACKAGE> diff --git a/src/mprog2/append.udld05 b/src/mprog2/append.udld05 new file mode 100644 index 00000000..78247bcb --- /dev/null +++ b/src/mprog2/append.udld05 @@ -0,0 +1,48 @@ +<PACKAGE "OPEN-APPEND"> + +<ENTRY OPEN-APPEND> + +<SETG RNAME1 7> + +<SETG RNAME2 8> + +<SETG RDEVICE 9> + +<SETG RDIRECTORY 10> + +<SETG CBUF "UGBUG"> + +<GDECL (CBUF) STRING> + +<MANIFEST RNAME1 RNAME2 RDEVICE RDIRECTORY> + +<DEFINE OPEN-APPEND (FIL "OPTIONAL" (TRIES 0) (WAIT 0) + "AUX" (CH <OPEN "READB" .FIL>)) + #DECL ((CH VALUE) <OR <FALSE STRING STRING FIX> CHANNEL> (FIL) STRING + (TRIES WAIT) FIX) + <PROG () + <COND (.CH + <PROG (SC FL + (SS + <TUPLE <RNAME1 .CH> + <RNAME2 .CH> + <RDEVICE .CH> + <RDIRECTORY .CH>>) + (CBUF ,CBUF)) + #DECL ((SC FL) FIX (CBUF) STRING (SS SA) TUPLE) + <SET FL <MAX 0 <- <FILE-LENGTH .CH> 1>>> + <ACCESS .CH .FL> + <SET SC <READSTRING .CBUF .CH 5 0>> + <CLOSE .CH> + <COND (<SET CH <OPEN "PRINTO" !.SS>> + <ACCESS .CH .FL> + <PRINTSTRING .CBUF .CH .SC>)> + .CH>) + (<==? <3 .CH> 4980736> + <COND (<G? <SET TRIES <- .TRIES 1>> 0> + <SLEEP .WAIT> + <AGAIN>) + (ELSE .CH)>) + (ELSE <OPEN "PRINTB" .FIL>)>>> + +<ENDPACKAGE> diff --git a/src/mprog2/boot.udl001 b/src/mprog2/boot.udl001 new file mode 100644 index 00000000..fb3b76a6 --- /dev/null +++ b/src/mprog2/boot.udl001 @@ -0,0 +1,234 @@ +<PACKAGE "BOOT"> + +<ENTRY BOOTSTRAP> + +<DEFINE BOOTSTRAP (TSFIL "OPTIONAL" SVFIL (DIRECT? T) (MDL "MUDDLE") + "AUX" TC SC MC C CEND SAVNAM MUDNM2 MUDSNM) + #DECL ((TSFIL SVFIL) STRING (MDL) <OR STRING FIX> (DIRECT?) <OR ATOM FALSE> + (SAVNAM MUDNM2 MUDSNM) FIX (TC SC MC) <OR CHANNEL FALSE> + (C CEND) UVECTOR) + <OR <MEMQ !\ .TSFIL> <SET TSFIL <STRING "TS " .TSFIL>>> + <COND (<PROG ((NM2 "BOOT")) + #DECL ((NM2) <SPECIAL STRING>) + <SET TC <OPEN "PRINTB" .TSFIL>>> + <AND <NOT <ASSIGNED? SVFIL>> + <SET SVFIL <8 .TC>>> + <PROG ((NM2 "SAVE")) + #DECL ((NM2) <SPECIAL STRING>) + <SET SC <CHANNEL "READ" .SVFIL>>> + <PROG ((SNM "SYS")) + #DECL ((SNM) <SPECIAL STRING>) + <COND (<TYPE? .MDL FIX> + <SET MDL <STRING "MUD" <UNPARSE .MDL>>>)> + <COND (<OR <N=? .MDL "MUDDLE"> <N=? .MDL "NMUDDL">> + <SET SNM "SYS1">)> + <SET MC <CHANNEL "READ" <STRING "TS " .MDL>>>> + <COND (.DIRECT? <SET C ,DIRECT-CODE>) + (ELSE <SET C ,SLOW-CODE>)> + <PUT .C 3 <SET SAVNAM <STR6 <7 .SC>>>> + <PUT .C 4 <SET MUDNM2 <STR6 <8 .MC>>>> + <PUT .C 5 <SET MUDSNM <STR6 <10 .MC>>>> + <PUT .C 6 .SAVNAM> + <PUT .C 7 <STR6 <8 .SC>>> + <PUT .C 8 <STR6 <10 .SC>>> + <SET CEND <REST .C <- <LENGTH .C> 8>>> + <PUT .CEND 4 .MUDNM2> + <PUT .CEND 5 .MUDSNM> + <CHECKSUM <REST .C>> + <CHECKSUM .CEND> + <PRINTB .C .TC> + <CLOSE .TC> + .TSFIL)>> + +<SETG SLOW-CODE '![ +*254000000001* ;"0" +*777774000100* ;"1" +*707070707070* ;"2" +*556544445445* ;"3" +*637163000000* ;"4" +*707070707070* ;"5" +*371070230231* ;"6" +*777735000106* ;"7" +*43000000114* ;"10" +*43200000140* ;"11" +*205740000125* ;"12" +*251740000017* ;"13" +*200000000100* ;"14" +*254000000001* ;"15" +*400000000000* ;"16" +*576045560000* ;"17" +*146* ;"20" +*147* ;"21" +*150* ;"22" +*101* ;"23" +*400000000102* ;"24" +*440700000002* ;"25" +*220600000003* ;"26" +*0* ;"27" +*43000000007* ;"30" +*43200000000* ;"31" +*40040000001* ;"32" +*42040000007* ;"33" +*271040000001* ;"34" +*254020000001* ;"35" +*400000000000* ;"36" +*545741440000* ;"37" +*1000777777* ;"40" +*401000000001* ;"41" +*135643313100* ;"42" +*473364052246* ;"43" +*202332542210* ;"44" +*462124037432* ;"45" +*50563306424* ;"46" +*130000000000* ;"47" +*4000001* ;"50" +*446353000000* ;"51" +*646300000000* ;"52" +*312246127613* ;"53" +*254000000106* ;"54" +*777774000002* ;"55" +*446353000000* ;"56" +*646300000000* ;"57" +*0* ;"60" +*0* ;"61" +*0* ;"62" +*254000000106* ;"63" +*254000000106* ;"64" +!]> + +<SETG DIRECT-CODE '![ + +*254000000001* ;"0" +*777674000100* ;"1" +*2* ;"2" +*0* ;"3" +*637163210000* ;"4" +*707070707070* ;"5" +*717171717171* ;"6" +*727272727272* ;"7" +*43000000130* ;"10" +*43200000163* ;"11" +*40100000171* ;"12" +*47100000170* ;"13" +*205140556544* ;"14" +*134000000146* ;"15" +*275000000040* ;"16" +*136000000147* ;"17" +*134000000146* ;"20" +*275000000040* ;"21" +*136000000147* ;"22" +*202140000101* ;"23" +*43000000137* ;"24" +*43200000172* ;"25" +*205740000150* ;"26" +*251740000017* ;"27" +*200000000100* ;"30" +*254000000001* ;"31" +*400000000000* ;"32" +*576045560000* ;"33" +*200* ;"34" +*201* ;"35" +*103* ;"36" +*104* ;"37" +*400000000105* ;"40" +*400000000000* ;"41" +*576045560000* ;"42" +*202* ;"43" +*201* ;"44" +*203* ;"45" +*101* ;"46" +*400000000102* ;"47" +*440700000002* ;"50" +*220600000003* ;"51" +*0* ;"52" +*43000000007* ;"53" +*43200000000* ;"54" +*40040000001* ;"55" +*42040000007* ;"56" +*271040000001* ;"57" +*254020000001* ;"60" +*400000000000* ;"61" +*545741440000* ;"62" +*1000777777* ;"63" +*401000000001* ;"64" +*135643313100* ;"65" +*473364051602* ;"66" +*532124063322* ;"67" +*663127706424* ;"70" +*134661505054* ;"71" +*0* ;"72" +*777777000002* ;"73" +*135643313100* ;"74" +*473364052246* ;"75" +*202332542210* ;"76" +*462124037432* ;"77" +*50563306424* ;"100" +*130000000000* ;"101" +*6000002* ;"102" +*446353000000* ;"103" +*4000001* ;"104" +*646300000000* ;"105" +*703652042266* ;"106" +*254000000106* ;"107" +*777774000002* ;"110" +*446353000000* ;"111" +*646300000000* ;"112" +*0* ;"113" +*0* ;"114" +*0* ;"115" +*254000000106* ;"116" +*254000000106* ;"117" +!]> + +<TITLE CHECKSUM> + <DECLARE ("VALUE" FIX UVECTOR)> + <PUSH TP* (AB)> + <PUSH TP* 1(AB)> + <PUSHJ P* ICHECKSUM> + <JRST FINIS> + +<INTERNAL-ENTRY ICHECKSUM 1> + <SUBM M* (P)> + <SETZ A*> + <MOVE B* (TP)> + <HLL B* (B)> + <ADDI B* 1> +LOOP <ROT A* 1> + <ADD A* (B)> + <AOBJN B* LOOP> + <MOVEM A* (B)> + <SUB TP* [<2(2)>]> + <MOVSI <TYPE-CODE FIX>> + <JRST MPOPJ> + +<TITLE STR6> + <DECLARE ("VALUE" FIX STRING)> + <PUSH TP* (AB)> + <PUSH TP* 1(AB)> + <PUSHJ P* ISTR6> + <JRST FINIS> + +<INTERNAL-ENTRY ISTR6 1> + <SUBM M* (P)> + <HRRZ D* -1(TP)> ;"COUNT" + <CAIL D* 6> + <MOVEI D* 6> ;"MIN (6,LENGTH)" + <SETZM B> ;"ACCUMULATOR" + <JUMPE D* OUT> ;"NO CHARS" + <MOVE C* [*440600000002*]> ;"SIXBIT POINTER TO B" + <MOVE O* (TP)> ;"ASCII POINTER" +LOOP + <ILDB A* O> ;"GET CHARACTER" + <CAIL A* *140*> ;"lower case" + <SUBI A* *40*> ;"goes to upper case" + <SUBI A* *40*> ;"MAKE SIXBIT" + <IDPB A* C> ;"DEPOSIT IN C" + <SOJN D* LOOP> +OUT + <MOVSI A* <TYPE-CODE FIX>> + <SUB TP* [<2(2)>]> + <JRST MPOPJ> + +<END> + +<ENDPACKAGE> diff --git a/src/mprog2/bugsys.udl008 b/src/mprog2/bugsys.udl008 new file mode 100644 index 00000000..303f5506 --- /dev/null +++ b/src/mprog2/bugsys.udl008 @@ -0,0 +1,86 @@ +<PACKAGE "BUGGAGE"> + +<ENTRY BUGGER> + +<USE "M.DAC" "USRUTI" "TOKENS"> + +"Do expansion if we can. If not, send to BUG-frob@AI." + +<DEFINE BUGGER (ADR DATUM + "AUX" (XLIST <USE-DATUM .DATUM>) + (ADT <DRD .ADR "ADDRESSED-TO">) + (FROMHOST <DRD "" "RECEIVED-FROM-HOST">) + (TMP ()) TMP1) + #DECL ((ADR DATUM) STRING (ADT) <OR FALSE STRING> + (FROMHOST) <OR FALSE FIX> (TMP) LIST (TMP1) ANY) + <COND (<==? .FROMHOST 70> <SET FROMHOST <>>)> + <COND (<AND .XLIST .ADT> + <SET ADT <UC-STR .ADT>> + <COND (<SET TMP1 <MEMBER "BUG-" .ADT>> + <SET TMP1 <REST .TMP1 4>> + <SET TMP <ADR-EXPAND (.TMP1) .XLIST .FROMHOST>>) + (<OR <SET TMP1 <MEMBER "(BUG" .ADT>> + <SET TMP1 <MEMBER "(FEATURE" .ADT>>> + <SET TMP1 <TOKENS <REST .ADT> " " ")">> + <SET TMP1 <REST .TMP1>> + <SET TMP <ADR-EXPAND .TMP1 .XLIST .FROMHOST>>) + (ELSE <SET TMP1 (.ADT)>)> + <COND (<EMPTY? .TMP> + <SET TMP <LIST <STRING "(BUG " <1 .TMP1> ")@AI">>>)> + <DWT .TMP "" "MORE-TO"> + <PRCADD "" "EXPANSION"> + <PRCADD "" "TRANSMISSION"> + T)>> + +<DEFINE ADR-EXPAND (ALIST XLIST LOCAL-ONLY?) + #DECL ((ALIST) <LIST [REST STRING]> (XLIST) <VECTOR [REST STRING LIST]> + (LOCAL-ONLY?) <OR FIX FALSE> (VALUE) <LIST [REST <OR STRING ATOM>]>) + <MAPF ,LIST + <FUNCTION (A "AUX" B) + #DECL ((A) STRING (B) <OR FALSE LIST STRING>) + <COND (<SET B <SYMLOOK <UC-STR .A> .XLIST>> + <COND (<STRUCTURED? .B> + <COND (.LOCAL-ONLY? + <MAPRET !<MAPF ,LIST + <FUNCTION (A) + #DECL ((A) <OR STRING ATOM>) + <COND (<MEMQ !"@ .A> <MAPRET>) + (ELSE <MAPRET .A>)>> + .B>>) + (ELSE <MAPRET !.B>)>) + (ELSE <MAPRET .A>)>) + (<SET B <KEYGET .A>> <MAPRET .B>) + (ELSE <MAPRET>)>> + .ALIST>> + +<DEFINE UC-STR (S) + #DECL ((VALUE S) STRING) + <MAPR <> + <FUNCTION (S "AUX" (C <1 .S>)) + <COND (<OR <G? <ASCII .C> <ASCII !"z>> + <L? <ASCII .C> <ASCII !"a>>>) + (ELSE <PUT .S 1 <ASCII <- <ASCII .C> 32>>>)>> + .S> + .S> + +<DEFINE SYMLOOK (OBJ TABLE "AUX" (CNT 10) AGN) + #DECL ((OBJ) STRING (TABLE) <VECTOR [REST STRING LIST]> (VALUE) <OR LIST FALSE>) + <REPEAT () + <REPEAT ((TBL .TABLE)) + <COND (<LENGTH? .TBL 1> <RETURN <SET R <>>>) + (<=? .OBJ <1 .TBL>> <RETURN <SET R <2 .TBL>>>) + (ELSE <SET TBL <REST .TBL 2>>)>> + <SET AGN <>> + <SET R + <MAPF ,LIST + <FUNCTION (S) + <COND (<AND <TYPE? .S STRING> <NOT <MEMQ !"@ .S>>> + <SET CNT <- .CNT 1>> + <SET AGN T> + <MAPRET !<SYMLOOK .S .TABLE>>) + (ELSE <MAPRET .S>)>> + .R>> + <COND (<OR <0? .CNT> <NOT .AGN>> <RETURN .R>)>>> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog2/charac.uerb14 b/src/mprog2/charac.uerb14 new file mode 100644 index 00000000..a146f198 --- /dev/null +++ b/src/mprog2/charac.uerb14 @@ -0,0 +1,107 @@ +<PACKAGE "CHARAC"> +<ENTRY LETTERP DIGITP UPPER-CASE LOWER-CASE ANY-LOWER-CASE?> + +<TITLE ANY-LOWER-CASE?> + <DECLARE ("VALUE" <OR FALSE FIX> STRING)> + <DPUSH TP* <ARG 1>> + <PUSHJ P* ALC0> + <JRST FINIS> + + <INTERNAL-ENTRY ALC0 1> + <HRRZ B* (TP) -1> + <CAILE B* 20> + <MOVEI B* 20> + <MOVE D* (TP)> + <MOVSI A* TFALSE> +ACL1 <ILDB C* D> + <CAIL C* *141*> + <CAILE C* *172*> + <JRST ACL2> + <MOVSI A* TFIX> +ACL2 <SOJGE B* ACL1> + <MOVEI B* 0> + <SUB TP* [<(2) 2>]> + <POPJ P*> + +<TITLE LETTERP> ;"CONVERTS TO LOWERCASE TOO" + <DECLARE ("VALUE" <OR FALSE CHARACTER> CHARACTER)> + <DPUSH TP* <ARG 1>> + <PUSHJ P* LP0> + <JRST FINIS> + + <INTERNAL-ENTRY LP0 1> + <HRRZ B* (TP)> + <MOVSI A* TFALSE> + <CAIGE B* *133*> + <MOVEI B* (B) 32> + <CAIL B* *141*> + <CAIL B* *173*> + <SKIPA B* [0]> + <MOVSI A* TCHARACTER> + <SUB TP* [<(2) 2>]> + <POPJ P*> + +<TITLE DIGITP> + <DECLARE ("VALUE" <OR FALSE CHARACTER> CHARACTER)> + <DPUSH TP* <ARG 1>> + <PUSHJ P* DP0> + <JRST FINIS> + + <INTERNAL-ENTRY DP0 1> + <HRRZ B* (TP)> + <MOVSI A* TFALSE> + <CAIL B* *60*> + <CAIL B* *72*> + <SKIPA B* [0]> + <MOVSI A* TCHARACTER> + <SUB TP* [<(2) 2>]> + <POPJ P*> + +<TITLE UPPER-CASE> + <DECLARE ("VALUE" <PRIMTYPE STRING><PRIMTYPE STRING>)> + <DPUSH TP* <ARG 1>> + <PUSHJ P* UC0> + <JRST FINIS> + + <INTERNAL-ENTRY UC0 1> + <MOVE A* (TP) -1> + <MOVE B* (TP)> + <HRRZI C* (A)> + <MOVE D* B> +UC1 <JUMPLE C* UC2> + <ILDB E* D> + <CAIGE E* *141*> + <SOJA C* UC1> + <MOVEI E* (E) -32> + <CAIGE E* *133*> + <DPB E* D> + <SOJG C* UC1> +UC2 <SUB TP* [<(2) 2>]> + <POPJ P*> + +<TITLE LOWER-CASE> + <DECLARE ("VALUE" <PRIMTYPE STRING><PRIMTYPE STRING>)> + <DPUSH TP* <ARG 1>> + <PUSHJ P* LC0> + <JRST FINIS> + + <INTERNAL-ENTRY LC0 1> + <MOVE A* (TP) -1> + <MOVE B* (TP)> + <HRRZI C* (A)> + <MOVE D* B> +LC1 <JUMPLE C* LC2> + <ILDB E* D> + <CAIGE E* *101*> + <SOJA C* LC1> + <MOVEI E* (E) 32> + <CAIGE E* *173*> + <DPB E* D> + <SOJG C* LC1> +LC2 <SUB TP* [<(2) 2>]> + <POPJ P*> + + <END> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog2/chkadr.udl002 b/src/mprog2/chkadr.udl002 new file mode 100644 index 00000000..aaa0c164 --- /dev/null +++ b/src/mprog2/chkadr.udl002 @@ -0,0 +1,378 @@ +<PACKAGE "CHKADR"> + +<ENTRY CHECK-ADDRESSEES> + +<USE "HOSTS" "LSRTNS" "NSTR" "VCTSRC"> + +<SETG HOSTNUMBER 3073> + +<DEFINE CHECK-ADDRESSEES (L + "OPTIONAL" + (EXPUS '("COMEXP")) + "AUX" (OUTCHAN .OUTCHAN) DATA EXPDB LEX) + #DECL ((DATA) <OR FALSE LIST> (EXPDB L LEX) LIST (EXPUS) <OR FALSE LIST> + (OUTCHAN) CHANNEL) + <COND (<SET DATA <GETDB .EXPUS>> + <SET EXPDB .DATA> + <MAPF <> + <FUNCTION (S) + #DECL ((S) STRING) + <CRLF> + <PRINC .S> + <PRINC " -- "> + <COND (<SET LEX <LA-EXP <LIST .S> .EXPDB>> + <COND (<LENGTH? .LEX 1> + <GOOD-BAD .LEX>) + (ELSE + <MAPR <> + <FUNCTION (L "AUX" (S <1 .L>)) + #DECL ((L) LIST + (S) <OR ATOM STRING>) + <COND (<TYPE? .S ATOM> + <SET S <SPNAME .S>>)> + <COND (<G? <LENGTH .S> + <- <13 .OUTCHAN> + <14 .OUTCHAN>>> + <CRLF> + <PRINC !\ >)> + <PRINC .S> + <OR <LENGTH? .L 1> + <PRINC ", ">>> + .LEX>)>)>> + .L> + T)>> + +<DEFINE GOOD-BAD (L "AUX" E (S <>) (OUTCHAN .OUTCHAN)) + #DECL ((L) LIST (S) <OR STRING FALSE> (E) ANY (OUTCHAN) CHANNEL) + <REPEAT () + <COND (<EMPTY? .L> <RETURN>)> + <SET E <1 .L>> + <COND (<AND <TYPE? .E STRING> <NOT <ATSIGN? .E>>> + <UPPERCASE <SET E <STRING .E>>>)> + <COND (<AND <TYPE? .E STRING> <SET S <KEYGET .E>>>) + (<AND <TYPE? .E ATOM> + <SET E <UPPERCASE <STRING <PNAME .E>>>> + <SET S <KEYGET .E>>>)> + <COND (.S + <COND (<=? .S .E> <PRINC "Okay.">) + (ELSE <PRINC .S>)>) + (<NOT <EMPTY? .S>> + <MAPF <> + <FUNCTION (S) + #DECL ((S) STRING) + <PRINC .S> + <PRINC !\ >> + .S>) + (ELSE <PRINC "Illegal addressee.">)> + <SET L <REST .L>>>> + +\ + +<DEFINE LA-EXP (L DBS) + #DECL ((L DBS VALUE) LIST) + <MAPF <> + <FUNCTION (DD) + #DECL ((DD) VECTOR) + <SET L <L-EXP .L .DD>>> + .DBS> + .L> + +<DEFINE L-EXP (L DB) + #DECL ((VALUE L) <LIST [REST <OR STRING ATOM>]> (DB) VECTOR) + <UNIQUIFY <MAPF ,LIST + <FUNCTION (EE) + #DECL ((EE) <OR ATOM STRING>) + <COND (<TYPE? .EE STRING> + <MAPRET !<S-EXP .EE .DB>>) + (<MAPRET .EE>)>> + .L>>> + +<DEFINE S-EXP (S DB + "OPTIONAL" (DEPTH 0) + "AUX" IV US EV) + #DECL ((S) STRING (DB) <VECTOR [REST STRING LIST]> (EV) LIST + (VALUE) <LIST [REST <OR STRING ATOM>]> (US) <OR FALSE STRING> + (DEPTH) FIX (IV) <OR VECTOR FALSE>) + <COND (<G? .DEPTH 25> <ERROR RECURSION-DEPTH-EXCESSIVE S-EXP>)> + <COND (<AND <==? <EXTRACT-HOST .S> ,HOSTNUMBER> + <N==? .S <SET US <EXTRACT-RCVR .S>>>> + <SET S .US>)> + <COND (<AND <NOT <SET IV <VCTSRC .DB .S>>> <SET US <UC? .S>>> + <SET IV <VCTSRC .DB .US>>)> + <COND + (.IV + <SET EV <2 .IV>> + <UNIQUIFY + <MAPF ,LIST + <FUNCTION (EE) + #DECL ((EE) <OR ATOM STRING>) + <COND (<TYPE? .EE ATOM> <MAPRET .EE>) + (ELSE <MAPRET !<S-EXP .EE .DB <+ .DEPTH 1>>>)>> + .EV>>) + (ELSE <LIST .S>)>> + +<DEFINE GETDB (EX "AUX" (OUTCHAN .OUTCHAN)) + #DECL ((EX) LIST (VALUE) <OR LIST FALSE> (OUTCHAN) CHANNEL) + <MAPF ,LIST + <FUNCTION (EE "AUX" DD) + #DECL ((EE) <OR STRING LIST> (DD) ANY) + <COND (<TYPE? .EE STRING> + <SET DD <DATUM .EE>> + <COND (<TYPE? .DD VECTOR>) + (.DD + <PRINC .EE> + <PRINC " -- Data base is not in proper format."> + <MAPLEAVE <>>) + (ELSE + <PRINC .EE> + <PRINC " -- Data base not found: "> + <PRINC .DD> + <MAPLEAVE <>>)> + <MAPRET .DD>) + (ELSE <MAPRET <GETDB .EE>>)>> + .EX>> + +"UC? -- given string, returns new string of all upper-case, only + if original had lower case somewhere" + +<DEFINE UC? (S "AUX" (LC? <>)) + #DECL ((S) STRING (LC?) <OR 'T FALSE> (VALUE) <OR STRING FALSE>) + <MAPR ,STRING + <FUNCTION (SS "AUX" (C <1 .SS>) (CF <ASCII .C>)) + #DECL ((SS) STRING (C) CHARACTER (CF) FIX) + <COND (<AND <G=? .CF 97> <L=? .CF 122>> + <SET LC? T> + <MAPRET <ASCII <- .CF 32>>>)> + <COND (<AND <LENGTH? .SS 1> <NOT .LC?>> + <MAPLEAVE <>>) + (ELSE <MAPRET .C>)>> + .S>> + +\ + +"utilities for use with user specifications, addressees, etc." + +<SETG ALLOW-TOURISTS <>> ;"T to allow tourists mailboxes (for testing...)" + +<GDECL (ALLOW-TOURISTS) <OR ATOM FALSE>> + +"EXTRACT-HOST -- given string usr@host, returns fix, host number, or + string, if host unknown in tables. for simple usr type key, returns + ,HOSTNUMBER" + +<DEFINE EXTRACT-HOST EH (KEY "AUX" TT DD) + #DECL ((KEY) STRING (VALUE) <OR FIX STRING> (TT) <OR FALSE STRING> + (DD) <OR FALSE FIX STRING> (EH) ACTIVATION) + <COND (<SET TT <ATSIGN? .KEY>> + <SET TT <REST .TT>> + <REPEAT () + <COND (<EMPTY? .TT> <RETURN ,HOSTNUMBER .EH>) + (<MEMQ <1 .TT> " "> <SET TT <REST .TT>>) + (<RETURN>)>> + <COND (<SET DD <HOST .TT>>) + (<AND <SET DD <NUMBER? .TT>> <HOST .DD>> + .DD) + (ELSE .TT)>) + (ELSE ,HOSTNUMBER)>> + +<DEFINE ATSIGN? (KEY "AUX" C (SKIP <>) (BEST <>)) + #DECL ((KEY) STRING (C) CHARACTER (SKIP) <OR ATOM FALSE> + (BEST) <OR FALSE STRING>) + <MAPR <> + <FUNCTION (S) + #DECL ((S) STRING) + <COND (.SKIP <SET SKIP <>>) + (<==? <SET C <1 .S>> !\@> + <SET BEST .S>) + (<==? .C !\> <SET SKIP T>) + (ELSE <SET SKIP <>>)>> + .KEY> + .BEST> + +<DEFINE NUMBER? (S "AUX" (N 0)) + #DECL ((S) STRING (N) <OR FIX FALSE>) + <MAPF <> + <FUNCTION (C) + #DECL ((C) <OR FIX CHARACTER>) + <SET C <ASCII .C>> + <COND (<OR <L? .C <ASCII !\0>> <G? .C <ASCII !\9>>> + <MAPLEAVE <SET N <>>>) + (ELSE <SET N <+ <- .C <ASCII !\0>> <* .N 10>>>)>> + .S> + .N> + +"EXTRACT-RCVR -- given usr key, returns user string (i.e. all but @host)" + +<SETG RCVR-STRING <REST <ISTRING 30 !\ > 30>> + +<GDECL (RCVR-STRING) STRING> + +<DEFINE EXTRACT-RCVR (KEY "AUX" TT L) + #DECL ((VALUE KEY) STRING (TT) <OR FALSE STRING> (L) FIX) + <COND (<SET TT <ATSIGN? .KEY>> + <SET L <- <LENGTH .KEY> <LENGTH .TT>>> + <COND (<G? .L 30> <SUBSTRUC .KEY 0 .L>) + (ELSE + <SUBSTRUC .KEY 0 .L <BACK ,RCVR-STRING .L>>)>) + (ELSE .KEY)>> + +\ + +<DEFINE KEYGET (S + "OPTIONAL" (UPPERCASEL? T) (LNM? T) + "AUX" IV (DD 0) U H (KDB <DATUM "COMKEY">) + LNM NA HS) + #DECL ((U S) STRING (IV) <OR VECTOR FALSE> (DD) <OR FALSE FIX STRING ATOM> + (UPPERCASEL? LNM?) <OR ATOM FALSE> (NA VALUE) <OR FALSE STRING> + (KDB) VECTOR (LNM) <OR FALSE VECTOR> (H) <OR FIX STRING> + (HS) <OR STRING FALSE>) + <COND (<SET HS <ATSIGN? .S>> + <SET HS <REST .HS>> + <SET H <EXTRACT-HOST .S>> + <SET U <EXTRACT-RCVR .S>> + <COND (<EMPTY? .U> + <COND (.UPPERCASEL? #FALSE ("Empty Addressee Name")) + (ELSE #FALSE ("Empty Addressee in Forwarding Address"))>) + (<NOT <TYPE? .H FIX>> + <COND (.UPPERCASEL? #FALSE ("Invalid Host Address")) + (ELSE ,BADHOST)>) + (<==? .H ,HOSTNUMBER> + <COND (.UPPERCASEL? <KEYGET .U>) + (<AND <SIXBIT? .U> + <FILE-EXISTS? ".FILE." "(DIR)" "DSK" .U>> + .U) + (,ALLOW-TOURISTS .U) + (ELSE #FALSE ("Invalid Local Addressee"))>) + (ELSE .S)>) + (<=? .S "UNKNOWN"> #FALSE ("Addressee was UNKNOWN")) + (ELSE ;"CONVERT ALL UPPERCASE CHARS TO UC" + <SET S <UPPERCASE <STRING .S>>> + <COND (<AND <SET IV <VCTSRC .KDB .S>> <SET DD <2 .IV>>> + <COND (<==? .DD 0> ;"TERMINAL MAILBOX" + .S) + (<TYPE? .DD STRING> ;"LINK TO NEXT" + <KEYGET .DD>) + (<TYPE? .DD ATOM> ;"TERMINAL ALSO, NO LINK" + <SPNAME .DD>)>) + (ELSE + <COND (<AND .DD + <OR <FILE? .S> + <STRUC? .S> + <==? .S <MEMBER "BUG-" .S>>>> + .S) + (<SET NA <LSR-EXTRACT <LSR-ENTRY .S> ,$NETA>> + <COND (<EMPTY? .NA> ,BADHOST) + (<SET NA <CHECK-NET-ADDRESS .S .NA>>)>) + (<AND .LNM? <SET LNM <LAST-NAME <UPPERCASE .S>>>> + <COND (<SET NA <CHECK-LAST-NAME .LNM>>) + (ELSE ,NOBOX)>) + (ELSE ,NOBOX)>)>)>> + +<SETG BADHOST #FALSE ("Invalid Host in Forwarding Address")> +<SETG NOBOX #FALSE ("No Mailbox for that name")> + +<GDECL (BADHOST NOBOX) <FALSE STRING>> + +<DEFINE CHECK-NET-ADDRESS (S NA) + #DECL ((S NA) STRING) + <COND (<ATSIGN? .NA>) + (<OR <FILE? .S> <STRUC? .S>>) + (ELSE <SET NA <STRING .S !\@ .NA>>)> + <KEYGET .NA <>>> + +<DEFINE CHECK-LAST-NAME (KDB "AUX" (K .KDB) (UU <>)) + #DECL ((KDB K) <VECTOR [REST STRING]> (UU) <OR FALSE VECTOR>) + <COND (<G? <LENGTH .KDB> 2> + <REPEAT () + <COND (<LENGTH? .K 1> + <COND (.UU <RETURN <KEYGET <1 .UU> T <>>>) + (ELSE + <RETURN <CHTYPE ("Ambiguous Last Name" .KDB) FALSE>>)>) + (<==? <HOST <UPPERCASE <2 .K>>> ,HOSTNUMBER> + <COND (.UU + <RETURN <CHTYPE ("Ambiguous Local Name" .KDB) FALSE>>) + (ELSE <SET UU .K>)>)> + <SET K <REST .K 2>>>) + (<==? <LENGTH .KDB> 2> <KEYGET <1 .KDB> T <>>)>> + +<DEFINE SIXBIT? (S) + #DECL ((S) STRING) + <COND (<AND <LENGTH? .S 6> + <MAPF <> + <FUNCTION (C "AUX" (A <ASCII .C>)) + #DECL ((C) CHARACTER (A) FIX) + <COND (<OR <AND <G? .A *40*> + <L? .A *140*>> + <AND <G=? .A <ASCII !\a>> + <L=? .A <ASCII !\z>>>> + .S) + (ELSE <MAPLEAVE <>>)>> + .S>> + .S)>> + +\ + +"UNIQUIFY -- given list of strings and atoms, returns same + list with duplicates removed." + +<DEFINE UNIQUIFY (L "AUX" (M .L)) + #DECL ((M L VALUE) <LIST [REST <OR STRING ATOM>]>) + <COND (<LENGTH? .M 1> .M) + (ELSE + <REPEAT () + <COND (<LENGTH? .M 1> <RETURN>) + (<MEMBER <1 .M> <REST .M>> + <SET L <SET M <REST .M>>>) + (ELSE <RETURN>)>> + <REPEAT () + <COND (<LENGTH? .M 2> <RETURN .L>) + (<MEMBER <2 .M> <REST .M 2>> + <PUTREST .M <REST .M 2>>) + (ELSE <SET M <REST .M>>)>>)>> + +"FILE? -- given string, returns string of file spec if a file addressee" + +<DEFINE FILE? (SS "AUX" FF) + #DECL ((SS) STRING (FF) <OR STRING FALSE>) + <COND (<AND <SET FF <OR <MEMBER !\[ .SS> <MEMBER !\{ .SS>>> + <MAPR ,STRING + <FUNCTION (S) + #DECL ((S) STRING) + <COND (<OR <=? <1 .S> !\]> <=? <1 .S> !\}>> + <MAPSTOP>) + (<LENGTH? .S 1> <MAPLEAVE #FALSE ()>) + (<G=? <ASCII <1 .S>> 32> + <MAPRET <1 .S>>) + (<AND <==? <1 .S> !\> + <MEMQ <2 .S> ":; []{}">> + <MAPRET <1 .S>>) + (ELSE <MAPRET>)>> + <REST .FF>>>)>> + +<DEFINE STRUC? (SS) + #DECL ((SS) STRING (VALUE) <OR FALSE STRING>) + <COND (<AND <MEMBER !\( .SS> <MEMBER !\) .SS>>)>> + +\ + +<DEFINE DATUM (DNAME "AUX" A R (LAST <>) ATM (OBLIST .OBLIST)) + #DECL ((DNAME) STRING (A) <OR CHANNEL FALSE> (R LAST DTYPE) ANY + (ATM) <OR ATOM FALSE> (OBLIST) <LIST [REST OBLIST]>) + <COND (<AND <SET ATM <LOOKUP .DNAME <1 .OBLIST>>> + <GASSIGNED? .ATM> + ,.ATM>) + (<OR <AND <MEMBER !\; .DNAME> + <SET A <OPEN "READB" .DNAME>>> + <SET A <OPEN "READB" .DNAME ">" "DSK" "COMDAT">>> + <SET LAST + <REPEAT () + <SET R <READ .A '<>>> + <COND (<NOT .R> + <SET ATM <INSERT .DNAME <1 .OBLIST>>> + <SETG .ATM .LAST> + <RETURN .LAST>) + (ELSE <SET LAST .R>)>>> + <AND <NOT <0? <1 .A>>> <CLOSE .A>> + .LAST)>> + +<ENDPACKAGE> diff --git a/src/mprog2/clock.udl002 b/src/mprog2/clock.udl002 new file mode 100644 index 00000000..149378a8 --- /dev/null +++ b/src/mprog2/clock.udl002 @@ -0,0 +1,142 @@ +<PACKAGE "CLOCK"> + +<ENTRY CLOCK-QUEUE CLOCK-ON CLOCK-OFF ALARM ALARM-OFF + CLOCK-HANDLER CLOCK-INTERVAL CINT> + +<USE "ITIME"> + +<NEWTYPE CINT + VECTOR + '<<PRIMTYPE VECTOR> + FIX + FIX + <OR ATOM APPLICABLE>>> + +<SETG CTIME 1> +<SETG CINTERVAL 2> +<SETG CHANDLER 3> +<MANIFEST CTIME CINTERVAL CHANDLER> + +<SETG CLOCK-DEBUG? <>> +<SETG CLOCK-QUEUE ()> +<SETG CLOCK-HANDLER <>> +<SETG CLOCK-INTERVAL 60> +<GDECL (CLOCK-DEBUG?) <OR ATOM FALSE> + (CLOCK-QUEUE) <LIST [REST CINT]> + (CLOCK-HANDLER) <OR HANDLER FALSE> + (CLOCK-INTERVAL) FIX> + +<DEFINE CLOCK-ON ("OPTIONAL" (INIT? <>)) + #DECL ((INIT?) <OR ATOM FALSE>) + <COND (.INIT? <SETG CLOCK-QUEUE ()>)> + <REALTIMER 0> + <REALTIMER ,CLOCK-INTERVAL> + <COND (<NOT ,CLOCK-HANDLER> + <SETG CLOCK-HANDLER <ON "REALT" ,CLOCK-MANAGER 4>>)>> + +<DEFINE CLOCK-OFF ("OPTIONAL" (INIT? <>)) + #DECL ((INIT?) <OR ATOM FALSE>) + <COND (.INIT? <SETG CLOCK-QUEUE ()>)> + <OFF "REALT"> + <REALTIMER 0> + <SETG CLOCK-HANDLER <>>> + +<DEFINE CLOCK-MANAGER ("AUX" (QQ ,CLOCK-QUEUE) (Q .QQ) (I <ITIME>) + NEXT? C H A) + #DECL ((QQ Q) <LIST [REST CINT]> (NEXT?) <OR ATOM FALSE> (C) CINT + (I) FIX (H) <OR ATOM APPLICABLE> (A) ANY) + <REPEAT () + <SET NEXT? T> + <COND (<EMPTY? .Q> <RETURN>) + (<G=? .I <CTIME <SET C <1 .Q>>>> + <SET NEXT? <>> + <COND (<G? <CINTERVAL .C> 0> + <SET NEXT? T> + <PUT .C ,CTIME <+ <CTIME .C> <CINTERVAL .C>>>) + (<==? .QQ .Q> + <SETG CLOCK-QUEUE <SET Q <SET QQ <REST .QQ>>>>) + (ELSE + <PUTREST .QQ <SET Q <REST .Q>>>)> + <COND (<TYPE? <SET H <CHANDLER .C>> ATOM> + <COND (<AND <ASSIGNED? .H> + <TYPE? <SET A ..H> ACTIVATION> + <LEGAL? .A>> + <DISMISS <> .A 0>) + (<NOT ,CLOCK-DEBUG?> + <CRLF ,OUTCHAN> + <PRINC ">>>> Stray alarm?: " ,OUTCHAN> + <PRINC .C ,OUTCHAN> + <PRINC " <<<<" ,OUTCHAN>) + (ELSE + <ERROR ILLEGAL-ACTIVATION!-ERRORS + .C>)>) + (ELSE + <APPLY .H .C>)>)> + <COND (.NEXT? + <SET QQ .Q> + <SET Q <REST .Q>>)>>> + +<DEFINE ALARM (HANDLER START "OPTIONAL" (PERIOD 0.0) "AUX" C) + #DECL ((HANDLER) <OR CINT APPLICABLE ATOM> (START) <OR FIX FLOAT> + (PERIOD) FLOAT (C VALUE) CINT) + <CLOCK-ON> + <COND (<TYPE? .HANDLER CINT> + <SET C .HANDLER>) + (ELSE + <SET C <CHTYPE <VECTOR 0 0 .HANDLER> CINT>>)> + <PUT .C + ,CTIME + <COND (<TYPE? .START FLOAT> + <+ <ITIME> + <FIX <* 262144.0 + </ .START <* 60.0 60.0 24.0>>>>>) + (ELSE .START)>> + <PUT .C + ,CINTERVAL + <FIX <* 262144.0 </ .PERIOD <* 60.0 60.0 24.0>>>>> + <SETG CLOCK-QUEUE (.C !,CLOCK-QUEUE)> + .C> + +<DEFINE ALARM-OFF (C "AUX" (QQ ,CLOCK-QUEUE) (Q .QQ)) + #DECL ((C) CINT (QQ Q) <LIST [REST CINT]>) + <REPEAT () + <COND (<EMPTY? .Q> <RETURN <>>) + (<==? .C <1 .Q>> + <COND (<==? .Q .QQ> + <SETG CLOCK-QUEUE <REST .QQ>>) + (ELSE + <PUTREST .QQ <REST .Q>>)> + <RETURN .C>)> + <SET QQ .Q> + <SET Q <REST .Q>>>> + +<DEFINE CINT-PRINT (C "OPTIONAL" (OUTCHAN .OUTCHAN) "AUX" H) + #DECL ((C) CINT (OUTCHAN) ANY (H) <OR ATOM APPLICABLE>) + <PRINC "#CINT ["> + <PTIME <CTIME .C> .OUTCHAN> + <COND (<NOT <0? <CINTERVAL .C>>> + <PRINC " *"> + <PTIME <CINTERVAL .C> .OUTCHAN>)> + <PRINC !\ > + <COND (<TYPE? <SET H <CHANDLER .C>> ATOM> + <PRINC .H> + <PRINC ":ACTIVATION">) + (<TYPE? .H RSUBR RSUBR-ENTRY> + <PRINC <2 .H>>) + (ELSE <PRINC <TYPE .H>>)> + <PRINC !\]>> + +<DEFINE PTIME (C "OPTIONAL" (OUTCHAN .OUTCHAN) "AUX" (M <2 <LTIME .C>>)) + #DECL ((C) FIX (M) <LIST [3 FIX]> (OUTCHAN) ANY) + <COND (<L? <1 .M> 10> <PRINC !\0>)> + <PRINC <1 .M>> + <PRINC !\:> + <COND (<L? <2 .M> 10> <PRINC !\0>)> + <PRINC <2 .M>> + <PRINC !\:> + <COND (<L? <3 .M> 10> <PRINC !\0>)> + <PRINC <3 .M>>> + +<PRINTTYPE CINT ,CINT-PRINT> + +<ENDPACKAGE> diff --git a/src/mprog2/confir.udl001 b/src/mprog2/confir.udl001 new file mode 100644 index 00000000..d1cb0d6f --- /dev/null +++ b/src/mprog2/confir.udl001 @@ -0,0 +1,13 @@ +<PACKAGE "CONFIRM"> + +<ENTRY CONFIRM> + +<USE "SYMBOLS"> + +<DEFINE CONFIRM (STR) + #DECL ((STR) STRING (VALUE) <OR ATOM FALSE>) + <==? *1000001* + <SYMBOL *1000001* .STR " (Confirm?)" "Please answer Yes or No." + '["Yes" "No"]>>> + +<ENDPACKAGE> \ No newline at end of file diff --git a/src/mprog2/critic.udl030 b/src/mprog2/critic.udl030 new file mode 100644 index 00000000..ae13c6de --- /dev/null +++ b/src/mprog2/critic.udl030 @@ -0,0 +1,1428 @@ + +<PACKAGE "CRITIC"> + +<ENTRY CRITIC CRITIC-NOTES> + +<AND? <OR <LOOKUP "NO-DECL" <ROOT>> <INSERT "NO-DECL" <ROOT>>> + <OR <LOOKUP "NO-VALUE" <ROOT>> <INSERT "NO-VALUE" <ROOT>>>> + +<NEWTYPE FAMILY + VECTOR + '<VECTOR <LIST [REST ATOM LIST LIST VECTOR]> + [3 <LIST [REST <PRIMTYPE ATOM>]>] + <LIST [REST OBLIST]> + <LIST [REST ATOM]> + [2 <LIST [REST <OR STRING FALSE>]>] + ATOM + STRING + <VECTOR [4 DECL] [2 LIST] [2 DECL] LIST> + LIST>> + +<AND? <SETG TREE 1> + <SETG TOP-FCNS 2> + <SETG TOP-GLOBALS 3> + <SETG TOP-LOCALS 4> + <SETG OBJECT-OBLISTS 5> + <SETG ENTRIES 6> + <SETG USED-PACK 7> + <SETG USED-DATUM 8> + <SETG OBJECT-NAME 9> + <SETG OBJECT-TYPE 10> + <SETG GABST 11> + <SETG NEWTYPES 12>> + +<MANIFEST TREE + TOP-FCNS + TOP-GLOBALS + TOP-LOCALS + OBJECT-OBLISTS + ENTRIES + USED-PACK + USED-DATUM + OBJECT-NAME + OBJECT-TYPE + GABST + NEWTYPES> + +<AND? <SETG GSET 1> + <SETG GUSED 2> + <SETG LSET 3> + <SETG LUSED 4> + <SETG EXTF 5> + <SETG NARGS 6> + <SETG SPEC 7> + <SETG RDECL 8> + <SETG NOTES 9> + <SETG DATUMS 10> + <SETG GOFFSET 11> + <SETG ATOML 12>> + +<MANIFEST GSET + GUSED + LSET + LUSED + EXTF + NARGS + SPEC + RDECL + NOTES + DATUMS + GOFFSET + ATOML> + +<AND? <SETG RGSET 0> + <SETG RGUSED 1> + <SETG RLSET 2> + <SETG RLUSED 3> + <SETG REXTF 4> + <SETG RSPEC 6> + <SETG RDATUMS 9>> + +<MANIFEST RGSET + RGUSED + RLSET + RLUSED + REXTF + RSPEC + RDATUMS> + +<AND? <SETG NAME 1> + <SETG FATHERS 2> + <SETG SONS 3> + <SETG ABST 4> + <SETG NODE-SIZE 4>> + +<MANIFEST NAME FATHERS SONS ABST NODE-SIZE> + +<NEWTYPE FATHER VECTOR '<VECTOR [2 ATOM] DECL [2 LIST]>> + +<AND? <SETG CTYPE 2> <SETG FDLST 3> <SETG FPLST 4> <SETG FSPEC 5>> + +<MANIFEST CTYPE FDLST FPLST FSPEC> + +\ + +<SETG KNOWN-ATOMS '![INCHAN OUTCHAN OBLIST!]> + +<SETG KNOWN-DECLS + #DECL ((INCHAN) <SPECIAL CHANNEL> (OUTCHAN) <SPECIAL CHANNEL> + (OBLIST) <SPECIAL <OR OBLIST [LIST <REST OBLIST>]>>)> + +<SETG DECLS-SEEN ()> + +<SETG QUOTING-SUBRS + [,IUVECTOR + 2 + ,ISTRING + 2 + ,ILIST + 2 + ,IFORM + 2 + ,IVECTOR + 2 + ,ITUPLE + 2 + ,IBYTES + 3 + ,ISTORAGE + 2 + ,READ + 2 + ,READCHR + 2 + ,NEXTCHR + 2 + ,GC-READ + 2 + ,GET + 3 + ,GETPROP + 3 + ,GETPL + 3 + ,READB + 3 + ,READSTRING + 4]> + +<AND? <SETG EVAL-OR-APPLY + '![LIST FORM SEGMENT FUNCTION MACRO CLOSURE VECTOR UVECTOR!]> + <SETG APPLICABLE-TYPES '![SUBR FSUBR FUNCTION MACRO RSUBR RSUBR-ENTRY!]> + <SETG USER-APPLICABLE-TYPES <REST ,APPLICABLE-TYPES 2>> + <SETG INT-SUBRS + [,SET ,SETG ,DEFINE ,DEFMAC ,LVAL ,LLOC ,GVAL ,GLOC ,VALUE]> + <SETG CONTROL-STRUCTURES [,DEFINE ,DEFMAC ,PROG ,REPEAT ,BIND ,FUNCTION]> + <SETG FUNNY-FSUBRS ![,COND ,QUOTE!]> + <SETG PRINTING-SUBRS ![,PRINT ,PRINC ,PRIN1 ,TERPRI ,CRLF!]> + <SETG OPEN-SUBRS ![,OPEN ,OPEN-NR ,FLOAD ,SAVE ,RESTORE ,CHANNEL]> + <SETG LVAL-LLOC ![,LVAL ,LLOC!]> + <SETG GVAL-GLOC ![,GVAL ,GLOC!]> + <SETG SETG-DEFINE [,SETG ,DEFINE ,DEFMAC]> + <SETG APPLY-MAPF-MAPR [,APPLY ,MAPF ,MAPR ,STACKFORM]> + <SETG MAPF-MAPR ![,MAPF ,MAPR!]> + <SETG DEFINE-DEFMAC [,DEFINE ,DEFMAC]> + <SETG PACKAGE-RPACKAGE [,PACKAGE ,RPACKAGE]> + <SETG BLOCK-ENDBLOCK [,BLOCK ,ENDBLOCK]> + <SETG USE-USE-DEFER [,USE ,USE-DEFER]>> + +<GDECL (KNOWN-ATOMS + EVAL-OR-APPLY + APPLICABLE-TYPES + USER-APPLICABLE-TYPES) + <UVECTOR [REST ATOM]> + (KNOWN-DECLS) + DECL + (DECLS-SEEN) + LIST + (QUOTING-SUBRS) + <VECTOR [REST SUBR FIX]> + (INT-SUBRS) + <VECTOR [REST APPLICABLE]> + (CONTROL-STRUCTURES SETG-DEFINE APPLY-MAPF-MAPR) + <VECTOR [REST <OR SUBR FSUBR>]> + (FUNNY-FSUBRS) + <UVECTOR [REST FSUBR]> + (PRINTING-SUBRS OPEN-SUBRS LVAL-LLOC GVAL-GLOC MAPF-MAPR) + <UVECTOR [REST SUBR]> + (DEFINE-DEFMAC PACKAGE-RPACKAGE BLOCK-ENDBLOCK USE-USE-DEFER) + <VECTOR [REST APPLICABLE]>> + +\ + +<DEFINE CRITIC (GRPNAME + "OPTIONAL" (C .OUTCHAN) (NOTES? <>) + "AUX" (OUTCHAN .OUTCHAN) GRP CH) + #DECL ((GRPNAME) ATOM (GRP) ANY (NOTES?) ANY + (C) <OR CHANNEL STRING> (CH) <OR CHANNEL FALSE> + (OUTCHAN) <SPECIAL CHANNEL>) + <PROG () + <COND (<TYPE? .C CHANNEL> <SET OUTCHAN .C>) + (ELSE + <COND (<EMPTY? .C> <SET C <SPNAME .GRPNAME>>)> + <COND (<SET CH + <PROG ((NM2 "CRITIC")) + #DECL ((NM2) <SPECIAL STRING>) + <OPEN "PRINT" .C>>> + <SET OUTCHAN .CH>) + (ELSE <RETURN .CH>)>)> + <COND (<AND <ASSIGNED? .GRPNAME> <TYPE? <SET GRP ..GRPNAME> LIST>> + <SETG DECLS-SEEN ()> + <PROG ((F <GROUP-DATA <BUILD-FAMILY .GRP>>) (T <TREE .F>) + (NM? Group) (OFFS 0) (OBLIST <OBJECT-OBLISTS .F>) FIL + (TENEX? <G? ,MUDDLE 100>)) + #DECL ((F) FAMILY + (T) <LIST [REST ATOM LIST LIST VECTOR]> + (OBLIST) <SPECIAL <LIST [REST OBLIST]>> + (OFFS) <SPECIAL FIX> + (NM?) <SPECIAL <OR ATOM FALSE>> + (FIL) <OR FALSE <LIST [4 STRING]>> + (TENEX?) <OR ATOM FALSE>) + <CRLF> + <PRINC "====== CRITIC's Review of Group: "> + <PRINC .GRPNAME> + <COND (<SET FIL <GET .GRPNAME CHANNEL>> + <PRINC " from file \""> + <PRINC <3 .FIL>> + <PRINC !\:> + <COND (.TENEX? <PRINC !\<>)> + <PRINC <4 .FIL>> + <PRINC <COND (.TENEX? !\>) + (!\;)>> + <PRINC <1 .FIL>> + <PRINC <COND (.TENEX? !\.) + (!\ )>> + <PRINC <2 .FIL>> + <PRINC !\">)> + <PRINC " ======"> + <CRLF> + <PRINT-GROUP-UNUSED .F> + <PRINT-NOTES () <GABST .F>> + <REPEAT () + <COND (<EMPTY? .T> + <TERPRI> + <AND <TYPE? .C STRING> <CLOSE .CH>> + <RETURN "DONE">)> + <PRINT-SHORT .T .NOTES?> + <SET T <REST .T ,NODE-SIZE>>>>) + (ELSE + <AND <TYPE? .C STRING> <CLOSE .CH>> + #FALSE ("NOT A GROUP"))>>> + +<DEFINE CRITIC-NOTES (GRPNAME "OPTIONAL" (C .OUTCHAN)) + #DECL ((GRPNAME) ATOM (C) <OR STRING CHANNEL>) + <CRITIC .GRPNAME .C T>> + +\ + +<DEFINE PRINT-SHORT (TR NOTES? + "AUX" (NM <NAME .TR>) (FTH <FATHERS .TR>) (SON <SONS .TR>) + (AB <ABST .TR>) (NM? .NM) (OFFS <GOFFSET .AB>)) + #DECL ((NM) ATOM (TR FTH SON) LIST (AB) VECTOR (NM?) <SPECIAL ANY> + (OFFS) <SPECIAL FIX> (NOTES?) <OR ATOM FALSE>) + <COND (<NOT .NOTES?> + <MAPF <> + ,PRINT-FIELD + '["Called-by" + "Calls" + "SETG" + "GVAL" + "SET" + "LVAL" + "SPECIAL" + "USE" + "USE-DATUM"] + [<FATHER-LIST .FTH> + <EXTF .AB> + <GSET .AB> + <GUSED .AB> + <LSET .AB> + <LUSED .AB> + <SPEC .AB> + () + <DATUMS .AB>]>)> + <OR .NM? <TERPRI>> + <PRINT-NOTES .SON .AB>> + +<DEFINE PRINT-FIELD (FN FB) + #DECL ((FN) STRING (FB) <PRIMTYPE LIST> (OFFS) <SPECIAL FIX>) + <COND (<NOT <EMPTY? .FB>> + <PRINT-NAME> + <TERPRI> + <PRINC " "> + <PRINC .FN> + <PRINC ": "> + <COND (<TYPE? .FB LIST> <PRINT-LIST .FB>) + (<TYPE? .FB DECL> <PRINT-DECL .FB>) + (ELSE <CPRIN1 .FB 4>)>)>> + +<DEFINE PRINT-NOTES (SON AB "AUX" (N <NOTES .AB>)) + #DECL ((NM?) <OR FALSE ATOM STRING> (SON) <LIST [REST FATHER]> + (AB) VECTOR (N) LIST (OFFS) FIX) + <OR <0? .OFFS> <PRINT-UNUSED .SON <ATOML .AB>>> + <COND (<NOT <EMPTY? .N>> + <PRINT-NAME> + <REPEAT (N1) + #DECL ((N1) ANY) + <COND (<EMPTY? .N> <RETURN>)> + <TERPRI> + <PRINC " "> + <COND (<TYPE? <SET N1 <1 .N>> LIST> + <REPEAT () + <COND (<EMPTY? .N1> <RETURN>) + (<TYPE? <1 .N1> STRING> + <PRINC <1 .N1>> + <SET N1 <REST .N1>>) + (<PRINC ": "> <RETURN>)>> + <COND (<TYPE? <1 .N1> LIST> <PRINT-LIST <1 .N1>>) + (ELSE <CPRIN1 <1 .N1> 4>)>) + (<TYPE? .N1 VECTOR> + <PRINC <1 .N1>> + <PRINC ": "> + <MAPF <> + <FUNCTION (X) <CPRIN1 .X 4> <PRINC !\ >> + <REST .N1>>) + (<TYPE? .N1 STRING> <PRINC .N1>) + (ELSE <CPRIN1 .N1 4>)> + <SET N <REST .N>>>)> + <OR .NM? <CRLF>>> + +\ + +<DEFINE PRINT-GROUP-UNUSED (FAM "AUX" (FL <TOP-FCNS .FAM>) (GL <TOP-GLOBALS .FAM>) + (UP <USED-PACK .FAM>) (PL ()) + (UNF ()) (UNG ()) (UNM ()) (E <ENTRIES .FAM>)) + #DECL ((FAM) FAMILY (FL GL UNF UNG UNM E) <LIST [REST <PRIMTYPE ATOM>]> + (UP) <LIST [REST <OR STRING FALSE>]> (PL) <LIST [REST STRING]>) + <MAPF <> + <FUNCTION (P) + #DECL ((P) <OR STRING FALSE>) + <COND (.P <SET PL (.P !.PL)>)>> + .UP> + <COND (<NOT <EMPTY? .PL>> <PRINT-NAME> <CRLF> <PRINC " "> + <PRINC "Packages USEd but not referenced: "> + <PRINT-LIST .PL>)> + <MAPF <> + <FUNCTION (F) + #DECL ((F) <PRIMTYPE ATOM>) + <COND (<AND <TYPE? .F ATOM> <NOT <MEMQ .F .E>>> + <SET UNF (.F !.UNF)>)>> + .FL> + <UNPRINT .UNF "Internal Functions never called" DEFINE> + <MAPF <> + <FUNCTION (G) + #DECL ((G) <PRIMTYPE ATOM>) + <COND (<AND <TYPE? .G ATOM> <NOT <MEMQ .G .E>>> + <COND (<AND <GBOUND? .G> <MANIFEST? .G>> + <SET UNM (.G !.UNM)>) + (ELSE <SET UNG (.G !.UNG)>)>)>> + .GL> + <UNPRINT .UNG "Internal Globals never used" DEFINE> + <UNPRINT .UNM "Internal Manifests never used" DEFINE>> + +<DEFINE PRINT-UNUSED (SON ARGL) + #DECL ((SON) <LIST [REST FATHER]> (ARGL) <LIST [REST ATOM]>) + <MAPF <> + <FUNCTION (DAD + "AUX" (PL <1 <FPLST .DAD>>) + (SL <1 <FSPEC .DAD>>) (TY <CTYPE .DAD>) (UNARG ()) + (UNPAR ()) (UNSPC ()) (NONSPC ())) + #DECL ((PL SL) <LIST [REST <PRIMTYPE ATOM>]> (DAD) FATHER + (UNARG UNPAR UNSPC NONSPC ARGL) <LIST [REST ATOM]> + (TY) ANY) + <PROG () + <COND (<==? .TY ARGS> <RETURN>)> + <MAPF <> + <FUNCTION (P "AUX" S K) + #DECL ((P) <PRIMTYPE ATOM> + (S) <OR <PRIMTYPE ATOM> FALSE>) + <SET S <PARATOM? <CHTYPE .P ATOM> .SL>> + <SET K <MEMQ <CHTYPE .P ATOM> ,KNOWN-ATOMS>> + <COND (<TYPE? .P ATOM> + <COND (.K + <COND (<NOT .S> + <PRINT-NAME> + <TERPRI> + <PRINC " "> + <PRINC <SPNAME .P>> + <PRINC +" is unused or should be SPECIAL.">)>) + (<TYPE? .S DISMISS>) + (<TYPE? .S ATOM> + <SET UNSPC (.P !.UNSPC)>) + (<MEMQ .P .ARGL> + <SET UNARG (.P !.UNARG)>) + (ELSE <SET UNPAR (.P !.UNPAR)>)>) + (<AND <TYPE? .P DISMISS> + <TYPE? .S ATOM> + <NOT .K>> + <SET NONSPC (<CHTYPE .P ATOM> !.NONSPC)>)>> + .PL>> + <UNPRINT .UNARG "Arguments unused" .TY> + <UNPRINT .UNPAR "Unused" .TY> + <UNPRINT .UNSPC "Unused SPECIALs" .TY> + <UNPRINT .NONSPC "SPECIALs never used as SPECIALs" .TY>> + .SON>> + +<DEFINE UNPRINT (L HEAD TYP) + #DECL ((L) <LIST [REST ATOM]> (HEAD) STRING (TYP) ATOM) + <COND (<NOT <EMPTY? .L>> + <PRINT-NAME> + <CRLF> + <PRINC " "> + <PRINC .HEAD> + <COND (<==? .TYP DEFINE>) + (ELSE <PRINC " in "> <PRINC <SPNAME .TYP>>)> + <PRINC ": "> + <PRINT-LIST .L>)>> + +<DEFINE PRINT-NAME () + #DECL ((NM?) <OR FALSE ATOM> (OFFS) FIX) + <COND (.NM? + <TERPRI> + <PRINC .NM?> + <COND (<NOT <0? .OFFS>> + <PRINC " ("> + <PRINC .OFFS> + <PRINC ")">)> + <TERPRI> + <SET NM? <>>)>> +\ + +<DEFINE PRINT-LIST (L) + #DECL ((L) LIST) + <MAPR <> + <FUNCTION (R) + #DECL ((R) LIST) + <COND (<EMPTY? <REST .R>> <CPRIN1 <1 .R> 4> <PRINC ".">) + (ELSE <CPRIN1 <1 .R> 4> <PRINC ", ">)>> + .L>> + +<DEFINE PRINT-DECL (R) + #DECL ((R) <<PRIMTYPE LIST> [REST <LIST ATOM> ANY]>) + <REPEAT () + <COND (<EMPTY? <REST .R 2>> + <CPRIN1 <1 <1 .R>> 4> + <PRINC "."> + <RETURN>) + (ELSE <CPRIN1 <1 <1 .R>> 4> <PRINC ", ">)> + <SET R <REST .R 2>>>> + +<DEFINE CPRIN1 (O N) + #DECL ((O) ANY (N) FIX) + <COND (<NOT <FLATSIZE .O <- <13 .OUTCHAN> <14 .OUTCHAN> 2>>> + <TERPRI> + <INDENT-TO .N>)> + <PRIN1 .O>> + +<DEFINE FATHER-LIST (F) + #DECL ((F) <LIST [REST <VECTOR ATOM LIST DECL>]> + (VALUE) <LIST [REST ATOM]>) + <REPEAT ((L ()) DAD) + #DECL ((L) <LIST [REST ATOM]> (DAD) ATOM) + <COND (<EMPTY? .F> <RETURN .L>) + (<NOT <MEMQ <SET DAD <1 <1 .F>>> .L>> <SET L (.DAD !.L)>)> + <SET F <REST .F>>>> + +\ + +;"START OF OLD ADATA PACKAGE" + +<DEFINE GROUP-DATA (FAMILY) + #DECL ((FAMILY) <SPECIAL FAMILY>) + <REPEAT ((F <TREE .FAMILY>)) + #DECL ((F) <LIST [REST ATOM LIST LIST VECTOR]>) + <COND (<EMPTY? .F> <RETURN>)> + <PASS-ONE .F> + <SET F <REST .F ,NODE-SIZE>>> + <REPEAT ((F <TREE .FAMILY>)) + #DECL ((F) <LIST [REST ATOM LIST LIST VECTOR]>) + <COND (<EMPTY? .F> <RETURN>)> + <PASS-TWO .F> + <SET F <REST .F ,NODE-SIZE>>> + .FAMILY> + +\ + +<DEFINE BUILD-FAMILY (GRP + "AUX" (TREE ()) (STUMP .TREE) (TOP-FCNS ()) + (TOP-GLOBALS ()) (TOP-LOCALS ()) + (OBJECT-OBLISTS (<GET INITIAL OBLIST> <ROOT>)) + (ENTRIES ()) (USED-PACK ()) (USED-DATUM ()) + (OBJECT-NAME T) (OBJECT-TYPE "FILE") + (GABST + [#DECL () + #DECL () + #DECL () + #DECL () + () + () + #DECL () + #DECL () + () + () + 0 + ()]) (NEWTYPES ()) (NOTES ())) + #DECL ((VALUE) FAMILY (GRP) LIST + (TREE) <SPECIAL <LIST [REST ATOM LIST LIST VECTOR]>> + (STUMP) <SPECIAL LIST> + (TOP-FCNS TOP-GLOBALS TOP-LOCALS ENTRIES) <SPECIAL <LIST [REST + ATOM]>> + + (USED-PACK USED-DATUM) <SPECIAL <LIST [REST STRING]>> + (OBJECT-OBLISTS) <SPECIAL <LIST [REST OBLIST]>> + (OBJECT-NAME) <SPECIAL ATOM> (OBJECT-TYPE) <SPECIAL STRING> + (GABST) <VECTOR [10 <PRIMTYPE LIST>]> + (NEWTYPES) <SPECIAL <LIST [REST STRING]>> (NOTES) <SPECIAL LIST>) + <TOP-WALK .GRP> + <REPEAT ((E .ENTRIES) A (N ()) (ALL <ALLTYPES>)) + #DECL ((E N) <LIST [REST ATOM]> (A) ATOM) + <COND (<EMPTY? .E> + <COND (<NOT <EMPTY? .N>> + <SET NOTES + (("ENTRYs not bound, assumed locals" .N) + !.NOTES)>)> + <PUT .GABST ,NOTES .NOTES> + <RETURN>) + (<OR <PARATOM? <SET A <1 .E>> .TOP-LOCALS> + <PARATOM? .A .TOP-GLOBALS> + <PARATOM? .A .TOP-FCNS>>) + (<GASSIGNED? .A> + <COND (<MEMQ ,.A ,USER-APPLICABLE-TYPES> + <SET TOP-FCNS (.A !.TOP-FCNS)>) + (ELSE <SET TOP-GLOBALS (.A !.TOP-GLOBALS)>)>) + (<AND <GBOUND? .A> <GET-DECL <GLOC .A>>> + <SET TOP-GLOBALS (.A !.TOP-GLOBALS)>) + (<ASSIGNED? .A> <SET TOP-LOCALS (.A !.TOP-LOCALS)>) + (<MEMQ .A .ALL>) + (ELSE <SET TOP-LOCALS (.A !.TOP-LOCALS)> <SET N (.A !.N)>)> + <SET E <REST .E>>> + <CHTYPE [.TREE + .TOP-FCNS + .TOP-GLOBALS + .TOP-LOCALS + .OBJECT-OBLISTS + .ENTRIES + .USED-PACK + .USED-DATUM + .OBJECT-NAME + .OBJECT-TYPE + .GABST + .NEWTYPES] + FAMILY>> + +\ + +<DEFINE TOP-WALK (G "AUX" (GOFF 0)) + #DECL ((G) <PRIMTYPE LIST> (TREE STUMP) <SPECIAL LIST> (GOFF) FIX) + <MAPF <> + <FUNCTION (XX "AUX" X X1 BARK) + #DECL ((XX X1) ANY (X) FORM (BARK) <LIST ATOM LIST LIST VECTOR>) + <SET GOFF <+ .GOFF 1>> + <COND + (<AND <TYPE? .XX FORM> <NOT <MONAD? .XX>> <SET X1 <LGVAL <1 .XX>>>> + <SET X .XX> + <COND + (<G=? <LENGTH .X> 1> + <COND (<MEMQ .X1 ,PACKAGE-RPACKAGE> + <SET OBJECT-TYPE "PACKAGE"> + <COND (<SET OBJECT-NAME <LOOKUP <2 .X> <GET PACKAGE OBLIST>>> + <SET OBJECT-OBLISTS ,.OBJECT-NAME>)>) + (<MEMQ .X1 ,USE-USE-DEFER> + <SET USED-PACK (!<REST .X> !.USED-PACK)>) + (<==? .X1 ,USE-DATUM> + <SET USED-DATUM (!<REST .X> !.USED-DATUM)>) + (<==? .X1 ,ENTRY> <SET ENTRIES (!<REST .X> !.ENTRIES)>) + (<==? .X1 ,NEWTYPE> + <COND (<AND <LENGTH? .X 3> + <TYPE? <2 .X> ATOM> + <MEMQ <2 .X> <ALLTYPES>> + <MEMQ <TYPEPRIM <2 .X>> + '![LIST VECTOR UVECTOR TUPLE!]>> + <SET NOTES (("NEWTYPE not DECLed" <2 .X>) !.NOTES)>)> + <SET NEWTYPES (<UNPARSE .X> !.NEWTYPES)>) + (<==? .X1 ,FLOAD> <SET NOTES (("FLOAD in file" .X) !.NOTES)>) + (<AND <MEMQ .X1 ,BLOCK-ENDBLOCK> <=? .OBJECT-TYPE "PACKAGE">> + <SET NOTES + (("BLOCK or ENDBLOCK at top level in PACKAGE." .X) + !.NOTES)>)>)> + <COND (<G=? <LENGTH .X> 3> + <COND (<OR <==? .X1 ,DEFINE> + <AND <==? .X1 ,SETG> + <MEMQ <TYPE <3 .X>> ,USER-APPLICABLE-TYPES>>> + <SET BARK + (<GET <2 .X> VALUE '<2 .X>> + () + () + [#DECL () + #DECL () + #DECL () + #DECL () + () + () + #DECL () + #DECL () + () + () + .GOFF + ()])> + <COND (<EMPTY? .TREE> <SET TREE <SET STUMP .BARK>>) + (ELSE <PUTREST .STUMP <SET STUMP .BARK>>)> + <PASS-ZERO .STUMP> + <SET STUMP <REST .STUMP 3>> + <SET TOP-FCNS (<GET <2 .X> VALUE '<2 .X>> !.TOP-FCNS)>) + (<==? .X1 ,SET> + <SET TOP-LOCALS + (<GET <2 .X> VALUE '<2 .X>> !.TOP-LOCALS)>) + (<==? .X1 ,SETG> + <SET TOP-GLOBALS + (<GET <2 .X> VALUE '<2 .X>> !.TOP-GLOBALS)>)>)> + <COND (<AND <N==? .X1 ,QUOTE> <NOT <MEMQ .X1 ,DEFINE-DEFMAC>>> + <TOP-WALK .X>)>)>> + .G>> + +\ + +<DEFINE PASS-ZERO (FTREE "AUX" (FATHER-NAME <NAME .FTREE>) (ABST <ABST .FTREE>) + (FNC ,.FATHER-NAME)) + #DECL ((FTREE) <LIST [REST ATOM LIST LIST VECTOR]> (FATHER-NAME) ATOM + (ABST) <SPECIAL VECTOR>) + <RSUBR-DECL .FNC>> + +<DEFINE PASS-ONE (FTREE "AUX" (FATHER-NAME <NAME .FTREE>) (ABST <ABST .FTREE>) + (FNC ,.FATHER-NAME) DCL PAR DAD) + #DECL ((FTREE) <SPECIAL <LIST [REST ATOM LIST LIST VECTOR]>> + (FATHER-NAME) <SPECIAL ATOM> (DCL) DECL (PAR) <LIST [2 LIST]> + (DAD) FATHER (FNC) <OR FUNCTION MACRO RSUBR RSUBR-ENTRY> + (ABST) <SPECIAL <VECTOR [4 DECL] [2 LIST] [2 DECL] [2 LIST]>>) + <COND (<TYPE? .FNC MACRO> <SET FNC <1 .FNC>>)> + <COND (<TYPE? .FNC FUNCTION> + <SET PAR <PARAMS .FNC () <SET DCL <DECLS .FNC>> ()>> + <SET DAD <FATHER DEFINE .DCL (<1 .PAR>) (<2 .PAR>)>> + <WALK <COND (<TYPE? <1 .FNC> ATOM> <REST .FNC 2>) + (ELSE <REST .FNC 1>)> + .DAD + T>)> + <PUT .FTREE ,ABST .ABST>> + +<DEFINE PASS-TWO (FTREE + "AUX" (FATHER-NAME <NAME .FTREE>) (FATHERS <FATHERS .FTREE>) + (ABST <ABST .FTREE>) (GA <GABST .FAMILY>)) + #DECL ((FTREE) <LIST [REST ATOM LIST LIST VECTOR]> + (FATHER-NAME) <SPECIAL ATOM> (FATHERS) LIST + (GA) <VECTOR [4 DECL] [2 LIST] [2 DECL] [2 LIST]> + (ABST) <SPECIAL <VECTOR [4 DECL] [2 LIST] [2 DECL] [2 LIST]>> + (FAMILY) FAMILY) + <COND (<TYPE? <LGVAL .FATHER-NAME> FUNCTION MACRO> + <EXT-LOCALS <REST .GA ,RLSET> + <LSET .ABST> + .FATHERS + "External locals set"> + <EXT-LOCALS <REST .GA ,RLUSED> + <LUSED .ABST> + .FATHERS + "External locals used"> + <EXT-GLOBALS <REST .GA ,RGSET> <GSET .ABST>> + <EXT-GLOBALS <REST .GA ,RGUSED> <GUSED .ABST>>)>> + +<DEFINE LGVAL (X "AUX" XA) + #DECL ((X VALUE) ANY (XA) ATOM) + <COND (<NOT <TYPE? .X ATOM>> <>) + (<GASSIGNED? <SET XA .X>> ,.XA) + (<ASSIGNED? .XA> ..XA)>> + +<DEFINE LGTYP (X "AUX" XA) + #DECL ((X VALUE) ANY (XA) ATOM) + <COND (<NOT <TYPE? .X ATOM>> <>) + (<GASSIGNED? <SET XA .X>> <TYPE ,.XA>) + (<ASSIGNED? .XA> <TYPE ..XA>)>> + +\ + +<DEFINE PARAMS (FUNC PLIST DLIST SLIST "AUX" PL (DL #DECL ()) DAD) + #DECL ((FUNC) <PRIMTYPE LIST> (PLIST SLIST) <LIST [REST LIST]> (PL) LIST + (DAD) FATHER (DLIST DL) DECL (VALUE) <LIST [2 LIST]>) + <COND (<TYPE? .FUNC MACRO> <SET FUNC <1 .FUNC>>)> + <PROG ((PP ()) (PS ()) (FF <LGVAL <1 .FUNC>>)) + #DECL ((PP PS) <SPECIAL <LIST [REST <PRIMTYPE ATOM>]>> (FF) ANY) + <SET FUNC + <COND (<TYPE? .FUNC FUNCTION> .FUNC) + (<NOT <TYPE? .FUNC FORM>> <RETURN ()>) + (<OR <==? .FF ,DEFMAC> <==? .FF ,DEFINE>> + <REST .FUNC 2>) + (<MEMQ .FF <REST ,CONTROL-STRUCTURES>> <REST .FUNC 1>) + (ELSE <RETURN ()>)>> + <COND (<EMPTY? .FUNC>) + (<TYPE? <1 .FUNC> ATOM> + <COND (<TYPE? <3 .FUNC> DECL> <SET DL <3 .FUNC>>)> + <ADDPARAM <1 .FUNC> .DL> + <SET FUNC <REST .FUNC>>) + (ELSE <COND (<TYPE? <2 .FUNC> DECL> <SET DL <2 .FUNC>>)>)> + <COND (<EMPTY? .FUNC>) + (<TYPE? <1 .FUNC> LIST> <SET PL <1 .FUNC>>) + (ELSE <SET PL ()>)> + <REPEAT (P) + #DECL ((P) ANY) + <COND (<EMPTY? .PL> <RETURN (.PP .PS)>) + (T <SET P <1 .PL>>)> + <COND (<TYPE? .P STRING>) + (<TYPE? .P ATOM> <ADDPARAM .P .DL>) + (<AND <TYPE? .P LIST> + <OR <TYPE? <1 .P> ATOM> + <AND <TYPE? <1 .P> FORM> + <==? <1 <1 .P>> QUOTE>>>> + <COND (<AND <STRUCTURED? <2 .P>> + <NOT <EMPTY? <2 .P>>>> + <SET DAD + <FATHER ARGS + .DLIST + (.PP !.PLIST) + (.PS !.SLIST)>> + <WALK <REST .P> .DAD T>)> + <ADDPARAM <1 .P> .DL>) + (<AND <TYPE? .P FORM> <==? <1 .P> QUOTE>> + <ADDPARAM <2 .P> .DL>)> + <SET PL <REST .PL>>>>> + +<DEFINE ADDPARAM (P DL) + #DECL ((P) ATOM (PP) <LIST [REST <PRIMTYPE ATOM>]> (DL) DECL) + <COND (<NOT <PARATOM? .P .PP>> + <SET PP (<CHKPARAM .P> !.PP)> + <COND (<FIND-SPECIAL-DECL .P .DL> <SET PS (.P !.PS)>)>) + (ELSE + <ADDNOTE <STRING "ATOM " + <SPNAME .P> + " used twice in parameter list.">>)>> + +<DEFINE FIND-SPECIAL-DECL (A DCL + "AUX" (TOKEN + <COND (<==? <SPECIAL-MODE> UNSPECIAL> SPECIAL) + (ELSE UNSPECIAL)>)) + #DECL ((A TOKEN) ATOM (DCL) DECL) + <MAPR <> + <FUNCTION (DD "AUX" (D <1 .DD>)) + #DECL ((DD) LIST (D) ANY) + <AND <TYPE? .D LIST> + <MEMQ .A .D> + <NOT <LENGTH? .DD 1>> + <TYPE? <SET D <2 .DD>> FORM> + <==? <LENGTH .D> 2> + <==? <1 .D> .TOKEN> + <MAPLEAVE T>>> + .DCL>> + +\ + +<DEFINE CHKPARAM (P) + #DECL ((VALUE P) ATOM (ABST) VECTOR) + <COND (<AND <==? <OBLIST? .P> <ROOT>> + <MEMQ <TYPE <LGVAL .P>> ,APPLICABLE-TYPES>> + <ADDNOTE <STRING "Untasteful re-use of ATOM " + <SPNAME .P> + " in ROOT.">>)> + .P> + +<DEFINE DECLS (PR) + #DECL ((PR) <PRIMTYPE LIST> (VALUE) DECL) + <PROG () + <COND (<AND <NOT <EMPTY? .PR>> <TYPE? <1 .PR> ATOM>> + <SET PR <REST .PR>> + <AGAIN>)> + <COND (<AND <NOT <EMPTY? .PR>> <TYPE? <1 .PR> LIST>> + <SET PR <REST .PR>>)> + <COND (<AND <NOT <EMPTY? .PR>> <TYPE? <1 .PR> DECL>> + <SET PR <1 .PR>>) + (ELSE <SET PR #DECL ()>)>> + <SPEC-LIST .PR> + <DECL-EXPAND .PR>> + +<DEFINE DECL-EXPAND (PR) + #DECL ((VALUE) DECL (PR) <PRIMTYPE LIST>) + <REPEAT ((P .PR) (NEW ()) LOSS) + #DECL ((P NEW) <PRIMTYPE LIST>) + <COND (<EMPTY? .P> <RETURN <CHTYPE .NEW DECL>>) + (<TYPE? <1 .P> LIST> + <COND (<LENGTH? .P 1> + <ADDNOTE ("No DECL in DECL for" <1 .P>)>) + (<SET LOSS <BAD-DECL? <2 .P>>> + <ADDNOTE ["Illegal DECL" <1 .P> <2 .P> .LOSS]>)> + <COND (<==? <LENGTH <1 .P>> 1> + <SET NEW (<1 .P> <2 .P> !.NEW)>) + (<REPEAT ((A <1 .P>) (D <2 .P>)) + #DECL ((A) <LIST [REST ATOM]> (D) ANY) + <COND (<EMPTY? .A> <RETURN>) + (ELSE + <SET NEW ((<1 .A>) .D !.NEW)>)> + <SET A <REST .A>>>)>)> + <SET P <REST .P>>>> + +\ + +<DEFINE BAD-DECL? (DD + "AUX" (ALL <ALLTYPES>) (D1 <>) (REST? <>) OR-DECL? (OPT? <>) + (FUNNY '![ANY LOCATIVE STRUCTURED APPLICABLE!])) + #DECL ((DD) ANY (ALL) <VECTOR [REST ATOM]> (REST? OR-DECL? OPT?) <OR ATOM FALSE> + (FUNNY) <UVECTOR [REST ATOM]>) + <PROG () + <COND (<NOT <TYPE? .DD ATOM FORM SEGMENT>> <RETURN "Not a legal type">)> + <COND (<TYPE? .DD ATOM> + <COND (<NOT <OR <MEMQ .DD .ALL> + <MEMQ .DD .FUNNY> + <SET D1 <GETPROP .DD DECL>>>> + <RETURN <STRING "Type-name not a type: " <SPNAME .DD>>>) + (<AND .D1 <NOT <MEMQ .DD ,DECLS-SEEN>>> + <SETG DECLS-SEEN (.DD !,DECLS-SEEN)> + <SET DD .D1> + <SET D1 <>> + <AGAIN>) + (ELSE <RETURN <>>)>)> + <COND (<LENGTH? .DD 1> <RETURN "FORM/SEGMENT too short">)> + <SET D1 <1 .DD>> + <COND (<TYPE? .DD FORM> + <COND (<==? .D1 QUOTE> <RETURN <>>) + (<MEMQ .D1 '![SPECIAL UNSPECIAL!]> + <COND (<LENGTH? .DD 2> <SET DD <2 .DD>> <SET D1 <>> <AGAIN>) + (<RETURN "SPECIAL/UNSPECIAL with three or more elements">)>) + (<==? .D1 PRIMTYPE> + <COND (<LENGTH? .DD 2> + <COND (<MEMQ <2 .DD> .ALL> <RETURN <>>) + (<RETURN "Bad PRIMTYPE type">)>) + (<RETURN "PRIMTYPE with three or more elements">)>)>)> + <COND (<TYPE? .D1 ATOM> + <COND (<NOT <OR <==? .D1 OR> + <MEMQ .D1 .ALL> + <MEMQ .D1 <REST .FUNNY 2>>>> + <RETURN "Bad type of structured type">) + (<==? .D1 BYTES> + <COND (<LENGTH? .DD 1> <RETURN "BYTES DECL too short">) + (<NOT <LENGTH? .DD 3>> <RETURN "BYTES DECL too long">) + (<OR <NOT <TYPE? <2 .DD> FIX>> + <G? <2 .DD> 36> + <AND <NOT <LENGTH? .DD 2>> <NOT <TYPE? <3 .DD> FIX>>>> + <RETURN "Bad BYTES specification">) + (ELSE <RETURN <>>)>)>)> + <SET OR-DECL? <==? .D1 OR>> + <MAPF <> + <FUNCTION (D "AUX" E) + <COND + (.REST? <MAPLEAVE "REST must terminate DECL">) + (<TYPE? .D VECTOR> + <COND + (.OR-DECL? <MAPLEAVE "VECTOR in OR specification">) + (<LENGTH? .D 1> <RETURN "Nth/REST/OPT too short">) + (<OR <TYPE? <1 .D> FIX> <MEMQ <1 .D> '![REST OPT!]>> + <COND (<AND .OPT? <TYPE? <1 .D> FIX>> + <MAPLEAVE "Only REST or OPT may follow OPT">) + (<==? <1 .D> REST> <SET REST? T>) + (<==? <1 .D> OPT> <SET OPT? T>)> + <COND (<SET E + <MAPF <> + <FUNCTION (X "AUX" Y) + <COND (<SET Y <BAD-DECL? .X>> + <MAPLEAVE .Y>)>> + <REST .D>>> + <MAPLEAVE .E>)>)>) + (<TYPE? .D ATOM FORM SEGMENT> + <COND (.OPT? <MAPLEAVE "Only REST or OPT may follow OPT">) + (<SET E <BAD-DECL? .D>> <MAPLEAVE .E>)>) + (ELSE <MAPLEAVE "Not a legal type">)>> + <REST .DD>>>> + +\ + +<DEFINE SPEC-LIST (DCL + "AUX" (TOKEN + <COND (<==? <SPECIAL-MODE> SPECIAL> UNSPECIAL) + (T SPECIAL)>)) + #DECL ((DCL) DECL (TOKEN) ATOM) + <MAPR <> + <FUNCTION (DR "AUX" (D1 <1 .DR>) D2) + #DECL ((DR D1) <OR <PRIMTYPE LIST> ATOM> (D2) <OR LIST FORM ATOM> + (ABST) <VECTOR [10 <PRIMTYPE LIST>]>) + <COND (<AND <TYPE? .D1 LIST> <G=? <LENGTH .DR> 2>> + <SET D2 <2 .DR>> + <COND (<AND <TYPE? .D2 FORM> + <G=? <LENGTH .D2> 2> + <==? <1 .D2> .TOKEN>> + <MAPF <> + <FUNCTION (D) + #DECL ((D) ATOM) + <ADDLVAL <REST .ABST ,RSPEC> + .D + #DECL () + <2 .D2>>> + .D1>)>)>> + .DCL>> + +<DEFINE EXT-GLOBALS (VAR GG "AUX" (V <1 .VAR>)) + #DECL ((VAR) <VECTOR DECL> (GG) DECL (V) DECL) + <REPEAT ((G .GG) G1) + #DECL ((G) <PRIMTYPE LIST> (G1) <LIST [REST ATOM]> (FAMILY) FAMILY) + <COND (<EMPTY? .G> <RETURN>) + (<TYPE? <1 .G> LIST> + <SET G1 <1 .G>> + <COND (<AND <NOT <MEMQ <1 .G1> <TOP-FCNS .FAMILY>>> + <NOT <MEMQ <1 .G1> <TOP-GLOBALS .FAMILY>>>> + <COND (<HAS-DECL? <1 .G1> .V>) + (ELSE + <PUT .VAR + 1 + <SET V + <CHTYPE (.G1 <2 .G> !.V) DECL>>>)>)>)> + <SET G <REST .G 2>>>> + +<DEFINE HAS-DECL? (ATM DCL "OPTIONAL" ADECL) + #DECL ((VALUE) <OR FALSE ATOM FORM> (ATM) ATOM (DCL) <PRIMTYPE LIST> + (ADECL) <OR ATOM FORM>) + <REPEAT () + <COND (<EMPTY? .DCL> <RETURN <>>) + (<AND <TYPE? <1 .DCL> LIST> + <MEMQ .ATM <1 .DCL>> + <NOT <EMPTY? <REST .DCL>>>> + <COND (<ASSIGNED? ADECL> <PUT .DCL 2 .ADECL>)> + <RETURN <2 .DCL>>)> + <SET DCL <REST .DCL>>>> + +<DEFINE HAS-TYPE-DECL? (ATM DCL "AUX" (HAS? <HAS-DECL? .ATM .DCL>)) + #DECL ((HAS? VALUE) <OR FALSE ATOM FORM> (ATM) ATOM (DCL) DECL) + <COND (<AND .HAS? <N==? .HAS? NO-DECL>> .HAS?)>> + +\ + +<DEFINE ADDGVAL (VAR X + "AUX" (T NO-DECL) TMP (O <OBJECT-OBLISTS .FAMILY>) (VAL <LGVAL .X>)) + #DECL ((VAR) <VECTOR DECL> (X) ATOM (TMP) ANY (FAMILY) FAMILY + (VAL) ANY (T) <OR ATOM FORM> (O) <LIST [REST OBLIST]>) + <USED-ATOM .X <TOP-GLOBALS .FAMILY>> + <COND (<TYPE? .VAL SUBR FSUBR>) + (<MEMQ <OBLIST? .X> .O> + <COND (<NOT <GBOUND? .X>>) + (<SET TMP <GET-DECL <GLOC .X>>> + <COND (<AND <==? .TMP MANIFEST> <GASSIGNED? .X>> + <SET T <FORM MANIFEST <TYPE <SET TMP ,.X>>>> + <COND (<STRUCTURED? .TMP> + <ADDNOTE <STRING <SPNAME .X> + ": MANIFESTed structure">>)>) + (ELSE <SET T .TMP>)>) + (<MEMQ <SET TMP <LGTYP .X>> ,USER-APPLICABLE-TYPES> + <SET T .TMP>) + (<SET TMP <HAS-DECL? .X ,KNOWN-DECLS>> <SET T .TMP>)> + <USED-PACKAGE .X>)> + <COND (<HAS-DECL? .X <1 .VAR>>) + (ELSE <PUT .VAR 1 <CHTYPE ((.X) .T !<1 .VAR>) DECL>>)>> + +<DEFINE USED-PACKAGE (X + "AUX" (O <OBJECT-OBLISTS .FAMILY>) + (P? <N==? <1 .O> <GET INITIAL OBLIST>>) TMP) + #DECL ((X) ATOM (O) <LIST [REST OBLIST]>) + <COND (<AND .P? <N==? <OBLIST? .X> <1 .O>> <N==? <OBLIST? .X> <2 .O>>> + <COND (<SET TMP + <MEMBER <SPNAME <SET X <GET <OBLIST? .X> OBLIST>>> + <USED-PACK .FAMILY>>> + <PUT .TMP 1 <CHTYPE (<1 .TMP>) FALSE>>)>)>> + +<DEFINE ADDLVAL (VAR X DL "OPTIONAL" D) + #DECL ((VAR) <VECTOR DECL> (X) ATOM (DL) DECL (D) <OR ATOM FORM>) + <COND (<NOT <ASSIGNED? D>> + <SET D <COND (<HAS-DECL? .X .DL>) (ELSE NO-DECL)>>)> + <COND (<HAS-DECL? .X <1 .VAR> .D>) + (ELSE <PUT .VAR 1 <CHTYPE ((.X) .D !<1 .VAR>) DECL>>)>> + +<DEFINE ADDFNC (X FV RLEAF + "AUX" (F <MEMQ .X <TREE .FAMILY>>) (XF <REST .ABST ,REXTF>) A XV + (ANUM 0) (SEG? <>) (GXF <REST <GABST .FAMILY> ,REXTF>)) + #DECL ((X) ATOM (FV) FATHER (RLEAF) <PRIMTYPE LIST> (ANUM) FIX + (SEG?) <OR ATOM FALSE> (A) LIST (XV) ANY + (F) <OR FALSE <LIST [REST ATOM LIST LIST VECTOR]>> + (XF GXF) <VECTOR LIST> (FAMILY) FAMILY (ABST) VECTOR) + <COND (<NOT .F> + <COND (<SET XV <LGVAL .X>> <SET A <RSUBR-DECL .XV <>>>) + (ELSE + <SET A <LIST 0 100000000>> + <ADDNOTE <STRING "Calls undefined function " + <SPNAME .X>>>)> + <USED-PACKAGE .X>) + (ELSE <USED-ATOM .X <TOP-FCNS .FAMILY>> <SET A <NARGS <ABST .F>>>)> + <MAPF <> + <FUNCTION (L) + <COND (<TYPE? .L SEGMENT> <SET SEG? T>) + (ELSE <SET ANUM <+ .ANUM 1>>)>> + .RLEAF> + <COND (<N==? <LENGTH .A> 2>) + (<AND <L? .ANUM <1 .A>> <NOT .SEG?>> + <ADDNOTE <STRING "Calls " + <SPNAME .X> + " with too few arguments.">>) + (<G? .ANUM <2 .A>> + <ADDNOTE <STRING "Calls " + <SPNAME .X> + " with too many arguments.">>)> + <COND (<NOT <MEMQ .X <1 .XF>>> <PUT .XF 1 (.X !<1 .XF>)>)> + <COND (<AND .F <NOT <MEMQ .FV <FATHERS .F>>>> + <PUT .F ,FATHERS (.FV !<FATHERS .F>)>)> + <COND (<AND <NOT .F> <NOT <MEMQ .X <1 .GXF>>>> + <PUT .GXF 1 (.X !<1 .GXF>)>)>> + +<DEFINE ADDATUM (DDL D "AUX" (DL <1 .DDL>) (FDL <USED-DATUM .FAMILY>)) + #DECL ((DDL) VECTOR (DL FDL) <LIST [REST STRING]> (D) STRING) + <COND (<MEMBER .D .DL>) (ELSE <PUT .DDL 1 (.D !.DL)>)> + <COND (<MEMBER .D .FDL>) (ELSE <PUT .FAMILY ,USED-DATUM (.D !.FDL)>)>> + +<DEFINE ADDNOTE (N "OPTIONAL" (AB .ABST) (NL <NOTES .AB>)) + #DECL ((N) ANY (ABST AB) VECTOR (NL) LIST) + <COND (<EMPTY? .NL> <SET NL (.N)>) + (ELSE <PUTREST <REST .NL <- <LENGTH .NL> 1>> (.N)>)> + <PUT .AB ,NOTES .NL>> + +\ + +<DEFINE EXT-LOCALS (VAR DD FATHERS SU) + #DECL ((DD) DECL (FATHERS) <LIST [REST FATHER]> (VAR) <VECTOR DECL> + (SU) STRING) + <REPEAT ((D .DD) B? D? A TMP (UNB ()) (UND ()) AUNB + (OO <OBJECT-OBLISTS .FAMILY>)) + #DECL ((D) <<PRIMTYPE LIST> [REST <LIST ATOM> ANY]> (A) ATOM + (B? D?) <SPECIAL ANY> (FAMILY) FAMILY (TMP) ANY + (AUNB) <SPECIAL LIST> (UNB UND) <LIST [REST ATOM]> + (OO) <LIST [REST OBLIST]>) + <COND (<EMPTY? .D> + <COND (<AND <NOT <EMPTY? .UNB>> <NOT <EMPTY? .UND>>> + <ADDNOTE (<STRING .SU " but unbound and unDECLed"> + .UNB)>) + (<NOT <EMPTY? .UNB>> + <ADDNOTE (<STRING .SU " but unbound"> .UNB)>) + (<NOT <EMPTY? .UND>> + <ADDNOTE (<STRING .SU " but unDECLed"> .UND)>)> + <RETURN T>)> + <SET D? <COND (<N==? <2 .D> NO-DECL> <2 .D>)>> + <SET B? <>> + <SET A <1 <1 .D>>> + <COND (<MEMQ .A ,KNOWN-ATOMS> + <SET AUNB ()> + <AND <NOT .B?> <SET B? T>> + <SET D? <2 <HAS-TYPE-DECL? .A ,KNOWN-DECLS>>>) + + (<NOT <EMPTY? .FATHERS>> + <SET AUNB ()> + <EXT-LOCAL1 .A + .FATHERS + () + <TREE .FAMILY> + (.FATHER-NAME) + <PARATOM? .A <TOP-LOCALS .FAMILY>>>)> + <COND (.D? <PUT .D 2 .D?>) + (<SET TMP <HAS-DECL? .A ,KNOWN-DECLS>> + <SET D? .TMP> + <PUT .D 2 .TMP>) + (ELSE <SET UND (.A !.UND)>)> + <COND (<NOT .B?> + <OR .D? <SET D? NO-DECL>> + <COND (<NOT <MEMQ <OBLIST? .A> .OO>> + <ADDLVAL .VAR .A #DECL () .D?>) + (<USED-ATOM .A <TOP-LOCALS .FAMILY>>) + (ELSE <SET UNB (.A !.UNB)>)>) + (<NOT <EMPTY? .AUNB>> + <ADDNOTE (<STRING <SPNAME .A> " unbound in paths"> + .AUNB)>)> + <SET D <REST .D 2>>>> + +\ + +<DEFINE EXT-LOCAL1 (ATM FATHERS UF TR PATH TOPLVAL "AUX" DTMP TA F1) + #DECL ((ATM) ATOM (FATHERS) <LIST [REST FATHER]> (UF) LIST + (TOPLVAL DTMP B? D?) ANY (TA) <PRIMTYPE LIST> (F1) FATHER + (TR) <LIST [REST ATOM LIST LIST VECTOR]> (PATH) <LIST [REST ATOM]>) + <REPEAT ((F .FATHERS)) + #DECL ((F) <LIST [REST FATHER]>) + <COND (<EMPTY? .F> <RETURN>) + (<NOT <MEMQ <SET F1 <1 .F>> .UF>> + <COND (<PARAMETER? .ATM <FPLST .F1>> + <AND <NOT .B?> <SET B? T>> + <AND <SET DTMP <HAS-TYPE-DECL? .ATM <FDLST .F1>>> + <SET D? .DTMP>> + <COND (<AND .D? <SPECIAL-DECL? .D?>> + <SET D? <2 .D?>> + <USED .ATM <FSPEC .F1>>) + (ELSE + <PROG ((S + <STRING "The ATOM " + <SPNAME .ATM> + " used in " + <SPNAME .FATHER-NAME> + " should be special in " + <SPNAME <NAME .F1>> + ".">)) + <ADDNOTE .S> + <COND (<SET TA <MEMQ <NAME .F1> .TR>> + <ADDNOTE .S <ABST .TA>>)>>)> + <SET F <REST .F>> + <AGAIN>) + (<SET TA <MEMQ <NAME .F1> .TR>> + <COND (<NOT <EMPTY? <2 .TA>>> + <EXT-LOCAL1 .ATM + <2 .TA> + (.F1 !.UF) + .TR + (<NAME .F1> !.PATH) + .TOPLVAL>) + (<NOT .TOPLVAL> <SET AUNB ((<NAME .F1> !.PATH) !.AUNB)>)>) + (ELSE + <ADDNOTE <STRING "External FUNCTION " + <SPNAME <NAME .F1>>>>)>)> + <SET F <REST .F>>>> + +<DEFINE SPECIAL-DECL? (D) + #DECL ((D) <OR ATOM FORM> (VALUE) <OR ATOM FORM FALSE>) + <COND (<AND <TYPE? .D FORM> + <G? <LENGTH .D> 1> + <OR <==? <1 .D> SPECIAL> <==? <1 .D> UNSPECIAL>>> + <2 .D>)>> + +\ + +"Make a father and add it to the list of sons of a node" + +<DEFINE FATHER (TY DL PL SP "AUX" (FT .FTREE) (SFT <SONS .FT>) F) + #DECL ((TY) ATOM (PL SP) <LIST [REST LIST]> (DL) DECL + (FT) <LIST ATOM [2 LIST] VECTOR> (SFT) <LIST [REST FATHER]> + (F VALUE) FATHER) + <SET F <CHTYPE <VECTOR .FATHER-NAME .TY .DL .PL .SP> FATHER>> + <COND (<EMPTY? .SFT> <PUT .FT ,SONS (.F)>) + (ELSE <PUTREST <REST .SFT <- <LENGTH .SFT> 1>> (.F)>)> + .F> + +<DEFINE WALK (L "OPTIONAL" FATHER (CHANGE <>) + "AUX" (PLIST <FPLST .FATHER>) (DLIST <FDLST .FATHER>) + (SLIST <FSPEC .FATHER>) + CTLS DAD V (LMAP <>) (Q? <>) (QLEAF <>) (LCNT 0)) + #DECL ((L) <OR <PRIMTYPE LIST> VECTOR UVECTOR> (PLIST SLIST) <LIST [REST LIST]> + (FATHER DAD) FATHER (DLIST) DECL (CTLS) ATOM + (LCNT) FIX (QLEAF) <OR FIX FALSE> (CHANGE Q?) <OR ATOM FALSE>) + <COND (<MEMQ <SET V <LGVAL <1 .L>>> ,MAPF-MAPR> <SET LMAP <3 .L>>) + (<MEMQ .V ,FUNNY-FSUBRS> <SET Q? T>) + (<MEMQ .V ,PRINTING-SUBRS> <USED OUTCHAN .PLIST>) + (<MEMQ .V ,OPEN-SUBRS> + <USED DEV .SLIST> <USED SNM .SLIST> <USED NM1 .SLIST> <USED NM2 .SLIST>) + (<AND <TYPE? .V SUBR> <SET LMAP <MEMQ .V ,QUOTING-SUBRS>>> + <SET QLEAF <2 .LMAP>>)> + <MAPF <> + <FUNCTION (LEAF "AUX" TMP TMP1 FUN (V1LEAF <>)) + #DECL ((LEAF) ANY (TMP1) LIST (TMP) DECL (FUN) <PRIMTYPE LIST>) + <SET LCNT <+ .LCNT 1>> + <COND + (<TYPE? .LEAF ATOM> <USED .LEAF .PLIST>) + (<AND <MEMQ <TYPE .LEAF> ,EVAL-OR-APPLY> <NOT <EMPTY? .LEAF>>> + <AND <TYPE? .LEAF FORM SEGMENT> + <COND (<SET V1LEAF <AND <TYPE? <1 .LEAF> ATOM> <1 .LEAF>>> + <SET V1LEAF <LGVAL .V1LEAF>> + <SET CHANGE + <OR <INT-FORM .LEAF .L .FATHER> + .CHANGE>>) + (<TYPE? <1 .LEAF> FIX> <SET CHANGE T>)>> + <COND (<TYPE? .LEAF MACRO> <SET LEAF <1 .LEAF>>)> + <COND (<OR <TYPE? .LEAF FUNCTION> + <AND .V1LEAF <MEMQ .V1LEAF ,CONTROL-STRUCTURES>>> + <COND (<TYPE? <1 .LEAF> ATOM> <SET FUN <REST .LEAF>>) + (ELSE <SET FUN .LEAF>)> + <COND (<TYPE? <1 .FUN> ATOM> <SET FUN <REST .FUN>>)> + <SET TMP <DECLS .LEAF>> + <SET TMP1 <PARAMS .LEAF .PLIST .DLIST .SLIST>> + <SET CTLS + <COND (<TYPE? .LEAF FUNCTION> FUNCTION) + (ELSE <1 .LEAF>)>> + <COND (<AND <N==? .LMAP .LEAF> + <OR <TYPE? .LEAF FUNCTION> <==? .V1LEAF ,FUNCTION>>> + <SET DAD + <FATHER .CTLS + .TMP + (<1 .TMP1>) + (<2 .TMP1>)>>) + (ELSE + <SET DAD + <FATHER .CTLS + <CHTYPE (!.TMP !.DLIST) DECL> + (<1 .TMP1> !.PLIST) + (<2 .TMP1> !.SLIST)>>)> + <WALK <REST .FUN> .DAD>) + (<OR <==? .LCNT .QLEAF> <N==? .V1LEAF ,QUOTE>> + <SET CHANGE + <OR <WALK <COND (<TYPE? <LGVAL <1 .LEAF>> MACRO> (<EXPAND .LEAF>)) + (ELSE .LEAF)> + .FATHER + .Q?> + .CHANGE>>)>) + (<TYPE? .LEAF VECTOR UVECTOR> + <ADDNOTE ["Possibly should be QUOTEd" .LEAF]>)>> + .L> + <COND (<AND <TYPE? .L LIST VECTOR UVECTOR> <NOT .CHANGE>> + <ADDNOTE ["Possibly should be QUOTEd" .L]>)> + .CHANGE> + +<DEFINE USED (A PL) + #DECL ((PL) <LIST [REST <LIST [REST <PRIMTYPE ATOM>]>]> (A) ATOM) + <MAPF <> + <FUNCTION (P) + #DECL ((P) <LIST [REST <PRIMTYPE ATOM>]>) + <COND (<MAPR <> + <FUNCTION (QQ "AUX" (Q <1 .QQ>)) + #DECL ((QQ) LIST (Q) <PRIMTYPE ATOM>) + <COND (<==? .A .Q> + <PUT .QQ 1 <CHTYPE .Q DISMISS>> + <MAPLEAVE T>) + (<==? <CHTYPE .A DISMISS> .Q> + <MAPLEAVE T>)>> + .P> + <MAPLEAVE T>)>> + .PL>> + +<DEFINE USED-ATOM (A PL) + #DECL ((A) ATOM (PL) <LIST [REST <PRIMTYPE ATOM>]>) + <MAPR <> + <FUNCTION (QQ "AUX" (Q <1 .QQ>)) + #DECL ((QQ) LIST (Q) <PRIMTYPE ATOM>) + <COND (<==? .A .Q> + <PUT .QQ 1 <CHTYPE .Q DISMISS>> + <MAPLEAVE T>) + (<==? <CHTYPE .A DISMISS> .Q> + <MAPLEAVE T>)>> + .PL>> + +<DEFINE PARAMETER? (A PL) + #DECL ((A) ATOM (PL) <LIST [REST <LIST [REST <PRIMTYPE ATOM>]>]>) + <MAPF <> + <FUNCTION (P) + #DECL ((P) <LIST [REST <PRIMTYPE ATOM>]>) + <COND (<PARATOM? .A .P> <MAPLEAVE T>)>> + .PL>> + +<DEFINE PARATOM? (A PL) + #DECL ((A) ATOM (PL) <LIST [REST <PRIMTYPE ATOM>]> + (VALUE) <OR <PRIMTYPE ATOM> FALSE>) + <MAPF <> + <FUNCTION (Q) + #DECL ((Q) <PRIMTYPE ATOM>) + <COND (<OR <==? .A .Q> <==? <CHTYPE .A DISMISS> .Q>> + <MAPLEAVE .Q>)>> + .PL>> + +\ + +<DEFINE INT-FORM (LEAF LIMB FATHER + "AUX" (F <1 .LEAF>) FF LL + (A <COND (<G? <LENGTH .LEAF> 1> <2 .LEAF>)>) + (FTYP <LGTYP .F>) P (CHANGE T)) + #DECL ((LEAF) <<PRIMTYPE LIST> ATOM> (CHANGE) <OR ATOM FALSE> + (LIMB) <OR <PRIMTYPE LIST> VECTOR UVECTOR> (F) ATOM (FATHER) FATHER + (A FF LL FTYP P) ANY) + <COND (<AND <SET FF <LGVAL .F>> <==? .FF ,USE-DATUM>> + <ADDATUM <REST .ABST ,RDATUMS> .A>) + (<OR <NOT .FTYP> <MEMQ .FTYP ,USER-APPLICABLE-TYPES>> + <ADDFNC .F .FATHER <REST .LEAF>>) + (<AND <TYPE? .A ATOM> .FF <MEMQ .FF ,INT-SUBRS>> + <SET P <PARAMETER? .A <FPLST .FATHER>>> + <COND (<AND <==? .FF ,SET> <NOT .P>> + <ADDLVAL <REST .ABST ,RLSET> .A <FDLST .FATHER>>) + (<AND <MEMQ .FF ,LVAL-LLOC> <NOT .P>> + <ADDLVAL <REST .ABST ,RLUSED> .A <FDLST .FATHER>>) + (<MEMQ .FF ,SETG-DEFINE> <ADDGVAL <REST .ABST ,RGSET> .A>) + (<OR <MEMQ .FF ,GVAL-GLOC> <AND <==? .FF ,VALUE> <NOT .P>>> + <COND (<AND <TYPE? .LIMB FORM SEGMENT> + <NOT <LENGTH? .LIMB 1>> + <TYPE? <1 .LIMB> ATOM> + <SET LL <LGVAL <1 .LIMB>>> + <OR <AND <MEMQ .LL ,APPLY-MAPF-MAPR> + <==? <2 .LIMB> .LEAF>> + <AND <MEMQ .LL ,MAPF-MAPR> + <NOT <LENGTH? .LIMB 2>> + <==? <3 .LIMB> .LEAF>>>> + <SET FTYP <LGTYP .A>> + <COND (<NOT <MEMQ .FTYP '![SUBR FSUBR!]>> + <ADDFNC .A + .FATHER + <REST .LIMB + <COND (<==? .LL ,APPLY> 2) + (ELSE 3)>>>)>) + (<MEMQ .FTYP ,USER-APPLICABLE-TYPES> + <ADDFNC .A .FATHER <REST .LEAF>>) + (ELSE + <COND (<AND <GBOUND? .A> <MANIFEST? .A>> + <SET CHANGE <>>)> + <ADDGVAL <REST .ABST ,RGUSED> .A>)>)>) + (<AND <GBOUND? .F> <MANIFEST? .F>> + <ADDGVAL <REST .ABST ,RGUSED> .F>)> + .CHANGE> + +\ + +<DEFINE RSUBR-DECL (A + "OPTIONAL" (N? T) + "AUX" (AB .ABST) TEMP (MACRO? <>) (AL '(0 0))) + #DECL ((A) <OR ATOM <PRIMTYPE LIST> RSUBR RSUBR-ENTRY> + (AL) <LIST FIX FIX> (AB) VECTOR (TEMP) ANY (N? MACRO?) <OR ATOM FALSE>) + <COND (<TYPE? .A MACRO> <SET A <1 .A>> <SET MACRO? T>)> + <COND (<AND .N? <TYPE? .A ATOM>> + <COND (<MEMQ .A <ALLTYPES>> + <SET TEMP <GET .A DECL '.A>> + <AND .TEMP <CHTYPE (.TEMP) DECL>>) + (ELSE #DECL (NOT-A-TYPE))>) + (<MEMQ <TYPE .A> '![RSUBR-ENTRY RSUBR!]> + <COND (<AND <G? <LENGTH .A> 2> <TYPE? <3 .A> DECL>> + <SET AL <RSUBR-NARGS <3 .A>>> + <AND .N? <PUT .AB ,RDECL <3 .A>>> + <AND .N? <PUT .AB ,NARGS .AL>>) + (ELSE + <AND .N? <ADDNOTE "RSUBR has no DECL.">> + <SET AL <LIST 0 100000000>> + <AND .N? + <PUT .AB ,RDECL #DECL ("VALUE" ANY "TUPLE" TUPLE)>> + <AND .N? <PUT .AB ,NARGS .AL>>)>) + (<TYPE? .A FUNCTION> + <COND (<TYPE? <1 .A> ATOM> <SET A <REST .A>>)> + <COND (<TYPE? <2 .A> DECL> + <SET AL <FUNC-DECL <1 .A> <2 .A> .N?>>) + (ELSE + <COND (<AND .N? <NOT .MACRO?> <NOT <EMPTY? <1 .A>>>> + <ADDNOTE "FUNCTION has no DECL.">)> + <SET AL <FUNC-DECL <1 .A> <> .N?>>)>)> + .AL> + +<DEFINE RSUBR-NARGS (DE "AUX" A) + #DECL ((DE) DECL (VALUE) <LIST FIX FIX> (A) <PRIMTYPE LIST>) + <FUNC-DECL <COND (<SET A <MEMBER "VALUE" .DE>> <REST .A 2>) + (ELSE <REST .DE 0>)> + <> + <>>> + +\ + +<DEFINE FUNC-DECL (ARGL DE N? + "AUX" (DD ("VALUE")) (AA ()) (PAR? T) (AMIN 0) (AMAX <>) + (AB .ABST)) + #DECL ((ARGL) LIST (DD) LIST (ABST AB) VECTOR (AMIN) FIX + (AA) <LIST [REST ATOM]> (AMAX) <OR FIX FALSE> (DE) <PRIMTYPE LIST> + (PAR? N?) <OR ATOM FALSE>) + <SET ARGL (VALUE !.ARGL)> + <REPEAT (ARG (PUN ()) ADCL) + #DECL ((ARG) ANY (PUN) <SPECIAL <LIST [REST ATOM]>>) + <COND (<EMPTY? .ARGL> + <AND .N? + <COND (<NOT <EMPTY? .PUN>> + <ADDNOTE ("Parameters not DECLed" .PUN)>)>> + <RETURN>) + (ELSE <SET ARG <1 .ARGL>>)> + <COND + (<=? .ARG "BIND"> + <OR .PAR? <AND .N? <ADDNOTE "\"BIND\" illegally located.">>> + <SET ARGL <REST .ARGL>>) + (<MEMBER .ARG '["NAME" "ACT"]> <SET ARGL <REST .ARGL>>) + (<MEMBER .ARG '["CALL" "ARGS"]> + <OR .PAR? + <AND .N? <ADDNOTE "\"CALL\"/\"ARGS\" illegally located.">>> + <SET ARGL <REST .ARGL>> + <SET AMAX 100000000>) + (<MEMBER .ARG '["OPTIONAL" "OPT"]> + <COND (.PAR? <SET AMAX .AMIN> <AND .N? <APPEND DD "OPTIONAL">>) + (ELSE <ADDNOTE "\"OPTIONAL\" illegally located.">)>) + (<=? .ARG "TUPLE"> + <SET ARGL <REST .ARGL>> + <COND (.PAR? + <SET AMAX 1000000> + <AND .N? <APPEND DD <ARG-DECL <1 .ARGL> .DE TUPLE>>>) + (ELSE <ADDNOTE "\"TUPLE\" illegally located.">)>) + (<MEMBER .ARG '["AUX" "EXTRA"]> <SET PAR? <>>) + (<AND <TYPE? .ARG FORM> + <OR <AND <==? <LENGTH .ARG> 2> <==? <1 .ARG> QUOTE>> + <NOT .N?>>> + <COND (.PAR? + <COND (.AMAX <SET AMAX <+ .AMAX 1>>) + (ELSE <SET AMIN <+ .AMIN 1>>)> + <COND (.N? + <APPEND DD <ARG-DECL <2 .ARG> .DE>> + <SET AA (<2 .ARG> !.AA)>)>) + (ELSE <ADDNOTE (<2 .ARG> "\"AUX\" Illegally QUOTEd")>)>) + (<AND <TYPE? .ARG ATOM> <N==? .ARG VALUE>> + <AND .N? <SET ADCL <ARG-DECL .ARG .DE>>> + <COND (.PAR? + <COND (.N? <APPEND DD .ADCL> <SET AA (.ARG !.AA)>)> + <COND (.AMAX <SET AMAX <+ .AMAX 1>>) + (ELSE <SET AMIN <+ .AMIN 1>>)>)>) + (<TYPE? .ARG LIST> + <AND .N? + <SET ADCL + <ARG-DECL <1 .ARG> + .DE + <COND (<TYPE? <2 .ARG> FORM> ANY) + (ELSE <FORM OR <TYPE <2 .ARG>>>)>>>> + <COND (.PAR? + <COND (.N? <APPEND DD .ADCL> <SET AA (<1 .ARG> !.AA)>)> + <COND (.AMAX <SET AMAX <+ .AMAX 1>>) + (ELSE <SET AMIN <+ .AMIN 1>>)>)>)> + <SET ARGL <REST .ARGL>>> + <COND (.N? + <PUT .AB ,RDECL <CHTYPE .DD DECL>> + <PUT .AB ,NARGS <LIST .AMIN <OR .AMAX .AMIN>>> + <PUT .AB ,ATOML .AA> + <NARGS .AB>) + (ELSE <LIST .AMIN <OR .AMAX .AMIN>>)>> + +<DEFINE ARG-DECL (ARG DEC "OPTIONAL" (DEF ANY)) + #DECL ((ARG) ATOM (DEC) <PRIMTYPE LIST> (VALUE DEF) <OR ATOM FORM> + (ABST) VECTOR) + <COND (.DEC + <COND (<HAS-DECL? .ARG .DEC>) + (<N==? .ARG VALUE> <SET PUN (.ARG !.PUN)> .DEF) + (ELSE .DEF)>) + (ELSE .DEF)>> + +<DEFMAC APPEND ('AA 'STUFF) + <FORM PROG + <LIST <LIST A <FORM LVAL .AA>> (STUFF .STUFF)> + #DECL ((A) LIST) + <FORM SET + .AA + '<COND (<EMPTY? .A> (.STUFF)) + (ELSE + <PUTREST <REST .A <- <LENGTH .A> 1>> (.STUFF)> + .A)>>>> + +<ENDPACKAGE> diff --git a/src/mprog2/ctable.udl007 b/src/mprog2/ctable.udl007 new file mode 100644 index 00000000..facdef94 --- /dev/null +++ b/src/mprog2/ctable.udl007 @@ -0,0 +1,80 @@ + +<PACKAGE "CTABLE"> + +<ENTRY CTABLE> + +<USE "SYMBOLS" "MACROS"> + +<DEFMAC CTABLE ('P1 'P2 'EXPL "ARGS" GOODIES "AUX" (DFL <>) (FH <>)) + #DECL ((P1 P2 EXPL FH) ANY (GOODIES) LIST (DFL) <OR FIX FALSE>) + <REPEAT ((CNT 0) (TCNT 1) (CMD? T) (STABT (T)) (STAB .STABT) (CTABT (T)) + (CTAB .CTABT) (OTABT (T)) (OTAB .OTABT) (PTABT (T)) (PTAB .PTABT)) + #DECL ((STAB STABT CTAB CTABT OTABT OTAB PTABT PTAB) LIST + (CNT TCNT) FIX) + <COND (<EMPTY? .GOODIES> + <COND (<NOT .CMD?> <ERROR UNBALANCED-TABLE>)> + <RETURN <FORM PROG + (TB SVALUE) + #DECL ((SVALUE) ANY (TB) FIX) + <FORM SETG FAIL-HOOK .FH> + <FORM SET SVALUE + <FORM SYMBOL + .DFL + .P1 + .P2 + .EXPL + <FORM + QUOTE + <VECTOR !<REST .STABT>>> + !<REST .PTABT>>> + <FORM COND + ('<TYPE? .SVALUE FIX> + '<SET TB + <CHTYPE <GETBITS .SVALUE + <BITS 18 18>> + FIX>> + '<SET SVALUE + <CHTYPE <ANDB .SVALUE *777777*> + FIX>> + <COND (<1? .TCNT> + <FORM CASE + ',==? + '.SVALUE + !<REST .CTABT>>) + (ELSE + <FORM CASE + ',==? + '.TB + (1 + <FORM CASE + ',==? + '.SVALUE + !<REST .CTABT>>) + !<REST .OTABT>>)>) + '(ELSE .SVALUE)>>>)> + <SET G <1 .GOODIES>> + <COND (.CMD? + <COND (<==? .G *> + <SET DFL + <CHTYPE <PUTBITS <+ .CNT 1> + <BITS 18 18> + .TCNT> + FIX>>) + (<TYPE? .G LIST> + <COND (<==? <1 .G> FAIL-HOOK> + <SET FH <2 .G>>) + (ELSE + <PUTREST .PTAB <SET PTAB (<1 .G>)>> + <PUTREST .OTAB + <SET OTAB + ((<SET TCNT <+ .TCNT 1>> + !<REST .G>))>>)>) + (<TYPE? .G ATOM STRING> + <PUTREST .STAB <SET STAB (.G)>> + <SET CNT <+ .CNT 1>> + <SET CMD? <>>) + (ELSE <ERROR BAD-SYMBOL .G>)>) + (ELSE <PUTREST .CTAB <SET CTAB ((.CNT .G))>> <SET CMD? T>)> + <SET GOODIES <REST .GOODIES>>>> + +<ENDPACKAGE> diff --git a/src/mprog2/datsav.udl007 b/src/mprog2/datsav.udl007 new file mode 100644 index 00000000..e7a1e4c5 --- /dev/null +++ b/src/mprog2/datsav.udl007 @@ -0,0 +1,28 @@ +<PACKAGE "DATA-SAVE"> + +<ENTRY SAVE-DATA RESTORE-DATA OUTPUT-DATA> + +<DEFINE SAVE-DATA (ATM "OPTIONAL" (FIL <PNAME .ATM>) "AUX" (C <OPEN "PRINTB" .FIL>)) + #DECL ((ATM) ATOM (FIL) STRING (C) <OR CHANNEL FALSE>) + <COND (.C + <GC-DUMP <FORM PROG () + <FORM SETG + <FORM GUNASSIGN .ATM> + <FORM QUOTE ,.ATM>> + .ATM> + .C> + <CLOSE .C> + .ATM)>> + +<DEFINE RESTORE-DATA (FIL "AUX" (C <OPEN "READB" .FIL>) R) + #DECL ((FIL) STRING (C) <OR CHANNEL FALSE>) + <AND .C <BLOAT <FILE-LENGTH .C>>> + <COND (.C <SET R <EVAL <GC-READ .C>>> <CLOSE .C> .R)>> + +<DEFINE OUTPUT-DATA (ATM + "OPTIONAL" (FILE <SPNAME .ATM>) + "AUX" (OUTCHAN <OPEN "PRINT" .FILE>)) + #DECL ((ATM) ATOM (FILE) STRING (OUTCHAN) <SPECIAL <OR FALSE CHANNEL>>) + <COND (.OUTCHAN <PPRINT .ATM> <CLOSE .OUTCHAN> .ATM)>> + +<ENDPACKAGE> diff --git a/src/mprog2/dcreat.udl003 b/src/mprog2/dcreat.udl003 new file mode 100644 index 00000000..34d5d580 --- /dev/null +++ b/src/mprog2/dcreat.udl003 @@ -0,0 +1,56 @@ +<PACKAGE "DCREATE"> + +<ENTRY DICT-CREATE NEW-DICTS> + +<USE "MDDATA" "RLSDICT" "MAKE-DUV" "END-TREE" "DATA-SAVE" "SORTX"> + +<DEFINE DICT-CREATE (IN "OPTIONAL" (OUTFILE <>) + "AUX" (D ,.IN) (V '![]) (NL ()) NV) + #DECL ((IN) ATOM (OUTFILE) <OR FALSE STRING> (NL) <LIST [REST STRING FIX]> + (V) UVECTOR (NV) <VECTOR [REST STRING FIX]>) + <COND (<AND <TYPE? .D UVECTOR> <==? <UTYPE .D> VECTOR>> + <MAPF <> + <FUNCTION (V "AUX" W) + #DECL ((V) VECTOR (W) <OR VECTOR STRING>) + <COND (<TYPE? <SET W <1 .V>> VECTOR> + <SET NL (<1 .W> <2 .W> !.NL)> + <PUT .V 1 <1 .W>>)>> + .D>) + (<AND <TYPE? .D VECTOR> <TYPE? <1 .D> STRING VECTOR>> + <SET D + <MAPF ,UVECTOR + <FUNCTION (W "AUX" S) + #DECL ((W) <OR <VECTOR STRING FIX> STRING> + (S) STRING) + <COND (<TYPE? .W VECTOR> + <SET NL (<1 .W> <2 .W> !.NL)> + <SET S <1 .W>>) + (ELSE <SET S .W>)> + <VECTOR .S .V>> + .D>>) + (ELSE <SET D <>>)> + <COND (<AND .D <MAKE-DICTS .D> <MAKE-DUV .D> <MAKE-ENDING-TREE .D>> + <COND (<NOT <EMPTY? .NL>> + <SET NV <VECTOR !.NL>> + <SORT <> .NV 2 0>) + (ELSE <SET NV '[]>)> + <SETG .IN + <VECTOR <1 ,CDICT> + <2 ,CDICT> + ,MDICT + ,ENDING-TREE + <PNAME .IN> + .NV>> + <COND (.OUTFILE <SAVE-DATA .IN .OUTFILE>) + (.IN)>)>> + +<DEFINE NEW-DICTS ("TUPLE" DS) + #DECL ((DS) <TUPLE [REST ATOM]>) + <MAPF <> + <FUNCTION (D) + #DECL ((D) ATOM) + <COND (<DICT-CREATE .D> <NEW-DICTIONARY .D>) + (ELSE <ERROR BAD-DICTIONARY .D>)>> + .DS>> + +<ENDPACKAGE> diff --git a/src/mprog2/ddtsty.udl011 b/src/mprog2/ddtsty.udl011 new file mode 100644 index 00000000..9ca608cc --- /dev/null +++ b/src/mprog2/ddtsty.udl011 @@ -0,0 +1,86 @@ +<PACKAGE "DDT-STYLE"> + +<ENTRY DDT-ADRL DDT-SENDER DDT-ADR-TO MSG-FROM DDT-ADR DDT-LIST + DDT-TEXT-LIST QUICK-DATE> + +<USE "USRUTI" "M.DAC" "M.DOUT"> + +<DEFINE DDT-ADRL (UUL CC "OPTIONAL" (H? T) (L? <>) "AUX" UU U) + #DECL ((UUL) LIST (CC) CHANNEL (U UU) STRING) + <REPEAT () + <COND (<EMPTY? .UUL> <RETURN>)> + <SET UU <1 .UUL>> + <COND (.H? + <SET U <EXTRACT-RCVR .UU>> + <COND (<==? 70 <EXTRACT-HOST .UU>> + <COND (.L? <SET UU <STRING .U "@DM">>) + (<SET UU .U>)>)>)> + <COND (<G? <+ <14 .CC> <LENGTH .UU>> 70> + <TERPRI .CC>)> + <PRINC .UU .CC> + <COND (<NOT <LENGTH? .UUL 1>> <PRINC ", " .CC>)> + <SET UUL <REST .UUL>>>> + +<DEFINE DDT-ADR-TO (UU CC "AUX" (AC <DRD .ADR "ACTION-TO">)) + #DECL ((UU) <OR STRING VECTOR> (CC) CHANNEL) + <COND (<OR <NOT .AC> <NOT <TYPE? .AC LIST>>>) + (<OR <NOT <LENGTH? .AC 1>> + <NOT <MEMBER .ADR .AC>>> + <PRINC " +To: " .CC> + <DDT-ADRL .AC .CC T T>)>> + +<DEFINE DDT-SENDER (UUL CC "AUX" (FV <DRD .ADR "FROM">)) + #DECL ((UUL) <OR LIST STRING> (CC) CHANNEL) + <COND (<TYPE? .UUL STRING> <SET UUL (.UUL)>)> + <COND (<OR <NOT <LENGTH? .UUL 1>> + <NOT <MEMBER .FV .UUL>>> + <PRINC " (Sent by " .CC> + <DDT-ADRL .UUL .CC T T> + <PRINC ")" .CC>)>> + +<DEFINE MSG-FROM (FF CC) + #DECL ((FF) STRING (CC) CHANNEL) + <DDT-ADRL (.FF) .CC T T>> + +<DEFINE DDT-TEXT-LIST (TL CC) + #DECL ((TL) LIST (CC) CHANNEL) + <MAPF <> + <FUNCTION (TT) + <COND (<NOT <0? <14 .CC>>> <CRLF>)> + <PRINC .TT .CC> + <COND (<NOT <0? <14 .CC>>> <CRLF>)> + <PRINC "-----" .CC>> + .TL>> + +<DEFINE DDT-LIST (LL CC) + <DDT-ADRL .LL .CC <> <>>> + +<DEFINE DDT-ADR (UU CH) + #DECL ((UU) <OR STRING VECTOR> (CH) CHANNEL) + <DDT-ADRL (.UU) .CH T T>> + +<DEFINE QUICK-DATE (DT CHAN "AUX" (DAT <1 .DT>)) + #DECL ((DT) <LIST [2 <LIST [3 FIX]>]> (CHAN) CHANNEL + (DAT) <LIST [3 FIX]>) + <PN <2 .DAT> .CHAN> + <PRINC !\/ .CHAN> + <PN <3 .DAT> .CHAN> + <PRINC !\/ .CHAN> + <PN <1 .DAT> .CHAN> + <PRINC !\ .CHAN> + <SET DAT <2 .DT>> + <PN <1 .DAT> .CHAN> + <PRINC !\: .CHAN> + <PN <2 .DAT> .CHAN> + <PRINC !\: .CHAN> + <PN <3 .DAT> .CHAN>> + +<DEFINE PN (N CHAN) + #DECL ((N) FIX (CHAN) CHANNEL) + <AND <L? .N 10> <PRINC !\0 .CHAN>> + <PRINC .N .CHAN>> + +<ENDPACKAGE> + + \ No newline at end of file diff --git a/src/mprog2/dragan.usg019 b/src/mprog2/dragan.usg019 new file mode 100644 index 00000000..e1e81bdb --- /dev/null +++ b/src/mprog2/dragan.usg019 @@ -0,0 +1,118 @@ +<PACKAGE "DRAGAN"> + +<ENTRY ANNOTATE> + +<USE "LSRHIL" "LSRTNS"> + +<DEFINE ANNOTATE ("OPT" (IF "DRAGON") (OF .IF) (VERBOSE? T) "AUX" IC OC) + #DECL ((IF OF) STRING (VERBOSE?) <OR ATOM FALSE> (IC OC) <OR CHANNEL FALSE>) + <COND + (<AND <SET IC <OPEN "READB" .IF>> <SET OC <OPEN "PRINT" .OF>>> + <PUT .OC 13 132> + <PRINC ,KEY .OC> + <PRINC %<ASCII 12> .OC> + <REPEAT (N n NM S s (OUTCHAN .OC) SLASH?) + #DECL ((N n) FIX (NM s) STRING (S) <OR STRING FALSE> + (OUTCHAN) <SPECIAL CHANNEL> (SLASH? <OR 'T FALSE>)) + <COND (<0? <SET N <READSTRING ,BUF .IC + %<STRING !\# <ASCII 32> <ASCII 9> + <ASCII 13> <ASCII 10>> + '<RETURN>>>> + <SET n <READSTRING ,BUF .IC %<STRING <ASCII 13>> '<RETURN T>>> + <PRINTSTRING ,BUF .OC .n> + <READSTRING ,NL .IC> + <CRLF>) + (T + <SET NM <SUBSTRUC ,BUF 0 .N>> + <COND (<MEMQ !\/ .NM> ;"Is there a Lisp atom kludge?" + <SET SLASH? <>> + <SET NM <MAPF ,STRING + <FUNCTION (C) + <COND (<AND <==? .C !\/> <NOT .SLASH?>> + <SET SLASH? T> + <MAPRET>) + (T <SET SLASH? <>> .C)>> + .NM>>)> + <PRINTSTRING ,BUF .OC .N> + <SET n <READSTRING ,BUF .IC %<STRING <ASCII 13>> '<RETURN T>>> + <PRINTSTRING ,BUF .OC .n> + <READSTRING ,NL .IC> + <COND (<SET S <LSR-ENTRY .NM>> + <INDENT-TO 72> + <COND (<EMPTY? <SET s <LSR-EXTRACT .S ,$REL>>> + <PRINC !\ >) + (T <PRINC .s>)> + <PRINC !\ > + <COND (<EMPTY? <SET s <LSR-EXTRACT .S ,$GRP>>> + <PRINC !\ >) + (T <PRINC .s>)> + <PRINC !\ > + <PRINC <FULLNAME .NM>> + <COND (.VERBOSE? <INFO .S>)>)> + <CRLF>)>> + <CLOSE .OC>)>> + +<DEFINE INFO (S "AUX" s (OUTCHAN .OUTCHAN)) + #DECL ((S s) STRING (OUTCHAN) CHANNEL) + <MAPF <> + <FUNCTION (FIELD HDR) + #DECL ((FIELD) ATOM (HDR) STRING) + <COND (<NOT <EMPTY? <SET s <LSR-EXTRACT .S ,.FIELD>>>> + <CRLF> + <PRINC .HDR> + <PRINC .s>)>> + '![$MITA $MITT $HOMA $HOMT + $NETA $PROJ $SUPR $REM + $AUTH $ALTR!] + '[" MIT: " " " " HOME: " " " + " NET: " " hacking " " for " " Remarks: " + " Authorization: " " Entered by: "]>> + +<GDECL (BUF NL KEY) STRING> +<SETG BUF <ISTRING 150>> +<SETG NL " +"> + +<SETG KEY +" KEY: + + Relation to one's group: + A - Administrative + B - Biweekly/Exempt (?) + C - Customer + F - Faculty + G - Graduate Student + N - None + O - Other + P - Publications/Editing + R - Research Associate + S - DSR Staff + U - Undergraduate Student + | + | One's group affiliation: + | A - Artificial Intelligence Lab + | C - Project MAC + | D - Dynamic Modelling + | H - Actor/Planner Group + | I - Information Proc. Services + | L - LOGO Lab + | M - Mathlab Group + | N - Non-Consortium Macsyma User + | O - Programs (e.g. XGP) + | P - Knowledge Based Systems (AutoProg) + | R - Architecture Machine Group + | S - Stanford Visitor + | T - Tourist/Guest + | U - Authorized Macsyma User + | W - MIT-XX Person + | X - eX-user of ITS + | Z - Medical Group + | + - MIT System Wizards + | < - Very Small Data Bases + | $ - Non-MIT (NET) Wizards + | @ - Alias for someone known under another name + | | + V V +"> + +<ENDPACKAGE> diff --git a/src/mprog2/dragit.udl038 b/src/mprog2/dragit.udl038 new file mode 100644 index 00000000..92f09c9f --- /dev/null +++ b/src/mprog2/dragit.udl038 @@ -0,0 +1,527 @@ + +<PACKAGE "DRAGIT"> + +<ENTRY DRAGON SUMMARY DATA SDATA> + +<USE "LINES" "NSTR" "ITIME" "FORMAT"> + +<DEFINE DRAGON ("OPTIONAL" (FILE "DRAGON HOARD") "AUX" C L START TOTALS DATA + GRPS MACHINE TT (TUSE 0)) + #DECL ((FILE) STRING (C) <OR FALSE CHANNEL> (L) <OR FALSE STRING> + (MACHINE START) STRING (TOTALS) STRING (DATA GRPS TT) VECTOR + (TUSE) FIX) + <COND (<SET C <DEFOPEN "READ" .FILE "REPORT" "DRAGON">> + <SET MACHINE <STRING <COMMENT-LINE .C>>> + <SET GRPS <READ-GROUPS .C>> + <COND (<NOT <SET L <FIND-LINE .C "TOTALS">>> + #FALSE ("CANT FIND TOTALS LINE")) + (ELSE + <SET TOTALS <STRING .L>> + <SET START <STRING <FIND-LINE .C "This file">>> + <READ-LINE .C> + <READ-LINE .C> + <READ-LINE .C> + <SETG SDATA + [.MACHINE + .TOTALS + .GRPS + <SET DATA <VECTOR .START !<BUILD-LINES .C>>>]> + <SETG DATA [.MACHINE + <PUT <SET TT <TOTALS-PARSE .TOTALS>> + 1 + "Totals"> + <MAPF ,VECTOR + <FUNCTION (V "AUX" VV N) + #DECL ((V VV) VECTOR (N) FIX) + <SET VV <TOTALS-PARSE <2 .V>>> + <PUT .VV 1 <1 .V>> + <PUT .VV 6 <SET N <3 .V>>> + <SET TUSE <+ .TUSE .N>> + .VV> + .GRPS> + <MAPF ,VECTOR + ,PRSLIN + .DATA>]> + <PUT .TT 6 .TUSE> + T)>)>> + +<SETG GSTR "MIT-DM accounts for "> + +<GDECL (GSTR) STRING> + +<DEFINE READ-GROUPS (C "AUX" GRP L R (GSTR ,GSTR) LL N) + #DECL ((C) CHANNEL (GSTR GRP R) STRING (L LL) <OR FALSE STRING> + (N) <OR FIX FALSE>) + <MAPF ,VECTOR + <FUNCTION () + <SET L <COMMENT-LINE .C "- TOTALS -" "- RANDOMS -">> + <COND (<NOT .L> <MAPRET>)> + <COND (<OR <==? <1 .L> !\ > + <==? <1 .L> !\ > + <MEMBER "- RANDOMS -" .L>> + <COND (<SET LL <MEMBER .GSTR .L>> + <SET L <REST .LL <LENGTH .GSTR>>>) + (ELSE + <MAPR <> + <FUNCTION (S) + #DECL ((S) STRING) + <COND (<G? <ASCII <1 .S>> + <ASCII !\@>> + <SET L .S> + <MAPLEAVE>)>> + .L>)> + <SET R <OR <MEMBER " --" .L> "">> + <SET GRP <SUBSTRUC .L 0 <- <LENGTH .L> <LENGTH .R>>>> + <COND (<AND <SET N <COUNT-LINES .C "SUBTOTALS">> + <SET L <FIND-LINE .C "TOTALS">> + <BEGINS? "TOTALS" .L>> + <MAPRET <VECTOR .GRP <STRING .L> .N>>) + (ELSE <MAPRET>)>) + (ELSE <MAPSTOP>)>>>> + +<DEFINE COUNT-LINES (CHAN "TUPLE" LINES "AUX" L (N 0)) + #DECL ((LINES) <TUPLE [REST STRING]> (CHAN) CHANNEL + (N) FIX (L) <OR STRING FALSE>) + <REPEAT () + <COND (<SET L <READ-LINE .CHAN>> + <COND (<MAPF <> + <FUNCTION (LINE) + #DECL ((LINE) STRING) + <AND <MEMBER .LINE .L> <MAPLEAVE T>>> + .LINES> + <RETURN .N>)> + <COND (<OR <EMPTY? .L> + <==? <1 .L> !\ > + <==? <1 .L> !\ > + <==? <1 .L> !\->>) + (ELSE <SET N <+ .N 1>>)>) + (ELSE <RETURN <>>)>>> + +<DEFINE COMMENT-LINE (CHAN "TUPLE" LINES "AUX" L) + #DECL ((LINES) <TUPLE [REST STRING]> (CHAN) CHANNEL + (L) <OR STRING FALSE>) + <REPEAT () + <COND (<SET L <READ-LINE .CHAN>> + <COND (<EMPTY? .L>) + (<OR <==? <1 .L> !\ > + <==? <1 .L> !\ >> + <RETURN .L>) + (<MAPF <> + <FUNCTION (LINE) + #DECL ((LINE) STRING) + <AND <MEMBER .LINE .L> <MAPLEAVE T>>> + .LINES> + <RETURN .L>)>) + (ELSE <RETURN <>>)>>> + +<DEFINE DEFOPEN (MOD FILE NM2 SNM) + #DECL ((MOD FILE) STRING (NM2 SNM) <SPECIAL STRING>) + <OPEN .MOD .FILE>> + +<SETG STSTR " This file is for period beginning "> + +<SETG UPSTR "UP "> + +<SETG DNSTR "DOWN "> + +<SETG OKSTR "OK "> + +<GDECL (STSTR UPSTR DNSTR OKSTR) STRING> + +<DEFINE BEGINS? (S1 S2) + #DECL ((S1 S2) STRING) + <AND <SUBSTR .S1 .S2 <LENGTH .S1>> + <REST .S2 <LENGTH .S1>>>> + +<PUTPROP TIMELIST DECL '<LIST [2 <LIST [3 FIX]>] STRING>> + +<PUTPROP HMS DECL '<LIST [3 FIX]>> + +<DEFINE PRSLIN (L "AUX" LR (DT ((0 0 0)(0 0 0) "EST")) (DUR (0 0 0)) TAG) + #DECL ((L TAG) STRING (LR) <OR FALSE STRING> (DT) TIMELIST (DUR) HMS) + <COND (<OR <AND <SET LR <MEMBER ,STSTR .L>> + <SET LR <REST .LR <LENGTH ,STSTR>>> + <SET TAG "UP">> + <AND <SET LR <BEGINS? ,UPSTR .L>> <SET TAG "UP">> + <AND <SET LR <BEGINS? ,DNSTR .L>> <SET TAG "DOWN">> + <AND <SET LR <BEGINS? ,OKSTR .L>> <SET TAG "OK">>> + <CRASH-PARSE .LR .DT .DUR> + (.TAG .DT .DUR 0.0))>> + +<DEFINE CRASH-PARSE (STR DT DUR) + #DECL ((STR) STRING (DT) TIMELIST (DUR) HMS) + <TIME-PARSE <DATE-PARSE .STR .DT> .DUR>> + +<DEFINE TOTALS-PARSE (STR + "AUX" (UDUR (0 0 0)) (CDUR (0 0 0)) + (LAST ((0 0 0)(0 0 0) <ZONE <ZONE>>)) TOT) + #DECL ((STR) STRING (UDUR CDUR) HMS (LAST) TIMELIST (TOT) VECTOR) + <COND (<BEGINS? "TOTALS" .STR> + <SET STR <REST .STR 6>> + <SET TOT <VECTOR <> .UDUR .CDUR 0 .LAST 0>> + <DATE-PARSE <NUM-PARSE <TIME-PARSE <TIME-PARSE .STR + .UDUR> + .CDUR> + <REST .TOT 3>> + .LAST> + .TOT)>> + +<DEFINE DATE-PARSE (STR DT + "AUX" (CNT 1) (NUM? <>) (N 0) C D O) + #DECL ((STR) STRING (DT) TIMELIST (D) HMS (CNT N O) FIX + (C) CHARACTER (NUM?) <OR FALSE ATOM>) + <REPEAT () + <COND (<EMPTY? .STR> + <COND (.NUM? + <COND (<L? .CNT 4> <SET D <1 .DT>> <SET O .CNT>) + (ELSE <SET D <2 .DT>> <SET O <- .CNT 3>>)> + <PUT .D .O .N>)> + <PUT .DT 3 <ZONE <ZONE>>> + <RETURN .STR>) + (<MEMQ <SET C <1 .STR>> "0123456789"> + <SET N <+ <* .N 10> <- <ASCII .C> <ASCII !\0>>>> + <SET NUM? T>) + (<AND <NOT .NUM?> <MEMQ .C " ">>) + (.NUM? + <COND (<L? .CNT 4> <SET D <1 .DT>> <SET O .CNT>) + (ELSE <SET D <2 .DT>> <SET O <- .CNT 3>>)> + <PUT .D .O .N> + <SET N 0> + <SET NUM? <>> + <COND (<G? <SET CNT <+ .CNT 1>> 6> + <RETURN .STR>)>)> + <SET STR <REST .STR>>>> + +<DEFINE TIME-PARSE (STR DUR + "AUX" (NUM? <>) (N 0) C (DD (0)) (DL .DD) (DEC? <>)) + #DECL ((STR) STRING (DUR) HMS (N) FIX + (C) CHARACTER (NUM?) <OR FALSE ATOM> (DD DL) <LIST [REST FIX]>) + <REPEAT () + <COND (<EMPTY? .STR> + <AND .NUM? <PUTREST .DL (.N)>> + <RETURN>) + (<MEMQ <SET C <1 .STR>> "0123456789"> + <SET N <+ <* .N 10> <- <ASCII .C> <ASCII !\0>>>> + <SET NUM? T> + <COND (.DEC? <SET DEC? <+ .DEC? 1>>)>) + (<AND <NOT .NUM?> <MEMQ .C " ">>) + (.NUM? + <COND (<==? .C !\.> + <AND .DEC? <ERROR "BAD-FRACTION" .STR>> + <SET DEC? 0>)> + <PUTREST .DL <SET DL (.N)>> + <SET NUM? <>> + <SET N 0> + <COND (<MEMQ .C " "> <RETURN>)>)> + <SET STR <REST .STR>>> + <SET DD <REST .DD>> + <COND (<G? <LENGTH .DD> 3> + <SET N <1 .DD>> + <SET DD <REST .DD>> + <PUT .DD 1 <+ <1 .DD> <* 24 .N>>>)> + <COND (.DEC? + <SET N + <FIX <* 3600.0 + </ <2 .DD> + <EXP <* <LOG 10.0> .DEC?>>>>>> + <PUT .DD 2 </ .N 60>> + <PUTREST <REST .DD> (<MOD .N 60>)>)> + <SUBSTRUC .DD 0 <LENGTH .DD> + <REST .DUR <- <LENGTH .DUR> <LENGTH .DD>>>> + .STR> + +<DEFINE NUM-PARSE (STR VCT + "AUX" (NUM? <>) (N 0) C) + #DECL ((STR) STRING (VCT) VECTOR (N) FIX + (C) CHARACTER (NUM?) <OR FALSE ATOM>) + <REPEAT () + <COND (<EMPTY? .STR> <RETURN>) + (<MEMQ <SET C <1 .STR>> "0123456789"> + <SET N <+ <* .N 10> <- <ASCII .C> <ASCII !\0>>>> + <SET NUM? T>) + (<AND <NOT .NUM?> <MEMQ .C " ">>) + (.NUM? <RETURN>)> + <SET STR <REST .STR>>> + <PUT .VCT 1 .N> + .STR> + +<DEFINE LTOI (L "AUX" (L1 <1 .L>) (L2 <2 .L>)) + #DECL ((L) TIMELIST (L1 L2) HMS) + <BTIME <1 .L1> <2 .L1> <3 .L1> <1 .L2> <2 .L2> <3 .L2>>> + +<DEFINE ITOL (I) + #DECL ((I) FIX) + <LTIME .I>> + +<DEFINE IDUR (L "AUX" (H <1 .L>)) + #DECL ((L) HMS (H) FIX) + <+ <CHTYPE <LSH </ .H 24> 18> FIX> + <CHTYPE <ANDB <BTIME 0 0 0 <MOD .H 24> <2 .L> <3 .L>> *777777*> + FIX>>> + +<DEFINE DAYS-IN-MONTH (L "AUX" (L1 <1 .L>) (YR <1 .L1>) (MO <2 .L1>)) + #DECL ((L) TIMELIST (L1) HMS (YR MO) FIX) + <CHTYPE <LSH <- <FIRST-OF-NEXT .YR .MO> <FIRST-OF-THIS .YR .MO>> + -18> + FIX>> + +<DEFINE FIRST-OF-NEXT (YR MO) + #DECL ((YR MO) FIX) + <BTIME <COND (<==? .MO 12> <+ .YR 1>) + (ELSE .YR)> + <COND (<==? .MO 12> 1) + (ELSE <+ 1 .MO>)> + 1 0 0 0>> + +<DEFINE FIRST-OF-THIS (YR MO) + #DECL ((YR MO) FIX) + <BTIME .YR .MO 1 0 0 0>> + +<SETG HR </ 262144 24>> + +<MANIFEST HR> + +<DEFINE FTIME (I) + #DECL ((I) FIX) + <+ <FLOAT </ .I ,HR>> </ <FLOAT <MOD .I ,HR>> <FLOAT ,HR>>>> + +<DEFINE OLINE (L "AUX" ID (OUTCHAN .OUTCHAN)) + #DECL ((L) <LIST STRING TIMELIST HMS> (ID) FIX + (OUTCHAN) CHANNEL) + <FORMAT T "~5A" <1 .L>> + <ODATE <2 .L>> + <ODUR <3 .L>> + <SET ID <IDUR <3 .L>>> + <COND (<=? <1 .L> "UP"> + <FORMAT T + "~48T~8,3F~8,3F ;~A" + <FTIME .ID> + <4 .L> + <NTH '["Sun""Mon""Tue""Wed""Thu""Fri""Sat"] + <+ 1 + <IDAY <- <LTOI <2 .L>> .ID>>>>>) + (ELSE + <FORMAT T + "~40T~8,3F" + <FTIME .ID>>)> + <CRLF>> + +<DEFINE ODATE (DT "AUX" (D <1 .DT>) (T <2 .DT>)) + #DECL ((DT) TIMELIST (D T) HMS) + <FORMAT T "~2,'0D.~2,'0D.~2,'0D ~2,'0D:~2,'0D:~2,'0D" + <1 .D> <2 .D> <3 .D> + <1 .T> <2 .T> <3 .T>>> + +<DEFINE ODUR (DUR "AUX" (D </ <1 .DUR> 24>) (H <MOD <1 .DUR> 24>)) + #DECL ((DUR) HMS (D H) FIX) + <FORMAT T "~4D!~2,'0D:~2,'0D:~2,'0D" + .D .H <2 .DUR> <3 .DUR>>> + +<DEFINE OTIM (DUR) + #DECL ((DUR) HMS) + <FORMAT T "~4D:~2,'0D:~2,'0D" + <1 .DUR> <2 .DUR> <3 .DUR>>> + +\ + +<DEFINE SUMMARY ("TUPLE" FLAGS + "AUX" DATA TOT GRPS PP (FILE <>) C (OUTCHAN .OUTCHAN) + (RUNS? <>) (GRPS? <>) (TOTS? <>) P START END TIM L CUR + (RUNS 0) (WSUM? <>) CC (UP 0.0000000) (DN 0.0000000) + (DC 0.0000000) D REC SWAPS (WDN 0.0000000) + (WDC 0.0000000) I DAY ODAY DAYS S CPU) + #DECL ((DATA GRPS TOT PP) VECTOR (P) <OR FALSE LIST> + (OUTCHAN) <SPECIAL CHANNEL> + (S) STRING (FILE) <OR STRING FALSE> (FLAGS) TUPLE + (START END CUR RUNS DAY ODAY DAYS I SWAPS) FIX + (RUNS? GRPS? TOTS? WSUM?) <OR ATOM FALSE> (TIM) TIMELIST (L) HMS + (UP DN DC WDN WDC D CC REC CPU) FLOAT (C) <OR CHANNEL FALSE>) + <PROG () + <COND (<OR <EMPTY? .FLAGS> <NOT <TYPE? <1 .FLAGS> VECTOR>>> + <SET DATA ,DATA>) + (ELSE <SET DATA <1 .FLAGS>> <SET FLAGS <REST .FLAGS>>)> + <SET TOT <2 .DATA>> + <SET GRPS <3 .DATA>> + <SET PP <4 .DATA>> + <COND (<AND <NOT <EMPTY? .FLAGS>> <TYPE? <1 .FLAGS> STRING>> + <SET FILE <1 .FLAGS>> + <SET FLAGS <REST .FLAGS>>)> + <MAPR <> + <FUNCTION (F) #DECL ((F) TUPLE) <PUT .F 1 <SPNAME <1 .F>>>> + .FLAGS> + <COND (<OR <EMPTY? .FLAGS> <MEMBER "ALL" .FLAGS>> + <SET RUNS? T> + <SET GRPS? T> + <SET TOTS? T>) + (<OR <MEMBER "R" .FLAGS> <MEMBER "RUNS" .FLAGS>> <SET RUNS? T>) + (<OR <MEMBER "G" .FLAGS> <MEMBER "GRPS" .FLAGS>> <SET GRPS? T>) + (<OR <MEMBER "T" .FLAGS> <MEMBER "TOTS" .FLAGS>> <SET TOTS? T>)> + <COND (.FILE + <COND (<PROG ((NM2 "SUMMRY")) + #DECL ((NM2) <SPECIAL STRING>) + <SET C <OPEN "PRINT" .FILE>>> + <SET OUTCHAN .C>) + (ELSE <RETURN .C>)>)> + <COND + (<OR .RUNS? .TOTS?> + <SET P <1 .PP>> + <SET START <LTOI <SET TIM <2 .P>>>> + <SET CUR .START> + <SET ODAY <IDAY .CUR>> + <SET DAYS <DAYS-IN-MONTH .TIM>> + <SET END <FIRST-OF-NEXT <1 <SET L <1 .TIM>>> <2 .L>>> + <REPEAT () + <COND (<EMPTY? .PP> + <AND .RUNS? <OSUM .WDN .WDC>> + <AND <0? .RUNS> <SET RUNS 1>> + <RETURN>) + (<NOT <SET P <1 .PP>>>) + (ELSE + <SET S <1 .P>> + <SET I <LTOI <2 .P>>> + <SET DAY <IDAY .I>> + <SET D <FTIME <MIN <IDUR <3 .P>> <- .I .CUR>>>> + <COND (<AND <=? .S "UP"> <N==? .I .CUR>> + <SET WSUM? <>> + <SET RUNS <+ .RUNS 1>> + <SET WDN <+ .WDN .D>> + <SET DN <+ .DN .D>> + <PUT .P 4 <SET CC <CONTRACT-DOWN .CUR .I>>> + <SET WDC <+ .WDC .CC>> + <SET DC <+ .DC .CC>>) + (<=? .S "DOWN"> + <SET UP <+ .UP .D>> + <SET WSUM? <L? .DAY .ODAY>>) + (<=? .S "OK"> + <SET WSUM? <>> + <COND (<G? .I .END> <SET I .END>)> + <SET UP <+ .UP <FTIME <- .I .CUR>>>>)> + <COND (.WSUM? + <AND .RUNS? <OSUM .WDN .WDC>> + <SET WDN 0.0000000> + <SET WDC 0.0000000>)> + <SET CUR .I> + <SET ODAY .DAY> + <AND .RUNS? <OLINE .P>>)> + <SET PP <REST .PP>>>)> + <COND (.GRPS? + <PRINC +" +Group-name Users Connect-time %Con Cpu time %Cpu Swaps %Swaps + +"> ;" +ZORK DEVELOPMENT 69 132!23:42:18 98% 24:32:18 98% 9000000 98%" + <MAPF <> + <FUNCTION (G "AUX" N) + #DECL ((G) VECTOR (N) STRING) + <COND (<G? <LENGTH <SET N <1 .G>>> 17> + <PRINTSTRING .N .OUTCHAN 17> + <PRINC "...">) + (ELSE <PRINC .N>)> + <FORMAT T "~20T~3D~24T" <6 .G>> + <ODUR <2 .G>> + <OPCT <IDUR <2 .G>> <IDUR <2 .TOT>>> + <OTIM <3 .G>> + <OPCT <IDUR <3 .G>> <IDUR <3 .TOT>>> + <FORMAT T "~9D" <4 .G>> + <OPCT <4 .G> <4 .TOT>> + <CRLF>> + .GRPS> + <FORMAT T "~%~A~19T~4D~24T" <1 .TOT> <6 .TOT>> + <ODUR <2 .TOT>> + <PRINC " "> + <OTIM <3 .TOT>> + <FORMAT T " ~9D~3%" <4 .TOT>>)> + <COND (.TOTS? + <PRINC +" +Month Log Up Down Down Cpu Up Cpu Runs Mean Swaps Swaps/hour + hrs hrs hrs (day) hrs % % run x1000 up cpu + +"> + ; +" +Jan 000.0 000.0 00.0 00.0 000.0 99% 99% 100 100.0 7000 35000 35000" + <FORMAT T + "~4A~6,1F~7,1F~6,1F~6,1F~7,1F~4D%~4D%~5D~7,1F~6D~7D~7D~%" + <NTH '["Jan" + "Feb" + "Mar" + "Apr" + "May" + "Jun" + "Jul" + "Aug" + "Sep" + "Oct" + "Nov" + "Dec"] + <2 <SET L <1 <ITOL .START>>>>> + <SET REC <+ .UP .DN>> + .UP + .DN + .DC + <SET CPU <FTIME <IDUR <3 .TOT>>>> + <PERCENT </ .UP .REC>> + <PERCENT </ .CPU .UP>> + .RUNS + </ .UP <FLOAT .RUNS>> + <ROUND </ <SET SWAPS <4 .TOT>> 1000.0>> + <ROUND </ .SWAPS .UP>> + <ROUND </ .SWAPS .CPU>>>)> + <COND (.FILE <CLOSE .OUTCHAN>)> + T>> + +<DEFINE PERCENT (N) + #DECL ((N) FLOAT (VALUE) FIX) + <FIX <+ 0.5 <* 100.0 .N>>>> + +<DEFINE ROUND (N) + #DECL ((N) FLOAT (VALUE) FIX) + <FIX <+ 0.5 .N>>> + +<DEFINE OSUM (WDN WDC "AUX" (OUTCHAN .OUTCHAN)) + #DECL ((WDN WDC) FLOAT (OUTCHAN) CHANNEL) + <FORMAT T "~49T----------------~%"> + <FORMAT T "~48T~8,3F~8,3F~2%" .WDN .WDC>> + +"Contract hours are 9-5, weekdays" + +<SETG CSTART <* 3 </ 262144 8>>> + +<SETG CEND <+ ,CSTART </ 262144 3>>> + +<GDECL (CSTART CEND) FIX> + +<DEFINE CONTRACT-DOWN (D U + "AUX" DUR DDAY UDAY DTIME UTIME TCE TD + (CS ,CSTART) (CE ,CEND) (CD 0)) + #DECL ((U D DUR DTIME UTIME DDAY UDAY CS CD CE TCE TD) FIX) + <REPEAT () + <SET DUR <- .U .D>> + <SET DDAY <IDAY .D>> + <SET UDAY <IDAY .U>> + <SET DTIME <CHTYPE <ANDB .D *777777*> FIX>> + <SET UTIME <CHTYPE <ANDB .U *777777*> FIX>> + <COND (<OR <0? .DDAY> <==? .DDAY 6>> + <SET D <CHTYPE <PUTBITS <+ .D 262144> <BITS 18> .CS> FIX>>) + (<L? .DTIME .CS> + <SET D <CHTYPE <PUTBITS .D <BITS 18> .CS> FIX>>) + (<L? .DTIME .CE> + <SET TCE <CHTYPE <PUTBITS .D <BITS 18> .CE> FIX>> + <SET TD <- .TCE .D>> ;"START OF DOWN TO END OF CONTRACT" + <COND (<L=? .DUR .TD> + <SET CD <+ .CD .DUR>> + <RETURN>) + (<SET CD <+ .CD .TD>> + <SET D .TCE>)>) + (ELSE + <SET D <CHTYPE <PUTBITS <+ .D 262144> <BITS 18> .CS> FIX>>)> + <COND (<G? .D .U> <RETURN>)>> + <FTIME .CD>> + +<DEFINE OPCT (X Y) + #DECL ((X Y) FIX) + <FORMAT T "~4D%" <PERCENT </ <FLOAT .X> <FLOAT .Y>>>>> + +<ENDPACKAGE> diff --git a/src/mprog2/dskgrp.udl007 b/src/mprog2/dskgrp.udl007 new file mode 100644 index 00000000..11e3f114 --- /dev/null +++ b/src/mprog2/dskgrp.udl007 @@ -0,0 +1,213 @@ +<PACKAGE "DSKGRP"> + +<ENTRY DISK-REPORT USERS-FILE GROUPS-FILE> + +<USE "DIR" "ITS" "MFD" "NOW" "SORTX" "STR"> + +<SETG USERS-FILE ".BATCH;SPECS 565USR"> + +<SETG GROUPS-FILE ".BATCH;SPECS 565GRP"> + +<SETG BRKLINE "------ ------ ------ ----------------------"> + +<SETG HEDLINE "USER BLOCKS USED Information about user or group"> + +<GDECL (BRKLINE HEDLINE) STRING> + +<PROG () + <SETG UGRP 1> ;"group user is in" + <SETG UDSK 2> ;"user name or diskuse result" + <SETG UEXP 3> ;"explanation of user" + <MANIFEST UGRP UDSK UEXP>> + +<PROG () + <SETG GROUP 1> ;"group name" + <SETG GTOT 2> ;"group totals" + <SETG GEXP 3> ;"explanation of group" + <MANIFEST GROUP GTOT GEXP>> + +<PROG () + <SETG UFD 1> ;"user name" + <SETG QUOTA 2> ;"dir quota" + <SETG BLKS 3> ;"dir blocks" + <SETG ALLOC 4> ;"dir allocation" + <MANIFEST UFD BLKS QUOTA ALLOC>> + +<SETG NEWUSER '["NEW" "NEW" "Unregistered directory"]> + +<SETG NEWGROUP '["NEW" "NEW" "ALL unregistered directories"]> + +<GDECL (NEWUSER NEWGROUP) VECTOR (USERS-FILE GROUPS-FILE) STRING> + +<DEFINE DISK-REPORT ("OPTIONAL" (FILE "TTY:") + (USERS-FILE ,USERS-FILE) (GROUPS-FILE ,GROUPS-FILE) + "AUX" USERS GROUPS NEWLIST) + #DECL ((USERS GROUPS) <VECTOR [REST VECTOR]> (NEWLIST) LIST + (USERS-FILE GROUPS-FILE) STRING) + <SET USERS <READER .USERS-FILE>> + <SET GROUPS <READER .GROUPS-FILE>> + <SET NEWLIST <UFIND <DSKUSE> .USERS>> + <PROG (IC (OC <OPEN "PRINT" .FILE>) OUTCHAN) + #DECL ((IC OC) <OR FALSE CHANNEL> + (OUTCHAN) <SPECIAL CHANNEL>) + <COND (.OC + <SET OUTCHAN .OC> + <USTATS .USERS .GROUPS .NEWLIST> + <CLOSE .OUTCHAN> + <ITS-CALL "MLINK" + '![!] + !<MAPF ,UVECTOR + ,STRTOX + ["DSK" + "PLEASE" + "POST" + ".LPTR." + <7 .OUTCHAN> + <8 .OUTCHAN> + <10 .OUTCHAN>]>> + <COND (<AND <SET IC <OPEN "READ" .FILE>> + <SET OC <OPEN "PRINT" "COMSYS;M >">>> + <SET OUTCHAN .OC> + <MAPF <> + ,PRINT + ("FROM" ".BATCH" + "TO" ("GALLEY@XX") + "ACTION-TO" ("GALLEY@XX") + "SCHEDULE" '("SENDING") + "TEXT")> + <PRINC !\"> + <FILECOPY .IC .OC> + <PRINC !\"> + <CLOSE .OC>)>)>>> + +<DEFINE DSKUSE ("AUX" (BUFF <IUVECTOR 1024 0>) (MFDLIST <GET-MFD>)) + #DECL ((MFDLIST) <VECTOR [REST STRING]> (BUFF) <SPECIAL UVECTOR>) + <MAPF ,UVECTOR + <FUNCTION (USER) + #DECL ((USER) STRING) + <GET-DIRECTORY .USER .BUFF> + [.USER + </ <4 .BUFF> 262144> + <MOD <4 .BUFF> 262144> + <MOD <5 .BUFF> 262144>]> + .MFDLIST>> + +<DEFINE UFIND (USAGE USERS "AUX" U (NEWLIST (T)) (NL .NEWLIST)) + #DECL ((USAGE) UVECTOR (U) <OR FALSE VECTOR> (USERS) VECTOR + (NEWLIST NL) LIST) + <MAPF <> + <FUNCTION (X) + #DECL ((X) <VECTOR STRING FIX FIX FIX>) + <COND (<SET U <MTH <UFD .X> .USERS ,UDSK>> + <PUT .U ,UDSK .X>) + (T <PUTREST .NL <SET NL (.X)>>)>> + .USAGE> + <REST .NEWLIST>> + +<SETG UTOTALS '![0 100 108 0!]> + +<DEFINE USTATS (USERS GROUPS NEWLIST + "AUX" (UTOT ,UTOTALS) (NEW ,NEWUSER) (NEWG ,NEWGROUP) (OUTCHAN .OUTCHAN)) + #DECL ((USERS GROUPS NEW NEWG) VECTOR (NEWLIST) LIST (UTOT) UVECTOR) + <CRLF> + <PRINC "Disk usage by group as of "> + <PRINTR <NOW>> + <CRLF> + <PRINTR ,HEDLINE> + <CRLF> + <PUT .UTOT ,BLKS 0> + <PUT .UTOT ,QUOTA 0> + <PUT .UTOT ,ALLOC 0> + <MAPR <> + <FUNCTION (UU "AUX" (U <1 .UU>) (GRP <UGRP .U>) G) + #DECL ((U) <VECTOR STRING> + (UU) <VECTOR [REST VECTOR]> + (GRP) STRING) + <PLINE .U .UTOT> + <COND (<OR <1? <LENGTH .UU>> + <N=? .GRP <UGRP <2 .UU>>>> + <AND <SET G <MTH .GRP .GROUPS 1>> + <PTOTALS <PUT .G ,GTOT .UTOT>>>)>> + .USERS> + <MAPF <> + <FUNCTION (U) + #DECL ((U) <VECTOR STRING [3 FIX]>) + <PLINE <PUT .NEW ,UDSK .U> .UTOT>> + .NEWLIST> + <PUT .NEWG ,GTOT .UTOT> + <PTOTALS .NEWG>> + +<DEFINE PLINE (U UTOT "AUX" (XX <UDSK .U>) (OUTCHAN .OUTCHAN)) + #DECL ((XX) <OR STRING <VECTOR STRING [3 FIX]>> (U) VECTOR + (UTOT) <UVECTOR [REST FIX]> (OUTCHAN) CHANNEL) + <COND (<TYPE? .XX STRING> <PRINTR .XX " gone " <UEXP .U>>) + (T + <PRINC <UFD .XX>> + <PRINC " "> + <PFIX <BLKS .XX>> + <COND (<0? <QUOTA .XX>> <PRINC " oo">) + (<PFIX </ <* <BLKS .XX> 100> <QUOTA .XX>> 5> <PRINC !\%> + <COND (<NOT <0? <ALLOC .XX>>> <PRINC " A">) + (<PRINC " ">)>)> + <PRINC " "> + <PRINC <UEXP .U>> + <CRLF> + <PUT .UTOT ,BLKS <+ <BLKS .UTOT> <BLKS .XX>>> + <PUT .UTOT ,QUOTA <+ <QUOTA .UTOT> <QUOTA .XX>>> + <PUT .UTOT ,ALLOC <+ <ALLOC .UTOT> <ALLOC .XX>>>)> + .U> + +<DEFINE PTOTALS (GRP + "AUX" (UTOT <GTOT .GRP>) (B <BLKS .UTOT>) (Q <QUOTA .UTOT>) + (OUTCHAN .OUTCHAN)) + #DECL ((GRP) VECTOR (UTOT) <UVECTOR [REST FIX]> (B Q) FIX (OUTCHAN) CHANNEL) + <PRINTR ,BRKLINE> + <PRINC <GROUP .GRP>> + <PRINC " "> + <PFIX .B> + <PFIX </ <* .B 100> .Q> 5> + <PRINC !\%> + <PRINC " "> + <PRINC <GEXP .GRP>> + <CRLF> + <CRLF> + <PUT .UTOT ,BLKS 0> + <PUT .UTOT ,QUOTA 0> + <PUT .UTOT ,ALLOC 0>> + +<DEFINE PFIX (F "OPTIONAL" (C 6) "AUX" W (OUTCHAN .OUTCHAN)) + #DECL ((F C W) FIX (OUTCHAN) CHANNEL) + <COND (<L? .F 10> <SET W 1>) + (<L? .F 100> <SET W 2>) + (<L? .F 1000> <SET W 3>) + (<L? .F 10000> <SET W 4>) + (<L? .F 100000> <SET W 5>) + (<L? .F 1000000> <SET W 6>)> + <COND (<G? .W .C> <PRINTSTRING <REST "********" <- 8 .C>>>) + (<L? .W .C> <PRINTSTRING <REST " " <- 8 <- .C .W>>>>)> + <PRINC .F>> + +<DEFINE READER (FILE "AUX" CH X) + #DECL ((FILE) STRING (CH) <OR CHANNEL FALSE> (X) ANY) + <COND (<SET CH <OPEN "READ" .FILE>> <SET X <READ .CH>> <CLOSE .CH> .X) + (<ERROR !.CH>)>> + +<DEFINE MTH (MEM STR N) + #DECL ((STR) STRUCTURED (N) FIX (MEM) ANY) + <MAPF <> + <FUNCTION (S) + #DECL ((S) VECTOR) + <COND (<=? <NTH .S .N> .MEM> <MAPLEAVE .S>)>> + .STR>> + +<DEFINE PRINTR ("TUPLE" U "AUX" (OUTCHAN .OUTCHAN)) + #DECL ((U) <TUPLE <OR STRING FIX>> (OUTCHAN) CHANNEL) + <MAPF <> + <FUNCTION (X) + #DECL ((X) <OR STRING FIX>) + <PRINC .X> + <PRINC " ">> + .U> + <CRLF>> + +<ENDPACKAGE> diff --git a/src/mprog2/dummy.udl001 b/src/mprog2/dummy.udl001 new file mode 100644 index 00000000..4e51624f --- /dev/null +++ b/src/mprog2/dummy.udl001 @@ -0,0 +1,11 @@ +<PACKAGE "DUMMY"> + +<RENTRY DUMMY\ > + +<BLOCK (<ROOT>)> + +<DEFINE DUMMY\ () T> + +<ENDBLOCK> + +<ENDPACKAGE> diff --git a/src/mprog2/emonit.udl001 b/src/mprog2/emonit.udl001 new file mode 100644 index 00000000..a19fd781 --- /dev/null +++ b/src/mprog2/emonit.udl001 @@ -0,0 +1,55 @@ +<RPACKAGE "EMONIT"> + +<USE-TOTAL "EDIT"> + +<USE "MONITOR"> + +<DEFINE MONEDIT (COMSTR WHERE POS + "AUX" (EDIT-ITEM <IN .WHERE>) ITM (JUNKSTR ,JUNKSTR) TEMP MODE HOLD) + #DECL ((VALUE) ANY (COMSTR JUNKSTR MODE) STRING (WHERE) LOCATIVE + (ITM EDIT-ITEM) <PRIMTYPE LIST> (POS) FIX (TEMP) ANY (HOLD) <OR BREAK LIST>) + <COND + (<OR <AND <=? .COMSTR "RM"> <SET MODE "READ">> + <AND <=? .COMSTR "WM"> <SET MODE "WRITE">> + <AND <=? .COMSTR "RW"> <SET MODE "RW">>> + <SET TEMP <INTREAD .INCHAN>> + <COND (<NOT <TYPE? .TEMP ATOM>> + <ERR "ERROR, BAD ARG TO MONITOR">) + (<==? .POS <LENGTH .EDIT-ITEM>> + <ERR "ERROR, CAN'T PUT MONITOR AT RIGHT EDGE">) + (T + <COND (<AND <TYPE? <SET ITM <NTH .EDIT-ITEM <+ .POS 1>>> BREAK> + <==? <1 .ITM> EMONITOR> + <==? <4 .ITM> .TEMP>> + <SET HOLD .ITM> + <PUT .HOLD 3 .MODE> + <PUTREST <REST .HOLD 3> ()>) + (T + <PUT .EDIT-ITEM + <+ .POS 1> + <SET HOLD + <CHTYPE (EMONITOR .ITM .MODE .TEMP) BREAK>>> + <PUTPROP .TOP-ITEM + BREAKS + <LIST <AT .EDIT-ITEM <+ 1 .POS>> + !<GETPROP .TOP-ITEM BREAKS>>>)> + <SET HOLD <REST .HOLD 3>> + <REPEAT () + <READSTRING .JUNKSTR .INCHAN ,GOOD-CHRS> + <COND (<==? <NEXTCHR .INCHAN> !\> <RETURN>)> + <PUTREST .HOLD <SET HOLD (<READ .INCHAN>)>>>)>)>> + +<DEFINE EMONITOR ('ITM 'MODE 'ATM "ARGS" FROBS) + #DECL ((ITM) ANY (MODE) STRING (ATM) ATOM (FROBS) LIST) + <EVAL <FORM MONITOR .MODE .ATM LVAL !.FROBS>> + <EVAL .ITM>> + +<SETG MONEDIT-TABLE + <MAPF ,VECTOR + <FUNCTION (STR) <MAPRET .STR ,MONEDIT>> + '["RM" "WM" "RW"]>> + +<COND (<GASSIGNED? EDIT-TABLE> <SETG EDIT-TABLE [!,EDIT-TABLE !,MONEDIT-TABLE]>) + (<SETG EDIT-TABLE ,MONEDIT-TABLE>)> + +<ENDPACKAGE> diff --git a/src/mprog2/erorc2.uerb16 b/src/mprog2/erorc2.uerb16 new file mode 100644 index 00000000..00728c22 --- /dev/null +++ b/src/mprog2/erorc2.uerb16 @@ -0,0 +1,232 @@ +<PACKAGE "CORRECT-ERROR"> +<ENTRY CORRECT-ERROR DDIV DMOD> + +<TITLE CORRECT-ERROR> + <DECLARE ("VALUE" <UVECTOR [REST UVECTOR]> + <UVECTOR [REST FIX]> ;"THE HAVERFORM" + <UVECTOR [REST UVECTOR]> ;"THE DATA UVECTOR" + <UVECTOR [REST UVECTOR]> ;"PUTS ANS IN THIS UV" + <UVECTOR [REST FIX]> ;AND-THIS + <UVECTOR [REST FIX]>)> ;AND-THIS + <DPUSH TP* <ARG 1>> + <DPUSH TP* <ARG 2>> + <DPUSH TP* <ARG 3>> + <DPUSH TP* <ARG 4>> + <DPUSH TP* <ARG 5>> + <PUSHJ P* EC0> + <JRST FINIS> + + <INTERNAL-ENTRY EC0 5> + <SUBM M* (P)> + <PUSH TP* <TYPE-WORD FIX>> ;"Space for backup cnt" + <PUSH TP* [0]> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* 0> ;"Space for mark count" + + <HLRE A* (TP) -8> ;"Rest answer UVs all the way" + <MOVMS A* A> + <HRLI A* (A)> + <ADDB A* (TP) -8> + <HLRZ B* (A) 1> + <SUBI B* 2> + <MOVEM B* (TP) -2> + <HLRE A* (TP) -6> + <MOVMS A* A> + <HRLI A* (A)> + <ADDM A* (TP) -6> + <HLRE A* (TP) -4> + <MOVMS A* A> + <HRLI A* (A)> + <ADDM A* (TP) -4> + + <MOVE A* (TP) -12> ;"Count marks in haverform" + <MOVEI E* 71> + <SKIPE B* (A)> + <JRST EM1> + <MOVE B* (A) 1> + <MOVEI E* 35> + <JUMPE B* EM3> +EM1 <JUMPL B* EM2> + <LSH B* 1> + <SOJA E* EM1> +EM2 <MOVNI E* (E) 2> ;"2 due to ADD's carry" + <MOVSM E* (TP)> + +EM3 <MOVE E* (TP)> ;"Giant loop" +ECLUP <ADD E* [<1 (1)>]> + <JUMPGE E* ECDON> ;"replace with AOBJP and loses on TOPS-20" + <MOVEM E* (TP)> + <MOVNI D* (E)> ;"Right shift amount" + <SETZ C*> + <MOVEI O* 8> + <CAML E* [*777777000000*]> + <MOVEI O* 12> ;"If at first mark, do special hacking" + +ECLU2 <SOJL O* ECLUP> ;"Lesser loop" + <MOVE A* (TP) -12> ;"Get haverform into A and B" + <MOVE B* (A) 1> + <MOVE A* (A)> + + <CAML D* [-36]> + <JRST ENRM> + <MOVE C* B> ;"Special shift for > 36" + <MOVEI B* (A)> + <LSH B* (D) 36> + <JRST ECTP> + +ENRM <LSHC B* (D)> ;"Normal shift sequence" + <LSH B* (E)> + <LSHC A* (D)> + + ;"CODES: + 0 add . + 1 add - + 2 - -> .. + 3 delete mark + 4 .. -> - + 5 complement mark + 6 .. -> nil + 7 add .. + 8 no change + 9 add initial . + 10 add initial - + 11 add initial .." + +ECTP <CAIGE O* 4> ;"Binary test to find proper modification" + <JRST E0123> + <CAIGE O* 8> + <JRST E4567> + <ADD B* O> ;"Hack for codes 8 9 10 11" + <ADD B* O> ;"Code 8 for no change" + <SUBI B* 16> ;"Code 9 for add initial ." + <JRST ECD1> ;"Code 10 for add initial -" + ;"Code 11 for initial .." +E4567 <CAIGE O* 6> + <JRST E45> + <CAIE O* 6> + <JRST E7> + <TRNE B* 3> ;"Code 6 for .. to nil" + <JRST ECLU2> ;"Inapplicable" + <LSHC A* -2> + <JRST ECD1> +E7 <LSHC A* 2> ;"Code 7 for to add .." + <JRST ECD1> +E45 <CAIE O* 4> + <JRST E5> + <TRNE B* 3> ;"Code 4 for .. to -" + <JRST ECLU2> ;"Inapplicable" + <LSHC A* -1> + <AOJA B* ECD1> +E5 <XORI B* 1> ;"Code 5 to complement mark" + <JRST ECD1> +E0123 <CAIG O* 1> + <JRST E01> + <CAIE O* 3> + <JRST E2> + <LSHC A* -1> ;"Code 3 for delete mark" + <JRST ECD1> +E2 <TRNN B* 1> + <JRST ECLU2> ;"Inapplicable" + <SUBI B* 1> + <LSHC A* 1> ;"Code 2 for - to .." + <JRST ECD1> +E01 <LSHC A* 1> ;"Codes 0 and 1 for add mark" + <ADD B* O> + +ECD1 <CAML D* [-36]> ;"Shift > 36" + <JRST ESH36> + <MOVE A* (TP) -12> + <MOVE A* (A)> + <ROT A* (D) 36> + <ROTC A* (E)> + <MOVE B* C> + <JRST ESHD> + + +ESH36 <LSHC A* (E)> ;"Shift back into place" + <LSH B* (D)> + <LSHC B* (E)> + +ESHD <MOVE E* B> + <SKIPL D* A> ;"Lookup answer" + <CAIL D* 509> + <JRST NFND> + <DIVI D* 509> + <ADD E* (TP) -10> + <MOVE E* (E)> ;"Gets uvector for MEMQ" +EC12 <CAMN D* (E)> ;"This is a MEMQ" + <JRST EC13> + <AOBJN E* EC12> + ;"Put morphology stuff here" +NFND <MOVE E* (TP)> ;"Restore D, E" + <MOVNI D* (E)> + <JRST ECLU2> ;"Iterate" + +EC13 <SOSL 0 (TP) -2> + <JRST EC14> + <DPUSH TP* <PQUOTE Overbacked-UV!-ERRORS>> + <JRST CALER1> +EC14 <HRLOI D* *777776*> ;"Backup ans UVs" + <ADDB D* (TP) -8> + <MOVE D* (D)> ;"Get empty haverform to put ans in" + <MOVEM A* (D)> + <MOVEM B* (D) 1> + <HRLOI D* *777776*> + <ADDB D* (TP) -6> + <MOVEM O* (D)> ;"Put error type" + <CAIG O* 8> ;"Convert codes 9 10 11 to 0 1 7" + <JRST EC15> + <SUBI O* 9> + <CAIN O* 2> + <MOVEI O* 7> + <EXCH O* (D)> +EC15 <HRLOI D* *777776*> + <ADDB D* (TP) -4> + <HLRE E* (TP)> ;"Put error loc" + <MOVNM E* (D)> + <CAILE O* 8> + <SETZM (D)> + <JRST NFND> + +ECDON <MOVE A* (TP) -7> + <MOVE B* (TP) -8> + <SUB TP* [<(14) 14>]> + <JRST MPOPJ> + + +<TITLE DMOD> ;"72 BIT MODULO" + <DECLARE ("VALUE" FIX FIX FIX FIX)> + <DPUSH TP* <ARG 1>> + <DPUSH TP* <ARG 2>> + <DPUSH TP* <ARG 3>> + <PUSHJ P* DMOD0> + <JRST FINIS> + <INTERNAL-ENTRY DMOD0 3> + <MOVE B* (TP) -2> + <MOVE A* (TP) -4> + <CAML A* (TP)> + <SETZB A* B> + <DIV A* (TP)> +DMOD1 <MOVSI A* TFIX> + <SUB TP* [<(6) 6>]> + <POPJ P*> + +<SUB-ENTRY DDIV ("VALUE" FIX FIX FIX FIX)> ;"72 BIT DIVISION" + <DPUSH TP* <ARG 1>> + <DPUSH TP* <ARG 2>> + <DPUSH TP* <ARG 3>> + <PUSHJ P* DIV0> + <JRST FINIS> + <INTERNAL-ENTRY DIV0 3> + <MOVE A* (TP) -4> + <MOVE B* (TP) -2> + <CAML A* (TP)> + <SETZB A* B> + <DIV A* (TP)> + <MOVE B* A> + <JRST DMOD1> + + <END> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog2/extern.17 b/src/mprog2/extern.17 new file mode 100644 index 00000000..09596f01 --- /dev/null +++ b/src/mprog2/extern.17 @@ -0,0 +1,73 @@ +<PACKø1â EEXTERNALS"> + +<ENTRY GLX EXTERNALS> + +<SETGôgI©IAL-HACK <LIST <GET INITIAL OBLIST> <GET INITIAL OBLIST>>> + +<DEFINE GLX (F "TUPLE" TT "AUX" A) + #DECL ((F) STRING (TT) TUPLE (A) <OR ATOM FALSE>) + <COND (<SET A <GROUP-LOAD .F>> + <EXTERNALS .A !.TT> + <UNASSIGN .A>)>> + +<DEFINE EXTERNALS (GRP "TUPLE" TT "AUX" (P ,INITIAL-HACK) HACK RESTRICT) + #DECL ((GRP) ATOM (TT) TUPLE (P) <LIST OBLIST OBLIST> + (RESTRICT) <LIST [REST OBLIST]> (HACK) <OR ATOM FALSE>) + <SET RESTRICT + <MAPF ,LIST + <FUNCTION (P "AUX" A) + #DECL ((P) STRING (A) <OR ATOM FALSE>) + <COND (<SET A <LOOKUP .P <GET PACKAGE OBLIST>>> + <GET .A OBLIST>) + (ELSE <MAPRET>)>> + .TT>> + <MAPF <> + <FUNCTION (E "AUX" A) + #DECL ((E) ANY (A) <OR ATOM FALSE>) + <COND (<TYPE? .E FORM> + <COND (<AND <G=? <LENGTH .E> 2> + <==? <1 .E> PACKAGE>> + <SET A <LOOKUP <2 .E> <GET PACKAGE OBLIST>>> + <COND (.A <SET P ,.A>)>) + (ELSE + <COND (<AND <G=? <LENGTH .E> 3> + <MEMQ <1 .E> + '[SET SETG DEFINE DEFMAC]> + <TYPE? <2 .E> ATOM>> + <SET HACK <2 .E>>) + (ELSE <SET HACK TOPLEVEL>)> + <CHECK-FORM .E .P .HACK .RESTRICT>)>)>> + ..GRP> + ,NULL> + +<DEFINE CHECK-FORM (F P HACK RESTRICT "AUX" O (OUTCHAN .OUTCHAN)) + #DECL ((F) FORM (P RESTRICT) <LIST [REST OBLIST]> (OUTCHAN) CHANNEL + (O) <OR OBLIST FALSE> (HACK) <OR FALSE ATOM>) + <MAPF <> + <FUNCTION (E) + #DECL ((E) ANY) + <COND (<TYPE? .E ATOM> + <SET O <OBLIST? .E>> + <COND (<OR <==? .O <ROOT>> + <==? .O <ERRORS>> + <==? .O <INTERRUPTS>> + <==? .O <1 .P>> + <==? .O <2 .P>>>) + (<OR <EMPTY? .RESTRICT> + <MEMQ .O .RESTRICT>> + <COND (.HACK + <CRLF> + <PRINC .HACK> + <SET HACK <>>)> + <CRLF> + <PRINC " "> + <PRINC .E> + <PRINC " ["> + <PRINC <GET .O OBLIST>> + <PRINC !\]>)>) + (<TYPE? .E FORM LIST SEGMENT> + <SET HACK <CHECK-FORM .E .P .HACK .RESTRICT>>)>> + .F> + .HACK> + +<ENDPACKAGE> diff --git a/src/mprog2/filinf.udl006 b/src/mprog2/filinf.udl006 new file mode 100644 index 00000000..d509fb4f --- /dev/null +++ b/src/mprog2/filinf.udl006 @@ -0,0 +1,79 @@ +<PACKAGE "FILINF"> + +<ENTRY DUMPED? CREATION-DATE> + +<TITLE DUMPED?> + <DECLARE ("VALUE" <OR ATOM FALSE> CHANNEL "OPTIONAL" <OR ATOM FALSE>)> + <PUSH TP* (AB)> + <PUSH TP* 1(AB)> + <ADD AB* [<2(2)>]> + <JUMPGE AB* TAG1> + <PUSH TP* (AB)> + <PUSH TP* 1(AB)> + <PUSHJ P* IDUMPED2> + <JRST FINIS> +TAG1 <PUSHJ P* IDUMPED1> + <JRST FINIS> + +<INTERNAL-ENTRY IDUMPED1 1> + <SUBM M* (P)> + <PUSH TP* <TYPE-WORD UNBOUND>> + <PUSH TP* [<-1>]> + <JRST DUMENT> + +<INTERNAL-ENTRY IDUMPED2 2> + <SUBM M* (P)> +DUMENT <MOVE A* -2(TP)> + <MOVE B* (A) 21> ; "status slot" + <ANDI B* *77*> + <CAIE B* *43*> + <JRST FAIL> + <GETYP B* -1(TP)> + <CAIE B* <TYPE-CODE UNBOUND>> + <JRST SETDMP> + <*CALL DUMPED> + <JRST FAIL> + <JUMPE B* FAIL> +RETRUE <MOVSI A* <TYPE-CODE ATOM>> + <MOVE B* <MQUOTE T>> +FEXIT <SUB TP* [<4(4)>]> + <JRST MPOPJ> + +SETDMP <MOVEI C* 1> + <CAIN B* <TYPE-CODE FALSE>> + <MOVEI C* 0> + <*CALL SDUMPD> + <JRST FAIL> + <JRST RETRUE> + +FAIL <MOVSI A* TFALSE> + <SETZ B*> + <JRST FEXIT> + +DUMPED <SETZ> + <SIXBIT "RDMPBT"> + <(A) 1> ; "io channel #" + <SETZM B> + +SDUMPD <SETZ> + <SIXBIT "SDMPBT"> + <(A) 1> + <SETZ C> ; "new frob" + +<SUB-ENTRY CREATION-DATE #DECL ("VALUE" FIX CHANNEL)> + <PUSH TP* (AB)> + <PUSH TP* 1(AB)> + <PUSHJ P* ICREATION> + <JRST FINIS> + +<INTERNAL-ENTRY ICREATION 1> + <SUBM M* (P)> + <MOVE A* (TP)> + <*CALL [<SETZ> <SIXBIT "RFDATE"> <MOVE 1(A)> <SETZM B>]> + <SETZ B*> + <MOVSI A* <TYPE-CODE FIX>> + <JRST MPOPJ> + +<END> + +<ENDPACKAGE> diff --git a/src/mprog2/fint.udl001 b/src/mprog2/fint.udl001 new file mode 100644 index 00000000..c5e0e862 --- /dev/null +++ b/src/mprog2/fint.udl001 @@ -0,0 +1,84 @@ +<PACKAGE "FINT"> + +<ENTRY FINT INT-INFO> + +<DEFINE INT-INFO (I "AUX" (INT <>) (CHN <>) (OUTCHAN .OUTCHAN) IH H A) + #DECL ((I) ANY (INT) <OR ATOM FALSE> (CHN) <OR CHANNEL FALSE> + (IH) <OR IHEADER FALSE> (H) HANDLER (A) ANY (OUTCHAN) CHANNEL) + <COND (<TYPE? .I ATOM> + <SET INT <LOOKUP <SPNAME .I> <INTERRUPTS>>>) + (<TYPE? .I STRING> + <SET INT <LOOKUP .I <INTERRUPTS>>>) + (<TYPE? .I CHANNEL> + <SET CHN .I> + <SET INT <LOOKUP "CHAR" <INTERRUPTS>>>)> + <CRLF> + <PRINC <COND (.INT .INT) (ELSE .I)>> + <PRINC !\ > + <COND (.CHN + <PRINC !\"> + <PRINC <9 .CHN>> + <PRINC !\:> + <PRINC <10 .CHN>> + <PRINC !\;> + <PRINC <7 .CHN>> + <PRINC !\ > + <PRINC <8 .CHN>> + <PRINC "\" ">)> + <COND (.INT + <COND (<SET IH + <GETPROP <COND (.CHN .CHN) (ELSE .INT)> + INTERRUPT>> + <COND (<NOT <0? <CHTYPE <2 .IH> FIX>>> + <PRINC "(disabled) ">)> + <PRINC "Priority "> + <PRINC <4 .IH>> + <SET H <3 .IH>> + <REPEAT () + <COND (<EMPTY? .H> <RETURN>)> + <CRLF> + <PRINC " "> + <COND (<TYPE? <SET A <3 .H>> RSUBR RSUBR-ENTRY> + <PRIN1 <2 .A>>) + (ELSE + <PRINC !\[> + <PRIN1 <TYPE .A>> + <PRINC !\]>)> + <COND (<N==? <STATE <4 .H>> ILLEGAL> + <PRINC !\ > + <PRIN1 <4 .H>>)> + <SET H <1 .H>>>) + (ELSE + <PRINC "No IHEADER.">)> + <CRLF>) + (ELSE + <PRINC "No such interrupt exists."> + <CRLF> + <>)>> + +<DEFINE FINT ("OPTIONAL" (I <>)) + #DECL ((I) ANY) + <COND (<NOT .I> + <MAPF <> + <FUNCTION (L) + #DECL ((L) LIST) + <MAPF <> + <FUNCTION (A) + #DECL ((A) ATOM) + <COND (<GETPROP .A INTERRUPT> + <INT-INFO .A>)>> + .L>> + <INTERRUPTS>>)> + <COND (<OR <NOT .I> + <=? .I "CHAR"> + <AND <TYPE? .I ATOM> <=? <SPNAME .I> "CHAR">>> + <MAPF <> + <FUNCTION (A) + #DECL ((A) CHANNEL) + <COND (<GETPROP .A INTERRUPT> + <INT-INFO .A>)>> + <CHANLIST>>) + (.I <INT-INFO .I>)> + T> + +<ENDPACKAGE> diff --git a/src/mprog2/format.udl076 b/src/mprog2/format.udl076 new file mode 100644 index 00000000..dee2a38b --- /dev/null +++ b/src/mprog2/format.udl076 @@ -0,0 +1,513 @@ + +<PACKAGE "FORMAT"> + +<ENTRY FORMAT FORMAT-SPACES> + +<SETG FORMAT-SPACES " "> + +;"SPACE, TAB" + +<GDECL (FORMAT-SPACES) STRING> + +"Macro for printing or creating nicely formatted strings. + +Table of Format mode characters: + + @ - modifier ` + ! A - princ + \" B + # - gobble arg C - character + $ D - fix + % - crlfs E - (exponent) + & - newline F - float + ' G + ( H - headed info + ) I + * - ignore J + + K + , - arg L + - M + . - set N + / O - (octal) + 0 - arg P - plural + 1 - arg Q - quote + 2 - arg R - cardinals, etc. + 3 - arg S - prin1 + 4 - arg T - tabs + 5 - arg U + 6 - arg V + 7 - arg W + 8 - arg X - spaces + 9 - arg Y + : - modifier Z + ; lsb lcb + lab | - form feed + = - set rsb rcb + rab ^ ~ - tildes + ? _ ^? + +" + +\ + +"~nD Takes any number and prints as a decimal integer. If no arg, print + without leading spaces. If arg and it fits in, put in leading + spaces; if it doesnt fit just print it. If second arg, use that + (or first char of STRING of it if not a number) instead of space as + a pad char." + +"~nO Like D but octal" + +<DEFINE PFIX (N + "OPTIONAL" (L 0) (PSTR !\ ) + "AUX" M PCHAR LCHAR (S? T) (OUTCHAN .OUTCHAN)) + #DECL ((M N L) FIX (OUTCHAN) CHANNEL (PSTR) <OR STRING CHARACTER> + (S?) ANY (LCHAR PCHAR) CHARACTER) + <SET M <- .L <FLATSIZE .N 1000>>> + <COND (<G? .M 0> + <COND (<TYPE? .PSTR STRING> + <SET PCHAR <1 .PSTR>> + <SET LCHAR <2 .PSTR>>) + (ELSE <SET PCHAR <SET LCHAR .PSTR>>)> + <OR <1? .M> <PCHARS .PCHAR <- .M 1>>> + <COND (<MEMQ .LCHAR ,FORMAT-SPACES>) + (ELSE <SET S? <>> <SET L <14 .OUTCHAN>>)> + <PRINC .LCHAR>)> + <COND (.S? <SET L <14 .OUTCHAN>>)> + <PRINC .N> + .L> + +"~n,mF Floating point. Prints the number in a column n wide, with a +fractional part m digits wide." + +<DEFINE PFLOAT (N + "OPTIONAL" (L 0) (R 1) (PSTR !\ ) + "AUX" (NEG? <L? .N 0.0>) (S? T) PCHAR LCHAR M F E D + (OUTCHAN .OUTCHAN)) + #DECL ((N) FLOAT (E) <OR FIX FLOAT> (M F L R D) FIX (OUTCHAN) CHANNEL + (S? NEG?) <OR ATOM FALSE> (PSTR) <OR STRING CHARACTER> + (PCHAR LCHAR) CHARACTER) + <COND (.NEG? <SET N <ABS .N>>)> + <SET D <+ .R 1 <COND (<G? .L <+ .R 1>> 1) (ELSE 0)>>> + <SET F <FIX <+ 0.5 <* .N <SET E <EXP <* <FLOAT .R> <LOG 10.0>>>>>>>> + <SET E <FIX .E>> + <SET M <- .L <MAX .D <+ 1 <FLATSIZE .F 1000>>>>> + <COND (.NEG? <SET M <- .M 1>>)> + <COND (<G? .M 0> + <COND (<TYPE? .PSTR STRING> + <SET PCHAR <1 .PSTR>> + <SET LCHAR <2 .PSTR>>) + (ELSE + <SET PCHAR <SET LCHAR .PSTR>>)> + <OR <1? .M> <PCHARS .PCHAR <- .M 1>>> + <COND (<MEMQ .LCHAR ,FORMAT-SPACES>) + (ELSE <SET S? <>> <SET M <14 .OUTCHAN>>)> + <PRINC .LCHAR>)> + <SET L </ .F .E>> + <SET F <MOD .F .E>> + <COND (.S? <SET M <14 .OUTCHAN>>)> + <COND (.NEG? <PRINC !\->)> + <PRINC .L> + <PRINC !\.> + <PFIX .F .R !\0> + .M> + +"~nE Exponential notation" + +"~R cardinal/ordinal and Roman notation" + +<DEFINE PROMAN (N "OPTIONAL" (OLD? <>) + "AUX" (OUTCHAN .OUTCHAN) (RR '"IVXLCDM//")) + #DECL ((N) FIX (OLD?) <OR ATOM FALSE> (OUTCHAN) CHANNEL (RR) STRING) + <COND (<G? .N 3999> <PRINC "???">) + (ELSE + <ROMAN </ .N 1000> <REST .RR 6> .OLD?> + <SET N <MOD .N 1000>> + <ROMAN </ .N 100> <REST .RR 4> .OLD?> + <SET N <MOD .N 100>> + <ROMAN </ .N 10> <REST .RR 2> .OLD?> + <ROMAN <MOD .N 10> .RR .OLD?>)> + <14 .OUTCHAN>> + +<DEFINE ROMAN (N STR OLD? "AUX" (OUTCHAN .OUTCHAN)) + #DECL ((N) FIX (STR) STRING (OUTCHAN) CHANNEL) + <COND (<==? .N 9> <PRINC <1 .STR>> <PRINC <3 .STR>>) + (<G=? .N 5> + <PRINC <2 .STR>> + <COND (<NOT <0? <SET N <- .N 5>>>> + <PCHARS <1 .STR> .N>)>) + (<AND <NOT .OLD?> <==? .N 4>> + <PRINC <1 .STR>> <PRINC <2 .STR>>) + (<NOT <0? .N>> + <PCHARS <1 .STR> .N>)>> + + +<DEFINE PCARDINAL (N "OPTIONAL" (ORDINAL? <>) "AUX" (OUTCHAN .OUTCHAN)) + #DECL ((N) FIX (ORDINAL?) <OR ATOM FALSE> (OUTCHAN) CHANNEL) + <CARDINAL .N + <FIX </ <LOG .N> <LOG 1000>>> + .ORDINAL? + .OUTCHAN> + <14 .OUTCHAN>> + +<DEFINE CARDINAL (N L ORDINAL? OUTCHAN "AUX" M) + <COND (<0? .N>) + (<G? .N 19> + <SET M </ .N 1000>> + <SET N <- .N <* .M 1000>>> + <COND (<NOT <0? .M>> + <CARDINAL .M 0 <> .OUTCHAN> + <COND (<NOT <0? .L>> + <PRINC !\ > + <PRINC <NTH '["thousand" "million" + "billion" "trillion" + "quadrillion" "quintillion" + "sextillion" "septillion"] + .L>> + <COND (<AND <0? .N> .ORDINAL?> + <PRINC "th">)>)> + <COND (<NOT <0? .N>> <PRINC !\ >)>) + (<G=? .N 100> + <CARDINAL </ .N 100> 0 <> .OUTCHAN> + <PRINC " hundred"> + <COND (<NOT <0? <SET N <MOD .N 100>>>> + <PRINC !\ > + <CARDINAL <MOD .N 100> 0 .ORDINAL? .OUTCHAN>) + (.ORDINAL? <PRINC "th">)> + <SET N 0>) + (ELSE + <COND (<OR <NOT .ORDINAL?> <NOT <0? <MOD .N 10>>>> + <PRINC <NTH '["teen" "twenty" "thirty" "forty" + "fifty" "sixty" "seventy" "eighty" + "ninety"] + </ .N 10>>> + <PRINC !\ > + <CARDINAL <MOD .N 10> 0 .ORDINAL? .OUTCHAN>) + (ELSE + <PRINC <NTH '["teenth" "twentieth" "thirtieth" + "fortieth" "fiftieth" "sixtieth" + "seventieth" "eightieth" + "ninetieth"] + </ .N 10>>>)> + <SET N 0>)> + <COND (<AND <NOT <0? .N>> <0? .M>> + <CARDINAL .N <- .L 1> .ORDINAL? .OUTCHAN>)>) + (ELSE + <COND (.ORDINAL? + <COND (<L=? .N 9> + <PRINC + <NTH '["first" "second" "third" "fourth" "fifth" + "sixth" "seventh" "eighth" "ninth"] + .N>>) + (ELSE + <CARDINAL .N 0 <> .OUTCHAN> + <PRINC "th">)>) + (T + <PRINC <NTH '["one" "two" "three" "four" "five" + "six" "seven" "eight" "nine" "ten" + "eleven" "twelve" "thirteen" "fourteen" + "fifteen" "sixteen" "seventeen" "eighteen" + "nineteen"] + .N>>)>)>> + +\ + +"~nA Character string. If there is an n then pad the string with spaces + on the right to make it n long. If it doesn't fit, ignore n. + (A m n minpad padchar) as a control list element means pad to occupy at least + m columns, or if longer than that to begin with, pad to occupy + m+p*n columns for some nonnegative integer p. + at least minpad pad characters are produced in any case + (default if not supplied = 1). + padchar is used for padding purposes (default if not supplied = space). + if padchar is not a number, the first character in STRING of it is used. + A mode can actually be used to PRINC anything, not just a string." + +<DEFINE POBJ (OBJ + "OPTIONAL" (M 0) (N 0) (MINPAD 1) (PCHAR !\ ) + "AUX" (X 0) RW (OUTCHAN .OUTCHAN) (OC <14 .OUTCHAN>) + O (OL <16 .OUTCHAN>)) + #DECL ((OBJ) ANY (M N MINPAD X RW OC OL O) FIX (PCHAR) CHARACTER + (OUTCHAN) CHANNEL) + <PRINC .OBJ> + <SET O <14 .OUTCHAN>> + <COND (<N==? .OL <16 .OUTCHAN>>) + (ELSE + <COND (<L=? <SET X <- .M <SET RW <- <14 .OUTCHAN> .OC>>>> 0> + <COND (<G? .N 0> + <SET X <- <* </ <+ .RW .N> .N> .N> .RW>>)>)> + <PCHARS .PCHAR <MAX .MINPAD .X>>)> + .O> + +"~m,nH Princ string under a header" + +<DEFINE PHSTR (STR + "OPTIONAL" (M 0) (N 0) (PCHAR !\ ) + "AUX" (X 0) (OUTCHAN .OUTCHAN) (OC <14 .OUTCHAN>) + O (OL <16 .OUTCHAN>)) + #DECL ((STR) STRING (M N MINPAD X OC OL O) FIX (PCHAR) CHARACTER + (OUTCHAN) CHANNEL) + <PRINTSTRING .STR .OUTCHAN <MIN .M <LENGTH .STR>>> + <SET O <14 .OUTCHAN>> + <COND (<N==? .OL <16 .OUTCHAN>>) + (<G? <SET X <+ <- .M <- .O .OC>> .N>> 0> + <PCHARS .PCHAR .X>)> + .O> + +"same as above, but right justify string" + +<DEFINE PHSTR1 (STR + "OPTIONAL" (M 0) (N 0) (PCHAR !\ ) + "AUX" (OUTCHAN .OUTCHAN) (L <LENGTH .STR>) X O) + #DECL ((STR) STRING (M N L X O) FIX (PCHAR) CHARACTER + (OUTCHAN) CHANNEL) + <COND (<G? <SET X <- .M .L>> 0> <PCHARS .PCHAR .X>)> + <PRINTSTRING .STR .OUTCHAN <MIN .M .L>> + <SET O <14 .OUTCHAN>> + <PCHARS .PCHAR .N> + .O> + +"~S Prin1 an object. Just like ~A (including parameters) but uses PRIN1." + +<DEFINE POBJ1 (OBJ + "OPTIONAL" (M 0) (N 0) (MINPAD 1) (PCHAR !\ ) + "AUX" (X 0) RW (OUTCHAN .OUTCHAN) (OC <14 .OUTCHAN>) + O (OL <16 .OUTCHAN>)) + #DECL ((OBJ) ANY (M N MINPAD X RW OC OL O) FIX (PCHAR) CHARACTER + (OUTCHAN) CHANNEL) + <PRIN1 .OBJ> + <SET O <14 .OUTCHAN>> + <COND (<N==? .OL <16 .OUTCHAN>>) + (ELSE + <COND (<L=? <SET X <- .M <SET RW <- <14 .OUTCHAN> .OC>>>> 0> + <COND (<G? .N 0> + <SET X <- <* </ <+ .RW .N> .N> .N> .RW>>)>)> + <PCHARS .PCHAR <MAX .MINPAD .X>>)> + .O> + +"~C One character, in any acceptable form. + Control and meta bits print as alpha, beta, epsilon." + +<DEFINE PCHAR (C "AUX" (OUTCHAN .OUTCHAN) (O <14 .OUTCHAN>)) + #DECL ((C) <PRIMTYPE WORD> (OUTCHAN) CHANNEL (O) FIX) + <SET C <CHTYPE .C FIX>> + <COND (<L? .C 32> <PRINC !\^> <PRINC <ASCII <+ .C 64>>>) + (<==? .C 177> <PRINC "^?">) + (ELSE <PRINC .C>)> + .O> + +"~n* Ignore the next n args. n defaults to 1." + +"~n% Insert n newlines. n defaults to 1." + +<DEFINE PCRLFS ("OPTIONAL" (N 1) "AUX" (OUTCHAN .OUTCHAN)) + #DECL ((N) FIX (OUTCHAN) CHANNEL) + <REPEAT () + <CRLF> + <AND <0? <SET N <- .N 1>>> <RETURN>>> + 0> + +"~n| Insert n formfeeds. n defaults to 1." + +"~nX Insert n spaces. n defaults to 1." + +"~n~ Insert n tildes. n defaults to 1." + +<DEFINE PCHARS (C "OPTIONAL" (N 1) "AUX" (OUTCHAN .OUTCHAN)) + #DECL ((C) CHARACTER (N) FIX (OUTCHAN) CHANNEL) + <REPEAT () + <PRINC .C> + <AND <0? <SET N <- .N 1>>> <RETURN>>>> + +"~& Perform the FRESH-LINE operation on the stream." + +<DEFINE PFRESH-LINE ("AUX" (OUTCHAN .OUTCHAN)) + #DECL ((OUTCHAN) CHANNEL) + <COND (<NOT <0? <14 .OUTCHAN>>> <CRLF>)> + 0> + +"~n,mT Tab to column n+pm, for p an integer >= 0." + +<DEFINE PCOLUMN (N "OPTIONAL" (M 0) (S 8)) + #DECL ((N M S) FIX) + <INDENT-TO <SET N <+ .N <* .M .S>>>> + .N> + +"~Q Apply the next arg to no arguments. + (Q ...) Apply the next arg to the (unevaluated) parameters following the Q." + +"~P Insert an 's', unless the next arg is 1." + +<DEFINE PLURAL (N "AUX" (OUTCHAN .OUTCHAN)) + #DECL ((N) <OR FIX FLOAT> (OUTCHAN) CHANNEL) + <COND (<TYPE? .N FIX> <OR <1? .N> <PRINC !\s>>) + (<NOT <1? .N>> <PRINC !\s>)>> + +\ + +"Here is where the format macro is actually expanded, and what follows is all +useless once you are compiled." + +"<FORMAT channel control-arg \"TUPLE\" args> + If channel is false, cons up and return a string. + If channel is T, use .OUTCHAN" + +<DEFMAC FORMAT ("ARGS" A "AUX" CH STR ARG P) + #DECL ((A ARG) LIST (CH) ANY (STR) STRING (VALUE P) FORM) + <COND (<LENGTH? .A 1> <ERROR TOO-FEW-ARGS FORMAT>)> + <SET CH <1 .A>> + <COND (<==? .CH T> <SET CH '.OUTCHAN>)> + <SET STR <2 .A>> + <SET ARG <REST .A 2>> + <SET P + <FORM PROG <LIST <LIST OUTCHAN .CH>> + #DECL ((OUTCHAN) <SPECIAL CHANNEL>)>> + <FSTRING .STR (T !.ARG) <REST .P 2> .P> + .P> + +"This function is for a string format control arg" + +<DEFINE FSTRING (STR TARG FL P "AUX" S) + #DECL ((STR) STRING (FL TARG) LIST (S) <OR FALSE STRING> (P) FORM) + <REPEAT () + <COND (<EMPTY? .STR> <RETURN>) + (<==? <1 .STR> !\~> + <SET STR <FCALL <REST .STR> .TARG .FL .P>> + <OR <LENGTH? .FL 1> <SET FL <REST .FL>>>) + (<SET S <MEMQ !\~ .STR>> + <PUTREST .FL + <SET FL + (<FORM PRINC + <SUBSTRUC .STR 0 + <- <LENGTH .STR> + <LENGTH .S>>>>)>> + <SET STR .S>) + (ELSE + <PUTREST .FL (<FORM PRINC .STR>)> + <RETURN>)>>> + +"This function is for doing a single escape sequence" + +<DEFINE FCALL (STR TARG FL P + "AUX" (FT <FORM PRINC>) (F <CHTYPE .FT LIST>) S C N V + (COLON <>) (ATSIGN <>)) + #DECL ((STR S) STRING (C) CHARACTER (TARG FL F) LIST (P) FORM (N) FIX + (FT) <OR FORM FALSE> (V) ANY) + <SET S <FARGS .STR .TARG .F>> + <REPEAT () + <COND (<EMPTY? .S> <ERROR NO-CONTROL-ARGUMENT?>)> + <SET C <1 .S>> + <COND (<==? .C !\:> <SET COLON T>) + (<==? .C !\@> <SET ATSIGN T>) + (ELSE <RETURN>)> + <SET S <REST .S>>> + <COND (<AND <G=? <ASCII .C> <ASCII !\a>> + <L=? <ASCII .C> <ASCII !\z>>> + <SET C <ASCII <- <ASCII .C> 32>>>)> + <COND (<==? .C !\.> + <FVAR .P <SET V <FNEXT .TARG>>> + <PUT .FT 1 SET> + <PUTREST .FT (.V '<14 .OUTCHAN>)>) + (<==? .C !\=> + <FVAR .P <SET V <FNEXT .TARG>>> + <PUT .FL 1 <FORM SET .V <1 .FL>>> + <SET FT <>>) + (<==? .C !\D> + <PUT .FT 1 PFIX> + <PUTREST .FT (<FNEXT .TARG> !<REST .FT>)>) + (<==? .C !\F> + <PUT .FT 1 PFLOAT> + <PUTREST .FT (<FNEXT .TARG> !<REST .FT>)>) + (<==? .C !\A> + <PUT .FT 1 POBJ> + <PUTREST .FT (<FNEXT .TARG> !<REST .FT>)>) + (<==? .C !\H> + <PUT .FT 1 <COND (.COLON PHSTR1) (ELSE PHSTR)>> + <PUTREST .FT (<FNEXT .TARG> !<REST .FT>)>) + (<==? .C !\S> + <PUT .FT 1 POBJ1> + <PUTREST .FT (<FNEXT .TARG> !<REST .FT>)>) + (<==? .C !\C> + <PUT .FT 1 PCHAR> + <PUTREST .FT (<FNEXT .TARG> !<REST .FT>)>) + (<==? .C !\R> + <PUT .FT 1 <COND (.ATSIGN PROMAN) + (ELSE PCARDINAL)>> + <COND (.COLON <PUTREST .FT (T)>)> + <PUTREST .FT (<FNEXT .TARG> !<REST .FT>)>) + (<==? .C !\%> <PUT .FT 1 PCRLFS>) + (<MEMQ .C "|X~"> + <PUT .FT 1 PCHARS> + <PUTREST .FT + (<COND (<==? .C !\|> <ASCII 12>) + (<==? .C !\X> <ASCII 32>) + (!\~)> + !<REST .FT>)>) + (<==? .C !\&> + <PUT .FT 1 PFRESH-LINE>) + (<==? .C !\T> + <PUT .FT 1 PCOLUMN>) + (<==? .C !\P> + <PUT .FT 1 PLURAL> + <PUTREST .FT (<FNEXT .TARG> !<REST .FT>)>) + (<==? .C !\Q> + <SET FT <FNEXT .TARG>>) + (<==? .C !\*> + <COND (<LENGTH? .FT 1> <SET N 1>) + (ELSE <SET N <2 .FT>>)> + <REPEAT () + <FNEXT .TARG> + <AND <0? <SET N <- .N 1>>> <RETURN>>>)> + <AND .FT <PUTREST .FL (.FT)>> + <REST .S>> + +<DEFINE FVAR (P V "AUX" (PL <2 .P>) (DL <3 .P>)) + #DECL ((P) FORM (V) ANY (PL) LIST (DL) DECL) + <COND (<NOT <TYPE? .V ATOM>> + <ERROR COLUMN-MARKER-NOT-ATOM .V FORMAT>) + (<MEMQ .V .PL>) + (ELSE + <PUTREST .PL (.V !<REST .PL>)> + <PUTREST <REST .DL> ((.V) FIX)>)>> + +"Parses out the args for a escape sequence" + +<DEFINE FARGS (STR TARG F "AUX" (N 0) (N? <>) C) + #DECL ((STR) STRING (N C) FIX (N?) <OR ATOM FALSE> (F TARG) LIST) + <REPEAT () + <COND (<EMPTY? .STR> <ERROR NO-COMMAND FORMAT>)> + <SET C <ASCII <1 .STR>>> + <COND (<AND <G=? .C <ASCII !\0>> <L=? .C <ASCII !\9>>> + <SET N <+ <* .N 10> <- .C <ASCII !\0>>>> + <SET N? T>) + (ELSE + <AND .N? <PUTREST .F <SET F (.N)>>> + <SET N? <>> + <SET N 0> + <COND (<==? .C <ASCII !\,>>) + (<==? .C <ASCII !\'>> + <REPEAT ((ST <>)) + #DECL ((ST) <OR FALSE STRING CHARACTER>) + <COND (<EMPTY? <SET STR <REST .STR>>> + <ERROR QUOTED-ARG-NOT-FOUND>)> + <COND (.ST + <SET ST <STRING .ST <1 .STR>>>) + (ELSE <SET ST <1 .STR>>)> + <COND (<OR <EMPTY? <REST .STR>> + <N==? <2 .STR> !\'>> + <PUTREST .F <SET F (.ST)>> + <RETURN>) + (ELSE <SET STR <REST .STR>>)>>) + (<==? .C <ASCII !\#>> + <PUTREST .F <SET F (<FNEXT .TARG>)>>) + (ELSE <RETURN .STR>)>)> + <SET STR <REST .STR>>>> + +"Eats one argument from the call" + +<DEFINE FNEXT (TARG "AUX" A) + #DECL ((TARG) LIST (A) ANY) + <COND (<LENGTH? .TARG 1> <ERROR TOO-FEW-ARGS FORMAT>) + (ELSE <SET A <2 .TARG>> <PUTREST .TARG <REST .TARG 2>> .A)>> + +<ENDPACKAGE> diff --git a/src/mprog2/ftp.udl001 b/src/mprog2/ftp.udl001 new file mode 100644 index 00000000..521068b6 --- /dev/null +++ b/src/mprog2/ftp.udl001 @@ -0,0 +1,159 @@ +<PACKAGE "FTP"> + +<ENTRY STOR RETR BYE FTPPAIR USER FTPHOST ACCESS-INFO> + +<USE "NETFTP" "HOSTS"> + +<SETG FTPPAIR <>> +<SETG FTPHOST <HOST "MIT-XX">> +<GDECL (FTPPAIR) <OR FALSE <LIST [2 CHANNEL]>> + (FTPHOST) FIX + (ACCESS-INFO) <LIST [3 STRING]>> + +<DEFINE STOR (FILE "OPTIONAL" RFILE (HST ,FTPHOST) + "AUX" REPLY (FTP ,FTPPAIR) OCH ICH ODCH INCH) + #DECL ((ICH OCH) CHANNEL (INCH ODCH) <OR FALSE CHANNEL> + (HST) FIX (FTP) <OR FALSE LIST> (REPLY) <OR FIX FALSE>) + <PROG NETOUT () + #DECL ((NETOUT) <SPECIAL ACTIVATION>) + <COND (<SET INCH <OPEN "READB" .FILE>> + <COND (<NOT <ASSIGNED? RFILE>> + <SET RFILE <STRING <7 .INCH> ".MSS">>)>) + (ELSE + <RETURN .INCH>)> + <COND (<NOT .FTP> + <COND (<SET FTP <CONNECT .HST + ,ACCESS-INFO + <> + <> + <>>> + <SETG FTPPAIR .FTP>) + (ELSE + <RETURN #FALSE (ICP-FAILED)>)>)> + <SET OCH <2 .FTP>> + <SET ICH <1 .FTP>> + <PR .OCH "STOR " .RFILE> + <COND (<SET REPLY <WAITRESP .ICH '(255 350)>>) + (ELSE <RETURN .REPLY>)> + <COND (<SET ODCH <DATA-LISTEN .ICH PRINT .HST>>) + (ELSE <RETURN .ODCH>)> + <COND (<NOT <WAITRESP .ICH '(250)>> + <CLOSE .ODCH> + <AND <GASSIGNED? RHAN> <OFF ,RHAN>> + <RETURN #FALSE (NO-250)>) + (ELSE + <AND <GASSIGNED? RHAN> <OFF ,RHAN>>)> + <FILECOPY .INCH .ODCH> + <CLOSE .INCH> + <CLOSE .ODCH> + <COND (<NOT <WAITRESP .ICH '(252)>> + <RETURN #FALSE (NO-252)>)> + .RFILE>> + +<DEFINE RETR (RFILE "OPTIONAL" FILE (HST ,FTPHOST) + "AUX" REPLY (FTP ,FTPPAIR) OCH ICH IDCH OUTCH) + #DECL ((ICH OCH) CHANNEL (OUTCH IDCH) <OR FALSE CHANNEL> + (HST) FIX (FTP) <OR FALSE LIST> (REPLY) <OR FIX FALSE>) + <PROG NETOUT () + #DECL ((NETOUT) <SPECIAL ACTIVATION>) + <COND (<NOT <ASSIGNED? FILE>> + <SET FILE <ITSIFY .RFILE>>)> + <COND (<NOT .FTP> + <COND (<SET FTP <CONNECT .HST + ,ACCESS-INFO + <> + <> + <>>> + <SETG FTPPAIR .FTP>) + (ELSE + <RETURN #FALSE (ICP-FAILED)>)>)> + <SET OCH <2 .FTP>> + <SET ICH <1 .FTP>> + <PR .OCH "RETR " .RFILE> + <COND (<SET REPLY <WAITRESP .ICH '(255 350)>>) + (ELSE <RETURN .REPLY>)> + <COND (<SET IDCH <DATA-LISTEN .ICH READ .HST>>) + (ELSE <RETURN .IDCH>)> + <COND (<NOT <WAITRESP .ICH '(250)>> + <CLOSE .IDCH> + <AND <GASSIGNED? RHAN> <OFF ,RHAN>> + <RETURN #FALSE (NO-250)>) + (ELSE + <AND <GASSIGNED? RHAN> <OFF ,RHAN>>)> + <COND (<SET OUTCH <OPEN "PRINTB" .FILE>>) + (ELSE + <CLOSE .IDCH> + <RETURN .OUTCH>)> + <FILECOPY .IDCH .OUTCH> + <CLOSE .IDCH> + <CLOSE .OUTCH> + <COND (<NOT <WAITRESP .ICH '(252)>> + <RETURN #FALSE (NO-252)>)> + .FILE>> + +<DEFINE USER ("OPTIONAL" + (NAME "ANONYMOUS") + (PASS <UNAME>) + (ACCT "")) + #DECL ((NAME PASS ACCT) STRING) + <SETG ACCESS-INFO <LIST .NAME .PASS .ACCT>>> + +<DEFINE BYE ("OPTIONAL" (FTP ,FTPPAIR)) + #DECL ((FTP) <LIST CHANNEL CHANNEL>) + <COND (.FTP + <PR <2 .FTP> "BYE"> + <WAITRESP <1 .FTP> '(231)> + <CLOSE-CONN .FTP> + <SETG FTPPAIR <>>)>> + +\ + +<DEFINE ITSIFY (FILE "AUX" S) + #DECL ((FILE) STRING (S) <OR STRING FALSE>) + <SET FILE <STRING .FILE>> + <COND (<SET S <MEMQ !\: .FILE>> + <SET FILE .S>)> + <COND (<SET S <MEMQ !\< .FILE>> + <SET FILE .S>)> + <COND (<SET S <MEMQ !\. .FILE>> + <PUT .S 1 !\ >)> + <COND (<SET S <MEMQ !\> .FILE>> + <PUT .S 1 !\;>)> + .FILE> + +<DEFINE CLOSE-CONN (F) + #DECL ((F) <LIST [2 CHANNEL]>) + <COND (.F <CLOSE <1 .F>> <CLOSE <2 .F>>)>> + +<DEFINE PR (CH "TUPLE" LINE) + #DECL ((CH) CHANNEL (LINE) <TUPLE [REST STRING]>) + <MAPF <> + <FUNCTION (S) + #DECL ((S) STRING) + <PRINC .S .CH>> + .LINE> + <CRLF .CH>> + +<SETG DATA-CHANNEL <>> + +<DEFINE DATA-LISTEN (ICH DIREC HST "AUX" DCH) + #DECL ((ICH) CHANNEL (DIREC) ATOM (HST) FIX + (DCH) <OR CHANNEL FALSE>) + <SET DCH + <OPEN <SPNAME .DIREC> + <+ <COND (<==? .DIREC PRINT> 3) + (ELSE 2)> + <7 .ICH>> + -1 "NET" .HST 8>> + <COND (<NETACC .DCH>) + (ELSE + <SETG RHAN <ON "CHAR" ,DATA-ACCEPT 3 0 .DCH>>)> + .DCH> + +<DEFINE DATA-ACCEPT (NS DCH) + #DECL ((DCH) CHANNEL) + <COND (<AND .DCH <NETACC .DCH>> + <OFF ,RHAN> + <DISMISS T>)>> + +<ENDPACKAGE> diff --git a/src/mprog2/gendir.udl001 b/src/mprog2/gendir.udl001 new file mode 100644 index 00000000..808d452c --- /dev/null +++ b/src/mprog2/gendir.udl001 @@ -0,0 +1,28 @@ +<PACKAGE "GENDIR"> + +<ENTRY NEXT-DIRECTORY> + +<SETG MFDCHN <>> +<SETG MFDSTR <ISTRING 6>> +<SETG JUNK <ISTRING 2>> +<GDECL (MFDCHN) <OR FALSE CHANNEL> (MFDSTR JUNK) STRING> + +<DEFINE NEXT-DIRECTORY ("OPTIONAL" (DEV "DSK") + "AUX" (MC ,MFDCHN) (MS ,MFDSTR) (JS ,JUNK) SS) + #DECL ((MC) <OR FALSE CHANNEL> (DEV MS JS) STRING (SS) <OR STRING FALSE>) + <COND (<OR .MC + <AND <SET MC <OPEN "READ" "M.F.D." "(FILE)" .DEV>> + <SETG MFDCHN .MC>>> + <COND (<AND <READSTRING .JS .MC 1 '<>> + <READSTRING .MS .MC 6 '<>> + <READSTRING .JS .MC 2 '<>>> + <COND (<SET SS <MEMQ !\ .MS>> + <SET MS + <SUBSTRUC .MS + 0 + <- 6 <LENGTH .SS>> + <REST .MS <LENGTH .SS>>>>)> + .MS) + (ELSE <CLOSE .MC> <SETG MFDCHN <>> <>)>)>> + +<ENDPACKAGE> diff --git a/src/mprog2/gnjfni.utaa14 b/src/mprog2/gnjfni.utaa14 new file mode 100644 index 00000000..c51b924f --- /dev/null +++ b/src/mprog2/gnjfni.utaa14 @@ -0,0 +1,269 @@ + +<PACKAGE "GNJFN"> + +<ENTRY NEXT-FILE GNJFN-RESET> + +<USE "NSTR" "SORTX"> + +<SETG MFDPTR 2> + +<SETG MFDENTLEN 2> + +<SETG UDNAMP 2> + +<SETG LUNBLK 5> + +<SETG UNFN1 1> + +<SETG UNFN2 2> + +<SETG UNRNDM 3> + +<SETG UNDATE 4> + +<SETG UNLNKB <BITS 1 18>> + +<SETG UNWRDC <BITS 10 24>> + +<SETG UNDSCP <BITS 13 0>> + +<MANIFEST MFDPTR MFDENTLEN UDNAMP LUNBLK UNFN1 UNFN2 UNRNDM UNDATE + UNLNKB UNWRDC UNDSCP> + +<PUT CUR-STATE + DECL + '<VECTOR <OR STRING <UVECTOR [REST WORD]>> + <OR FALSE <UVECTOR [REST WORD]>> + [2 <OR FALSE WORD>] + [3 WORD]>> + +<SETG CS-MFD 1> + +<SETG CS-DIR 2> + +<SETG CS-FN1 3> + +<SETG CS-FN2 4> + +<SETG CS-LDIR 5> + +<SETG CS-LFN1 6> + +<SETG CS-LFN2 7> + +<MANIFEST CS-MFD CS-DIR CS-FN1 CS-FN2 CS-LDIR CS-LFN1 CS-LFN2> + +<SETG LAST-SPEC ""> + +<GDECL (LAST-SPEC) STRING (MFD-BUF DIR-BUF) <UVECTOR [REST WORD]>> + +"On 20x, the state is simply a JFN (full-word), which can be passed +to GNJFN. If it is false, we aren't initialized. On ITS, the state is +a pair: a pointer into a uvector of directories to be searched, and +a pointer into the current directory." + +<SETG CUR-STATE <>> + +"Takes a file spec, including *'s, and returns a vector containing +a string and bits as for the GNJFN call, or false if no more files." + +<DEFINE NEXT-FILE ("OPTIONAL" (SPEC ,LAST-SPEC) (V <>) + "AUX" RES CS DIRS CH ICH) + #DECL ((SPEC) STRING (RES) <OR FALSE <PRIMTYPE WORD>> + (CS) <OR FALSE CUR-STATE> (DIRS) <OR STRING UVECTOR> + (CH) CHANNEL (ICH) <OR CHANNEL FALSE>) + <COND (<N=? .SPEC ,LAST-SPEC> <GNJFN-RESET>)> + <SETG LAST-SPEC .SPEC> + <SET CS ,CUR-STATE> + <COND (<NOT .CS> + <SET CH <CHANNEL "READ" .SPEC>> + <COND (<=? <6 .CH> "*"> + <COND (<GASSIGNED? MFD-BUF> <SET DIRS ,MFD-BUF>) + (<SET DIRS <IUVECTOR 1024 #WORD *000000000000*>> + <SETG MFD-BUF .DIRS>)> + <COND (<SET ICH <OPEN "READB" "M.F.D. (FILE)">> + <READB .DIRS .ICH> + <CLOSE .ICH> + <SET DIRS + <REST .DIRS <CHTYPE <MFDPTR .DIRS> FIX>>> + <SORT <> .DIRS ,MFDENTLEN>) + (<ERROR CANT-GET-MFD .ICH NEXT-FILE>)>) + (<SET DIRS <6 .CH>>)> + <SET CS + [.DIRS + <> + <COND (<=? <3 .CH> "*"> <>) + (<CHTYPE <STRTOX <3 .CH>> WORD>)> + <COND (<=? <4 .CH> "*"> <>) + (<CHTYPE <STRTOX <4 .CH>> WORD>)> + #WORD *000000000000* + #WORD *000000000000* + #WORD *000000000000*]> + <SETG CUR-STATE .CS> + <COND (<NOT <GASSIGNED? DIR-BUF>> + <SETG DIR-BUF <IUVECTOR 1024 #WORD *000000000000*>>)>)> + <COND (<DOSEARCH .CS .V>) + (<GNJFN-RESET> <>)>> + +<DEFINE DOSEARCH DS (CS V "AUX" DIR) + #DECL ((CS) CUR-STATE (DIR) <UVECTOR [REST <PRIMTYPE WORD>]> + (V) <OR FALSE VECTOR>) + <COND + (<FIND-NEXT-DIR .CS> + <SET DIR <CS-DIR .CS>> + <REPEAT (RES FS FB RND CDATE) + #DECL ((RND RES) WORD (FS FB) FIX) + <COND + (<AND <FN-MATCH <CS-FN1 .CS> <UNFN1 .DIR>> + <FN-MATCH <CS-FN2 .CS> <UNFN2 .DIR>>> + <SET RES + <CHTYPE + <ORB <COND (<AND <TYPE? <CS-MFD .CS> UVECTOR> + <N==? <1 <BACK <CS-MFD .CS> ,MFDENTLEN>> + <CS-LDIR .CS>>> + 7) + (0)> + <COND (<N==? <UNFN1 .DIR> <CS-LFN1 .CS>> 3) (0)> + <COND (<N==? <UNFN2 .DIR> <CS-LFN2 .CS>> 1) (0)>> + WORD>> + <SET RND <UNRNDM .DIR>> + <SET CDATE <UNDATE .DIR>> + <PUT .CS ,CS-DIR <REST .DIR ,LUNBLK>> + <PUT .CS + ,CS-LDIR + <COND (<TYPE? <CS-MFD .CS> UVECTOR> + <1 <BACK <CS-MFD .CS> ,MFDENTLEN>>) + (<CHTYPE <STRTOX <CS-MFD .CS>> WORD>)>> + <PUT .CS ,CS-LFN1 <UNFN1 .DIR>> + <PUT .CS ,CS-LFN2 <UNFN2 .DIR>> + <PUT .CS ,CS-DIR <REST .DIR ,LUNBLK>> + <COND (<NOT .V> <SET V <IVECTOR 2>>)> + <PUT .V 1 <FILE-STRING .CS>> + <COND (<G? <LENGTH .V> 1> + <PUT .V 2 .RES> + <COND (<G? <LENGTH .V> 2> + <COND (<0? <CHTYPE <GETBITS .RND ,UNLNKB> FIX>> + <PUT .V 3 <COUNT-WORDS <GETBITS .RND ,UNDSCP> + ,DIR-BUF + <GETBITS .RND ,UNWRDC>>> + <COND (<G? <LENGTH .V> 3> + <PUT .V 4 36>)>) + (<PUT .V 3 0> + <COND (<G? <LENGTH .V> 3> + <PUT .V 4 36>)>)> + <COND (<G? <LENGTH .V> 4> + <PUT .V 5 .CDATE>)>)>)> + <RETURN .V>)> + <COND (<EMPTY? <SET DIR <REST .DIR ,LUNBLK>>> + <PUT .CS 2 .DIR> + <COND (<FIND-NEXT-DIR .CS> <SET DIR <2 .CS>>) + (<RETURN <>>)>)>>)>> + +<DEFINE FN-MATCH (X Y) + #DECL ((X Y) <OR FALSE WORD>) + <OR <==? .X .Y> <NOT .X> <NOT .Y>>> + +<DEFINE FIND-NEXT-DIR FND (CS "AUX" DIR) + #DECL ((CS) <VECTOR <OR STRING UVECTOR> <OR FALSE UVECTOR>> + (DIR) <OR FALSE UVECTOR>) + <COND + (<OR <NOT <2 .CS>> + <EMPTY? <2 .CS>>> + <COND + (<OR <AND <TYPE? <1 .CS> STRING> <2 .CS>> <EMPTY? <1 .CS>>> <>) + (T + <COND (<TYPE? <1 .CS> UVECTOR> + <REPEAT ((MFD <1 .CS>)) + #DECL ((MFD) <UVECTOR [REST <PRIMTYPE WORD>]>) + <COND (<NOT <0? <CHTYPE <1 .MFD> FIX>>> + <COND (<AND <SET DIR <GETDIR <1 .MFD>>> + <NOT <EMPTY? .DIR>>> + <PUT .CS 2 .DIR> + <PUT .CS 1 <REST .MFD ,MFDENTLEN>> + <RETURN>)>)> + <COND (<EMPTY? <SET MFD <REST .MFD ,MFDENTLEN>>> + <RETURN <>>)>>) + (<AND <SET DIR <GETDIR <1 .CS>>> + <NOT <EMPTY? .DIR>>> + <PUT .CS 2 .DIR>) + (<RETURN <> .FND>)>)>) + (T)>> + +<DEFINE GETDIR (NM "AUX" CH) + #DECL ((NM) <OR STRING <PRIMTYPE WORD>>) + <COND (<NOT <TYPE? .NM STRING>> <SET NM <SIXTOS .NM !\>>)> + <COND (<SET CH <OPEN "READB" ".FILE." "(DIR)" "DSK" .NM>> + <READB ,DIR-BUF .CH> + <CLOSE .CH> + <REST ,DIR-BUF <CHTYPE <UDNAMP ,DIR-BUF> FIX>>)>> + +<DEFINE GNJFN-RESET ("OPTIONAL" (FLUSH? <>)) + #DECL ((FLUSH?) <OR ATOM FALSE>) + <COND (.FLUSH? <GUNASSIGN MFD-BUF> <GUNASSIGN DIR-BUF>)> + <SETG CUR-STATE <>>> + +<DEFINE FILE-STRING (CS) + #DECL ((CS) CUR-STATE) + <STRING "DSK:" + <COND (<TYPE? <CS-MFD .CS> STRING> <CS-MFD .CS>) + (<SIXTOS <CS-LDIR .CS> !\>)> + ";" + <SIXTOS <CS-LFN1 .CS> !\> + " " + <SIXTOS <CS-LFN2 .CS> !\>>> + +<TITLE COUNT-WORDS> + <DECLARE ("VALUE" <OR FIX FALSE> <PRIMTYPE WORD> UVECTOR + <PRIMTYPE WORD>)> + <DPUSH TP* (AB)> + <DPUSH TP* 2(AB)> + <DPUSH TP* 4(AB)> + <PUSHJ P* ICOUNT> + <JRST FINIS> + +<INTERNAL-ENTRY ICOUNT 3> + <SUBM M* (P)> + <MOVE C* -2(TP)> ; "directory" + <MOVE A* -4(TP)> ; "count of desc bytes" + <IDIVI A* 6> ; "number of words into desc area" + <ADDI A* 11> + <HRLS A> + <ADD C* A> + <JUMPGE C* LOSER> ; "C/ vector pointer to desc word" + <MOVE D* C> + <HRLI D* *440600*> ; "6bit byte pointer to start of desc" +; "update for remainder of division" + <JUMPE B* BLKLUP> + <ILDB O* D> + <SOJG B* HERE -1> + +BLKLUP <ILDB O* D> ; "pick up a byte" + <JUMPE O* LSTBYT> ; "if 0, end of descriptor" + <CAILE O* 12> ; "UDTKMX: if >12, can just add" + <JRST ADDTHEM> + <ADD B* 0> + <JRST BLKLUP> + +ADDTHEM <CAIGE O* 31> ; "UDTPWH: place holder" + <AOJA B* BLKLUP> + <CAIN O* 31> + <JRST BLKLUP> + <IBP D> + <IBP D> + <AOJA B* BLKLUP> + +LSTBYT <MOVE A* <TYPE-WORD FIX>> + <JUMPE B* COUT> ; "if zero blocks" + <SKIPE (TP)> ; "dont SOS if even # of block" + <SOS B> + <IMULI B* 1024> ; "convert to words" + <ADD B* (TP)> ; "extra words" +COUT <SUB TP* [<(6) 6>]> + <JRST MPOPJ> + +LOSER <MOVE A* <TYPE-WORD FALSE>> + <SETZ B*> + <JRST COUT> +<END> + +<ENDPACKAGE> diff --git a/src/mprog2/haverf.uerb03 b/src/mprog2/haverf.uerb03 new file mode 100644 index 00000000..521cfe20 --- /dev/null +++ b/src/mprog2/haverf.uerb03 @@ -0,0 +1,117 @@ + <TITLE DENSER> + <DECLARE ("VALUE" <<PRIMTYPE UVECTOR> [REST <PRIMTYPE WORD>]> + <<PRIMTYPE UVECTOR> [REST <PRIMTYPE WORD>]> + <<PRIMTYPE UVECTOR> [REST <PRIMTYPE WORD>]>)> + <DPUSH TP* <ARG 1>> + <DPUSH TP* <ARG 2>> + <PUSHJ P* D0> + <JRST FINIS> + + <INTERNAL-ENTRY D0 2> + <SUBM M* (P)> + <MOVE C* (TP) -2> + <SETZ A*> + <MOVEI B* 1> + <JUMPGE C* DERR> +DITER <LSHC A* 1> + <ADD B* (C)> + <AOBJN C* DITER> + <MOVE C* (TP)> + <HLRE D* C> + <MOVNS D* D> + <CAILE D* 2> + <JRST DERR> + <JUMPGE C* DERR> + <CAIE D* 1> + <JRST DEN0> + <JUMPN A* DERR> +DEN2 <MOVEM B* (C)> + <JRST D2> +DEN0 <MOVEM A* (C)> + <MOVEM B* (C) 1> +D2 <MOVE B* C> +D3 <HLLZ A* (TP) -1> + <SUB TP* [<(4) 4>]> + <JRST MPOPJ> +DERR <PUSH TP* <TYPE-WORD ATOM>> + <PUSH TP* <MQUOTE BAD-ARG-TO-DENSER-OR-SPARSER!-ERRORS>> + <PUSHJ P* CALER1> + <JRST DERR> + + <SUB-ENTRY SPARSER ("VALUE" <<PRIMTYPE UVECTOR> [REST <PRIMTYPE WORD>]> + <<PRIMTYPE UVECTOR> [REST <PRIMTYPE WORD>]> + <<PRIMTYPE UVECTOR> [REST <PRIMTYPE WORD>]>)> + <DPUSH TP* <ARG 1>> + <DPUSH TP* <ARG 2>> + <PUSHJ P* SP1> + <JRST FINIS> + + <INTERNAL-ENTRY SP1 2> + <SUBM M* (P)> + <MOVE A* (TP) -2> +SP2 <MOVE D* (A)> + <JFFO D* SP3> + <AOBJN A* SP2> + <JRST DERR> +SP3 <MOVE B* D> + <MOVE C* (A) 1> + <LSHC B* (E) 1> + <HLRE D* A> + <MOVNS D* D> + <CAILE D* 2> + <JRST DERR> + <IMULI D* 36> + <SUBI D* (E) 1> + <MOVE E* (TP)> +SP5 <HLRE O* E> + <MOVNS O* O> + <CAIGE O* (D)> + <JRST DERR> + <CAIE O* (D)> + <AOBJN E* SP5> + <MOVE O* E> +SP7 <SETZM (E)> + <JUMPGE B* SP6> + <AOS (E)> +SP6 <LSHC B* 1> + <AOBJN E* SP7> + <MOVE B* O> + <JRST D3> + + + + + <TITLE HASH-ITM> + <DECLARE ("VALUE" FIX UVECTOR)> + <DPUSH TP* <ARG 1>> + <PUSHJ P* HENTRY> + <JRST FINIS> + + <INTERNAL-ENTRY HENTRY 1> + <MOVE C* (TP)> + <MOVEI A* 0> + <MOVEI B* 1> +HI <MOVE D* (C)> + <MOVEI O* (D)> + <CAIN D* 9> + <AOBJN C* LUP> + <LSH D* 2> + <MOVE E* [*212056514325*]> + <HRLI D* *031700*> + <ROTC D* (D) 2> + <ANDI D* 3> + <ASHC A* (D)> + <ROT E* 2> + <ANDI E* 3> + <ADDI B* (E)> + <CAIN O* 11> + <AOJ B*> + <CAIN O* 8> + <AOBJN C* LUP> +LUP <AOBJN C* HI> +END <XOR A* B> + <IDIVI A* 32749> + <MOVSI A* TFIX> + <SUB TP* [<(2) 2>]> + <POPJ P*> + \ No newline at end of file diff --git a/src/mprog2/histor.usg063 b/src/mprog2/histor.usg063 new file mode 100644 index 00000000..557e2de3 --- /dev/null +++ b/src/mprog2/histor.usg063 @@ -0,0 +1,444 @@ +<PACKAGE "HISTORY"> + +<ENTRY HISTORY LONG-TERM-HISTORY SCRIPT-HISTORY ;SETUP MAKE-SAVE> + +<USE "TIMFCN" "HOSTS" ;"CALSYM" ;"CALRDR" ;"CALCOM" ;"COMMAND" "STR" "JCL"> + +<SETG 1WORD <IUVECTOR 1 #WORD *000000000000*>> + +<SETG 96FIX <IUVECTOR 96 '0>> + +<SETG 384FIX <IUVECTOR 384 '0>> + +<SETG CSDATA-HEADER <IUVECTOR 6 '0>> + +<SETG CSMSTR-HEADER <IUVECTOR 6 '0>> + +<SETG LONG-HSTY-ENTRY <IUVECTOR 6 '0>> + +<SETG SOCK-HEADER <IUVECTOR 3 '0>> + +<SETG DATIME-VECTOR1 <IUVECTOR 4 '0>> + +<SETG DATIME-VECTOR2 <IUVECTOR 4 '0>> + +<SETG ALL-STATES '["undetermined " "host not available" "ncp not responding" + "logger not responding" "logger rejecting" "logger available" "not surveyed"]> + +<SETG DITTO-STATES '[" \" \"" " \" \" \"" " \" \" \"" + " \" \" \"" " \" \"" " \" \"" " \" \""]> + +<SETG DETECT-GAP 60> + +<SETG OLD-HOST-NAM <HOST <SETG OLD-HOST-NUM 70>>> + +<SETG OLD-SOCKET 1> + +<SETG OLD-SPAN 10> + +<SETG OLD-OUTCH .OUTCHAN> + +<SETG LAST-HISTORY <>> + +<SETG ICB <>> + +<SETG CR-LF " +"> + +<SETG TAB " "> + +<SETG 3SP " "> + +<SETG MONTHS '[" JAN " " FEB " " MAR " " APR " " MAY " " JUN " " JUL " " AUG " " SEP " " OCT " " NOV " " DEC "]> + +<SETG NUMBERS '["00" "01" "02" "03" "04" "05" "06" "07" "08" "09" "10" "11" "12" "13" + "14" "15" "16" "17" "18" "19" "20" "21" "22" "23" "24" "25" "26" "27" "28" "29" "30" + "31" "32" "33" "34" "35" "36" "37" "38" "39" "40" "41" "42" "43" "44" "45" "46" "47" + "48" "49" "50" "51" "52" "53" "54" "55" "56" "57" "58" "59"]> + +<GDECL (1WORD) <UVECTOR [1 WORD]> + (96FIX 384FIX CSDATA-HEADER CSMSTR-HEADER LONG-HSTY-ENTRY SOCK-HEADER + DATIME-VECTOR1 DATIME-VECTOR2) + <UVECTOR [REST FIX]> + (ALL-STATES DITTO-STATES MONTHS NUMBERS) <VECTOR [REST STRING]> + (DETECT-GAP OLD-HOST-NUM OLD-SOCKET OLD-SPAN) FIX + (OLD-HOST-NAM CR-LF TAB 3SP) STRING + (OLD-OUTCH ICB) <OR FALSE CHANNEL> + (LAST-HISTORY) <OR FALSE ATOM>> + +<DEFINE PUT-IN-WORD (WD POS "AUX" (N 12)) + #DECL ((WD) WORD (POS N) FIX (VALUE) ATOM) + <SET POS <* 12 <- .POS 1>>> + <REPEAT () + <PUT ,96FIX + <SET POS <+ .POS 1>> + <CHTYPE <GETBITS .WD <NTH '[#BITS *000300000000* + #BITS *030300000000* + #BITS *060300000000* + #BITS *110300000000* + #BITS *140300000000* + #BITS *170300000000* + #BITS *220300000000* + #BITS *250300000000* + #BITS *300300000000* + #BITS *330300000000* + #BITS *360300000000* + #BITS *410300000000*] .N>> + FIX>> + <AND <0? <SET N <- .N 1>>> <RETURN>>> + T> + +<DEFINE HSTY-HEADER ("OPTIONAL" (LONG-HSTY? <>) + "AUX" (HEADER <COND (.LONG-HSTY? ,CSMSTR-HEADER)(,CSDATA-HEADER)>)) + #DECL ((VALUE) ATOM (LONG-HSTY?) <OR FALSE ATOM>(HEADER) <UVECTOR [REST FIX]>) + <READB ,1WORD ,ICB> + <COND (.LONG-HSTY? <PUT ,CSMSTR-HEADER 1 <CHTYPE <1 ,1WORD> FIX>>) + (OW <PUT ,CSDATA-HEADER 1 + <CHTYPE <GETBITS <1 ,1WORD> #BITS *222200000000*> FIX>> + <PUT ,CSDATA-HEADER 2 + <CHTYPE <GETBITS <1 ,1WORD> #BITS *002200000000*> FIX>>)> + <READB ,1WORD ,ICB> + <PUT .HEADER 3 <PARSE <SIXTOS <1 ,1WORD>>>> + <READB ,1WORD ,ICB> + <PUT .HEADER 4 <PARSE <SIXTOS <1 ,1WORD>>>> + <READB ,1WORD ,ICB> + <PUT .HEADER 5 <PARSE <SIXTOS <1 ,1WORD>>>> + <READB ,1WORD ,ICB> + <PUT .HEADER 6 <PARSE <SIXTOS <1 ,1WORD>>>> + T> + +<DEFINE HISTORY HACT ("OPTIONAL" (HOST <>)(SOCK <>)(SPAN <>)(OUTCH ,OLD-OUTCH)) + #DECL ((HOST)<SPECIAL <OR FALSE FIX>> + (SOCK SPAN)<SPECIAL <OR FALSE FIX>> + (OUTCH)<SPECIAL CHANNEL> (HACT) <SPECIAL ACTIVATION> + (VALUE) <OR ATOM FALSE>) + <CHECK-HSTY-ARGS> + <SEARCH-HSTY-DATA> + <DISPLAY-HSTY-DATA> + <RESET-HSTY-DEFAULTS>> + + +<DEFINE CHECK-HSTY-ARGS ("OPTIONAL" (LONG-HSTY? <>)) + #DECL ((VALUE) ATOM (LONG-HSTY?) <OR FALSE ATOM>) + <COND (<NOT .HOST><SET HOST ,OLD-HOST-NUM>) + (<TYPE? .HOST FIX> + <CHECK-HOST-NUM .HOST>)> + <OR .SOCK <SET SOCK ,OLD-SOCKET>> + <OR .LONG-HSTY? .SPAN <SET SPAN ,OLD-SPAN>> + <OR .OUTCH <SET OUTCH ,OLD-OUTCH>> + T> + +<DEFINE RESET-HSTY-DEFAULTS ("OPTIONAL" (LONG-HSTY? <>)) + #DECL ((VALUE) ATOM (LONG-HSTY?) <OR FALSE ATOM>) + <SETG OLD-HOST-NUM .HOST> + <SETG OLD-HOST-NAM <HOST .HOST>> + <SETG OLD-SOCKET .SOCK> + <OR .LONG-HSTY? <SETG OLD-SPAN .SPAN>> + <SETG OLD-OUTCH .OUTCH> + T> + +<DEFINE CHECK-HOST-NUM (N) + #DECL ((N) FIX (VALUE) ATOM) + <COND (<AND <0? .N> + <NOT <HOST ,OLD-HOST-NAM>> + <RETURN #FALSE ("BAD-OLD-HOST") .HACT>>) + (<AND <0? .N> <NOT ,LAST-HISTORY>> + <RETURN #FALSE ("NO PREVIOUS HISTORY?") .HACT>) + (<0? .N>) + (<0? <LENGTH <HOST .N>>> + <RETURN #FALSE ("BAD-HOST-NUMBER") .HACT>)> + T> + +<DEFINE SEARCH-HSTY-DATA SACT ("OPTIONAL" (LONG-HSTY? <>)) + #DECL ((VALUE LONG-HSTY?) <OR ATOM FALSE>) + <SETG LAST-HISTORY <>> + <SETG ICB <OPEN "READB" <COND (.LONG-HSTY? "SURVEY;CSMSTR NOW") + ("SURVEY;CSDATA NOW")>>> + <OR ,ICB <RETURN ,ICB .HACT>> + <AND <0? .HOST> <SET HOST ,OLD-HOST-NUM> <RETURN T .SACT>> + <HSTY-HEADER .LONG-HSTY?> ;"FLAG SAYS LONG OR SHORT" + <REPEAT ((N <COND (.LONG-HSTY? 7)(9)>)) + <READB ,1WORD ,ICB> + <PUT ,SOCK-HEADER 1 + <CHTYPE <GETBITS <1 ,1WORD> #BITS *222200000000*> FIX>> + <PUT ,SOCK-HEADER 2 + <CHTYPE <GETBITS <1 ,1WORD> #BITS *002200000000*> FIX>> + <COND (<AND <==? .SOCK <1 ,SOCK-HEADER>><==? .HOST <2 ,SOCK-HEADER>>> + <READB ,1WORD ,ICB> + <PUT ,SOCK-HEADER 3 <CHTYPE <1 ,1WORD> FIX>> + <RETURN>) + (<AND <==? 262143 <1 ,SOCK-HEADER>> + <==? 262143 <2 ,SOCK-HEADER>>> + <RETURN #FALSE("HOST-SOCKET COMBINATION NOT AVAILABLE") .HACT>) + (OW <ACCESS ,ICB <+ <17 ,ICB> .N>>)>> + <REPEAT ((N 0)) + <AND <==? <COND (.LONG-HSTY? 7) (9)> + <SET N <+ .N 1>>> + <RETURN>> + <READB ,1WORD ,ICB> + <COND (.LONG-HSTY? + <PUT ,LONG-HSTY-ENTRY .N <CHTYPE <1 ,1WORD> FIX>>) + (<PUT-IN-WORD <1 ,1WORD> .N>)>>> + + +<DEFINE PUT-IN-384FIX ("AUX" (384FIX ,384FIX)) + #DECL ((VALUE) ATOM + (384FIX) <UVECTOR [REST FIX]>) + <ACCESS ,ICB <- <FILE-LENGTH ,ICB> 384>> + <READB .384FIX ,ICB> + <REPEAT ((N 385)) + #DECL ((N) FIX) + <AND <0? <SET N <- .N 1>>> <RETURN>> + <PUT .384FIX .N <PARSE <SIXTOS <CHTYPE <NTH .384FIX .N> WORD>>>>> + T> + + + +<DEFINE CHECK-SPAN () + #DECL ((VALUE) ATOM) + <COND (<G? .SPAN <1 ,CSDATA-HEADER>> + <PRINTUPL .OUTCH "Only " + <UNPARSE <SET SPAN <1 ,CSDATA-HEADER>>> + " Surveys available. ">) + (<L? .SPAN 1> + <PRINC "Not a valid time-span; 96 Surveys follow." .OUTCH> + <SET SPAN 96>)> + T> + +<DEFINE SLASH-HOST (N) + #DECL ((VALUE) STRING (N) FIX) + <STRING <UNPARSE </ .N 64>> !\/ <UNPARSE <MOD .N 64>>>> + +<DEFINE DISPLAY-HEADER () + #DECL ((VALUE) ATOM) + <PRINTUPL .OUTCH ,CR-LF + " Table for the most recent " .SPAN " Surveys" ,CR-LF + " for Host " <SLASH-HOST .HOST> " (" <HOST .HOST> ")" + ;" on Socket #" ;.SOCK ,CR-LF>> + +<DEFINE TIME-GAP ("AUX" (DATE1 <STD-DATE <3 ,DATIME-VECTOR2>>) + (DATE2 <STD-DATE <1 ,DATIME-VECTOR1>>)(TIME1 <STD-TIME <4 ,DATIME-VECTOR2>>) + (TIME2 <STD-TIME <2 ,DATIME-VECTOR1>>)) + #DECL ((VALUE) <OR FALSE STRING>(TIME1 TIME2 DATE1 DATE2) <LIST [3 FIX]>) + <COND (<G? <DTDIFF (.DATE1 .TIME1) (.DATE2 .TIME2)> ,DETECT-GAP> + <TIME-DIF .DATE2 .DATE1 .TIME2 .TIME1>)>> + +<DEFINE STD-TIME (N) + #DECL ((VALUE)<LIST [3 FIX]> (N) FIX) + <LIST </ .N 10000> + </ <MOD .N 10000> 100> + <MOD .N 100>>> + +<DEFINE STD-DATE (N "AUX" (A <STD-TIME .N>)) + #DECL ((VALUE A)<LIST [3 FIX]>(N) FIX) + (<3 .A> <1 .A> <2 .A>)> + +<DEFINE ALL.VECTORS ("OPTIONAL" (A T) (B T) (C T) (D T)) + #DECL ((A B C D) <OR FALSE ATOM> (VALUE) ATOM) + <AND .A <PRINC ,CSDATA-HEADER> <PRINC ,CSMSTR-HEADER>> + <TERPRI> + <AND .B <PRINC ,SOCK-HEADER>> + <TERPRI> + <AND .C <PRINC ,96FIX>> + <TERPRI> + <AND .D <PRINC ,384FIX>> + T> + +<DEFINE SCRIPT-HISTORY ("OPTIONAL" (FILE <>)(HOST <>) + (SOCK <>)(SPAN <>)(OUTCH ,OLD-OUTCH) "AUX" OC ) + #DECL ((FILE VALUE)<OR STRING CHANNEL FALSE> + (HOST SOCK SPAN)<SPECIAL <OR FALSE FIX>> + (OUTCH)<SPECIAL CHANNEL> (OC) CHANNEL) + <SET OC <COND (<NOT .FILE> + <OR <OPEN "PRINT" "HSTSCP"> + <OPEN "PRINT" <STRING "VANISH;" <UNAME>>>>) + (<TYPE? .FILE STRING> + <OPEN "PRINT" .FILE>) + (.FILE)>> + <PUT <TOP .OUTCH> 1 (.OC !<1 <TOP .OUTCH>>)> + <HISTORY .HOST .SOCK .SPAN .OUTCH> + <PUT <TOP .OUTCH> 1 <REST <1 <TOP .OUTCH>> 1>> + <OR <TYPE? .FILE CHANNEL> + <CLOSE .OC>> + .FILE> + + +<DEFINE DISPLAY-HSTY-DATA ("AUX" (A ,DATIME-VECTOR2) (LAST-STATE -1)) + #DECL ((A) <UVECTOR [REST FIX]> (LAST-STATE) FIX (VALUE) ATOM) + <PUT-IN-384FIX> + <CHECK-SPAN> + <DISPLAY-HEADER> + <SET CSTATE <2 ,CSDATA-HEADER>> + <PRINC " + Date Range in time State of Host" ;" + Date Start End State of Host + Survey Survey" .OUTCH> + <SETG LAST-HISTORY T> + <PUT ,DATIME-VECTOR1 1 <1 ,384FIX>> + <PUT ,DATIME-VECTOR1 2 <2 ,384FIX>> + <PUT ,DATIME-VECTOR1 3 <3 ,384FIX>> + <PUT ,DATIME-VECTOR1 4 <4 ,384FIX>> + <REPEAT ((DATIME 1) (N <* 4 .SPAN>) S) + #DECL ((DATIME) <SPECIAL FIX> (N) FIX (S) <OR FALSE STRING>) + <AND <G? .DATIME .N> <RETURN>> + <AND <0? <SET CSTATE <- .CSTATE 1>>> <SET CSTATE 96>> + <SETG DATIME-VECTOR2 ,DATIME-VECTOR1> + <PUT .A 1 <NTH ,384FIX .DATIME>> + <PUT .A 2 <NTH ,384FIX <+ .DATIME 1>>> + <PUT .A 3 <NTH ,384FIX <+ .DATIME 2>>> + <PUT .A 4 <NTH ,384FIX <+ .DATIME 3>>> + <SETG DATIME-VECTOR1 .A> + <COND (<SET S <TIME-GAP>> + <PRINTUPL .OUTCH ,CR-LF ,CR-LF "Time-gap of " .S "." + ,CR-LF " No Surveys between " + <DATESTR <STD-DATE <1 ,DATIME-VECTOR1>>> " " + <TIMESTR <STD-TIME <2 ,DATIME-VECTOR1>>> " and " + <DATESTR <STD-DATE <3 ,DATIME-VECTOR2>>> " " + <TIMESTR <STD-TIME <4 ,DATIME-VECTOR2>>> ,CR-LF> + <SET LAST-STATE -1>)> + <PRINTUPL .OUTCH ,CR-LF <+ 1</ <- .DATIME 1> 4>> ") " + <COND (<OR <L? .LAST-STATE 0> + <N==? <1 ,DATIME-VECTOR2> <1 ,DATIME-VECTOR1>>> + <DATESTR <STD-DATE <1 ,DATIME-VECTOR1>>>) + (,TAB)> + ,TAB <TIMESTR <STD-TIME <2 ,DATIME-VECTOR1>>> + ,TAB <TIMESTR <STD-TIME <4 ,DATIME-VECTOR1>>> + ,TAB> + <COND (<==? .LAST-STATE <NTH ,96FIX .CSTATE>> + <PRINC <NTH ,DITTO-STATES <+ 1 .LAST-STATE>> .OUTCH>) + (<PRINC <NTH ,ALL-STATES <+ 1 <SET LAST-STATE <NTH ,96FIX .CSTATE>>>> + .OUTCH>)> + <SET DATIME <+ .DATIME 4>>> + <CLOSE ,ICB> + <TERPRI .OUTCH> + T> + + + +<DEFINE LONG-TERM-HISTORY HACT ("OPTIONAL" (HOST <>)(SOCK <>)(OUTCH ,OLD-OUTCH)) + #DECL ((HOST SOCK)<SPECIAL <OR FALSE FIX>> (OUTCH)<SPECIAL CHANNEL> + (HACT) <SPECIAL ACTIVATION> (VALUE) <OR ATOM <FALSE STRING>>) + <CHECK-HSTY-ARGS T> + <SEARCH-HSTY-DATA T> + <DISPLAY-LONG-HSTY-DATA> + <RESET-HSTY-DEFAULTS T> T> + +<DEFINE DISPLAY-LONG-HSTY-DATA ("AUX" (N <FLOAT <+ !,LONG-HSTY-ENTRY>>)) + #DECL ((VALUE) ATOM (N) FLOAT) + <SETG LAST-HISTORY T> + <PRINTUPL .OUTCH ,CR-LF + " History of Host " <SLASH-HOST .HOST> " (" <HOST .HOST> ")" + ;" on socket #" ;.SOCK ,CR-LF + " for Surveys taken up to " + <DATESTR <STD-DATE <6 ,CSMSTR-HEADER>>> " " + <TIMESTR <STD-TIME <5 ,CSMSTR-HEADER>>> ,CR-LF + " No. of Surveys for this Host = " <FIX .N> + " (1.000 batting average)" ,CR-LF> + <MAPF <> + <FUNCTION (S E) + <PRINTUPL .OUTCH + ,TAB .S ,TAB .E " times" ,TAB + <COND (<L? .E 10> " (.") (T "(.")> + <REST <UNPARSE <+ 1000 <FIX <+ 0.5 <* </ .E .N> 1000>>>>>> + ")" ,CR-LF>> + ,ALL-STATES + ,LONG-HSTY-ENTRY> + <PRINTUPL .OUTCH + " Average response time = " + <FIX <+ 0.5 <* 1000 </ </ <3 ,SOCK-HEADER> 30> .N>>>> + " milliseconds." + ,CR-LF> + <CLOSE ,ICB> + T> + +<DEFINE PRINTUPL ( CHAN "TUPLE" STUFF ) + #DECL ((VALUE) ATOM (CHAN) <OR CHANNEL FALSE> (STUFF) TUPLE) + <MAPF <> <FUNCTION (X) <PRINC .X .CHAN>> .STUFF> T> + +<DEFINE DATESTR (DATE) + #DECL ((VALUE) STRING (DATE) <LIST [3 FIX]>) + <STRING <NTH ,NUMBERS <+ 1 <3 .DATE>>> <NTH ,MONTHS <2 .DATE>> <UNPARSE <1 .DATE>>>> + +<DEFINE TIMESTR (TIME) + #DECL ((VALUE) STRING (TIME) <LIST [3 FIX]>) + <STRING <NTH ,NUMBERS <+ 1 <1 .TIME>>> !\: <NTH ,NUMBERS <+ 1 <2 .TIME>>>>> + + +<DEFINE TS ("AUX" JCL LJCL CH (OUTCHAN .OUTCHAN) + (LONGSW <>) (FILESW <>) (SPAN 10)) + #DECL ((JCL) <OR FALSE STRING> (LJCL) LIST (CH) <OR CHANNEL FALSE> + (LONGSW FILESW) <OR FALSE 'T> (SPAN) FIX) + <COND + (<OR <NOT <SET JCL <READJCL>>> + <=? .JCL "?">> + <PRINC " + Type :HISTORY host1 host2 ... <CR> to get recent history. + Include (n) in the command to get last 10*n surveys. + Include (L) in the command to get long-term history instead. + Include (F) in the command to send output to file 'HISTOR >'. +">) + (T + <MAPF <> + <FUNCTION (C) + #DECL ((C) ANY) + <COND (<AND <TYPE? .C LIST> <NOT <EMPTY? .C>>> + <COND (<TYPE? <1 .C> ATOM> + <COND (<=? "L" <SPNAME <1 .C>>> + <SET LONGSW T>) + (<=? "F" <SPNAME <1 .C>>> + <SET FILESW T>)>) + (<TYPE? <1 .C> FIX> + <SET SPAN <* <1 .C> 10>>) + (T + <PRINC " +Invalid item ignored: "> + <PRINC .C>)>)>> + <SET LJCL <LPARSE <UPPERCASE .JCL>>>> + <AND .FILESW + <COND (<SET CH <OPEN "PRINT" "HISTOR >">> + <SET OUTCHAN .CH>) + (T <PRINC " +Couldn't open file 'HISTOR >'; output will go to terminal instead.">)>> + <MAPF <> + <FUNCTION (A "AUX" H I N) + #DECL ((A H I N) ANY) + <AND <DECL? .A '<FORM 'GVAL ANY>> <PRIMTYPE? .A LIST> <SET A <2 .A>>> + <COND (<OR <TYPE? <SET H .A> FIX> + <AND <TYPE? .A ATOM> + <OR <AND <SET H <HOST <SET N <SPNAME .A>>>> + <SET H <CONVERT-HOST .H>>> + <AND <SET H <MEMQ !\/ .N>> + <TYPE? <SET I <PARSE <REST .H>>> FIX> + <TYPE? <SET H <PARSE + <SUBSTRUC .N 0 <- <LENGTH .N> <LENGTH .H>>>>> + FIX> + <SET H <CONVERT-HOST <+ .H<* .I *1000*>>>>>>>> + <COND (<SET H <COND (.LONGSW + <OR <LONG-TERM-HISTORY .H 0 .OUTCHAN> + <LONG-TERM-HISTORY .H 2 .OUTCHAN>>) + (T + <OR <HISTORY .H 0 .SPAN .OUTCHAN> + <HISTORY .H 2 .SPAN .OUTCHAN>>)>>) + (T <PRINT .A> <PRINC ": "> <PRINC <1 .H>>)>) + (T <PRINT .A> <PRINC "is not a valid host.">)>> + .LJCL>)>> + +<DEFINE CONVERT-HOST (NEWNUM "AUX" HNUM INUM) #DECL ((NEWNUM HNUM INUM) FIX) + <COND (<L? .NEWNUM *400*> .NEWNUM) ; "Already old-style" + (<OR <G? <SET HNUM <CHTYPE <GETBITS .NEWNUM <BITS 8 0>> FIX>> 3> + ;"Host on imp" + <G? <SET INUM <CHTYPE <GETBITS .NEWNUM <BITS 16 9>> FIX>> *77*> + ;"Imp"> + .NEWNUM) ; "If won't fit in old-style, return new" + (<CHTYPE <PUTBITS .INUM + <BITS 2 6> + .HNUM> FIX>)>> + +<DEFINE MAKE-SAVE () + <SNAME ""> + <HANDLER <GET ,INCHAN INTERRUPT> #FUNCTION ((X Y) <QUIT>)> + <COND (<=? "RESTORED" <SAVE "SURVEY;HISTOR >">> + <TS> + <QUIT>)>> + +<ENDPACKAGE> diff --git a/src/mprog2/init.umrc37 b/src/mprog2/init.umrc37 new file mode 100644 index 00000000..f85d39e7 --- /dev/null +++ b/src/mprog2/init.umrc37 @@ -0,0 +1,238 @@ + +<PACKAGE "INIT"> + +<ENTRY INIT-DUMP INIT-LOAD> + +<COND (<==? ,MUDDLE 53> <ERROR USE-MUDDLE-54!- >)> + +<BLOCK (<ROOT>)> + +BIND + +INIT + +ARG + +SPACE-ALTMODE + +MODIFIED + +<SETG SPC '[GO !\@ TAG !\. SETG !\: GVAL !\=]> + +<SETG SPC2 '[SPACE-ALTMODE "%" RETURN "@>" AGAIN "@<"]> + +<SETG AV + '![APPEND ILOPR COPY DELETE EXIST FILE-DEFAULT GET-CONSOLE HIPPOPOTAMUS IMAGE J-PRINT + ILOPR LINE MAKE NAME OUTPUT PRINT QUESTION RENAME SSVMOD TPL USER + VALRET WHEN ILOPR ILOPR ILOPR!]> + +<ENDBLOCK> + +<SETG FILE-DEFAULT ".DDT. (INIT)"> +<GDECL (FILE-DEFAULT) STRING> + +<DEFINE INIT-DUMP ("OPTIONAL" (FRM .INIT) (FILE ,FILE-DEFAULT) + "AUX" (OUTCHAN <OPEN "PRINT" "_INIT >">)) + #DECL ((FRM) FORM (FILE) STRING (OUTCHAN) <SPECIAL <OR FALSE CHANNEL>>) + <OR .OUTCHAN <ERROR CANT-OPEN-FILE!-ERRORS>> + <PUT .OUTCHAN 13 <MIN>> + <PRINTSTRING ,STRNG + .OUTCHAN + <- <LENGTH ,STRNG> + <LENGTH <MEMBER ":INIT" ,STRNG>>>> + <PRINC ":INIT "> + <MAKE-INIT .FRM .OUTCHAN> + <CRLF .OUTCHAN> + <PRINC <REST ,OSTRNG>> + <RENAME .OUTCHAN .FILE> + <CLOSE .OUTCHAN> + "DONE"> + + +<DEFINE MAKE-INIT (FRM OUTCHAN "AUX" M (BT <>) (CLOSIT T) (DEF <>)) + #DECL ((FRM) <OR LIST FORM> (ARG DEF BT CLOSIT) <OR 'T FALSE> + (OUTCHAN) <SPECIAL CHANNEL>) + <AND <TYPE? .FRM LIST> <SET FRM <FORM BIND !.FRM>>> + <MAPF <> + <FUNCTION (X) + <COND (<TYPE? .X FORM LIST> + <COND (<SET M <MEMQ <1 .X> ,SPC>> + <PRINC <2 .M>> + <PRIN1 <2 .X>>) + (<SET M <MEMQ <1 .X> ,SPC2>> <PRINC <2 .M>>) + (<MAKE-INIT .X .OUTCHAN>)>) + (<TYPE? .X STRING> <PRIN1 .X>) + (<TYPE? .X FIX> + <COND (<OR <L? .X 1> <G? .X 9>> + <ERROR ILLEGAL-ARGUMENT .X>)> + <COND (.ARG <PRIN1 .X>) (<PRINC "!"> <PRIN1 .X>)>) + (.DEF + <COND (<TYPE? .X ATOM> <PRIN1 .X> <SET DEF <>>) + (<ERROR ILLEGAL-Q-REGISTER .X>)>) + (<==? .X MAPF> <PRINC "[!">) + (<==? .X APPLY> <PRINC "[@"> <SET DEF T>) + (<==? .X MODIFIED> <PRINC ";">) + (<==? .X MOD> <PRINC ";">) + (<==? .X DEFINE> <PRINC "[:"> <SET DEF T>) + (<==? .X NOT> <PRINC "[#">) + (<==? .X COND> <PRINC "[?">) + (<==? .X SPACE-ALTMODE> <PRINC "%"><SET CLOSIT <>>) + (<==? .X ARG> + <PRINC "!"> + <SET ARG T> + <SET CLOSIT <>>) + (<==? .X OR> <PRINC "[\\">) + (<==? .X AND> <PRINC "[&">) + (<==? .X PROG> <PRINC "[">) + (<==? .X REPEAT> <PRINC "[*">) + (<==? .X BIND> <PRINC "("> <SET BT T>) + (<==? .X T> <PRINC "+">) + (<==? .X <>> <PRINC "-">) + (<SET Y <1 <SPNAME .X>>> + <SET CLOSIT <>> + <COND (<AND <SET Z <ASCII .Y>> + <G=? .Z <ASCII !\%>> + <L=? .Z <ASCII !\]>>> + <PRINC .Y>) + (<ERROR ILLEGAL-COMMAND .Y>)>)>> + .FRM> + <AND .CLOSIT + <COND (.BT <PRINC ")"> <SET BT <>>) (<PRINC "]">)>> + ,NULL> + +<DEFINE INIT-LOAD ("OPTIONAL" (FILE ".DDT. (INIT)") "AUX" STRNG CH + (MODFLG <>) (MOD2FLG <>)) + #DECL ((FILE) STRING (STRNG) <SPECIAL <OR STRING FALSE>> (CH) <OR FALSE CHANNEL> + (MODFLG MOD2FLG) <SPECIAL <OR 'T FALSE>>) + <COND (<SET CH <OPEN "READ" .FILE>> + <SETG FILE-DEFAULT .FILE> + <SETG STRNG <SET STRNG <ISTRING <FILE-LENGTH .CH> <ASCII 3>>>> + <READSTRING .STRNG .CH> + <CLOSE .CH> + <COND (<SET STRNG <MEMBER ":INIT" .STRNG>> + <SET STRNG <REST .STRNG 6>> + <SET INIT <FROB>> + <AND <==? <LENGTH .INIT> 2> + <SET INIT <2 .INIT>>> + <SETG OSTRNG <REST .STRNG>> + .INIT)>)>> + +<DEFINE FROB ("OPTIONAL" (OFORM <FORM PROG>) "AUX" (AV ,AV) (OOFORM .OFORM)) + #DECL ((OFORM OOFORM) <OR LIST FORM> (AV) <UVECTOR [REST ATOM]>) + <REPEAT (CHAR (OFORM .OFORM) TST) + #DECL ((CHAR) CHARACTER (OFORM) FORM (TST) <OR FALSE STRING>) + <COND + (<COND (<AND .MODFLG .MOD2FLG> <SET MODFLG <SET MOD2FLG <>>> <SET CHAR !\]> <>) + (<==? <SET CHAR <1 .STRNG>> !\(>)> + <SET STRNG <REST .STRNG>> + <PUTREST <REST .OOFORM <- <LENGTH .OOFORM> 1>> + (<FROB <FORM BIND>>)>) + (<==? .CHAR !\[> + <COND (<==? <SET CHAR <1 <SET STRNG <REST .STRNG>>>> !\&> + <SET STRNG <REST .STRNG>> + <PUTREST <REST .OOFORM <- <LENGTH .OOFORM> 1>> + (<FROB <FORM AND>>)>) + (<==? .CHAR !\!> + <SET STRNG <REST .STRNG>> + <PUTREST <REST .OOFORM <- <LENGTH .OOFORM> 1>> + (<FROB <FORM MAPF>>)>) + (<==? .CHAR !\:> + <SET ATM <STRING <2 .STRNG>>> + <SET STRNG <REST .STRNG 2>> + <PUTREST <REST .OOFORM <- <LENGTH .OOFORM> 1>> + (<FROB <FORM DEFINE <PARSE .ATM>>>)>) + (<==? .CHAR !\@> + <SET ATM <STRING <2 .STRNG>>> + <SET STRNG <REST .STRNG 2>> + <PUTREST <REST .OOFORM <- <LENGTH .OOFORM> 1>> + (<FROB <FORM APPLY <PARSE .ATM>>>)>) + (<==? .CHAR !\#> + <SET STRNG <REST .STRNG>> + <PUTREST <REST .OOFORM <- <LENGTH .OOFORM> 1>> + (<FROB <FORM NOT>>)>) + (<==? .CHAR !\?> + <SET STRNG <REST .STRNG>> + <PUTREST <REST .OOFORM <- <LENGTH .OOFORM> 1>> + (<FROB <FORM COND>>)>) + (<==? .CHAR !\*> + <SET STRNG <REST .STRNG>> + <PUTREST <REST .OOFORM <- <LENGTH .OOFORM> 1>> + (<FROB <FORM REPEAT>>)>) + (<==? .CHAR <ASCII 92>> + <SET STRNG <REST .STRNG>> + <PUTREST <REST .OOFORM <- <LENGTH .OOFORM> 1>> + (<FROB <FORM OR>>)>) + (<PUTREST <REST .OOFORM <- <LENGTH .OOFORM> 1>> + (<FROB <FORM PROG>>)>)>) + (<OR <==? .CHAR !\]> <==? .CHAR !\)>> + <SET STRNG <REST .STRNG>> + <RETURN .OFORM>) + (<==? .CHAR !\!> + <SET ATM <STRING <2 .STRNG>>> + <SET STRNG <REST .STRNG 2>> + <PUTREST <REST .OFORM <- <LENGTH .OFORM> 1>> + (<FORM ARG <PARSE .ATM>>)>) + (<==? .CHAR <ASCII 13>> <RETURN .OFORM>) + (<MEMQ .CHAR " "> <SET STRNG <REST .STRNG>>) + (<==? .CHAR !\@> + <COND (<==? <2 .STRNG> !\>> + <PUTREST <REST .OOFORM <- <LENGTH .OOFORM> 1>> + (<FORM RETURN>)> + <SET STRNG <REST .STRNG 2>>) + (<==? <2 .STRNG> !\<> + <PUTREST <REST .OOFORM <- <LENGTH .OOFORM> 1>> + (<FORM AGAIN>)> + <SET STRNG <REST .STRNG 2>>) + (<SET ATM <PARSE <STRING <2 .STRNG>>>> + <SET STRNG <REST .STRNG 2>> + <PUTREST <REST .OOFORM <- <LENGTH .OOFORM> 1>> + (<FORM GO .ATM>)>)>) + (<==? .CHAR !\%> + <SET STRNG <REST .STRNG>> + <PUTREST <REST .OOFORM <- <LENGTH .OOFORM> 1>> (<FORM SPACE-ALTMODE>)>) + (<==? .CHAR !\=> + <SET ATM <PARSE <STRING <2 .STRNG>>>> + <SET STRNG <REST .STRNG 2>> + <PUTREST <REST .OOFORM <- <LENGTH .OOFORM> 1>> + (<FORM GVAL .ATM>)>) + (<==? .CHAR !\|> <SET STRNG <REST .STRNG>>) + (<==? .CHAR !\-> + <SET STRNG <REST .STRNG>> + <PUTREST <REST .OOFORM <- <LENGTH .OOFORM> 1>> (#FALSE ())>) + (<==? .CHAR !\+> + <SET STRNG <REST .STRNG>> + <PUTREST <REST .OOFORM <- <LENGTH .OOFORM> 1>> (T)>) + (<==? .CHAR !\|> <SET STRNG <REST .STRNG>>) + (<==? .CHAR !\;> + <COND (<==? <2 .STRNG> !\!> + <SET STRNG <REST .STRNG>> + <SET MODFLG T> + <PUTREST <REST .OOFORM <- <LENGTH .OOFORM> 1>> + (<FROB <FORM MODIFIED>>)>) + (<SET STRNG <REST .STRNG>>)>) + (<==? .CHAR !\"> + <PROG ((NS .STRNG)) + #DECL ((NS) STRING) + <COND (<SET TST <MEMQ !\" <REST .NS>>> + <COND (<==? <1 <BACK .TST>> !\> <SET NS .TST> <AGAIN>) + (<PUTREST <REST .OFORM <- <LENGTH .OFORM> 1>> + (<SUBSTRUC <SET STRNG <REST .STRNG>> + 0 + <- <LENGTH .STRNG> + <LENGTH .TST>>>)> + <AND .MODFLG <SET MOD2FLG T>> + <SET STRNG <REST .TST>>)>) + (<ERROR UNEXPECTED-END-OF-COMMAND!-ERRORS>)>>) + (T + <SET ATM <NTH .AV <+ <- <ASCII .CHAR> <ASCII !\A>> 1>>> + <SET STRNG <REST .STRNG>> + <COND (<==? .ATM ILOPR> <ERROR ILLEGAL-COMMAND!-ERRORS .CHAR>) + (<PUTREST <REST .OOFORM <- <LENGTH .OOFORM> 1>> + <COND (<==? <1 <BACK .STRNG 2>> !\;> + (<SET OFORM <FORM MODIFIED .ATM>>)) + ((<SET OFORM <FORM .ATM>>))>>)>)>> + <AND <==? <1 .OOFORM> BIND> + <SET OOFORM <LIST !<REST .OOFORM>>>> + .OOFORM> + +<ENDPACKAGE> diff --git a/src/mprog2/inquir.1 b/src/mprog2/inquir.1 new file mode 100644 index 00000000..aed189bf --- /dev/null +++ b/src/mprog2/inquir.1 @@ -0,0 +1,42 @@ +<PACKAGE "INQUIRE"> + +<ENTRY INQUIRE> + +<DEFINE IPC-MHND (MS TYPM F1 F2 "TUPLE" FOO "AUX" CHN) + <PROG () + <COND (<NOT <==? .TYPM *400000000001*>> <RETURN>)> + <INT-LEVEL 0> + <PRINC "ACKNOWLEDGEMENT FROM "> + <PRINC .F1> <PRINC " "> <PRINC .F2> <TERPRI> + <SET CHN <OPEN "READ" .MS>> + <AND .CHN <RENAME .MS>> + <AND .CHN <FILECOPY .CHN>> + <TERPRI> + <TERPRI> + #DISMISS T>> + +<ON "IPC" ,IPC-MHND 1> + +<DEFINE INQUIRE (UNAM JNAM 'TODO "AUX" (PTODO <UNPARSE <FORM PRINT .TODO>>) (OBLIST ())) + <SEND .UNAM .JNAM + <UNPARSE <FORM + PROG LERR\ !-INTERRUPTS + '((OUTCHAN <OR <OPEN "PRINT" "DSK:_NQRY_ >"> + <OPEN "PRINT" "DSK:HUDINI;_NQRY_ >">>) + (EPRINT <ON "ERROR" #FUNCTION (("TUPLE" FRATM) + <COND (<ASSIGNED? INDENT-TO> <PRINC "*ERROR* "> + <PRINT .FRATM> <INT-LEVEL 0> + <RETURN T .INDENT-TO>) (T)>) 10000 0>) + (OBLIST ,OBLIST)) + '<SET LERR\ !-INTERRUPTS <FRAME <FRAME <FRAME>>>> + '<PUT .OUTCHAN 13 80> + <FORM PROG INDENT-TO () <FORM EVAL <FORM PARSE .PTODO>>> + '<OFF .EPRINT> + '<CLOSE .OUTCHAN> + <FORM SEND <UNAME> <JNAME> + '<STRING <10 .OUTCHAN> ";" + <7 .OUTCHAN> " " <8 .OUTCHAN>> + *400000000001*>>> + *400000000000*>> + +<ENDPACKAGE> \ No newline at end of file diff --git a/src/mprog2/iot8.udl001 b/src/mprog2/iot8.udl001 new file mode 100644 index 00000000..bffd4d5c --- /dev/null +++ b/src/mprog2/iot8.udl001 @@ -0,0 +1,45 @@ +<TITLE IOT8> + <DECLARE ("VALUE" FIX <PRIMTYPE WORD> CHANNEL)> + <HLRE A* AB> + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* IOT2> + <JRST FINIS> + +<INTERNAL-ENTRY IOT2 2> + <SUBM M* (P)> + <MOVE B* (TP)> ; "CHANNEL" + <MOVE B* 1(B)> + <*CALL [<SETZ> + <SIXBIT "IOT"> + <MOVE B> + <SETZ -2(TP)>]> ; "LOCATION OF TRANSFER" + <*LOSE *1400*> + <MOVSI A* <TYPE-CODE FIX>> + <SUB TP* [<(4) 4>]> + <JRST MPOPJ> + +<TITLE SIOT> + <DECLARE ("VALUE" FIX <PRIMTYPE WORD> CHANNEL)> + <HLRE A* AB> + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* SIOT2> + <JRST FINIS> + +<INTERNAL-ENTRY SIOT2 2> + <SUBM M* (P)> + <MOVE B* (TP)> ; "CHANNEL" + <MOVE B* 1(B)> + <*CALL [<SETZ> + <SIXBIT "IOT"> + <MOVSI *2000*> + <MOVE B> + <SETZ -2(TP)>]> ; "LOCATION OF TRANSFER" + <*LOSE *1400*> + <MOVSI A* <TYPE-CODE FIX>> + <SUB TP* [<(4) 4>]> + <JRST MPOPJ> + + +<END> diff --git a/src/mprog2/itime.udl037 b/src/mprog2/itime.udl037 new file mode 100644 index 0000000000000000000000000000000000000000..1770fd0a2a3d4deec91f79d72d43476cd3280fe2 GIT binary patch literal 4955 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 literal 0 HcmV?d00001 diff --git a/src/mprog2/jade.uagj36 b/src/mprog2/jade.uagj36 new file mode 100644 index 00000000..41ff628c --- /dev/null +++ b/src/mprog2/jade.uagj36 @@ -0,0 +1,273 @@ + +<PACKAGE "JADE"> + +<ENTRY JADE-INSTANCE + MUDDLEOB-USES + CONCEPT + USE-LIST + DOWNS? + DOWNS + CNTH? + CNTH + USES + SET-USES + ADD-USE + ADD-NUSE + NCONCEPT + DELETE-USE + DELETE-JOBJ + DELETE-USE&GC + DELETE&GC + DELETE&GCD + REPLACE-ELE + SUBST-ELE + MERGE + MATCH + BMATCH + FIND-COS + FIND-CO> + +<SETG INST-CNT 0 ;"instance stuff due to ERB"> + +<GDECL (INST-CNT) FIX> + +<DEFINE JADE-INSTANCE (X) + <NCONCEPT INSTANCE .X <SETG INST-CNT <+ ,INST-CNT 1>>>> + +<SET MUDDLEOB-USES (HOWDY) ;"reset this to reset the world"> + +<NEWTYPE CONCEPT LIST + ; +"1 of which is a vector of the down-structure (DOWNS) and the REST of which is the +use-list" + '<LIST DOWNS>> + +<DEFINE CONCEPT-PRINT (CO "AUX" (DO <DOWNS .CO>)) + #DECL ((CO) CONCEPT (DO) DOWNS) + <COND (<==? <CNTH .CO 1> INSTANCE> + <PRIN1 <CNTH .CO 2>> + <PRINC "-#INST-"> + <PRINC <CNTH .CO 3>>) + (<PRIN1 <CHTYPE .DO VECTOR>>)>> + +<PRINTTYPE CONCEPT ,CONCEPT-PRINT> + +<NEWTYPE USE-LIST LIST> + +<NEWTYPE DOWNS VECTOR> + +<SETG DOWNS 1 ;"returns the down structure of a CONCEPT"> + +<DEFINE DOWNS? (FROB) + <COND (<TYPE? .FROB CONCEPT> <DOWNS .CONCEPT>) + (ELSE #FALSE (DOWNS-OF-NON-CONCEPT))>> + +<MANIFEST DOWNS> + +<DEFINE CNTH (CONC NUM "AUX" (DNS <DOWNS .CONC>)) + #DECL ((CONC) CONCEPT (NUM) FIX) + ;"returns the nth element of the down structure or false if n too large" + <COND (<NOT <LENGTH? .DNS <- .NUM 1>>> <NTH .DNS .NUM>) + (ELSE #FALSE (CONCEPT-NOT-LONG-ENOUGH))>> + +<DEFINE CNTH? (FROB NUM) + #DECL ((NUM) FIX) + ;"returns the nth element of the down structure or false if n too large" + <COND (<TYPE? .FROB CONCEPT> <CNTH .FROB .NUM>) + (ELSE #FALSE (CNTH?-OF-NON-CONCEPT))>> + +<DEFINE USES (FROB) + #DECL ((VALUE) <OR FALSE USE-LIST>) ;"returns the uses of a CONCEPT" + <COND (<TYPE? .FROB CONCEPT> <CHTYPE <REST .FROB> USE-LIST>) + (ELSE <GETPROP .FROB .MUDDLEOB-USES>)>> + +<DEFINE SET-USES (JOBJ "OPTIONAL" (NUSES <>) ) + #DECL ((NUSES VALUE) <PRIMTYPE LIST>) + ;"sets the use-list of FROB to NUSES." + <COND (<TYPE? .JOBJ CONCEPT> + <PUTREST .JOBJ .NUSES> + <CHTYPE .NUSES USE-LIST>) + (<EMPTY? .NUSES> <PUTPROP .JOBJ .MUDDLEOB-USES> <>) + ;(<SET OUSES <GETPL .JOBJ .MUDDLEOB-USES>> + <SETLOC .OUSES <CHTYPE .NUSES USE-LIST>>) + (ELSE + <PUTPROP .JOBJ .MUDDLEOB-USES <CHTYPE .NUSES USE-LIST>> + <CHTYPE .NUSES USE-LIST>)>> + +<DEFINE ADD-USE (FROB USE "AUX" (OUSES <USES .FROB>)) + #DECL ((VALUE OUSES) <OR FALSE USE-LIST>) + <COND (<MEMQ .USE .OUSES> .OUSES) + (ELSE <SET-USES .FROB (.USE !.OUSES)>)>> + +<DEFINE ADD-NUSE (FROB NUSE "AUX" (OUSES <USES .FROB>)) + #DECL ((OUSES VALUE) <OR FALSE USE-LIST>) + <SET-USES .FROB (.NUSE !.OUSES)>> + +<DEFINE CONCEPT ("TUPLE" TUP) + #DECL ((VALUE) CONCEPT) + ;"like FIND-CO except that if the concept doesn't exist, it is created" + <COND (<FIND-CO !.TUP>) (<NCONCEPT !.TUP>)>> + +<DEFINE NCONCEPT ("TUPLE" TUP + "AUX" (NOB <CHTYPE (<CHTYPE [!.TUP] DOWNS>) CONCEPT>)) + ;"creates and returns new concept. can be used for making new instances" + <MAPF <> <FUNCTION (DOWN-OB) <ADD-USE .DOWN-OB .NOB>> .TUP> + .NOB> + +<DEFINE DELETE-USE (FROB OUSE "AUX" (USEL <USES .FROB>)) + #DECL ((USEL) <OR FALSE USE-LIST>) + <COND + (<EMPTY? .USEL> <>) + (<==? .OUSE <1 .USEL>> <SET-USES .FROB <REST .USEL>>) + (ELSE + <MAPR <> + <FUNCTION (RUSEL) + <COND (<LENGTH? .RUSEL 1> <>) + (<==? .OUSE <2 .RUSEL>> + <MAPLEAVE <PUTREST .RUSEL <REST .RUSEL 2>>>)>> + .USEL>)>> + +<DEFINE DELETE-JOBJ (OCONCEPT) + #DECL ((OCONCEPT) <OR CONCEPT ATOM>) + <COND (<TYPE? .OCONCEPT CONCEPT> + <MAPF <> + <FUNCTION (DOWN-OB) <DELETE-USE .DOWN-OB .OCONCEPT>> + <DOWNS .OCONCEPT>>)> + <MAPF <> ,DELETE-JOBJ <USES .OCONCEPT>>> + +<DEFINE DELETE-USE&GC (FROB OUSE "AUX" (USEL <USES .FROB>)) + #DECL ((USEL) <OR FALSE USE-LIST>) + <COND + (<EMPTY? .USEL> <>) + (<==? .OUSE <1 .USEL>> + <COND (<AND <LENGTH? .USEL 1> <TYPE? .FROB CONCEPT>> + <MAPF <> + <FUNCTION (DOWN-OB) <DELETE-USE&GC .DOWN-OB .FROB>> + <DOWNS .FROB>>) + (ELSE <SET-USES .FROB <REST .USEL>>)>) + (ELSE + <MAPR <> + <FUNCTION (RUSEL) + <COND (<LENGTH? .RUSEL 1>) + (<==? .OUSE <2 .RUSEL>> + <MAPLEAVE <PUTREST .RUSEL <REST .RUSEL 2>>>)>> + .USEL>)>> + +<DEFINE DELETE&GC (TH) + #DECL ((TH) <OR CONCEPT ATOM>) + <COND (<TYPE? .TH CONCEPT> + <MAPF <> + <FUNCTION (DOWN-OB) <DELETE-USE&GC .DOWN-OB .TH>> + <DOWNS .TH>>)> + <MAPF <> ,DELETE&GC <USES .TH>>> + +<DEFINE DELETE&GCD (TH) + #DECL ((TH) <OR CONCEPT ATOM>) + <COND (<TYPE? .TH CONCEPT> + <MAPF <> + <FUNCTION (DOWN-OB) <DELETE-USE&GC .DOWN-OB .TH>> + <DOWNS .TH>>)> + <MAPF <> ,DELETE-JOBJ <USES .TH>>> + +<DEFINE REPLACE-ELE (CON POS NELE) + ;"replace the POSth element in the downs of .CON with .NELE" + #DECL ((CON) CONCEPT) + <DELETE-USE&GC <NTH <DOWNS .CON> .POS> .CON> + <PUT <DOWNS .CON> .POS .NELE> + <ADD-USE .NELE .CON>> + +<DEFINE SUBST-ELE (CON OELE NELE) + ;"substitute the first occurance, in the downs of .CON, of .OELE in .NELE" + #DECL ((CON) CONCEPT) + <MAPR <> + <FUNCTION (RD) + <COND (<==? .OELE <1 .RD>> + <PUT .RD 1 .NELE> + <DELETE-USE&GC .OELE .CON> + <ADD-USE .NELE .CON> + <MAPLEAVE>)>> + <DOWNS .CON>>> + +<DEFINE MERGE (MERGED OLD) ;"make .OLD into .MERGED" + <MAPF <> + <FUNCTION (CON) + <MAPR <> + <FUNCTION (RD) + <COND (<==? .OLD <1 .RD>> + <PUT .RD 1 .MERGED> + <ADD-USE .MERGED .CON> + <MAPLEAVE>)>> + <DOWNS .CON>>> + <USES .OLD>> + <MAPF <> + <FUNCTION (DWN) <DELETE-USE&GC .DWN .OLD>> + <DOWNS .OLD>> + <SET-USES .OLD <>> + .MERGED> + +<NEWTYPE MATCH VECTOR + ;"used by the finding functions to match several possibilities"> + +<EVALTYPE MATCH VECTOR> + +<NEWTYPE BMATCH VECTOR + ;"used by the finding functions to match anything but several possibilities"> + +<EVALTYPE BMATCH VECTOR> + +<DEFINE FIND-COS ("TUPLE" TUP "AUX" (LTUP <LENGTH .TUP>)) + ;"returns all objects, if they exist in data-base, whose down structure is .TUP or +longer, except if the an element of the tuple is of type #MATCH, in which case any +of the elements of the #MATCH will match, or of type #BMATCH, in which case anything +but the elements of the #BMATCH will match. THERE MUST BE ONE ELEMENT OF THE TUPLE +WHICH IS NOT OF TYPE MATCH OR BMATCH." + #DECL ((LTUP) FIX (VALUE) <UVECTOR [REST CONCEPT]>) + <MAPF ,UVECTOR + <FUNCTION (FROB)<COND (<AND <TYPE? .FROB CONCEPT> + <L=? .LTUP <LENGTH <DOWNS .FROB>>> + <MAPF <> + <FUNCTION (DE TE) + <COND (<==? .DE .TE>) + (<AND <TYPE? .TE MATCH> + <MEMQ .DE .TE>>) + (<AND <TYPE? .TE BMATCH> + <NOT <MEMQ .DE .TE>>>) + (ELSE <MAPLEAVE <>>)>> + <DOWNS .FROB> + .TUP>> + .FROB) + (ELSE <MAPRET>)>> + <BGUL .TUP .LTUP>>> + +<DEFINE FIND-CO ("TUPLE" TUP "AUX" (LTUP <LENGTH .TUP>)) + ;"like FIND-COS except that one thing that matches is returned, rather than a vector." + #DECL ((LTUP) FIX (VALUE) <OR FALSE CONCEPT>) + <MAPF <> + <FUNCTION (FROB) + <COND (<AND <TYPE? .FROB CONCEPT> + <L=? .LTUP <LENGTH <DOWNS .FROB>>> + <MAPF <> + <FUNCTION (DE TE) + <COND (<==? .DE .TE>) + (<AND <TYPE? .TE MATCH> + <MEMQ .DE .TE>>) + (<AND <TYPE? .TE BMATCH> + <NOT <MEMQ .DE .TE>>>) + (ELSE <MAPLEAVE <>>)>> + <DOWNS .FROB> + .TUP>> + <MAPLEAVE .FROB>) + (ELSE #FALSE (CONCEPT-NOT-FOUND))>> + <BGUL .TUP .LTUP>>> + +<DEFINE BGUL (TUP LTUP) + #DECL ((TUP) TUPLE (LTUP) FIX) + <COND (<AND <G=? .LTUP 2> <USES <2 .TUP>>>) + (<AND <G=? .LTUP 3> <USES <3 .TUP>>>) + (<MAPF <> + <FUNCTION (ELT) <AND <USES .ELT> <MAPLEAVE <USES .ELT>>>> + <AND <G=? .LTUP 4> <REST .TUP 3>>>) + (<USES <1 .TUP>>)>> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog2/jcl.udl008 b/src/mprog2/jcl.udl008 new file mode 100644 index 00000000..00700a99 --- /dev/null +++ b/src/mprog2/jcl.udl008 @@ -0,0 +1,103 @@ +<PACKAGE "JCL"> + +<ENTRY JCL? READJCL> + +<TITLE JCL?> + <DECLARE ("VALUE" <OR FIX FALSE>)> + +<PSEUDO <SETG *BREAK-12 #OPCODE *045500000000*>> +<PSEUDO <SETG *ROPTION *54*>> + + <PUSHJ P* IJCLQ> + <JRST FINIS> + +<INTERNAL-ENTRY IJCLQ 0> + <SUBM M* (P)> + <*SUSET [<(*ROPTION) B>]> + <MOVSI A* <TYPE-CODE FIX>> + <TLNN B* *40000*> + <MOVSI A* <TYPE-CODE FALSE>> + <SETZM B> + <JRST MPOPJ> + +<SUB-ENTRY READJCL ("VALUE" <OR FALSE STRING>)> + +; "Read the JCL line of a job into a string. If an argument is +supplied and non-false, include the terminating character, whatever it +is." + <JUMPGE AB* RDJCL0> + <PUSH TP* (AB)> + <PUSH TP* 1(AB)> + <PUSHJ P* IREADJCL1> + <JRST FINIS> + +RDJCL0 <PUSHJ P* IREADJCL0> + <JRST FINIS> + +<INTERNAL-ENTRY IREADJCL0 0> + <SUBM M* (P)> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* [<0>]> + <JRST RDJCLC> + +<INTERNAL-ENTRY IREADJCL1 1> + <SUBM M* (P)> +RDJCLC <HRLZI A* *ROPTION> ; "See if there is one" + <*SUSET A> + <TLNN *40000*> + <JRST NOJCL> ; "No line there" + <MOVEI A* 16> + <MOVEI O* IBLOCK> + <PUSHJ P* RCALL> + <PUSH TP* [<80 (<TYPE-CODE STRING>)>]> + <HRLI B* *10700*> + <SUBI B* 1> + <PUSH TP* B> + <ADDI B* 1> + <HRLI B* 5> + <PUSH P* B> + <HRLZI A* *400005*> + <PUSH P* A> + <MOVEI A* -1 (P)> + <HRLI A* -2> + <*BREAK-12 A> + <SUB P* [<2 (2)>]> + <MOVE A* (TP)> + <SETZM C> +CNTLP <ILDB B* A> ; "Look for end of string" + <JUMPE B* FNDTRM> ; "Stop on ^@, ^C or carriage return" + <CAIE B* 3> + <CAIN B* 13> + <SKIPA> + <AOJA C* CNTLP> + +FNDTRM <GETYP D* -3(TP)> + <CAIE D* <TYPE-CODE FALSE>> + <ADDI C* 1> ; "yes, include it" + +FNDEND <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* C> + <MCALL 1 ISTRING> + <PUSH TP* A> + <PUSH TP* B> + <MOVE C* -2(TP)> ; "Now copy the string" + <HRRZ D* A> + <JUMPE D* JCLX> ; "If empty - done" + +CPYLP <ILDB A* C> + <IDPB A* B> + <SOJG D* CPYLP> + <MOVE A* -1(TP)> ; "Done - return the string" + <MOVE B* (TP)> + <SUB TP* [<4(4)>]> + <JRST JCLX> + +NOJCL <MOVE A* <TYPE-WORD FALSE>> ; "No line there - return false" + <SETZ B*> +JCLX <SUB TP* [<2(2)>]> + <JRST MPOPJ> + +<END> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog2/lex.1 b/src/mprog2/lex.1 new file mode 100644 index 00000000..408ee602 --- /dev/null +++ b/src/mprog2/lex.1 @@ -0,0 +1,2225 @@ +<PACKAGE "LEX"> + +<ENTRY LEXTABLE LEXID> + +<ENTRY LEX-LOOKUP LEX-INSERT LEX-GET LEX-COMPARE LEX-DELETE> + +<ENTRY LEX-FIX-STRING-TBL LEX-FIX-MASTER-TBL> + +<ENTRY MAKELST LSTINSERT LSTDELETE LSTOPS LSTLOOKUP LSTEVAL LSTPOSSYM LSTPRTSYMS + LSTEXACT LSTGETNAME LSTGETVAL LSTGETIVAL LSTALLPOS> + +<ENTRY LEX-SCRATCH-STRING> + +<NEWTYPE LEXID WORD> + +<NEWTYPE LEXTABLE VECTOR '<VECTOR <OR UVECTOR FALSE> + <OR UVECTOR FALSE> + <OR UVECTOR FALSE> + <OR UVECTOR FALSE>>> + +<SETG LEX-SCRATCH-STRING <ISTRING 200 !" >> + +<SETG LHALFBITS <BITS 18 18>> + + +<USE "CALSYM"> + + +<DEFINE LEX-FIX-MASTER-TBL (LXTBL) +#DECL ((LXTBL) LEXTABLE) +<COND (<TYPE? <1 .LXTBL> UVECTOR> + <PUT .LXTBL 4 ![!<1 .LXTBL>!]>)>> + + +<DEFINE LEX-FIX-STRING-TBL (LXTBL) +#DECL ((LXTBL) LEXTABLE) +<COND (<TYPE? <3 .LXTBL> UVECTOR> + <COND (<TYPE? <2 .LXTBL> UVECTOR> + <PUT .LXTBL 2 ![!<CHUTYPE <2 .LXTBL> WORD> + !<CHUTYPE <3 .LXTBL> WORD>!]>) + (<PUT .LXTBL 2 <3 .LXTBL>>)> + <PUT .LXTBL 3 <>> + <PUT <2 .LXTBL> 1 <PUTBITS <1 <2 .LXTBL>> ,LHALFBITS -1>>)> +.LXTBL> + + + +<DEFINE MAKELST (TITLE CONTENTS "OPTIONAL" (KILLER <>) + "AUX" + (LNT </ <LENGTH .CONTENTS> 2>) + (CNT 0) + (TBL <LEXTABLE>) + (VCT [.TBL <>]) + (STBL <CHTYPE [LSTOPS .VCT .TITLE .KILLER] SYMTABLE>)) +#DECL ((TITLE) STRING + (CONTENTS) <OR <VECTOR [REST STRING ANY]> FALSE> + (KILLER) ANY + (CNT LNT) FIX + (TBL) LEXTABLE + (VCT) <VECTOR LEXTABLE <OR VECTOR FALSE>> + (STBL) SYMTABLE) +<COND (<TYPE? .CONTENTS VECTOR> + <PUT .VCT 2 <REST <IVECTOR .LNT> .LNT>> + <PUT .TBL 1 <REST <CHUTYPE <IUVECTOR .LNT> LEXID> .LNT>> + <REPEAT ((V .CONTENTS)) + #DECL ((V) <VECTOR [REST STRING ANY]>) + <COND (<EMPTY? .V> <RETURN>) + (<TYPE? <1 .V> STRING> + <SET CNT <+ .CNT 1 </ <LENGTH <1 .V>> 5> + <OR <AND <0? <MOD <LENGTH <1 .V>> 5>> 0> 1>>>) + (<ERROR NOT-STRING/VALUE-PAIRS!-ERRORS>)> + <SET V <REST .V 2>>> + <PUT .TBL 3 <REST <IUVECTOR <+ 1 .CNT> #WORD *0*> .CNT>> + <REPEAT ((V .CONTENTS)) + #DECL ((V) <VECTOR [REST STRING ANY]>) + <COND (<EMPTY? .V> <RETURN>)> + <LSTINSERT .STBL <1 .V> <2 .V>> + <SET V <REST .V 2>>> + <PUT .TBL 2 <3 .TBL>> + <PUT .TBL 3 <>>)> +.STBL> + + + +<DEFINE LSTOPS (OPC "TUPLE" T "AUX" (LNT <LENGTH .T>)) +#DECL ((OPC LNT) FIX (T) <TUPLE ANY>) +<COND (<==? 1 .OPC> + <AND <==? 4 .LNT> + <LSTLOOKUP <1 .T> <2 .T> <3 .T> <4 .T>>>) + (<==? 2 .OPC> + <AND <==? 2 .LNT> + <LSTEVAL <1 .T> <2 .T>>>) + (<==? 3 .OPC> + <COND (<==? 3 .LNT> <LSTPOSSYM <1 .T> <2 .T> <3 .T> <> <>>) + (<==? 4 .LNT> <LSTPOSSYM <1 .T> <2 .T> <3 .T> <4 .T> <>>) + (<==? 5 .LNT> <LSTPOSSYM <1 .T> <2 .T> <3 .T> <4 .T> <5 .T>>)>) + (<==? 4 .OPC> + <AND <==? 1 .LNT> + <LSTPRTSYMS <1 .T>>>) + (<==? 5 .OPC> + <AND <==? 2 .LNT> + <LSTEXACT <1 .T> <2 .T>>>) + (<==? 6 .OPC> + <AND <==? 3 .LNT> + <LSTALLPOS <1 .T> <2 .T> <3 .T>>>)>> + + + +<DEFINE LSTGETNAME (TBL ID "OPTIONAL" (STR <>) "AUX" VAL) +#DECL ((TBL) SYMTABLE (ID) LEXID (STR) <OR STRING FALSE> (VAL) ANY) +<COND (<AND <TYPE? .TBL SYMTABLE> + <TYPE? <SET VAL <2 .TBL>> VECTOR> + <==? 2 <LENGTH .VAL>> + <TYPE? <1 .VAL> LEXTABLE>> + <LEX-GET <1 .VAL> .ID .STR>)>> + + +;"#################################################################### +#####################################################################" + +<TITLE LEXTABLE> + +<DECLARE ("VALUE" LEXTABLE)> + + <PUSHJ P* ILEXTABLE> + <JRST FINIS> + +<INTERNAL-ENTRY ILEXTABLE 0> + + <SUBM M* (P)> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* [4]> + <PUSH TP* <TYPE-WORD FALSE>> + <PUSH TP* [0]> + <MCALL 2 IVECTOR> + <MOVEI O* <TYPE-CODE LEXTABLE>> + <PUTYP O* A> + <JRST MPOPJ> + + +;"#################################################################### +#####################################################################" + + +<SUB-ENTRY LEX-LOOKUP ("VALUE" <OR LEXID FALSE> LEXTABLE STRING "OPTIONAL" FIX)> + + <MOVEI A* 0> + <PUSH TP* (AB)> + <ADDI A* 1> + <AOBJN AB* HERE -2> + <CAIE A* 6> + <JRST LKUP2> + <PUSHJ P* ILEX-LOOKUP3> + <JRST FINIS> +LKUP2 <PUSHJ P* ILEX-LOOKUP2> + <JRST FINIS> + + +<INTERNAL-ENTRY ILEX-LOOKUP2 2> + + <SUBM M* (P)> + <HRRZ A* -1(TP)> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* A> + <JRST ILEX-LOOKUP> + + +<INTERNAL-ENTRY ILEX-LOOKUP3 3> + + <SUBM M* (P)> +ILEX-LOOKUP <GETYP O* -5(TP)> + <CAIE O* <TYPE-CODE LEXTABLE>> + <JRST NOTLEXTBL> + <GETYP O* -3(TP)> + <CAIE O* <TYPE-CODE STRING>> + <JRST BADARG> + <GETYP O* -1(TP)> + <CAIE O* <TYPE-CODE FIX>> + <JRST BADARG> + <DMOVE A* -5(TP)> + <DMOVE C* -3(TP)> + <MOVE E* (TP)> + <PUSHJ P* LEXSEARCH> + <JUMPLE C* LKUPFLS> + <MOVEI A* 0> + <MOVEI O* <TYPE-CODE LEXID>> + <PUTYP O* A> + <MOVE B* (B)> +LKUPRET <SUB TP* [<6(6)>]> + <JRST MPOPJ> +LKUPFLS <MOVE A* <TYPE-WORD FALSE>> + <MOVEI B* 0> + <JRST LKUPRET> + + +;"#################################################################### +#####################################################################" + + +<SUB-ENTRY LEX-INSERT ("VALUE" <OR LEXID FALSE> LEXTABLE STRING "OPTIONAL" FIX)> + + + <MOVEI A* 0> + <PUSH TP* (AB)> + <ADDI A* 1> + <AOBJN AB* HERE -2> + <CAIE A* 6> + <JRST LINS2> + <PUSHJ P* ILEX-INSERT3> + <JRST FINIS> +LINS2 <PUSHJ P* ILEX-INSERT2> + <JRST FINIS> + + +<INTERNAL-ENTRY ILEX-INSERT2 2> + + <SUBM M* (P)> + <HRRZ A* -1(TP)> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* A> + <JRST ILEX-INSERT> + + +<INTERNAL-ENTRY ILEX-INSERT3 3> + + <SUBM M* (P)> +ILEX-INSERT <PUSHJ P* LINSUV> + <SUB TP* [<6(6)>]> + <GETYP O* A> + <CAIE O* <TYPE-CODE UVECTOR>> + <JRST MPOPJ> + <MOVE A* <TYPE-WORD LEXID>> + <MOVE B* (B)> + <JRST MPOPJ> + + + +;"#################################################################### +#####################################################################" + + +;"-5(TP)/ LEXTABLE +-3(TP)/ STRING +-1(TP)/ FIX, length of string + +==> A&B/ UVECTOR, cptr to slot of LEXID tbl where LEXID of STRING + either existed or was inserted." +LINSUV <SUBM M* (P)> + <GETYP O* -5(TP)> + <CAIE O* <TYPE-CODE LEXTABLE>> + <JRST NOTLEXTBL> + <GETYP O* -3(TP)> + <CAIE O* <TYPE-CODE STRING>> + <JRST BADARG> + <GETYP O* -1(TP)> + <CAIE O* <TYPE-CODE FIX>> + <JRST BADARG> + <DMOVE A* -5(TP)> + <DMOVE C* -3(TP)> + <MOVE E* (TP)> + <PUSHJ P* LEXSEARCH> + <SKIPLE C> + <JRST MPOPJ> ;"Returns cptr to slot in LEXID tbl where LEXID exists" +;"Here if string doesn't exist in table, insert it +A&B/ cptr to slot of UVECTOR where the LEXID belongs" + <DPUSH TP* A> + <DMOVE A* -7(TP)> + <GETYP O* 6(B)> + <CAIE O* <TYPE-CODE UVECTOR>> ;"Skips if a master LEXID tbl exists" + <JRST LINSNOMAST> +;"Here if a master LEXID tbl exists, search it" + <DMOVE C* -5(TP)> + <MOVE E* -2(TP)> + <PUSHJ P* MLEXSEARCH> + <JUMPLE C* LINSMAST> ;"Jumps if not in master either" +;"Here if in master LEXID tbl" + <MOVE B* (B)> ;"B/ LEXID from master table" + <JRST LINSID> + +;"Here if string not in table and no master LEXID table exists" +LINSNOMAST <DMOVE A* -7(TP)> + <DMOVE C* -5(TP)> + <MOVE E* -2(TP)> + <PUSHJ P* LEX-INSERT-STRING> +;"B/ LEXID of string inserted into LEXTABLE's string tbl +(TP)/ cptr to slot in LEXID where new LEXID belongs" +LINSID <MOVE E* B> ;"E/ LEXID of new string" + <DPOP TP* C> ;"C&D/ cptr to slot in LEXID tbl where new LEXID + belongs (or FALSE)" + <DMOVE A* -5(TP)> + <PUSHJ P* LEX-INSERT-LEXID> + <JRST MPOPJ> ;"Returns cptr to slot in LEXID tbl where new LEXID exists" + +;"Here if master LEXID table exists, but string not in it either." +LINSMAST <DPUSH TP* A> ;"Saves cptr to slot in master tbl where new LEXID belongs" + <DMOVE A* -9(TP)> + <DMOVE C* -7(TP)> + <MOVE E* -4(TP)> + <PUSHJ P* LEX-INSERT-STRING> +;"A&B/ LEXID of inserted string" + <DPOP TP* C> ;"C&D/ cptr to slot in master LEXID tbl" + <MOVE E* B> ;"E/ new LEXID" + <DPUSH P* A> + <DMOVE A* -7(TP)> ;"A&B/ LEXTABLE" + <PUSHJ P* MLEX-INSERT-LEXID> + <DPOP P* A> + <JRST LINSID> + + + + + +;"#################################################################### +#####################################################################" + + +<SUB-ENTRY LEX-DELETE ("VALUE" <OR LEXID FALSE> LEXTABLE STRING "OPTIONAL" FIX)> + + + <MOVEI A* 0> + <PUSH TP* (AB)> + <ADDI A* 1> + <AOBJN AB* HERE -2> + <CAIE A* 6> + <JRST LDEL2> + <PUSHJ P* ILEX-DELETE3> + <JRST FINIS> +LDEL2 <PUSHJ P* ILEX-DELETE2> + <JRST FINIS> + + +<INTERNAL-ENTRY ILEX-DELETE2 2> + + <SUBM M* (P)> + <HRRZ A* -1(TP)> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* A> + <JRST ILEX-DELETE> + + +<INTERNAL-ENTRY ILEX-DELETE3 3> + + <SUBM M* (P)> +ILEX-DELETE <PUSHJ P* LDELUV> + <SUB TP* [<4(4)>]> + <DPOP TP* A> + <JRST MPOPJ> + + + +;"#################################################################### +#####################################################################" + + +;"-5(TP)/ LEXTABLE +-3(TP)/ STRING +-1(TP)/ FIX, length of string + +==> A/ offset of removed LEXID" + +LDELUV <SUBM M* (P)> + <GETYP O* -5(TP)> + <CAIE O* <TYPE-CODE LEXTABLE>> + <JRST NOTLEXTBL> + <GETYP O* -3(TP)> + <CAIE O* <TYPE-CODE STRING>> + <JRST BADARG> + <GETYP O* -1(TP)> + <CAIE O* <TYPE-CODE FIX>> + <JRST BADARG> + <DMOVE A* -5(TP)> + <DMOVE C* -3(TP)> + <MOVE E* (TP)> + <PUSHJ P* LEXSEARCH> + <JUMPLE C* LDELNOMCH> ;"jumps if string not found" + <DMOVE C* A> + <DMOVE A* -5(TP)> + <HRRZ O* D> + <HRRZ E* 1(B)> + <SUB O* E> ;"O/ offset of LEXID on LEXID tbl" + <PUSH P* O> ;"Saves offset on stack" + <PUSH P* (D)> ;"Saves LEXID on P-stack" + <PUSHJ P* LEX-DELETE-LEXID> + <DMOVE A* -5(TP)> + <POP P* C> + <GETYP O* 6(B)> + <CAIE O* <TYPE-CODE UVECTOR>> + <PUSHJ P* LEX-DELETE-STRING> + <POP P* A> + <JRST MPOPJ> + +LDELNOMCH <HRREI A* -1> + <JRST MPOPJ> + + + +;"#################################################################### +#####################################################################" + + +<SUB-ENTRY LEX-COMPARE ("VALUE" FIX LEXTABLE LEXID STRING FIX)> + + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* ILEX-COMPARE> + <JRST FINIS> + +<INTERNAL-ENTRY ILEX-COMPARE 4> + + <SUBM M* (P)> + <MOVE A* -4(TP)> + <MOVE B* (TP)> + <DMOVE C* -3(TP)> + <SUB TP* [<6(6)>]> + <DPUSH TP* C> + <MOVEI C* 0> + <PUSHJ P* LEXCOMP> + <MOVE B* A> + <MOVE A* <TYPE-WORD FIX>> + <SUB TP* [<4(4)>]> + <JRST MPOPJ> + + +;"#################################################################### +#####################################################################" + + +<SUB-ENTRY LEX-GET ("VALUE" <OR STRING FALSE> LEXTABLE LEXID <OR STRING FALSE>)> + + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* ILEX-GET> + <JRST FINIS> + +<INTERNAL-ENTRY ILEX-GET 3> + + <SUBM M* (P)> + <GETYP O* -1(TP)> + <CAIN O* <TYPE-CODE STRING>> + <JRST LEXGET1> +;"Here if have to build string" + <HLRZ A* -2(TP)> + <IDIVI A* 5> + <SKIPE B> + <AOS A> + <PUSH P* A> + <MOVEI O* IBLOCK> + <PUSHJ P* RCALL> + <POP P* A> + <IMULI A* 5> + <MOVEI O* <TYPE-CODE STRING>> + <PUTYP O* A> + <HLRE C* B> + <SUBM B* C> + <MOVEI O* <TYPE-CODE CHARACTER>> + <PUTYP O* (C)> + <SUBI B* 1> + <HRLI B* *010700*> + <DMOVEM A* -1(TP)> +LEXGET1 <MOVE E* -4(TP)> + <HLRE D* 3(E)> + <MOVMS D> + <HRRZ A* -2(TP)> + <CAML A* D> + <JRST LEXGETUPD> + <ADD A* 3(E)> +LEXGET2 <HRRZ B* -1(TP)> + <IDIVI B* 5> + <SKIPE C> + <ADDI B* 1> + <HRRZ C* (A)> + <MOVE E* C> + <IDIVI C* 5> + <SKIPE D> + <ADDI C* 1> + <SUB B* C> + <SKIPGE B> + <JRST TOOSMALL> + <ADD B* (TP)> + <HLRZ O* (TP)> + <CAIN O* *010700*> + <ADDI B* 1> + <HRLI D* 1(A)> + <HRR D* B> + <ADD C* B> + <BLT D* -1(C)> + <MOVE A* E> + <MOVEI O* <TYPE-CODE STRING>> + <PUTYP O* A> + <SUBI B* 1> + <HRLI B* *010700*> + <SUB TP* [<6(6)>]> + <JRST MPOPJ> + + +LEXGETUPD <GETYP O* 4(E)> + <CAIE O* <TYPE-CODE UVECTOR>> + <JRST LEXGETFLS> + <HLRE C* 5(E)> + <MOVMS C> + <SUB A* D> + <CAML A* C> + <JRST LEXGETFLS> + <ADD A* 5(E)> + <JRST LEXGET2> + +LEXGETFLS <MOVE A* <TYPE-WORD FALSE>> + <MOVEI B* 0> + <SUB TP* [<6(6)>]> + <JRST MPOPJ> + + +TOOSMALL <DMOVE A* -1(TP)> + <DPUSH TP* <PQUOTE SUPPLIED-STRING-TOO-SMALL!-ERRORS>> + <DPUSH TP* A> + <MCALL 2 ERROR> + <JRST TOOSMALL> + +NOTLEXTBL <DPUSH TP* <PQUOTE FIRST-ARG-NOT-A-LEXTABLE!-ERRORS>> + <MCALL 1 ERROR> + <JRST NOTLEXTBL> + +BADARG <DPUSH TP* <PQUOTE ILLEGAL-ARGUMENT!-ERRORS>> + <MCALL 1 ERROR> + <JRST BADARG> + + + +;"#################################################################### +#####################################################################" + + +<SUB-ENTRY LSTEXACT ("VALUE" <OR SYMBOL FALSE> STRING + <VECTOR LEXTABLE <OR VECTOR UVECTOR FALSE>>)> + + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* ILSTEXACT> + <JRST FINIS> + +<INTERNAL-ENTRY ILSTEXACT 2> + + <SUBM M* (P)> + <MOVE E* (TP)> + <DMOVE A* (E)> + <GETYP O* A> + <CAIE O* <TYPE-CODE LEXTABLE>> + <JRST EXACTFLS> + <DMOVE C* -3(TP)> + <HRRZ E* C> + <PUSHJ P* LEXSEARCH> + <JUMPLE C* EXACTFLS> + <HRRZ C* B> ;"C/ ptr to id's slot in LEXID table" + <MOVE E* (TP)> + <DMOVE A* (E)> + <HRRZ D* 1(B)> ;"D/ ptr to beginning of LEXID table" + <SUB C* D> ;"C/ offset of id on LEXID table" +;"A&B/ LEXTABLE +C/ offset of LEXID" +LSTBLDSYM <HLRE D* 1(B)> + <MOVMS D> + <CAMG D* C> + <JRST OUT-OF-RANGE> + <PUSH P* C> + <DPUSH TP* A> + <PUSH TP* <TYPE-WORD LEXID>> + <ADD C* 1(B)> + <PUSH TP* (C)> + <PUSH TP* <TYPE-WORD FALSE>> + <PUSH TP* [0]> + <MCALL 3 LEX-GET> + <POP P* C> ;"C/ offset of value slot on value table" + <GETYP O* A> + <CAIE O* <TYPE-CODE STRING>> + <JRST EXACTFLS> + <DPUSH TP* A> + <MOVE E* -2(TP)> + <GETYP O* 2(E)> + <CAIE O* <TYPE-CODE VECTOR>> + <CAIN O* <TYPE-CODE UVECTOR>> + <SKIPA> + <JRST EXACTNOVAL> + <HLRE D* 3(E)> + <MOVMS D> + <CAIE O* <TYPE-CODE UVECTOR>> + <ASH D* -1> + <CAMG D* C> + <JRST EXACTNOVAL> + <MOVE D* 3(E)> ;"D/ cptr to value table" + <CAIE O* <TYPE-CODE VECTOR>> + <JRST EXACTUVAL> + <ASH C* 1> + <ADD D* C> ;"D/ ptr to value slot of id" + <DPUSH TP* (D)> +EXACTVAL <MCALL 2 VECTOR> + <MOVE A* <TYPE-WORD SYMBOL>> +EXACTRET <SUB TP* [<4(4)>]> + <JRST MPOPJ> + +EXACTNOVAL <MOVE D* 1(E)> + <MOVE D* 1(D)> ;"D/ cptr to LEXID tbl" + <ADD D* C> + <PUSH TP* <TYPE-WORD LEXID>> + <PUSH TP* (D)> + <JRST EXACTVAL> + +EXACTUVAL <ADD C* D> + <MOVE B* (C)> + <HLRE C* D> + <SUBM D* C> + <GETYP O* (C)> + <MOVS A* O> + <DPUSH TP* A> + <JRST EXACTVAL> + +EXACTFLS <MOVE A* <TYPE-WORD FALSE>> + <MOVEI B* 0> + <JRST EXACTRET> + +OUT-OF-RANGE <DPUSH TP* <PQUOTE ARG-OUT-OF-RANGE!-ERRORS>> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* C> + <MCALL 2 ERROR> + <JRST OUT-OF-RANGE> + + + +;"#################################################################### +#####################################################################" + + +<SUB-ENTRY LSTGETVAL ("VALUE" ANY STRING FIX SYMTABLE)> + + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* ILSTGETVAL> + <JRST FINIS> + + +<INTERNAL-ENTRY ILSTGETVAL 3> + + <SUBM M* (P)> + <MOVE E* (TP)> + <MOVE E* 3(E)> ;"E/ cptr to vector with LEXTABLE and value table" + <DMOVE A* (E)> + <DMOVE C* -5(TP)> + <MOVE E* -2(TP)> + <PUSHJ P* LEXSEARCH> + <JUMPLE C* LGVNOVAL> +;"A&B/ cptr to slot of LEXID tbl where matching LEXID exists" + <MOVE E* (TP)> + <MOVE E* 3(E)> + <MOVE D* 1(E)> ;"D/ cptr to LEXTABLE" + <HRRZ C* 1(D)> + <SUBI B* (C)> ;"B/ ...,,offset of LEXID" + <GETYP O* 2(E)> + <CAIN O* <TYPE-CODE VECTOR>> + <JRST LGVCTVAL> + <CAIE O* <TYPE-CODE UVECTOR>> + <JRST LGVNOVAL> + <ADD B* 3(E)> + <HLRE D* 3(E)> + <MOVMS D> + <ADD D* 3(E)> + <HRRZS D> + <CAIG D* (B)> + <JRST LGVNOVAL> + <GETYP O* (D)> + <MOVEI A* 0> + <PUTYP O* A> + <MOVE B* (B)> + <JRST LGVRET> + +LGVCTVAL <HRRZS B> + <IMULI B* 2> + <HRLS B> + <ADD B* 3(E)> + <JUMPGE B* LGVNOVAL> + <DMOVE A* (B)> + <JRST LGVRET> + +LGVNOVAL <MOVE A* <TYPE-WORD FALSE>> + <MOVEI B* 0> +LGVRET <SUB TP* [<6(6)>]> + <JRST MPOPJ> + + +;"#################################################################### +#####################################################################" + + +<SUB-ENTRY LSTGETIVAL ("VALUE" <OR VECTOR UVECTOR FALSE> SYMTABLE <OR LEXID STRING>)> + + + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* ILSTGETIVAL> + <JRST FINIS> + + +<INTERNAL-ENTRY ILSTGETIVAL 2> + + <SUBM M* (P)> + <DMOVE A* -1(TP)> + <GETYP O* A> + <CAIE O* <TYPE-CODE LEXID>> + <JRST LGIVTRYSTR> + <MOVE E* -2(TP)> + <MOVE E* 3(E)> ;"E/ cptr to vector with LEXTABLE and value table" + <DPUSH TP* (E)> ;"pushes LEXTABLE onto stack" + <PUSH TP* -3(TP)> + <PUSH TP* -3(TP)> + <MOVE E* <MQUOTE '%<RGLOC LEX-SCRATCH-STRING T>>> + <ADD E* GLOTOP 1 (TVP)> + <DPUSH TP* (E)> ;"pushes scratch string onto stack" + <MCALL 3 LEX-GET> + <GETYP O* A> +LGIVTRYSTR <CAIE O* <TYPE-CODE STRING>> + <JRST LGIVNOVAL> + <DMOVE C* A> + <MOVE E* -2(TP)> + <MOVE E* 3(E)> + <DMOVE A* (E)> ;"A&B/ LEXTABLE" + <HRRZ E* C> + <PUSHJ P* LEXSEARCH> + <JUMPLE C* LGIVNOVAL> +;"A&B/ cptr to slot of LEXID tbl where matching LEXID exists" + <MOVE E* -2(TP)> + <MOVE E* 3(E)> + <MOVE D* 1(E)> ;"D/ cptr to LEXTABLE" + <HRRZ C* 1(D)> + <SUBI B* (C)> ;"B/ ...,,offset of LEXID" + <GETYP O* 2(E)> + <CAIE O* <TYPE-CODE UVECTOR>> + <CAIN O* <TYPE-CODE VECTOR>> + <SKIPA> + <JRST LGIVNOVAL> + <CAIN O* <TYPE-CODE VECTOR>> + <ASH B* 1> + <HRLS B> + <ADD B* 3(E)> + <JUMPGE B* LGIVNOVAL> + <MOVE A* 2(E)> + <JRST LGIVRET> + +LGIVNOVAL <MOVE A* <TYPE-WORD FALSE>> + <MOVEI B* 0> +LGIVRET <SUB TP* [<4(4)>]> + <JRST MPOPJ> + + +;"#################################################################### +#####################################################################" + + +<SUB-ENTRY LSTEVAL ("VALUE" <OR SYMBOL FALSE> FIX + <VECTOR LEXTABLE <OR VECTOR UVECTOR FALSE>>)> + + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* ILSTEVAL> + <JRST FINIS> + +<INTERNAL-ENTRY ILSTEVAL 2> + + <SUBM M* (P)> + <GETYP O* -3(TP)> + <CAIE O* <TYPE-CODE FIX>> + <JRST BADARG> + <GETYP O* -1(TP)> + <CAIE O* <TYPE-CODE VECTOR>> + <JRST BADARG> + <MOVE E* (TP)> + <DMOVE A* (E)> + <GETYP O* A> + <CAIE O* <TYPE-CODE LEXTABLE>> + <JRST BADARG> + <MOVE C* -2(TP)> + <JRST LSTBLDSYM> + + +;"#################################################################### +#####################################################################" + + +<SUB-ENTRY LSTINSERT ("VALUE" <OR LEXID FALSE> SYMTABLE STRING + "OPTIONAL" ANY FIX)> + <MOVE A* AB> + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <HRRZ B* AB> + <SUBI B* (A)> + <CAIN B* 8> + <JRST LSTI4> + <CAIE B* 6> + <JRST LSTI2> + <PUSHJ P* ILSTINSERT3> + <JRST FINIS> + +LSTI2 <PUSHJ P* ILSTINSERT2> + <JRST FINIS> + +LSTI4 <PUSHJ P* ILSTINSERT4> + <JRST FINIS> + +<INTERNAL-ENTRY ILSTINSERT2 2> + + <PUSH TP* <TYPE-WORD UNBOUND>> + <PUSH TP* [-1]> + <JRST ILSTINSERT3> + +<INTERNAL-ENTRY ILSTINSERT4 4> + + <SUBM M* (P)> + <DPOP TP* A> + <GETYP O* A> + <CAIE O* <TYPE-CODE FIX>> + <JRST LSTINS1> + <HRRZ C* -3(TP)> + <CAIGE C* B> + <JRST LSTIN1> + <PUSH P* B> + <JRST LSTIN2> + + +<INTERNAL-ENTRY ILSTINSERT3 3> + + <SUBM M* (P)> +LSTIN1 <HRRZ O* -3(TP)> + <PUSH P* O> +LSTIN2 <GETYP O* -5(TP)> + <CAIE O* <TYPE-CODE SYMTABLE>> + <JRST BADARG> + <GETYP O* -3(TP)> + <CAIE O* <TYPE-CODE STRING>> + <JRST BADARG> + <MOVE E* -4(TP)> + <GETYP O* 2(E)> + <CAIE O* <TYPE-CODE VECTOR>> + <JRST BADARG> + <MOVE D* 3(E)> ;"cptr to VECTOR" + <GETYP O* (D)> + <CAIE O* <TYPE-CODE LEXTABLE>> + <JRST BADARG> + <DMOVE A* (D)> + <DMOVE C* -3(TP)> + <DPUSH TP* A> + <DPUSH TP* C> + <PUSH TP* <TYPE-WORD FIX>> + <POP P* E> ;"E/ length of string" + <PUSH TP* E> + <PUSHJ P* LINSUV> + <SUB TP* [<6(6)>]> + <GETYP O* A> + <CAIE O* <TYPE-CODE UVECTOR>> + <JRST LSTINSFLS> + <MOVE E* -4(TP)> ;"E/ cptr to SYMTABLE" + <MOVE D* 3(E)> + <GETYP O* 2(D)> + <CAIE O* <TYPE-CODE UVECTOR>> + <CAIN O* <TYPE-CODE VECTOR>> + <SKIPA> + <JRST LSTINSNOVAL> ;"Jumps if no value vector (or uvector)" + <GETYP A* -1(TP)> + <CAIE A* <TYPE-CODE UNBOUND>> + <JRST HERE 4> + <MOVE A* <TYPE-WORD FALSE>> + <MOVEM A* -1(TP)> + <SETZM (TP)> + <HLRE C* 3(D)> + <MOVMS C> + <CAIE O* <TYPE-CODE UVECTOR>> + <ASH C* -1> + <MOVE A* 1(D)> ;"A/ cptr to LEXTABLE" + <HLRE A* 1(A)> + <MOVMS A> + <CAIE A* 1(C)> ;"Skips if LEXID tbl 1 longer than value tbl" + <JRST LSTINSRET> +;"Here if need to insert new value into value tbl" + <PUSH TP* <TYPE-WORD UVECTOR>> + <PUSH TP* B> + <MOVE E* 1(D)> ;"E/ cptr to LEXTABLE" + <HRRZ C* 1(E)> ;"C/ ptr to beginning of LEXID table" + <SUBM B* C> + <HRRZS C> ;"C/ offset of new LEXID on LEXID tbl" + <MOVE B* 3(D)> + <HLRE A* B> + <SUBM B* A> + <HLRZ B* 1(A)> + <HLRE A* 3(D)> + <MOVMS A> + <ADDI A* 3> + <CAIE O* <TYPE-CODE UVECTOR>> + <ADDI A* 1> + <CAMGE B* A> ;"Skips if enough slush space for new value" + <JRST LSTINSNEWVAL> +;"O/ type code of value vector/uvector +C/ offset of new value +D/ cptr to two-element vector" + <MOVE B* 3(D)> + <CAIE O* <TYPE-CODE VECTOR>> + <JRST LSTINS1> + <SUB B* [<2(2)>]> + <ASH C* 1> + <SKIPA> +LSTINS1 <SUB B* [<1(1)>]> + <JUMPE C* LSTINS2> + <HRL A* 3(D)> + <HRR A* B> + <HRRZ E* B> + <ADDI E* (C)> + <BLT A* -1(E)> +LSTINS2 <HRLS C> + <ADD C* B> ;"C/ cptr to slot for new value" + <MOVEM B* 3(D)> + <CAIE O* <TYPE-CODE VECTOR>> + <JRST LSTINS3> + <DMOVE A* -3(TP)> + <DMOVEM A* (C)> +LSTINSPOP <DPOP TP* A> +;"Here to return LEXID of new/old symbol +A&B/ cptr to slot in LEXID tbl where LEXID exists" +LSTINSRET <SUB TP* [<6(6)>]> + <MOVE A* <TYPE-WORD LEXID>> + <MOVE B* (B)> + <JRST MPOPJ> + +LSTINS3 <MOVE A* -2(TP)> + <MOVEM A* (C)> + <JRST LSTINSPOP> + +LSTINSFLS <SUB TP* [<6(6)>]> + <MOVE A* <TYPE-WORD FALSE>> + <MOVEI B* 0> + <JRST MPOPJ> + +;"Here if SYMTABLE has no value vector/uvector +A&B/ cptr to slot in LEXID tbl where new LEXID is stored +D/ cptr to two-element VECTOR +E/ cptr to SYMTABLE" +LSTINSNOVAL <GETYP O* -1(TP)> + <CAIN O* <TYPE-CODE UNBOUND>> + <JRST LSTINSRET> ;"Jumps if no value vector/uvector needed" + <MOVE E* 1(D)> ;"E/ cptr to LEXTABLE" + <HLRE C* 1(E)> + <MOVMS C> + <CAIE C* 1> + <JRST LSTINSERR> + <DPUSH TP* A> + <MOVEI A* 1> + <MOVEI O* IBLOK1> + <PUSHJ P* RCALL> + <MOVE E* -6(TP)> + <MOVE D* 3(E)> + <DMOVEM A* 2(D)> + <DMOVE C* -3(TP)> + <DMOVEM C* (B)> + <JRST LSTINSPOP> + +;"Here when old value vector/uvector hasn't enough slush space for new value +O/ type code of value vector/uvector +C/ offset of new value +D/ cptr to two-element vector" +LSTINSNEWVAL <PUSH P* C> + <HLRE A* 3(D)> + <MOVMS A> + <MOVEI O* IBLOCK> + <GETYP C* 2(D)> + <CAIE C* <TYPE-CODE VECTOR>> + <JRST HERE 3> + <ASH A* -1> + <MOVEI O* IBLOK1> + <ADDI A* 11> + <PUSHJ P* RCALL> + <MOVE E* -6(TP)> + <MOVE D* 3(E)> + <GETYP O* 2(D)> + <CAIE O* <TYPE-CODE UVECTOR>> + <ADD B* [<10(10)>]> + <ADD B* [<10(10)>]> + <EXCH B* 3(D)> ;"B/ cptr to old vector/uvector" + <HLRE C* B> + <SUBM B* C> + <GETYP E* (C)> ;"E/ UTYPE of uvector (if it IS a uvector)" + <HLRE C* 3(D)> + <MOVMS C> + <ADD C* 3(D)> ;"C/ ptr to first dope word of new vector/uvector" + <CAIN O* <TYPE-CODE UVECTOR>> + <PUTYP E* (C)> ;"makes new uvector have same UTYPE as old one" + <MOVE C* (P)> + <CAIE O* <TYPE-CODE UVECTOR>> + <ASH C* 1> + <HRLS C> + <MOVEM C* (P)> + <ADD C* 3(D)> ;"C/ cptr to slot where new value belongs" + <HRL E* B> + <HRR E* 3(D)> + <CAME C* 3(D)> ;"Skips if new val in first slot" + <BLT E* -1(C)> + <MOVE E* -2(TP)> + <CAIE O* <TYPE-CODE VECTOR>> + <JRST LSTINSTOR> + <MOVEM E* 1(C)> + <MOVE E* -3(TP)> + <MOVEM E* (C)> + <ADD C* [<1(1)>]> + <SKIPA> +LSTINSTOR <MOVEM E* (C)> + <ADD C* [<1(1)>]> + <POP P* E> + <ADD B* E> ;"B/ cptr to rest of old value vector" + <JUMPGE B* LSTINSPOP> + <JUMPGE C* LSTINSPOP> + <HRL E* B> + <HRR E* C> + <HLRE D* C> + <SUBM C* D> + <BLT E* -1(D)> + <JRST LSTINSPOP> + + +LSTINSERR <DMOVE A* -1(TP)> + <DMOVE C* -5(TP)> + <DPUSH TP* <PQUOTE TRIED-TO-INSERT-VALUE-INTO-VALUELESS-SYMBOL-TABLE!-ERRORS>> + <DPUSH TP* A> + <DPUSH TP* C> + <MCALL 3 ERROR> + <JRST LSTINSERR> + + + + +;"#################################################################### +#####################################################################" + + +<SUB-ENTRY LSTDELETE ("VALUE" <OR SYMTABLE FALSE> SYMTABLE STRING + "OPTIONAL" ANY)> + <MOVE A* AB> + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <HRRZ B* AB> + <SUBI B* (A)> + <CAIE B* 6> + <JRST LSTD2> + <PUSHJ P* ILSTDELETE3> + <JRST FINIS> + +LSTD2 <PUSHJ P* ILSTDELETE2> + <JRST FINIS> + +<INTERNAL-ENTRY ILSTDELETE2 2> + + <PUSH TP* <TYPE-WORD UNBOUND>> + <PUSH TP* [-1]> + <JRST ILSTDELETE3> + + +<INTERNAL-ENTRY ILSTDELETE3 3> + + <SUBM M* (P)> + <GETYP O* -5(TP)> + <CAIE O* <TYPE-CODE SYMTABLE>> + <JRST BADARG> + <GETYP O* -3(TP)> + <CAIE O* <TYPE-CODE STRING>> + <JRST BADARG> + <MOVE E* -4(TP)> + <GETYP O* 2(E)> + <CAIE O* <TYPE-CODE VECTOR>> + <JRST BADARG> + <MOVE D* 3(E)> ;"cptr to VECTOR" + <GETYP O* (D)> + <CAIE O* <TYPE-CODE LEXTABLE>> + <JRST BADARG> + <DMOVE A* (D)> + <DMOVE C* -3(TP)> + <DPUSH TP* A> + <DPUSH TP* C> + <PUSH TP* <TYPE-WORD FIX>> + <HRRZ E* C> + <PUSH TP* E> + <PUSHJ P* LDELUV> + <SUB TP* [<6(6)>]> + <JUMPL A* LSTDRET> + <MOVE E* -4(TP)> ;"E/ cptr to SYMTABLE" + <MOVE D* 3(E)> + <GETYP O* 2(D)> + <CAIE O* <TYPE-CODE UVECTOR>> + <CAIN O* <TYPE-CODE VECTOR>> + <SKIPA> + <JRST LSTDRET> ;"jumps if no VALUE vector or uvector to mung" + <CAIE O* <TYPE-CODE UVECTOR>> + <IMULI A* 2> + <HLRE C* 3(D)> + <MOVMS C> ;"C/ length of VALUE vct/uvct" + <CAML A* C> + <JRST LSTDRET> ;"Jumps if out of range" + <HRLS A> + <ADD A* 3(D)> ;"A/ cptr to slot to be over-written" + <CAIE O* <TYPE-CODE UVECTOR>> + <JRST LSTDELVCT> ;"if a VECTOR" +LSTDELP1 <CAMN A* 3(D)> + <JRST LSTDELUVF> ;"Jumps if first slot, simple" + <MOVE O* -1(A)> + <MOVEM O* (A)> + <SUB A* [<1(1)>]> + <JRST LSTDELP1> + +LSTDELUVF <ADD A* [<1(1)>]> + <MOVEM A* 3(D)> +LSTDRET <SUB TP* [<4(4)>]> + <DPOP TP* A> + <JRST MPOPJ> + +LSTDELVCT <CAMN A* 3(D)> + <JRST LSTDELVCTF> + <MOVE O* -1(A)> + <MOVEM O* 1(A)> + <MOVE O* -2(A)> + <MOVEM O* (A)> + <SUB A* [<2(2)>]> + <JRST LSTDELVCT> +LSTDELVCTF <ADD A* [<2(2)>]> + <MOVEM A* 3(D)> + <JRST LSTDRET> + + +;"#################################################################### +#####################################################################" + + +<SUB-ENTRY LSTLOOKUP ("VALUE" <OR VECTOR FALSE> STRING FIX <VECTOR LEXTABLE ANY> VECTOR)> + + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* ILSTLOOKUP> + <JRST FINIS> + +<INTERNAL-ENTRY ILSTLOOKUP 4> + + <SUBM M* (P)> + <GETYP O* -3(TP)> + <CAIE O* <TYPE-CODE VECTOR>> + <JRST BADARG> + <MOVE E* -2(TP)> + <GETYP O* (E)> + <CAIE O* <TYPE-CODE LEXTABLE>> + <JRST BADARG> + <DMOVE A* (E)> + <DMOVE C* -7(TP)> + <MOVE E* -4(TP)> + <JUMPE E* LKPALLMCH> ;"Jumps if key length is zero, all symbols match" + <PUSHJ P* LEXTBLSRC> + <JUMPLE C* LSTLKPNOMCH> +;"A&B/ cptr to first matching LEXID +C/ # of matches" +LKPMCH <MOVE E* (TP)> + <MOVE O* <TYPE-WORD FIX>> + <MOVEM O* (E)> + <MOVEM O* 2(E)> + <MOVEM O* 6(E)> + <CAIG C* 1> + <JRST LSTLKPONEMCH> ;"jumps if only one match" + <HLRZ D* (B)> ;"D/ # of characters in matching LEXID" + <CAMN D* -4(TP)> + <JRST LSTLKPONEMCH> + <MOVEI O* 2> ;"more than one partial match" + <MOVEM O* 1(E)> +;"Here to find partial match with longest name and the # of chars +beyond the key which all of the partial matches have in common" + <MOVE E* B> + <MOVE D* C> + <MOVE A* -2(TP)> + <MOVE A* 1(A)> ;"A/ cptr to LEXTABLE" + <MOVE B* (E)> + <PUSHJ P* LEX-BPTR> ;"gets bptr to string in A, length in B" + <PUSH P* E> + <PUSH P* A> + <PUSH P* B> + <PUSH P* B> + <SUBI D* 1> +LKPLONGEST <MOVE A* -2(TP)> + <MOVE A* 1(A)> + <MOVE B* (E)> + <PUSHJ P* LEX-BPTR> + <CAMG B* -1(P)> ;"skips if longer than longest yet encountered" + <JRST HERE 4> + <EXCH B* -1(P)> + <EXCH A* -2(P)> + <MOVEM E* -3(P)> + <CAMLE B* (P)> + <MOVE B* (P)> ;"Only check as far as previous matches" + <PUSH P* B> + <MOVE B* -3(P)> ;"B/ bptr to longest match yet encountered" + <PUSH P* [0]> +LKPOVRMCH <ILDB O* A> + <ILDB D* B> + <CAMN O* D> + <JRST LKPOVRMCH1> + <CAIL O* 97> + <CAILE O* 122> + <SKIPA> + <SUBI O* 32> + <CAMN O* D> + <JRST LKPOVRMCH1> + <CAIL D* 97> + <CAILE D* 122> + <SKIPA> + <SUBI D* 32> + <CAME O* D> + <JRST LKPOVRMCH2> +LKPOVRMCH1 <AOS (P)> + <SOSLE -1(P)> + <JRST LKPOVRMCH> +LKPOVRMCH2 <POP P* B> + <POP P* O> + <MOVEM B* (P)> ;"stores length of overmatch" + <ADD E* [<1(1)>]> + <SOJG C* LKPLONGEST> + <MOVE E* (TP)> + <POP P* A> + <MOVEM A* 7(E)> + <SUB P* [<2(2)>]> + <POP P* B> ;"B/ cptr to LEXID with longest name" + <JRST LSTLKPSTRID> + +LKPALLMCH <MOVE E* -2(TP)> + <MOVE E* 1(E)> ;"E/ cptr to LEXTABLE" + <DMOVE A* (E)> ;"A&B/ cptr to LEXID tbl" + <HLRE C* B> + <MOVMS C> + <JRST LKPMCH> + +;"Here if only one match (either partial or exact)" +LSTLKPONEMCH <HLRZ D* (B)> ;"D/ # of characters in matching LEXID" + <MOVEI C* 3> ;"one exact match" + <CAME D* -4(TP)> + <MOVEI C* 1> ;"one partial match" + <MOVEM C* 1(E)> + <MOVEM D* 7(E)> +;"A&B/ cptr to LEXID to be returned" +LSTLKPSTRID <MOVE E* -2(TP)> + <MOVE D* 1(E)> ;"D/ cptr to LEXTABLE" + <HRRZ E* B> + <HRRZ C* 1(D)> + <SUB E* C> ;"E/ offset of LEXID on LEXID tbl" + <MOVE C* (TP)> + <MOVEM E* 3(C)> ;"stores offset in return vector" + <MOVE E* -2(TP)> + <DPUSH TP* (E)> + <PUSH TP* <TYPE-WORD LEXID>> + <PUSH TP* (B)> + <PUSH TP* <TYPE-WORD FALSE>> + <PUSH TP* [0]> + <MCALL 3 LEX-GET> + <MOVE E* (TP)> + <DMOVEM A* 4(E)> + <DPOP TP* A> + <SUB TP* [<6(6)>]> + <JRST MPOPJ> + +LSTLKPNOMCH <DMOVE A* -1(TP)> + <MOVE O* <TYPE-WORD FIX>> + <MOVEM O* (B)> + <SETZM 1(B)> + <SUB TP* [<8(8)>]> + <JRST MPOPJ> + + +;"#################################################################### +#####################################################################" + + +<SUB-ENTRY LSTPOSSYM ("VALUE" FIX STRING FIX <VECTOR LEXTABLE ANY> + <OR STRING FALSE> <OR STRING FALSE>)> + + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* ILSTPOSSYM> + <JRST FINIS> + +<INTERNAL-ENTRY ILSTPOSSYM 5> + + <SUBM M* (P)> + <GETYP O* -5(TP)> + <CAIE O* <TYPE-CODE VECTOR>> + <JRST BADARG> + <MOVE E* -4(TP)> + <GETYP O* (E)> + <CAIE O* <TYPE-CODE LEXTABLE>> + <JRST BADARG> + <DMOVE A* (E)> + <DMOVE C* -9(TP)> + <MOVE E* -6(TP)> + <JUMPE E* LPOSALLMCH> ;"jumps if key length is 0, all symbols match" + <PUSHJ P* LEXTBLSRC> + <JUMPLE C* LPOSNOMCH> +;"A&B/ cptr to first matching LEXID +C/ # of matches" +LPOSMCH <DPUSH TP* A> + <PUSH P* C> + <PUSH P* C> + <GETYP O* -5(TP)> + <CAIE O* <TYPE-CODE STRING>> + <JRST LPOSLP1> + <DMOVE A* <PQUOTE OUTCHAN>> + <PUSHJ P* CILVAL> + <DMOVE C* -5(TP)> + <PUSHJ P* CPCSTR> +LPOSLP1 <MOVE E* -6(TP)> + <DMOVE A* (E)> + <MOVE E* (TP)> + <DPUSH TP* A> + <PUSH TP* <TYPE-WORD LEXID>> + <PUSH TP* (E)> + <MOVE C* <MQUOTE '%<RGLOC LEX-SCRATCH-STRING T>>> + <ADD C* GLOTOP 1 (TVP)> + <DPUSH TP* (C)> + <MCALL 3 LEX-GET> + <GETYP O* A> + <CAIE O* <TYPE-CODE STRING>> + <JRST LPOSLP2> + <DPUSH TP* A> + <DMOVE A* <PQUOTE OUTCHAN>> + <PUSHJ P* CILVAL> + <DPOP TP* C> + <PUSHJ P* CPCSTR> + <DMOVE A* <PQUOTE OUTCHAN>> + <PUSHJ P* CILVAL> + <DMOVE C* <PQUOTE " +">> + <PUSHJ P* CPCSTR> +LPOSLP2 <MOVE E* [<1(1)>]> + <ADDM E* (TP)> + <SOSLE (P)> + <JRST LPOSLP1> + <POP P* O> + <POP P* B> + <MOVE A* <TYPE-WORD FIX>> + <SUB TP* [<12(12)>]> + <JRST MPOPJ> + +LPOSALLMCH <MOVE E* -4(TP)> ;"E/ cptr to VECTOR" + <MOVE E* 1(E)> ;"E/ cptr to LEXTABLE" + <DMOVE A* (E)> ;"A&B/ cptr to LEXID tbl" + <HLRE C* B> + <MOVMS C> ;"C/ length of LEXID tbl" + <JRST LPOSMCH> + +LPOSNOMCH <GETYP O* -1(TP)> + <CAIE O* <TYPE-CODE STRING>> + <JRST LPOSRET> + <DMOVE A* <PQUOTE OUTCHAN>> + <PUSHJ P* CILVAL> + <DMOVE C* -1(TP)> + <PUSHJ P* CPCSTR> + <MOVE A* <TYPE-WORD FIX>> + <MOVEI B* 0> +LPOSRET <SUB TP* [<10(10)>]> + <JRST MPOPJ> + + + + +;"#################################################################### +#####################################################################" + + +<SUB-ENTRY LSTPRTSYMS ("VALUE"'T <VECTOR LEXTABLE ANY>)> + + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* ILSTPRTSYMS> + <JRST FINIS> + +<INTERNAL-ENTRY ILSTPRTSYMS 1> + + <SUBM M* (P)> + <GETYP O* -1(TP)> + <CAIE O* <TYPE-CODE VECTOR>> + <JRST BADARG> + <MOVE E* (TP)> + <GETYP O* (E)> + <CAIE O* <TYPE-CODE LEXTABLE>> + <JRST BADARG> + <MOVE E* 1(E)> ;"E/ LEXTABLE" + <GETYP O* (E)> + <CAIN O* <TYPE-CODE UVECTOR>> + <SKIPL B* 1(E)> + <JRST LPRTRET> +;"B/ cptr to LEXID tbl +C/ # of matches" + <PUSH TP* <TYPE-WORD UVECTOR>> + <PUSH TP* B> + <PUSH P* [70]> +LPRTLP1 <MOVE E* -2(TP)> + <DMOVE A* (E)> + <MOVE E* (TP)> + <DPUSH TP* A> + <PUSH TP* <TYPE-WORD LEXID>> + <PUSH TP* (E)> + <MOVE C* <MQUOTE '%<RGLOC LEX-SCRATCH-STRING T>>> + <ADD C* GLOTOP 1 (TVP)> + <DPUSH TP* (C)> + <MCALL 3 LEX-GET> + <GETYP O* A> + <CAIE O* <TYPE-CODE STRING>> + <JRST LPRTLP4> + <MOVE D* (P)> + <IDIVI D* 8> + <SKIPG E> + <MOVEI E* 8> + <HRRZ C* A> + <ADD C* E> + <ADDB C* (P)> + <DPUSH TP* A> + <CAIG C* 70> + <JRST LPRTLP2> + <HRRZ C* A> + <MOVEM C* (P)> + <DPUSH TP* <PQUOTE " +">> + <JRST LPRTLP3> +LPRTLP2 <DPUSH TP* <PQUOTE " ">> +LPRTLP3 <DMOVE A* <PQUOTE OUTCHAN>> + <PUSHJ P* CILVAL> + <DPOP TP* C> + <PUSHJ P* CPCSTR> + <DMOVE A* <PQUOTE OUTCHAN>> + <PUSHJ P* CILVAL> + <DPOP TP* C> + <PUSHJ P* CPCSTR> +LPRTLP4 <MOVE E* [<1(1)>]> + <ADDB E* (TP)> + <JUMPL E* LPRTLP1> + <POP P* O> +LPRTRET <DMOVE A* <PQUOTE T>> + <SUB TP* [<4(4)>]> + <JRST MPOPJ> + + + + + + +;"#################################################################### +#####################################################################" + + +<SUB-ENTRY LSTALLPOS ("VALUE" <OR <LIST [REST SYMBOL]> FALSE> + STRING FIX <VECTOR LEXTABLE ANY>)> + + <PUSH TP* (AB)> + <AOBJN AB* HERE -1> + <PUSHJ P* ILSTALLPOS> + <JRST FINIS> + +<INTERNAL-ENTRY ILSTALLPOS 3> + + <SUBM M* (P)> + <GETYP O* -1(TP)> + <CAIE O* <TYPE-CODE VECTOR>> + <JRST BADARG> + <MOVE E* (TP)> + <GETYP O* (E)> + <CAIE O* <TYPE-CODE LEXTABLE>> + <JRST BADARG> + <DMOVE A* (E)> + <DMOVE C* -5(TP)> + <MOVE E* -2(TP)> + <PUSHJ P* LEXTBLSRC> + <SKIPG C> + <PUSHJ P* LALLPOSNOMCH> + <JUMPLE C* LALLPOSEMPTY> +;"A&B/ cptr to first matching LEXID +C/ # of matches" + <PUSH P* [0]> + <PUSH P* C> + <DMOVE C* -1(TP)> + <DPUSH TP* C> + <MOVE D* 1(D)> ;"C/ cptr to LEXTABLE" + <MOVE D* 1(D)> ;"D/ cptr to LEXID tbl" + <HRRZS B> + <SUBI B* (D)> + <PUSH P* B> +LALLPOSLP1 <DMOVE A* -1(TP)> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* (P)> + <DPUSH TP* A> + <MCALL 2 LSTEVAL> + <GETYP O* A> + <CAIE O* <TYPE-CODE SYMBOL>> + <JRST LALLPOSLP2> + <EXCH A* -1(TP)> + <EXCH B* (TP)> + <DPUSH TP* A> +LALLPOSLP2 <AOS (P)> + <AOS -2(P)> + <SOSLE -1(P)> + <JRST LALLPOSLP1> + <SUB P* [<2(2)>]> + <SUB TP* [<2(2)>]> + <POP P* A> + <PUSHJ P* IILIST> +LALLPOSRET <SUB TP* [<6(6)>]> + <JRST MPOPJ> + + +LALLPOSNOMCH <MOVE E* (TP)> + <MOVE E* 1(E)> ;"E/ cptr to LEXTABLE" + <DMOVE A* (E)> ;"A&B/ cptr to LEXID tbl" + <HLRE C* B> + <MOVMS C> ;"C/ length of LEXID TBL" + <POPJ P*> + +LALLPOSEMPTY <DMOVE A* <PQUOTE ()>> + <JRST LALLPOSRET> + + + +;"############################LEXTBLSRC############################### +#####################################################################" + + +;"A&B/ LEXTABLE +C&D/ STRING to be looked up +E/ length of STRING (overrides real length) + +==> A&B/ cptr to slot of id tbl where string is or belongs + C/ # of matches found" +LEXTBLSRC <SUBM M* (P)> + <DPUSH TP* A> + <DPUSH TP* C> + <PUSH P* E> + <GETYP O* (B)> + <CAIN O* <TYPE-CODE UVECTOR>> + <SKIPL E* 1(B)> + <JRST LTSRCFLS> + <HLRE D* E> + <MOVMS D> + <JRST LTSRCL2> +;"D/ size of space being searched +E/ cptr to beginning of space" +LTSRCL1 <CAILE D* 3> + <JRST LTSRCBIN> +LTSRCL2 <MOVE A* (E)> + <MOVE B* (P)> + <HRREI C* -1> + <PUSHJ P* LEXCOMP> + <JUMPE A* LTSRCFND> ;"Jumps if a match found" + <JUMPL A* LTSRCNOMCH> + <ADD E* [<1(1)>]> + <SOJG D* LTSRCL1> +LTSRCNOMCH <MOVE A* <TYPE-WORD UVECTOR>> + <MOVE B* E> + <MOVEI C* 0> +LTSRCRET <SUB TP* [<4(4)>]> + <POP P* 0> + <JRST MPOPJ> + +LTSRCFLS <MOVE A* <TYPE-WORD FALSE>> + <MOVEI B* 0> + <MOVEI C* 0> + <JRST LTSRCRET> + +;"Here when match found, see how many matches there are" +LTSRCFND <PUSH P* [1]> + <PUSH P* E> + <AOBJP E* LTSRCFND2> +LTSRCFND1 <MOVE A* (E)> + <MOVE B* -2(P)> + <HRREI C* -1> + <PUSHJ P* LEXCOMP> + <JUMPN A* LTSRCFND2> + <AOS -1(P)> + <AOBJN E* LTSRCFND1> +LTSRCFND2 <MOVE A* <TYPE-WORD UVECTOR>> + <POP P* B> + <POP P* C> + <JRST LTSRCRET> + +;"Here when binary-search" +LTSRCBIN <MOVE A* D> + <IDIVI A* 2> + <MOVE B* D> + <SUB B* A> + <PUSH P* B> ;"B/ size of lower section" + <MOVE D* A> + <HRLS A> + <ADD A* E> + <PUSH P* A> ;"A/ cptr to lower section" + <MOVE A* (A)> + <MOVE B* -2(P)> + <HRREI C* -1> + <PUSHJ P* LEXCOMP> + <POP P* C> + <POP P* B> + <SKIPN A> + <AOS D> + <JUMPLE A* LTSRCL1> + <MOVE E* C> + <MOVE D* B> + <JRST LTSRCL1> + + +;"############################LEXSEARCH############################### +#####################################################################" + + + +;"A&B/ LEXTABLE +C&D/ STRING to be looked up +E/ length of STRING (overrides real length) + +==> A&B/ cptr to slot of id table where string is or belongs + C/ 1 ==> exact match" + +MLEXSEARCH <MOVE O* [<6(6)>]> + <SKIPA> +LEXSEARCH <MOVEI O* 0> + <SUBM M* (P)> + <DPUSH TP* A> + <DPUSH TP* C> + <PUSH P* E> + <ADD B* O> + <GETYP O* (B)> + <CAIN O* <TYPE-CODE UVECTOR>> + <SKIPL E* 1(B)> + <JRST LEXSRCFLS> + <HLRE D* E> + <MOVMS D> + <JRST LSRCL2> ;"check first id in tbl, quit if STRING < it" +;"D/ size of space being searched +E/ cptr to beginning of space" +LSRCL1 <CAILE D* 3> + <JRST LSRCBIN> +LSRCL2 <MOVE A* (E)> + <MOVE B* (P)> + <MOVEI C* 0> + <PUSHJ P* LEXCOMP> + <JUMPE A* LSRCFND> ;"Jumps if a match found" + <JUMPL A* LSRCNOMCH> + <ADD E* [<1(1)>]> + <SOJG D* LSRCL1> +LSRCNOMCH <MOVEI C* 0> + <SKIPA> +LSRCFND <MOVEI C* 1> + <MOVE A* <TYPE-WORD UVECTOR>> + <MOVE B* E> +LSRCRET <SUB TP* [<4(4)>]> + <POP P* 0> + <JRST MPOPJ> + +LEXSRCFLS <MOVE A* <TYPE-WORD FALSE>> + <MOVEI B* 0> + <MOVEI C* 0> + <JRST LSRCRET> + +;"Here when binary-search" +LSRCBIN <MOVE A* D> + <IDIVI A* 2> + <MOVE B* D> + <SUB B* A> + <PUSH P* B> ;"B/ size of lower section" + <MOVE D* A> + <HRLS A> + <ADD A* E> + <PUSH P* A> ;"A/ cptr to lower section" + <MOVE A* (A)> + <MOVE B* -2(P)> + <MOVEI C* 0> + <PUSHJ P* LEXCOMP> + <POP P* C> + <POP P* B> + <JUMPL A* LSRCL1> + <MOVE E* C> + <MOVE D* B> + <JUMPE A* LSRCFND> + <JRST LSRCL1> + + +;"#############################LEX-BPTR############################### +#####################################################################" + + +;"A/ cptr to LEXTABLE +B/ LEXID + +==> A/ bptr to string + B/ length of string" +LEX-BPTR <PUSH P* C> + <HLRE C* 3(A)> + <MOVMS C> + <CAIG C* (B)> + <JRST UPDUVBPTR> ;"jumps if LEXID out of range of str tbl" + <MOVE A* 3(A)> + <ADDI A* 1(B)> + <HRRZ B* -1(A)> + <SUBI A* 1> + <HRLI A* *010700*> + <POP P* C> + <POPJ P*> + +UPDUVBPTR <GETYP O* 4(A)> + <CAIE O* <TYPE-CODE UVECTOR>> + <JRST RANGERR> + <PUSH P* D> + <HLRE D* 5(A)> + <MOVMS D> + <SUB B* C> + <CAIG D* (B)> + <JRST BPTRERR> + <MOVE A* 5(A)> + <ADDI A* 1(B)> + <HRRZ B* -1(A)> + <SUBI A* 1> + <HRLI A* *010700*> + <POP P* D> + <POP P* C> + <POPJ P*> + +BPTRERR <DPUSH TP* <PQUOTE LEXID-OUT-OF-RANGE-OF-STR-TABLE!-ERRORS>> + <MCALL 1 ERROR> + <JRST BPTRERR> + + + +;"#############################LEX-COMP################################ +#####################################################################" + + +;"A/ LEXID +B/ length of key +C/ 0 ==> Regular comparison + -1 ==> compare only up to length of STRING +(TP)/ STRING being looked up +-2(TP)/ LEXTABLE + +==> -1 ==> STRING < LEXID + 0 ==> STRING = LEXID + 1 ==> STRING > LEXID" +LEXCOMP <SUBM M* (P)> + <PUSH P* D> + <PUSH P* E> + <PUSH P* C> + <MOVE E* -2(TP)> + <HLRE D* 3(E)> + <MOVMS D> + <CAIG D* (A)> + <JRST TRYUPDUV> + <ADD A* 3(E)> +LEXCOMP1 <HRRZ C* (A)> ;"C/ length of LEXID string" + <HRLI A* *010700*> ;"A/ bptr to LEXID string" + <MOVE D* (TP)> ;"D/ bptr to key string" +COMPL1 <ILDB O* A> + <ILDB E* D> + <CAMN O* E> + <JRST COMPL2> + <CAIL O* 97> + <CAILE O* 122> + <SKIPA> + <SUBI O* 32> + <CAMN O* E> + <JRST COMPL2> + <CAIL E* 97> + <CAILE E* 122> + <SKIPA> + <SUBI E* 32> + <CAMN O* E> + <JRST COMPL2> + <MOVEI A* 1> + <CAMG E* O> ;"Skips if STRING > LEXID" +COMPRETN <HRREI A* -1> +COMPRET <POP P* C> + <POP P* E> + <POP P* D> + <JRST MPOPJ> + +;"Here if both match so far" +COMPL2 <SOJLE B* COMPKEY> ;"jumps if STRING exhausted" + <SOJG C* COMPL1> ;"iterates if neither exhausted" + <MOVEI A* 1> ;"LEXID exhausted, STRING isn't; STRING > LEXID" + <JRST COMPRET> + +;"Here if STRING exhausted" +COMPKEY <MOVEI A* 0> + <SKIPGE (P)> + <JRST COMPRET> + <SOJLE C* COMPRET> ;"jumps if LEXID exhausted too, STRING == LEXID" + <JRST COMPRETN> ;"STRING < LEXID" + +TRYUPDUV <GETYP O* 4(E)> + <CAIE O* <TYPE-CODE UVECTOR>> + <JRST RANGERR> + <HLRE C* 5(E)> + <MOVMS C> + <HRLS D> + <SUB A* D> + <CAIG C* (A)> + <JRST RANGERR> + <ADD A* 5(E)> + <JRST LEXCOMP1> + +RANGERR <DMOVE A* -3(TP)> + <DMOVE C* -1(TP)> + <DPUSH TP* <PQUOTE LEXID-OUT-OF-RANGE-OF-LEXTABLE!-ERRORS>> + <DPUSH TP* A> + <DPUSH TP* C> + <MCALL 3 ERROR> + <JRST RANGERR> + + + +;"#######################LEX-INSERT-STRING############################ +#####################################################################" + +;"A&B/ LEXTABLE +C&D/ STRING to be inserted +E/ length of C&D" + +LEX-INSERT-STRING <SUBM M* (P)> + <DPUSH TP* C> ;"Saves STRING on TP-stack" + <PUSH P* E> ;"Saves length of STRING on P-stack" + <MOVE C* E> ;"C/ length of string" + <IDIVI C* 5> + <SKIPE D> + <ADDI C* 1> + <ADDI C* 1> ;"C/ # of words needed to hold new string" + <PUSH P* C> ;"Saves on P-stack" + <GETYP O* 2(B)> +;"See if there are any free slots in the string tbl which are big +enough to hold the new string" + <CAIN O* <TYPE-CODE UVECTOR>> + <SKIPL D* 3(B)> ;"D/ cptr to string tbl" + <SKIPA> + <JRST HERE 5> + <GETYP O* 4(B)> + <CAIN O* <TYPE-CODE UVECTOR>> + <SKIPL D* 5(B)> + <JRST INSUPDUV> ;"Jumps if string tbl empty" + <MOVE C* D> +INSLP1 <MOVE D* 3(B)> + <MOVE E* C> ;"E/ cptr to current free slot of string tbl" + <HRRZ C* (C)> ;"C/ offset of next free slot" + <JUMPE C* INSUPDUV> ;"Jumps if no free slots left" + <HLRE O* D> + <MOVMS O> + <CAMGE C* O> ;"skips if in update tbl" + <JRST INSLP2> + <SUB C* O> ;"C/ offset on UPDATE tbl" + <HLRE O* 5(B)> + <MOVMS O> + <CAML C* O> + <JRST INSUPDUV> ;"jumps if out of range of UPDATE tbl" + <MOVE D* 5(B)> +INSLP2 <HRLS C> + <ADD C* D> ;"C/ cptr to next free slot" + <HLRZ O* (C)> ;"O/ size of free slot" + <CAMGE O* (P)> ;"Skips if slot big enough for new string" + <JRST INSLP1> ;"jumps if not large enough" +;"Here if free slot found" + <HRR O* (C)> ;"O/ offset of next free slot" + <HRRM O* (E)> ;"patches found slot out of chain" + <MOVEI O* -1> + <HRLM O* (D)> ;"Sets 'MODIFIED' flag in string uvct" + <POP P* O> ;"O/ # of words needed for STRING" + <HRRZ A* C> + <SUBI A* (D)> ;"A/ offset of free slot" + <HLRE E* 3(B)> + <MOVMS E> ;"E/ length of STRING tbl" + <CAME D* 3(B)> + <ADD A* E> ;"adjusts offset if in UPDATE tbl" + <HRL A* (P)> ;"A/ LEXID of new string: char count,,offset" + <MOVE B* (C)> + <HRR B* (P)> ;"B/ header word for new slot: length,,char count" +;"A/ new LEXID +B/ header word of slot in string tbl +C/ cptr to slot in string tbl for new string +TP/ new STRING +P/ length of new string" +INSLOT <MOVEM B* (C)> ;"stores header word in str tbl slot" + <MOVE B* (TP)> ;"B/ bptr to STRING" + <HRLI C* *010700*> ;"C/ bptr to slot in str tbl" + <MOVE D* (P)> ;"D/ # of characters to transfer" + <IDIVI D* 5> + <SKIPE E> + <ADDI D* 1> + <ADDI D* (C)> ;"D/ ptr to word in which last characters + of string will reside" + <SETZM (D)> ;"makes all trailing characters null (ASCII 0)" + <MOVE D* (P)> ;"D/ # of characters to transfer" +;"transfer STRING to its slot in str tbl" + <ILDB E* B> + <IDPB E* C> + <SOJG D* HERE -2> +;"Return new LEXID" + <MOVE B* A> + <MOVE A* <TYPE-WORD LEXID>> + <SUB P* [<1(1)>]> + <SUB TP* [<2(2)>]> + <JRST MPOPJ> + +;"Here if have to add new string to the 'update' string tbl +A&B/ LEXTABLE +(TP)/ STRING to be inserted +-1(P)/ length of string +(P)/ # of words needed to store string" + +INSUPDUV <GETYP O* 4(B)> + <CAIE O* <TYPE-CODE UVECTOR>> + <JRST NEWSUVCT> + <HLRE D* 5(B)> + <MOVMS D> ;"D/ length of update tbl" + <HLRE C* 3(B)> + <SKIPN C> + <SKIPE D> + <JRST INSUP2> +;"Here only if both STRING and UPDATE tbls are empty" + <MOVE C* 5(B)> + <HLRZ E* 1(C)> ;"REAL length of UPDATE tbl, from dope word" + <CAIGE E* 3> + <JRST NEWSUVCT> ;"jumps if UPDATE tbl REALLY empty" + <SUB C* [<1(1)>]> + <MOVEM C* 5(B)> + <SETZM (C)> ;"Saves first word as header word" + <MOVEI D* 1> +INSUP2 <HRRZ C* 5(B)> + <ADD C* D> ;"C/ ptr to first dope word of update tbl" + <HLRZ E* 1(C)> ;"E/ real length of UVECTOR" + <MOVE C* (P)> + <ADD C* D> ;"C/ total length required" + <CAIGE E* 2(C)> ;"skips if enough slush space for new string" + <JRST NEWSUVCT> + <MOVE A* (P)> ;"A/ number of additional words needed" + <HRLS A> + <MOVE C* 5(B)> + <SUB C* A> ;"C/ cptr to new UVECTOR: backs original" + <HRLS D> ;"D/ original length,,original length" + <ADD D* C> ;"D/ cptr to slot for new string" +;"Here to move data from old uvct to new uvct +C/ cptr to 'backed' update tbl +D/ cptr to slot in update tbl for new string +5(B)/ cptr to original update tbl (not backed)" +INSTRMOV <HRL E* 5(B)> + <HRR E* C> + <CAME C* D> ;"Skips if first string to be inserted into update tbl" + <BLT E* -1(D)> ;"moves top portion of update tbl up (lower address)" + <MOVEM C* 5(B)> ;"saves cptr to new update tbl in LEXTABLE" +;"Construct new LEXID for string" + <HLRE E* 3(B)> + <MOVMS E> ;"E/ length of string tbl" + <HRRZ A* D> ;"A/ ptr to slot for new string in update tbl" + <SUBI A* (C)> ;"A/ offset of new slot on update tbl" + <ADD A* E> + <HRL A* -1(P)> ;"A/ new LEXID: char count,,offset" + <MOVE C* D> ;"C/ cptr to slot for new string" + <HRL B* (P)> + <HRR B* -1(P)> ;"B/ header word for new slot: size,,char count" + <SUB P* [<1(1)>]> + <JRST INSLOT> ;"store string in new slot and return" + + +;"Here when 'update' string uvector either too small or doesn't exist +A&B/ cptr to LEXTABLE +(TP)/ STRING to be inserted into update tbl +-1(P)/ length of string +(P)/ # of words required for new string" +NEWSUVCT <GETYP O* 4(B)> + <CAIE O* <TYPE-CODE UVECTOR>> + <JRST NEWSU1> + <HLRE D* 5(B)> + <MOVMS D> ;"D/ length of existing update tbl" + <JUMPE D* NEWSU1> ;"jumps if tbl empty" + <DPUSH TP* A> + <MOVE A* (P)> ;"A/ # of words needed for new slot" + <ADDI A* 20(D)> ;"A/ # of words to get" + <MOVEI O* IBLOCK> + <PUSHJ P* RCALL> + <MOVE C* B> + <DPOP TP* A> ;"A&B/ LEXTABLE" + <ADD C* [<20(20)>]> ;"C/ cptr to head of new update tbl" + <HLRE D* C> + <SUBM C* D> ;"D/ ptr to first dope word of new tbl" + <MOVEI O* <TYPE-CODE WORD>> + <PUTYP O* (D)> ;"makes tbl's UTYPE be LEXID" + <HLRE D* 5(B)> + <MOVMS D> ;"D/ length of original tbl" + <PUSH P* D> + <HRLS D> + <ADD D* C> ;"D/ cptr to slot of new tbl for new string" + <HRL E* 5(B)> + <HRR E* C> + <BLT E* -1(D)> ;"transfers entire original tbl to new tbl" + <MOVEM C* 5(B)> ;"stores cptr to ne tbl in LEXTABLE" + <MOVE C* D> ;"C/ cptr to slot of new tbl where new string belongs" + <POP P* A> ;"A/ offset of new slot on update tbl" + <HLRE E* 3(B)> + <MOVMS E> ;"E/ length of string tbl" + <ADD A* E> + <HRL A* -1(P)> ;"A/ new LEXID: char count,,offset" + <HRL B* (P)> + <HRR B* -1(P)> ;"B/ header word for new slot: size,,char count" + <SUB P* [<1(1)>]> + <JRST INSLOT> + + +NEWSU1 <DPUSH TP* A> + <MOVE A* (P)> ;"A/ # of words needed for new slot" + <ADDI A* 20> + <MOVEI O* IBLOCK> + <PUSHJ P* RCALL> + <MOVE C* B> + <DPOP TP* A> ;"A&B/ LEXTABLE" + <HLRE E* 3(B)> + <MOVMS E> ;"E/ length of str tbl" + <MOVE O* <TYPE-WORD UVECTOR>> + <MOVEM O* 4(B)> + <ADD C* [<19(19)>]> + <SKIPLE E> ;"leave extra word at top if no str tbl" + <ADD C* [<1(1)>]> ;"C/ cptr to new update tbl" + <MOVEM C* 5(B)> ;"stores new update tbl in LEXTABLE" + <SKIPG E> + <ADD C* [<1(1)>]> ;"C/ cptr to new slot" + <HLRE D* C> + <SUBM C* D> ;"D/ ptr to first dope word of update tbl" + <MOVEI O* <TYPE-CODE WORD>> + <PUTYP O* (D)> ;"makes UTYPE of update tbl be WORD" + <HLRE A* 3(B)> + <MOVMS A> + <SKIPG A> + <MOVEI A* 1> + <HRL A* -1(P)> ;"A/ new LEXID: char count,,offset" + <HRL B* (P)> + <HRR B* -1(P)> ;"B/ header word for new slot: size,,char count" + <SUB P* [<1(1)>]> + <JRST INSLOT> + + + + +;"#######################LEX-INSERT-LEXID############################# +#####################################################################" + +;"A&B/ LEXTABLE +C&D/ cptr to slot in LEXID tbl where new LEXID belongs +E/ new LEXID" +MLEX-INSERT-LEXID <ADD B* [<6(6)>]> +LEX-INSERT-LEXID <SUBM M* (P)> + <PUSH P* E> + <DPUSH TP* C> +;"See if enough slush space exists to insert new LEXID in its table +(TP)/ cptr to slot in LEXID tbl where new LEXID belongs (FALSE if empty) +(P)/ new LEXID" + <GETYP O* (B)> + <CAIE O* <TYPE-CODE UVECTOR>> + <JRST NEWLUVCT> + <HLRE D* 1(B)> + <MOVMS D> + <HRRZ C* 1(B)> + <ADD C* D> + <HLRZ E* 1(C)> + <CAIGE E* 3(D)> ;"Skips if at least one word of slush space" + <JRST NEWLUVCT> + <MOVE E* 1(B)> + <SUB E* [<1(1)>]> ;"E/ cptr to head of new LEXID tbl" + <DPOP TP* C> ;"D/ cptr to slot in old tbl where new LEXID belongs" + <EXCH E* 1(B)> ;"E/ cptr to head of old LEXID tbl" + <GETYP O* C> + <CAIE O* <TYPE-CODE UVECTOR>> + <JRST INSFIRST> ;"Jumps if first LEXID to be inserted" + <CAMN E* D> ;"skips if new id not in first slot" + <JRST INSID> + <HRLS E> + <HRR E* 1(B)> + <BLT E* -2(D)> ;"moves upper portion of uvct up one word" +INSID <SUB D* [<1(1)>]> + <POP P* (D)> ;"stores new LEXID in slot" + <DMOVE A* C> + <JRST MPOPJ> + +INSFIRST <MOVE A* <TYPE-WORD UVECTOR>> + <MOVE B* 1(B)> ;"B/ cptr to head of new LEXID tbl" + <POP P* (B)> + <JRST MPOPJ> + +;"Here if LEXID uvct either is too small or doesn't exist" +NEWLUVCT <DPUSH TP* A> ;"Saves LEXTABLE on TP-stack" + <MOVEI A* 0> + <GETYP O* (B)> + <CAIE O* <TYPE-CODE UVECTOR>> + <JRST HERE 3> + <HLRE A* 1(B)> + <MOVMS A> +;"A/ length of existing LEXID tbl" + <PUSH P* A> + <ADDI A* 20> + <MOVEI O* IBLOCK> + <PUSHJ P* RCALL> + <ADD B* [<19(19)>]> + <HLRE C* B> + <SUBM B* C> + <MOVEI O* <TYPE-CODE LEXID>> + <PUTYP O* (C)> + <DMOVE C* A> ;"C&D/ cptr to head of new LEXID tbl" + <DPOP TP* A> ;"A&B/ cptr to LEXTABLE" + <EXCH D* 1(B)> ;"D/ cptr to head of old LEXID tbl" + <MOVE O* <TYPE-WORD UVECTOR>> + <MOVEM O* (B)> + <POP P* E> ;"E/ length of old LEXID tbl" + <JUMPE E* NEWLU1> ;"jumps if old tbl didn't exist" +;"transfer top portion of old tbl into new tbl" + <HRRZ E* (TP)> ;"E/ ptr to new slot in old tbl" + <SUBI E* (D)> ;"E/ garbage,,offset of new slot" + <HRLS E> + <ADD E* 1(B)> ;"E/ cptr to slot of new tbl for new LEXID" + <HRL C* D> + <HRR C* 1(B)> + <CAME E* 1(B)> ;"Skips if new LEXID in first slot" + <BLT C* -1(E)> +;"store new LEXID in new tbl" + <POP P* (E)> +;"transfer bottom portion of old tbl into new tbl" + <HRL C* (TP)> + <HRRI C* 1(E)> + <HLRE D* E> + <MOVMS D> + <ADDI D* (E)> ;"D/ ptr to first dope word of new tbl" + <CAILE D* (C)> ;"Skips if new LEXID in last slot" + <BLT C* -1(D)> + <MOVE B* E> ;"B/ cptr to new LEXID's slot in new tbl" +NEWLRET <MOVE A* <TYPE-WORD UVECTOR>> + <SUB TP* [<2(2)>]> + <JRST MPOPJ> + +NEWLU1 <DMOVE A* (B)> ;"A&B/ cptr to head of new LEXID tbl" + <POP P* (B)> + <JRST NEWLRET> + + +;"#########################LEX-DELETE-LEXID############################ +#####################################################################" + +;"A&B/ LEXTABLE +C&D/ cptr to slot in LEXID tbl from which LEXID is to be removed" + +MLEX-DELETE-LEXID <ADD B* [<6(6)>]> +LEX-DELETE-LEXID <SUBM M* (P)> +LIDELP1 <CAMN D* 1(B)> + <JRST DELFIRSTID> ;"jumps if first id in LEXID tbl, simple" +;"Here if have to move upper portion of LEXID tbl down over deleted LEXID" + <MOVE O* -1(D)> + <MOVEM O* (D)> + <SUB D* [<1(1)>]> + <JRST LIDELP1> + +DELFIRSTID <ADD D* [<1(1)>]> + <MOVEM D* 1(B)> + <JRST MPOPJ> + + + +;"#########################LEX-DELETE-STRING########################## +#####################################################################" + +;"A&B/ LEXTABLE +C/ LEXID of string to be removed from STRING tbl" + +LEX-DELETE-STRING <SUBM M* (P)> + <HLRE D* 3(B)> + <MOVMS D> ;"D/ length of STRING tbl" + <JUMPE D* NOSTRTBL> ;"jumps if there is no STRING tbl" + <CAIG D* (C)> + <JRST LSDELUPDV> ;"jumps if LEXID points into UPDATE uvector" +;"Here if target string in STRING tbl" + <MOVE D* 3(B)> + <ADDI D* (C)> ;"D/ ptr to header of target string" + <MOVE E* 3(B)> ;"E/ cptr to head of STRING tbl" +LSDELFIX <HRRZ O* (E)> + <HRRM O* (D)> ;"splices deleted string into free chain" + <HRRM C* (E)> ;"puts ptr to free chain in first word of tbl" + <MOVEI O* -1> + <HRLM O* (E)> ;"sets bit indicating modification" + <JRST MPOPJ> + +;"Here if no STRING tbl exists" +NOSTRTBL <HLRE D* 5(B)> + <MOVMS D> + <JUMPE D* LSDELERR> ;"Jumps if no UPDATE tbl either" + <CAIG D* (C)> + <JRST LSDELERR> ;"jumps if out of range of UPDATE tbl" + <MOVE D* 5(B)> + <ADDI D* (C)> + <MOVE E* 5(B)> + <JRST LSDELFIX> + +;"Here if LEXID out of range of STRING tbl, try UPDATE tbl" +LSDELUPDV <HLRE E* 5(B)> + <MOVMS E> + <ADD E* D> ;"E/ combined length of both tbls" + <CAIG E* (C)> + <JRST LSDELERR> ;"jumps if out of range of UPDATE tbl too" + <HRRZ E* C> + <SUBM E* D> ;"D/ offset on UDPATE tbl" + <ADD D* 5(B)> ;"D/ ptr to header word of target string" + <MOVE E* 3(B)> ;"E/ cptr to STRING tbl" + <JRST LSDELFIX> + +LSDELERR <PUSH TP* <PQUOTE LEXID-OUT-OF-RANGE!-ERRORS>> + <PUSH TP* <TYPE-CODE LEXID>> + <PUSH TP* C> + <DPUSH TP* A> + <MCALL 3 ERROR> + <JRST LSDELERR> + + + + + +;"#################################################################### +#####################################################################" +<END> + + +<ENDPACKAGE> diff --git a/src/mprog2/lexer.udl002 b/src/mprog2/lexer.udl002 new file mode 100644 index 00000000..9b3ef6f0 --- /dev/null +++ b/src/mprog2/lexer.udl002 @@ -0,0 +1,37 @@ +<PACKAGE "LEXER"> + +<ENTRY LEXER TBRKS> + +<SETG TBRKS " +:.,/-"> +<GDECL (TBRKS) STRING> + +<DEFINE LEXER (BB "OPTIONAL" (BRKS ,TBRKS) + "AUX" (BT <>) TT) + #DECL ((BRKS BB TT) STRING (BT) <OR STRING FALSE>) + <MAPF ,VECTOR + <FUNCTION () + <COND (<EMPTY? .BB> + <COND (.BT + <SET TT + <SUBSTRUC .BT + 0 + <- <LENGTH .BT> + <LENGTH .BB>>>> + <SET BT <>> + <MAPSTOP .TT !\>) + (ELSE <MAPSTOP>)>) + (<MEMQ <1 .BB> .BRKS> + <COND (.BT + <SET TT + <SUBSTRUC .BT + 0 + <- <LENGTH .BT> + <LENGTH .BB>>>> + <SET BT <>> + <MAPRET .TT <1 .BB>>)>) + (<NOT .BT> <SET BT .BB>)> + <SET BB <REST .BB>> + <MAPRET>>>> + +<ENDPACKAGE> diff --git a/src/mprog2/lines.udl004 b/src/mprog2/lines.udl004 new file mode 100644 index 00000000..c9ae9ea9 --- /dev/null +++ b/src/mprog2/lines.udl004 @@ -0,0 +1,53 @@ +<PACKAGE "LINES"> + +<ENTRY READ-LINE FIND-LINE BUILD-LINES PRINT-LINES> + +<SETG BSTR <ISTRING 150 !\ >> +<SETG CRSTR <STRING <ASCII 13>>> + +<DEFINE READ-LINE (CHAN "AUX" (B ,BSTR) D) + #DECL ((CHAN) CHANNEL (B) STRING (D) <OR FALSE FIX>) + <COND (<AND <NOT <0? <1 .CHAN>>> + <SET D <READSTRING .B .CHAN ,CRSTR <>>>> + <COND (<L? .D 150> + <AND <READCHR .CHAN <>> + <READCHR .CHAN <>>>) + (ELSE + <REPEAT () + <COND (<==? <READCHR .CHAN> <ASCII 10>> + <RETURN>)>>)> + <SUBSTRUC .B 0 .D <SET B <REST .B <- <LENGTH .B> .D>>>> + .B) + (ELSE <CLOSE .CHAN> <>)>> + +<DEFINE FIND-LINE (CHAN "TUPLE" LINES "AUX" L) + #DECL ((LINES) <TUPLE [REST STRING]> (CHAN) CHANNEL + (L) <OR STRING FALSE>) + <REPEAT () + <COND (<SET L <READ-LINE .CHAN>> + <COND (<MAPF <> + <FUNCTION (LINE) + #DECL ((LINE) STRING) + <AND <MEMBER .LINE .L> <MAPLEAVE T>>> + .LINES> + <RETURN .L>)>) + (ELSE <RETURN <>>)>>> + +<DEFINE BUILD-LINES (CHAN) + #DECL ((CHAN) CHANNEL) + <MAPF ,VECTOR + <FUNCTION ("AUX" (L <READ-LINE .CHAN>)) + #DECL ((L) <OR STRING FALSE>) + <COND (.L <STRING .L>) + (ELSE <MAPSTOP>)>>>> + +<DEFINE PRINT-LINES (L) + #DECL ((L) <VECTOR [REST STRING]>) + <MAPF <> + <FUNCTION (L) + #DECL ((L) STRING) + <PRINC .L> <CRLF>> + .L> + <LENGTH .L>> + +<ENDPACKAGE> diff --git a/src/mprog2/lsrhil.usg039 b/src/mprog2/lsrhil.usg039 new file mode 100644 index 00000000..c64658e0 --- /dev/null +++ b/src/mprog2/lsrhil.usg039 @@ -0,0 +1,175 @@ +<PACKAGE "LSRHIL" ;"HI-Level interface to LSRTNS"> + +<ENTRY FULLNAME NICKNAME MAILBOX BIRTHDAY BD? BD-MAIL> + +<USE "LSRTNS" "MFD" "NSTR" "TIMFCN"> + +;"Following message hasn't yet caused any changes in the code: + +To: SWG at MIT-DMS, PDL at MIT-DMS +From: TAA at MIT-DMS (Timothy A. Anderson) +Subject: LSRTNS +Message id: <[MIT-DMS].76293> + +Originated: 19 May 78 at 0133 EDT +Received: 19 May 78 at 0155 EDT + +As I threatened, I've split out a couple of internal routines, which +might make some efficiencies possible in using lsrtns. In particular, +LSR-ENTRY takes a string (or primtype word) and the FAST? switch; it +returns a false or a string which is the loser's data base entry. +LSR-EXTRACT takes a string as returned by LSR-ENTRY and a fix and returns +the fixth field as a string. Both of these return string pointers into +pmap space, which are therefore only valid until the next call to FIELD +or LSR-ENTRY or whatever. +FIELD still returns a real string; it is essentially +<STRING <LSR-EXTRACT <LSR-ENTRY uname fast?> field>>." + +<DEFINE NAME-PARTS (LUSER "OPTIONAL" (FAST? <>) + "AUX" (NM <FIELD .LUSER ,$NAME .FAST?>) CMA JR LFST LLST) + #DECL ((VALUE) <VECTOR STRING [REST STRING]> (LUSER) STRING (FAST?) ANY + (NM CMA JR) <OR STRING FALSE> (LLST LFST) FIX) + <COND (<OR <NOT .NM> <EMPTY? .NM>> [.LUSER]) + (<SET CMA <MEMQ !\, .NM>> + <SET LLST <- <LENGTH .NM> <LENGTH .CMA>>> + <SET CMA <REST .CMA>> + <SET LFST <LENGTH .CMA>> + <COND (<SET JR <MEMQ !\, .CMA>> + <SET LFST <- .LFST <LENGTH .JR>>>) + (<SET JR "">)> + <REPEAT () + <COND (<EMPTY? .CMA> <RETURN>) + (<MEMQ <1 .CMA> " "> + <SET CMA <REST .CMA>> + <SET LFST <- .LFST 1>>) + (T <RETURN>)>> + <VECTOR <SUBSTRUC .CMA 0 .LFST> + <SUBSTRUC .NM 0 .LLST> + .JR>) + (T [.NM])>> + +<DEFINE FULLNAME (LUSER "OPTIONAL" (FAST? <>) "AUX" (N <NAME-PARTS .LUSER .FAST?>)) + #DECL ((VALUE LUSER) STRING (FAST?) ANY) + <COND (<LENGTH? .N 2> <STRING !.N>) + (T <STRING <1 .N> <ASCII 32> !<REST .N>>)>> + +<DEFINE NICKNAME (LUSER "OPTIONAL" (FAST? <>) + "AUX" (NK <FIELD .LUSER ,$NICK .FAST?>)) + #DECL ((VALUE LUSER) STRING (FAST?) ANY) + <COND (<AND .NK <NOT <EMPTY? .NK>>> + .NK) + (T + <NO-INITIAL <NO-INITIAL <1 <NAME-PARTS .LUSER .FAST?>>>>)>> + +<DEFINE NO-INITIAL (NAME "AUX" INL LEN) + #DECL ((VALUE NAME) STRING (INL) <OR STRING FALSE> (LEN) FIX) + <COND (<AND <SET INL <MEMQ !\. .NAME>> ;"Look for initial." + <NOT <LENGTH? .NAME 5>>> ;"as in Wodehouse, P. G." + <SET LEN <- <LENGTH .NAME> <LENGTH .INL> 1>> + <COND (<AND <G? .LEN 0> + <==? <ASCII 32> <NTH .NAME .LEN>>> + <STRING <SUBSTRUC .NAME 0 <- .LEN 1>> + <REST .INL>> ;" X.") + (<AND <NOT <LENGTH? .INL 1>> + <==? <ASCII 32> <NTH .INL 2>>> + <STRING <SUBSTRUC .NAME 0 .LEN> + <REST .INL 2>> ;"X. ") + (T + <STRING <SUBSTRUC .NAME 0 .LEN> + <REST .INL 1>> ;"X.")>) + (<==? <ASCII 32> <2 .NAME>> + <REST .NAME 2>) + (<==? <ASCII 32> <NTH .NAME <- <LENGTH .NAME> 1>>> + <SUBSTRUC .NAME 0 <- <LENGTH .NAME> 2>>) + (T .NAME)>> + +<DEFINE MAILBOX (LUSER "OPTIONAL" (FAST? <>) "AUX" N) + #DECL ((VALUE LUSER) STRING (FAST?) ANY (N) <OR STRING FALSE>) + <COND (<OR <NOT <SET N <FIELD .LUSER ,$NETA .FAST?>>> + <EMPTY? .N> + <=? .N "DM">> + .LUSER) + (<MEMQ !\@ .N> .N) + (T <STRING .LUSER !\@ .N>)>> + +<DEFINE BIRTHDAY (LUSER "OPTIONAL" (FAST? <>) + "AUX" (BD <FIELD .LUSER ,$BRTH .FAST?>) M MV S X L) + #DECL ((VALUE) <OR FALSE LIST> (LUSER) STRING (FAST? X) ANY (L) LIST + (BD S) <OR STRING FALSE> (M) FIX (MV) <OR FALSE VECTOR>) + <AND .BD + <NOT <LENGTH? .BD 2>> + <OR <AND <SET MV <MEMBER <UPPERCASE <SUBSTRUC .BD 0 3>> + '["DEC" "NOV" "OCT" "SEP" "AUG" "JUL" + "JUN" "MAY" "APR" "MAR" "FEB" "JAN"]>> + <SET M <LENGTH .MV>> + <SET S <MEMQ <ASCII 32> <REST .BD 3>>>> + <AND <SET S <MEMQ !\/ .BD>> + <TYPE? <SET L <LPARSE + <SUBSTRUC .BD 0 <- <LENGTH .BD> <LENGTH .S>>>>> + LIST> ;"for stupid compiler" + <TYPE? <SET X <1 .L>> FIX> + <SET M .X> + <SET BD <REST .S>> + <OR <AND <SET S <MEMQ !\/ .BD>> + <SET S <SUBSTRUC .BD 0 <- <LENGTH .BD> <LENGTH .S>>>>> + <SET S .BD>>>> + <TYPE? <SET L <LPARSE .S>> LIST> ;"for stupid compiler" + <TYPE? <SET X <1 .L>> FIX> + ((.M .X) ())>> + +<DEFINE BD? ("OPTIONAL" (NAMVEC <OR <GET-MFD> '[]>) + (DT <DTNOW>) + ;"Find birthday people of given date in given vector." + "AUX" (NAMLIS ()) MD) + #DECL ((VALUE NAMLIS) <LIST [REST STRING]> (NAMVEC) <VECTOR [REST STRING]> + (DT) <LIST <LIST [REST FIX]>> (MD) <LIST [REST FIX]>) + <SET DT <DTNORM .DT>> + <SET MD <REST <1 .DT>>> + <LSR-INIT> + <MAPF <> + <FUNCTION (NAME "AUX" (B <BIRTHDAY .NAME T>)) + <COND (<AND .B + <=? .MD <1 .B>> + <NOT <MEMBER .NAME .NAMLIS>>> + <SET NAMLIS <CONS .NAME .NAMLIS>>)>> + .NAMVEC> + <LSR-FLUSH> + .NAMLIS> + +<DEFINE BD-MAIL ;"COMSAT-mail MSG to birthday people of given date." + ("OPTIONAL" (DT <DTNOW>) + (MSG '[" +Happy birthday to you! + +Happy birthday to you! + +Happy birthday, dear " ", + +Happy birthday to you! +"]) + "AUX" OUTCHAN BDL C) + #DECL ((DT) <LIST LIST> (MSG) VECTOR (BDL) <LIST [REST STRING]> + (C) <OR CHANNEL FALSE>) + <SET DT <DTNORM .DT>> + <MAPF <> <FUNCTION (DIR "AUX" N) #DECL ((N) <OR STRING FALSE>) + <COND (<SET C <OPEN "PRINT" ".MAIL.;MAIL">> + <SET N <MAILBOX .DIR>> + <SET OUTCHAN .C> + <MAPF <> + ,PRINTSTRING + ( +"FROM-PROGRAM:LSRHIL +FROM:"<XUNAME>" +RCPT:(".N") +TEXT;-1 +" <1 .MSG> <NICKNAME .DIR> <2 .MSG>)> + <CLOSE .C> + <PRINT .DIR ,OUTCHAN> ;"informational Batch output")>> + <SET BDL + <BD? + [!<GET-MFD "AI"> !<GET-MFD "DM"> !<GET-MFD "MC"> !<GET-MFD "ML">] + .DT>>> + <COND (<TYPE? .C CHANNEL> <CLOSE .C>)> + .BDL> + +<ENDPACKAGE> \ No newline at end of file diff --git a/src/mprog2/mail.udl273 b/src/mprog2/mail.udl273 new file mode 100644 index 00000000..bd337be1 --- /dev/null +++ b/src/mprog2/mail.udl273 @@ -0,0 +1,2362 @@ + +<BLOAT 50000 1 30 300 3 30> + +<PACKAGE "MAIL"> + +<ENTRY SAVE-MAIL> + +"For Reader" + +<ENTRY COMPOSING? IN-READER? COMPOS-CHRTABLE MUDDLE-ESCAPE + MAILER MAILER-INIT OPEN-FAILED GET-TEMP GET-IDS FLIP-EDITOR + MSG-NO IN-REPLY-TO ID-IRT SUBJECT CARBON-COPY-TO TEXT SKIP-MSG-NO + FBUF> + +<USE "SYMBOLS" "BUF" "NSTR" "ITIME" "DDT" "JCL" + "PARSE-DATE" "LEXER" "HOSTS" "LSRTNS" "CHKADR"> + +<USE "CTABLE"> + +\ + +"Constant (more or less) GVALS" + +<SETG COMPOSING? <>> + +<SETG IN-READER? <>> + +<SETG MORE-MSGS <>> + +<SETG IFILE "COMSYS;M >"> + +<SETG DUMP-FILE ".MAIL >"> + +<GDECL (CONSOLE-START) FIX + (CPU-START) FLOAT> + +<GDECL (NOTES-LIST) LIST> + +<SETG SAVE-WHERE "DSK:LIBRDR;"> + +;"default directory for save file" + +<SETG DIVERT-HAND + <HANDLER <SETG DIVERT-INT <EVENT "DIVERT-AGC" 1000>> + <FUNCTION (AMT REASON) <BLOAT <+ .AMT 4000>>>>> + +<OFF ,DIVERT-HAND> + +<SETG TTY2 #WORD *030202020202*> ;"let ^G and ^S interrupt" +<SETG BUF-CTL-G? <>> ;"but don't hack ^G" + +\ + +<SETG INITED <>> + +<SETG ASK-ME <SETG MAIL-ASK-ME '("TO" "SUBJECT" "TEXT")>> + +<SETG MSG-ASK-ME '("MSG-FILE" "SUBJECT" "TO" "TEXT")> + +<SETG FORWARD-ASK-ME '("MSG-NO" "TO" "ANNOTATION")> + +<SETG BUG-ASK-ME '("PROGRAM" "SUBJECT" "TEXT")> + +<GDECL (ASK-ME TO-ASK-ME MSG-ASK-ME FORWARD-ASK-ME BUG-ASK-ME) + <LIST [REST STRING]>> + +\ + +<DEFINE SAVE-MAIL (VERNUM "OPTIONAL" (DIR ,SAVE-WHERE)) + #DECL ((VERNUM) <OR FIX FALSE> (DIR) STRING) + <MAILER-INIT> + <COND (<AND .VERNUM + <PROG () + <SNAME ""> + <HANDLER ,DIVERT-INT ,DIVERT-HAND> + <RESET .INCHAN> + <SETG BUF-CTL-G? <>> + T> + <=? <SAVE <STRING .DIR "MAIL" <UNPARSE .VERNUM>>> + "SAVED">> + "SAVED") + (ELSE <MAILER>)>> + +<DEFINE MUDDLE-ESCAPE () + <COND (<LOGGED-IN?> + <SETG BUF-CTL-G? T> + <INTERRUPT "CHAR" <ASCII 7> ,INCHAN> + <SETG BUF-CTL-G? <>>)>> + +<DEFINE LOGGED-IN? ("OPTIONAL" (PRINT? T) "AUX" (U <UNAME>)) + #DECL ((U) STRING) + <COND (<AND <==? <LENGTH .U> 6> + <==? !\_ <1 .U>> + <==? !\_ <2 .U>> + <==? !\_ <3 .U>>> + <AND .PRINT? <PRINC " (Not logged in?) ">> + <>) + (ELSE T)>> + +<DEFINE MAILER-INIT ("OPTIONAL" (REINIT? T)) + #DECL ((REINIT?) <OR ATOM FALSE>) + <COND (<NOT ,INITED> + <INIT-FIELDS> + <INIT-MESSAGE> + <SETG INITED T>) + (ELSE <ALLCLEAR> <INIT-MESSAGE .REINIT?>)>> + +<DEFINE MAILER ("OPTIONAL" (JNAM <JNAME>)) + #DECL ((JNAM) <OR FALSE STRING>) + <INIT> ;"set up BUF defaults" + <COND (<NOT <LOGGED-IN? <>>> <SETG REP ,QUIT>)> + <COND (.JNAM + <SETG COMPOSING? T> + <COND (<MEMBER "FEA" .JNAM> <SETG FEATURE T>) + (<MEMBER "BUG" .JNAM> <SETG BUG T>) + (<MEMBER "REM" .JNAM> <SETG REMIND T>) + (<MEMBER "MSG" .JNAM> <SETG MSG T>) + (<MEMBER "FOR" .JNAM> <SETG FORWARD T>) + (<MEMBER "ANS" .JNAM> <SETG ANSWER T>) + (<MEMBER "COR" .JNAM> <SETG FORWARD T> <SETG CORRECT T>)> + <AND <NOT ,IN-READER?> <JCL?> <HACK-JCL <READJCL>>> + <BUFCLEAR <FBUF ,FROM>> + <COND (<NOT ,FORWARD> <ADDSTRING <FBUF ,FROM> <XUNAME>>)>)> + <COND (<NOT .JNAM> <MESSAGE-LOOP -1>) + (,JCL-CTRL-C <MESSAGE-LOOP 1>) + (<MESSAGE-LOOP 0>)>> + +\ + +"Main message composing and sending loop: + -1 -- reentering from reader + 0 -- Composing/Editing Level + 1 -- Sending level + 2 -- Editing level (after aborted Send) +" + +<DEFINE MESSAGE-LOOP ANOTHER-MSG (CLEVEL) + #DECL ((ANOTHER-MSG) <SPECIAL ACTIVATION> (CLEVEL) <SPECIAL FIX>) + <COND (<G=? .CLEVEL 0> + <SETG ASK-ME ,MAIL-ASK-ME> + <COND (,REMIND <REMIND-HACK>) + (,MSG + <SETG ASK-ME ,MSG-ASK-ME> + <SETG ALWAYSFIELDS ,MSGALWAYS>) + (<OR ,BUG ,FEATURE> + <SETG SKIP-SUBJECT T> + <SETG ALWAYSFIELDS ,BUGALWAYS> + <SETG ASK-ME ,BUG-ASK-ME>) + (,FORWARD + <SETG ASK-ME ,FORWARD-ASK-ME> + <SETG ALWAYSFIELDS ,FWDALWAYS>) + (,ANSWER + <SETG ASK-ME <LIST !,MAIL-ASK-ME>> + <COND (<NOT <0? <BUFLENGTH <FBUF ,IN-REPLY-TO>>>> + <PUTREST <REST ,ASK-ME> + ("IN-REPLY-TO" !<REST ,ASK-ME 2>)>)> + <COND (<NOT <0? <BUFLENGTH <FBUF ,CARBON-COPY-TO>>>> + <PUTREST ,ASK-ME + ("CARBON-COPY-TO" !<REST ,ASK-ME>)>)> + <SETG ANSWER <>>)> + <SETG CPU-START <TIME>> + <SETG CONSOLE-START <ITIME>>) + (ELSE <SET CLEVEL 0>)> + <KLUDGE-IT>> + +<DEFINE KLUDGE-IT () + <REPEAT LERR\ !-INTERRUPTS (CLOOP) + #DECL ((LERR\ !-INTERRUPTS CLOOP) <SPECIAL ACTIVATION>) + <SET CLOOP .LERR\ !-INTERRUPTS> + <COND (<0? .CLEVEL> <LAZY-MSG ,ASK-ME ,COMPOSING?>)> + <COND (<1? .CLEVEL> + <COND (,JCL-CTRL-C + <COND (<SEND-NORMAL>) + (ELSE + <PROG ((OUTCHAN .OUTCHAN)) + #DECL ((OUTCHAN) CHANNEL) + <CRLF> + <PRINC "ERROR">> + <SET CLEVEL 2>)> + <SETG JCL-CTRL-C <>>) + (ELSE <SEND-LOOP>)>)> + <COND (<==? .CLEVEL 2> + <EDIT-LOOP>)>>> + +\ + +"Here to initiate another message: + If MORE-MSGS is T, clears out volatile buffers, sets level to 0 again. + If MORE-MSGS is <>, QUITs. +" + +<DEFINE NEXT-MSG () + #DECL ((ANOTHER-MSG) ACTIVATION) + <SETG COMPOSING? <>> + <COND (,IN-READER? <RETURN T .ANOTHER-MSG>) + (,MORE-MSGS + <ALLCLEAR> + <INIT-MESSAGE T> + <SET CLEVEL 0> + <AGAIN .ANOTHER-MSG>) + (ELSE <QUIT>)>> + +<DEFINE QUITIT () + <SETG COMPOSING? <>> + <COND (,IN-READER? <RETURN <> .ANOTHER-MSG>) + (ELSE <QUIT>)>> + +"Redo the Message loop at a given level" + +<DEFINE GO-TO-LEVEL (N "AUX" CL) + #DECL ((N) FIX (CL) ANY) + <SET CLEVEL .N> + <AND <ASSIGNED? CLOOP> + <LEGAL? <SET CL .CLOOP>> + <AGAIN .CL>>> + +<DEFINE SEND-LEVEL ("OPTIONAL" X Y) + <GO-TO-LEVEL 1>> + +<DEFINE SEND-LOOP ("AUX" (OUTCHAN .OUTCHAN)) + #DECL ((OUTCHAN) CHANNEL) + <REPEAT LERR\ !-INTERRUPTS () + #DECL ((LERR\ !-INTERRUPTS) <SPECIAL ACTIVATION>) + <PRINC "A"> + <PROG COMMAND-LOOP-ACTIVATION () + #DECL ((COMMAND-LOOP-ACTIVATION) <SPECIAL ACTIVATION>) + <SEND-COMMANDS>>>> + +<DEFINE NEXT-LEVEL ("OPTIONAL" X Y) + #DECL ((CLEVEL) FIX) + <COND (,IN-READER? <RETURN <> .ANOTHER-MSG>) + (<1? .CLEVEL> <SEND-LEVEL>) + (ELSE <EDIT-LEVEL>)>> + +<DEFINE EDIT-LEVEL ("OPTIONAL" X Y) + <GO-TO-LEVEL 2>> + +<DEFINE EDIT-LOOP ("AUX" (OUTCHAN .OUTCHAN)) + #DECL ((OUTCHAN) CHANNEL) + <REPEAT LERR\ !-INTERRUPTS () + #DECL ((LERR\ !-INTERRUPTS) <SPECIAL ACTIVATION>) + <PRINC "A"> + <PROG COMMAND-LOOP-ACTIVATION () + #DECL ((COMMAND-LOOP-ACTIVATION) <SPECIAL ACTIVATION>) + <EDIT-COMMANDS>>>> + +<DEFINE EDIT-ONCE (BUF CH "AUX" (OUTCHAN .OUTCHAN)) + #DECL ((BUF) BUFFER (CH) CHARACTER (OUTCHAN) CHANNEL) + <PRINC "A"> + <EDIT-COMMANDS> + <BUFPRINT .BUF>> + +<DEFINE EDIT-SEND (BUF CH "AUX" (OUTCHAN .OUTCHAN)) + #DECL ((BUF) BUFFER (CH) CHARACTER (OUTCHAN) CHANNEL) + <PRINC "A"> + <EDIT-COMMANDS> + <GO-TO-LEVEL .CLEVEL>> + +\ + +"Initialize buffers and top-level variables" + +<DEFINE INIT-MESSAGE ("OPTIONAL" (REINIT <>)) + #DECL ((REINIT) <OR ATOM FALSE>) + <COND (<NOT .REINIT> ;"one-time initialization" + <SETG BUG <>> ;"T if its :BUG" + <SETG FEATURE <>> ;"T if its :FEATURE" + <SETG REMIND <>> ;"T if its :REMIND" + <SETG MSG <>> ;"T if its :MSG" + <SETG FORWARD <>> ;"T if its :FORWARD" + <SETG CORRECT <>> ;"T if its :CORRECT" + <SETG ANSWER <>>)> + <PUT ,ACK-CONDS 1 <>> + <PUT ,ACK-CONDS 2 <>> + <SETG ALWAYSFIELDS ,TOALWAYS> ;"fields that must be included" + <SETG EXPIRES <>> ;"When a :MSG expires, default one week" + <SETG SKIP-TO <>> ;"T if To specified in JCL" + <SETG SKIP-SUBJECT <>> ;"T if Subject to be skipped (as in BUG)" + <SETG SKIP-MSG-FILE <>> ;"T if MSG file given in JCL" + <SETG SKIP-MSG-NO <>> + <SETG JCL-CTRL-C <>> ;"T if ^C encountered on JCL line" + <SETG JCL-TEXT <>> ;"T if text on JCL line" + <SETG STIME <>> ;"When to deliver message: <> ==> ASAP" + "DONE"> + +\ + +"**************** AUTOMATIC MESSAGE COMPOSER ************************" + +"Simple message sender" + +<DEFINE LAZY-MSG (LFLDS PREFER + "AUX" (FLDS <VECTOR !.LFLDS>) (MBF ,FIELD-TABLE) X INFO) + #DECL ((LFLDS) LIST (FLDS) <VECTOR [REST STRING]> (X) STRING + (MBF) <UVECTOR [REST VECTOR]> (INFO) <OR FALSE VECTOR>) + <COND (<SET INFO <MEMBER .PREFER .FLDS>> + <SET FLDS .INFO>)> + <REPEAT () + <COND (<EMPTY? .FLDS> + <SET CLEVEL 1> + <RETURN>) + (ELSE <SET X <1 .FLDS>>)> + <COND (<AND <OR <=? .X "TO"> <=? .X "PROGRAM">> ,SKIP-TO> + <SETG SKIP-TO <>>) + (<AND <=? .X "SUBJECT"> ,SKIP-SUBJECT> + <SETG SKIP-SUBJECT <>>) + (<AND <=? .X "MSG-FILE"> ,SKIP-MSG-FILE> + <SETG SKIP-MSG-FILE <>>) + (<AND <=? .X "MSG-NO"> ,SKIP-MSG-NO> + <SETG SKIP-MSG-NO <>>) + (<SET INFO <FIELD? .X .MBF>> + <SETG COMPOSING? .X> + <COND (<PROG COMMAND-LOOP-ACTIVATION () + #DECL ((COMMAND-LOOP-ACTIVATION) + <SPECIAL ACTIVATION>) + <FAP .INFO T>>) + (<N==? .FLDS <TOP .FLDS>> + <SET FLDS <BACK .FLDS>> + <AGAIN>)>)> + <SET FLDS <REST .FLDS>>>> + +"Back up one in Lazy-MSG" + +<DEFINE LAZY-CTRL-R (A B) + #DECL ((GETSTRACT) <SPECIAL ACTIVATION>) + <COND (<REENTER-COMMAND-LOOP>) + (<RETURN 0 .GETSTRACT>)>> + +<DEFINE FIELD? (STR FT) + #DECL ((STR) STRING (FT) <UVECTOR [REST VECTOR]> (VALUE) <OR VECTOR FALSE>) + <MAPF <> + <FUNCTION (I) + #DECL ((I) VECTOR) + <COND (<=? .STR <SPNAME <FLDNM .I>>> + <MAPLEAVE .I>)>> + .FT>> + +\ + +"*********************** 'EDIT' MODE COMMANDS ********************" + +"Edit-level commands dispatch to here -- + Each of these functions is a command handler" + +"Exit command mode" + +<DEFINE EDIT-FLUSH () + <COND (<==? .CLEVEL 2> <SEND-LEVEL>) + (ELSE + <PROG ((OUTCHAN .OUTCHAN)) + #DECL ((OUTCHAN) CHANNEL) + <PRINC "(Done) "> + <CRLF>>)>> + +"Here to set ^E function -- either Teco or Imedit" + +<DEFINE FLIP-EDITOR ("AUX" EDT FIL (OUTCHAN .OUTCHAN)) + #DECL ((EDT) <LIST [REST STRING]> (FIL) STRING (OUTCHAN) CHANNEL) + <SET EDT <GET-TEMP "Editor to use" ,DBRKS ,TECO-PROGRAM>> + <COND (<==? <LENGTH .EDT> 1> + <SET FIL <ANYTHING <1 .EDT>>> + <SET FIL <UPPERCASE .FIL>> + <PRINC "Using TECO (as 'TS "> + <PRINC .FIL> + <PRINC "') +"> + <SETG TECO-PROGRAM .FIL>) + (ELSE + <PRINC +"I can't understand that. Please type the name of the job to run, +e.g., TECO, T, RMODE, EMACS, etc. +"> + <>)>> + +\ + +"Print out a mail file onto a channel" + +<SETG ACK-CONDS (<> <>)> +<GDECL (ACK-CONDS) <LIST [REST <OR FALSE STRING>]>> + +<DEFINE PRMAIL ("OPTIONAL" (OUTCHAN .OUTCHAN)) + #DECL ((OUTCHAN) <SPECIAL CHANNEL>) + <COND (<NOT ,FORWARD> + <PRINT "WHEN-ORIGINATED"> + <PRINT <ITIME>> + <PRINT "SENDER"> + <PRINT <XUNAME>>)> + <MAPF <> + <FUNCTION (INFO) + #DECL ((INFO) VECTOR) + <AND <PFIELD .INFO> + <APPLY <PFIELD .INFO> .INFO>>> + ,FIELD-TABLE> + <COND (,EXPIRES <PRINT "EXPIRES"> <PRIN1 ,EXPIRES>)> + <COND (<OR? !,ACK-CONDS> + <PRINT "ACKNOWLEDGE"> + <PRINT <MAPF ,LIST + <FUNCTION (S) + #DECL ((S) <OR STRING FALSE>) + <COND (<NOT .S> <MAPRET>) + (<=? .S "FAILED"> + <LIST "DELIVERY" ,FAILED 1>) + (<LIST .S <> 2>)>> + ;"STANDARD ACK FCN #2" + ,ACK-CONDS>>)> + <COND (<NOT ,FORWARD> + <PRINT "CONSOLE-MINUTES"> + <PRINC <- <ITIME> ,CONSOLE-START>> + <PRINT "CPU-SECONDS"> + <PRINC <- <TIME> ,CPU-START>>)>> + +\ + +"PTO -- print to-lists; deals with all to-style lists" + +<DEFINE PTO (INFO + "AUX" TOL BLOL CCTOL (NOTESTO ()) (HAS-TO? T) (OUTCHAN .OUTCHAN)) + #DECL ((INFO) VECTOR (FORWTO TOL BLOL CCTOL NOTESTO) LIST + (HAS-TO?) <OR ATOM FALSE> (OUTCHAN) CHANNEL) + <SET TOL <FINDHOSTS ,TO>> + <COND (<OR ,BUG ,FEATURE> + <SET TOL + <LIST !.TOL + !<FINDHOSTS ,PROGRAM + <COND (,BUG "BUG-") + (ELSE "FEATURE-")>>>>)> + <SET BLOL <FINDHOSTS ,BLIND>> + <SET CCTOL <FINDHOSTS ,CARBON-COPY-TO>> + <COND (<NOT <EMPTY? ,NOTES-LIST>> + <REPEAT ((NL ,NOTES-LIST) (BEG .NL) A NT) + #DECL ((NL) <LIST LIST> (BEG A NT) LIST) + <COND (<0? <BUFLENGTH <2 <1 .NL>>>>) + (ELSE + <PUT ,NOTES ,FBUF <1 <1 .NL>>> + <COND (<EMPTY? <SET A <FINDHOSTS ,NOTES>>>) + (<COND (<EMPTY? .NOTESTO> <SET NOTESTO .A>) + (ELSE <PUTREST .NT .A>)> + <SET NT <REST .A <- <LENGTH .A> 1>>>)>)> + <COND (<==? <SET NL <REST .NL>> .BEG> <RETURN>)>>)> + <COND (<AND ,FORWARD <NOT <EMPTY? .TOL>>> + <PFORWARD .TOL .NOTESTO>) + (<NOT <AND <EMPTY? .TOL> + <EMPTY? .CCTOL> + <EMPTY? .BLOL> + <EMPTY? .NOTESTO>>> + <PRINT <SPNAME <FLDNM .INFO>>> + <CRLF> + <PRINC !\(> + <PUNIQUE !.TOL !.CCTOL !.BLOL !.NOTESTO> + <PRINC !\)>) + (ELSE <SET HAS-TO? <>>)> + <COND (<AND <NOT ,FORWARD> <NOT <EMPTY? .TOL>>> + <PRINT "ACTION-TO"> + <PRINT .TOL>)> + <COND (<NOT <EMPTY? .CCTOL>> <PRINT "CARBON-COPY-TO"> <PRINT .CCTOL>)> + <COND (<NOT <EMPTY? .BLOL>> + <PRINT "BLIND"> + <PRINT <MAPF ,LIST + <FUNCTION (A) + #DECL ((A) STRING) + ((.A) (.A))> + .BLOL>>)> + <COND (,CORRECT + <PRINT "EMERGENCY"> + <PRINT '("CORRECTION")>) + (.HAS-TO? + <COND (<AND ,REMIND ,STIME> + <PRINT '"REMIND"> + <PRIN1 ,STIME>)> + <CRLF> + <PRINC "\"SCHEDULE\" (\"SENDING\""> + <PRINC !\)>)>> + +\ + +<DEFINE PFROM (INFO "AUX" (X <XUNAME>) FR L F S UNDER?) + #DECL ((INFO) VECTOR (FR) BUFFER (L) <LIST [REST STRING]> + (UNDER?) <OR ATOM FALSE> (X F S) STRING) + <SET UNDER? + <AND <==? <1 .X> !\_> + <==? <2 .X> !\_> + <==? <3 .X> !\_>>> + <REPEAT () + <COND (<AND .UNDER? + <SET L <BUFLEX <SET FR <FBUF .INFO>>>> + <NOT <EMPTY? .L>> + <SET F <1 .L>> + <==? <1 .F> !\_> + <==? <2 .F> !\_> + <==? <3 .F> !\_>> + <SET S + <CORRECT-ADDRESS <PR1 .INFO> + "You must give your name instead of" + .F + "Real name">> + <PUT .L 1 .S> + <REMAKE .FR .L>) + (ELSE + <PONE .INFO> + <RETURN>)>>> + +\ + +"PFORWARD -- print special to-list for forwarding message" + +<DEFINE PFORWARD (TOL NOTESTO "AUX" (OUTCHAN .OUTCHAN) X) + #DECL ((TOL NOTESTO) LIST (OUTCHAN) CHANNEL (X) STRING) + <PRINT "MORE-TO"> + <CRLF> + <PRINC !\(> + <PUNIQUE !.TOL !.NOTESTO> + <PRINC !\)> + <CRLF> + <COND (<NOT ,CORRECT> + <PRINC "(\"FORWARDING\" \"APPEND\")"> + <CRLF> + <PRINC "((("> + <PRIN1 <SET X <XUNAME>>> + <PRINC !\ > + <PUNIQUE !.TOL !.NOTESTO> + <PRINC ") (("> + <PRIN1 .X> + <PRINC !\ > + <PRIN1 .TOL> + <PRINC !\ > + <PRIN1 <ITIME>> + <PRINC "))))">)>> + +<DEFINE PMSG-FILE (INFO "AUX" (BUF <FBUF .INFO>)) + #DECL ((INFO) VECTOR (BUF) BUFFER) + <COND (<NOT <EMPTY-FIELD .INFO>> + <PROG ((OUTCHAN .OUTCHAN)) + #DECL ((OUTCHAN) CHANNEL) + <PRINT "MSG-FILE"> + <BUFSPRINT .BUF>>)>> + +\ + +"Printers for fields which are message ids" + +<DEFINE PIDS (INFO "AUX" X (OUTCHAN .OUTCHAN)) + #DECL ((INFO) VECTOR (X) <OR FALSE <LIST [REST STRING]>> (OUTCHAN) CHANNEL) + <COND (<SET X <FINDIDS .INFO>> + <PRINT <SPNAME <FLDNM .INFO>>> + <PRINC .X>)>> + +<DEFINE PID (INFO "AUX" X (OUTCHAN .OUTCHAN)) + #DECL ((INFO) VECTOR (X) <OR FALSE <LIST [REST STRING]>> (OUTCHAN) CHANNEL) + <COND (<AND <SET X <FINDIDS .INFO>> + <==? <LENGTH? .X 1> 1>> + <PRINT <SPNAME <FLDNM .INFO>>> + <PRINC <1 .X>>)>> + +<DEFINE FINDIDS (INFO "OPTIONAL" (P? T) "AUX" (BUF <FBUF .INFO>) XX) + #DECL ((INFO) VECTOR (BUF) BUFFER (XX) <LIST [REST STRING]> + (P?) <OR ATOM FALSE>) + <PROG () + <COND (<OR <0? <BUFLENGTH .BUF>> + <EMPTY? <SET XX <BUFLEX .BUF>>>> + <>) + (<MAPR <> + <FUNCTION (X "AUX" S) + #DECL ((X) <LIST [REST STRING]> + (S) <OR STRING FALSE>) + <COND (<CHECK-FIX <1 .X>>) + (ELSE + <SET S <CORRECT-ADDRESS + <AND .P? <PR1 .INFO>> + "Message id is not a number" + <1 .X> + "Message id">> + <PUT .X 1 .S> + <REMAKE .BUF .XX> + <MAPLEAVE <>>)>> + .XX> + .XX) + (ELSE <AGAIN>)>>> + +<DEFINE CHECK-FIX (S) + #DECL ((S) STRING) + <MAPF <> + <FUNCTION (C) + #DECL ((C) CHARACTER) + <COND (<AND <G=? <ASCII .C> <ASCII !\0>> + <L=? <ASCII .C> <ASCII !\9>>>) + (ELSE <MAPLEAVE <>>)>> + .S>> + +\ + +"General message field printers for various sorts of fields" + +<DEFINE PUNIQUE ("TUPLE" TL "AUX" (OUTCHAN .OUTCHAN)) + #DECL ((TL) <TUPLE [REST STRING]> (OUTCHAN) CHANNEL) + <MAPR <> + <FUNCTION (A "AUX" (A1 <1 .A>)) + #DECL ((A) <TUPLE [REST STRING]> (A1) STRING) + <COND (<NOT <MEMBER .A1 <REST .A>>> + <PRIN1 .A1> <PRINC !\ >)>> + .TL>> + +<DEFINE PSTR (INFO "AUX" (BUF <FBUF .INFO>)) + #DECL ((INFO) VECTOR (BUF) BUFFER) + <COND (<0? <BUFLENGTH .BUF>>) + (ELSE + <PRINT <SPNAME <FLDNM .INFO>>> + <BUFSPRINT .BUF>)>> + +<DEFINE PLST (INFO "AUX" (BUF <FBUF .INFO>)) + #DECL ((INFO) VECTOR (BUF) BUFFER) + <COND (<0? <BUFLENGTH .BUF>>) + (<PROG ((OUTCHAN .OUTCHAN)) + #DECL ((OUTCHAN) CHANNEL) + <PRINT <SPNAME <FLDNM .INFO>>> + <PRINT <BUFLEX .BUF>>>)>> + +<DEFINE PONE (INFO "AUX" (BUF <FBUF .INFO>) L) + #DECL ((INFO) VECTOR (BUF) BUFFER (L) <LIST [REST STRING]>) + <COND (<OR <0? <BUFLENGTH .BUF>> + <EMPTY? <SET L <BUFLEX .BUF>>>>) + (<PROG ((OUTCHAN .OUTCHAN)) + #DECL ((OUTCHAN) CHANNEL) + <PRINT <SPNAME <FLDNM .INFO>>> + <PRINT <1 .L>>>)>> +\ + +"Printers for specific sorts of fields" + +<DEFINE PSUBJ (INFO + "AUX" (SBUF <FBUF .INFO>) (BEMPTY? <0? <BUFLENGTH .SBUF>>) + (TOBUF <FBUF ,TO>) (PBUF <FBUF ,PROGRAM>)) + #DECL ((INFO) VECTOR (SBUF TOBUF PBUF) BUFFER + (BEMPTY?) <OR ATOM FALSE>) + <COND (<AND .BEMPTY? <OR ,BUG ,FEATURE ,REMIND>> + <COND (<OR ,BUG ,FEATURE> + <ADDSTRING .SBUF <COND (,BUG "BUG")(ELSE "FEATURE")>> + <COND (<NOT <0? <BUFLENGTH .PBUF>>> + <ADDSTRING .SBUF " => "> + <ADDSTRING .SBUF <1 .PBUF> <BUFLENGTH .PBUF>>)>) + (,REMIND + <ADDSTRING .SBUF "REMINDER"> + <COND (<NOT <0? <BUFLENGTH .TOBUF>>> + <ADDSTRING .SBUF + " for " + <1 .TOBUF> + <BUFLENGTH .TOBUF>>)>)> + <SET BEMPTY? <>>)> + <COND (<NOT .BEMPTY?> + <PRINT <SPNAME <FLDNM .INFO>>> + <BUFSPRINT .SBUF>)>> + +<DEFINE PEXPUSING (INFO) + #DECL ((INFO) VECTOR) + <PEXPAND <GET-FILES .INFO>>> + +<DEFINE PEXPAND (LF) + #DECL ((LF) <LIST [REST STRING]>) + <REPEAT () + <COND (<EMPTY? .LF> <RETURN>) + (<PROG ((OUTCHAN .OUTCHAN)) + #DECL ((OUTCHAN) CHANNEL) + <PRINT '("EXPAND-USING" "ADD")> + <PRINT <1 .LF>>>)> + <SET LF <REST .LF>>>> + + +"The notes list consists of a list of two element lists. Each of +the two elements is a buffer. The first is the addressee buffer, +the second the text buffer. NOTE!!!!! The list is circular, with +the current last buffer edited being the pointer into it. BE +CAREFUL GROVELLING OVER THIS CROCK!!!!!!! " + +<DEFINE PNOTES (INFO "AUX" (NL ,NOTES-LIST) (BEG .NL) (PL ()) AL N P + (OUTCHAN .OUTCHAN) ANN) + #DECL ((INFO) VECTOR (NL BEG) LIST (OUTCHAN) CHANNEL + (PL) <LIST [REST <OR STRING LIST> LIST]> + (AL) <LIST [REST STRING]> (N) <LIST BUFFER BUFFER> + (ANN) <OR FALSE BUFFER> (P) <OR FALSE LIST>) + <PROG () + <COND (<AND <EMPTY? .NL> + <0? <BUFLENGTH <SET ANN <FBUF ,ANNOTATION>>>>> + <RETURN>)> + <COND (<EMPTY? .NL>) + (<==? .BEG <REST .NL>> + <COND (<0? <BUFLENGTH <2 <SET N <1 .BEG>>>>>) + (ELSE + <PUT .INFO ,FBUF <1 .N>> + <SET PL (<FINDHOSTS .INFO> (<2 .N>))>)>) + (<REPEAT () + <SET NL <REST .NL>> + <COND (<0? <BUFLENGTH <2 <SET N <1 .NL>>>>>) + (ELSE + <PUT .INFO ,FBUF <1 .N>> + <SET AL <FINDHOSTS .INFO>> + <MAPF <> + <FUNCTION (A) + #DECL ((A) STRING) + <COND (<SET P <MEMBER .A .PL>> + <PUT .P 2 (<2 .N> !<2 .P>)>) + (<SET PL (.A (<2 .N>) !.PL)>)>> + .AL>)> + <COND (<==? .NL .BEG> <RETURN>)>>)> + <COND (<AND <EMPTY? .PL> <NOT .ANN>> + <RETURN>)> + <CRLF> + <AND ,FORWARD <PRINC !\(>> + <PRIN1 <SPNAME <FLDNM .INFO>>> + <AND ,FORWARD <PRINC " \"APPEND\")">> + <CRLF> + <PRINC !\(> + <COND (.ANN + <PRINC !\(> + <PRIN1 (<XUNAME> !<FINDHOSTS ,TO>)> + <CRLF> + <PRINC !\(> + <PRINC "\"[From "> + <PRINC <XUNAME>> + <PRINC "]\" "> + <CRLF> + <BUFSPRINT!-BUF!-PACKAGE .ANN> + <PRINC "))">)> + <REPEAT (P1) + #DECL ((P1) LIST) + <COND (<EMPTY? .PL> <PRINC !\)> <CRLF> <RETURN>)> + <COND (<TYPE? <1 .PL> LIST> <SET P1 <1 .PL>>) + (ELSE <SET P1 (<1 .PL>)>)> + <COND (<SET P <NEMBER <2 .PL> <REST .PL 2>>> + <COND (<TYPE? <1 .P> LIST> + <PUT .P 1 (!.P1 !<1 .P>)>) + (ELSE <PUT .P 1 (<1 .P> !.P1)>)>) + (ELSE + <CRLF> + <PRINC !\(> + <PRIN1 <COND (,FORWARD (<XUNAME> !.P1)) + (ELSE .P1)>> + <CRLF> + <PRINC !\(> + <COND (,FORWARD + <PRINC "\"[From "> + <PRINC <XUNAME>> + <PRINC "]\" ">)> + <MAPF <> ,BUFSPRINT!-BUF!-PACKAGE <2 .PL>> + <PRINC "))">)> + <SET PL <REST .PL 2>>>>> + +"Pseudo-MEMBER for notes list. Check for a message entry that +is like the one we have. Like means same length and notes +buffers in it. Message entries are even numbered elements of +the structure and consist of lists of buffers." + +<DEFINE NEMBER (X S "AUX" M (LX <LENGTH .X>)) + #DECL ((LX) FIX (S) <LIST [REST ANY <LIST [REST BUFFER]>]> + (VALUE) <OR FALSE LIST> (X M) <LIST [REST BUFFER]>) + <REPEAT () + <COND (<EMPTY? .S> <RETURN <>>)> + <SET M <2 .S>> + <AND <==? .LX <LENGTH .M>> + <MAPF <> + <FUNCTION (M1 X1) + #DECL ((M1 X1) BUFFER) + <COND (<==? .M1 .X1>) + (ELSE <MAPLEAVE <>>)>> + .M .X> + <RETURN .S>> + <SET S <REST .S 2>>>> + +\ + +<DEFINE FNAME (STR "AUX" (CH <CHANNEL "READ" .STR>)) + #DECL ((STR) STRING (CH) CHANNEL) + <STRING <7 .CH> !\ <8 .CH> !\ <9 .CH> !\: <10 .CH> !\;>> + +<DEFINE PENCLOSURES (INFO "AUX" (FL <GET-FILES .INFO>)) + #DECL ((FL) <LIST [REST STRING]> (INFO) VECTOR) + <COND (<EMPTY? .FL>) + (<PROG ((OUTCHAN .OUTCHAN)) + #DECL ((OUTCHAN) CHANNEL) + <PRINT <SPNAME <FLDNM .INFO>>> + <PRINC !\(> + <MAPF <> + <FUNCTION (X "AUX" C) + #DECL ((X) STRING (C) <OR CHANNEL FALSE>) + <COND (<SET C <CHANNEL "READ" <UPPERCASE .X>>> + <PRINC !\[> + <PRIN1 <7 .C>> + <PRINC !\ > + <PRIN1 <8 .C>> + <PRINC !\ > + <PRIN1 <9 .C>> + <PRINC !\ > + <PRIN1 <10 .C>> + <PRINC !\]> + <CRLF>)>> + .FL> + <PRINC !\)>>)>> + +<DEFINE PFILE-OUTPUT (INFO) + #DECL ((INFO) VECTOR) + <PFILES <GET-FILES .INFO <>>>> + +<DEFINE PFILES (FL) + #DECL ((FL) <LIST [REST STRING]>) + <COND (<EMPTY? .FL>) + (ELSE + <PROG ((OUTCHAN .OUTCHAN)) + #DECL ((OUTCHAN) CHANNEL) + <PRINT "SCHEDULE"> + <PRINT '("FILE-OUTPUT" #FALSE ())> + <PRINT '("AUTHOR-FILE-OUTPUT" "APPEND")> + <PRINC !\(> + <MAPF <> + <FUNCTION (X) + #DECL ((X) STRING) + <TERPRI> + <PRINC !\(> + <PRIN1 <FNAME .X>> + <PRINC !\ > + <PRIN1 "APPEND"> + <PRINC !\)>> + .FL> + <PRINC !\)> + <TERPRI>>)>> + +"Returns a LIST of File names for FILE-OUTPUT" + +<DEFINE GET-FILES (INFO "OPTIONAL" (EXIST? T) "AUX" (BF <FBUF .INFO>)) + #DECL ((EXIST?) <OR ATOM FALSE> (VALUE) <LIST [REST STRING]> + (INFO) VECTOR (BF) BUFFER) + <MAPF ,LIST + <FUNCTION (S "AUX" R) + #DECL ((S) STRING (R) <OR ATOM <FALSE STRING>>) + <PROG () + <COND (<NOT <GOOD-FILE-NAME? .S>> + <SET S <CORRECT-ADDRESS <PR1 .INFO> + "File name incomprehensible?" + .S + "File" + <> + ,FILEBRKS>> + <AGAIN>) + (<AND .EXIST? <NOT <SET R <FILE-EXISTS? .S>>>> + <SET S <CORRECT-ADDRESS <PR1 .INFO> + <1 .R> + .S + "File" + <> + ,FILEBRKS>> + <AGAIN>) + (ELSE .S)>>> + <BUFLEX .BF ,FILEBRKS>>> + +<SETG FILEBRKS ", +"> + +<GDECL (FILEBRKS) STRING> + +<DEFINE GOOD-FILE-NAME? (ST "AUX" (SP 0) (CL 0) (SM 0) C) + #DECL ((ST) <OR FALSE STRING> (SP CL SM) FIX (C) CHARACTER) + <COND (<ANYTHING .ST> + <REPEAT () + <COND (<OR <NOT .ST> <EMPTY? .ST>> + <RETURN <AND <L? .CL 2> <L? .SM 2> <L? .SP 2>>>) + (<AND <==? <SET C <1 .ST>> !\> <NOT <LENGTH? .ST 2>>> + <SET ST <REST .ST 2>>) + (<==? .C !\ > + <SET SP <+ .SP 1>> + <SET ST <ANYTHING <REST .ST>>>) + (<==? .C !\:> + <SET CL <+ .CL 1>> + <SET ST <ANYTHING <REST .ST>>>) + (<==? .C !\;> + <SET SM <+ .SM 1>> + <SET ST <ANYTHING <REST .ST>>>) + (ELSE <SET ST <REST .ST>>)>>)>> + +\ + +"Buffer parser" + +<DEFINE BUFLEX (BF + "OPTIONAL" (BRKS ,TOBRKS) (ENDS "") + "AUX" (BAL <>) (LL ("")) (L .LL) (S <1 .BF>) (S1 .S) + (SX <2 .BF>) ST (Q? <NOT <MEMQ !\/ .BRKS>>) + (ADR? <OR <==? .BRKS ,JCLBRKS> <==? .BRKS ,TOBRKS>>) C CC) + #DECL ((BF) BUFFER (C ST) <OR STRING FALSE> (S S1 SX BRKS ENDS CC) STRING + (BAL Q?) <OR ATOM FALSE> (VALUE) <OR FALSE LIST> + (ADR?) <OR FALSE ATOM> (LL L) <LIST [REST STRING]>) + <REPEAT () + <COND (<AND .ADR? + <G? <LENGTH .S1> <LENGTH .SX>> + <OR <AND <MEMQ <1 .S1> " "> + <SET C <ANYTHING .S1 .SX>> + <MEMQ <1 .C> "@%">> + <MEMQ <1 <SET C .S1>> "@%">>> + <SET S1 .C> + <AND <SET C <ANYTHING <REST .S1> .SX>> + <SET S1 .C>> + <AGAIN>)> + <COND (<OR <==? <LENGTH .S1> <LENGTH .SX>> + <MEMQ <1 .S1> .BRKS> + <MEMQ <1 .S1> .ENDS> + <AND .Q? <==? <1 .S1> !\/>>> + <AND <N==? .S .S1> + <PUTREST .L + <SET L + (<CONSTRUC .S .S1 .ADR?>)>>> + <COND (<==? <LENGTH .S1> <LENGTH .SX>> + <RETURN <REST .LL>>) + (<MEMQ <1 .S1> .ENDS> + <COND (<AND <SET ST <ANYTHING .S1 .SX>> + <SET S1 .ST> + <NOT <AND .Q? <==? <1 .S1> !\/>>>> + <SET CC <SUBSTRUC .S1 0 <- <LENGTH .S1> <LENGTH .SX>>>> + <COND (<EMPTY? .CC> <RETURN <REST .LL>>) + (ELSE + <PUT .LL 1 .CC> + <RETURN <CHTYPE .LL FALSE>>)>)>)> + <SET BAL <>> + <SET S <COND (<AND .Q? <==? <1 .S1> !\/>> .S1)(<REST .S1>)>>) + (<==? <1 .S1> %<ASCII *134*>> <SET S1 <REST .S1>>)> + <COND (<AND <NOT .BAL> + <NOT <EMPTY? .S>> + <SET C <MEMQ <1 .S> "([{">> + <SET C <BALANCED? .S .SX>>> + <SET S1 .C> + <SET BAL T>)> + <OR <EMPTY? .S1> <SET S1 <REST .S1>>>>> + +<DEFINE CONSTRUC (S S1 ADR? "AUX" TMP (AT? <>)) + #DECL ((S S1) STRING (ADR? AT?) <OR ATOM FALSE> + (TMP) <OR FALSE STRING>) + <MAPR ,STRING + <FUNCTION (ST "AUX" (C <1 .ST>)) + #DECL ((ST) STRING (C) CHARACTER) + <COND (<==? .ST .S1> <MAPSTOP>) + (<AND .ADR? <MEMQ .C "@%">> + <SET AT? T> + <MAPRET !\@>) + (<AND .ADR? + <MEMQ .C " "> + <SET TMP <ANYTHING .ST .S1>> + <OR .AT? <MEMQ <1 .TMP> "@%">>> + <MAPRET>) + (<==? .C %<ASCII *134*>> <MAPRET>) + (ELSE <SET AT? <>> <MAPRET .C>)>> + .S>> + +<DEFINE BALANCED? (L "OPTIONAL" (R <REST .L <LENGTH .L>>) + "AUX" (OP <STRSRC <REST .L> "([{">) (BR <1 .L>) RB CL) + #DECL ((R) STRING (L) STRING (OP CL VALUE) <OR STRING FALSE> + (BR RB) CHARACTER) + <REPEAT ((L .L)) + #DECL ((L) STRING) + <COND (<SET CL <MEMQ <SET RB <COND (<==? .BR !\(> !\)) + (<==? .BR !\[> !\]) + (<==? .BR !\{> !\})>> + <REST .L>>> + <AND <N==? <1 <BACK .CL>> %<ASCII *134*>> + <RETURN T>> + <SET L .CL>) + (<RETURN <>>)>> + <COND (<OR <NOT .OP> <AND .CL <L? <LENGTH .OP> <LENGTH .CL>>>> + <AND <G? <LENGTH .CL> <LENGTH .R>> .CL>) + (.CL + <AND <SET L <BALANCED? .OP .R>> + <MEMQ .RB <REST .L>>>)>> + +<DEFINE ADDBREAK (BF CHR) + #DECL ((VALUE BF) BUFFER (CHR) CHARACTER) + <COND (<OR <==? <LENGTH <1 .BF>> <LENGTH <2 .BF>>> ;"nothing in buffer" + <MEMQ <1 <BACK <2 .BF>>> ,KEYBREAKS>> + .BF) ;"already broken" + (<ADDCHR .BF .CHR>)>> + +<DEFINE MAILCRLF (BF CHR) + #DECL ((BF) BUFFER (CHR) CHARACTER (OUTCHAN) CHANNEL) + <COND (<BUF-BITS .BF 35> ;"terminate on crlf" + <PUT .OUTCHAN 14 0> + <RETURN .BF .GETSTRACT>) + (ELSE <ADDCRLF .BF .CHR>)>> + +<DEFINE RETBUF (BF CHR) + #DECL ((BF) BUFFER (CH) CHARACTER) + <PRINC .CHR> + <PUT .OUTCHAN 14 1> + <RETURN .BF .GETSTRACT>> + +"Keyword extractors" + +<DEFINE KEYWEX (BUF CHR + "AUX" (BST ,KEYBREAKS) (IK <FBUF ,KEYWORDS>) (L <BUFLENGTH .BUF>) + (BB <2 .BUF>) CH) + #DECL ((BUF VALUE IK) BUFFER (CHR CH) CHARACTER (BST BB) STRING (L) FIX) + <COND (<0? .L> .BUF) + (ELSE + <REPEAT ((LC .L)) + #DECL ((LC) FIX) + <SET CH <1 <SET BB <BACK .BB>>>> + <COND (<MEMQ .CH .BST> + <ADDBREAK .IK !\ > ;"sp" + <ADDSTRING .IK + <REST .BB> + <- <LENGTH .BB> <LENGTH <2 .BUF>> 1>> + <RETURN .BUF>) + (<0? <SET LC <- .LC 1>>> + <ADDBREAK .IK !\ > + <ADDSTRING .IK .BB .L> + <RETURN .BUF>)>>)>> + +\ + +"Sending methods" + +<DEFINE SEND-NORMAL () + <AND <SENDER> <NEXT-MSG>>> + +<DEFINE SEND-TO-FILE ("AUX" (OUTCHAN .OUTCHAN) FIL) + #DECL ((OUTCHAN) CHANNEL (FIL) STRING) + <SET FIL <GET-TEMP "File to write to" <> <STRING <SNAME> ";M >">>> + <COND + (<EMPTY? .FIL> <PRINC "[Aborted]"> <CRLF>) + (ELSE <SENDER .FIL <>>)> + T> + +"Return T because we don't want to go to command level" + +<DEFINE SEND-TTY ("AUX" (OUTCHAN .OUTCHAN)) + #DECL ((OUTCHAN) CHANNEL) + <SENDER <> <>> + <CRLF> + T> + +\ + +<DEFINE EMPTY-FIELD (INFO) + #DECL ((INFO) VECTOR) + <0? <BUFLENGTH <FBUF .INFO>>>> + +<DEFINE SENDER ("OPTIONAL" (FILE ,IFILE) (ALL? T) + "AUX" CH (OUTCHAN .OUTCHAN)) + #DECL ((ALL?) <OR FALSE ATOM> (CH) <OR FALSE CHANNEL> (OUTCHAN) CHANNEL + (FILE) <OR FALSE <VECTOR [REST STRING]> STRING>) + <MAPF <> + <FUNCTION (F "AUX" (INFO ,.F)) + #DECL ((F) ATOM (INFO) VECTOR) + <COND (<EMPTY-FIELD .INFO> + <TERPRI> + <PRINC !\'> + <PRINC <PR1 .INFO>> + <PRINC "' empty? Specify it before sending."> + <EDIT-LEVEL>)>> + ,ALWAYSFIELDS> + <COND (<NOT .FILE> + <SET CH .OUTCHAN>) + (<SET CH + <COND (<TYPE? .FILE STRING> <OPEN "PRINT" .FILE>) + (ELSE <OPEN "PRINT" !.FILE>)>>) + (ELSE + <OPEN-FAILED .CH .FILE> + <EDIT-LEVEL>)> + <PRMAIL .CH> + <AND .FILE <CLOSE .CH>> + <COND (<AND .ALL? <NOT ,JCL-CTRL-C>> + <DEMSIG "COMSYS">)> + <CRLF> + "SENT"> + +"Beautiful error messages" + +<DEFINE OPEN-FAILED (CH FILE "AUX" (OUTCHAN .OUTCHAN)) + #DECL ((CH) FALSE (FILE) ANY (OUTCHAN) CHANNEL) + <TERPRI> + <PRINC "Open of "> + <PRINC .FILE> + <PRINC " failed"> + <PRINC <COND (<LENGTH? .CH 1> <PRINC ": "> <1 .CH>) (!\.)>> + <TERPRI>> + +\ + +"***********************JCL LINE INTERPRETATION***********************" + +<DEFINE ANYTHING (STR "OPTIONAL" (STEND <>)) + #DECL ((STR) STRING (VALUE STEND) <OR STRING FALSE>) + <MAPR <> + <FUNCTION (X) + #DECL ((X) STRING) + <COND (<==? .X .STEND> <MAPLEAVE <>>) + (<G? <ASCII <1 .X>> 32> <MAPLEAVE .X>)>> + .STR>> + +<SETG JCLBRKS ","> +<GDECL (JCLBRKS) STRING> + +<DEFINE HACK-JCL (STR + "OPTIONAL" (ENDS " î") + "AUX" (X <ANYTHING .STR>) L LX TRM (TMP <FBUF ,TEMPORARY>) + (TBUF <FBUF ,TEXT>) (TOBUF <FBUF ,TO>) + (PROGRAM <FBUF ,PROGRAM>) (MSGBUF <FBUF ,MSG-FILE>)) + #DECL ((STR ENDS) STRING (X) <OR FALSE STRING> (TRM) CHARACTER + (L) <OR <FALSE [REST STRING]> <LIST [REST STRING]>> + (PROGRAM TMP TBUF TOBUF MSGBUF) BUFFER (LX) FIX) + <PROG () + <COND (<OR <NOT .X> <EMPTY? .X>> <RETURN <>>)> + <BUFCLEAR .TMP> + <ADDSTRING .TMP .X> + <COND (<NOT <SET L <BUFLEX .TMP ,JCLBRKS .ENDS>>> + <SET LX <LENGTH <SET X <1 .L>>>> + <SET L <REST .L>> + <SET TRM <1 <REST .X <- .LX 1>>>> + <COND (,MSG + <ADDSTRING <FBUF ,SUBJECT> .X <- .LX 1>>) + (ELSE + <ADDSTRING .TBUF .X <- .LX 1> ,EOL> + <SETG JCL-TEXT T> + <COND (<OR <==? <ASCII 3> .TRM> + <==? <ASCII *37*> .TRM>> + <SETG JCL-CTRL-C T>) + (ELSE <SETG JCL-CTRL-C <>>)>)> + <SETG SKIP-SUBJECT T>)> + <MAPR <> + <FUNCTION (XX "AUX" (X <1 .XX>) (XEND <LENGTH? .XX 1>)) + #DECL ((X) STRING (XX) LIST (XEND) <OR FALSE FIX>) + <COND (<==? <1 .X> !\/> <FLAG-HACK <REST .X>>) + (,BUG + <SETG SKIP-TO T> + <ADDSTRING .PROGRAM .X> + <OR .XEND <ADDCHR .PROGRAM !\,>>) + (,FEATURE + <SETG SKIP-TO T> + <ADDSTRING .PROGRAM .X> + <OR .XEND <ADDCHR .PROGRAM !\,>>) + (,MSG + <ADDSTRING .MSGBUF .X> + <SETG SKIP-MSG-FILE T>) + (ELSE + <SETG SKIP-TO T> + <ADDADDR .TOBUF .X> + <OR .XEND <ADDCHR .TOBUF !\,>>)>> + .L>>> + +"Search a string for a 'winner' or a 'loser'. If a loser is +found return #FALSE(loser)." + +<DEFINE STRSRC (STR TERM "OPTIONAL" (CTRLOSS <>)) + #DECL ((STR TERM) STRING (CTRLOSS) <OR ATOM FALSE>) + <REPEAT () + <COND (<EMPTY? .STR> <RETURN <>>) + (<MEMQ <1 .STR> .TERM> <RETURN .STR>) + (<AND .CTRLOSS <L=? <ASCII <1 .STR>> 32>> + <RETURN .STR>)> + <SET STR <REST .STR>>>> + +\ + +"******SWITCH HACKERY*******" + +<DEFINE SWITCH-HACK ("AUX" JCL) + #DECL ((JCL) STRING) + <SET JCL <GET-TEMP "JCL switches" <>>> + <COND (<EMPTY? .JCL>) + (ELSE + <SETG ACK-CONDS ()> + <FLAG-HACK .JCL>)>> + +<DEFINE FLAG-HACK (X "AUX" X1) + #DECL ((X) STRING (X1) CHARACTER) + <REPEAT () + <COND (<EMPTY? .X> <RETURN .X>) + (<AND <G? <ASCII <SET X1 <1 .X>>> *140*> + <L? <ASCII .X1> *173*>> + <SET X1 <ASCII <- <ASCII .X1> 32>>>)> + <COND (<OR <MEMQ .X1 "/ ,"> + <L? <ASCII .X1> 32>> + <RETURN <REST .X>>) + (<==? .X1 !\L> + <LOAD-FROM-FILE>) + (<==? .X1 !\D> <ACK-DELIVERY>) + (<==? .X1 !\F> <FAIL-HACK>) + (<==? .X1 !\C> <SETG FORWARD T> <SETG CORRECT T>) + (<OR <==? .X1 !\M> <==? .X1 !\#>> + <SETG FORWARD T>) + (ELSE + <PROG ((OUTCHAN .OUTCHAN)) + #DECL ((OUTCHAN) CHANNEL) + <CRLF> + <PRINC "Uninterpreted switch ignored: "> + <PRINC .X1>>)> + <SET X <REST .X>>>> + +\ + +"***************************APPEND TO NOTES****************************" + +"Special routine to hack notes fields" + +<DEFINE HACK-NOTES ("OPTIONAL" (NEW? <>) + "AUX" NL N (NADD ,NOTES) (NTXT ,NOTE-TEXT) (NLEVEL 0)) + #DECL ((NEW?) ANY (NL N) LIST (NLEVEL) <SPECIAL FIX> (NADD NTXT) VECTOR) + <UNWIND + <PROG NOTES-LOOP () + #DECL ((NOTES-LOOP) <SPECIAL ACTIVATION>) + <SET NL ,NOTES-LIST> + <COND (<OR .NEW? <EMPTY? .NL>> + <SET NEW? <>> ;"watch out for AGAIN" + <SET N (<INIT-BUF .NADD> <INIT-BUF .NTXT>)> + <COND (<EMPTY? .NL> <PUTREST <SET NL (.N)> .NL>) + (ELSE <PUTREST .NL <SET NL (.N !<REST .NL>)>>)> + <SETG NOTES-LIST .NL>) + (ELSE <SET N <1 .NL>>)> + <PUT .NADD ,FBUF <1 .N>> + <PUT .NTXT ,FBUF <2 .N>> + <NOTING T> + <COND + (<0? .NLEVEL> + <APPEND-BUF .NADD T> + <COND (<0? <BUFLENGTH <1 .N>>> ;"flushed it?" + <COND (<==? .N <1 <REST .NL>>> <SETG NOTES-LIST <SET NL ()>>) + (ELSE + <MAPR <> + <FUNCTION (R) + #DECL ((R) LIST) + <AND <==? <2 .R> .N> + <PUTREST .R <REST .R 2>> + <SETG NOTES-LIST .R> + <MAPLEAVE>>> + .NL> + <SET NLEVEL -1>)>) + (<SET NLEVEL 1>)>)> + <COND (<1? .NLEVEL> <APPEND-BUF .NTXT T>)> + <NOTING <> .NADD .NTXT>> + <NOTING <> .NADD .NTXT>>> + +<DEFINE NOTING (ON-OFF + "OPTIONAL" A B + "AUX" (CTRLP <MEMQ !\ ,COMPOS-CHRTABLE>) + (CTRLT <MEMQ !\ ,COMPOS-CHRTABLE>)) + #DECL ((CTRLP CTRLT) <OR FALSE VECTOR> (A B) VECTOR (ON-OFF) <OR ATOM FALSE>) + <COND (<ASSIGNED? A> <PUT .A ,FBUF <>>)> + <COND (<ASSIGNED? B> <PUT .B ,FBUF <>>)> + <COND (<NOT <AND .CTRLP .CTRLT>> <ERROR COMPOS-CHRTABLE-MUNGED>) + (.ON-OFF + <PUT <REST .CTRLP> 1 ,PREVIOUS-NOTE> + <PUT <REST .CTRLT> 1 ,NOTE-LEVEL>) + (ELSE <PUT <REST .CTRLP> 1 ,TIME> <PUT <REST .CTRLT> 1 ,TIME>)>> + +<DEFINE NOTE-LEVEL (X Y) + #DECL ((NLEVEL) FIX) + <COND (<0? .NLEVEL> <SET NLEVEL 1>) + (<1? .NLEVEL> <SET NLEVEL 0>)> + <CRLF> + <NOTE-AGAIN>> + +<DEFINE PREVIOUS-NOTE (X Y "AUX" (BEG ,NOTES-LIST)) + #DECL ((BEG) <LIST LIST>) + <MAPR <> + <FUNCTION (N) + #DECL ((N) LIST) + <COND (<==? <REST .N> .BEG> + <SETG NOTES-LIST .N> + <MAPLEAVE>)>> + .BEG> + <SET NLEVEL 0> + <CRLF> + <NOTE-AGAIN>> + +<DEFINE NOTE-AGAIN ("AUX" NL) + #DECL ((NOTES-LOOP) <SPECIAL ACTIVATION> (NL) ACTIVATION) + <AND <ASSIGNED? NOTES-LOOP> + <LEGAL? <SET NL .NOTES-LOOP>> + <AGAIN .NL>>> + +\ + +"************************APPEND TO FIELDS*****************************" + +"Appending routines (ie: normal input) for various fields" + +<DEFINE FAP (INFO "OPTIONAL" (P? <>) "AUX" (APP <APPENDER .INFO>)) + #DECL ((INFO) VECTOR (APP) <OR FALSE APPLICABLE>) + <AND .APP <APPLY .APP .INFO .P?>>> + +"General buffer appending routine" + +<DEFINE APPEND-BUF (INFO + "OPTIONAL" (PROMPT? <>) (SILENT? <>) + "AUX" (PROMPT-VERBOSE <PR2 .INFO>) + (BUF <FBUF .INFO>) (OUTCHAN .OUTCHAN)) + #DECL ((INFO) VECTOR (BUF) <SPECIAL BUFFER> (PROMPT?) <OR ATOM FALSE> + (OUTCHAN) CHANNEL (PROMPT-VERBOSE) <SPECIAL STRING>) + <COND (<OR <NOT ,FORWARD> <BTEST ,BFORWARD .INFO>> + <COND (<ABREAK .INFO> <ADDBREAK .BUF <ABREAK .INFO>>)> + <COND (<NOT .SILENT?> + <COND (.PROMPT? <PRINC "A">)> + <BUFPRINT .BUF .OUTCHAN .PROMPT?>)> + <GETSTR .BUF ,COMPOS-CHRTABLE <>>) + (ELSE + <PRINC "A"> + <PRINC "You cannot change that field during Forwarding!"> + .BUF)>> + +"Append to message itself. There is a special hack in here such that +if there was text on the JCL line there will be no prompt and all that +stuff on the first call to APPEND-MESSAGE." + +<DEFINE APPEND-MESSAGE (INFO "OPTIONAL" (PROMPT? <>) "AUX" (SILENT? ,JCL-TEXT)) + #DECL ((VALUE) BUFFER (PROMPT? SILENT?) <OR ATOM FALSE>) + <SETG JCL-TEXT <>> + <OR .SILENT? <PRINC "A">> + <APPEND-BUF .INFO .PROMPT? .SILENT?>> + +"Buffer prompts" + +<SETG SPACE ": "> +<SETG SPEOL ": +"> + +"Print a Prompt -- ? function" + +<DEFINE QUESTION (BUF CHR "AUX" (OUTCHAN .OUTCHAN)) + #DECL ((BUF) BUFFER (CHR) CHARACTER (PROMPT-VERBOSE) STRING + (OUTCHAN) CHANNEL) + <COND (<0? <BUFLENGTH .BUF>> + <TERPRI> + <PRINC .PROMPT-VERBOSE> + <TERPRI> + <PRINC "Terminate input with 'ESC'."> + <TERPRI> + <BUFPRINT .BUF>) + (ELSE <PRINC .CHR> <ADDCHR .BUF .CHR> ;"IF BUFFER NOT EMPTY")>> + +\ + +"Buffer clearing functions" + +<DEFINE ALLCLEAR ("OPTIONAL" (ALL? <>) (FLDS ,FIELD-TABLE)) + #DECL ((FLDS) <UVECTOR [REST VECTOR]> (ALL?) <OR ATOM FALSE>) + <MAPF <> + <FUNCTION (INFO) + #DECL ((INFO) VECTOR) + <AND <FBUF .INFO> + <OR .ALL? <NOT <BTEST ,BSAVE .INFO>>> + <BUFCLEAR <FBUF .INFO>>>> + .FLDS> + <SETG NOTES-LIST ()>> + +"Print the current state of the message" + +<DEFINE PRINTER ("AUX" (OUTCHAN .OUTCHAN)) + #DECL ((OUTCHAN) CHANNEL) + <CRLF> + <MAPF <> + <FUNCTION (INFO) + #DECL ((INFO) VECTOR) + <AND <QFIELD .INFO> + <APPLY <QFIELD .INFO> .INFO>>> + ,FIELD-TABLE> + <CRLF> + <CRLF>> + +<DEFINE QNOTES (AINF + "AUX" (TINF ,NOTE-TEXT) BEG (OA <FBUF .AINF>) + (OT <FBUF .TINF>) (NL ,NOTES-LIST)) + #DECL ((AINF TINF) VECTOR (OA OT) <OR BUFFER FALSE> (BEG) LIST + (NL) LIST) + <COND (<NOT <EMPTY? .NL>> + <SET BEG <1 .NL>> + <MAPF <> + <FUNCTION (N) + #DECL ((N) <LIST BUFFER BUFFER>) + <CRLF> + <PUT .AINF ,FBUF <1 .N>> + <PUT .TINF ,FBUF <2 .N>> + <FIELDPRINT .AINF> + <FIELD& .TINF> + <AND <==? .N .BEG> <MAPLEAVE>>> + <REST .NL>> + <PUT .AINF ,FBUF .OA> + <PUT .TINF ,FBUF .OT>)>> + +"Print an individual field" + +<DEFINE FIELDPRINT (INFO "AUX" (BUF <FBUF .INFO>)) + #DECL ((INFO) VECTOR (BUF) <OR BUFFER FALSE>) + <COND (<NOT .BUF>) + (<OR <MEMQ <FLDNM .INFO> ,ALWAYSFIELDS> + <NOT <0? <BUFLENGTH .BUF>>>> + <FIELDHEADER <PR1 .INFO> <PRD .INFO>> + <BUFPRINT .BUF .OUTCHAN <>>)>> + +"Print a field truncated to one line" + +<DEFINE FIELD& (INFO + "AUX" (BUF <FBUF .INFO>) (BL <BUFLENGTH .BUF>) (PL .BL) BR B1) + #DECL ((INFO) VECTOR (BUF) BUFFER (BR) <OR STRING FALSE> (BL PL) FIX + (B1) STRING) + <COND (<OR <MEMQ <FLDNM .INFO> ,ALWAYSFIELDS> <NOT <0? .BL>>> + <PROG ((OUTCHAN .OUTCHAN)) + #DECL ((OUTCHAN) CHANNEL) + <FIELDHEADER <PR1 .INFO> <PRD .INFO>> + <COND (<SET BR <MEMQ <ASCII 13> <SET B1 <1 .BUF>>>> + <SET PL <MIN .BL <- <LENGTH .B1> <LENGTH .BR>>>>)> + <SET PL <MIN .PL <- <13 .OUTCHAN> <14 .OUTCHAN> 3>>> + <PRINTSTRING .B1 .OUTCHAN .PL> + <OR <==? .BL .PL> <PRINC "...">>>)>> + +<DEFINE FIELDHEADER (P D "AUX" (OUTCHAN .OUTCHAN)) + #DECL ((P D) STRING (OUTCHAN) CHANNEL) + <CRLF> + <PRINC .P> + <PRINC .D> + <COND (<==? .D ,SPACE> + <PRINC <REST ,SP <MIN <+ <LENGTH .P> 1> + <- <LENGTH ,SP> 1>>>>)>> + +\ + +<DEFINE FILE-CURRENT-STATE ("AUX" FIL CH BEG (NL ,NOTES-LIST) (OUTCHAN .OUTCHAN)) + #DECL ((FIL) STRING (CH) <OR CHANNEL FALSE> (NL) <LIST LIST> + (OUTCHAN) CHANNEL (BEG) LIST) + <REPEAT () + <SET FIL <GET-TEMP "File to write to" <> ,DUMP-FILE>> + <COND + (<EMPTY? .FIL> <PRINC "[Aborted]"> <CRLF> <RETURN>) + (<SET CH <OPEN "PRINT" .FIL>> + <SET OUTCHAN .CH> + <MAPF <> + <FUNCTION (V) #DECL ((V) ATOM) <PRINT <FORM SETG .V ,.V>>> + ,INTERESTING-GVALS> + <MAPF <> + <FUNCTION (F) + #DECL ((F) VECTOR) + <COND (<AND <FBUF .F> <NOT <0? <BUFLENGTH <FBUF .F>>>>> + <CRLF> + <PRINC !\(> + <PRIN1 <FLDNM .F>> + <PRINC !\ > + <BUFSPRINT <FBUF .F> .OUTCHAN> + <PRINC !\)>)>> + ,FIELD-TABLE> + <COND (<NOT <EMPTY? ,NOTES-LIST>> + <SET BEG <1 ,NOTES-LIST>> + <CRLF> + <PRINC !\[> + <PRIN1 NOTES-LIST> + <PRINC " ("> + <MAPF <> + <FUNCTION (N) + #DECL ((N) <LIST [2 BUFFER]>) + <CRLF> + <PRINC !\(> + <BUFSPRINT <1 .N> .OUTCHAN> + <PRINC !\ > + <BUFSPRINT <2 .N> .OUTCHAN> + <PRINC !\)> + <AND <==? .N .BEG> <PRINC ")]"> <MAPLEAVE>>> + <REST ,NOTES-LIST>>)> + <CLOSE .OUTCHAN> + <RETURN>) + (ELSE <OPEN-FAILED .CH .FIL>)>>> + +<DEFINE LOAD-FROM-FILE ("AUX" FIL CH OBJ B TMP (OUTCHAN .OUTCHAN)) + #DECL ((FIL) STRING (CH) <OR CHANNEL FALSE> (B) BUFFER (TMP) LIST + (OUTCHAN) CHANNEL) + <REPEAT () + <SET FIL <GET-TEMP "File to load from" <> ,DUMP-FILE>> + <COND + (<EMPTY? .FIL> <PRINC "[Aborted]"> <CRLF> <RETURN>) + (<SET CH <OPEN "READ" .FIL>> + <ALLCLEAR T> + <REPEAT () + <COND + (<SET OBJ <READ .CH '<>>> + <COND (<TYPE? .OBJ FORM> <EVAL .OBJ>) + (<AND <TYPE? .OBJ LIST> + <==? <LENGTH .OBJ> 2> + <TYPE? <1 .OBJ> ATOM> + <TYPE? <2 .OBJ> STRING>> + <SET B <FBUF ,<1 .OBJ>>> + <ADDSTRING .B <2 .OBJ>>) + (<AND <TYPE? .OBJ VECTOR> + <==? <LENGTH .OBJ> 2> + <==? <1 .OBJ> NOTES-LIST> + <TYPE? <2 .OBJ> LIST>> + <MAPF <> + <FUNCTION (L "AUX" B) + #DECL ((L) LIST (B) BUFFER) + <SET B <INIT-BUF ,NOTES <+ 20 <LENGTH <1 .L>>>>> + <ADDSTRING .B <1 .L>> + <PUT .L 1 .B> + <SET B <INIT-BUF ,NOTE-TEXT <* 2 <LENGTH <2 .L>>>>> + <ADDSTRING .B <2 .L>> + <PUT .L 2 .B>> + <SET TMP <2 .OBJ>>> + <SETG NOTES-LIST <REST .TMP <- <LENGTH .TMP> 1>>> + <PUTREST ,NOTES-LIST .TMP>) + (ELSE + <CRLF> + <PRINC "[Illegal object of type "> + <PRINC <TYPE .OBJ>> + <PRINC " in MAIL dump file]"> + <RETURN>)>) + (ELSE <RETURN>)>> + <CRLF> + <CLOSE .CH> + <EDIT-LEVEL> + <RETURN>) + (ELSE <OPEN-FAILED .CH .FIL>)>>> + +<SETG INTERESTING-GVALS + '![BUG + FEATURE + REMIND + MSG + FORWARD + CORRECT + ACK-CONDS + ASK-ME + ALWAYSFIELDS + EXPIRES + STIME + TECO-PROGRAM!]> + +<GDECL (INTERESTING-GVALS) <UVECTOR [REST ATOM]>> + +\ + +"Set up Forwarding, and edit Msg-no field" + +<DEFINE FORWARD-HACK () + <COND (<NOT ,FORWARD> + <SETG FORWARD T> + <SETG ASK-ME ,FORWARD-ASK-ME> + <SETG ALWAYSFIELDS ,FWDALWAYS>)> + <FAP ,MSG-NO>> + +"If :REMIND, then ask for a delivery date" + +<DEFINE REMIND-HACK ("AUX" STR DT (TOBUF <FBUF ,TO>) (OUTCHAN .OUTCHAN)) + #DECL ((STR) STRING (DT) <OR FIX FALSE> (TOBUF) BUFFER + (OUTCHAN) CHANNEL) + <REPEAT () + <SET STR <GET-TEMP "When to remind" <>>> + <COND (<SET DT <PARSE-DATE <LEXER .STR>>> + <AND <L? .DT <ITIME>> <AGAIN>> + <SETG STIME .DT> + <SETG FAILED <- <+ .DT <* 262144 2>> <ITIME>>> + <PUT ,ACK-CONDS 2 "FAILED"> + <AND <0? <BUFLENGTH .TOBUF>> <ADDSTRING .TOBUF <XUNAME>>> + <SETG SKIP-TO T> + <RETURN>) + (ELSE + <PRINC "Can't understand that date: "> + <PRINC .STR> + <PRINC " Please try again."> + <CRLF>)>>> + +<DEFINE ACK-DELIVERY ("AUX" (AC ,ACK-CONDS) (OUTCHAN .OUTCHAN)) + #DECL ((AC) LIST (OUTCHAN) CHANNEL) + <COND (<NOT <1 .AC>> + <PUT .AC 1 "DELIVERY">) + (ELSE + <PUT .AC 1 <>> + <PRINC "Disabled.">)>> + +"If ACK on failure, ask for how long to wait" + +<DEFINE FAIL-HACK ("AUX" STR DT (OUTCHAN .OUTCHAN) (AC ,ACK-CONDS)) + #DECL ((STR) STRING (DT) <OR FALSE FIX> (OUTCHAN) CHANNEL + (AC) LIST) + <COND (<NOT <2 .AC>> + <REPEAT () + <SET STR <GET-TEMP "When to report if not delivered" <>>> + <COND (<SET DT <PARSE-DATE <LEXER .STR>>> + <AND <L? .DT <ITIME>> <AGAIN>> + <SETG FAILED <- .DT <ITIME>>> + <PUT .AC 2 "FAILED"> + <RETURN>) + (ELSE + <PRINC "Can't understand that date: "> + <PRINC .STR> + <PRINC " Please try again."> + <CRLF>)>>) + (ELSE + <PUT .AC 2 <>> + <PRINC "Default failure acknowledgment (two days).">)>> + +"Expiration date for :MSG" + +<DEFINE EXPIRES-HACK ("AUX" STR DT (OUTCHAN .OUTCHAN)) + #DECL ((STR) STRING (DT) <OR FALSE FIX> (OUTCHAN) CHANNEL) + <REPEAT () + <SET STR <GET-TEMP "When MSG expires" <>>> + <COND (<SET DT <PARSE-DATE <LEXER .STR>>> + <AND <L? .DT <ITIME>> <AGAIN>> + <SETG EXPIRES .DT> + <RETURN>) + (ELSE + <PRINC "Can't understand that date: "> + <PRINC .STR> + <PRINC " Please try again."> + <CRLF>)>>> + +"Input to a temporary buffer with a given prompt and breaks and with +the buffer optionally having preset contents" + +<DEFINE GET-TEMP (P1 + "OPTIONAL" (BRKS ,DBRKS) (ST "") (STL <LENGTH .ST>) + "AUX" (TMP ,TEMPORARY) (BUF <FBUF .TMP>)) + #DECL ((TMP) VECTOR (BRKS) <OR FALSE STRING> (P1 ST) STRING (BUF) BUFFER + (STL) FIX (VALUE) <OR STRING <LIST [REST STRING]>>) + <PUT .BUF ,BPRMPT1 .P1> + <BUFCLEAR .BUF> + <AND <NOT <EMPTY? .ST>> <ADDSTRING .BUF .ST .STL>> + <APPEND-BUF .TMP T> + <COND (.BRKS <BUFLEX .BUF .BRKS>)(ELSE <BUFTOS .BUF>)>> + +<DEFINE GET-IDS ("AUX" (TMP ,TEMPORARY) (BUF <FBUF .TMP>)) + #DECL ((TMP) VECTOR (BUF) BUFFER (VALUE) <OR FALSE <LIST [REST STRING]>>) + <PUT .BUF ,BPRMPT1 " numbers"> + <BUFCLEAR .BUF> + <APPEND-BUF .TMP T> + <FINDIDS .TMP <>>> + +\ + +<DEFINE CHECKER (BUF CHAR "AUX" ADRS (DBS ()) (EXP ,EXPUSING) INFO) + #DECL ((BUF) BUFFER (CHAR) CHARACTER (ADRS DBS) LIST + (INFO EXP) VECTOR) + <COND (<AND <SET INFO <FIND-BUF .BUF>> + <BTEST ,BADDR .INFO>> + <SET ADRS <BUFLEX .BUF>> + <COND (<NOT <0? <BUFLENGTH <FBUF .EXP>>>> + <SET DBS <GET-FILES .EXP>>)> + <SET DBS ("COMEXP" !.DBS)> + <CHECK-ADDRESSEES .ADRS .DBS> + <CRLF> + <BUFPRINT .BUF>)>> + +<DEFINE FIND-BUF (BUF "AUX" (FT ,FIELD-TABLE)) + #DECL ((BUF) BUFFER (FT) UVECTOR) + <MAPF <> + <FUNCTION (INFO) + #DECL ((INFO) VECTOR) + <COND (<==? <FBUF .INFO> .BUF> <MAPLEAVE .INFO>)>> + .FT>> + +\ + +"************************ HOST NAME HACKING *************************" + +"Check any hosts specified, ask for corrections if some are losers" + +<DEFINE FINDHOSTS (INFO "OPTIONAL" (PREFIX <>) + "AUX" (BF <FBUF .INFO>) LX (LOSER <>) FIXP NML HST LP) + #DECL ((INFO) VECTOR (BF) BUFFER (LX VALUE) <LIST [REST STRING]> + (FIXP) <OR FALSE STRING> (SYMB PREFIX) <OR STRING FALSE> + (LOSER) <OR ATOM FALSE> (NML) FIX (LP) LIST (HST) ANY (VALUE) STRING) + <SET LX <BUFLEX .BF>> + <COND (.PREFIX + <MAPR <> + <FUNCTION (L) + #DECL ((L) <LIST [REST STRING]>) + <PUT .L 1 <STRING .PREFIX <1 .L>>>> + .LX>)> + <MAPR <> + <FUNCTION (L "AUX" (S <1 .L>)) + #DECL ((L) LIST (S) STRING) + <REPEAT () + <COND (<SET FIXP <ATSIGN? .S>> + <SET NML <- <LENGTH .S> <LENGTH .FIXP>>> + <SET FIXP <REST .FIXP>>) + (ELSE + <PUT .L 1 .S> + <RETURN>)> + <COND (<SET HST <HOST <UPPERCASE .FIXP>>> + <PUT .L 1 .S> + <RETURN>) + (<AND <NOT <EMPTY? <SET LP <LPARSE .FIXP>>>> + <TYPE? <SET HST <1 .LP>> FIX> + <G? .HST 0> + <L? .HST 256>> + <PUT .L 1 .S> + <RETURN>) + (ELSE + <SET S <CORRECT-ADDRESS <PR1 .INFO> + "Unknown host given in addressee" + .S + "Host" + .NML>> + <SET LOSER T>)>>> + .LX> + <COND (.LOSER <REMAKE .BF .LX>)> + .LX> + +<DEFINE ATSIGN? (KEY "AUX" C (SKIP <>) (BEST <>)) + #DECL ((KEY) STRING (C) CHARACTER (SKIP) <OR ATOM FALSE> + (BEST) <OR STRING FALSE>) + <MAPR <> + <FUNCTION (S) + #DECL ((S) STRING) + <COND (.SKIP <SET SKIP <>>) + (<==? <SET C <1 .S>> !\@> + <SET BEST .S>) + (<==? .C !\> <SET SKIP T>) + (ELSE <SET SKIP <>>)>> + .KEY> + .BEST> + +<DEFINE CORRECT-ADDRESS (WHO PROMPT S PR1 + "OPTIONAL" (NML <>) (BRKS ,TOBRKS) + "AUX" TMP (OUTCHAN ,OUTCHAN)) + #DECL ((WHO) <OR STRING FALSE> (PROMPT PR1 S BRKS) STRING (NML) <OR FALSE FIX> + (TMP) <LIST [REST STRING]> (OUTCHAN) <SPECIAL CHANNEL>) + <PROG () + <CRLF> + <COND (.WHO + <PRINC !\'> + <PRINC .WHO> + <PRINC "' field: ">)> + <PRINC .PROMPT> + <PRINC ": '"> + <PRINC .S> + <PRINC "'."> + <CRLF> + <SET TMP + <COND (.NML + <GET-ADDR .PR1 .BRKS .S <+ .NML 1>>) + (ELSE + <GET-ADDR .PR1 .BRKS>)>> + <COND (<NOT <EMPTY? .TMP>> <1 .TMP>) + (ELSE <AGAIN>)>>> + +<DEFINE GET-ADDR (P1 + "OPTIONAL" (BRKS ,DBRKS) (ST "") (STL <LENGTH .ST>) + "AUX" (TMP ,TEMPORARY) (BUF <FBUF .TMP>)) + #DECL ((TMP) VECTOR (BRKS) <OR FALSE STRING> (P1 ST) STRING (BUF) BUFFER + (STL) FIX (VALUE) <OR STRING <LIST [REST STRING]>>) + <PUT .BUF ,BPRMPT1 .P1> + <BUFCLEAR .BUF> + <AND <NOT <EMPTY? .ST>> <ADDADDR .BUF .ST .STL>> + <APPEND-BUF .TMP T> + <COND (.BRKS <BUFLEX .BUF .BRKS>)(ELSE <BUFTOS .BUF>)>> + +<DEFINE REMAKE (BUF TMP) + #DECL ((BUF) BUFFER (TMP) <LIST [REST STRING]>) + <BUFCLEAR .BUF> + <MAPF <> + <FUNCTION (X) + #DECL ((X) STRING) + <ADDADDR .BUF .X> + <ADDCHR .BUF !\,>> + .TMP>> + +<DEFINE ADDADDR (BUF X "OPTIONAL" (L <LENGTH .X>) "AUX" (BRKS ,TOBRKS)) + #DECL ((BUF) BUFFER (X BRKS) STRING (L) FIX) + <REPEAT () + <COND (<OR <EMPTY? .X> <0? .L>> <RETURN .BUF>)> + <COND (<MEMQ <1 .X> .BRKS> + <ADDCHR .BUF %<ASCII *134*>>)> + <ADDCHR .BUF <1 .X>> + <SET L <- .L 1>> + <SET X <REST .X>>>> + +<DEFINE MORE-MESSAGES () + <COND (<SETG MORE-MSGS <NOT ,MORE-MSGS>> + <PRINC "More messages to come">) + (ELSE <PRINC "No more messages">)>> + +\ + +"Various breaks and things" + +<SETG TOBRKS " , +"> + +<SETG KEYBREAKS <MAPF ,STRING ,ASCII (13 9 10 32 <ASCII !\,> <ASCII !\.>)>> + +<SETG EOL " +"> + +<SETG SP <ISTRING 15 '<ASCII 32>>> + +<SETG DBRKS ".,/ +"> + +<GDECL (DBRKS SP TOBRKS KEYBREAKS EOL) STRING> + +\ + +"**************************FIELD INFORMATION*************************" + +"Fields that are always printed, whether empty or not" + +<SETG ALWAYSFIELDS <SETG TOALWAYS '(TO FROM TEXT)>> + +<SETG MSGALWAYS (MSG-FILE SUBJECT !,ALWAYSFIELDS)> + +<SETG FWDALWAYS '(MSG-NO TO)> + +<SETG BUGALWAYS '(PROGRAM FROM TEXT)> + +<GDECL (ALWAYSFIELDS TOALWAYS MSGALWAYS FWDALWAYS BUGALWAYS) + <LIST [REST ATOM]>> + +<DEFINE INIT-FIELDS () + <SETG NOTES-LIST ()> ;"List of notes" + <MAPF <> + <FUNCTION (INFO) + #DECL ((INFO) VECTOR) + <SETG <FLDNM .INFO> .INFO> + <INIT-BUF .INFO>> + ,FIELD-TABLE> + T> + +<DEFINE INIT-BUF (INFO "OPTIONAL" (N <BUFSIZ .INFO>) B) + #DECL ((INFO) VECTOR (N) FIX (B) BUFFER) + <SET B <BUFMAKE .N <PR1 .INFO> <PRD .INFO>>> + <COND (<BTEST ,BLFP .INFO> + <BUF-BITS .B ,BUF-BIT-PROMPT T>)> + <COND (<BTEST ,BCRLF .INFO> + <BUF-BITS .B 35 T>)> + <PUT .INFO ,FBUF .B> + .B> + +"Offsets in a field information vector" + +<SETG FLDNM 1> + +;"atom which is the name of the field" + +<SETG FBUF 2> + +;"BUFFER which is the field's input buffer (or <>)" + +<SETG BUFSIZ 3> + +;"size of initial BUFFER" + +<SETG BFLAGS 4> + +<SETG BSAVE 1> +<SETG BFORWARD 2> +<SETG BLFP 4> +<SETG BCRLF 8> +<SETG BADDR 16> + +<DEFMAC BTEST ('BIT 'BUF) + <FORM NOT + <FORM 0? + <FORM CHTYPE + <FORM ANDB + <FORM BFLAGS .BUF> + .BIT> + FIX>>>> + +;"T if BUFFER to be cleared after each message" + +<SETG APPENDER 5> + +;"apply this to info to append to field" + +<SETG ABREAK 6> + +;"ADDBREAK this to buffer on each call" + +<SETG PFIELD 7> + +;"apply this to print message file for this field" + +<SETG QFIELD 8> + +;"apply this to print message reference during editing" + +<SETG PR1 9> + +;"short prompt and pretty header to print" + +<SETG PRD 10> + +;"tail end of short prompt (crlf for TEXT...)" + +<SETG PR2 11> + +;"verbose prompt for this field" + +<MANIFEST FLDNM FBUF BUFSIZ BFLAGS APPENDER ABREAK PFIELD QFIELD PR1 PRD PR2> +<MANIFEST BSAVE BFORWARD BLFP BCRLF BADDR> +\ + +"Field information uvector" + +<SETG FIELD-TABLE + ![[FROM + <> + 10 + <+ ,BSAVE ,BCRLF ,BADDR> + ,APPEND-BUF + <> + ,PFROM + ,FIELDPRINT + "From" + ,SPACE + "Type the name of the principal author."] + [FULL-NAME + <> + 100 + ,BCRLF + ,APPEND-BUF + <> + ,PSTR + ,FIELDPRINT + "Full name" + ,SPACE +"Type the full name of the author; it will +be printed in addition to the mailbox name +in the 'From' field. (This is not necessary +if you are known to INQUIR.)"] + [REPLY-TO + <> + 20 + <+ ,BLFP ,BADDR> + ,APPEND-BUF + !\, + ,PLST + ,FIELDPRINT + "Reply-to" + ,SPACE + "The return address, if it is different from the From +or Sender fields. Separated by space, 'CR' +or comma."] + [PROGRAM + <> + 100 + <+ ,BLFP ,BFORWARD> + ,APPEND-BUF + !\, + <> + ,FIELDPRINT + "Programs" + ,SPACE + "List the programs, separated by +space, 'CR' or comma."] + [TO + <> + 100 + <+ ,BLFP ,BFORWARD ,BADDR> + ,APPEND-BUF + !\, + ,PTO + ,FIELDPRINT + "To" + ,SPACE + "List the action addressees, separated by +space, 'CR' or comma."] + [SUBJECT + <> + 100 + ,BCRLF + ,APPEND-BUF + <> + ,PSUBJ + ,FIELDPRINT + "Subject" + ,SPACE + "Type a short description of the contents +of the message."] + [IN-REPLY-TO + <> + 10 + ,BLFP + ,APPEND-BUF + <> + ,PSTR + ,FIELDPRINT + "In reply to" + ,SPACE + +"Type the Message id number(s) of the +message(s) to which this is a reply."] + [CARBON-COPY-TO + <> + 40 + <+ ,BLFP ,BADDR> + ,APPEND-BUF + !\, + <> + ,FIELDPRINT + "Carbon-copy-to" + ,SPACE + +"List the names of recipients of a carbon +copy. Separate the names by space, 'CR' or +comma."] + [BLIND + <> + 20 + <+ ,BLFP ,BADDR> + ,APPEND-BUF + !\, + <> + ,FIELDPRINT + "Blind-copy-to" + ,SPACE + +"List the names of recipients of 'Blind' +carbons. The people in the 'Carbon-copy' +list will not be apprised of the names in +the 'Blind' list."] + [FILES + <> + 20 + ,BLFP + ,APPEND-BUF + !\, + ,PFILE-OUTPUT + ,FIELDPRINT + "Output to" + ,SPACE + +"List the names of files to which you +want the message to be sent, in addition +to the primary addressees, using the +FILE-OUTPUT process. The names should be +separated by 'CR' or comma."] + [ENCLOSURES + <> + 20 + ,BLFP + ,APPEND-BUF + !\, + ,PENCLOSURES + ,FIELDPRINT + "Enclosures" + ,SPACE + +"List any files which are to be treated +as enclosures, separated by 'CR' or comma. +Enclosures will be copied to the message +file at delivery time by the Daemon."] + [MSG-FILE + <> + 10 + ,BCRLF + ,APPEND-BUF + !\, + ,PMSG-FILE + ,FIELDPRINT + "Msg. File Name" + ,SPACE + +"Give the file-name-one, file-name-two +pair to use for this message. Name-one +defaults to 'MSG->', name-two to '>'"] + [MSG-NO + <> + 10 + <+ ,BFORWARD ,BCRLF> + ,APPEND-BUF + <> + ,PID + ,FIELDPRINT + "Message to forward" + ,SPACE +"Type the Message id number of the message +being forwarded."] + [ID-IRT + <> + 10 + ,BLFP + ,APPEND-BUF + <> + ,PID + ,FIELDPRINT + "ID In reply to" + ,SPACE + +"Type the Message id number(s) of the +message(s) to which this is a reply."] + [EXPUSING + <> + 20 + ,BLFP + ,APPEND-BUF + !\, + ,PEXPUSING + ,FIELDPRINT + "Expand-using" + ,SPACE + +"Type the names of additional expansion +data base files to use in expanding the +addressees of the message."] + [TEXT + <> + 400 + 0 + ,APPEND-MESSAGE + <> + ,PSTR + ,FIELD& + "Message" + ,SPEOL + +"Type the text of the message. You may +edit the message by typing 'Control E', +or insert a file by typing 'Control Y'."] + [ANNOTATION + <> + 100 + ,BFORWARD + ,APPEND-MESSAGE + <> + <> + ,FIELD& + "Annotation" + ,SPEOL + +"Type an annotation to the message. You may +edit it by typing 'Control E', or insert a +file by typing 'Control Y'."] + [KEYWORDS + <> + 100 + ,BLFP + ,APPEND-BUF + !\, + ,PLST + ,FIELDPRINT + "Keywords" + ,SPACE + +"List any keywords, separated by comma, +'CR' or space. The keywords will be +available for searching the data-base"] + [NOTES + <> + 50 + <+ ,BLFP ,BFORWARD ,BADDR> + ,HACK-NOTES + <> + ,PNOTES + ,QNOTES + "Note to" + ,SPACE + +"Addressee(s) for this note, separated by +space, carriage return, or comma."] + [NOTE-TEXT + <> + 200 + ,BFORWARD + <> + <> + <> + <> + "Note text" + ,SPEOL + +"Text of this note. It will be sent only +to the addressees for this note."] + [TEMPORARY + <> + 20 + <+ ,BFORWARD ,BCRLF ,BADDR> + <> <> <> <> "" ,SPACE ""]!]> + +<GDECL (FIELD-TABLE) <UVECTOR [REST <VECTOR ATOM>]> + (TO PROGRAM FROM SUBJECT TEXT ANNOTATION CARBON-COPY-TO BLIND FULL-NAME + TEMPORARY NOTE-TEXT NOTES EXPUSING ENCLOSURES FILES MSG-NO + KEYWORDS IN-REPLY-TO ID-IRT REPLY-TO MSG-FILE) + <VECTOR ATOM>> + +\ + +"******************* 'EDIT' MODE DISPATCH TABLE ******************" + +"Info string for 'Edit:' mode" + +<SETG EDTEXPL + +"Edit commands: + + 'Edit-flush' (default) to leave Edit level + 'Send-level' to move to Send level + 'Reader' to return to Reader (if you are in it) + 'Print' to print the current state of the message + 'Save-mail' to save the current state of buffers and switches + 'Load-mail' to load a previously saved state + 'Quit' quits out of the mailer + +Standard fields: + 'To' + 'Carbon-copy-to' or 'cc' + 'Blind-carbon-copy-to' or 'bcc' + 'Subject' + 'From' + 'Reply-to' + 'Message' + 'Keywords' + 'Note' + 'Last-note' + 'Enclosures' + +Esoteric fields: + 'In-reply-to' (READER only) is normally filled in automatically + 'Full-name-of-sender' is paired with 'Sender' + + 'Set-switches' processes a new set of JCL switches + 'Select-editor' allows you to change the TECO editor + + 'Expansion-data-bases' specifies your own addressee expansions + 'File-output-to' specifies files to get a copy of the mail + + 'Program' contains the programs being 'BUGged' or 'FEATURed' + 'Annotation' is explanatory text for a forwarded message + + 'Msg-file' (:MSG only) specifies the file name for the MSGS file + 'Msg-expiration' (:MSG only) specifies the expiration for a MSGS file + 'Forward-message' (:FORWARD only) specifies the message to forward"> + +"Dispatch for 'Edit:' mode" + +<SETG EDIT-CHRS + [!\ + ,EDIT-LEVEL]> + +<SETG EDIT-CHRTABLE <LIST ,EDIT-CHRS ,SYMBOL-CHRS>> + +<GDECL (EDIT-CHRS) VECTOR> + +<DEFINE EDIT-COMMANDS () + <SETG SYMBOL-CHRTABLE ,EDIT-CHRTABLE> + <CTABLE "Edit: " "" ,EDTEXPL + + * "Edit-flush" <EDIT-FLUSH> + "Send-level" <SEND-LEVEL> + "Reader" <NEXT-LEVEL> + "Print" <PRINTER> + + "To" <FAP ,TO> + "Carbon-copy-to" <FAP ,CARBON-COPY-TO> + "c" <FAP ,CARBON-COPY-TO> + "cc" <FAP ,CARBON-COPY-TO> + "Blind-carbon-copy-to" <FAP ,BLIND> + "bcc" <FAP ,BLIND> + "Subject" <FAP ,SUBJECT> + "From" <FAP ,FROM> + "Reply-to" <FAP ,REPLY-TO> + "Message" <FAP ,TEXT> + "Keywords" <FAP ,KEYWORDS> + "Note" <HACK-NOTES T> + "Last-note" <HACK-NOTES <>> + "Enclosures" <FAP ,ENCLOSURES> + + "In-reply-to" <FAP ,IN-REPLY-TO> + "Full-name-of-sender" <FAP ,FULL-NAME> + + "Set-switches" <SWITCH-HACK> + "Select-editor" <FLIP-EDITOR> + + "Expansion-data-bases" <FAP ,EXPUSING> + "File-output-to" <FAP ,FILES> + + "Program" <FAP ,PROGRAM> + "Annotation" <FAP ,ANNOTATION> + "Msg-file" <FAP ,MSG-FILE> + "Msg-expiration" <EXPIRES-HACK> + "Forward-message" <FORWARD-HACK> + + "Muddle" <MUDDLE-ESCAPE> + "Save-mail" <FILE-CURRENT-STATE> + "Load-mail" <LOAD-FROM-FILE> + "Quit" <QUITIT>>> + +\ + +"******************* 'SEND' MODE DISPATCH TABLE *********************" + +"Dispatch for 'Send:' mode" + +<SETG SEND-CHRS + [!\ + ,EDIT-SEND]> + +<SETG SEND-CHRTABLE <LIST ,SEND-CHRS ,SYMBOL-CHRS>> + +<GDECL (SEND-CHRS) VECTOR> + +<DEFINE SEND-COMMANDS () + <SETG SYMBOL-CHRTABLE ,SEND-CHRTABLE> + <CTABLE "Send: " "" + +"Send commands: + + 'Normally' to send the message (default) + 'Save-mail' to save the current state of buffers and switches + 'Load-mail' to load a previously saved state + 'Tty' to print the message on the TTY + 'File' to print the message to a File + 'More-messages' to toggle multiple message mode + + 'Acknowledge-delivery' toggles delivery acknowledgment + 'Acknowledge-failure' toggles delivery failure acknowledgment + + 'Edit-level' to get to Edit level + 'Reader' to return to the Reader (if you are in it) + 'Quit' to quit the mailer" + + "Edit-level" <EDIT-LEVEL> + "Reader" <NEXT-LEVEL> + * "Normally" <SEND-NORMAL> + "File" <SEND-TO-FILE> + "Save-mail" <FILE-CURRENT-STATE> + "Load-mail" <LOAD-FROM-FILE> + "More-messages" <MORE-MESSAGES> + "Tty" <SEND-TTY> + "Muddle" <MUDDLE-ESCAPE> + "Quit" <QUITIT> + + "Acknowledge-delivery" <ACK-DELIVERY> + "Acknowledge-failure" <FAIL-HACK>>> + +\ + +"********************* BUFFER SPECIAL CHARACTERS ********************" + +"Buffer special character table for Mail Composer" + +<SETG REENTER-TECO-CHAR !\> + +<DEFINE SAFETECO ("TUPLE" T) + <COND (<LOGGED-IN?> + <APPLY ,BUFTECO !.T>)>> + +<SETG COMPOS-CHRTABLE + [!\� ,IBUFCLEAR ;"CLEAR THE BUFFER" + !\ ,ADDCHR ;"IN READER, INSERT FIELD" + !\ ,SAFETECO ;"BACK TO TECO" + !\ ,EDIT-ONCE ;"PUSH TO EDIT LEVEL" + !\ ,IBUFPRINT ;"REPRINT BUFFER" + !\ ,SAFETECO ;"ENTER TECO" + !\ ,CHECKER ;"CHECK ADDRESSEES" + !\ ,KEYWEX ;"KEYWORD EXTRACTOR" + <ASCII 12> ,IBUFPRINT ;"REPRINT BUFFER" + <ASCII 13> ,MAILCRLF ;"CARRIAGE RETURN" + !\ ,TIME ;"PREVIOUS-NOTE" + !\ ,QUOTECHR ;"QUOTE NEXT CHARACTER" + !\ ,LAZY-CTRL-R ;"RETURN TO PREVIOUS FIELD" + !\ ,TIME ;"NOTE-LEVEL" + !\ ,DLINE ;"DELETE A LINE" + !\ ,DWORD ;"DELETE A WORD" + !\ ,DLINE ;"DELETE A LINE" + !\ ,FILEINP ;"SNARF A FILE" + !\ ,RETBUF ;"TERMINATE" + !\? ,QUESTION ;"PROMPT" + <ASCII 127> ,IDELCHR ;"RUBOUT"]> + +<GDECL (COMPOS-CHRTABLE) <VECTOR [REST CHARACTER ANY]>> + +<ENDPACKAGE> diff --git a/src/mprog2/makduv.udl005 b/src/mprog2/makduv.udl005 new file mode 100644 index 00000000..52ccb6cf --- /dev/null +++ b/src/mprog2/makduv.udl005 @@ -0,0 +1,59 @@ +"MAKE-DUV takes a vector of words represented as either strings or uvector whose + first element is the string and an optional output file and writes a data file to + the output file to be used by the CORRECT-ERROR package" + +<PACKAGE "MAKE-DUV"> + +<ENTRY MDICT DUV MAKE-DUV> + +<USE "MDTABLE" "CORRECT-ERROR" "HAVERFORM" "SORTX" "DATA-SAVE"> + +<SETG DUVV <IUVECTOR <+ 509 1> ''()>> + +<SETG DUV <IUVECTOR <+ 509 1> ''![]>> + +<SETG TUV <UVECTOR 0 0>> + +<GDECL (DUV) <UVECTOR [509 UVECTOR][REST UVECTOR]> + (DUVV) <UVECTOR [509 LIST] [REST LIST]> + (TUV) <UVECTOR FIX FIX>> + +<DEFINE ADD-ECITEM (HF1 HF2 DUVV "AUX" X Y) + #DECL ((HF1 HF2 X Y) FIX (DUVV) <UVECTOR [REST LIST]>) + <SET Y <+ <DMOD .HF1 .HF2 509> 1>> + <SET X <DDIV .HF1 .HF2 509>> + <OR <MEMQ .X <NTH .DUVV .Y>> + <PUT .DUVV .Y (.X !<NTH .DUVV .Y>)>>> + +<DEFINE MAKE-DUV (WRDS "OPTIONAL" (OFILE <>) "AUX" HF1 HF2 (MOST 0) ) + #DECL ((WRDS) UVECTOR (OFILE) <OR FALSE STRING> + (HF2) <OR FIX UVECTOR> (MOST HF1) FIX) + <SETG DUVV <IUVECTOR <+ 509 1> ''()>> + <MAPF <> + <FUNCTION (W) + #DECL ((W) <OR STRING VECTOR>) + <COND (<TYPE? .W STRING> + <SET HF2 <DENSER <RLS-FOR-WORD .W> ,TUV>>) + (<LENGTH? .W 2> + <SET HF2 <DENSER <RLS-FOR-WORD <1 .W>> ,TUV>>) + (ELSE <SET HF2 <DENSER <3 .W> ,TUV>>)> + <ADD-ECITEM <SET HF1 <1 .HF2>> + <SET HF2 <2 .HF2>> + ,DUVV>> + .WRDS> + <MAPR <> + <FUNCTION (U1 U2) #DECL ((U1) <UVECTOR UVECTOR> (U2) <UVECTOR LIST>) + <PUT .U1 1 <UVECTOR !<1 .U2>>> + <SORT <> <1 .U1>> + <SET MOST <MAX .MOST <LENGTH <1 .U1>>>> + <PUT .U2 1 ()>> + <SETG DUV <IUVECTOR <+ 509 1> ''![]>> + ,DUVV> + <GUNASSIGN DUVV> + <SETG MDICT ,DUV> + <GUNASSIGN DUVV> + <COND (.OFILE <SAVE-DATA MDICT .OFILE>)> + .MOST> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog2/mclean.udl010 b/src/mprog2/mclean.udl010 new file mode 100644 index 00000000..b153b47d --- /dev/null +++ b/src/mprog2/mclean.udl010 @@ -0,0 +1,288 @@ +<PACKAGE "MCLEAN"> + +<ENTRY MOBY-CLEAN QUIET-CLEAN? MACRO-SURVIVORS PACKAGE-VICTIMS DONT-REMOVE> + +<USE "GLUE"> + +<SETG QUIET-CLEAN? <>> ;"don't print garbage being flushed if T" +<SETG FLUSHED ()> ;"this is really in GLUE" +<SETG MACRO-SURVIVORS ()> ;"list of MACROs that are needed later" +<SETG PACKAGE-VICTIMS ()> ;"list of PACKAGEs that die regardless" +<SETG DONT-REMOVE []> ;"pnames of atoms that are kept regardless" +<SETG GRSUBR <>> ;"group rsubr of this group" +<GDECL (QUIET-CLEAN?) <OR ATOM FALSE> + (FLUSHED) <LIST [REST ATOM]> + (MACRO-SURVIVORS) <LIST [REST ATOM]> + (PACKAGE-VICTIMS) <LIST [REST STRING]> + (DONT-REMOVE) <VECTOR [REST STRING]> + (GRSUBR) <OR RSUBR FALSE>> + +<DEFINE MOBY-CLEAN (GRPNAME "OPTIONAL" (Q? ,QUIET-CLEAN?) + "AUX" GRP RGRP E F (P? <>) (PCK <>) (DEAD-PCKS ()) + (LPACK <>) (OUTCHAN .OUTCHAN)) + #DECL ((GRPNAME) ATOM (GRP RGRP) LIST (P? Q?) <OR ATOM FALSE> + (E F) ANY (PCK) <OR FALSE LIST> (DEAD-PCKS) <LIST [REST STRING]> + (LPACK) <OR FALSE STRING> (OUTCHAN) CHANNEL) + <COND (<AND <ASSIGNED? .GRPNAME> <TYPE? ..GRPNAME LIST>> + <SET GRP ..GRPNAME>) + (ELSE <ERROR NOT-A-GROUP .GRPNAME>)> + <SETG GRSUBR <>> + <REPEAT () + <COND (<LENGTH? .GRP 1> <RETURN .LPACK>) + (<TYPE? <SET E <1 <SET RGRP <REST .GRP>>>> STRING> + <COND (<NOT .Q?> + <PRINC "Flushing a string."> + <CRLF>)> + <SET P? T>) + (<AND <TYPE? .E ATOM> <=? <SPNAME .E> " ">> + <SET P? T>) + (<TYPE? .E FORM> + <EXPAND-MANIFESTS .E> + <COND (<OR <EMPTY? .E> + <==? <1 .E> GDECL> + <==? <1 .E> MANIFEST> + <==? <1 .E> BLOAT> + <AND <==? <1 .E> DEFMAC> + <NOT <MEMBER <2 .E> ,MACRO-SURVIVORS>>> + <=? <SPNAME <1 .E>> "MSETG">> + <COND (<NOT .Q?> + <PRINC "Flushing a "> + <PRINC <1 .E>> + <PRINC !\.> + <CRLF>)> + <SET P? T>) + (<AND <==? <LENGTH .E> 4> + <==? <1 .E> AND> + <=? <2 .E> '<ASSIGNED? GLUE>> + <=? <3 .E> '.GLUE> + <TYPE? <4 .E> FORM> + <==? <LENGTH <SET F <4 .E>>> 4> + <==? <1 .F> PUT> + <==? <3 .F> GLUE>> + <PRINC "Flushing GLUE bits FORM."> + <CRLF> + <SET P? T>) + (<==? <1 .E> PACKAGE> + <SET LPACK <2 .E>> + <SET PCK .GRP>) + (<AND .PCK + <==? <1 .E> ENDPACKAGE> + <EMPTY-PACKAGE? <REST .PCK> .RGRP>> + <SET DEAD-PCKS (.LPACK !.DEAD-PCKS)> + <COND (<NOT .Q?> + <PRINC "Flushing PACKAGE "> + <PRINC .LPACK> + <PRINC !\.> + <CRLF>)> + <REMOVE-PACKAGE .LPACK> + <SET GRP .PCK> + <SET P? T>) + (<AND <OR <==? <1 .E> PUT> + <==? <1 .E> PUTPROP>> + <==? <LENGTH .E> 4> + <==? <3 .E> DECL>> + <COND (<NOT .Q?> + <PRINC "Flushing associative DECL."> + <CRLF>)> + <SET P? T>) + (<AND <==? <1 .E> SETG> + <==? <LENGTH .E> 3>> + <COND (<NOT <OBLIST? <2 .E>>> + <COND (<NOT .Q?> + <PRINC + "Flushing SETG of dead atom "> + <PRIN1 <2 .E>> + <PRINC !\.> + <CRLF>)> + <SET P? T>) + (<AND <NOT ,GRSUBR> <TYPE? <3 .E> RSUBR>> + <SETG GRSUBR <3 .E>> + <COND (<NOT .Q?> + <PRINC "Found group Rsubr: "> + <PRIN1 <2 .E>> + <PRINC !\.> + <CRLF>)>) + (<AND <TYPE? <3 .E> FIX OFFSET> + <MANIFEST? <2 .E>>> + <COND (<NOT .Q?> + <PRINC "Flushing MANIFEST "> + <WIPE <PRIN1 <2 .E>>> + <PRINC !\.> + <CRLF>)> + <SET P? T>)>) + (<OR <==? <1 .E> USE> <==? <1 .E> USE-TOTAL>> + <COND (<CLEAN-USES .E .DEAD-PCKS .Q?>) + (ELSE + <COND (<NOT .Q?> + <PRINC "Flushing USE FORM."> + <CRLF>)> + <SET P? T>)>) + (<==? <1 .E> ENTRY> + <COND (<CLEAN-ENTRIES .E .Q?>) + (ELSE + <COND (<NOT .Q?> + <PRINC "Flushing ENTRY FORM."> + <CRLF>)> + <SET P? T>)>)>)> + <COND (.P? <PUTREST .GRP <REST .RGRP>> <SET P? <>>) + (ELSE <SET GRP .RGRP>)>>> + +"EMPTY-PACKAGE? -- determine if remains of package are worthless." + +<DEFINE EMPTY-PACKAGE? (START END) + #DECL ((START END) LIST) + <MAPR <> + <FUNCTION (L "AUX" E) + #DECL ((L) LIST (E) ANY) + <COND (<==? .L .END> <MAPLEAVE T>) + (<TYPE? <SET E <1 .L>> FORM> + <COND (<AND <NOT <EMPTY? .E>> + <NOT <MEMQ <1 .E> + '[PACKAGE USE USE-TOTAL]>>> + <MAPLEAVE <>>)>)> + T> + .START>> + +<DEFINE CLEAN-ENTRIES (FRM Q? "AUX" (F <CHTYPE .FRM LIST>) A V + (OUTCHAN .OUTCHAN)) + #DECL ((FRM) FORM (Q?) <OR ATOM FALSE> (F) LIST (A) ATOM + (OUTCHAN) CHANNEL (V) ANY) + <REPEAT () + <COND (<LENGTH? .F 1> + <RETURN <NOT <EMPTY? <REST .FRM>>>>)> + <COND (<GASSIGNED? <SET A <2 .F>>> + <COND (<OR <MANIFEST? .A> + <MEMQ .A ,FLUSHED> + <DEAD-RSUBR? <SET V ,.A>> + <AND <TYPE? .V RSUBR-ENTRY> + <DEAD-RSUBR? <2 <1 .V>>>>> + <COND (<NOT .Q?> + <PRINC "Flushing ENTRY "> + <WIPE <PRIN1 .A>> + <PRINC !\.> + <CRLF>)> + <PUTREST .F <REST .F 2>> + <AGAIN>)>)> + <SET F <REST .F>>>> + +<DEFINE DEAD-RSUBR? (V) + #DECL ((V) ANY) + <AND <TYPE? .V RSUBR> + <TYPE? <1 .V> CODE> + <EMPTY? <1 .V>>>> + +<DEFINE CLEAN-USES (FRM DEAD Q? "AUX" (F <CHTYPE .FRM LIST>) A + (OUTCHAN .OUTCHAN)) + #DECL ((FRM) FORM (F) LIST (DEAD) <LIST [REST STRING]> + (Q?) <OR ATOM FALSE> (A) STRING (OUTCHAN) CHANNEL) + <REPEAT () + <COND (<LENGTH? .F 1> + <RETURN <NOT <EMPTY? <REST .FRM>>>>)> + <COND (<OR <MEMBER <SET A <2 .F>> .DEAD> + <MEMBER .A ,PACKAGE-VICTIMS>> + <COND (<NOT .Q?> + <PRINC "Flushing USE "> + <PRINC .A> + <PRINC !\.> + <CRLF>)> + <PUTREST .F <REST .F 2>> + <AGAIN>)> + <SET F <REST .F>>>> + +<DEFINE EXPAND-MANIFESTS (S "AUX" R) + #DECL ((S R) ANY) + <COND (<MONAD? .S>) + (<TYPE? .S FORM LIST> + <COND (<AND <TYPE? .S FORM> + <==? <LENGTH .S> 2> + <==? <1 .S> QUOTE>>) + (ELSE + <MAPR <> + <FUNCTION (E "AUX" (EE <1 .E>)) + #DECL ((E) LIST (EE) ANY) + <COND (<AND <TYPE? <SET EE <1 .E>> FORM> + <SET R <EXPMAN .EE>>> + <PUT .E 1 .R>) + (<TYPE? .EE LIST FORM VECTOR> + <EXPAND-MANIFESTS .EE>) + (<TYPE? .EE UVECTOR> + <PUT .E 1 <SET EE <FORM UVECTOR !.EE>>> + <EXPAND-MANIFESTS .EE>)>> + .S>)>) + (<TYPE? .S VECTOR> + <MAPR <> + <FUNCTION (E "AUX" (EE <1 .E>)) + #DECL ((E) VECTOR (EE) ANY) + <COND (<AND <TYPE? <SET EE <1 .E>> FORM> + <SET R <EXPMAN .EE>>> + <PUT .E 1 .R>) + (<TYPE? .EE LIST FORM VECTOR> + <EXPAND-MANIFESTS .EE>) + (<TYPE? .EE UVECTOR> + <PUT .E 1 <SET EE <FORM UVECTOR !.EE>>> + <EXPAND-MANIFESTS .EE>)>> + .S>) + (<TYPE? .S UVECTOR> + <MAPR <> + <FUNCTION (E "AUX" (EE <1 .E>)) + #DECL ((E) UVECTOR (EE) ANY) + <COND (<AND <TYPE? <SET EE <1 .E>> FORM> + <SET R <EXPMAN .EE>>> + <PUT .E 1 .R>) + (<TYPE? .EE LIST FORM VECTOR> + <EXPAND-MANIFESTS .EE>) + (<TYPE? .EE UVECTOR> + <PUT .E 1 <SET EE <FORM UVECTOR !.EE>>> + <EXPAND-MANIFESTS .EE>)>> + .S>)> + .S> + +<DEFINE EXPMAN (S "AUX" A) + #DECL ((S) FORM (A) ANY) + <COND (<AND <==? <LENGTH .S> 2> + <==? <1 .S> GVAL> + <TYPE? <SET A <2 .S>> ATOM> + <MANIFEST? .A> + <GASSIGNED? .A>> + ,.A)>> + +<DEFINE REMOVE-PACKAGE (S "AUX" P IP O IO (DUST <>)) + #DECL ((S) STRING (P IP DUST) <OR FALSE ATOM> (O) OBLIST + (IO) <OR OBLIST FALSE>) + <COND (<SET P <LOOKUP .S <GET PACKAGE OBLIST>>> + <SET O <GET .P OBLIST>> + <COND (<SET IP <LOOKUP <STRING !\I .S> .O>> + <COND (<SET IO <GET .IP OBLIST>> + <SET DUST <REMOVE-OBLIST .IO .IP>>)>)> + <REMOVE-OBLIST .O .P .DUST>)>> + +<DEFINE REMOVE-OBLIST (O P "OPTIONAL" (DUST <>)) + #DECL ((O) OBLIST (P) ATOM (DUST) <OR ATOM FALSE>) + <MAPF <> + <FUNCTION (B) + #DECL ((B) LIST) + <MAPF <> + <FUNCTION (A) + #DECL ((A) <OR ATOM LINK>) + <SET DUST + <OR <WIPE <GUNASSIGN .A>> + .DUST>>> + .B>> + .O> + <COND (<NOT .DUST> + <PUTPROP .P OBLIST> + <PUTPROP .O OBLIST> + <REMOVE .P>)> + .DUST> + +<DEFINE WIPE (A "AUX" (GRSUBR ,GRSUBR)) + #DECL ((A) ATOM (GRSUBR) <OR FALSE RSUBR>) + <COND (<AND <MEMBER <SPNAME .A> ,DONT-REMOVE> + <NOT <ERROR DONT-REMOVE .A "<ERRET T> TO REMOVE ANYWAY">>> + <>) + (<AND .GRSUBR <MEMQ .A .GRSUBR>> <>) + (ELSE + <REMOVE .A> + T)>> + +<ENDPACKAGE> diff --git a/src/mprog2/mddof.udl005 b/src/mprog2/mddof.udl005 new file mode 100644 index 00000000..d9f4de0d --- /dev/null +++ b/src/mprog2/mddof.udl005 @@ -0,0 +1,251 @@ +<PACKAGE "MDDOF"> + +<ENTRY FDOF NEW-DOF> + +<USE "MDTYPE" "MDTABLE" "MDERRS"> + +"FDOF -- given a word (STRING), length, MCOD and error correction code +makes a DOF which measures the fit of the word to the code" + +<DEFINE FDOF (WRD L COD "OPTIONAL" (CORR ,NOSALE) (CPOS 0) (DF <NEW-DOF>) + "AUX" (CFSM 0.0000000) (FDSM 0.0000000) (POS 0) RLS SP? E E1 RTYP + RTYP1 TYP TYP1 CNF CNF1 (MERRS 0) (EV ,ERROR-VECTOR) + (SKIP-MARK? T) (CORRECTED? <>)) + #DECL ((VALUE DF) DOF (WRD) STRING (COD) MCOD (CFSM FDSM CNF CNF1) FLOAT + (TYP TYP1 RTYP RTYP1) ATOM (L CORR CPOS POS) FIX (E) ELT (MERRS) FIX + (E1) <OR FALSE ELT> (RLS) <UVECTOR [REST ATOM]> + (EV) <UVECTOR [REST FIX]> (SP? SKIP-MARK? CORRECTED?) <OR ATOM FALSE>) + <COND (<==? .CORR ,NOSALE> <SET CORRECTED? T>)> + <COND (<G? .CPOS .L> <SET CPOS .L>)> + <SET RLS <RLS&SPACES .WRD>> + <MAPR <> + <FUNCTION (X) + #DECL ((X) <UVECTOR [REST FIX]>) + <PUT .X 1 0>> + .EV> + <REPEAT () + <COND (<EMPTY? .RLS> <RETURN>) + (.CORRECTED?) + (<ERROR-LOC? .CORR .CPOS .POS> + <SET SKIP-MARK? T> + <SET E <MSD <1 .COD>>> + <COND (<==? .CORR ,DD-DSH> + <COND (<N==? <2 .RLS> ELT> + <SET FDSM <+ .FDSM 0.5>> + <SET CFSM + <- .CFSM <SPACE-ERROR ELT <2 .RLS> 0.5 .EV>>> + <SET MERRS <+ .MERRS 1>>)> + <SET RLS <REST .RLS 2>>) + (<==? .CORR ,DSH-DD> + <COND (<N==? <STYP .E> ELT> + <SET FDSM <+ .FDSM 0.5>> + <SET CFSM + <- .CFSM <SPACE-ERROR <STYP .E> ELT 0.5 .EV>>> + <SET MERRS <+ .MERRS 1>>)> + <SET COD <MREST .COD>>) + (<==? .CORR ,CHGMRK> + <COND (<==? <1 .RLS> DASH> <SET CORR ,DSHDOT>)>)> + <SET MERRS <+ .MERRS 1>> + <SET CORRECTED? T>)> + <SET E <MSD <1 .COD>>> + <COND (<NOT .SKIP-MARK?> + <SET FDSM <+ .FDSM <SET CNF <ABS <MCNF .E>>>>> + <COND (<==? <MTYP .E> <1 .RLS>>) + (<SET CNF <- .CNF>> <SET MERRS <+ .MERRS 1>>)> + <SET CFSM <+ .CFSM .CNF>>)> + <SET TYP <STYP .E>> + <SET CNF <ABS <SCNF .E>>> + <SET RTYP <2 .RLS>> + <COND (.CORRECTED?) + (<ERROR-LOC? .CORR .CPOS .POS T> + <COND (<OR <==? .CORR ,DRPDOT> + <==? .CORR ,DRPDSH> + <==? .CORR ,DRPTWO>> + <COND (<0? .POS> + <COND (<==? .CORR ,DRPTWO> + <COND (<N==? <2 .RLS> ELT> + <SET MERRS <+ .MERRS 1>>)> + <SET RLS <REST .RLS 2>>)> + <SET RLS <REST .RLS 2>> + <SET FDSM <+ .FDSM 0.5>> + <SET CFSM <- .CFSM <SPACE-ERROR .TYP ELT 0.5 .EV>>>) + (ELSE + <SET RTYP <2 .RLS>> + <COND (<==? .CORR ,DRPTWO> + <SET RLS <REST .RLS 2>> + <COND (<N==? <2 .RLS> ELT> + <SET MERRS <+ .MERRS 1>>)>)> + <SET RTYP1 <4 .RLS>> + <SET TYP1 ELT> + <SET CNF1 0.5> + <COND (<OR <==? .RTYP ELT> + <AND <==? .RTYP LTR> <N==? .RTYP1 ELT>>> + <SET TYP1 .TYP> + <SET TYP ELT> + <SET CNF1 .CNF> + <SET CNF 0.5>)> + <SET FDSM <+ .FDSM .CNF1>> + <SET CFSM + <- .CFSM <SPACE-ERROR .TYP1 .RTYP1 .CNF1 .EV>>> + <SET RLS <REST .RLS 2>>)>) + (ELSE + <SET E1 <>> + <COND (<==? .CORR ,ADDMRK> + <COND (<==? DSH + <COND (<0? .POS> <MTYP .E>) + (<SET E1 <MSD <2 .COD>>> + <MTYP .E1>)>> + <SET CORR ,ADDDSH>)> + <SET COD <MREST .COD>>) + (<==? .CORR ,ADDTWO> + <SET E1 <MSD <2 .COD>>> + <SET CNF1 <SCNF .E1>> + <SET TYP1 <STYP .E1>> + <SET FDSM <+ .FDSM .CNF1>> + <SET CFSM <- .CFSM <SPACE-ERROR .TYP1 ELT .CNF1 .EV>>> + <COND (<N==? .TYP1 ELT> <SET MERRS <+ .MERRS 1>>)> + <OR <0? .POS> <SET E1 <MSD <3 .COD>>>> + <SET COD <MREST .COD 2>>)> + <COND (.E1 + <SET E <BETTER-ELT .RTYP .E .E1>> + <SET TYP <STYP .E>> + <SET CNF <ABS <SCNF .E>>>)>)> + <SET MERRS <+ .MERRS 1>> + <SET CORRECTED? T>)> + <COND (<NOT <0? .POS>> + <SET FDSM <+ .FDSM .CNF>> + <SET CFSM <- .CFSM <SPACE-ERROR .TYP .RTYP .CNF .EV>>> + <SET RLS <REST .RLS 2>> + <SET COD <MREST .COD>>)> + <SET POS <+ .POS 1>> + <SET SKIP-MARK? <>>> + <SET SP? <NOT <0? <+ !.EV>>>> + <PUT .DF ,CNFSUM .CFSM> + <PUT .DF ,FRDSUM .FDSM> + <PUT .DF ,NMELTS .L> + <PUT .DF ,ETOL <EL .EV>> + <PUT .DF ,LTOW <LW .EV>> + <PUT .DF ,LTOE <LE .EV>> + <PUT .DF ,WTOL <WL .EV>> + <PUT .DF ,ETOW <EW .EV>> + <PUT .DF ,WTOE <WE .EV>> + <PUT .DF ,SPCERR .SP?> + <PUT .DF ,MRKERR <NOT <0? .MERRS>>> + <PUT .DF ,MKCHNG .MERRS> + <PUT .DF ,MRKCOR .CORR> + <PUT .DF ,MRKPOS .CPOS>> + +"NEW-DOF -- make an empty dof for someone to use." + +<DEFINE NEW-DOF () + #DECL ((VALUE) DOF) + <DOF 0.0 0.0 0 0 0 0 0 0 0 <> <> 0 0 0>> + +\ + +"SPACE-ERROR -- type-sent, type-wanted, confidence, space-error-vector" + +<DEFINE SPACE-ERROR (TYP RTYP CNF EV "AUX" (EDGE <G? ,ON-EDGE .CNF>)) + #DECL ((TYP RTYP) ATOM (CNF VALUE) FLOAT (EV) <UVECTOR [6 FIX]> + (EDGE) <OR ATOM FALSE>) + <COND (<==? .RTYP .TYP> <SET CNF <- .CNF>>) + (<==? .RTYP ELT> + <COND (<==? .TYP LTR> + <PUT .EV ,EL <+ <EL .EV> <COND (.EDGE 1) (ELSE 2)>>>) + (<==? .TYP WRD> <PUT .EV ,EW <+ <EW .EV> 1>>)>) + (<==? .RTYP LTR> + <COND (<==? .TYP ELT> + <COND (,SQUASH <SET CNF 0.0>) + (<PUT .EV ,LE <+ <LE .EV> <COND (.EDGE 1) (ELSE 2)>>>)>) + (<==? .TYP WRD> + <PUT .EV ,LW <+ <LW .EV> <COND (.EDGE 1) (ELSE 2)>>>)>) + (<==? .RTYP WRD> + <COND (,SQUASH <SET CNF 0.0>) + (<==? .TYP LTR> + <PUT .EV ,WL <+ <WL .EV> <COND (.EDGE 1) (ELSE 2)>>>) + (<==? .TYP ELT> <PUT .EV ,WE <+ <WE .EV> 1>>)>)> + .CNF> + +\ + +<DEFINE BETTER-ELT (TYP E1 E2 + "AUX" (T1 <STYP .E1>) (T2 <STYP .E2>) + (A1 <ABS <SCNF .E1>>) (A2 <ABS <SCNF .E2>>)) + #DECL ((TYP) ATOM (E1 E2 VALUE) ELT (A1 A2) FLOAT (T1 T2) ATOM) + <COND (<==? .TYP .T1> + <COND (<==? .TYP .T2> <COND (<G? .A1 .A2> .E1) (ELSE .E2)>) + (ELSE .E1)>) + (<==? .TYP .T2> .E2) + (<OR <==? .TYP ELT> <==? .TYP WRD>> + <COND (<==? .T1 LTR> + <COND (<==? .T2 LTR> <COND (<L? .A1 .A2> .E1) (ELSE .E2)>) + (ELSE .E2)>) + (<==? .T2 LTR> .E2) + (<L? .A1 .A2> .E1) + (ELSE .E2)>) + (<==? .TYP LTR> + <COND (<L? .A1 .A2> .E1)(ELSE .E2)>)>> + +<DEFINE BETTER-TYP (E T1 T2 "AUX" (TYP <STYP .E>)) + #DECL ((E) ELT (T1 T2 TYP VALUE) ATOM) + <COND (<==? .T1 .T2> .T1) + (<==? .T1 .TYP> .T1) + (<==? .T2 .TYP> .T2) + (<==? .TYP LTR> .T1) + (<==? .T1 LTR> .T1) + (<==? .T2 LTR> .T2) + (ELSE .T1)>> + +"ERROR-LOC? -- takes the error type and position and the current position +and returns T if it is the appropriate location to take action. + +DRPDOT, DRPDSH, DRPTWO -- at the space before the correction +DD-DSH, ADDMRK, CHGMRK -- one mark before the correction position +DSH-DD, ADDTWO -- two marks before the correction position + +" + +<DEFINE ERROR-LOC? (CORR CPOS POS "OPTIONAL" (SP? <>)) + #DECL ((SP?) ANY (CORR CPOS POS) FIX) + <COND (.SP? + <COND (<==? .CORR ,DRPDOT> <==? .POS .CPOS>) + (<==? .CORR ,DRPDSH> <==? .POS .CPOS>) + (<==? .CORR ,DRPTWO> <==? .POS .CPOS>) + (<==? .CORR ,ADDMRK> <==? <+ .POS 1> .CPOS>) + (<==? .CORR ,ADDTWO> <==? <+ .POS 2> .CPOS>)>) + (<==? .CORR ,DD-DSH> <==? .POS .CPOS>) + (<==? .CORR ,DSH-DD> <==? <+ .POS 1> .CPOS>) + (<==? .CORR ,CHGMRK> <==? .POS .CPOS>)>> + +\ + +<SETG DOFUV <IUVECTOR 150 'ELT>> + +<GDECL (DOFUV) <UVECTOR [150 ATOM] [REST ATOM]>> + +"RLS&SPACES -- takes a string and returns the expanded RLS with spaces in a +uvector of atoms." + +<DEFINE RLS&SPACES (DEC + "AUX" (WRD <REST .DEC <- <LENGTH .DEC> 1>>) + (U <REST ,DOFUV <- <LENGTH ,DOFUV> 1>>) RLS R) + #DECL ((DEC WRD) STRING (VALUE) <OR FALSE <UVECTOR [REST ATOM]>> + (U) <UVECTOR [REST ATOM]> (RLS) UVECTOR (R) <UVECTOR [REST FIX]>) + <REPEAT () + <COND (<NOT <EMPTY? <SET RLS <RLS-FOR-CHAR <1 .WRD>>>>> + <SET R <REST .RLS <- <LENGTH .RLS> 1>>> + <REPEAT () + <COND (<LENGTH? .R 1> + <COND (<LENGTH? .U 1> <PUT .U 1 WRD>) + (ELSE <PUT .U 1 LTR>)>) + (ELSE <PUT .U 1 ELT>)> + <SET U <BACK .U>> + <PUT .U 1 <COND (<0? <1 .R>> DOT) (DASH)>> + <SET U <BACK .U>> + <AND <==? .RLS .R> <RETURN>> + <SET R <BACK .R>>>) + (ELSE <RETURN <>>)> + <AND <==? .DEC .WRD> <RETURN <REST .U>>> + <SET WRD <BACK .WRD>>>> + +<ENDPACKAGE> diff --git a/src/mprog2/mderrs.udl006 b/src/mprog2/mderrs.udl006 new file mode 100644 index 00000000..5c1c1141 --- /dev/null +++ b/src/mprog2/mderrs.udl006 @@ -0,0 +1,195 @@ + +<PACKAGE "MDERRS"> + +<ENTRY SQUASH LWFACT ON-EDGE> + +<ENTRY ERROR-WEIGHTS SPCENG MARK-WEIGHTS MRKENG ERROR-VECTOR> + +<ENTRY DRPDOT DRPDSH DD-DSH ADDMRK ADDDOT ADDDSH DSH-DD + CHGMRK DOTDSH DSHDOT ADDTWO DRPTWO NOSALE ERRERR> + +<ENTRY EL LW LE WL EW WE> + +<SETG SQUASH <>> ; "T if code is squashed" + +<SETG LWFACT 0.99999999> ; "lowest conf. letter space=>word space" + +<SETG ON-EDGE 0.150> ; "confidence below which spacing error counts 1/2." + +<GDECL (LWFACT ON-EDGE) FLOAT (SQUASH) <OR ATOM FALSE>> + +"Spacing error weights" + +<SETG ERROR-WEIGHTS + '![1.0 ;"etol" + 0.95 ;"ltow" + 1.0 ;"ltoe" + 0.95 ;"wtol" + 2.0 ;"etow" + 2.0 ;"wtoe"!]> + +"Explanations of spacing error weights" + +<SETG SPCENG + '["sent ELT as LTR" + "sent LTR as WRD" + "sent LTR as ELT" + "sent WRD as LTR" + "sent ELT as WRD" + "sent WRD as ELT"]> + +"Mark error Weights" + +<SETG MARK-WEIGHTS + '![1.0 ;"0 -- dropped dot" + 1.0 ;"1 -- dropped dash" + 1.0 ;"2 -- dot-dot to dash" + 0.95 ;"3 -- added dot" + 1.0 ;"4 -- dash to dot dot" + 1.0 ;"5 -- dot sent as dash" + 1.01 ;"6 -- added two dots" + 1.01 ;"7 -- dropped two dots" + 1.0 ;"8 -- not an error" + 1.05 ;"9 -- added dash" + 1.0 ;"10 - dash sent as dot" + 0.5 ;"11 - esign error"!]> + + +"Explanations of Mark error types" + +<SETG MRKENG + '["sender dropped dot" + "sender dropped dash" + "sender sent dot dot as dash" + "sender added dot" + "sender sent dash as dot dot" + "sender sent dot as dash" + "sender added two dots" + "sender dropped two dots" + "no change, already a word" + "sender added dash" + "sender sent dash as dot" + "error sign was sent"]> + +<GDECL (ERROR-WEIGHTS MARK-WEIGHTS) <UVECTOR [REST FLOAT]> + (SPCENG MRKENG) <VECTOR [REST STRING]>> + +\ + +"mnemonics and explanations for mark errors: +('x' indicates the mark given as CPOS to FDOF, the affected +area is bounded with '[]'). CPOS is always relative to the +RLS sent, rather than to the word gotten by correcting that +RLS. + Sent --> Word + +0. DRPDOT x| . --> x[ .] . + or x |. --> x [. ]. + +1. DRPDSH x| . --> x[ -] . + or x |. --> x [- ]. + +7. DRPTWO x| . --> x[ . .] . + or x |. --> x [. . ]. + +3. ADDMRK .[ x] . --> .| . + or . [x ]. --> . |. + +6. ADDTWO .[ . x] . --> .| . + or . [. x ]. --> . |. + +2. DD-DSH . [x] . --> . [. .] . + +4. DSH-DD . [. x] . --> . [-] . + +5. CHGMRK . [x] . --> . [x] . +" + +<SETG DRPDOT 0> + +;"sender dropped dot" + +<SETG DRPDSH 1> + +;"sender dropped dash" + +<SETG DRPTWO 7> + +;"sender dropped two dots" + +<SETG ADDMRK 3> + +<SETG ADDDOT 3> + +;"sender added dot, previously, added any mark" + +<SETG ADDDSH 9> + +;"sender added dash (new error!)" + +<SETG ADDTWO 6> + +;"sender added two dots" + +<SETG DSH-DD 4> + +;"sender sent dash as dot dot" + +<SETG DD-DSH 2> + +;"sender sent dot dot as dash" + +<SETG CHGMRK 5> + +;"mark changed sense" + +<SETG DOTDSH 5> + +;"sent dot as dash" + +<SETG DSHDOT 10> + +;"sent dash as dot" + +<SETG NOSALE 8> + +;"no change, already a word" + +<SETG ERRERR 11> + +;"error sign error" + +<MANIFEST DRPDOT + DRPDSH + DD-DSH + ADDMRK + ADDDOT + ADDDSH + DSH-DD + CHGMRK + DOTDSH + DSHDOT + ADDTWO + DRPTWO + NOSALE + ERRERR> + +<SETG ERROR-VECTOR <IUVECTOR 6 0>> + +<GDECL (ERROR-VECTOR) <UVECTOR [REST FIX]>> + +<SETG EL 1> + +<SETG LW 2> + +<SETG LE 3> + +<SETG WL 4> + +<SETG EW 5> + +<SETG WE 6> + +<MANIFEST EL LW LE WL EW WE> + +<ENDPACKAGE> diff --git a/src/mprog2/mdkill.udl004 b/src/mprog2/mdkill.udl004 new file mode 100644 index 00000000..6b16d2cc --- /dev/null +++ b/src/mprog2/mdkill.udl004 @@ -0,0 +1,52 @@ + +<PACKAGE "MDKILL"> + +<ENTRY KILL-SPANS> + +<USE "MDTYPE"> + +"KILL-SPANS -- takes a message and resets all span slots in it" + +<DEFINE KILL-SPANS (COD "TUPLE" KL) + #DECL ((COD) MCOD (KL) <TUPLE [REST <OR ATOM FALSE>]>) + <MAPF <> + <FUNCTION (M) + #DECL ((M) MS) + <PUT .M ,STK <>> + <PUT .M ,PFX 0> + <COND (<EMPTY? .KL> <PUT .M ,FWD ()> <PUT .M ,BCK ()>) + (ELSE + <PUT .M ,FWD <SPLICE-AUTHORS <FWD .M> .KL>> + <PUT .M ,BCK <SPLICE-AUTHORS <BCK .M> .KL>>)>> + .COD> + "DONE"> + +<DEFINE SPLICE-AUTHORS (LL KL "AUX" (L .LL) (ONE? T) A (FAILS? <>)) + #DECL ((LL L VALUE) <LIST [REST SPAN]> + (KL) <TUPLE [REST <OR ATOM FALSE>]> (ONE? FAILS? A) <OR ATOM FALSE>) + <AND <1? <LENGTH .KL>> <NOT <1 .KL>> <SET FAILS? T>> + <REPEAT () + <COND (<EMPTY? .L> <RETURN .LL>) + (.ONE? + <COND (.FAILS? <SET A <SFL <1 .L>>>) + (<SET A <SPAN-AUTHOR <1 .L>>>)> + <COND (<OR <AND .FAILS? <NOT .A>> + <AND <NOT .FAILS?> <MEMQ .A .KL>>> + <SET LL <SET L <REST .L>>> + <AGAIN>) + (ELSE <SET ONE? <>> <AGAIN>)>) + (<NOT <LENGTH? .L 1>> + <COND (.FAILS? <SET A <SFL <2 .L>>>) + (<SET A <SPAN-AUTHOR <2 .L>>>)> + <COND (<OR <AND .FAILS? <NOT .A>> + <AND <NOT .FAILS?> <MEMQ .A .KL>>> + <PUTREST .L <REST .L 2>> + <AGAIN>)>)> + <SET L <REST .L>>> + .LL> + +<DEFINE SPAN-AUTHOR (S) + #DECL ((S) SPAN (VALUE) ATOM) + <COND (<SFL .S> <AUT .S>) (<NOT <EMPTY? <TLS .S>>> <1 <TLS .S>>) (T)>> + +<ENDPACKAGE> diff --git a/src/mprog2/mdtabl.udl009 b/src/mprog2/mdtabl.udl009 new file mode 100644 index 00000000..def12022 --- /dev/null +++ b/src/mprog2/mdtabl.udl009 @@ -0,0 +1,334 @@ + +<PACKAGE "MDTABLE"> + +<ENTRY RLS-FOR-CHAR + RLS-FOR-WORD + LOOKUP-FOR-WORD + CHAR-FOR-RLS + PTBL-LOOK + RLS-TABLE + RLS-PUNC-TABLE + PTBL + MTABLE> + +"LOOKUP-FOR-WORD is used to get an RLS for a word +or character. LOOKUP-FOR-WORD creates a lot of garbage" + +<DEFINE LOOKUP-FOR-WORD (STR CHAR-TABLE PUNC-TABLE "AUX" P) + #DECL ((VALUE) <UVECTOR [REST FIX]> (STR) STRING + (CHAR-TABLE) <UVECTOR [REST UVECTOR]> + (PUNC-TABLE) <VECTOR [REST STRING UVECTOR]> + (P) <OR FALSE <VECTOR [REST STRING UVECTOR]>>) + <COND + (<EMPTY? .STR> ![!]) + (<==? <1 .STR> !\*> + <COND (<SET P <MEMBER .STR .PUNC-TABLE>> <2 .P>) + (ELSE <ERROR PUNCTUATION-NOT-FOUND>)>) + (ELSE + <MAPF ,UVECTOR + <FUNCTION (C "AUX" (CH <ASCII .C>)) + #DECL ((C) CHARACTER (CH) FIX) + <COND (<OR <G? .CH <ASCII !\Z>> <L? .CH <ASCII !\!>>> + <ERROR CHARACTER-OUT-OF-RANGE>)> + <MAPRET !<NTH .CHAR-TABLE <- <+ .CH 1> <ASCII !\!>>>>> + .STR>)>> + +"pick up rls for a given character" + +<DEFINE RLS-FOR-CHAR (C) + #DECL ((C) CHARACTER (VALUE) <UVECTOR [REST FIX]>) + <NTH ,RLS-TABLE <- <+ 1 <ASCII .C>> <ASCII !\!>>>> + +"takes string and transforms into a list of the rls for the string" + +<DEFINE RLS-FOR-WORD (STR) + #DECL ((VALUE) <UVECTOR [REST FIX]> (STR) STRING) + <LOOKUP-FOR-WORD .STR ,RLS-TABLE ,RLS-PUNC-TABLE>> + +"convert a word (string version of a mneme object from internal +mneme punctuation representation to internal decoder representation" + +<DEFINE PTBL-LOOK (ST "AUX" M) + #DECL ((ST VALUE) STRING (M) <OR FALSE <VECTOR STRING STRING>>) + <COND (<AND <==? <1 .ST> !\*> + <SET M <MEMBER .ST ,PTBL>>> + <2 .M>) + (ELSE .ST)>> + +<DEFINE CHAR-FOR-RLS (DDC DDI "AUX" MT) + #DECL ((DDC DDI) FIX (VALUE) STRING (MT) <VECTOR [REST STRING]>) + <COND (<OR <G? .DDC <LENGTH ,MTABLE>> + <G? <+ .DDI 1> <LENGTH <SET MT <NTH ,MTABLE .DDC>>>>> + <ERROR TOO-BIG .DDC .DDI CHAR-FOR-RLS>) + (<NTH .MT <+ .DDI 1>>)>> + +\ + +"RLS-TABLE -- + TABLE OF MARKS FOR INDIVIDUAL CHARACTERS, + OFFSETS START AT 0 FOR CHARACTER !, ASCII CODE *41* + 0 IS DOT, 1 IS DASH" + +<SETG RLS-TABLE + <UVECTOR ![1 0 1 0 1!] ;(!\! "*ATTN*") + ![0 1 0 0 1 0!] ;(!\" "*DOUBLE-QUOTE*") + ![0 1 0 1 0!] ;(!\# "*END-OF-MESSAGE*") + ![0 0 0 1 0 1!] ;(!\$ "*END-OF-WORK*") + ![!] ;!\% + ![0 1 0 0 0!] ;(!\& "*WAIT*") + ![0 1 1 1 1 0!] ;(!\' "*SINGLE-QUOTE*") + ![1 0 1 1 0 1!] ;(!\( "*PARENTHESES*") + ![!] ;!\) + ![!] ;!\* + ![!] ;!\+ + ![1 1 0 0 1 1!] ;(!\, "*COMMA*") + ![1 0 0 0 0 1!] ;(!\- "*HYPHEN*") + ![0 1 0 1 0 1!] ;(!\. "*PERIOD*") + ![1 0 0 1 0!] ;(!\/ "*SLASH*") + ![1 1 1 1 1!] ;!\0 + ![0 1 1 1 1!] ;!\1 + ![0 0 1 1 1!] ;!\2 + ![0 0 0 1 1!] ;!\3 + ![0 0 0 0 1!] ;!\4 + ![0 0 0 0 0!] ;!\5 + ![1 0 0 0 0!] ;!\6 + ![1 1 0 0 0!] ;!\7 + ![1 1 1 0 0!] ;!\8 + ![1 1 1 1 0!] ;!\9 + ![1 1 1 0 0 0!] ;(!\: "*COLON*") + ![1 0 1 0 1 0!] ;(!\; "*SEMICOLON*") + ![!] ;!\< + ![1 0 0 0 1!] ;(!\= "*DOUBLE-HYPHEN*") + ![!] ;!\> + ![0 0 1 1 0 0!] ;(!\? "*QUESTION-MARK*") + ![0 0 0 0 0 0!] ;(!\@ "*ERROR*") + ![0 1!] ;"A" + ![1 0 0 0!] ;"B" + ![1 0 1 0!] ;"C" + ![1 0 0!] ;"D" + ![0!] ;"E" + ![0 0 1 0!] ;"F" + ![1 1 0!] ;"G" + ![0 0 0 0!] ;"H" + ![0 0!] ;"I" + ![0 1 1 1!] ;"J" + ![1 0 1!] ;"K" + ![0 1 0 0!] ;"L" + ![1 1!] ;"M" + ![1 0!] ;"N" + ![1 1 1!] ;"O" + ![0 1 1 0!] ;"P" + ![1 1 0 1!] ;"Q" + ![0 1 0!] ;"R" + ![0 0 0!] ;"S" + ![1!] ;"T" + ![0 0 1!] ;"U" + ![0 0 0 1!] ;"V" + ![0 1 1!] ;"W" + ![1 0 0 1!] ;"X" + ![1 0 1 1!] ;"Y" + ![1 1 0 0!] ;"Z">> + +<GDECL (RLS-TABLE) <UVECTOR [REST <UVECTOR [REST FIX]>]>> + +\ + +"table of punctuation rls's" + +<SETG RLS-PUNC-TABLE + <VECTOR "*ATTN*" + ![1 0 1 0 1!] + "*COLON*" + ![1 1 1 0 0 0!] + "*COMMA*" + ![1 1 0 0 1 1!] + "*DOUBLE-HYPHEN*" + ![1 0 0 0 1!] + "*DOUBLE-QUOTE*" + ![0 1 0 0 1 0!] + "*END-OF-MESSAGE*" + ![0 1 0 1 0!] + "*END-OF-WORK*" + ![0 0 0 1 0 1!] + "*ERROR*" + ![0 0 0 0 0 0!] + "*HYPHEN*" + ![1 0 0 0 0 1!] + "*PARENTHESES*" + ![1 0 1 1 0 1!] + "*PERIOD*" + ![0 1 0 1 0 1!] + "*QUESTION-MARK*" + ![0 0 1 1 0 0!] + "*SEMICOLON*" + ![1 0 1 0 1 0!] + "*SINGLE-QUOTE*" + ![0 1 1 1 1 0!] + "*SLASH*" + ![1 0 0 1 0!] + "*WAIT*" + ![0 1 0 0 0!]>> + +<GDECL (RLS-PUNC-TABLE) <VECTOR [REST STRING UVECTOR]>> + +<SETG PTBL + <VECTOR "*ATTN*" + "!" + "*DOUBLE-QUOTE*" + "\"" + "*END-OF-MESSAGE*" + "#" + "*END-OF-WORK*" + "$" + "*WAIT*" + "&" + "*SINGLE-QUOTE*" + "'" + "*PARENTHESES*" + "(" + "*COMMA*" + "," + "*HYPHEN*" + "-" + "*PERIOD*" + "." + "*SLASH*" + "/" + "*COLON*" + ":" + "*SEMICOLON*" + ";" + "*DOUBLE-HYPHEN*" + "=" + "*QUESTION-MARK*" + "?" + "*ERROR*" + "@">> + +<GDECL (PTBL) <VECTOR [REST STRING]>> + +\ + +"table of code entries: each sub vector contains code sequences of length from one + to six, and these are ordered numerically, where a dot = 0 and a dash = 1 in binary" + +<GDECL (MTABLE) <UVECTOR [6 <VECTOR [REST STRING]>]>> + +<SETG MTABLE + ![["E" "T"] + ["I" "A" "N" "M"] + ["S" "U" "R" "W" "D" "K" "G" "O"] + ["H" + "V" + "F" + "{..--}" + "L" + "{.-.-}" + "P" + "J" + "B" + "X" + "C" + "Y" + "Z" + "Q" + "{---.}" + "{----}"] + ["5" + "4" + "{...-.}" + "3" + "{..-..}" + "{..-.-}" + "{..--.}" + "2" + "&" + "{.-..-}" + "#" + "{.-.--}" + "{.--..}" + "{.--.-}" + "{.---.}" + "1" + "6" + "=" + "/" + "{-..--}" + "{-.-..}" + "!" + "{-.--.}" + "{-.---}" + "7" + "{--..-}" + "{--.-.}" + "{--.--}" + "8" + "{---.-}" + "9" + "0"] + ["@" + "{.....-}" + "{....-.}" + "{....--}" + "{...-..}" + "$" + "{...--.}" + "{...---}" + "{..-...}" + "{..-..-}" + "{..-.-.}" + "{..-.--}" + "?" + "{..--.-}" + "{..---.}" + "{..----}" + "{.-....}" + "{.-...-}" + "\"" + "{.-..--}" + "{.-.-..}" + "." + "{.-.--.}" + "{.-.---}" + "{.--...}" + "{.--..-}" + "{.--.-.}" + "{.--.--}" + "{.---..}" + "{.---.-}" + "'" + "{.-----}" + "{-.....}" + "-" + "{-...-.}" + "{-...--}" + "{-..-..}" + "{-..-.-}" + "{-..--.}" + "{-..---}" + "{-.-...}" + "{-.-..-}" + ";" + "{-.-.--}" + "{-.--..}" + "(" + "{-.---.}" + "{-.----}" + "{--....}" + "{--...-}" + "{--..-.}" + "," + "{--.-..}" + "{--.-.-}" + "{--.--.}" + "{--.---}" + ":" + "{---..-}" + "{---.-.}" + "{---.--}" + "{----..}" + "{----.-}" + "{-----.}" + "{------}"]!]> + +<ENDPACKAGE> diff --git a/src/mprog2/mdtype.udl012 b/src/mprog2/mdtype.udl012 new file mode 100644 index 00000000..34150656 --- /dev/null +++ b/src/mprog2/mdtype.udl012 @@ -0,0 +1,249 @@ + +<PACKAGE "MDTYPE"> + +<USE "TEMPLATE"> + +<ENTRY DOT DASH ELT LTR WRD> + +<ENTRY MREST MBACK MTOP?> + +<ENTRY SRC RND ILLSPC SPCHNG> + +<ENTRY MCOD> + +<ENTRY EVNT EVTYP> + +<ENTRY MS BCK FWD MSD STK PFX VNT> + +<ENTRY SPAN SFL LSP AUT TLS BST FDF WDS> + +<ENTRY ELT MTYP MCNF STYP SCNF MDUR SDUR> + +<ENTRY DOF CNFSUM FRDSUM NMELTS ETOL LTOW WTOL LTOE ETOW WTOE SPCERR + MRKERR MKCHNG MRKCOR MRKPOS> + +\ + +"MCOD -- the morse code data vector. each element is a mark-space +data vector." + +<NEWTYPE MCOD UVECTOR '<<PRIMTYPE UVECTOR> [REST MS]>> + +"ELT -- the actual duration and confidence data for a mark-space +pair. contains the confidence of the mark, the type of space, its +confidence, and the actual durations of the mark and space" + +<TEMPLATE ELT + ATOM ; "MTYP" + (FLOAT 18) ; "MCNF" + ATOM ; "STYP" + (FLOAT 18) ; "SCNF" + (FLOAT 18) ; "MDUR" + (FLOAT 18) ; "SDUR"> + +<SETG MTYP 1> + +<SETG MCNF 2> + +<SETG STYP 3> + +<SETG SCNF 4> + +<SETG MDUR 5> + +<SETG SDUR 6> + +\ + +<MANIFEST MTYP MCNF STYP SCNF MDUR SDUR> + +"MS -- data vector for a mark-space pair. contains the list of +spans which end at the space to the left of the mark, and the list +of the spans which begin at the space to the left of the mark. it +also has the actual duration and confidence data (from FRAUD) and +a slot to stuff randomness into" + +<TEMPLATE MS + LIST ; "BCK" + LIST ; "FWD" + ELT ; "MSD" + BOOLEAN ; "STK" + (FIX 9) ; "PFX" + LIST ; "VNT"> + +<PUT MS + DECL + '<MS <LIST [REST SPAN]> + <LIST [REST SPAN]> + ELT + <OR ATOM FALSE> + FIX + <LIST [REST EVNT]>>> + +<SETG BCK 1> + +<SETG FWD 2> + +<SETG MSD 3> + +<SETG STK 4> + +<SETG PFX 5> + +<SETG VNT 6> + +<MANIFEST BCK FWD MSD STK PFX VNT> + +"replacement for RND slot of MS" + +<DEFMAC RND ('X) + <FORM PROG ((XX .X)) + #DECL ((XX) MS) + '<COND (<STK .XX> <PFX .XX>)>>> + +\ + +"DOF -- fraud degree of fit (goes into FDF slot of SPAN/NAPS +Contains: +1/ number of times we have to change sense of a space +2/ number of times we have to change sense of a mark +3/ total sum of confidences assuming changes +4/ total sum of fraud confidences for the span +5/ number of ELTs involved +6/ number of illegal (i.e. LW-E or EL-W) space swaps + +7/ correction applied to achieve decoding (only if mark-error) +8/ location of correction (only if mark-error) + +Note that, when in a FDF slot as the real FRAUD decoding, elements +1, 2 and 6 will be 0, and 3 and 4 will be equal + +" + +<TEMPLATE DOF + (FLOAT 18) ; "CNFSUM" + (FLOAT 18) ; "FRDSUM" + (FIX 8) ; "NMELTS" + (FIX 5) ; "ETOL" + (FIX 5) ; "LTOW" + (FIX 5) ; "LTOE" + (FIX 5) ; "WTOL" + (FIX 3) ; "ETOW" + (FIX 3) ; "WTOE" + BOOLEAN ; "SPCERR" + BOOLEAN ; "MRKERR" + (FIX 5) ; "MKCHNG" + (FIX 4) ; "MRKCOR" + (FIX 8) ; "MRKPOS"> + +<SETG CNFSUM 1> + +<SETG FRDSUM 2> + +<SETG NMELTS 3> + +<SETG ETOL 4> + +<SETG LTOW 5> + +<SETG LTOE 6> + +<SETG WTOL 7> + +<SETG ETOW 8> + +<SETG WTOE 9> + +<SETG SPCERR 10> + +<SETG MRKERR 11> + +<SETG MKCHNG 12> + +<SETG MRKCOR 13> + +<SETG MRKPOS 14> + +<MANIFEST CNFSUM FRDSUM NMELTS ETOL LTOW LTOE WTOL WTOE ETOW MRKERR SPCERR + MKCHNG MRKCOR MRKPOS> + +<DEFMAC ILLSPC ('X) + <FORM PROG ((X .X)) + #DECL ((X) DOF (VALUE) FIX) + '<+ <WTOE .X> <ETOW .X>>>> + +<DEFMAC SPCHNG ('X) + <FORM PROG ((X .X)) + #DECL ((X) DOF (VALUE) FIX) + '<+ <ETOL .X> <LTOW .X> <LTOE .X> <WTOL .X>>>> + +\ + +"SPAN -- data about an interpretation of a section of +a morse code message. contains the size of the span, who +caused it to be generated (or FALSE (reason) if it has no +winning interpretation as yet), and the words in it if it +has a winning interpretation. There is also a slot for +the FRAUD confidence of the span" + +<TEMPLATE SPAN + BOOLEAN ; "SFL -- source flag, T indicates real decoding" + (FIX 9) ; "LSP -- length of span" + ATOM ; "AUT -- author of span" + LIST ; "TLS -- try list for failing spans" + (FIX 2) ; "BST -- 0 - untouched, 1 - best, >1 - rejected" + "OPTIONAL" + DOF ; "FDF -- dof of good span" + STRING ; "WDS -- word for good span"> + +<SETG SFL 1> + +<SETG LSP 2> + +<SETG AUT 3> + +<SETG TLS 4> + +<SETG BST 5> + +<SETG FDF 6> + +<SETG WDS 7> + +<MANIFEST SFL LSP AUT TLS BST WDS FDF> + +"replacement for SRC slot of SPAN" + +<DEFMAC SRC ('X) + <FORM PROG ((XX .X)) + #DECL ((XX) SPAN) + '<COND (<SFL .XX> <AUT .XX>) + (ELSE <CHTYPE <TLS .XX> FALSE>)>>> + +\ + +"EVNT -- Description of an event of interest that happened at this point in +time. Examples would be speaker changes, changes in the signal, changes in +the type of code being sent, and so on." + +<NEWTYPE EVNT VECTOR '<VECTOR ATOM>> + +<SETG EVTYP 1> + +<MANIFEST EVTYP> + +\ + +<DEFMAC MREST ('X "OPTIONAL" ('N 1)) + <FORM CHTYPE <FORM REST .X .N> MCOD>> + +<DEFMAC MBACK ('X "OPTIONAL" ('N 1)) + <FORM CHTYPE <FORM BACK .X .N> MCOD>> + +<DEFMAC MTOP? ('C) + <FORM PROG ((C .C)) + #DECL ((C) MCOD) + '<==? <LENGTH .C> <LENGTH <TOP .C>>>>> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog2/mlearn.uerb64 b/src/mprog2/mlearn.uerb64 new file mode 100644 index 00000000..325fa41f --- /dev/null +++ b/src/mprog2/mlearn.uerb64 @@ -0,0 +1,602 @@ +<PACKAGE "MLEARN"> +<ENTRY LEARN MNEME-BEGIN MNEME-END RANDOM-MNEME-ITEM + CONVERT NON-INVERT MNUM MNEME-LOCK MNEME-WRITE + MNEME-UNLOCK PIO-TRACE> + +<USE "PIO" "MNEME"> + +<SETG PIO-HANG-ON-UNMAP? T> ;"Never delete this" +<SETG PIO-PAGE-LIMIT 100> +<SETG MNUM <>> +<SETG NAMELIST ()> +<SETG EHT <IUVECTOR 60 ()>> +<GDECL (NAMELIST) <LIST [REST ATOM]> (MNUM) <OR FALSE ATOM> (PIO-TRACE) CHANNEL + (EHT) <UVECTOR [60 LIST] [REST LIST]> (MNEME-READ-TABLE) <VECTOR [256 ANY]>> + +<DEFINE MNEME-LOCK ("OPTIONAL" (KEY "MNEME")) #DECL ((KEY) STRING) + <OR <GASSIGNED? MNEMECHN><ERROR "You forgot to MNEME-INITialize">> + <MNEME-WRITE <HASH-ATOM .KEY 92681> 1>> + +<DEFINE MNEME-UNLOCK ("OPTIONAL" (KEY "MNEME")) + #DECL ((KEY) STRING) + <OR <GASSIGNED? MNEMECHN><ERROR "You forgot to MNEME-INITialize">> + <AND <==? <HASH-ATOM .KEY 92681><MNEME-READ 1 1>> + <CLOSEP ,MNEMECHN> + <SETG MNEMECHN <OPENP "PRINT" <2 ,DHT> 1 T>> + <MNEME-WRITE 0 1> + <PUT ,DHT 1 "PRINT"> + "Reopened in print mode">> + +<DEFINE INIT-READ-TABLE () + <PUT <SETG MNEME-READ-TABLE <IVECTOR 256. 0>> + <+ 1 <ASCII !\| >> ;"SETUP | " + #FUNCTION ((X) #DECL ((OBLIST)<SPECIAL LIST>) + <READCHR .INCHAN> + <ATOM <UNPARSE <READ .INCHAN '<ERROR> .OBLIST>>>)>> + + +<DEFINE MNEME-BEGIN ("OPTIONAL" (INCHAN .INCHAN) "AUX" SAV X MNEME-SEEN + (ATOMLIST ()) (LISTLIST ()) + (READ-TABLE<COND (<GASSIGNED? MNEME-READ-TABLE> + ,MNEME-READ-TABLE) + (<INIT-READ-TABLE>)> ) + (OBLIST (,MNEME-OBLIST !.OBLIST))) + #DECL ((ATOMLIST LISTLIST MNEME-SEEN OBLIST)<SPECIAL LIST> + (READ-TABLE) <SPECIAL <VECTOR [256 ANY]>>) + <COND + (<NOT <GASSIGNED? DHT>><ERROR "You forgot to MNEME-INITialize">) + (<REPEAT () + <SET X <REPEAT ()<COND (<==? <SET X <NEXTCHR .INCHAN>> !\< > + <RETURN <READ .INCHAN '<ERROR> ,OBLIST>>) + (<==? .X !\[ ><RETURN <READ .INCHAN '<ERROR> .OBLIST>>) + (<==? .X !\( ><ERROR "Unmatched or missing bracket">) + (<==? .X !\;><READ .INCHAN '<ERROR> .OBLIST>) + (<READCHR .INCHAN>)>>> + <COND (<TYPE? .X FORM> + <COND (<0? <STRCOMP MNEME-END <1 .X>>> + <UV-ZAP ,EHT><RETURN .SAV>) + (<EVAL .X>)>) + (<MNEME-NAMES .X> + <MNEME-NAMES2 .X> + <UV-ZAP ,EHT> + <SET MNEME-SEEN (SEEN)> + <MAPF <><FUNCTION (I)<MAKEUNIQUE <> .I>> + .X> + <SET LISTLIST <NREVERSE .LISTLIST>> + ;"Listlist always has uses of item after item" + <SET SAV <MAPF <>,ATOMLEARN1 .ATOMLIST>> + <SET SAV <OR <MAPF <>,LISTLEARN1 .LISTLIST> .SAV>> + <MAPF <> <FUNCTION (X)<PUTPROP .X .MNEME-SEEN>> .ATOMLIST> + <MAPF <> ,UNASSIGN ,NAMELIST> + <UV-ZAP ,MNEME-OBLIST> + <SETG NAMELIST ()> + <SET ATOMLIST ()> + <SET LISTLIST ()> + )> + >)>> + +<SETG MNEME-OBLIST <MOBLIST MNEME-OBLIST 23>> +<GDECL (MNEME-OBLIST) OBLIST> + +<DEFINE MNEME-END ()<PRINT "ERROR--EVALing MNEME-END">> + +<DEFINE LEARN ("TUPLE" L + "AUX" (LISTLIST ()) (ATOMLIST ()) + (MNEME-SEEN (SEEN)) SAV) + #DECL ((LISTLIST ATOMLIST MNEME-SEEN) <SPECIAL LIST> + (L)<OR TUPLE LIST>) + <SET L (!.L)> + <OR <AND <GASSIGNED? DHT> + <=? <1 ,DHT> "PRINT">> + <ERROR "You forgot to MNEME-INITialize">> + <MNEME-NAMES .L> + <MNEME-NAMES2 .L> + <UV-ZAP ,EHT> + <MAPF <> <FUNCTION (I) <MAKEUNIQUE <> .I>> .L> + <SET LISTLIST <NREVERSE .LISTLIST>> + <SET SAV <MAPF <> ,ATOMLEARN1 .ATOMLIST>> + <SET SAV <OR <MAPF <> ,LISTLEARN1 .LISTLIST> .SAV>> + <MAPF <> <FUNCTION (X)<PUTPROP .X .MNEME-SEEN>> .ATOMLIST> + <MAPF <> ,UNASSIGN ,NAMELIST> + <UV-ZAP ,MNEME-OBLIST> + <SETG NAMELIST ()> + .SAV> + + + + +<DEFINE ATOMLEARN1 (ATM "AUX" MNEME) + #DECL ((ATM) ATOM (VALUE) OWT (MNEME) <OR FIX OWT FALSE>) + <SET MNEME <GETPROP .ATM .MNEME-SEEN>> + <AND <==? ,MNEME-VERBOSE T> <NOT <TYPE? .MNEME OWT>> <PRINC "Learning "> + <PRINC .ATM><TERPRI>> + <COND + (<TYPE? .MNEME OWT> .MNEME) + (<NOT .MNEME><ERROR "Shouldn't get this">) + (<PROG ((INT-LEVEL1 <INT-LEVEL 200>)(HLOC <+ 8 <HASH-ATOM .ATM 2039.>>) + DLOC (B-LOC <MNEME-READ 1 .HLOC>)(INTLOC <HASH-ATOM .ATM 509>) + (UVP <SPNAME .ATM> ) + (NITMS <CHTYPE <GETBITS .B-LOC <BITS 12 24>> FIX>) + (UVPLEN </ <+ <LENGTH .UVP> 4> 5>) DATA (MCHN ,MNEMECHN)) + #DECL ((HLOC B-LOC NITMS DLOC UVPLEN INT-LEVEL1 INTLOC) FIX + (UVP) STRING (DATA) <UVECTOR [REST FIX]> (MCHN) CHANP) + <COND (<0? .NITMS> <SET B-LOC <RALLOCP .MCHN 4>> + <AND <L=? .B-LOC 2048><ERROR "Shouldnt get this" .HLOC .ATM>>)> + <SET DATA <MNEME-READ <IUBKT <+ .NITMS 1>> <- .B-LOC 1>>> + <COND(<L=? <1 .DATA> .NITMS> + <COND (<L? <1 .DATA> .NITMS> + <ERROR "Shouldnt get this" .DATA .HLOC .ATM>)> + <SET DLOC .B-LOC> + <SET B-LOC <CHTYPE <PUTBITS <RALLOCP .MCHN <+ .NITMS </ .NITMS 2> 3>> + <BITS 12 24> + .NITMS> FIX>> + <MNEME-WRITE <REST .DATA> .B-LOC> + <RDALLOCP .MCHN <CHTYPE <GETBITS .DLOC <BITS 24.>> FIX>>)> + <COND (<G=? .NITMS 4089.><ERROR "Bucket overflow">)> + <MNEME-WRITE <+ .B-LOC *000100000000*> .HLOC> + <SET DLOC + <CHTYPE <PUTBITS <RALLOCP .MCHN <+ 1 .UVPLEN <MIN 6 <MAX .MNEME 1>>>> + <BITS 12 24> + .INTLOC> FIX>> + <COND (<L? <- ,STORSIZ ,STORNXT> 75> + <GROUP-PAGE-OUT>)> + <PUT ,IHT .INTLOC <STORALLOC + .DLOC + <PUTBITS <* *100000* <NTH ,IHT .INTLOC>><BITS 6 30>.UVPLEN> + .UVP>> + <PUTPROP .ATM .MNEME-SEEN .DLOC> + <MNEME-WRITE .DLOC <+ .B-LOC .NITMS>> ;"UPDATE BUCKET" + <MNEME-WRITE .UVP <+ 1 .DLOC>> + <MNEME-WRITE <PUTBITS 0 <BITS 6 30> .UVPLEN> .DLOC> ;"NO USES YET" + <INT-LEVEL .INT-LEVEL1> + <RETURN <CHTYPE .DLOC OWT>> + >)> > + + +<DEFINE LISTLEARN1 (LST "AUX" INT-LEVEL1 (LSTSAV <RGET .LST>) + (HASH <3 .LSTSAV>) + (INTLOC <+ <COND (<TYPE? .LSTSAV MNEME-INSTANCE> 1025.) + ( 513.)> + <MOD .HASH 509>>) + (HLOC <+ 8 <MOD .HASH 2039.>>) (KNOWN ()) + (FLAG <>) KFLG) + #DECL ((LSTSAV) <OR <LIST LIST FIX <OR ATOM FIX>> MNEME-INSTANCE> + (LST) <OR LIST MNEME-INSTANCE> (KNOWN) <LIST [REST FIX]> + (INTLOC HLOC HASH INT-LEVEL1) FIX (FLAG KFLG) <OR 'T FALSE>) + <AND <==? ,MNEME-VERBOSE T> <PRINC "Learning "> + <PRINC .LST> + <TERPRI>> + <SET INT-LEVEL1 <INT-LEVEL 10.>> + <PROG () + <COND + (<TYPE? .LSTSAV MNEME-INSTANCE> + <SET LST (<PROG ((DOWN <1 <1 .LSTSAV>>)) + <1 <SET KNOWN (<COND (<TYPE? .DOWN ATOM> + <CHTYPE <GETPROP .DOWN .MNEME-SEEN> FIX>) + (<TYPE? .DOWN LIST MNEME-INSTANCE> + <2 <RGET .DOWN>>) + (<TYPE? .DOWN OWT> <CHTYPE .DOWN FIX>) + (<ERROR "Illegal instance">)>)>>>)>) + (<AND <SET LST <MAPF ,LIST ;"See if new due to having new element" + <FUNCTION (DR1) ;"Remem known for updating uses" + #DECL ((VALUE) FIX) + <COND (<AND ,MNUM <TYPE? .DR1 FIX> + <OR <G? <ABS .DR1> *037777777777*> + <N==? ,MNUM CONVERT>> + <SET DR1 <MNUM-ATOM .DR1>> + <>>) + (<TYPE? .DR1 ATOM> + <SET KFLG <AND <==? ,MNUM NON-INVERT> + <==? <1 <SPNAME .DR1>> <ASCII 26>>>> + <SET DR1 <GETPROP .DR1 .MNEME-SEEN>> + <COND (<TYPE? .DR1 OWT> <SET DR1 <CHTYPE .DR1 FIX>>) + (.DR1 <SET FLAG T>) + (<ERROR LISTLEARN1 .DR1>)> + <OR .KFLG <SET KNOWN (.DR1 !.KNOWN)>> + .DR1) + (<TYPE? .DR1 LIST MNEME-INSTANCE> + <SET DR1 <RGET .DR1>> + <COND (<==? <3 .DR1> ALREADY-EXISTS>) + (<SET FLAG T>)> + <1 <SET KNOWN (<2 .DR1> !.KNOWN)>>) + (<TYPE? .DR1 FIX> + <COND (<L=? <ABS .DR1> *37777777777*>) + (<ERROR .DR1 "Number too big for MNEME"> 0)> + <CHTYPE <PUTBITS .DR1 <BITS 3 33> 5> FIX>) + (<TYPE? .DR1 OWT> + <SET KNOWN (<CHTYPE .DR1 FIX> !.KNOWN)> + <CHTYPE .DR1 FIX>) + (<ERROR "Unrecognized " .DR1 .LST LISTLEARN1>)>> + .LST>> + .FLAG>) + (<REPEAT ((P <NTH ,IHT .INTLOC>)) #DECL ((P) FIX) + ;"KNOWN INTERNALLY? " + <COND (<0? .P><RETURN <>>) + (<AND <MAPF <> <FUNCTION (E L) #DECL ((E L) FIX) + <OR <==? .E .L> + <MAPLEAVE <>>>> + <REST ,STORPLUS1 .P> + .LST> + <==? <LENGTH .LST> + <CHTYPE <GETBITS <NTH ,STORPLUS1 .P> <BITS 6 30>> FIX>>> + <PUT <PUT .LSTSAV 2 <NTH ,STOR .P>> 3 ALREADY-EXISTS> + <RETURN T>) + (<SET P <CHTYPE <GETBITS <NTH ,STORPLUS1 .P> <BITS 15 15>> FIX>>)>> + <INT-LEVEL .INT-LEVEL1> + <RETURN <CHTYPE <2 .LSTSAV> OWT>>) + (<MAPF <> ;"Already known on dsk? " + <FUNCTION (ENTRY1) #DECL ((ENTRY1) FIX) + <AND <==? <GETBITS .ENTRY1 <BITS 12 24>> + <CHTYPE .INTLOC WORD>> + <COMPARE-DSK-LIST .ENTRY1 .LST> + <PUT .LSTSAV 2 .ENTRY1> + <PUT .LSTSAV 3 ALREADY-EXISTS> + <MAPLEAVE T>>> + <GETBUCKET .HLOC>> + <INT-LEVEL .INT-LEVEL1> + <RETURN <CHTYPE <2 .LSTSAV> OWT>>)> + + <RETURN <PROG ((B-LOC <MNEME-READ 1 .HLOC>) DLOC ATOMNAME (UVLEN 0) + (NITMS <CHTYPE <GETBITS .B-LOC <BITS 12 24>> FIX>)(MCHN ,MNEMECHN)) + #DECL ((B-LOC DLOC NITMS UVLEN) FIX + (ATOMNAME) STRING (MCHN) CHANP) + <COND (<TYPE? .LSTSAV MNEME-INSTANCE> + <SET ATOMNAME <SPNAME <2 <1 .LSTSAV>>>> + <SET UVLEN </ <+ <LENGTH .ATOMNAME> 4> 5>>)> + <SET DLOC + <CHTYPE <PUTBITS <RALLOCP .MCHN <+ 1 <LENGTH .LST> .UVLEN + <MIN 6 <MAX 1 <2 .LSTSAV>>>>> + <BITS 12 24> + .INTLOC> + FIX>> + <COND (<TYPE? .LSTSAV LIST> + <COND (<0? .NITMS> <SET B-LOC <RALLOCP .MCHN 4>>) + (<L=? <MNEME-READ 1 <- .B-LOC 1>> .NITMS> + <PROG ((BLOC-SAV .B-LOC)) + <SET B-LOC <CHTYPE <PUTBITS + <MNEME-WRITE + <MNEME-READ <IUBKT .NITMS> .B-LOC> + <RALLOCP .MCHN <+ .NITMS </ .NITMS 2> 3>>> + <BITS 12 24> + .NITMS> FIX>> + <RDALLOCP .MCHN <CHTYPE <GETBITS .BLOC-SAV <BITS 24>> FIX>>>)> + <MNEME-WRITE <+ *000100000000* .B-LOC> .HLOC> + <MNEME-WRITE .DLOC <+ .B-LOC .NITMS>> + <COND (<G? .NITMS 4090><ERROR "Bucket overflow">)>)> + <MAPF <> + <FUNCTION (KNOWN) #DECL ((KNOWN) FIX) + <COND (<GETPROP <CHTYPE .KNOWN OWT> NON-INVERT>) + (<PUTPROP .KNOWN NEW-USES + (.DLOC !<GETPROP .KNOWN NEW-USES>)>)>> + .KNOWN> + <COND (<TYPE? .LSTSAV MNEME-INSTANCE> + <UNASSIGN <2 <1 .LSTSAV>>> + <MNEME-WRITE .ATOMNAME <+ .DLOC 2>> + <PUTREST <1 .LSTSAV> ()> )> + <PUT .LSTSAV 2 .DLOC> + <MNEME-WRITE (<CHTYPE <PUTBITS 0 <BITS 6 30> + <+ <LENGTH .LST> .UVLEN>> FIX> !.LST) .DLOC> + <INT-LEVEL .INT-LEVEL1> + <RETURN <CHTYPE .DLOC OWT>> >>>> + + + +<DEFINE GETBUCKET (HLOC "AUX" (B-LOC <MNEME-READ 1 .HLOC>)) + #DECL ((HLOC B-LOC) FIX (VALUE) <UVECTOR [REST FIX]>) + <COND (<0? .B-LOC> + ![!] ) + (<MNEME-READ <IUBKT <CHTYPE <GETBITS .B-LOC <BITS 12 24>> FIX>> .B-LOC>)>> + + +<DEFINE COMPARE-DSK-LIST (LOC ITM "AUX" (LEN <LENGTH .ITM>) + (DATA <MNEME-READ <IUVEC9 <+ .LEN 1>> .LOC>) ) + #DECL ((LOC LEN) FIX (ITM) <LIST [REST FIX]> (VALUE) <OR 'T FALSE> + (DATA) <UVECTOR [REST FIX]>) + <AND <==? .LEN <CHTYPE <GETBITS <1 .DATA> <BITS 6 30>> FIX>> + <OR <0? .LEN> + <MAPF <> + <FUNCTION (MNEME OWT)<OR <==? .MNEME .OWT> <MAPLEAVE <>>>> + .ITM + <REST .DATA>>>>> + + + +<GDECL (RANL)<UVECTOR [REST FIX]> (RANN) FIX> +<SETG RANL ![]> +<SETG RANN 7> +<DEFINE RANDOM-MNEME-ITEM () #DECL ((VALUE) OWT) + <COND (<NOT <GASSIGNED? DHT>><ERROR "You forgot to MNEME-INITialize">) + (<EMPTY? ,RANL> + <REPEAT ()<SETG RANN <+ ,RANN 1>> + <COND (<G? ,RANN 2047.><SETG RANN 8>)> + <SETG RANL <GETBUCKET ,RANN>> + <OR <EMPTY? ,RANL><RETURN>>>)> + <SETG RANL <REST ,RANL>> + <CHTYPE <1 <BACK ,RANL>> OWT>> + + + +<DEFINE MNEME-NAMES (S "AUX" N OBJ NAME STR) + #DECL ((STR) STRING (N) <OR FALSE FIX> (OBJ NAME) ATOM) + <COND (<TYPE? .S ATOM> + <COND (<SET N <COLON-CHK .S>> + <COND (<0? .N> .S) + (<SET NAME <PARSE <REST <SET STR <SPNAME .S>> <+ 1 .N>>>> + <SET OBJ <PARSE <SUBSTRUC .STR 0 .N>>> + <COND (<ASSIGNED? .NAME> + <COND (<NOT <TYPE? ..NAME MNEME-INSTANCE>> + <ERROR "Colon usage">)> + ..NAME) + (<SET .NAME <CHTYPE ((.OBJ .NAME) -1 0) + MNEME-INSTANCE>> + <SETG NAMELIST (.NAME !,NAMELIST)> + <PUT ..NAME 3 <SHASH ..NAME>>)>)>) + (.S)>) + (<AND <STRUCTURED? .S> <NOT <TYPE? .S MNEME-INSTANCE>>> + <MAPR <><FUNCTION (STRUC)<PUT .STRUC 1 <MNEME-NAMES <1 .STRUC>>>> .S> + <REPEAT ((S3 .S)) + <COND (<EMPTY? .S3> <RETURN>) + (<AND <STRUCTURED? <1 .S3>> + <NOT <LENGTH? .S3 1>> <TYPE? <2 .S3> ATOM> + <SET N <COLON-CHK <2 .S3>>>> + <SET NAME <PARSE <REST <SPNAME <2 .S3>> <+ 1 .N>>>> + <COND(<ASSIGNED? .NAME> + <COND (<NOT <TYPE? ..NAME MNEME-INSTANCE>> + <ERROR "Colon usage">)>) + (<SET .NAME <CHTYPE ((<1 .S3> .NAME) -1 0) MNEME-INSTANCE>> + <SETG NAMELIST (.NAME !,NAMELIST)> + <PUT .S3 1 <PUT ..NAME 3 <SHASH ..NAME>>> + <COND (<TYPE? .S3 LIST><PUTREST .S3 <REST .S3 2>>) + (<PUT .S3 2 IGNORE--THIS>)>)>)> + <SET S3 <REST .S3>>> + .S) + (.S)>> + +<DEFINE MNEME-NAMES2 (S) + <COND (<AND <STRUCTURED? .S><NOT <TYPE? .S MNEME-INSTANCE>>> + <COND (<EMPTY? .S>) + (<AND <TYPE? <1 .S> ATOM> + <ASSIGNED? <1 .S>> + <COND (<TYPE? .<1 .S> MNEME-INSTANCE> + <PUT .S 1 .<1 .S>>)>>) + (<STRUCTURED? <1 .S>><MNEME-NAMES2 <1 .S>>)> + <COND (<EMPTY? .S>) + (<MNEME-NAMES2 <REST .S>>)>)>> + +<DEFINE MAKEUNIQUE (BAK ITM "AUX" X Y) + #DECL ((BAK) <OR FIX FALSE> + (ITM) <OR LIST ATOM MNEME-INSTANCE FIX OWT> (X Y) ANY + (ATOMLIST LISTLIST MNEME-SEEN) <SPECIAL LIST>) + <COND (<==? .ITM IGNORE--THIS><>) + (<TYPE? .ITM ATOM> + <SET Y <COND (<GETPROP .ITM .MNEME-SEEN>) + (<COND (<SET X <MNEME-EXIST .ITM>> + <PUTPROP .ITM .MNEME-SEEN .X>) + (<PUTPROP .ITM .MNEME-SEEN 0> + <SET ATOMLIST (.ITM !.ATOMLIST)> 0)>)>> + <AND .BAK <TYPE? .Y FIX> <PUTPROP .ITM .MNEME-SEEN <+ .Y 1>>> + .ITM) + (<TYPE? .ITM MNEME-INSTANCE> + <COND ( <==? <2 .ITM> -1> + <MAKEUNIQUE 1 <1 <1 .ITM>>> + <SET LISTLIST (.ITM !.LISTLIST)> )> + <PUT .ITM 2 <OR .BAK 0>> + .ITM) + (<TYPE? .ITM OWT> .ITM) + (<TYPE? .ITM FIX> + <COND (,MNUM + <COND (<AND <==? ,MNUM CONVERT><L? <ABS .ITM> *037777777777*>> + .ITM) + (<MAKEUNIQUE .BAK <MNUM-ATOM .ITM>>)>) + (.ITM)>) + (<NOT <TYPE? .ITM LIST>> <ERROR "Bad type to makeunique" .ITM>) + (<SET Y <RGET .ITM>> ;"MAY RETURN NONEMPTY FALSE" + <AND .BAK <PUT .Y 2 <+ <2 .Y> 1>>> .Y) + (<SET X (.ITM <OR .BAK 0> <1 .Y>)> + <COND (<EMPTY? .ITM> ()) + ( <RPUT .ITM .X> + <MAPF <><FUNCTION (I)<MAKEUNIQUE 1 .I>> .ITM> + <SET LISTLIST (.ITM !.LISTLIST)> .X)> ) >> + + +<SETG FALS-CON #FALSE (0 0 0)> +<GDECL (FALS-CON) <FALSE FIX ANY ANY>> + +<DEFINE RGET (ITM "AUX" (H <SHASH .ITM>) L) + #DECL ( (H) FIX (L) <OR FALSE LIST> + (ITM VALUE) <OR MNEME-INSTANCE LIST FALSE>) + <COND (<TYPE? .ITM MNEME-INSTANCE> .ITM) + (<AND <SET L <MEMQ .H <NTH ,EHT <+ <MOD .H 59> 1>>>> + <MAPF <> + <FUNCTION (LITM) #DECL ((LITM) <LIST LIST>) + <COND (<=? <1 .LITM> .ITM> <MAPLEAVE .LITM>) + (<MAPF <><FUNCTION (A B) + <COND (<TYPE? .A ATOM FIX> + <AND <TYPE? .B ATOM FIX> + <N==? .A .B><MAPLEAVE <>>>) + (<TYPE? .A STRING> + <AND <TYPE? .B STRING><N=? .A .B> + <MAPLEAVE <>>>) + (<TYPE? .A OWT> + <AND <TYPE? .B OWT><N==? .A .B> + <MAPLEAVE <>>>) + (T)>> + .ITM <1 .LITM> > + <MAPLEAVE .LITM>)>> + <2 .L>>>) + (ELSE <PUT ,FALS-CON 1 .H>)>> + +<DEFINE RPUT (ITM VAL "AUX" (H <SHASH .ITM>) + (L <+ <MOD .H 59> 1>) + (EHTLST <NTH ,EHT .L>) + (L2 <MEMQ .H .EHTLST>)) + #DECL ((H L VALUE) FIX (EHTLST) LIST (L2) <OR LIST FALSE>) + <COND (.L2 <PUT <SET L2 <REST .L2>> 1 (.VAL !<1 .L2>)>) + (<PUT ,EHT .L (.H (.VAL) !.EHTLST)>)> + .H> + +<DEFINE PAGE-REST ("AUX" (AS <ASSOCIATIONS>) AS2) + #DECL ((AS AS2) <OR FALSE ASOC>) + <REPEAT () <SET AS2 <NEXT .AS>> + <COND (<AND <==? <INDICATOR .AS> NEW-USES><TYPE? <ITEM .AS> FIX>> + <PAGE-OUT <ITEM .AS>>)> + <COND (<SET AS .AS2>)(<RETURN T>)>>> + +<DEFINE PAGE-OUT (OWT "AUX" SIZ ULEN OLD-USIZ E-USES HEADER A-FIX LASTITEM + (USES <GETPROP .OWT NEW-USES>)) + #DECL ((OWT SIZ ULEN OLD-USIZ A-FIX HEADER LASTITEM) FIX + (USES) <OR FALSE <LIST [REST FIX]>> (E-USES) <LIST [REST FIX]>) + <COND (.USES + <SET HEADER <MNEME-READ 1 .OWT>> + <SET SIZ <+ <CHTYPE <GETBITS .HEADER <BITS 6 30>>FIX> + <SET OLD-USIZ <CHTYPE <GETBITS .HEADER <BITS 15>> FIX>> + 1>> + <COND (<G? .SIZ 16><PRINT ["*** Note--SIZ=" .SIZ .OWT]>)> + <SET ULEN <LENGTH .USES>> + <COND (<G=? <+ .ULEN .OLD-USIZ> 16383><ERROR "Capacity exceeded">)> + <SET LASTITEM <MNEME-READ 1 <+ .OWT .SIZ -1>>> + <COND (<AND <N==? .OLD-USIZ 0> + <==? <CHTYPE <GETBITS .LASTITEM <BITS 3 33>> FIX> 7>> + <EXTEND-EXTENSION .USES <+ .OWT .SIZ -1> .LASTITEM .ULEN>) + (ELSE + <SET A-FIX <MNEME-READ 1 <- .OWT 1>>> + <COND (<OR <L=? .A-FIX 0> <G? .A-FIX 16382>> + <ERROR "PIO block size = " .A-FIX .OWT PAGE-OUT>) + (<==? .SIZ .A-FIX> + <MNEME-WRITE <BLD-EXTENSION (.LASTITEM !.USES)> + <+ .OWT .SIZ -1>>) + (<L=? <+ .SIZ .ULEN> .A-FIX> + <MNEME-WRITE .USES <+ .OWT .SIZ>> + <MNEME-WRITE <ANDB <+ .HEADER .ULEN> *770000077777*> .OWT>) + (<SET E-USES <REST .USES <- .A-FIX .SIZ 1>>> + <COND (<==? <- .A-FIX .SIZ> 1><SET USES ()>) + (<PUTREST <REST .USES <- .A-FIX .SIZ 2>> ()> + <MNEME-WRITE .USES <+ .OWT .SIZ>>)> + <MNEME-WRITE <ANDB <+ .HEADER <LENGTH .USES> 1> + *770000077777*> .OWT> + <MNEME-WRITE <BLD-EXTENSION .E-USES> + <+ .OWT .A-FIX -1 >>)>)> + <PUTPROP .OWT NEW-USES>)> + > + + +<DEFINE BLD-EXTENSION (USES "AUX" (LEN <LENGTH .USES>)) + #DECL ((USES) <LIST [REST FIX]> (VALUE) FIX) + <SET USES (.LEN !.USES)> + <COND (<G=? <1 .USES> 16383><ERROR "More than 16382 uses">)> + <CHTYPE <PUTBITS <MNEME-WRITE .USES <RALLOCP ,MNEMECHN <+ 3 .LEN </ .LEN 3>>>> + <BITS 3 33> 7> FIX> > + +<SETG EEUV ![0 0]> +<GDECL (EEUV) <UVECTOR FIX FIX>> + +<DEFINE EXTEND-EXTENSION (USES EXT-PTR EXT ULEN "AUX" + BLEN ELEN NUEXT UV ) + #DECL ((USES) <LIST [REST FIX]> (ULEN BLEN ELEN NUEXT EXT SIZ EXT-PTR) FIX + (VALUE) ANY (UV)<UVECTOR FIX FIX> ) + <SET UV <MNEME-READ ,EEUV <- .EXT 1>>> + <SET BLEN <1 .UV>> + <SET ELEN <2 .UV>> + <COND (<OR <G? .BLEN 16383> + <G=? <+ .ULEN .ELEN> 16383>> + <ERROR "More than 16383 uses" .UV .EXT-PTR EXTEND-EXTENSION>)> + <MNEME-WRITE <+ .ULEN .ELEN> .EXT> + <COND (<G=? <+ .ULEN .ELEN> .BLEN> + <SET NUEXT <RALLOCP ,MNEMECHN <+ 4 .ULEN .ELEN </ .ELEN 3>>>> + <MNEME-WRITE <MNEME-READ <IUVEC8 <+ 1 .ELEN>> .EXT> .NUEXT> + <RDALLOCP ,MNEMECHN <CHTYPE <GETBITS .EXT <BITS 24>> FIX>> + <MNEME-WRITE .USES <+ .NUEXT .ELEN 1>> + <MNEME-WRITE <ORB *700000000000* .NUEXT> .EXT-PTR>) + (<MNEME-WRITE .USES <+ .EXT .ELEN 1>>)> + T > + + +<SETG TEMP-UVEC9 <IUVECTOR <SETG TEMP-UVEC9-LEN 10> 0>> +<GDECL (TEMP-UVEC9-LEN) FIX (TEMP-UVEC9) <UVECTOR [REST FIX]>> + +<DEFINE IUVEC9 (LEN) #DECL ((LEN) FIX (VALUE) <UVECTOR FIX>) + <COND (<G? .LEN ,TEMP-UVEC9-LEN> + <SETG TEMP-UVEC9 <IUVECTOR <SETG TEMP-UVEC9-LEN <+ .LEN 32>> 0>>)> + <REST ,TEMP-UVEC9 <- ,TEMP-UVEC9-LEN .LEN>>> + +<SETG TEMP-UVEC8 <IUVECTOR <SETG TEMP-UVEC8-LEN 10> 0>> +<GDECL (TEMP-UVEC8-LEN) FIX (TEMP-UVEC8) <UVECTOR [REST FIX]>> + +<DEFINE IUVEC8 (LEN) #DECL ((LEN) FIX (VALUE) <UVECTOR FIX>) + <COND (<G? .LEN ,TEMP-UVEC8-LEN> + <SETG TEMP-UVEC8 <IUVECTOR <SETG TEMP-UVEC8-LEN <+ .LEN 32>> 0>>)> + <REST ,TEMP-UVEC8 <- ,TEMP-UVEC8-LEN .LEN>>> + +<SETG TEMP-UVEC10B <IUVECTOR <SETG TEMP-UVEC10B-LEN 10> 0>> +<GDECL (TEMP-UVEC10B-LEN) FIX (TEMP-UVEC10B) <UVECTOR [REST FIX]>> + +<DEFINE IUVEC10B (LEN) #DECL ((LEN) FIX (VALUE) <UVECTOR FIX>) + <COND (<G? .LEN ,TEMP-UVEC10B-LEN> + <SETG TEMP-UVEC10B <IUVECTOR <SETG TEMP-UVEC10B-LEN <+ .LEN 32>> 0>>)> + <REST ,TEMP-UVEC10B <- ,TEMP-UVEC10B-LEN .LEN>>> + + +<DEFINE MNEME-WRITE (DATA LOC "AUX" WRITN) + #DECL ((DATA) <OR <UVECTOR <PRIMTYPE WORD>> <PRIMTYPE WORD> STRING LIST> + (LOC VALUE) FIX (WRITN) <OR FIX FALSE>) + <SET LOC <CHTYPE <ANDB .LOC *000077777777*> FIX>> + <COND (<GASSIGNED? PIO-TRACE> + <PRINT <COND (<==? <PRIMTYPE .DATA> WORD> 1) + (<TYPE? .DATA STRING></ <+ <LENGTH .DATA> 4> 5>) + (<LENGTH .DATA>)> + ,PIO-TRACE> + <PRINC " W@ " ,PIO-TRACE> + <PRINC .LOC ,PIO-TRACE>)> + <COND (<==? <PRIMTYPE .DATA> WORD> + <OR <SET WRITN <PRINTP ,MNEMECHN .LOC <CHTYPE .DATA WORD>>> + <ERROR "PRINTP returns false" .LOC .WRITN + <NTH ,PIO-ERROR-VECTOR <1 .WRITN>>>>) + (<EMPTY? .DATA>) + (<TYPE? .DATA UVECTOR LIST> + <COND (<TYPE? .DATA LIST> + <MAPR <><FUNCTION (X Y) #DECL ((X) LIST (Y) UVECTOR) + <PUT .Y 1 <1 .X>>> + .DATA <SET DATA <IUVEC10B <LENGTH .DATA>>>>)> + <OR <SET WRITN <PRINTP ,MNEMECHN .LOC .DATA>> + <ERROR "PRINTP returns false" .LOC .WRITN + <NTH ,PIO-ERROR-VECTOR <1 .WRITN>>>>) + (<TYPE? .DATA STRING> + <REPEAT ((N .LOC)) #DECL ((N) FIX) + <OR <SET WRITN <PRINTP ,MNEMECHN + .N <CHTYPE <STR-TO-FIX .DATA> WORD>>> + <ERROR "PRINTP returns false" .LOC .WRITN + <NTH ,PIO-ERROR-VECTOR <1 .WRITN>>>> + <COND (<LENGTH? .DATA 5><RETURN>)> + <SET DATA <REST .DATA 5>> + <SET N <+ .N 1>> > ) + (<ERROR "Bad type to MNEME-WRITE" .DATA>)> + .LOC> + +<DEFINE RDALLOCP (CHNP LOC "AUX" X) #DECL ((CHNP) CHANP (LOC) FIX) + <SET X <DALLOCP .CHNP .LOC>> + <COND (<GASSIGNED? PIO-TRACE> + <CRLF ,PIO-TRACE> + <PRINC !\ ,PIO-TRACE> + <PRINC .LOC ,PIO-TRACE> + <PRINC !\ ,PIO-TRACE> + <PRINC .X ,PIO-TRACE>)> + <OR .X + <ERROR "DALLOCP returns false: " .X <NTH ,PIO-ERROR-VECTOR <1 .X>> + "ERRET <> to try again"> + <DALLOCP .CHNP .LOC> <ERROR "SORRY">>> + +<DEFINE RALLOCP (CHNP AMT "AUX" X) #DECL ((CHNP) CHANP (AMT) FIX) + <SET X <ALLOCP .CHNP .AMT 3>> + <COND (<GASSIGNED? PIO-TRACE> + <PRINT .AMT ,PIO-TRACE> + <PRINC !\ ,PIO-TRACE> + <PRINC .X ,PIO-TRACE>)> + <OR .X + <ERROR "ALLOCP return false: " .X <NTH ,PIO-ERROR-VECTOR <1 .X>> + "ERRET <> to try again"> + <ALLOCP .CHNP .AMT> <ERROR "SORRY">>> + +<SETG MNEME-PAGE-OUT ,PAGE-REST> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog2/mload.udl045 b/src/mprog2/mload.udl045 new file mode 100644 index 0000000000000000000000000000000000000000..d68307b847049b29ff68f8af97e1633d2bae9b18 GIT binary patch literal 4629 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 bDUok_@v9Q+(P_=sVxj8buppT9{XhN#F;nX} literal 0 HcmV?d00001 diff --git a/src/mprog2/mneme.uerb48 b/src/mprog2/mneme.uerb48 new file mode 100644 index 00000000..aa1c6340 --- /dev/null +++ b/src/mprog2/mneme.uerb48 @@ -0,0 +1,692 @@ +<PACKAGE "MNEME"> +'<BLOAT 45000 0 2000 3000 50> +<ENTRY MNEME-INIT MNUM-EXIST STORALLOC + MNEMECHN SUPERFIND LIST-MNEME-EXIST DHT STR-TO-FIX + MNEME-LIST MNEME-NTH OWT NREVERSE FINDVAL + MNEME-EXIST MNEME-VERBOSE STR-TO-NUM UV-ZAP FINDVALS + MNEME-COMP MNEME-VERSION SHASH COLON-CHK FINDOBJ + MNEME-EXIST? MNEME-TO-MUDDLE FIND FINDS FINDUSE + MNEME-INSTANCE MNEME-PAGE-OUT HASH-ATOM FINDUSES GROUP-PAGE-OUT + MNEME-ATOM MNEME-CLOSE FINDOBJS RECLAIM-MIN NEW-USES + MNEME-TYPE? TRANSCHK TRANSFINDVAL TRANSFINDOBJ MNUM-ATOM + MNEME-LENGTH IUBKT STOR STORSIZ + MNEME-READ STORNXT STORPLUS1 IHT PARTIAL-PAGE-IN-CHK + HASH-OWT-ATOM HASH-OWT-INST> + +<SETG MNEME-VERSION 0> + +<USE "PIO"> +<SETG PIO-HANG-ON-UNMAP? T> ;"Never delete this" +<SETG PIO-PAGE-LIMIT 100> + +<GDECL (MNEME-PAGE-OUT) APPLICABLE> +<SETG GC-OB <MOBLIST GC-OB 1>> +<SETG MNEME-VERBOSE T> +<NEWTYPE MNEME-INSTANCE LIST '<LIST <LIST ANY> ANY>> +<EVALTYPE MNEME-INSTANCE LIST> +<NEWTYPE OWT WORD> + +<DEFINE MNEME-IPRINT (X) #DECL ((X) MNEME-INSTANCE) + <COND (<LENGTH? <1 .X> 1><PRINC <CHTYPE <2 .X> OWT>>) + (<PRINC <COND (<TYPE? <1 <1 .X>> OWT><1 <1 .X>>) + ("Not-printable-yet")>> + <PRINC !\: ><PRINC <2 <1 .X>>>)>> + +<PRINTTYPE MNEME-INSTANCE ,MNEME-IPRINT> + +<DEFINE OWTPRINT (O!-GC-OB "AUX" CNT TYP O2!-GC-OB) + #DECL ((O!-GC-OB O2!-GC-OB) <SPECIAL <OR OWT FIX>> (CNT TYP) FIX + (OUTCHAN) <SPECIAL ANY>) + <SET TYP <CHTYPE <GETBITS .O!-GC-OB #BITS *410300000000*> FIX>> + <COND(<==? .TYP 5> + <PRINC <CHTYPE <PUTBITS .O!-GC-OB + <BITS 3 33> + <* 7 <CHTYPE <GETBITS .O!-GC-OB <BITS 1 32>> + FIX>>> + FIX>>) + (<NOT <GASSIGNED? MNEMECHN>><ERROR "MNEME-CHANNEL-CLOSED">) + (<G? .TYP 2><ERROR "Trying to print unknown or illegal MNEME-type">) + (<0? <CHTYPE .O!-GC-OB FIX>><ERROR "Zero mneme item"> 0) + (<SET O!-GC-OB <PARTIAL-PAGE-IN-CHK .O!-GC-OB>> + <SET CNT + <CHTYPE <GETBITS <NTH ,STORPLUS1 .O!-GC-OB> #BITS *360600000000*> + FIX>> + <COND + (<0? .TYP> + <COND (<AND <TYPE? .OUTCHAN CHANNEL> + <G? <* .CNT 5> <- <13 .OUTCHAN><14 .OUTCHAN>>>> + <CRLF>)> + <REPEAT ((CNTUP 0) X) #DECL ((CNTUP) FIX (X) STRING) + <COND (<==? .CNTUP .CNT><RETURN>)(<SET CNTUP <+ .CNTUP 1>>)> + <SET X <PUT-FIX-IN-STRING <NTH <REST ,STORPLUS1 .CNTUP> .O!-GC-OB> + ,STRING5>> + <PRINC <COND (<==? <1 .X> <ASCII 26>> <REST .X>)(.X)>>>) + (<==? .TYP 1><PRINC "#MNEME ("> + <REPEAT ((CNTUP 1)) #DECL ((CNTUP) FIX) + <SET O2!-GC-OB <NTH <REST ,STORPLUS1 .CNTUP> .O!-GC-OB>> + <PRINC <CHTYPE <COND (<AND <L=? .O2!-GC-OB 262143><G? .O2!-GC-OB 0>> + <NTH ,STOR .O2!-GC-OB>) + (.O2!-GC-OB)> OWT>> + <COND (<==? .CNTUP .CNT><RETURN>)(<SET CNTUP <+ 1 .CNTUP>><PRINC !\ >)>> + <PRINC !\) >) + (<==? .TYP 2> <SET O2!-GC-OB <NTH ,STORPLUS2 .O!-GC-OB>> + <PRINC <CHTYPE <COND (<AND <L=? .O2!-GC-OB 262143.><G? .O2!-GC-OB 0>> + <NTH ,STOR .O2!-GC-OB>) + (.O2!-GC-OB)> OWT>> + <PRINC !\: > + <REPEAT ((CNTUP 1)) #DECL ((CNTUP) FIX) + <COND (<==? .CNTUP .CNT><RETURN>)(<SET CNTUP <+ .CNTUP 1>>)> + <PRINC <PUT-FIX-IN-STRING <NTH <REST ,STORPLUS1 .CNTUP> .O!-GC-OB> + ,STRING5>>> + <PRINC !\ >)>)>> + +<PRINTTYPE OWT ,OWTPRINT> + +<FLOAD "RSOWL NBIN ARC:"> + + +<SETG STRING5 " "> + +<GDECL (STOR STORPLUS1 STORPLUS2 UBKT TEMP2-UVEC TEMP4-UVEC) + <UVECTOR [REST FIX]> (IHT) <UVECTOR [1536 FIX] [REST FIX]> + (TEM-STR STRING5) STRING (DHT) <VECTOR STRING STRING FIX> + (TEMP2-UVEC-LEN TEMP4-UVEC-LEN + TEM-STR-LEN UBKTLEN STORSIZ STORNXT) FIX + (MNEMECHN) CHANP (MNEME-VERBOSE) <OR FALSE ATOM> > + + +<DEFINE MNEME-COMP (OWT AorS) + #DECL ((OWT) OWT (AorS) <OR ATOM STRING> (VALUE)<OR FALSE 'PROBABLY>) + <AND <==? <CHTYPE <GETBITS .OWT <BITS 12 24>> FIX> <HASH-ATOM .AorS 509>> + 'PROBABLY>> + + +;"Timing test for SUPERFIND and MNEME-EXIST: (VERSION 23 IN ()) + SUPERFIND of 1 arg in NEW-USES 0.0062 seconds (.0074) + SUPERFIND on disk 0.0081 (?) + SUPERFIND in cache 0.0071 (.0055) + SUPERFIND NON-EXISTing 0.0146 + MNEME-EXIST string in NEW-USES 0.0125 (.0037) + MNEME-EXIST on disk 0.0145 (.0234) + MNEME-EXIST in cache 0.0118 (.0036) + MNEME-EXIST non-existing 0.0124 (.0092) + <MNEME-INIT ...><MNEME-CLOSE> takes 0.3 (.27)" + +<DEFINE SUPERFIND (ITM1 + "OPTIONAL" (POS1 !\A) (ITM2 <>) (POS2 1) (AMOUNT 1) + (EXTRACT <>) "AUX" ITM!-GC-OB + (STOR <COND (<GASSIGNED? DHT> ,STOR) + (<ERROR "You forgot to MNEME-INIT.">)>) + (STORPLUS1 <REST .STOR>) + ) + #DECL ((ITM!-GC-OB) <SPECIAL FIX> + (ITM2 ITM1) <OR OWT ATOM FALSE FIX STRING> + (VALUE) <OR OWT LIST FALSE FIX> (POS1 POS2) <OR CHARACTER FIX> + (EXTRACT) <OR FALSE FIX CHARACTER> + (AMOUNT)<OR FIX CHARACTER> (STOR STORPLUS1)<UVECTOR [REST FIX]>) + + <OR <TYPE? .ITM1 OWT> + <SET ITM1 <MNEME-EXIST? .ITM1>> + <SET ITM1 0>> + + <SET ITM1 <CHTYPE .ITM1 FIX>> + <OR <0? .ITM1> <SET ITM!-GC-OB <PARTIAL-PAGE-IN-CHK .ITM1>>> + + <AND .ITM2 + <COND (<TYPE? .ITM2 OWT>) + (<SET ITM2 <MNEME-EXIST? .ITM2>>) + (<SET ITM2 <SET ITM1 0>>)> + <SET ITM2 <CHTYPE .ITM2 FIX>>> + + <AND + <COND (<0? .ITM1> #FALSE (NON-EXISTENT-ITEM)) (T)> + <REPEAT ((FLAG 0) (ANS <>) + (CNTSAV <CHTYPE <GETBITS <NTH .STORPLUS1 .ITM!-GC-OB> <BITS 15>> FIX>) + (OFFSET <REST .STORPLUS1 + <CHTYPE <GETBITS <NTH .STORPLUS1 .ITM!-GC-OB> <BITS 6 30>> + FIX>>) + (USES '![]) USE!-GC-OB XX DCNT) + + #DECL ((OFFSET) <UVECTOR FIX> (FLAG CNTSAV DCNT) FIX + (ITM!-GC-OB USE!-GC-OB) <SPECIAL FIX> + (VALUE ANS) <OR LIST FALSE FIX OWT> + (USES) <UVECTOR [REST FIX]> (XX) <OR LIST FALSE> ) + + <COND (<EMPTY? .USES> + <COND + (<AND <0? .FLAG><SET XX <GETPROP .ITM1 NEW-USES>>> ;"Do new uses" + <SET FLAG 1> + <SET USES <UVECTOR !.XX>>) + (<L=? .FLAG 1> + <SET FLAG 2> ;"Do local uses" + <AND <0? .CNTSAV><RETURN .ANS>> + <SET USES <SUBSTRUC <REST .OFFSET .ITM!-GC-OB> 0 .CNTSAV + <IUVEC4 .CNTSAV>>>) + (<==? .FLAG 2><RETURN .ANS>)> + + <AND <EMPTY? .USES><AGAIN>>)> + + <SET USE!-GC-OB <1 .USES>> + <SET USES <REST .USES>> + + <AND + ;"Beginning of first and clause--purpose= get next use" + <COND (<==? <CHTYPE <GETBITS .USE!-GC-OB <BITS 3 33>> FIX> 7> ;EXTENSION + <SET USE!-GC-OB <PARTIAL-PAGE-IN-CHK .USE!-GC-OB>> + <SET CNTSAV <CHTYPE <GETBITS <NTH .STORPLUS1 .USE!-GC-OB> + <BITS 15>> FIX>> + <SET USES <COND (<0? .CNTSAV>![]) + (<SUBSTRUC <REST .STORPLUS1 .USE!-GC-OB> 0 .CNTSAV + <IUVEC4 .CNTSAV>>)>> + <AGAIN>) + (<AND <NOT .EXTRACT><NOT .ITM2><==? .POS1 !\A>>) + (<SET USE!-GC-OB <PARTIAL-PAGE-IN-CHK .USE!-GC-OB>> + <SET DCNT <CHTYPE <GETBITS <NTH .STORPLUS1 .USE!-GC-OB> + <BITS 6 30>> FIX>>)> + + ;"Beginning of second and-clause" + <COND (<==? .AMOUNT !\N> + <SET ANS <COND (.ANS <+ .ANS 1>)(1)>> + <L=? <COND (<GETPROP .ITM1 .ITM2>) + (<PUTPROP .ITM1 .ITM2 0> 0)> + .ANS>) + (<==? .AMOUNT !\R> + <RETURN <PUTPROP .ITM1 .ITM2>>) + (T)> + + ;"Beginning of third moby and clause--purpose= to check position" + <OR + <==? .POS1 !\A> + <COND (<TYPE? .POS1 FIX> + <==? .ITM1 <NTH .STORPLUS1 <+ .USE!-GC-OB .POS1>>>) + (<==? .POS1 !\L> + <==? .ITM1 <NTH .STORPLUS1 <+ .USE!-GC-OB .DCNT>>>)>> + + ;"Beginning of fourth clause--purpose to chk ITM2's position" + <COND + (.ITM2 + <COND + (<TYPE? .POS2 FIX> + <==? .ITM2 <NTH .STORPLUS1 <+ .USE!-GC-OB .POS2>>>) + (<==? .POS2 !\A> + <REPEAT ((CNT .DCNT)) + #DECL ((CNT) FIX) + <COND (<0? .CNT> <RETURN <>>) + (<==? .ITM2 <NTH .STORPLUS1 <+ .USE!-GC-OB .CNT>>> + <RETURN T>)> + <SET CNT <- .CNT 1>>>) + (<==? .POS2 !\L> + <==? .ITM2 <NTH .STORPLUS1 <+ .USE!-GC-OB .DCNT>>>)>) + (T)> + + ;"Beginning of last AND clause--gets amount" + <COND + (<==? .AMOUNT 1> + <RETURN <COND (.EXTRACT <INT-MNEME-NTH .USE!-GC-OB .EXTRACT .DCNT>) + (<L=? .USE!-GC-OB *777777*> + <CHTYPE <NTH .STOR .USE!-GC-OB> OWT>) + (<CHTYPE .USE!-GC-OB OWT>)>>) + (<TYPE? .AMOUNT FIX> + <SET ANS (<COND (.EXTRACT <INT-MNEME-NTH .USE!-GC-OB .EXTRACT .DCNT>) + (<L=? .USE!-GC-OB *777777*> + <CHTYPE <NTH .STOR .USE!-GC-OB> OWT>) + (<CHTYPE .USE!-GC-OB OWT>)> !.ANS)> + <COND (<G=? <LENGTH .ANS> .AMOUNT> <RETURN .ANS>) + (<SET ANS <CHTYPE .ANS FALSE>>)>) + (<MEMQ .AMOUNT '![ !\A !\S]> + <SET ANS (<COND (.EXTRACT <INT-MNEME-NTH .USE!-GC-OB .EXTRACT .DCNT>) + (<L=? .USE!-GC-OB *777777*> + <CHTYPE <NTH .STOR .USE!-GC-OB> OWT>) + (<CHTYPE .USE!-GC-OB OWT>)> !.ANS)>) + (<==? .AMOUNT !\N> + <COND (<G? .ANS <GETPROP .ITM1 .ITM2>> + <PUTPROP .ITM1 .ITM2 .ANS> + <RETURN <COND (.EXTRACT <INT-MNEME-NTH .USE!-GC-OB .EXTRACT .DCNT>) + (<L=? .USE!-GC-OB *777777*> + <CHTYPE <NTH .STOR .USE!-GC-OB> OWT>) + (<CHTYPE .USE!-GC-OB OWT>)> >)>) + (<==? .AMOUNT !\C> <SET ANS <COND (.ANS <+ .ANS 1>) (1)>>) + (<ERROR "Other amount options not implemented yet">)>>>> + > + + + + +<DEFINE FINDVAL (OBJ REL) #DECL ((OBJ REL)<OR OWT ATOM STRING>) + <SUPERFIND .OBJ 2 .REL 1>> +<DEFINE FINDVALS(OBJ REL) #DECL ((OBJ REL)<OR OWT ATOM STRING>) + <SUPERFIND .OBJ 2 .REL 1 !\A>> +<DEFINE FINDOBJ (OBJ REL) #DECL ((OBJ REL)<OR OWT ATOM STRING>) + <SUPERFIND .OBJ 3 .REL 1>> +<DEFINE FINDOBJS(OBJ REL) #DECL ((OBJ REL)<OR OWT ATOM STRING>) + <SUPERFIND .OBJ 3 .REL 1 !\A>> +<DEFINE FIND (OBJ REL) #DECL ((OBJ REL)<OR OWT ATOM STRING>) + <SUPERFIND .OBJ !\A .REL 1>> +<DEFINE FINDS (OBJ REL) #DECL ((OBJ REL)<OR OWT ATOM STRING>) + <SUPERFIND .OBJ !\A .REL 1 !\A>> +<DEFINE FINDUSE (OBJ) #DECL ((OBJ)<OR OWT ATOM STRING>) <SUPERFIND .OBJ>> +<DEFINE FINDUSES(OBJ) #DECL ((OBJ)<OR OWT ATOM STRING>) <SUPERFIND .OBJ !\A <> 1 !\A>> + + +<DEFINE MNEME-TYPE? (MNEME "TUPLE" TYPES) + #DECL ((MNEME) OWT (VALUE) <OR ATOM FALSE>) + <COND (<EMPTY? .TYPES><NTH '![MNEME-ATOM MNEME-LIST MNEME-INSTANCE!] + <+ 1 <CHTYPE <GETBITS .MNEME <BITS 3 33>> FIX>>>) + (<MEMQ <MNEME-TYPE? .MNEME> .TYPES> T)>> + + +<DEFINE MNEME-LENGTH (OWT "AUX" (OTYP <CHTYPE <GETBITS .OWT <BITS 3 33>> FIX>)) + #DECL ((OWT) OWT (VALUE OTYP) FIX) + <COND (<==? .OTYP 1> + <CHTYPE <GETBITS <NTH ,STORPLUS1 <PARTIAL-PAGE-IN-CHK .OWT>> + <BITS 6 30>> FIX>) + (<==? .OTYP 2> 1) + (<ERROR "Illegal mneme-type to MNEME-LENGTH">)>> + +<DEFINE INT-MNEME-NTH (STORPTR N SIZ) + #DECL ((STORPTR SIZ) FIX (N) <OR FIX CHARACTER> (VALUE)<OR OWT FIX>) + <COND (<==? .N !\L><SET N .SIZ>)> + <COND (<OR <G? .N .SIZ><L=? .N 0>> + <ERROR "MNEME-NTH out of bounds--bad arg to SUPERFIND">) + (<SET STORPTR <NTH ,STORPLUS1 <+ .N .STORPTR>>> + <COND (<G? .STORPTR *777777*> <CHTYPE .STORPTR OWT>) + (<==? <CHTYPE <GETBITS .STORPTR <BITS 3 33>> FIX> 5> + <CHTYPE <PUTBITS .STORPTR <BITS 3 33> + <* 7 <CHTYPE <GETBITS .STORPTR <BITS 1 32>> FIX>>> + FIX>) + (<ERROR "Funny item extracted">) >)>> + +<DEFINE MNEME-NTH (MNEME "OPTIONAL" (N 1) "AUX" IN!-GC-OB) + #DECL ((MNEME) OWT (N) FIX (IN!-GC-OB) <SPECIAL FIX> (VALUE) <OR OWT FIX>) + <COND (<MEMQ <GETBITS .MNEME <BITS 3 33>> '![#WORD 1 #WORD 2]> + <SET IN!-GC-OB <PARTIAL-PAGE-IN-CHK .MNEME>> + <COND (<OR <G? .N<CHTYPE <GETBITS <NTH ,STORPLUS1 .IN!-GC-OB> <BITS 6 30>> FIX>> + <L=? .N 0>> + <ERROR "MNEME-NTH out of bounds">)> + <SET IN!-GC-OB <NTH ,STORPLUS1 <+ .N .IN!-GC-OB>>> + <COND (<G? .IN!-GC-OB *777777*> <CHTYPE .IN!-GC-OB OWT>) + (<==? <CHTYPE <GETBITS .IN!-GC-OB <BITS 3 33>> FIX> 5> + <CHTYPE <PUTBITS .IN!-GC-OB <BITS 3 33> + <* 7 <CHTYPE <GETBITS .IN!-GC-OB <BITS 1 32>>FIX>>> + FIX>) + (<ERROR "Funny item extracted">)>) + (<ERROR "Wrong type to MNEME-NTH">)>> + + + +<DEFINE PARTIAL-PAGE-IN (OWT "AUX" UV ITMSIZ2 ITMSIZ USIZ IHTLOC) + #DECL ((ITMSIZ VALUE USIZ IHTLOC ITMSIZ2) FIX (OWT) <OR OWT FIX> + (UV) <OR FIX <UVECTOR FIX>>) + <SET UV <MNEME-READ 1 .OWT>> + <SET ITMSIZ <CHTYPE <GETBITS .UV <BITS 6 30>> FIX>> + <SET USIZ <CHTYPE <GETBITS .UV <BITS 15.>> FIX>> + <SET UV <MNEME-READ <IUVEC2 <+ .ITMSIZ .USIZ 1>> .OWT>> + <SET IHTLOC <CHTYPE <GETBITS .OWT <BITS 12 24>> FIX>> + <AND <G? .IHTLOC 1536><SET IHTLOC <+ 1024 <MOD .OWT 509>>>> + <SET ITMSIZ2 <- .ITMSIZ 1>> + <COND (<G? <+ .ITMSIZ .USIZ 4><- ,STORSIZ ,STORNXT>> + <SET UV ![!.UV!]> ;"COPY DUE TO IUVEC2" + <GROUP-PAGE-OUT>)> + <NTH <PUT ,IHT .IHTLOC <STORALLOC .OWT <PUTBITS <1 .UV> <BITS 15 15> + <NTH ,IHT .IHTLOC>> + <REST .UV>>> .IHTLOC> > + + +<SETG TEMP4-UVEC <IUVECTOR <SETG TEMP4-UVEC-LEN 10> 0>> + +<DEFINE IUVEC4 (LEN) #DECL ((LEN) FIX (VALUE) <UVECTOR FIX>) ;"Used by superfind" + <COND (<G? .LEN ,TEMP4-UVEC-LEN> + <SETG TEMP4-UVEC <IUVECTOR <SETG TEMP4-UVEC-LEN <+ .LEN 32>> 0>>)> + <REST ,TEMP4-UVEC <- ,TEMP4-UVEC-LEN .LEN>>> + +<SETG TEMP2-UVEC <IUVECTOR <SETG TEMP2-UVEC-LEN 10> 0>> + +<DEFINE IUVEC2 (LEN) #DECL ((LEN) FIX (VALUE) <UVECTOR FIX>) + <COND (<G? .LEN ,TEMP2-UVEC-LEN> + <SETG TEMP2-UVEC <IUVECTOR <SETG TEMP2-UVEC-LEN <+ .LEN 32>> 0>>)> + <REST ,TEMP2-UVEC <- ,TEMP2-UVEC-LEN .LEN>>> + + +<DEFINE STORALLOC ("TUPLE" TUP "AUX" (LOC ,STORNXT) + (WHERE <REST ,STOR <- .LOC 1>>)(CNT 0)) + #DECL ((LOC CNT) FIX (WHERE)<UVECTOR [REST FIX]> + ) + <MAPF <><FUNCTION (ITM) + <COND + (<STRUCTURED? .ITM> + <COND (<TYPE? .ITM STRING> + <OR <==? .ITM <TOP .ITM>><ERROR STORALLOC>> + <REPEAT ()<COND (<EMPTY? .WHERE><STORGRO>)> + <PUT .WHERE 1 <STR-TO-FIX .ITM>> + <SET CNT <+ .CNT 1>> + <SET WHERE <REST .WHERE>> + <AND <LENGTH? .ITM 5><RETURN>> + <SET ITM <REST .ITM 5>>>) + (<MAPF <><FUNCTION (Z) #DECL ((Z)<PRIMTYPE WORD>) + <AND <EMPTY? .WHERE><STORGRO>> + <PUT .WHERE 1 <CHTYPE .Z FIX>> + <SET CNT <+ .CNT 1>> + <SET WHERE <REST .WHERE>>> + .ITM>)>) + (<SET CNT <+ .CNT 1>> <AND <EMPTY? .WHERE><STORGRO>> + <SET WHERE <REST <PUT .WHERE 1 <CHTYPE .ITM FIX>>>>)>> + .TUP> + <SETG STORNXT <+ .LOC .CNT>> + .LOC> + +<DEFINE STORGRO () + <AND ,MNEME-VERBOSE <PRINT "Increasing STOR">> + <GROW ,STOR 256 0> + <SETG STORSIZ <LENGTH ,STOR>>> + +<DEFINE MNEME-CLOSE ("OPTIONAL" (FLUSH <>)) #DECL ((FLUSH) <OR ATOM FALSE>) + <COND(<GASSIGNED? DHT> + <OR <=? <1 ,DHT> "READ"> <PAGE-OUT-EVERYTHING>> + <GUNASSIGN DHT> + <CLOSEP ,MNEMECHN> + '"<FORCE-PAGES> ;Useful only for pmap" + <GUNASSIGN MNEMECHN> + <AND .FLUSH <SETG STOR <SETG STORPLUS1 <SETG STORPLUS2 ![]>>>> + "Done") + (T #FALSE ("File already closed?"))>> + +<DEFINE PAGE-OUT-EVERYTHING ("AUX" (INT-LEVEL1 <INT-LEVEL 4000>) + (RESET-LIST ()) LVALA "ACT" F) + #DECL ((LVALA INT-LEVEL1) FIX (RESET-LIST) <LIST [REST LOCATIVE]> + (F)<OR ACTIVATION FRAME>) + + <REPEAT () + <COND (<==? <FUNCT .F> TOPLEVEL><RETURN T>)> + <MAPF <><FUNCTION (ATM) #DECL ((ATM) ATOM) + <COND (<AND <ASSIGNED? .ATM .F> + <TYPE? <LVAL .ATM .F> FIX> + <SET LVALA <LVAL .ATM .F>> + <COND (<G? .LVALA 0> <L=? .LVALA ,STORSIZ>) + (<==? <CHTYPE <GETBITS .LVALA <BITS 3 33>> FIX> 6> + <SET LVALA <CHTYPE <GETBITS .LVALA <BITS 18>> FIX>>)>> + <SET .ATM <NTH ,STOR .LVALA> .F> + <SET RESET-LIST (<LLOC .ATM .F> !.RESET-LIST)>)> > + <1 ,GC-OB>> + <SET F <FRAME .F>> > + + <UV-ZAP ,IHT> + <UV-ZAP ,STOR> + <SETG STORNXT 1> + <AND <GASSIGNED? MNEME-PAGE-OUT> <APPLY ,MNEME-PAGE-OUT>> + + <MAPF <><FUNCTION (ATM) #DECL ((ATM) LOCATIVE) + <SETLOC .ATM <COND (<==? <CHTYPE <ANDB <IN .ATM> *700000000000*> FIX> + *700000000000*> + <PARTIAL-PAGE-IN <IN .ATM>>) + (<PARTIAL-PAGE-IN-CHK <IN .ATM>>)>>> + .RESET-LIST> + + <INT-LEVEL .INT-LEVEL1> > + +<DEFINE GROUP-PAGE-OUT ()<AND ,MNEME-VERBOSE <PRINC "MNEME-GARBAGE-COLLECTION"><TERPRI>> + <PAGE-OUT-EVERYTHING> + <AND ,MNEME-VERBOSE <PRINC "RECLAIMED-EVERYTHING"><TERPRI>> > + + +<DEFINE FIRSTATOMN (X) #DECL ((X) ANY (VALUE) FIX) + <COND (<TYPE? .X ATOM STRING> <HASH-ATOM .X 92681>) + (<TYPE? .X FIX> <+ 1 <MOD <* 4 <ABS .X>> 92681>>) + (<TYPE? .X OWT> + <COND (<0? <CHTYPE <GETBITS .X <BITS 3 33>> FIX>> + <HASH-OWT-ATOM .X 92681>) + (<==? 2 <CHTYPE <GETBITS .X <BITS 3 33>> FIX>> + <HASH-OWT-INST .X 92681 <MNEME-NTH .X>>) + (<SHASH <MNEME-TO-MUDDLE .X>>)>) + (<TYPE? .X LIST><SHASH .X>) + (<TYPE? .X MNEME-INSTANCE><3 .X>) + (<ERROR .X "Bad type to hash">)>> + + +<DEFINE UVECIFY (ATM N) #DECL ((ATM) ATOM (N) FIX (VALUE) <UVECTOR FIX>) + <COND (<AND <GASSIGNED? .ATM><==? <LENGTH ,.ATM> .N>> + <UV-ZAP ,.ATM> ,.ATM) + (<SETG .ATM <IUVECTOR .N 0>>)>> + +<DEFINE MNEME-INIT ("OPTIONAL" (MODE "READ") + (FILE-SPEC "DICT;ERB MNEME") + (PAGE-SIZE 4096) (MAP-SPACE 22) + "AUX" TEMP) + #DECL ((FILE-SPEC MODE) STRING (PAGE-SIZE) FIX (MAP-SPACE) <OR FIX FALSE>) + <AND <MEMBER .FILE-SPEC '["READ" "PRINT"]> + <SET TEMP .FILE-SPEC> + <SET FILE-SPEC .MODE> + <SET MODE .TEMP>> + <COND (<G? .PAGE-SIZE 32767><ERROR "Paging space > 32767">)> + <AND <GASSIGNED? DHT><MNEME-CLOSE> ,MNEME-VERBOSE <PRINT "Closing old channel">> + <UVECIFY IHT 1536> + <SETG STORSIZ .PAGE-SIZE> + <SETG STORNXT 1> + <SETG STORPLUS2 <REST <SETG STORPLUS1 <REST <UVECIFY STOR .PAGE-SIZE>>>>> + <SET TEMP <OPENP .MODE .FILE-SPEC <OR .MAP-SPACE 30> <NOT .MAP-SPACE>>> + <COND (<NOT .TEMP><ERROR .TEMP>) + (<0? <LENGTHP <SETG MNEMECHN .TEMP>>> ;"New file?" + <OR <SET TEMP <PRINTP ,MNEMECHN 2047 #WORD 0>><ERROR .TEMP>>)> + <AND <N=? .MODE "READ"> + <NOT <0? <MNEME-READ 1 1>>> + <CLOSEP ,MNEMECHN> + <GUNASSIGN MNEMECHN> + <ERROR "File locked in read-only mode">> + <SETG DHT [.MODE <NAMEP ,MNEMECHN> .PAGE-SIZE .MAP-SPACE]>> + + + +'<SETG UV0 ![0]> +'<GDECL (UV0) <UVECTOR FIX>> + + +<DEFINE MNEME-READ (UVEC LOC "AUX" ANS) + #DECL ((UVEC ANS) <OR <UVECTOR FIX> FIX FALSE WORD> (LOC) <OR FIX OWT WORD> + (VALUE) <OR UVECTOR FIX>) + <SET LOC <CHTYPE <ANDB *000077777777* .LOC> FIX>> + <COND (<NOT <TYPE? .UVEC UVECTOR>> <SET ANS <READP ,MNEMECHN .LOC <>>> + <COND (.ANS <CHTYPE .ANS FIX>)(<ERROR "READP returns " .ANS>)>) + (ELSE <UV-ZAP .UVEC> + <SET ANS <READP ,MNEMECHN .LOC .UVEC>> + <COND (.ANS)(<ERROR "READP returns " .ANS>)>)>> + + +<DEFINE TRANSFINDVAL (X Y Z) #DECL ((Y Z) OWT (VALUE X) <OR FALSE FIX OWT>) + <COND (<SUPERFIND .X 2 .Y 1 1 3>) + (<MAPF <><FUNCTION (UP) #DECL ((UP) <OR OWT FIX>) + <AND <SET X <TRANSFINDVAL .UP .Y .Z>> <MAPLEAVE .X>>> + <OR <SUPERFIND .X 3 .Z 1 !\A 2> ()>>)>> + + +<DEFINE TRANSFINDOBJ (X Y Z) #DECL ((Y Z) OWT (VALUE X) <OR FALSE FIX OWT>) + <COND (<SUPERFIND .X 3 .Y 1 1 2>) + (<MAPF <><FUNCTION (UP) #DECL ((UP) <OR OWT FIX>) + <AND <SET X <TRANSFINDOBJ .UP .Y .Z>> <MAPLEAVE .X>>> + <OR <SUPERFIND .X 3 .Z 1 !\A 2> ()>>)>> + +<SETG TCHKLST (() () ())> +<GDECL (TCHKLST) <LIST [3 ANY]>> + +<DEFINE TRANSCHK (REL OBJ VAL) #DECL ((REL OBJ VAL) OWT (VALUE) <OR FALSE FIX OWT 'T>) + <COND (<==? .OBJ .VAL>) + (<LIST-MNEME-EXIST <PUT <PUT <PUT ,TCHKLST 3 .VAL> 2 .OBJ> 1 .REL>>) + (<MAPF <><FUNCTION (UP) #DECL ((UP) <OR OWT FIX>) + <AND <TRANSCHK .REL .OBJ .UP> + <MAPLEAVE T>>> + <OR <SUPERFIND .VAL 3 .REL 1 !\A 2> ()>>)>> + + +<DEFINE MNEME-TO-MUDDLE (MNEME "OPTIONAL" ANS-LIST + "AUX" (OTYP <CHTYPE <GETBITS .MNEME <BITS 3 33>> FIX>)) + #DECL ((MNEME) OWT (OTYP) FIX + (VALUE ANS-LIST) <OR STRING FIX <LIST [REST <OR FIX OWT>]>>) + <COND (<==? .OTYP 1> + <REPEAT ((LEN <MNEME-LENGTH .MNEME>)(ANS<COND (<ASSIGNED? ANS-LIST> .ANS-LIST) + (<ILIST .LEN>)>)) + #DECL ((ANS VALUE) <LIST [REST <PRIMTYPE WORD>]> (LEN) FIX) + <COND (<0? .LEN><RETURN .ANS>)> + <PUT .ANS .LEN <MNEME-NTH .MNEME .LEN>> + <SET LEN <- .LEN 1>>>) + (<==? .OTYP 0> + <REPEAT ((IN!-GC-OB <PARTIAL-PAGE-IN-CHK .MNEME>) + (CNTSAV <CHTYPE <GETBITS <NTH ,STORPLUS1 .IN!-GC-OB> + <BITS 6 30>> FIX>) (CNT .CNTSAV) + (ANS <ISTRI .CNTSAV>) (STR <REST .ANS <- <LENGTH .ANS> 5>>)) + #DECL ((IN!-GC-OB) <SPECIAL FIX> (CNTSAV CNT) FIX + (VALUE ANS STR) <OR FIX STRING>) + <AND <0? .CNT> <RETURN <COND (<==? <ASCII 26> <1 .ANS>> + <PARSE <REST .ANS>>) + (.ANS)>>> + <AND <==? .CNT .CNTSAV> + <SET ANS <PUT-FIX-IN-STRING <NTH <REST ,STORPLUS1 .CNT> .IN!-GC-OB> + .ANS>>> + <PUT-FIX-IN-STRING <NTH <REST ,STORPLUS1 .CNT> .IN!-GC-OB> .STR> + <SET CNT <- .CNT 1>> + <SET STR <BACK .STR 5>>>) + (<==? .OTYP 2> + <MNEME-TO-MUDDLE <MNEME-NTH .MNEME>>) + (<ERROR "Illegal type to MNEME-TO-MUDDLE">)>> + +<SETG TEM-STR ""><SETG TEM-STR-LEN 0> + +<DEFINE ISTRI (LEN "AUX" (ST ,TEM-STR)) #DECL ((LEN) FIX (ST VALUE) STRING) + <SET LEN <* .LEN 5>> + <COND (<G? .LEN ,TEM-STR-LEN> + <SET ST <SETG TEM-STR <ISTRING <SETG TEM-STR-LEN <+ .LEN 25>> >>>)> + <PUT-FIX-IN-STRING 0 <REST .ST <- ,TEM-STR-LEN 5>>> + <REST .ST <- ,TEM-STR-LEN .LEN>>> + +<SETG NSTR <PUT "Z*000000000000*" 1 <ASCII 26.>>> +<GDECL (NSTR) STRING> + +<DEFINE MNUM-ATOM (N "OPTIONAL" (FLAG <>) "AUX" (L 33)) + #DECL ((L N) FIX (VALUE) <OR STRING ATOM> (FLAG)<OR FALSE 'T>) + <MAPR <><FUNCTION (S) #DECL ((S) STRING) + <PUT .S 1 <ASCII <+ <ASCII !\0><CHTYPE <GETBITS .N<BITS 3 .L>> FIX>>>> + <AND <L? <SET L <- .L 3>> 0> <MAPLEAVE>>> + <REST ,NSTR 2>> + <COND (.FLAG ,NSTR) + (<LOOKUP ,NSTR <GETPROP INITIAL OBLIST>>) + (<INSERT ,NSTR <GETPROP INITIAL OBLIST>>)>> + +<DEFINE MNUM-EXIST (N) #DECL ((N) FIX (VALUE) <OR FALSE OWT>) + <MNEME-EXIST <MNUM-ATOM .N 'T>>> + +<DEFINE MNEME-EXIST (ATM + "AUX" (INTLOC <HASH-ATOM .ATM 509>) + (UVP <COND (<TYPE? .ATM ATOM><SPNAME .ATM>) + (.ATM)>) + (P <COND (<GASSIGNED? DHT><NTH ,IHT .INTLOC>) + (<ERROR "You forgot to MNEME-INIT.">)>) + (UVPLEN </ <+ 4 <LENGTH .UVP>> 5>)) + #DECL ((ATM) <OR ATOM STRING> (INTLOC P UVPLEN) FIX (UVP) STRING + (VALUE)<OR FALSE OWT>) + <COND + (<REPEAT () #DECL ((VALUE) <OR FALSE OWT>) + <COND (<0? .P><RETURN <>>) + (<AND <STR-UV-COMP .UVP <REST ,STORPLUS1 .P>> + <==? .UVPLEN + <CHTYPE <GETBITS <NTH ,STORPLUS1 .P> <BITS 6 30>> FIX>>> + <RETURN <CHTYPE <NTH ,STOR .P> OWT>>)> + <SET P <CHTYPE <GETBITS <NTH ,STORPLUS1 .P> <BITS 15 15>> FIX>> > ) + (<PROG ((HLOC <+ 8 <HASH-ATOM .ATM 2039>>) (B-LOC <MNEME-READ 1 .HLOC>) + (NITMS <CHTYPE <GETBITS .B-LOC <BITS 12 24>> FIX>) + DATA) + #DECL ((HLOC B-LOC NITMS) FIX (DATA) <UVECTOR [REST FIX]> + (VALUE) <OR FALSE OWT>) + <COND (<0? .NITMS><RETURN <>>)> + <RETURN + <COND (<MAPF <> ;"LOOK ON DSK FOR ITEM" + <FUNCTION (ENTRY1) #DECL ((ENTRY1) FIX (VALUE)<OR FALSE OWT>) + <COND (<==? <CHTYPE <GETBITS .ENTRY1 <BITS 12 24>> FIX> + .INTLOC> + <SET DATA <MNEME-READ <IUVEC <+ 1 .UVPLEN>> + .ENTRY1>> + <AND <STR-UV-COMP .UVP <REST .DATA>> + <MAPLEAVE <CHTYPE .ENTRY1 OWT>>>)>> + <MNEME-READ <IUBKT .NITMS> .B-LOC>>) + (ELSE <>)>>>)> + > + + + +<DEFINE LIST-MNEME-EXIST (LST "AUX" (HASH <SHASH .LST>) + (IHTLOC <+ 513 <MOD .HASH 509>>) + (P <COND (<GASSIGNED? DHT><NTH ,IHT .IHTLOC>) + (<ERROR "You forgot to MNEME-INIT.">)>)) + #DECL ((LST) LIST (P IHTLOC) FIX (VALUE)<OR OWT FIX FALSE>) + <COND (<REPEAT () #DECL ((VALUE)<OR OWT FIX FALSE>) + <COND (<0? .P><RETURN <>>) + (<COMPARE-MNEME .P .LST> + <RETURN <CHTYPE <NTH ,STOR .P> OWT>>) + (<SET P <CHTYPE<GETBITS <NTH ,STORPLUS1 .P> <BITS 15 15>>FIX>>)>>) + (<MAPF <><FUNCTION (OWT) #DECL ((OWT) FIX (VALUE) <OR 'T FALSE>) + <COND (<AND <==? <CHTYPE <GETBITS .OWT <BITS 12 24>> FIX> + .IHTLOC> + <COMPARE-MNEME <PARTIAL-PAGE-IN-CHK .OWT> .LST>> + <MAPLEAVE <CHTYPE .OWT OWT>>)>> + <COND (<0? <SET HASH <MNEME-READ 1 <+ 8 <MOD .HASH 2039>>>>> ![]) + (<SET P <CHTYPE <GETBITS .HASH <BITS 12 24>> FIX>> + <MNEME-READ <IUBKT .P> .HASH>)>>)>> + +<DEFINE COMPARE-MNEME (STOR LST) #DECL ((STOR) FIX (LST) LIST (VALUE)<OR 'T FALSE>) + <MAPF<><FUNCTION (O L) #DECL ((O) FIX (L)<OR OWT ATOM LIST FIX STRING FALSE> + (VALUE) <OR 'T FALSE>) + <OR <COND (<TYPE? .L OWT><==? <CHTYPE .L FIX> .O>) + (<AND <TYPE? .L ATOM STRING><SET L <MNEME-EXIST .L>>> + <==? <CHTYPE .L FIX> .O>) + (<AND <TYPE? .L LIST><SET L <LIST-MNEME-EXIST .L>>> + <==? <CHTYPE .L FIX> .O>) + (<TYPE? .L FIX> + <OR <==? .L <CHTYPE <PUTBITS .O <BITS 3 33> + <* 7 <CHTYPE <GETBITS .O <BITS 1 32>> + FIX>>> FIX>> + <==? <MNUM-EXIST .L><CHTYPE .O OWT>>>)> + <MAPLEAVE <>> >> + <REST ,STORPLUS1 .STOR> + .LST>> + +<DEFINE MNEME-EXIST? (ANY1) #DECL ((ANY1)<OR ATOM LIST STRING FIX> + (VALUE)<OR OWT FIX FALSE>) + <COND (<TYPE? .ANY1 LIST><LIST-MNEME-EXIST .ANY1>) + (<TYPE? .ANY1 FIX><MNUM-EXIST .ANY1>) + (<MNEME-EXIST .ANY1>)>> + +<SETG UBKT <IUVECTOR <SETG UBKTLEN 32> 0>> +<DEFINE IUBKT (LEN) #DECL ((LEN) FIX (VALUE) <UVECTOR FIX>) + <COND (<G? .LEN ,UBKTLEN> + <SETG UBKT <IUVECTOR <SETG UBKTLEN <+ .LEN 32>> 0>>)> + <REST ,UBKT <- ,UBKTLEN .LEN>>> + +<GDECL (TEMP-UVEC-LEN) FIX (TEMP-UVEC) UVECTOR> + +<SETG TEMP-UVEC <IUVECTOR <SETG TEMP-UVEC-LEN 10> 0>> + +<DEFINE IUVEC (LEN) #DECL ((LEN) FIX (VALUE) <UVECTOR FIX>) + <COND (<G? .LEN ,TEMP-UVEC-LEN> + <SETG TEMP-UVEC <IUVECTOR <SETG TEMP-UVEC-LEN <+ .LEN 32>> 0>>)> + <REST ,TEMP-UVEC <- ,TEMP-UVEC-LEN .LEN>>> + +<SETG STUVCO [<ISTRING 40 !\ ><ISTRING 36 !\ ><ISTRING 37 !\ ><ISTRING 38 !\ > + <ISTRING 39 !\ >]> +<MAPR <><FUNCTION (X)<PUT .X 1 <REST <1 .X> <LENGTH <1 .X>>>>> ,STUVCO> +<GDECL (STUVCO) <VECTOR [5 STRING]>> + +<DEFINE STR-UV-COMP (STR UV "OPTIONAL" (FLAG <>)) + #DECL ((VALUE)<OR 'T FALSE> (STR) STRING (UV) UVECTOR (FLAG) <OR ATOM FALSE>) + <COND(<EMPTY? .STR><>) + (<OR <==? .STR <TOP .STR>> .FLAG> + <REPEAT () + <COND (<EMPTY? .UV><RETURN T>) + (<==? <STR-TO-FIX .STR> <1 .UV>> + <COND (<LENGTH? .STR 5><RETURN T>)>) + (<RETURN <>>)> + <SET UV <REST .UV>> + <SET STR <REST .STR 5>>>) + (<STR-UV-COMP <SUBSTRUC .STR 0 <LENGTH .STR> + <BACK <NTH ,STUVCO <+ <MOD <LENGTH .STR> 5> 1>> + <LENGTH .STR>>> + .UV T>)>> + + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog2/monitr.56 b/src/mprog2/monitr.56 new file mode 100644 index 00000000..cc9af257 --- /dev/null +++ b/src/mprog2/monitr.56 @@ -0,0 +1,271 @@ + +<PACKAGE "MONITOR"> + +<ENTRY MONITOR + KILL-MONITOR + CLEAN-MONITORS + NEWVAL + OLDVAL + KILL-ALL-MONITORS + MONSPEC + MONOBJ + MONITORS> + +<NEWTYPE KMODE STRING> + +<NEWTYPE MONSPEC VECTOR '<<PRIMTYPE VECTOR> ANY LIST ANY ANY>> + +<SETG MSTEST 1> + +<SETG MSTODO 2> + +<SETG MSOBJ 3> + +<SETG MSTYP 4> + +<MANIFEST MSTEST MSTODO MSOBJ MSTYP> + +<NEWTYPE MONITOR VECTOR '<<PRIMTYPE VECTOR> LOCATIVE ATOM MONSPEC>> + +<SETG MONLOC 1> + +<SETG MONTYP 2> + +<SETG MONSPC 3> + +<OR <GASSIGNED? SPARE-MONS> <SETG SPARE-MONS ()>> + +<OR <GASSIGNED? SPARE-MSPCS> <SETG SPARE-MSPCS ()>> + +<OR <GASSIGNED? MONITORS> <SETG MONITORS ()>> + +<GDECL (SPARE-MONS MONITORS) + <LIST [REST MONITOR]> + (SPARE-MSPCS) + <LIST [REST MONSPEC]>> + +<MANIFEST MONLOC MONTYP MONSPC> + +<DEFINE MONPRINT (MON "AUX" (SPC <MONSPC .MON>) (OUTCHAN .OUTCHAN)) + #DECL ((MON) MONITOR (SPC) MONSPEC (OUTCHAN) CHANNEL) + <PRINC "#MONITOR ["> + <PRINC <SPNAME <MONTYP .MON>>> + <PRINC " of "> + <COND (<LEGAL? <MONLOC .MON>> <&1 <MSOBJ .SPC>>) (<PRINC "ILLEGAL">)> + <PRINC "]">> + +<PRINTTYPE MONITOR ,MONPRINT> + +<DEFINE MONITOR (MODE OBJ POS "OPTIONAL" ('TEST T) "ARGS" PO "AUX" LOC) + #DECL ((PO) LIST (LOC) <OR FALSE LOCATIVE> (MODE) <PRIMTYPE STRING> + (POS) ANY (OBJ TEST) ANY) + <SET LOC + <COND (<AND <NOT <TYPE? .POS FIX>> + <N==? .POS LVAL> + <N==? .POS GVAL>> + <GETL .OBJ .POS>) + (<TYPE? .OBJ ATOM> + <COND (<==? .POS LVAL> + <COND (<ASSIGNED? .OBJ> <LLOC .OBJ>) + (T #FALSE ("NOT-ASSIGNED"))>) + (<==? .POS GVAL> + <COND (<GBOUND? .OBJ> <GLOC .OBJ>) + (T #FALSE ("NOT-GASSIGNED"))>) + (T #FALSE ("BAD-MONITOR-ARGS"))>) + (<STRUCTURED? .OBJ> + <COND (<TYPE? .POS FIX> + <COND (<G? .POS <LENGTH .OBJ>> + #FALSE ("OUT-OF-BOUNDS")) + (<AT .OBJ .POS>)>) + (T #FALSE ("BAD-MONITOR-ARGS"))>) + (T #FALSE ("CANT-BE-MONITORED"))>> + <COND (<NOT .LOC> .LOC) + (<TYPE? .MODE STRING> + <MONITR .LOC .MODE <SPC-GET .TEST .PO .OBJ .POS>>) + (<IKILL-MON .LOC .MODE>)>> + +<DEFINE MONITR (LOC MODE DATA "AUX" ATM MON) + #DECL ((LOC) LOCATIVE (MODE) STRING (DATA) MONSPEC (ATM) ATOM + (MON) MONITOR) + <COND (<OR <=? .MODE "READ"> <=? .MODE "RW">> + <SET ATM READ!-INTERRUPTS> + <ON "READ" ,RMONF 4 0 .LOC>) + (<ON .MODE ,WMONF 4 0 .LOC> <SET ATM WRITE!-INTERRUPTS>)> + <SETG MONITORS (<SET MON <MON-GET .LOC .ATM .DATA>> !,MONITORS)> + <COND (<=? .MODE "RW"> + <MONITR .LOC "WRITE" .DATA> + <SET MON <MON-GET .LOC RW!-INTERRUPTS .DATA>>)> + .MON> + +<DEFINE MON-GET ("TUPLE" TUP "AUX" (SM ,SPARE-MONS) MON) + #DECL ((TUP) <TUPLE LOCATIVE ATOM MONSPEC> (SM) <LIST [REST MONITOR]> + (MON) MONITOR) + <COND (<EMPTY? .SM> + <CHTYPE <VECTOR <1 .TUP> <2 .TUP> <3 .TUP>> MONITOR>) + (<SET MON <1 .SM>> + <SETG SPARE-MONS <REST .SM>> + <SUBSTRUC .TUP 0 3 <CHTYPE .MON VECTOR>> + .MON)>> + +<DEFINE SPC-GET ("TUPLE" TUP "AUX" (SM ,SPARE-MSPCS) MON) + #DECL ((TUP) <TUPLE ANY LIST ANY ANY> (SM) <LIST [REST MONSPEC]> + (MON) MONSPEC) + <COND (<EMPTY? .SM> + <CHTYPE <VECTOR <1 .TUP> <2 .TUP> <3 .TUP> <4 .TUP>> MONSPEC>) + (<SET MON <1 .SM>> + <SETG SPARE-MSPCS <REST .SM>> + <SUBSTRUC .TUP 0 4 <CHTYPE .MON VECTOR>> + .MON)>> + +<DEFINE P&EVAL (LST "AUX" (OUTCHAN .OUTCHAN)) + #DECL ((LST) LIST (OUTCHAN) CHANNEL) + <MAPF <> + <FUNCTION (X) + #DECL ((X) ANY) + <PRINT .X> + <SET X <EVAL .X>> + <PRINC "= "> + <&1 .X>> + .LST>> + +<DEFINE MMEMQ (LOC ATM TBL "AUX" (CLEAN <>) MAPVAL) + #DECL ((LOC) LOCATIVE (ATM) ATOM (TBL) <LIST [REST MONITOR]> + (CLEAN) <OR ATOM FALSE> (MAPVAL) <OR FALSE MONITOR>) + <SET MAPVAL + <MAPF <> + <FUNCTION (X) + #DECL ((X) MONITOR) + <OR <LEGAL? <MONLOC .X>> + <SET CLEAN T>> + <COND (<AND <==? .LOC <MONLOC .X>> + <==? .ATM <MONTYP .X>>> + <MAPLEAVE .X>)>> + .TBL>> + <AND .CLEAN <CLEAN-MONITORS>> + .MAPVAL> + +<DEFINE RMONF (LOC FRM "AUX" (M <MONSPC <MMEMQ .LOC READ!-INTERRUPTS ,MONITORS>>)) + #DECL ((LOC) LOCATIVE (FRM) FRAME (M) MONSPEC) + <INT-LEVEL 0> + <COND (<AND <ASSIGNED? MONFFLG> + <==? .M .MONFFLG>>) + (<MONTEST .M> <MONF .LOC .M <> "**READ">)>> + +<DEFINE WMONF (LOC NEWVAL FRM + "AUX" (WMONFL <MMEMQ .LOC WRITE!-INTERRUPTS ,MONITORS>) + (M <MONSPC .WMONFL>)) + #DECL ((LOC) LOCATIVE (FRM) FRAME (M) MONSPEC + (NEWVAL WMONFL) <SPECIAL ANY>) + <INT-LEVEL 0> + <COND (<MONTEST .M> <MONF .LOC .M T "**WRITE">)>> + +<DEFINE MONF (LOC M WRT STR "AUX" (ASS <>) TYP (OBJ <MSOBJ .M>) OLDVAL (MONFFLG .M) + (OUTCHAN .OUTCHAN)) + #DECL ((M) MONSPEC (TYP OBJ) ANY (WRT ASS) <OR FALSE ATOM> (OUTCHAN) CHANNEL + (OLDVAL MONFFLG) <SPECIAL ANY> (LOC) LOCATIVE (STR) STRING) + <PRINC .STR> + <COND (<OR <==? <SET TYP <MSTYP .M>> LVAL> <==? .TYP GVAL>> + <PRINC " of "> + <PRIN1 .TYP>) + (<TYPE? .TYP FIX> <PRINC " of element "> <PRIN1 .TYP>) + (<PRINC " of assocation of "> + <&1 .OBJ 40> + <PRINC " and "> + <&1 .TYP 15> + <SET ASS T>)> + <COND (<NOT .ASS> <PRINC " of "> <&1 .OBJ 40>)> + <PRINC "**"> + <SET OLDVAL <IN .LOC>> + <COND (.WRT + <PRINC " +Old Value: "> + <PRINC .OLDVAL> + <PRINC " +New Value: "> + <&1 .NEWVAL>) + (<PRINC " +Value: "> <&1 .OLDVAL>)> + <P&EVAL <MSTODO .M>> + <SET MONFFLG <>> + <LISTEN>> + +<DEFINE MONTEST (M "AUX" (MONOBJ <MSOBJ .M>) (MONFFLG .M)) + #DECL ((M) MONSPEC (MONFFLG MONOBJ) <SPECIAL ANY>) + <EVAL <MSTEST .M>>> + +<DEFINE KILL-MONITOR (MON/MODE "OPTIONAL" OBJ POS) + #DECL ((MON/MODE) <OR MONITOR STRING> (OBJ POS) ANY) + <COND (<TYPE? .MON/MODE STRING> + <MONITOR <CHTYPE .MON/MODE KMODE> .OBJ .POS>) + (<KILL-MON .MON/MODE>)>> + +<DEFINE IKILL-MON (LOC KMODE "AUX" (MON <>)) + #DECL ((LOC) LOCATIVE (KMODE) KMODE (MON) <OR FALSE MONITOR>) + <COND (<AND <=? .KMODE #KMODE "RW"> + <IKILL-MON .LOC #KMODE "READ"> + <SET KMODE #KMODE "WRITE"> + <>>) + (<=? .KMODE #KMODE "READ"> + <SET MON <MMEMQ .LOC READ!-INTERRUPTS ,MONITORS>>) + (<=? .KMODE #KMODE "WRITE"> + <SET MON <MMEMQ .LOC WRITE!-INTERRUPTS ,MONITORS>>)> + <COND (.MON <KILL-MON .MON>) (T #FALSE ("NOT FOUND"))>> + +<DEFINE KILL-MON (MON "AUX" (MONITORS ,MONITORS)) + #DECL ((MON) MONITOR (MONITORS) <LIST [REST MONITOR]>) + <COND (<==? <MONTYP .MON> RW!-INTERRUPTS> + <PUT .MON ,MONTYP READ!-INTERRUPTS> + <KILL-MONITOR .MON> + <PUT .MON ,MONTYP WRITE!-INTERRUPTS>)> + <COND (<=? <1 .MONITORS> .MON> + <SETG MONITORS <REST .MONITORS>> + <RECYCLE-MON .MON> + .MON) + (T + <REPEAT ((NL <REST .MONITORS>) (OL .MONITORS)) + #DECL ((NL) LIST (OL) <LIST ANY>) + <COND (<=? <1 .NL> .MON> + <PUTREST .OL <REST .NL>> + <RECYCLE-MON .MON> + <SETG MONITORS .MONITORS> + <RETURN .MON>) + (<SET OL .NL> <SET NL <REST .NL>>)>>)>> + +<DEFINE CLEAN-MONITORS ("AUX" (LL ,MONITORS) (L .LL)) + #DECL ((LL L) <LIST [REST MONITOR]>) + <REPEAT (MON) + #DECL ((MON) MONITOR) + <COND (<EMPTY? .L> <RETURN .LL>) + (<NOT <LEGAL? <MONLOC <SET MON <1 .L>>>>> + <RECYCLE-MON .MON> + <SET L <SET LL <REST .L>>> + <AGAIN>) + (<RETURN>)>> + <REPEAT (MON) + #DECL ((MON) MONITOR) + <COND (<LENGTH? .L 1> <RETURN <SETG MONITORS .LL>>) + (<NOT <LEGAL? <MONLOC <SET MON <2 .L>>>>> + <RECYCLE-MON .MON> + <PUTREST .L <REST .L 2>> + <AGAIN>) + (ELSE <SET L <REST .L>>)>>> + +<DEFINE RECYCLE-MON (MON) + #DECL ((MON) MONITOR) + <PUTPROP <MONLOC .MON> <MONTYP .MON>> + <SETG SPARE-MONS (.MON !,SPARE-MONS)> + <SETG SPARE-MSPCS (<MONSPC .MON> !,SPARE-MSPCS)> + T> + +<DEFINE KILL-ALL-MONITORS () + <MAPF <> ,KILL-MONITOR ,MONITORS>> + +<DEFINE MONOBJ (MON) + #DECL ((MON) MONITOR) + <MSOBJ <MONSPC .MON>>> + +<DEFINE MONSPEC (MON) + #DECL ((MON) MONITOR) + <MSTYP <MONSPC .MON>>> + +<ENDPACKAGE> diff --git a/src/mprog2/morph.uagj29 b/src/mprog2/morph.uagj29 new file mode 100644 index 00000000..1da6aa1d --- /dev/null +++ b/src/mprog2/morph.uagj29 @@ -0,0 +1,179 @@ +<PACKAGE "MORPH"> + +<ENTRY MORPH LOOK-UP MISS n\'t + \'s ing est ed + er en ly s ion> + +<NEWTYPE MISS STRING> + +<USE "MNEME" "MWORDS"> + +"The following should be done right eventually: + 1. ,M-A-P-S for LOOK-UP. + 2. MORPHOLOGY for -e on ing endings." + +<DEFINE ALL-END (WRD LEN) + #DECL ( (WRD) STRING (LEN) FIX (VALUE) <OR FALSE <LIST ATOM ANY>>) + <AND <G? .LEN 3> + <PROG ((RW <REST .WRD <- .LEN 3>>)(L1 <3 .RW>) (L2 <2 .RW>) (L3 <1 .RW>)) + #DECL ((L1 L2 L3) CHARACTER (RW) <STRING [3 CHARACTER]>) + <COND (<AND <==? .L1 !\t> <==? .L2 !\'> <==? .L3 !\n>> + (n\'t !<WORDM? .WRD <- .LEN 3> n\'t>)) + (<AND <==? .L1 !\s> <==? .L2 !\'>> + (\'s !<WORDM? .WRD <- .LEN 2> \'s>)) + (<AND <==? .L1 !\'> <==? .L2 !\s> <G? .LEN 5>> + (\'s !<WORDM? .WRD <- .LEN 1> \'s>)) + (<AND <==? .L1 !\s><N==? .L2 !\s>> <S-END .WRD <- .LEN 1>>) + (<AND <==? .L1 !\y> <==? .L2 !\l>> <LY-END .WRD <- .LEN 2>>) + (<AND <==? .L1 !\g> <==? .L2 !\n> <==? .L3 !\i>> + <POP-END .WRD <- .LEN 2> ing>) + (<AND <==? .L1 !\t> <==? .L2 !\s> <==? .L3 !\e>> + <POP-END .WRD <- .LEN 2> est>) + (<==? .L2 !\e> + <COND (<==? .L1 !\d> <POP-END .WRD <- .LEN 1> ed>) + (<==? .L1 !\r> <POP-END .WRD <- .LEN 1> er>) + (<==? .L1 !\n> <POP-END .WRD <- .LEN 1> en>)>) + (<AND <==? .L1 !\n><==? .L2 !\o><==? .L3 !\i>> + <ION-END .WRD <- .LEN 3>>)>>>> + +<DEFINE S-END (WRD LEN "AUX" TMP (RW <REST .WRD <- .LEN 3>>) + (L1 <3 .RW>) (L2 <2 .RW>) (L3 <1 .RW>)) + #DECL ( (WRD RW) <STRING [3 CHARACTER]> (LEN) FIX (VALUE) <LIST ATOM ANY> + (TMP) <OR FALSE <LIST ANY>> (L1 L2 L3) CHARACTER) + (s !<COND (<NOT <==? .L1 !\e>> <WORDM? .WRD .LEN s>) + (<==? .L2 !\i> + <PUT .RW 2 !\y> + <SET TMP <WORDM? .WRD <- .LEN 1> s>> + <PUT .RW 2 !\i> .TMP) + (<==? .L2 !\h> + <COND (<==? .L3 !\t> <WORDM? .WRD .LEN s>) + (T <WORDM? .WRD <- .LEN 1> s>)>) + (<==? .L2 !\x> <WORDM? .WRD <- .LEN 1> s>) + (<OR <==? .L2 !\z> <==? .L2 !\s>> + <COND (<==? .L2 .L3> <WORDM? .WRD <- .LEN 1> s>) + (T <WORDM? .WRD .LEN s>)>) + (<==? .L2 !\v> + <OR <WORD? .WRD .LEN s> + <PROG ()<PUT .RW 2 !\f> + <SET TMP <WORD? .WRD .LEN s>> + <PUT .RW 2 !\v> + .TMP> + <WORDM? .WRD .LEN s>>) + (T <WORDM? .WRD .LEN s>)>)> + +<DEFINE LY-END (WRD LEN "AUX" TMP (RW <REST .WRD <- .LEN 1>>)) + #DECL ( (WRD RW) <STRING CHARACTER> (LEN) FIX (VALUE) <LIST ATOM ANY> + (TMP) <OR FALSE LIST>) + (ly !<COND (<==? <1 .RW> !\i> + <PUT .RW 1 !\y> + <SET TMP <WORDM? .WRD .LEN ly>> + <PUT .RW 1 !\i> .TMP) + (<WORD? .WRD .LEN ly>) + (<PUT .RW 3 !\e> ;"E.g. simple" + <SET TMP <WORD? .WRD <+ .LEN 2> ly>> + <PUT .RW 3 !\y> + <COND (.TMP) + (<PUT .RW 2 !\e> + <SET TMP <WORDM? .WRD <+ .LEN 1> ly>> + <PUT .RW 2 !\l> + .TMP)>)>)> + +<DEFINE POP-END (WRD LEN ENDING "AUX" TMP2 TMP (RW <REST .WRD <- .LEN 2>>)) + #DECL ((WRD RW) STRING (ENDING) ATOM (LEN) FIX (VALUE) <LIST ATOM ANY> + (TMP TMP2) <LIST ANY>) + <COND (<AND <==? <1 .RW> !\i> + <==? <2 .RW> !\e>> + <COND (<G? .LEN 3> + <PUT .RW 1 !\y> ;"DLD (8/25/77) for 'tied' 'died' etc." + <SET TMP <WORDM? .WRD <- .LEN 1> .ENDING>> + <PUT .RW 1 !\i>) + (ELSE + <SET TMP <WORDM? .WRD .LEN .ENDING>>)>) + (<AND <==? <2 .RW> !\e> + <NOT <TYPE? <NTH <SET TMP <WORDM? .WRD .LEN .ENDING>> + <LENGTH .TMP>> MISS>>>) + (<NOT <TYPE? <NTH <SET TMP <WORDM? .WRD <- .LEN 1> .ENDING>> + <LENGTH .TMP>> MISS>>) + (<L? .LEN 4>) + (<==? <NTH .WRD <- .LEN 2>> <1 .RW>> ;"Doubled consonant?" + <SET TMP <WORDM? .WRD <- .LEN <COND(<MEMQ <1 .RW> '![!\l !\s !\v !\z!]> + 1) + (2)>> .ENDING>>) + (<==? <2 .RW> !\i> ;"blue -> bluing" + <PUT .RW 2 !\e> + ;"Small bug here--copying at WORDM doesn't get restored" + <SET TMP <WORDM? .WRD .LEN .ENDING>> + <PUT .RW 2 !\i> + <COND (<TYPE? <NTH .TMP <LENGTH .TMP>> MISS> + <SET TMP2 <WORDM? .WRD <- .LEN 1> .ENDING>> + <COND (<NOT <TYPE? <NTH .TMP2 <LENGTH .TMP2>> MISS>> + <SET TMP .TMP2>) + ;"DLD 6/21/78 -- no 'e' on long words." + (ELSE <OR <LENGTH? .WRD 6> + <SET TMP .TMP2>>)>)>)> + (.ENDING !.TMP)> + +<DEFINE COPY-STRING (STR LEN) + #DECL ((STR VALUE) STRING (LEN) FIX) + <SUBSTRUC .STR 0 .LEN <REST ,MORFSTR <- 60 .LEN>>>> + +<SETG MORFSTR <ISTRING 60 !\ >> +<GDECL (MORFSTR) <STRING [60 CHARACTER]>> + +<DEFINE WORD? (WRD LEN ENDING + "AUX" (FOUND <LOOK-UP <COPY-STRING .WRD .LEN> .ENDING>)) + #DECL ( (WRD) STRING (LEN) FIX + (ENDING) ATOM (VALUE) <OR FALSE <LIST ANY>> + (FOUND) <OR FALSE <PRIMTYPE WORD>>) + <COND (.FOUND (.FOUND)) + (<ALL-END .WRD .LEN>)>> + +<DEFINE WORDM? (WRD LEN ENDING + "AUX" (FOUND <LOOK-UP <COPY-STRING .WRD .LEN> .ENDING>)) + #DECL ((WRD) STRING (LEN) FIX + (ENDING) ATOM (VALUE) <LIST ANY> (FOUND) <OR FALSE <PRIMTYPE WORD>>) + <COND (.FOUND (.FOUND)) + (<ALL-END .WRD .LEN>) + (ELSE (<CHTYPE <SUBSTRUC .WRD 0 .LEN> MISS>))>> + +<DEFINE MORPH (WRD "AUX" FOUND) + #DECL ((WRD) STRING + (VALUE) <LIST <PRIMTYPE STRING>> (FOUND) <OR FALSE <LIST ANY>>) + <COND (<SET FOUND <ALL-END .WRD <LENGTH .WRD>>> + (.WRD !.FOUND)) + ((<CHTYPE .WRD MISS>))>> + +;"To do -ion, you will get about 60% of them or better just by +changing to -e or nothing. -sion to -d or -t gets more and -tion to either +-e or nothing still more. Lesser ones include -ption to -be, +-<VOWEL>cation to -y. This exhausts all IONs in ENGLSH DATA" + +<DEFINE ION-END (WRD LEN "AUX" TMP) + #DECL ((WRD) STRING (LEN) FIX (VALUE) <LIST ATOM ANY> (TMP) <LIST ANY>) + <PUT .WRD <+ .LEN 1> !\e> + <SET TMP <WORDM? .WRD <+ .LEN 1> ion>> + <PUT .WRD <+ .LEN 1> !\i> + (ion !<COND (<NOT <TYPE? <NTH .TMP <LENGTH .TMP>> MISS>> .TMP) + (<WORD? .WRD .LEN ion>) + (.TMP)>)> + +<DEFINE LOOK-UP (STR ENDING "AUX" (M <MNEME-EXIST .STR>) MAPS) + #DECL ((STR) STRING (ENDING) ATOM (M) <OR FALSE OWT> + (MAPS) <OR FALSE <LIST [REST OWT]>>) + <COND (<NOT .M><>) + (<SET MAPS <SUPERFIND .M 4 ,M-A-P-S 1 !\A 3>> + <MAPF <><FUNCTION (POS) #DECL ((POS) OWT) + <AND <OR <AND <MEMQ .ENDING '![ed s n\'t en ing ion er]> + <MEMQ .POS ,VERB-TYPES>> + <AND <MEMQ .ENDING '![er ly est en]> + <MEMQ .POS ,ADJECTIVE-TYPES>> + <AND <MEMQ .ENDING '![s \'s]> + <MEMQ .POS ,NOUN-TYPES>> + <AND <==? .ENDING ly> + <MNEME-COMP .POS "ADVERB">>> + <MAPLEAVE .M>>> .MAPS>) + (<>)>> + +<ENDPACKAGE> + + \ No newline at end of file diff --git a/src/mprog2/mrkmak.udl001 b/src/mprog2/mrkmak.udl001 new file mode 100644 index 00000000..c062f1a4 --- /dev/null +++ b/src/mprog2/mrkmak.udl001 @@ -0,0 +1,40 @@ +<PACKAGE "MARK-MAKE"> + +<ENTRY MAKE-ERROR-SOURCE> + +<USE "HAVERFORM" "MDTABLE"> + +"Make the errors source file for ERB by hacking the word list into +a bunch of uvectors or fixes." + +<DEFINE MAKE-ERROR-SOURCE (WL "OPTIONAL" (FIL "ERRORS SOURCE") + "AUX" (OC <OPEN "PRINT" .FIL>) TMP (HF <UVECTOR 0 0>)) + #DECL ((WL) <VECTOR [REST VECTOR]> (FIL) STRING (HF) <UVECTOR FIX FIX> + (OC) <OR CHANNEL FALSE> (TMP) <UVECTOR [REST FIX]>) + <COND (.OC + <MAPF <> + <FUNCTION (W) + #DECL ((W) <VECTOR STRING ANY [REST UVECTOR]>) + <SET TMP + <0REST <DENSER <COND (<==? <LENGTH .W> 3> + <3 .W>) + (<==? <LENGTH .W> 2> + <RLS-FOR-WORD <1 .W>>)> + .HF>>> + <COND (<1? <LENGTH .TMP>> + <PRINT <1 .TMP> .OC>) + (ELSE + <PRINT .TMP .OC>)>> + .WL> + <CLOSE .OC> + "DONE")>> + +"0REST -- rest a haverform until its first element is non-zero" + +<DEFINE 0REST (X) + #DECL ((X VALUE) <UVECTOR [REST FIX]>) + <REPEAT () + <OR <0? <1 .X>> <RETURN .X>> + <SET X <REST .X>>>> + +<ENDPACKAGE> diff --git a/src/mprog2/msgsys.udl002 b/src/mprog2/msgsys.udl002 new file mode 100644 index 00000000..f69f8c21 --- /dev/null +++ b/src/mprog2/msgsys.udl002 @@ -0,0 +1,31 @@ +<PACKAGE "MSGAGE"> + +<ENTRY MSG-DO> + +<USE "M.DAC"> + +<SETG MULTICS-MSGS '("graffiti.IPC@MIT-MULTICS")> + +<DEFINE MSG-DO (ADRC "OPTIONAL" (WHERE '["DSK" "AI" "ML" "MC"]) + "AUX" (MSF <OR <DRD "" "MSG-FILE"> "MSG->">) + (DST <OR <DRD "" "DISTRIB"> '("*DM")>)) + #DECL ((ADRC) STRING (WHERE) <VECTOR [REST STRING]> (MSF) STRING + (DST) <LIST [REST STRING]> (VALUE) ATOM) + <DWT <DRD "" "EXPIRES"> .ADRC "EXPIRES"> + <DWT .DST .ADRC "DISTRIB"> + <DWT <MAPF ,LIST + <FUNCTION (MACH) + (<STRING .MACH ":.MSGS.;" .MSF> + "PRINT" + "DSK:LIBCOM;F.MSG1")> + .WHERE> + .ADRC + "RECEIVER-FILE-OUTPUT"> + <PRCADD .ADRC "FILE-OUTPUT"> + <COND (<MEMBER "*MULTICS" .DST> + <DWT ,MULTICS-MSGS "" "MORE-TO"> + <PRCADD "" "EXPANSION"> + <PRCADD "" "TRANSMISSION">)> + T> + +<ENDPACKAGE> diff --git a/src/mprog2/nstr.udl009 b/src/mprog2/nstr.udl009 new file mode 100644 index 00000000..f7eb1271 --- /dev/null +++ b/src/mprog2/nstr.udl009 @@ -0,0 +1,87 @@ +<PACKø1â ENSTR"> + +"This package contains the useful stuff in the old STR package, rewritten +in Muddle instead of assembly code." + +<ENTRY SUBSTR SUBSNC UPPERCASE SIXTOS STRTOX> + +"STRTOX -- String to Sixbit, takes a string and returns a single-word sixbit +representation of it" + +<DEFINE STRTOX (STR "AUX" (W 0) (CNT 0) C) + #DECL ((STR) STRING (W) <PRIMTYPE WORD> (CNT C) FIX) + <REPEAT () + <COND (<EMPTY? .STR> <SET C 0>) + (<G? <SET C <ASCII <1 .STR>>> 31> + <REPEAT () + <SET C <- .C 32>> + <COND (<L? .C 64> <RETURN>)>>) + (ELSE <SET C 0>)> + <SET W <ORB <LSH .W 6> .C>> + <COND (<==? <SET CNT <+ .CNT 1>> 6> <RETURN .W>)> + <OR <EMPTY? .STR> <SET STR <REST .STR>>>>> + +"SIXTOS -- Sixbit to String, takes a sixbit word and returns the string corresponding +to it. Note that trailing sixbit spaces are not put in the string returned." + +<DEFINE SIXTOS (W "OPTIONAL" (Q <>)) + #DECL ((W) <PRIMTYPE WORD> (Q) <OR CHARACTER FALSE>) + <MAPF ,STRING + <FUNCTION ("AUX" C) + #DECL ((C) <PRIMTYPE WORD>) + <AND <0? <CHTYPE .W FIX>> <MAPSTOP>> + <SET W <ROT .W 6>> + <SET C <ASCII <+ <CHTYPE <ANDB .W 63> FIX> 32>>> + <SET W <ANDB .W -64>> + <COND (<AND .Q <MEMQ .C " :;">> + <MAPRET .Q .C>) + (.C)>>>> + +"SUBSTR -- Substring search, takes arguments as MEMQ and optionally a maximum length +to search and a flag indicating whether case is to be considered significant" + +<DEFINE SUBSTR (S1 S2 "OPTIONAL" (N <LENGTH .S2>) (CASE? T) + "AUX" (S .S1) (WIN <>) (CNT 0) C) + #DECL ((S S1 S2) STRING (WIN) <OR STRING FALSE> (N CNT) FIX (C) CHARACTER) + <MAPR <> + <FUNCTION (S2) + #DECL ((S2) STRING) + <COND (<G? <SET CNT <+ .CNT 1>> .N> <MAPLEAVE <>>) + (<OR <==? <1 .S> <SET C <1 .S2>>> + <AND <NOT .CASE?> + <==? <COND (<AND <G=? <ASCII .C> <ASCII !\a>> + <L=? <ASCII .C> <ASCII !\z>>> + <ASCII <- <ASCII .C> 32>>) + (ELSE .C)> + <COND (<AND <G=? <ASCII <1 .S>> <ASCII !\a>> + <L=? <ASCII <1 .S>> <ASCII !\z>>> + <ASCII <- <ASCII <1 .S>> 32>>) + (ELSE <1 .S>)>>>> + <OR .WIN <SET WIN .S2>> + <COND (<EMPTY? <SET S <REST .S>>> + <MAPLEAVE .WIN>)>) + (ELSE + <SET S .S1> + <SET WIN <>>)>> + .S2>> + +"SUBSNC -- Substring No Case, encapsulates SUBSTR with a fourth arg of <>" + +<DEFINE SUBSNC (S1 S2 "OPTIONAL" (N <LENGTH .S2>)) + #DECL ((S1 S2) STRING (N) FIX) + <SUBSTR .S1 .S2 .N <>>> + +"UPPERCASE -- Uppercases a string, clobbers the old string." + +<DEFINE UPPERCASE (S "OPTIONAL" (CNT <LENGTH .S>)) + #DECL ((S) STRING (CNT) FIX) + <REPEAT ((S .S)) + #DECL ((S) STRING) + <COND (<L? <SET CNT <- .CNT 1>> 0> <RETURN>) + (<AND <G=? <ASCII <1 .S>> <ASCII !\a>> + <L=? <ASCII <1 .S>> <ASCII !\z>>> + <PUT .S 1 <ASCII <- <ASCII <1 .S>> 32>>>)> + <SET S <REST .S>>> + .S> + +<ENDPACKAGE> diff --git a/src/mprog2/oops.udl024 b/src/mprog2/oops.udl024 new file mode 100644 index 00000000..76ce0e59 --- /dev/null +++ b/src/mprog2/oops.udl024 @@ -0,0 +1,107 @@ +<PACKø1â EOOPS"> + +<ENTRY OOPS OOPS-PRINT OOPS-LIST OOPS-ON OOPS-OFF> + +<OR <GASSIGNED? OOPS-LIST> <SETG OOPS-LIST ()>> +<GDECL (OOPS-LIST) <LIST [REST ATOM]>> + +<DEFINE OOPS ("OPTIONAL" PCK + "AUX" (ATM <>) S (POB <GET PACKAGE OBLIST>) P + ERRF (R #FALSE ("NOT DEFINED")) (DUP? <>)) + #DECL ((ATM) <OR ATOM FALSE> (PCK S) STRING (POB) OBLIST + (P DUP? R) <OR ATOM FALSE> (ERRF) FRAME) + <REPEAT ((F <FRAME>) A) + #DECL ((F) FRAME (A) TUPLE) + <COND (<==? <FUNCT .F> TOPLEVEL> <RETURN <>>)> + <SET A <ARGS .F>> + <COND (<AND <==? <FUNCT .F> ERROR> + <==? <LENGTH .A> 3> + <OR <AND <==? <1 .A> UNASSIGNED-VARIABLE!-ERRORS> + <==? <3 .A> GVAL>> + <AND <==? <1 .A> UNBOUND-VARIABLE!-ERRORS> + <OR <==? <3 .A> CALLER> + <==? <3 .A> VALUE>>>>> + <SET ATM <2 .A>> + <SET S <SPNAME .ATM>> + <SET ERRF .F> + <RETURN>) + (ELSE <SET F <FRAME .F>>)>> + <COND (<NOT .ATM> <SET R #FALSE ("NO ERROR")>) + (<ASSIGNED? PCK> + <COND (<SET P <LOOKUP .PCK .POB>> + <SET R <INPACK .S .P>>)>) + (ELSE + <MAPF <> + <FUNCTION (B) + #DECL ((B) LIST) + <MAPF <> + <FUNCTION (P "AUX" W) + #DECL ((P) ATOM (W) <OR ATOM FALSE>) + <COND (<AND <SET W <INPACK .S .P>> + <GASSIGNED? .W> + <APPLICABLE? ,.W>> + <COND (.R <SET DUP? T>) + (ELSE <SET R .W>)>)>> + .B>> + .POB>)> + <COND (.R + <COND (.DUP? #FALSE ("DUPLICATION?")) + (ELSE + <SETG OOPS-LIST (.ATM .R !,OOPS-LIST)> + <SETG .ATM ,.R> + <ERRET ,.R .ERRF>)>)>> + +<DEFINE OOPS-ON () + <COND (<GASSIGNED? OOPSH> + <HANDLER <EVENT "ERROR"> ,OOPSH>) + (ELSE + <SETG OOPSH <ON "ERROR" ,OOPS-ERROR-HANDLER 3>>)> + "OOPSING"> + +<DEFINE OOPS-OFF () + <AND <GASSIGNED? OOPSH> <OFF ,OOPSH>> + "NOT-OOPSING"> + +<DEFINE OOPS-ERROR-HANDLER ("TUPLE" E "AUX" (OUTCHAN ,OUTCHAN)) + #DECL ((E) TUPLE (OUTCHAN) CHANNEL) + <COND (<AND <==? <LENGTH .E> 4> + <OR <AND <==? <2 .E> UNASSIGNED-VARIABLE!-ERRORS> + <==? <4 .E> GVAL>> + <AND <==? <2 .E> UNBOUND-VARIABLE!-ERRORS> + <==? <4 .E> CALLER> + <==? <4 .E> VALUE>>>> + <INT-LEVEL 0> + <PRINC "{OOPS: "> + <PRINC <SPNAME <3 .E>>> + <PRINC !\}> + <PROG (LERR\ !-INTERRUPTS) + #DECL ((LERR\ !-INTERRUPTS) <SPECIAL FRAME>) + <SET LERR\ !-INTERRUPTS <CHTYPE <1 .E> FRAME>> + <COND (<OOPS> #DISMISS T)>>)>> + +<DEFINE INPACK (S P "AUX" O) + #DECL ((S) STRING (P) ATOM (O) LIST) + <COND (<GASSIGNED? .P> + <SET O ,.P> + <OR <LOOKUP .S <1 .O>> + <LOOKUP .S <2 .O>>>)>> + +<DEFINE OOPS-PRINT ("OPTIONAL" OUT "AUX" (O ,OOPS-LIST) (OUTCHAN .OUTCHAN) C) + #DECL ((OUT) STRING (O) <LIST [REST ATOM]> (OUTCHAN) CHANNEL + (C) <OR CHANNEL FALSE>) + <COND (<ASSIGNED? OUT> + <COND (<SET C <OPEN "PRINT" .OUT>> + <SET OUTCHAN .C>)>)> + <REPEAT () + <COND (<LENGTH? .O 1> + <COND (<ASSIGNED? OUT> <CLOSE .C>)> + <RETURN ,NULL>)> + <CRLF> + <PRINC <SPNAME <1 .O>>> + <PRINC ": "> + <PRIN1 <GET <OBLIST? <1 .O>> OBLIST>> + <PRINC " => "> + <PRIN1 <GET <OBLIST? <2 .O>> OBLIST>> + <SET O <REST .O 2>>>> + +<ENDPACKAGE> diff --git a/src/mprog2/parsed.udl016 b/src/mprog2/parsed.udl016 new file mode 100644 index 00000000..ee76e449 --- /dev/null +++ b/src/mprog2/parsed.udl016 @@ -0,0 +1,186 @@ +<PACKAGE "PARSE-DATE"> + +<ENTRY PARSE-DATE PARSE-NUM SYM=? MONTH-SIZE DAYS MONTHS> + +<USE "ITIME"> + +"*************************** DATE HACKING ***************************" + +"Parse all sorts of hairy date specs: + Used in :REMIND and in ACK. ON FAILURE." + +<DEFINE PARSE-DATE (HAIRY "OPTIONAL" (FUTURE? T) + "AUX" (YMD <LTIME>) (DV <1 .YMD>) (DT <2 .YMD>) + (YY <>) (MM <>) (DD <>) (HRS <>) (MIN <>) (SEC <>) + X P TERM) + #DECL ((HAIRY) VECTOR (VALUE) <OR FALSE FIX> + (YMD) <LIST [2 LIST]> (DV DT) <LIST [3 FIX]> (P) ANY + (YY MM DD HRS MIN SEC) <OR STRING FIX FALSE> + (FUTURE?) <OR ATOM FALSE>) + <COND (<EMPTY? .HAIRY> <>) + (ELSE + <SET P <PARSE-NUM <1 .HAIRY>>> + <COND (<AND <TYPE? .P STRING> <SET P <SYM=? .P ,DAYS>>> + <SET DD <IDAY>> + <COND (<1? .P>) + (<==? .P 2> <SET P -1>) + (<==? .P 3> <SET P 0>) + (ELSE + <SET P <- .P 4>> + <SET P + <COND (.FUTURE? + <COND (<L=? .P .DD> <- <+ .P 7> .DD>) + (ELSE <- .P .DD>)>) + (<=? .DD .P> 0) + (<G? .P .DD> <- .P <+ .DD 7>>) + (ELSE <- .P .DD>)>>)> + <SET HAIRY + <COND (<1? <LENGTH .HAIRY>> <REST .HAIRY>) + (ELSE <REST .HAIRY 2>)>> + <PUT .DV 3 <SET DD <+ <3 .DV> .P>>>) + (ELSE + <REPEAT () + <COND (<OR <EMPTY? .HAIRY> + <==? <2 .HAIRY> !\:>> + <RETURN>)> + <SET X <1 .HAIRY>> + <SET TERM <2 .HAIRY>> + <COND (<AND <TYPE? <SET P <PARSE-NUM .X>> FIX> + <COND (<AND <NOT <LENGTH? .HAIRY 3>> + <SYM=? <3 .HAIRY> + '["AM" "PM" + "NOON" "MIDNIGHT"]>> + <RETURN>) + (<L? .P 0> <>) + (<G? .P 31> + <AND <NOT .YY> + <PUT .DV 1 <SET YY <MOD .P 100>>>>) + (<G? .P 12> + <AND <NOT .DD> <PUT .DV 3 <SET DD .P>>>) + (<1? <LENGTH .HAIRY>> + <COND (<NOT .DD> <PUT .DV 3 <SET DD .P>>) + (<NOT .MM> + <PUT .DV 2 <SET MM .P>>)>) + (<NOT .MM> <PUT .DV 2 <SET MM .P>>) + (ELSE + <AND <NOT .DD> + <PUT .DV 3 <SET DD .P>>>)>> + <COND (<NOT <MEMQ .TERM ".-/">> + <SET HAIRY <REST .HAIRY 2>> + <RETURN>)>) + (<AND <TYPE? .P STRING> <SET P <SYM=? .P ,MONTHS>>> + <COND (<NOT .MM> <PUT .DV 2 .P>) + (ELSE + <PUT .DV 3 <SET DD .MM>> + <PUT .DV 2 .P>)> + <SET MM .P>) + (ELSE <RETURN>)> + <SET HAIRY <REST .HAIRY 2>>>)> + <PUT .DT 1 <COND (.FUTURE? 6) (ELSE 0)>> + <PUT .DT 2 0> + <PUT .DT 3 0> + <REPEAT () + <COND (<EMPTY? .HAIRY> <RETURN>)> + <SET X <1 .HAIRY>> + <SET TERM <2 .HAIRY>> + <COND (<TYPE? <SET P <PARSE-NUM .X>> FIX> + <COND (<L? .P 0>) + (<AND <G? .P 60> <NOT .HRS> <NOT .MIN>> + <PUT .DT 1 <SET HRS </ .P 100>>> + <PUT .DT 2 <SET MIN <MOD .P 100>>>) + (<NOT .HRS> <PUT .DT 1 <SET HRS .P>>) + (<NOT .MIN> <PUT .DT 2 <SET MIN .P>>) + (<NOT .SEC> <PUT .DT 3 <SET SEC .P>>) + (ELSE <RETURN>)>) + (ELSE <RETURN>)> + <SET HAIRY <REST .HAIRY 2>> + <COND (<N==? .TERM !\:> <RETURN>)>> + <COND (<AND <NOT <EMPTY? .HAIRY>> + <TYPE? <SET P <1 .HAIRY>> STRING> + <SET P <SYM=? .P '["NOON" "MIDNIGHT"]>>> + <SET HAIRY <REST .HAIRY 2>> + <COND (<1? .P> + <PUT .DT 1 12> + <PUT .DT 2 0> + <PUT .DT 3 0>) + (ELSE + <PUT .DT 1 11> + <PUT .DT 2 59> + <PUT .DT 3 59>)>)> + <COND (<AND <NOT <EMPTY? .HAIRY>> + <TYPE? <SET P <1 .HAIRY>> STRING> + <SET P <SYM=? .P '["AM" "PM"]>> + <NOT <1? .P>>> + <SET HAIRY <REST .HAIRY 2>> + <PUT .DT 1 <SET HRS <+ <1 .DT> 12>>>)> + <COND (<EMPTY? .HAIRY> + <BTIME <1 .DV> <2 .DV> <3 .DV> + <1 .DT> <2 .DT> <3 .DT>>)>)>> + +"Parse a number from a string and return it or the string if can't" + +<DEFINE PARSE-NUM (ST "AUX" (N 0)) + #DECL ((ST) STRING (N) FIX (VALUE) <OR FIX STRING>) + <COND (<MAPF <> + <FUNCTION (C) + #DECL ((C) <PRIMTYPE WORD>) + <COND (<AND <G=? <SET C <ASCII .C>> *60*> + <L=? .C *72*>> + <SET N <+ <* .N 10> .C -48>>) + (ELSE <MAPLEAVE <>>)>> + .ST> + .N) + (ELSE .ST)>> + +<DEFINE SYM=? (STR MON "AUX" L) + #DECL ((STR) STRING (MON) <VECTOR [REST STRING]> + (L) FIX (VALUE) <OR FALSE FIX>) + <REPEAT () + <COND (<EMPTY? .MON> <RETURN <>>) + (<OR <G=? <SET L <COMPS .STR <1 .MON>>> 3> + <==? .L <LENGTH <1 .MON>>>> + <RETURN <+ 1 <- <LENGTH <TOP .MON>> <LENGTH .MON>>>>) + (ELSE <SET MON <REST .MON>>)>>> + +<SETG MONTH-SIZE '![31 29 31 30 31 30 31 31 30 31 30 31!]> + +<SETG DAYS '["TOMORROW" "YESTERDAY" "TODAY" "SUNDAY" "MONDAY" "TUESDAY" + "WEDNESDAY" "THURSDAY" "FRIDAY" "SATURDAY"]> + +<SETG MONTHS + '["JANUARY" + "FEBRUARY" + "MARCH" + "APRIL" + "MAY" + "JUNE" + "JULY" + "AUGUST" + "SEPTEMBER" + "OCTOBER" + "NOVEMBER" + "DECEMBER"]> + +<GDECL (MONTH-SIZE) <UVECTOR [REST FIX]> + (DAYS MONTHS) <VECTOR [REST STRING]>> + +"Take two strings and return number of characters they have in common." + +<DEFINE COMPS (S1 S2 "AUX" (N 0)) + #DECL ((S1 S2) STRING (N VALUE) FIX) + <MAPF <> + <FUNCTION (C1 C2 "AUX" (A1 <ASCII .C1>) (A2 <ASCII .C2>)) + #DECL ((C1 C2) CHARACTER (A1 A2) FIX) + <COND (<==? <COND (<AND <G? .A1 96> <L? .A1 123>> + <- .A1 32>) + (ELSE .A1)> + <COND (<AND <G? .A2 96> <L? .A2 123>> + <- .A2 32>) + (ELSE .A2)>> + <SET N <+ .N 1>>) + (ELSE <MAPLEAVE>)>> + .S1 + .S2> + .N> + +<ENDPACKAGE> diff --git a/src/mprog2/pinfo.udl001 b/src/mprog2/pinfo.udl001 new file mode 100644 index 00000000..c3df87cb --- /dev/null +++ b/src/mprog2/pinfo.udl001 @@ -0,0 +1,137 @@ +<PACKAGE "PINFO"> + +<ENTRY PCK-INFO PCK-USES OBL-INFO OSORT> + +"PCK-INFO -- takes package-name as string, and whether to look at internal +oblist, prints (sorted), all atoms on the entry oblist (and optionally, the +internal one), and the uses for that package. Also prints the count of atoms +on the oblist." + +<DEFINE PCK-INFO ("OPTIONAL" P (BOTH? <>) "AUX" OL O (PO <GET PACKAGE OBLIST>) + (OUTCHAN .OUTCHAN)) + #DECL ((P) STRING (O) <OR OBLIST FALSE> (PO) OBLIST + (OUTCHAN) CHANNEL (OL) <OR LIST FALSE> (BOTH?) <OR ATOM FALSE>) + <COND (<NOT <ASSIGNED? P>> + <PRIN1 <OBL-INFO .PO T>>) + (<SET OL <PCK-OBLIST .P .PO>> + <CRLF> + <COND (<==? <SET O <2 .OL>> <ROOT>> + <PRINC "RPACKAGE "> + <PRINC .P> + <CRLF> + <PCK-USES-INT .OL> + <CRLF> + <PRINC "[Entries are on <ROOT>]">) + (ELSE + <PRINC "PACKAGE "> + <PRINC .P> + <CRLF> + <PCK-USES-INT .OL> + <PRIN1 <OBL-INFO .O>>)> + <COND (<NOT .BOTH?>) + (ELSE + <CRLF> + <PRIN1 <OBL-INFO <1 .OL>>>)>) + (ELSE + <PRINT .P> + <PRINC "[No such PACKAGE]">)> + ,NULL> + +"PCK-USES -- prints the names of packages used by a given package" + +<DEFINE PCK-USES (P "AUX" OL) + #DECL ((P) STRING (OL) <OR FALSE LIST>) + <COND (<SET OL <PCK-OBLIST .P>> + <PCK-USES-INT .OL>) + (ELSE #FALSE ("NO SUCH PACKAGE"))>> + +"OBL-INFO -- takes an oblist and prints the atoms on it and what they +are (g)assigned to. Returns the number of atoms on the oblist." + +<DEFINE OBL-INFO (OB "OPTIONAL" (USES? <>) "AUX" O (OUTCHAN .OUTCHAN) (L 0) N) + #DECL ((OB) OBLIST (O) UVECTOR (OUTCHAN) CHANNEL (L N) FIX) + <MAPF <> + <FUNCTION (A) + #DECL ((A) ATOM) + <AND <G? <SET N <LENGTH <SPNAME .A>>> .L> + <SET L .N>>> + <SET O <OSORT .OB>>> + <SET L <MIN <+ .L 4>>> + <PRINT <GET .OB OBLIST>> + <PRINC "Oblist:"> + <MAPF <> + <FUNCTION (A) + #DECL ((A) ATOM) + <CRLF> + <PRINC " "> + <PRINC .A> + <COND (<AND .USES? <GASSIGNED? .A>> + <INDENT-TO .L> + <PCK-USES-INT ,.A T>) + (<GASSIGNED? .A> + <INDENT-TO .L> + <PRINC "Gassigned "> + <PRIN1 <TYPE ,.A>>) + (<ASSIGNED? .A> + <INDENT-TO .L> + <PRINC "Assigned "> + <PRIN1 <TYPE ..A>>)>> + .O> + <CRLF> + <LENGTH .O>> + +"OSORT -- takes an oblist, and returns a uvector of the atoms on it, sorted +by pname." + +<DEFINE OSORT (O "AUX" A A1 A2 (CHG? <>) X) + #DECL ((O) <PRIMTYPE UVECTOR> (VALUE A A1 A2) <UVECTOR [REST ATOM]> + (X) ATOM (CHG?) <OR ATOM FALSE>) + <COND (<NOT <EMPTY? <SET A + <MAPF ,UVECTOR + <FUNCTION (X) + #DECL ((X) <LIST [REST ATOM]>) + <MAPRET !.X>> + .O>>>> + <SET A1 .A> + <SET A2 <REST .A>> + <REPEAT () + <COND (<EMPTY? .A2> + <COND (.CHG? + <COND (<EMPTY? <SET A1 <REST .A1>>> + <RETURN .A>)> + <SET A2 <REST .A1>> + <SET CHG? <>>) + (ELSE <RETURN .A>)>) + (<1? <STRCOMP <1 .A1> <1 .A2>>> + <SET X <1 .A1>> + <PUT .A1 1 <1 .A2>> + <PUT .A2 1 .X> + <SET CHG? T>) + (ELSE + <SET A2 <REST .A2>>)>>)>> + +<DEFINE PCK-OBLIST (P "OPTIONAL" (PO <GET PACKAGE OBLIST>) "AUX" N OL) + #DECL ((P) STRING (PO) OBLIST (N) <OR ATOM FALSE> (OL) ANY) + <AND <SET N <LOOKUP .P .PO>> + <GASSIGNED? .N> + <TYPE? <SET OL ,.N> LIST> + <NOT <LENGTH? .OL 1>> + .OL>> + +<DEFINE PCK-USES-INT (OL "OPTIONAL" (SH <>) "AUX" (C <>) (OUTCHAN .OUTCHAN)) + #DECL ((OL) LIST (SH C) <OR ATOM FALSE> (OUTCHAN) CHANNEL) + <COND (<SET OL <MEMQ <ROOT> .OL>> + <MAPF <> + <FUNCTION (O) + #DECL ((O) OBLIST) + <COND (<==? .O <ROOT>>) + (ELSE + <COND (.C <PRINC ", ">) + (ELSE <PRINC " Uses: ">)> + <PRINC <GET .O OBLIST>> + <SET C T>)>> + <REST .OL>> + <OR .SH .C <PRINC " Uses nothing.">>)> + ,NULL> + +<ENDPACKAGE> diff --git a/src/mprog2/ppmap.udl002 b/src/mprog2/ppmap.udl002 new file mode 100644 index 00000000..fc8f6165 --- /dev/null +++ b/src/mprog2/ppmap.udl002 @@ -0,0 +1,115 @@ +<PACKAGE "PPMAP"> + +<ENTRY PPMAP PURE-TOP HIGH-BOT GC-BOT PURE-BOT PAGE?> + +<SETG PMAPB <IUVECTOR 16 #WORD 0>> + +<DEFINE PPMAP ("AUX" (PT </ <PURE-TOP> 1024>) P? + (HB </ <HIGH-BOT> 1024>) (GC </ <GC-BOT> 1024>) + (PB </ <PURE-BOT> 1024>) (P 0) B (OUTCHAN .OUTCHAN)) + #DECL ((HB GC PT PB P B) FIX (OUTCHAN) CHANNEL (P?) <OR ATOM FALSE>) + <MAPF <> + <FUNCTION (W) + #DECL ((W) <PRIMTYPE WORD>) + <REPEAT () + <COND (<0? <MOD .P 32>> <CRLF> + <PRINC .P> <PRINC !\ >) + (<0? <MOD .P 8>> <PRINC !\ >)> + <SET W <ROT .W 2>> + <SET B <CHTYPE <ANDB .W 3> FIX>> + <SET P? + <NOT <0? <CHTYPE <ANDB <PAGE? .P> + *200000000000*> + FIX>>>> + <PRINC + <COND (<0? .B> <COND (.P? !\+)(!\-)>) + (<L? .P .GC> <COND (.P? !\I)(!\p)>) + (<L? .P .PB> <COND (.P? !\A)(!\ )>) + (<L? .P .PT> <COND (.P? !\F)(!\f)>) + (<G=? .P .HB> <COND (.P? !\I)(!\i)>) + (<1? .B> <COND (.P? !\Q)(!\q)>) + (<==? .B 2> <COND (.P? !\U)(!\u)>) + (<==? .B 3> <COND (.P? !\P)(!\p)>)>> + <SET P <+ .P 1>> + <COND (<0? <MOD .P 16>> <RETURN>)>>> + <LPMAP ,PMAPB>> + <CRLF>> + +<TITLE LPMAP> + <DECLARE ("VALUE" UVECTOR UVECTOR)> + <PUSH TP* (AB)> + <PUSH TP* 1(AB)> + <PUSHJ P* ILPMAP> + <JRST FINIS> + +<INTERNAL-ENTRY ILPMAP 1> + <SUBM M* (P)> + <HRLI A* NOSHUF 1> + <HRR A* (TP)> + <HRRZ B* (TP)> + <BLT A* 15(B)> + <MOVE A* -1(TP)> + <MOVE B* (TP)> + <SUB TP* [<2(2)>]> + <JRST MPOPJ> + +<SUB-ENTRY PURE-TOP #DECL ("VALUE" FIX)> + <PUSHJ P* IPURTOP> + <JRST FINIS> + +<INTERNAL-ENTRY IPURTOP 0> + <SUBM M* (P)> + <MOVSI A* <TYPE-CODE FIX>> + <MOVE B* NOSHUF -2> + <JRST MPOPJ> + +<SUB-ENTRY HIGH-BOT #DECL ("VALUE" FIX)> + <PUSHJ P* IHIBOT> + <JRST FINIS> + +<INTERNAL-ENTRY IHIBOT 0> + <SUBM M* (P)> + <MOVSI A* <TYPE-CODE FIX>> + <MOVEI B* <TYPE-WORD LOSE>> + <JRST MPOPJ> + +<SUB-ENTRY GC-BOT #DECL ("VALUE" FIX)> + <PUSHJ P* IGCBOT> + <JRST FINIS> + +<INTERNAL-ENTRY IGCBOT 0> + <SUBM M* (P)> + <MOVSI A* <TYPE-CODE FIX>> + <MOVE B* GCSBOT> + <JRST MPOPJ> + +<SUB-ENTRY PURE-BOT #DECL ("VALUE" FIX)> + <PUSHJ P* IPURBOT> + <JRST FINIS> + +<INTERNAL-ENTRY IPURBOT 0> + <SUBM M* (P)> + <MOVSI A* <TYPE-CODE FIX>> + <MOVE B* PURBOT> + <JRST MPOPJ> + +<SUB-ENTRY PAGE? #DECL ("VALUE" FIX <PRIMTYPE WORD>)> + <PUSH TP* (AB)> + <PUSH TP* 1(AB)> + <PUSHJ P* IPAGEP> + <JRST FINIS> + +<INTERNAL-ENTRY IPAGEP 1> + <SUBM M* (P)> + <MOVEI A* *200*> + <ADD A* (TP)> + <HRL A* A> + <HRRI A* B> + <*SUSET A> + <MOVSI A* <TYPE-CODE FIX>> + <SUB TP* [<2(2)>]> + <JRST MPOPJ> + +<END> + +<ENDPACKAGE> diff --git a/src/mprog2/psampl.udl002 b/src/mprog2/psampl.udl002 new file mode 100644 index 00000000..d76182ba --- /dev/null +++ b/src/mprog2/psampl.udl002 @@ -0,0 +1,70 @@ +<PACKAGE "PSAMPLE"> + +<ENTRY PRINT-SAMPLE-INFO> + +<SETG FIL 1> + +<SETG NCK 2> + +<SETG MSG 3> + +<SETG SND 4> + +<SETG VRS 5> + +<SETG DAT 6> + +<SETG TMC 7> + +<MANIFEST FIL MSG NCK SND VRS DAT TMC> + +<DEFINE PRINT-SAMPLE-INFO (INFO) + #DECL ((INFO) VECTOR) + <PRINC "Sample file: "> + <PRIN1 <FIL .INFO>> + <COND (<N=? <NCK .INFO> "______"> + <PRINC " (Nicknamed: "> + <PRINC <NCK .INFO>> + <PRINC ")">)> + <CRLF> + <PRINC "Sample text: "> + <PRINC <COND (<==? <MSG .INFO> -1> "--unknown--") (<MSG .INFO>)>> + <CRLF> + <PRINC "Sender: "> + <PRINC <COND (<==? <SND .INFO> -1> "--unknown--") (<SND .INFO>)>> + <CRLF> + <PRINC "Version: "> + <PRINC <COND (<==? <VRS .INFO> -1> "--unknown--") (<VRS .INFO>)>> + <CRLF> + <PRINC "Sample taken: "> + <COND (<==? <DAT .INFO> -1> <PRINC "--unknown--">) + (<PQDATE <DAT .INFO>>)> + <CRLF> + <COND (<N==? <TMC .INFO> 1.0> + <PRINC "Time constant: "> + <COND (<==? <TMC .INFO> -1> <PRINC "--unknown--">) + (ELSE <PRIN1 <TMC .INFO>>)> + <CRLF>)> + ,NULL> + +<DEFINE PQDATE (X "AUX" (D <1 .X>) (T <2 .X>)) + #DECL ((X) <LIST LIST LIST>) + <NUMC <2 .D>> + <PRINC !"/> + <NUMC <3 .D>> + <PRINC !"/> + <NUMC <1 .D>> + <PRINC !" > + <NUMC <1 .T>> + <PRINC !":> + <NUMC <2 .T>> + <PRINC !":> + <NUMC <3 .T>> + .X> + +<DEFINE NUMC (N) + #DECL ((N) FIX) + <COND (<L? .N 10> <PRINC !"0>)> + <PRINC .N>> + +<ENDPACKAGE> \ No newline at end of file diff --git a/src/mprog2/qload.utt052 b/src/mprog2/qload.utt052 new file mode 100644 index 00000000..9a0e1cfc --- /dev/null +++ b/src/mprog2/qload.utt052 @@ -0,0 +1,145 @@ +<COND (<ASSIGNED? KEEP-FIXUPS>) (<SET KEEP-FIXUPS %<>>)> + +<SETG NULOB (DEFAULT)> ; "For getting the default." + +<DEFINE BADD (goody goodies) #DECL ((goody) FIX (goodies) <LIST [REST FIX]>) + <REPEAT ((goodies .goodies)) #DECL ((goodies) <LIST [REST FIX]>) + <COND (<L? .goody <1 .goodies>> + <PUT <PUTREST .goodies <CONS <1 .goodies> <REST .goodies>>> 1 .goody> + <RETURN>)> + <SET goodies <REST .goodies>>> + .goodies> + +<DEFINE GETCHAN (gf ob "AUX" file nam chan) +#DECL ((gf) <OR STRING ATOM> + (ob) <LIST [REST <OR OBLIST 'DEFAULT>]> + (chan VALUE) CHANNEL + (file) STRING + (nam) ATOM) + <COND (<TYPE? .gf STRING> + <SET file .gf> + <SET chan <CHANNEL "READ" .file>> + <SET nam <COND (<LOOKUP <7 .chan> <1 .OBLIST ;"who's DEFAULT?">>) + (<INSERT <7 .chan> <1 .OBLIST>>)>>) + (T ;"atom" + <SET nam .gf> + <SET chan <CHANNEL "READ" <SET file <GET .nam QLOAD '<PNAME .nam>>>>>)> + <PUT .nam QLOAD .file> + <SET OBLIST <COND (<N==? .ob ,NULOB> .ob) (<GET .nam OBLIST '.OBLIST>)>> + <PUT .nam OBLIST .OBLIST> + .chan> + +<DEFINE QLOAD (gf func? "OPTIONAL" (ob ,NULOB) (KEEP-FIXUPS .KEEP-FIXUPS) + "AUX" (OBLIST .OBLIST) (REDEFINE T) + (badies '(NULL)) (goodies (%<CHTYPE <MIN> FIX>)) + chan chan? any) +#DECL ((KEEP-FIXUPS REDEFINE) <SPECIAL ANY> + (OBLIST) <SPECIAL <LIST [REST <OR OBLIST 'DEFAULT>]>> + (gf) <OR ATOM STRING> + (func?) <OR ATOM <LIST ATOM [REST ATOM]> <FALSE ATOM [REST ATOM]>> + (ob) <LIST [REST <OR OBLIST 'DEFAULT>]> + (chan?) <OR FALSE CHANNEL> + (chan) CHANNEL + (goodies) <LIST [REST FIX]> + (badies) <LIST ATOM [REST ATOM]> + (any) ANY) + + <COND (<NOT .func?> + <SET badies <CONS NULL <CHTYPE .func? LIST>>>) + (<TYPE? .func? LIST> + <SET badies <CONS NULL .func?>> + <REPEAT ((obad .badies) (bad <REST .obad>)) + #DECL ((bad obad) <LIST [REST ATOM]>) + <COND (<AND <TYPE? <SET any <GET <1 .bad> NTH>> FIX> <G? .any 0>> + <SET goodies <BADD .any .goodies>> + <PUTREST .obad <REST .bad>>) + (<SET obad <REST .obad>>)> + <COND (<EMPTY? <SET bad <REST .bad>>> + <RETURN>)>>) + (<AND <TYPE? <SET any <GET .func? NTH>> FIX> <G? .any 0>> + <SET goodies <CONS .any .goodies>>) + (<SET badies (NULL .func?)>)> + + <UNWIND + <PROG () + <SET chan <GETCHAN .gf .ob>> + <COND (<SET chan? <RESET .chan>>) (<RETURN .chan?>)> + <PROG SKIPA ((nth 0) obj char list atom op buffer) + #DECL ((SKIPA) <SPECIAL ACTIVATION> + (nth) FIX + (char) CHARACTER + (list) <LIST [REST ATOM]> + (buffer) STRING) + <REPEAT () + <COND (<LENGTH? .badies 1> <RETURN>)> + <SET char <STRUCRUNTO .chan !"F>> + <COND (<N==? .char %<1 "<">> + <PUT .chan 14 0> + <PUT .chan 17 <+ <17 .chan> 1>> + <COND (<MEMQ .char "([{"> <STRUCFLY .chan .char>)>) + (<==? <1 .goodies> <SET nth <+ .nth 1>>> + <EVAL <READ .chan '<RETURN T .SKIPA>>> + <SET goodies <REST .goodies>>) + (T + <PUT .chan 14 0> + <PUT .chan 17 <+ <17 .chan> 1>> + <SET op <READ .chan '<RETURN T .SKIPA>>> + <COND (<NOT <MEMQ .op '![DEFINE SETG DEFMAC]>> + <STRUCFLY .chan !"< !">> + <AGAIN>)> + <SET atom <READ .chan '<RETURN>>> + <COND (<MAPR <> ;"it returns T when it cannot______ find the atom" + #FUNCTION ((l) #DECL ((l) <LIST [REST ATOM]>) + <COND (<==? .atom <1 .l>> <MAPLEAVE %<>>) + (<SET list <REST .list>>)>) + <REST <SET list .badies>>> + <STRUCFLY .chan !"< !">> + <AGAIN>)> + <COND (<==? .op SETG> ;"I like SETG" + <SET obj <READ .chan '<RETURN T .SKIPA>>> + <PUTREST .list <REST .list 2>> + <COND (<TYPE? .obj FORM> + <COND (<==? <1 .obj> QUOTE> <SET obj <2 .obj>>) + (T <SET obj <EVAL .obj>>)>)> + <SETG .atom .obj> + <PUT .chan 14 0> + <PUT .chan 17 <+ <17 .chan> 1>> + <PUT .atom NTH .nth>) + (T ;"assumes the channel always has a buffer" + <SET buffer <BACK <19 .chan>>> + <PUT .buffer 1 <CHTYPE <14 .chan> CHARACTER>> + <PUT .chan 19 .buffer> + <PUT .chan 17 <- <17 .chan> 1>> + <PUT .chan 14 %<1 "<">> + <SET obj <CHTYPE <READ .chan '<RETURN T .SKIPA>> FUNCTION>> + <PUTREST .list <REST .list 2>> + <COND (<==? .op DEFINE> <SETG .atom .obj>) + (T; "DEFMAC" <SETG .atom <CHTYPE (.obj) MACRO>>)> + <PUT .atom NTH .nth>)>)>> + <REPEAT () + <COND (<LENGTH? .goodies 1> <RETURN>)> + <REPEAT ((loop <- <1 .goodies> .nth 1>)) + <COND (<L=? .loop 0> <RETURN>)> + <SET char <STRUCRUNTO .chan !"F>> + <PUT .chan 14 0> + <PUT .chan 17 <+ <17 .chan> 1>> + <COND (<OR <COND (<==? .char %<1 "<">> + <SET loop <- .loop 1>> + <SET nth <+ .nth 1>> + T)> + <MEMQ .char "([{">> + <STRUCFLY .chan .char>)>> + <EVAL <READ .chan '<RETURN T .SKIPA>>> + <SET nth <+ .nth 1>> + <SET goodies <REST .goodies>>>> + <CLOSE .chan> + <COND (<LENGTH? .goodies 1> + <REST .badies>) + (T + <PUTREST <REST .goodies <- <LENGTH .goodies> 2>> <REST .badies>> + .goodies)>> + <CLOSE .chan>>> + +<PUT CHANNEL DECL '<VECTOR [13 ANY] <PRIMTYPE WORD> [2 ANY] FIX ANY STRING>> + + \ No newline at end of file diff --git a/src/mprog2/r_cmp.ujfh02 b/src/mprog2/r_cmp.ujfh02 new file mode 100644 index 00000000..fe6305d4 --- /dev/null +++ b/src/mprog2/r_cmp.ujfh02 @@ -0,0 +1,1064 @@ + +<PACKAGE "R.CMP"> + +<ENTRY LAZY-MSG + GET-HOST-SYMTABLE + GET-ACK-CONDS + ACK-SYMS + ADD-BREAK + ALLCLEAR + ALLP + ALLPRINT + APPEND-AUTHORS + APPEND-BLIND + APPEND-BUF + APPEND-CC + APPEND-FILES + APPEND-FROM + APPEND-KEYWORDS + APPEND-MESSAGE + APPEND-REFS + APPEND-REPLY + APPEND-SUBJECT + APPEND-TO + APPENDER + ASK + BUFLEX + CHANGE-PRIMCH + COMMSYMS + COMPOS-CHRTABLE + COMPOS-FILEINP + COPY-FIELD + DELETER + FADDR ;"ADDRESSEES (REQ HOST PROC)" + FIELDPRINT + FINDHOST + FLST ;"LIST TYPE (KEYWORDS)" + FSTR ;"STRING TYPE (MESSAGE, SUBJECT)" + GOPROG + KEYWEX + MESSCOMMAND + OPCH + OPEN-FAILED + PADDR + PFLX + PFROM + PLINK + PLST + PRINTER + PRINTPROMPT + PRMAIL + PSTR + PTO + PUTOUT + QUICKSENDER + SET-EDITOR-FCN + TOP-LEVEL-MESSAGE + TTY-SENDER + USE-IMLAC-EDITOR + USE-TECO> + +<USE "R.DATA" + "R.UTI" + "LIBDAT" + "CALSYM" + "CALRDR" + "BUF" + "STR" + "CALCOM" + "MUDCAL" + "TIMFCN" + "CALUTL" + "PRTUTI"> + +<SETG COMMSYMS + <MAKEBST "Message commands" + ["acknowledge" + '<GET-ACK-CONDS> + "append.to.field" + '<APPENDER> + "blind.carbon.to" + '<APPEND-BLIND> + "carbon.copy.to" + '<APPEND-CC> + "change.primary.output.channel" + '<CHANGE-PRIMCH> + "coordinate.with" + '<APPEND-COORDINATE> + "delete.field" + '<DELETER> + "display.hosts" + '<COPY-FILE "DSK:COMSYS;HOSTS PRINTS" "TTY:"> + "don't.record" + '<SETG RECORD-IT <>> + "duplicate.field" + '<COPY-FIELD> + "file.under" + '<APPEND-FILE-UNDER> + "files.for.output" + '<APPEND-FILES> + "forwarded-by" + '<APPEND-FORWARD-BY> + "forwarded-to" + '<APPEND-FORWARD-TO> + "from" + '<APPEND-FROM> + "keywords" + '<APPEND-KEYWORDS> + "leave.composer.and.flush.message" + '<COND (<AND <ASSIGNED? MESSTOP> <LEGAL? .MESSTOP>> + <RETURN T .MESSTOP>)> + "local.attachments" + '<APPEND-LOCAL-ATTACHMENTS> + "other.authors" + '<APPEND-AUTHORS> + "print.field" + '<PRINTER> + "re-read" + '<RE-READ> + "record" + '<SETG RECORD-IT T> + "references" + '<APPEND-REFS> + "reply-to" + '<APPEND-REPLY> + "scratch" + '<APPEND-SCRATCH> + "send.immediate" + '<QUICKSENDER> + "send.queued" + '<SENDER> + "send.to.tty" + '<TTY-SENDER> + "subject" + '<APPEND-SUBJECT> + "text" + '<APPEND-MESSAGE> + "to" + '<APPEND-TO> + "use.imlac.editor" + '<USE-IMLAC-EDITOR> + "use.teco" + '<USE-TECO> + "verbose.host.display" + '<COPY-FILE "DSK:SYSENG;HOSTS PRETTY" "TTY:">]>> + +<SETG ACK-SYMS + <MAKEBST "Acknowledgement conditions" + ["delivered" + "DELIVERY" + "read" + "READING" + "recorded" + "RECORD"]>> + +<SET TTY1 <PUTBITS .TTY1 <BITS 1 13> 1>> + +;"TURN ON 'ACTIVATE ON ?'" + +<SET PROMPT1 ""> + +<SET CONT-PROMPT "-continued-"> + +<SET SYN-PROMPT " (BUFFER)"> + +<SET DONE-PROMPT ": "> + +<SET VERNUM 17> + +<DEFINE TOP-LEVEL-MESSAGE () ;"SETS UP TOP-LEVEL VARIABLES" + <COND (.IMLAC? <USE-IMLAC-EDITOR>) ;"CHECK TO SEE IF SHOULD USE TECO" + (ELSE <USE-TECO>)> + <MAPF <> + <FUNCTION (A) <SET <1 .A> <EVAL <2 .A>>>> + '((REPLY-NUM -1) + (CPU-START <TIME>) + (CONSOLE-START <DTNOW>) + (REPLY-NAME "") + (MESSAGE <BUFMAKE 400>) + (FROM <ADDSTRING <BUFMAKE 10> <UNAME>>) + (TO <ADDSTRING <BUFMAKE 100> .REPLY-NAME>) + (SUBJECT <BUFMAKE 100>) + (CC-TO <BUFMAKE 40>) + (AUTHORS <BUFMAKE 20>) + ;"OTHER-AUTHORS (FROM IS PRINCIPAL AUTHOR" + (BLIND <BUFMAKE 20>) + (COORDINATE <BUFMAKE 20>) + (ACK-CONDS ()) ;"acknowledgment conds" + (RECORD-IT <>) + (RECORD-ACK-IT <>) + (FORWARD-BY <BUFMAKE 10>) + (FORWARD-TO <BUFMAKE 20>) + (KEYWORDS <BUFMAKE 100>) + (FILE-UNDER <BUFMAKE 20>) + (FILES <BUFMAKE 20>) + ;"OUTPUT FILES, OTHER THAN 'MSG >' OR 'MSGD >' " + (SCRATCH <BUFMAKE 20>) + (REFS <BUFMAKE 10>) + (REPLY-TO + <ADDSTRING <BUFMAKE 10> + <COND (<L? .REPLY-NUM 0> "") + (ELSE <UNPARSE .REPLY-NUM>)>>))>> + +;"SETS UP SAME VARIABLES AS MESSAGE FUNCTION." + +<DEFINE SET-EDITOR-FCN (FCN "AUX" TEM) + #DECL ((TEM) <OR FALSE VECTOR>) + <COND (<SET TEM <MEMBER <ASCII 5> ,COMPOS-CHRTABLE>> ;"CONTROL-E" + <PUT .TEM 2 .FCN>)>> + +<DEFINE USE-TECO () <SET-EDITOR-FCN ,BUFTECO>> + +<DEFINE USE-IMLAC-EDITOR () + <COND (.IMLAC? <SET-EDITOR-FCN ,EFUNCTION>) + (<PRINC "Console is not an IMLAC? +">)>> + +<DEFINE GET-ACK-CONDS ("AUX" TEM) + #DECL ((TEM) <OR FALSE <VECTOR LIST>> (VALUE) <OR FALSE LIST>) + <COND (<SET TEM + <READARGS ,ACK-SYMS + "when" + '[ +"Type the names of conditions which you wish +to have acknowledged" + ""] + '["MULT" "SYM"]>> + <MAPR <> + <FUNCTION (A) #DECL ((A VALUE) LIST) <PUT .A 1 <2 <1 .A>>>> + <1 .TEM>> ;"symbol-to-value" + <SET ACK-CONDS + <COND (<MEMBER "RECORD" <1 .TEM>> + <SET RECORD-ACK-IT T> + <MAPF ,LIST + <FUNCTION (S) + #DECL ((S VALUE) STRING) + <COND (<=? "RECORD" .S> <MAPRET>) + (.S)>> + <1 .TEM>>) + (ELSE <SET RECORD-ACK-IT #FALSE ()> <1 .TEM>)>>)>> + +<DEFINE GOPROG () + <PRINC " +DMS Message Commands Available."> + <INIT> + <ADDSTRING .FROM <UNAME>> + <COND (.IMLAC? <USE-IMLAC-EDITOR>) ;"check to see if should use teco" + (ELSE <USE-TECO>)> + <SET CPU-START <TIME>> + <SET CONSOLE-START <DTNOW>> + <SET PRIMCH <DATUM "COMSYS-INPUT-FILE-DEFERRED">> + <SET IMMEDCH <DATUM "COMSYS-INPUT-FILE">>> + +<DEFINE PRINTPROMPT (BUF "OPTIONAL" (P1? T)) + #DECL ((BUF VALUE) BUFFER (P1?) <OR FALSE ATOM> + (PROMPT1 SYN-PROMPT CONT-PROMPT DONE-PROMPT) STRING) + <AND .P1? <PRINC .PROMPT1>> + <PRINC .SYN-PROMPT> + <COND (<NOT <0? <BUFLENGTH .BUF>>> <PRINC .CONT-PROMPT>)> + <PRINC .DONE-PROMPT> + .BUF> + +<DEFINE COMPOS-BUFPRINT (BUF CHR "AUX" (CONT-PROMPT "")) + #DECL ((BUF) BUFFER (CHR) CHARACTER (CONT-PROMPT) <SPECIAL STRING>) + <PRINC "C"> ;"CLEAR SCREEN" + <PUT ,OUTCHAN 16 0> ;"top line position" + <PRINTPROMPT .BUF> + <BUFPRINT .BUF>> + +<DEFINE QUESTION (BUF CHR) + #DECL ((BUF) BUFFER (CHR) CHARACTER) + <COND (<0? <BUFLENGTH .BUF>> + <TERPRI> + <PRINC .VERBOSE-PROMPT> + <TERPRI> + <PRINTPROMPT .BUF>) + (ELSE <ADDCHR .BUF .CHR> ;"IF BUFFER NOT EMPTY")>> + +<DEFINE BUFLEX (BF + "OPTIONAL" (BRKS " , +") ;"SP,CR,COMMA,LF" + "AUX" (L <LEX <1 .BF> <BUFLENGTH .BF> .BRKS>)) + #DECL ((BF) BUFFER (BRKS) STRING (VALUE L) <LIST [REST STRING]>) + <MAPF ,LIST + <FUNCTION (S) #DECL ((S) STRING) <AND <EMPTY? .S> <MAPRET>> .S> + .L>> + +<DEFINE OPCH ("OPTIONAL" (BF .FILES) "AUX" L) + #DECL ((L) LIST (VALUE) <LIST [REST CHANNEL]>) + <SET L + <MAPF ,LIST + <FUNCTION (ST) #DECL ((ST) STRING) <OPEN "PRINT" .ST>> + <BUFLEX .BF ", +">>> + <MAPF ,LIST + <FUNCTION (CH) <AND <TYPE? .CH CHANNEL> <MAPRET .CH>> <MAPRET>> + .L>> + +<DEFINE EMPTY-FIELD (FIELD) + #DECL ((FIELD) ATOM) + <COND (<==? .FIELD TO> + <AND <0? <BUFLENGTH .TO>> <EMPTY-FIELD FORWARD-TO>>) + (<0? <BUFLENGTH ..FIELD>>)>> + +<DEFINE SENDER ("OPTIONAL" (PRIMCH .PRIMCH) (ALL? ".") + "AUX" L CH + "NAME" SENDACT) + #DECL ((ALL?) <OR FALSE STRING> (SENDACT) ACTIVATION (L) LIST + (CH) <OR FALSE CHANNEL> + (PRIMCH) <OR <VECTOR [REST STRING]> STRING>) + <MAPF <> + <FUNCTION (FIELD) + <AND <EMPTY-FIELD .FIELD> + <PROG () + <TERPRI> + <PRINC <GET .FIELD PRETTY>> + <PRINC +"--empty? Please specify before sending."> + <TERPRI> + <RETURN 0 .SENDACT>>>> + ,ALWAYSFIELDS> + <SET CH + <COND (<TYPE? .PRIMCH STRING> <OPEN "PRINT" .PRIMCH>) + (ELSE <OPEN "PRINT" !.PRIMCH>)>> + <OR <OR .CH <SET CH <OPEN-FAILED .CH .PRIMCH>>> + <RETURN 0 .SENDACT>> ;"flush if user types ^R or ESC" + <AND .ALL? + <OR <EMPTY? <SET L <OPCH>>> <PUT <TOP .CH> 1 .L>>> + <PRMAIL .CH> + <CLOSE .CH> + <AND .ALL? + <PROG () + <TERPRI> + <PRINC "Message queued"> + <PRINC .ALL?> ;"additional string" + <TERPRI> + <SET CPU-START <TIME>> ;"initialize timer variables" + <SET CONSOLE-START <DTNOW>> + <ALLCLEAR> + <MAPF <> ,CLOSE .L> ;"CLOSE EXTRA CHANNELS">>> + +<DEFINE CHANGE-PRIMCH ("AUX" TEM PRIMCHAN-PARSE) + #DECL ((PRIMCHAN-PARSE) <VECTOR [REST <OR LOSE STRING>]>) + <SET PRIMCHAN-PARSE <FSP-PARSE .PRIMCH>> + <SET TEM + <READER <MAPF ,VECTOR + <FUNCTION (NM) + #DECL ((NM) <OR LOSE STRING>) + <COND (<TYPE? .NM STRING> <MAPRET .NM> T)>> + .PRIMCHAN-PARSE> + "new name" + '[ +"Type the name of the file for 'queued' output. +(type ^R for 'same')" + ""] + '["FILE"]>> + <AND .TEM <SET PRIMCH .TEM>>> + +<DEFINE FINDHOST (S "AUX" (FIXP <MEMQ !"@ .S>) NM FX LP SYMB HST "NAME" NOHOST) + #DECL ((FIXP) <OR FALSE STRING> (SYMB) <OR SYMBOL FALSE> (NM) STRING + (LP) LIST (FX) ANY (VALUE) STRING) + <COND (.FIXP ;"FOUND @" + <SET NM <EXTRACT .S <- <LENGTH .S> <LENGTH .FIXP>>>> + <SET FIXP <REST .FIXP>> ;"get rid of @") + (ELSE <RETURN .S .NOHOST>)> + <SET HST <HOST <UPPERCASE .FIXP>>> + <COND (.HST <STRING .NM !"@ <UNPARSE .HST>>) ;"name@number" + (<AND <NOT <EMPTY? <SET LP <LPARSE .FIXP>>>> + <TYPE? <SET FX <1 .LP>> FIX> + <G? .FX 0> + <L? .FX 256>> + <STRING .NM !"@ <UNPARSE .FX>>) + (ELSE + <PROG ((OUTCHAN ,OUTCHAN)) + #DECL ((OUTCHAN) <SPECIAL CHANNEL>) + <PRINC " +***error +unknown host: "> + <PRINC .FIXP> + <PRINC " +for addressee: "> + <PRINC .NM> + <PRINC !".> + <TERPRI> + <SET SYMB + <READER <GET-HOST-SYMTABLE> + "Please retype host name" + [<STRING +"Please retype the host name for addressee " + .NM> + ""] + '["SYM"]>> + <COND (.SYMB <STRING .NM !"@ <UNPARSE <2 .SYMB>>>) + (ELSE .NM)> + ;"if he gives a FALSE back, give no host">)>> + +<DEFINE OPEN-FAILED (CH PRIMCH) + <REPEAT () + <TERPRI> + <PRINC "Open of "> + <PRINC .PRIMCH> + <PRINC " failed, "> + <PRINC <COND (<LENGTH? .CH 1> <1 .CH>) (".")>> + <TERPRI> + <SET PRIMCH + <READER '[] + "alternate" + '["please type a new file name for output" ""] + '["FILE"]>> + <OR .PRIMCH <RETURN <NOT <SET PRIMCH "TTY:">>>> + ;"IF TYPED NUL OR ^R" + <AND <SET CH <OPEN "PRINT" .PRIMCH>> <RETURN .CH>> + ;"successful open, returns channel"> + ;"else prints message again and iterates"> + +<DEFINE QUICKSENDER () + <COND (<==? <SENDER .IMMEDCH " and daemon signalled."> 0> 0) ;"Failed" + (<DEMSIG "COMDMN">)>> + +<DEFINE TTY-SENDER () <SENDER "TTY:" #FALSE ()>> + +\ + +<DEFINE PUTOUT (L1 L2) + #DECL ((L1 VALUE) <LIST [REST ATOM]> (L2) <LIST [REST STRING]>) + <MAPF <> <FUNCTION (A B) <PUT .A OUTSTRING .B>> .L1 .L2> + .L1> + +<SET FLX (REFS REPLY-TO)> + +<PUTOUT .FLX ("REFERENCES" "REPLY-TO")> + +<SET FADDR (AUTHORS)> + +<PUTOUT .FADDR ("OTHER-AUTHORS")> + +<PUT FROM OUTSTRING "FROM"> + +<SET FSTR (SUBJECT MESSAGE)> + +<PUTOUT .FSTR ("SUBJECT" "TEXT")> + +<SET FLST (KEYWORDS FILE-UNDER FORWARD-TO)> + +<PUTOUT .FLST ("KEYWORDS" "FILED-UNDER" "FORWARDED-TO")> + +<DEFINE PRMAIL ("OPTIONAL" (OUTCHAN .OUTCHAN)) + #DECL ((OUTCHAN) <SPECIAL CHANNEL>) + <PRINT "WHEN-ORIGINATED"> + <PRINT <DTNOW>> ;"time,date,timezone" + <PTO> ;"to,blind,cc-to" + <PFROM .FROM "FROM" T> ;"Print FROM field" + <PFROM .FORWARD-BY "FORWARDED-BY" <>> ;"Print FORWARD field, if any" + <MAPF <> ,PADDR .FADDR> ;"ADDRESSEE TYPES" + <MAPF <> ,PSTR .FSTR> ;"STRING TYPES" + <MAPF <> ,PFLX .FLX> ;"LIST-OF-FIX TYPES" + <MAPF <> ,PLST .FLST> ;"LIST TYPES" + <PRINT "CONSOLE-MINUTES"> + <PRINC <DTDIFF <DTNOW> .CONSOLE-START>> + <PRINT "CPU-SECONDS"> + <PRINC <- <TIME> .CPU-START>> + <PRINT "SCHEDULE"> ;"initiate tranmission" + <PRINT '("SENDING" #FALSE ())> + <COND (.RECORD-IT + <PRINT "SCHEDULE"> + <PRINT '("RECORD" #FALSE ())> + <COND (.RECORD-ACK-IT ;"set/cleared in GET-ACK-CONDS" + <PRINT "SCHEDULE"> + <PRINT '("RECORD-ACKNOWLEDGE" #FALSE ())>)>)> + <COND (<NOT <EMPTY? .ACK-CONDS>> + <PRINT "ACKNOWLEDGE"> + <PRINT <MAPF ,LIST + <FUNCTION (S) + #DECL ((S) STRING) + <LIST .S #FALSE () 2> + ;"STANDARD ACK FCN #2"> + .ACK-CONDS>>)>> + +<DEFINE PLINK () + <PRINT '("LINK-TO-ADDRESSEE-AREA" "REMOVE")> + <PRINT 12> ;"(TO) DON'T WANT THIS AVAILABLE TO ADD'S -- CONTAINS BLINDS" + <PRINT '("LINK-TO-ADDRESSEE-AREA" "APPEND")> + <PRINT '("ACTION-TO")> ;"THIS IS THE USER-GENERATED 'TO'"> + +<DEFINE PTO ("AUX" TOL BLOL CCTOL FORWTO) + #DECL ((FORWTO TOL BLOL CCTOL) LIST) + <SET TOL <MAPF ,LIST ,FINDHOST <BUFLEX .TO>>> + <SET BLOL <MAPF ,LIST ,FINDHOST <BUFLEX .BLIND>>> + <SET CCTOL <MAPF ,LIST ,FINDHOST <BUFLEX .CC-TO>>> + <PRINT "TO"> + <COND (<AND <SET FORWTO <MAPF ,LIST ,FINDHOST <BUFLEX .FORWARD-TO>>> + <NOT <EMPTY? .FORWTO>>> + <PRINT .FORWTO> + <PRINT "FORWARDED-TO"> + <PRINT .FORWTO>) + (<PRINT <LIST !.TOL !.CCTOL !.BLOL>>)> + <PRINT "ACTION-TO"> ;"USER'S 'TO' FIELD" + <PRINT .TOL> + <OR <EMPTY? .CCTOL> + <PROG () + <PRINT "CARBON-COPY-TO"> + <PRINT .CCTOL>>> + <OR <EMPTY? .BLOL> + <PROG () + <PRINT "BLIND"> + <PRINT <MAPF ,LIST <FUNCTION (A) ((.A) (.A))> .BLOL>>>>> + +<DEFINE PFLX (FIELD) + <OR <0? <BUFLENGTH ..FIELD>> + <PROG () + <PRINT <GET .FIELD OUTSTRING>> + <PRINT <MAPF ,LIST ,PARSE <BUFLEX ..FIELD>>>>>> + +<DEFINE PADDR (FIELD) + <OR <0? <BUFLENGTH ..FIELD>> + <PROG () + <PRINT <GET .FIELD OUTSTRING>> + <PRINT <MAPF ,LIST ,FINDHOST <BUFLEX ..FIELD>>>>>> + +<DEFINE PSTR (FIELD) + <OR <0? <BUFLENGTH ..FIELD>> + <PROG () + <PRINT <GET .FIELD OUTSTRING>> + <BUFSPRINT ..FIELD> + ;"print string with double quotes backslashed">>> + +<DEFINE PLST (FIELD) + <OR <0? <BUFLENGTH ..FIELD>> + <PROG () + <PRINT <GET .FIELD OUTSTRING>> + <PRINT <BUFLEX ..FIELD>>>>> + +<DEFINE PFROM (BUF STR REQ "AUX" L) + #DECL ((BUF) BUFFER (STR) STRING (L) <LIST [REST STRING]> + (REQ) <OR 'T FALSE>) + <SET L <BUFLEX .BUF>> + <COND (<NOT <EMPTY? .L>> <PRINT .STR> <PRINT <1 .L>>) + (.REQ <PRINT .STR> <PRINT "UNKNOWN">)>> + +\ + +<DEFINE MSG ("OPTIONAL" (INPUT? T) (REPLY-NUM -1) (REPLY-NAME "") + "AUX" (CHRTABLE + [!" + #FUNCTION ((B C) <RETURN <> .MESSTOP>) + !" + ,KEYWEX + !.CHRTABLE]) + (MESSAGE <BUFMAKE 400>) + (FROM <ADDSTRING <BUFMAKE 10> <UNAME>>) + (TO <ADDSTRING <BUFMAKE 100> .REPLY-NAME>) + (SUBJECT <BUFMAKE 100>) + (CC-TO <BUFMAKE 20>) + (AUTHORS <BUFMAKE 10>) + ;"OTHER-AUTHORS (FROM IS PRINCIPAL AUTHOR" + (BLIND <BUFMAKE 10>) + (COORDINATE <BUFMAKE 20>) + (ACK-CONDS ()) ;"acknowledgment conds" + (RECORD-IT <>) + (KEYWORDS <BUFMAKE 100>) + (FILE-UNDER <BUFMAKE 20>) + (FILES <BUFMAKE 20>) + ;"OUTPUT FILES, OTHER THAN 'MSG >' OR 'MSGD >' " + (SCRATCH <BUFMAKE 20>) + (FORWARD-BY <BUFMAKE 10>) + (FORWARD-TO <BUFMAKE 20>) + (REFS <BUFMAKE 10>) + (CPU-START <TIME>) + (CONSOLE-START <DTNOW>) + (REPLY-TO + <ADDSTRING <BUFMAKE 10> + <COND (<L? .REPLY-NUM 0> "") + (ELSE <UNPARSE .REPLY-NUM>)>>) + "NAME" MESSTOP) + <COND (.INPUT? <APPEND-TO> <APPEND-SUBJECT> <APPEND-MESSAGE>)> + <MESSCOMMAND>> + +<DEFINE REPLY-TO (MSG-NUM MSG-NAME) + #DECL ((MSG-NUM) FIX (MSG-NAME) STRING) + <MSG T .MSG-NUM .MSG-NAME>> + +\ + +;"KEYWORD EXTRACTORS +" + +<SETG KEYBREAKS + <MAPF ,STRING ,ASCII (13 9 10 32 <ASCII !",> <ASCII !".>)>> + +<DEFINE ADDBREAK (BF CHR) + #DECL ((VALUE BF) BUFFER (CHR) CHARACTER) + <COND (<OR <==? <1 .BF> <2 .BF>> ;"nothing in buffer" + <MEMQ <1 <BACK <2 .BF>>> ,KEYBREAKS>> + .BF) ;"already broken" + (<ADDCHR .BF .CHR>)>> + +<DEFINE KEYWEX (BUF CHR + "AUX" (BST ,KEYBREAKS) (IK .KEYWORDS) (L <BUFLENGTH .BUF>) + (BB <2 .BUF>) CH) + #DECL ((BUF VALUE IK) BUFFER (CHR CH) CHARACTER (BST BB) STRING (L) FIX) + <COND (<0? .L> .BUF) + (ELSE + <REPEAT ((LC .L)) + #DECL ((LC) <UNSPECIAL FIX>) + <SET CH <1 <SET BB <BACK .BB>>>> + <COND (<MEMQ .CH .BST> + <ADDBREAK .IK !" > ;"sp" + <ADDSTRING .IK + <REST .BB> + <- <LENGTH .BB> <LENGTH <2 .BUF>> 1>> + <RETURN .BUF>) + (<0? <SET LC <- .LC 1>>> + <ADDBREAK .IK !" > + <ADDSTRING .IK .BB .L> + <RETURN .BUF>)>>)>> + +\ + +<DEFINE COMPOS-FILEINP (BF CHR "AUX" FIL (VPOS <16 .OUTCHAN>) CH) + #DECL ((BF VALUE) BUFFER (CHR) CHARACTER (FIL) <OR FALSE STRING> + (CH) <OR CHANNEL FALSE> (VPOS) FIX) + <COND (<SET FIL + <READER '[] + "named" + ["type the name of the file to be inserted" ""] + ["FILE"]>> + <COND (<SET CH <OPENTELL "READ" .FIL>> + <ADDFILE .BF .CH> + <PRINT "DONE">)>) + (<AND .IMLAC? <==? .VPOS <16 .OUTCHAN>>> + <HPOS-BUF .BF> + <DEL-TO-EOL>) + (ELSE <PRINC "---continue:">)> + <MY-TTY-OFF> ;"reset TTY status" + .BF> + +\ + +;"SHORT MESSAGE SENDER +" + +<DEFINE LAZY-MSG (FLDS + "OPTIONAL" (START 0) + "EXTRA" (MBF ,MSGFLDBUFS) OUTCOME FOO FLDNAM) + #DECL ((FLDS) <LIST [REST STRING]> (OUTCOME) <OR STRING FALSE>) + <SET OUTCOME + <PROG LAZY-LOOP () + #DECL ((LAZY-LOOP) <SPECIAL ACTIVATION>) + <MAPF <> + <FUNCTION (X) + #DECL ((X) STRING) + <COND (<SET FLDNAM <MEMBER .X .MBF>> + <DOWNSHIFT .X> + <APPLY <GET <2 .FLDNAM> APPENDER>>)>> + <REST .FLDS .START>> + <>>> + <COND (.OUTCOME + <LAZY-MSG .FLDS <MAX <- <POSQ .OUTCOME .FLDS <>> 2> 0>>) + (T + <XFPOP> + <SET FOO <READER ,SENDSYMS " +Send?" ["" ""] ["SYM"]>> + <COND (.FOO <EVAL <2 .FOO>>)>)>> + +<DEFINE DOWNSHIFT (STR) + #DECL ((STR) STRING) + <TERPRI> + <PRINC <1 .STR>> + <MAPF <> + <FUNCTION (X "EXTRA" (ASC <ASCII .X>)) + <COND (<AND <G? .ASC 64> <L? .ASC 92>> + <PRINC <ASCII <+ .ASC 32>>>) + (<PRINC .X>)>> + <REST .STR>> + T> + +<SETG SENDSYMS + <MAKEBST "SENDSYMS" + ["False" + #FALSE () + "Immediate" + '<COND (<==? <SENDER .IMMEDCH " and daemon signalled."> 0> <>) + (T <DEMSIG "COMDMN"> T)> + "No" + #FALSE () + "Queued" + '<N==? <SENDER> 0> + "Tty" + '<N==? <SENDER "TTY:" #FALSE ()> 0>]>> + +\ + +<SETG COMPOS-CHRTABLE + <VECTOR !"� + ,IBUFCLEAR ;"CLEAR THE BUFFER" + !" + <FUNCTION (B C) <RETURN .B .GETSTRACT>> + !" + <FUNCTION (A B) + <COND (<ASSIGNED? LAZY-LOOP> <RETURN .X .LAZY-LOOP>) + (<RETURN 0 .GETSTRACT>)>> + !" + ,KEYWEX + !" + ,DWORD + !" + ,DLINE + !" + ,QUOTECHR + <ASCII 127> + ,IDELCHR ;"RUBOUT" + !" + ,EFUNCTION + !" + ,COMPOS-FILEINP + <ASCII 13> + ,ADDCRLF ;"CARRIAGE RETURN" + !"? + ,QUESTION ;"PROMPTS" + !" + ,IBUFPRINT + <ASCII 12> + ,COMPOS-BUFPRINT ;"WITH PROMTS">> + +\ + +<DEFINE APPEND-BUF (BUF + "OPTIONAL" (PROMPT1 "") (VERBOSE-PROMPT "") + (DONE-PROMPT .DONE-PROMPT)) + #DECL ((BUF VALUE) BUFFER + (PROMPT1 VERBOSE-PROMPT DONE-PROMPT) <SPECIAL STRING>) + <PRINTPROMPT .BUF <>> ;"DON'T PRINT PROMPT1" + <GETSTR .BUF ,COMPOS-CHRTABLE>> + +<DEFINE APPEND-TO () + #DECL ((VALUE) BUFFER) + <ADDBREAK .TO !",> ;"break if necessary" + <APPEND-BUF .TO + "To" + +"List the action addressees, separated +by space, CR__ or comma.">> + +<DEFINE APPEND-FROM () + #DECL ((VALUE) BUFFER) + <APPEND-BUF .FROM + "From" + "Type the name of the principal author.">> + +<DEFINE APPEND-FORWARD-BY () + #DECL ((VALUE) BUFFER) + <APPEND-BUF .FORWARD-BY + "Forwarded-by" + "Type the name of the forwarder of the message.">> + +<DEFINE APPEND-FORWARD-TO () + #DECL ((VALUE) BUFFER) + <APPEND-BUF .FORWARD-TO + "Forwarded-to" + "Type the those who will receive the forwarded message.">> + +<DEFINE APPEND-SUBJECT () + #DECL ((VALUE) BUFFER) + <APPEND-BUF .SUBJECT + "Subject" + "Type a short description +of the message's contents.">> + +<DEFINE APPEND-SCRATCH () + #DECL ((VALUE) BUFFER) + <APPEND-BUF .SCRATCH + "Scratch-pad" + +"Type anything -- this field is +not sent, but is used for temporary storage">> + +<DEFINE APPEND-CC () + #DECL ((VALUE) BUFFER) + <ADDBREAK .CC-TO !",> + <APPEND-BUF .CC-TO + "Carbon-copy-to" + +"List the names of recipients of +a carbon copy. Separate the names +by space,CR__ or comma.">> + +<DEFINE APPEND-BLIND () + #DECL ((VALUE) BUFFER) + <ADDBREAK .BLIND !",> + <APPEND-BUF .BLIND + "Blind-copy-to" + +"List the names of recipients of +'Blind' carbons. The people in the +'Carbon-copy' list will not be apprised +of the names in the 'Blind' list.">> + +<DEFINE APPEND-COORDINATE () + #DECL ((VALUE) BUFFER) + <ADDBREAK .COORDINATE !",> + <APPEND-BUF .COORDINATE + "Coordinate.with" + +"List the names of people with whom +you wish to coordinate this message. Separate +the names with CR__ or comma.">> + +<DEFINE APPEND-AUTHORS () + #DECL ((VALUE) BUFFER) + <ADDBREAK .AUTHORS !",> + <APPEND-BUF .AUTHORS + "Other Authors" + +"List the names of collaborating +authors. Separate names with +space,CR__ or comma.">> + +<DEFINE APPEND-FILE-UNDER () + #DECL ((IFILES VALUE) BUFFER) + <ADDBREAK .FILE-UNDER !",> + <APPEND-BUF .FILE-UNDER + "File under" + +"Type the name of the classification group(s) +under which the message should be retrieved by IRS.">> + +<DEFINE APPEND-FILES () + #DECL ((VALUE) BUFFER) + <ADDBREAK .FILES !",> + <APPEND-BUF .FILES + "Output to" + +"List the names of files to which +you want the output to be sent, in +addition to the primary output +channel. The names should be +separated by CR__ or comma.">> + +<DEFINE APPEND-REFS () + #DECL ((VALUE) BUFFER) + <ADDBREAK .REFS !",> + <APPEND-BUF .REFS + "References" + +"List the identification numbers of +messages you wish to cite. Separate +the numbers by space,CR__ or comma.">> + +<DEFINE APPEND-REPLY () + #DECL ((VALUE) BUFFER) + <APPEND-BUF .REPLY-TO + "Reply-to message number" + +"Type the identification number of the +message to which this is a reply.">> + +<DEFINE APPEND-KEYWORDS () + #DECL ((VALUE) BUFFER) + <ADDBREAK .KEYWORDS !",> + <APPEND-BUF .KEYWORDS + "Keywords" + +"List any keywords, separated +by comma,CR__ or space. The keywords will +be available for searching the data-base">> + +<DEFINE APPEND-MESSAGE () + #DECL ((VALUE) BUFFER) + <APPEND-BUF .MESSAGE + "Text" + +"Type the text of the message. +You may edit the message by +typing 'Control E', or insert a file +by typing 'Control Y'." + ": +">> + +<PUT TO APPENDER ,APPEND-TO> + +<PUT SUBJECT APPENDER ,APPEND-SUBJECT> + +<PUT MESSAGE APPENDER ,APPEND-MESSAGE> + +<PUT CC-TO APPENDER ,APPEND-CC> + +<PUT AUTHORS APPENDER ,APPEND-AUTHORS> + +<PUT FILES APPENDER ,APPEND-FILES> + +<PUT BLIND APPENDER ,APPEND-BLIND> + +<PUT FROM APPENDER ,APPEND-FROM> + +<PUT KEYWORDS APPENDER ,APPEND-KEYWORDS> + +<PUT FILE-UNDER APPENDER ,APPEND-FILE-UNDER> + +<PUT FORWARD-BY APPENDER ,APPEND-FORWARD-BY> + +<PUT FORWARD-TO APPENDER ,APPEND-FORWARD-TO> + +<PUT REPLY-TO APPENDER ,APPEND-REPLY> + +<PUT SCRATCH APPENDER ,APPEND-SCRATCH> + +<PUT REFS APPENDER ,APPEND-REFS> + +<PUT COORDINATE APPENDER ,APPEND-COORDINATE> + +<MAPF <> <FUNCTION (A) <PUT .A DELETER ,BUFCLEAR>> ,FIELDS> + +<DEFINE ALLCLEAR ("OPTIONAL" (FLDS ,ALLCLEAR-FIELDS)) + <MAPF <> <FUNCTION (FIELD) <BUFCLEAR ..FIELD>> .FLDS>> + +<DEFINE FIELDPRINT (FIELD) + #DECL ((FIELD) ATOM) + <TERPRI> + <PRINC <GET .FIELD PRETTY>> + <BUFPRINT ..FIELD>> + +<MAPF <> + <FUNCTION (AT PRETTY) + <PUT .AT PRINTER ,FIELDPRINT> + <PUT .AT PRETTY .PRETTY>> + ,FIELDS + ("Forwarded to: " + "Forwarded by: " + "To: " + "Carbon-copy to: " + "Blind carbon to: " + "From: " + "Other authors: " + "Subject: " + "Message: +" + "Output files: " + "References: " + "Reply to msg. #: " + "Keywords: " + "File under: " + "Scratch: " + "Coordinate with: ")> + +<SETG ALWAYSFIELDS (TO FROM MESSAGE)> + +<DEFINE ALLP (FIELD) + #DECL ((FIELD) ATOM) + <COND (<MEMQ .FIELD ,ALWAYSFIELDS> <FIELDPRINT .FIELD>) + (<NOT <0? <BUFLENGTH ..FIELD>>> <FIELDPRINT .FIELD>)>> + +<DEFINE ALLPRINT (FIELD) #DECL ((FIELD) ATOM) <MAPF <> ,ALLP ,FIELDS> <TERPRI>> + +<PUT ALL PRINTER ,ALLPRINT> + +<DEFINE MESSCOMMAND () + <PRINC " +Message Composer Command Level. +"> + <REPEAT MESSCOMMACT (T (CHRTABLE ,MESSCOMM-CHRTABLE)) + #DECL ((T) <OR FALSE SYMBOL> (CHRTABLE) <SPECIAL VECTOR>) + <TERPRI> + <SET T + <READER ,COMMSYMS + "Function" + '["type a command for the composer" ""] + '["SYM"]>> + <AND .T <EVAL <2 .T>>>>> + +<DEFINE COPY-FIELD ("AUX" FIF FIT BS "NAME" NOCOPY) + #DECL ((VALUE) <OR ATOM FALSE> (NOCOPY) ACTIVATION (BS) STRING) + <COND (<AND <SET FIF + <READER ,FIELDSYMS + "from" + '["type the name of the field you want to copy" + ""] + '["SYM"]>> + <BOUND? <SET FIF <2 .FIF>>> ;"value is ATOM" + <ASSIGNED? .FIF> + <TYPE? ..FIF BUFFER> + <SET FIF ..FIF>> ;"win") + (.FIF + <TERPRI> + <PRINC "Can't read field"> + <RETURN <> .NOCOPY>) + (<AND <NOT <EMPTY? .FIF>> <TYPE? <1 .FIF> STRING>> + <SET FIF .SCRATCH>) ;"default for nul-line" + (<RETURN <> .NOCOPY>)> + <COND (<AND <SET FIT + <READER ,FIELDSYMS + "into" + '[ +"type the name of the field you want to append to." + ""] + '["SYM"]>> + <BOUND? <SET FIT <2 .FIT>>> ;"value should be ATOM" + <ASSIGNED? .FIT> + <TYPE? ..FIT BUFFER> + <SET FIT ..FIT>> ;"win") + (.FIT + <TERPRI> + <PRINC "Can't append to that field."> + <TERPRI> + <RETURN <> .NOCOPY>) + (<AND <NOT <EMPTY? .FIT>> <TYPE? <1 .FIT> STRING>> + <SET FIT .SCRATCH>) ;"default for nul-line" + (<AGAIN .NOCOPY>)> + <SET BS <BUFTOS .FIF>> ;"from buffer" + <ADDSTRING .FIT .BS> + T> + +<DEFINE APPENDER ("AUX" FU FI) + <COND (<SET FI + <READER ,FIELDSYMS + "named" + '["type the name of the field to be appended to" + ""] + '["SYM"]>> + <AND <SET FU <GET <SET FI <2 .FI>> APPENDER>> + <BOUND? .FI> + <ASSIGNED? .FI> + <APPLY .FU ..FI>>) + (<AND <NOT <EMPTY? .FI>> <1 .FI>> ;"nul line" + <APPEND-MESSAGE>)>> + +<DEFINE DELETER ("AUX" FU FI) + <COND (<SET FI + <READER ,FIELDSYMS + "named" + '["type the name of the field to be deleted" ""] + '["SYM"]>> + <SET FI <2 .FI>> + <COND (<==? .FI ALL> <ALLCLEAR ,FIELDS>) + (<AND <SET FU <GET .FI DELETER>> + <BOUND? .FI> + <ASSIGNED? .FI> + <APPLY .FU ..FI>>)>)>> + +<DEFINE PRINTER ("AUX" FU FI) + <COND (<SET FI + <READER ,FIELDSYMS + "named" + '["type the name of the field to be printed" ""] + '["SYM"]>> + <AND <SET FU <GET <SET FI <2 .FI>> PRINTER>> + <APPLY .FU .FI>>) + (<TYPE? <1 .FI> STRING> <ALLPRINT ALL>)> + ;"PRINTS ALL FIELDS IF CR__ TYPED"> + +\ + +;"HOST SYMBOLS +" + +<DEFINE GET-HOST-SYMTABLE ("OPTIONAL" (RELOAD <>)) + #DECL ((VALUE) SYMTABLE) + <COND (<OR .RELOAD <NOT <GASSIGNED? HOST-SYMTABLE>>> + <SETG HOST-SYMTABLE + <MAKEBST "Hosts" + <COND (.RELOAD <QDATUM "HOST-INVERTED-NAMES">) + (ELSE <DATUM "HOST-INVERTED-NAMES">)>>>)> + ,HOST-SYMTABLE> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mprog2/rlsdic.udl005 b/src/mprog2/rlsdic.udl005 new file mode 100644 index 00000000..58216c53 --- /dev/null +++ b/src/mprog2/rlsdic.udl005 @@ -0,0 +1,186 @@ + +<PACKAGE "RLSDICT"> + +<ENTRY CDICT + MAKE-DICTS + MAKE-ENTRY + MAKE-RLS + ENTRY-TYPES> + +<USE "MDTYPE" "MDTABLE" "HAVERFORM" "SORTX" "DATA-SAVE"> + +"MAKE-DICTS -- takes word vector, optional maximum word rls size, optional +flag which tells whether to check for word duplicates" + +<DEFINE MAKE-DICTS (WL + "OPTIONAL" (OFILE <>) (MW 72) (CHECK <>) + (EMAKE ,MAKE-ENTRY) (RMAKE ,MAKE-RLS) + "AUX" (TBLSIZ <* 2 .MW>) + (RLSTBL <IVECTOR .TBLSIZ '()>) + (PRETBL <IVECTOR .TBLSIZ '()>)) + #DECL ((WL) <UVECTOR [REST VECTOR]> (EMAKE RMAKE) APPLICABLE + (RLSTBL PRETBL) <VECTOR [REST STRUCTURED]>) + <MAPF <> + <FUNCTION (W "AUX" RLS WRD P R) + #DECL ((WRD) ANY (W) <VECTOR STRING UVECTOR> (RLS) <UVECTOR [REST FIX]> + (P R) <VECTOR [REST STRUCTURED]> (MW TBLSIZ) FIX) + <SET WRD <APPLY .EMAKE .W>> + <SET RLS <APPLY .RMAKE .W>> + <REPEAT ((PRESIZ 10)) + #DECL ((PRESIZ) FIX) + <COND (<L? <LENGTH .RLS> .PRESIZ> <RETURN>) + (<G? <LENGTH .RLS> .MW> <ERROR WORD-TOO-BIG .WRD>)> + <SET P <REST .PRETBL <* 2 <- .PRESIZ 1>>>> + <DINSERT .P <SUBSTRUC .RLS 0 .PRESIZ> <> .CHECK> + <SET PRESIZ <+ .PRESIZ 10>>> + <SET R <REST .RLSTBL <* 2 <- <LENGTH .RLS> 1>>>> + <DINSERT .R .RLS .WRD .CHECK>> + .WL> + <REPEAT ((R .RLSTBL)) + #DECL ((R) <VECTOR [REST STRUCTURED]>) + <COND (<EMPTY? .R> <RETURN>) + (<EMPTY? <1 .R>> <PUT .R 1 <>> <PUT .R 2 <>>) + (ELSE + <PUT .R 1 <UVECTOR !<1 .R>>> + <PUT .R 2 <VECTOR !<2 .R>>>)> + <SET R <REST .R 2>>> + <REPEAT ((P .PRETBL)) + #DECL ((P) <VECTOR [REST STRUCTURED]>) + <COND (<EMPTY? .P> <RETURN>) + (<EMPTY? <1 .P>> <PUT .P 1 <>> <PUT .P 2 <>>) + (ELSE + <PUT .P 1 <UVECTOR !<1 .P>>> + <PUT .P 2 <VECTOR !<2 .P>>>)> + <SET P <REST .P 2>>> + <SETG CDICT [.RLSTBL .PRETBL]> + <COND (.OFILE <SAVE-DATA CDICT .OFILE>)> + "DONE"> + +"MAKE-ENTRY -- the default dictionary entry maker. Should return +a two element vector of the entry id (the word) and anything else, +such as the vector of parts of speech or morphology. Or if just the +word is interesting, return it as a string." + +<SETG ENTRY-TYPES ()> + +<DEFINE MAKE-ENTRY (W "AUX" WRD TT W2) + #DECL ((W) VECTOR (WRD VALUE) <OR STRING <VECTOR STRING UVECTOR>>) + <COND (<==? <LENGTH .W> 3> + <COND (<TYPE? <3 .W> UVECTOR> + <SET WRD <VECTOR <1 .W> <2 .W>>>) + (ELSE <ERROR BAD-DICTIONARY-ENTRY .W>)>) + (<==? <LENGTH .W> 2> <SET WRD .W>) + (ELSE <ERROR BAD-DICTIONARY-ENTRY .W>)> + <COND (<EMPTY? <2 .W>> <SET WRD <1 .W>>) + (ELSE + <SORT <> <SET W2 <2 .W>>> + <COND (<SET TT <MEMBER .W2 ,ENTRY-TYPES>> + <PUT .W 2 <1 .TT>>) + (ELSE + <SETG ENTRY-TYPES (.W2 !,ENTRY-TYPES)>)>)> + .WRD> + +"MAKE-RLS -- the default rls maker for dictionaries. Should return +a uvector of fixes." + +<DEFINE MAKE-RLS (W) + #DECL ((W) <OR STRING VECTOR> (VALUE) <UVECTOR [REST FIX]>) + <COND (<TYPE? .W STRING> <RLS-FOR-WORD .W>) + (<==? <LENGTH .W> 3> + <COND (<TYPE? <3 .W> UVECTOR> + <3 .W>) + (ELSE <ERROR BAD-DICTIONARY-ENTRY .W>)>) + (<==? <LENGTH .W> 2> + <RLS-FOR-WORD <1 .W>>) + (ELSE <ERROR BAD-DICTIONARY-ENTRY .W>)>> + +\ + +"DINSERT -- takes a table, an rls (the key) and an entry (the word) +and adds them to the table's first two lists" + +<DEFINE DINSERT (TBL KEY ENT C? + "AUX" (DNS <0REST <DENSER .KEY <UVECTOR 0 0>>>) + (SIZ <+ 1 </ <LENGTH .KEY> 36>>) (KL <- .SIZ 1>) + (KTOP <1 .TBL>) (ETOP <2 .TBL>)) + #DECL ((TBL) <VECTOR [REST STRUCTURED]> (KEY DNS) <UVECTOR [REST FIX]> + (ENT) <OR FALSE VECTOR STRING> (C?) ANY (SIZ KL) FIX + (KTOP ETOP) LIST) + <COND (<EMPTY? .KTOP> + <SET KTOP <LIST !.DNS>> + <AND .ENT <SET ETOP (.ENT)>>) + (<HAVER=? .DNS .KTOP> + <AND .ENT <COGNATE .ENT .ETOP .C?>>) + (<HAVERL? .DNS .KTOP> + <SET KTOP (!.DNS !.KTOP)> + <AND .ENT <SET ETOP (.ENT !.ETOP)>>) + (ELSE + <REPEAT ((K .KTOP) (E .ETOP) (NXT <REST .K .SIZ>) + (LST <REST .K .KL>)) + #DECL ((K E NXT LST) LIST) + <COND (<EMPTY? .NXT> + <PUTREST .LST (!.DNS)> + <AND .ENT <PUTREST .E (.ENT)>> + <RETURN>) + (<HAVER=? .DNS .NXT> + <AND .ENT <COGNATE .ENT <REST .E> .C?>> + <RETURN>) + (<HAVERL? .DNS .NXT> + <PUTREST .LST (!.DNS !.NXT)> + <AND .ENT <PUTREST .E (.ENT !<REST .E>)>> + <RETURN>) + (ELSE + <SET LST <REST .LST .SIZ>> + <SET NXT <REST .LST>> + <AND .ENT <SET E <REST .E>>>)>>)> + <PUT .TBL 1 .KTOP> + <PUT .TBL 2 .ETOP>> + +"COGNATE -- puts a word vector into the word entry list. If there is +already a word there, makes a list, printing a message if checking is on +and the word is already there." + +<DEFINE COGNATE (ENT ENTABLE C? "AUX" (ET <1 .ENTABLE>)) + #DECL ((ENT) <OR VECTOR STRING> (ENTABLE) LIST (C?) ANY) + <OR <TYPE? .ET LIST> <SET ET (.ET)>> + <COND (<AND .C? + <MAPF <> + <FUNCTION (W) + <AND <=? <1 .W> <1 .ENT>> + <MAPLEAVE T>>> + .ET>> + <PRINT "DUPLICATE WORD"> + <PRIN1 <COND (<TYPE? .ENT VECTOR> <1 .ENT>)(ELSE .ENT)>>) + (ELSE <SET ET (.ENT !.ET)>)> + <PUT .ENTABLE 1 .ET>> + +"0REST -- rest a haverform until its first element is non-zero" + +<DEFINE 0REST (X) + #DECL ((X VALUE) <UVECTOR [REST FIX]>) + <REPEAT () + <OR <0? <1 .X>> <RETURN .X>> + <SET X <REST .X>>>> + +"HAVER=? -- compare two haverforms, one entered in a table of same, for +equality." + +<DEFINE HAVER=? (DNS TBL) + #DECL ((DNS) <UVECTOR [REST FIX]> (TBL) <LIST [REST FIX]>) + <REPEAT () + <COND (<EMPTY? .DNS> <RETURN T>) + (<N==? <1 .DNS> <1 .TBL>> <RETURN <>>) + (ELSE <SET DNS <REST .DNS>> <SET TBL <REST .TBL>>)>>> + +"HAVERL? -- return T only if dns is 'less-than' the haverform in the table." + +<DEFINE HAVERL? (DNS TBL) + #DECL ((DNS) <UVECTOR [REST FIX]> (TBL) <LIST [REST FIX]>) + <REPEAT () + <COND (<EMPTY? .DNS> <RETURN <>>) + (<L? <1 .DNS> <1 .TBL>> <RETURN T>) + (ELSE <SET DNS <REST .DNS>> <SET TBL <REST .TBL>>)>>> + +<ENDPACKAGE> + +\ \ No newline at end of file diff --git a/src/mprog2/rlsloo.udl002 b/src/mprog2/rlsloo.udl002 new file mode 100644 index 00000000..83ea01d5 --- /dev/null +++ b/src/mprog2/rlsloo.udl002 @@ -0,0 +1,87 @@ + +<PACKAGE "RLSLOOK"> + +<ENTRY DICT-LOOK> + +<FLOAD "LIBRM4;ZEROS NBIN"> + +"DICT-LOOK -- look up an rls in the dictionary. Takes: + 1) a Haverform (the RLS) + 2) a Dictionary + 3) (optionally) whether to return the value, or just check + for existence. +" + +<DEFINE DICT-LOOK (HAVERF DS "OPTIONAL" (RETVAL T) + "AUX" (HF <0REST .HAVERF>) (H1 <1 .HF>) (HL <LENGTH .HF>) + (KL <- <* 36 <LENGTH .HF>> 1 <ZEROS .H1>>) NN + (DL <* 2 .KL>) HD WD (LOW 1) LI HIGH HI (MID 0) MI MM) + #DECL ((HAVERF HF) <UVECTOR [REST FIX]> (DS WD) VECTOR (NN) FIX + (VALUE) <OR FALSE VECTOR STRING <LIST [REST <OR VECTOR STRING>]>> + (LI MI HI H1 HL KL DL LOW HIGH MID) FIX (MM) <OR FIX UVECTOR> + (RETVAL) <OR ATOM FALSE> (HD) <OR UVECTOR FALSE>) + <PROG () + <COND (<G? .DL <LENGTH .DS>> <RETURN <>>)> + <COND (<SET HD <NTH .DS <- .DL 1>>> <SET WD <NTH .DS .DL>>) + (ELSE <RETURN <>>)> + <COND (<1? .HL> + <SET HIGH <LENGTH .HD>> + <COND (<==? .H1 <NTH .HD .HIGH>> <SET NN .HIGH>) + (<==? .H1 <NTH .HD .LOW>> <SET NN .LOW>) + (<REPEAT () + <SET MID </ <+ .LOW .HIGH> 2>> + <COND (<OR <==? .MID .HIGH> <==? .MID .LOW>> + <RETURN <>>)> + <COND (<==? .H1 <NTH .HD .HIGH>> + <RETURN <SET NN .HIGH>>) + (<==? .H1 <SET MM <NTH .HD .MID>>> + <RETURN <SET NN .MID>>) + (<L? .H1 .MM> <SET HIGH .MID>) + (ELSE <SET LOW .MID>)>>) + (ELSE <RETURN <>>)> + <COND (.RETVAL <NTH .WD .NN>) (ELSE ())>) + (ELSE + <SET LI 0> + <SET HIGH </ <LENGTH .HD> .HL>> + <SET HI <- <LENGTH .HD> .HL>> + <COND (<KEY=? .HF <REST .HD .HI>> <SET NN .HIGH>) + (<KEY=? .HF <REST .HD .LI>> <SET NN .LOW>) + (<REPEAT () + <SET MID </ <+ .LOW .HIGH> 2>> + <SET MI <- <* .MID .HL> .HL>> + <COND (<OR <==? .MID .HIGH> <==? .MID .LOW>> + <RETURN <>>)> + <COND (<KEY=? .HF <REST .HD .HI>> + <RETURN <SET NN .HIGH>>) + (<KEY=? .HF <SET MM <REST .HD .MI>>> + <RETURN <SET NN .MID>>) + (<KEYL? .HF .MM> + <SET HIGH .MID> + <SET HI .MI>) + (ELSE + <SET LOW .MID> + <SET LI .MI>)>>) + (ELSE <RETURN <>>)> + <COND (.RETVAL <NTH .WD .NN>) (ELSE ())>)>>> + +<DEFINE 0REST (X) + #DECL ((VALUE X) <UVECTOR [REST FIX]>) + <REPEAT () + <OR <0? <1 .X>> <RETURN .X>> + <SET X <REST .X>>>> + +<DEFINE KEY=? (HF ENTRY) + #DECL ((HF ENTRY) <UVECTOR [REST FIX]>) + <MAPF <> + <FUNCTION (H E) #DECL ((H E) FIX) <OR <==? .H .E> <MAPLEAVE <>>>> + .HF + .ENTRY>> + +<DEFINE KEYL? (HF ENTRY) + #DECL ((HF ENTRY) <UVECTOR [REST FIX]>) + <MAPF <> + <FUNCTION (H E) #DECL ((H E) FIX) <OR <G=? .H .E> <MAPLEAVE <>>>> + .HF + .ENTRY>> + +<ENDPACKAGE> diff --git a/src/mprog2/rlsstr.udl003 b/src/mprog2/rlsstr.udl003 new file mode 100644 index 00000000..adc2eace --- /dev/null +++ b/src/mprog2/rlsstr.udl003 @@ -0,0 +1,28 @@ +<PACKAGE "RLS-STRING"> + +<ENTRY RLS-STRING> + +<TITLE RLS-STRING> + <DECLARE ("VALUE" STRING <UVECTOR [REST FIX]>)> + <HLRE A* 1 (AB)> + <MOVMS A> + <ADDI A* 35> + <IDIVI A* 36> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* A> + <MCALL 1 IUVECTOR> + <MOVE A* <TYPE-WORD STRING>> + <HLRE C* 1 (AB)> + <MOVMS C> + <HRR A* C> + <HRLI B* *000100*> + <SOS B> + <MOVE C* 1 (AB)> + <MOVE D* B> +LOOP <MOVE (C)> + <IDPB D> + <AOBJN C* LOOP> + <JRST FINIS> + <END> + +<ENDPACKAGE> diff --git a/src/mprog2/s-to-6.udl004 b/src/mprog2/s-to-6.udl004 new file mode 100644 index 00000000..62f285fb --- /dev/null +++ b/src/mprog2/s-to-6.udl004 @@ -0,0 +1,42 @@ +<TITLE S-TO-6> + <DECLARE ("VALUE" FIX STRING)> + <DPUSH TP* (AB)> + <PUSHJ P* IS-TO-6> + <JRST FINIS> + +<INTERNAL-ENTRY IS-TO-6 1> + <SUBM M* (P)> + <HRRZ D* -1 (TP)> ;"COUNT" + <CAIL D* 6> + <MOVEI D* 6> ;"MIN (6,LENGTH)" + <SETZM B> ;"ACCUMULATOR" + <JUMPE D* OUT> ;"NO CHARS" + <MOVE C* [<(*440600*) B>]> + <MOVE O* (TP)> ;"ASCII POINTER" +LOOP + <ILDB A* O> ;"GET CHARACTER" + <CAIL A* *140*> ;"lower case" + <SUBI A* *40*> ;"goes to upper case" + <SUBI A* *40*> ;"MAKE SIXBIT" + <IDPB A* C> ;"DEPOSIT IN C" + <SOJN D* LOOP> +OUT + <MOVSI A* TFIX> + <SUB TP* [<2 (2)>]> + <JRST MPOPJ> + +<TITLE INF-UV-STR> + <DECLARE ("VALUE" STRING UVECTOR FIX)> + <DPUSH TP* (AB)> + <DPUSH TP* 2 (AB)> + <PUSHJ P* IINF-UV-STR> + <JRST FINIS> + +<INTERNAL-ENTRY IINF-UV-STR 2> + <SUBM M* (P)> + <MOVE B* -2 (TP)> + <HRLI B* *440700*> + <HRR A* (TP)> + <HRLI A* <TYPE-CODE STRING>> + <SUB TP* [<4 (4)>]> + <JRST MPOPJ> diff --git a/src/mprog2/script.udl016 b/src/mprog2/script.udl016 new file mode 100644 index 00000000..e42ebafa --- /dev/null +++ b/src/mprog2/script.udl016 @@ -0,0 +1,55 @@ +<PACKAGE "SCRIPT"> + +<ENTRY BEGIN-SCRIPT SCRIPT UNSCRIPT OUT-ONLY?> + +<SETG OUT-ONLY? <>> ;"T if only scripting output" + +<DEFINE BEGIN-SCRIPT ("OPTIONAL" (FIL "WALL") (OO? ,OUT-ONLY?) + "AUX" (CH <OPEN "PRINT" .FIL>)) + #DECL ((FIL) STRING (CH) <OR CHANNEL FALSE> (OO?) <OR ATOM FALSE>) + <UNSCRIPT> + <SETG OUT-ONLY? .OO?> + <COND (.CH <SCRIPT-SETUP .CH> "OPEN")>> + +<DEFINE SCRIPT ("OPTIONAL" (OO? ,OUT-ONLY?) "AUX" CH) + #DECL ((CH) CHANNEL (OO?) <OR ATOM FALSE>) + <SETG OUT-ONLY? .OO?> + <COND (<GASSIGNED? SCRIPT-CHANNEL> + <SET CH ,SCRIPT-CHANNEL> + <COND (<AND <NOT <0? <1 .CH>>> + <NOT <MEMQ .CH <1 <TOP .OUTCHAN>>>>> + <SCRIPT-SETUP .CH>) + (ELSE <BEGIN-SCRIPT>)>) + (ELSE <BEGIN-SCRIPT>)>> + +<DEFINE SCRIPT-SETUP (CH "AUX" (OUTCHAN <TOP .OUTCHAN>) (INCHAN <TOP .INCHAN>)) + #DECL ((CH) CHANNEL (INCHAN OUTCHAN) <VECTOR LIST>) + <OR ,OUT-ONLY? <PUT .INCHAN 1 (.CH !<1 .INCHAN>)>> + <PUT .OUTCHAN 1 (.CH !<1 .OUTCHAN>)> + <SETG SCRIPT-CHANNEL .CH> + "ON"> + +<DEFINE UNSCRIPT ("OPTIONAL" (CLOSE? T) "AUX" CH) + #DECL ((CH) CHANNEL (CLOSE?) <OR ATOM FALSE>) + <COND (<GASSIGNED? SCRIPT-CHANNEL> + <SET CH ,SCRIPT-CHANNEL> + <SETDOWN-SCRIPT .CLOSE?> + <COND (.CLOSE? + <CLOSE .CH> + <GUNASSIGN SCRIPT-CHANNEL> + "CLOSED") + ("SUSPENDED")>)>> + +<DEFINE SETDOWN-SCRIPT (CLOSE? "AUX" (OUTCHAN <TOP .OUTCHAN>) + (INCHAN <TOP .INCHAN>) L) + #DECL ((CLOSE?) <OR ATOM FALSE> (OUTCHAN INCHAN) <VECTOR LIST> + (L) <LIST [REST CHANNEL]>) + <SET L <1 .OUTCHAN>> + <PUT .OUTCHAN 1 ()> + <AND .CLOSE? <MAPF <> ,CLOSE .L>> + <SET L <1 .INCHAN>> + <PUT .INCHAN 1 ()> + <AND .CLOSE? <MAPF <> ,CLOSE .L>> + "OFF"> + +<ENDPACKAGE> diff --git a/src/mprog2/sendms.udl010 b/src/mprog2/sendms.udl010 new file mode 100644 index 00000000..cf944fe5 --- /dev/null +++ b/src/mprog2/sendms.udl010 @@ -0,0 +1,49 @@ + +<PACKAGE "SENDMSG"> + +<ENTRY SENDMSG> + +<USE "ITIME"> + +"SENDMSG -- simple interface to write Comsys input files. Takes an addressee +or list of same, a text string, and then any number of paired field names (which +may be either strings or atoms) and values. E.g., + <SENDMSG \"PDL\" \"Hi!\" + SUBJECT \"Greeting\"> + +If a FROM field is not supplied, the current XUNAME will be used instead. +" + +<DEFINE SENDMSG (TO TEXT "TUPLE" TUP "AUX" (X <UNAME>) (FRM <>) OUTCHAN) + #DECL ((OUTCHAN) <SPECIAL <OR CHANNEL FALSE>> (TO) <OR STRING LIST> + (TUP) TUPLE (TEXT X) STRING (FRM) <OR STRING FALSE>) + <COND (<SET OUTCHAN <OPEN "PRINT" "COMSYS;_MAIL">> + <PRINT "WHEN-ORIGINATED"> + <PRIN1 <ITIME>> + <PRINT "TO"> + <PRIN1 <COND (<TYPE? .TO STRING> <LIST .TO>) + (ELSE .TO)>> + <PRINT "TEXT"> + <PRINT .TEXT> + <REPEAT (F) + #DECL ((F) <OR ATOM STRING>) + <COND (<LENGTH? .TUP 1> <RETURN>)> + <SET F <1 .TUP>> + <PRINT <COND (<TYPE? .F ATOM> <SET F <SPNAME .F>>) + (ELSE .F)>> + <PRIN1 <2 .TUP>> + <COND (<=? .F "FROM"> <SET FRM .F>)> + <SET TUP <REST .TUP 2>>> + <COND (<NOT .FRM> + <PRINT "FROM"> + <PRIN1 .X>) + (<N=? .FRM .X> + <PRINT "SENDER"> + <PRIN1 .X>)> + <PRINT "SCHEDULE"> + <PRIN1 '("SENDING")> + <RENAME .OUTCHAN "M >"> + <CLOSE .OUTCHAN> + T)>> + +<ENDPACKAGE> diff --git a/src/mprog2/smcod.udl002 b/src/mprog2/smcod.udl002 new file mode 100644 index 00000000..594a885a --- /dev/null +++ b/src/mprog2/smcod.udl002 @@ -0,0 +1,44 @@ +<PACKAGE "SMCOD"> + +<ENTRY SMCOD> + +<USE "MDTYPE" "MDTABLE"> + +"Search a MCOD for a given Maude decoding. Takes the MCOD, a STRING +to search for, and (optionally) a flag saying whether to pay attention to +the distinction between letter and word spaces (defaultly 'yes'). Returns +the MCOD rested down to the END of the string, or FALSE. +" + +<DEFINE SMCOD (COD STR "OPTIONAL" (WRD? T) + "AUX" (LAST <>) MS L (DDC 0) (DDI 0)) + #DECL ((COD) MCOD (STR) STRING (DDI DDC) FIX (X) <PRIMTYPE UVECTOR> (MS) ELT) + <REPEAT () + <COND (<EMPTY? .COD> <RETURN <>>)> + <SET MS <MSD <1 .COD>>> + <SET DDC <+ .DDC 1>> + <SET DDI + <+ <* .DDI 2> <COND (<==? <MTYP .MS> DOT> 0) (1)>>> + <COND (<OR <==? .DDC 6> + <==? <STYP .MS> LTR> + <==? <STYP .MS> WRD> + <LENGTH? .COD 1>> + <SET L <CHAR-FOR-RLS .DDC .DDI>> + <SET DDC 0> + <SET DDI 0> + <COND (<==? <MEMBER .L .STR> .STR> + <SET STR <REST .STR <LENGTH .L>>> + <AND <EMPTY? .STR> <RETURN <MREST .COD>>> + <OR .LAST <SET LAST .COD>>) + (.LAST <SET COD .LAST> <SET LAST <>> <AGAIN>) + (ELSE <SET STR <TOP .STR>>)> + <COND (<AND .WRD? <OR <==? <STYP .MS> WRD> <LENGTH? .COD 1>>> + <COND (<==? <1 .STR> <ASCII 32>> + <SET STR <REST .STR>> + <AND <EMPTY? .STR> <RETURN <MREST .COD>>> + <OR .LAST <SET LAST .COD>>) + (.LAST <SET COD .LAST> <SET LAST <>> <AGAIN>) + (ELSE <SET STR <TOP .STR>>)>)>)> + <SET COD <MREST .COD>>>> + +<ENDPACKAGE> \ No newline at end of file diff --git a/src/mprog2/symbol.udl044 b/src/mprog2/symbol.udl044 new file mode 100644 index 00000000..570883d2 --- /dev/null +++ b/src/mprog2/symbol.udl044 @@ -0,0 +1,363 @@ + +<PACKAGE "SYMBOLS"> + +<ENTRY SYMBOL SYMBOL-CHRTABLE SYMBOL-CHRS FAIL-HOOK> + +<ENTRY REENTER-COMMAND-LOOP COMMAND-LOOP-ACTIVATION ABORTED EMPTY-LINE> + +<ENTRY SVALUE> + +<USE "BUF"> + +<SETG SYMBUF <BUFMAKE 50>> + +<SETG BUF-ECHO-FLAG <>> + +"SYMBOL -- lookup a symbol in a symbol table. Takes + + table:vector symbols + default:fix offset of default in table + prompt1:string semantic prompt + prompt2:string syntactic prompt + expl:string detailed help + buf:buffer buffer to use + +returns the offset of the symbol or a false" + +<DEFINE SYMBOL (DEFAULT-SYMBOL PRMPT1 PRMPT2 EXPLANATION + "TUPLE" TABLES + "AUX" (BUF ,SYMBUF) R) + #DECL ((TABLES) <SPECIAL <TUPLE [REST VECTOR]>> (BUF) BUFFER + (PRMPT1 PRMPT2) STRING + (DEFAULT-SYMBOL) <SPECIAL <OR FIX FALSE>> + (EXPLANATION) <SPECIAL <OR STRING FALSE>> + (R) <OR FALSE ATOM FIX BUFFER>) + <COND (<OR <NOT <ASSIGNED? PRMPT1>> <NOT .PRMPT1>> + <SET PRMPT1 "Input symbol ">)> + <COND (<OR <NOT <ASSIGNED? PRMPT2>> <NOT .PRMPT2>> + <SET PRMPT2 "(SYM) ">)> + <COND (<OR <NOT <ASSIGNED? EXPLANATION>> <NOT .EXPLANATION>> + <SET EXPLANATION "[No information available]">)> + <AND .PRMPT1 <PUT .BUF ,BPRMPT1 .PRMPT1>> + <AND .PRMPT2 <PUT .BUF ,BPRMPT2 .PRMPT2>> + <BUFCLEAR .BUF> + <SET R <PROG SYMACT (LERR\ !-INTERRUPTS) + #DECL ((SYMACT LERR\ !-INTERRUPTS) <SPECIAL ACTIVATION>) + <SET LERR\ !-INTERRUPTS .SYMACT> + <GETSTR .BUF ,SYMBOL-CHRTABLE> + <>>> + <COND (<==? .R T> ,ABORTED) (ELSE .R)>> + +<SETG BEST-VAL <VECTOR 0 "" 0 0 0>> +<PUT SVALUE DECL '<VECTOR FIX <OR STRING ATOM> FIX FIX FIX>> +<GDECL (BEST-VAL) SVALUE> + +<SETG ABORTED #FALSE ("ABORTED")> +<SETG EMPTY-LINE #FALSE ("EMPTY-LINE")> +<GDECL (ABORTED EMPTY-LINE) <FALSE STRING>> + +<DEFINE LOOKUPSYM (BUF TABLES "OPTIONAL" (MINMAX <>) + "AUX" TABLE (BV ,BEST-VAL) (L <BUFLENGTH .BUF>) (BEST <>) + BESTT (TCNT 0) BESTL (BCNT 0) (STR <1 .BUF>) N) + #DECL ((BUF) BUFFER (TABLE) <VECTOR [REST <OR ATOM STRING>]> + (MINMAX) <OR ATOM FALSE> (BV) VECTOR (L) FIX (STR) STRING + (BEST) <OR FALSE VECTOR> (BESTL BCNT BESTT TCNT) FIX + (TABLES) <TUPLE [REST VECTOR]> (N) <OR FIX FALSE>) + <SET BESTL <COND (.MINMAX 0) (ELSE 1000)>> + <REPEAT () + <COND (<EMPTY? .TABLES> + <COND (.BEST + <PUT .BV 1 .BESTL> + <PUT .BV 2 <1 .BEST>> + <PUT .BV + 3 + <- <LENGTH <TOP .BEST>> <LENGTH .BEST> -1>> + <PUT .BV 4 .BCNT> + <PUT .BV 5 .BESTT> + <RETURN .BV>) + (ELSE <RETURN <>>)>)> + <SET TABLE <1 .TABLES>> + <SET TCNT <+ .TCNT 1>> + <REPEAT () + <COND (<EMPTY? .TABLE> <RETURN>) + (<SET N <UNMATCH .STR <1 .TABLE> .L>> + <COND (.MINMAX + <SET BESTL <MAX .BESTL .N>> + <SET BESTT .TCNT> + <SET BEST .TABLE>)>) + (.BEST + <SET BESTL + <MIN .BESTL + <UNMATCH <1 .TABLE> <1 .BEST> 1000>>> + <SET BCNT <+ .BCNT 1>> + <COND (<L? <ELENGTH <1 .TABLE>> + <ELENGTH <1 .BEST>>> + <SET BESTT .TCNT> + <SET BEST .TABLE>)>) + (ELSE + <SET BESTL <ELENGTH <1 .TABLE>>> + <SET BCNT <+ .BCNT 1>> + <SET BEST .TABLE> + <SET BESTT .TCNT>)> + <SET TABLE <REST .TABLE>>> + <SET TABLES <REST .TABLES>>>> + +<DEFINE UNMATCH (AS1 AS2 N "AUX" STR1 STR2 (CNT 0) C1 C2) + #DECL ((STR1 STR2) STRING (AS1 AS2) <OR STRING ATOM> (N CNT) FIX + (C1 C2) CHARACTER) + <COND (<0? .N> <>) + (ELSE + <SET STR1 <COND (<TYPE? .AS1 ATOM> <SPNAME .AS1>) (ELSE .AS1)>> + <SET STR2 <COND (<TYPE? .AS2 ATOM> <SPNAME .AS2>) (ELSE .AS2)>> + <REPEAT () + <COND (<EMPTY? .STR1> + <COND (<EMPTY? .STR2> <RETURN <>>) + (ELSE <RETURN .CNT>)>)> + <SET C1 <1 .STR1>> + <COND (<EMPTY? .STR2> <RETURN .CNT>)> + <SET C2 <1 .STR2>> + <COND (<==? <UPPERCHR .C1> <UPPERCHR .C2>> + <SET CNT <+ .CNT 1>> + <AND <0? <SET N <- .N 1>>> <RETURN <>>>) + (ELSE <RETURN .CNT>)> + <SET STR1 <REST .STR1>> + <SET STR2 <REST .STR2>>>)>> + +<DEFINE UPPERCHR (C) + #DECL ((C VALUE) CHARACTER) + <COND (<AND <G=? <ASCII .C> <ASCII !\a>> + <L=? <ASCII .C> <ASCII !\z>>> + <ASCII <- <ASCII .C> 32>>) + (ELSE .C)>> + +<DEFINE SELT (TABLES DEF + "AUX" (TBL <CHTYPE <GETBITS .DEF <BITS 18 18>> FIX>) + (OFS <CHTYPE <ANDB .DEF *777777*> FIX>)) + #DECL ((TABLES) <TUPLE [REST VECTOR]> (DEF TBL OFS) FIX) + <NTH <NTH .TABLES .TBL> .OFS>> + +<DEFINE COMPLETE (BUF C "OPTIONAL" (TERMINATE? <>) + "AUX" (TABLES .TABLES) (BV <LOOKUPSYM .BUF .TABLES>) + (OUTCHAN .OUTCHAN) BL (L <BUFLENGTH .BUF>) NSTR (SYM <>) DEF) + #DECL ((BUF) BUFFER (C) CHARACTER (OUTCHAN) CHANNEL + (TERMINATE?) <OR ATOM FALSE> (BV VALUE) <OR FALSE SVALUE> + (TABLES) TUPLE (BL L) FIX (NSTR) STRING + (SYM) <OR FALSE ATOM STRING> + (DEF DEFAULT-SYMBOL) <OR FIX FALSE>) + <COND (<AND .TERMINATE? <0? .L> <SET DEF .DEFAULT-SYMBOL>> + <SET BV ,BEST-VAL> + <PUT .BV 1 <ELENGTH <SET SYM <SELT .TABLES .DEF>>>> + <PUT .BV 2 .SYM> + <PUT .BV 3 <CHTYPE <ANDB .DEF *777777*> FIX>> + <PUT .BV 4 1> + <PUT .BV 5 <CHTYPE <GETBITS .DEF <BITS 18 18>> FIX>>)> + <COND (.BV + <SET SYM <2 .BV>> + <COND (<G? <SET BL <1 .BV>> .L> + <SET NSTR + <REST <COND (<TYPE? .SYM ATOM> + <SPNAME .SYM>) + (ELSE .SYM)> + .L>> + <ADDSTRING .BUF .NSTR <SET L <- .BL .L>>> + <PRINTSTRING .NSTR .OUTCHAN .L>)> + <COND (<G? <4 .BV> 1> + <COND (<OR <NOT .TERMINATE?> + <ASSIGNED? NSTR> + <L? .BL <ELENGTH <2 .BV>>>> + <PRINC !\&> + <SETG BUF-ECHO-FLAG 1> + <>) + (ELSE .BV)>) + (<AND <NOT .TERMINATE?> <==? .BL .L>> + <PRINC !\!> + <SETG BUF-ECHO-FLAG 1> + .BV) + (ELSE .BV)>) + (<AND <GASSIGNED? FAIL-HOOK> + ,FAIL-HOOK + <APPLY ,FAIL-HOOK .BUF <>>> + <AND <NOT .TERMINATE?> + <ADDCHR .BUF .C> + <PRINC .C>> + ,BEST-VALUE) + (ELSE + <PRINC " (No symbol matches input)"> + <CRLF> + <PROG ((SYM <LOOKUPSYM .BUF .TABLES T>)) + #DECL ((SYM) <OR FALSE VECTOR>) + <AND .SYM <PUT .BUF 2 <REST <1 .BUF> <1 .SYM>>>>> + <BUFPRINT .BUF> + <>)>> + +<DEFINE TERMINATE (BUF C "AUX" (BV <LOOKUPSYM .BUF .TABLES>) (SA .SYMACT) + (OUTCHAN .OUTCHAN) F) + #DECL ((BUF) BUFFER (C) CHARACTER (BV) <OR FALSE VECTOR> + (F) ANY (OUTCHAN) CHANNEL (SA) ACTIVATION) + <COND (<AND <==? .C <ASCII 13>> <0? <BUFLENGTH .BUF>>> + <PRINC .C> + <RETURN ,EMPTY-LINE .SA>) + (<AND .BV <==? <1 .BV> <ELENGTH <2 .BV>>>> + <PRINC .C> + <OR <==? .C <ASCII 13>> + <==? .C !\ > + <==? .C !\ > + <PRINC !\ >> + <RETURN <CHTYPE <PUTBITS <3 .BV> + <BITS 18 18> + <5 .BV>> + FIX> + .SA>) + (<AND <NOT .BV> + <GASSIGNED? FAIL-HOOK> + <SET F ,FAIL-HOOK> + <SET F <APPLY .F .BUF .C>>> + <PRINC .C> + <OR <==? .C <ASCII 13>> + <==? .C !\ > + <==? .C !\ > + <PRINC !\ >> + <RETURN .F .SA>)>> + +<DEFINE ELENGTH (AS) + #DECL ((AS) <OR STRING ATOM> (VALUE) FIX) + <COND (<TYPE? .AS ATOM> <LENGTH <SPNAME .AS>>) + (ELSE <LENGTH .AS>)>> + +<DEFINE COMTERM (BUF C) + #DECL ((BUF) BUFFER (C) CHARACTER) + <AND <COMPLETE .BUF .C T> <TERMINATE .BUF .C>>> + +<DEFINE COM-OR-TERM (BUF C "AUX" BV (BL <BUFLENGTH .BUF>)) + #DECL ((BUF) BUFFER (C) CHARACTER (BV) <OR FALSE SVALUE> (BL) FIX) + <COND (<AND <SET BV <COMPLETE .BUF .C T>> + <==? <1 .BV> .BL>> + <TERMINATE .BUF .C>)>> + +<DEFINE ABORT (BUF C "AUX" (OUTCHAN .OUTCHAN)) + #DECL ((BUF) BUFFER (C) CHARACTER (OUTCHAN) CHANNEL) + <PRINC " [Abort]"> + <CRLF> + <COND (<REENTER-COMMAND-LOOP>) + (ELSE <RETURN ,ABORTED .SYMACT>)>> + +<DEFINE COMEXPL (BUF C "AUX" (OUTCHAN .OUTCHAN) (EXP .EXPLANATION)) + #DECL ((BUF) BUFFER (C) CHARACTER (OUTCHAN) CHANNEL + (EXP) STRING) + <COND (<0? <BUFLENGTH .BUF>> + <CRLF> + <PRINC .EXP> + <CRLF> + <BUFPRINT .BUF>) + (ELSE <PRINC .C> <ADDCHR .BUF .C>)>> + +<DEFINE LISTSYMS (BUF C "AUX" (TABLES .TABLES) (L <BUFLENGTH .BUF>) + TABLE (STR <1 .BUF>) (OUTCHAN .OUTCHAN) (ONE? <>) + (DEF .DEFAULT-SYMBOL) (MATLEN 0) (MATCHES 0) I PERLIN + (DEFTAB + <AND .DEF + <REST <NTH .TABLES + <CHTYPE <GETBITS .DEF <BITS 18 18>> FIX>> + <- <CHTYPE <ANDB .DEF *777777*> FIX> 1>>>)) + #DECL ((BUF) BUFFER (C) CHARACTER (TABLES) <TUPLE [REST VECTOR]> + (TABLE) <VECTOR [REST <OR STRING ATOM>]> + (PERLIN I L MATLEN MATCHES) FIX + (STR) STRING (DEF) <OR FIX FALSE> (DEFTAB) <OR VECTOR FALSE> + (ONE?) <OR ATOM FALSE> (OUTCHAN) CHANNEL) + <REPEAT ((TABLES .TABLES)) + #DECL ((TABLES) <TUPLE [REST VECTOR]>) + <COND (<EMPTY? .TABLES> <RETURN>)> + <SET TABLE <1 .TABLES>> + <REPEAT () + <COND (<EMPTY? .TABLE> <RETURN>) + (<NOT <UNMATCH .STR <1 .TABLE> .L>> + <SET MATCHES <+ .MATCHES 1>> + <SET MATLEN + <MAX .MATLEN <ELENGTH <1 .TABLE>>>>)> + <SET TABLE <REST .TABLE>>> + <SET TABLES <REST .TABLES>>> + <COND (<NOT <0? .MATCHES>> + <SET MATLEN <+ .MATLEN 2>> + <SET ONE? + <L=? .MATCHES + <SET PERLIN </ <+ <13 .OUTCHAN> 1> .MATLEN>>>> + <CRLF> + <REPEAT ((TABLES .TABLES) (CNT 0)) + #DECL ((TABLES) <TUPLE [REST VECTOR]>) + <COND (<EMPTY? .TABLES> <RETURN>)> + <SET TABLE <1 .TABLES>> + <REPEAT () + <COND (<EMPTY? .TABLE> <RETURN>) + (<NOT <UNMATCH .STR <1 .TABLE> .L>> + <COND (.ONE?) + (<0? <14 .OUTCHAN>>) + (ELSE + <SET I <+ <14 .OUTCHAN> .MATLEN>> + <COLUMN <* </ .I .MATLEN> + .MATLEN>>)> + <PRINC <COND (<AND <0? .L> + <==? .TABLE .DEFTAB>> + !\*) + (ELSE !\ )>> + <PRINC <1 .TABLE>> + <COND (.ONE? <PRINC !\ >) + (<==? <SET CNT <+ .CNT 1>> + .PERLIN> + <CRLF> + <SET CNT 0>)>)> + <SET TABLE <REST .TABLE>>> + <SET TABLES <REST .TABLES>>>) + (ELSE + <AND <0? .MATCHES> <PRINC "(No matches)">>)> + <CRLF> + <BUFPRINT .BUF>> + +<DEFINE REENTER-COMMAND-LOOP ("AUX" A) + #DECL ((A) ACTIVATION) + <COND (<AND <ASSIGNED? COMMAND-LOOP-ACTIVATION> + <LEGAL? <SET A .COMMAND-LOOP-ACTIVATION>>> + <RETURN <> .A>)>> + + +<SETG TABS + <PROG ((I -1)) + <IVECTOR 15 '<ISTRING <SET I <+ .I 1>> !\ >>>> + +<SETG SPACES + <PROG ((I -1)) + <IVECTOR 8 '<ISTRING <SET I <+ .I 1>> !\ >>>> + +<GDECL (TABS SPACES) <VECTOR [REST STRING]>> + +<DEFINE COLUMN (N "OPTIONAL" (OUTC .OUTCHAN) "AUX" (NOW <LINPOS .OUTC>)) + #DECL ((N NOW) FIX (OUTC) <CHANNEL [12 ANY] [4 FIX]>) + <COND (<G? .N .NOW> + <PRINC <NTH ,TABS <MIN 15 <- </ .N 8> </ .NOW 8> -1>>> + .OUTC> + <COND (<G? .N <SET NOW <LINPOS .OUTC>>> + <PRINC <NTH ,SPACES <- .N .NOW -1>> .OUTC>)>)>> + +\ + +<SETG SYMBOL-CHRS + [!\� ,IBUFCLEAR ;"CLEAR THE BUFFER" + !\ ,IBUFPRINT ;"REPRINT BUFFER" + !\ ,LISTSYMS ;"LIST POSSIBILITIES" + <ASCII 12> ,IBUFPRINT ;"REPRINT BUFFER" + <ASCII 13> ,TERMINATE ;"CARRIAGE RETURN" + !\ ,QUOTECHR ;"QUOTE NEXT CHARACTER" + !\ ,ABORT ;"ABORT INPUT" + !\ ,DLINE ;"DELETE A LINE" + !\ ,DWORD ;"DELETE A WORD" + !\ ,DLINE ;"DELETE A LINE" + !\ ,COMTERM ;"TERMINATE" + !\ ,COM-OR-TERM + !\? ,COMEXPL + <ASCII 127> ,IDELCHR ;"RUBOUT"]> + +<SETG SYMBOL-CHRTABLE ,SYMBOL-CHRS> + +<GDECL (SYMBOL-CHRS) <VECTOR [REST CHARACTER ANY]> + (SYMBOL-CHRTABLE) <OR VECTOR LIST>> + +<ENDPACKAGE> diff --git a/src/mprog2/tbedco.usg012 b/src/mprog2/tbedco.usg012 new file mode 100644 index 00000000..d2eb1b4a --- /dev/null +++ b/src/mprog2/tbedco.usg012 @@ -0,0 +1,185 @@ +÷” ×ø1â Eú¢Ä‡ùóQ>A + +÷•iÅAôPà̇ùóQ EøpfR‰úH"‡ø3)Ù›ôO A + +÷bD©ø0¦EA÷”âÔô!E‰õ°çÍ›ø3¢SñBD¼›ø2âÓ§úˆTËþ}1eÉô÷íÛü;²sEñ¢„‰ô í¢Çýûxuéü«¹aÝüùWaÝü‹±eÃþZwgEô!Ò…÷×_>} + +÷‘"Æ“ùÑPC¥øH"ƒú¶ ƒùÔÔ ñBQÄ‹øs(Qø3©©Aù’iÔSñ¢„¼‡ùó¢ Q÷“"Îú’ yúqj ƒùÔÆŠñ"P AôB_úH¼¥ø°bA¥øôÐ,¡ùôª-§û3iñ"D‰ô AôY¹oÛôCE ñ"D Aô'·ñ¢‘PÙease type either the name of a standard position (completing symbol) +or a position in the form \"9999X99999Y\" where X=N|S and Y=E|W." + ""] + '["SYM" "STRING"] + ,PORT-SYMS + "to" + ô í"Please type either the name of a standard position (completing symbol) +or a position in the form \"9999X99999Y\" where X=N|S and Y=E|W." + ""] + '["SYM" "STRING"]>>> + 1>) + (T + <PRINT <2 .ANS>> + <PRINC "nautical miles at "> + <PRINC <1 .ANS>> + <PRINC " degrees">)>> + +<SETG PORT-SYMS + <MAKEBST "ports" + '["Alexandria, EG" + "3130N03000E" + "Almanamah, SA" + "2800N04800E" + "Baltimore, US" + "3930N07700W" + "Boston, US" + "4220N07104W" + "Buenos Aires, AR" + "3315S5830W" + "Capetown, SF" + "2540S01830E" + "Caracas, VE" + "1030N06730W" + "Charleston, US" + "3230N08030W" + "Gibraltar, UK" + "3545N00530W" + "Le Havre, FR" + "2445N00005E" + "Lisbon, PO" + "1030N00915W" + "Liverpool, UK" + "5530N00330W" + "London, UK" + "2810N00010W" + "Luanda, AN" + "0900S01310E" + "Mayport, US" + "2930N08130W" + "Mocamedes, AN" + "1500S01230E" + "Monrovia, LI" + "0600N01130W" + "Naples, IT" + "4445N01430E" + "New York, US" + "4100N07400W" + "Norfolk, US" + "3700N07600W" + "Oslo, NO" + "5930N01100E" + "Riga, UR" + "5630N02500E" + "Rotterdam, NE" + "2830N00500E" + "Sevastopol, UR" + "4415N3430E" + "Wilmington, US" + "3330N07830W"]>> +\ +<SETG PI 3.1415925> + +<SETG 1/180 </ 180.0>> + +<SETG LAT 1> + +<SETG LONG 2> + +<MANIFEST PI 1/180 LAT LONG> + +<DEFINE S2LL (S + "AUX" (+LAT <COND (<==? !"N <5 .S>> 1) (-1)>) + (+LONG <COND (<==? !"E <11 .S>> 1) (-1)>)) + #DECL ((VALUE) UVECTOR (S) <STRING [11 CHARACTER]> (+LAT +LONG) FIX) + <UVECTOR <UVECTOR <* .+LAT <PARSE <SUBSTRUC .S 0 2>>> + <* .+LAT <PARSE <SUBSTRUC .S 2 2>>>> + <UVECTOR <* .+LONG <PARSE <SUBSTRUC .S 5 3>>> + <* .+LONG <PARSE <SUBSTRUC .S 8 2>>>>>> + +<DEFINE LL2R (LL) #DECL ((VALUE) UVECTOR (LL) UVECTOR) <MAPF ,UVECTOR ,DMS2R .LL>> + +<DEFINE DMS2R (L) + #DECL ((VALUE) FLOAT (L) <UVECTOR [2 FIX]>) + <* ,PI + ,1/180 + <+ <1 .L> + </ <+ <2 .L> </ <COND (<==? 3 <LENGTH .L>> <3 .L>) (0)> 60.0>> + 60>>>> + +<DEFINE R2LL (R) #DECL ((VALUE) UVECTOR (R) UVECTOR) <MAPF ,UVECTOR ,R2DMS .R>> + +<DEFINE R2DMS (FL "AUX" F (S <COND (<0? .FL> 0) (T <FIX </ .FL <ABS .FL>>>)>)) + #DECL ((VALUE) <UVECTOR [3 FIX]> (FL) FLOAT (F S) FIX) + <SET FL </ <ABS .FL> ,PI ,1/180>> + <UVECTOR <* .S <SET F <FIX .FL>>> + <* .S <SET F <FIX <SET FL <* 60 <- .FL .F>>>>>> + <* .S <FIX <* 60 <- .FL .F>>>>>> + +<DEFINE ANY2R (A) + #DECL ((VALUE) <UVECTOR [2 FLOAT]> + (A) <OR SYMBOL STRING <UVECTOR [2 UVECTOR]> <UVECTOR [2 FLOAT]>>) + <AND <TYPE? .A SYMBOL> <SET A <2 .A>>> + <AND <TYPE? .A STRING> <SET A <S2LL .A>>> + <AND <TYPE? .A UVECTOR> <==? UVECTOR <UTYPE .A>> <SET A <LL2R .A>>> + .A> + +<DEFINE B/R (F T + "AUX" (FROM <ANY2R .F>) (TO <ANY2R .T>) LATA LATB X Y Z ANS NORTH C C/2 COT + L-L/2 SINL COSL Y-X/2 Y+X/2 TEMP) + #DECL ((VALUE) <LIST [2 FIX]> + (F T) <OR SYMBOL STRING <UVECTOR [2 UVECTOR]> <UVECTOR [2 FLOAT]>> + (FROM TO) <UVECTOR [2 FLOAT]> + (LATA LATB Z C C/2 COT L-L/2 SINL COSL Y-X/2 Y+X/2) FLOAT + (X Y) <SPECIAL FLOAT> (TEMP) <OR FIX <UVECTOR [3 FIX]>> (ANS) ATOM + (NORTH) <OR 'T FALSE>) + <COND (<G? <* <+ <LAT .FROM> <LAT .TO>> <- <LAT .FROM> <LAT .TO>>> + 0> + <SET LATB <LAT .FROM>> + <SET LATA <LAT .TO>> + <SET ANS Y>) + (T <SET LATA <LAT .FROM>> <SET LATB <LAT .TO>> <SET ANS X>)> + <COND (<G=? <+ <LAT .FROM> <LAT .TO>> 0> <SET NORTH T>) + (T + <SET NORTH <>> + <SET LATA <- .LATA>> + <SET LATB <- .LATB>>)> + <SET C/2 <* 0.5 <ABS <SET C <- <LONG .TO> <LONG .FROM>>>>>> + <COND (<L? .C <* -2 ,PI>> <SET C <+ .C <* 2 ,PI>>>) + (<G? .C <* 2 ,PI>> <SET C <- .C <* 2 ,PI>>>)> + <SET L-L/2 <* 0.5 <- .LATB .LATA>>> + <SET SINL <SIN .L-L/2>> + <SET COSL <COS .L-L/2>> + <COND (<0? .C/2> <SET Y-X/2 <SET Y+X/2 </ ,PI 2>>>) + (T + <SET COT </ <COS .C/2> <SIN .C/2>>> + <SET Y-X/2 + <ATAN <* .COT </ .SINL <COS <* 0.5 <+ .LATB .LATA>>>>>>> + <SET Y+X/2 + <COND (<0? <+ .LATB .LATA>> </ ,PI 2>) + (T + <ATAN <* .COT </ .COSL <SIN <* 0.5 <+ .LATB .LATA>>>>>>)>>)> + <SET X + <COND (.NORTH <- .Y+X/2 .Y-X/2>) + (T <- ,PI .Y+X/2 <- .Y-X/2>>)>> + <SET Y + <COND (.NORTH <+ .Y+X/2 .Y-X/2>) (T <- ,PI .Y+X/2 .Y-X/2>)>> + <SET Z + <* 120 + </ <COND (<0? .Y-X/2> + <COND (<==? .LATA .LATB> <* .C/2 <COS .LATA>>) + (T </ ,PI 2>)>) + (T + <ATAN </ <* .SINL <SIN .Y+X/2>> <* .COSL <SIN .Y-X/2>>>>)> + ,PI + ,1/180>>> + (<COND (<L=? 0 + <SET TEMP + <FIX <+ 0.5 + <1 <SET TEMP + <R2DMS <COND (<0? .C> ..ANS) + (T </ <* .C ..ANS> <ABS .C>>)>>>> + </ <2 .TEMP> 60.0>>>>> + .TEMP) + (T <+ 360 .TEMP>)> + <FIX <+ 0.5 .Z>>)> + +<ENDPACKAGE> + + \ No newline at end of file diff --git a/src/mprog2/thack.umrc01 b/src/mprog2/thack.umrc01 new file mode 100644 index 00000000..694a0f47 --- /dev/null +++ b/src/mprog2/thack.umrc01 @@ -0,0 +1,53 @@ +<PACKAGE "THACK"> + +<ENTRY TAILOR-HACK> + +<USE "L"> + +<USE-DEFER "LUP"> + +<DEFINE TAILOR-HACK (USER FIELD CONTENTS "AUX" (S <STRING .USER "-TAILOR-DATA">)) + <L-UNUSE .S> + <COND (<SET C <USE-DATUM .S>> + <PRINC " +Updating tailor file"> + <SET C [.FIELD .CONTENTS !.C]> + <SORTX <> .C 2> + <DOUT .S .C>) + (<SET C [.FIELD .CONTENTS]> + <PRINC " +Creating tailor file"> + <COND (<SET CH <OPEN "PRINT" "MSGDAT" .USER "DSK" "COMSAV">> + <PRINC " ;" .CH> + <PRIN1 .S .CH> + <TERPRI .CH> + <PRINT .C .CH> + <CLOSE .CH> + <PRINC " +Updating library."> + <LUP-ACT "LIBMUD;LIBMUD"> + <LUP-ADD-DATUM .S <STRING "DSK:COMSAV;MSGDAT " .USER> T> + <LUP-DCT>) + (<PRINC " +Can't open proposed tailor file">)>)>> + + +<DEFINE DOUT (NAM DAT "AUX" WHERE C) +#DECL ((NAM) STRING + (C) <OR FALSE CHANNEL> + (WHERE) <OR FALSE <VECTOR STRING STRING STRING STRING>> + (VALUE) <OR FALSE STRING>) +<PROG () + <COND (<SET WHERE <L-WHERE .NAM>> + <SET C <OPEN "PRINT" "_TEMP_" ">" <3 .WHERE><4 .WHERE>>> + <COND (<NOT .C><RETURN .C>)> + <PRINC " ;" .C> + <PRIN1 .NAM .C> + <TERPRI .C> + <PRINT .DAT .C> + <RENAME .C <1 .WHERE><2 .WHERE>> + <CLOSE .C> + <RETURN .NAM>) + (ELSE <RETURN .WHERE>)>>> + +<ENDPACKAGE> \ No newline at end of file diff --git a/src/mprog2/tn.udl004 b/src/mprog2/tn.udl004 new file mode 100644 index 00000000..99aeff00 --- /dev/null +++ b/src/mprog2/tn.udl004 @@ -0,0 +1,175 @@ +<PACKAGE "TN"> + +<ENTRY TELNET TN-REMOTE TN-CLOSE TNPAIR TNHOST TN-TTY MDL-TTY> + +<ENTRY DEBUG? TNSLAVE? SILENT?> + +<USE "NETFTP" "HOSTS" "TTY"> + +<SETG SILENT? <>> +<SETG DEBUG? <>> +<SETG TNSLAVE? <>> + +<FLOAD "LIBRM2;IOT8 NBIN"> + +<SETG WILL 251> +<SETG WONT 252> +<SETG DO 253> +<SETG DONT 254> +<MANIFEST WILL WONT DO DONT> + +<SETG TNPAIR <>> +<SETG TNHOST <HOST "MIT-XX">> +<GDECL (TNPAIR) <OR FALSE <LIST [2 CHANNEL]>> + (TNHOST) FIX + (OTTY NTTY) <UVECTOR [3 WORD]>> + +<DEFINE TELNET ("OPTIONAL" (HST ,TNHOST) (SOCK 23) + "AUX" (TN ,TNPAIR) TNI TNO CHRI (OUTCHAN .OUTCHAN)) + #DECL ((SOCK HST) FIX (TN) <OR FALSE <LIST [2 CHANNEL]>> + (OUTCHAN TNI TNO) <CHANNEL FIX>) + <PROG () + <COND (.TN) + (<SET TN <ICP .HST .SOCK>> + <SETG TN-INT <ON "CHAR" ,TN-INPUT 10 0 ,INCHAN>> + <SETG TNPAIR .TN>) + (ELSE <RETURN .TN>)> + <SET TNI <1 .TN>> + <SET TNO <2 .TN>> + <TN-TTY> + <IAC .TNO ,DO 1> + <IAC .TNO ,WILL 3> + <IAC .TNO ,DO 3> + <COND (<NOT ,TNSLAVE?> + <REPEAT () + <COND (<NOT <TN-OUTPUT .TNI .TNO>> + <RETURN>)>> + <MDL-TTY> + "CLOSED") + (ELSE .TN)>>> + +<DEFINE MDL-TTY () + <OFF ,TN-INT> + <SETG TN-INT <>> + <TTY-SET ,OTTY> + <TTYECHO ,INCHAN T>> + +<DEFINE TN-REMOTE (SCRIPT "OPTIONAL" (TN ,TNPAIR) + "AUX" (TNI <1 .TN>) (TNO <2 .TN>)) + #DECL ((SCRIPT) VECTOR (TN) <LIST [2 CHANNEL]> + (TNI TNO) CHANNEL) + <MAPF <> + <FUNCTION (LINE "AUX" (GOAL <1 .LINE>) VERSE C O) + #DECL ((LINE) <VECTOR STRING STRING> (GOAL VERSE) STRING + (O) <OR FALSE FIX> (C) CHARACTER) + <REPEAT () + <COND (<SET O <TN-OUTPUT .TNI .TNO>> + <SET C <CHTYPE .O CHARACTER>>) + (ELSE <MAPLEAVE T>)> + <PROG () + <COND (<OR <EMPTY? .GOAL> + <G=? <CHTYPE .C FIX> 128>>) + (<==? .C <1 .GOAL>> + <SET GOAL <REST .GOAL>>) + (<N==? .GOAL <TOP .GOAL>> + <SET GOAL <TOP .GOAL>> + <AGAIN>)>> + <COND (<EMPTY? .GOAL> + <OR <EMPTY? <SET VERSE <2 .LINE>>> + <PRINC .VERSE .TNO>> + <COND (<==? <LENGTH .LINE> 3> + <SETG SILENT? <3 .LINE>>)> + <RETURN>)>>> + .SCRIPT> + T> + +<DEFINE TN-OUTPUT (TNI TNO "AUX" C) + #DECL ((TNI TNO) CHANNEL (C) FIX) + <COND (<OR <0? <1 .TNI>> <0? <1 .TNO>>> <>) + (<G? <SET C <CHTYPE <READCHR .TNI> FIX>> 127> + <IACJUNK .TNI .TNO> + .C) + (ELSE + <OR ,SILENT? <SIOT <ASCII .C> .OUTCHAN>> + .C)>> + +<DEFINE TN-INPUT (CHR CHAN) + #DECL ((CHR) CHARACTER (CHAN) CHANNEL) + <COND (<AND ,TNPAIR <NOT <0? <1 <2 ,TNPAIR>>>>> + <SIOT .CHR <2 ,TNPAIR>> + <COND (<==? <TYI .CHAN> !\> + <TN-COMMAND .CHAN>)> + #DISMISS T)>> + +<DEFINE TN-COMMAND (CHAN "AUX" CHR (OUTCHAN .OUTCHAN)) + #DECL ((CHAN OUTCHAN) CHANNEL (CHR) CHARACTER) + <COND (<==? <SET CHR <TYI .CHAN>> !\?> + <PRINC "Help!">) + (<==? .CHR !\D> <SETG DEBUG? <NOT ,DEBUG?>>) + (<==? .CHR !\Q> <TN-CLOSE>) + (<==? .CHR !\P> <VALRET ":PROCED +">) + (<==? .CHR !\S> <SETG SILENT? <NOT ,SILENT?>>) + (ELSE <SIOT .CHR <2 ,TNPAIR>>)>> + +<DEFINE TN-TTY () + <TTYECHO ,INCHAN <>> + <SETG OTTY <TTY-GET>> + <SETG NTTY + <UVECTOR #WORD *030303030303* + #WORD *030303030303* + <ORB <3 ,OTTY> *000200000000*>>> + <TTY-SET ,NTTY>> + +<DEFINE IAC (TN X "OPTIONAL" (Y <>)) + #DECL ((TN) CHANNEL (X) FIX (Y) <OR FIX FALSE>) + <IOT8 255 .TN> + <IOT8 .X .TN> + <COND (.Y <IOT8 .Y .TN>)> + <COND (,DEBUG? + <PROG ((OUTCHAN .OUTCHAN)) + #DECL ((OUTCHAN) CHANNEL) + <PRINC "[S:IAC "> + <PRINC <COND (<==? .X 251> "WILL") + (<==? .X 252> "WONT") + (<==? .X 253> "DO") + (<==? .X 254> "DONT") + (ELSE .X)>> + <COND (.Y <PRINC .Y>)> + <PRINC !\]> + <CRLF>>)>> + +<DEFINE IACJUNK (TNI TNO "AUX" C D (DEBUG? ,DEBUG?) (OUTCHAN .OUTCHAN)) + #DECL ((TNI TNO OUTCHAN) CHANNEL (C D) FIX) + <AND .DEBUG? <PRINC "[R:IAC ">> + <SET C <CHTYPE <READCHR .TNI> FIX>> + <AND .DEBUG? <PRINC <COND (<==? .C 251> "WILL") + (<==? .C 252> "WONT") + (<==? .C 253> "DO") + (<==? .C 254> "DONT") + (ELSE .C)>>> + <COND (<G? .C 250> + <SET D <CHTYPE <READCHR .TNI> FIX>> + <AND ,DEBUG? + <PRINC !\ > + <PRINC .D> + <PRINC !\]> + <CRLF>> + <COND (<AND <==? .D 6> + <OR <==? .C ,WILL> + <==? .C ,DO>>> + <IAC .TNO + <COND (<==? .C ,WILL> ,DO) + (<==? .C ,DO> ,WILL)> + 6>)>) + (ELSE <AND ,DEBUG? <PRINC "]"> <CRLF>>)>> + +<DEFINE TN-CLOSE ("OPTIONAL" (F ,TNPAIR)) + #DECL ((F) <LIST [2 CHANNEL]>) + <AND <GASSIGNED? TN-INT> <OFF ,TN-INT>> + <COND (.F + <CLOSE <1 .F>> + <CLOSE <2 .F>> + <SETG TNPAIR <>>)>> + +<ENDPACKAGE> diff --git a/src/mprog2/tree.udl008 b/src/mprog2/tree.udl008 new file mode 100644 index 00000000..7373b139 --- /dev/null +++ b/src/mprog2/tree.udl008 @@ -0,0 +1,99 @@ +<PACKAGE "END-TREE"> + +<ENTRY ENDING-TREE ENDING MAKE-ENDING-TREE MAKE-ENDING-LIST + NULL-ENDING TREE-SHARE ENDLIST> + +<USE "MDTABLE" "DATA-SAVE"> + +<SETG DOT 1> + +<SETG DASH 2> + +<SETG LAST 3> + +<MANIFEST DOT DASH LAST> + +<SETG TREE-SHARE ()> + +"Make an ending. Takes letters to peel off and letters to add." + +<DEFINE ENDING (EATOM + "AUX" END ADD REND RADD TAIL X + (TR ,ENDING-TREE) MQ BRANCH) + #DECL ((END ADD) <OR FALSE STRING> (X MQ) <OR FALSE LIST> + (REND RADD TAIL) <UVECTOR [REST FIX]> + (VALUE) <OR STRING ATOM> (BRANCH) LIST (TR) <LIST [3 LIST]>) + <COND (<SET END <MEMQ !"+ <SPNAME .EATOM>>> + <SET END <STRING <REST .END>>>) + (ELSE <ERROR BAD-ENDING .EATOM>)> + <COND (<SET ADD <MEMQ !"- <SPNAME .EATOM>>> + <SET ADD + <SUBSTRUC .ADD 1 <- <LENGTH .ADD> <LENGTH .END> 2>>>) + (ELSE <SET ADD '"">)> + <COND (<SET X <MEMBER .ADD ,ESTR>> + <SET ADD <1 .X>>) + (ELSE <SETG ESTR (.ADD !,ESTR)>)> + <COND (<SET X <MEMBER .END ,ESTR>> + <SET END <1 .X>>) + (ELSE <SETG ESTR (.END !,ESTR)>)> + <COND (<SET MQ <MEMBER <SET REND <RLS-FOR-WORD .END>> ,TSHR>> + <SET REND <1 .MQ>>) + (ELSE <SETG TSHR (.REND !,TSHR)>)> + <COND (<SET MQ <MEMBER <SET RADD <RLS-FOR-WORD .ADD>> ,TSHR>> + <SET RADD <1 .MQ>>) + (ELSE <SETG TSHR (.REND !,TSHR)>)> + <SET TAIL <REST .REND <- <LENGTH .REND> 1>>> + <REPEAT () + <COND (<0? <1 .TAIL>> + <COND (<EMPTY? <SET BRANCH <DOT .TR>>> + <PUT .TR ,DOT <SET BRANCH <LIST () () ()>>>)>) + (<EMPTY? <SET BRANCH <DASH .TR>>> + <PUT .TR ,DASH <SET BRANCH <LIST () () ()>>>)> + <SET TR .BRANCH> + <COND (<==? .TAIL .REND> + <PUT .TR + ,LAST + (<VECTOR .EATOM .END .ADD .RADD> + !<LAST .TR>)> + <RETURN .EATOM>) + (ELSE <SET TAIL <BACK .TAIL>>)>>> + +\ + +"Hacks one variable: ENDING-TREE -- the actual ending rls tree +" + +<SETG NULL-ENDING [NULL "" "" ![!]]> + +<GDECL (ESTR) <LIST [REST STRING]> (TSHR) <LIST [REST UVECTOR]> + (NULL-ENDING) <VECTOR ATOM STRING STRING UVECTOR>> + +<DEFINE MAKE-ENDING-TREE (SIN "OPTIONAL" (OFILE <>) "AUX" (N 0)) + #DECL ((SIN) UVECTOR (N VALUE) FIX) + <COND (<SET EL <MAKE-ENDING-LIST .SIN>> + <SETG ENDING-TREE <LIST () () (,NULL-ENDING)>> + <SETG TREE-SHARE ()> + <SETG TSHR ()> + <SETG ESTR ()> + <MAPF <> <FUNCTION (X) <ENDING .X> <SET N <+ .N 1>>> .EL> + <COND (.OFILE <SAVE-DATA ENDING-TREE .OFILE>)> + .N) + (ELSE + <SETG ENDING-TREE <>> + .N)>> + +<DEFINE MAKE-ENDING-LIST (WDS "AUX" (EL ())) + #DECL ((WDS) UVECTOR (EL) <LIST [REST ATOM]> (VALUE) <OR FALSE UVECTOR>) + <MAPF <> + <FUNCTION (W) + #DECL ((W) VECTOR) + <COND (<AND <G=? <LENGTH .W> 2> <TYPE? <2 .W> UVECTOR>> + <MAPF <> + <FUNCTION (E) + <COND (<AND <TYPE? .E ATOM> <NOT <MEMQ .E .EL>>> + <SET EL (.E !.EL)>)>> + <2 .W>>)>> + .WDS> + <COND (<EMPTY? .EL> <>) (ELSE <SETG END-LIST <UVECTOR !.EL>>)>> + +<ENDPACKAGE> \ No newline at end of file diff --git a/src/mprog2/ulist.utaa37 b/src/mprog2/ulist.utaa37 new file mode 100644 index 00000000..01539c93 --- /dev/null +++ b/src/mprog2/ulist.utaa37 @@ -0,0 +1,282 @@ +<PACKAGE "ú³$Ó©"> + +<ENTRY ULIST ULIST-PRINT ULIST-RESET ULIST-CLOSE ULIST-FLUSH SPEC-BUILD> +<ENTRû(*Ì“ST-MATCH ULIST-GEN NEXT-ENTRY> + +<USE "LSRTNS"> + +<FLOAD "TAA;ULISTC NBIN"> + +"SUBTITLE TOP-LEVEL STUFF" + +<DEFINE ULIST (SPECS "OPTIONAL" (ENTRY? <>)) + #DECL ((SPECS) VECTOR (ENTRY?) <OR ATOM FIX FALSE>) + <SET SPECS <SPEC-BUILD .SPECS>> + <ULIST-RESET> + <MAPF ,LIST + <FUNCTION ("AUX" TEMP) + #DECL ((TEMP) <OR STRING FALSE>) + <COND (<SET TEMP <ULIST-GEN .SPECS>> + <COND (<TYPE? .ENTRY? ATOM> <STRING .TEMP>) + (<TYPE? .ENTRY? FIX> + <MAPRET <STRING <LSR-EXTRACT .TEMP 0>> + <STRING <LSR-EXTRACT .TEMP .ENTRY?>>>) + (<STRING <LSR-EXTRACT .TEMP 0>>)>) + (<MAPSTOP>)>>>> + +<DEFINE ULIST-PRINT (SPECS "OPTIONAL" (ENTRY? <>) "AUX" (OUTCHAN .OUTCHAN)) + #DECL ((SPECS) VECTOR (ENTRY?) <OR ATOM FIX FALSE> (OUTCHAN) CHANNEL) + <SET SPECS <SPEC-BUILD .SPECS>> + <ULIST-RESET> + <MAPF ,LIST + <FUNCTION ("AUX" TEMP) + #DECL ((TEMP) <OR STRING FALSE>) + <COND (<SET TEMP <ULIST-GEN .SPECS>> + <CRLF> + <PRINC <LSR-EXTRACT .TEMP 0>> + <INDENT-TO 9> + <PRINC <LSR-EXTRACT .TEMP ,$NAME>> + <PRINC " "> + <PRINC <LSR-EXTRACT .TEMP + <COND (<TYPE? .ENTRY? FIX> .ENTRY?) + (,$NETA)>>> + <COND (<TYPE? .ENTRY? ATOM> + <STRING .TEMP>) + (<TYPE? .ENTRY? FIX> + <MAPRET <STRING <LSR-EXTRACT .TEMP 0>> + <STRING <LSR-EXTRACT .TEMP .ENTRY?>>>) + (<STRING <LSR-EXTRACT .TEMP 0>>)>) + (<MAPSTOP>)>>>> + +<DEFINE ULIST-GEN (SPECS "AUX" STR) + #DECL ((STR) <OR STRING FALSE> (SPECS) VECTOR) + <REPEAT () + <COND (<SET STR <NEXT-ENTRY>> + <COND (<ULIST-MATCH .STR .SPECS> + <RETURN .STR>)>) + (<RETURN <>>)>>> + + +"SUBTITLE MATCHING STUFF" + +<SETG PLACEH !\=> + +<SETG STAR !\*> + +<SETG QUOTER !\> +<GDECL (PLACEH STAR QUOTER) CHARACTER> +"Given a string (a data-base entry) and a spec, see if string matches spec." +<DEFINE ULIST-MATCH (STR SPEC "AUX" (OPER <1 .SPEC>)) + #DECL ((STR) STRING + (SPEC) <VECTOR <OR CHARACTER FIX> [REST <OR STRING VECTOR>]>) + <COND (<TYPE? .OPER FIX> <MATCH-ONE .STR .SPEC>) + (<==? .OPER !\&> + <REPEAT ((SPEC <REST .SPEC>)) + #DECL ((SPEC) VECTOR) + <COND (<EMPTY? .SPEC> <RETURN T>) + (<NOT <ULIST-MATCH .STR <1 .SPEC>>> <RETURN <>>)> + <SET SPEC <REST .SPEC>>>) + (<==? .OPER !\|> + <REPEAT ((SPEC <REST .SPEC>)) + #DECL ((SPEC) VECTOR) + <COND (<EMPTY? .SPEC> <RETURN <>>) + (<ULIST-MATCH .STR <1 .SPEC>> <RETURN T>)> + <SET SPEC <REST .SPEC>>>) + (<==? .OPER !\~> <NOT <ULIST-MATCH .STR <2 .SPEC>>>)>> + +"See if string matches spec of form [<fix> <stringspec>...]" +<DEFINE MATCH-ONE (STR SPEC "AUX" (RSTR <LSR-EXTRACT .STR <1 .SPEC>>)) + #DECL ((STR) STRING (SPEC) VECTOR) + <SET SPEC <REST .SPEC>> + <REPEAT (TLEN SIF MBL SIB TS) + #DECL ((SIF) <OR FALSE ATOM> (MBL) FIX (SIB) <OR FALSE STRING> + (TS) <OR STRING VECTOR> (TLEN) FIX) + <COND (<EMPTY? .SPEC> <RETURN <>>)> + <COND (<TYPE? <SET TS <1 .SPEC>> STRING> + <COND (<CI=? .TS .RSTR> <RETURN T>)>) + (T + <SET SIB <2 .TS>> + <SET MBL <1 .TS>> + <COND (<NOT <3 .TS>> + <COND (<OR <==? <SET TLEN <LENGTH .RSTR>> .MBL> + <AND .SIB <G? .TLEN .MBL>>> + <RETURN T>)>) + (T + <COND (<4 .TS> <SET SIF <>> <SET TS <REST .TS 2>>) + (T <SET SIF T> <SET TS <REST .TS 4>>)> + <COND (<MATCH? .RSTR .SIF .MBL .SIB .TS> <RETURN T>)>)>)> + <SET SPEC <REST .SPEC>>>> + +"See if a string matches a string specification" +<DEFINE MATCH? (N SIF MBL SIB SPEC + "AUX" (MFL <1 .SPEC>) (TS <2 .SPEC>) + (MINL <+ .MFL .MBL <LENGTH .TS>>) (NL <LENGTH .N>) + (TSL <LENGTH .TS>) TSTR TR) + #DECL ((N TS) STRING (SIF TR) <OR ATOM FALSE> (SIB) <OR STRING FALSE> + (TSTR) <OR STRING FALSE> (MBL MFL MINL ML TSL) FIX + (SPEC) <VECTOR [REST <OR FIX FALSE> <OR STRING FALSE>]>) + <SET SPEC <REST .SPEC 2>> + <AND <G=? .NL .MFL> <SET N <REST .N .MFL>>> + <COND + (<L? .NL .MINL> <>) + (<SET TSTR <CI-MEMBER .TS .N>> + <COND + (.SIF + <COND + (<1 .SPEC> + <SET TR + <COND (<2 .SPEC> <MATCH? <REST .TSTR .TSL> <> .MBL .SIB .SPEC>) + (T <MATCH? <REST .TSTR .TSL> T .MBL .SIB <REST .SPEC 2>>)>> + <SET SPEC <PUT <BACK .SPEC 2> 1 0>> + <REPEAT ((TMP .TSTR)) + #DECL ((TMP) <OR FALSE STRING>) + <COND (<AND <NOT .TR> <SET TMP <MEMBER .TS <REST .TMP>>>> + <SET TR <MATCH? .TMP T .MBL .SIB .SPEC>>) + (T <RETURN .TR>)>> + <PUT .SPEC 1 .MFL> + .TR) + (T + <REPEAT () + <COND + (<AND <NOT <SET TR + <OR <==? <SET MINL <LENGTH <REST .TSTR .TSL>>> .MBL> + <AND .SIB <G? .MINL .MBL>>>>> + <SET TSTR <MEMBER .TS <REST .TSTR>>>>) + (T <RETURN .TR>)>>)>) + (<==? .TSTR .N> + <COND (<1 .SPEC> + <COND (<2 .SPEC> <MATCH? <REST .TSTR .TSL> <> .MBL .SIB .SPEC>) + (T <MATCH? <REST .TSTR .TSL> T .MBL .SIB <REST .SPEC 2>>)>) + (T + <OR <==? <SET MINL <LENGTH <REST .TSTR .TSL>>> .MBL> + <AND .SIB <G? .MINL .MBL>>>)>)>)>> + + +"Like MEMBER, but ignores case" +<DEFINE CI-MEMBER (TARG STR) + #DECL ((TARG STR) STRING) + <COND (<EMPTY? .TARG> <>) + (<L=? <LENGTH .TARG> <LENGTH .STR>> + <REPEAT ((C1 <1 .TARG>)) + <COND (<AND <CHAR=? .C1 <1 .STR>> + <REPEAT ((TTARG <REST .TARG>) (TSTR <REST .STR>)) + <COND (<EMPTY? .TTARG> <RETURN T>) + (<EMPTY? .TSTR> <RETURN <>>) + (<CHAR=? <1 .TTARG> <1 .TSTR>> + <SET TTARG <REST .TTARG>> + <SET TSTR <REST .TSTR>>) + (<RETURN <>>)>>> + <RETURN .STR>)> + <SET STR <REST .STR>> + <COND (<G? <LENGTH .TARG> <LENGTH .STR>> <RETURN <>>)>>)>> + +"Like =?, but ignores case" +<DEFINE CI=? SM (STR1 STR2) + #DECL ((STR1 STR2) STRING) + <COND (<==? <LENGTH .STR1> <LENGTH .STR2>> + <MAPF <> + <FUNCTION (C1 C2) + #DECL ((C1 C2) CHARACTER) + <COND (<CHAR=? .C1 .C2>) + (<RETURN <> .SM>)>> + .STR1 .STR2> + T)>> + +"Case-independent character comparison" +<DEFINE CHAR=? (C1 C2) + #DECL ((C1 C2) CHARACTER) + <COND (<N==? .C1 .C2> + <COND (<AND <G=? <ASCII .C1> <ASCII !\a>> + <L=? <ASCII .C1> <ASCII !\z>>> + <SET C1 <ASCII <- <ASCII .C1> 32>>>)> + <COND (<AND <G=? <ASCII .C2> <ASCII !\a>> + <L=? <ASCII .C2> <ASCII !\z>>> + <SET C2 <ASCII <- <ASCII .C2> 32>>>)> + <==? .C1 .C2>) + (T)>> + +"SUBTITLE SPEC HACKERS" + +"Build specification from user arg" +<DEFINE SPEC-BUILD (OSPEC "AUX" (STAR ,STAR) (PLACEH ,PLACEH)) + #DECL ((OSPEC) VECTOR (STAR PLACEH) CHARACTER) + <MAPF ,VECTOR + <FUNCTION (X) + <COND (<TYPE? .X ATOM> <1 <SPNAME .X>>) + (<TYPE? .X VECTOR> <SPEC-BUILD .X>) + (<TYPE? .X FIX> .X) + (<TYPE? .X STRING> + <COND (<OR <MEMQ .STAR .X> <MEMQ .PLACEH .X>> + <SPEC-HACK .X>) + (.X)>) + (<ERROR>)>> + .OSPEC>> + +"Build string specification for MATCH? from string containing special chars" +<DEFINE SPEC-HACK (AST + "AUX" (SPEC <IVECTOR 10 <>>) + (LASTCHR ,PLACEH) + (ASP <REST .SPEC 2>) + (STFLG <>)) + #DECL ((AST) STRING (LASTCHR) CHARACTER (ASP SPEC) VECTOR + (STFLG) <OR ATOM FALSE>) + <REPEAT ((TST <OR <AND <GASSIGNED? A> ,A> <SETG A <ISTRING 40>>>) + (A .TST) (CT 0) CHR ACH) + #DECL ((TST A) STRING (CT) FIX (CHR ACH) CHARACTER) + <COND (<EMPTY? .AST> + <COND (<OR <==? .LASTCHR ,STAR> + <AND <==? .LASTCHR ,PLACEH> .STFLG>> + <PUT .SPEC 1 .CT> + <PUT .SPEC 2 ""> + <PUT <BACK .ASP 2> 1 <>>) + (<==? .LASTCHR ,PLACEH> + <PUT .SPEC 1 .CT> + <PUT .SPEC 2 <>> + <PUT .ASP 1 <>>) + (T + <PUT .ASP 1 <SUBSTRUC .A 0 .CT>> + <PUT .ASP 2 <>> + <PUT .SPEC 1 0> + <PUT .SPEC 2 <>>)> + <RETURN .SPEC>) + (<==? <SET CHR <1 .AST>> ,STAR> + <COND (<N==? .LASTCHR ,STAR> + <COND (<N==? .LASTCHR ,PLACEH> + <PUT .ASP 1 <SUBSTRUC .A 0 .CT>> + <SET TST .A> + <SET CT 0> + <SET ASP <REST .ASP>>)> + <SET ASP <REST <PUT <PUT .ASP 1 0> 2 <>> 2>> + <SET STFLG T>)>) + (<==? .CHR ,PLACEH> + <COND (<==? .LASTCHR ,STAR> <SET CT <+ .CT 1>>) + (<N==? .LASTCHR ,PLACEH> + <SET ASP <REST <PUT .ASP 1 <SUBSTRUC .A 0 .CT>>>> + <SET TST .A> + <SET CT 1>) + (T <SET CT <+ .CT 1>>)>) + (T + <COND (<==? .CHR ,QUOTER> + <SET ACH <1 <SET AST <REST .AST>>>>) + (T <SET ACH .CHR>)> + <COND (<==? .LASTCHR ,STAR> + <SET ASP <REST <PUT .ASP 1 .CT>>> + <SET CT 0>) + (<==? .LASTCHR ,PLACEH> + <SET ASP <REST <PUT .ASP 1 .CT>>> + <SET CT 0>)> + <SET STFLG <>> + <SET TST <REST <PUT .TST 1 .ACH>>> + <SET CT <+ .CT 1>>)> + <SET LASTCHR .CHR> + <SET AST <REST .AST>>>> + + +"SUBTITLE FILE-HACKERS" + +<DEFINE ULIST-CLOSE ("AUX" CH) + #DECL ((CH) <CHANNEL FIX>) + <COND (<NOT <0? <1 <SET CH <NTH ,DB </ <+ ,DB-CH 1> 2>>>>>> + <CLOSE .CH>)>> + +<ENDPACKAGE> \ No newline at end of file diff --git a/src/mprog2/ulistc.utaa01 b/src/mprog2/ulistc.utaa01 new file mode 100644 index 00000000..45aa2eec --- /dev/null +++ b/src/mprog2/ulistc.utaa01 @@ -0,0 +1,156 @@ +<SETGô! ·<CHANNEL "READB" "INQUIR;LSR1 1"> + 0 ; "BUFFER IN CORE" + 0 ; "FIRST PAGE MAPPED IN" + 0 ; "AOBJN POINTER TO FIRST PAGE"]> + +<GDECL (DB) <VECTOR CHANNEL FIX FIX FIX>> + +"OFFSETS INTO DB FOR CRUFTIES" +<SETG DB-CH 1> +<SETG DB-PG 3> +<SETG DB-AC 5> +<SETG DB-PT 7> +<MANIFEST DB-CH DB-PG DB-AC DB-PT> + +<TITLE ULIST-RESET> + <DECLARE ("VALUE" VECTOR)> + <PUSHJ P* IRESET> + <JRST FINIS> + +<INTERNAL-ENTRY IRESET 0> + <SUBM M* (P)> + <MOVE A* <MQUOTE <RGLOC DB T>>> + <ADD A* GLOTOP 1> + <PUSH TP* (A)> + <PUSH TP* 1(A)> + <MOVE A* DB-CH(A)> + <DPUSH TP* (A)> + <MCALL 1 RESET> + <MOVE A* (TP)> + <SKIPE B* DB-PG(A)> + <JRST DOMAP> + <MOVEI A* 2> + <PUSHJ P* PGFIND> + <JUMPL B* [<*VALUE>]> + <MOVE A* (TP)> + <MOVEM B* DB-PG(A)> ; "PAGE NUMBER IN CORE" +DOMAP <LSH B* 10> ; "MAKE AN ADDRESS" + <HRLI B* -1024> + <MOVEM B* DB-PT(A)> ; "SAVE IT AWAY" + <MOVE C* DB-CH(A)> ; "CHANNEL" + <*CALL [<SETZ> + <SIXBIT "ACCESS"> + <(C) 1> + <SETZI 5>]> + <*LOSE *1400*> + <MOVE D* [<(-1) E>]> + <*CALL [<SETZ> + <SIXBIT "IOT"> + <(C) 1> + <SETZ D>]> ; "PICK UP POINTER TO FIRST DATA PAGE" + <*LOSE *1400*> + <LSH E* -10> ; "TURN INTO PAGE #" + <MOVEM E* DB-AC(A)> ; "SAVE IT AWAY" + <MOVE B* DB-PG(A)> ; "CORE PAGE" + <HRLI B* -2> + <*CALL [<SETZ> + <SIXBIT "CORBLK"> + <MOVEI *10000*> ; "%CBNDR" + <MOVEI -1> ; "%JSELF" + <B> + <(C) 1> ; "CHANNEL" + <SETZ E>]> + <*LOSE *1000*> + <POP TP* B> + <POP TP* A> + <JRST MPOPJ> + +<SUB-ENTRY NEXT-ENTRY ("VALUE" <OR FALSE STRING>)> + <PUSHJ P* IENTRY> + <JRST FINIS> + +<INTERNAL-ENTRY IENTRY 0> + <SUBM M* (P)> + <MOVE A* <MQUOTE <RGLOC DB T>>> + <ADD A* GLOTOP 1> + <DPUSH TP* (A)> + <MOVE B* (TP)> + <SKIPE DB-PG(B)> ; "NOTHING HERE?" + <JRST GETCHN> + <PUSHJ P* IRESET> ; "SET EVERYTHING UP" + <JRST GETENT> +GETCHN <MOVE A* DB-CH(B)> + <SKIPE 1(A)> ; "CHANNEL CLOSED?" + <JRST GETENT> ; "NOPE" + <PUSH TP* DB-CH -1(B)> + <PUSH TP* A> + <MCALL 1 RESET> + <MOVE B* (TP)> +GETENT <MOVE C* DB-PT(B)> ; "AOBJN POINTER TO NEXT ENTRY" + <JUMPGE C* NEXTPG> + <HLRZ A* (C)> ; "LENGTH IN WORDS" + <JUMPE A* [<MOVSI A* <TYPE-CODE FALSE>> + <MOVEI B* 0> + <JRST NEXTOT1>]> + <SUBI A* 1> + <IMULI A* 5> ; "LENGTH IN CHARS" + <HRLI A* <TYPE-CODE STRING>> + <MOVE D* C> + <HRLI D* *10700*> + <PUSH TP* A> + <PUSH TP* D> ; "SAVE ENTRY" + <HLRZ A* (C)> + <HRLS A> + <ADDM A* DB-PT(B)> ; "AOBJN" +NEXTOT <POP TP* B> + <POP TP* A> +NEXTOT1 <SUB TP* [<(2) 2>]> + <JRST MPOPJ> +NEXTPG <AOSN E* DB-AC(B)> ; "SKIP IF STUFF LEFT" + <JRST [<MOVSI A* <TYPE-CODE FALSE>> + <MOVEI B* 0> + <SUB TP* [<(2) 2>]> + <JRST NEXTOT1> ; "RETURN FALSE--ALL DONE"]> + <SUB C* [<(1024) 1024>]> ; "UPDATE POINTER" + <MOVEM C* DB-PT(B)> + <MOVE C* DB-PG(B)> + <*CALL [<SETZ> + <SIXBIT "CORBLK"> + <MOVEI *10000*> + <MOVEI -1> + <MOVEI (C)> + <MOVEI -1> + <SETZI 1(C)>]> + <*LOSE *1000*> ; "MAP PAGE 2 OF BUFFER TO PAGE 1" + <MOVE D* DB-CH(B)> + <ADDI E* 1> + <*CALL [<SETZ> + <SIXBIT "CORBLK"> + <MOVEI *10000*> + <MOVEI -1> + <MOVEI 1(C)> + <(D) 1> + <SETZ E>]> ; "GET NEXT PAGE IN" + <JRST ENDFIL> + <JRST GETENT> ; "DONE" +ENDFIL <SETOM DB-AC(B)> ; "THIS WAS THE LAST PAGE" + <JRST GETENT> + +<SUB-ENTRY ULIST-FLUSH ("VALUE" ATOM)> + <PUSHJ P* IFLUSH> + <JRST FINIS> + +<INTERNAL-ENTRY IFLUSH 0> + <SUBM M* (P)> + <MCALL 0 ULIST-CLOSE> ; "CLOSE CHANNEL" + <MOVE C* <MQUOTE <RGLOC DB T>>> + <ADD C* GLOTOP 1> + <MOVE C* 1(C)> + <SKIPN B* DB-PG(C)> ; "PAGE # OF BUFFER" + <JRST MPOPJ> ; "ALREADY FLUSHED" + <MOVEI A* 2> + <SETZM DB-PG(C)> ; "MARK AS FLUSHED" + <PUSHJ P* PGGIVE> + <MOVSI A* <TYPE-CODE ATOM>> + <MOVE B* <MQUOTE T>> + <JRST MPOPJ> \ No newline at end of file diff --git a/src/mprog2/undump.usg005 b/src/mprog2/undump.usg005 new file mode 100644 index 00000000..c029e139 --- /dev/null +++ b/src/mprog2/undump.usg005 @@ -0,0 +1,98 @@ +<PACKAGE "UNDUMP"> + +<ENTRY START NAME SKIP LOD> + +<USE "STR"> + +<SETG TC <>> +<GDECL (TC) <OR FALSE CHANNEL>> + +<SETG SBUF <IUVECTOR 4 '0>> +<SETG NBUF <IUVECTOR 6 '0>> +<SETG TBUF <IUVECTOR 1024 '0>> +<GDECL (SBUF NBUF TBUF) <UVECTOR FIX>> + +<DEFINE START () + <COND (,TC <CLOSE ,TC>)> + <COND (<NOT <SETG TC <OPEN "READB" "MT0:">>> + <ERROR CANT-OPEN-TAPE-CHANNEL START>) + (<NOT <==? 4 <READB ,SBUF ,TC>>> + <ERROR E-O-T START>) + (<NOT <==? <1 ,SBUF> *777774000000*>> + <ERROR BAD-FORMAT START>) + (T <PRINC " TAPE #"> <PRINC <CHTYPE <GETBITS <2 ,SBUF> <BITS 18 18>> FIX>> + <PRINC " REEL #"> <PRINC <CHTYPE <GETBITS <2 ,SBUF> <BITS 18 0>> FIX>> + <PRINC " (DATED "> <PRINC <SIXTOS <3 ,SBUF>>> <PRINC ") OF "> + <PRINC <COND (<1? <4 ,SBUF>> "INCREMENTAL") + (<0? <4 ,SBUF>> "RANDOM") + (<==? -1 <4 ,SBUF>> "FULL")>> + <PRINC " DUMP"> + <CRLF>)>> + +<DEFINE NAME () + <COND (<NOT ,TC> + <ERROR NO-TAPE-CHANNEL-OPEN NAME>) + (<NOT <==? 6 <READB ,NBUF ,TC>>> + <ERROR E-O-T START>) + (<NOT <==? <1 ,NBUF> *777772000000*>> + <ERROR BAD-FORMAT NAME>) + (T <PRINC !\<> <PRINC <SIXTOS <2 ,NBUF>>> <PRINC !\>> + <PRINC <SIXTOS <3 ,NBUF>>> <PRINC !\.> <PRINC <SIXTOS <4 ,NBUF>>> + <COND (<L? <5 ,NBUF> 100> + <PRINC " PACK #"> <PRINC <5 ,NBUF>>) + (T <PRINC " (LINK)">)> + <PRINC " CREATED "> <PRINC <CDATE <6 ,NBUF>>> + <PRINC !\ > <PRINC <CTIME <6 ,NBUF>>> + <CRLF>)>> + +<DEFINE SKIP () + <COND (<NOT ,TC> + <ERROR NO-TAPE-CHANNEL-OPEN SKIP>) + (T + <REPEAT () + <COND (<NOT <==? <READB ,TBUF ,TC> <LENGTH ,TBUF>>> + <RESET ,TC> + <RETURN>)>>)>> + +<DEFINE LOD ("AUX" DC) + <COND (<NOT ,TC> + <ERROR NO-TAPE-CHANNEL-OPEN LOD>) + (<NOT <SET DC <OPEN "PRINTB" <SIXTOS <3 ,NBUF>> <SIXTOS <4 ,NBUF>> + "DSK" <SIXTOS <2 ,NBUF>>>>> + <ERROR CANT-OPEN-DISK-CHANNEL LOD>) + (T + <REPEAT (N) + <COND (<NOT <==? <SET N <READB ,TBUF ,TC>> <LENGTH ,TBUF>>> + <PRINTB <SUBSTRUC ,TBUF 0 .N> .DC> + <RESET ,TC> + <RETURN <CLOSE .DC>>) + (T <PRINTB ,TBUF .DC>)>>)>> + +;"Following are snarfed from DIR package:" + +<SETG MONTH <BITS 4 23>> + +<SETG DAY <BITS 5 18>> + +<SETG YEAR <BITS 7 27>> + +<SETG CREATION-TIME <BITS 18>> + +<DEFINE FIELD (W B) + #DECL ((W) <PRIMTYPE WORD> (B) BITS (VALUE) FIX) + <CHTYPE <GETBITS .W .B> FIX>> + +<DEFINE CDATE (W) + #DECL ((W) <PRIMTYPE WORD> (VALUE) <LIST [3 FIX]>) + (<FIELD .W ,YEAR> <FIELD .W ,MONTH> <FIELD .W ,DAY>)> + +<DEFINE CTIME (W "AUX" H M S) + #DECL ((W) <PRIMTYPE WORD> (H M S) FIX (VALUE) <LIST [3 FIX]>) + <SET W </ <FIELD .W ,CREATION-TIME> 2>> + <SET H </ .W 3600>> + <SET W <MOD .W 3600>> + <SET M </ .W 60>> + <SET S <MOD .W 60>> + (.H .M .S)> + +<ENDPACKAGE> diff --git a/src/mprog2/vctsrc.udl001 b/src/mprog2/vctsrc.udl001 new file mode 100644 index 00000000..ad8d5313 --- /dev/null +++ b/src/mprog2/vctsrc.udl001 @@ -0,0 +1,24 @@ +<PACKAGE "VCTSRC"> + +<ENTRY VCTSRC> + +<DEFINE VCTSRC (V K "OPTIONAL" (O 1) "AUX" (L 1) (U </ <LENGTH .V> 2>) I KI S R) + + #DECL ((VALUE) <OR VECTOR FALSE> (V) VECTOR (K) <OR STRING FIX> + (O I L U S R) FIX) + <COND (<EMPTY? .V> <>) + (ELSE + <REPEAT () + <AND <L? .U .L> <RETURN <>>> + <SET I </ <+ .L .U> 2>> + <SET KI <NTH .V <+ .O <SET R <* <- .I 1> 2>>>>> + <COND (<TYPE? .K STRING> + <AND <0? <SET S <STRCOMP .K .KI>>> + <RETURN <REST .V .R>>>) + (<L? .K .KI> <SET S -1>) + (<G? .K .KI> <SET S 1>) + (ELSE <RETURN <REST .V .R>>)> + <COND (<1? .S> <SET L <+ .I 1>>) + (ELSE <SET U <- .I 1>>)>>)>> + +<ENDPACKAGE> diff --git a/src/mprog2/x_cal.updl51 b/src/mprog2/x_cal.updl51 new file mode 100644 index 00000000..5a36bc71 --- /dev/null +++ b/src/mprog2/x_cal.updl51 @@ -0,0 +1,357 @@ +<PACKAGE "X.CAL"> + +<USE "CALCOM" "CALRDR" "CALSYM" "COMMAND" "X.UTI" "EXPUTI" "CHAN"> + +<SETG LAST-TABLE '["EMPTY-EXPANSION-DATA" []]> + +<SETG X.COMMANDS + <MAKEBST "Addressee expansion data base commands" + <BSTSORT ["create.expansion.data.base" + '<CALICO-COMMAND ,XSTARTER + '['[] + "called" + '["Give a name to the new data base." ""] + '["STRING" "ATOM"]]> + "read.expansion.data.base" + '<CALICO-COMMAND ,XMAKER + '['[] + "called" + '["Give the name of the library datum." ""] + '["STRING" "ATOM"]]> + "read.expansion.file" + '<CALICO-COMMAND ,FMAKER + '['[] + "from" + '["Give the name of the expansion file." ""] + '["FILE"] + '[] + "calling it" + '["What should be the name of this datum?" ""] + '["STRING" "ATOM"]] + '[]> + "dump.expansion.data.base" + '<COND (<EMPTY? <2 ,EXPANSION-DATA-TABLE>> + <PRINT "NO TABLES ACTIVE?">) + (<CALICO-COMMAND ,XDUMPER + '[,EXPANSION-DATA-TABLE + "called" + '["Give the name of the data base to write." ""] + '["SYM"] + '[] + "into" + '["The expansion file." ""] + '["FILE"]] + '[]>)> + "expand.addressees" + '<COND (<EMPTY? <2 ,EXPANSION-DATA-TABLE>> + <PRINT "NO TABLES ACTIVE?">) + (<CALICO-COMMAND ,CAL-LA-EXP + '['[] + "named" + '["The addressees to expand." ""] + '["MULT" "STRING" "ATOM"] + ,EXPANSION-DATA-TABLE + "using" + '["The expansion data bases to use" ""] + '["MULT" "SYM"]] + '[] + "HACK-MULTS">)> + "rename.expansion.entry" + '<COND (<EMPTY? <2 ,EXPANSION-DATA-TABLE>> + <PRINT "NO TABLES ACTIVE?">) + (<CALICO-COMMAND ,CAL-XCHANGE + '['[] + "called" + '["Entry which will be renamed." ""] + '["STRING" "ATOM"] + '[] + "to" + '["New name of entry." ""] + '["STRING" "ATOM"] + ,EXPANSION-DATA-TABLE + "in table" + '["Expansion table which contains entry." ""] + '["SYM"]] + '[]>)> + "add.expansion.entry" + '<COND (<EMPTY? <2 ,EXPANSION-DATA-TABLE>> + <PRINT "NO TABLES ACTIVE?">) + (<CALICO-COMMAND ,CAL-XADD + '['[] + "called" + '["Addressee which will expand." ""] + '["STRING" "ATOM"] + [] + "consisting of" + '["Addressees to expand to." ""] + '["MULT" "STRING" "ATOM"] + ,EXPANSION-DATA-TABLE + "to table" + '["Expansion table to add this entry to." ""] + '["SYM"]] + '[]>)> + "remove.expansion.entry" + '<COND (<EMPTY? <2 ,EXPANSION-DATA-TABLE>> + <PRINT "NO TABLES ACTIVE?">) + (<CALICO-COMMAND ,CAL-XREMOVE + '['[] + "called" + '["Addressee to remove." ""] + '["STRING" "ATOM"] + ,EXPANSION-DATA-TABLE + "from table" + '["Expansion table to remove this entry from." ""] + '["SYM"]] + '[]>)> + "add.more.addressees.to.entry" + '<COND (<EMPTY? <2 ,EXPANSION-DATA-TABLE>> + <PRINT "NO TABLES ACTIVE?">) + (<CALICO-COMMAND ,CAL-XADD-ADR + '['[] + "called" + '["Addressee which will expand." ""] + '["STRING" "ATOM"] + '[] + "adding addressees" + '["List of additional addressees." ""] + '["MULT" "STRING" "ATOM"] + ,EXPANSION-DATA-TABLE + "in table" + '["Expansion table containing entry." ""] + '["SYM"]] + '[]>)> + "remove.some.addressees.from.entry" + '<COND (<EMPTY? <2 ,EXPANSION-DATA-TABLE>> + <PRINT "NO TABLES ACTIVE?">) + (<CALICO-COMMAND ,CAL-XREMOVE-ADR + '['[] + "called" + '["Addressee which will lose entries." ""] + '["STRING" "ATOM"] + '[] + "removing" + '["Addressees to remove." ""] + '["MULT" "STRING" "ATOM"] + ,EXPANSION-DATA-TABLE + "in table" + '["Expansion table containing this entry." ""] + '["SYM"]] + '[]>)> + "expunge.addressees" + '<COND (<EMPTY? <2 ,EXPANSION-DATA-TABLE>> + <PRINT "NO TABLES ACTIVE?">) + (<CALICO-COMMAND ,CAL-XPUNGE + '['[] + "named" + '["Names of addressees to expunge." ""] + '["MULT" "STRING" "ATOM"] + ,EXPANSION-DATA-TABLE + "from table" + '["Expansion table to remove addressee from." ""] + '["SYM"]] + '[]>)> + "print.expansion.table" + '<COND (<EMPTY? <2 ,EXPANSION-DATA-TABLE>> + <PRINT "NO TABLES ACTIVE?">) + (<CALICO-COMMAND ,XPRETTY + '[,EXPANSION-DATA-TABLE + "named" + '["Expansion table to print." ""] + '["SYM"]]>)> + "print.expanded.expansion.table" + '<COND (<EMPTY? <2 ,EXPANSION-DATA-TABLE>> + <PRINT "NO TABLES ACTIVE?">) + (<CALICO-COMMAND ,XPRETTY-EXPANDED + '[,EXPANSION-DATA-TABLE + "named" + '["Expansion table to expand and print." ""] + '["SYM"] + ,EXPANSION-DATA-TABLE + "using" + '["Other tables to use in the expansion." ""] + '["MULT" "SYM"]]>)> +]>>> + +<KILL-TABLE ,X.COMMANDS> + +<ADDTABLE ,X.COMMANDS> + +<SETG EXPANSION-DATA-TABLE <MAKEBST "Expansion data bases" []>> + +<DEFINE CAL-XCHANGE (OLD NEW XVECTOR) + <AND <TYPE? .OLD ATOM> <SET OLD <SPNAME .OLD>>> + <AND <TYPE? .NEW ATOM> <SET NEW <SPNAME .NEW>>> + <COND (.XVECTOR <SETG LAST-TABLE .XVECTOR>) + (ELSE <SET XVECTOR ,LAST-TABLE>)> + <COND (<XCHANGE .OLD .NEW <2 .XVECTOR>> + <PEXPENTRY .NEW <2 .XVECTOR>>) + (ELSE <PRINT "CANT-RENAME">)>> + +<DEFINE CAL-XPUNGE (ADR XVECTOR "AUX" XV) + <COND (.XVECTOR <SETG LAST-TABLE .XVECTOR>) + (ELSE <SET XVECTOR ,LAST-TABLE>)> + <COND (<SET XV <XPUNGE .ADR <2 .XVECTOR>>> + <PUT .XVECTOR 2 .XV> + <PRINT "REMOVED">) + (ELSE <PRINT "NOT-REMOVED">)>> + +<DEFINE CAL-XADD (X XDATA XVECTOR "AUX" XV) + <AND <TYPE? .X ATOM> <SET X <SPNAME .X>>> + <COND (.XVECTOR <SETG LAST-TABLE .XVECTOR>) + (ELSE <SET XVECTOR ,LAST-TABLE>)> + <COND (<SET XV <XADD .X .XDATA <2 .XVECTOR> T>> + <PUT .XVECTOR 2 .XV> + <PEXPENTRY .X .XV>) + (ELSE <PRINT "NOT-ADDED">)>> + +<DEFINE CAL-XREMOVE (X XVECTOR "AUX" XV) + <AND <TYPE? .X ATOM> <SET X <SPNAME .X>>> + <COND (.XVECTOR <SETG LAST-TABLE .XVECTOR>) + (ELSE <SET XVECTOR ,LAST-TABLE>)> + <COND (<SET XV <XREMOVE .X <2 .XVECTOR>>> + <PUT .XVECTOR 2 .XV> + <CRLF> <PRINC .X>) + (ELSE <PRINT "NOT-REMOVED">)>> + +<DEFINE CAL-XADD-ADR (X XDATA XVECTOR "AUX" XV) + <AND <TYPE? .X ATOM> <SET X <SPNAME .X>>> + <COND (.XVECTOR <SETG LAST-TABLE .XVECTOR>) + (ELSE <SET XVECTOR ,LAST-TABLE>)> + <COND (<SET XV <XADD-ADR .X .XDATA <2 .XVECTOR>>> + <PEXPENTRY .X .XV>) + (ELSE <PRINT "NOT-THERE">)>> + +<DEFINE CAL-XREMOVE-ADR (X XDATA XVECTOR "AUX" XV) + <AND <TYPE? .X ATOM> <SET X <SPNAME .X>>> + <COND (.XVECTOR <SETG LAST-TABLE .XVECTOR>) + (ELSE <SET XVECTOR ,LAST-TABLE>)> + <COND (<SET XV <XREMOVE-ADR .X .XDATA <2 .XVECTOR>>> + <CRLF> <PRINC .X>) + (ELSE <PRINT "NOT-REMOVED">)>> + +<DEFINE CAL-LA-EXP (AL DL "AUX" X (L ,LAST-TABLE)) + <MAPR <> + <FUNCTION (X) + <AND <TYPE? <1 .X> ATOM> + <PUT .X 1 <SPNAME <1 .X>>>>> + .AL> + <GTABLES .DL> + <COND (<SET X <LA-EXP .AL .DL>> + <PADDRESSEES .X>) + (<PRINT "CANT EXPAND"> <CRLF>)>> + +<DEFINE GTABLES (DL) + <MAPR <> + <FUNCTION (S) + <COND (<TYPE? <1 .S> SYMBOL> + <PUT .S 1 <2 <1 .S>>>)> + <COND (<1 .S> + <PUT .S 1 <2 <1 .S>>> + <SETG LAST-TABLE <1 .S>>) + (ELSE <PUT .S 1 .L>)>> + .DL>> + +<DEFINE PEXPENTRY (X XV "AUX" (IT <MEMBER .X .XV>)) + #DECL ((X) STRING (XV) VECTOR (IT) <OR FALSE VECTOR>) + <CRLF> + <PRINC .X> + <COND (.IT + <PRINC " ==> "> + <PADDRESSEES <2 .IT> <+ 5 <FLATSIZE .X 100>>>) + (ELSE <PRINC ": entry not found.">)>> + +<DEFINE XPRETTY (ARG "AUX" TBL) + <COND (.ARG <SETG LAST-TABLE .ARG>) + (ELSE <SET ARG ,LAST-TABLE>)> + <SET TBL <2 .ARG>> + <CRLF> + <PRINC <1 .ARG>> + <CRLF> + <CRLF> + <PRINC "---addressee--- ---expands-to---"> + <CRLF> + <REPEAT () + <COND (<EMPTY? .TBL> <RETURN T>)> + <PRINC <1 .TBL>> <PRINC " ==> "> + <INDENT-TO 20> + <PADDRESSEES <2 .TBL> 20> + <SET TBL <REST .TBL 2>>>> + +<DEFINE XPRETTY-EXPANDED (ARG DBS "AUX" TBL) + <COND (.ARG <SETG LAST-TABLE .ARG>) + (ELSE <SET ARG ,LAST-TABLE>)> + <GTABLES .DBS> + <SET TBL <2 .ARG>> + <COND (<NOT <MEMQ .TBL .DBS>> <SET DBS (.TBL !.DBS)>)> + <CRLF> + <PRINC <1 .ARG>> + <CRLF> + <CRLF> + <PRINC "---addressee--- ---full-expansion---"> + <CRLF> + <REPEAT () + <COND (<EMPTY? .TBL> <RETURN T>)> + <PRINC <1 .TBL>> <PRINC " ==> "> + <INDENT-TO 20> + <PADDRESSEES <LA-EXP (<1 .TBL>) .DBS> 20> + <SET TBL <REST .TBL 2>>>> + +<DEFINE PADDRESSEES (L "OPTIONAL" (IND 0)) + #DECL ((L) <LIST [REST <OR STRING ATOM>]> (IND) FIX) + <MAPR <> + <FUNCTION (A) + #DECL ((A) <OR ATOM STRING>) + <COND (<FLATSIZE <1 .A> + <- <LINE-LENGTH .OUTCHAN> + <LINE-POS .OUTCHAN> 2>>) + (ELSE <CRLF> <INDENT-TO .IND>)> + <PRINC <1 .A>> + <COND (<NOT <LENGTH? .A 1>> <PRINC ", ">)>> + .L> + <CRLF>> + +<DEFINE XMAKER (ST "OPTIONAL" D) + #DECL ((ST) <OR STRING ATOM> (D) <OR FALSE VECTOR>) + <AND <TYPE? .ST ATOM> <SET ST <SPNAME .ST>>> + <AND <NOT <ASSIGNED? D>> <SET D <1 <GETDB (.ST)>>>> + <COND (.D + <PUT ,EXPANSION-DATA-TABLE 2 + <BSTSORT <VECTOR .ST + <SETG LAST-TABLE [.ST .D]> + !<2 ,EXPANSION-DATA-TABLE>>>> + <ADDTABLE ,EXPANSION-DATA-TABLE> + <CRLF> <PRINC .ST> <PRINC ": table added.">) + (ELSE <CRLF> <PRINC .ST> <PRINC ": "> <PRIN1 .D>)>> + +<DEFINE FMAKER (FILE ST "AUX" (D <XREAD .FILE>)) + <AND <TYPE? .ST ATOM> <SET ST <SPNAME .ST>>> + <XMAKER .ST .D>> + +<DEFINE XDUMPER (D FILE) + <PRINT <XPRINT <2 .D> <1 .D> .FILE>>> + +<DEFINE XSTARTER (ST) + <AND <TYPE? .ST ATOM> <SET ST <SPNAME .ST>>> + <XMAKER .ST <XADD-BUNCH '[]>>> + +<DEFINE XADD-BUNCH (OLD "AUX" (XL (T)) (L .XL)) + #DECL ((VALUE OLD) VECTOR (XL L) LIST) + <REPEAT () + <COND (<AND <SET R <READARGS '[] + "îaddressee" + '["Addressee to expand." ""] + '["ATOM" "STRING"]>> + <SET R <1 .R>> + <SET S <READARGS '[] + "expands to" + '["Expansions of addressee." ""] + '["MULT" "ATOM" "STRING"]>> + <SET S <1 .S>>> + <AND <TYPE? .R ATOM> <SET R <SPNAME .R>>> + <PUTREST .L <SET L <LIST .R>>> + <PUTREST .L <SET L <LIST .S>>>) + (ELSE <RETURN <SORT <> + <VECTOR !<REST .XL>> + 2>>)>>> + +<ENDPACKAGE> \ No newline at end of file diff --git a/src/mprog2/xuname.udl003 b/src/mprog2/xuname.udl003 new file mode 100644 index 00000000..8077aa2c --- /dev/null +++ b/src/mprog2/xuname.udl003 @@ -0,0 +1,36 @@ +<PACKAGE "XUNAME"> + +<ENTRY XUNAME XJNAME SSNAME> + +<TITLE XUNAME> + <DECLARE ("VALUE" STRING)> + <PUSHJ P* IXUNAME> + <JRST FINIS> + +<INTERNAL-ENTRY IXUNAME 0> + <SUBM M* (P)> + <*SUSET [<(*74*) B>]> +MAKEIT <MOVE C* [<(*440600*) B>]> + <MOVNI D* 6> +LOOP + <ILDB A* C> + <JUMPE A* MAKE> + <ADDI A* *40*> ;"TO ASCII" + <PUSH TP* <TYPE-WORD CHARACTER>> + <PUSH TP* A> + <AOJL D* LOOP> +MAKE <MOVEI A* (D) 6> + <PUSHJ P* CISTNG> + <JRST MPOPJ> + +<SUB-ENTRY XJNAME ("VALUE" STRING)> + <PUSHJ P* IXJNAME> + <JRST FINIS> + +<INTERNAL-ENTRY IXJNAME 0> + <SUBM M* (P)> + <*SUSET [<(*75*) B>]> + <JRST MAKEIT> +<END> + +<ENDPACKAGE> diff --git a/src/mudbug/cursor.utt005 b/src/mudbug/cursor.utt005 new file mode 100644 index 00000000..a39de9c2 --- /dev/null +++ b/src/mudbug/cursor.utt005 @@ -0,0 +1,188 @@ +<RPACKAGE "CURSOR"> + +<USE-TOTAL "EDIT"> + +<DEFINE CURPRIN (C) + #DECL ((C) CURSOR) + <CRLF> + <COND (<AND <ASSIGNED? <3 .C>> <==? .<3 .C> .C>> + <PRIN1 <3 .C>>) + (T <PRINC "(???)">)> + <INDENT-TO 10> + <PRINC "| "> + <COND (<NOT <LEGAL? <1 .C>>> <PRINC "ILLEGAL CURSOR">) + (<LOCATIVE? <1 .C>> <SAMP <IN <1 .C>> <2 .C> <>>) + (<SAMP <1 .C> <2 .C> <>>)>> + +<PRINTTYPE CURSOR ,CURPRIN> + +<SETG CURSORS? T> + +<DEFINE CUP- (LOC POS AMT "AUX" OL) + #DECL ((LOC) LOCATIVE (POS AMT) FIX (OL) LIST) + <COND (<G? .AMT 0> + <MAPR <> + <FUNCTION (L "EXTRA" (C <1 .L>)) + #DECL ((L OL) LIST (C) CURSOR) + <COND (<G=? .POS <2 .C>>) + (<G=? <2 .C> <+ .POS .AMT>> + <PUT .C 2 <- <2 .C> .AMT>>) + (<PUTREST .OL <REST .L>>)> + <SET OL .L>> + <REST <SET OL <GET .LOC CURSOR '(T)>>>>)>> +;" + pos=1,amt=2 + (*a*b*c*d*e*) ==> (*a*d*e*) + 0 1 2 3 4 5 0 1 2 3 + 0 1 X 1 2 3 +" + +<DEFINE CUP+ (LOC POS AMT) + #DECL ((LOC) LOCATIVE (POS AMT) FIX) + <COND (<G? .AMT 0> + <MAPF <> + <FUNCTION (C) + #DECL ((C) CURSOR) + <COND (<G? <2 .C> .POS> + <PUT .C 2 <+ .AMT <2 .C>>>)>> + <REST <GET .LOC CURSOR '(T)>>>)>> +;" + pos=2,amt=1 + (*a*b*c*d*) ==> (*a*b*bc*c*d*) + 0 1 2 3 4 ==> 0 1 2 3 4 5 + 0 1 2 4 5 +" + +<DEFINE CUP^ (LOC POS ETEM "AUX" LOC1 CURS) + #DECL ((LOC LOC1) LOCATIVE (POS) FIX (CURS ETEM) <PRIMTYPE LIST>) + <SET LOC1 <AT .ETEM <+ .POS 1>>> + <SET CURS <GET .LOC1 CURSOR '(T)>> + <PUT .LOC1 CURSOR> + <COND (<NOT <LENGTH? .CURS 1>> + <MAPF <> + <FUNCTION (C) + #DECL ((C) CURSOR) + <PUT .C 2 <+ <2 .C> .POS>> + <PUT .C 1 .LOC>> + <REST .CURS>> + <PUTREST <REST .CURS <- <LENGTH .CURS> 1>> + <REST <GET .LOC CURSOR '(T)>>> + <PUT .LOC CURSOR .CURS>)>> +;" + pos=1,amt=3 + (*a*(*b*c*d*)*e*f*) ==> (*a*b*c*d*e*f*) + 0 1(0 1 2 3)2 3 4 0 1 2 3 4 5 6 + 0 1(1 2 3 4)4 5 6 +" + +<DEFINE CUP* (LOC POS AMT ETEM + "OPTIONAL" FLUSH? + "AUX" (NLOC <AT .ETEM <+ .POS 1>>) (OL <GET .LOC CURSOR '(T)>) + (L <REST .OL>) (NCURS ()) C) + #DECL ((LOC NLOC) LOCATIVE (ETEM) <PRIMTYPE LIST> (AMT POS) FIX + (NCURS OL L) LIST (C) CURSOR) + <REPEAT () + <COND (<EMPTY? .L> <RETURN>)> + <SET C <1 .L>> + <COND (<L=? <2 .C> .POS>) + (<G=? <2 .C> <+ .POS .AMT>> <PUT .C 2 <- <2 .C> -1 .AMT>>) + (T + <PUTREST .OL <REST .L>> + <COND (<NOT .FLUSH?> + <PUT .C 1 .NLOC> + <PUT .C 2 <- <2 .C> .POS>> + <SET NCURS (.C !.NCURS)>)>)> + <SET L <REST <SET OL .L>>>> + <COND (<EMPTY? .NCURS>) (<PUT .NLOC CURSOR (T !.NCURS)>)>> +;" + pos=1,amt=3 + (*a* *b*c*d* *e*) ==> (*a*(*b*c*d*)*e*) + 0 1 1 2 3 4 4 5 0 1(0 1 2 3)2 3 + 0 1(0 1 2 3)2 3 +" + +<DEFINE ATTACH (LOC OBJ "AUX" CURS) + #DECL ((LOC) LOCATIVE (CURS) <PRIMTYPE LIST>) + <COND (<AND <==? <PRIMTYPE .OBJ> LIST> + <NOT <LENGTH? <SET CURS <GET <CHTYPE .OBJ LIST> CURSOR>> + 1>>> + <MAPF <> + <FUNCTION (C) #DECL ((C) CURSOR) <PUT .C 1 .LOC>> + <REST .CURS>> + <PUT .OBJ CURSOR> ;"can attach only once" + <PUT .CURS 1 T> + <PUT .LOC CURSOR .CURS> ;"old stuff flushed")>> + +<DEFINE PRINCUR (LOC OBJ OUTCHAN) + #DECL ((OBJ) <PRIMTYPE LIST> (OUTCHAN) CHANNEL (LOC) LOCATIVE) + <MAPF <> + ,CURPRIN + <REST <GET .LOC CURSOR '(T)>>> + <MAPR <> + <FUNCTION (L) + #DECL ((L) <PRIMTYPE LIST>) + <COND (<==? <PRIMTYPE <1 .L>> LIST> + <PRINCUR <AT .L> <1 .L> .OUTCHAN>)>> + .OBJ>> + + +<DEFINE CUREDIT (COMSTR WHERE POS + "AUX" (EDIT-ITEM <IN .WHERE>) (JUNKSTR ,JUNKSTR) TEMP TEMP2 LST) + #DECL ((VALUE) ANY (COMSTR JUNKSTR) STRING (WHERE) LOCATIVE + (EDIT-ITEM) <PRIMTYPE LIST> (POS) FIX (TEMP TEMP2) ANY (LST) <PRIMTYPE LIST>) + <COND + (<=? .COMSTR "GO"> + <READSTRING .JUNKSTR .INCHAN ,GOOD-CHRS> + <SET TEMP <EVAL <INTREAD .INCHAN>>> + <COND (<TYPE? .TEMP CURSOR> + <SET SEARCH+ <1 .TEMP>> + <SET GOTO .TEMP> + <SET GETPATH T>) + (<ERR "ERROR, ARG TO GO NOT CURSOR">)>) + (<=? .COMSTR "PC"> + <PRINCUR .WHERE .EDIT-ITEM .OUTCHAN> + <CRLF>) + (<=? .COMSTR "PA"> + <PRINCUR .TOP-ITEM <IN .TOP-ITEM> .OUTCHAN> + <CRLF>) + (<=? .COMSTR "CU"> + <READSTRING .JUNKSTR .INCHAN ,GOOD-CHRS> + <SET TEMP <INTREAD .INCHAN>> + <COND + (<NOT <TYPE? .TEMP ATOM>> + <ERR "ERROR, ARG TO CU NOT ATOM">) + (T + <COND (<AND <ASSIGNED? .TEMP> + <TYPE? <SET TEMP2 ..TEMP> CURSOR> + <SET LST <GET <1 .TEMP2> CURSOR>> + <MAPR <> + <FUNCTION (L) + #DECL ((L) LIST) + <COND (<==? <1 .L> .TEMP2> + <PUTREST .LST <REST .L>> + <MAPLEAVE T>) + (T <SET LST .L> <>)>> + <REST .LST>>>) + (T + <SET .TEMP + <SET TEMP2 <CHTYPE [<RGLOC NULL> -1 NULL] CURSOR>>>)> + <PUT .TEMP2 1 .WHERE> + <PUT .TEMP2 2 .POS> + <PUT .TEMP2 3 .TEMP> + <PUT .WHERE + CURSOR + <COND (<SET CURS <GET .WHERE CURSOR>> + <PUT .CURS 1 ..TEMP> + <CONS T .CURS>) + ((T ..TEMP))>>)>) + (<=? .COMSTR "KC"> <ERR "CURRENTLY UNIMPLEMENTED COMMAND">)>> + +<SETG CUREDIT-TABLE <MAPF ,VECTOR + <FUNCTION (STR) <MAPRET .STR ,CUREDIT>> + '["GO" "PC" "PA" "CU" "KC"]>> + +<COND (<GASSIGNED? EDIT-TABLE> <SETG EDIT-TABLE [!,EDIT-TABLE !,CUREDIT-TABLE]>) + (<SETG EDIT-TABLE ,CUREDIT-TABLE>)> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mudbug/debugr.ubkd20 b/src/mudbug/debugr.ubkd20 new file mode 100644 index 00000000..06531b5c --- /dev/null +++ b/src/mudbug/debugr.ubkd20 @@ -0,0 +1,398 @@ + +<PACKAGE "DEBUGR"> + +<ENTRY DEBUG HELP REPAIR + INDENT-INC + INDENT-MOD + INDENT-DIF + SELF-FAST + FORM-FAST + OUT-FAST + OUT-UNIQUE> + + +<DEFINE DEBUG ("OPTIONAL" 'OBJ "EXTRA" (TPL <TUPLE START T>)) + #DECL ((OBJ) <SPECIAL ANY> (TPL) TUPLE) + <COND (<AND <ASSIGNED? DPROCESS> <TYPE? .DPROCESS PROCESS>> + <RESUME .TPL .DPROCESS> + <HANDLER ,CHAR-INT ,CHAR-HANDLER>) + (ELSE + <SET DPROCESS <PROCESS ,MAIN-LOOP>> + <RESUME .TPL .DPROCESS> + <SETG CHAR-HANDLER <HANDLER ,CHAR-INT ,CHAR-INTERRUPT .DPROCESS>>)> + <SETG BREAKR-OBL .OBLIST> + <COND (<ASSIGNED? OBJ> + <INTERRUPT ,CHAR-INT ,BEGIN-CHAR ,INCHAN> + <SET OBJ <EVAL .OBJ>> + <INTERRUPT ,CHAR-INT ,END-CHAR ,INCHAN> + .OBJ) + (ELSE "READY")>> +<PROG () ',MAIN-LOOP ;"For GLUE"> + +<DEFINE HELP ("EXTRA" (C <OPEN "READ" <COND (,ITS "MUDBUG;DEBUGR HELP") + (ELSE "MDL:DEBUGR.HELP")>>)) + #DECL ((C) <OR FALSE CHANNEL>) + <COND (.C <FILECOPY .C ,OUTCHAN> ,NULL)>> + +<DEFINE REPAIR () + <COND (<N==? <ME> <MAIN>> + <INT-LEVEL 0> + <AND <GASSIGNED? CHAR-HANDLER> <TYPE? ,CHAR-HANDLER HANDLER> + <OFF ,CHAR-HANDLER>> + <FREE-RUN <MAIN>> + <PRINC " +The broken Debugr has now been repaired and reset. +You must now re-type: <DEBUG>$ if you want to try +one-step debugging again. ---- (BKD)" ,OUTCHAN> + <BREAK-SEQ '<SET DPROCESS <>> <MAIN>> + <SUICIDE T <MAIN>>)>> + +\ + +<PROG () + <SETG BEGIN-CHAR <ASCII 2>> ;"Cntl B" + <SETG NEXT-CHAR <ASCII 14>> ;"Cntl N" + <SETG OVER-CHAR <ASCII 15>> ;"Cntl O" + <SETG ARG-CHAR <ASCII 1>> ;"Cntl A" + <SETG RPT-CHAR <ASCII 18>> ;"Cntl R" + <SETG END-CHAR <ASCII 5>> ;"Cntl E" + <SETG QUIT-CHAR <ASCII 17>> ;"Cntl Q" + <SETG POP-CHAR <ASCII 16>> ;"Cntl P" + <COND (<G? ,MUDDLE 100> + <ACTIVATE-CHARS <STRING + <ASCII 7> ; "CNTL G" + <ASCII <CHTYPE <ANDB <ASCII !\S> *77*> FIX>> + ,BEGIN-CHAR + ,NEXT-CHAR + ,OVER-CHAR + ,ARG-CHAR + ,RPT-CHAR + ,POP-CHAR + ,END-CHAR + ,QUIT-CHAR>> +;"For 10x/20 make the correct characters do interrupts" + <SETG ITS <>>) + (ELSE <SETG ITS T>)> +<GDECL (BEGIN-CHAR + NEXT-CHAR + OVER-CHAR + ARG-CHAR + RPT-CHAR + POP-CHAR + END-CHAR + QUIT-CHAR) + CHARACTER> + <SETG INDENT-INC 2> + <SETG INDENT-MOD 10> + <SETG INDENT-DIF 20> + <GDECL (INDENT-INC INDENT-MOD INDENT-DIF) FIX> + <SETG SELF-FAST T> + <SETG FORM-FAST T> + <SETG OUT-FAST T> + <SETG OUT-UNIQUE T> + <SETG LO LO> ;"Psuedo-LAST-OUT variable for use in OUT-UNIQUE processing"> + +<PROG () ;"DEBUGR condition variables" + <SETG DSTATE -1> ;"Debuggr's State" + <SETG RSTATE 1> ;"Reader's State" + <SETG COUNT 0> ;"Reader's arg counter" + <GDECL (DSTATE RSTATE COUNT) FIX>> + +\ + +<DEFINE MAIN-LOOP (DITEM "EXTRA" (INCHAN ,INCHAN) (OUTCHAN ,OUTCHAN)) + #DECL ((DITEM) <SPECIAL <TUPLE ATOM ANY>> + (INCHAN OUTCHAN) <SPECIAL ANY>) + <REPEAT ((STATES '([-2 0 <>])) (INFO <>) (I/O-MODE <>) PURPOSE MESSAGE + (OLEV 0) (LEV 0) (CURLEV 0) (OLDLEV 0) TLF ARG + RDRVAL) + #DECL ((LEV) <SPECIAL FIX> (PURPOSE) ATOM (TLF) <SPECIAL <OR FALSE FRAME>> + (MESSAGE) <SPECIAL ANY> (CURLEV OLDLEV OLEV) FIX + (RDRVAL) <OR FALSE FIX> + (STATES) <LIST [REST <VECTOR FIX FIX ANY>]>) + <SET TLF <>> ;"Top Level Frame" + <SET PURPOSE <1 .DITEM>> ;"Get indicator of purpose" + <SET ARG <2 .DITEM>> + <COND (<AND <==? .PURPOSE EVLIN> <TYPE? .ARG TUPLE> <NOT <EMPTY? .ARG>>> + <SET ARG <1 .ARG>>)> + <SET CURLEV <FRAME-COUNT <FRAME <RESUMER>>>> + <AND ,TRACING? <DTRACE .PURPOSE ,DSTATE .CURLEV .LEV .INFO .ARG>> + <COND (<==? .PURPOSE START> ;"Request to start up DEBUGGER Process ?" + <SETG DSTATE 0> <SET MESSAGE <>>) + (<AND <ASSIGNED? QUICK-RUN!-IEDIT <RESUMER>> + <LVAL QUICK-RUN!-IEDIT <RESUMER>>> + <SET LEV .OLEV> + <SET CURLEV .OLDLEV> + <SET MESSAGE #DISMISS OK>) + (<==? .PURPOSE EVLIN> ;"Dispatch on purpose" + <COND (<AND .MESSAGE <G? .CURLEV .OLDLEV>> + ;"Attempt to 1STEP while in DISMISS evaluation" + <REPEAT () + <AND <G? .OLDLEV <1 <1 .STATES>>> <RETURN>> + <SET STATES <REST .STATES>>> + <SET STATES ([.OLDLEV .OLEV .INFO] !.STATES)> + <SET MESSAGE <>> + <SETG DSTATE 1> + <SETG COUNT 0> + <AGAIN>) + (<OR <==? ,DSTATE 1> <==? ,DSTATE 2>> + <COND (<SET I/O-MODE + <IPRINTER .ARG <- .CURLEV .LEV>>> + <SET MESSAGE + <COND (<==? .I/O-MODE T> <>) (ELSE #DISMISS T)>>) + (<SET RDRVAL <READER .ARG>> + <SETG DSTATE .RDRVAL> + <COND (<OR <==? ,DSTATE 3> <==? ,DSTATE 4>> + <SET INFO .ARG>)> + <COND (<OR <==? ,DSTATE 2> <==? ,DSTATE 4>> + <SET MESSAGE #DISMISS T>) + (ELSE <SET MESSAGE <>>)>) + (ELSE <AGAIN>)>) + (<==? ,DSTATE 3> + <COND (<NOT <SET INFO <MEMQ .ARG .INFO>>> + <SETG DSTATE 1> + <AGAIN>)> + <SET INFO <REST .INFO>> + <SET I/O-MODE <IPRINTER .ARG <- .CURLEV .LEV>>> + <SET MESSAGE #DISMISS T>) + (<==? ,DSTATE 4> + <COND (<==? .ARG .INFO> ;"Repeating ?" + <SETG DSTATE 1> <AGAIN>)> + <SET I/O-MODE <IPRINTER .ARG <- .CURLEV .LEV>>> + <SET MESSAGE #DISMISS T>) + (ELSE <ERROR DEBUG ,DSTATE .PURPOSE>)>) + (<==? .PURPOSE EVLOUT> + <COND (<OR <==? ,DSTATE 1> <==? ,DSTATE 2>> + <COND (<OPRINTER .ARG <- .CURLEV .LEV> .I/O-MODE> + <SETG LO .ARG> ;"Last-out" + <SETG DSTATE 1>) + (<NOT <SET RDRVAL <READER .ARG>>> <AGAIN>) + (<G? .RDRVAL 1> + <SETG DSTATE 1>) + (ELSE <SETG DSTATE .RDRVAL>)>) + (<==? ,DSTATE 3> + <COND (<L? .CURLEV .OLDLEV> <SETG DSTATE 1> <AGAIN>)> + <OPRINTER .ARG <- .CURLEV .LEV> .I/O-MODE> + <SETG LO .ARG>) + (<==? ,DSTATE 4> + <COND (<L? .CURLEV .OLDLEV> <SETG DSTATE 1> <AGAIN>)> + <OPRINTER .ARG <- .CURLEV .LEV> .I/O-MODE> + <SETG LO .ARG>) + (<==? ,DSTATE 0> ;"Return from deeper DISMISS level" + <SET CURLEV <FRAME-COUNT <FRAME <RESUMER>>>> + <REPEAT () + <SET INFO <1 .STATES>> + <SET STATES <REST .STATES>> + <COND (<==? .CURLEV <1 .INFO>> <RETURN>) + (<G? .CURLEV <1 .INFO>> + <ERROR LEVEL-MISMATCH!-ERRORS DEBUG>)>> + <SET OLEV <SET LEV <2 .INFO>>> + <SET INFO <3 .INFO>> + <SETG DSTATE 1> + <SETG COUNT 0> + <SET OLDLEV .CURLEV> + <SET TLF <>> + <AGAIN>) + (<==? ,DSTATE -1> <FREE-RUN <RESUMER>>) + (ELSE <ERROR DEBUG ,DSTATE .PURPOSE>)> + <SET I/O-MODE <>> + <SET MESSAGE <>>)> + <SET OLEV .LEV> + <SET OLDLEV .CURLEV> + <SET DITEM + <COND (<NOT .TLF> <RESUME .MESSAGE>) + (<LEGAL? .TLF> <ERRET .MESSAGE .TLF>) + (ELSE <BREAK-SEQ '<ERRET T> <RESUMER>> <RESUME T>)>>>> + +<DEFINE OPRINTER (EXPR DEPTH I/O + "EXTRA" (OUTCHAN .OUTCHAN) + (INDENT + <MIN <* ,INDENT-INC <MOD <MAX .DEPTH 1> ,INDENT-MOD>> + <- <13 .OUTCHAN> ,INDENT-DIF>>)) + #DECL ((INDENT DEPTH) FIX (OUTCHAN) <CHANNEL [12 ANY] FIX>) + <COND (<AND .I/O <APPLICABLE? .I/O>> + <APPLY .I/O .EXPR> + <TERPRI>) + (<OR <NOT ,OUT-FAST> <NOT ,OUT-UNIQUE> <N==? .EXPR ,LO>> + <INDENT-TO .INDENT .OUTCHAN> ;"PPRINT's INDENT-TO routine" + <PRIN1 .DEPTH> + <PRINC "<= "> + <&1 .EXPR> + <TERPRI>)> + ,OUT-FAST> + +<DEFINE IPRINTER (EXPR DEPTH + "EXTRA" (OUTCHAN .OUTCHAN) + (INDENT + <MIN <* ,INDENT-INC <MOD <MAX .DEPTH 1> ,INDENT-MOD>> + <- <13 .OUTCHAN> ,INDENT-DIF>>)) + #DECL ((INDENT DEPTH) FIX (OUTCHAN) <CHANNEL [12 ANY] FIX>) + <SETG LO LO> ;"Clobber last-out, since this is IN" + <INDENT-TO .INDENT> ;"PPRINT's INDENT-TO routine" + <PRIN1 .DEPTH> + <COND (<AND <TYPE? .EXPR FORM> ,FORM-FAST> <FORM-PRINTER .EXPR>) + (<AND <NOT <TYPE? .EXPR LIST VECTOR UVECTOR FORM>> + ,SELF-FAST> + <SELF-PRINTER .EXPR>) + (ELSE <NORMAL-PRINTER .EXPR>)>> + +<DEFINE FORM-PRINTER (EXPR "EXTRA" (OUTCHAN .OUTCHAN)) + #DECL ((EXPR) FORM (OUTCHAN) CHANNEL) + <COND (<OR <EMPTY? .EXPR> + <AND <==? <LENGTH? .EXPR 2> 2> + <OR <==? <1 .EXPR> LVAL> <==? <1 .EXPR> GVAL>> + <TYPE? <2 .EXPR> ATOM>> ;".FOO or ,FOO ?" + <==? <1 .EXPR> QUOTE>> + <PRINC ": "> + <&1 .EXPR> + <PRINC " = "> + ,&1) + (<==? <1 .EXPR> BREAKR!-IEDIT> + <PRINC "=> "> + <&1 .EXPR> + <TERPRI> + T) + (ELSE <NORMAL-PRINTER .EXPR>)>> + +<DEFINE SELF-PRINTER (EXPR) + .EXPR ;"NOT USED" + <PRINC ": "> + ,&1> + +<DEFINE NORMAL-PRINTER (EXPR "EXTRA" (OUTCHAN .OUTCHAN)) + #DECL ((OUTCHAN) CHANNEL (VALUE) FALSE) + <PRINC "=> "> + <&1 .EXPR> + <TERPRI> + <>> + +<DEFINE FRAME-COUNT (FRM) + #DECL ((FRM) FRAME (VALUE) FIX) + <REPEAT ((I 0)) + #DECL ((VALUE I) FIX) + <COND (<==? <FUNCT .FRM> TOPLEVEL> <RETURN .I>) + (<==? <FUNCT .FRM> EVAL> <SET I <+ .I 1>>)> + <SET FRM <FRAME .FRM>>>> + +<DEFINE READER (L-O "ACT" RACT) + #DECL ((VALUE) <OR FALSE FIX>) + <COND (<0? <SETG COUNT <MAX 0 <- ,COUNT 1>>>> + <SETG RSTATE + <PROG DEBUG-RDR () + #DECL ((DEBUG-RDR) <SPECIAL ACTIVATION>) + <BREAK-SEQ + <PUT ,BREAK-FORM 2 .L-O> + <RESUMER>> + <SET TLF <FRAME <RESUMER>>> + <RESUME T> + <SET DITEM <RESUME #DISMISS BREAKR <RESUMER>>> + <RETURN <> .RACT>>>) + (ELSE ,RSTATE)>> + +<PROG () + <SETG BREAK-FORM <FORM BREAKR ARG>> + <GDECL (BREAK-FORM) <FORM ATOM ANY>> + ',BREAKR ;"For GLUE"> + +<DEFINE BREAKR ('L-O + "AUX" (OUTCHAN ,OUTCHAN) (INCHAN ,INCHAN) (OBLIST ,BREAKR-OBL) + "ACT" LERR\ !-INTERRUPTS) + #DECL ((OUTCHAN INCHAN OBLIST) <SPECIAL ANY> + (LERR\ !-INTERRUPTS) <SPECIAL <OR ACTIVATION FRAME>>) + <SET LERR\ !-INTERRUPTS + <FRAME <FRAME .LERR\ !-INTERRUPTS>>> + <COND (<TYPE? ,BREAKR RSUBR RSUBR-ENTRY> + <SET LERR\ !-INTERRUPTS <FRAME .LERR\ !-INTERRUPTS>>)> + <SET LAST-OUT .L-O> + <REPEAT ((QUICK-RUN!-IEDIT DEBUG) OB) + #DECL ((QUICK-RUN!-IEDIT) <SPECIAL ANY>) + <SET OB <READ>> + <TERPRI> + <PRIN1 <SET LAST-OUT <EVAL .OB>>> + <TERPRI>>> + +<DEFINE CHAR-INTERRUPT (CHAR CHAN "EXTRA" MESS (CNT 0)) + ;"Character Interrupt Handler for DEBUG process" + #DECL ((CHAR) CHARACTER (CHAN) CHANNEL + (CNT) FIX (MESS) <OR FALSE FIX>) + <COND (<L? ,DSTATE 0> ;"DEBUGR off ?" + <ERROR INTERRUPT ,DSTATE CHAR-INTERRUPT>) + (<==? .CHAR ,BEGIN-CHAR> ;"Begin debugging" + <1STEP <RESUMER>> + <SETG DSTATE 1> + <RESET .CHAN> + <COND (<AND <ASSIGNED? QUICK-RUN!-IEDIT <RESUMER>> + <==? T <LVAL QUICK-RUN!-IEDIT <RESUMER>>>> + <SET LEV + <FRAME-COUNT <LVAL LERR\ !-INTERRUPTS <RESUMER>>>> + <BREAK-SEQ '<ERRET T> <RESUMER>>) + (ELSE <SET LEV <FRAME-COUNT <FRAME <RESUMER>>>>)> + <DISMISS T>) + (<==? ,DSTATE 0> ;"Debugger not running ?" + <COND (<==? .CHAR ,QUIT-CHAR> ;"Quit while not ON ?" + <OFF ,CHAR-HANDLER> + <SETG DSTATE -1> + <RESET .CHAN> + <DISMISS T>)> ;"Else Ignore") + (<AND <SET MESS + <COND (<==? .CHAR ,NEXT-CHAR> 1) + (<==? .CHAR ,OVER-CHAR> 2) + (<==? .CHAR ,ARG-CHAR> 3) + (<==? .CHAR ,RPT-CHAR> 4) + (<==? .CHAR ,POP-CHAR> 5) + (<==? .CHAR ,END-CHAR> + <FREE-RUN <RESUMER>> + 0) + (<==? .CHAR ,QUIT-CHAR> + <FREE-RUN <RESUMER>> <OFF ,CHAR-HANDLER> + -1)>> + <ASSIGNED? DEBUG-RDR>> ;"Valid activation character ?" + <CLEAR-LINE .CHAN> + <DISMISS .MESS .DEBUG-RDR>) + (<==? .CHAR <ASCII 127>> ;"Delete Character ?" + <SET CNT </ ,COUNT 10>>) + (<AND <G=? <ASCII .CHAR> <ASCII !\0>> + <L=? <ASCII .CHAR> <ASCII !\9>>> ;"Digit Character ?" + <SET CNT <+ <* 10 ,COUNT> <ASCII .CHAR> -48>>)> + <SETG COUNT .CNT>> + +<AND ',CHAR-INTERRUPT ;"For GLUE"> + +<PUT <SETG CHAR-INT + <GET ,INCHAN INTERRUPT '<ERROR NO-INTERRUPTS!-ERRORS>>> + 4 + 100000> + +<DEFINE CLEAR-LINE (CHAN "EXTRA" (OUTCHAN ,OUTCHAN)) + ;"Clear line of activation char etc." + #DECL ((OUTCHAN CHAN) CHANNEL) + <RESET .CHAN> + <COND (,ITS <PRINC "H�L">)> + <PUT .OUTCHAN 14 0>> + +\ +;"Save on TRACE list, info on last TLNT cycles of the Debugr" + +<DEFINE DTRACE (PURPOSE DSTATE CURLEV LEV INFO ITEM "EXTRA" V) + #DECL ((V) <VECTOR [6 ANY]>) + <PUTREST ,TRACEND <SETG TRACEND ,TRACE>> ;"Move oldest to end" + <SETG TRACE <REST ,TRACE>> + <PUTREST ,TRACEND ()> + <SET V <1 ,TRACEND>> ;"Newest info" + <PUT .V 1 .PURPOSE> + <PUT .V 2 .DSTATE> + <PUT .V 3 .CURLEV> + <PUT .V 4 .LEV> + <PUT .V 5 .INFO> + <PUT .V 6 .ITEM> + <SETG TCNT <+ ,TCNT 1>>> + +<PROG () + <SETG TLNT 20> <GDECL (TLNT) FIX> + <SETG TRACE <ILIST ,TLNT '<IVECTOR 6 '0>>> + <SETG TRACEND <REST ,TRACE <- ,TLNT 1>>> + <GDECL (TRACE TRACEND) <LIST <VECTOR [6 ANY]>>> + <SETG TCNT 0> <GDECL (TCNT) FIX> + <SETG TRACING? T> <GDECL (TRACING?) <OR FALSE ATOM>>> + +<ENDPACKAGE> diff --git a/src/mudbug/dfl.hand b/src/mudbug/dfl.hand new file mode 100644 index 00000000..82f39f92 --- /dev/null +++ b/src/mudbug/dfl.hand @@ -0,0 +1,81 @@ +; "READSTRING used by DFL to allow reading of RSUBRs." +<TITLE READST> + <DECLARE ("VALUE" FIX STRING CHANNEL)> + <DPUSH TP* (AB)> + <DPUSH TP* 2(AB)> + <PUSHJ P* IREADS> + <JRST FINIS> + +<INTERNAL-ENTRY IREADS 2> + <SUBM M* (P)> + <MOVE A* <MQUOTE <RGLOC MUDDLE>>> + <ADD A* GLOTOP 1> + <MOVE A* 1(A)> ; ",MUDDLE" + <MOVEI E* 0> + <CAIL A* 100> + <MOVNI E* 1> ; "E IS -1 IF THIS IS BAGBITING 10X" + <MOVE A* (TP)> ; "CHANNEL" + <HRRZ C* 36(A)> ; "LENGTH OF BUFFER" + <JUMPG C* USEBUF> ; "USE BUFFER, IF IT EXISTS" +DOREAD <HRRZ B* -3(TP)> ; "LENGTH OF DEST STRING" + <JUMPL E* [<PUSH P* A> + <PUSH P* B> + <MOVE A* 1(A)> ; "JFN" + <MOVE C* B> + <IDIVI C* 5> ; "NUMBER OF WORDS" + <HRRZ B* -2(TP)> + <ADDI B* 1> + <HRLI B* *444400*> ; "MAKE BPTR" + <SIN-JSYS> ; "DO IT" + <MOVN D* C> ; "# CHARACTERS NOT READ" + <POP P* B> ; "# CHARACTERS TO READ" + <POP P* A> + <JUMPE D* DOUPD> ; "READ EVERYTHING, SO DONE" + <JRST ENDHAK1>]> ; "OTHERWISE, RETURN FUNNINESS" + <MOVE C* B> + <IDIV C* [-5]> ; "NEGATIVE THE NUMBER OF WORDS" + <HRRZ D* -2(TP)> ; "DEST STRING" + <ADDI D* 1> ; "MAKE IT POINT TO RIGHT WORD" + <HRL D* C> ; "AOBJN POINTER" + <MOVE C* 1(A)> ; "CHANNEL NUMBER" + <LSH C* 23> ; "TO AC FIELD" + <IOR C* [<*IOT D>]> ; "IO INSTRUCTION" + <XCT C> ; "DO IT" + <JUMPL D* ENDHAK> ; "IF RAN OUT OF WORDS IN FILE" +DOUPD <ADDM B* 33(A)> ; "UPDATE ACCESS POINTER" +DOLEAV <MOVSI A* <TYPE-CODE FIX>> + <SUB TP* [<(4) 4>]> + <JRST MPOPJ> ; "RETURN LENGTH OF STRING" +ENDHAK <HLRES D> ; "# OF WORDS NOT READ" +ENDHAK1 <IMULI D* 5> ; "TO CHARACTERS" + <ADD B* D> ; "# OF CHARACTERS READ" + <JRST DOLEAV> +; "CHANNEL IS IN A, LENGTH OF BUFFER IS IN C, DEST STRING IS -2(TP)" +USEBUF <MOVE B* C> ; "SAVE BUFFER LENGTH" + <IDIVI C* 5> ; "# WORDS IN BUFFER, ALMOST" + <JUMPE D* NOREM> + <SUBI D* 5> +NOREM <ADDB D* 33(A)> ; "NEW MUDDLE ACCESS POINTER" + <IDIVI D* 5> ; "# WORDS" + <JUMPL E* [<PUSH P* A> + <PUSH P* B> + <MOVE A* 1(A)> ; "JFN" + <MOVE B* D> ; "ACCESS POINTER" + <SFPTR> + <JFCL> + <POP P* B> + <POP P* A> + <JRST DIDACC>]> + <*CALL ACC> ; "UPDATE CHANNEL ACCESS" + <JFCL> +; "# OF WORDS TO SKIP OVER IS IN C" +DIDACC <MOVE B* 37(A)> ; "GET BPTR" + <ADD B* C> ; "MUNG RH" + <HRLI B* *10700*> ; "MUNG LH" + <MOVEM B* 37(A)> + <HLLZS 36(A)> ; "SET STRING LENGTH TO 0" + <JRST DOREAD> +ACC <SETZ> + <SIXBIT "ACCESS"> + <(1) A> ; "CHANNEL NUMBER" + <SETZ D> ; "NEW ACCESS POINTER" \ No newline at end of file diff --git a/src/mudbug/dfl.utaa47 b/src/mudbug/dfl.utaa47 new file mode 100644 index 00000000..a4900de2 --- /dev/null +++ b/src/mudbug/dfl.utaa47 @@ -0,0 +1,394 @@ + + +<PACKAGE "DFL"> + +"Fast FLOADer for people who use TECO to debug MUDDLE" + +<ENTRY DFL RDFL FLO DFL-RETRY UN-DFL> + +"Package containing UNLINK, UNPURIFY, PURE?" +<USE "UNLINK"> + +"Contains READST" +<FLOAD "MUDBUG;DFL CRUFT"> + +<SETG DFL-BUFLEN 600> + +<SETG FILPTR-SAVE 1> +<SETG FILNAM-SAVE 2> +<SETG OBLIST-SAVE 3> + +<MANIFEST DFL-BUFLEN FILPTR-SAVE FILNAM-SAVE OBLIST-SAVE> + +<SETG 6STRING <ISTRING 6>> + +<SETG DFL-BUF <REST <SETG TDFL-BUF <ISTRING <+ ,DFL-BUFLEN 50> !\ >> 50>> + +<SETG DFL-ZERO-STR <REST <SETG DFL-FILNAM <ISTRING 40 !\ >> 40>> + +<SETG DFL-STRUC <REST <SETG DFL-NAM-SCRATCH <IVECTOR 10 "">> 9>> + +<GDECL (TDFL-BUF DFL-BUF DFL-ZERO-STR) + STRING + (DFL-FILNAM) + <OR ATOM STRING> + (DFL-FUNC-NAM) + <OR STRUCTURED ATOM> + (DFL-STRUC) + <VECTOR [REST <OR STRING FALSE>]>> + +<DEFINE DFL ("OPTIONAL" (FUNC-NAME ,DFL-FUNC-NAM) (FILNAM ,DFL-FILNAM) + (HAIR <>)) + #DECL ((FUNC-NAME) <OR STRUCTURED ATOM> (FILNAM) <OR ATOM STRING>) + <FDFL .FUNC-NAME .FILNAM .HAIR '["<DEF" ["INE " "MAC "]] <>>> + +<DEFINE RDFL ("OPTIONAL" (FUNC-NAME ,DFL-FUNC-NAM) (FILNAM ,DFL-FILNAM) + (HAIR <>) (READ2? <AND <ASSIGNED? GLUE> .GLUE>)) + #DECL ((FUNC-NAME) <OR STRUCTURED ATOM> (FILNAM) <OR ATOM STRING> + (READ2?) <OR ATOM FALSE>) + <FDFL .FUNC-NAME .FILNAM .HAIR "<SETG " .READ2?>> + +<DEFINE FDFL (FUNC-NAME FILNAM HAIR STR READ2?) + #DECL ((FUNC-NAME) <OR STRUCTURED ATOM> (FILNAM) <OR ATOM STRING>) + <COND (<TYPE? .FILNAM ATOM> <SET FILNAM <SPNAME .FILNAM>>)> + <SETG DFL-FUNC-NAM .FUNC-NAME> + <SETG DFL-FILNAM .FILNAM> + <DO-DFL <DFL-SETUP .FUNC-NAME> .FILNAM .STR .HAIR .READ2?>> + +<DEFINE DFL-SETUP (FUNC-NAME + "AUX" (DFL-STRUC ,DFL-STRUC) (DFL-SCRATCH ,DFL-NAM-SCRATCH) + (TL <LENGTH .DFL-SCRATCH>)) + #DECL ((FUNC-NAME) <OR ATOM STRUCTURED> (TL) FIX + (DFL-SCRATCH DFL-STRUC) VECTOR) + <COND + (<TYPE? .FUNC-NAME ATOM> <PUT .DFL-STRUC 1 <SPNAME .FUNC-NAME>>) + (<TYPE? .FUNC-NAME STRING> <PUT .DFL-STRUC 1 .FUNC-NAME>) + (T + <COND (<G? <LENGTH .FUNC-NAME> .TL> + <SET DFL-SCRATCH + <SETG DFL-NAM-SCRATCH + <IVECTOR <SET TL <+ <LENGTH .FUNC-NAME> 5>> "">>> + <SETG DFL-STRUC <REST .DFL-SCRATCH <- .TL 1>>>)> + <SET DFL-SCRATCH <REST .DFL-SCRATCH <- .TL <LENGTH .FUNC-NAME>>>> + <MAPR <> + <FUNCTION (X Y "AUX" (FOO <1 .Y>)) + #DECL ((X) VECTOR (Y) <STRUCTURED [REST <OR ATOM STRING>]>) + <COND (<TYPE? .FOO STRING> <PUT .X 1 .FOO>) + (<PUT .X 1 <SPNAME .FOO>>)>> + .DFL-SCRATCH + .FUNC-NAME> + .DFL-SCRATCH)>> + +<DEFINE DO-DFL (FUNC-NAME FILNAM MEMSTR HAIR READ2? + "AUX" (CHN <OPEN "READ" .FILNAM>) FUNC-NAMLEN + (CHRCNT <- ,DFL-BUFLEN>) TSTR STR (PACKAGE-FLAG <>) FNV + (DFL-BUF ,DFL-BUF) (6STR ,6STRING) ATM FORM RFILNAM BEGACC + (UNLINK <OR .HAIR <RSUBR-LINK>>)) + #DECL ((FUNC-NAME) <VECTOR [REST <OR FALSE STRING>]> (6STR FILNAM) STRING + (CHN) <OR CHANNEL FALSE> (FNV) <OR VECTOR FALSE> (TSTR) STRING + (FUNC-NAMLEN CHRCNT) FIX (MEMSTR) <OR STRING VECTOR> + (PACKAGE-FLAG) <OR FALSE STRING FIX> (STR) <OR FALSE STRING> + (DFL-BUF) STRING (ATM) ATOM (FORM) FORM (READ2? HAIR UNLINK) <OR ATOM FALSE> + (RFILNAM) <VECTOR [4 STRING]> (BEGACC) FIX) + <UNWIND + <AND + .CHN + <SET RFILNAM <VECTOR <7 .CHN> <8 .CHN> <9 .CHN> <10 .CHN>>> + <REPEAT REPNAM ((ANS ()) (ANS1 ()) CHARS-READ) + #DECL ((ANS ANS1) <LIST [REST ATOM]> (CHARS-READ) FIX) + <SET CHRCNT <+ .CHRCNT ,DFL-BUFLEN>> + <SET TSTR ,TDFL-BUF> + <SUBSTRUC <REST .DFL-BUF <- ,DFL-BUFLEN 50>> 0 50 .TSTR> + <SET CHARS-READ <READST .DFL-BUF .CHN>> + <COND (<NOT .PACKAGE-FLAG> + <COND (<AND <SET PACKAGE-FLAG <MEMBER "PACKA" .TSTR>> + <SET PACKAGE-FLAG <BACK .PACKAGE-FLAG>> + <COND (<==? <1 .PACKAGE-FLAG> !\R> + <SET PACKAGE-FLAG <BACK .PACKAGE-FLAG>>) + (T)> + <COND (<N==? <1 .PACKAGE-FLAG> !\<> + <SET PACKAGE-FLAG <>>) + (T)> + <NOT <MEMQ <1 <BACK .PACKAGE-FLAG>> ";'">>> + <ACCESS .CHN <- ,DFL-BUFLEN <LENGTH .PACKAGE-FLAG>>> + <EVAL <READ .CHN>> + <PROG () + <SET CHARS-READ <READST .DFL-BUF .CHN>> + <COND (<SET PACKAGE-FLAG <MEMBER "ENTRY" .DFL-BUF>> + <SET PACKAGE-FLAG <BACK .PACKAGE-FLAG>> + <COND (<==? <1 .PACKAGE-FLAG> !\R> + <SET PACKAGE-FLAG <BACK .PACKAGE-FLAG>>)> + <COND (<OR <N==? <1 .PACKAGE-FLAG> !\<> + <MEMQ <1 .PACKAGE-FLAG> ";'">> + <RETURN>)> + <ACCESS .CHN <+ <- <17 .CHN> .CHARS-READ> + <- ,DFL-BUFLEN + <LENGTH .PACKAGE-FLAG>>>> + <READ .CHN> + <AGAIN>)>> + <PROG () + <COND (<AND <SET PACKAGE-FLAG + <MEMBER "<USE" <REST .DFL-BUF>>> + <OR <==? <5 .PACKAGE-FLAG> !\ > + <MEMBER <SUBSTRUC .PACKAGE-FLAG 4 6 .6STR> + '["-TOTAL" "-DEFER"]>>> + <ACCESS .CHN <+ <- <17 .CHN> .CHARS-READ> + <- ,DFL-BUFLEN + <LENGTH .PACKAGE-FLAG>>>> + <EVAL <READ .CHN>> + <SET CHARS-READ <READST .DFL-BUF .CHN>> + <AGAIN>)> + <SET PACKAGE-FLAG "">>) + (<SET PACKAGE-FLAG 0>)>)> + <PROG () + <AND + <COND (<OR <AND <NOT <SET STR <SUBSTRING-SEARCH .MEMSTR .TSTR>>> + <L? .CHARS-READ ,DFL-BUFLEN>> + <AND .STR <L? <LENGTH .STR> <- ,DFL-BUFLEN .CHARS-READ>>>> + <PROG () + <CLOSE .CHN> + <AND <TYPE? .PACKAGE-FLAG STRING> <ENDPACKAGE>> + <AND .UNLINK <NOT <EMPTY? .ANS1>> <UNLINK .ANS1 .HAIR>> + <RETURN <CHTYPE (EOF-FOUND-BEFORE-THESE + !<MAPF ,LIST + <FUNCTION (X) <OR .X <MAPRET>>> + .FUNC-NAME>) + FALSE> + .REPNAM>>) + (T)> + .STR + <NOT <LENGTH? .STR 40>> + <SET FUNC-NAMLEN <- <LENGTH .STR> + <REPEAT ((S .STR)) + <COND (<MEMQ <1 .S> %<STRING <ASCII 32> ;"Char Space" + <ASCII 9> ;"Char Tab" + <ASCII 13> ;"Char C.R.">> + <RETURN <LENGTH .S>>)> + <COND (<EMPTY? <SET S <REST .S>>> + <RETURN 0>)>>>> + <COND + (<AND <SET FNV + <MEMBER <SUBSTRUC .STR + 0 + .FUNC-NAMLEN + <BACK ,DFL-ZERO-STR .FUNC-NAMLEN>> + .FUNC-NAME>> + <NOT <MEMQ <1 <BACK .STR 9>> ";'">>> + <ACCESS .CHN + <SET BEGACC <+ .CHRCNT <- ,DFL-BUFLEN <LENGTH .STR> 8>>>> + <SET ATM <2 <SET FORM <READ .CHN>>>> + <COND (<AND .UNLINK + <GASSIGNED? .ATM> + <TYPE? ,.ATM RSUBR RSUBR-ENTRY>> + <SET ANS1 (.ATM !.ANS1)>) + (<SET ANS (.ATM !.ANS)>)> + <EVAL .FORM> + <PUTPROP .ATM + DFL + <VECTOR <PUTBITS <17 .CHN> <BITS 18 18> .BEGACC> .RFILNAM .OBLIST>> + <PUT .FNV 1 <>> + <COND (<AND .READ2? + <TYPE? ,.ATM RSUBR>> + <EVAL <READ .CHN>>)> + <COND (<OR? !.FUNC-NAME> + <ACCESS .CHN <+ .CHRCNT ,DFL-BUFLEN>> + <AGAIN>) + (T + <AND <TYPE? .PACKAGE-FLAG STRING> <ENDPACKAGE>> + <CLOSE .CHN> + <AND .UNLINK <NOT <EMPTY? .ANS1>> <UNLINK .ANS1 .HAIR>> + <COND (<NOT <EMPTY? .ANS1>> + <PUTREST <REST .ANS1 <- <LENGTH .ANS1> 1>> .ANS> + <SET ANS .ANS1>)> + <RETURN .ANS .REPNAM>)>) + (<SET TSTR .STR> <AGAIN>)>>>>> + <CLOSE .CHN>>> + +<DEFINE SUBSTRING-SEARCH SS (MEMSTR STR "AUX" TSTR TARG) + #DECL ((TSTR) <OR FALSE STRING> (TARG) STRING + (STR) STRING (MEMSTR) <OR STRING <VECTOR STRING VECTOR>>) + <COND (<TYPE? .MEMSTR STRING> + <COND (<SET TSTR <MEMBER .MEMSTR .STR>> + <REST .TSTR <LENGTH .MEMSTR>>)>) + (<SET TSTR <MEMBER <SET TARG <1 .MEMSTR>> .STR>> + <SET TSTR <REST .TSTR <LENGTH .TARG>>> + <MAPF <> + <FUNCTION (SECOND "AUX" TEMP (RT .TSTR)) + #DECL ((RT SECOND) STRING) + <REPEAT () + <COND (<==? <1 .SECOND> <1 .RT>> + <SET RT <REST .RT>> + <COND (<EMPTY? <SET SECOND <REST .SECOND>>> + <RETURN .RT .SS>)>) + (<RETURN>)>>> + <2 .MEMSTR>> + <>)>> + +<SETG BEGPTR 1> + +<SETG ENDPTR 2> + +<SETG NAMPTR 3> + +<SETG FILPTR 4> + +<SETG ASSOCI 5> + +<SETG OBLPTR 6> + +<SETG SLEN 6> + +<MANIFEST BEGPTR ENDPTR NAMPTR FILPTR ASSOCI OBLPTR SLEN> + +<SETG TV <IVECTOR ,SLEN>> + +<PUT UNTUPL + DECL + '<TUPLE [REST FIX FIX ATOM <VECTOR [4 STRING]> <VECTOR FIX VECTOR> + <OR OBLIST <LIST [REST OBLIST]>>]>> + +<DEFINE UN-DFL UNACT (ATMS + "OPTIONAL" (FILNAM <>) (FORCE <>) + "AUX" (FOOTOP + <ITUPLE <COND (<TYPE? .ATMS ATOM> ,SLEN) + (T <* <LENGTH .ATMS> ,SLEN>)>>) + (FOOBOT <REST .FOOTOP <LENGTH .FOOTOP>>) FOO FOOSAV + FILP OCH ICH NEWFIL (LOSERS ()) NM1 NM2 SNM DEV) + #DECL ((ATMS) <OR ATOM <LIST [REST ATOM]>> + (NEWFIL FILP) <VECTOR [4 STRING]> + (FILNAM) <OR FALSE STRING <VECTOR [REST STRING]>> + (LOSERS) <LIST [REST ATOM]> (FOO FOOSAV) UNTUPL (FOOTOP) TUPLE + (OCH ICH) <OR FALSE CHANNEL> (FORCE) <OR ATOM FALSE> + (FOOBOT) <OR TUPLE FALSE> (NM1 NM2 SNM DEV) <SPECIAL STRING>) + <COND (<TYPE? .ATMS ATOM> + <COND (<SET FOOBOT <UNSET .ATMS .FOOBOT>> <SET FOO .FOOBOT>) + (<RETURN <CHTYPE ("Not DFLed?" .ATMS) FALSE> .UNACT>)>) + (T + <MAPF <> + <FUNCTION (X "AUX" TEMP) + #DECL ((X) ATOM (TEMP) <OR FALSE UNTUPL>) + <COND (<SET TEMP <UNSET .X .FOOBOT>> + <SET FOO .TEMP>) + (T <SET LOSERS (.X !.LOSERS)>)>> + .ATMS> + <COND (<G? <LENGTH .ATMS> 1> <DO-SORT .FOO>)>)> + <SET FOOSAV .FOO> + <SET FILP <FILPTR .FOO>> + <SET SNM <4 .FILP>> + <SET DEV "DSK"> + <SET FN1 <1 .FILP>> + <SET FN2 <2 .FILP>> + <OR .FILNAM <SET FILNAM .FILP>> + <COND (<TYPE? .FILNAM STRING> + <COND (<SET OCH <OPEN "READ" .FILNAM>> + <CLOSE .OCH> + <SET DEV <9 .OCH>> + <SET SNM <10 .OCH>>)>) + (T + <AND <SET OCH + <OPEN "READ" <1 .FILNAM> ">" <3 .FILNAM> <4 .FILNAM>>> + <CLOSE .OCH>>)> + <COND (<SET ICH <OPEN "READ" !<FILPTR .FOO!>>> + <COND (<OR .FORCE + <NOT .OCH> + <N=? <9 .ICH> <9 .OCH>> + <N=? <10 .ICH> <10 .OCH>> + <N=? <7 .ICH> <7 .OCH>> + <=? <8 .ICH> <8 .OCH>>>) + (<RETURN <CHTYPE ("Would destroy later version!" + <STRING <9 .ICH> + !\: + <10 .ICH> + !\; + <7 .ICH> + !\ + <8 .ICH>> + <STRING <9 .OCH> + !\: + <10 .OCH> + !\; + <7 .OCH> + !\ + <8 .OCH>>) + FALSE> + .UNACT>)> + <SET OCH <OPEN "PRINT" "_DFL >">> + <REPEAT (NEWBEG ATM VAL (OUTCHAN .OCH) OBLIST) + #DECL ((OUTCHAN) <SPECIAL CHANNEL> + (OBLIST) <SPECIAL ANY>) + <COND (<EMPTY? .FOO> + <COPY-TO-CHR .ICH .OCH <FILE-LENGTH .ICH>> + <CLOSE .ICH> + <COND (<TYPE? .FILNAM STRING> + <RENAME .OCH .FILNAM>) + (<RENAME .OCH + <1 .FILNAM> + ">" + <3 .FILNAM> + <4 .FILNAM>>)> + <SET NEWFIL + <VECTOR <7 .OCH> + <8 .OCH> + <9 .OCH> + <10 .OCH>>> + <CLOSE .OCH> + <RETURN>)> + <SET OBLIST <OBLPTR .FOO>> + <COPY-TO-CHR .ICH .OCH <BEGPTR .FOO>> + <SET NEWBEG <17 .OCH>> + <EPRIN1 <COND (<TYPE? <SET VAL ,<SET ATM <NAMPTR .FOO>>> + FUNCTION> + <CHTYPE (DEFINE .ATM !.VAL) FORM>) + (<FORM SETG .ATM .VAL>)>> + <CRLF .OCH> + <CRLF .OCH> + <ACCESS .ICH <ENDPTR .FOO>> + <PUT <ASSOCI .FOO> + 1 + <CHTYPE <PUTBITS <17 .OCH> <BITS 18 18> .NEWBEG> + FIX>> + <SET FOO <REST .FOO ,SLEN>>> + <REPEAT ((FOO .FOOSAV)) + #DECL ((FOO) UNTUPL) + <COND (<EMPTY? .FOO> <RETURN>) + (<PUT <ASSOCI .FOO> 2 .NEWFIL> + <SET FOO <REST .FOO ,SLEN>>)>> + <COND (<NOT <EMPTY? .LOSERS>> + <CHTYPE ("Not DFLed?" !.LOSERS) FALSE>) + (.ATMS)>)>> + +<DEFINE UNSET (ATM TUP "AUX" (AS <GETPROP .ATM DFL>)) + #DECL ((ATM) ATOM (TUP) TUPLE (AS) <OR FALSE <VECTOR FIX VECTOR>> + (VALUE) <OR FALSE UNTUPL>) + <COND (.AS + <PUT <SET TUP <BACK .TUP ,SLEN>> ,NAMPTR .ATM> + <PUT .TUP ,ASSOCI .AS> + <PUT .TUP ,BEGPTR <CHTYPE <GETBITS <FILPTR-SAVE .AS> <BITS 18 18>> FIX>> + <PUT .TUP ,ENDPTR <CHTYPE <GETBITS <FILPTR-SAVE .AS> <BITS 18 0>> FIX>> + <PUT .TUP ,FILPTR <FILNAM-SAVE .AS>> + <PUT .TUP ,OBLPTR <OBLIST-SAVE .AS>>)>> + +<DEFINE COPY-TO-CHR (ICH OCH CT "AUX" (BUF ,DFL-BUF) (INC <- .CT <17 .ICH>>) TINC) + #DECL ((ICH OCH) CHANNEL (TINC INC CT) FIX (BUF) STRING) + <REPEAT () + <SET TINC <READSTRING .BUF .ICH <MIN .INC ,DFL-BUFLEN>>> + <PRINTSTRING .BUF .OCH .TINC> + <COND (<L=? <SET INC <- .INC ,DFL-BUFLEN>> 0> <RETURN>)>>> + +<DEFINE DO-SORT (TUP "AUX" (TV ,TV)) + #DECL ((TUP) UNTUPL) + <REPEAT ((X .TUP) (Y <REST .TUP ,SLEN>) (NEWL <>)) + <COND (<G? <BEGPTR .X> <BEGPTR .Y>> + <SUBSTRUC .X 0 ,SLEN .TV> + <SUBSTRUC .Y 0 ,SLEN .X> + <SUBSTRUC .TV 0 ,SLEN .Y> + <SET NEWL T>)> + <COND (<EMPTY? <SET Y <REST .Y ,SLEN>>> + <COND (.NEWL + <SET X .TUP> + <SET Y <REST .TUP ,SLEN>> + <SET NEWL <>>) + (<RETURN>)>) + (T <SET X <REST .X ,SLEN>>)>>> + +<ENDPACKAGE> diff --git a/src/mudbug/edit.57 b/src/mudbug/edit.57 new file mode 100644 index 00000000..9f8cdfa7 --- /dev/null +++ b/src/mudbug/edit.57 @@ -0,0 +1,1156 @@ +<PACKAGE "EDIT"> + +<RENTRY DEADIT + EDIT + FREDIT + ZNZN + | + E-OVERPRINT + E-VERBOSE + E-PKG + E-?FILE + E-??FILE + EDIT-TABLE + MACSET + MAC + BREAK + SHORT-PRINT> + +<USE "PP" "FR&"> + +<GDECL (E-?FILE E-??FILE) STRING> + +<SETG CURSORS? <>> + +<COND (<G=? ,MUDDLE 100> + <SETG E-OVERPRINT <>> + <SETG E-?FILE "<MDLLIB>EDIT?.DOC"> + <SETG E-??FILE "<MDLLIB>EDIT??.DOC">) + (<SETG E-OVERPRINT T> + <SETG E-?FILE "MUDBUG;EDIT? >"> + <SETG E-??FILE "MUDBUG;EDIT?? >">)> + +<SETG E-VERBOSE <>> + +<SETG E-PKG T> + +<SETG CURL1 (ZNZN)> + +<SETG CURL2 (|)> + +<DEFINE EDIT ("OPTIONAL" JUNK + "AUX" (INCHAN ,INCHAN) (EDIT-ITEM '()) (TOP-ITEM ()) + (COMSTR ,COMSTR) (JUNKSTR ,JUNKSTR) (GO-UP-LEVEL 0) + (GO-UP-RIGHT 0) (HANDLE (1)) (HANDLE2 (2)) SEARCH+ SEARCH- + (LAST-SEARCH ()) (FINISH <>) (PATH ()) (POS 0) + (WHERE <LLOC EDIT-ITEM>) (LOC-LOSER <>) (GETPATH <>) SPATH + P-ON MAC SPOS ITER ITCOM (CURCHAN .INCHAN) PATHLOC GOTO + (LAST-FRAME <FRAME>) SAVOBL TEMP LP) + #DECL ((INCHAN CURCHAN) <SPECIAL CHANNEL> + (EDIT-ITEM) <SPECIAL <PRIMTYPE LIST>> + (SAVOBL HANDLE HANDLE2 PATH SPATH) <SPECIAL LIST> + (LOC-LOSER P-ON) <SPECIAL <OR 'T FALSE>> (GOTO) <SPECIAL CURSOR> + (GETPATH) <SPECIAL <OR ATOM FALSE>> (WHERE) LOCATIVE + (JUNK TOP-ITEM SEARCH- SEARCH+ LAST-SEARCH FINISH SPOS ITER) <SPECIAL ANY> + (GO-UP-LEVEL GO-UP-RIGHT POS ITCOM) <SPECIAL FIX> + (COMSTR JUNKSTR) STRING (MAC) <SPECIAL ANY> (PATHLOC) <SPECIAL ANY> + (LAST-FRAME) <SPECIAL FRAME> (LAST-PATH LP) LIST) + <COND (<NOT <GASSIGNED? CFHAND>> + <SETG CFHAND <ON "CHAR" ,CTRL-F-HANDLER 2 0 ,INCHAN>>)> + <UNWIND + <REPEAT NEW-ITEM () + #DECL ((NEW-ITEM) <SPECIAL ANY>) + <COND (<AND <NOT <ASSIGNED? JUNK>> + <ASSIGNED? LAST-PATH> + <LEGAL? <1 <SET LP .LAST-PATH>>> + <==? LIST <PRIMTYPE <IN <1 .LP>>>>> + <SET WHERE <1 .LP>> + <AND <2 .LP> <SET OBLIST <2 .LP>>> + <SET PATH <REST .LP 2>> + <UNASSIGN LAST-PATH>) + (<ASSIGNED? JUNK> + <COND (<TYPE? .JUNK ATOM> + <COND (,E-PKG + <SET TEMP .JUNK> + <REPEAT (TMP) + <COND (<==? <ROOT> <SET TMP <OBLIST? .TEMP>>> + <SET TEMP <>> + <RETURN>) + (<==? .TMP <GETPROP PACKAGE OBLIST>> + <COND (<AND <GASSIGNED? .TEMP> + <TYPE? <SET TEMP ,.TEMP> LIST>> + <SET SAVOBL .OBLIST> + <SET OBLIST (!.TEMP !.SAVOBL)>)> + <RETURN>) + (<SET TEMP <GETPROP .TMP OBLIST>>) + (ELSE + <RETURN>)>>)> + <SET WHERE + <COND (<GASSIGNED? .JUNK> <GLOC .JUNK>) + (<ASSIGNED? .JUNK> <LLOC .JUNK>) + (T + <SET EDIT-ITEM '#FALSE ("NO-VALUE")> + <LLOC EDIT-ITEM>)>>) + (<==? <PRIMTYPE .JUNK> LIST> + <SET LOC-LOSER T> + <SET WHERE <LLOC JUNK>>) + (<AND <LOCATIVE? .JUNK> + <LEGAL? .JUNK> + <==? LIST <PRIMTYPE <IN .JUNK>>>> + <SET WHERE .JUNK>) + (<AND <TYPE? .JUNK RSUBR RSUBR-ENTRY> + <SET JUNK <3 .JUNK>> + <SET LOC-LOSER T> + <SET WHERE <LLOC JUNK>>>) + (<AND <TYPE? .JUNK FIX> <NOT <SET JUNK <FRM .JUNK>>>>) + (<AND <TYPE? .JUNK FRAME> + <LEGAL? .JUNK> + <NOT <EMPTY? <ARGS .JUNK>>> + <==? <PRIMTYPE <1 <ARGS .JUNK>>> LIST>> + <REPEAT ((FR .JUNK) (OB <1 <ARGS .FR>>) TUP TMP) + #DECL ((FR) FRAME + (OB) <PRIMTYPE LIST> + (TUP) TUPLE + (TMP) FORM) + <AND <MEMQ .OB <SET TUP <ARGS <SET FR <FRAME .FR>>>>> + <AGAIN>> + <AND <MEMQ <FUNCT .FR> + '[TOPLEVEL CALLER LISTEN ERROR MAPF MAPR]> + <RETURN>> + <AND <==? <FUNCT .FR> EVAL> + <TYPE? <1 .TUP> FORM> + <TYPE? <1 <SET TMP <1 .TUP>>> ATOM> + <OR <GASSIGNED? <1 .TMP>> <RETURN>> + <COND (<AND <==? <1 .TMP> APPLY> + <OR <NOT <TYPE? <2 .TMP> FUNCTION>> + <RETURN>> + <TYPE? <2 .TMP> FORM> + <NOT <EMPTY? <2 .TMP>>> + <OR <N==? <1 <2 .TMP>> LVAL> <RETURN>> + <==? <1 <2 .TMP>> GVAL> + <GASSIGNED? <2 <2 .TMP>>>> + <PUTPROP <GLOC <2 <2 .TMP>>> DEFINE>) + (T)> + <TYPE? ,<1 .TMP> FUNCTION RSUBR RSUBR-ENTRY> + <PROG () <PUTPROP <GLOC <1 .TMP>> DEFINE> + <RETURN>>>> + <SET WHERE <AT <ARGS .JUNK> 1>>)>)> + <SET EDIT-ITEM <IN .WHERE>> + <COND (<N==? <GET .WHERE CURSOR> + <GET <CHTYPE .EDIT-ITEM LIST> CURSOR>> + <PUTPROP .WHERE CURSOR> + <AND .CURSORS? <ATTACH .WHERE .EDIT-ITEM>>)> + <PUTPROP .WHERE DEFINE> + <SET TOP-ITEM .WHERE> + <COND (<==? LIST <PRIMTYPE .EDIT-ITEM>> + <REPEAT TOP-LEVEL () + #DECL ((TOP-LEVEL) <SPECIAL ANY>) + <COND (.FINISH + <OR .LOC-LOSER + <SET LAST-PATH + (.WHERE + <> + !.PATH)>> + <COND (<ASSIGNED? SAVOBL> + <PUT .LAST-PATH 2 .OBLIST> + <SET OBLIST .SAVOBL>)> + <RETURN T .NEW-ITEM>) + (.GETPATH + <SET GETPATH <>> + <SET SPATH .PATH> + <COND (<ASSIGNED? GOTO> + <COND (<==? .SEARCH+ .TOP-ITEM> + <UNASSIGN SEARCH+>)> + <SET PATH ()>)>) + (T + <UNASSIGN SEARCH+> + <UNASSIGN SEARCH-> + <SET GO-UP-LEVEL 0> + <SET GO-UP-RIGHT 0>)> + <SCANNER .WHERE 0 .TOP-LEVEL .COMSTR .JUNKSTR> + <COND (<ASSIGNED? GOTO> + <ERR "ERROR, ILLEGAL CURSOR"> + <UNASSIGN GOTO>) + (<ASSIGNED? ITER> + <ERR "ITERATION ENDED, SEARCH FAILED" <>> + <UNASSIGN ITER>) + (<ERR "ERROR, SEARCH FAILED">)> + <AND <ASSIGNED? SPATH> + <SET PATH .SPATH> + <UNASSIGN SPATH> + <AGAIN .TOP-LEVEL>>>)> + <PRINC " +ATTEMPT TO EDIT ILLEGAL ITEM +"> + <SET EDIT-ITEM '#FALSE ("NO-VALUE")> + <SET WHERE <LLOC EDIT-ITEM>> + <SET JUNK 0>> + <PROG () + <AND ,CURSORS? <PUTPROP <IN .TOP-ITEM> CURSOR <GET .TOP-ITEM CURSOR>>> + <AND <ASSIGNED? SAVOBL> <SET OBLIST .SAVOBL>> + <INTFLUSH> + <UNASSIGN GOTO> + <UNASSIGN ITER> + <UNASSIGN ITCOM>>>> + +<DEFINE FREDIT () + <REPEAT ((FR <FRAME>)) + #DECL ((FR) FRAME) + <AND <==? <FUNCT .FR> TOPLEVEL> <RETURN <EDIT #FALSE ("NO FORMS")>>> + <AND <==? <FUNCT .FR> EVAL> + <NOT <EMPTY? <ARGS .FR>>> + <TYPE? <1 <ARGS .FR>> FORM> + <RETURN <EDIT .FR>>> + <SET FR <FRAME .FR>>>> + +<NEWTYPE CURSOR VECTOR '<VECTOR ANY FIX ATOM>> + +<NEWTYPE BREAK FORM> + +<EVALTYPE BREAK FORM> + +<DEFINE BREAKPRINT (OBJ "OPTIONAL" (AMP? <>) (OUTCHAN .OUTCHAN)) + #DECL ((OBJ) BREAK) + <COND (<AND <ASSIGNED? SHORT-PRINT> <NOT .SHORT-PRINT>> + <PRIN1 <CHTYPE .OBJ FORM>>) + (<==? <1 .OBJ> BREAKA> + <COND (.AMP? <PRINC "<&>">) + (<PRIN1 <2 .OBJ>>)> + <PRINC <COND (,E-OVERPRINT "B|") ("||")>>) + (<==? <1 .OBJ> BREAKR> + <PRINC <COND (,E-OVERPRINT "B|") ("||")>> + <COND (.AMP? <PRINC "<&>">) + (<PRIN1 <2 .OBJ>>)>) + (ELSE + <PRINC <COND (,E-OVERPRINT "M|[") ("|M[")>> + <COND (.AMP? + <PRINC <COND (<FLATSIZE <4 .OBJ> 1> <4 .OBJ>) + (ELSE !\&)>>) + (<PRIN1 <4 .OBJ>>)> + <PRINC !\]> + <COND (.AMP? <PRINC "<&>">) + (<PRIN1 <2 .OBJ>>)>)>> + +<PRINTTYPE BREAK ,BREAKPRINT> + +<DEFINE BREAK-PPRINT (OBJ OUTCHAN M "AUX" (START <LINPOS .OUTCHAN>)) + #DECL ((OBJ) BREAK (OUTCHAN) CHANNEL (M) FIX (START) FIX) + <COND (<==? <1 .OBJ> BREAKA> + <FORMS <2 .OBJ> .OUTCHAN .M> + <COND (<G=? <- <LINLNT .OUTCHAN> <LINPOS .OUTCHAN>> 2> + <PRINC "||">) + (<CRLF> + <INDENT-TO .START .OUTCHAN> + <PRINC "||">)>) + (<==? <1 .OBJ> BREAKR> + <PRINC "||"> + <FORMS <2 .OBJ> .OUTCHAN <+ .M 2>>) + (T + <PRINC "|M["> + <FORMS <4 .OBJ> .OUTCHAN <+ .M 3>> + <PRINC !\]> + <CRLF> + <INDENT-TO .START .OUTCHAN> + <FORMS <2 .OBJ> .OUTCHAN .M>)>> + +<PUT BREAK PPRINT ,BREAK-PPRINT> + +<SETG JUNKSTR <ISTRING 200 !\ >> + +<SETG COMSTR <ISTRING 2 !\ >> + +<SETG ALTSTRING ""> + +<SETG GOOD-CHRS + +"!\"#$%&'(*+,-./0123456789:;<=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\^_`abcdefghijklmnopqrstuvwxyz{|}" +> + +<SETG BREAK-CHRS "1234567890-\".,!(<[# +"> + +<GDECL (JUNKSTR COMSTR ALTSTRING GOOD-CHRS BREAK-CHRS) + STRING> + +<DEFINE GET-COM (COMSTR JUNKSTR "AUX" NCHAR (INCHAN .CURCHAN) + (OUTCHAN .OUTCHAN)) + #DECL ((OUTCHAN) CHANNEL (NCHAR) CHARACTER + (COMSTR JUNKSTR VALUE) STRING) + <REPEAT () + <PUT .COMSTR 1 !\ > + <PUT .COMSTR 2 !\ > + <READSTRING .JUNKSTR .INCHAN ,GOOD-CHRS> + <SET NCHAR <NEXTCHR .INCHAN>> + <COND (<==? .NCHAR !\> + <READCHR .INCHAN> + <RETURN <PUT .COMSTR 1 .NCHAR>>) + (<OR <AND <L=? 65 <CHTYPE .NCHAR FIX>> + <G=? 90 <CHTYPE .NCHAR FIX>>> + <==? .NCHAR !\?>> + <READSTRING .COMSTR .INCHAN ,BREAK-CHRS> + <RETURN .COMSTR>) + (<AND <L=? 97 <CHTYPE .NCHAR FIX>> + <G=? 122 <CHTYPE .NCHAR FIX>>> + <READSTRING .COMSTR .INCHAN ,BREAK-CHRS> + <PUT .COMSTR 1 <ASCII <- <ASCII <1 .COMSTR>> 32>>> + <AND <L=? 97 <CHTYPE <2 .COMSTR> FIX>> + <G=? 122 <CHTYPE <2 .COMSTR> FIX>> + <PUT .COMSTR 2 <ASCII <- <ASCII <2 .COMSTR>> 32>>>> + <RETURN .COMSTR>) + (T + <PRINT <SET LAST-OUT <EVAL <READ .INCHAN>>>> + <TERPRI>)>>> + +<DEFINE GET-NUM (JUNKSTR DFL "AUX" NCHAR TEMP (INCHAN .CURCHAN) + (OUTCHAN .OUTCHAN)) + #DECL ((JUNKSTR) STRING (NCHAR) CHARACTER (DFL VALUE) FIX + (INCHAN OUTCHAN) CHANNEL) + <READSTRING .JUNKSTR .INCHAN ,GOOD-CHRS> + <SET NCHAR <NEXTCHR .INCHAN>> + <COND (<==? .NCHAR !\*> <READCHR .INCHAN> 100000) + (<OR <=? .NCHAR !\-> + <AND <L=? 48 <CHTYPE .NCHAR FIX>> + <G=? 57 <CHTYPE .NCHAR FIX>>>> + <SET TEMP <READ .INCHAN>> + <COND (<TYPE? .TEMP FIX> .TEMP) + (T + <PRINC " +ILLEGAL NUMBER "> + <PRIN1 .TEMP> + <TERPRI> + <READSTRING .JUNKSTR .INCHAN ,ALTSTRING> + 0)>) + (T .DFL)>> + +<DEFINE SCANNER THIS-LEVEL1 (WHERE POS UP-LEVEL COMSTR JUNKSTR + "AUX" EDIT-ITEM ITEM-LNTH TYP FROM TO HOLD HOLDANY + TEMP TEMP2 AMOUNT NEW-POS TF LST GLYPH + (CURSORS? ,CURSORS?) THIS-LEVEL + (OUTCHAN .OUTCHAN)) + #DECL ((WHERE) LOCATIVE (EDIT-ITEM LST) <PRIMTYPE LIST> (TYP GLYPH) ATOM + (HOLDANY TEMP TEMP2) ANY (OUTCHAN) CHANNEL + (ITEM-LNTH AMOUNT NEW-POS GO-UP-LEVEL GO-UP-RIGHT FROM TO TF) FIX + (HANDLE HANDLE2 HOLD PATH LST) <PRIMTYPE LIST> (POS) <SPECIAL FIX> + (THIS-LEVEL) <SPECIAL ACTIVATION> (UP-LEVEL) ACTIVATION + (COMSTR JUNKSTR) STRING (CURSORS?) <OR 'T FALSE>) + <SET THIS-LEVEL .THIS-LEVEL1> + ; "This gets around an obscene interpreter bug....(clr)" + <SET EDIT-ITEM <IN .WHERE>> + <SET ITEM-LNTH <LENGTH .EDIT-ITEM>> + <SET POS <MIN .POS .ITEM-LNTH>> + <REPEAT () + <COND + (<OR .FINISH .GETPATH> + <SET PATH (.POS !.PATH)> + <AGAIN .UP-LEVEL>) + (<NOT <EMPTY? .PATH>> + <SET POS <1 .PATH>> + <COND (<NOT <EMPTY? <SET PATH <REST .PATH>>>> + <SCANNER <AT .EDIT-ITEM <+ .POS 1>> + 0 + .THIS-LEVEL + .COMSTR + .JUNKSTR> + <COND (<ASSIGNED? SEARCH+> <SET POS <+ .POS 1>>)>)>) + (<ASSIGNED? SEARCH+> + <COND (<==? .POS .ITEM-LNTH> <RETURN>) + (<COND (<AND <ASSIGNED? GOTO> + <==? .SEARCH+ <AT .EDIT-ITEM <+ .POS 1>>>>) + (<=? .SEARCH+ <NTH .EDIT-ITEM <+ .POS 1>>>)> + <UNASSIGN SEARCH+> + <COND (<ASSIGNED? GOTO> + <SCANNER <AT .EDIT-ITEM <+ .POS 1>> + 0 + .THIS-LEVEL + .COMSTR + .JUNKSTR>) + (<SET POS <+ .POS 1>>)>) + (<==? LIST <PRIMTYPE <NTH .EDIT-ITEM <+ .POS 1>>>> + <SCANNER <AT .EDIT-ITEM <+ .POS 1>> + 0 + .THIS-LEVEL + .COMSTR + .JUNKSTR> + <COND (<ASSIGNED? SEARCH+> <SET POS <+ .POS 1>>)>) + (<SET POS <+ .POS 1>>)>) + (<ASSIGNED? GOTO> + <COND (<AND <L=? <SET TEMP <2 .GOTO>> .ITEM-LNTH> <G=? .TEMP 0>> + <SET POS .TEMP> + <UNASSIGN GOTO>) + (<UNASSIGN GOTO> + <ERR "ERROR, ILLEGAL CURSOR"> + <SET PATH .SPATH> + <UNASSIGN SPATH> + <AGAIN .TOP-LEVEL>)>) + (<ASSIGNED? SEARCH-> + <COND (<0? .POS> <RETURN>) + (<=? .SEARCH- <NTH .EDIT-ITEM .POS>> + <UNASSIGN SEARCH-> + <SET POS <- .POS 1>>) + (<==? LIST <PRIMTYPE <NTH .EDIT-ITEM .POS>>> + <SET POS <- .POS 1>> + <SCANNER <AT .EDIT-ITEM <+ 1 .POS>> + <LENGTH <NTH .EDIT-ITEM <+ 1 .POS>>> + .THIS-LEVEL + .COMSTR + .JUNKSTR> + <COND (<ASSIGNED? SEARCH+> <SET POS <+ .POS 1>>)>) + (<SET POS <- .POS 1>>)>) + (<G? .GO-UP-LEVEL 0> + <SET GO-UP-LEVEL <- .GO-UP-LEVEL 1>> + <AGAIN .UP-LEVEL>) + (<G? .GO-UP-RIGHT 0> + <SET POS <+ .POS 1>> + <COND (<G? <SET GO-UP-RIGHT <- .GO-UP-RIGHT 1>> 0> + <AGAIN .UP-LEVEL>)>) + (<AND <GET-COM .COMSTR .JUNKSTR> <>>) + (<OR <AND <ASSIGNED? EDIT-TABLE> + <SET TEMP <MEMBER .COMSTR .EDIT-TABLE>> + <APPLY <2 .TEMP> .COMSTR .WHERE .POS>> + <AND <GASSIGNED? EDIT-TABLE> + <SET TEMP <MEMBER .COMSTR ,EDIT-TABLE>> + <APPLY <2 .TEMP> .COMSTR .WHERE .POS>>>) + (<=? .COMSTR "UC"> <USE "CURSOR">) + (<=? .COMSTR "UM"> <USE "EMONIT" "MONITOR">) + (<=? .COMSTR "R "> + <SET NEW-POS <+ .POS <SET AMOUNT <GET-NUM .JUNKSTR 1>>>> + <COND (<==? .AMOUNT 100000> <SET POS .ITEM-LNTH>) + (<OR <G? .NEW-POS .ITEM-LNTH> <L? .NEW-POS 0>> + <ERR "ERROR, ARG TO R OUT OF RANGE">) + (<SET POS .NEW-POS>)>) + (<=? .COMSTR "SW"> + <SET NEW-POS <+ .POS 1>> + <COND (<G? <+ .NEW-POS 1> .ITEM-LNTH> + <ERR "ERROR, CAN'T SWAP AT RIGHT EDGE">) + (ELSE + <SET POS .NEW-POS> + <SET TEMP <NTH .EDIT-ITEM .POS>> + <PUT .EDIT-ITEM .POS <NTH .EDIT-ITEM <+ .POS 1>>> + <PUT .EDIT-ITEM <+ .POS 1> .TEMP>)>) + (<=? .COMSTR "L "> + <SET NEW-POS <- .POS <SET AMOUNT <GET-NUM .JUNKSTR 1>>>> + <COND (<==? .AMOUNT 100000> <SET POS 0>) + (<OR <G? .NEW-POS .ITEM-LNTH> <L? .NEW-POS 0>> + <ERR "ERROR, ARG TO L OUT OF RANGE">) + (<SET POS .NEW-POS>)>) + (<AND <OR <=? .COMSTR "IT"> <=? .COMSTR "DO">> + <SET ITER <GET-NUM .JUNKSTR 1>> + <SET ITCOM 0> + <PUT .COMSTR 1 !\M> + <PUT .COMSTR 2 !\ > + <>>) + (<=? .COMSTR "M "> + <READSTRING .JUNKSTR .INCHAN ,GOOD-CHRS> + <SET MAC <READ .INCHAN>> + <AND <TYPE? .MAC FORM> <SET MAC <EVAL .MAC>>> + <COND (<TYPE? .MAC STRING> <MACSET>) + (<ERR "ERROR, MACRO NOT A STRING">)>) + (<=? .COMSTR "SU"> + <SET TEMP <INTREAD .INCHAN>> + <SET TEMP2 <INTREAD .INCHAN>> + <SET ITCOM 0> + <SET ITER 100000> + <SET MAC + <STRING "S " <UNPARSE .TEMP2> "LC " <UNPARSE .TEMP>>> + <MACSET>) + (<=? .COMSTR "QR"> + <COND (<G=? <SET AMOUNT <GET-NUM .JUNKSTR -1>> 0> + <SET JUNK <FRM .AMOUNT>>)> + <CRLF> + <COND (<AND <ASSIGNED? JUNK> <TYPE? .JUNK FRAME> <LEGAL? .JUNK>> + <RETRY .JUNK>) + (<RETRY <FRAME <FRAME>>>)>) + (<OR <=? .COMSTR "U "> <=? .COMSTR "UL">> + <SET GO-UP-LEVEL <SET AMOUNT <GET-NUM .JUNKSTR 1>>> + <AND <==? .AMOUNT 100000> <AGAIN .TOP-LEVEL>>) + (<OR <=? .COMSTR "D "> <=? .COMSTR "DR">> + <COND (<OR <==? .POS .ITEM-LNTH> + <NOT <==? LIST <PRIMTYPE <NTH .EDIT-ITEM <+ .POS 1>>>>>> + <ERR "ERROR, CAN'T GO DOWN">) + (T + <SCANNER <AT .EDIT-ITEM <+ .POS 1>> + 0 + .THIS-LEVEL + .COMSTR + .JUNKSTR> + <COND (<ASSIGNED? SEARCH+> <SET POS <+ .POS 1>>)>)>) + (<=? .COMSTR "F "> <SET POS 0>) + (<=? .COMSTR "B "> <SET POS .ITEM-LNTH>) + (<=? .COMSTR "UT"> <AGAIN .TOP-LEVEL>) + (<=? .COMSTR "V "> <SETG E-VERBOSE <NOT ,E-VERBOSE>>) + (<=? .COMSTR " "> + <COND (<OR ,E-VERBOSE <==? !\ <NEXTCHR .INCHAN>>> + <SAMP .EDIT-ITEM .POS>)>) + (<OR <=? .COMSTR "PU"> <=? .COMSTR "PT">> + <UNWIND <PROG () + <PUTREST .HANDLE .EDIT-ITEM> + <SET HOLD <REST .HANDLE .POS>> + <PUTREST .HOLD <PUTREST <COND (,E-OVERPRINT ,CURL1) (,CURL2)> + <SET HOLD <REST .HOLD>>>> + <SET EDIT-ITEM <CHTYPE <REST .HANDLE> <TYPE .EDIT-ITEM>>> + <SETLOC .WHERE .EDIT-ITEM> + <EPRINT <IN <COND (<=? .COMSTR "PU"> .WHERE) (.TOP-ITEM)>>> + <PUTREST .HANDLE .EDIT-ITEM> + <PUTREST <REST .HANDLE .POS> <REST .HANDLE <+ .POS 2>>> + <SET EDIT-ITEM <CHTYPE <REST .HANDLE> <TYPE .EDIT-ITEM>>> + <SETLOC .WHERE .EDIT-ITEM>> + <PROG () + <PUTREST .HANDLE .EDIT-ITEM> + <PUTREST <REST .HANDLE .POS> <REST .HANDLE <+ .POS 2>>> + <SET EDIT-ITEM <CHTYPE <REST .HANDLE> <TYPE .EDIT-ITEM>>> + <SETLOC .WHERE .EDIT-ITEM>>>) + (<=? .COMSTR "P "> + <COND (<==? .POS .ITEM-LNTH> <ERR "CAN'T PRINT, AT RIGHT EDGE">) + (T <EPRINT <NTH .EDIT-ITEM <+ .POS 1>>>)> + <TERPRI>) + (<OR <=? .COMSTR "S "> <=? .COMSTR "SR">> + <SET GETPATH T> + <READSTRING .JUNKSTR .INCHAN ,GOOD-CHRS> + <COND (<==? <NEXTCHR .INCHAN> !\> <SET SEARCH+ .LAST-SEARCH>) + (T <SET SEARCH+ <SET LAST-SEARCH <READ .INCHAN>>>)>) + (<=? .COMSTR "SL"> + <SET GETPATH T> + <READSTRING .JUNKSTR .INCHAN ,GOOD-CHRS> + <COND (<==? <NEXTCHR .INCHAN> !\> <SET SEARCH- .LAST-SEARCH>) + (T <SET SEARCH- <SET LAST-SEARCH <READ .INCHAN>>>)>) + (<=? .COMSTR "UR"> + <SET GO-UP-RIGHT <GET-NUM .JUNKSTR 1>> + <AGAIN .UP-LEVEL>) + (<=? .COMSTR "DL"> + <COND (<OR <0? .POS> + <NOT <==? LIST <PRIMTYPE <NTH .EDIT-ITEM .POS>>>>> + <ERR "ERROR, CAN'T GO DOWN">) + (T + <SET POS <- .POS 1>> + <SCANNER <AT .EDIT-ITEM <+ .POS 1>> + <LENGTH <NTH .EDIT-ITEM <+ 1 .POS>>> + .THIS-LEVEL + .COMSTR + .JUNKSTR> + <COND (<ASSIGNED? SEARCH+> <SET POS <+ .POS 1>>)>)>) + (<=? .COMSTR "K "> + <SET FROM + <MIN .POS <+ .POS <SET AMOUNT <GET-NUM .JUNKSTR 1>>>>> + <SET TO <MAX .POS <+ .POS .AMOUNT>>> + <AND <==? .AMOUNT 100000> <SET TO .ITEM-LNTH>> + <COND (<OR <L? .FROM 0> <G? .TO .ITEM-LNTH>> + <ERR "ERROR, ARG OUT OF RANGE TO K">) + (T + <PUTREST .HANDLE .EDIT-ITEM> + <PUTREST <REST .HANDLE .FROM> <REST .HANDLE <+ .TO 1>>> + <SET EDIT-ITEM <CHTYPE <REST .HANDLE> <TYPE .EDIT-ITEM>>> + <SET POS <+ .POS <MIN 0 .AMOUNT>>> + <SETLOC .WHERE .EDIT-ITEM> + <SET ITEM-LNTH <LENGTH .EDIT-ITEM>> + <AND .CURSORS? <CUP- .WHERE .POS <- .TO .FROM>>>)>) + (<COND (<=? .COMSTR "I "> <SET TF 0>) + (<=? .COMSTR "G "> <SET TF 1>) + (<=? .COMSTR "IG"> <SET TF -1>)> + <PUTREST .HANDLE .EDIT-ITEM> + <SET HOLD <REST .HANDLE .POS>> + <REPEAT ((NUM 0)) + <READSTRING .JUNKSTR .INCHAN ,GOOD-CHRS> + <COND (<==? !\ <NEXTCHR .INCHAN>> + <AND .CURSORS? <CUP+ .WHERE <- .POS .NUM> .NUM>> + <RETURN>)> + <SET TEMP <READ .INCHAN>> + <COND (<1? .TF> <SET TEMP <EVAL .TEMP>>) + (<L? .TF 0> + <COND (<TYPE? .TEMP ATOM> + <COND (<GASSIGNED? .TEMP> + <COND (<TYPE? ,.TEMP FUNCTION> + <SET TEMP + <FORM DEFINE .TEMP !,.TEMP>>) + (<AND <TYPE? ,.TEMP MACRO> + <TYPE? <1 ,.TEMP> FUNCTION>> + <SET TEMP + <FORM DEFMAC .TEMP !<1 ,.TEMP>>>) + (ELSE + <SET TEMP + <FORM SETG .TEMP ,.TEMP>>)>) + (<ASSIGNED? .TEMP> + <SET TEMP <FORM SET .TEMP ..TEMP>>) + (ELSE <ERR "WARNING, ATOM HAS NO VALUE">)>) + (ELSE <ERR "WARNING, ARG TO IG NOT AN ATOM">)>)> + <PUTREST <SET TEMP (.TEMP)> <REST .HOLD>> + <PUTREST .HOLD .TEMP> + <SET HOLD <REST .HOLD>> + <AND .CURSORS? <ATTACH <AT .HOLD> .TEMP>> + <SET NUM <+ .NUM 1>> + <SET POS <+ 1 .POS>>> + <SET EDIT-ITEM <CHTYPE <REST .HANDLE> <TYPE .EDIT-ITEM>>> + <SETLOC .WHERE .EDIT-ITEM> + <SET ITEM-LNTH <LENGTH .EDIT-ITEM>>) + (<=? .COMSTR "C "> + <COND (<==? .POS .ITEM-LNTH> + <ERR "ERROR, CAN'T CHANGE, AT RIGHT EDGE">) + (T + <SET LST <REST .EDIT-ITEM .POS>> + <SET LAST-IN <INTREAD .INCHAN>> + <COND (<N==? <1 .LST> .LAST-IN> + <PUT .LST 1 .LAST-IN> + <PUTPROP <AT .LST> CURSOR> + <AND .CURSORS? <ATTACH <AT .LST> .LAST-IN>>)>)>) + (<=? .COMSTR "C:"> + <COND (<==? .POS .ITEM-LNTH> + <ERR "ERROR, CAN'T CHANGE TYPE, AT RIGHT EDGE">) + (<AND <SET TEMP <INTREAD .INCHAN>> + <COND (<NOT <TYPE? .TEMP ATOM>> <ERR "ERROR, BAD ARG TO C:">) + (<NOT <VALID-TYPE? .TEMP>> + <ERR "ERROR, ARG TO C: NOT TYPE NAME">)>>) + (<==? <PRIMTYPE <NTH .EDIT-ITEM <+ 1 .POS>>> + <TYPEPRIM .TEMP>> + <PUT .EDIT-ITEM + <+ .POS 1> + <CHTYPE <NTH .EDIT-ITEM <+ .POS 1>> .TEMP>>) + (T + <PUT .EDIT-ITEM + <+ .POS 1> + <CHTYPE <APPLY ,<TYPEPRIM .TEMP> + !<NTH .EDIT-ITEM <+ .POS 1>>> + .TEMP>> + <PUTPROP <AT .EDIT-ITEM <+ .POS 1>> CURSOR>)>) + (<=? .COMSTR "K*"> + <COND (<==? .POS .ITEM-LNTH> + <ERR "ERROR, CAN'T EXTRACT AT RIGHT EDGE">) + (T + <SET TEMP <INTREAD .INCHAN>> + <COND (<TYPE? .TEMP ATOM> + <SET GLYPH .TEMP> + <SET TEMP <INTREAD .INCHAN>>) + (<SET GLYPH *>)> + <COND (<OR <NOT <STRUCTURED? <NTH .EDIT-ITEM <+ .POS 1>>>> + <NOT <STRUCTURED? .TEMP>>> + <ERR "ERROR, NON-STRUCTURED ARG TO EXTRACT">) + (<NOT <SET TEMP + <GETKSTAR <NTH .EDIT-ITEM <+ .POS 1>> + .GLYPH + .TEMP>>> + <ERR "">) + (T + <PUTREST .HANDLE .EDIT-ITEM> + <PUTREST .HANDLE2 .TEMP> + <PUTREST <REST .HANDLE2 <- <LENGTH .HANDLE2> 1>> + <REST .EDIT-ITEM <+ .POS 1>>> + <PUTREST <REST .HANDLE .POS> <REST .HANDLE2>> + <SET EDIT-ITEM <CHTYPE <REST .HANDLE> <TYPE .EDIT-ITEM>>> + <SET ITEM-LNTH <LENGTH .EDIT-ITEM>> + <SETLOC .WHERE .EDIT-ITEM>)>)>) + (<=? .COMSTR "K:"> + <COND (<OR <==? .POS .ITEM-LNTH> + <NOT <==? LIST <PRIMTYPE <NTH .EDIT-ITEM <+ .POS 1>>>>>> + <ERR "ERROR, BAD K:">) + (T + <AND .CURSORS? + <CUP+ .WHERE + .POS + <- <LENGTH <NTH .EDIT-ITEM <+ .POS 1>>> 1>>> + <AND .CURSORS? <CUP^ .WHERE .POS .EDIT-ITEM>> + <PUTREST .HANDLE .EDIT-ITEM> + <PUTREST .HANDLE2 <NTH .EDIT-ITEM <+ .POS 1>>> + <PUTREST <REST .HANDLE2 <- <LENGTH .HANDLE2> 1>> + <REST .EDIT-ITEM <+ .POS 1>>> + <PUTREST <REST .HANDLE .POS> <REST .HANDLE2>> + <SET EDIT-ITEM <CHTYPE <REST .HANDLE> <TYPE .EDIT-ITEM>>> + <SET ITEM-LNTH <LENGTH .EDIT-ITEM>> + <SETLOC .WHERE .EDIT-ITEM>)>) + (<=? .COMSTR "I:"> + <READSTRING .JUNKSTR .INCHAN ,GOOD-CHRS> + <COND (<NOT <OR <==? <NEXTCHR .INCHAN> !\> + <MEMQ <NEXTCHR .INCHAN> ,BREAK-CHRS>>> + <SET TYP <READ .INCHAN>>) + (T <SET TYP LIST>)> + <SET AMOUNT <GET-NUM .JUNKSTR 1>> + <AND <==? .AMOUNT 100000> <SET AMOUNT <- .ITEM-LNTH .POS>>> + <COND (<OR <L? .AMOUNT 0> <G? <+ .POS .AMOUNT> .ITEM-LNTH>> + <ERR "ERROR, BAD ARG TO I:">) + (<NOT <VALID-TYPE? .TYP>> + <ERR "ERROR, ARG TO I: NOT TYPE NAME">) + (<NOT <==? <TYPEPRIM .TYP> LIST>> + <ERR "ERROR, TYPEPRIM OF ARG TO I: NOT LIST">) + (T + <SET HOLD <REST .EDIT-ITEM <+ .POS .AMOUNT>>> + <PUTREST .HANDLE .EDIT-ITEM> + <PUTREST <REST .HANDLE <+ .POS .AMOUNT>> ()> + <PUTREST <REST .HANDLE .POS> + <PUTREST <SET TEMP + <LIST <CHTYPE <REST .HANDLE <+ .POS 1>> + .TYP>>> + .HOLD>> + <SET EDIT-ITEM <CHTYPE <REST .HANDLE> <TYPE .EDIT-ITEM>>> + <SET ITEM-LNTH <LENGTH .EDIT-ITEM>> + <SETLOC .WHERE .EDIT-ITEM> + <AND .CURSORS? <CUP* .WHERE .POS .AMOUNT .EDIT-ITEM <>>>)>) + (<=? .COMSTR "I*"> + <COND + (<==? .POS .ITEM-LNTH> + <ERR "ERROR, CAN'T IMBED AT RIGHT EDGE">) + (T + <SET TEMP <INTREAD .INCHAN>> + <COND (<TYPE? .TEMP ATOM> + <SET GLYPH .TEMP> + <SET TEMP <INTREAD .INCHAN>>) + (<SET GLYPH *>)> + <REPEAT ((TF 0)) + <COND (<NOT <0? .TF>> + <SET POS <+ .POS 1>> + <AND <==? <NEXTCHR .INCHAN> <ASCII 27>> <RETURN>> + <AND <==? .POS .ITEM-LNTH> + <ERR "ERROR, CAN'T IMBED AT RIGHT EDGE">> + <SET TEMP <READ .INCHAN>>)> + <SET TF 1> + <COND (<NOT <STRUCTURED? .TEMP>> + <ERR "ERROR, ARGUMENT TO IMBED NOT STRUCTURED">) + (T + <AND <L? <SET AMOUNT + <GETSTAR .TEMP + .GLYPH + <REST .EDIT-ITEM .POS> + 0 + T>> + 0> + <SET AMOUNT <- .AMOUNT>> + <CRLF> + <PRINC "WARNING, IMBED NOT COMPLETED. "> + <PRIN1 .AMOUNT> + <PRINC " OBJECTS INSERTED.">> + <PUTREST .HANDLE .EDIT-ITEM> + <PUTREST <REST .HANDLE .POS> + (.TEMP !<REST .HANDLE <+ .POS .AMOUNT 1>>)> + <SET EDIT-ITEM + <CHTYPE <REST .HANDLE> <TYPE .EDIT-ITEM>>> + <SET ITEM-LNTH <LENGTH .EDIT-ITEM>> + <SETLOC .WHERE .EDIT-ITEM> + <AND <0? .AMOUNT> + <CRLF> + <PRINC "WARNING, NO IMBED INDICATOR">> + <AND .CURSORS? + <CUP* .WHERE .POS .AMOUNT .EDIT-ITEM T>>)>>)>) + (<OR <AND <=? .COMSTR "BK"> <SET TEMP BREAKR>> + <AND <=? .COMSTR "BA"> <SET TEMP BREAKA>>> + <COND (<==? .POS .ITEM-LNTH> + <ERR "ERROR, CAN'T PUT BREAK AT RIGHT EDGE">) + (T + <COND (<AND <TYPE? <SET TEMP2 <NTH .EDIT-ITEM <+ .POS 1>>> BREAK> + <==? <1 .TEMP> .TEMP>> + <SET HOLD .TEMP2> + <PUTREST <REST .HOLD> ()>) + (T + <PUT .EDIT-ITEM + <+ .POS 1> + <SET HOLD + <CHTYPE (.TEMP .TEMP2) BREAK>>> + <PUTPROP .TOP-ITEM + BREAKS + <LIST <AT .EDIT-ITEM <+ .POS 1>> + !<GETPROP .TOP-ITEM BREAKS>>>)> + <REPEAT () + <READSTRING .JUNKSTR .INCHAN ,GOOD-CHRS> + <SET HOLD <REST .HOLD>> + <COND (<==? <NEXTCHR .INCHAN> !\> <RETURN>)> + <PUTREST .HOLD (<READ .INCHAN>)>>)>) + (<=? .COMSTR "KT"> + <COND (<==? .POS .ITEM-LNTH> + <ERR "ERROR, CAN'T KT, CURSOR AT RIGHT EDGE">) + (<TYPE? <SET HOLDANY <NTH .EDIT-ITEM <+ .POS 1>>> BREAK> + <PUT .EDIT-ITEM <+ .POS 1> <2 .HOLDANY>>) + (<ERR "ERROR, OBJECT NOT A BREAKPOINT">)>) + (<=? .COMSTR "KB"> + <SET HOLD <GETPROP .TOP-ITEM BREAKS>> + <PUTPROP .TOP-ITEM BREAKS> + <REPEAT () + <COND (<EMPTY? .HOLD> <RETURN>)> + <COND (<TYPE? <SET HOLDANY <IN <1 .HOLD>>> BREAK> + <SETLOC <1 .HOLD> <2 .HOLDANY>>)> + <SET HOLD <REST .HOLD>>>) + (<COND (<=? .COMSTR "O "> + <SET JUNK <EVAL <INTREAD .INCHAN>>> + T) + (<=? .COMSTR "OT"> + <PROG (E) + #DECL ((E) ANY) + <COND (<TYPE? <SET E <NTH .EDIT-ITEM <+ .POS 1>>> ATOM> + <SET JUNK .E>) + (<AND <TYPE? .E FORM> <NOT <EMPTY? .E>> <TYPE? <1 .E> ATOM>> + <SET JUNK <1 .E>>) + (ELSE <ERR "ERROR, CAN'T OPEN">)>> + T)> + <PUTPROP <CHTYPE <IN .TOP-ITEM> LIST> + CURSOR + <GET .TOP-ITEM CURSOR>> + <AGAIN .NEW-ITEM>) + (<=? .COMSTR "X "> + <COND (<==? .POS .ITEM-LNTH> + <ERR "ERROR, CAN'T X, CURSOR AT RIGHT EDGE">) + (<NOT <TYPE? <SET TEMP2 <INTREAD .INCHAN>> ATOM>> + <ERR "ERROR, ARGUMENT TO X NOT ATOM">) + (T + <SET LST <REST .EDIT-ITEM .POS>> + <COND (<SET TEMP <GET <AT .LST> CURSOR>> + <PUTPROP <CHTYPE <1 .LST> LIST> CURSOR .TEMP>)> + <SET .TEMP2 <1 .LST>>)>) + (<=? .COMSTR "Q "> + <PUTPROP <CHTYPE <IN .TOP-ITEM> LIST> + CURSOR + <GET .TOP-ITEM CURSOR>> + <SET FINISH T>) + (<OR <=? .COMSTR "? "> <=? .COMSTR "??">> + <PROG (CHN) + #DECL ((CHN) <OR CHANNEL FALSE>) + <UNWIND <PROG () + <COND (<SET CHN + <OPEN "READ" + <COND (<=? .COMSTR "? "> ,E-?FILE) + (,E-??FILE)>>> + <FILECOPY .CHN .OUTCHAN> + <CLOSE .CHN>) + (<CRLF> + <PRINC "Help file not found: "> + <PRINC .CHN> + <CRLF>)>> + <COND (<AND .CHN <NOT <0? <1 .CHN>>>> <CLOSE .CHN>)>>>) + (T + <PRINC " +ERROR, UNRECOGNIZED COMMAND "> + <PRINC .COMSTR> + <TERPRI> + <ERRFLUSH>)>>> + +<DEFINE BREAKR ('TODO "OPTIONAL" ('TEST T) "ARGS" PO) + #DECL ((PO) LIST) + <PROG ((QUICK-RUN T) + (INCHAN ,INCHAN) (OUTCHAN ,OUTCHAN)) + #DECL ((QUICK-RUN INCHAN OUTCHAN) <SPECIAL ANY>) + <COND (<NOT <EVAL .TEST>> <RETURN>)> + <PRINC "**BREAK**"> + <P&EVAL .PO> + <LISTEN>> + <EVAL .TODO>> + +<DEFINE BREAKA ('TODO "OPTIONAL" ('TEST T) "ARGS" PO) + #DECL ((PO) LIST) + <PROG ((QUICK-RUN T) VALUE + (INCHAN ,INCHAN) (OUTCHAN ,OUTCHAN)) + #DECL ((QUICK-RUN INCHAN OUTCHAN VALUE) <SPECIAL ANY>) + <SET VALUE <EVAL .TODO>> + <COND (<NOT <EVAL .TEST>> <RETURN .VALUE>)> + <PRINC "**BREAK-AFTER**"> + <P&EVAL .PO> + <LISTEN> + .VALUE>> + +<DEFINE P&EVAL (LST "AUX" (OUTCHAN .OUTCHAN)) + #DECL ((OUTCHAN) CHANNEL) + <MAPF <> + <FUNCTION (X) + <PRINT .X> + <SET X <EVAL .X>> + <PRINC "= "> + <&1 .X>> + .LST>> + +<DEFINE SAMP (OBJ POS + "OPTIONAL" (TERPRI? T) + "AUX" (LOBJ <REST .OBJ 0>) (CPOS 0) DIS IT (OBJL <LENGTH .OBJ>) + (OUTCHAN ,OUTCHAN) (AMT <- <13 .OUTCHAN> <14 .OUTCHAN>>)) + #DECL ((OBJ) <PRIMTYPE LIST> (IT) ANY (LOBJ) LIST + (POS CPOS DIS OBJL AMT) FIX + (OUTCHAN) <CHANNEL [12 ANY] FIX FIX>) + <AND .TERPRI? <TERPRI>> + <COND (<TYPE? .OBJ LIST> <PRINC "(">) + (<TYPE? .OBJ FORM> <PRINC "<">) + (<TYPE? .OBJ SEGMENT> <PRINC "!<">) + (<PRINC !\#> <PRIN1 <TYPE .OBJ>> <PRINC " (">)> + <COND (<FLATSIZE .OBJ .AMT> + <REPEAT () + <COND (<==? .CPOS .POS> <PRINC <COND (,E-OVERPRINT " XMZ ") + (" | ")>>) + (<NOT <OR <==? .CPOS .OBJL> <0? .CPOS>>> + <PRINC " ">)> + <COND (<==? .CPOS .OBJL> <RETURN>)> + <SET CPOS <+ .CPOS 1>> + <PRIN1 <1 .LOBJ>> + <SET LOBJ <REST .LOBJ>>>) + (T + <COND (<AND <G? .POS 3> <G? .OBJL 6>> + <PRINC "&.."> + <SET LOBJ + <REST .OBJ + <SET CPOS <MIN <- .POS 3> <- .OBJL 6>>>>>)> + <REPEAT ((N <MIN <- .OBJL .CPOS> 6>)) + #DECL ((N) FIX) + <COND (<==? .CPOS .POS> <PRINC <COND (,E-OVERPRINT " XMZ ") + (" | ")>>) + (<NOT <OR <==? .CPOS .OBJL> <0? .CPOS>>> + <PRINC " ">)> + <COND (<0? .N> <RETURN>)> + <SET DIS <MAX <- .CPOS .POS -1> <- .POS .CPOS>>> + <SET IT <1 .LOBJ>> + <COND (<OR <MONAD? .IT> <FLATSIZE .IT </ 40 .DIS>>> + <PRIN1 .IT>) + (T + <REPEAT () + <COND (<TYPE? .IT LIST> + <PRINC "(&)"> + <RETURN>) + (<TYPE? .IT BREAK> + <BREAKPRINT .IT T> + <RETURN>) + (<TYPE? .IT VECTOR TUPLE> + <PRINC "[&]"> + <RETURN>) + (<TYPE? .IT UVECTOR> + <PRINC "![&!]"> + <RETURN>) + (<TYPE? .IT STRING> + <PRINC "\"&\""> + <RETURN>) + (<TYPE? .IT FORM> + <PRINC "<&>"> + <RETURN>) + (<TYPE? .IT SEGMENT> + <PRINC "!<&!>"> + <RETURN>) + (T + <PRINC "#"> + <PRIN1 <TYPE .IT>> + <PRINC " "> + <SET IT <REST .IT 0>>)>>)> + <SET CPOS <+ .CPOS 1>> + <SET LOBJ <REST .LOBJ>> + <SET N <- .N 1>>> + <COND (<NOT <EMPTY? .LOBJ>> <PRINC "&..">)>)> + <COND (<TYPE? .OBJ FORM> <PRINC ">">) + (<TYPE? .OBJ SEGMENT> <PRINC "!>">) + (T <PRINC ")">)> + <AND .TERPRI? <TERPRI>> + T> + +<DEFINE CTRL-F-HANDLER (CHAR CHAN) + #DECL ((CHAR) CHARACTER) + <COND (<AND <NOT <ASSIGNED? THIS-LEVEL>> + <NOT <ASSIGNED? TOP-ITEM>> + <GASSIGNED? CFHAND>> + <OFF ,CFHAND> + <GUNASSIGN CFHAND>) + (<OR <==? .CHAR <ASCII 6>> + <AND <==? .CHAR <ASCII 19>> <==? .LAST-FRAME <FRAME>>>> + <INT-LEVEL 0> + <RESET .CHAN> + <UNASSIGN ITER> + <UNASSIGN ITCOM> + <UNASSIGN SEARCH+> + <UNASSIGN SEARCH-> + <CRLF> + <AND <ASSIGNED? THIS-LEVEL> + <PUT .CHAN 14 17179869211> + <AGAIN .THIS-LEVEL>>)>> + +<DEFINE DEADIT ("AUX" TMP) + #DECL ((TMP) OBLIST) + <COND (<GASSIGNED? CFHAND> + <OFF ,CFHAND> + <GUNASSIGN CFHAND>)> + <MAPF <> + <FUNCTION (L) #DECL ((L) <LIST [REST ATOM]>) + <MAPF <> ,GUNASSIGN .L>> + <SET TMP <GET IEDIT OBLIST>>> + <UNASSIGN LAST-PATH> + <UNASSIGN EDIT-TABLE> + <GUNASSIGN DEADIT> + <GUNASSIGN EDIT> + <GUNASSIGN FREDIT> + <MAPF <> ,REMOVE ![IEDIT + FREDIT + ZNZN + | + E-OVERPRINT + E-VERBOSE + E-?FILE + E-??FILE + EDIT + DEADIT + EDIT-TABLE + EXPFLOAD + BREAK + SHORT-PRINT!]> + <L-UNUSE "EDIT"> + "It's a Foo--"> + +<DEFINE GETKSTAR KSTAR (OBJ GLYPH TEMP "AUX" VAL) + #DECL ((OBJ TEMP) STRUCTURED (GLYPH) ATOM (KSTAR) <SPECIAL ACTIVATION> + (VAL VALUE) <OR FALSE LIST>) + <SET VAL <GETKSTAR1 .OBJ .GLYPH .TEMP>> + <COND (<AND .VAL <EMPTY? .VAL>> + <PRINC " +ERROR, EXTRACT INDICATOR UNMATCHED."> + <>) + (.VAL)>> + +<DEFINE GETKSTAR1 (OBJ GLYPH TEMP) + #DECL ((OBJ) ANY (TEMP) STRUCTURED (GLYPH) ATOM) + <COND (<N==? <TYPE .OBJ> <TYPE .TEMP>> + <PRINC " +ERROR, TYPES DIFFER IN EXTRACT"> + <RETURN <> .KSTAR>) + (<G? <LENGTH .TEMP> <LENGTH .OBJ>> + <PRINC " +ERROR, EXTRACT TEMPLATE LONGER THAN EXTRACT ITEM"> + <RETURN <> .KSTAR>) + (<MAPF ,LIST + <FUNCTION (ITM1 ITM2) + #DECL ((ITM1 ITM2) ANY) + <COND (<==? .ITM2 .GLYPH> + <MAPRET .ITM1>) + (<STRUCTURED? .ITM2> + <MAPRET !<GETKSTAR1 .ITM1 .GLYPH .ITM2>>) + (<MAPRET>)>> + .OBJ + .TEMP>)>> + +<DEFINE GETSTAR (OBJ GLYPH ETEM + "OPTIONAL" (AMOUNT 0) (HACK? T) + "AUX" NAMOUNT CURS LOC) + #DECL ((OBJ) STRUCTURED (GLYPH) ATOM (VALUE AMOUNT NAMOUNT) FIX (ETEM) LIST + (LOC) LOCL (CURS) <<PRIMTYPE LIST> [REST CURSOR]>) + <SET HACK? <AND .HACK? <==? <PRIMTYPE .OBJ> LIST>>> + <MAPR <> + #FUNCTION ((STRUC "AUX" (STUFF <1 .STRUC>)) + #DECL ((STRUC) STRUCTURED) + <COND (<==? .STUFF .GLYPH> + <COND (<EMPTY? .ETEM> + <SET AMOUNT <- .AMOUNT>> + <MAPLEAVE>)> + <SET AMOUNT <+ .AMOUNT 1>> + <PUT .STRUC 1 <1 .ETEM>> + <COND (<AND .HACK? + <SET CURS + <GET <SET LOC <AT .ETEM>> CURSOR>>> + <PUTPROP .LOC CURSOR> + <SET LOC <AT .STRUC>> + <PUTPROP .LOC CURSOR .CURS> + <MAPF <> + #FUNCTION ((CUR) + #DECL ((CUR) CURSOR) + <PUT .CUR 1 .LOC>) + <REST .CURS>>)> + <SET ETEM <REST .ETEM>>) + (<MONAD? .STUFF>) + (T + <SET NAMOUNT + <GETSTAR .STUFF .GLYPH .ETEM .AMOUNT .HACK?>> + <COND (<L? .NAMOUNT 0> + <SET AMOUNT .NAMOUNT> + <MAPLEAVE>)> + <SET ETEM <REST .ETEM <- .NAMOUNT .AMOUNT>>> + <SET AMOUNT .NAMOUNT>)>) + .OBJ> + .AMOUNT> + +; +" + <GETSTAR <-obj>- <-glyph>- <-etem>-> + + where + + <-obj>- is the new object to be imbedded. + <-glyph>- is the indicator of imbedding in <-obj>-. + <-etem>- is the list from which objects for imbedding are snarfed from. Normal + it is the rest of the structure after the cursor. + + GETSTAR returns the number of imbedded objects. If there are more occurances of + <-glyph>- inside <-obj>- than the number of available objects; it will return the + negative of the number of objected that are actually imbedded. Note that <-obj>- + is changed regardless whether imbedding is completed. + + The variables `AMOUNT' and `HACK?' are for internal recursive calls only. `AMOUNT' + indicates the number of imbedded objects so far. `HACK?' is a flag stating whether + cursors should be moved to the new object. It is initially T until it is inside + a structured object which is not of primtype list. +" + +<DEFINE RDR RDRACT ("TUPLE" T "AUX" (L <LENGTH .MAC>)) + #DECL ((VALUE) CHARACTER + (RDRACT) ACTIVATION + (L) FIX) + <SET SPOS <+ .SPOS 1>> + <COND (<G? .SPOS <+ .L 1>> + <COND (<ASSIGNED? ITER> + <COND (<1? .ITER> + <UNASSIGN ITER> + <UNASSIGN ITCOM> + <INTFLUSH> + !\ ) + (<SET ITER <- .ITER 1>> + <SET ITCOM <+ .ITCOM 1>> + <SET SPOS 0> + <AGAIN .RDRACT>)>) + (T <INTFLUSH> !\ )>) + (<G? .SPOS .L> !\) + (<NTH .MAC .SPOS>)>> + +<DEFINE INTFLUSH () + <SET CURCHAN <SET INCHAN ,INCHAN>> + <COND (<ASSIGNED? P-ON> <SETG E-VERBOSE .P-ON> <UNASSIGN P-ON>)>> + +<DEFINE ERR (STR "OPTIONAL" (FOO T) "AUX" (OUTCHAN .OUTCHAN)) + #DECL ((STR) STRING (OUTCHAN) CHANNEL) + <CRLF> + <PRINC .STR> + <CRLF> + <ERRFLUSH .FOO>> + +<DEFINE ERRFLUSH ("OPTIONAL" (MF T) "AUX" (OUTCHAN .OUTCHAN)) + #DECL ((OUTCHAN) CHANNEL) + <COND (<==? .INCHAN ,INCHAN>) + (T + <COND (<ASSIGNED? ITCOM> + <PRINC " - ITERATION ENDED AFTER "> + <PRIN1 .ITCOM> + <PRINC " PASSES: "> + <UNASSIGN ITCOM>) + (<PRINC " - MACRO FLUSHED: ">)> + <COND (.MF + <PRINTSTRING .MAC .OUTCHAN <COND (<G? .SPOS <LENGTH .MAC>> + <SET SPOS <LENGTH .MAC>>) + (.SPOS)>> + <PRINC <COND (,E-OVERPRINT " <--<-- ") (" <-- ")>> + <PRINTSTRING <REST .MAC .SPOS> .OUTCHAN> + <TERPRI>) + (T <TERPRI>)> + <INTFLUSH>)> + <READSTRING ,JUNKSTR .INCHAN ,ALTSTRING>> + +<DEFINE INTREAD (CHAN "EXTRA" TEMP) + <UNWIND <PROG () + <HANDLER ,IREVENT ,IRHAND> + <SET TEMP <READ .CHAN>> + <OFF ,IRHAND> + .TEMP> + <OFF ,IRHAND>>> + +<DEFINE IRERROR (PROC "AUX" (OUTCHAN .OUTCHAN)) + #DECL ((OUTCHAN) CHANNEL) + <PRINC " +ERROR, TOO FEW ARGUMENTS TO "> + <PRINC ,COMSTR> + <TERPRI> + <INT-LEVEL 0> + <PUT .INCHAN 14 17179869211> + <AGAIN .THIS-LEVEL>> + +<DEFINE MACSET () + <OR <GASSIGNED? MACCHAN> + <SETG MACCHAN <OPEN "READ" "INT:EDIT;MACRO CHAN" ,RDR>>> + <SET SPOS 0> + <SET CURCHAN <SET INCHAN ,MACCHAN>> + <SET P-ON ,E-VERBOSE> + <SETG E-VERBOSE <>>> + +<SETG IREVENT <EVENT "BLOCKED" 7>> + +<SETG IRHAND <HANDLER ,IREVENT ,IRERROR>> + +<OFF ,IRHAND> + +<ENDPACKAGE> diff --git a/src/mudbug/findat.utaa05 b/src/mudbug/findat.utaa05 new file mode 100644 index 00000000..9acab5a6 --- /dev/null +++ b/src/mudbug/findat.utaa05 @@ -0,0 +1,376 @@ + +<PACKAGE "FINDATOM"> + +<ENTRY FINDATOM PLACEH STAR QUOTER> + +<GDECL (SPECV) + <VECTOR [REST <OR FIX FALSE> <OR STRING FALSE>]> + (A) + STRING + (FINDCT) + FIX> + +<SETG PLACEH <ASCII 61>> + +<SETG STAR <ASCII 42>> + +<SETG QUOTER <ASCII 17>> + +<GDECL (PLACEH STAR QUOTER) CHARACTER> + +<DEFINE FINDATOM (SPECSTR + "OPTIONAL" (OBS T) + "TUPLE" TYPE-SPEC + "AUX" SPHACK + (OUTOBL .OBLIST) + SPEC + (TEMP <>) + (VALUE? <>) + (NOVALUE? <>) + (LINK? <>) + (DECL <>) + (TYPES <>) + (OUTCHAN .OUTCHAN) (NOBS <>)) + #DECL ((SPECSTR) <OR ATOM STRING> (OBS) <OR ATOM FALSE LIST OBLIST> + (OUTOBL) <LIST [REST OBLIST]> (VALUE? NOVALUE? LINK?) <OR ATOM FALSE> + (DECL) <OR FORM ATOM FALSE> (TYPES) <OR FALSE <TUPLE [REST ATOM]>> + (SPHACK) <OR STRING FALSE> (TEMP) <OR FALSE ATOM <PRIMTYPE LIST>> + (SPEC) <VECTOR [REST <OR FIX FALSE> <OR STRING FALSE>]> + (TYPE-SPEC) TUPLE (OUTCHAN) CHANNEL (NOBS) <OR FALSE LIST>) + <CRLF> + <COND (<NOT .OBS> + <COND (<EMPTY? .OBS> <SET OBS .OBLIST>) + (<SET NOBS <CHTYPE .OBS LIST>> + <MAPR <> + <FUNCTION (X "AUX" Z (Y <1 .X>)) + <COND (<TYPE? .Y ATOM> + <AND <SET Z <GET .Y OBLIST>> + <PUT .X 1 .Z>>) + (<NOT <TYPE? .Y OBLIST>> + <PUT .X 1 <EVAL .Y>>)>> + .NOBS> + <SET OBS T>)>) + (<AND <TYPE? .OBS LIST> + <EMPTY? .OBS>> + <SET OBS T> + <SET OUTOBL ()>)> + <COND + (<EMPTY? .TYPE-SPEC> <SET VALUE? T> <SET NOVALUE? T>) + (T + <COND (<TYPE? <SET TEMP <NTH .TYPE-SPEC <LENGTH .TYPE-SPEC>>> + LIST> + <SET OUTOBL .TEMP>) + (T <SET TEMP <>>)> + <COND + (<AND .TEMP <==? <LENGTH .TYPE-SPEC> 1>> + <SET VALUE? T> + <SET NOVALUE? T>) + (T + <COND (<MEMQ LINK .TYPE-SPEC> <SET LINK? T>)> + <COND + (<MEMQ T .TYPE-SPEC> <SET VALUE? T> <SET NOVALUE? T>) + (<MEMQ ANY .TYPE-SPEC> + <SET VALUE? T> + <COND (<MEMQ <> .TYPE-SPEC> <SET NOVALUE? T>)>) + (T + <COND (<MEMQ <> .TYPE-SPEC> <SET NOVALUE? T>)> + <REPEAT ((FROB <REST .TYPE-SPEC <- <LENGTH .TYPE-SPEC> 1>>) + (FROB1 <REST .FROB>) FOO) + #DECL ((FROB FROB1) <TUPLE [REST <OR FALSE ATOM LIST FORM>]> + (FOO) <OR FALSE ATOM LIST FORM>) + <COND (<OR <TYPE? <SET FOO <1 .FROB>> LIST FALSE>>) + (<TYPE? .FOO FORM> + <SET DECL <CHTYPE (.FOO !.DECL) FORM>>) + (<VALID-TYPE? .FOO> + <PUT <SET FROB1 <BACK .FROB1>> 1 .FOO>) + (<SET DECL <CHTYPE (.FOO !.DECL) FORM>>)> + <COND (<==? .FROB .TYPE-SPEC> + <COND (.DECL + <COND (<==? <LENGTH .DECL> 1> + <SET DECL <1 .DECL>>) + (<SET DECL <CHTYPE (OR !.DECL) FORM>>)>)> + <COND (<EMPTY? .FROB1>) (<SET TYPES .FROB1>)> + <RETURN>) + (<SET FROB <BACK .FROB>>)>>)>)>)> + <SETG FINDCT 0> + <COND (<TYPE? .SPECSTR ATOM> + <SET SPHACK <>> + <SET SPECSTR <SPNAME .SPECSTR>>) + (<SET SPHACK <OR <MEMQ ,PLACEH .SPECSTR> <MEMQ ,STAR .SPECSTR>>>)> + <COND (.SPHACK + <SET SPEC <SPEC-HACK .SPECSTR>> + <COND (<AND <3 .SPEC> + <NOT <5 .SPEC>> + <4 .SPEC> + <0? <3 .SPEC>> + <NOT <2 .SPEC>> + <0? <1 .SPEC>>> + <SET SPECSTR <4 .SPEC>> + <SET SPHACK <>>)>)> + <COND (<TYPE? .OBS OBLIST> <SET OBS (.OBS)>)> + <COND + (<TYPE? .OBS LIST> + <MAPF <> + <FUNCTION (X "AUX" ATM) + #DECL ((X) OBLIST (ATM) <OR ATOM LINK FALSE>) + <COND (.SPHACK + <SEARCH-OBL .X + .SPEC + .OUTOBL + .VALUE? + .NOVALUE? + .LINK? + .TYPES + .DECL>) + (T + <COND (<AND <SET ATM <LOOKUP .SPECSTR .X>> + <TYPE-CHECK .ATM + .VALUE? + .NOVALUE? + .LINK? + .TYPES + .DECL>> + <PRINIT .ATM .OUTOBL>)>)>> + .OBS>) + (T + <GROVEL <COND (.SPHACK .SPEC) (T .SPECSTR)> + .OUTOBL + .VALUE? + .NOVALUE? + .LINK? + .TYPES + .DECL + .NOBS>)> + <CRLF> + <PRINC "(Found "> + <PRINC ,FINDCT> + <PRINC ")"> + <CRLF> + ,NULL> + +<DEFINE MATCH? (N SIF MBL SIB SPEC + "AUX" (MFL <1 .SPEC>) (TS <2 .SPEC>) + (MINL <+ .MFL .MBL <LENGTH .TS>>) (NL <LENGTH .N>) + (TSL <LENGTH .TS>) TSTR TR) + #DECL ((N TS) STRING (SIF TR) <OR ATOM FALSE> (SIB) <OR STRING FALSE> + (TSTR) <OR STRING FALSE> (MBL MFL MINL ML TSL) FIX + (SPEC) <VECTOR [REST <OR FIX FALSE> <OR STRING FALSE>]>) + <SET SPEC <REST .SPEC 2>> + <AND <G=? .NL .MFL> <SET N <REST .N .MFL>>> + <COND + (<L? .NL .MINL> <>) + (<SET TSTR <MEMBER .TS .N>> + <COND + (.SIF + <COND + (<1 .SPEC> + <SET TR + <COND (<2 .SPEC> <MATCH? <REST .TSTR .TSL> <> .MBL .SIB .SPEC>) + (T <MATCH? <REST .TSTR .TSL> T .MBL .SIB <REST .SPEC 2>>)>> + <SET SPEC <PUT <BACK .SPEC 2> 1 0>> + <REPEAT ((TMP .TSTR)) + #DECL ((TMP) <OR FALSE STRING>) + <COND (<AND <NOT .TR> <SET TMP <MEMBER .TS <REST .TMP>>>> + <SET TR <MATCH? .TMP T .MBL .SIB .SPEC>>) + (T <RETURN .TR>)>> + <PUT .SPEC 1 .MFL> + .TR) + (T + <REPEAT () + <COND + (<AND <NOT <SET TR + <OR <==? <SET MINL <LENGTH <REST .TSTR .TSL>>> .MBL> + <AND .SIB <G? .MINL .MBL>>>>> + <SET TSTR <MEMBER .TS <REST .TSTR>>>>) + (T <RETURN .TR>)>>)>) + (<==? .TSTR .N> + <COND (<1 .SPEC> + <COND (<2 .SPEC> <MATCH? <REST .TSTR .TSL> <> .MBL .SIB .SPEC>) + (T <MATCH? <REST .TSTR .TSL> T .MBL .SIB <REST .SPEC 2>>)>) + (T + <OR <==? <SET MINL <LENGTH <REST .TSTR .TSL>>> .MBL> + <AND .SIB <G? .MINL .MBL>>>)>)>)>> + +<DEFINE SPEC-HACK (AST + "AUX" (SPEC + <OR <AND <GASSIGNED? SPECV> ,SPECV> + <SETG SPECV <IVECTOR 50 <>>>>) + (LASTCHR ,PLACEH) + (ASP <REST .SPEC 2>) + (STFLG <>)) + #DECL ((AST) STRING (LASTCHR) CHARACTER (ASP SPEC) VECTOR + (STFLG) <OR ATOM FALSE>) + <REPEAT ((TST <OR <AND <GASSIGNED? A> ,A> <SETG A <ISTRING 20>>>) + (A .TST) (CT 0) CHR ACH) + #DECL ((TST A) STRING (CT) FIX (CHR ACH) CHARACTER) + <COND (<EMPTY? .AST> + <COND (<OR <==? .LASTCHR ,STAR> + <AND <==? .LASTCHR ,PLACEH> .STFLG>> + <PUT .SPEC 1 .CT> + <PUT .SPEC 2 ""> + <PUT <BACK .ASP 2> 1 <>>) + (<==? .LASTCHR ,PLACEH> + <PUT .SPEC 1 .CT> + <PUT .SPEC 2 <>> + <PUT .ASP 1 <>>) + (T + <PUT .ASP 1 <SUBSTRUC .A 0 .CT>> + <PUT .ASP 2 <>> + <PUT .SPEC 1 0> + <PUT .SPEC 2 <>>)> + <RETURN .SPEC>) + (<==? <SET CHR <1 .AST>> ,STAR> + <COND (<N==? .LASTCHR ,STAR> + <COND (<N==? .LASTCHR ,PLACEH> + <PUT .ASP 1 <SUBSTRUC .A 0 .CT>> + <SET TST .A> + <SET CT 0> + <SET ASP <REST .ASP>>)> + <SET ASP <REST <PUT <PUT .ASP 1 0> 2 <>> 2>> + <SET STFLG T>)>) + (<==? .CHR ,PLACEH> + <COND (<==? .LASTCHR ,STAR> <SET CT <+ .CT 1>>) + (<N==? .LASTCHR ,PLACEH> + <SET ASP <REST <PUT .ASP 1 <SUBSTRUC .A 0 .CT>>>> + <SET TST .A> + <SET CT 1>) + (T <SET CT <+ .CT 1>>)>) + (T + <COND (<==? .CHR ,QUOTER> + <SET ACH <1 <SET AST <REST .AST>>>>) + (T <SET ACH .CHR>)> + <COND (<==? .LASTCHR ,STAR> + <SET ASP <REST <PUT .ASP 1 .CT>>> + <SET CT 0>) + (<==? .LASTCHR ,PLACEH> + <SET ASP <REST <PUT .ASP 1 .CT>>> + <SET CT 0>)> + <SET STFLG <>> + <SET TST <REST <PUT .TST 1 .ACH>>> + <SET CT <+ .CT 1>>)> + <SET LASTCHR .CHR> + <SET AST <REST .AST>>>> + +<DEFINE SEARCH-OBL (OBL SPEC OUTOBL VALUE? NOVALUE? LINK? TYPES DECL + "AUX" (SIB <2 .SPEC>) (MBL <1 .SPEC>) SIF (LOSER <>) TLEN) + #DECL ((OBL) OBLIST (SPEC) <VECTOR [REST <OR FIX FALSE> <OR STRING FALSE>]> + (SIB) <OR STRING FALSE> (MBL) FIX + (VALUE? LINK? SIF NOVALUE?) <OR ATOM FALSE> (LOSER) <OR ATOM FALSE> + (TLEN) FIX (OUTOBL) <LIST [REST OBLIST]> (TYPES) <OR FALSE TUPLE> + (DECL) <OR FALSE ATOM FORM>) + <COND (<NOT <3 .SPEC>> <SET LOSER T>) + (<4 .SPEC> <SET SIF <>> <SET SPEC <REST .SPEC 2>>) + (T <SET SIF T> <SET SPEC <REST .SPEC 4>>)> + <MAPF <> + <FUNCTION (BUCKET) + #DECL ((BUCKET) <LIST [REST <OR ATOM LINK>]>) + <MAPF <> + <FUNCTION (ATM) + #DECL ((ATM) <OR ATOM LINK>) + <COND + (.LOSER + <COND (<AND <OR <==? <SET TLEN + <LENGTH <SPNAME <CHTYPE .ATM ATOM>>>> + .MBL> + <AND .SIB <G? .TLEN .MBL>>> + <TYPE-CHECK .ATM + .VALUE? + .NOVALUE? + .LINK? + .TYPES + .DECL>> + <PRINIT .ATM .OUTOBL>)>) + (<AND <MATCH? <SPNAME <CHTYPE .ATM ATOM>> .SIF .MBL .SIB .SPEC> + <TYPE-CHECK .ATM .VALUE? .NOVALUE? .LINK? .TYPES .DECL>> + <PRINIT .ATM .OUTOBL>)>> + .BUCKET>> + .OBL>> + +<DEFINE PRINIT (ATM OBLIST "AUX" (OUTCHAN .OUTCHAN)) + #DECL ((ATM) <OR ATOM LINK> (OBLIST) <SPECIAL <LIST [REST OBLIST]>> + (OUTCHAN) CHANNEL) + <COND (<TYPE? .ATM LINK> + <PRIN1 .ATM> + <PRINC " Link to "> + <PRIN1 ,<CHTYPE .ATM ATOM>> + <CRLF> + <SETG FINDCT <+ ,FINDCT 1>>) + (T + <PRIN1 .ATM> + <AND <GASSIGNED? .ATM> + <PRINC " "> + <PRINC "Gassigned "> + <PRINC <TYPE ,.ATM>>> + <AND <ASSIGNED? .ATM> + <PRINC " "> + <PRINC "Assigned "> + <PRINC <TYPE ..ATM>>> + <CRLF> + <SETG FINDCT <+ ,FINDCT 1>>)>> + +<DEFINE TYPE-CHECK (ATM VALUE? NOVALUE? LINK? TYPES DECL "AUX" VAL) + #DECL ((ATM) <OR ATOM LINK> (VALUE? LINK? NOVALUE?) <OR ATOM FALSE> + (TYPES) <OR FALSE <TUPLE [REST ATOM]>> + (DECL) <OR FORM ATOM FALSE> (VAL) ANY) + <COND (<TYPE? .ATM LINK> <OR .LINK? .VALUE?>) + (<AND .VALUE? .NOVALUE?>) + (<AND .NOVALUE? + <NOT <OR <GASSIGNED? .ATM> <ASSIGNED? .ATM>>>>) + (.VALUE? <OR <GASSIGNED? .ATM> <ASSIGNED? .ATM>>) + (<AND <GASSIGNED? .ATM> + <PROG () + <SET VAL ,.ATM> + T> + <OR <AND .TYPES <MEMQ <TYPE .VAL> .TYPES>> + <AND .DECL <DECL? .VAL .DECL>>>>) + (<AND <ASSIGNED? .ATM> + <PROG () + <SET VAL ..ATM> + T> + <OR <AND .TYPES <MEMQ <TYPE .VAL> .TYPES>> + <AND .DECL <DECL? .VAL .DECL>>>>)>> + +<DEFINE GROVEL (SPEC OUTOBL VALUE? NOVALUE? LINK? TYPES DECL NOBS + "AUX" (CASOC <ASSOCIATIONS>) (SPHACK <NOT <TYPE? .SPEC STRING>>) + TOBL) + #DECL ((SPEC) + <OR STRING + <VECTOR [REST <OR FIX FALSE> <OR STRING FALSE>]>> + (CASOC) + <OR ASOC FALSE> + (SPHACK) + <OR ATOM FALSE> + (TOBL) + ANY + (VALUE? LINK? NOVALUE?) + <OR ATOM FALSE> + (TYPES) + <OR TUPLE FALSE> + (DECL) + <OR FORM FALSE ATOM> + (NOBS) <OR FALSE <LIST [REST OBLIST]>>) + <REPEAT (TMP) + #DECL ((TMP) <OR FALSE ATOM LINK>) + <COND (<AND <==? <INDICATOR .CASOC> OBLIST> + <TYPE? <SET TOBL <AVALUE .CASOC>> OBLIST> + <NOT <MEMQ .TOBL .NOBS>>> + <COND (.SPHACK + <SEARCH-OBL .TOBL + .SPEC + .OUTOBL + .VALUE? + .NOVALUE? + .LINK? + .TYPES + .DECL>) + (<AND <SET TMP <LOOKUP .SPEC <AVALUE .CASOC>>> + <TYPE-CHECK .TMP + .VALUE? + .NOVALUE? + .LINK? + .TYPES + .DECL>> + <PRINIT .TMP .OUTOBL>)>)> + <COND (<NOT <SET CASOC <NEXT .CASOC>>> <RETURN>)>>> + +<ENDPACKAGE> diff --git a/src/mudbug/fr&.ugp030 b/src/mudbug/fr&.ugp030 new file mode 100644 index 00000000..f2016dec --- /dev/null +++ b/src/mudbug/fr&.ugp030 @@ -0,0 +1,263 @@ +<RPACKAGE "FR&" "&"> + +<ENTRY FR&VAL FR& &1 &LIS & &VAL> + +<USE "PP"> + +<DEFINE FR& ;"Prints FUNCT and ARGS for -n- frames down" + ("OPTIONAL" (HOW-MANY 999) (FIRST 0) (OUTC .OUTCHAN)) + #DECL ((HOW-MANY FIRST) FIX (SPECBEF SPECAFT) <SPECIAL ANY> + (OUTC) <CHANNEL [12 ANY] [4 FIX]>) + <TERPRI .OUTC> + <REPEAT ((F <FRM .FIRST>) FF) + #DECL ((F) FRAME (FF) ATOM) + <COND (<0? .HOW-MANY> <RETURN "FUNCT---ARGS">) + (<==? <SET FF <FUNCT .F>> TOPLEVEL> <RETURN TOPLEVEL>) + (<AND ;"Don't print repetitious FSUBR args." + <OR <ASSIGNED? .FF> <GASSIGNED? .FF>> + <TYPE? <VALUE .FF> FSUBR> + <==? <FUNCT <FRAME .F>> EVAL> + <TYPE? <1 <ARGS <FRAME .F>>> FORM> + <==? .FF <1 <1 <ARGS <FRAME .F>>>>>>) + (ELSE + <PRIN1 .FIRST .OUTC> + <COND (<L? .FIRST 10> <PRINC " " .OUTC>) + (ELSE <PRINC !\ .OUTC>)> + <PRIN1 .FF .OUTC> + <PRINC !\ .OUTC> + <AND <L? <14 .OUTC> 13> <PRINC !\ .OUTC>> + <&1 <ARGS .F>> + <TERPRI .OUTC>)> + <SET F <FRAME .F>> + <SET HOW-MANY <- .HOW-MANY 1>> + <SET FIRST <+ .FIRST 1>>>> + +<DEFINE FR&VAL (ATM "OPTIONAL" (HOW-MANY 100000) (FIRST 0)) + #DECL ((ATM) ATOM (HOW-MANY FIRST) FIX) + <COND (<NOT <BOUND? .ATM>> "Atom is not bound anywhere.") + (ELSE + <TERPRI> + <SET HOW-MANY <+ .HOW-MANY 1>> + <REPEAT ((F <FRM .FIRST>) (LAST-LOC <LLOC .ATM>) + (FLG <ASSIGNED? .ATM>) (NUM 0) NEXT-LOC) + #DECL ((F) FRAME (LAST-LOC NEXT-LOC) LOCD (NUM) FIX + (FLG) <OR ATOM FALSE>) + <COND (<==? .NUM .HOW-MANY> + <&VAL "Bound further down to: " .LAST-LOC .FLG> + <RETURN>) + (<==? <FUNCT .F> TOPLEVEL> + <&VAL "Toplevel binding: " .LAST-LOC .FLG> + <RETURN>) + (<NOT <BOUND? .ATM .F>> + <&VAL <- .NUM 1> .LAST-LOC .FLG> + <RETURN>) + (<==? .LAST-LOC <SET NEXT-LOC <LLOC .ATM .F>>>) + (ELSE + <&VAL <- .NUM 1> .LAST-LOC .FLG> + <SET LAST-LOC .NEXT-LOC> + <SET FLG <ASSIGNED? .ATM .F>>)> + <SET F <FRAME .F>> + <SET NUM <+ .NUM 1>>> + "Frame----Value")>> + +<DEFINE &VAL (PRE LOCA FLG "AUX" (OUTCHAN .OUTCHAN)) + #DECL ((LOCA) LOCD (OUTCHAN) CHANNEL) + <PRINC .PRE> + <INDENT-TO 5> + <COND (.FLG <&1 <IN .LOCA>> <TERPRI>) + (ELSE <PRINC "----bound, but not assigned a value---- +">)>> + +<SETG CLOBOT <REST <IVECTOR 12 1> 12>> + +<SETG FSLBOT <REST <IUVECTOR 12 -1> 12>> + +<GDECL (FLSBOT) <UVECTOR [REST FIX]> (CLOBOT) VECTOR> + +<DEFINE & (OBJ "EXTRA" (OUTC .OUTCHAN)) + #DECL ((OBJ) ANY (OUTC) CHANNEL) + <TERPRI .OUTC> + <&1 .OBJ> + <PRINC !\ .OUTC> + .OBJ> + +<SETG ASOC-VEC <IVECTOR 3>> +<DEFINE &1 (CO + "OPTIONAL" (CLLN <- <13 .OUTCHAN> <14 .OUTCHAN>>) + "EXTRA" (OUTC .OUTCHAN) AV) + #DECL ((CO) ANY (M CLLN) FIX (OUTC) CHANNEL (AV) <VECTOR [3 ANY]>) + <COND + (<TYPE? .CO ASOC> + <PUT <SET AV ,ASOC-VEC> 1 <ITEM .CO>> + <PUT .AV 2 <INDICATOR .CO>> + <PUT .AV 3 <AVALUE .CO>> + <PRINC "#ASOC" .OUTC> + <&1 .AV> + .CO) + (<OR <FLATSIZE .CO .CLLN> <MONAD? .CO>> <PRIN1 .CO .OUTC>) + (<TYPE? .CO RSUBR> <PRINC "#RSUBR[&]" .OUTC>) + (<TYPE? .CO CODE> <PRINC "#CODE![&!]" .OUTC>) + (ELSE + <REPEAT (CLOB FSL CLOBN CL? FS LLN STOP (NUM <MIN 12 </ .CLLN 7>>)) + #DECL ((CLOB) VECTOR (FSL) <UVECTOR [REST FIX]> (CL? CLOBN FS LLN NUM) FIX + (STOP) ANY (DOIT) ACTIVATION) + <COND (<L? .NUM 2> <EP3 .CO .OUTC> <RETURN>)> + <SET CLOB ,CLOBOT> + <SET FSL ,FSLBOT> + <SET CLOBN <SET FS 0>> + <SET CL? <OR <LENGTH? .CO .NUM> 1000>> + <SET LLN <- .CLLN <BRSZ .CO> -2>> + <SET STOP + <COND (<L? .CL? 100> <REST .CO .CL?>) + (T <SET LLN <- .LLN 4>> <REST .CO <SET CL? .NUM>>)>> + <REPEAT ((OBJ <REST .CO 0>)) + #DECL ((OBJ) ANY) + <SET FS + <+ .FS + <1 <SET FSL + <PUT <BACK .FSL> + 1 + <+ 1 + <COND (<FLATSIZE <1 .OBJ> .LLN>) + (ELSE + <SET CLOB <PUT <BACK .CLOB> 1 .OBJ>> + <SET CLOBN <+ .CLOBN 1>> + <BRSZ <1 .OBJ>>)>>>>>>> + <COND (<==? <SET OBJ <REST .OBJ>> .STOP> <RETURN>)>> + <COND (<==? .CL? .CLOBN> + <EP2 .CO .STOP .CL? .LLN .OUTC> + <RETURN>) + (<NOT <G? .FS .LLN>> + <COND (<L? .FS </ .LLN 2>> <EP2 .CO .STOP .CL? .LLN .OUTC>) + (ELSE <EP1 .CO .CLOB .STOP .OUTC>)> + <RETURN>)> + <COND + (<REPEAT (TEM BRS) + #DECL ((BRS) FIX (TEM) ANY) + <REPEAT ((FL <REST .FSL>) (VIC .FSL)) + #DECL ((FL) <UVECTOR [REST FIX]> (VIC) <UVECTOR [REST FIX]>) + <COND (<G? <1 .FL> <1 .VIC>> <SET VIC .FL>) + (<EMPTY? <SET FL <REST .FL>>> + <SET CLOBN <+ .CLOBN 1>> + <COND (<L? <SET BRS + <BRSZ <1 <SET TEM <REST .CO <- <LENGTH .VIC> 1>>>>>> + <1 .VIC>> + <SET CLOB <PUT <BACK .CLOB> 1 .TEM>> + <SET FS <- .FS <1 .VIC> <- .BRS>>> + <PUT .VIC 1 .BRS>)> + <RETURN T>)>> + <COND (<==? .NUM .CLOBN> <RETURN #FALSE ()>) + (<==? .CL? .CLOBN> + <EP2 .CO .STOP .CL? .LLN .OUTC> + <RETURN>) + (<NOT <G? .FS .LLN>> + <COND (<L? .FS </ .LLN 2>> <EP2 .CO .STOP .CL? .LLN .OUTC>) + (ELSE <EP1 .CO .CLOB .STOP .OUTC>)> + <RETURN>)>> + <RETURN>) + (ELSE <SET NUM <- .NUM 1>>)>>)> + <MAPR <> + #FUNCTION ((V) #DECL ((V) <VECTOR ANY>) <PUT .V 1 1>) + <TOP ,CLOBOT>> + .CO> + +<DEFINE EP1 (CO CLOB STOP OUTC) + #DECL ((CO STOP) ANY (CLOB) VECTOR (OUTC) CHANNEL) + <BRACK OPENBRAK .CO .OUTC> + <REPEAT ((ROL <REST .CO 0>)) + #DECL ((ROL) ANY) + <COND (<MEMQ .ROL .CLOB> + <BRACK OPENBRAK <1 .ROL> .OUTC> + <PRINC !\& .OUTC> + <BRACK CLOSEBRAK <1 .ROL> .OUTC>) + (ELSE <PRIN1 <1 .ROL> .OUTC>)> + <COND (<OR <==? <SET ROL <REST .ROL>> .STOP> <EMPTY? .ROL>> + <RETURN>) + (ELSE <PRINC !\ .OUTC>)>> + <OR <EMPTY? .STOP> <PRINC " &.." .OUTC>> + <BRACK CLOSEBRAK .CO .OUTC>> + +<DEFINE EP2 (CO STOP NUM TOT OUTC) + #DECL ((CO STOP) ANY (NUM TOT) FIX (OUTC) CHANNEL) + <COND (<L? .TOT <* .NUM 4>> <EP3 .CO .OUTC>) + (ELSE + <BRACK OPENBRAK .CO .OUTC> + <REPEAT ((ROL <REST .CO 0>) (OLD <- <13 .OUTC> <14 .OUTC>>)) + #DECL ((ROL) ANY (OLD) FIX) + <&1 <1 .ROL> </ .TOT .NUM>> + <COND (<OR <==? <SET ROL <REST .ROL>> .STOP> <EMPTY? .ROL>> + <RETURN>) + (ELSE + <PRINC !\ .OUTC> + <SET TOT + <- .TOT + <- .OLD + <SET OLD <- <13 .OUTC> <14 .OUTC>>>>>> + <SET NUM <- .NUM 1>>)>> + <OR <EMPTY? .STOP> <PRINC " &.." .OUTC>> + <BRACK CLOSEBRAK .CO .OUTC>)>> + +<DEFINE EP3 (CO OUTC) + #DECL ((CO) ANY (OUTC) CHANNEL) + <BRACK OPENBRAK .CO .OUTC> + <PRINC !\& .OUTC> + <BRACK CLOSEBRAK .CO .OUTC>> + +<DEFINE BRACK (WHICH WHAT OUTC "AUX" STR) + #DECL ((WHICH) ATOM (WHAT) ANY (OUTC) CHANNEL (STR) <OR FALSE STRING>) + <COND (<SET STR <GETPROP .WHICH <TYPE .WHAT>>> + <PRINC .STR .OUTC>) + (<TYPE? .WHAT ATOM FIX FLOAT>) + (<==? .WHICH OPENBRAK> + <PRINC !\# .OUTC> + <COND (<TYPE? .WHAT BYTES> <PRIN1 <BYTE-SIZE .WHAT> .OUTC>) + (<PRIN1 <TYPE .WHAT> .OUTC>)> + <COND (<SET STR <GETPROP OPENBRAK <PRIMTYPE .WHAT>>> + <PRINC .STR .OUTC>) + (ELSE <PRINC !\? .OUTC>)>) + (<SET STR <GETPROP CLOSEBRAK <PRIMTYPE .WHAT>>> + <PRINC .STR .OUTC>) + (ELSE <PRINC !\? .OUTC>)>> + +<PROG () + <PUTPROP OPENBRAK LIST "("> + <PUTPROP CLOSEBRAK LIST ")"> + <PUTPROP OPENBRAK FORM "<"> + <PUTPROP CLOSEBRAK FORM ">"> + <PUTPROP OPENBRAK VECTOR "["> + <PUTPROP CLOSEBRAK VECTOR "]"> + <PUTPROP OPENBRAK UVECTOR "!["> + <PUTPROP CLOSEBRAK UVECTOR "!]"> + <PUTPROP OPENBRAK STRING "\""> + <PUTPROP CLOSEBRAK STRING "\""> + <PUTPROP OPENBRAK TUPLE "["> + <PUTPROP CLOSEBRAK TUPLE "]"> + <PUTPROP OPENBRAK SEGMENT "!<"> + <PUTPROP CLOSEBRAK SEGMENT "!>"> + <PUTPROP OPENBRAK TEMPLATE "{"> + <PUTPROP CLOSEBRAK TEMPLATE "}"> + <PUTPROP OPENBRACK BYTES "{"> + <PUTPROP CLOSEBRACK BYTES "}">> + +<DEFINE BRSZ (OBJ "AUX" (TOB <TYPE .OBJ>) STR) + #DECL ((OBJ) ANY (TOB) ATOM (VALUE) FIX (STR) <OR STRING FALSE>) + <COND (<SET STR <GETPROP OPENBRAK .TOB>> + <+ <* 2 <LENGTH .STR>> 2>) + (<TYPE? .OBJ ATOM FIX FLOAT> 2) + (<SET STR <GETPROP OPENBRAK <TYPEPRIM .TOB> "?">> + <+ <FLATSIZE .TOB 100> 3 <* 2 <LENGTH .STR>>>)>> + +<DEFINE &LIS ("EXTRA" (OUTC .OUTCHAN)) + #DECL ((ENV) ENVIRONMENT (OUTC) CHANNEL) + <PRINC "READ/EVAL/AMPERSAND PRINT LOOP +" .OUTC> + <REPEAT (TEM (LAST-OUT .LAST-OUT)) + #DECL ((LAST-OUT) <SPECIAL ANY>) + <SET TEM <READ>> + <TERPRI .OUTC> + <COND (<MONAD? <SET LAST-OUT <EVAL .TEM>>> + <PRIN1 .LAST-OUT .OUTC>) + (ELSE <&1 .LAST-OUT>)> + <TERPRI .OUTC>>> + +<ENDPACKAGE> diff --git a/src/mudbug/frmsp.ujmb08 b/src/mudbug/frmsp.ujmb08 new file mode 100644 index 00000000..02086f32 --- /dev/null +++ b/src/mudbug/frmsp.ujmb08 @@ -0,0 +1,134 @@ +<PACKAGE "FRMSP"> + +<ENTRY FRAMESP FR&P FRATMP FRMP FRLVALP FRTYPE FRTYPEP> + +<DEFINE FRAMESP ("OPTIONAL" (PROC <ME>) F1 F2 + "AUX" (LERR\ !-INTERRUPTS + <COND (<TYPE? .PROC FRAME> .PROC) (<FRAME .PROC>)>)) + #DECL ((VALUE) <OR ATOM STRING> (PROC) <OR FRAME PROCESS> (F1 F2) FIX + (LERR\ !-INTERRUPTS) <SPECIAL FRAME>) + <COND (<ASSIGNED? F2> <FRAMES .F1 .F2>) + (<ASSIGNED? F1> <FRAMES .F1>) + (<FRAMES>)>> + +<DEFINE FR&P ("OPTIONAL" (PROC <ME>) F1 F2 + "AUX" (LERR\ !-INTERRUPTS + <COND (<TYPE? .PROC FRAME> .PROC) (<FRAME .PROC>)>)) + #DECL ((VALUE) <OR ATOM STRING> (PROC) <OR FRAME PROCESS> (F1 F2) FIX + (LERR\ !-INTERRUPTS) <SPECIAL FRAME>) + <COND (<ASSIGNED? F2> <FR& .F1 .F2>) + (<ASSIGNED? F1> <FR& .F1>) + (<FR&>)>> + +<DEFINE FRATMP ("OPTIONAL" (PROC <ME>) F1 F2 + "AUX" (LERR\ !-INTERRUPTS + <COND (<TYPE? .PROC FRAME> .PROC) (<FRAME .PROC>)>)) + #DECL ((VALUE) <OR ATOM STRING> (PROC) <OR FRAME PROCESS> (F1 F2) FIX + (LERR\ !-INTERRUPTS) <SPECIAL FRAME>) + <COND (<ASSIGNED? F2> <FRATM .F1 .F2>) + (<ASSIGNED? F1> <FRATM .F1>) + (<FRATM>)>> + +<DEFINE FRMP (NUM + "OPTIONAL" (PROC <ME>) + "AUX" (LERR\ !-INTERRUPTS + <COND (<TYPE? .PROC FRAME> .PROC) (<FRAME .PROC>)>)) + #DECL ((VALUE) FRAME (NUM) FIX (PROC) <OR FRAME PROCESS> + (LERR\ !-INTERRUPTS) <SPECIAL FRAME>) + <FRM .NUM>> + +<DEFINE FRLVALP (ATM + "OPTIONAL" (PROC <ME>) F1 F2 + "AUX" (LERR\ !-INTERRUPTS + <COND (<TYPE? .PROC FRAME> .PROC) (<FRAME .PROC>)>)) + #DECL ((VALUE) STRING (ATM) ATOM (PROC) <OR FRAME PROCESS> (F1 F2) FIX + (LERR\ !-INTERRUPTS) <SPECIAL FRAME>) + <COND (<ASSIGNED? F2> <FRLVAL .ATM .F1 .F2>) + (<ASSIGNED? F1> <FRLVAL .ATM .F1>) + (<FRLVAL .ATM>)>> + +<DEFINE TYPE-ERROR ("TUPLE" TUP) + <AND <ASSIGNED? FRACT> <INT-LEVEL 0> <ERRET TYPE .FRACT>>> + +<GDECL (TENEX?) <OR ATOM FALSE> + (ERROR-IHEADER MPV-IHEADER) IHEADER + (TYPE-ERROR-HANDLER TYPE-MPV-HANDLER) HANDLER> + +<SETG TENEX? <G? ,MUDDLE 100>> + +<SETG ERROR-IHEADER + <OR <GET ERROR!-INTERRUPTS INTERRUPT> <EVENT "ERROR" 100>>> + +<OR ,TENEX? + <SETG MPV-IHEADER + <OR <GET MPV!-INTERRUPTS INTERRUPT> <EVENT "MPV" 100>>>> + +<SETG TYPE-ERROR-HANDLER + <OFF <HANDLER ,ERROR-IHEADER ,TYPE-ERROR>>> + +<OR ,TENEX? + <SETG TYPE-MPV-HANDLER + <OFF <HANDLER ,MPV-IHEADER ,TYPE-ERROR>>>> + +<DEFINE FRTYPE ("OPTIONAL" (DO 1000) (FRM-NUM 0) "AUX" (OUTC .OUTCHAN)) + #DECL ((VALUE) <OR ATOM STRING> (DO FRM-NUM) FIX + (OUTC) <CHANNEL [12 ANY] [4 FIX]>) + <HANDLER ,ERROR-IHEADER ,TYPE-ERROR-HANDLER> + <OR ,TENEX? <HANDLER ,MPV-IHEADER ,TYPE-MPV-HANDLER>> + <CRLF .OUTC> + <UNWIND + <REPEAT ((FR <FRM .FRM-NUM>) FNCT) + #DECL ((VALUE) <OR ATOM STRING> (FR) FRAME (FNCT) ATOM) + <COND (<==? .DO 0> + <OFF ,TYPE-ERROR-HANDLER> + <OR ,TENEX? <OFF ,TYPE-MPV-HANDLER>> + <RETURN "FUNCT---ARGS">) + (<NOT <LEGAL? .FR>> + <OFF ,TYPE-ERROR-HANDLER> + <OR ,TENEX? <OFF ,TYPE-MPV-HANDLER>> + <RETURN "ILLEGAL FRAME">) + (<==? <SET FNCT <FUNCT .FR>> TOPLEVEL> + <OFF ,TYPE-ERROR-HANDLER> + <OR ,TENEX? <OFF ,TYPE-MPV-HANDLER>> + <RETURN .FNCT>)> + <PRIN1 .FRM-NUM .OUTC> + <PRINC !\ .OUTC> + <AND <L? .FRM-NUM 10> <PRINC !\ .OUTC>> + <PRIN1 .FNCT .OUTC> + <PRINC !\ .OUTC> + <AND <==? <14 .OUTC> 8> <PRINC !\ .OUTC>> + <COND + (<EMPTY? <ARGS .FR>> <PRIN1 [] .OUTC>) + (<PRINC !\[ .OUTC> + <MAPR <> + <FUNCTION (OBS "AUX" (OB <1 .OBS>)) + #DECL ((OBS) TUPLE) + <AND <OR <==? <PRIN1 <PROG FRACT () + #DECL ((VALUE) ATOM + (FRACT) <SPECIAL ACTIVATION>) + <TYPE .OB>> + .OUTC> + TYPE> + <NOT <LEGAL? .OB>>> + <PRINC "-illegal" .OUTC>> + <OR <EMPTY? <REST .OBS>> <PRINC !\ .OUTC>>> + <ARGS .FR>> + <PRINC !\] .OUTC>)> + <CRLF .OUTC> + <SET DO <- .DO 1>> + <SET FRM-NUM <+ .FRM-NUM 1>> + <SET FR <FRAME .FR>>> + <PROG () + <OFF ,TYPE-ERROR-HANDLER> + <OR ,TENEX? <OFF ,TYPE-MPV-HANDLER>>>>> + +<DEFINE FRTYPEP ("OPTIONAL" (PROC <ME>) F1 F2 + "AUX" (LERR\ !-INTERRUPTS + <COND (<TYPE? .PROC FRAME> .PROC) (<FRAME .PROC>)>)) + #DECL ((VALUE) <OR ATOM STRING> (PROC) <OR FRAME PROCESS> (F1 F2) FIX + (LERR\ !-INTERRUPTS) <SPECIAL FRAME>) + <COND (<ASSIGNED? F2> <FRTYPE .F1 .F2>) + (<ASSIGNED? F1> <FRTYPE .F1>) + (<FRTYPE>)>> + +<ENDPACKAGE> diff --git a/src/mudbug/im.ubd104 b/src/mudbug/im.ubd104 new file mode 100644 index 00000000..62acd37f --- /dev/null +++ b/src/mudbug/im.ubd104 @@ -0,0 +1,62 @@ +<PACKAGE "IM"> +<ENTRY IMED RESET-IMLAC ERROR-EVENT ERROR-HANDLER IMLAC-INCHAN IMLAC-OUTCHAN> +<USE "TTY" "IMLAC" "CHAN"> + +<DEFINE IMED ("OPTIONAL" OB (EVAL? T) "EXTRA" (REDEFINE T) (QUICKPRINT <>) + (GARBSTR "V ") N) + #DECL ((EVAL?) <OR FALSE 'T> (OB VALUE) ANY + (N) <OR CHARACTER FIX> + (GARBSTR) STRING + (REDEFINE QUICKPRINT) <SPECIAL ANY>) + <RESET .INCHAN> ;"attempt to fix JCM's excessive ESCs" + <COND (<ASSIGNED? OB> + <COND (<NOT <TYPE? .OB ATOM>>) + (<GASSIGNED? .OB> <PUT <GLOC .OB> DEFINE>) + (<ASSIGNED? .OB> <PUT <LLOC .OB> DEFINE>)> + <IMAGE 12> ;"Clear screen" + <PPRINT .OB ,IMLAC-OUTCHAN>)> + <HANDLER ,ERROR-EVENT ,ERROR-HANDLER> + <IMAGE 1> ;"ENTER EDIT AND SCROLL MODES" + <IMAGE 9> + <TTY-OFF> + <COND (<IMLAC-COMMAND> + <RESET-IMLAC> + <ERROR NO-PAGE-XMIT!-ERRORS IMED>) + (ELSE + <SET OB <READ ,IMLAC-INCHAN>> + ;"checks imlac type, and sets cursor so system wins" + <IMAGE 1> + <IMAGE 13> ;"inquire IMLAC command" + <SET N <CHTYPE <TYI> FIX>> + <TYI> ;"flush 'type'" + <TERPRI> + <COND (<G? .N <+ 29 *40*>> ;"in SSV.30 and up" + ;"get linnum" + <IMAGE 1> + <IMAGE 14> + <SET N <- <CHTYPE <TYI> FIX> *40*>> + <PRINC <PUT .GARBSTR 3 <ASCII <+ .N 8>>>> ;"vert pos" + )> + <RESET-IMLAC> + <COND (.EVAL? <EVAL .OB>) + (.OB)>)>> + +<DEFINE RESET-IMLAC () + <OFF ,ERROR-HANDLER> + <IMLAC-RESET> + <RESET ,INCHAN> + <IMAGE 1> ;"LEAVE EDIT MODE" + <IMAGE 8>> + + +<SETG ERROR-EVENT <EVENT "ERROR" 1000>> +<OFF <SETG ERROR-HANDLER <HANDLER ,ERROR-EVENT <FUNCTION ("TUPLE" T) <RESET-IMLAC>>>>> + +<SETG IMLAC-OUTCHAN <OPEN "PRINT" "INT:" ,IMLAC-OUT>> +<SETG IMLAC-INCHAN <OPEN "READ" "INT:" ,IMLAC-IN>> + +<PUT ,IMLAC-OUTCHAN ,LINE-LENGTH <GET ,OUTCHAN ,LINE-LENGTH>> +<PUT ,IMLAC-OUTCHAN ,PAGE-LENGTH <GET ,OUTCHAN ,PAGE-LENGTH>> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mudbug/mend.ujmb22 b/src/mudbug/mend.ujmb22 new file mode 100644 index 00000000..8afd657d --- /dev/null +++ b/src/mudbug/mend.ujmb22 @@ -0,0 +1,953 @@ +<PACKAGE "MEND"> + +<ENTRY MEND MINIT> + +<USE "TTY" "EDIT"> + +<DEFINE MEND ("AUX" STAT-FILE) + #DECL ((VALUE) ANY (STAT-FILE) <OR CHANNEL FALSE>) + <COND (<AND <GASSIGNED? MEND-PROCESS> + <BOUND? HALT ,MEND-PROCESS> + <NOT <LVAL HALT ,MEND-PROCESS>>> + #FALSE ("CANNOT START MEND FROM HERE")) + (<NOT <AND <REOPEN ,OUTCHAN #WORD *000401000000*> + <OR <GASSIGNED? NOUT> + <SETG NOUT + <REOPEN <OPEN "PRINT" "TTY:MEND AREA"> + #WORD *004001000000*>>>>> + #FALSE ("TTY OPENS LOST")) + (<OR <GASSIGNED? MPBOTM> + <COND (<ASSIGNED? MINIT> <MINIT !.MINIT>) (<MINIT>)>> + <GOXY 0 ,MPLINES> + <PRINT-SEP-LINE T> + <CRLF> + <COND (<GASSIGNED? MEND-PROCESS> + <AND <BOUND? MEND-LOOP ,MEND-PROCESS> + <BREAK-SEQ '<RESUME "ENDING" .RES> ,MEND-PROCESS> + <BREAK-SEQ '<MEND1> ,MEND-PROCESS>> + <RESUME T ,MEND-PROCESS>) + (<AND <NOT <GASSIGNED? MDBG>> + <SET STAT-FILE + <OPEN "PRINT" <STRING "JMB;^" <JNAME> " >">>> + <NOT <CLOSE .STAT-FILE>>>) + (<RESUME T <SETG MEND-PROCESS <PROCESS ,MEND2>>>)>)>> + +<DEFINE MEND2 (T) + #DECL ((VALUE) ANY (T) 'T) + <REPEAT ((RES <RESUMER>) + (HAND + <HANDLER <GET <LVAL INCHAN .RES> INTERRUPT> ,MINTS <ME>>) + (QUICKPRINT T) MPMON? REP (BREAKR ,BREAKR!-IEDIT)) + #DECL ((VALUE) ANY (RES) <SPECIAL PROCESS> (HAND) HANDLER + (QUICKPRINT MPMON?) <SPECIAL 'T> (REP) APPLICABLE) + <AND <ASSIGNED? REP .RES> <SET REP <LVAL REP .RES>>> + <SET REP ,MREP .RES> + <SCML <- ,MPBOTM ,MPTOP> ,OUTCHAN> + <PRINC "TL" ,OUTCHAN> + <SETG BREAKR!-IEDIT ,BREAKR> + <SET MPMON? T> + <OR <ASSIGNED? THIS-LEVEL!-IEDIT .RES> + <SET THIS-LEVEL!-IEDIT <> .RES>> + <MEND1> + <OFF .HAND> + <COND (<ASSIGNED? REP> <SET REP .REP .RES> <UNASSIGN REP>) + (<UNASSIGN REP .RES>)> + <SCML 0 ,OUTCHAN> + <SETG BREAKR!-IEDIT .BREAKR> + <UNASSIGN MPMON?> + <OR <LVAL THIS-LEVEL!-IEDIT .RES> + <UNASSIGN THIS-LEVEL!-IEDIT .RES>> + <RESUME "ENDING" .RES> + <HANDLER <GET <LVAL INCHAN .RES> INTERRUPT> .HAND>>> + +<DEFINE PRINT-SEP-LINE ("OPTIONAL" (ALL? <>) "AUX" (OUTCHAN ,NOUT)) + #DECL ((VALUE) ANY (ALL?) <OR 'T FALSE> (OUTCHAN) CHANNEL) + <OR .ALL? <GOXY ,SEP-LENGTH ,MPLINES>> + <PRINC "L"> + <PUT .OUTCHAN 14 <- <14 .OUTCHAN> <COND (<G? ,MUDDLE 52> 3) (2)>>> + <AND .ALL? <PRINC ,SEP-LINE>> + <PRINC <COND (<ASSIGNED? DO-NEXT> "____") ("next")>> + <PRINC "__"> + <PRINC <COND (<AND <ASSIGNED? INVISIBLE> .INVISIBLE> "no") ("__")>> + <PRINC "print__"> + <PRINC <COND (<AND <ASSIGNED? HALT> .HALT> "no") ("__")>> + <PRINC "auto__">> + +<NEWTYPE MSTACK + LIST + '<<PRIMTYPE LIST> [REST + <VECTOR <OR FIX <FALSE FIX>> ;"cursor position" + ANY ;"displayed object" + VECTOR ;"previous MSTACK level" + FIX ;"amount of original object replaced" + ANY ;"unused part of original object" + FRAME ;"frame corresponding to this level" + ATOM ;"specially handled type name" + ANY ;"original object" + FIX ;"level number">]>> + +<PRINTTYPE MSTACK + #FUNCTION ((MS) + <SET MS <3 <1 .MS>>> + <CRLF> + <REPEAT () + <PRINC !\<> + <COND (<NOT <1 .MS>> <PRINC "TOP">) + (<L=? <1 .MS> 0> <PRINC !\->) + (<PRINC <1 .MS>>)> + <PRINC !\ > + <&1 <2 .MS>> + <PRINC !\>> + <CRLF> + <OR <1 .MS> <RETURN>> + <SET MS <3 .MS>>>)> + +<DEFINE MCREATE (MSATOM OB FRM "AUX" MSL) + #DECL ((VALUE) MSTACK (MSATOM) ATOM (OB) ANY (FRM) FRAME + (MSL) <LIST VECTOR>) + <SET MSL ([#FALSE (0) .OB <> 0 .OB .FRM T .OB 0])> + <AND <TYPE? .OB FORM> + <NOT <EMPTY? .OB>> + <MEMQ <1 .OB> '(REPEAT PROG)> + <PUT <1 .MSL> 7 <1 .OB>>> + <PUT <1 .MSL> 3 <1 .MSL>> + <MPRINT <SET .MSATOM <CHTYPE .MSL MSTACK>>>> + +<DEFINE MPUSH (MSATOM OB FRM + "AUX" (MS ..MSATOM) OP OP1 OP2 (BOS <3 <1 .MS>>) (FIRST? T) + "NAME" MPUSH) + #DECL ((VALUE MS) MSTACK (MSATOM) ATOM (OB) ANY (FRM) FRAME (OP OP1 OP2) FIX + (BOS) VECTOR (FIRST?) <OR 'T FALSE> (MPUSH) ACTIVATION) + <SET MS + <OR <MAPR <> + #FUNCTION ((RMS) + <AND <LEGAL? <6 <1 .RMS>>> + <MAPLEAVE <CHTYPE .RMS MSTACK>>> + <SET FIRST? #FALSE ()>) + .MS> + <NOT <INTERRUPT "CHAR" !\ ,INCHAN>> + <INT-LEVEL 0>>> + <SET .MSATOM .MS> + <PUT <1 .MS> 3 .BOS> + <SET OP <4 <1 .MS>>> + <COND + (<AND + <MEMQ <7 <1 .MS>> '(T REPEAT PROG CLAUSE)> + <==? <PRIMTYPE <2 <1 .MS>>> LIST> + <MAPF <> + #FUNCTION ((NOB) + <SET OP <+ .OP 1>> + <AND <==? .NOB .OB> <MAPLEAVE>> + <AND + <==? <PRIMTYPE .NOB> LIST> + <SET OP1 0> + <MAPF <> + #FUNCTION ((NOB1) + <SET OP1 <+ .OP1 1>> + <AND <==? .NOB1 .OB> <MAPLEAVE>> + <AND <==? <PRIMTYPE .NOB1> LIST> + <SET OP2 0> + <MAPF <> + #FUNCTION ((NOB2) + <SET OP2 <+ .OP2 1>> + <AND <==? .NOB2 .OB> + <MAPLEAVE>>) + .NOB1> + <PUT <1 <SET MS + <MPUSH .MSATOM .NOB <6 <1 .MS>>>>> + 7 + CLAUSE> + <SET OP1 .OP2> + <SET NOB .NOB1> + <MAPLEAVE>>) + .NOB> + <PUT <1 <SET MS <MPUSH .MSATOM .NOB <6 <1 .MS>>>>> + 7 + CLAUSE> + <SET .MSATOM .MS> + <SET OP .OP1> + <MAPLEAVE>>) + <5 <1 .MS>>>>) + (<==? <7 <1 .MS>> CLAUSE> + <SET MS <MPOP .MSATOM>> + <AGAIN .MPUSH>) + (<AND <MEMQ <7 <1 .MS>> '(REPEAT PROG)> + <SET OP 2> + <MAPF <> + #FUNCTION ((NOB) + <SET OP <+ .OP 1>> + <AND <==? .NOB .OB> <MAPLEAVE>>) + <REST <8 <1 .MS>> 2>>> + <PUT <1 .MS> 4 <- .OP 1>> + <PUT <1 .MS> 5 <REST <8 <1 .MS>> <- .OP 1>>> + <PUTREST <REST <2 <1 .MS>> <- .OP 2>> <5 <1 .MS>>>) + (<SET OP 0>)> + <PUT <1 .MS> + 1 + <COND (<0? .OP> + <COND (<NOT <1 <1 .MS>>> <1 <1 <1 .MS>>>) + (<L=? <1 <1 .MS>> 0> <1 <1 .MS>>) + (<- <1 <1 .MS>>>)>) + (.OP)>> + <SET MS + <CHTYPE + ([#FALSE (0) .OB .BOS 0 .OB .FRM T .OB <+ 1 <9 <1 .MS>>>] + !.MS) + MSTACK>> + <AND <TYPE? .OB FORM> + <NOT <EMPTY? .OB>> + <MEMQ <1 .OB> '(REPEAT PROG)> + <PUT <1 .MS> 7 <1 .OB>>> + <PUT <2 .MS> 3 <1 .MS>> + <SET .MSATOM .MS> + <COND (.FIRST? <MPRINT .MS PUSH>) (<MPRINT .MS>)>> + +<DEFINE MPOP (MSATOM "AUX" (MS ..MSATOM) ONUM) + #DECL ((VALUE) <OR FALSE MSTACK> (MS) MSTACK (MSATOM) ATOM (ONUM) FIX) + <COND (<LENGTH? .MS 1> #FALSE ()) + (T + <SET ONUM <1 <2 .MS>>> + <COND (<G? .ONUM 0> <SET ONUM <- .ONUM>>) + (<PUT <2 .MS> 1 0>)> + <OR <0? <1 <2 .MS>>> + <COND (<0? <4 <2 .MS>>> + <PUT <2 .MS> + 2 + <CHTYPE (!<SUBSTRUC <2 <2 .MS>> + 0 + <- <1 <2 .MS>> 1>> + <2 <1 .MS>> + !<REST <2 <2 .MS>> <1 <2 .MS>>>) + <TYPE <5 <2 .MS>>>>> + <PUT <2 .MS> 5 <REST <5 <2 .MS>> <1 <2 .MS>>>> + <PUT <2 .MS> 4 <1 <2 .MS>>>) + (T + <PUTREST <REST <2 <2 .MS>> <- <4 <2 .MS>> 1>> + (!<SUBSTRUC <5 <2 .MS>> + 0 + <- <1 <2 .MS>> <4 <2 .MS>> 1>> + <2 <1 .MS>> + !<REST <5 <2 .MS>> + <- <1 <2 .MS>> <4 <2 .MS>>>>)> + <PUT <2 .MS> + 5 + <REST <5 <2 .MS>> <- <1 <2 .MS>> <4 <2 .MS>>>>> + <PUT <2 .MS> 4 <1 <2 .MS>>>)>> + <PUT <2 .MS> 1 <CHTYPE (.ONUM) FALSE>> + <PUT <2 .MS> 3 <3 <1 .MS>>> + <MPRINT <SET .MSATOM <CHTYPE <REST .MS> MSTACK>> POP>)>> + +<DEFINE MREPL (MSATOM OB "AUX" (MS ..MSATOM) (BOS <3 <1 .MS>>)) + #DECL ((VALUE MS) MSTACK (MSATOM) ATOM (OB) ANY (BOS) VECTOR) + <COND (<LEGAL? <6 <1 .MS>>> + <REPEAT () + <OR <==? <7 <1 .MS>> CLAUSE> <RETURN>> + <SET MS + <OR <MPOP .MSATOM> + <NOT <INTERRUPT "CHAR" !\ ,INCHAN>> + <INT-LEVEL 0>>>> + <PUT <1 .MS> 1 #FALSE (0)> + <PUT <1 .MS> 2 .OB> + <PUT <1 .MS> 4 0> + <PUT <1 .MS> 5 .OB> + <MPRINT .MS REPL>) + (<SET MS + <OR <MAPR <> + #FUNCTION ((RMS) + <AND <LEGAL? <6 <1 .RMS>>> + <N==? <7 <1 .RMS>> CLAUSE> + <MAPLEAVE <CHTYPE .RMS MSTACK>>>) + <REST .MS>> + <ERROR ILLEGAL-MSTACK!-ERRORS MREPL>>> + <PUT <1 .MS> 1 #FALSE (0)> + <PUT <1 .MS> 2 .OB> + <PUT <1 .MS> 3 .BOS> + <PUT <1 .MS> 4 0> + <PUT <1 .MS> 5 .OB> + <MPRINT <SET .MSATOM .MS>>)>> + +<DEFINE &2 (OB LN "AUX" (OUTCHAN ,NOUT)) + #DECL ((VALUE OB) ANY (LN) FIX (OUTCHAN) <SPECIAL CHANNEL>) + <PRIN1 .LN> + <PRINC !\ > + <&1 .OB>> + +<DEFINE M& (OB CP0 LN "AUX" (CP <OR .CP0 <1 .CP0>>) TEMP) + #DECL ((VALUE OB TEMP) ANY (CP0) <OR FIX <FALSE FIX>> (LN CP) FIX) + <COND (<0? .CP> <&2 .OB .LN>) + (<L? .CP 0> + <SET CP <- .CP>> + <COND (<G? .CP 8> + <&2 <CHTYPE ('..& !<REST .OB <- <* 5 </ .CP 5>> 3>>) + <TYPE .OB>> + .LN>) + (<&2 .OB .LN>)>) + (T + <SET TEMP <NTH .OB .CP>> + <PUT .OB .CP |> + <COND (<G? .CP 8> + <&2 <CHTYPE ('..& !<REST .OB <- <* 5 </ .CP 5>> 3>>) + <TYPE .OB>> + .LN>) + (<&2 .OB .LN>)> + <PUT .OB .CP .TEMP>)>> + +<DEFINE MPRINT (MS + "OPTIONAL" (TYPE PRINT) (MSLEEP <COND (.INVISIBLE 0) (.MSLEEP)>) + "AUX" CO (OUTCHAN ,NOUT) OINT) + #DECL ((VALUE MS) MSTACK (TYPE) ATOM (MSLEEP) <OR FIX FLOAT> (CO) ANY + (OUTCHAN) CHANNEL (OINT) FIX) + <COND (.INVISIBLE) + (T + <COND (<AND <==? .TYPE PUSH> <N==? .MPLNUM ,MPLINES>> + <SET MPLNUM <+ .MPLNUM 1>> + <GOXY 0 <- .MPLNUM 2>> + <PRINC "L"> + <PUT .OUTCHAN 14 0> + <M& <2 <2 .MS>> <1 <2 .MS>> <9 <2 .MS>>> + <CRLF .OUTCHAN> + <M& <2 <1 .MS>> <1 <1 .MS>> <9 <1 .MS>>>) + (<AND <==? .TYPE POP> + <OR <L=? <- ,MPLINES .MPLNUM> 5> + <LENGTH? .MS <- .MPLNUM 1>>>> + <GOXY 0 <SET MPLNUM <- .MPLNUM 1>>> + <PRINC "LUL"> + <PUT .OUTCHAN 14 0> + <M& <2 <1 .MS>> <1 <1 .MS>> <9 <1 .MS>>>) + (<==? .TYPE REPL> + <GOXY 0 <- .MPLNUM 1>> + <PRINC "L"> + <PUT .OUTCHAN 14 0> + <&2 <2 <1 .MS>> <9 <1 .MS>>>) + (<PRINC "TL"> + <SET MPLNUM 0> + <COND (<LENGTH? .MS <- ,MPLINES 3>> <SET CO <3 <1 .MS>>>) + (<SET CO <3 <NTH .MS <- ,MPLINES 2>>>>)> + <REPEAT () + <SET MPLNUM <+ 1 .MPLNUM>> + <M& <2 .CO> <1 .CO> <9 .CO>> + <OR <1 .CO> <RETURN>> + <CRLF .OUTCHAN> + <SET CO <3 .CO>>> + <REPEAT ((N <- ,MPLINES .MPLNUM>)) + <CRLF .OUTCHAN> + <AND <0? <SET N <- .N 1>>> <RETURN>>>)> + <AND <N==? ,MPTOP <+ ,MPLINES 1>> + <0? <SETG IPRINT-TIME <- ,IPRINT-TIME 1>>> + <SETG IPRINT-TIME ,IPRINT-TIMES> + <GOXY 0 <+ ,MPLINES 1>> + <PRINT-MONS>>)> + <SET OINT <INT-LEVEL 0>> + <SLEEP .MSLEEP> + <INT-LEVEL .OINT> + .MS> + +<DEFINE GOXY (X Y) + #DECL ((X Y) FIX) + <PUT ,NOUT 14 0> + <PRINC <STRING "V" <ASCII <+ .Y 8>> "H" <ASCII <+ .X 8>>> + ,NOUT> + <PUT ,NOUT 14 .X>> + +<SETG REOPEN + %<FIXUP!-RSUBRS '[ +#CODE ![23851171840 23030136832 23751557124 23085677572 17199792126 17180393473 +21474836503 -30598234094 17208442899 -30573592576 23353884672 23088857103 +17859346454 25328615444 24150802432 17859346449 -33940307968 23088857101 +4429185027 216377 1048580 524292 7202209520 0 262146!] + REOPEN + #DECL ("VALUE" <OR FALSE CHANNEL> + CHANNEL <PRIMTYPE WORD>)] + '(52 FINIS!-MUDDLE 228356 (4))>> + +<AND <ASSIGNED? GLUE> + .GLUE + <PUT ,REOPEN GLUE '![5370024193 0 524292!]>> + +<DEFINE MEND1 ("AUX" (HALT <>) (SKIP-THIS <>) (INVISIBLE <>) TUP M MPLNUM + (MSLEEP ,MSLEEP) (NEXT-COUNT 0) (LAST-LEVEL ,LAST-LEVEL) + REP-LOOP FIRST-REP (QUICK-RUN <>) DO-NEXT) + #DECL ((VALUE) FIX (HALT SKIP-THIS INVISIBLE) <SPECIAL <OR 'T FALSE>> + (TUP) <<OR TUPLE VECTOR> <OR 'EVLIN 'EVLOUT> ANY> (M) <SPECIAL + MSTACK> + (MPLNUM NEXT-COUNT LAST-LEVEL) <SPECIAL FIX> + (MSLEEP) <SPECIAL <OR FIX FLOAT>> (REP-LOOP) <SPECIAL ACTIVATION> + (FIRST-REP) <SPECIAL 'T> (QUICK-RUN) <OR 'T FALSE> + (DO-NEXT) <SPECIAL 'T>) + <1STEP .RES> + <AND <ASSIGNED? QUICK-RUN!-IEDIT .RES> + <LVAL QUICK-RUN!-IEDIT .RES> + <SET QUICK-RUN T> + <SET QUICK-RUN <> .RES>> + <RESUME "MENDING" .RES> + <COND + (<OR <REPEAT MEND-LOOP () + #DECL ((VALUE) <OR 'T FALSE> (MEND-LOOP) <SPECIAL ACTIVATION>) + <SET TUP <RESUME T .RES>> + <INT-LEVEL 10> + <SET DO-NEXT T> + <PRINT-SEP-LINE> + <OR <==? ,MPTOP <+ ,MPLINES 1>> <PRINT-MONS T>> + <MCREATE M <1 <2 .TUP>> <FRAME .RES>> + <REPEAT ((EVAL-SELF <>)) + #DECL ((VALUE) 'T (EVAL-SELF) <OR 'T FALSE>) + <COND (<AND <OR <NOT .EVAL-SELF> <SET EVAL-SELF <>>> + .HALT> + <BREAK-SEQ <FORM MHALT .MEND-LOOP> .RES> + <FREE-RUN .RES> + <RESUME T .RES> + <1STEP .RES> + <SET TUP <RESUME T .RES>> + <AND <TYPE? <2 .TUP> DISMISS> + <SET TUP <RESUME T .RES>>>) + (<PROG ((OINT <INT-LEVEL 0>)) + #DECL ((VALUE OINT) FIX) + <SET TUP + <COND (<AND .SKIP-THIS + <==? <1 .TUP> EVLIN>> + <SET SKIP-THIS <>> + <RESUME #DISMISS T .RES>) + (<G=? <9 <1 .M>> .LAST-LEVEL> + <RESUME #DISMISS T .RES>) + (<RESUME T .RES>)>> + <AND <ASSIGNED? QUICK-RUN!-IEDIT .RES> + <LVAL QUICK-RUN!-IEDIT .RES> + <AGAIN>> + <INT-LEVEL .OINT>>)> + <COND (<==? <1 .TUP> EVLIN> + <COND (<TYPE? <1 <2 .TUP>> + ACTIVATION + ASOC + ATOM + BITS + BYTES + CHANNEL + CHARACTER + CLOSURE + CODE + DECL + DISMISS + ENVIRONMENT + FALSE + FIX + FLOAT + FRAME + FSUBR + FUNCTION + HANDLER + IHEADER + ILLEGAL + LINK + LOCA + LOCAS + LOCB + LOCD + LOCL + LOCR + LOCS + LOCT + LOCU + LOCV + LOSE + MACRO + OBLIST + OFFSET + PCODE + PRIMTYPE-C + PROCESS + QUICK-ENTRY + QUICK-RSUBR + READA + RSUBR + RSUBR-ENTRY + SPLICE + STORAGE + STRING + SUBR + TAG + TEMPLATE + TIME + TUPLE + TYPE-C + TYPE-W + UNBOUND + WORD> + <SET EVAL-SELF T> + <RESUME #DISMISS T .RES>) + (<MPUSH M <1 <2 .TUP>> <FRAME .RES>>)>) + (<MREPL M <2 .TUP>> <OR <MPOP M> <RETURN>>)>> + <UNASSIGN DO-NEXT> + <PRINT-SEP-LINE> + <INT-LEVEL 0>> + <BOUND? MEND-LOOP>> + <AND <BOUND? COMMAND-LOOP .RES> + <NOT <LEGAL? <LVAL MEND-LOOP .RES>>> + <COND (<AND <ASSIGNED? REP-LOOP> + <ASSIGNED? COMMAND-LOOP .REP-LOOP> + <==? <LVAL COMMAND-LOOP .RES> + <LVAL COMMAND-LOOP .REP-LOOP>>> + <BREAK-SEQ '<RETURN <> .COMMAND-LOOP> .RES>) + (<SET FINISH!-IEDIT T .RES> + <PUT <CHTYPE <IN <LVAL TOP-ITEM!-IEDIT .RES>> LIST> + CURSOR!-IEDIT + <GET <LVAL TOP-ITEM!-IEDIT .RES> CURSOR!-IEDIT>> + <BREAK-SEQ '<AGAIN .THIS-LEVEL!-IEDIT> .RES>)>>) + (<BREAK-SEQ '<QUITTER !\ .INCHAN> .RES>)> + <AND .QUICK-RUN <SET QUICK-RUN T .RES>> + <FREE-RUN .RES> + <INT-LEVEL 0>> + +<DEFINE MHALT (MEND-LOOP + "AUX" (OLERR .LERR\ !-INTERRUPTS) (RESVAL T) + (OINT <INT-LEVEL 0>)) + #DECL ((VALUE) DISMISS (MEND-LOOP) <SPECIAL ACTIVATION> (OLERR) FRAME + (LERR\ !-INTERRUPTS) <SPECIAL FRAME> (RESVAL) <OR 'T VECTOR> + (OINT) FIX) + <COND (<0? <LVAL NEXT-COUNT ,MEND-PROCESS>> + <SET LERR\ !-INTERRUPTS <FRAME <FRAME <ME>>>> + <UNWIND <REPEAT (RETVAL) + <COND (<PROG COMMAND-LOOP ((EDIT-TABLE ,MEDIT-TABLE)) + #DECL ((VALUE) <OR 'T FALSE> + (COMMAND-LOOP) <SPECIAL + ACTIVATION> + (EDIT-TABLE) <SPECIAL VECTOR>) + <NOT <EDIT>>>) + (<AND <BOUND? SKIP-THIS ,MEND-PROCESS> + <LVAL SKIP-THIS ,MEND-PROCESS> + <LEGAL? .MEND-LOOP>> + <SET SKIP-THIS <> ,MEND-PROCESS> + <SET RESVAL + [EVLOUT + <SET RETVAL <EVAL !<ARGS <FRM 0>>>>]> + <RESUME T ,MEND-PROCESS> + <ERRET .RETVAL <FRM 0>>) + (<RETURN>)>> + <AND <SET LERR\ !-INTERRUPTS .OLERR> + <LEGAL? .MEND-LOOP> + <INT-LEVEL .OINT> + <RESUME .RESVAL ,MEND-PROCESS>>> + <SET LERR\ !-INTERRUPTS .OLERR>) + (<SET NEXT-COUNT + <- <LVAL NEXT-COUNT ,MEND-PROCESS> 1> + ,MEND-PROCESS> + <SLEEP 0.30000000>)> + <AND <LEGAL? .MEND-LOOP> + <INT-LEVEL .OINT> + <RESUME T ,MEND-PROCESS>> + #DISMISS T> + +<DEFINE INCLEAR (CHAN "AUX" (WORDS <1 <BACK .CHAN>>)) + #DECL ((VALUE WORDS) <UVECTOR [11 LOSE]> (CHAN) CHANNEL) + <PUT .WORDS 11 #LOSE *440705000013*> + <PUT .WORDS 3 #LOSE *000000000000*>> + +<DEFINE MINTS (CHAR CHAN "AUX" (CHR <ASCII .CHAR>) (OUTCHAN ,OUTCHAN)) + #DECL ((VALUE) ANY (CHAR) CHARACTER (CHAN OUTCHAN) CHANNEL (CHR) FIX) + <COND (<G=? .CHR 32>) ;"uninteresting characters" + (<AND <==? .CHR 2> ;"control-B, begin automatic mode" + <INCLEAR .CHAN> .HALT> + <SET MSLEEP ,MSLEEP> + <SET HALT <>> + <PRINT-SEP-LINE> + <AND <BOUND? COMMAND-LOOP .RES> + <==? .MEND-LOOP <LVAL MEND-LOOP .RES>> + <COND (<OR <AND <ASSIGNED? REP-LOOP> + <ASSIGNED? COMMAND-LOOP .REP-LOOP> + <==? <LVAL COMMAND-LOOP .RES> + <LVAL COMMAND-LOOP .REP-LOOP>>> + <NOT <ASSIGNED? THIS-LEVEL!-IEDIT .RES>>> + <DISMISS <> <LVAL COMMAND-LOOP .RES>>) + (<SET FINISH!-IEDIT T .RES> + <PUT <CHTYPE <IN <LVAL TOP-ITEM!-IEDIT .RES>> LIST> + CURSOR!-IEDIT + <GET <LVAL TOP-ITEM!-IEDIT .RES> CURSOR!-IEDIT>> + <BREAK-SEQ '<AGAIN .THIS-LEVEL!-IEDIT> .RES> + <DISMISS T>)>>) + (<==? .CHR 5> ;"control-E, end automatic mode" + <INCLEAR .CHAN> + <SET MSLEEP 0> + <SET HALT T> + <PRINT-SEP-LINE> + <CRLF>) + (<AND <OR <==? .CHR 6> <==? .CHR 19>> + ;"control-F or S, act like EDIT" + <BOUND? MEND-LOOP .RES> + <==? .MEND-LOOP <LVAL MEND-LOOP .RES>>> + <COND (<AND <==? .CHR 19> + <N==? <LVAL LERR\ !-IEDIT .RES> + <LVAL LERR\ !-INTERRUPTS .RES>>> + <BREAK-SEQ <FORM QUITTER !\ ,INCHAN> .RES> + <PRINC !\T> + <DISMISS T>) + (<INT-LEVEL 0> + <INCLEAR .CHAN> + <UNASSIGN ITER!-IEDIT .RES> + <UNASSIGN ITCOM!-IEDIT .RES> + <UNASSIGN SEARCH+!-IEDIT .RES> + <UNASSIGN SEARCH-!-IEDIT .RES> + <CRLF> + <AND <ASSIGNED? THIS-LEVEL!-IEDIT .RES> + <PUT .CHAN 14 17179869211> + <BREAK-SEQ '<AGAIN .THIS-LEVEL!-IEDIT> .RES>> + <DISMISS T>)>) + (<==? .CHR 12> ;"form-feed, clear screen & reprint stuff" + <REOPEN .OUTCHAN *000401000000*> + <AND <ASSIGNED? M> <MPRINT .M PRINT 0>> + <GOXY 0 ,MPLINES> + <PRINT-SEP-LINE T> + <AND <N==? ,MPTOP <+ ,MPLINES 1>> + <CRLF ,NOUT> + <PRINT-MONS>>) + (<==? .CHR 14> ;"control-N, do 1 more step" + <INCLEAR .CHAN> + <AND <BOUND? COMMAND-LOOP .RES> + <==? .MEND-LOOP <LVAL MEND-LOOP .RES>> + <COND (<OR <AND <ASSIGNED? REP-LOOP> + <ASSIGNED? COMMAND-LOOP .REP-LOOP> + <==? <LVAL COMMAND-LOOP .RES> + <LVAL COMMAND-LOOP .REP-LOOP>>> + <NOT <ASSIGNED? THIS-LEVEL!-IEDIT .RES>>> + <DISMISS <> <LVAL COMMAND-LOOP .RES>>) + (<SET FINISH!-IEDIT T .RES> + <PUT <CHTYPE <IN <LVAL TOP-ITEM!-IEDIT .RES>> LIST> + CURSOR!-IEDIT + <GET <LVAL TOP-ITEM!-IEDIT .RES> CURSOR!-IEDIT>> + <BREAK-SEQ '<AGAIN .THIS-LEVEL!-IEDIT> .RES> + <DISMISS T>)>>) + (<==? .CHR 15> ;"control-O, completely evaluate current object" + <INCLEAR .CHAN> <SET SKIP-THIS T>) + (<AND <==? .CHR 16> ;"control-P, begin printing" + <INCLEAR .CHAN> .INVISIBLE> + <SET INVISIBLE <>> + <PRINT-SEP-LINE> + <AND <ASSIGNED? M> <MPRINT .M PRINT 0>>) + (<==? .CHR 17> ;"control-Q, quit MEND" + <INCLEAR .CHAN> + <AND <BOUND? MEND-LOOP> <CRLF> <DISMISS T .MEND-LOOP>>) + (<==? .CHR 19> ;"control-S not already handled" + <AND <ASSIGNED? REP-LOOP> + <PRINC !\T> + <INCLEAR .CHAN> + <DISMISS T .REP-LOOP>> + <DISMISS <> .MEND-LOOP>) + (<==? .CHR 21> ;"control-U, begin unprinting" + <INCLEAR .CHAN> + <SET INVISIBLE T> + <PRINT-SEP-LINE>)>> + +<DEFINE MEDIT (COM "TUPLE" TUP "AUX" CHAN NUM VECT TMP TMP1) + #DECL ((VALUE) ANY (COM) STRING (TUP) TUPLE (CHAN) CHANNEL (NUM) FIX + (VECT) <VECTOR STRING CHARACTER> (TMP TMP1) ANY) + <COND (<N==? .INCHAN ,INCHAN> + <ERR!-IEDIT "CANNOT USE MEND COMMANDS FROM A MACRO">) + (<=? .COM "? "> + <UNWIND <PROG () + <SET CHAN <OPEN "READ" "MUDBUG;EDIT? MEND">> + <FILECOPY .CHAN .OUTCHAN>> + <CLOSE .CHAN>>) + (<=? .COM "??"> + <UNWIND <PROG () + <SET CHAN <OPEN "READ" "MUDBUG;EDIT?? MEND">> + <FILECOPY .CHAN .OUTCHAN>> + <CLOSE .CHAN>>) + (<=? .COM "N "> + <COND (<1? <SET NUM <GET-NUM!-IEDIT ,JUNKSTR!-IEDIT 1>>> + <INTERRUPT "CHAR" !\ ,INCHAN>) + (<L? .NUM 1>) + (<AND <SET NEXT-COUNT <- .NUM 1> ,MEND-PROCESS> + <ASSIGNED? REP-LOOP ,MEND-PROCESS> + <ASSIGNED? COMMAND-LOOP + <LVAL REP-LOOP ,MEND-PROCESS>> + <==? .COMMAND-LOOP + <LVAL COMMAND-LOOP + <LVAL REP-LOOP ,MEND-PROCESS>>>> + <RETURN <> .COMMAND-LOOP>) + (<PUT <CHTYPE <IN .TOP-ITEM!-IEDIT> LIST> + CURSOR!-IEDIT + <GET .TOP-ITEM!-IEDIT CURSOR!-IEDIT>> + <SET FINISH!-IEDIT T>)>) + (<=? .COM "QT"> + <PUT <CHTYPE <IN .TOP-ITEM!-IEDIT> LIST> + CURSOR!-IEDIT + <GET .TOP-ITEM!-IEDIT CURSOR!-IEDIT>> + <SET FINISH!-IEDIT T>) + (<=? .COM "SN"> + <MINIT <> <GET-NUM!-IEDIT ,JUNKSTR!-IEDIT 1>> + <PRINC "C" ,OUTCHAN> + <INTERRUPT "CHAR" <ASCII 12> ,INCHAN>) + (<=? .COM "SV"> + <SET LAST-LEVEL + <GET-NUM!-IEDIT ,JUNKSTR!-IEDIT 100000> + ,MEND-PROCESS>) + (<=? .COM "SD"> + <READSTRING ,JUNKSTR!-IEDIT .INCHAN ,GOOD-CHRS!-IEDIT> + <COND (<==? <NEXTCHR> !\> <SETG MSLEEP 1>) + (<==? <NEXTCHR> !\*> <READCHR> <SETG MSLEEP 30>) + (<TYPE? <SET TMP <READ>> FIX FLOAT> + <SETG MSLEEP <COND (<L? .TMP 0> 0) (.TMP)>>) + (<FLUSH-COM "MUST BE FIX OR FLOAT">)>) + (<=? .COM "SF"> + <OR <SET TMP <MINIT <> <> <> <GET-NUM!-IEDIT ,JUNKSTR!-IEDIT + 100000>>> + <FLUSH-COM <1 .TMP>>>) + (<MEMBER .COM '["PD" "PO"]> + <SET NUM <GET-NUM!-IEDIT ,JUNKSTR!-IEDIT 100000>> + <COND (<AND <G=? .NUM 0> + <L=? .NUM <9 <1 <LVAL M ,MEND-PROCESS>>>>> + <SET TMP + <NTH <LVAL M ,MEND-PROCESS> + <+ 1 <- <9 <1 <LVAL M ,MEND-PROCESS>>> .NUM>>>> + <COND (<=? .COM "PO"> <PPRINT <8 .TMP>>) + (<OR <NOT <1 .TMP>> <0? <1 .TMP>>> + <PPRINT <2 .TMP>>) + (T + <SET TMP1 <NTH <2 .TMP> <1 .TMP>>> + <PPRINT <PUT <2 .TMP> <1 .TMP> |>> + <PUT <2 .TMP> <1 .TMP> .TMP1>)>) + (<FLUSH-COM "BAD LEVEL NUMBER">)>) + (<MEMBER .COM '["PI" "DI"]> + <SET NUM <GET-NUM!-IEDIT ,JUNKSTR!-IEDIT 1>> + <COND (<OR <L? .NUM 1> + <G? .NUM 32> + <TYPE? <SET TMP <NTH ,MON-LIST .NUM>> LOSE>> + <FLUSH-COM "NON-EXISTENT ITEM">) + (<=? .COM "PI"> + <PPRINT .TMP> + <PRINC "===>>"> + <PPRINT <EVAL .TMP>>) + (<PUT ,MON-LIST .NUM #LOSE *000000000000*> + <SETG MPTOP + <- ,MPTOP + <COND (<==? ,MPTOP <+ ,MPLINES 3>> + <PRINT-MONS T T <>> + 2) + (<PRINT-MONS T T> 1)>>> + <SCML <- ,MPBOTM ,MPTOP> ,OUTCHAN>)>) + (<=? .COM "AI"> + <COND (<OR <==? ,MPBOTM <+ ,MPTOP 4>> + <AND <==? ,EMPTY-SLOT 33> <NOT <MON-LIST-GC>>>> + <FLUSH-COM "NO ROOM FOR ANOTHER ITEM">) + (T + <PUT ,MON-LIST ,EMPTY-SLOT <INTREAD!-IEDIT .INCHAN>> + <SETG MPTOP + <+ ,MPTOP + <COND (<==? ,MPTOP <+ ,MPLINES 1>> 2) (1)>>> + <SCML <- ,MPBOTM ,MPTOP> ,OUTCHAN> + <SETG EMPTY-SLOT <+ ,EMPTY-SLOT 1>> + <PRINT-MONS T>)>) + (<=? .COM "O "> + <SET JUNK!-IEDIT <EVAL <INTREAD!-IEDIT .INCHAN>>> + <PUT <CHTYPE <IN .TOP-ITEM!-IEDIT> LIST> + CURSOR!-IEDIT + <GET .TOP-ITEM!-IEDIT CURSOR!-IEDIT>> + <COND (<AND <TYPE? .JUNK!-IEDIT FIX> + <G=? .JUNK!-IEDIT 0> + <L=? .JUNK!-IEDIT <9 <1 <LVAL M ,MEND-PROCESS>>>> + <SET TMP + <NTH <LVAL M ,MEND-PROCESS> + <+ 1 + <- <9 <1 <LVAL M ,MEND-PROCESS>>> + .JUNK!-IEDIT>>>> + <==? LIST <PRIMTYPE <8 .TMP>>>> + <SET JUNK!-IEDIT <AT .TMP 8>>)> + <AGAIN .NEW-ITEM!-IEDIT>) + (<SET VECT <MEMBER .COM '["Q " !\ "OV" !\ "QM" !\]>> + <INTERRUPT "CHAR" <2 .VECT> ,INCHAN>)>> + +<DEFMAC FLUSH-COM ('STR) + #DECL ((VALUE) FORM (STR) ANY) + <FORM AND + '<CRLF> + <FORM PRINC .STR> + '<CRLF> + '<READSTRING ,JUNKSTR!-IEDIT .INCHAN ,ALTSTRING!-IEDIT>>> + +<SETG MEDIT-TABLE + <MAPF ,VECTOR + #FUNCTION ((STR) <MAPRET .STR ,MEDIT>) + '["? " + "??" + "N " + "QT" + "SN" + "SV" + "SD" + "SF" + "PD" + "PO" + "PI" + "DI" + "AI" + "O " + "Q " + "OV" + "QM"]>> + +<DEFINE MREP ("AUX" OREP-LOOP "ACT" REP-LOOP) + #DECL ((VALUE) CHANNEL (OREP-LOOP REP-LOOP) ACTIVATION) + <COND (<ASSIGNED? REP-LOOP ,MEND-PROCESS> + <SET OREP-LOOP <LVAL REP-LOOP ,MEND-PROCESS>> + <SET REP-LOOP .REP-LOOP ,MEND-PROCESS>) + (<ASSIGNED? FIRST-REP ,MEND-PROCESS> + <SET REP-LOOP .REP-LOOP ,MEND-PROCESS>) + (<SET FIRST-REP T ,MEND-PROCESS>)> + <UNWIND <REP> + <COND (<ASSIGNED? OREP-LOOP> + <SET REP-LOOP .OREP-LOOP ,MEND-PROCESS>) + (<ASSIGNED? REP-LOOP ,MEND-PROCESS> + <UNASSIGN REP-LOOP ,MEND-PROCESS>) + (<UNASSIGN FIRST-REP ,MEND-PROCESS>)>> + <COND (<ASSIGNED? OREP-LOOP> + <SET REP-LOOP .OREP-LOOP ,MEND-PROCESS>) + (<ASSIGNED? REP-LOOP ,MEND-PROCESS> + <UNASSIGN REP-LOOP ,MEND-PROCESS>) + (<UNASSIGN FIRST-REP ,MEND-PROCESS>)>> + +<DEFINE BREAKR ('TODO "ARGS" PO "AUX" (QUICK-RUN!-IEDIT T) (BREAK? <>)) + #DECL ((VALUE) ANY (PO) LIST (QUICK-RUN!-IEDIT) <SPECIAL <OR 'T FALSE>> + (BREAK?) <OR 'T FALSE>) + <COND (<COND (<EMPTY? .PO> <SET BREAK? T>) + (<OR <MEMQ <1 .PO> '![ON OFF PRINT GO!]> + <AND <EVAL <1 .PO>> <SET PO <REST .PO>>>> + <COND (<EMPTY? .PO> <SET BREAK? T>) + (<==? <1 .PO> ON> + <INTERRUPT "CHAR" !\ ,INCHAN> + <SET PO <REST .PO>>) + (<==? <1 .PO> OFF> + <INTERRUPT "CHAR" !\ ,INCHAN> + <SET PO <REST .PO>>) + (<==? <1 .PO> PRINT> <SET PO <REST .PO>>) + (<==? <1 .PO> GO> + <INTERRUPT "CHAR" !\ ,INCHAN> + <SET PO <REST .PO>>) + (<SET BREAK? T>)>)> + <AND .BREAK? <CRLF> <PRINC "**BREAK**">> + <REPEAT () + <AND <EMPTY? .PO> <RETURN>> + <PRINT <1 .PO>> + <PRINC "= "> + <&1 <EVAL <1 .PO>>> + <SET PO <REST .PO>>> + <AND .BREAK? + <COND (<AND <LVAL HALT ,MEND-PROCESS> + <BOUND? MEND-LOOP> + <==? .MEND-LOOP <LVAL MEND-LOOP ,MEND-PROCESS>>> + <LISTEN>) + (<INTERRUPT "CHAR" !\ ,INCHAN>)>>)> + <SET QUICK-RUN!-IEDIT <>> + <EVAL .TODO>> + +<DEFINE PRINT-MONS ("OPTIONAL" (ALL? <>) (EXT-CR? <>) (PL? T) + "AUX" (OUTCHAN ,NOUT) (MON-NUM 0)) + #DECL ((VALUE) 'T (ALL? EXT-CR? PL?) <OR 'T FALSE> (OUTCHAN) CHANNEL + (MON-NUM) <SPECIAL FIX>) + <AND .ALL? <GOXY 0 <+ ,MPLINES 1>>> + <PRINC "L"> + <PUT .OUTCHAN 14 0> + <MAPF <> ,PRINT-MON ,MON-LIST> + <AND .PL? <PRINC ,SEP-LINE2>> + <AND .EXT-CR? <CRLF .OUTCHAN>> + T> + +<DEFINE PRINT-MON (PRINT-OB "AUX" (OUTCHAN ,NOUT)) + #DECL ((VALUE PRINT-OB) ANY (OUTCHAN) <SPECIAL CHANNEL>) + <COND (<TYPE? .PRINT-OB LOSE> <SET MON-NUM <+ .MON-NUM 1>>) + (<PRIN1 <SET MON-NUM <+ .MON-NUM 1>>> + <PRINC !\ > + <&1 .PRINT-OB </ <- <13 .OUTCHAN> 11> 3>> + <PRINC " = "> + <&1 <COND (<==? <ME> ,MEND-PROCESS> <EVAL .PRINT-OB .RES>) + (<EVAL .PRINT-OB>)>> + <CRLF>)>> + +<DEFINE MON-LIST-GC ("AUX" (EMPTY-SLOT 0) (ML ,MON-LIST)) + #DECL ((VALUE) <OR FALSE FIX> (EMPTY-SLOT) FIX (ML) VECTOR) + <CRLF> + <PRINC "RENUMBERING MONITOR LIST..."> + <REPEAT ((CUR-SLOT 0)) + #DECL ((VALUE) 'T (CUR-SLOT) FIX) + <AND <G? <SET CUR-SLOT <+ .CUR-SLOT 1>> 32> <RETURN>> + <COND (<TYPE? <.CUR-SLOT .ML> LOSE> + <AND <0? .EMPTY-SLOT> <SET EMPTY-SLOT .CUR-SLOT>>) + (<NOT <0? .EMPTY-SLOT>> + <PUT .ML .EMPTY-SLOT <.CUR-SLOT .ML>> + <SET EMPTY-SLOT <+ .EMPTY-SLOT 1>>)>> + <CRLF> + <COND (<0? .EMPTY-SLOT> <>) + (<MAPR <> + <FUNCTION (RML) <PUT .RML 1 #LOSE *000000000000*>> + <REST .ML <- .EMPTY-SLOT 1>>> + <SETG EMPTY-SLOT .EMPTY-SLOT>)>> + +<GDECL (MSLEEP) + <OR FIX FLOAT> + (MPLINES + MPTOP + MPBOTM + SEP-LENGTH + EMPTY-SLOT + LAST-LEVEL + IPRINT-TIME + IPRINT-TIMES) + FIX + (NOUT) + CHANNEL + (MEND-PROCESS) + PROCESS + (SEP-LINE SEP-LINE2) + STRING + (MON-LIST) + VECTOR> + +<DEFINE MINIT MINIT ("OPTIONAL" (MSLEEP <>) + (MPLINES <>) + (LAST-LEVEL <>) + (IPRINT-TIMES <>)) + #DECL ((VALUE) <OR ATOM <FALSE STRING>> + (MINIT) ACTIVATION + (MSLEEP) <OR FIX FLOAT FALSE> + (MPLINES LAST-LEVEL IPRINT-TIMES) <OR FIX FALSE>) + <COND (<GASSIGNED? MPBOTM>) + (<SETG MPBOTM <15 ,OUTCHAN>> + <SETG SEP-LINE + <ISTRING <SETG SEP-LENGTH <- <13 ,OUTCHAN> 23>> !\_>> + <SETG SEP-LINE2 <ISTRING <13 ,OUTCHAN> !\_>> + <SETG MON-LIST <IVECTOR 32>> + <SETG EMPTY-SLOT 1>)> + <AND <OR .MSLEEP <NOT <GASSIGNED? MSLEEP>>> + <SETG MSLEEP + <COND (<NOT .MSLEEP> 1) + (<L? .MSLEEP 0> + <RETURN #FALSE ("DELAY-TIME CANNOT BE NEGATIVE") .MINIT>) + (.MSLEEP)>>> + <COND (<NOT <GASSIGNED? MPLINES>> + <SETG MPLINES + <COND (<NOT .MPLINES> <COND (<L? ,MPBOTM 25> 8) (12)>) + (<L? .MPLINES 8> 8) + (<G? ,MPLINES <- ,MPBOTM 4>> <- ,MPBOTM 4>)>> + <SETG MPTOP <+ ,MPLINES 1>>) + (.MPLINES + <SET MPLINES + <COND (<L? .MPLINES 8> 8) + (<G? .MPLINES <- ,MPBOTM <- ,MPTOP ,MPLINES> 3>> + <- ,MPBOTM <- ,MPTOP ,MPLINES 3>>)>> + <SETG MPTOP <+ <- ,MPTOP ,MPLINES> .MPLINES>> + <SCML <- ,MPBOTM ,MPTOP> ,OUTCHAN> + <SETG MPLINES .MPLINES>)> + <AND <OR .LAST-LEVEL <NOT <GASSIGNED? LAST-LEVEL>>> + <SETG LAST-LEVEL + <COND (<NOT .LAST-LEVEL> 100000) + (<L? .LAST-LEVEL 1> + <RETURN #FALSE ("LAST-LEVEL MUST BE POSITIVE") .MINIT>) + (.LAST-LEVEL)>>> + <AND <OR .IPRINT-TIMES <NOT <GASSIGNED? IPRINT-TIMES>>> + <SETG IPRINT-TIMES + <COND (<NOT .IPRINT-TIMES> 5) + (<L? .IPRINT-TIMES 1> + <RETURN #FALSE ("PRINTING-FREQUENCY MUST BE POSITIVE") + .MINIT>) + (.IPRINT-TIMES)>> + <SETG IPRINT-TIME ,IPRINT-TIMES>> + T> + +<ENDPACKAGE> diff --git a/src/mudbug/pprint.36 b/src/mudbug/pprint.36 new file mode 100644 index 00000000..cdd4bc31 --- /dev/null +++ b/src/mudbug/pprint.36 @@ -0,0 +1,1090 @@ + +<BLOAT 7100 100 5 20> + +;"MUDDLE PRETTY-PRINT, FRAME-SCANNER, AND OTHER ROUTINES" + +<PACKAGE "PP"> + +<RENTRY PPRINT EPRINT EPRIN1 COLPP + FRAMES FRATM FRLVAL FRM + PPRINF INDENT-TO FORMS NULL + LINPOS LINLNT PAGPOS PAGLNT + QUICKPRINT LOOKAHEAD VERTICAL DENSE LEFT-MARGIN> + +;"These atoms are placed in the ROOT oblist to allow general + access to their functions" + +<BLOCK (<ROOT>)> FIXUP!-RSUBRS <ENDBLOCK> + +<COND (<NOT <GASSIGNED? NULL>> + <SETG NULL <INSERT <ATOM <ASCII 127>> <ROOT>>>)> + +<SETG QUICKPRINT <SET QUICKPRINT T>> + +<SETG LOOKAHEAD <SET LOOKAHEAD T>> + +<SETG VERTICAL <SET VERTICAL <>>> + +<SETG DENSE <SET DENSE <>>> + +<SETG LEFT-MARGIN <SET LEFT-MARGIN 0>> + +\ + +<DEFINE PPRINT (L "OPTIONAL" (OUTCHAN .OUTCHAN) "EXTRA" DEF) + #DECL ((L DEF) ANY (OUTCHAN) <SPECIAL CHANNEL>) + <COND (<NOT <TYPE? .L ATOM>> <EPRINT .L>) + (<GASSIGNED? .L> + <SET DEF ,.L> + <COND (<TYPE? .DEF FUNCTION> + <EPRINT <CHTYPE (DEFINE .L !.DEF) FORM>>) + (<TYPE? .DEF RSUBR> <EPRINT <FORM SETG .L <DUMP .DEF>>>) + (<TYPE? .DEF RSUBR-ENTRY> + <EPRINT <FORM SETG .L <ENT-DUMP .DEF>>>) + (<AND <TYPE? .DEF MACRO> + <NOT <EMPTY? .DEF>>> + <COND (<TYPE? <1 .DEF> FUNCTION> + <EPRINT <CHTYPE (DEFMAC .L !<1 .DEF>) FORM>>) + (ELSE <EPRINT <FORM SETG .L .DEF>>)>) + (ELSE <EPRINT <FORM SETG .L <FORM QUOTE .DEF>>>)>) + (<ASSIGNED? .L> + <SET DEF ..L> + <EPRINT <FORM SET + .L + <COND (<TYPE? .DEF FUNCTION> + <CHTYPE (FUNCTION !.DEF) FORM>) + (<TYPE? .DEF RSUBR> <DUMP .DEF>) + (<TYPE? .DEF RSUBR-ENTRY> <ENT-DUMP .DEF>) + (ELSE <FORM QUOTE .DEF>)>>>) + (ELSE <PRINT .L .OUTCHAN> #FALSE ("NAKED ATOM?"))>> + +<DEFINE EPRINT (L "OPTIONAL" (MARG <VALUE LEFT-MARGIN>) + "EXTRA" (OUTC <INIT>)) + #DECL ((L) ANY (MARG) <SPECIAL FIX> + (OUTC) CHANNEL) + <COND (<0? .MARG> <TERPRI .OUTC>) + (<L? <LINPOS .OUTC> .MARG> <INDENT-TO .MARG .OUTC>)> + <FORMS .L .OUTC 0> + <TERPRI .OUTC> + ,NULL> + +<DEFINE EPRIN1 (L "OPTIONAL" MARG + "EXTRA" (OUTC <INIT>)) + #DECL ((L) ANY (MARG) <SPECIAL FIX> + (OUTC) CHANNEL) + <COND (<NOT <ASSIGNED? MARG>> <SET MARG <LINPOS .OUTC>>)> + <COND (<L? <LINPOS .OUTC> .MARG> + <INDENT-TO .MARG .OUTC>)> + <FORMS .L .OUTC 0> + ,NULL> + +<DEFINE PPRINF (INPUT + "OPTIONAL" OUTF (LL <13 ,OUTCHAN>) (EVAL? <>) (PL 58) + "AUX" INCH INL OUTCH (QUICKPRINT <>) + (REDEFINE T) (KEEP-FIXUPS T) (MUDDLE ,MUDDLE)) + #DECL ((OUTF) STRING (EVAL?) <OR FALSE ATOM> (PL LL MUDDLE) FIX (INL) LIST + (INCH OUTCH) <OR FALSE CHANNEL> (QUICKPRINT) <SPECIAL ANY> + (INPUT) <OR ATOM LIST STRING> (REDEFINE KEEP-FIXUPS) <SPECIAL ANY>) + <COND (<TYPE? .INPUT ATOM> <SET INL <LIST .INPUT>>) + (<TYPE? .INPUT LIST> <SET INL .INPUT>) + (ELSE <SET INCH <OPEN "READ" .INPUT>>)> + <COND (<NOT <ASSIGNED? OUTF>> + <COND (<ASSIGNED? INL> + <COND (<AND <NOT <EMPTY? .INL>> <TYPE? <1 .INL> ATOM>> + <SET OUTF <SPNAME <1 .INL>>>) + (ELSE <SET OUTF "_PPRIN">)>) + (ELSE + <COND (<G? .MUDDLE 100> <SET OUTF .INPUT>) + (ELSE <SET OUTF "TPL:">)>)>)> + <UNWIND + <PROG () + <COND (<AND <ASSIGNED? INCH> <NOT .INCH>> <RETURN .INCH>)> + <SET OUTCH <CHANNEL "PRINT" .OUTF>> + <COND (<G? .MUDDLE 100> + <SET OUTCH + <OPEN "PRINT" "PPRNF" "MUD" <9 .OUTCH> <10 .OUTCH>>>) + (T + <SET OUTCH + <OPEN "PRINT" "_PPRNF" ">" <9 .OUTCH> <10 .OUTCH>>>)> + <COND (<NOT .OUTCH> + <AND <ASSIGNED? INCH> <CLOSE .INCH>> + <RETURN .OUTCH>)> + <CLOSE .OUTCH> + <PUT .OUTCH 2 "PRINTO"> ;"Reopen OUTCH in PRINTO mode" + <RESET .OUTCH> + <PUT .OUTCH ,LINLNT .LL> ;"Appropriate line length" + <PUT .OUTCH ,PAGLNT 99999> ;"Big page length" + <REPEAT ((OUTCHAN .OUTCH) Q QC (UNIQUE (T)) ACC-OLD ACC-NOW + PPOS-OLD (NEWPG T)) + #DECL ((OUTCHAN) <SPECIAL CHANNEL> (Q QC) ANY (UNIQUE) LIST + (ACC-OLD ACC-NOW PPOS-OLD) FIX (NEWPG) <OR FALSE ATOM>) + <COND (<ASSIGNED? INL> + <COND (<EMPTY? .INL> <RETURN>)> + <PPRINT <SET Q <1 .INL>>> + <SET INL <REST .INL>>) + (ELSE + <SET Q <READ .INCH '.UNIQUE>> + <COND (<==? .Q .UNIQUE> <RETURN>)> + <EPRIN1 .Q>)> + <COND (<ASSIGNED? INL>) + (<SET QC <GET .INCH COMMENT>> ;"Top-Level comment ?" + <TERPRI .OUTCHAN> + <PRINC !\; .OUTCHAN> + <EPRIN1 .QC>)> + <COND (.EVAL? <EVAL .Q>)> + <PROG () + <COND (<G? <PAGPOS .OUTCHAN> .PL> + ;"Last item overflowed page ?" + <COND (.NEWPG ;"Last item only item on this page ?" + <TERPRI .OUTCHAN> + <PRINC <ASCII 12> .OUTCHAN> + ;"Simply end with form-feed" + <TERPRI .OUTCHAN>) + (ELSE + ;"Last item was simply one too many on page" + <BUFOUT .OUTCHAN> ;"Flush out stragglers" + <SET ACC-NOW <17 .OUTCHAN>> + ;"YES, go back and clobber in form-feed" + <ACCESS .OUTCHAN .ACC-OLD> + <PRINTB ,CR:FF:CR .OUTCHAN> + <ACCESS .OUTCHAN .ACC-NOW> ;"Return" + <PUT .OUTCHAN + ,PAGPOS + <- <PAGPOS .OUTCHAN> .PPOS-OLD 1>> + ;"Repair the page position slot" + <SET NEWPG T> + <AGAIN>)>) + (ELSE + <SET ACC-OLD <17 .OUTCHAN>> ;"Save current location" + <SET PPOS-OLD <PAGPOS .OUTCHAN>> + <PRINTB ,CR:SP:CR .OUTCHAN>;"Output clobberable chars" + <PUT .OUTCHAN ,LINPOS 0> ;"Fixup OUTCHAN slots" + <PUT .OUTCHAN ,PAGPOS <+ <PAGPOS .OUTCHAN> 2>> + <SET NEWPG <>>)>>> + <AND <ASSIGNED? INCH> <CLOSE .INCH>> + <COND (<G? .MUDDLE 100> + <CLOSE .OUTCH> + <RENAME <STRING <9 .OUTCH> ":<" <10 .OUTCH> ">" + <7 .OUTCH> "." <8 .OUTCH>> + TO .OUTF>) + (<RENAME .OUTCH .OUTF> + <CLOSE .OUTCH>)> + "DONE"> + <PROG () + <AND <ASSIGNED? INCH> <TYPE? .INCH CHANNEL> <CLOSE .INCH>> + <AND <ASSIGNED? OUTCH> + <TYPE? .OUTCH CHANNEL> + <CLOSE .OUTCH>>>>> + +<SETG CR:SP:CR ![7022316820!]> + +<SETG CR:FF:CR ![7021661460!]> + +<GDECL (CR:SP:CR CR:FF:CR) UVECTOR> + +<DEFINE COLPP (X + "OPTIONAL" (OUTCHAN .OUTCHAN) (COL <LINPOS .OUTCHAN>) + (WID <LINLNT .OUTCHAN>) + "AUX" (SWID <LINLNT .OUTCHAN>)) + #DECL ((X) ANY (OUTCHAN) <SPECIAL CHANNEL> (COL WID SWID) FIX) + <PUT .OUTCHAN ,LINLNT .WID> + <EPRINT .X .COL> + <PUT .OUTCHAN ,LINLNT .SWID> + ,NULL> + +\ + +<DEFINE FRAMES ;"Prints FUNCT and ARGS for -n- frames down" + ("OPTIONAL" (HOW-MANY 99999) (FIRST 0) "EXTRA" (NO-DUMP T) (OUTCHAN <INIT>)) + #DECL ((HOW-MANY FIRST) FIX (OUTCHAN) <SPECIAL CHANNEL> (NO-DUMP) <SPECIAL ANY>) + <REPEAT ((F <FRM .FIRST>) FUNF FRMF X) + #DECL ((F FRMF) FRAME (FUNF) ATOM (X) ANY) + <COND (<0? .HOW-MANY> <TERPRI .OUTCHAN> <RETURN "FUNCT---ARGS">) + (<==? <SET FUNF <FUNCT .F>> TOPLEVEL> + <TERPRI .OUTCHAN> + <RETURN TOPLEVEL>) + (<AND ;"Don't print repetitious FSUBR args." + <OR <AND <GASSIGNED? .FUNF> <TYPE? ,FUNF FSUBR>> + <AND <ASSIGNED? .FUNF> <TYPE? ..FUNF FSUBR>>> + <==? <FUNCT <SET FRMF <FRAME .F>>> EVAL> + <TYPE? <SET X <1 <ARGS .FRMF>>> FORM> + <NOT <EMPTY? .X>> + <==? .FUNF <1 .X>>>) + (ELSE + <PRINT .FIRST .OUTCHAN> + <PRINC .FUNF .OUTCHAN> + <PRINC !\ .OUTCHAN> ;"Tab" + <EPRIN1 <ARGS .F>>)> + <SET F <FRAME .F>> + <SET HOW-MANY <- .HOW-MANY 1>> + <SET FIRST <+ .FIRST 1>>>> + +<DEFINE FRATM ("OPTIONAL" (HOW-MANY 9999) (FIRST 0) "EXTRA" (OUTC <INIT>)) + #DECL ((HOW-MANY FIRST) FIX (OUTC) CHANNEL) + <REPEAT ((F <FRM .FIRST>) AF V FF) + #DECL ((F) FRAME (AF) FORM (FF) ATOM) + <COND (<0? .HOW-MANY> <TERPRI .OUTC> <RETURN "FRAME---FUNCTION">) + (<==? <SET FF <FUNCT .F>> TOPLEVEL> + <TERPRI .OUTC> + <RETURN TOPLEVEL>) + (<OR <AND <==? .FF EVAL> + <1? <LENGTH <ARGS .F>>> + <TYPE? <1 <ARGS .F>> FORM> + <NOT <EMPTY? <SET AF <1 <ARGS .F>>>>> + <TYPE? <1 .AF> ATOM> + <OR <AND <GASSIGNED? <SET FF <1 .AF>>> <SET V ,.FF>> + <AND <ASSIGNED? .FF> <SET V ..FF>>> + <TYPE? .V FUNCTION RSUBR RSUBR-ENTRY>> + <AND <OR <AND <GASSIGNED? .FF> <SET V ,.FF>> + <AND <ASSIGNED? .FF> <SET V ..FF>>> + <TYPE? .V RSUBR RSUBR-ENTRY>>> + <PRIN1 .FIRST .OUTC> + <PRINC !\ .OUTC> + <PRIN1 .FF .OUTC> + <TERPRI .OUTC>)> + <SET F <FRAME .F>> + <SET FIRST <+ .FIRST 1>> + <SET HOW-MANY <- .HOW-MANY 1>>>> + +<DEFINE FRM (I) + #DECL ((I) FIX (VALUE) FRAME) + <REPEAT ((F <FRAME>)) + #DECL ((F VALUE) FRAME) + <COND (<0? .I> <RETURN .F>) + (<==? <FUNCT .F> TOPLEVEL> + <PRINT .I> + <PRINC "FRAMES FROM "> + <RETURN .F>)> + <SET F <FRAME .F>> + <SET I <- .I 1>>>> + +<DEFINE FRLVAL (ATM "OPTIONAL" (HOW-MANY 100000) (FIRST 0) + "EXTRA" (OUTC <INIT>)) + #DECL ((ATM) ATOM (HOW-MANY FIRST) FIX (OUTC) CHANNEL) + <COND (<NOT <BOUND? .ATM>> "Atom is not bound anywhere.") + (ELSE + <TERPRI .OUTC> + <SET HOW-MANY <+ .HOW-MANY 1>> + <REPEAT ((F <FRM .FIRST>) (LAST-LOC <LLOC .ATM>) + (FLG <ASSIGNED? .ATM>) (NUM 0) NEXT-LOC) + #DECL ((F) FRAME (LAST-LOC NEXT-LOC) LOCD (NUM) FIX + (FLG) <OR ATOM FALSE>) + <COND (<==? .NUM .HOW-MANY> + <PRINVAL "Bound further down to: " .LAST-LOC .FLG .OUTC> + <RETURN>) + (<==? <FUNCT .F> TOPLEVEL> + <PRINVAL "Toplevel binding: " .LAST-LOC .FLG .OUTC> + <RETURN>) + (<NOT <BOUND? .ATM .F>> + <PRINVAL <- .NUM 1> .LAST-LOC .FLG .OUTC> + <RETURN>) + (<==? .LAST-LOC <SET NEXT-LOC <LLOC .ATM .F>>>) + (ELSE + <PRINVAL <- .NUM 1> .LAST-LOC .FLG .OUTC> + <SET LAST-LOC .NEXT-LOC> + <SET FLG <ASSIGNED? .ATM .F>>)> + <SET F <FRAME .F>> + <SET NUM <+ .NUM 1>>> + "Frame----Value")>> + +<DEFINE PRINVAL (PRE LOCA FLG OUTCHAN) + #DECL ((LOCA) LOCD (PRE) ANY (FLG) <OR ATOM FALSE> + (OUTCHAN) <SPECIAL CHANNEL>) + <PRINC .PRE .OUTCHAN> + <INDENT-TO 5 .OUTCHAN> + <COND (.FLG <EPRIN1 <IN .LOCA>> <TERPRI .OUTCHAN>) + (ELSE <PRINC "----bound, but not assigned a value---- +" .OUTCHAN>)>> + +<DEFINE INIT ("EXTRA" OUTC) ;"Insure valid OUTCHAN" + #DECL ((VALUE) CHANNEL) + <PROG () + <COND (<AND <ASSIGNED? OUTCHAN> + <TYPE? <SET OUTC <VALUE OUTCHAN>> CHANNEL>> + ;"The VALUE fakes the compiler out") + (ELSE + <ERROR BAD-CHANNEL!-ERRORS OUTCHAN PPRINT> + <AGAIN>)> + <COND (<NOT <ASSIGNED? QUICKPRINT>> ;"Ensure LVALs" + <SET QUICKPRINT ,QUICKPRINT>)> + <COND (<NOT <ASSIGNED? VERTICAL>> + <SET VERTICAL ,VERTICAL>)> + <COND (<NOT <ASSIGNED? LOOKAHEAD>> + <SET LOOKAHEAD ,LOOKAHEAD>)> + <COND (<NOT <ASSIGNED? DENSE>> + <SET DENSE ,DENSE>)> + .OUTC>> + +\ +;"Dispatch to proper printer based on type of LNEW. +Actually pass L (the original object) to save comments." + +<DEFINE FORMS ;"Pprint one item at the current page location" + (L "OPTIONAL" (OUTC <INIT>) (M 0) (LNEW .L) "AUX" FITS? R TYP PTYP) + #DECL ((L LNEW) ANY (FITS?) <SPECIAL ANY> (M) FIX + (OUTC) <CHANNEL [12 ANY] [4 FIX]> (R) <OR FALSE APPLICABLE> + (TYP PTYP) ATOM) + <PROG () + <COND (<MONAD? .LNEW> <PRIN1 .LNEW .OUTC> <RETURN>)> + ;"If its a MONAD, just print it." + <SET FITS? <FLATSIZE .LNEW <- <LINLNT .OUTC> <LINPOS .OUTC> .M>>> + ;"If it fits, use ELEMENTS, else COMPONENTS." + <COND (<AND .QUICKPRINT .FITS?> + <PRIN1 .LNEW .OUTC> + <RETURN>) + (<TYPE? .LNEW FORM> <FORM-PPRINT .L .OUTC .M>) + (<TYPE? .LNEW LIST> <LIST-PPRINT .L .OUTC .M>) + (<TYPE? .LNEW DECL> <DECL-PPRINT .L .OUTC .M>) + (<TYPE? .LNEW STRING> <STRING-PPRINT .L .OUTC .M>) + (<TYPE? .LNEW VECTOR> <VECTOR-PPRINT .L .OUTC .M>) + (<TYPE? .LNEW UVECTOR> <UVECTOR-PPRINT .L .OUTC .M>) + (<TYPE? .LNEW SEGMENT> <SEGMENT-PPRINT .L .OUTC .M>) + (<TYPE? .LNEW TEMPLATE> <TEMPLATE-PPRINT .L .OUTC .M>) + (<TYPE? .LNEW FUNCTION> <FUNCTION-PPRINT .L .OUTC .M>) + (<TYPE? .LNEW RSUBR-ENTRY> <RSUBR-ENTRY-PPRINT .L .OUTC .M>) + (<TYPE? .LNEW RSUBR> <RSUBR-PPRINT .L .OUTC .M>) + (<TYPE? .LNEW CODE> <CODE-PPRINT .L .OUTC .M>) + (<TYPE? .LNEW CHANNEL> <CHANNEL-PPRINT .L .OUTC .M>) + (<TYPE? .LNEW TUPLE> <VECTOR-PPRINT .L .OUTC .M>) + (<TYPE? .LNEW LOCD LOCAS LOCU LOCS LOCA LOCV LOCL> + <LOC-PPRINT .L .OUTC .M>) + (<TYPE? .LNEW STORAGE> <STORAGE-PPRINT .L .OUTC .M>) + (<SET R <GET <SET TYP <TYPE .LNEW>> PPRINT>> + <APPLY .R .LNEW .OUTC .M>) + (<N==? .TYP <SET PTYP <PRIMTYPE .LNEW>>> ;"Not primitive ?" + <PRINC !\# .OUTC> ;"Try again as primitive type" + <PRIN1 .TYP .OUTC> + <PRINC !\ .OUTC> ;"Space after type name" + <SET LNEW <CHTYPE .LNEW .PTYP>> ;"Try Primtype instead" + <AGAIN>) + (ELSE <ERROR CANT-PPRINT!-ERRORS .LNEW>)>>> + +\ + +;"Routines to print objects in certain special formats" + +<DEFINE COMELE (L OUTC M) ;"Select proper format" + #DECL ((L) ANY (M) FIX (OUTC) CHANNEL) + <COND (.FITS? <ELEMENTS .L .OUTC .M>) + (ELSE <COMPONENTS .L .OUTC .M>)>> + +<DEFINE COMPONENTS ;"Print the components of a structure in a column" + (L OUTC OM "OPTIONAL" (STOP 0)) + #DECL ((L) ANY (OM) FIX (STOP) ANY (OUTC) <CHANNEL [12 ANY] [4 FIX]>) + <COND (.DENSE <BLOCKP .L <LINPOS .OUTC> .OUTC .OM .STOP>) + (ELSE + <REPEAT ((N <LINPOS .OUTC>) (M 0)) + #DECL ((N) FIX (M) FIX) + <AND <EMPTY? <REST .L>> <SET M .OM>> + <FORMS <1 .L> .OUTC .M> + <COMMENTS .L .OUTC .M> + <COND (<EMPTY? <SET L <REST .L>>> <RETURN DONE>)> + <AND <==? .STOP .L> <RETURN DONE>> + <TERPRI .OUTC> + <INDENT-TO .N .OUTC>>)>> + + +<DEFINE ELEMENTS ;"Print the components of a structure in a line." + (L OUTC OM "OPTIONAL" (STOP 0)) + #DECL ((L) ANY (OM) FIX (STOP) ANY (OUTC) <CHANNEL [12 ANY] [4 FIX]>) + <COND (<EMPTY? .L>) + (.QUICKPRINT + <REPEAT () + <PRIN1 <1 .L> .OUTC> + <AND <OR <EMPTY? <SET L <REST .L>>> <==? .L .STOP>> + <RETURN>> + <PRINC !\ .OUTC>>) + (ELSE + <REPEAT ((N <LINPOS .OUTC>) (M 0) COM) + #DECL ((N) FIX (M) FIX (COM) <OR FALSE ATOM>) + <AND <EMPTY? <REST .L>> <SET M .OM>> + <FORMS <1 .L> .OUTC .M> + <SET COM <COMMENTS .L .OUTC .M>> + <COND (<OR <EMPTY? <SET L <REST .L>>> <==? .L .STOP>> + <RETURN>)> + <COND (.COM <TERPRI .OUTC> <INDENT-TO .N .OUTC>) + (ELSE <PRINC !\ .OUTC>)>>)>> + +<DEFINE BLOCKP (L STRT OUTC OM "OPTIONAL" (STOP ())) + ;"Block Printer" + #DECL ((L STOP) ANY (STRT) FIX + (OM) FIX (OUTC) CHANNEL) + <COND (<EMPTY? .L>) + (ELSE + <REPEAT ((LINE <PAGPOS .OUTC>) FLGC + (M <COND (<EMPTY? <REST .L>> .OM) (ELSE 0)>)) + #DECL ((LINE) FIX (FLGC) <OR FALSE ATOM> + (M) FIX) + <FORMS <1 .L> .OUTC .M> + <SET FLGC <COMMENTS .L .OUTC .M>> + <COND (<OR <EMPTY? <SET L <REST .L>>> <==? .L .STOP>> + <RETURN>)> + <COND (<EMPTY? <REST .L>> <SET M .OM>)> + <COND (<AND <NOT .FLGC> <==? .LINE <PAGPOS .OUTC>> + <FLATSIZE <1 .L> <- <LINLNT .OUTC> + <LINPOS .OUTC> .M 1>>> + <PRINC !\ .OUTC> + <AGAIN>)> + <TERPRI .OUTC> + <INDENT-TO .STRT .OUTC> + <SET LINE <PAGPOS .OUTC>>>)>> + +<DEFINE COMMENTS (L OUTC M "AUX" R CMNT FS1) + ;"Prints comments. If no comment, returns false" + #DECL ((L CMNT) ANY (R FS1) FIX (M) FIX (MARG) <SPECIAL FIX> + (VALUE) <OR FALSE ATOM> (OUTC) <CHANNEL [12 ANY] [4 FIX]>) + <COND (<SET CMNT <OR <GET .L COMMENT> <GET <REST .L 0> COMMENT>>> + <SET R <COND (<LENGTH? .L 1> .M) (0)>> + <SET FS1 + <OR <FLATSIZE .CMNT <LINLNT .OUTC>> <LINLNT .OUTC>>> + <COND (<G? .FS1 <- <LINLNT .OUTC> <LINPOS .OUTC> .R 2>> + <TERPRI .OUTC>)> + <INDENT-TO <- <MAX <+ 2 .MARG> <- <LINLNT .OUTC> .FS1 .R>> 2> .OUTC> + <PRINC " ;" .OUTC> + <PRIN1 .CMNT .OUTC> + T)>> + +\ + +;"Routines to print list structure in certain special formats" + +<DEFINE LIST-COMELE (L OUTC M) ;"Select proper format" + #DECL ((L) <PRIMTYPE LIST> (M) FIX (OUTC) CHANNEL) + <COND (.FITS? <LIST-ELEMENTS .L .OUTC .M>) + (ELSE <LIST-COMPONENTS .L .OUTC .M>)>> + +<DEFINE LIST-COMPONENTS ;"Print the components of list structure in a column" + (L OUTC OM "OPTIONAL" (STOP 0)) + #DECL ((L) <PRIMTYPE LIST> (OM) FIX (STOP) ANY + (OUTC) <CHANNEL [12 ANY] [4 FIX]>) + <COND (.DENSE <LIST-BLOCKP .L <LINPOS .OUTC> .OUTC .OM .STOP>) + (ELSE + <REPEAT ((N <LINPOS .OUTC>) (M 0)) + #DECL ((N) FIX (M) FIX) + <AND <EMPTY? <REST .L>> <SET M .OM>> + <FORMS <1 .L> .OUTC .M> + <LIST-COMMENTS .L .OUTC .M> + <COND (<EMPTY? <SET L <REST .L>>> <RETURN DONE>)> + <AND <==? .STOP .L> <RETURN DONE>> + <TERPRI .OUTC> + <INDENT-TO .N .OUTC>>)>> + + +<DEFINE LIST-ELEMENTS ;"Print the components of list structure in a line." + (L OUTC OM "OPTIONAL" (STOP 0)) + #DECL ((L) <PRIMTYPE LIST> (OM) FIX (STOP) ANY + (OUTC) <CHANNEL [12 ANY] [4 FIX]>) + <COND (<EMPTY? .L>) + (.QUICKPRINT + <REPEAT () + <PRIN1 <1 .L> .OUTC> + <AND <OR <EMPTY? <SET L <REST .L>>> <==? .L .STOP>> + <RETURN>> + <PRINC !\ .OUTC>>) + (ELSE + <REPEAT ((N <LINPOS .OUTC>) (M 0) COM) + #DECL ((N) FIX (M) FIX (COM) <OR FALSE ATOM>) + <AND <EMPTY? <REST .L>> <SET M .OM>> + <FORMS <1 .L> .OUTC .M> + <SET COM <LIST-COMMENTS .L .OUTC .M>> + <COND (<OR <EMPTY? <SET L <REST .L>>> <==? .L .STOP>> + <RETURN>)> + <COND (.COM <TERPRI .OUTC> <INDENT-TO .N .OUTC>) + (ELSE <PRINC !\ .OUTC>)>>)>> + +<DEFINE LIST-BLOCKP (L STRT OUTC OM "OPTIONAL" (STOP ())) + ;"Block Printer for list structure" + #DECL ((L STOP) <PRIMTYPE LIST> (STRT) FIX + (OM) FIX (OUTC) CHANNEL) + <COND (<EMPTY? .L>) + (ELSE + <REPEAT ((LINE <PAGPOS .OUTC>) FLGC + (M <COND (<EMPTY? <REST .L>> .OM) (ELSE 0)>)) + #DECL ((LINE) FIX (FLGC) <OR FALSE ATOM> + (M) FIX) + <FORMS <1 .L> .OUTC .M> + <SET FLGC <LIST-COMMENTS .L .OUTC .M>> + <COND (<OR <EMPTY? <SET L <REST .L>>> <==? .L .STOP>> + <RETURN>)> + <COND (<EMPTY? <REST .L>> <SET M .OM>)> + <COND (<AND <NOT .FLGC> <==? .LINE <PAGPOS .OUTC>> + <FLATSIZE <1 .L> <- <LINLNT .OUTC> + <LINPOS .OUTC> .M 1>>> + <PRINC !\ .OUTC> + <AGAIN>)> + <TERPRI .OUTC> + <INDENT-TO .STRT .OUTC> + <SET LINE <PAGPOS .OUTC>>>)>> + +<DEFINE LIST-COMMENTS (L OUTC M "AUX" R CMNT FS1) + ;"Prints comments on list structure. If no comment, returns false" + #DECL ((L) <PRIMTYPE LIST> (CMNT) ANY (R FS1) FIX (M) FIX (MARG) <SPECIAL FIX> + (VALUE) <OR FALSE ATOM> (OUTC) <CHANNEL [12 ANY] [4 FIX]>) + <COND (<SET CMNT <OR <GET .L COMMENT> <GET <REST .L 0> COMMENT>>> + <SET R <COND (<LENGTH? .L 1> .M) (0)>> + <SET FS1 + <OR <FLATSIZE .CMNT <LINLNT .OUTC>> <LINLNT .OUTC>>> + <COND (<G? .FS1 <- <LINLNT .OUTC> <LINPOS .OUTC> .R 2>> + <TERPRI .OUTC>)> + <INDENT-TO <- <MAX <+ 2 .MARG> <- <LINLNT .OUTC> .FS1 .R>> 2> .OUTC> + <PRINC " ;" .OUTC> + <COND (<TYPE? .CMNT STRING> <PRIN1 .CMNT .OUTC>) + (ELSE <PRIN1 .CMNT .OUTC>)> + T)>> + +\ + +;"The following functions define the way to pprint a given data type. +They are called from FORMS for the appropriate type +FORM is a special case - see next page." + +<DEFMAC LIST-PPRINT ('L 'OUTC 'M) + <FORM PROG + () + <FORM PRINC !\( .OUTC> + <FORM LIST-COMELE .L .OUTC <FORM + .M 1>> + <FORM PRINC !\) .OUTC>>> + +<DEFMAC VECTOR-PPRINT ('L 'OUTC 'M) + <FORM PROG + () + <FORM PRINC !\[ .OUTC> + <FORM COMELE .L .OUTC <FORM + .M 1>> + <FORM PRINC !\] .OUTC>>> + +<DEFMAC FUNCTION-PPRINT ('L 'OUTC 'M) + <FORM PROG + ((POS1 <FORM + <FORM LINPOS .OUTC> 2>)) + #DECL ((POS1) FIX) + <FORM PRINC !\# .OUTC> + <FORM PRIN1 FUNCTION .OUTC> + <FORM PRINC " (" .OUTC> + <FORM FUNCBODY + .L + <FORM LINPOS .OUTC> + <FORM LVAL POS1> .OUTC .M> + <FORM PRINC !\) .OUTC>>> + +<DEFMAC CHANNEL-PPRINT ('L 'OUTC 'M) + <FORM PROG + () + <FORM PRINC !\# .OUTC> + <FORM PRIN1 CHANNEL .OUTC> + <FORM PRINC " [" .OUTC> + <FORM BLOCKP .L <FORM LINPOS .OUTC> .OUTC <FORM + .M 1>> + <FORM PRINC !\] .OUTC>>> + +<DEFMAC UVECTOR-PPRINT ('L 'OUTC 'M) + <FORM PROG + ((L .L)) + #DECL ((L) <PRIMTYPE UVECTOR>) + <FORM PRINC "![" .OUTC> + <FORM COND + ('<OR <==? WORD + <TYPEPRIM <UTYPE <LVAL L>>>> + <FLATSIZE <LVAL L> + <* 9 <LENGTH <LVAL L>>>>> + <FORM BLOCKP + <FORM LVAL L> + <FORM LINPOS .OUTC> .OUTC + <FORM + .M 2>>) + (ELSE <FORM COMELE .L .OUTC <FORM + .M 2>>)> + <FORM PRINC "!]" .OUTC>>> + +<DEFMAC SEGMENT-PPRINT ('L 'OUTC 'M) + <FORM PROG () <FORM PRINC !\! .OUTC> + <FORM FORMS .L .OUTC .M <FORM CHTYPE .L FORM>>>> + +<DEFMAC STRING-PPRINT ('L 'OUTC 'M) <FORM PRIN1 .L .OUTC>> + +<DEFMAC TEMPLATE-PPRINT ('L 'OUTC 'M) + <FORM PROG + () + <FORM PRINC !\{ .OUTC> + <FORM COMELE .L .OUTC <FORM + .M 1>> + <FORM PRINC !\} .OUTC>>> + +<DEFINE LOC-PPRINT (L OUTC M) + #DECL ((L) LOCATIVE (OUTC) <CHANNEL [12 ANY] [4 FIX]> (M) FIX) + <PRINC !\# .OUTC> + <PRINC <TYPE .L> .OUTC> + <PRINC !\ .OUTC> + <FORMS <IN .L> .OUTC .M>> + +<DEFMAC RSUBR-ENTRY-PPRINT ('L 'OUTC 'M) + <FORM PROG + () + <FORM PRINC !\% .OUTC> + <FORM FORMS <FORM ENT-DUMP .L> .OUTC .M>>> + +<DEFINE ENT-DUMP (RSENT) + #DECL ((RSENT) RSUBR-ENTRY) + <FORM RSUBR-ENTRY + [<COND (<TYPE? <1 .RSENT> RSUBR> <2 <1 .RSENT>>) + (ELSE <1 .RSENT>)> + <2 .RSENT> + !<REST .RSENT 2>] + <ENTRY-LOC .RSENT>>> + +<DEFMAC RSUBR-PPRINT ('L 'OUTC 'M) + <FORM PROG () <FORM PRINC !\% .OUTC> <FORM FORMS <FORM DUMP .L> .OUTC .M>>> + +<DEFINE DUMP (RSUB + "EXTRA" (FIXUPS <GET .RSUB RSUBR>) + (PURE <NOT <TYPE? <1 .RSUB> CODE>>)) + #DECL ((RSUB) RSUBR (FIXUPS) ANY (PURE) <OR FALSE ATOM>) + <OR <TYPE? .FIXUPS LIST> <SET FIXUPS <>>> + <COND + (<OR .FIXUPS .PURE <AND <ASSIGNED? NO-DUMP> .NO-DUMP <SET PURE T>> + <=? <5 .OUTCHAN> "TTY">> + <FORM + <COND (.PURE RSUBR) (ELSE FIXUP!-RSUBRS)> + <FORM QUOTE + <MAPF ,VECTOR + <FUNCTION (OB "AUX" ATM) + #DECL ((OB) ANY (ATM) ATOM) + <COND (<AND <TYPE? .OB RSUBR RSUBR-ENTRY> + ;"Named RSUBR ?" + <GASSIGNED? <SET ATM <2 .OB>>> + <TYPE? ,.ATM RSUBR RSUBR-ENTRY>> + .ATM) + (ELSE .OB)>> + .RSUB>> + !<COND (.PURE ()) (ELSE (<FORM QUOTE .FIXUPS>))>>) + (ELSE + <ERROR CAN-NOT-BE-DUMPED!-ERRORS> + <FORM RSUBR <FORM QUOTE <CHTYPE .RSUB VECTOR>>>)>> + +<DEFMAC CODE-PPRINT ('L 'OUTC 'M) + <FORM PROG + () + <FORM COND + (<FORM N==? <FORM LINPOS .OUTC> 0> + <FORM TERPRI .OUTC>)> + <FORM PRIN1 .L .OUTC>>> + +<DEFMAC STORAGE-PPRINT ('L 'OUTC 'M) + <FORM PROG + () + <FORM PRINC !\# .OUTC> + <FORM PRIN1 STORE .OUTC> + <FORM PRINC !\ .OUTC> + <FORM PRINC + <FORM CHTYPE + <FORM GETBITS .L #BITS *004400000000*> + FIX> + .OUTC>>> + +<DEFINE CHECK2 (L OUTC M + "AUX" (F <CHECK <1 .L> 1 <REST .L> .OUTC .M>) FF) + #DECL ((L) <<PRIMTYPE LIST> [2 ANY]> (M FF) FIX (OUTC) CHANNEL + (F) <OR FALSE FIX>) + <AND .F + <NOT <GET .L COMMENT>> + <SET FF .F> + <CHECK <2 .L> <+ 2 .FF> <REST .L 2> .OUTC .M>>> + +<DEFINE DECL-PPRINT (L OUTC OM "AUX" (M <+ .OM 1>) POS) + #DECL ((L) <PRIMTYPE LIST> (POS) FIX (OM M) FIX + (OUTC) <CHANNEL [12 ANY] [4 FIX]>) + <PRINC !\# .OUTC> + <PRIN1 DECL .OUTC> + <PRINC " (" .OUTC> + <SET POS <LINPOS .OUTC>> + <COND (.FITS? <LIST-ELEMENTS .L .OUTC <+ .M 1>>) + (<NOT <0? <MOD <LENGTH .L> 2>>> <LIST-BLOCKP .L .POS .OUTC .M>) + (ELSE + <REPEAT ((FLG <CHECK2 .L .OUTC .M>) FLGC) + #DECL ((FLG) <OR FALSE FIX> (FLGC) <OR FALSE ATOM>) + <COND (<TYPE? <1 .L> LIST> + <COND (<AND .QUICKPRINT + <CHECK <1 .L> 0 <REST .L> .OUTC .M>> + <PRIN1 <1 .L> .OUTC>) + (ELSE + <PRINC !\( .OUTC> + <LIST-BLOCKP <1 .L> <LINPOS .OUTC> .OUTC <+ .M 1>> + <PRINC !\) .OUTC>)>) + (ELSE <FORMS <1 .L> .OUTC .M>)> + <LIST-COMMENTS .L .OUTC .M> + <SET L <REST .L>> + <COND (.FLG <PRINC !\ .OUTC>) + (ELSE <TERPRI .OUTC> <INDENT-TO .POS .OUTC>)> + <FORMS <1 .L> .OUTC .M> + <SET FLGC <LIST-COMMENTS .L .OUTC .M>> + <COND (<EMPTY? <SET L <REST .L>>> <RETURN>)> + <COND (<AND <NOT .FLGC> .FLG <CHECK2 .L .OUTC .M>> + <PRINC !\ .OUTC> + <AGAIN>)> + <TERPRI .OUTC> + <INDENT-TO .POS .OUTC>>)> + <PRINC !\) .OUTC>> + +\ + +;"Routines for PPRINTing Functions" + +<DEFINE FUNCBODY (L P P1 OUTC OM + "AUX" (M <+ .OM 1>) (NEWLINE #FALSE ()) COMFLG) + #DECL ((L) <PRIMTYPE LIST> (P P1 OM M) FIX + (NEWLINE COMFLG) <OR FALSE ATOM> + (OUTC) <CHANNEL [12 ANY] [4 FIX]>) + <PROG () + <COND (<EMPTY? .L> <RETURN>) + (<TYPE? <1 .L> ATOM> + <OR <CHECK <1 .L> -1 .L .OUTC .M> + <TERPRI .OUTC> <INDENT-TO .P .OUTC>> + <PRIN1 <1 .L> .OUTC> + <SET COMFLG <LIST-COMMENTS .L .OUTC .M>> + <COND (<EMPTY? <SET L <REST .L>>> <RETURN>) + (.COMFLG <TERPRI .OUTC> <SET NEWLINE T>) + (ELSE <PRINC !\ .OUTC>)>)> + <COND (<TYPE? <1 .L> LIST> + <AND .NEWLINE <INDENT-TO .P .OUTC>> + <SET NEWLINE <PRINARGL <1 .L> .P .OUTC .M>> + <SET COMFLG <LIST-COMMENTS .L .OUTC .M>> + <COND (<EMPTY? <SET L <REST .L>>> <RETURN>) + (.COMFLG <TERPRI .OUTC> <SET NEWLINE T>) + (<NOT .NEWLINE> <PRINC !\ .OUTC>)>)> + <COND (<AND <NOT .NEWLINE> <CHECK .L -1 .L .OUTC .M>> + <LIST-ELEMENTS .L .OUTC .M>) + (ELSE + <OR .NEWLINE <TERPRI .OUTC>> + <COND (<FORMREC .L <- <LINLNT .OUTC> .P .M>> + <INDENT-TO .P1 .OUTC>) + (ELSE <INDENT-TO .P .OUTC>)> + <LIST-COMPONENTS .L .OUTC .M>)>>> + +<DEFINE CHECK (IT FUDGE L OUTC M) + #DECL ((IT) ANY (FUDGE M) FIX (VALUE) <OR FALSE FIX> + (L) <PRIMTYPE LIST> (OUTC) <CHANNEL [12 ANY] [4 FIX]>) + <FLATSIZE .IT + <- <LINLNT .OUTC> + <LINPOS .OUTC> + .FUDGE + <COND (<EMPTY? .L> .M) (0)>>>> + +<DEFINE PRINARGL (L PB OUTC M "AUX" POS Q (OL .L)) + #DECL ((L) <SPECIAL LIST> (PB M) FIX (POS) FIX (OL) LIST + (Q) <OR LIST STRING FALSE> (OUTC) <CHANNEL [12 ANY] [4 FIX]>) + <COND (<CHECK .L 0 .L .OUTC .M> + <PRINC !\( .OUTC> + <LIST-ELEMENTS .L .OUTC <+ .M 1>> + <PRINC !\) .OUTC> + #FALSE ()) + (ELSE + <COND (<NOT <CHECK <SET Q <ABUNCH L>> -1 .L .OUTC .M>> + <TERPRI .OUTC> + <INDENT-TO .PB .OUTC>)> + <PRINC !\( .OUTC> + <SET POS <LINPOS .OUTC>> + <REPEAT ((FIRST T) (N <+ .M 1>)) + #DECL ((FIRST) <OR FALSE ATOM> (N) FIX) + <COND (<NOT .Q> <RETURN>)> + <COND (<TYPE? .Q STRING> + <COND (<NOT .FIRST> <TERPRI .OUTC> + <INDENT-TO .POS .OUTC>)> + <PRIN1 .Q .OUTC> + <COND (<LIST-COMMENTS .OL .OUTC .M> + <OR <EMPTY? .L> + <TERPRI .OUTC> + <INDENT-TO .POS .OUTC>>) + (<NOT <EMPTY? .L>> <PRINC !\ .OUTC>)>) + (<LIST-BLOCKP .OL <LINPOS .OUTC> .OUTC .N .L>)> + <SET FIRST <>> + <SET OL .L> + <SET Q <ABUNCH L>>> + <PRINC !\) .OUTC> + <TERPRI .OUTC> + T)>> + +<DEFINE ABUNCH (ATM "AUX" (BUNCH ..ATM)) + #DECL ((ATM) ATOM (BUNCH) LIST (VALUE) <OR LIST STRING FALSE>) + <COND (<EMPTY? .BUNCH> #FALSE ()) + (<TYPE? <1 .BUNCH> STRING> + <SET .ATM <REST .BUNCH>> + <1 .BUNCH>) + (ELSE + <MAPF ,LIST + <FUNCTION ("EXTRA" T) + #DECL ((T) ANY) + <COND (<OR <EMPTY? .BUNCH> <TYPE? <SET T <1 .BUNCH>> STRING>> + <SET .ATM .BUNCH> + <MAPSTOP>) + (ELSE + <SET BUNCH <REST .BUNCH>> + .T)>>>)>> + +\ + +;"How to print FORM and its special cases. +Special cases for FORM are called from FORM-PPRINT." + +<DEFMAC FORM-PPRINT ('L 'OUTC 'M) + <FORM PROG + ((L .L) (L1 <FORM 1 <FORM LVAL L>>)) + #DECL ((L) <PRIMTYPE LIST> (L1) ANY) + <FORM COND + ('<OR <==? <LVAL L1> PROG> + <==? <LVAL L1> REPEAT>> + <FORM PROGREP <FORM LVAL L> .OUTC .M>) + ('<==? <LVAL L1> LVAL> + <FORM LVAL-SPECFORM <FORM LVAL L> .OUTC .M>) + ('<==? <LVAL L1> GVAL> + <FORM GVAL-SPECFORM <FORM LVAL L> .OUTC .M>) + ('<==? <LVAL L1> QUOTE> + <FORM QUOTE-SPECFORM <FORM LVAL L> .OUTC .M>) + ('<==? <LVAL L1> FUNCTION> + <FORM FUNCTION-SPECFORM <FORM LVAL L> .OUTC .M>) + ('<OR <==? <LVAL L1> DEFINE> + <==? <LVAL L1> DEFMAC>> + <FORM DEFINE-SPECFORM <FORM LVAL L> .OUTC .M>) + (ELSE <FORM NORMFORM <FORM LVAL L> .OUTC .M>)>>> + +<DEFINE NORMFORM (L OUTC M + "EXTRA" (PN <+ 1 <LINPOS .OUTC>>) + (L1 <1 .L>) COMFLG) + #DECL ((L) <PRIMTYPE LIST> (PN M) FIX (L1) ANY + (COMFLG) <OR ATOM FALSE> (OUTC) <CHANNEL [12 ANY] [4 FIX]>) + <PRINC !\< .OUTC> + <FORMS .L1 .OUTC .M> + <COND (.FITS? <COMEND .L .OUTC .M>) + (<FORMAHEAD .L <- <LINLNT .OUTC> <LINPOS .OUTC> .M>> + <PROG () + <SET COMFLG <LIST-COMMENTS .L .OUTC .M>> + <COND (<EMPTY? <REST .L>> <RETURN>) + (<AND <NOT .COMFLG> + <OR <==? .L1 SET> + <==? .L1 SETG> + <==? .L1 STACKFORM> + <==? .L1 MAPF> + <==? .L1 MAPR>> + <CHECK <2 .L> 1 '(0) .OUTC .M>> + <SET L <REST .L>> + <PRINC !\ .OUTC> + <LIST-ELEMENTS .L .OUTC .M <REST .L>> + <COND (<EMPTY? <SET L <REST .L>>> <RETURN>)>) + (ELSE <SET L <REST .L>>)> + <TERPRI .OUTC> + <INDENT-TO .PN .OUTC> + <COND (<CHECK .L 3 .L .OUTC .M> <LIST-ELEMENTS .L .OUTC <+ .M 1>>) + (ELSE <LIST-COMPONENTS .L .OUTC <+ .M 1>>)>>) + (T <COMEND .L .OUTC .M>)> + <PRINC !\> .OUTC>> + +<DEFMAC COMEND ('L 'OUTC 'M) + <FORM PROG + ((L .L) (PPN <FORM LINPOS .OUTC>)) + #DECL ((L) <PRIMTYPE LIST> (PPN) FIX) + <FORM COND + (<FORM LIST-COMMENTS <FORM LVAL L> .OUTC .M> + <FORM TERPRI .OUTC> + <FORM INDENT-TO <FORM LVAL PPN> .OUTC>)> + <FORM COND + (<FORM EMPTY? <FORM REST <FORM LVAL L>>>) + (<FORM PRINC !\ .OUTC> + <FORM LIST-COMELE <FORM REST <FORM LVAL L>> + .OUTC <FORM + .M 1>>)>>> + +<DEFMAC FORMAHEAD ('F 'AVSP) + <FORM PROG + ((F .F) (AVSP .AVSP)) + #DECL ((F) <PRIMTYPE LIST> (AVSP) FIX) + <FORM COND + (<FORM AND + <FORM TYPE? <FORM 1 <FORM LVAL F>> FORM SEGMENT> + <FORM NOT <FORM EMPTY? <FORM REST <FORM LVAL F>>>> + <FORM NOT + <FORM FLATSIZE + <FORM 1 <FORM LVAL F>> + <FORM LVAL AVSP>>>> + T) + (ELSE <FORM FORMREC <FORM LVAL F> <FORM LVAL AVSP>>)>>> + +<DEFMAC FORMREC ('F 'AVSP) + <FORM COND + ('.LOOKAHEAD <FORM FORMREC1 .F .AVSP>) + (ELSE '.VERTICAL)>> + +<DEFINE FORMREC1 (F AVSP) + #DECL ((AVSP) FIX (F) <<PRIMTYPE LIST> ANY>) + <PROG (FS FSFIX FO) + #DECL ((FSFIX) FIX (FS) <OR FALSE FIX> (FO) ANY) + <COND (<SET FS <FLATSIZE <1 .F> .AVSP>>) + (<TYPE? .F FORM SEGMENT> + <COND (<EMPTY? <REST .F>> <RETURN #FALSE ()>) + (ELSE <RETURN T>)>) + (<OR <MONAD? <1 .F>> + <NOT <==? <PRIMTYPE <1 .F>> LIST>> + <FORMREC1 <1 .F> .AVSP>> + <RETURN T>)> + <COND (<EMPTY? <REST .F>> <RETURN #FALSE ()>)> + <COND (<TYPE? .F FORM SEGMENT> + <COND (<AND <TYPE? <SET FO <1 .F>> ATOM> + <OR <==? .FO LVAL> + <==? .FO GVAL> + <==? .FO QUOTE>>> + <SET AVSP <- .AVSP 1>>) + (ELSE + <SET FSFIX .FS> + <SET AVSP <- .AVSP .FSFIX 3>>)>) + (<TYPE? .F FUNCTION> <SET AVSP <- .AVSP 12>>) + (<TYPE? .F DECL> <SET AVSP <- .AVSP 8>>) + (ELSE <SET AVSP <- .AVSP 3>>)> + <SET F <REST .F>> + <REPEAT ((F2 <1 .F>) (F1 .F)) + #DECL ((F1) LIST (F2) ANY) + <COND (<MONAD? .F2> <OR <FLATSIZE .F2 .AVSP> <RETURN T>>) + (<FLATSIZE .F2 .AVSP>) + (<NOT <==? LIST <PRIMTYPE .F2>>>) + (<FORMREC1 .F2 .AVSP> <RETURN T>)> + <COND (<EMPTY? <SET F1 <REST .F1>>> <RETURN #FALSE ()>)> + <SET F2 <1 .F1>>>>> + +<DEFINE PROGREP (L OUTC M + "AUX" (POS1 <+ 2 <LINPOS .OUTC>>) POS COMFLG) + #DECL ((L) <PRIMTYPE LIST> (POS1 POS M) FIX + (COMFLG) <OR FALSE ATOM> (OUTC) <CHANNEL [12 ANY] [4 FIX]>) + <PRINC !\< .OUTC> + <PRIN1 <1 .L> .OUTC> + <SET POS <+ 1 <LINPOS .OUTC>>> + <SET COMFLG <LIST-COMMENTS .L .OUTC .M>> + <COND (<EMPTY? <SET L <REST .L>>>) + (ELSE + <PROG () + <COND (<TYPE? <1 .L> ATOM> + <COND (.COMFLG <TERPRI .OUTC> <INDENT-TO .POS .OUTC>) + (ELSE <PRINC !\ .OUTC>)> + <PRIN1 <1 .L> .OUTC> + <SET COMFLG <LIST-COMMENTS .L .OUTC .M>> + <COND (<EMPTY? <SET L <REST .L>>> <RETURN>)>)> + <COND (<TYPE? <1 .L> LIST> + <COND (.COMFLG <TERPRI .OUTC> <INDENT-TO .POS .OUTC>) + (ELSE <PRINC !\ .OUTC>)> + <COND (<CHECK <1 .L> 1 .L .OUTC .M> <FORMS <1 .L> .OUTC .M>) + (ELSE + <PRINC !\( .OUTC> + <LIST-BLOCKP <1 .L> <LINPOS .OUTC> .OUTC .M> + <PRINC !\) .OUTC>)> + <LIST-COMMENTS .L .OUTC .M> + <COND (<EMPTY? <SET L <REST .L>>> <RETURN>)>)> + <COND (<FORMREC .L <- <LINLNT .OUTC> .POS .M>> + <TERPRI .OUTC> + <INDENT-TO .POS1 .OUTC>) + (ELSE + <AND <G? <LINPOS .OUTC> .POS> <TERPRI .OUTC>> + <INDENT-TO .POS .OUTC>)> + <LIST-COMPONENTS .L .OUTC <+ .M 1>>>)> + <PRINC !\> .OUTC>> + +<DEFMAC LVAL-SPECFORM ('L 'OUTC 'M) + <FORM DAMMIT !\. .L .OUTC .M>> + +<DEFMAC GVAL-SPECFORM ('L 'OUTC 'M) + <FORM DAMMIT !\, .L .OUTC .M>> + +<DEFMAC QUOTE-SPECFORM ('L 'OUTC 'M) + <FORM DAMMIT !\' .L .OUTC .M>> + +<DEFMAC DAMMIT ('Q 'L 'OUTC 'M) + <FORM PROG + ((L .L)) + #DECL ((L) <PRIMTYPE LIST>) + <FORM COND + (<FORM ==? 2 <FORM LENGTH <FORM LVAL L>>> + <FORM PRINC .Q .OUTC> + <FORM LIST-COMELE <FORM REST <FORM LVAL L>> .OUTC <FORM + .M 1>>) + (ELSE <FORM NORMFORM <FORM LVAL L> .OUTC .M>)>>> + +<DEFMAC FUNCTION-SPECFORM ('L 'OUTC 'M) + <FORM PROG + ((L .L) (POS1 <FORM + <FORM LINPOS .OUTC> 3>) + POS + COMFLG) + #DECL ((L) <PRIMTYPE LIST> (POS1 POS) FIX (COMFLG) <OR FALSE ATOM>) + <FORM PRINC !\< .OUTC> + <FORM PRIN1 FUNCTION .OUTC> + <FORM SET POS <FORM - <FORM LINPOS .OUTC> 1>> + <FORM PROG + () + <FORM SET COMFLG <FORM LIST-COMMENTS <FORM LVAL L> .OUTC .M>> + <FORM COND + (<FORM EMPTY? <FORM SET L <FORM REST <FORM LVAL L>>>> + <FORM RETURN>) + (<FORM LVAL COMFLG> + <FORM TERPRI .OUTC> + <FORM INDENT-TO <FORM LVAL POS> .OUTC>) + (ELSE <FORM PRINC !\ .OUTC >)> + <FORM FUNCBODY + <FORM LVAL L> + <FORM LVAL POS> + <FORM LVAL POS1> .OUTC .M>> + <FORM PRINC !\> .OUTC>>> + +<DEFMAC DEFINE-SPECFORM ('L 'OUTC 'M) + <FORM PROG + ((L .L) + (POS1 <FORM + <FORM LINPOS .OUTC> 3>) + POS + COMFLG) + #DECL ((POS POS1) FIX (L) <PRIMTYPE LIST> (COMFLG) <OR FALSE ATOM>) + <FORM PRINC !\< .OUTC> + <FORM PRIN1 <FORM 1 <FORM LVAL L>> .OUTC> + <FORM SET POS <FORM + 1 <FORM LINPOS .OUTC>>> + <FORM PROG + () + <FORM SET COMFLG <FORM LIST-COMMENTS <FORM LVAL L> .OUTC .M>> + <FORM COND + (<FORM EMPTY? <FORM SET L <FORM REST <FORM LVAL L>>>> + <FORM RETURN>) + (<FORM LVAL COMFLG> + <FORM TERPRI .OUTC> + <FORM INDENT-TO <FORM LVAL POS> .OUTC>) + (ELSE <FORM PRINC !\ .OUTC>)> + <FORM PRIN1 <FORM 1 <FORM LVAL L>> .OUTC> + <FORM SET COMFLG <FORM LIST-COMMENTS <FORM LVAL L> .OUTC .M>> + <FORM COND + (<FORM EMPTY? <FORM SET L <FORM REST <FORM LVAL L>>>> + <FORM RETURN>) + (<FORM LVAL COMFLG> + <FORM TERPRI .OUTC> + <FORM INDENT-TO <FORM LVAL POS> .OUTC>) + (ELSE <FORM PRINC !\ .OUTC>)> + <FORM FUNCBODY + <FORM LVAL L> + <FORM LVAL POS> + <FORM LVAL POS1> .OUTC .M>> + <FORM PRINC !\> .OUTC>>> + +\ + +<SETG LINPOS 14> + +<SETG LINLNT 13> + +<SETG PAGPOS 16> + +<SETG PAGLNT 15> + +<MANIFEST LINPOS LINLNT PAGPOS PAGLNT> + +<SETG TABS ;"The n'th element is a string of n-1 tab characters" + <PROG ((I -1)) + <IVECTOR 15 '<ISTRING <SET I <+ .I 1>> !\ >>>> + +<SETG SPACES ;"The n'th element is a string of n-1 space characters" + <PROG ((I -1)) + <IVECTOR 8 '<ISTRING <SET I <+ .I 1>> !\ >>>> + +<GDECL (TABS SPACES) <VECTOR [REST STRING]>> + +<DEFINE INDENT-TO (N "OPTIONAL" (OUTC .OUTCHAN) "EXTRA" (NOW <LINPOS .OUTC>)) + ;"Print tabs and spaces to get to column -n-" + #DECL ((N NOW) FIX (OUTC) <CHANNEL [12 ANY] [4 FIX]>) + <COND (<G? .N .NOW> + <PRINC <NTH ,TABS <MIN 15 <- </ .N 8> </ .NOW 8> -1>>> + .OUTC> + <COND (<G? .N <SET NOW <LINPOS .OUTC>>> + ;"Can be screwed by MORE interrupt otherwise" + <PRINC <NTH ,SPACES <- .N .NOW -1>> .OUTC>)>)>> + +<ENDPACKAGE> diff --git a/src/mudbug/rdb.ur&t39 b/src/mudbug/rdb.ur&t39 new file mode 100644 index 00000000..96669942 --- /dev/null +++ b/src/mudbug/rdb.ur&t39 @@ -0,0 +1,148 @@ + ; "Modified by TT, 15-19th April, 1975. + New features: + 1. Remove old breakpoints. + 2. Remove old symbols. + 3. RSUBR-ENTRIES breakable." + +<PACKAGE "RDB"> + +<ENTRY RFREEZE RBREAK ADR> + +<DEFINE GOOD-SQUOZE (STR) #DECL ((STR VALUE) STRING) + <MAPF ,STRING + <FUNCTION (X) #DECL ((X) CHARACTER) + <COND (<MEMQ .X "%$.0123456789">) + (<AND <G=? <ASCII .X> <ASCII !"A>> + <L=? <ASCII .X> <ASCII !"Z>>>) + (<AND <G=? <ASCII .X> <ASCII !"a>> + <L=? <ASCII .X> <ASCII !"z>>>) + (T <MAPRET>)> + .X> + .STR>> + + ; "Brief explaination of associations used: + object______ indicator_________ meaning if non-false____________________ + atom of rsubr RFREEZE code = oldcode + rsubr RFREEZE fix = absolute position of beginning of rsubr + atom of rsubr RBREAK list of r/re that has break points + rsubr/re RBREAK fix = absolute location where break point is set" + +<DEFINE RUNBREAK (ratom "AUX" break) +#DECL ((ratom) ATOM (break) <PRIMTYPE LIST>) + <COND (<SET break <GET .ratom RBREAK>> + <VALRET + <STRING "" + !<MAPF ,STRING + <FUNCTION (foo "AUX" fix) + <COND (<SET fix <GETPROP .foo RBREAK>> + <PUTPROP .foo RBREAK> + <MAPRET <UNPARSE .fix 8> "0B">) + (T + <MAPRET>)> + T> + .break> + ":CONTIN +">> + <PUTPROP .ratom RBREAK> + "UNBROKEN")>> + +<DEFINE IRFREEZE (atom whoamI? + "AUX" xsym num rpos pos code rsubr? rsubr stuff entry ratom oldcode + rcpos-or-false) +#DECL ((atom ratom whoamI?) ATOM + (num pos rpos) FIX + (code) <<PRIMTYPE UVECTOR> [REST <PRIMTYPE WORD>]> + (oldcode) <OR FALSE <<PRIMTYPE UVECTOR> [REST <PRIMTYPE WORD>]>> + (xsym) <OR FALSE <<PRIMTYPE UVECTOR> [REST <PRIMTYPE WORD>]>> + (rsubr?) <OR ATOM FALSE> + (rsubr) RSUBR + (entry) RSUBR-ENTRY + (name) FRAME) + + <PROG () + <COND (<GASSIGNED? .atom> + <SET stuff ,.atom>) + (T + <RETURN <CHTYPE ("No GVAL?" .atom) FALSE>>)> + <COND (<SET rsubr? <TYPE? .stuff RSUBR>> + <SET rsubr .stuff> + <SET ratom .atom>) + (<TYPE? .stuff RSUBR-ENTRY> + <SET entry .stuff> + <COND (<TYPE? <1 .stuff> ATOM> + <SET ratom <1 .stuff>> + <SET rsubr ,.ratom>) + (T + <SET rsubr <1 .stuff>> + <SET ratom <2 .rsubr>>)>) + (T + <RETURN <CHTYPE ("Can't Freeze" .stuff) FALSE>>)> + <COND (<TYPE? <1 .rsubr> PCODE> + <RETURN <CHTYPE ("Can't Freeze Pure Code" <1 .rsubr>) FALSE>>)> + <COND (<SET rpos-or-false <GET .rsubr RFREEZE>> + <SET rpos .rpos-or-false> + <COND (.rsubr? <SET pos .rpos>) + (T <SET pos <+ .rpos <ENTRY-LOC .entry>>>)>) + (T + <RUNBREAK .ratom> + <SET code <CHTYPE <FREEZE <1 .rsubr>> CODE>> + <PUT .rsubr 1 .code> + <RSUBR <CHTYPE .rsubr VECTOR>> + <SET rpos <ADR .code>> + <COND (.rsubr? <SET pos .rpos>) + (T <SET pos <+ .rpos <ENTRY-LOC .entry>>>)> + <COND (<0? <SET num <CHTYPE <ANDB <CHTYPE <NTH .code <LENGTH .code>> FIX> + *777777*> FIX>>> + <VALRET <STRING "" + <UNPARSE .pos 8> + "/" + <GOOD-SQUOZE <PNAME .atom>> + "::CONTIN +">>) + (T + <SYM-TO-DDT <REST .code <- <LENGTH .code> .num 1>> .num .rpos>)> + <AND <SET xsym <GET .rsubr FREEZE>> + <SYM-TO-DDT .xsym <LENGTH .xsym> .rpos>> + <PUT .rsubr RFREEZE .rpos>)> + <COND (<==? .whoamI? RFREEZE> <RETURN "FROZEN">) + (<GET .stuff RBREAK> <RETURN "BROKEN">) + (T + <PUT .ratom RBREAK <CONS .stuff <GET .ratom RBREAK ()>>> + <PUT .stuff RBREAK .pos> + <VALRET <STRING "" + <UNPARSE .pos 8> + "B:CONTIN +">> + "BROKEN")>>> + +<DEFINE RFREEZE (atom) #DECL ((atom) ATOM) <IRFREEZE .atom RFREEZE>> + +<DEFINE RBREAK (atom) #DECL ((atom) ATOM) <IRFREEZE .atom RBREAK>> + +<ENTRY RFREEZE RBREAK RUNBREAK ADR> + +<TITLE ADR> + <MOVSI A* TFIX> + <HRRZ B* 1 (AB)> + <JRST FINIS> + +<TITLE SYM-TO-DDT> +<DECLARE (UVECTOR FIX FIX)> + <MOVE A* (AB) 1> + <MOVE B* (AB) 3> +again <JUMPLE B* done> + <MOVE C* (A)> + <HRRZ D* (A) 1> + <ADD D* (AB) 5> + <*BREAK (*500*) [<(*400004*) C>]> + <ADDI A* 2> + <SUBI B* 2> + <JRST again> +done <MOVE A* (AB)> + <MOVE B* (AB) 1> + <JRST FINIS> + +<END> + +<ENDPACKAGE> + \ No newline at end of file diff --git a/src/mudbug/trace.utaa13 b/src/mudbug/trace.utaa13 new file mode 100644 index 00000000..d2c0bc00 --- /dev/null +++ b/src/mudbug/trace.utaa13 @@ -0,0 +1,293 @@ + +<PACKAGE "TRACE"> + +<ENTRY TRACE + UNTRACE + TFUNCTION + TRSUBR + TRSUBR-ENTRY + TSUBR + TRACELIST> + +<ENTRY INDENT + INDENT-MOD + IN-BREAK + IN-PRINT + OUT-BREAK + OUT-PRINT + VERBOSE + TSTRUC> + +<ENTRY TRACE-ARGS TRACE-VAL> + +<NEWTYPE TFUNCTION LIST> + +<NEWTYPE TRSUBR VECTOR> + +<NEWTYPE TRSUBR-ENTRY VECTOR> + +<NEWTYPE TSUBR WORD> + +<NEWTYPE TSTRUC VECTOR '<<PRIMTYPE VECTOR> [7 ANY]>> + +<PUT APPTRACE + DECL + '<OR TFUNCTION TRSUBR TRSUBR-ENTRY TSUBR>> + +<SETG IN-BREAK 1> + +<SETG IN-PRINT 2> + +<SETG OUT-PRINT 3> + +<SETG OUT-BREAK 4> + +<SETG VERBOSE 5> + +<SETG NAME 6> + +<SETG RVAL 7> + +<MANIFEST IN-BREAK + IN-PRINT + OUT-PRINT + OUT-BREAK + VERBOSE + NAME + RVAL> + +<DEFINE TRACE ("OPTIONAL" (FROBS <>) + "TUPLE" DEFS + "AUX" (IN-BREAK <>) (IN-PRINT T) (OUT-PRINT T) (OUT-BREAK <>) + (VERBOSE <>)) + #DECL ((FROBS) <OR FALSE ATOM <LIST [REST ATOM]>> + (DEFS) <TUPLE [REST <OR ATOM LIST>]> + (IN-PRINT OUT-PRINT OUT-BREAK VERBOSE) ANY) + <COND (<NOT .FROBS> <FLOAD "MUDBUG;TRACE ORDER"> T) + (T + <MAPF <> + <FUNCTION (X "AUX" Y Z) + #DECL ((X) <OR ATOM LIST> (Y) ATOM + (Z) STRING) + <COND (<TYPE? .X ATOM> + <SET Z <SPNAME .X>> + <COND (<=? .Z "IN-BREAK"> <SET IN-BREAK T>) + (<=? .Z "OUT-BREAK"> <SET OUT-BREAK T>) + (<=? .Z "VERBOSE"> <SET VERBOSE T>)>) + (<REPEAT + ((ZORK <COND (<TYPE? <NTH .X <LENGTH .X>> FORM> + <ENTRY-HACK <NTH .X <LENGTH .X>>>) + (<NTH .X <LENGTH .X>>)>)) + <SET Y <1 .X>> + <SET Z <SPNAME .Y>> + <COND (<=? .Z "IN-BREAK"> + <SET IN-BREAK .ZORK>) + (<=? .Z "OUT-BREAK"> + <SET OUT-BREAK .ZORK>) + (<=? .Z "IN-PRINT"> + <SET IN-PRINT .ZORK>) + (<=? .Z "OUT-PRINT"> + <SET OUT-PRINT .ZORK>) + (<=? .Z "VERBOSE"> + <SET VERBOSE .ZORK>)> + <OR <TYPE? <1 <SET X <REST .X>>> ATOM> + <RETURN>>>)>> + .DEFS> + <COND (<TYPE? .FROBS ATOM> + <TRACE-IT .FROBS + .IN-BREAK + .IN-PRINT + .OUT-PRINT + .OUT-BREAK + .VERBOSE>) + (T + <MAPF <> + <FUNCTION (X) + #DECL ((X) ATOM) + <TRACE-IT .X + .IN-BREAK + .IN-PRINT + .OUT-PRINT + .OUT-BREAK + .VERBOSE>> + .FROBS> + .FROBS)>)>> + +<DEFINE ENTRY-HACK (AFORM) #DECL ((AFORM) FORM) + <MAPR <> + <FUNCTION (X "AUX" (Y <1 .X>)) #DECL ((X) <PRIMTYPE LIST>) + <COND (<TYPE? .Y ATOM> + <COND (<=? <SPNAME .Y> "TRACE-ARGS"> + <PUT .X 1 TRACE-ARGS>) + (<=? <SPNAME .Y> "TRACE-VAL"> + <PUT .X 1 TRACE-VAL>)>) + (<TYPE? .Y FORM> + <ENTRY-HACK .Y>)>> + .AFORM> + .AFORM> + +<OR <GASSIGNED? TRACELIST> <SETG TRACELIST ()>> + +<GDECL (TRACELIST) <LIST [REST ATOM]>> + +<DEFINE TRACE-IT (FROB IN-BREAK IN-PRINT OUT-PRINT OUT-BREAK VERBOSE + "AUX" VAL RVAL TS) + #DECL ((FROB) ATOM (IN-BREAK IN-PRINT OUT-PRINT OUT-BREAK VERBOSE) ANY + (VAL) <OR FUNCTION RSUBR-ENTRY RSUBR SUBR APPTRACE> + (TS) <OR FALSE TSTRUC> (RVAL) APPTRACE) + <COND (<GASSIGNED? .FROB> + <SET VAL ,.FROB> + <COND (<AND + <TYPE? .VAL TFUNCTION TRSUBR TRSUBR-ENTRY TSUBR> + <SET TS <GETPROP .VAL TRACE>>> + <SET RVAL .VAL> + <SET VAL <RVAL .TS>>) + (T + <SETG + .FROB + <SET + RVAL + <COND (<TYPE? .VAL FUNCTION> + <CHTYPE .VAL TFUNCTION>) + (<TYPE? .VAL RSUBR> + <CHTYPE .VAL TRSUBR>) + (<TYPE? .VAL RSUBR-ENTRY> + <CHTYPE .VAL TRSUBR-ENTRY>) + (T + <CHTYPE .VAL TSUBR>)>>> + <SETG TRACELIST (.FROB !,TRACELIST)> + <PUTPROP .RVAL TRACE <SET TS <CHTYPE <IVECTOR 7 <>> TSTRUC>>>)> + <PUT .TS ,IN-BREAK .IN-BREAK> + <PUT .TS ,IN-PRINT .IN-PRINT> + <PUT .TS ,OUT-PRINT .OUT-PRINT> + <PUT .TS ,OUT-BREAK .OUT-BREAK> + <PUT .TS ,VERBOSE .VERBOSE> + <PUT .TS ,NAME .FROB> + <PUT .TS ,RVAL .VAL> + .FROB)>> + +<DEFINE UNTRACE ("OPTIONAL" (X ,TRACELIST)) + #DECL ((X) <OR ATOM <LIST [REST ATOM]>>) + <COND (<==? .X ,TRACELIST> + <MAPF <> + <FUNCTION (FROB "AUX" TEMP) + #DECL ((FROB) ATOM (TEMP) <OR FALSE TSTRUC>) + <AND <SET TEMP <GET ,.FROB TRACE>> + <SETG .FROB <RVAL .TEMP>>>> + .X> + <SETG TRACELIST ()> + .X) + (<TYPE? .X LIST> + <MAPF <> + <FUNCTION (X) #DECL ((X) ATOM) <UNTRACE-IT .X>> + .X>) + (T <UNTRACE-IT .X>)> + .X> + +<DEFINE UNTRACE-IT (X "AUX" (LST ,TRACELIST) (ZORK ,.X) TEMP) + #DECL ((X) ATOM (LST) <LIST [REST ATOM]> (ZORK) APPTRACE + (TEMP) <OR FALSE TSTRUC>) + <COND (<==? <1 .LST> .X> + <SETG TRACELIST <REST .LST>> + <AND <SET TEMP <GET .ZORK TRACE>> + <SETG .X <RVAL .TEMP>>>) + (<REPEAT ((NL <REST .LST>) (OL .LST)) + #DECL ((OL NL) LIST) + <COND (<EMPTY? .NL> <RETURN>) + (<==? <1 .NL> .X> + <AND <SET TEMP <GET .ZORK TRACE>> + <SETG .X <RVAL .TEMP>>> + <PUTREST .OL <REST .NL>> + <RETURN>) + (<SET OL .NL> <SET NL <REST .NL>>)>>)>> + +<DEFINE TSTRUC-PRINT (X "AUX" (OUTCHAN .OUTCHAN)) + #DECL ((X) TSTRUC (OUTCHAN) ANY) + <PRIN1 <NAME .X>> + <CRLF> + <PRINC "IN-BREAK: "> + <PRIN1 <IN-BREAK .X>> + <CRLF> + <PRINC "IN-PRINT: "> + <PRIN1 <IN-PRINT .X>> + <CRLF> + <PRINC "OUT-PRINT: "> + <PRIN1 <OUT-PRINT .X>> + <CRLF> + <PRINC "OUT-BREAK: "> + <PRIN1 <OUT-BREAK .X>> + <CRLF> + <PRINC "VERBOSE: "> + <PRIN1 <VERBOSE .X>> + <CRLF>> + +<PRINTTYPE TSTRUC ,TSTRUC-PRINT> + +<PRINTTYPE TRSUBR-ENTRY RSUBR-ENTRY> + +<PRINTTYPE TRSUBR RSUBR> + +<SETG INDENT-MOD 10> + +<GDECL (INDENT INDENT-MOD) FIX> + +<DEFINE TRACER (X "TUPLE" TRACE-ARGS "AUX" FROB + (INDENT <AND <ASSIGNED? INDENT> .INDENT <+ .INDENT 1>>) + RINDENT NAME TRACE-VAL STRUC + (OUTCHAN ,OUTCHAN)) + #DECL ((X) APPTRACE (TRACE-ARGS) <SPECIAL TUPLE> (FROB) ANY (RINDENT) FIX + (NAME) ATOM (TRACE-VAL) <SPECIAL ANY> (STRUC) TSTRUC + (OUTCHAN) <SPECIAL CHANNEL> (INDENT) <SPECIAL <OR FIX FALSE>>) + <COND (<NOT .INDENT>) + (<GASSIGNED? INDENT-MOD> + <SET RINDENT <+ 4 <MOD .INDENT ,INDENT-MOD>>>) + (T + <SET RINDENT <+ 4 .INDENT>>)> + <SET STRUC <GET .X TRACE>> + <SET NAME <NAME .STRUC>> + <COND (<AND <SET FROB <IN-PRINT .STRUC>> + <OR <TYPE? .FROB ATOM> <EVAL .FROB>>> + <COND (<AND .INDENT <G? .INDENT 0>> + <PRIN1 .INDENT> + <INDENT-TO .RINDENT>)> + <PRINC "Entering "> + <PRIN1 .NAME> + <PRINC " with "> + <&1 .TRACE-ARGS> + <CRLF>)> + <COND (<AND <SET FROB <VERBOSE .STRUC>> + <OR <TYPE? .FROB ATOM> <EVAL .FROB>>> + <MAPF <> ,& .TRACE-ARGS>)> + <COND (<AND <SET FROB <IN-BREAK .STRUC>> + <OR <TYPE? .FROB ATOM> <EVAL .FROB>>> + <TBREAK .NAME>)> + <SET TRACE-VAL <APPLY <RVAL .STRUC> !.TRACE-ARGS>> + <COND (<AND <SET FROB <OUT-PRINT .STRUC>> + <OR <TYPE? .FROB ATOM> <EVAL .FROB>>> + <COND (<AND .INDENT <G? .INDENT 0>> + <PRIN1 .INDENT> + <INDENT-TO .RINDENT>)> + <PRINC "Leaving "> + <PRIN1 .NAME> + <PRINC " with "> + <&1 .TRACE-VAL> + <CRLF>)> + <COND (<AND <SET FROB <OUT-BREAK .STRUC>> + <OR <TYPE? .FROB ATOM> <EVAL .FROB>>> + <TBREAK .NAME>)> + .TRACE-VAL> + +<DEFINE TBREAK (NM "AUX" (QUICK-RUN!-IEDIT T)) + #DECL ((QUICK-RUN!-IEDIT) <SPECIAL ATOM>) + <PRINC "**BREAK**"> + <LISTEN>> + +<APPLYTYPE TRSUBR ,TRACER> + +<APPLYTYPE TRSUBR-ENTRY ,TRACER> + +<APPLYTYPE TSUBR ,TRACER> + +<APPLYTYPE TFUNCTION ,TRACER> + +<ENDPACKAGE> diff --git a/src/mudbug/unassm.ubtb25 b/src/mudbug/unassm.ubtb25 new file mode 100644 index 00000000..1c2a326b --- /dev/null +++ b/src/mudbug/unassm.ubtb25 @@ -0,0 +1,695 @@ + +<PACKAGE "UNASSM"> + +<ENTRY UNASSEMBLE GROUP-CONVERT CONVERT-RSUBR DUMP-U> + +<BLOCK (<ROOT>)> + +<SET GLUE T> + +MUDREF + +<ENDBLOCK> + +<SETG RWH <BITS 18>> + +<SETG LHW <BITS 18 18>> + +<SETG TYPBYT <CHTYPE <BITS 13 18> FIX>> + +<NEWTYPE MUDREF WORD> + +<NEWTYPE SPEC-LABEL WORD> + +<FLOAD "MUDDLE;MUDHAK >"> + +<BEGIN-MHACK> + +<FLOAD "BTB;NEW VECS"> + +<SETG NDO <BITS 1 0>> + +<SETG JMP <BITS 1 1>> + +<SETG IMM <BITS 1 2>> + +<SETG JSR-LCKINT <CHTYPE <ORB #WORD *264000000000* <SQUOTA |LCKINT >> FIX>> + +<SETG SKIPGE-INTFLG <CHTYPE <ORB #WORD *335000000000* <SQUOTA |INTFLG >> FIX>> + +<GDECL (INSTRUCTION-VEC) VECTOR> + +<GDECL (BITS-VEC ACS ADDR-ACS) UVECTOR> + +<GDECL (JSR-LCKINT SKIPGE-INTFLG) FIX> + +<SETG SPEC-ATOM 10485759> + +<MANIFEST NDO JMP IMM SPEC-ATOM> + +<USE "SQUOZE" "SORTX"> + +<SETG $TLOSE <SQUOTA <SQUOZE "$TLOSE">>> + +<SETG $TLOSEHI <+ ,$TLOSE <LENGTH <ALLTYPES>>>> + +<PRINTTYPE MUDREF ,OUTPUT-MUDREF> + +<SETG UUOTOP 64> + +<SETG 9BIT <BITS 9 27>> + +<SETG ACF <BITS 4 23>> + +<SETG @BIT <BITS 1 22>> + +<SETG IDF <BITS 4 18>> + +<SETG RHW <BITS 18 0>> + +<MANIFEST UUOTOP 9BIT ACF @BIT IDF RHW LHW TYPBYT> + +<GDECL ($TLOSE $TLOSEHI) FIX> + +\ + +"HERE TO ESTABLISH THE ACS" + +<PROG ((CNT 0)) + <MAPF <> + <FUNCTION (AC) <SETG .AC .CNT> <SET CNT <+ .CNT 1>>> + '![AC-O AC-A AC-B AC-C AC-D AC-E AC-PVP AC-TVP AC-SP AC-AB AC-TB + AC-TP AC-FRM AC-M AC-R AC-P!]>> + +<MANIFEST AC-O + AC-A + AC-B + AC-C + AC-D + AC-E + AC-PVP + AC-TVP + AC-FRM + AC-AB + AC-TB + AC-TP + AC-SP + AC-M + AC-R + AC-P> + +<SETG ADDR-ACS ![O A B C D E PVP TVP SP AB TB TP FRM M R P!]> + +<SETG ACS ![O* A* B* C* D* E* PVP* TVP* SP* AB* TB* TP* FRM* M* R* P*!]> + +<SETG SPEC-HACKERS + '(|CIVEC + |CIUVEC + |CTYPEQ + |CSBSTR + |CISTNG + |CMIN + |CMAX + |IILIST + |IIFORM + |CMINUS + |CDIVID + |CPLUS + |CTIMES )> + +<GDECL (SPEC-HACKERS) LIST> + +\ + +<DEFINE PRINT-INST (INST "AUX" (OUTCHAN .OUTCHAN)) + #DECL ((INST) STRING (OUTCHAN) CHANNEL) + <PRINC .INST> + <PRINC !\ >> + +<DEFINE FIN-INST (FLG CNT "AUX" (OUTCHAN .OUTCHAN)) + #DECL ((FLG) ANY (CNT) FIX (OUTCHAN) CHANNEL) + <PRINC ">"> + <COND (.FLG <COMMENT-START> <PRIN1 .CNT>)>> + +<DEFINE M? (WD) #DECL ((WD) <PRIMTYPE WORD>) <==? <CHTYPE .WD FIX> ,AC-M>> + +<DEFINE R? (WD) #DECL ((WD) <PRIMTYPE WORD>) <==? <CHTYPE .WD FIX> ,AC-R>> + +<DEFINE JUMP? (WD "AUX" XX) + #DECL ((WD) <PRIMTYPE WORD>) + <SET XX <CHTYPE .WD FIX>> + <AND <NOT <0? .XX>> + <1? <CHTYPE <GETBITS <NTH ,BITS-VEC .XX> ,JMP> FIX>>>> + +<DEFINE UUO? (WD "AUX" XX) + #DECL ((WD) <PRIMTYPE WORD>) + <SET XX <CHTYPE .WD FIX>> + <AND <NOT <0? .WD>> <L? .XX ,UUOTOP>>> + +<DEFINE INSTRUCTION? (WD "AUX" XX) + #DECL ((WD) <PRIMTYPE WORD>) + <SET XX <CHTYPE .WD FIX>> + <AND <NOT <0? .XX>> <NTH ,INSTRUCTION-VEC .XX>>> + +<DEFINE PASS-1 (MVEC "AUX" (LST ())) + #DECL ((MVEC) <PRIMTYPE UVECTOR>) + <MAPF <> + <FUNCTION (INST + "AUX" (INWD <CHTYPE <GETBITS .INST ,9BIT> FIX>) + (INDX <CHTYPE <GETBITS .INST ,IDF> FIX>) + (INDEX <CHTYPE <GETBITS .INST ,RHW> FIX>)) + #DECL ((INWD INDX INDEX) <PRIMTYPE WORD>) + <COND (<AND <M? .INDX> + <OR <JUMP? .INWD> + <NOT <INSTRUCTION? .INWD>> + <IMMEDIATE? .INWD>>> + <COND (<NOT <MEMQ .INDEX .LST>> + <SET LST + (<MAKE-LABEL> + <CHTYPE .INDEX FIX> + <> + !.LST)>)>)>> + .MVEC> + <SORT <> [!.LST] 3 1>> + +<DEFINE INIT-INST (CNT LABELS "AUX" RPTR) + #DECL ((CNT) FIX (LABELS) VECTOR (STACK-SIZE) FIX) + <TERPRI> + <COND (<SET RPTR <SPEC-MEMQ .CNT .LABELS>> + <PRINC <1 .RPTR>> + <COND (<3 .RPTR> <SET STACK-SIZE <3 .RPTR>>)>)> + <PRINC " <"> + .RPTR> + +<DEFINE PRINT-ACF (AC INST) + #DECL ((INST AC) <PRIMTYPE WORD>) + <COND (<OR <NOT <0? <CHTYPE .AC FIX>>> <NOT <NDV? .INST>>> + <PRINC <NTH ,ACS <+ <CHTYPE .AC FIX> 1>>> + <PRINC " ">)>> + +<DEFINE PRINT-INDEX-AC (AC) + #DECL ((AC) <PRIMTYPE WORD>) + <AND <NOT <0? <CHTYPE .AC FIX>>> + <PRINC "("> + <PRINC <NTH ,ADDR-ACS <+ <CHTYPE .AC FIX> 1>>> + <PRINC ") ">>> + +<DEFINE ADDR-AC (AC) + #DECL ((AC) <PRIMTYPE WORD>) + <PRINC <NTH ,ADDR-ACS <+ <CHTYPE .AC FIX> 1>>>> + +<DEFINE PRINT-NUMB (NUM) + #DECL ((NUM) <PRIMTYPE WORD>) + <OR <SUBR-PRINT .NUM> + <PROG () + <OCTAL-PRINT <CHTYPE .NUM FIX>> + <PRINC " ">>>> + +<DEFINE PRINT-MVAL (MVEC INDEX LABLS INST + "AUX" NAME (XX <CHTYPE <NTH .MVEC <+ .INDEX 1>> FIX>) LH) + #DECL ((MVEC) <PRIMTYPE UVECTOR> (INDEX INST) <PRIMTYPE WORD> + (LABLS) VECTOR) + <COND (<AND <IMMEDIATE? .INST> <SET NAME <SPEC-MEMQ1 .INDEX .LABLS>>> + <PRINC .NAME>) + (ELSE + <PRINC "["> + <COND (<==? .XX ,SPEC-ATOM> <PRINC "<(%<TYPE-CODE ATOM>) -1>">) + (<AND <L? .XX 262144> + <OR <0? <SET LH <CHTYPE <GETBITS .XX ,LHW> FIX>>> + <==? .LH 262143>>> + <OCTAL-PRINT .XX>) + (<PRINC "<"> <NUMBER-PRINT .XX> <PRINC ">">)> + <PRINC "]">)>> + +<DEFINE PRINT-R (RVEC INDEX FLAG "AUX" ITEM (OUTCHAN .OUTCHAN)) + #DECL ((RVEC) <PRIMTYPE VECTOR> (INDEX) <PRIMTYPE WORD> + (OUTCHAN) CHANNEL (FLAG) <OR FALSE ATOM>) + <COND (.FLAG + <PRINC "<MQUOTE "> + <PRIN1 <NTH .RVEC <+ </ .INDEX 2> 1>>> + <PRINC ">"> + <COND (<0? <CHTYPE <ANDB .INDEX 1> FIX>> <PRINC " -1">)>) + (<SET ITEM <NTH .RVEC <+ </ .INDEX 2> 1>>> + <COND (<TYPE? .ITEM RSUBR RSUBR-ENTRY> <PRINC <2 .ITEM>>) + (<PRINC .ITEM>)>)>> + +<DEFINE NUMBER-PRINT (NUMBER "AUX" X1 X2 (OUTCHAN .OUTCHAN)) + #DECL ((NUMBER X1 X2) <PRIMTYPE WORD> (OUTCHAN) CHANNEL) + <SET X1 <CHTYPE <GETBITS .NUMBER ,LHW> FIX>> + <SET X2 <CHTYPE <GETBITS .NUMBER <BITS 18 0>> FIX>> + <COND (<AND <==? .X1 262143> <G? .NUMBER -200000>> <PRIN1 .NUMBER>) + (ELSE + <COND (<NOT <0? .X1>> + <PRINC "("> + <OCTAL-PRINT .X1 <==? .X1 .X2>> + <PRINC ") ">)> + <OCTAL-PRINT .X2 <==? .X1 .X2>>)>> + +<DEFINE STANDARD-PRINT (AC ATSIGN NAME INST + "OPTIONAL" (INDX-AC 0) + "AUX" (OUTCHAN .OUTCHAN)) + #DECL ((OUTCHAN) CHANNEL (AC INST) <PRIMTYPE WORD> (NAME) ANY) + <PRINT-ACF .AC .INST> + <COND (.ATSIGN <PRINC "@ ">)> + <PRINT-INDEX-AC .INDX-AC> + <PRINC .NAME>> + +<DEFINE MAKE-LABEL ("AUX" XX) <CHTYPE <SET LABNUM <+ .LABNUM 1>> SPEC-LABEL>> + +<DEFINE PRINT-LABEL (N "AUX" (OUTCHAN .OUTCHAN)) + #DECL ((N) <PRIMTYPE WORD>) + <PRINC "TAG"> + <PRIN1 <CHTYPE .N FIX>>> + +<PRINTTYPE SPEC-LABEL ,PRINT-LABEL> + +<DEFINE GET-SUBR (ADDR "OPTIONAL" (MCL? <>) "AUX" NITEM) + #DECL ((ADDR) FIX) + <AND <NOT <0? .ADDR>> + <COND (<SET NITEM <MUDOBJ .ADDR>> + <COND (.MCL? <GET-MUDDLE-SUBR .ADDR>) + (<CHTYPE .NITEM MUDREF>)>) + (<SET NITEM <MUDOBJ <- .ADDR 1>>> + <CHTYPE (<CHTYPE .NITEM MUDREF> 1) SPEC-SUBR>)>>> + +<DEFINE ATSIGN? (WD) + #DECL ((WD) <PRIMTYPE WORD>) + <1? <CHTYPE <GETBITS .WD ,@BIT> FIX>>> + +<DEFINE SPEC-MEMQ (CNT LABELS) + #DECL ((CNT) FIX (LABELS) VECTOR) + <REPEAT (IT) + <COND (<EMPTY? .LABELS> <RETURN <>>)> + <SET IT <2 .LABELS>> + <COND (<==? .IT .CNT> <RETURN .LABELS>) + (<G? .IT .CNT> <RETURN <>>) + (<SET LABELS <REST .LABELS 3>>)>>> + +<DEFINE SPEC-MEMQ1 (CNT LABELS "AUX" LAB) + #DECL ((CNT) FIX (LABELS) VECTOR) + <COND (<SET LAB <SPEC-MEMQ .CNT .LABELS>> <1 .LAB>)>> + +<DEFINE OCTAL-PRINT (NUM + "OPTIONAL" (DEC <>) + "AUX" (BYTNO 15) (OUTCHAN .OUTCHAN)) + #DECL ((NUM BYTNO) <PRIMTYPE WORD> (OUTCHAN) CHANNEL (DEC) <OR ATOM FALSE>) + <COND (<SUBR-PRINT .NUM>) + (<L? .NUM 8> <PRIN1 .NUM>) + (<G? .NUM 261632> <PRIN1 <CHTYPE <PUTBITS .NUM <BITS 18 18> -1> FIX>>) + (<COND + (.DEC <PRIN1 .NUM>) + (ELSE + <PRINC !\*> + <REPEAT () + <COND (<0? <CHTYPE <GETBITS .NUM <BITS 3 .BYTNO>> FIX>> + <SET BYTNO <- .BYTNO 3>> + <COND (<L? .BYTNO 0> <PRINC !\0> <RETURN>)>) + (<RETURN>)>> + <REPEAT () + <COND (<L? .BYTNO 0> <RETURN>)> + <PRIN1 <CHTYPE <GETBITS .NUM <BITS 3 .BYTNO>> FIX>> + <SET BYTNO <- .BYTNO 3>>> + <PRINC !\*>)>)>> + +<DEFINE PRINT-ATSIGN (FLG) + #DECL ((FLAG) <OR FALSE ATOM>) + <COND (.FLG <PRINC "@ ">)>> + +<DEFINE IMMEDIATE? (WRD) + #DECL ((WRD) FIX) + <AND <NOT <0? .WRD>> + <1? <CHTYPE <GETBITS <NTH ,BITS-VEC .WRD> ,IMM> FIX>>>> + +<DEFINE NDV? (WRD) + #DECL ((WRD) FIX) + <AND <NOT <0? .WRD>> + <1? <CHTYPE <GETBITS <NTH ,BITS-VEC .WRD> ,NDO> FIX>>>> + +<DEFINE SUBR-PRINT (NUM "AUX" NAME) + #DECL ((NUM) <PRIMTYPE WORD>) + <COND (<AND <G? .NUM 128000> + <L? .NUM 261632> + <SET NAME <GET-SUBR .NUM>>> + <PRINC .NAME>)>> + +<NEWTYPE SPEC-SUBR LIST> + +<DEFINE SPEC-SUBR-PRINT (LST "AUX" (OUTCHAN .OUTCHAN)) + #DECL ((LST) SPEC-SUBR) + <PRINC <1 .LST>> + <PRINC <2 .LST>>> + +<PRINTTYPE SPEC-SUBR ,SPEC-SUBR-PRINT> + +<SETG TABS ;"The n'th element is a string of n-1 tab characters" + <PROG ((I -1)) + <IVECTOR 15 '<ISTRING <SET I <+ .I 1>> !\ >>>> + +<SETG SPACES ;"The n'th element is a string of n-1 space characters" + <PROG ((I -1)) + <IVECTOR 8 '<ISTRING <SET I <+ .I 1>> !\ >>>> + +<MANIFEST TABS SPACES> + +<DEFINE INDENT-TO (N "OPTIONAL" (OUTC .OUTCHAN) "EXTRA" (NOW <LINPOS .OUTC>)) + ;"Print tabs and spaces to get to column -n-" + #DECL ((N NOW) FIX (OUTC) <CHANNEL [12 ANY] [4 FIX]>) + <COND (<G? .N .NOW> + <PRINC <NTH ,TABS <MIN 15 <- </ .N 8> </ .NOW 8> -1>>> + .OUTC> + <PRINC <NTH ,SPACES <- .N <LINPOS .OUTC> -1>> .OUTC>)>> + + +\ + +"VARIOUS SPECIAL VARIABLES USED FOR STACK HACKERS." + +"STACK-SIZE == CURRENT STACK SIZE" + +"LAST-A == LAST X IN <MOVEI A* X>" + +"LAST-0 == LAST X IN <MOVEI O* X>" + +"LAST-P == LAST X IN <PUSH P* [X]>" + +"STARTING-INSTRUCTION == WHERE TO START HACKING" + +<DEFINE STACK-HANDLER EXIT (INSTRUCTION AC MVEC RVEC INDEX INDEX-AC CNT + "AUX" ITMS (OUTCHAN .OUTCHAN) MUDRF) + #DECL ((INSTRUCTION) STRING (MVEC PTR) <PRIMTYPE UVECTOR> + (INDEX STARTING-INSTRUCTION STACK-SIZE INDEX-AC AC CNT) FIX + (OUTCHAN) CHANNEL) + <COND (<L? .CNT .STARTING-INSTRUCTION> <RETURN T .EXIT>)> + <COND (<==? .INDEX-AC ,AC-TP> + <COMMENT-START> + <PRINC "("> + <PRIN1 <+ .STACK-SIZE <HRRE .INDEX> -1>> + <PRINC ")">) + (<OR <==? .INDEX-AC ,AC-TB> <==? .INDEX-AC ,AC-FRM>> + <COMMENT-START> + <PRINC "("> + <OCTAL-PRINT .INDEX T> + <PRINC ")">)> + <COND + (<=? .INSTRUCTION "MOVEI"> + <COND (<==? .AC ,AC-A> <SET LAST-A .INDEX>) + (<==? .AC ,AC-O> <SET LAST-O .INDEX>)>) + (<AND <=? .INSTRUCTION "SUB"> <=? .AC ,AC-TP> <==? .INDEX-AC ,AC-M>> + <SET STACK-SIZE + <- .STACK-SIZE + <CHTYPE <GETBITS <NTH .MVEC <+ .INDEX 1>> ,RHW> FIX>>>) + (<=? .INSTRUCTION "PUSH"> + <COND (<==? .AC ,AC-TP> + <SET STACK-SIZE <+ .STACK-SIZE 1>> + <COMMENT-START> + <PRINC "["> + <PRIN1 <- .STACK-SIZE 1>> + <PRINC "]">) + (<AND <==? .AC ,AC-P> <==? .INDEX-AC ,AC-M>> + <SET LAST-P <NTH .MVEC <+ .INDEX 1>>>)>) + (<=? .INSTRUCTION "MCALL"> <SET STACK-SIZE <- .STACK-SIZE <* .AC 2>>>) + (<=? .INSTRUCTION "PUSHJ"> + <COND (<==? .INDEX-AC 0> + <COND (<MEMQ <SET MUDRF <GET-SUBR .INDEX>> ,SPEC-HACKERS> + <SET STACK-SIZE <- .STACK-SIZE <* .LAST-A 2>>>) + (<OR <==? .MUDRF |MAKTUP > <==? .MUDRF |MAKTU2 >> + <SET STACK-SIZE <+ .STACK-SIZE 2>>) + (<==? .MUDRF |NTPALO > + <SET STACK-SIZE <+ .STACK-SIZE .LAST-O>>) + (<==? .MUDRF |CIPUT > <SET STACK-SIZE <- .STACK-SIZE 2>>) + (<==? .MUDRF |IUNWIN > + <SET STACK-SIZE <+ .STACK-SIZE 10>>) + (<AND <==? .MUDRF |RCALL > + <OR <==? <SET MUDRF <GET-SUBR .LAST-O>> |SEGLST > + <==? .MUDRF |SEGMNT >>> + <SET STACK-SIZE <- .STACK-SIZE <* .LAST-P 2>>> + <SET LAST-A 0>)>) + (<AND <==? .INDEX-AC ,AC-M> <SET ITMS <LOOK-ITEM .INDEX>>> + <SET STACK-SIZE <- .STACK-SIZE <* .ITMS 2>>>)>)>> + +<DEFINE COMMENT-START ("AUX" (OUTCHAN .OUTCHAN)) + #DECL ((OUTCHAN) CHANNEL) + <COND (<NOT .COM-FLG> <INDENT-TO 60> <PRINC ";"> <SET COM-FLG T>)> + <PRINC " ">> + +<DEFINE HACK-GLUE-BITS (RSUBR "AUX" (MVEC <1 .RSUBR>) GBITS LEN (MIN-INST 0)) + #DECL ((RSUBR) RSUBR (MVEC GBITS) <PRIMTYPE UVECTOR> + (LEN MIN-INST STARTING-INSTRUCTION) FIX) + <SET GBITS <GET .RSUBR GLUE>> + <SET LEN + </ <+ <- <SET LEN <LENGTH .MVEC>> + <CHTYPE <GETBITS <SET LEN <CHTYPE <NTH .MVEC .LEN> FIX>> + ,LHW> + FIX> + <CHTYPE <GETBITS .LEN ,RHW> FIX>> + 17> + 18>> + <SET GBITS <REST .GBITS .LEN>> + <SET INTERNAL-ENTRYS + <MAPF ,UVECTOR + <FUNCTION (ITEM + "AUX" (ARGS <CHTYPE <GETBITS .ITEM ,LHW> FIX>) + (LOC <CHTYPE <GETBITS .ITEM ,RHW> FIX>)) + #DECL ((ITEM) <PRIMTYPE WORD> (ARGS LOC) FIX) + <COND (<OR <L? .LOC .MIN-INST> <0? .MIN-INST>> + <SET MIN-INST .LOC>)> + <MAPRET <COND (<==? .ARGS 262143> 0) (.ARGS)> .LOC>> + .GBITS>> + <SET STARTING-INSTRUCTION .MIN-INST> + <SORT <> .INTERNAL-ENTRYS 2 1>> + +<DEFINE LOOK-ITEM (LOC) + #DECL ((LOC) FIX (INTERNAL-ENTRYS) <UVECTOR [REST FIX]>) + <REPEAT ((PTR .INTERNAL-ENTRYS)) + #DECL ((PTR) UVECTOR) + <COND (<EMPTY? .PTR> <RETURN <>>)> + <COND (<==? <2 .PTR> .LOC> <RETURN <1 .PTR>>) + (<G? <2 .PTR> .LOC> <RETURN <>>)> + <SET PTR <REST .PTR 2>>>> + +<DEFINE HRRE (NUM) + #DECL ((NUM) FIX) + <COND (<0? <CHTYPE <GETBITS .NUM <BITS 1 17>> FIX>> .NUM) + (<PUTBITS .NUM ,LHW -1>)>> + +<DEFINE STORE-INTERNAL-ENTRIES (IENTS LABLS) + #DECL ((IENTS) <UVECTOR [REST FIX]> (LABLS) VECTOR) + <REPEAT ((PTR .IENTS) CODPTR LPTR) + #DECL ((PTR) <UVECTOR [REST FIX]> (CODPTR) FIX (LPTR) VECTOR) + <COND (<EMPTY? .PTR> <RETURN>)> + <SET CODPTR <2 .PTR>> + <COND (<SET LPTR <MEMQ .CODPTR .LABLS>> + <PUT .LPTR 2 <* 2 <1 .PTR>>>)> + <SET PTR <REST .PTR 2>>>> + +<DEFINE JUMP-STACK (ISINST LABEL CNT) + #DECL ((ISINST) STRING (LABEL) <VECTOR [3 ANY]> + (STARTING-INSTRUCTION STACK-SIZE CNT) FIX) + <COND (<=? .ISINST "PUSHJ">) + (<G=? .CNT .STARTING-INSTRUCTION> + <COND (<AND <3 .LABEL> <N==? <3 .LABEL> .STACK-SIZE>>) + (<PUT .LABEL 3 .STACK-SIZE>)>)>> + +\ + +<DEFINE CONVERT-RSUBR EXIT (RVEC + "OPTIONAL" (OUTCHAN .OUTCHAN) (STACK T) + "AUX" (LABNUM 0) (CNT 0) + (MVEC <CHUTYPE <1 .RVEC> FIX>) LABLS LAB-FLG + (CAIE-FLG <>) INDEX1 (NOINST <>) (COM-FLG <>) + (STACK-SIZE 0) (LAST-A 0) (LAST-O 0) + (LAST-P 0) (STARTING-INSTRUCTION 0) + INTERNAL-ENTRYS) + #DECL ((LABNUM) <SPECIAL FIX> (OUTCHAN) <SPECIAL CHANNEL> (RVEC) RSUBR + (MVEC) <PRIMTYPE UVECTOR> + (STACK-SIZE LAST-A LAST-O LAST-P STARTING-INSTRUCTION) <SPECIAL FIX> + (INTERNAL-ENTRYS COM-FLG) <SPECIAL ANY> (STACK) <SPECIAL ANY>) + <SET LABLS <PASS-1 .MVEC>> + <COND (.STACK + <COND (<GET .RVEC GLUE> + <HACK-GLUE-BITS .RVEC> + <STORE-INTERNAL-ENTRIES .INTERNAL-ENTRYS .LABLS>) + (<RETURN #FALSE ("NO GLUE BITS") .EXIT>)>)> + <TERPRI> + <TERPRI> + <PRINC " <TITLE "> + <PRINC <2 .RVEC>> + <PRINC ">"> + <TERPRI> + <TERPRI> + <PRINC " <DECLARE "> + <PRIN1 <CHTYPE <3 .RVEC> LIST>> + <PRINC ">"> + <MAPF <> + <FUNCTION (WRD + "AUX" (INST <CHTYPE <GETBITS .WRD ,9BIT> FIX>) + (AC <CHTYPE <GETBITS .WRD ,ACF> FIX>) + (ATSIGN <ATSIGN? .WRD>) + (INDX-AC <CHTYPE <GETBITS .WRD ,IDF> FIX>) + (INDEX <CHTYPE <GETBITS .WRD ,RHW> FIX>) ISINST LABEL + NAME) + #DECL ((AC INST INDX-AC INDEX) <PRIMTYPE WORD> (ATSIGN) <OR FALSE ATOM>) + <SET COM-FLG <>> + <COND + (.NOINST <SET NOINST <>>) + (ELSE + <SET LAB-FLG <INIT-INST .CNT .LABLS>> + <COND + (<SET ISINST <INSTRUCTION? .INST>> + <COND + (<AND <UUO? .INST> <OR <0? .INDX-AC> <R? .INDX-AC>>> + <PRINT-INST .ISINST> + <COND (<=? .ISINST "MCALL"> <PRINT-NUMB .AC>) + (ELSE <PRINT-ACF .AC .INST>)> + <PRINT-ATSIGN .ATSIGN> + <COND (<R? .INDX-AC> <PRINT-R .RVEC .INDEX <>>) + (<SET NAME <GET-SUBR .INDEX T>> <PRIN1 .NAME>) + (<NUMBER-PRINT .WRD>)>) + (<AND <==? <CHTYPE .WRD FIX> ,SKIPGE-INTFLG> + <==? <CHTYPE <NTH .MVEC <+ .CNT 2>> FIX> ,JSR-LCKINT>> + <PRINC "INTGO"> + <SET NOINST T>) + (<JUMP? .INST> + <PRINT-INST .ISINST> + <COND (<M? .INDX-AC> + <SET LABEL <SPEC-MEMQ .INDEX .LABLS>> + <COND (.STACK <JUMP-STACK .ISINST .LABEL .CNT>)> + <STANDARD-PRINT .AC .ATSIGN <1 .LABEL> .INST>) + (<AND <0? .INDX-AC> <SET NAME <GET-SUBR .INDEX>>> + <STANDARD-PRINT .AC .ATSIGN .NAME .INST .INDX-AC>) + (ELSE + <PRINT-ACF .AC .INST> + <COND (.ATSIGN <PRINC "@ ">)> + <PRINT-INDEX-AC .INDX-AC> + <COND (<AND <0? .INDX-AC> <L? .INDEX 16>> <ADDR-AC .INDEX>) + (<NOT <0? .INDEX>> + <PRINT-NUMB <CHTYPE .INDEX FIX>>)>)>) + (<AND <OR <=? .ISINST "DPB"> <=? .ISINST "LDB">> + <M? .INDX-AC> + <SET INDEX1 <NTH .MVEC <+ .INDEX 1>>> + <==? <CHTYPE <ANDB .INDEX1 -16777216> FIX> ,TYPBYT>> + <SET INDEX .INDEX1> + <SET INDX-AC <CHTYPE <GETBITS .INDEX ,IDF> FIX>> + <SET INDEX <CHTYPE <GETBITS .INDEX ,RHW> FIX>> + <COND (<=? .ISINST "DPB"> <PRINT-INST "PUTYP">) + (<PRINT-INST "GETYP"> <SET CAIE-FLG .AC>)> + <PRINT-ACF .AC .INST> + <PRINT-ATSIGN <ATSIGN? .INDEX1>> + <PRINT-INDEX-AC .INDX-AC> + <COND (<AND <0? .INDX-AC> <L? .INDEX 16>> <ADDR-AC .INDEX>) + (<OCTAL-PRINT .INDEX T>)>) + (ELSE + <PRINT-INST .ISINST> + <COND + (<M? .INDX-AC> + <PRINT-ACF .AC .INST> + <PRINT-MVAL .MVEC .INDEX .LABLS .INST>) + (<R? .INDX-AC> <PRINT-ACF .AC .INST> <PRINT-R .RVEC .INDEX T>) + (ELSE + <PRINT-ACF .AC .INST> + <COND (.ATSIGN <PRINC "@ ">)> + <PRINT-INDEX-AC .INDX-AC> + <COND + (<AND <OR <=? .ISINST "MOVSI"> + <AND <OR <=? .ISINST "CAIN"> <=? .ISINST "CAIE">> + <==? .CAIE-FLG .AC>>> + <0? .INDX-AC> + <L? .INDEX <LENGTH <ALLTYPES>>>> + <PRINC "<TYPE-CODE "> + <COND (<==? .INDEX 18> <PRINC "DEFER">) + (<PRIN1 <NTH <ALLTYPES> <+ .INDEX 1>>>)> + <PRINC ">">) + (<AND <G? .INDEX ,$TLOSE> <L? .INDEX ,$TLOSEHI>> + <PRINC "<TYPE-WORD "> + <PRIN1 <NTH <ALLTYPES> <- .INDEX ,$TLOSE -1>>> + <PRINC ">">) + (ELSE + <COND (<AND <L? .INDEX 16> + <0? .INDX-AC> + <NOT <IMMEDIATE? .INST>>> + <ADDR-AC .INDEX>) + (<AND <0? .INDX-AC> + <NOT <IMMEDIATE? .INST>> + <GET-SUBR .INDEX>> + <PRINC <GET-SUBR .INDEX>>) + (<NOT <0? .INDEX>> + <COND (<0? .INDX-AC> <PRINT-NUMB <CHTYPE .INDEX FIX>>) + (ELSE <OCTAL-PRINT .INDEX T>)>) + (<IMMEDIATE? .INST> <PRINC !\0>)>)>)>)>) + (<M? .INDX-AC> <SET NAME <SPEC-MEMQ1 .INDEX .LABLS>> <PRINC .NAME>) + (<NUMBER-PRINT .WRD>)> + <COND (<AND <OR <=? .ISINST "CAIN"> <=? .ISINST "CAIE">> + <==? .CAIE-FLG .AC>> + <SET CAIE-FLG <>>)> + <FIN-INST .LAB-FLG .CNT> + <COND (<AND .ISINST .STACK> + <STACK-HANDLER .ISINST .AC .MVEC .RVEC .INDEX .INDX-AC .CNT>)>)> + <SET CNT <+ .CNT 1>>> + .MVEC> + <CRLF>> + +<DEFINE GROUP-CONVERT LOSPNT (NAM CH "OPTIONAL" (GLU T) + "AUX" NM RES (PGNUM 1) (PGLST ()) PGVEC) + #DECL ((NAM) ATOM (CH) CHANNEL (PGVEC) VECTOR (PGLST) LIST (PGNUM) FIX) + <COND (<AND <ASSIGNED? .NAM> <TYPE? <SET NM ..NAM> LIST>>) + (<RETURN #FALSE ("Bad group") .LOSPNT>)> + <MAPF <> + <FUNCTION (RSB) + <COND (<AND <TYPE? .RSB FORM> + <==? <LENGTH .RSB> 3> + <==? <1 .RSB> SETG> + <TYPE? <SET RSB <3 .RSB>> RSUBR>> + <INDENT-TO 70 .CH> + <PRINC "PAGE " .CH> + <PRIN1 .PGNUM .CH> + <SET PGLST (.PGNUM <2 .RSB> !.PGLST)> + <SET PGNUM <+ .PGNUM 1>> + <COND (<NOT <SET RES <CONVERT-RSUBR .RSB .CH .GLU>>> + <RETURN .RES .LOSPNT>)> + <PRINC " " .CH> + <CRLF .CH>)>> + .NM> + <SET PGVEC [!.PGLST]> + <SORT <> .PGVEC 2 1> + <PRINC "INDEX" .CH> + <CRLF .CH> + <CRLF .CH> + <REPEAT ((PTR .PGVEC)) + #DECL ((PGVEC) <VECTOR [REST FIX ATOM]>) + <COND (<EMPTY? .PTR> <RETURN>)> + <PRINC <2 .PTR> .CH> + <INDENT-TO 30 .CH> + <PRIN1 <1 .PTR> .CH> + <CRLF .CH> + <SET PTR <REST .PTR 2>>> + "DONE"> + +"UNASSEMBLE -- top level entry which takes care of channels and such" + +<DEFINE UNASSEMBLE (WHO "OPTIONAL" (WHERE <>) (GLUE? T) "AUX" C R (NM2 "UNASSM")) + #DECL ((WHO) <OR ATOM RSUBR> (WHERE) <OR FALSE CHANNEL STRING> + (GLUE?) <OR ATOM FALSE> (R) ANY (C) <OR CHANNEL FALSE> + (NM2) <SPECIAL STRING>) + <COND (<NOT .WHERE> + <COND (<TYPE? .WHO ATOM> <SET WHERE <SPNAME .WHO>>) + (ELSE <SET WHERE <SPNAME <2 .WHO>>>)>)> + <COND (<OR <AND <TYPE? .WHERE CHANNEL> <SET C .WHERE>> + <SET C <OPEN "PRINT" .WHERE>>> + <SET R + <COND (<TYPE? .WHO ATOM> <GROUP-CONVERT .WHO .C .GLUE?>) + (ELSE <CONVERT-RSUBR .WHO .C .GLUE?>)>> + <COND (<TYPE? .WHERE STRING> <CLOSE .C>)> + .R)>> + +"DUMP-U -- dumps an unassem save file" + +<DEFINE DUMP-U ("OPTIONAL" (FNAME + <STRING "MUDDLE;" + "UNASSM " + <UNPARSE ,MUDDLE> + "SAVE">)) + <SNAME ""> + <COND (<=? <SAVE .FNAME> "SAVED"> "READY") + (<PRINC "MUDDLE UNASSEMBLER."> <CRLF>)>> + +<ENDPACKAGE> diff --git a/src/mudbug/unlink.utaa08 b/src/mudbug/unlink.utaa08 new file mode 100644 index 00000000..399ff9cb --- /dev/null +++ b/src/mudbug/unlink.utaa08 @@ -0,0 +1,63 @@ +<PACKAGE "UNLINK"> + +<ENTRY UNLINK PURE? UNPURIFY> + +<FLOAD "MUDBUG;UNPURE NBIN"> + +<DEFINE UNLINK UNLINK (ATML + "OPTIONAL" (HAIR? <>) + "AUX" (CASOC <ASSOCIATIONS>) TVAL TOBL (Y <LOOKUP "TMP" <ROOT>>) + (T <AND .Y <GET .Y OBLIST>>) TLIST) + #DECL ((HAIR?) <OR ATOM FALSE> (ATML) <OR FALSE ATOM <LIST [REST ATOM]>> + (CASOC) <OR ASOC FALSE> (TVAL) ANY (TOBL) <OR ATOM OBLIST> + (Y) <OR ATOM FALSE> (T) <OR FALSE OBLIST> (TLIST) LIST (UNLINK) ACTIVATION) + <COND (<TYPE? .ATML ATOM> + <COND (<ASSIGNED? .ATML> + <SET TLIST ..ATML> + <SET ATML + <MAPF ,LIST + <FUNCTION (X) + <COND (<AND <TYPE? .X FORM> + <G=? <LENGTH .X> 3> + <OR <==? <1 .X> SETG> + <==? <1 .X> DEFINE>> + <TYPE? <2 .X> ATOM>> + <MAPRET <2 .X>>) + (<MAPRET>)>> + .TLIST>>) + (<RETURN #FALSE ("NOT A GROUP") .UNLINK>)>)> + <REPEAT () + <COND + (<AND <==? <INDICATOR .CASOC> OBLIST> + <TYPE? <SET TOBL <AVALUE .CASOC>> OBLIST>> + <MAPF <> + <FUNCTION (X) + #DECL ((X) <LIST [REST <OR ATOM LINK>]>) + <MAPF <> + <FUNCTION (X "AUX" PURE?) + #DECL ((PURE?) <OR ATOM FALSE> (X) <OR ATOM LINK>) + <COND + (<AND <TYPE? .X ATOM> + <GASSIGNED? .X> + <TYPE? <SET TVAL ,.X> RSUBR> + <OR <NOT <SET PURE? <PURE? .TVAL>>> .HAIR?>> + ;"Win if rsubr, either not pure or hairy mode" + <MAPR <> + <FUNCTION (X "AUX" (FOO <1 .X>) FOOAT) + #DECL ((FOOAT) ATOM) + <COND (<AND <TYPE? .FOO RSUBR RSUBR-ENTRY> + <SET FOOAT <2 .FOO>> + <OR <NOT .T> + <N==? <OBLIST? .FOOAT> .T>> + <OR <NOT .ATML> <MEMQ .FOOAT .ATML>>> + <COND (.PURE? + ;"Unpurify if in hairy mode and haven't yet." + <UNPURIFY .TVAL> + <SET PURE? <>>)> + <PUT .X 1 .FOOAT>)>> + .TVAL>)>> + .X>> + .TOBL>)> + <COND (<NOT <SET CASOC <NEXT .CASOC>>> <RETURN T>)>>> + +<ENDPACKAGE> \ No newline at end of file diff --git a/src/mudbug/unpure.utaa05 b/src/mudbug/unpure.utaa05 new file mode 100644 index 00000000..dd78478d --- /dev/null +++ b/src/mudbug/unpure.utaa05 @@ -0,0 +1,124 @@ +; "Used in UNLINK package: called by DFL." +<TITLE PURE?> + <DECLARE ("VALUE" <OR ATOM FALSE> ANY)> + <PUSH TP* <TYPE-WORD FIX>> + <PUSH TP* 1 (AB)> + <PUSHJ P* IPUREQ> + <JRST FINIS> + +<INTERNAL-ENTRY IPUREQ 1> + <SUBM M* (P)> + <HRRZ B* (TP)> + <SUB TP* [<2(2)>]> + <CAMGE B* PURBOT> + <JRST PURWIN> + <MOVE A* <MQUOTE T> -1> + <MOVE B* <MQUOTE T>> + <JRST MPOPJ> +PURWIN + <MOVSI A* <TYPE-CODE FALSE>> + <SETZ B*> + <JRST MPOPJ> + + +<SUB-ENTRY UNPURIFY ("VALUE" ATOM <OR <PRIMTYPE VECTOR> <PRIMTYPE UVECTOR>>)> + <DPUSH TP* (AB)> + <PUSHJ P* IUNPURE> + <JRST FINIS> +<INTERNAL-ENTRY IUNPURE 1> + <SUBM M* (P)> + <SKIPL (TP)> ; "IS FROB NON-EMPTY?" + <JRST UNPOUT> ; "NO" + <PUSH TP* -1(TP)> + <PUSH TP* -1(TP)> + <PUSHJ P* IPUREQ> ; "IS IT PURE?" + <JUMPGE B* UNPOUT> ; "NO" + <MOVE E* <MQUOTE <RGLOC MUDDLE>>> + <ADD E* GLOTOP 1> + <MOVEI F* 0> + <MOVE E* 1(E)> + <CAIL E* 100> + <MOVNI F* 1> + <JUMPL F* DOUNP> ; "DON'T NEED BUFFER ON 20X" + <MOVE A* <MQUOTE <RGLOC UNPURIFY-PAGE T>>> + <ADD A* GLOTOP 1> + <MOVE B* 1(A)> ; "GET PAGE #" + <GETYP O* (A)> ; "GET TYPE" + <CAIE O* <TYPE-CODE UNBOUND>> + <JRST DOUNP> ; "IT IS A PAGE, SO WIN" + <PUSH P* A> ; "SAVE RGLOC" + <PUSH P* F> + <MOVEI A* 1> + <PUSHJ P* PGFIND> + <JUMPL B* [<ERRUUO* <MQUOTE CANT-GET-PAGE>>]> + <POP P* F> + <POP P* A> + <MOVEM B* 1(A)> + <MOVE C* <TYPE-WORD FIX>> + <MOVEM C* (A)> ; "SAVE PAGE" +; "THE NUMBER OF THE BUFFER PAGE IS IN B; THE OBJECT TO BE UNPURIFIED +IS ON THE TOP OF THE STACK" +DOUNP <PUSH P* B> + <HRRZ O* (TP)> ; "POINTER" + <HLRE B* (TP)> ; "LENGTH" + <MOVE A* O> ; "POINTER" + <TRZ A* *1777*> ; "GET BEGINNING OF PAGE" + <SUB O* A> ; "# OF WORDS TO IT" + <SUB B* O> ; "UPDATE LENGTH" + <MOVEI E* (A)> ; "SAVE REAL POINTER" + <ASH A* -10> + <PUSH P* A> ; "PAGE # OF REAL PAGE" + <MOVE D* -1(P)> ; "BUFFER PAGE" + <ASH D* 10> ; "ADDRESS OF BUFFER PAGE" + <MOVMS B> + <IDIVI B* *2000*> + <JUMPE C* HERE 2> + <ADDI B* 1> + <HRLZ A* (P)> ; "PAGE # OF FIRST VICTIM" + <ADD A* [<(*200*)>]> +; "D HAS ADDRESS OF BUFFER; E HAS ADDRESS OF PURE PAGE. B IS # ITERS NEEDED +A HAS PURE PAGE+200,,0, FOR .PMAP INTO O. +(P) IS # OF REAL PAGE, -1(P) IS PAGE # OF BUFFER" +UNPLOP <JUMPL F* [<PUSH P* A> + <PUSH P* B> + <MOVE A* -2(P)> ; "PURE PAGE" + <ASH A* 1> + <HRLI A* *400000*> + <HRLZI B* *120400*> + <SPACS> ; "COPY-ON-WRITE" + <ADDI A* 1> + <SPACS> + <POP P* B> + <POP P* A> + <JRST UNLEND>]> + <*SUSET A> + <JUMPL O* UNLEND> ; "SEE IF ALREADY UNPURE" + <*CALL COPCOR> ; "MAP PAGE INTO BUFFER" + <ERRUUO* <MQUOTE COPY-FAILED>> + <*CALL GETCOR> ; "GET FRESH PAGE IN PURE SPACE" + <ERRUUO* <MQUOTE CANT-GET-NEW-CORE>> +DOBLT <HRRI C* (E)> + <HRLI C* (D)> ; "SET UP BLT POINTER" + <BLT C* *1777*(E)> ; "BLT PAGE BACK" +UNLEND <SOJLE B* UNPDON> ; "DONE?" + <ADDI E* *2000*> ; "UPDATE PURE PAGE POINTER" + <AOS (P)> ; "UPDATE PURE PAGE NUMBER" + <ADD A* [<(1)>]> + <JRST UNPLOP> ; "UPDATE ARG TO .PMAP" +UNPDON <SUB P* [<(2) 2>]> ; "FROB P STACK" +UNPOUT <POP TP* B> + <POP TP* A> ; "RETURN ARG" + <JRST MPOPJ> +COPCOR <SETZ> ; "CALL TO MAP PURE PAGE INTO BUFFER" + <SIXBIT "CORBLK"> + [<*30000*>] + [-1] ; "ME" + <(P) -1> ; "LOC OF BUFFER" + [-1] ; "ME" + <SETZ (P)> ; "LOC OF PURE PAGE" +GETCOR <SETZ> ; "CALL TO CONS FRESH R/W PAGE ON PURE" + <SIXBIT "CORBLK"> + [<*120000*>] + [-1] ; "ME" + <(P)> ; "LOCATION" + <SETZI -5> ; "FRESH PAGE"

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 literal 0 HcmV?d00001 diff --git a/bin/mbprog/data.fbin b/bin/mbprog/data.fbin new file mode 100644 index 00000000..46938c22 --- /dev/null +++ b/bin/mbprog/data.fbin @@ -0,0 +1,39 @@ +' + + + + + +' + + + DATA-ITEM #DECL ("VALUE" ATOM +>> ATOM "ARGS" LIST) MANIFEST TEMPLATE W-DATA + VUL-DECL TEMPLATE DECL ("ARGS" T) FORM !.T VECTOR UVECTOR LIST CHTYPE WORD +TUPLE BAD-TYPE-NAME!-ERRORS DATA-ITEM "OPTIONAL" "REST" DATA-TYPE T ANY +BAD-ARGUMENT!-ERRORS DATA!-PACKAGE [REST ] REST PRIMTYPE OR +NOT-IMPLEMENTED!-ERRORS TOO-MANY-BITS!-ERRORS QUOTE LVAL PUTBITS COND ASSIGNED? +SET BODY "EXTRA" ALREADY-DEFINED-ERRET-NON-FALSE-TO-REDEFINE!-ERRORS]>> + .GLUE > + + +>> ATOM "ARGS" LIST)] 263>> + + LIST)] 508>> + +> + +> + + FIX "TUPLE" )] 1431>> + + + + + + diff --git a/bin/mbprog/datime.nbin b/bin/mbprog/datime.nbin new file mode 100644 index 0000000000000000000000000000000000000000..eecd53f230ff0715b962874ba419802e0e6aeb65 GIT binary patch literal 1887 zcmbtVZ%kWN6hDtrS_Xu++mwi!yTS&Aj?wnf7E^1V?V~p7XtnLaK(fNr;namMCSW$x z1a)Jzfq{#XMTf)>;EV&q7r*#L7Z?9bOfV)IzwkkcF}j-9@>&+~+}n2T=9VnkO?rFI zJ@=h^-|u&R=OyRfIy;&TlP}+uO>48FJbB!AL7u-z>XUBK5zqW&I4t0rC}bmz-^Zn0 zA7k{>g)65e?b_->#xnTJ#mtYvuIbIHL196@JXy1Qh1I}m#;MCC}&;}~#nPdodN*XnAz2zE!f7f|vD!Mefi@C-__*m*ZCctY9Jm8}D zy|Fa)$X*$rQcw@lU!#@!3Mc8!{F?GQl!L0~*^`H(Yzu$}xXqU}p0Vt?V8gh)_&a%8 zip+j@NuHl{%w+gKNg`v_AWZ58-_piaZQ#S~)Uj)0nKO5Yesf}$p{Aml>)kqkedAW$ z2%uXBApiB=jh}}xpavKQ`l0~tzGF?6t)v}xGS?$KcOZCD7X>YIon*%jhtTaI4j~lE znEnvQpCDd;1i5OP@JB@A2u8xh=n=vqT^5P7{>o=Z`A(D7-fl7T#BA^2ZT3!+nWWWq zi$eO~jOnFx^NBA`NeZz*HYf%72``XDfVc$WKGpGHuZQG+PNEM4!@fYbY|)ZYzb_OnMCiZM&`)T_`{r3kv%tOaoVz$B zTB=<6^?6eX(N;Te>EJu8Qnki3AXQ&5A5DJ}{O#1n)rzzA$$;U?g1l}BPiL0;LveX1 zPqvndnkuKFmMPX%jyItqRJIbddZScaS_(QKr?)B0<-#cL0xo$u0UgxBf#ehbek>%q z5oD$&{UHI1c7C#Jx(9J1bf=O|Ie`oh4Chki1hR#JN*aZmVqlwZ132Fys=u@mDwqUnZbL=gg{_U04Pyi0?AT>q zz_+GWB?E+BlS>|Nd2NDPIC2Ph#V{?h-avPu(3%kgyyTpaebwN5-)kUx(G%9=9183E zsq{)JsR#%|VEc{5JRpqDnwt%wh=J%NZQddVrNW-)b`DGD1uV7pJweGrOg z&#e?b0kjR!m#8XYp!NW^;>s8(NDD?>WjGn0M8%Tk+J8nGn~}-lS{qx#ede|n0cCP1 zmW@wQb1NywMBQBbW*&OvP1kexJL~`^X%~ROU6=%qt27BaWZP^mOSpr7zrAi|s5!K5 z<_OmXux{SR==%hbjIL5k!`6I7Lpc~+du?D?J9Pp~R0FE%J`>d})MupH272wa$Has7 z%n#Zl#xQ_PL3McAcc~xwfQHl>*2d=HV3++Z0I6gcYfu_`p64a>$b&-Z_2qsS zP0ODR**9$5h&Hz57*XebCmnJ;b!$eQ9uJ(;!rPWvb*Wz%RlbXg*C@(1dZ)PM>9*qX zBZ(uhV-;>d2|yT3I#_dSp#9Kb%m!O@Q@t{`dt$K11_glMXge6|0Mx%e`RC5R7;em` z#JX>G3?_PkzCZxw+l?oStpPT|kpL?Qt)U3d;fudD!v~2w)E4JSAQ~5mi{r#bqTBMy z;Y&xoJ|DyE@%sFvmZ@ia_uO6Hg#2VTdBtDrudh?A-M&{b;`cIp>wS#kEGoOEd_Qh2 zkj{T9jA|20`Q>5d*(za16+c=yt4)5HYR?|Ei|@#V6%o2$j}1piYq5clkez;RZb+*Co1Lr30L&%=s|M{@c?)ry?ka}oT+!uL)R0JLtdPJRs@=Z8K9yLtg#YJ`Q q&-N*~@F#LXoBVunEIT{-Gpl&ckz%PO|EuCYQ<>jxj;XWbg#8bwdz^Xz literal 0 HcmV?d00001 diff --git a/bin/mbprog/demon.nbin b/bin/mbprog/demon.nbin new file mode 100644 index 0000000000000000000000000000000000000000..c609825ac33f3e0511cc43ad80fbe080097a944b GIT binary patch literal 2267 zcmai0eN0nV6hDP(>j%iFbwve3o&J5 zL=3uUjPl_OG@DZ+B${O(PD$LDV#S61W44GGa0DLVJ$bKa**&lG)&8+?6Hd>$=XXBd zJ@=f;bk}+F8Ic|BD4sppJ?NhOt(=OTwlFy@V%y)hY0gn;zbH;W8v0!9Y4F+fF@GZSC$hTaFa8tGll%{MaI8E8r zpvFC|DP9$|NQUSZhC~HJmZ6uG!Cqp5A(IG+4Ti)8L&6b~5Dd{T3`q=zM4*?o!CsOV zh8P!yr2Q}C`51tW?*K&@9->DgfjvCuXv}Ior`QDPysPo6KlqlTpfF_vC?LNYLOIRl zc@LFeK91N`h~0o(404&QHneXL5&Z-)GFOp4-~T)VK$`|msN`G7zC>6}^29Ew}OTn&p*8;|1Kk`_~c zBoSGgfZAMHJA&E~SxcdomOblHv`AXSjZ1`lWA17UWI!z=i-{;&WzSOxo|0W9p|(I4 z*P^&n_RJ%gmtCzx?JikNM$smFosW?5_2_GTkki_w$y)cBAKaTW1vz3MRdH*6a0hfkcxX=oS4>LvBSKx-U z6muVI%#GgGCuI7lA2TkoDbjFB$V}~LxX5QEZKCI4N4L;cam&p`KHha)=+lsCmf87` z_SUSs?eaDy-E)bWDyn$4ZJa``s99`Eq|bP3%8j(hAGVwjGF!K`i(`@YvqCL(&%tRr z9?*Pv@&nrIseIV(-Tn$Jv>s+?UY9iF=2KD&&I&!LHkyBxL5tV%w4>X5JWCjW(CiJO1lA;h!p|SvYaPKyy3ZFmwyox(dz-vsxp=sk_K{?P)c* z#moc5qAZyZ0wId;3=ZON+eLAvn7FU2+|ex5k&tsuoppoU>U!#~@B6FV(95}2;&iu` zkTS!cm_dHK=qcV$Uug=tmtOdltj$erx)5-Wfs^# zxd*^pK zu>SoNU;LNwDX2D)T$bycd+Lv6vpK{{Xw1y)e!N!mk7-;4Xu$A;X23z$C$ zAKaK2u1~3ka=-gNmu|GyVTUS7%%=~g+vlTL7?i}V)Y7Fn4yM#f*-Hw<`_Cv9OZF3} zknI4RB8d!A^4Nt09y@&9r1wS@7_-=3O6q93Iw@HsioF?_YLTUsO3Y_0h1^o@JB@{9jDezy-o-y7MN=u# zuYoe`r^v!Dib31JRR}@RU*}r89TrQXR8v-w1K~iL-d|JDI6)0iO^)@((a9O#i!r literal 0 HcmV?d00001 diff --git a/bin/mbprog/dir.nbin b/bin/mbprog/dir.nbin new file mode 100644 index 0000000000000000000000000000000000000000..40fca4f152b9bdc463a8323d356a99481f147348 GIT binary patch literal 10476 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 IFk#yN1=VScTL1t6 literal 0 HcmV?d00001 diff --git a/bin/mbprog/dirhak.nbin b/bin/mbprog/dirhak.nbin new file mode 100644 index 0000000000000000000000000000000000000000..b0e80898231d7a7ccee478e7a1c19ffda3a8ceb6 GIT binary patch literal 3249 zcma)ry&;k_= znQcP}*@&f0g2qTm9c64s43MPL8AqlzbtWd`R~x4`GyNyVc1&2(_ujr;>Tb_@i@Vz? zI(dKW+;cz9IrrXke&_D|_`5YO`K5pSc}UQWSDy6oyT%U+YP&wcd!%LC$%U-7l_$k> z86Ufam0ztJ^dBD9C(Mt(yZw}WI=*hgUvYw^%$M1VPsuasV}m~Pn-@pqtHYUEz^~S5 zsQ?h&zX6U~9JSQcQc)|$nC1k{(E<=F!~!gn?f`7bMlD-K_f*hl zw6x3}q}Bqp4uP!$)S|neGy`dlo^lVT4E)~=SN}4j#R*$P_x)DHgaDJkF^vN_ftv(1 z(>c(`0oT;($H55((LIUYS{!6?613FPu(fE`n5KP-iC<2`G0|a$x0nhQnAbWXo#x?A zQ45rIfX289?J}mdFGr;}YROs*SyM;)#JBnteZ`s4yLzZKRG>0vI3Xw6KUe>wih>8( z)skJ!!|g7)w^$yapj?Odgj+q3qjJKt(rMQ~evXD(6Y7C{ro$}P2pDLkOU0Uy zz@dKiI&c`>5c*0$<3WJ~;OWNz8humiPTS(B4!DKAyluq)%+5-;d@26okle**+5J~` zZyypWHvDx+-k*8RDqq{ndcD6~UwO>`rqgcq&y4?Z!Y7UrU*_KlenJ^hUkeDpl3bbV*kG`;lpNBWoeP#NM-F_{ZVt1P}I1|IzRsEYrX!? zJx?#*UEJ)Lm3%H+lBUQ|b%dc2q7mid38}pb?-pB%h(Ao#ICqe8_$eianTEoi`pg+x zZDMT(o}W02fgvTS@8>23b|ZqB6X!9nzy0Sl9FXGsLt(#y*7g-5i&mIQX)PimQ`}*O zHIxtWECb!A^jH~6k1)0gG{8z5=ME{3bIb{w1UMTEGR<=UNY{d%BHB8wO^XZ&acCD4 zbmoh1@0j7B$<{b`Kti)h3Z{|q%}j$zb5}WGGl?(!?^FIh8eSRC5ZxNJi-c5i?F2*MPz_j=Ry6=){d4Er4t|ou)5>I)eY=v z`AE}ctEf9;9rd59Wxb1>8g4i#PydTxm2>`~C_`esw0GMHe|JrYQ-x$B#b*6cZcXr~ zlhCV}wAawqUgTLPdU%cB~`$@D460<5PRz|@Q& zORbE4S7e2VAAcK*hpz1dgw3(SF6olt!&d3*EBQ^*-M{CxORpbgtlgKauQgTX=T>_~4If2JmWf+{mO7LwEQCGwqnAOOEbf!YH0=E&gBz`YKCwiE0 zROvZs!VK$aG@ju-;Y$_shSEs=B#;L*5S3q;Mnxg0-LLtW9?FN6KDy@XK&4M!U#49g z4W*2A)Hl>zIVw+INgtFaZ?jrq`xus>)5FDQ{8yW9obXpf6}L9~$G$&a^?UC- zf8X(5w^#1hoA?#~I$ugum9tEITV7}}QKtB4tvm8&AMT7`u2k48OmnIAg2&d7_Kaao zNcU;xVVnP=P?lsyUazt>Uz^0XSH8csNLapj8q3EX$*AJvL(Lg&Mm58>0Vu{2C;_kd z7$Yck38?^wOrL0yl{5R8R24JYg3{XdT zeJHQiQg+;7(`U{*u_Npr&j?vH_rvZW7MA1W)`zz@W`vdB@gqFHR9<`KSbxqoyE9bTTz^ejLmj8E91W zCofea5SvU5CfrlJOkwIn-B-pZ8(}I@P~~T2<&>>#+i#U)+)hE*A5uOXj4$O!7vj?9hn~|Y_|PbLBJ2?(sMFJa-y>5AVk+m=a~(v5fFWC4 z8imA@LgG#oc*; zjHG*WEM=w=CG|)-4lu_>H4;<%4$(j!m8%gQhDVrB%>mwh~0t=N?}C6>1cxk4hJd2Tm_g9n79Dp z*z>`MetEQkH|^jm+QHpv2M6$NpW3SKq^CF-?EXvDY=y1q0b9i%_4~GzU#X5r5gHfG zDJ7|cG7b~TsPTmUJ=3$dqGQF{~o_hQW#b9(wfjSwXTPuA} z_aI5DS`{OOh>A#g$>)Cc=!bX0<|_iamb0?Yyt*!?5MGy;iD|<;5Hv1dC15a8EtO=gu&pR ziaOT*{rJ1!UI@P6J_U*WXM}`H!Be0wl@8r+80N|r;>$E0v5mT$vc-BY?9ylavGNhy zZ67Q!7YW+M%-o(gjJ%iBxh%MDC8yh6ZQxWvCv&;SAu%hh-g_AX*Doj*4{k=Y+{{0H zX&~Nn$1Jz@3$D%ObmcL*+!w)h%Q>GnYgjJ*(x2j3tM`E8Ioy??lPtIG;}bc^ z_SG`ton4d9JsJ>Oz&$RH&*7GZROeV#L3IZ1a`32p&O4jQ=Av$(1&?l4=UP<*qL*2H zvQ8}LHiyJ6K{gci`QF$ZZgb%Ad~W941cNmyD~{!!gv2f3i~~^e(h#$OyR`dcF7bZj zV7>KfxsSHJa(`y2u%i*{qp5MIC&ebr`83lFGJ>1@0+ZiU*t1|__hc&3^nBrq2@mL{ z=7lXIeSq`6b$N{74UKP|G2p{h)xvnj2OkC8U*llBE`g!XgK|(XQ|CP`W>V)p-AEsE z7I~uYq&`&WT&GalHL<@Rb6A<=c~9TzY19D(OeKCyIQl@_b3B1#4m;yMZ{QQpTp3kKtI6XQWGI#UaiN2rXzP|+GoYb~${Ox_bzMhCV+ z+St%q+7v+#eE^%CTi>@AOkiXJx}+^m20CmDU;QidDw$)(j5}IB;ee1D#_kc8>ocpc z-%Kke0S{(jOKLXn5mtS8?n_~p`D|5B(@E;gf8}BoAK{k9*4?Xycb%p& zn!KWHHP$X2J(cYzFMBE*pHnyz(;`>rIpP|-E}E|1Qi%I_E9pTalgPziXaI1Nm;Y_? zXqE*L2U^x&+I*|`jksmpHa(VT`tF20 zZrN^Z2$y!(E+?bsb^j3Y?V)G)keBG~p!t-+TV!_koz-niKWlL$V+~N9zWm~?~oYEeeyhTGN6#5pe=l8mnn)bMwM{;CXX{VBi1xxpuLB-741N z+gzsYQMrlq)h9iaibp?gkdjioWHWHeWwME1^__?IiU}^n+mU!$t2lPt?fc@Hrs_jbA`RL#)abma%9}M2N$7R&%Hc|d-{iBcHAA=x4V}175Vq=?Tft53dPaCUUoqv9?=l$YcPSu>R%p;6JyLrq>2@W zTawAiyV1oK8_`$|8Im!!qeVKc&bci9v?jl+7F>i*R?Tc1zl` zW@(dXTbtWJG|@l1VBpw11WgMVTkySjN?`W!(T%;d`Kd8l``6~&w2x^_ZxN{!`;Y(F z`W*ITk+rD;%_gyUbjLg)B>KrM@pSpLR=a&&FDd@$rEUE2f>!&f_4zIK3lS??#3kjK z4boe+cN(Nz7gw1*h~$g|{IkXxXGNFzZe;f1K{~pckaLds*$N&?N>{cDJe}EMZ^(Ii zOWI&t)g;v;vG|Vo_$<*DwYK&GCj-Hu7Kqi4?~<2d{&v-JK{xH7CCpVGjrsIjb~|Ud zDBARiXQiSQ%n`=~!EjSD2CxsMefLnngQ>1S2$;JjDU0OaMsrX$GVP-L|gl;N!n-Y1(+6L7xoDqO;U0H^AE+-Lhn*P2##W%ywGDy-u~5G@6CYtgx|&G}w<0zi$yI)U519G6)4|YdW5h0PgmW z_RXO=_r-`IIjF5y`jE|X4Ssler?5F-W~s1M|9X=nt7zffUVu%Z`TVF!oY1(aMM@p} z^rl#EHL&&#b=F&C;M#=^Qfl;*7HMxx2W!8vrnQ$DlU$tsf@t60n$q3>La%HQ)Hw|% KzI`4O;`46?28%}k literal 0 HcmV?d00001 diff --git a/bin/mbprog/dragit.nbin b/bin/mbprog/dragit.nbin new file mode 100644 index 0000000000000000000000000000000000000000..029c55a93c97c7fe157e1dbfa5887a6954df8689 GIT binary patch literal 29181 zcmc(I33wD$y7uYrEFF`E4iLz~QiK2rWF?&i*EA#$WJ%aGBya&EBnTmi0R>rxd6>C@ zi5bJ7SJq2F8Hk90i7cb{-eE?sI06HL|0w81+yF&rq`G)fOCXl-#OCcVAd-855(yD_rh{ypy6;`oiO%pGS6MB}c>E$+gm`1S5T%zX!sFBR={ z?N{MF|M}VH#Ke z`-YBPVsBi%Dk?d%pl~?VtT2?!alY)u3`X(VXzT3EJ%A4ja1M#bYw4kBfdz^#uxN$ zIDH#Jm4oRnSSzK5x>7^^Sbhx)`TnwneJYt5i?q+OumV9}!_1;Cm-VMduXY19M4%!G z)BtLdH)P;If4YA<>J=YMsMa;=ZlK3-8deC^3#K~*-G$K|9~R~XpnRbilOL>P)q)WE zumzJd?YjL%d74JVYF(oq1PSqs=}~1wtf=PMr+PN(c?j z6j%-GF63eEM3&12i)JHzK@HJD2}bmfy0MTN3e8HaWRHpl02P^GRg`E>N0o8Z@xNNw zg{)-2OU_Ow%-ev1LVU{`A}G47M3gE`qH9W%1d5tWHCD13UPT6vrI0ble$>J)^3SMA zo%~sMd?5tQV#d@U;532PE0~OlxR(L)L42qh zvI{|#tTrJC@X{XPvw>-nUa_!u1O|AiG;7J(7>vEKNyY<{Hg&ukgnw^%HThK=yP#F^ zUAH8^b)x}>dJjLHb>+hs7{GJ7{hcjT_w{q`iYI`vkf;oxqt~& zP>e;PdNvkBY=beAsUmcNfE)UupnZWkf2T9!(n+gW8~@jh;ysa%taiQd*bb{>{S{%g zd;QnVjn2%ZcUFMGooaDqUb1c!3zN?7bY;HOVs)-7FWT;GZ5p}F)%w`U7JF;L$p*2< zj-zYs2d)(DarZbiYQ5`p&*QihPik;x$af?5xH98YIM=kg*MDQ(=$>C`-3d-wywhEm zfNo5b*<|51r)5XHRh$BNVqxT@26y)>Q@~h>QQy3Tf~kYgu68|tS{Us-HFt6YIzDo> z>q9d&X`Zsp-86Ty)%Aypf&zPD{y7%uam1+Q zPv2kjR62Wz8Ee?XHvJT~*`{B`&d8OM7lv6`PBFWWMbt1hV$A(Tk9QbPv1%47uo4!L z%jWWW1(~I>OFAl?3ebY_Iem(j4$5PoO#Gaa%8pK4GOUKhvYmO*4g)?0q>%w$3tiY!K4co=SAxxYvCOtc*Bkj*D zih~;2ZCqT!otQjSrk~?j$nWBA6bUESid}^>yIdKU3f4L<4>-QZxvwepIp9b0Qg_r7 z!Zhde&F^k=9ixKX=JWHUs!tBgky18TtkTuZndMSdnNTiWEzO?qFqP!iiV+(QRyZO` zGRmdG=>4-DrjPfROXJMB)zbLrH|9{~YKLi)Wwsbz(po3&J@&^#%*$xe~HUIV25{LcMJ6lf8y>O>6@Da|D^$uO1?-<@`((>Ru)pKeB#oE3n|8oOn=Stlo5&y z|3SV(3~>?h?oOAzaqmPZc3Jiw0&fTa(CAo(K~05x-f zwEXdI1%P|vthdXY;;s+3yDJqbP%d>T$*OWhOh06mQZ~2Eldf(M<~U3-!|J5t=Sdz+ zPcN4mKRH+@nxc=?O3y|&&y!3gZ57gqQpk;zjak*wgi^5cs_3j*>AUGiDx_nv>2=bv zXkm_Yd_!BUm@`x1)$ZCSMq8bA-zchwyR!RgF0#iH=N-T=BDA3}QmaOn=^wqmVj@ru z>c58Bipe8a=3jWTT5w2imyup;5Jq5i#mGda>m^jO1kP89yYv_JhE_uOs=aU4;P$WPI-K9_uLL63n%kPMiBZUNvji6+4;l>ffo1CFWn#OmnDOU>6 zdywJl( zx7?Au`3)d{aYn5)zBFf!BY8`@RWkZ&D?V(l$X1C#(|AV{o(lY;qPH~=dTaIW5~=&E zNZt2VI(!d=0>NBa$N(vr2?gRL%xW0j^&>Q6gl0NIvyt@fAyM~3T98`W*l?K^*t3k& zf}Ut0n0gP}k_aLIEfBm6P7BnHSYKM`BR2$E0HOmF(Sp?iqU*-VfK1n5-d$e=?(-uE z%%ZXM%1=gMFRRA*c|pBvO^^7!&decj?{ppffmJp;dVDhp7RLpl-esSv+gY(Sgf~{g8 zv{1O&C>W=o|EJZxIBCpQ=VjSsZkD;3C?n0;=B=(*n-b-B_Qa%P1h7h{(;pSXRispkDVrB8opy)~`w%BQ!_JzZfHi@ZLYx}AUK zZUgJ{DahZ-3!Lk}g~!1Ai=r2Kf$RHI+83kOI`@AqOhf^!zo<&|r7(U1roD+*PEywB zx>vg+8l2x(O#YP^c2sr(3=W9EKvsi>tiEV=o6yYb(r(??;ZjTn7zNx?BfVW_xtyQ2 zThlsjx96pGbfgJbQ*JhiY+px*Y&*RNRV_8B1U{*CZLFVcI~{3beF%3WIoc}PwLm(Y znHg@3-59i$uf7LuJ;Mrww%m#0;bwk#y34)4Gx$2sjm`Z zuF>S`kh9y}lP?Q!Wj%I$Jy>&ogR{;&c&Y0T^Uhk^7c||!(PjBYI3!gL7;~U~-)joN zdQiD|kNf$gqU~b0L1*Cnntj|VULQ1OmwQc0D`_$_Rwx}$dZ)#CIdRf1*d&51wrN<8 zc;S$*qkwqWPQQx~LM9$mzi@$^J>X4$J|ya(t_q2Gg7;ew$t~)jXNx+>0Kqu( z`f?2at%q>=xSa;$67pwWUqO2NWYr%sn`YO<-LRz*0%MB9BHhPf@jfRyDAtw*x;1Y^V+)%(6`r)68IzB@!Z z&nEXl#NfV=WBezJWRLs!hhA*i)Nrg%IMbp?-cuejFYG&xm_S(tJO>}W>G+50@$2eC z*J9)!i&ndz+oo6}_Qd`L&$%*N{>$oI)O=>0y-oOFmveVy0XRX^z@_eqUl-M*Ardp> zaF|*duR51ydDh}M*6ppG&YOe(YIUv$V-=(N2?Zp|3dFE~ne?1%{l(^Ou0`KWvbvvZ zir?m{e686^1C?D5s#36%4_;-vL-`~3CUjI>Wn<-1@+OceG>|`X7l6%l8IE9R0p%=Y z30&6nQ`z%K{;0BNnYBBMTEFkpp?`}Q|8y2-W6Rk<8+(~t6mPQ}8@tLLvgxO@&D;s0 zYO90|EP`ZFcLqx#mKpL`Ult}nHcT3)2fR<9UXg{Ya{r&{dg#%D(1OSJ46j4kuqsDt z415U2XrWpG2U#4t#T3X(*il0Hrpb6{Z#o7buw_x{hM0&JZ zjfH6xM4AEDVB0y1(DX-Lie zX#sk5Nc%#?dzVHoWY@_d4zDk0M%02sH89CcNEAauReLfJ%U|>Lekw%gI-2mL%1LF!lUa{ zMG=?21ws(?l~e?L#!4|fCV@UvYe?Eap9u;Q3A~}mW(5_5l6~MJ04st}=GDapp#D4GiwicJ^93Mh`M1xdk5iy1_g86rzJ3+5AIN%;0Ky!3`* zB%TDB*-)GAWmav|9cOEKLn=%AnR3fJ=2Y|i70lxc?{#^PXwKRbQcJTYSPuyX15=1+YL5lUOy zBZt`Kh~*eBCa6g(Ut^Y&A5lO7$9pnP8t9JGjQoz5YQ(91p}iwQyqT2;Z)LUsEbtD-D5OEb6fu_RBDsg+i1HAc&a^q3m^74%qmn5LF1fBKa$&3SDcS`Vz(XujK%KPapq^Jo85_-HEPU^IEIdV8n|#~W`=j;(FbRo$9wuIPB~3|8O^P8 zyKxWFOAbs_)OL^ZKV`k^z+9N^zbh`?hSZe!*;4XGklTq*hQmK)jXN*2HM|yQyX04PGD7(rV2(s<3Lon{hY-w*(Mzz$~8vsrOa-&c_V^qQk50h8? zyf^NGvk==@#4jp8S;Tn^f9I!>a23Q?_;rvR#YN#oi!^Sdav-mF#DT682kJp&vWzgV zyXGWNT`T*z;z3wLVu(P8#42NorJbo z4^)D|5rF=jOCIddlQVbCVe5#4_-6p0-e8537uw0k`4#Jl}W{a5fl~k(C4@#HwCB5IH*j*>4v4n<< zC@3mh@`-6dS|ceCkAeVhNX&UOf9E(1?kbND@&NoB^=OqM?B|F~=?l^&zg3+?N4(sfvUmawmbauOH<;k3oqb_MU}s{eAzzDz^D1n165|yrS&Q z%pgLMWr309sbydEDfmCkS1cLx;8zp+oUun(zJpGNaSRi2jC8tThw z$!ff0I|R_D3Vl;OjEyD{c{PyFH>lmEB%hzsL=-1t*;sIS~0 zd7zlRKPor4jT}H)G{yfG$<L)0zIw7$n0f!Xw(o5Sr%R8d7r?;R)Ftp4^Wo1gAqygSDQ_LBTKHpU`6m26}aYQhN0z$`p^ROCn-d!EgP%IhVdV6P(;mFd#iHKs3N z$u`~d>_rw<$Y!wcO7@t|kj^ghHdOuh=Lsz@gCSB8T2N`v53iF7<8msHEi$}HjF{Fo zM|yVi>vJH;_9Hbgx~*Ee+LSd+k_4lLI_bNnVRIZ2W&5iUIzMQYp51bAHpE=U z9OMTcsCJ~r4KIhg2YT|FXcB#~hh{rcVw<@noDYuyDbRkA0TOAN1w)Y^8fE-lh%`b> zt{C@IX{Mhhmb5$KTrLtuJe>m(ZIH97Mp0L6EEH?zX_{q@BgM~L8#HB`D^YP*!2?i8&UX)zK}t0+?KR3*>Zf>zDqME_tS{I&s6-^s2Xebh!GLrI zt^l7y#L$YoS$riti$AW#^?kA5x{q4lZX7ZOIeqZa!@Eu#d7(^ya)N~F^d9(wMa2tM z)mD-rJSjb)HkL@qZ^(zHsCO5pXG%_x%DV6dzq{49T`vrN&$GrK?XQ-q&Qbb~ITH-a zJgf>{7UiKnKM$UR1*yh;~dCyVHyxDwbW?ejZ*>3x2AH7vwR^%fj)>q@sLtng9RN zIn5e;+RQaX4_G{g3O@3=nM3pdpmpyUNNTCkz53XJm*DFyI{o!AJ**@>U4)jj|5lVz^fOH&LvFwtm(yPsDn=thpVB!Uu5 zXb|Ox2KDt%lbnKv1_of75!w?-$A7X|&0pPa`9JS%wYOHBY;hSQ-=@@t!~*xJxo`~> zBB6m>?3C#+8R5Yu@O7GF4{2VZM0MgSVyP z2@n!L&U`8LOwLN;c*653Z9rFSIeL~2=JkFdVmO-?oGEi<{@aOdt`8FgzV&2e`+}0; zNGqP!IuF_%F5@=A6`I(y6|ucdIo0roVynpbjT!SCe)*KXgI1$=J-tw*Gk>VI?3{6= zk6l%-H8arKV=*po>&3ZKBT@(QFrMTwXu?j67m3%YxcFFNNeo;zCffhv#b9_UUL zvV%30pv3`5{u4;HnPJ^L{>lh>T|As&)Oz=nZ&J27->)b*;9e5|DIg0ddnL*0oC=4I z>ZbQnt|$df7Q8AK0K(G>q#e1S~y}R-kFJ25^0Cn*^79LM}7P$52CEWj47LPL)g?h1gvmITg zfk;z(BiaA85`=Hp#J)~hTYkaz!kuE*UT{?+?H^2k(}T)Rto5@_u6LeB!j`LtchYGi zS(aK*-g|w0W4&I)Oa|4U1U6*qpafuP&wTRLoF-pQe{zh6Q0X9)(ibG+Q7?c`r=PKs zU5ml@deYY7xMzrKYXhbZ$-~sEDqBonWwKS`q&R!CpVy($wf?iSoFw0*b@S59$jXte zE0xX4ORHKr|4hxy`62j$sMzQSW=mJkx0O30HqmB|X&I2j9|zu$;krrNKs}k0YrUw< zcNG+hYGW%X?Y3ywC6mZWUeXErQ|7d9l`6)?kuaqMydI1J7EDIea>RqE$vN$-=4xJ#LU!iqb z?Oq;rz$=ZJ9udo4MPu=n1HV?kuu@i4m^^0Cq`@+RJey?bJ@7a@%>0q|hG7bzweZhK zkoW^24_OCy98gcYP*3}yr!6TQvZ~$4x)1frlm@>9623fLqj%w4Y>|hepR^I~IXj86 zi3zj_N6|GcZk?Rn3sSH_FJhm!jg08S9CKmnH zRrttzjV|$zM_a`1pCjVBd+^(P+=U5rNyPr>7v`QEX@9+(9||GJjLOZE%GPL~4JleL zc6-d)Dt7e?PE>xn{T(TL&4T3cObLu`!7-YO69lM zyEf{p+lfu_yKX%YIfHWzFBPA}_X?T=Y%YuLk+(Q_ma>U}TqWH7m?oEwzb_(WF^-@} zk{><(#*sE%G@Op~b55FIc^O$&#Y9_?PntX}1aol2vAngZ=dPq4a%M^?Q}g|E%%&1Nk|_A%>Gl zoTx(6<_JBxDh|5fTu0?F^TWy(P$_=Unc@2^TIx(byEfSlx^YyW882AI6&*;UQxfU;AQtPO{VJVdE9V{JMMD`LULEY+r4qOb~8-T#@ydjqLM zzDma&>9uK4I+8!JR7`0aL`{;DM z3zQDS`LYtPp7`U0%2f?$hl-Dg3u^71bQuCAb&#i&1g1gLS^`lpNkTaTOcnA8Tx-!p znwIv@F`T~e_!tyhV+<#EqLYCE$laH^uCEA09>gksCX~+TBM>Mejj==|gM8_O<3T4x zlJ4iuD*7>ZRw6mJG_mOsmLlYzMjBmwNdt>W6yPBZq<782u|@nHNvWli`CczP-@SL^ zeilRCje$1y7Rz9UXi5@eIEo`E_m@kq8@^sJ#lM__P19wE;T7%u1~yG^LfS^vrbDoq zqTwSmZ9wWu)dt#l6%gCcu6ONLq6vLE#r7XZTL_*&Y&z!0QJ22z4EuO`BQ^jc*c1SV zeMMG17c+rm4I!UDBtpI{e)%cnqu9ivXI9MONT4!j*kgfW6Wop33Envhm54944SI89 z*)mg6E*wr_#iLH{F~l`E0xbX<>hs7WyB}CYKb1{G>BmpivHqE+oy(qZ!rR??vUkpW zL{u}X;5^Hyb0n95k2Y?|#jz{?j`-;@@(F4DIF%mX;2Z|atIeuY#gI?idHJzsK^jtN zc!vYd4B37MoQX@w{;5Zp0}8xn`l&l!#qT2XO!-?V2nrO~ zI?A2=PO+l!PP^kA+OJ;Vcb+DFzr`s79A2d%hth8N-kvl+jgFFXqNy|kL#3^(2qUXa z2D;OR-~rFgzcxd)+W1f0X^WyXgia!T=mJ@4=wn*Pe;^0r0+NRexs(HgLp*T$3CXfd zzNblqAfRl*&!~QuTA!cdW&exCP)kWf|A7h@kj?WMT%w=h>;*%ue4-cs7O#-%Y#1)T zG7vbWR-N(+TB)Z;BjpxMa*ys!&x6T8Eo<+EkVM$wK}bck|E0~-{KGRZh>`m`z7UFM zUVl;rfnHriuRce@%NNosZEUMH0|I0d_KpFH979KrBHeTd50}8gtzZ4zNO=#_2my`p zQ`Wws#xPwSd=Fi!iO_lo5=5!zG-o?0e~QngpvRd_G=o_HB%h`;O@LE0j`Y|ZA%gA< zNHZqMk9WAEIs6vAz5W!9;yPvhED^h>b$myuI!_aHWNmpt?@iE$bLcq?KdSLxJ~gmg zJ{N|#r~SvY_O-Tt2p2g+x$FU7xTk&K_M;lK%T6BGd|$ZV(HH{sSD>$~zHqU-57xSo1GrvW^pZ65K52ob1 zB|u8u6Da(GhEor_#|XdWhG9^hWZ z=inlG?pTpE7%n|&sd1JjjgdUcg%}<`2~$w%sTA%rgEV{nJ$ z6U)1wjS77ncKE)Iuc#As)Crt}mdmE{PS9ek^ezP`5yCE%m#RE7O@kajCjpmfGc2V! ziJ&%CkovnS2f<^T}&&VM;d{w^aPm46$I*9fQj?}!ZR2C z?|E0WrRTnK&b`$kXG?1>x=($3`xRlrSAIx9n`I)=&j0X5*J3ZUX5Dz-3CKep4EdiQ zMUY>~10(50U;Pk4W?t-UX}kCm+fc&uM?J)Lv9skt9MGeL^T7ogApyRP5hB7xT9*QW&_!hrKnJ${E@2z+Lb+(}1^oIGs(U+?f?MVga z)hYD-Tiz-kY(GeJZLBn%V9h?C6SI?X)CVb2X~kxEknQ?H0J^^9{}mF=!MDmqS(w$F zJa}J8IzJUK-b~7j)^?y#dq(Vqy&l``NDr3`Cl-LsfhxMpNI=f z>q#1-dIXdjJ!JA>P*7!9f(7-I0)gUJ@bV{E$NrVoHnc~Xi*V3=@fh;Fj^b$v z^{$(*;IQSzJ>TBuzS$&4Mz=fbzMi_-bxd`?_Mp77p^yLfHuvONNXQ@urc3OPJMu8O z%~!@Xx+}HHga7h^S7pll^pAq}i2tA-M|%o52ecv|P@WjM&Y9Vis2s2MyJFAz8rWgH zT0S=;b5Oh$iA|H}+|H?6-IY!8&mkTs3Njt2rGt=<6cqxWJxy-Tf{aY(~ zif3*gDIQpVyS+)Mztg99k^G1|oI2H`{o=(tmF9uF?l_m!(H{x`_^~ghQtSq$Muc>4 z?D*sLPw#9p3mb2{aD;?t9AdMIkvWb}MPq#R_1nkHg4MbF-e#*9wM4$#dFM?uE_Q$N z;-?<)g4MmkX1io}1DkK`;E>J2={wU2UhMEX0JS`MNxWy+?3?yPz`Na>02sTe7rYaV z!xw)l_QhGul93+!pf%B$Vf&U&LZ*=O!+)iabK|YUh&;ItFU2^DmpqAa{PE&V%+SL; zApOFfH!&jT19dxaR`>TdlhEIFou0FlVkv%Q`DBT{?Ym*+dV=0JvP%K!+c(<9;&uX2JbmP zWfCRE&SVjV@IGBDVYM=-$rr}{{mugs>;<{9CtzMhN3t$v=3HGcGtbiXV?E5ecw6xO zx``|*S~r~aO4QA>g+8wjWBt?hU2MiCeTvO^Tz{V}ELlI54J_8@u)(?d5w?5o*KfCl zN9(_1!zPoj53w2V*Y~m+7wHGG_!@mI8!$^hh$Ylu zYx2Mn{ctuoPyc`|Ow|7t*#`QFwtJfNyI69ez5;2)`gtrRPhVvVU#`E%Qq%Q|SZa-a z8B5F4U$;d>7)&g~Z0N#Bu;#x{c(QEi14b}T`tdL% z9c&I>jGr3b(NnI0mb_|!XGO=k@?EDH5HDHnex%s5h5y-)(y^&FCZ_@?eIm`^yHcF= zc{vtm*d}i|f^5}OIJ0B{?L`{D8P4_8nAhh^snhn)aTsHB5U!k#$K+Euz$T?Pk`+># zaA%5n1ACirCtdycfYttLDUR72zX_F3m{XARy76$G)L8Pm)xI}o7&0JBvv8_N#_$KQk#ZZK9>XV(Ff7wxlD`$2l6_Si!Inc)s%~d;`kOTYz|(qId={=KVSz$YDsn- z4q)Nm4yy$`+>QSzt4^wn#g?s;C6?LfGmWSu1LwLoWgr_P2HiE85pSs4g7YL#AigW5 zlpI3R#im><+DNDL-q&lz@M+oAj)>TU^Ks^ZfCRzm2QcUu94x#b=0L6V>K2SBkv51e zh`|x6Mv8}x`zU*!w08rNJ#h9<9a0M4z>cu#Xm?==0>r;JXUuVQi5-ruVlk9|7;_lQ zQ;N-Hl|7M1JRxpawUkN+%_o-*$8ikj4$yA04D^0eYq=w}7PS`Ah~JJp+Cf zXr~YN-PxP*$5^=G)+a&VwJ;_@uVVufU^PDh=a$Z{Yv`Ck*~NStPNa9_3+^IPA@tXR zQsQ9g@}I0x6gRkwKR?;xuTk)9;4_1dw%Buu1MUprijB52M5eO;l^~U8hCBqOoO3~c zNFY$CGpT3~{`A9Ou10mfamsHxJDo`iU>gI@ew@buHV=Tp7DQ*o=Be141IOmNvM} z{RW+Ye=IVk%)aN5z1l@STZek!6@sR$zf9gM9)gCB#N>TG9P4UOg2dt)IvR&3^`tZ9 zJPU(ak&=|iFAGh-{dIl;YBkY^&&yqlPmXJz{gPnedt;B_^tEVk(FL&wsvOwP!5K34 zeQrd)p3yHqeBH|``tThEY;sa>7D)6t=+x%&bP0*@2mH3FHLt{5)1iXFyTjW z_CM3&w7eoLwHL-TFSTFh=eorTwT{1gXOF|`*nujQJxA_xH_e-3bu>U6BRdd{S8wzE z;~)w=`U1Nq=m>NEr$dzE=r2v7o!}{JUG_^}d)3PBf|yjC91`eG#9>6?_CMpiO9k7J z1W4~pe($tzHA2+xD2wo!G+dS{P-y@B2)yI8rM~0dcJ9qW7Cb6DlU9RZ;gER7IRsv% z90Vx%Sv@J~uv7VIFEJDcS&Aqun_7Z9Ifen(7aKcl5FX))MrJ&(f_G_n$2TUA=Fm&% zTpt8Juq6sGGEtwO)X`rFuHunLVhP4z`Own8tU~H2MQ7=Ieqh8v4vEeIp9*kje-uE` zyJx6fHzcGK%sPywNZ9gjXzhyD9d8dJ-#llwSPbinQRmq)hn zodY!E`1^9IO4OP7(eN7HDf;6qbegeJcbNtGvauI2e)9{$$WV*mZU z%7%F`ApuFFJ({;W+qS>6)x9QguF^!sP1K{gK-{flE%_zNDKf%iB=_V!P?MOV_@jzo z*!u;1^Ez9cidFI8WpVwpH-&K*lSg>u;DCtf`(fpjw8CcjxOE=>iWF?G CHANNEL) T] '(48 FINIS!-MUDDLE 232552 ( +10 7) $TLOSE!-MUDDLE 229377 (8))>> diff --git a/bin/mbprog/dummy.nbin b/bin/mbprog/dummy.nbin new file mode 100644 index 0000000000000000000000000000000000000000..44b4e0b3af5833d3d107c8705dda050f7f7b8006 GIT binary patch literal 376 zcmeykXkI|`kD>?1yT5QO3Z4CPTcDle$3<;jmA?YhLze#5Py&hNDb#*pcI6fQK4F=E z`_Bv!o25TLzp@MdeuAw_`lG+*(Um`5K-D>Zd2m6&kpT$UbmTG^7_}ML*);T{Di|2d z6&M)Qzb;^4*#3plf`R=DLvw>VP&WM?NHHUCCTFz_hy?^342-{X1YB1C+?;dA@e9Wz z*Y=+sB1&t27;7DM{UVU%Kl`hORxH>Kjt@ZP<}QvY`T;eC0Sqi)?LXek_;dXqkjW0_ zx+v=V_)6TkULSfqdRkW}3L g{rm)8(T|Jfxz7Co4zPSUcZ$N{=|2n~?Q`S;0C*XdWdHyG literal 0 HcmV?d00001 diff --git a/bin/mbprog/erorc2.nbin b/bin/mbprog/erorc2.nbin new file mode 100644 index 0000000000000000000000000000000000000000..10cf35e5eff3166caf022d7a08c87d9d921ed0d4 GIT binary patch literal 1810 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' + +)> + +RSUBRS + + + + )> + + + + FIXUP #DECL ("VALUE" < CODE> ) SQUOZE SQUOTA FIX % +UNKNOWN-TYPE!-ERRORS FIXUP UNKNOWN-SYMBOL!-ERRORS KEEP-FIXUPS RSUBR]>> + .GLUE > + + .GLUE > + + SQUOZE #DECL ("VALUE" WORD +STRING "OPTIONAL" )]>> + .GLUE > + + .GLUE > + + diff --git a/bin/mbprog/fmacro.fbin b/bin/mbprog/fmacro.fbin new file mode 100644 index 00000000..e4d1cf50 --- /dev/null +++ b/bin/mbprog/fmacro.fbin @@ -0,0 +1,25 @@ +' + + + + + + + + + +> )> + + + + FAST-MACROS #DECL ("VALUE" +STRING "OPTIONAL" ANY) HASH T MACRO % % %< +RGLOC FAST-MACRO T> "DONE" % EXPAND]>> + .GLUE > + + +> + + diff --git a/bin/mbprog/fmacro.nbin b/bin/mbprog/fmacro.nbin new file mode 100644 index 0000000000000000000000000000000000000000..d3377e5bca6aacaf9f91777818bb25e0e2f89da4 GIT binary patch literal 2037 zcmb7FZ%k8H6hE&;+6sjh1VL1u=)xZh1*w!}&iM*YB!ZMl+|Wd2iY;yoLD_Ih!qR1^ z*nr|3gsBBbz$^xoVPl}y8A!05cS1khj^&3r;#XmZH(`ft*m!8WhK`qwd@;dmbN~;!Oir1 zdg8D&Jmup3x~fs$HyU~(VWuRRACS)4dCouau-M@bg55>!Qhg$uFq6lxYxY0xVM~4O zeUqH8&2H_SU2AZ+km$bgE-^dyM|$OrMiR-oyZvYPmv@W($tAu1%lp#1#LR~!od0sg z_yynS@~th>DfdQ)R3ALyDwR&`N`1<7if{HGTQt9WiSwVXnw;A`Gd0;t^sb3Z-l5&M zdi}(mtOER&5@-U=+BJ4i8ge!Pc%5GYlM!WyI1{chvmyZF1xFx|kz|KZL!ugBHK;;U zJYa%II%o|!2SDj{UImqLdjo)(1xWU~0IocmHbIt<3844xHo-EA3!yj-fvXVaz1gHZ zV#q;%Ugsykc=XD9(W}7@u`lAZFT=5+cqLKff{IPU7`)Ann*)To3X$Fsbjn)d0Ej*u z7*=rr)P%_ey)o7f@kreE7k~~J;xq;V^2`GvG!6jm%$~ZDl{ldvLT2C7&1Z6gBehAl zI>|!)Hi!SScX~LfKDF?iIIS<~mQLI5IQ+-jxO1~<*0SJ35zWpwTm9|7x}2ivkKhZo zNSo5ub7Ua3pwsVhbKO$3!F9_}D|M1X2_UrCd3Dv(0Rto7InVgVOK3E})EzPR*sbhyLe1+D{nVz7ndv$IFJ<5EC7KZzN4dO4)FxQ$y^n7sr2rKYE_$8AP{Xo- zvR$s)+_0w34!Kl5p;W~TRk4zqDzDSg6efcWIaaE_ehl9tE4B$3>WV=Jn?CS5pPD45 z9|gi7ZtX@pM6e313c{=chWd*nfc^-B_fq|7yx)QH2w~`&0!4$aY!R!G6;SclJ`=x@ zFvoxqO8ZgwSPMp$g6W!)wODbc?+?;VBMQ8iDDXC_=P+5>h8z_Q3z>R!j_-@-PNX0M zN>UgchS%pwQul8>M-shgvkasBrL%_)CQ<&%3gGH5}F1IDjJV3J@U(AW*SDCO@p08_M zd!epTW$IwpO!`{PPP@$$ovnPXhSjd|R>|H*JNP2kDbe&ByV-Z<;@AbzKL0atmo;Lo zmkmk!ZFgVR`2TxiYMhf=+xS6AXUo4v>)I$6_p|D&kt4`s>I*hB@K!L(rlr8TGy0=O z9c0U+{ql1Q8V(+g*bUmCgFid|zWW5HS`Qq8 z6{sIbgb+-&_<8Ed!hrE6$Uhh0YjpWQAxin!|8FYda9csAG-zFMMM(eIR4Z&LAH-I& zWKFfO + + + + + +> > + (COUNT) FIX>> + + FOLD #DECL ("VALUE" > ATOM "TUPLE" ) MANIFEST? +FCN-NAMES () % CHANNEL "CONSTANTS FOLDED" # +FALSE ("NOT-A-GROUP") QUOTE GVAL % % % POOR-EVALUATION-RESULT!-ERRORS EVALS-TO:!-ERRORS FOLD % T]>> + .GLUE > + + + + + + + diff --git a/bin/mbprog/format.nbin b/bin/mbprog/format.nbin new file mode 100644 index 0000000000000000000000000000000000000000..829631b184f545acd96ff1584f8b7fbe122db963 GIT binary patch literal 25229 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 literal 0 HcmV?d00001 diff --git a/bin/mbprog/ftpusr.fbin b/bin/mbprog/ftpusr.fbin new file mode 100644 index 00000000..61c7c27c --- /dev/null +++ b/bin/mbprog/ftpusr.fbin @@ -0,0 +1,40 @@ +' + + + + + + + + + CONNECT #DECL ("VALUE" > FIX ANY ) ICP WAITRESP "USER " INCHAN #FALSE () " +Password please:" "PASS " T "" "ACCT " "TYPE " "BYTE " "MODE "]>> + + SOAK #DECL ("VALUE" ANY) SOAK +"DONE"]>> + + UNSOAK #DECL ("VALUE" ANY) +SOAK "DONE"]>> + + GET1 #DECL ("VALUE" STRING +CHANNEL)]>> + + GETLINE #DECL ("VALUE" +STRING CHANNEL) GET1 CONLINE]>> + + CONLINE #DECL ("VALUE" ATOM +CHANNEL CHARACTER CHARACTER CHARACTER) GET1 T]>> + + WAITRESP #DECL ("VALUE" ANY +CHANNEL LIST) GETLINE SOAK]>> + + WATCH #DECL ("VALUE" ANY < +UVECTOR FIX FIX FIX> CHANNEL) "CHAR" SL #DISMISS T]>> + + ACC #DECL ("VALUE" ANY STRING STRING FIX) "NET" "PRINT" "SOCK " "CHAR" WATCH SL ( +ACTIVATION) #FALSE ("Datachannel timed-out")]>> + + diff --git a/bin/mbprog/gc.nbin b/bin/mbprog/gc.nbin new file mode 100644 index 0000000000000000000000000000000000000000..fb974a60220e631a86647cab4c36a447f5b3a7a0 GIT binary patch literal 7317 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 literal 0 HcmV?d00001 diff --git a/bin/mbprog/geom.nbin b/bin/mbprog/geom.nbin new file mode 100644 index 0000000000000000000000000000000000000000..81a13665bdf8dd45712628d753e2937aaafc56cf GIT binary patch literal 6745 zcmcgwe^6A{6+XKQ3uvrMF#aOQ6(|c81~Y(SMew;SKgN|^U}Lq!L2O2r))3I9sDML; zKhRJ{EoPdXjsc@4(u_q$I+KnwnPw7O%@9irnf8x%YE08=ZDG;3@OCNEd+yzRZ+Bf_ z(IoGWJLm4b@4UPBe&;*ixnpm=X=#)8-}+;R7ptU${l?|fSfc8j!#t#po=K<*RG=0-! z&Q4GB0Idfk0q7^&+x8z=Mr^QSTt~ZWzy{IDNnrp>3jns?|Fji;^C1H5$wnuF5>SE26F%ZHZIw03cyi zqetSxs@h}K^pCSGaCWxh7PQsV4IhAh#Tvf@U{0sgBJuqrZO z&TGe0X~Jno))i))pcuFkUrCY z&^z%bK3dW*M!#)tb07cKx~F=Iq@leP9pZxM(r$%YT$yKk&baQ^SdGs079u$4e_M^s zbB3o)u}Lr2)I${hUy#a2mOH1e55h@^NP#5K6vH#1qWdrX=Z*jUxsJ|w-l0AUc85xY zN{8x2_<=*U8K}Q&kjNc0zJK{uhbk9#v2MZY43in60W$b##dK@-)b)Qrr$fC28bC{V z&QMvS&wRKC;39uRcrnBBaI^sWSa;%@_O;kCbL!Pz=}wA8;Zn21rsMx(1M*x*Y)M%# z+?NIWrd^0()=Z)`>5tcyGWR_d46pv&7m6zkcm3?HeE5PA43Z4dBK)yoj7!wWxT~}W z^v~QNUtsWLtdGEDyr*~iT?U&_fa3xqWb7& zO-ZjuV3nm_!KEz<6<|^3PH*I3Mq)tH$BZxc5*j8vhlS5(Fmh8{!XW`%NnlkWL^uJn=vCUQ!*kW zlJD%lT38oC7n`c>QztnySB=FUW`8Xm&fUTY+)e$8_Q8KK@Z-W zVmOJ&DQ1K%Rr017J@0xG8s`*t=9pcmB%_b-nWqTnrOafbed10`8~b=k$j40+&|}DO zLa2bILi^}t<$UqnxST?ZOELNI4k(DgQ7+ff;$k`2Joz_z@Q=PB>QGr1RE;*v^8&sR z%39=i4~eQ)P!US@R2^V8MKMPI;Lq$-cr7s_1sOTaRBK`3i0Y>nt{LzoSgvYwTlShd zT*rrkC@nHf3o|CSsyHKcO-3e~x~1&+Z>^hp1>qRyk4cYi`eo|ROCBZ+dNP^hO>7JC zzbT1r8SBa-Yl8zmg71RLM$@Agwwpjr<&0EbsySO%TMV?wqL0*f?Ao@6?e zrvdyIu&PyGk1Jf&*4bStAOF9 zX+<87nEvH5Z-NxkaA*1vCpX7yFC1nH>?JEbZT%vJ6lS0bQm$ z5&0wjp%}rULDroKphXX?9mWBtfH@UuLkdB#|^!<7h)89K}55R9xC7blT!y2QXS` zLV|gf5k?j*6}F<)BvS{H1;4yP>R{h#LN;hY>S&pXIvyZ(9G0o$Z~%4Sdf2y{u{hbr z$?XKaX+*18{R+G?JgwnF;$TqKG*ch@82Ru7AxO0M=Lx5~9NmKnLRSWYZ3 z8cZZ5VY|S}=3H|*DKwb{D=8FA6~+mFv71NOc*zbvhmDd#Z2u42rFkZV=R9)DgFN|Lhx$Eu$Dw`$ zUU#T-pc5i;;QJ2Mdr%eZz6WRtPg#~eGIw%zlx0jV8L5zx9cz)L+HSB)$~_otbGA87`|GpSns>9cU>m8gNVMBeZAoqO4$k zGF(}o7}?57jQx${{aIj8hyr=Ts9YGJG%xZc3w`p(IJ%Q z6CMuA?Eno2!D`;dqaly5TF|vlS7>)Rew-)xMT2M5FB(W8n@r=$6FM_>Q;C%%vXCRr z1$8~FM2q!Dw?_bYwK%r54Ire3Q#_&;ZeYoBM=OC8<=GEdG9WVg#?6)o3OnZ{1 guKyMCSyxs8MXbwFn{eZpMKEj?ij1_c*)Ev=4~pL4>i_@% literal 0 HcmV?d00001 diff --git a/bin/mbprog/hash.fbin b/bin/mbprog/hash.fbin new file mode 100644 index 00000000..9aa11660 --- /dev/null +++ b/bin/mbprog/hash.fbin @@ -0,0 +1,17 @@ +' + + + + + + + + HASH #DECL ("VALUE" HASH ANY) ANY +WRONG-TYPE!-ERRORS HASH % T MACRO % % % "DONE" % EXPAND]>> + .GLUE > + + + diff --git a/bin/mbprog/hash.fmacro b/bin/mbprog/hash.fmacro new file mode 100644 index 00000000..42e6344c --- /dev/null +++ b/bin/mbprog/hash.fmacro @@ -0,0 +1,22 @@ +' + + + + + + + + + +> )> + + + +> + +> + + diff --git a/bin/mbprog/hash.nbin b/bin/mbprog/hash.nbin new file mode 100644 index 0000000000000000000000000000000000000000..c8e1ce8014f8a670ce8e424206868b1698611bf7 GIT binary patch literal 1913 zcmZuyZ%k8H6hDO)x(!FMf^Il{6CEg3P@us?2@hIYCzV=UBG&O&v?a2&Y*Tc=Ts~cu!i4mh)bknKR`9(j>iHQkid++tVGJU(}7O5KUhm-d^_uO;O z`Q6{UccgE>)gw0Dz0kp_53)xj^#LYzq}aHmL%K1yf|WGRi>+L&aZ+-qtMBH~(cD?R zelhnireEUv3fPgpPj_w!yBkb2j^*xNVb~x5T-NE$0KD%YD0DL%5R(biJ1R1Lm!K(x^Tc zOLSw8Nt7S#f~Q7T;DB14{t0oo;t}b>%X>Y8UOhwj%`BX0aG}|NIrH$V0Zk+SmFL{g z93j-nX|l*FbCp*l%{im3M=6hTM~S9egTVz#{F14epb1Vx7)O5#e=h*%3k$IvQbbx- ziUaB*o8bh1KL8i7beU1Ej)YW3cf<*v^mAPmtqctDt1>aYgy~x&XGw}rUswpBMYcXd z<9TWYk%fw~N`tdW93|QKoN}Tec+xqT#s6%UxMxG=AY4gAW79_C=t(niM2=X!gt}^F zN~*jV7XMrr3IcP?7%waZcRi)klLC0(j;93GiXxj>Gh_ptoJegnxlZo_HSZfBa*v9K z_+CJtHkjnOvXm4u+=fT9j)MV6CckJ+3Xul@Q=w@q;C$GPFG~)|IEWWw05qTof|C4o zU=M; zY%tP0qa$pdYuYCT|2XFlf95cDV2WJ@z>Bha??_8qyj8ImY8yq;BB z7L4hHL{M1?C7XZx?qg6oARbiYf)*ck|98_x0+o26aY1611{G>B1r_f@J*e{miYJ$* z&UV$f@bt+DU5wkAI#R~`+Ri01*N#XF?;G1gLuurY`#Trxk@nX1ZV4whFctW0u;Rb- z&a<5U*2(vT-D|&fhZb1#oWk+XbKJti&b&rp*S^zr!q;}DF_d5rxP{Bs+`7>GS57*) zgo=POlrSye<`TM3IfVsl$g-EM3*RNaAL<0lEj=rg+5=8uV|QMCC}Y|{z3}kWY^QLk zg4rN!yuG+au-H%6a|xP7jY8>~{NmC6u@}uJb=@6gx$=g=cFF(t@2JETpGZ0Wv3E?o zmVUOKQy;$3E_TiO@sPwb*E=}v7t4CMvd&4#BYpczh)!!6qjaj)uunYk0A>52w@0*X sm^Jo7`VW_R#2rbNW1{~J<7VW5$UD8LOS(Azre4ipy^^c$d@J+f{~s8-E&u=k literal 0 HcmV?d00001 diff --git a/bin/mbprog/helpld.fbin b/bin/mbprog/helpld.fbin new file mode 100644 index 00000000..db894368 --- /dev/null +++ b/bin/mbprog/helpld.fbin @@ -0,0 +1,50 @@ +' + +)> + + + + + + + + LOC #DECL ("VALUE" FIX ANY) %< +TYPE-C INTERNAL-RSUBR WORD> "COMPILE" T "TUPLE" "OPTIONAL" +BAD-CALL-TO-INTERNAL-RSUBR!-RSUBRS % FIX +BAD-CALL-TO-INTERNAL-RSUBR!-ERRORS % OUTCHAN +"%" CANT-PRINT-INTERNAL-RSUBR!-ERRORS]>> + .GLUE > + + +> + +> + + + +"ROUTINES TO HELP SNAP AND UNSNAP INTERNAL-RSUBRS + BUILD-INTERNAL-RSUBR BUILDS ONE + GET-LOCATION GETS THE RSUBR OR RSUBR-ENTRY FROM ONE." + +> + +> + +> + +> + +> + +)] 338>> + +> + + diff --git a/bin/mbprog/hosts.nbin b/bin/mbprog/hosts.nbin new file mode 100644 index 0000000000000000000000000000000000000000..f50ad1742232bdd13818ef192ad5cabab36ae28a GIT binary patch literal 4876 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 + + + + + NETINT #DECL ("VALUE" UVECTOR + CHANNEL) CHICP #FALSE () "CHAR" DONE]>> + + ICP #DECL ("VALUE" > FIX FIX) CHICP () "READB" "NET" "CHAR" +NETINT DONE (ACTIVATION) TIME.CONSTANT #FALSE ("ICP timed out") "READ" "PRINT"]>> + + TIME-CONSTANT #DECL ( +"VALUE" ANY FIX) TIME.CONSTANT]>> + + + + diff --git a/bin/mbprog/itime.nbin b/bin/mbprog/itime.nbin new file mode 100644 index 0000000000000000000000000000000000000000..5c227e0752da7878d74c27d4d067015c47769cf9 GIT binary patch literal 4825 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 P4a>!gGrjV7AK`xkLXH~) literal 0 HcmV?d00001 diff --git a/bin/mbprog/jobass.nbin b/bin/mbprog/jobass.nbin new file mode 100644 index 0000000000000000000000000000000000000000..eb02e7103cad9999f1fe4ddb67318d64e9afebc2 GIT binary patch literal 2468 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 HV&MM;1a>(8 literal 0 HcmV?d00001 diff --git a/bin/mbprog/lines.nbin b/bin/mbprog/lines.nbin new file mode 100644 index 0000000000000000000000000000000000000000..ac3f3792a9b7c840d815dd785d8950fd80918efb GIT binary patch literal 2941 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 GLH+^c`(S1O literal 0 HcmV?d00001 diff --git a/bin/mbprog/macro.nbin b/bin/mbprog/macro.nbin new file mode 100644 index 0000000000000000000000000000000000000000..d1eab3a8227de1e3e91244dd0505fe637cfb78c2 GIT binary patch literal 25736 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 a*^bb|M5N&2P~V$H!S1EODtKsL^?w0V%-lu* literal 0 HcmV?d00001 diff --git a/bin/mbprog/macros.nbin b/bin/mbprog/macros.nbin new file mode 100644 index 0000000000000000000000000000000000000000..5a26b9f9d2dc17ba88e16201935ac97acec38153 GIT binary patch literal 18565 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 literal 0 HcmV?d00001 diff --git a/bin/mbprog/mfd.nbin b/bin/mbprog/mfd.nbin new file mode 100644 index 0000000000000000000000000000000000000000..7c81ba79b7a9e08a076c93f877ce2a409f14db71 GIT binary patch literal 4304 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 E2Te92SO5S3 literal 0 HcmV?d00001 diff --git a/bin/mbprog/msub.fbin b/bin/mbprog/msub.fbin new file mode 100644 index 00000000..b8f81caa --- /dev/null +++ b/bin/mbprog/msub.fbin @@ -0,0 +1,60 @@ +' + + + + + + +"THE LIBRARY DATUM 'MUDCAL-SUBSYS-VECTOR' DEFINES THE SUBSYSTEMS. IT IS +A VECTOR WHICH CONTAINS 4-TUPLES OF ELEMENTS FOR USE IN A BGST-TYPE SYMBOL-TABLE. +THE ELEMENTS ARE AS FOLLOWS. + 1) STRING -- NAME OF SUBSYSTEM FOR SYMBOL LOOKUPS + 2) XFILE STRING -- THIS IS A STRING, THE NAME OF A DATA-SET + WHICH SHOULD BE A STRING FOR MUDCAL TO + EXECUTE WHEN ACTIVATING THE SUBSYSTEM. + 3) IMPLEMENTOR -- THE PERSON RESPONSIBLE FOR THE SUBSYSTEM. + 4) DATE ADDED TO THE SYSTEM. +" + + "delete.subsystem" ' "subsystem.info" ' "subsystem.list" '< +LIST-SUBSYSTEMS>]>> + + TOPMSUB #DECL ("VALUE" ATOM) +USE-DATUM COMPS DTPRINT BSTSORT L-FILE L-UNUSE READARGS DTNOW TOPMSUB #FALSE () +"MUDCAL-SUBSYS-VECTOR" T " +Data-set name: " " +Submitted-by : " " +Date/time : " "PRINT" "MUDCAL-SUBSYS-UPDATE-FILE" TO SUBSYS-SYMTAB +SUBSYS-EVAL ATTEMPT-TO-WRITE-BAD-SUBSYSTEM-VECTOR!-ERRORS "named" +"type the name of the subsystem you are adding to the library" +"ARC:CALSUB;ADDSUB HELPM" "LINE" "data-set" +"type the name of the data-set which MUDCAL should execute +to activate the subsystem. The data-set should be a string" "DONE" +"Couldn't create subsystem"]>> + +> + +> + + STRING "OPTIONAL" ANY)] 3>> + +> + +> + +> + + diff --git a/bin/mbprog/netftp.nbin b/bin/mbprog/netftp.nbin new file mode 100644 index 0000000000000000000000000000000000000000..8e5250127f852d3185779b8e40777f1476b62b7d GIT binary patch literal 14193 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 Sr#Wmqz_h<%jD&pVC;k^WzmIkR literal 0 HcmV?d00001 diff --git a/bin/mbprog/now.nbin b/bin/mbprog/now.nbin new file mode 100644 index 0000000000000000000000000000000000000000..e7af6087a77f27bcf8f4bb7be3f6d6d53a8f8c16 GIT binary patch literal 1250 zcmah}ZA?>V6h61qQdW=_!vOK)uB%#Og;E(H8soLzr7_MH(WI0Rr-*|MwAw^;!30y2 zqP4MpB^X5-%%(;nMz<)7Sz;X77C(tg7PpwqO(Kazi@x{L+t$|e-ZGo`W8Ob~pZA>S zdCuuM_m20Sc6cK@{{God)MxDj#2(DaAMZQO_e78Nhk7L8FSdBx$}hbT-R{sIjUL%D z#83R9I#4`rpFeayGCB_#SvNu);Iqs$s~MODkf}13x_05kayMiMflgpd6#xvYZ~_Pc zZ>L5G>;uN7RKJB?z|dr+@GIt}8I>%+JRt;dRpt_=3N&K3*ViZjiq_~+phSTTvCx}L zqHpFRQ$?;%2>6moQ-vE;Lf{(Yu!;>YI%G4KQVT%9+sP0{jrGh0m?HSR=K^U*O3S3Q zTuS>|rV$3qqux641odX9_uNACR#ESwwD)ZEK9urKiBP#LDmRTVN)(~q@3-A4Cz}me z-U4U_1FLdF4pCG=K815A)KFMJ>&~G6t>S-`vuOoIv>{KrA+y~5=jBk(D*uxg5H?Vl zl9#8JmM08A#`~+^TD}4Y;Zopm-Z>Sp&9J0wIY1TxTmVyrya0G&^#E$qtW0ZxF!CL= z<0QX$ZYaknt`I2c50hP2w~8LBOa}hkKW(1-cM}vfBQySbmlxK z9XH(Zle|sb74qS5?X%Yp%@R-4-@bSh@9ya1$olG$r<13bPaeguzufqW*mUcL6W0fy z+)NsS`ar_9L%yrMndsTQ8SgHJc%e(jqDruymz?c-j?`TKhl)NPK`!?=VGHU{#+TKw zywpIWYkwHSXh^t+(b`)Hbx_|M--80upE1g{{L9DA>B>A9HDlgkmY=X)Oua>UVQjH- zCAYcM(XrhDOXQX#YwK^+?6SC_T84a6QEPP=Y_M%I+HmT1qOTn0gmJ&^pu*)`@o7i< zQuj_XJP*TdXbCg@&?YC-fH5)iAmoF>4Y2Z~($#j*R6$lss{O|+d&6|uQ*f+1{yS#T zDL6qFhB5dIaP7gGx4PKiZoz*#jfcVkJx`=af^6RYq7=#dQ)F3zcg&*e3H9y IXb=0r8y|AIrT_o{ literal 0 HcmV?d00001 diff --git a/bin/mbprog/pages.nbin b/bin/mbprog/pages.nbin new file mode 100644 index 0000000000000000000000000000000000000000..eced9b5b2c300ea5fe8a09ee5b213100da6bb3fd GIT binary patch literal 1324 zcmZvbZD>Zr%Ja z%T$z%6_rrS7*ogAGzha(X^T;W!N3h+@0RVu7{f1v?gfN4Ecf=@bi|!=QkOb*KAd~b zea`FiJ5N6Q&e^e|Y51EI$w$r8#PREo(#n@rXPff9=I>{U@u+{Q*cbo&qPo18Ve0j? z>dGQ-O{ksO&%}K8qu9CPEu0U& zyJ~2m-Peb3thnX!cQdPQb7od8WV=N2!(mLT9uprDo|nB*6xp(LBY-A@mWE$b-h zm+5BB%C#KmI1D*`83cJe2OBvI*3wt7$m!H6K~CpjGiSq5p@urDTu9wMZQHKb#NDk) zFmh-N)l(c5+e6@hy0x?^Cn#J169~(og^f(r=QFQ;5~B@Ps4!^9s2Gx-4u+`#Edj|N zL5n#q(tDfH*V~W5@BjwINQ}&$H%}F}w%+?tjF>T~dbZr>ejC_2Wxq=e$AG>z3w;w0 zF8uvdi3-(Bg`l_o*^xI52By*?>73S3sb+4?eh%m1+jFp)tB=u89luLwI1Rdg$AtRc zi*R`%5t%D3>ySL3gALaHBxo!DSZ2y_SWEXGOg2vvHZiNqiK<|tVH#J?Y`A?I z(FD+e)GJ3T2w+dpN={IL1}epQ35;QLg&_d4w`*dS89>LNy~XW$3|c50mnbwc_Z#+c zXyi&cGvRqO_eS@JdwV#o@Ic!Oh{$eApTi?wEFUy3-D|u?sZh?xzr1RfAyS?JWcuLF zd!~y+ab|*R+ ZI`@u8aWZaQnS3QMP3((zCg`Fl{sSP@ov8o- literal 0 HcmV?d00001 diff --git a/bin/mbprog/pck.fbin b/bin/mbprog/pck.fbin new file mode 100644 index 00000000..3d13cfbe --- /dev/null +++ b/bin/mbprog/pck.fbin @@ -0,0 +1,298 @@ +' + +> + +PACKAGE + +RPACKAGE + +ENTRY + +EXTERNAL + +USE + +USE-TOTAL + +DROP + +NULL-OBLIST + +ENDPACKAGE + +FILSTR + +FILPRS + +L-SEARCH-PATH + +L-SECOND-NAMES + +L-TEMP-PATH + +L-LOAD + +L-DOITEM + +L-ITEMS-NAME + +L-INDEX-NAME + +L-DATUM + +USE-DATUM + +L-NO-FILES + +L-NO-MAGIC + +L-ALWAYS-INQUIRE + +L-HANDLER + +L-UNUSE + +L-FIND + +USE-DEFER + +L-GASSIGNED? + +L-NO-DEFER + +L-NOISY + +INDENT-TO + +L-TRANSLATIONS + +TRANSLATE + +UNTRANSLATE + + + + + + )> + + )> + + + +> + +> + +"])> + +"]> + + + + + + + +> + + + +> + + + + + + FILSTR #DECL ("VALUE" STRING +"TUPLE" ) "READ"]>> + .GLUE > + + + FILPRS #DECL ("VALUE" STRING) "READ"]>> + .GLUE > + + + FIND/LOAD #DECL ("VALUE" STRING "OPTIONAL" LIST) TRANSLATE? SEARCH L-TEMP-PATH L-SEARCH-PATH +OUTCHAN % (CHANNEL) (ANY) OBLIST % % "/" "<>" T % IN-COLLECTION]>> + .GLUE > + + + SEARCH #DECL ("VALUE" ANY ]>) GDCHN % + GDCHN % % "READ" "DSK"]>> + .GLUE > + + + PACKAGE #DECL ("VALUE" ATOM +STRING "OPTIONAL" STRING FIX FIX) TRANSLATE? % IOBLIST +IN-COLLECTION % T]>> + .GLUE > + + + RPACKAGE #DECL ("VALUE" ANY +STRING "OPTIONAL" STRING FIX) TRANSLATE? % % +IOBLIST IN-COLLECTION % T]>> + .GLUE > + + + ENTRY #DECL ("VALUE" ATOM +"TUPLE" ) T % OBLIST USE-DEFER +IN-COLLECTION ENTRY NOT-IN-PACKAGE-OR-COLLECTION!-ERRORS +ALREADY-USED-ELSEWHERE!-ERRORS]>> + .GLUE > + + + USE #DECL ("VALUE" ATOM "TUPLE" < +TUPLE [REST STRING]>) FIND/LOAD OBLIST USE PACKAGE NOT-FOUND!-ERRORS T %]>> + .GLUE > + + + USE-TOTAL #DECL ("VALUE" +ATOM "TUPLE" ) FIND/LOAD OBLIST USE PACKAGE +NOT-FOUND!-ERRORS T % IOBLIST]>> + .GLUE > + + +> + + L-GASSIGNED? #DECL ( +"VALUE" ANY) USE L-TEMP-PATH L-SEARCH-PATH (LIST) USE-DEFER +PACKAGE "PACKAGE DID NOT DEFINE FUNCTION" T]>> + .GLUE > + + + + + DROP #DECL ("VALUE" ATOM "TUPLE" +) TRANSLATE? OBLIST DROP % PACKAGE +NOT-PACKAGE-OR-COLLECTION!-ERRORS IOBLIST]>> + .GLUE > + + +> + + ENDPACKAGE #DECL ("VALUE" +ATOM) OBLIST IN-COLLECTION % T IOBLIST % UNMATCHED-ENDPACKAGE-OR-ENDCOLLECTION!-ERRORS]>> + .GLUE > + + + L-UNUSE #DECL ("VALUE" > ) TRANSLATE? DROP T % IOBLIST OBLIST "PACKAGE REMOVED" % "DATUM REMOVED" # +FALSE ("NOT PACKAGE OR DATUM")]>> + .GLUE > + + + TRANSLATE? #DECL ("VALUE" +]>> STRING "OPTIONAL" ) %< +RGLOC L-TRANSLATIONS T> "!-"]>> + .GLUE > + + +"/* MAGIC KLUDGE, LOAD SDML HERE, WHERE ENOUGH IS DEFINED, BUT NOT THE + PART THAT DEPENDS ON SDML, OLD BOOTSTRAPPING PROBLEM */" + + + + USE-DEFER #DECL ("VALUE" +ATOM "TUPLE" ) USE GDCHN OBLIST NMLST (LIST) % USE-DEFER % L-SEARCH-PATH % +% PACKAGE NOT-FOUND!-ERRORS]>> + .GLUE > + + + L-DATUM #DECL ("VALUE" ANY +ANY "OPTIONAL" ANY) SEARCH L-SEARCH-PATH #FALSE ("DATUM NOT FOUND")]>> + .GLUE > + + +> + + USE-DATUM #DECL ("VALUE" +ANY ANY) TRANSLATE? L-DATUM %]>> + .GLUE > + + + TRANSLATE #DECL ("VALUE" < +OR FALSE STRING> STRING ) %]>> + .GLUE > + + + UNTRANSLATE #DECL ( +"VALUE" > STRING) % #FALSE ( +"NOT TRANSLATED")]>> + .GLUE > + + + GDCHN #DECL ("VALUE" ANY STRING + STRING "OPTIONAL" ANY) L-DOITEM %]>> + .GLUE > + + + L-LOAD #DECL ("VALUE" ANY "OPTIONAL" ANY) GDCHN L-SEARCH-PATH %]> +> + .GLUE > + + +> + + L-DOITEM #DECL ("VALUE" ANY +STRING STRING ANY ANY "TUPLE" TUPLE) POPEN PCLOSE SDMACT SDMDCT PRESET % T "READ" " " "PRINT" "NUL:"]>> + .GLUE > + + + DOSEARCH #DECL ("VALUE" < +LIST [REST LIST]> LIST STRING ANY) L-DOITEM % T BAD-ARG!-ERRORS +DOSEARCH]>> + .GLUE > + + + EXSEARCH #DECL ("VALUE" < +LIST [REST LIST]> ANY ANY ANY) DOSEARCH]>> + .GLUE > + + + L-FIND #DECL ("VALUE" > STRING) EXSEARCH L-SEARCH-PATH %]>> + .GLUE > + + +> + +> + +> OBLIST>> + + L-HANDLER #DECL ("VALUE" +ANY FRAME "TUPLE" TUPLE) L-GASSIGNED? EXSEARCH DISP-CHOICE TRANSLATE? USE +REDEFINE (ANY) UNASSIGNED-VARIABLE!-ERRORS GVAL UNBOUND-VARIABLE!-ERRORS VALUE +CALLER T % % % L-SEARCH-PATH %< +RGLOC L-INDEX-NAME T> % " " "!-PACKAGE!- " OBLIST +L-TEMP-PATH (>) "PACKAGE DID NOT DEFINE FUNCTION"]>> + .GLUE > + + + DISP-CHOICE #DECL ( +"VALUE" FIX ANY) INDENT-TO OUTCHAN % ( +CHANNEL) " +TO GET " " DYNAMICALLY LOAD +0 NONE -- GENERATE ERROR +" " " "in " "# to load? " %]>> + .GLUE > + + + + + + + + + diff --git a/bin/mbprog/pcond.fbin b/bin/mbprog/pcond.fbin new file mode 100644 index 00000000..84387c1b --- /dev/null +++ b/bin/mbprog/pcond.fbin @@ -0,0 +1,16 @@ +' + + + + + + PCOND #DECL ("VALUE" FORM +"ARGS" LIST) COND-CODE]>)> + .GLUE > + + COND-CODE #DECL ("VALUE" +FORM LIST) COND T]>> + .GLUE > + + + diff --git a/bin/mbprog/pmap.fbin b/bin/mbprog/pmap.fbin new file mode 100644 index 00000000..2b3700c8 --- /dev/null +++ b/bin/mbprog/pmap.fbin @@ -0,0 +1,146 @@ +' + + + + + + + + + + +]> (PMTIME PMMAX) FIX (PMCHANLIST) +> + +> + + CORE-BLOCK #DECL ("VALUE" FIX FIX FIX FIX) T OC (FIX) OLD #FALSE () () % % % "LOCKED" + () "DONE" % "READ" "PRINT" "PRINTB" "PRINTO" #FALSE ( +"MODE NOT READ, PRINT, OR LOCKED") "DSK" FILE-LENGTH-FAILED!-ERRORS POPEN +"PAGE OF LOCKED FILE IS SHARED" CHAN (PMCHAN) EOF RESET-FAILED!-ERRORS PWRITE # +FALSE ("ATTEMPT-TO-PRINT-ON-NON-PRINT-CHANNEL") IN-OUT REQ ( +) PAST-EOF % PRESET DPAGE #FALSE ("BUFFER NOT CURRENTLY MAPPED") + PAGE-MAP % READ-OR-WRITE-ADDRESS-NEGATIVE?!-ERRORS PIOT +BAD-CALL!-ERRORS CORE-BLOCK CANT-GET-CORE-ERRET-NON-FALSE-TO-RETRY!-ERRORS +CORE-EXHAUSTED-YOU-LOSE!-ERRORS MUDDLE-CORE-EXHAUSTED-YOU-LOSE!-ERRORS]>> + .GLUE > + + "OPTIONAL" FIX)] 26>> + +> + + FIX CHANNEL)] 80>> + + CHANNEL)] 112>> + + CHANNEL)] 138>> + + FIX)] 158>> + + < +PRIMTYPE WORD> "OPTIONAL" )] 188>> + + "OPTIONAL" PMCHAN)] 224>> + +> + + +STRING STRING "OPTIONAL" FIX APPLICABLE)] 428>> + + +PMCHAN UVECTOR FIX)] 754>> + +> PMCHAN UVECTOR FIX)] 787>> + + FIX FIX> >]> PMCHAN UVECTOR FIX FIX)] +1024>> + +> + +> + +> + + +PMCHAN FIX)] 1514>> + + PMCHAN FIX)] 1650>> + +> PMCHAN FIX)] 1711>> + + PMCHAN)] 1760>> + + PMCHAN FIX)] 1881>> + +>> + +> + +> + +> + + ]>)] 2176>> + + FIX FIX> PMCHAN)] 2217>> + + < +PRIMTYPE WORD>)] 2311>> + +> + +> + + .GLUE > + + diff --git a/bin/mbprog/poster.nbin b/bin/mbprog/poster.nbin new file mode 100644 index 0000000000000000000000000000000000000000..2278f67a15ff800d6d59d75f8964b2cb28b76470 GIT binary patch literal 4593 zcmbuDdu&tJ9mjumoF{}hg#-eF9zq6rnfTh*uabsb$Ie4Fu}Pc`ma))MloS#X9vP1o z%4BWHhB9E$wxaO}2vk!3pcR3(Lfte?Xw%ACR-Z)p zL`b`!BcF5b`JHpm`Tah>@5$J?(}7TQ*C&5CB4=InzZO6KV(~#a&6`^=e!MeyVWPB@ zx3M$vtA)4D#QTarlwv>c^qv_1W5!RHjQPuN@@G;787_x1aE=a4iHv%Yw=Rvpni7uEYVw-Lv3ZPRU zlt{??=vV(J%&CBkm-SWO#kz9zFz70mWoE93+yPjp41=yy8N8fG@B-YukQNycVd3;P zgYv7xkhXf|BG9kL0+i3Ns%%cXaRQeEx}2wTtRQ{BL0|NHPczy(Xg%@CU`-gF-PeS4ZNZZqJc^~+9LxBt?Z@bjtoE=)T6V?M)Y0g z!8yf}E?7zLC71!L+CK1ITCMMbwUI@*s^kY%C1P?u7Wh@_$84W{1<85w^JkdXGV8oG zv(DRBY43#$W$f_5_t_*;YC7E{pM8e}rXDl091R^qW*?QdaH(7%q= ztFf9_-gegKW$i8WE_JpBTbi01SbfumnoTuj%-z&LcH#r&>_p6Z?xqyGeb*FHM(?%^ z#s2cq2N#q#&;R{8Ep#a@OO50mwS0M4k5cFY`W(ip8GwgwIQ=B#130nw%U8eo`2HIJ zyTiI}r~|zN4#e7EAyZ1cVrzng?B5M@8m@f|ns6AXQPdxL_r2Mxd;c!w51Sr)}*MjH#K+L^q9|m zTy~*$R)h z&PTwATFY;ERajI9+X9>tl>PQ|O2k__8>Hxm-8I+8{}gZ!HJIwW%?KUlZwuBnO3f_D ze8h|E6p9$`k6;6(^&*W8l-4oQkqtc3A1wa{dcwMk&>`sftVX;RB7G2pX3Rb}! z8CZO^GxFzG?OP(Hi>|yF@wLCT)j1s(In}M+U_+9^@jm0K%rJh8bqXg?DWZ@#uWCj; z{Yob#V$hTb$qW-OCTcMcF*jyW8Pd9Svat%2s=lK?^2R94m$NV_Q+yRrlRR)3GE4OM zYLXY&`4ACt zeQ-)vjP*l7*3`^=P0iloO$;B})&iPCOJN2+Wy+%}!f+D44fK_2$D}Mp|HUUIOVv!3 zN=@9T>Sc+-7r?|{o;@{jKZ_S^V;fW7*+6Y|6Fo(a9*f1v1c%^oxy*v#axuXyVk)vT zhtn>KW;M&?RL6I2YmhJ&O#!aI<;fINB%`9pCT%VjF;CeiRd`*ufedTQwYLi-Z z;S?RyANujZN;_s~W$+?O6L<1fQ9-X{(mCg8o(Y~zF^{zmyUjw0%YJ- zrKVbji&$llwnsJ^plG^f!%QRS6?AeO2JTGPJaW7&a=d)*?pzXu;S5(#iNx5c9nb%W z?>7~6fAL?!4dLQQ!<^)czqy|6kIBcRk=WOP`jF;1(L4FUOY!-|=cE(>A0d+_6&LaG zET2FbEo(XzA6WIbk?1b=zN8pGl}AADTrO;{HijEuKSc&4-vZxQtZMD6SgJc)zSY*cF`ykz58;N z9x1jGqW~$&!GxgWj!kZ*URUUrq_8Z!q>$G(XdTF|ci$uAIf!;jvPj}>oXj7nqV+s% z9xpfsQdUc+(rz>5Hl$sydD~K45`Q$>C9~^_=<(-nN~Gqw*WwL3&^j_H*jatdzF>H$ z*@Kzb6!a4%)eM!)$tln+A>)q(osGOOA9RhR+VSBco)R@5rh!hqaHkS=1<7>GvuoyN zJcv7!?w3l`s{3(;P8d{^?PFk&r(42c(xLJ{Z^OT_^o(wG3V20lg41HN+69|nwsXg{ nxGa(XYX=wB|djeA3Gg1R4h@AfcpD-I= literal 0 HcmV?d00001 diff --git a/bin/mbprog/ppmap.binary b/bin/mbprog/ppmap.binary new file mode 100644 index 0000000000000000000000000000000000000000..352adb7032e4af7db44c2574ba5f84e87f249d4a GIT binary patch literal 2053 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 J+Xu4m{{rQ>klg?P literal 0 HcmV?d00001 diff --git a/bin/mbprog/scrcrf.nbin b/bin/mbprog/scrcrf.nbin new file mode 100644 index 0000000000000000000000000000000000000000..eb4275af88df6e5455487244d3db131246e43dcf GIT binary patch literal 2850 zcmb7`e{56N6~~VqLmZM6r)(=JwA`20RjL|DDbR|R{!BoXRs@JiWMY4zNoyqjm@2kq+8^7b{m@n_q0~{IANI@E^qgxG zk`+37|G4kI`|I3y&*yy4n>_b%Vn{!Aqh(k>Vi=J#0I+uIZv#+fb2S5Gw~c}!3xm_s z>#Ql5XIo|lSOcZ=>oOq1BC4vWs-&tsdwg)fkUc&M%T)LklxBZDQ1Xh+g)6ehU&CE+ zw1kf~Jo7RDGj^s`!2S(>fZFT`z*Tcs3M}TGPy&AHvuy!fb$S4+e~rRQG}}9Yrvt!2 zfW$@yPy?M`9aizp;D@c$%fOg{3ObpYPG+K$0hE__KDCX8sW321{nSFATlLvc?gdL- zP`~kPa!75ixjv}Jy2pp~=Bnsf{jJ{52lGcxHlEev&yHWwt71#fUJI&bNX4CRl^ zOnxf1vR`lgcQma&+#5KRbDmTVO?_%%{37uf0PeuU;Uz1+srExDx1YOp=0AVhkIgcG zE`We-Z<(B_ya@{nqc2^%@@mH5fhB+yG}SbOqfqX_Z=%v9?`()of0%-0{Pp(r`Nx(_ zM%m{_S)-gtn!iIGMYAa@~n=GRPWZNrl;3q6!P;PwyCs*0c+PsDT~aGPaP&xSCJ3s#(`SNt0ZNe5ab$)e7T_8ejYn`!sKSNxb z3ovydOp}X6@ZN=qh-y}W*3vQ}Y9l8qdjbKo`4AyyqD^V%?B4-Oru;a$!D>O17HrwJ z)08G$EAB|aqpEons;4XiaFy?zeV2AQ48<}{#ZNE2s}B2TVal+}ki)8kFg9htLabI0 zt7c-=1mzRaKl*V36~<9byq(WlmLClU!mLhBj{NpQ(8>~u9`6mw2_@bV2{CIlrnE#O zGUqkkvRP@n%WJb7i3G!JQ_I$Rwz4rE3P%Ghnp6VK9Mukng(!XGhojnbU{&4LjL{EL z2Ht?j=)jO8e8IFIs=%;+7QT;y;pJKQ*7C^@if@AW&3(OkOs?hpIvk>;+0L*Y?bbGX zk5fQ?)yisbpV#Gf2`)rgu!|naD{-VnZvkncfV5Q8;Vas$A3LABSsyr?S8tTabfAZ{ zi=(Jud?wMu#GUc445MQ}*L$~bgt9RkttlN8^ecfwEm?^-zTV3&$M zHV`ugK<68{%jxb*C!8-SJ82pg96*hVr}af&j)a=X^I7u+`Mo51epB9Mu?`pf9k#Ln z_iz3fs!+kVEs>&YxeC!{^S>S=Dujg#%fSON5+y7?wqW93x)SuUbzDgLxvs)-wgQjN=69xtya$@H_KeBD=DSb z{7|dz2eT^7SY0~T>Jwzu`yf{Fo7gJ+UezeVzWZ4%kjZeG&6ffXTa7_TT4!vv8jZlE zFMA!uh*^_h28(mPc10F>aXsqmUTF$xE0p26IO=y1MUyKvKn$Fbs<$_;f^m;odk zrfCvOBi}yJg(h_j4MWI?tp;?8w`g|&BaAln*iztZcm`Lj!I&`iCBpsdN&AeU4NLpi z_a!3U^?tMixy3k{;sq-+;7yspOD*)232J5pv}|JE@?bkHSX>!?!pB<`6Z@<`<1OsA zLrJ?GQJh-SGj^UW$MDJ@`H}UKj2K&4V{%I{_hRku<@R_mpxavBS=r=#&EUx$w+ z_1|@m5A%P7JDM9f#WnV>zUG~0uMb9;;_IMel+KMmcLoj?e+6c8{{~Xfa+-WM674V# z0j5Mz$o=<-$=f%VV>Y0eASsfm@TO+3Q8b9{?D=VYT5Sq w&y!Ea*9IfpP&?@i845%a^dKMK!;b#TbH6$NKX&- + + + + + + +> + +> + +> + +> + +> + +> + +> + + + + SDMACT #DECL ("VALUE" STRING "OPTIONAL" FIX FIX) POPEN PREAD PWRITE PCLOSE "PRINT" "READ" %< +RGLOC SCR1 T> #FALSE ("NOT AN SDM FILE") SDM-ERROR +INCONSISTENT-DATA-BASE!-ERRORS COULDNT-WRITE-INTO!-ERRORS]>> + .GLUE > + + .GLUE > + +> + + +STRING "OPTIONAL" FIX)] 70>> + + + + + + SDMSRC #DECL ("VALUE" PMCHAN ANY FIX) PREAD VCTBNS SDMSRC % SDMBITM1 % #FALSE ("ITEM NOT FOUND") +SDMBDIR SDMBITM2 SDMBITM3 SDM-ERROR INCONSISTENT-DATA-BASE!-ERRORS +COULDNT-READ-FROM!-ERRORS UNVERIFIED.ITEM!-ERRORS]>> + .GLUE > + + .GLUE > + + +PMCHAN ANY "OPTIONAL" FIX)] 193>> + + +STRING)] 109>> + + SDMGET #DECL ("VALUE" ANY +PMCHAN ANY "OPTIONAL" FIX) PREAD COPY-FILE SDMGET CHAN-MAX SDMSRC #FALSE ( +"UNIMPLEMENTED DATA TYPE") ["UNIMPLEMENTED" "IMAGE" "UNIMPLEMENTED" +"UNIMPLEMENTED" "UNPARSED" "ASSOCIATION" "EVALUATE" "VIRTUAL-ARCHIVE" "ARCHIVE" +"INVERSION" "WEIGHTED-INVERSION" "GC-DUMP"] "PRINTB" SDMBPAGE "DONE" #FALSE ( +"ITEM HAS NO DATA") #FALSE ("NOT A VIRTUAL ITEM") "READB" <> #FALSE ( +"ITEM NOT FOUND") SDM-ERROR INCONSISTENT-DATA-BASE!-ERRORS +ASSOCIATION-SPEC-NOT-A-VECTOR!-ERRORS SDMBITM2 SDMBITM3 +COULDNT-READ-FROM!-ERRORS UNVERIFIED.ITEM!-ERRORS]>> + .GLUE > + + .GLUE > + + PMCHAN ANY STRING)] 57>> + + PMCHAN ANY)] 50>> + +> + + "OPTIONAL" FIX)] 28>> + + SDMGDA #DECL ("VALUE" UVECTOR +PMCHAN) PREAD "DONE" SDMBDSP SDMBDIR SDMBITM2 SDMBITM3 SDM-ERROR +INCONSISTENT-DATA-BASE!-ERRORS COULDNT-READ-FROM!-ERRORS UNVERIFIED.ITEM!-ERRORS +]>> + .GLUE > + + .GLUE > + +> + +> + + PMCHAN +)] 25>> + + + + + + + + + + + + + + + + + + + + + + CHAN-MAX #DECL ("VALUE" +CHANNEL CHANNEL FIX) ADR % MAX]>> + .GLUE > + + .GLUE > + + ADR]>> + .GLUE > + + .GLUE > + + diff --git a/bin/mbprog/sharer.binary b/bin/mbprog/sharer.binary new file mode 100644 index 00000000..05da79c7 --- /dev/null +++ b/bin/mbprog/sharer.binary @@ -0,0 +1,9 @@ + + + "OPTIONAL" )] '(48 FINIS!-MUDDLE 232552 (16 13))> +> +30 \ No newline at end of file diff --git a/bin/mbprog/skyfan.nbin b/bin/mbprog/skyfan.nbin new file mode 100644 index 0000000000000000000000000000000000000000..e18217062e294d83bb827c04ad40a8a8adae9aa5 GIT binary patch literal 10395 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 C?KLC- literal 0 HcmV?d00001 diff --git a/bin/mbprog/sortx.nbin b/bin/mbprog/sortx.nbin new file mode 100644 index 0000000000000000000000000000000000000000..ee3e69026eca0e0cfdfb0e6bdd09e36248ecc053 GIT binary patch literal 2458 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 C-Ps%f literal 0 HcmV?d00001 diff --git a/bin/mbprog/symbol.nbin b/bin/mbprog/symbol.nbin new file mode 100644 index 0000000000000000000000000000000000000000..43caf466e8ed474582201c1fcc0e2dc434c6065f GIT binary patch literal 15897 zcmcJ0c~liww)eS!3=!m_pdbzf5(H&ZCa0vmD2fS26paJ=gb)RyLc= z5W6Mn6OBfRu^qtaOI}{vX}e7nC2Dtvn0&VBBx+*oCDyH5_cDFIeX4HN1@$do*81v? zS~Z-h_TFa?zrCw<-+yM5$#4AQFBPI^ealWc^M}k->jn4U1h>uzydcI@CK zlYRBlKkl(r)S-*2Y=3zk9{{IOTH%j#bn*KhYuBc zuq{4kMy=TU<+_%RHjCw!7?@G=u;a|>d!~-@RXL{4jjO-C*|B+C&iRhoxq`{QW7YS! zX;u9?cN8zbXkB#TpLaXj-+IV<;Kf_tU2OmI&3kvP^Bd)U9kzy&i=CU3e=xPzmgM}@ zvD;YijW{^&+m`nCQoU|pMot_*HXS^LJ# zj*rKUUe&o_Y{56}-AQ=aJ67Ji*uFVo zNlT||s@M6>v%6pUslDaI&;8mLl`Os3nKo{Psq^EXD+5~hon3Ob^W)Pcrp|Xq*WGMy zIs5%xG5Dcywm zn8!$#&-?|KB6eRijA6k-N(OTk{UVsh03n}E;7u&q2`rYH^r0q$sfimk@uE>mr8ta2 zO%jz`4C+U>W2uKP^%zP$+^L6;$PTdq0>d1_L{H`-GE5{I-B>T}g&Vzar59fG0yM~A zy)BjK#!`yVEi|7cS^lw!Q}REa6R^lw%RdViNqx3B~dj86Q@9iuVUMTb}kcHf`BaOEcc3@1a|a-*u6#NyCTYsF{$UM{n3 ze`TM^T60$@v)BAk2Nm&N>H*QO?$SZ|(6DL8trv#O!0rAoO>*;!&6OdEB9Ti7X$WvT5l77|4F9k^>4Gb*=lap(eQIB#ekv0i`MN?%@vlD%}{z@ z?8EB$(q>eJ)^vP5PIPE5KOxluZJjB4R)wCn-DrkBxnV2(wDa9H_f7539lP7oKIYVt zkHoa_)C2ap#*i#q{0F$2lRx{Q_>6$b6YH+m*dD$^^Jafq-)$K)YAwgUn^iBzy`O5b zZ>ySZ5|2hst+kn(O~1B@AEa)ATda46 zT{dY2fQZCSM1(qdU42jBTw@F@>GFT_-=G%Wf8!D< zChNos>BzvkEGhcS(kq6?K|#Ed|FPKq~!w}3ZxHP zjxUisU;m_=odVA-C+jYmtlK%`tKv*z8cvdDpk~iTKnPdW(Skx#%Wa$ceSAbd_Mbv88(*8T(|Q4NuZaBB<&FWWzol;eDHZlr{r^^G`%OmX5jlRu`EJX|nQ_2g{faP^ z?-cAU2SZ;_ZSX<)_&)w!>|0#-UzEBdY!A|GIUpDo0ykwYhwE5v*ps(MyLWAGGbw6U0s$7 zjW9<;Jyp%Zpm#jz1e*l?L^`k~cEMUwVP%^F_$^(*MB#;gCBl&SsD^~MgCQYx>T9Vy z+VzmDXI+WvBkKd`SAxsp2dkr!JZVadk}Nv;gylEszg;5z1Uw z>P>`{#Sh+0M!VJ2ZW-y+LNY?!>f{M-iyy2@4D;}a7n$oOgD}y^m}uP0purbE*pL{C z7i2=0^Ckkr3X~?yjTuBEDAaZfREtf)NeDOMHU!URh7Bl>h2G^aT|={pt_IhxuC`m7 z=!z(Oj=^YuM!hi4I?Ep#*$qCKx(duA`e6$GHpV5Ny{^8E?dl+l#{{;xoD81c{~N7E ztE0t(Qr<*lN4qTiLy11iI6<5(4W5aH*sh-hcMwT*fk7GPv-rVAm7U-z^(f^OHGq06 zgftL6Ap-W^@_i$_Nn~vzo_6q4RFXh!sv>3|?P}#GHU-9wC|{&eejBllv*a%{Z)yBe zA_ftSQ=S&|FToQN(d27Izt}D-&AVQhg2puEU&w#B#mA%1TEs`;JrX0pHGLTZK4x9w z2>vXBmi7)U4f0BsznBwTG{$z>XygrirK7{P$jl!K0VK(}(PHd6*(p$YdesEHN#t}B^gBJ*Y}kkp5fxqCM-p`LP)`F=Lpb-o!avC09+@V^8D$L&gLry)4InSXXIFGES*!^CVZ~N|kD}t=mU5 z*UE>YuR4Zr%4^@87wy%ZLe**5d>gzI~3hZLuTyB+Bjwl986Gua#7KUXim zVN9)+8{WHKt(oRu%Z)!qL#G>OZ@{zJ4R*hm|4!b@lnQ&=$kcLs&E4leGUH2z(J6Vd z>DAbb^~D)%Iei^VnX-P(gre1PY>=6W>{n((I-74cY+~EZF0ZnK%qN@uo7pvreZd<~ z4v9^lVRreNMG`@oyylaJe`jt*%-_sDR!z8OqzCXGnw9q zkiiO=S2ml$8*2_jFMj*9HrrNn`{H3cd>)hhaKw3&nAFlxC|#O=Do?r)cs576wBu}n zR5_>)r>w*!)`-Ak1y-LdSmmY#CzpsmJCEmBV+Ngok-m|%!rEuv36tf+U8h%AqZgdX zvqonmEU`upI#nz!-z6-O`edCbmNp0Cw$H*d1)}%7v=f~Ke;`OJ+w%iMg?{*Uc(BE^6( zi^2qliip*1NfK>S+8W;7^=Ay}qQ#n%?n}z{O+*dbCQ)M}Dd30v87T%EZQTu|4db*P z{#-q4Jpy!1L;~=01$(0w5w{Zk9M_@K5y%$-&{vehJK@g2aR)CT>d;+ zROxsEn@Nub@)b@HpoH3>WUc+PF*QB2Y0qr*Yy+*(MpW29-TIU2$yHSkq?T05LpoVt zc6(=o}yJo38I8l5t#4j71V-?a3 zN4b_z!x@TwJ~7Exmm{KRj7U8ozY)2}L~~%DIdAt^J}=+yor8C>1z9QuZE^WPsD&!#;z#K?KY9nZADn7f6caxryb( zy~5aY#Ay$LDGae;U@6%@AOLg=!Sy0Jc6GKsKmc0LP5B|36G!9pUb|nxq-uMb-=8Yv z5@STFy?N;zM4KTO%Iq0A*P*Mms~29c;~ezt&Ot9eo~BX#_^rk=NEi-{Wu%{-I0GYy zph12cO0CX zX2TfftK2$5W=I0|qqgl7UOzQ+iB+nlypfzM^%;~@Ao>`we?EK{rfhSM2=#W;UR(8R z2>DdoW$=A8Ff(}kZv!)fuNIhr*^LIoT92LxWDAHI;xT=obNof99|dM~QapKrq`3N5 za6;-9^rUVN$U?X|j|UhHw#xuOQi&N2zPjL1IJPDU&gMqi^YdxsU_LS#mR9cC!lD}d zv}j>I1(Sn$Few^bHwB0Wgn_hDi*|ZIR}aXIeMp}Cn{@SnuGZ3b05FBra=f#f@p328 zM_U9vov9D zN@TGT>3N8?jshXzpblA}D{GGvo8s{*qoLMQ(C8tJ!<4kHFxC(95eb`ch7DE3fco-4SK|k8(0l`+ zVfqemh8#76I~O%t)kie>#?cVEwft5eUVMhJkf$4-VO78~I6wICB)TEsR+E*C8KOyo ziwQg@t_Ell;q*d>F*MHH*7u0nuk8FHUH18)+9!OY^#CuqYj(8jE=jki{xRg+t=2x~ zS#`^Bpa62KtXXrl1otA=PlSsy9G_4ht&f5MB4V6pQx(HQ0>%C5MI;G`lXf6Z_jY`* z!Ig-;l84ZuVKXyuv0XswR~K8_A8a11gF|+)r6Icpm!H3c6hn3m24OO7AwO&(_=5&W zu|t$eRJennpye<)25)Cq0fXv@H;+fd5@;X6gX{=Pz`S$?w4B_??lEd>=ERYB!4D-y zowUaWAh}*X)WgHzz%&QmhA0syd5c1+O{_B2+a6|Q*4t<0P2C{&Z=sMi2Cy8mXO(he z)ud`Uq3%=U^r}Ml*aO0@?3UyG^lr!kzVj_`Y8|;lH#IW#|MpV7=(jX=w`>U$%H(Q? zt14HATsT0(@5Pj}9SC^ekL%kKLXRAE%&RPNgV^uK>*Y3Mp0GteUia5pdqshglX}tm z&U=^k$oV0u2kjNhOtlI$u0ESnX*r&AVUOkb`=)L5qEa5cG`iaM@cTMPw_&ClTg9t0 z_So`AJg))R4saAWa6Q6tVJ3icM`rNMo4H@Ke+(SGbMTvysbWBkf=`a`X59^n`;{^+ z(0}5pUfFCF=S#};@!sy8`y1J9<#y0(eb;vdtYlaCtvs{c>tmU3zUn-54&KUEFy9Q-nJ-=$$P#&DEfOEkd;(b( z^A2RMviobDynH1j&|F3(Vo#YCxhk(Kp&5xO7b6>}EW_b=@F+fjxn#2;%wsJ}H@j4^ z(`FYlYcjhoH1t;Hb-@1ryC_~R`2ont$2M7#^_w> z!=U66>80R=9MOB>v1N$ZPZvmijH7d<%CE-cNlg^!zqDX%vDG^WG5)=s#}KEtoLnYV z(rtQHV;<1>(|J-v;OQLc$d0%ivG=^wh%*+PES6pmA~+wxzqGaXEYO4gK<$?gYRHrB zeU$)IAZu){HTo;S{yxT0SPSMLcldvd`%@3tPUM-eCHs|e$GG+>9AknrD<3%#L=Dqs zBR%d5t>^3$J;wj>>(PX|k!5o3rn@<08`nvG$Uc%D=jw~k#=&p5#L0L@Dz}U4NmAVF zFqC5C0=VKZf2ERnAxBnrcL)>U_Mz5Clhb1yFFw-I0Jx6tLC$n z8{8-Mb^1z;J&&QwB#kbUoO)<<>Fzfv5DJ^@@lp~6N-wB(3!9vbQX4l)bmc%<5kYZS zl`)QYP%O37umF0BA25)>J7!ndGhangw7MsbN&!{KoJ#qN0s%_Dz*KIpE{HTaL3?v@ zRTxxm2)(?`{%frv}v#Xw=Z9+v3-#N zxYV!ivs%jubrL3GbE>ROin2bAJ;YZm_s!?bi0zt)O7nO z-dKzJ;?3-9Hk0*=bAnU)vtAQfEc5V0Nasj#j%4oOO3HNABt$YdfemLK*=&+BIRUX0 zC#r!V0kIS(4pwG!sBm9qh-1LSas1L?vASS-jjb8+pCe)%vrLK}cxnlhYJ8s6dr(4& z)idz)5@~r5l<&W8)a6O{1CbuR*G$0aj!}iyK3R3SR_|T$(8^HP=mt&w(t_hT(&mAQ zg;HT)d=9kt6M|2N3!#*u5Ep`+6zG${8`@TSoC1t<9uNS+IC<8l&7|rQ&o&cWE0S!K zZvb=P;_c*a!3lKnSywb9m($My1~|a?9)KN{8T3rXehwIi*4(eV_^8+#nbab@RZ$%R z;>dOb?8Nc^1=VqE90%SO72H@%CJ+YFIJ!_uUod7;+fk)bY64IAmfIe_1`9^Uixy>c zqWzOl9o?po4nt81kIPgY)}hx6ai^RV{C&+#ct5TOnKn1VSc6sefO(AZqz?3p&vZ8F zOGQ1C@Ve% zTav6Pup~zz5t+bY+LTV?aa4r1X+LKXh@%XYA_C!yIboed;Bem6EZC3fs8i@xD@18I zwM@wPo#}ua_hae-3z;2Tb>7r^nq&34BhVW+^w&#S@lFs(wZ-1eFhFBcgV}FrvQ?+Pih2;HpA~tqabgtE>HZDhs ze)l8_N(P=Fzc}P0QMrMV*S}ELds`3kX3b7y;$Loo%q?22Ln7tRp?7g*^UGdz| zHzI~jgh-JB=u6I>9|?nB_d*QRZ@~L{yuS;Vgp|UwkCh1j&_xh0eke+TSF@nFr8?)5 z$>MpKYD;GdWwyU%s7YD*4dE(^Q$w$2ivIh~?}p?=L-j2^w_C1QI%ALBbNFA8b`>t8 zG$;Dp`HuGgvnW+_7s}+!yR$3g&4?vYI&`jF6N{m`SdgMnz+dh&lrGI?3U;sQjXsJ9 zIE;TVzvZ!H=iVZ-w#MrcorgD zn!X@unUoehDpy+GGAf6HpJmeYps@u#asiOZ^Qe6@4(EbC@F_*gr-w*Aj`7_U4+I1O z5!X!=qVy%vU=r`$zk*E1tr0s45}-Unrct2keYU!MnoTYHdks2L~Q@K z>_xw@YxUTd*YxZKp!GD$JMAZsJ&mHf{U}%No|+;a^Kvl&$vhd=$gCueJ%ehJ3e+b9 z#_eGsdF163*P`#Ec?`8ejgLH_hw$t3>Q^MtZG;zZB(=F-^P7fbVb2>#R!gN?N_!bL zA?+0&$XE}Bg@pft>7c`lU{sGw*Zm}Lk5=1>$BE# zt3eYLAeWEYBEr!L##q^-BngQEr{X3B=+zSl1pX2ZVAGR>mWi9->tNvNJPF+6EtMc4 zyMmLDqJDEoa*9%}02mp}i3uZa5THWIh9Jx5xDCgyFi^^3BQHrC{R;R(ez zy$P=k6x^`|;CdXoL1`Yo+ycD`rD_x~h=0*I7jTnuF01&h-i{L;m6~7)F`UoaLngSy zP&Y^n$lqO@NMJfhU^yiobA>X_R^JrCk*haRqC zS%k)bKI9A=m|H$QKzO7eG$^k^gaR+Qb;}DWijsGD$>}vHes9@n&+m~epaSBa`2RcP zG{3K)`G;-SvH{C`hF(&N(x9W~?6h5g?Xvstzl;KQ;g7X)WAl^18HXz+SLd1z+qU<= zrv7fU*)L*u$DO2GciZ0_{V-FUt0FH!-OUyi>k%pfRGmDbHT+hdHSf<&o$oDY7uC1p zQYMlW%VGB+IGPt#X?D$Kt-Oimi3?_fk<}=pI3Sc?F}FZA-0YIZb}HjJFn6rw9?LNs z8d2%yEdX=xBVc&EjUWg9atsDB=v0oh{9US|2~NzhdM`{YL={cl3Iqhn zOQb?0s?(>>r}Fl%0l!2oh%1&Z2aZLP`NwmldxVU8XPqdN?k{L4p^_Uw;WthJx(N~r zq$4}eEVD-KK)0=^gOi#7AD~`tEWmiG)65HAt)S>G)}s~A#3b`?b39Z6b90qxW#svK9B&?E`jR2aGR9Q-;x4?kH<&h za0E^os_DqaaaPe5!eMAV@~gQ2=1&~k<*{piG@_VY=Nvfn#t#%W<$sFbEAT-NH%!U6 zXh@>sHR`b=Ux7Sp_SUk_ud-FBk9$_7nSu%wrA(eOenMB$hdrYLrx=q8G!ZM~&?Jn1 z<<0*=#3I1G1={t4c%ha%)N5lx7SS8 zcOqwO6QA*)hRn=t{95q#GG6K`6pLQ}cbelLA5>q8eKRJ^6?^Xo3VEd}olIWu6gKMj7!qc~-m;#UFi(1?zi3aEG+Vhr@!B4MGj4Gomt`Vrnm*f#BXrI1H*A z?-3r3E6Xipuz7jE1U=*{@)MP;{LeL3+}v^(1%sB0F22}v?nBGD{UXOu0jRp z3s{^~N+loo&cU>r-b%*k7CrlH6GixLG~XkhE1Xe>=c-Nxuc`Z7WDQZh*{$wdt@idr zl_D&kyHEPYnPa&0a|?+S1W>>2OA*X>hlU8et(4;<&#OO$J*cAEZRf&l%0<6aVcQ&i ze2EA=@guSSS5)j3Lpg9YQ|(AHAO&G}PA{t>Yu~1-0VC--r4pN>u^D`QTCzBqn{h2= zFp9ZNR1FOkiuEV^q$CPhat4qD*R^UiM)?30kaQR`rHEbACACL8 zuf800rXSvvKg|w`{hPlwh`q!9cvx=!A+^k&X8hVqxxJ1b_w1XEU;Bu?!)dqQYl4Ci zu9e$HXN+26z0iLeJeEVyD1S9hD6z+|Z&dF6nNiAIUNL(?g16ms@qet!*SeqAtGs%|%B*~H&+ zcsAs$^$xw|@xHbo=|NRgjac8O63(x#ND9Ng< literal 0 HcmV?d00001 diff --git a/bin/mbprog/temhak.fbin b/bin/mbprog/temhak.fbin new file mode 100644 index 00000000..f170a3de --- /dev/null +++ b/bin/mbprog/temhak.fbin @@ -0,0 +1,20 @@ +' + + + + + + + + TEMPLATE-DUMP #DECL ( +"VALUE" > ATOM) GROUP-DUMP GROUP-LOAD +TEMPLATE-PUT TEMPLATE-GET TEMPLATE-LENGTH TEMPLATE? T #FALSE ("NOT A GROUP") +TEMPLATE BUILD-TEMPLATE GETTER-DATA PUTTER-DATA TEMPLATE-DATA QUOTE DECL SETG +AND .GLUE PUT GVAL GLUE USE "TEMPLATE" FILE2 (STRING) CHANNEL " NBIN" %]>> + .GLUE > + + STRING "OPTIONAL" STRING)] 405>> + + diff --git a/bin/mbprog/timfcn.nbin b/bin/mbprog/timfcn.nbin new file mode 100644 index 0000000000000000000000000000000000000000..ccae3a4bf131cbc33c96e9fee0d833f5b1a71b54 GIT binary patch literal 32778 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