TITLE BIGBEN -- PRINT A CTY LINE EVERY TEN MINUTES SUBTTL P. BUDNE@BU/DSG .DECSAVE F==0 A==1 B==2 C==3 D==4 BP==10 P==17 PDL: BLOCK BUFFER: BLOCK 100 ;STRING BUFFER NOW: BLOCK 1 ;CURRENT TIME LOGDES: BLOCK 1 ;CTY DESCR OPRUNO: BLOCK 1 ;OPERATOR USER NUMBER JOBS: BLOCK 1 ;AOBJN FOR ALL JOBS USERS: BLOCK 1 ;COUNT OF USERS OPERS: BLOCK 1 ;COUNT OF OPERATOR JOBS START: JFCL RESET MOVEI A, .FHSLF SETO C, EPCAP MOVE A, [SIXBIT "JOBRT"] SYSGT HLLZM B, JOBS MOVSI A, (RC%EMO) HRROI B, [ASCIZ "OPERATOR"] RCUSR MOVEM C, OPRUNO MOVE A, [1,,.LOGDES] GETAB HALT . MOVEM A, LOGDES CAIN A, .NULIO WAIT ;IF NO LOG DEVICE, JUST HANG! ASND ;GRAB CTY! ERJMP RELCTY MOVE A, LOGDES MOVEI B, .TT120 ;LA120 STTYP ERJMP RELCTY MOVE A, LOGDES MOVEI B, .MOSLW ;SET WIDTH FUNCTION MOVEI C, 132. ;TO 132 MTOPR ERJMP RELCTY RELCTY: MOVE A, LOGDES RELD ERJMP .+1 MOVE P, [-PDLEN,,PDL-1] TOP: GTAD MOVEM A,NOW CALL FIGURE ;FIGURE OUT WHEN NEXT TO PRINT CAIGE A, 5*1000. ;MORE THAN 5 SECONDS FROM NOW? JRST SLEEP ; NO, SLEEP IT OFF PUSH P,A ;YES, SAVE SLEEP TIME CALL OUTPUT ;OUTPUT A LINE POP P,A ;RESTORE TIME SLEEP: DISMS ;SLEEP JRST TOP FIGURE: MOVE B, NOW SETZ D, ;NO FLAGS ODCNV ;SPLIT UP MOVEI A, (D) ;GET SECONDS SINCE MIDNIGHT IDIVI A, 60.*60. ;CAST OUT HOURS, LEAVING SECONDS IN B IDIVI B, 60.*10. ;CAST OUT 10MINS WORTH OF SECONDS MOVEI A, 60.*10. ;GET FULL PERIOD SUBI A, (C) ;REMOVE.. IMULI A, 1000. ;GET MSEC. POPJ P, OUTPUT: CALL COUNT ;COUNT JOBS HRROI A,BUFFER ;;; HRROI B,[ASCIZ ' ;;; **** '] HRROI B,[asciz ' '] SETZ C, SOUT MOVE B,NOW ;GET TIME SETO C, ;VERBOSE ODTIM HRROI B,[ASCIZ ', '] SETZ C, SOUT MOVE BP, A CALL LOADS MOVE A, BP HRROI B, [ASCIZ ', '] SETZ C, SOUT MOVE B, USERS MOVEI C, 10. NOUT JFCL MOVEI B, "+ BOUT MOVE B, OPERS NOUT JFCL HRROI B, [ASCIZ ' Jobs '] SETZ C, SOUT ; SPIT THE COMPLETE STRING TO THE CTY MOVE A, LOGDES HRROI B, BUFFER SETZ C, SOUT ERJMP .+1 POPJ P, LOADS: MOVE A, [14,,.SYSTA] CALL FLOAD MOVE A, [15,,.SYSTA] CALL FLOAD MOVE A, [16,,.SYSTA] FLOAD: GETAB ERJMP R PUSH P, A ;SAVE NUMBER MOVE A, BP ;GET BP POP P, B ;GET LOAD BACK MOVE C, [FL%ONE\FL%PNT\20200] FLOUT RET MOVE BP, A RET DOUPT: MOVE B, A ;GET UPTIME IN B IDIVI B, 1000. ;GET SECONDS IDIVI B, 3600. ;NOW, GET HOURS PUSH P, C ;SAVE MINS IDIVI B, 24. ;GET DAYS PUSH P, C ;SAVE FRACTIONAL HOURS IDIVI B, 7. ;GET WEEKS!! PUSH P, C ;SAVE FRACTIONAL DAYS SETZ F, HRROI D, [ASCIZ ' week'] CALL DOIT DAYS: POP P, B ;RESTORE DAYS HRROI D, [ASCIZ ' day'] CALL DOIT HOURS: POP P, B ;RESTORE MINS .LT. 3600 HRROI D, [ASCIZ ' hour'] CALL DOIT MINS: POP P, B ; GET BACK REMAINDER AFTER HOUR CALC. IDIVI B, 60. ; GET MINUTES PUSH P, C ; SAVE SECONDS (REMAINDER) JUMPE C, SECS HRROI D, [ASCIZ ' minute'] CALL DOIT SECS: POP P,B HRROI D, [ASCIZ ' second'] ;;; FALL IN.. ; B/ count ; D/ string DOIT: MOVE A,BP JUMPE B,R CALL COMMA MOVEI C, 10. NOUT TRN PUSH P, B MOVE B, D SETZ C, SOUT MOVE BP, A POP P, B CAIG B, 1 RET MOVEI B, "s BOUT MOVE BP, A RET COMMA: JUMPE F,WUMP PUSH P,B HRROI B,[ASCIZ ", "] SETZ C, SOUT POP P,B WUMP: SETO F, R: RET COUNT: SETZM USERS SETZM OPERS MOVE D, JOBS CNTLOP: MOVEI A, (D) ;GET JOB HRROI B, C ;ONE WORD IN C MOVEI C, .JIUNO ;GET USER NUMBER GETJI ERJMP CNTNXT JUMPE C, CNTNXT CAME C, OPRUNO ;OPERATOR? AOSA USERS ; NO, MUST BE USER AOS OPERS CNTNXT: AOBJN D, CNTLOP RET END START