From 7fe76db2d47509e71476a79e871f14bccdd20a95 Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Mon, 18 Jun 2018 11:42:37 +0200 Subject: [PATCH] SHUTDN - Shut down ITS. --- build/misc.tcl | 4 + doc/programs.md | 1 + src/bawden/shutdn.6 | 220 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 225 insertions(+) create mode 100755 src/bawden/shutdn.6 diff --git a/build/misc.tcl b/build/misc.tcl index 777772d9..49719192 100644 --- a/build/misc.tcl +++ b/build/misc.tcl @@ -729,6 +729,10 @@ respond "*" ":midas sysbin;uptime bin_sysen1;uptime\r" expect ":KILL" respond "*" ":link dragon;hourly uptime,sysbin;uptime bin\r" +# SHUTDN +respond "*" ":midas sys3;ts shutdn_bawden;shutdn\r" +expect ":KILL" + # HEXIFY respond "*" ":midas sys2;ts hexify_sysen3;hexify\r" expect ":KILL" diff --git a/doc/programs.md b/doc/programs.md index cd33033a..72befda5 100644 --- a/doc/programs.md +++ b/doc/programs.md @@ -183,6 +183,7 @@ - SENDS, Chaosnet SEND server. - SENSOR, sends censor. - SENVER, Chaosnet SEND server. +- SHUTDN, shut down ITS. - SN, snoop terminal. - SPCWAR, Spacewar game. - SPELL, ESPELL spell checker. diff --git a/src/bawden/shutdn.6 b/src/bawden/shutdn.6 new file mode 100755 index 00000000..ee0bcf31 --- /dev/null +++ b/src/bawden/shutdn.6 @@ -0,0 +1,220 @@ +; -*- Midas -*- + +title SHUTDN - Set ITS to shut down + +a=:1 +b=:2 +c=:3 +d=:4 +e=:5 +t=:6 +tt=:7 +x=:10 +y=:11 +z=:12 + +p=:17 + +..bch==:0,,-1 +chttyi==:1 +chttyo==:2 +chdski==:3 + +%fr==:0,,525252 +%fl==:1,,525252 + +call=:pushj p, +return=:popj p, +save==:push p, +rest==:pop p, +flose=:.lose %lsfil +slose=:.lose %lssys +pause=:.break 16,100000 +tyi=:.iot chttyi, +tyo=:.iot chttyo, + +quit=:call . +$quit: skipe debug + pause + .logout 1, + +define bltdup org,len + move tt,[,,+1] + blt tt,+-1 +termin + +define syscall name,args + .call [setz ? .1stwd sixbit /name/ ? args(400000)] +termin + +define conc foo,bar +foo!bar!termin + +; JSP T,LOSE is like .LOSE %LSSYS(TT) or SLOSE (TT) +lose: syscall lose,[movei %lssys(tt) ? movei -2(t)] + slose + +popj1: aos (p) +cpopj: return + +datime"$$abs==:1 +datime"$$in==:1 +datime"$$out==:1 +.insrt dsk:syseng;datime > + +format"$$time==:1 +format"datime==:datime"twdasc ; ~Q +format"time==:datime"twdasc ; ~:Q +format"date==:datime"twdasc ; ~@Q +format"$$pcode==:1 +.insrt dsk:syseng;format > + +outstr: syscall siot,[movei chttyo ? a ? b] + slose + return + +define format &string&,args + call [ + call $format +.zzz.==-1 +irp arg,,[args] + save arg +.zzz.==.irpcnt +termin + hrroi a,[ascii string] + movei b,.length string + movni c,.zzz.+1 + jrst format"format] +termin + +$forma: save a + save b + save c + call @-3(p) + rest c + rest b + rest a + rest (p) + return + +.vector pdl(lpdl==:100.) + +usrvar: sixbit /OPTION/ ? tlo %opint\%opopc + sixbit /MASK/ ? move [%pipdl] + sixbit /OPTION/ ? movem a +lusrvar==:.-usrvar + +go: move p,[-lpdl,,pdl-1] + .open chttyi,[.uai,,'tty ? setz ? setz] + slose + .open chttyo,[.uao\%tjdis,,'tty ? setz ? setz] + slose + move t,[-lusrvar,,usrvar] + syscall usrvar,[movei %jself ? move t] + slose +.scalar shutdn +.scalar mname + syscall sstatu,[movem shutdn ? repeat 5,[ ? movem mname]] + slose +.scalar time + syscall rqdate,[movem time] + slose + tlnn a,%opcmd + jrst nocmd + syscall open,[movsi %donrf\.uai ? movei chdski + [sixbit /SYS/] ? [sixbit /DOWN/] ? [sixbit /MAIL/]] + jrst nomail +.vector cmd(lcmd==:100.) + setzm cmd+0 + bltdup cmd,lcmd + .break 12,[..rjcl,,cmd] + move d,[440700,,cmd] +.scalar dtime + call datime"asctwd + movem a,dtime + move b,time + call datime"timsub + caig a,5*60. + jrst badtim + format "~&Schedule ~S to go down at ~Q?",[mname,dtime] + tyi t + caie t,"y + cain t,"Y + jrst doit + quit + +doit: move a,dtime + syscall rqdate,[movem b] + slose + call datime"timsub + caig a,5*60. + jrst badtim + imuli a,30. + skipn debug + .shutdn a, + format "~&Failed!" + quit + +badtim: jumpl a,badtm1 + format "~&~Q is too soon!",dtime + quit + +badtm1: format "~&~Q has already passed!",dtime + quit + +nomail: format "~&There is no SYS:DOWN MAIL" + quit + +nocmd: skipge b,shutdn + jrst nocmd1 + addi b,15. + idivi b,30. + move a,time + call datime"timadd + format "~&~S is going down at ~Q",[mname,a] + quit + +nocmd1: aojl b,nocmd2 + format "~&~S is not scheduled to go down.",mname + quit + +nocmd2: format "~&~S is down!",mname + quit + +intsv0==:t ; Save T +intsv9==:z ; Through Z +intsvn==:intsv9+1-intsv0 + +intctl==:400000+intsv0_6+intsvn ; control bits +intpc==:-<3+intsvn> ; INTPC(P) is PC before interrupt. +intdf1==:intpc-2 ; INTDF1(P) is .DF1 before interrupt. +intdf2==:intpc-1 ; INTDF2(P) is .DF2 before interrupt. +intrq1==:intpc-4 ; INTRQ1(P) are first word bits. +intrq2==:intpc-3 ; INTRQ2(P) are second word bits. +intac0==:intpc+1-intsv0 ; INTAC0+C(P) is C before interrupt. + +tsint: +loc 42 + -ltsint,,tsint +loc tsint + intctl,,p +ltsint==:.-tsint + +dismis: setz ? sixbit /DISMIS/ ? movsi intctl ? setz p + +cnst0: +constants +repeat <.-cnst0+77>/100, conc cnst,\.rpcnt,=:cnst0+.rpcnt*100 + +variables + +debug: 0 + +patch:: +pat: block 100. +epatch: -1 ; Make memory exist, end of patch area + +ffaddr: +ffpage==:_-12 + +end go