TITLE SYSUP DAEMON ; THIS PROGRAM SHOULD EXIST AS DRAGON;SYSUP DAEMON ; IT WILL :XFILE DRAGON;SYSUP XFILE UNDER ID SYSUP VIA A STY .MLLIT==1 STYI==16 STYO==15 DSKI==14 TTYO==13 ;DEBUGGING ONLY A=1 B=2 C=3 P=10 T=11 TT=12 DELAY==10.*60. ;INTERRUPT INTERVAL FOR CHECKING FOR LOGOUT GO:; .OPEN BOJ, ['BOJ] ; JRST BEG00 ;NOT JOB DEVICE ; .CALL [ SETZ ;JOB DEVICE, UNHANG PFTHMG ; 'JOBRET ; SETZI 0 ] ; JFCL ; .CLOSE BOJ, .CLOSE 1, ;SUPERSTITION BEG00: MOVE P, PDL MOVSI T, 200000 ;SET UP INTERRUPTS MOVEI TT, 1_STYI .SETM2 T, JFCL ; SET UP I/O CHANNELS .OPEN STYI, [10+.UAI,,'STY] ;DON'T HANG MODE JSR LOSE .OPEN STYO, [.UAO,,'STY] JSR LOSE SETOM DEBUG ; following line commented out due to its misfeature ; .OPEN TTYO, [.UAO,,'TTY] ;IF HAVE TTY, DEBUG SETZM DEBUG ; OK BEGIN ACTION .IOT STYO, [^Z] SKIPN LGIWT ;WAIT FOR RESPONSE .HANG MOVE A, [440700,,LOGIN] ;START THE THING UP ALOGIN: ILDB B, A JUMPE B,ALOGN0 ;STOP ON NULL .IOT STYO, B JRST ALOGIN ALOGN0: MOVE A, [200000,,[DELAY]] ;SET UP PERIODIC INTERRUPTS .REALT A, SKIP ;NOW LET INTERRUPT SIDE DO WORK .HANG LGIWT: 0 ;NONZERO WHEN CHARS RECEIVED FROM STY PDL: -40,,. ;PUSH DOWN LIST BLOCK 40 LOGIN: ASCIZ\6371636560Uî:XFILE DRAGON;  SYSUP  XFILEîî:LOGOUTî\ ZZ==. LOC 42 JSR TSINT LOC ZZ TSINT: 0 ? 0 ;INTERRUPT HANDLER PUSH P, A PUSH P, B PUSH P, T PUSH P, TT PUSH P, [TSINTX] SKIPGE TSINT JRST STYINT ;WORD 2 INT JRST TIMINT ;WORD 1 INT TSINTX: POP P, TT POP P, T POP P, B POP P, A .DISMISS TSINT+1 ;;; INTERRUPT HANDLERS ; CALLED BY PUSHJ P, USE A, B, T, TT ; STY HAS TYPEOUT TO BE THROWN AWAY STYIN0: SKIPE DEBUG .IOT TTYO, TT ;SHOW LOSER IF IS ONE SETOM LGIWT ;SIGNAL STY ACTIVE STYINT: .IOT STYI, TT ;EAT ANY OUTPUT... JUMPGE TT, STYIN0 ;RETURN IF NO STUFF CPOPJ: POPJ P, ; TIMER INTERRUPT. IF STY HAS LOGGED OUT, FLUSH TIMINT: MOVE A, [200000,,[DELAY]] ;START TIMER AGAIN .REALT A, JFCL .CALL [ SETZ 'TTYGET MOVEI STYO MOVEM A MOVEM A SETZM B ] MOVEI B, -1 ;REALLY GONE AWAY HRRES B AOJN B, CPOPJ ;JUMP IF RH(B) ^= -1 .CLOSE STYI, .CLOSE STYO, ; WELL THE SYSUP STUFF IS OVER WITH. SINCE NOTHING ELSE ;IS DONE IN THIS PROGRAM... .LOGOUT .VALUE LOSE: 0 .LOGOUT .VALUE DEBUG: 0 END GO