diff --git a/build/build.tcl b/build/build.tcl index 279f23f1..ae68d004 100644 --- a/build/build.tcl +++ b/build/build.tcl @@ -330,6 +330,9 @@ respond "*" "purify\033g" respond "Idle" "q" expect ":KILL" +respond "*" ":midas sys2;ts syschk_sysen2;syschk\r" +expect ":KILL" + respond "*" ":midas device;jobdev arc_syseng;arcdev\r" expect ":KILL" respond "*" ":link device;jobdev ar,device;jobdev arc\r" diff --git a/src/sysen2/syschk.38 b/src/sysen2/syschk.38 new file mode 100755 index 00000000..b1529f69 --- /dev/null +++ b/src/sysen2/syschk.38 @@ -0,0 +1,226 @@ +title SYSCHK Check up on system job +subttl Variables and stuff + +a=1 +b=2 +c=3 +d=4 +n=5 +obp=6 +p=17 + +clic=10 + +define utyi ac + camn obp,@toop + .hang + camn obp,@tobep + jrst [ move obp,@tobbp + jrst .-3] + ildb ac,obp + andi ac,377 +termin + +define syscal a,b + .call [setz ? sixbit \a\ ? b ((setz)) ] +termin + +subttl Startup + + loc 100 +go: move p,[-lpdl,,pdl-1] + .suset [.runame,,winner] ; get name of winner using me + skipe runflg + jrst setdon + setom runflg + move a,[-nsyms,,syms] +symlp: move b,(a) + .eval b, + .value + movem b,(a) + aobjn a,symlp + move a,syscn + movei b,1 + pushj p,makpag + move a,toip ;make sure we have the pages the buffer pointers are in + move b,nct + pushj p,makpag + move a,toop + pushj p,makpag + move a,tobep + pushj p,makpag + move a,tobbp + pushj p,makpag + .open [21,,'TTY] + .lose +setdon: syscal cnsget,[ 1000,, ? 2000,,vsz + 2000,,hsz ? 2000,,ltctyp] + .lose + .close + setzm vpos + setzm hpos + skipge n,@syscn + .value [asciz/:Cannot find the SYS consoleKILL +/] + andi n,77 + syscal cnsget,[1000,,400000(n) + 2000,,a ? 2000,,a ? 2000,,a] + .value + movem a,ftctyp + cain a,%tntv + .value [asciz/:The SYS console is a TV???KILL +/] + .value [asciz/:vk /] + +subttl Main SPYing routine + movsi a,n + iorm a,toip ;set up index field for indirection + iorm a,toop + iorm a,tobep + iorm a,tobbp + move a,@tobbp + move b,@tobep + sub b,a + pushj p,makpag ;make sure we have the page(s) the buffer itself is in + move obp,@toop ;have to start somewhere + camn obp,@tobep + move obp,@tobbp + ibp obp +bfrstp: setzm bytcnt + setzm msgbfr + move d,[msgbfr,,msgbfr+1] + blt d,msgbfr+37 + move d,[440700,,msgbfr] + movei a,177 ;rubout means no "Message from ..." nonsense + idpb a,d + aos bytcnt + +lpe: utyi a + trze a,%txdis + jrst typd ;display or cursor pos, dispatch + caile a,173 + jrst lpe +typit: aos hpos + idpb a,d + aos bytcnt + jrst lpe + +typd: cail a,typdmx + jrst lpe + jrst @typdtb(a) + +typdtb: tymov ;move cursor + tymov1 ;dummy for above + LPE ;clear eof + lpe ;clear eol + LPE ;delete fwd + lpe ;terminet motor on + lpe ; " " off + tyecrl ;crlf to datapoints & imlacs + lpe ;"nop for superduper image mode" + LPE ;bs + LPE ;lf + tyecrl ;cr + lpe ;output reset + lpe ;quote + tyefs ;fwd space + tymov1 ;move cursor new style + LPE ;clear screen +typdmx==.-typdtb + +tymov: utyi c ;old vpos + utyi b ;old hpos or 201 + utyi a ;new vpos + utyi b ;new hpos + skipe ftctyp + jrst tymov0 + sub a,c + exch a,b + idiv b,vsz + move b,c + exch a,b +tymov0: camn a,vpos + jrst tymov2 ;no change in vertical position + movem a,vpos + jrst tyecrl +tymov2: movei a,40 + camge b,hpos + movem b,hpos ;oh gronk I don't know why this is + camn b,hpos + jrst lpe + idpb a,d + aos bytcnt + aos hpos + soja b,tymov2+1 +tymov1: utyi a ;new vpos + utyi b ;new hpos + skipe ftctyp + jrst tymov0 + exch a,b + idiv b,vsz + move b,c + exch a,b + jrst tymov0 + +tyefs: movei a,40 + jrst typit + +tyecrl: SETZM HPOS + syscal open,[[.uao,,clic] ? ['CLI,,] ? winner ? ['HACTRN] ? 3000,,a] + jrst [ movei a,30.*2. + .sleep a, ;RMS says this will be fixed soon... + jrst .-1] + move a,[440700,,msgbfr] + syscal siot,[movei clic ? a ? bytcnt] + .LOSE + .close clic, + jrst bfrstp + +;get the same page the sys job has in its page whose address is in a, # words in b +makpag: andi a,-1 + push p,a + ash a,-10. + movem a,cblk1 ;get first page + .call cblk + .value + pop p,a + addi a,-1(b) ;address of last word + ash a,-10. + camn a,cblk1 + popj p, + movem a,cblk1 + .call cblk ;crosses page boundary, get second page + .value + popj p, + +subttl Data area + +cblk: setz + sixbit \CORBLK\ + 1000,,210000 ;read access, fail if can't + [-1] ;put page in self + cblk1 + setzi 400000 ;get from sys job +cblk1: 0 ;gets -#pages,,page # to start +bytcnt: 0 ;count of bytes +msgbfr: block 100 ;allow plenty of space for message +ltctyp: 0 ;local tctyp +ftctyp: 0 ;foreign tctyp +vsz: 0 ;local vertical screen size +hsz: 0 ; " horizontal " " +vpos: 0 ;current (hopefully) local vertical cursor pos +hpos: 0 ;current (hopefully) local horizontal cursor pos +runflg: 0 ;nonzero if setup done already +winner: 0 ;who is using me + +syms: +irps x,,[NCT TOBEP TOBBP TOIP TOOP SYSCN] +x: squoze 0,x +termin +nsyms==.-syms +consta ? variab +lpdl==20 +pdl: block lpdl +patch": block 100 + +end go