mirror of
https://github.com/PDP-10/its.git
synced 2026-01-23 02:48:48 +00:00
992 lines
16 KiB
Plaintext
992 lines
16 KiB
Plaintext
;;;-*-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
|