.TITLE MK$GET_INFO ;---------------------------------------------------------------------- ; ; Routine to get the necessary information ; from a version 3 accounting record ; ;---------------------------------------------------------------------- ; written by: K. Trumbley ; date: March 1984 ; VMS version: V3.x ; ;---------------------------------------------------------------------- ; FORTRAN calling sequence ; ; LOGICAL*1 ACC_REC(256),MK$REC_TYP,STATUS ; C ; C ACC_REC = array containing accounting record ; C MK$REC_TYP = first variable in common area into which this routine ; C will put information extracted from the accounting ; C record. ; C STATUS = .FALSE. on record error ; C ; CALL MK$GET_INFO(ACC_REC,MK$REC_TYP,STATUS) ; ;---------------------------------------------------------------------- ; DEFINITION OF OFFSETS INTO ACCOUNTING COMMON AREA ; ;C****************************************************************************** ;C MK.INC ;C ;C ;C****************************************************************************** ;C ; CHARACTER*12 MK$USR_NAM,MK$QUE_NAM ; LOGICAL*1 MK$NOD_NAM ; CHARACTER*8 MK$USR_ACC,MK$TER_NAM ;C ; LOGICAL*1 MK$REC_TYP,MK$SUB_TYP,MK$CUSTOMR,MK$VERSION ; LOGICAL*1 MK$USR_PKT(256) ;C ; INTEGER*2 MK$USR_GRP,MK$USR_MEM,MK$USR_PKT_LEN ;C ; INTEGER*4 MK$SYS_TIM(2),MK$STA_TIM(2) ;C ; INTEGER*4 MK$VOL_MNT ; & ,MK$PAG_CNT ; & ,MK$CPU_TIM ; & ,MK$DIR_IO,MK$BUF_IO ; & ,MK$PAG_FLT,MK$SYM_TIM ;C ; COMMON/MK$COMMON/ MK$REC_TYP,MK$SUB_TYP,MK$CUSTOMR,MK$VERSION ; & , MK$SYS_TIM,MK$STA_TIM ; & , MK$USR_NAM,MK$NOD_NAM,MK$QUE_NAM ; & , MK$USR_ACC,MK$TER_NAM ; & , MK$USR_GRP,MK$USR_MEM ; & , MK$VOL_MNT ; & , MK$PAG_CNT,MK$SYM_TIM ; & , MK$CPU_TIM ; & , MK$DIR_IO,MK$BUF_IO ; & , MK$PAG_FLT ; & , MK$USR_PKT,MK$USR_PKT_LEN ; MK$REC_TYP=0 MK$SUB_TYP=1 MK$CUSTOMR=2 MK$VERSION=3 MK$SYS_TIM=4 MK$STA_TIM=12 MK$USR_NAM=20 MK$NOD_NAM=32 MK$QUE_NAM=44 MK$USR_ACC=56 MK$TER_NAM=64 MK$USR_GRP=72 MK$USR_MEM=74 MK$VOL_MNT=76 MK$PAG_CNT=80 MK$SYM_TIM=84 MK$CPU_TIM=88 MK$DIR_IO=92 MK$BUF_IO=96 MK$PAG_FLT=100 MK$USR_PKT=104 MK$USR_PKT_LEN=MK$USR_PKT+256 ; ;---------------------------------------------------------------------- ; ; Define all required MACROS ; .MCALL $ACRDEF $ACRDEF ;---------------------------------------------------------------------- ; Define parameter offsets into argument list ; ACC_REC=4 REC_TYP=8 STATUS=12 ;---------------------------------------------------------------------- ; MK$GET_INFO routine ; .PSECT CODE PIC,EXE,NOWRT,LONG MK$GET_INFO:: .WORD ^M ; ; Register usage ; R4 = Common area start address ; R5 = Record address ; R6 = Packet 1 address ; R7 = Packet 2 address ; ; Setup all registers ; MOVL REC_TYP(AP),R4 ; setup common address PUSHR #^M MOVC5 #0,(R5),#0,#MK$USR_PKT_LEN,(R4) POPR #^M MOVL ACC_REC(AP),R5 ; setup record address ADDL3 #12,R5,R6 ; setup Packet 1 address MOVZWL ACR$W_LENGTH(R6),R2 ADDL3 R2,R6,R7 ; setup Packet 2 address BITB #ACR$M_PACKET,ACR$W_TYPE(R5) ; check if really a record BEQL 10$ JMP RECORD_ERR ; exit on record error ; ; Get record type ; 10$: MOVZWL ACR$W_TYPE(R5),R2 ; get record type BICL2 #-ACR$M_TYPE-1,R2 ASHL #-ACR$V_TYPE,R2,R2 MOVB R2,MK$REC_TYP(R4) ; return record type ; ; Get SUB_TYPE ; MOVZWL ACR$W_TYPE(R5),R2 ; get record type BICL2 #-ACR$M_SUBTYPE-1,R2 ASHL #-ACR$V_SUBTYPE,R2,R2 MOVB R2,MK$SUB_TYP(R4) ; ; Get VERSION ; MOVZWL ACR$W_TYPE(R5),R2 ; get record type BICL2 #-ACR$M_VERSION-1,R2 ASHL #-ACR$V_VERSION,R2,R2 MOVB R2,MK$VERSION(R4) ; ; Get CUSTOMER ; MOVZWL ACR$W_TYPE(R5),R2 ; get record type BICL2 #-ACR$M_CUSTOMER-1,R2 ASHL #-ACR$V_CUSTOMER,R2,R2 MOVB R2,MK$CUSTOMR(R4) ; ; Get SYSTEM TIME ; MOVQ ACR$Q_SYSTIME(R5),MK$SYS_TIM(R4) ; ; Return at this point if the record is a - file backward link record ; - file forward link record ; CMPB #ACR$K_FILE_BL,MK$REC_TYP(R4) BNEQ 11$ JMP IGNORE_RECORD 11$: CMPB #ACR$K_FILE_FL,MK$REC_TYP(R4) BNEQ 12$ JMP IGNORE_RECORD 12$: ; ;---------------------------------------------------------------- ; ; ID PACKET HANDLER ; ; Move Process UIC ; MOVW ACR$W_GRP(R6),MK$USR_GRP(R4) MOVW ACR$W_MEM(R6),MK$USR_MEM(R4) ; ; Move USER NAME ; MOVZWL ACR$W_USERNAME(R6),R2 ADDL3 R2,R6,R2 ; address of string MOVZBL (R2)+,R3 ; length of string ADDL3 #MK$USR_NAM,R4,R1 PUSHR #^M MOVC5 R3,(R2),#0,#12,(R1) POPR #^M ; ; Move NODE NAME ; MOVZWL ACR$W_NODENAME(R6),R2 ADDL3 R2,R6,R2 ; address of string MOVZBL (R2)+,R3 ; length of string ADDL3 #MK$NOD_NAM,R4,R1 PUSHR #^M MOVC5 R3,(R2),#0,#12,(R1) POPR #^M ; ; Move QUEUE NAME ; MOVZWL ACR$W_QUEUE(R6),R2 ADDL3 R2,R6,R2 ; address of string MOVZBL (R2)+,R3 ; length of string ADDL3 #MK$QUE_NAM,R4,R1 PUSHR #^M MOVC5 R3,(R2),#0,#12,(R1) POPR #^M ; ; Move ACCOUNT NAME ; MOVZWL ACR$W_ACCOUNT(R6),R2 ADDL3 R2,R6,R2 ; address of string MOVZBL (R2)+,R3 ; length of string ADDL3 #MK$USR_ACC,R4,R1 PUSHR #^M MOVC5 R3,(R2),#0,#8,(R1) POPR #^M ; ; Move TERMINAL NAME ; MOVZWL ACR$W_TERMINAL(R6),R2 ADDL3 R2,R6,R2 ; address of string MOVZBL (R2)+,R3 ; length of string ADDL3 #MK$TER_NAM,R4,R1 PUSHR #^M MOVC5 R3,(R2),#0,#8,(R1) POPR #^M ;---------------------------------------------------------------- ; Check if record type = ACR$K_PRCDEL, IMGDEL, SYSINIT, LOGFAIL ; then the next packet is RESOURCE PACKET. ; else if record type = ACR$K_PRINT then PRINT PACKET ; else if record type = ACR$K_USER then USER PACKET ; CMPB #ACR$K_PRINT,MK$REC_TYP(R4) BNEQ 1$ JMP PRINT_PACKET 1$: CMPB #ACR$K_USER,MK$REC_TYP(R4) BNEQ 2$ JMP USER_PACKET 2$: ; ; RESOURCE PACKET ; ; Move PROCESS START TIME ; MOVQ ACR$Q_LOGIN(R7),MK$STA_TIM(R4) ; ; Move PROCESS CPU TIME ; MOVL ACR$L_CPUTIME(R7),MK$CPU_TIM(R4) ; ; Move PAGE FAULTS ; MOVL ACR$L_FAULTS(R7),MK$PAG_FLT(R4) ; ; Move DIRECT IO ; MOVL ACR$L_DIOCNT(R7),MK$DIR_IO(R4) ; ; Move BUFFERED IO ; MOVL ACR$L_BIOCNT(R7),MK$BUF_IO(R4) ; ; Move VOLUMES MOUNTED ; MOVL ACR$L_VOLUMES(R7),MK$VOL_MNT(R4) JMP SUCCESS_EXIT ;------------------------------------------------------------- ; ; PRINT PACKET ; ; Move SYMBIONT CPU TIME ; PRINT_PACKET: MOVL ACR$L_SYMCPUTIM(R7),MK$SYM_TIM(R4) ; ; Move PAGE COUNT ; MOVL ACR$L_PAGECNT(R7),MK$PAG_CNT(R4) JMP SUCCESS_EXIT ;-------------------------------------------------------------- ; ; USER PACKET ; ; Move USER LENGTH, USER DATA ; USER_PACKET: MOVZBW ACR$T_USER_DATA(R7),MK$USR_PKT_LEN(R4) MOVZBL ACR$T_USER_DATA(R7),R2 ADDL3 #ACR$T_USER_DATA+1,R7,R3 ADDL3 #MK$USR_PKT,R4,R1 PUSHR #^M MOVC5 R2,(R3),#0,#256,(R1) POPR #^M ; ; SUCCESS EXIT ; SUCCESS_EXIT: MOVB #1,@STATUS(AP) ; Set STATUS = .TRUE. RET ; ; Record error has occurred so set status=.FALSE. and return ; IGNORE_RECORD: RECORD_ERR: CLRB @STATUS(AP) ; Set STATUS = .FALSE. RET .END