.TITLE TTYLOG ; ; PROGRAM TO SCAN ATL FOR TIME-SHARING TASKS ; ; FOR EACH TIME SHARING TASK, WILL DETERMINE TI OF TASK, AND ; ; COUNT ONE "TICK" (WHERE TICKS ARE 6-SECOND INTERVALS) ; IN THE APPROPRIATE STORAGE LOCATION FOR THE 3 STATES ; ; RUNNING ; SWAPPED OUT ; WAITING ; ; SAID COUNT WILL BE KEPT SEPARATELY FOR EACH TERMINAL ON THE ; SYSTEM IN THE COMMON AREA "TTYCOM" ; ; OTHER PROGRAMS WILL ALSO ACCESS THIS AREA TO PRODUCE HOURLY, ; DAILY, ETC REPORTS. ; .MCALL MRKT$S,WTSE$S,EXIT$S ; ; ; SET UP 10-SECOND MARK TIME ; START: MRKT$S #5,#6,#2 ;MARK TIME FOR 6 SECONDS MOV #.ATLLH,R1 ;AND ATL LISTHEAD -> R1 MOV PS.EXP,-(SP) ;SAVE PROCESSOR STATUS WORD BIS #140,PS.EXP ;INHIBIT TASK SWITCHING 24$: MOV (R1),R1 ;START (CONTINUE) GOING THROUGH ATL CMP R1,.ATLLH+2 ;THROUGH ATL YET ? BEQ PAUSE ;BR IF WE FELL THROUGH BIT #AF.IA,A.TF(R1) ;IS THIS SCHEDULER CONTROLLED TASK ? BEQ 242$ ;BRANCH IF NOT MOV A.TI(R1),R2 ;GET TI PUD IN R2 CMP U.DN(R2),#"TT ;IS IT A TERMINAL ? BNE 242$ ;IF NOT, SKIP IT MOVB U.UN(R2),R3 ;GET TI UNIT NUMBER IN R3 BEQ 242$ ;SKIP TT0 DEC R3 ;MAKE HIM A TABLE OFFSET ASL R3 MOV A.TS(R1),R2 ;GET TASK STATUS IN R2 CMP R2,#TS.RUN ;IS IT RUNNABLE ? BNE 1$ ;BR IF NOT INC RUN(R3) ;COUNT IT BR 242$ ;AND DO NEXT 1$: CMP R2,#TS.MRL ;IS IT ON THE MRL ? BLT 2$ ;BR IF NOT CMP R2,#TS.MRR BGT 2$ INC SWAP(R3) ;COUNT IT BR 242$ 2$: CMP R2,#TS.WF0 ;IS IT WAITING FOR EVENTS ? BLT 242$ ;BR IF NOT CMP R2,#TS.WF4 BGT 242$ INC WAITN(R3) ;USE 'WAITN' CAUSE OTHERWISE KEY-WORD CONFLICT 242$: BR 24$ ;CONTINUE THRU ATL ; ;NOW WAIT FOR 10 SECONDS ; PAUSE: JSR PC,..ENB0 ;RE-ENABLE TASK SWITCHING WTSE$S #5 ;WAIT FOR THE 10-SECOND MARKTIME TST STOFL ;SHOULD WE STOP BEQ START ;BRANCH IF NOT CLR STOFL ;CLEAR THE FLAG FOR LATER EXIT$S ;AND EXIT .END START