.TITLE LOG - TERMINAL LOGGER .IDENT /01.00/ .LIST MEB ; ; AUTHOR: H. L. COLEMAN ; MILLIKEN AND COMPANY ; P. O. BOX 1926 ; MAIL STOP M-103 ; SPARTANBURG, S. C. 29304 ; (803)573-2556 ; ; VERSION: 01.00 ; ; DATE: 30-MAR-78 ; ; MODIFICATIONS: ; ; FUNCTION: LOG ALL DATA READ FROM OR WRITTEN TO A TERMINAL ON A ; LOG FILE. ; ; INPUT: ; ; COMMAND LINE OF THE FORM: ; ; LOG LOGFIL=TERMINAL ; ; LOG BUFFERS FROM THE TERMINAL DRIVER. ; ; OUTPUT: ; ; FILE CONTAINING FORMATTED LOG OF ALL TRANSACTIONS ON THE TERMINAL. ; .PAGE ; MACRO CALLS AND SYSTEM DEFINITIONS ; .MCALL FINIT$,MSGN$S,EXIT$S,OFNB$W,WTSE$S,CLEF$S .MCALL TCBDF$,UCBDF$,FDOF$L TCBDF$ ;DEFINE TCB OFFSETS UCBDF$ ;DEFINE UCB OFFSETS FDOF$L ;DEFINE FDB OFFSETS .PAGE LOG:: FINIT$ ;INITILIZE FCS MOV $TKTCB,R1 ;R1 = A(MY TCB) MOV T.UCB(R1),R0 ;R0 = A(TI: UCB) BIT #U2.PRV,U.CW2(R0) ;PRIVLEDGED TERMINAL ? BNE 1000$ ;IF NE, YES - CONTINUE MSGN$S PFX,3,M001,,,ABORT ;NOT A PRIVLEDGED TERMINAL EXIT$S ;EXIT 1000$: CALL $LOGCL ;GET AND PARSE COMMAND LINE OFNB$W #LOGFL ;OPEN THE LOG FILE BCC 1100$ ;IF CC, OPEN OK MSGN$S PFX,3,M011,,,ABORT ;LOG FILE OPEN ERROR CALL $LOGER ;PRINT DESCRIPTIVE POOP HALT ;ABORT SO WE CAN SEE DUMP 1100$: MOV TTUCB,R5 ;R5 = A(TERMINAL UCB) MOV R5,R4 ;R4 = A(TERMINAL UCB) ADD #TTLOG+4,R4 ;R4 = A(LOG QUEUE LISTHEAD) CLR (R4) ;INITILIZE LISTHEAD MOV R4,2(R4) MOV R4,LOGLST ;LOGLST = A(LOG QUEUE LISTHEAD) MOV $HEADR,TTLOG+2(R5) ;SET A(MY HEADER) IN UCB MOV $TKTCB,TTLOG(R5) ;SET A(MY TCB) IN UCB ; ; LOGGING NOW ACTIVE FOR THIS TERMINAL !!!!!!!!!!! ; MOV CURBUF,R5 ;R5 = A(CURRENT BUFFER) MOV #512.,R4 ;R4 = BUFFER SIZE MOV #14,R0 ;R0 = FORM FEED CALL $LOGPB ;START AT TOP OF PAGE 1200$: WTSE$S #1 ;WAIT FOR SOMETHING TO DO CLEF$S #1 ;CLEAR THE FLAG 1300$: MOV LOGLST,R0 ;R0 = A(LISTHEAD) CLR LOGBUF ;LOGBUF = 0 CALL $SWSTK,1350$ ;SWITCH TO SYSTEM STACK CALL $QRMVF ;TRY TO REMMOVE A LOG BUFFER BCS 1325$ ;IF CS, QUEUE EMPTY MOV R1,LOGBUF ;STORE A(LOG BUFFER) 1325$: RETURN ;RETURN TO USER STATE 1350$: MOV LOGBUF,R1 ;R1 = A(LOG BUFFER) BNE 1400$ ;IF NE, WE GOT ONE - PROCESS IT TST -4(R0) ;LOGGING STILL ACTIVE ? BNE 1200$ ;IF NE, YES - GO WAIT FOR SOMETHING TO DO CALL $LOGND ;CLOSE THE LOG FILE MSGN$S PFX,0,M010,,,ABORT ;LOGGING ENDED EXIT$S ;EXIT 1400$: TST (R1)+ ;BUMP OVER CHAIN WORD TSTB (R1)+ ;TEST TYPE BNE 1600$ ;IF NE, OUTPUT - GO PROCESS IT CALL $LOGIN ;PROCESS INPUT TYPE 1500$: MOV LOGBUF,R0 ;R0 = A(LOG BUFFER) MOVB 4(R0),R1 ;R1 = DATA LENGTH BIC #177400,R1 ;CLEAR HIGH BYTE ADD #8.,R1 ;ADJUST FOR HEADER AND BIC #3,R1 ;ROUND UP TO 4 BYTE BOUNDRY CALL $DEACB ;DEALLOCATE THE BUFFER BR 1300$ ;GO SEE IF MORE TO DO 1600$: CALL $LOGOU ;PROCESS OUTPUT TYPE BR 1500$ ;GO DEALLOCATE THE BUFFER .PAGE ; ABORT THE TASK ; ABORT:: HALT .END LOG