.TITLE TERMINAL USAGE RPT .SBTTL FILES, BUFFERS AND MCALLS ; ; THIS PROGRAM USES THE FILE 'TTLOG.DAT' TO CREATE A REPORT ; TO SHOW TERMINAL USAGE AND SHOW THE USER UIC'S THAT WERE ; LOGGED ON FOR THAT DAY. ; .MCALL $STRUC,FSRSZ$,FDBDF$,FDRC$A,FDOP$A,OPEN$W .MCALL FDAT$A,NMBLK$,FINIT$,OPEN$R,DELET$,CLOSE$ .MCALL CALL,EXIT$S,QIOW$S,GET$,PUT$ $STRUC ;STRUCTURED MACRO .MCALL INLUN = 1 ;ASSIGN LUN #1 OUTLUN = 2 ;ASSIGN LUN #2 FSRSZ$ 2 ;# OF FILES OPENED TTLOG: FDBDF$ FDRC$A ,TTFLD,22. FDOP$A INLUN,DESCR,TTNAM REPORT: FDBDF$ FDAT$A R.FIX,,133. FDRC$A ,RPTBUF,133. FDOP$A OUTLUN,DESCR,RPTNAM TTNAM: NMBLK$ TTLOG,DAT RPTNAM: NMBLK$ TERRPT,DAT DESCR: .WORD 0,0 ;DEVICE FIELD .WORD DIRSZ,DIRNM ;DIRECTORY FIELD .WORD 0,0 ;NAME FIELD DIRNM: .ASCII /[001,005]/ ;DIRECTORY VALUE DIRSZ=.-DIRNM .EVEN TTFLD: .WORD ;ASCII 'TT' TTNUM: .WORD ;TERMINAL # UIC: .WORD ;USER GROUP YEAR: .WORD ;YEAR MNTH: .WORD ;MONTH DAY: .WORD ;DAY HOUR: .WORD ;HOUR MIN: .WORD ;MIN .BLKW 3. ;NOT USED RPTBUF: .BLKB 133. ;OUTPUT BUFFER .EVEN .PAGE .SBTTL HEADERS HDR1: .ASCII <14> <15> / / .ASCII / / .ASCII *TERMINAL USAGE REPORT FOR PDP 11/40 * .ASCII / / .EVEN HDR2: .ASCII <15> <12> <12> / / .ASCII / / .ASCII /**** = TERMINAL IN USE / .ASCII / / .EVEN HDR3: .ASCII <15> <12> <12> * YY/MM/DD HH:MM * .ASCII /TT01 TT02 TT03 TT04 TT05 TT06 TT07 TT10 TT11 TT12 / .ASCII /TT13 TT14 TT15 TT16 TT17 TT20 / .ASCII / / .EVEN HDR4: .ASCII <15> <12> /-----------------------------------------/ .ASCII /----------------------------------------------/ .ASCII /---------------------------------------------/ .EVEN HDR5: .ASCII /TOTAL MINUTES USED / .EVEN HDR6: .ASCII <14> <15> / / .ASCII / UIC'S LOGGED ON / .ASCII / / .EVEN .PAGE .SBTTL DETAIL AND ERROR MESSAGES DETAIL: .ASCII <12> <15> / / DATHD: .ASCII * / / * TIMHD: .ASCII / : / TTDFL: .BLKB 100. .BLKB 14. DETAL2: .ASCII <12> <15> <40> UICL: .BLKB 130 MES1: .ASCII <15> <12> /ERR OPEN$R TTLOG NOTIFY SYSTEMS PGMMR/ ML1=.-MES1 .EVEN MES2: .ASCII <15> <12> /ERR OPEN$W REPORT NOTIFY SYSTEMS PGMMR/ ML2=.-MES2 .EVEN MES3: .ASCII <15> <12> /ERR CLOSE$ TTLOG NOTIFY SYSTEMS PGMMR/ ML3=.-MES3 .EVEN MES4: .ASCII <15> <12> /ERR CLOSE$ REPORT NOTIFY SYSTEMS PGMMR/ .ASCII <15> <12> /TTLOG.DAT FILE NOT DELETED/ ML4=.-MES4 .EVEN .PAGE .SBTTL WORK AREAS UICHLD: .BLKW 160. ;HOLD UIC'S TIMHLD: .BLKW 1. ;HOLD MINUTES ACCTIM: .BLKW 20. ;ACCUMULATIVE TIME EOFFLG: .WORD 0 ;END OF FILE FLAG TABLCT: .WORD 0 ;ENTRY FOR TABLE COUNT UICCTR: .WORD 0 ;COUNT OF UIC'S USED BYT0: .BYTE 0 ;CONVERSION AREA BYT1: .BYTE 0 ;CONVERSION AREA BYT2: .BYTE 0 ;CONVERSION AREA BYT3: .BYTE 0 ;CONVERSION AREA BYT4: .BYTE 0 ;CONVERSION AREA BYT5: .BYTE 0 ;CONVERSION AREA NUM5A: .ASCII /5B/ ;ASCII # 5 NUM5B: .WORD 0 ;HOLD FOR BINARY #5 MAXLIN: .ASCII /54BB/ ;ASCII # 54 LINMAX: .WORD 0 ;BINARY MAXLIN LINCTR: .WORD 0 ;LINE COUNTER SAVUIC: .WORD 0 ;SAVE UIC # MATSWT: .WORD 0 ;MATCH SWITCH SPACE: .ASCII / / ;SPACES ASTER: .ASCII /**/ ;ASTERISKS ATWO: .ASCII /2B/ ;ASCII 2 BTWO: .WORD ;BINARY 2 .PAGE .SBTTL MAIN ROUTINE MAIN: FINIT$ ;INITIALIZATION MOV #TTDFL,R3 ;ADDR OF OUTPUT TO R3 MOV #100.,R4 ;LOOP ITERATIONS CALL CLRALL ;CLEAR PRINT LINE MOV #UICHLD,R5 ;HOLD ADDR TO R5 MOV #160.,R4 ;# OF HOLD WORDS $WHILE ;-LOOP CONTROL CLR (R5)+ ;-ZERO HOLD FIELD DEC R4 ;-DECREMENT LOOP COUNTER $END ;-END ZERO HOLD LOOP MOV #MAXLIN,R0 ;ADDR TO R0 FOR CONVERSION JSR PC,$CDTB ;CONVERSION SUBROUTINE MOV R1,LINMAX ;CONVERTED # TO LINMAX MOV R1,LINCTR ;CONVERTED # TO LINCTR MOV #NUM5A,R0 ;ADDR TO R0 FOR CONVERSION JSR PC,$CDTB ;CONVERSION SUBROUTINE MOV R1,NUM5B ;CONVERTED # TO NUM5B MOV #ATWO,R0 ;ADDR TO R0 FOR CONVERSION JSR PC,$CDTB ;CONVERSION SUBROUTINE MOV R1,BTWO ;CONVERTED # TO BTWO CALL OPENFL ;OPEN FILES $IF <,CC> ;-TEST CARRY BIT FROM OPEN CALL FSTRD ;-READ 1ST RECORD $WHILE ;--LOOP FOR READING CALL RDREST ;--READ REST OF FILE $END ;--END LOOP FOR READING CALL WRTREC ;-WRITE LAST LINE $IF ;--TEST READ ERR CALL WRTTOT ;--WRITE TOTAL LINE CLR TABLCT ;--CLEAR TABLE COUNTER PUT$ #REPORT,#HDR6 ;--WRITE HEADER 6 PUT$ #REPORT,#HDR4 ;--WRITE HEADER 4 CALL UICPRT ;--PRINT UIC'S CALL CLOSFL ;--CLOSE ALL FILES $END ;--END TEST READ ERR $END ;-END TEST FOR OPEN ERR EXIT$S .PAGE .SBTTL OPEN AND CLOSE ROUTINES OPENFL: OPEN$R #TTLOG ;OPEN INPUT FILE $IF <,CS> ;-TEST ERR ON OPEN QIOW$S #IO.WLB,#5,#1,,,,<#MES1,#ML1> ;-DISPLAY ERR MSG SEC ;-SET CARRY BIT $ELSE ;-ELSE NO ERR OPEN$W #REPORT ;-OPEN OUTPUT FILE $IF <,CS> ;--TEST ERR ON OPEN QIOW$S #IO.WLB,#5,#1,,,,<#MES2,#ML2> ;--DISPLAY ERR MSG SEC ;--SET CARRY BIT $END ;--END TEST ERR ON OPEN $END ;-END TEST ERR ON OPEN RETURN ;RETURN TO CALLING ROUTINE ; ; CLOSFL: CLOSE$ #REPORT ;CLOSE OUTPUT FILE $IF <,CS> ;-TEST ERR ON CLOSE QIOW$S #IO.WLB,#5,#1,,,,<#MES4,#ML4> ;-DISPLAY ERR MSG CLOSE$ #TTLOG ;-CLOSE INPUT FILE $IF <,CS> ;--TEST ERR ON CLOSE QIOW$S #IO.WLB,#5,#1,,,,<#MES3,#ML3> ;--DISPLAY ERR MSG $END ;--END TEST ERR ON CLOSE $ELSE ;-ELSE NO ERR DELET$ #TTLOG ;-DELETE INPUT FILE $IF <,CS> ;--TEST ERR ON DELET$ QIOW$S #IO.WLB,#5,#1,,,,<#MES3,#ML3> ;--DISPLAY ERR MSG $END ;--END TEST ERR ON DELET$ $END ;-END TEST ERR ON CLOSE RETURN ;RETURN TO CALLING ROUTINE .PAGE .SBTTL READ ROUTINES FSTRD: GET$ #TTLOG ;READ A RECORD MOV #UIC,R5 ;ADDR TO R5 MOV (R5)+,UICHLD ;1ST UIC TO HOLD INC UICCTR ;INCREMENT UIC COUNTER MOV #3.,R4 ;LOOP ITERATIONS MOV #DATHD,R3 ;ADDR FOR OUTPUT CALL CONVRT ;CONVERSION ROUTINE MOV #2.,R4 ;LOOP ITERATIONS MOV #TIMHD,R3 ;ADDR TO R3 CALL CONVRT ;CONVERSION ROUTINE MOV MIN,TIMHLD ;MINUTE TO HOLD CALL LOCTT ;LOCATE TERMINAL AREA RETURN ;RETURN TO CALLING ROUTINE ; ; RDREST: GET$ #TTLOG ;READ A RECORD $IF <,CS> ;-TEST ERR ON READ $IF ;--TEST FOR EOF MOV #2.,EOFFLG ;--SET EOFFLG TO ERR $ELSE ;--ELSE IS EOF MOV #1.,EOFFLG ;--SET EOFFLG TO EOF $END ;--END TEST FOR EOF $ELSE ;-ELSE NO READ ERR CALL CHKUIC ;-CHECK UIC CALL CHKTIM ;-CHECK TIME CALL LOCTT ;-LOCATE TERMINAL AREA $END ;-END TEST LAST RECORD RETURN ;RETURN TO CALLING ROUTINE .PAGE .SBTTL WRITE ROUTINES WRTREC: $IF ;-TEST LINE COUNTER > OR = 60 PUT$ #REPORT,#HDR1 ;-PRINT HEADER 1 PUT$ #REPORT,#HDR2 ;-PRINT HEADER 2 PUT$ #REPORT,#HDR3 ;-PRINT HEADER 3 PUT$ #REPORT,#HDR4 ;-PRINT HEADER 4 CLR LINCTR ;-CLEAR LINE COUNTER $END ;-END TEST LINE COUNTER PUT$ #REPORT,#DETAIL ;PRINT DETAIL LINE INC LINCTR ;ADD 1 TO LINE COUNTER RETURN ;RETURN TO CALLING ROUTINE ; ; WRTTOT: PUT$ #REPORT,#HDR4 ;PRINT HEADER 4 MOV #HDR5,R5 ;ADDR TO R5 FOR MOVE MOV #19.,R4 ;LOOP ITERATIONS MOV #DATHD-1,R3 ;ADDR TO R3 FOR MOVE $WHILE ;-LOOP CONTROL MOVB (R5)+,(R3)+ ;-MOVE HEADER 5 TO HEADER 4 DEC R4 ;-DECREMENT R4 $END ;-END LOOP MOV #TTDFL,R3 ;ADDR TO R3 FOR CONVERSION MOV #20.,R4 ;LOOP ITERATIONS MOV #ACCTIM,R5 ;ADDR TO R5 FOR CONVERSION $WHILE ;-LOOP CONTROL MOV (R5)+,R1 ;-DATA TO R1 FOR CONVERSION MOV #BYT1,R0 ;-OUTPUT AREA FOR CONVERSION MOV #1.,R2 ;-CONVERSION FLAG JSR PC,$CBDMG ;-CONVERSION SUBROUTINE DEC R4 ;-DECREMENT R4 MOVB BYT2,(R3)+ ;-MOVE 1 BYTE OF TIME MOVB BYT3,(R3)+ ;-MOVE 1 BYTE OF TIME MOVB BYT4,(R3)+ ;-MOVE 1 BYTE OF TIME MOVB BYT5,(R3)+ ;-MOVE 1 BYTE OF TIME MOVB SPACE,(R3)+ ;-INCREMENT R3 TO SKIP SPACE $END ;-END LOOP PUT$ #REPORT,#DETAIL ;-PRINT TOTAL LINE RETURN ;RETURN TO CALLING ROUTINE .PAGE .SBTTL CHECK TIME AND UIC ROUTINES CHKUIC: MOV #UICHLD,R5 ;ADDR TO R5 FOR UIC HOLD MOV #0.,MATSWT ;SET MATCH SWITCH CLR TABLCT ;CLEAR TABLE COUNTER $WHILE ;-LOOP CONTROL $IF ;--TEST UIC EQUAL MOV UICCTR,TABLCT ;--MAKE TABLCT = UICCTR MOV #1.,MATSWT ;--SET MATCH SWITCH $END ;--END TEST UIC EQUAL INC TABLCT ;-INCREMENT TABLE COUNT $END ;-END LOOP $IF ;-TEST MATCH SWT MOV UIC,(R5) ;-INSERT UIC IN TABLE INC UICCTR ;-ADD 1 TO UICCTR $END ;-END TEST MATCH SWITCH RETURN ;RETURN TO CALLING ROUTINE ; ; CHKTIM: $IF ;-TEST MIN NOT = TIMHLD MOV MIN,TIMHLD ;-MOVE IN NEW MIN CALL WRTREC ;-WRITE DETAIL LINE MOV #TTDFL,R3 ;-ADDR OF DETAIL TO R3 MOV #100.,R4 ;-LOOP ITERATIONS CALL CLRALL ;-CLEAR PRINT LINE MOV #DATHD,R3 ;-ADDR TO R3 FOR CLEARING MOV #10.,R4 ;-LOOP ITERATIONS CALL CLRALL ;-CLEAR PRINT LINE MOV #TIMHD,R3 ;-ADDR TO R3 FOR CONVERSION MOV #2.,R4 ;-LOOP ITERATIONS MOV #HOUR,R5 ;-ADDR TO R5 FOR CONVERSION CALL CONVRT ;-CONVERSION ROUTINE $END ;-END TEST MIN NOT = TIMHLD RETURN ;RETURN TO CALLING ROUTINE .PAGE .SBTTL CONVERSION AND MOVE ROUTINES CLRALL: $WHILE ;-LOOP CONTROL MOVB SPACE,(R3)+ ;-MOVE SPACE TO ADDR OF R3 DEC R4 ;-DECREMENT R4 $END ;-END LOOP RETURN ;RETURN TO CALLING ROUTINE ; ; CONVRT: $WHILE ;-LOOP CONTROL MOV (R5)+,R1 ;-MOVE CONTENTS OF R5 TO R1 MOV #BYT1,R0 ;-ADDR OF OUTPUT TO R0 MOV #1.,R2 ;-SET CONVERSION FLAG JSR PC,$CBDMG ;-CONVERSION SUBROUTINE DEC R4 ;-DECREMENT R4 MOVB BYT4,(R3)+ ;-CONVERTED DATA TO OUTPUT MOVB BYT5,(R3)+ ;-CONVERTED DATA TO OUTPUT INC R3 ;-SKIP OUTPUT BYTE $END ;-END CONVERSION LOOP RETURN ;RETURN TO CALLING ROUTINE ; ; SMLCON: MOV (R5)+,R3 ;CLEAR SAVE UIC AREA $IF ;-TEST FOR 0,0 UIC MOV #1.,R4 ;-CONVERSION FLAG SET CALL .PPASC ;-UIC CONVERSION ROUTINE INC R2 ;-SKIP OUTPUT 1 SPACE DEC R1 ;-DECREMENT LOOP CONTROL $END ;-END TEST 0,0 UIC RETURN ;RETURN TO CALLING ROUTINE ; ; LOCTT: $IF ;-TEST TTNUM = 0 MOV TTNUM,R5 ;-TT # TO R5 MUL NUM5B,R5 ;-MULTIPLY TT# BY 5 SUB NUM5B,R5 ;-SUB 5 FROM R5 MOV #4.,R3 ;-LOOP ITERATIONS $WHILE ;--LOOP CONTROL MOVB ASTER,TTDFL(R5) ;--MOVE ASTERISKS TO TTDFL+INDEX INC R5 ;--INCREMENT R5 DEC R3 ;--DECREMENT R3 $END ;--END LOOP MOVE ASTER MOVB SPACE,TTDFL(R5) ;-SPACE TO OUTPUT LINE MOV TTNUM,R5 ;-TT # TO R5 MUL BTWO,R5 ;-MULTIPLY BY TWO SUB BTWO,R5 ;-SUB TWO FROM R5 ADD NUM5B,ACCTIM(R5) ;-ADD 5 TO ACCTIM+INDEX $END ;-END TEST TTNUM = 0 RETURN ;RETURN TO CALLING ROUTINE .PAGE .SBTTL UIC RPT PRINT ROUTINE UICPRT: MOV #UICHLD,R5 ;HOLD ADDR TO R5 $WHILE ;-LOOP CONTROL MOV #130.,R4 ;-LOOP ITERATIONS MOV #UICL,R3 ;-ADDR TO R3 CALL CLRALL ;-CLEAR UICL MOV #13.,R1 ;-LOOP ITERATIONS MOV #UICL,R2 ;-ADDR TO R2 $WHILE ;--LOOP CONTROL CALL SMLCON ;--CONVERSION ROUTINE INC TABLCT ;--ADD 1 TO TABLCT $IF ;---TEST FOR END OF TABLE CLR R1 ;---CLEAR R1 LOOP CONTROL $END ;---END TEST END OF TABLE $END ;--END INNER LOOP PUT$ #REPORT,#DETAL2 ;-WRITE DETAIL LINE $END ;-END OUTER LOOP RETURN ;RETURN TO CALLING ROUTINE ; ; .END MAIN ;END THE PROGRAM