;;;-*-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,[-<transz*9>,,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,[-<transz*9>,,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
