;;;-*-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 CAIGE T,"A JRST LOOP43 LOOP1: MOVEI B,6 SKIPA D,[440600,,ARG(C)] LOOP2: ILDB T,A CAIE T,^C CAIN T,^M AOJA C,SCANALYZE CAIGE T,"A AOJA C,LOOP43 JUMPLE B,LOOP2 TRZ T,100 TRO T,40 IDPB T,D SOJA B,LOOP2 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] 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 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 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 SORRYDELETE * *_] VALRET [DIREDJP] MOVSI TT,4 SOJG TT,. movei arg,300 .sleep arg, DIE PUTTAG LOSER: SOUT TTYOCH,[You tell me._] DIE END GO