diff --git a/README.md b/README.md index de36b40d..11bb20d6 100644 --- a/README.md +++ b/README.md @@ -190,6 +190,7 @@ There's a [DDT cheat sheet](doc/DDT.md) for Unix users. - TIMOON, displays the time and phase of the moon. - TMPKIL, clean out old files in .TEMP.;. - TTLOC, Advertises physical location of logged in users. + - WHAT, humorous quips to various "what" questions. 6. A brand new host table is built from the host table source and installed into SYSBIN; HOSTS3 > using H3MAKE. diff --git a/build/build.tcl b/build/build.tcl index ca77e44f..f50a2792 100644 --- a/build/build.tcl +++ b/build/build.tcl @@ -868,6 +868,10 @@ respond "*" ":midas sys2;ts tmpkil_syseng;tmpkil\r" expect ":KILL" respond "*" ":link dragon;hourly tmpkil,sys2;ts tmpkil\r" +# WHAT +respond "*" ":midas sys2;ts what_syseng;what\r" +expect ":KILL" + # ndskdmp tape respond "*" ":link kshack;good ram,.;ram ram\r" respond "*" ":link kshack;ddt bin,.;@ ddt\r" diff --git a/src/syseng/what.204 b/src/syseng/what.204 new file mode 100644 index 00000000..cf5ece70 --- /dev/null +++ b/src/syseng/what.204 @@ -0,0 +1,991 @@ +;;;-*-Midas-*- + +title what? + +a=1 +b=2 +c=3 +d=4 +t=5 +tt=6 +p=7 +arg=10 + +ttyoch==1 +FOOCH==2 +FOOSH==FOOCH +ttyich==3 + +die=.break 16,160000 +call=pushj p, +return=popj p, +jcall==jrst + +define conc qq,ww +qq!ww!termin + +define syscall name,args + .call [setz ? sixbit /name/ ? args(400000)] +termin + +DEFINE RND A +A +TERMIN + +DEFINE ABLE B +B +TERMIN +ABLELN==0 + +DEFINE PUTTAG +TERMIN + +DEFINE WHAT PATTERNS,-REPLY-,\TAG,WTAG +IRP WORDS,MOREP,[PATTERNS] +IFSE [MOREP],[ +PUTTAG +DEFINE PUTTAG +TAG: +TERMIN +ABLELN==ABLELN+2+.LENGTH/WORDS/ +ABLE [DEFINE ABLE B +B]WORDS +TERMIN +ZZQ==0 ? ZZS==0 +IRPS WD,,WORDS +ZZQ==ZZQ+1 +IFSE WD,[...] ZZS==CAIE#CAIGE ? ZZQ==ZZQ-1 +TERMIN + CAIE#ZZS C,ZZQ + JRST TAG +ifg arg+zzq-20,[ +.err too long: "what words" +zzq==20-arg +] ;end ifg arg+zzq-20 +IRPS WD,,WORDS +IFGE .IRPCNT-ZZQ,.ISTOP +IFSE WD,[$] ZZS==CAME#CAMA +.ELSE ZZS==0 +IFE 1&.IRPCNT,[ + IFL .IRPCNT-ZZQ+1, CAMN#ZZS ARG+.IRPCNT,[SIXBIT/WD/] + .ELSE [ CAME#ZZS ARG+.IRPCNT,[SIXBIT/WD/] + JRST TAG + ] ] ;end IFE 1&.IRPCNT +.ELSE [ CAME#ZZS ARG+.IRPCNT,[SIXBIT/WD/] + JRST TAG ] +TERMIN ;end *RPS WD,,WORDS +WTAG: +] ;end IFSE [MOREP], +.ELSE [ + WHAT WORDS + JRST WTAG +] +TERMIN ;end *RP WORDS,MOREP,[PATTERNS] +RND [DEFINE RND A +A]JRST WTAG +TERMIN +IFSN [REPLY],[ SOUT TTYOCH,[REPLY +] + DIE +] +TERMIN ;end DEF*NE WHAT + +define ascii *s* +.byte 7 +irpc c,,[s] +ifse [c]_,^M +.else "c +termin +0 +.byte +termin + +define valret msg +.value [asciz /msg +/] +termin + +DEFINE SOUT CHANNEL,MESS + MOVE T,[440700,,[ASCII /MESS/]] + MOVEI TT,.LENGTH /MESS/ + .CALL [ SETZ + SIXBIT /SIOT/ + MOVEI CHANNEL + T + SETZ TT] + .LOSE 1000 + TERMIN + +PDL: -20,,. + BLOCK 20 +JCL: BLOCK 100 ;SUPPORTS WIDE TTY + +GO: MOVE P,PDL + .OPEN TTYOCH,[.UAO,,'TTY] + .LOSE 1400 + .open ttyich,[.uai,,'tty] + .lose 1400 + ;;^s and ^g interrupt, ^i ^j and ^? don't echo: + syscall ttyset,[movei ttyich ? [222222,,222222] ? [230222,,220222]] + .lose 1000 + .SUSET [.ROPTION,,A] + tlo a,%opint\%opopc + .suset [.s40addr,,[20,,forty]] + .suset [.soption,,a] + .suset [.smsk2,,[<1_ttyich>\<1_ttyoch>]] + TLNN A,OPTCMD + JRST whasay + .BREAK 12,[..RJCL,,JCL] + MOVE A,[440700,,JCL] + MOVEI C,0 +LOOP43: ILDB T,A + CAIE T,^C + CAIN T,^M + JRST SCANALYZE + CALL DELIMP + JRST STRARG + JRST LOOP43 + +STRARG: MOVEI B,6 + SKIPA D,[440600,,ARG(C)] +LOOP2: ILDB T,A + CAIE T,^C + CAIN T,^M + AOJA C,SCANALYZE + CALL DELIMP ;Break out to to loop43 if it's a delimiter. + SKIPA + AOJA C,LOOP43 + JUMPLE B,LOOP2 + CAILE T,"9 + TRO T,40 + CAIGE T,"A + TRZ T,40 + TRZ T,100 + IDPB T,D + SOJA B,LOOP2 + +;DELIM-P expects char in T, skips if it's a delimiter. +DELIMP: CAIGE T,"a + SKIPA + POPJ P, + CAIG T,"Z + SKIPA + JRST POPJ1 + CAIGE T,"@ + SKIPA + POPJ P, + CAIG T,"9 + SKIPA + JRST POPJ1 + CAIGE T,"0 +POPJ1: AOS (P) + POPJ P, + +forty: 0 + 0 + -tsintl,,tsint + +intacs==t_6+2 ;accumulators T and TT are saved on interrupt + +tsint: intacs,,p + 0 ? 1_ttyich ? 0 ? <1_ttyoch>\<1_ttyich> ? chrint + 0 ? 1_ttyoch ? 0 ? 0 ? morint +tsintl==:.-tsint + +chrint: movei t,ttyich + .ityic t, + jrst intret + caie t,^s + cain t,^g + jrst iflush +intret: syscall dismis,[%clbit,,intacs ? p] + .lose %lssys + +morint: sout ttyoch,[--More--] + syscall iot,[%clbit,,%tipek ? movei ttyich ? movem t] + .lose %lssys + caie t,40 + cain t,177 + .iot ttyich,t + caie t,40 + jrst flush + move t,[440700,,[ascii /A/]] + movei tt,2 + syscall siot,[%clbit,,%tjdis ? movei ttyoch ? t ? tt] + .lose %lssys + jrst intret + +iflush: .reset ttyoch, + syscall ttyfls,[%clbit,,1 ? movei ttyich] + .lose %lssys +flush: sout ttyoch,[Flushed] + .suset [.roption,,t] + tlnn t,%opbrk + die + .break 16,164000 + die + +SCANALYZE: ;Scanalyze my name. + +what [temp,temperature]Mild spring-type weather under the Fuller dome._Ditto on the General Technics plaza. + +what [weather,a day] + valret [:KILL +:charfs hermes wthrstat +:print mc:common;wthr 4cast] + +what a dog + valret [:KILL +:PRINT dsk:.INFO.;FIDO ORDER] + +what [tty,console] + VALRET [:KILL +:VERSION +:TCTYP] + DIE + +what [id,ddt] + valret [:KILL +:VERSIO] + die + +what [seminar,seminars] + valret [:kill +:print mc:common;calend log] + +what do you call a seven foot $ with a bicycle chain,Sir. + +what are you doing + sout ttyoch,[I'm looping. I'll crash before long anyhow..._] + movei a,100. + .sleep a, + .value + +what hair + VALRET [:kill +:print dsk:.info.;lisp recent] + +what [movie,movies] + VALRET [:KILL +:lsc] + +what [dirs,directories] + valret [:kill +:print dsk:m.f.d. (file)] + +what fucking cretinous losers + valret [:kill +:print dsk:m.f.d. (file)] + +what bugs + VALRET [:kill +:print mc:lisp;bug mail] + +what a kludge + valret [:kill +:PRINT MC:SYSENG;WHAT >] + die ;you deserve it. + +what load + valret [:kill +:sstatu] + +what the $ are you + sout ttyoch,[You shouldn't say such nasty things to an omnipotent utility program..._] + jrst skru + +what is the number of the beast,666 + +what has four wheels and flies,A garbage truck. + +what has four legs and files,Two guys moving an RK02? + +what has four wheels and files,A filing cabinet on casters. + +what does it cost to ride the unibus,Two bits. + +what is the age of the universe + sout ttyoch,[COMPUTING..._] + movei a,300. + .sleep a, + sout ttyoch,[Using Big Bang Cosmology 23.34252563265 billion years,_plus or minus 14 femtoseconds._] + die + +; there should be a comma after "life" but I'm far too much of a novice to know how to do that. +what is the meaning of life the universe and everything + sout ttyoch,[COMPUTING... ] + movei a,50. + .sleep a, + sout ttyoch,[I don't think you're going to like this... ] + movei a,100. + .sleep a, + sout ttyoch,[**** 42 ****] + call terpri + call terpri + sout ttyoch,[I told you you weren't going to like it._] + die + +what the ... + sout ttyoch,[That's not nice..._] + jrst skru + +what is there to eat + VALRET [:KILL +:HUMOR;FTP] + die + +what incredible flushing man + VALRET [:KILL +:WHOIS CSTACY] + die + +what are you,I am an omniscient utility program, idiot! + +what [is this,is what]It's an all purpose utility program, dummy! + +what [is on second,is on second base]That's right! + +what me worry +SOUT TTYOCH,[Start worrying._] + JRST SKRU + +what [losers,lusers,users] + VALRET [:KILL +:NAME] + DIE + +what rough beast,its hour come round at last_slouches towards Bethlehem to be born. + +what [time,tide] + VALRET [:KILL +:TIME] + DIE + +what [day,date] + VALRET [:KILL +:DATE] + DIE + +what times + VALRET [:KILL +:TIMES] + DIE + +what is teco,It is the only systems programming language more obscure than RPG. + +what am i,You are a luser. + +what time is it,It's Howdy Doody time! + +what is your name,Fred Derf. + +what is your quest,I seek the Holy Grail. + +what is your favorite color,Yellow... no! Blue! AIIIIIIEEEEEEE...... + +what what,What? + +what is the shape of the earth,Flat. + +what happens when you get to the edge,You fall off. + +what a bitch,You're telling me. + +what is the meaning of zen + valret [:kill +] + +what does ddt type when a job kills itself + die + +what [system,sys,its] + .CALL [ SETZ + SIXBIT /SSTATU/ + REPEAT 5,MOVEM + MOVEM A + SETZM B] + .LOSE 1000 + MOVE T,A + PUSHJ P,SIXTYP + MOVE T,[SIXBIT/ITS/] + PUSHJ P,SIXTYP + MOVE T,B + PUSHJ P,SIXTYP + DIE + +SIXTYP: SETZI TT, + ROTC T,6 + JUMPE TT,SIX1 + ADDI TT,40 + .IOT TTYOCH,TT + JRST SIXTYP +SIX1: .IOT TTYOCH,[40] + POPJ P, + +what happened,Beats me! All I did was let my mask down for six microseconds and this_moby interrupt came and knocked the crap out of me!! + +what for,It turns me on. + +what [demon,demons,daemon] + call usrcnt + MOVEI B,2 +LSLOOP: MOVEI T,400000(B) + MOVE TT,[-12,,[ SIXBIT/APRC/ + MOVEM 0,A + SIXBIT /SUPPRO/ + MOVEM 0,D + SIXBIT /CNSL/ + MOVEM 0,C + SIXBIT /UNAME/ + MOVEM 0,TEM1' + SIXBIT /JNAME/ + MOVEM 0,TEM2']] + .CALL [ SETZ + SIXBIT /USRVAR/ + T + SETZ TT] + JRST LS1 + JUMPL A,LS1 + JUMPGE D,LS1 + JUMPGE C,LS1 + MOVE T,TEM1 + PUSHJ P,SIXTYP + MOVE T,TEM2 + PUSHJ P,SIXTYP + .IOT TTYOCH,[^M] + .IOT TTYOCH,[^J] +LS1: ADDI B,1 + CAMG B,LUSERS + JRST LSLOOP + DIE + +.scalar lusers +usrcnt: MOVE T,[SQUOZE 0,LUBLK] + .EVAL T, + DIE + MOVE TT,[SQUOZE 0,USRHI] + .EVAL TT, + DIE + HRLZ TT,TT + HRRI TT,A + .GETLOC TT, + IDIV A,T + MOVEM A,LUSERS + return + +what is new + valret [:kill +:print dsk:common;_news_ nyt] + +what a crock + valret [:kill +:crock] + +what [binary,bin] + move a,[sixbit /WHAT/] + jrst binary + +what [binary for $,bin for $] + move a,arg+2 + jrst binary + +what [binary $,bin $] + move a,arg+1 + jrst binary + +what [device $,dev $] + move a,arg+1 + jrst device + +what source + move a,[sixbit /WHAT/] + jrst source + +what source for $ + move a,arg+2 + jrst source + +what source $ + move a,arg+1 + jrst source + +what info for $ + move a,arg+2 + jrst info + +what printer is $ + move a,arg+2 + jrst prstat + +what info $ + move a,arg+1 + jrst info + +define valbuf &string& + movei t,[ascii string] + movei tt,.length string + call valbf0 +termin + +.vector vbuffer(100) + +binary: move b,[440700,,vbuffer] + valbuf ":kill +:find sys:ts " + call sixbuf + valbuf " +: +binprt sys:ts " +sstop: call sixbuf + valbuf "/s" +vstop: valbuf " +: +vk +" + .value vbuffer + +device: move b,[440700,,vbuffer] + valbuf ":kill +:find device;jobdev " + call sixbuf + valbuf " +: +binprt device;jobdev " + jrst sstop + +source: move b,[440700,,vbuffer] + valbuf ":kill +:find sysen*;system;sysnet;" + call sixbuf + jrst vstop + +info: move b,[440700,,vbuffer] + valbuf ":kill +:find info;.info.;sysdoc;" + call sixbuf + valbuf "******,* " + call sixbuf + valbuf "******" + jrst vstop + +prstat: syscall open,[[.uai,,fooch] + A + [sixbit /.CMD./] ? [sixbit /STATUS/]] + jrst [sout ttyoch,[No such printer_] ? die] +pstlup: move a,[440700,,msgbuf] + movei b,msglen + syscall siot,[movei fooch ? a ? b] + .lose %lssys + subi b,msglen + jumpe b,pstovr + move a,[440700,,msgbuf] + movn d,b + syscall siot,[movei ttyoch ? a ? d] + .lose %lssys + jumpe b,pstlup +pstovr: .close fooch, + die + +sixbuf: move t,a +sixbf1: setzi tt, + rotc t,6 + addi tt,40 + idpb tt,b + jumpn t,sixbf1 + return + +valbf0: hrli t,440700 +valbf1: ildb c,t + idpb c,b + sojg tt,valbf1 + return + +what say + +.vector msgbuf(100) +msglen==500 + +whasay: .suset [.runame,,a] + syscall open,[[.uai,,fooch] ? [sixbit /dsk/] + a ? [sixbit /sends/] ? [sixbit /.temp./]] + jrst nomsg +msglp: move a,[440700,,msgbuf] + movei b,msglen + syscall siot,[movei fooch ? a ? b] + .lose %lssys + subi b,msglen + jumpe b,msgovr + movn d,b + move a,[440700,,msgbuf] + ildb c,a + caie c,^_ + aojn b,.-2 + add d,b + move a,[440700,,msgbuf] + syscall siot,[movei ttyoch ? a ? d] + .lose %lssys + jumpe b,msglp +msgovr: .close fooch, + die + +nomsg: sout ttyoch,[You don't seem to have any recent messages._] + die + +what [trans,translations] +.scalar uname,jname,uind,trantp +transz==50. +.vector tranbf(transz*9) + call usrcnt + .suset [.runame,,uname] + setoi a, + setzi b, + call trans1 + die + +trans1: movei c,2 +trans2: caml c,lusers + return + move d,[-8,,[ + .runame ? movem 0,t + .rsuppr ? movem 0,tt + .ruind ? movem 0,uind + .rjname ? movem 0,jname + ]] + syscall usrvar,[movei %jsnum(c) ? d] + aoja c,trans2 + camn t,uname + came tt,a + aoja c,trans2 + call tabb + move t,jname + call 6type + aoj b, + move d,[-,,tranbf] + syscall tranex,[movei %jsnum(c) ? d ? movem trantp] + .lose %lssys + movei d,tranbf + hllm d,trantp + caml d,trantp + jrst trans5 + .iot ttyoch,[":] + call tranlp + setzm jname +trans5: move d,[-,,tranbf] + syscall tranex,[%clbit,,200000 ? movei %jsnum(c) ? d ? movem trantp] + .lose %lssys + movei d,tranbf + hllm d,trantp + caml d,trantp + jrst trans7 + skipn jname + jrst trans8 + sout ttyoch,[ & inferiors:] + call tranlp + jrst trans9 + +trans7: skipn jname + jrst trans9 + sout ttyoch,[: No translations.] + jrst trans9 + +trans8: call tabb + sout ttyoch,[Applying to inferiors as well:] + call tranlp +trans9: call terpri + push p,a + push p,c + move a,c + call trans1 + pop p,c + pop p,a + soj b, + aoja c,trans2 + +terpri: .iot ttyoch,[^M] + .iot ttyoch,[^J] + return + +tranlp: caml d,trantp + return + call tabb + move t,(d) + .iot ttyoch,["(] + tlne t,400000 + .iot ttyoch,["A] + tlne t,1 + .iot ttyoch,["I] + tlne t,2 + .iot ttyoch,["O] + sout ttyoch,[) ] + movei t,1(d) + call fntype + sout ttyoch,[ => ] + movei t,5(d) + call fntype + addi d,9 + jrst tranlp + +tabb: call terpri + skipn t,b + return + .iot ttyoch,[40] + .iot ttyoch,[40] + sojg t,.-2 + return + +fntype: push p,2(t) + push p,1(t) + push p,3(t) + move t,(t) + call 6type + .iot ttyoch,[":] + .iot ttyoch,[40] + pop p,t + call 6type + .iot ttyoch,[";] + .iot ttyoch,[40] + pop p,t + call 6type + .iot ttyoch,[40] + pop p,t + jcall 6type + +;;;Not the same as SIXTYP: +6type: jumpe t,[.iot ttyoch,["*] ? return] +6type1: setzi tt, + rotc t,6 + addi tt,40 + .iot ttyoch,tt + jumpn t,6type1 + return + +what [lisp,newio] + .CALL [ SETZ + SIXBIT /OPEN/ + [.UAI,,FOOCH] + [SIXBIT/DSK/] + [SIXBIT/PURQIO/] + [SIXBIT/>/] + SETZ [SIXBIT/SYS/]] + .LOSE 1000 + .CALL [ SETZ + SIXBIT /RFNAME/ + MOVEI FOOCH + MOVEM + MOVEM + SETZM A] + .LOSE 1000 + .CLOSE FOOCH, + SOUT TTYOCH,[LISP version ] + MOVE T,A + PUSHJ P,SIXTYP + DIE + +what [bus,busses] + + MOVEI TT,[ASCIZ/It is now /] + PUSHJ P,ASZOUT + .CALL [ SETZ ? 'RQDATE ? SETZM T ] + .LOSE %LSSYS + HRRZS T + IDIVI T,120. ;Minutes since midnight + IDIVI T,60. ;T hours, TT minutes + IMULI T,100. + ADD T,TT ;Pseudo decimal time + PUSHJ P,4DPT + .IOT TTYOCH,[^M] + .IOT TTYOCH,[^J] + MOVEI A,BUSTAB +BUS01: PUSHJ P,SCHDP + ADDI A,2 + CAIL A,BUSEND + DIE + .IOT TTYOCH,[^M] + .IOT TTYOCH,[^J] + JRST BUS01 + +ASZOUT: HRLI TT,440700 +ASZOU1: ILDB T,TT + JUMPE T,CPOPJ + .IOT TTYOCH,T + JRST ASZOU1 + +4DPT: CAIL T,2400. + SUBI T,2400. + IDIVI T,1000. + ADDI T,"0 + .IOT TTYOCH,T + MOVE T,TT + IDIVI T,100. + ADDI T,"0 + .IOT TTYOCH,T + .IOT TTYOCH,[":] + MOVE T,TT + IDIVI T,10. + ADDI T,"0 + .IOT TTYOCH,T + ADDI TT,"0 + .IOT TTYOCH,TT +CPOPJ: POPJ P, + +SCHDP: MOVEI TT,[ASCIZ/Bus /] + PUSHJ P,ASZOUT + HLRZ TT,(A) + PUSHJ P,ASZOUT + .CALL [ SETZ ? 'RQDATE ? SETZM T ] + .LOSE %LSSYS + HRRZS T + IDIVI T,120. ;Minutes since midnight + .RYEAR TT, + LDB TT,[320300,,TT] ;Current day of the week + CAIL T,2*60. ;Skip if earlier than 2 am + JRST SCHDP1 + ADDI T,24.*60. ;Which is really part of the previous day + SOJGE TT,SCHDP1 + MOVEI TT,6 +SCHDP1: HRRZ B,(A) ;Assume weekday + CAIN TT,6 + HLRZ B,1(A) ;Saturday + CAIN TT,0 + HRRZ B,1(A) ;Sunday + IDIVI T,60. ;T hours, TT minutes + IMULI T,100. + ADD T,TT ;Pseudo decimal time + MOVE C,T +SCHDP2: PUSHJ P,GETBUS + JRST [ MOVEI TT,[ASCIZ/(Shit, no more busses today!)/] + JRST ASZOUT ] + CAMG T,C + JRST SCHDP2 + ;; Now have the next bus, print the next 4 + PUSHJ P,4DPT +REPEAT 3,[ + PUSHJ P,GETBUS + POPJ P, + .IOT TTYOCH,[",] + .IOT TTYOCH,[40] + PUSHJ P,4DPT +];REPEAT + PUSHJ P,GETBUS + POPJ P, + MOVEI TT,[ASCIZ/, .../] + JRST ASZOUT + +;Arg in B +BUSTST: PUSHJ P,GETBUS + .BREAK 16, + PUSHJ P,4DPT + .IOT TTYOCH,[",] + JRST BUSTST + +;RH(B) pointer to bus table, LH(B) zero if not initialized or last time +;Updates B and returns next time in T, skip return unless no more busses +GETBUS: PUSH P,A + PUSH P,C + PUSH P,D + HLRZ A,B ;A last time given +GETBS0: HLRZ T,(B) ;T time of first bus + HRRZ D,(B) ;D interval between busses + HLRZ C,1(B) ;C time next schedule starts +GETBS1: CAMLE T,A + JRST GETBS8 ;Got it + JUMPE D,GETBS9 ;That was the last bus + ADD T,D ;Next bus this schedule + IDIVI T,100. ;Recanonicalize + PUSH P,T + MOVE T,TT + IDIVI T,60. + ADD T,(P) + IMULI T,100. + ADD T,TT + SUB P,[1,,1] + CAMGE T,C + JRST GETBS1 ;This schedule still applies + AOJA B,GETBS0 ;Advance to next schedule + +GETBS8: AOS -3(P) +GETBS9: POP P,D + POP P,C + POP P,A + HRL B,T + POPJ P, + +;Each entry in bustab is +; label,,weekdays +; saturday,,sunday +; +;label is asciz and always starts with the bus number and ends with a space +;the schedules are arrays of entries: +; start time,,time interval +; where time interval is 0 for the last bus + +DEFINE BUS LABEL,[WEEK,SAT,SUN] +RADIX 10. + [ASCIZLABEL ],,[BUS1 WEEK] + [BUS1 SAT],,[BUS1 SUN] +RADIX 8 +TERMIN + +DEFINE BUS1 [SCHED] +IRP SCH,MORSCH,SCHED +IFSE [MORSCH], SCH,,0 ;Last bus +.ELSE [ +ZZ==0 +IRP ZZ0,,[SCH] +ZZ==ZZ+1 +TERMIN +IFE ZZ-1, SCH,,3000 ;Single bus +.ELSE BUS2 SCH ;Array of busses +] +TERMIN +TERMIN + +DEFINE BUS2 START,INC + START,,INC +TERMIN + +BUSTAB: BUS 83 leaves Central Sq,[530,550,610,638,649,703,721,739,752,805,820,834,850,914,[930,20],[1330,15],[1600,13],[1810,15],1840,1858,1943,2028,2113,2158,2243,2328,2413,2500],[528,608,650,[720,25],1037,1105,[1130,20],[1730,25],[2115,45],2500],[[700,100],2500] + BUS 83 leaves Ringworld/Alewife,[[510,20],[630,14],725,739,753,807,820,834,846,[900,20],[1340,15],1600,1617,1635,1648,1701,1714,1727,1740,1755,1810,1835,1920,2005,2050,2135,2220,2305,2350,2435],[510,550,630,655,720,745,810,835,900,925,950,1015,[1040,20],1700,1725,[1755,25],[2050,45],2435],[[620,100],2420] +BUSEND: + +what randomness + MOVE A,[SQUOZE 0,SCHHB] + .EVAL A, + .LOSE + HRLZS A + HRRI A,A + .GETLOC A, + JFCL + TSC A,A + TLZ A,(SETZ) + IDIVI A,RNDLEN + XCT .+1(B) +RND1: RND +RNDLEN==.-RND1 + +what [can you do,?] + MOVEI T,ABLELN + MOVE TT,[440700,,[able [asciz/]/]] + .CALL [ SETZ + SIXBIT /SIOT/ + MOVEI TTYOCH + TT + SETZ T] + .LOSE 1000 + DIE + +SKRU: sout ttyoch,[:KILL_:DIRED SORRY DELETE * *_] + VALRET [DIREDJP] + MOVSI TT,4 + SOJG TT,. + movei arg,300 + .sleep arg, + DIE + + PUTTAG + +LOSER: SOUT TTYOCH,[You tell me._] + + DIE + +END GO