.TITLE LOGCL - GET AND PARSE COMMAND LINE .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: GET AND PARSE THE COMMAND LINE. ; ; INPUT: ; ; COMMAND LINE OF THE FORM: ; ; LOG LOGFILE=TERMINAL ; ; OUTPUT: ; ; PARBUF IS FILLED WITH PARSED LOG FILE DATA ; LOG FILE FNB IS FILLED IN ; TTUCB = A(UCB OF TERMINAL TO BE LOGGED) ; .PAGE ; MACRO CALLS AND SYSTEM DEFINITIONS ; .MCALL DIR$,MSGN$S,EXIT$S,ALUN$S .MCALL QIOSY$,TCBDF$,UCBDF$,NBOF$L,FDOF$L,FCSBT$ .MCALL HDRDF$ QIOSY$ ;DEFINE QIO SYMBOLS TCBDF$ ;DEFINE TCB OFFSETS UCBDF$ ;DEFINE UCB OFFSETS HDRDF$ ;DEFINE TASK HEADER OFFSETS FDOF$L ;DEFINE FDB OFFSETS NBOF$L ;DEFINE FNB OFFSETS FCSBT$ ;DEFINE FCS BITS .PAGE $LOGCL::MOV #MCRLIN+2,R0 ;R0 = A(COMMAND POSITION IN BUFFER) DIR$ #MCRLIN ;TRY TO GET MCR COMMAND LINE BCC 1100$ ;IF CC, WE GOT ONE - GO PARSE IT 1000$: MSGN$S PRMT,0,,MCRLIN+2,79.,ABORT ;PROMMPT MOV #MCRLIN+2,R0 ;R0 = A(COMMAND POSITION IN BUFFER) CMPB #IE.EOF,$TIOSB ;CTRL/Z ? BNE 1200$ ;IF NE, NO - CONTINUE EXIT$S ;EXIT 1100$: TSTB (R0) ;EOL ? BEQ 1200$ ;IF EQ, YES - NOTHING TO PARSE CMPB #' ,(R0)+ ;BLANK ? BNE 1100$ ;IF NE, NO - KEEP LOOKING 1200$: MOV #PARBUF,R1 ;R1 = A(PARSE BUFFER) MOV #DEFBUF,R2 ;R2 = A(DEFAULTS) MOV #8.,R3 ;R3 = COUNT 1300$: MOV (R2)+,(R1)+ ;COPY DEFAULTS SOB R3,1300$ ;LOOP UNTIL DONE MOV #PARBUF,R1 ;R1 = A(PARSE BUFFER) TSTB (R0) ;ANYTHING TO PARSE? BEQ 1500$ ;IF EQ, NO - USE ALL DEFAULTS CALL $PARFL ;PARSE THE LOG FILE SPECIFICATION BCC 1500$ ;IF CC, NO ERRORS - CONTINUE 1400$: MSGN$S PFX,3,M002,,,ABORT ;SYNTAX ERROR BR 1000$ ;FORCE PROMPT 1500$: CMPB #'=,(R0)+ ;WAS TERMINATOR AN "=" ? BEQ 1700$ ;IF EQ, YES TSTB -1(R0) ;WAS IT EOL? BEQ 1600$ ;IF EQ, YES - USE DEFAULT TSTB (R0) ;MIGHT STILL BE EOL BNE 1400$ ;IF NE, NO - SYNTAX ERROR CMPB #15,-1(R0) ;PRECEEDED BY CR ? BEQ 1600$ ;IF EQ, YES - OK USE DEFAULT CMPB #33,-1(R0) ;OR ESC ? BNE 1400$ ;IF NE, NO - SYNTAX ERROR 1600$: MOV $TKTCB,R1 ;R1 = A(MY TCB) MOV T.UCB(R1),R1 ;R1 = A(MY TI: UCB) BR 1900$ ;CONTIINUE 1700$: TSTB (R0) ;EOL ? BEQ 1600$ ;IF EQ, YES - USE DEFAULT MOV #TTWK,R3 ;R3 = A(PARAMETER AREA) CALL $FDLOG ;FIND THE TERMINAL UCB OR LCB BCC 1850$ ;IF CC, NO ERRORS TST R3 ;SYNTAX ERROR ? BEQ 1400$ ;IF EQ, YES - GO PRINT MESSAGE 1800$: MSGN$S PFX,3,M003,,,ABORT ;INVALID DEVICE BR 1000$ ;FORCE PROMPT 1850$: CMP #"TI,TTWK ;IS DEVICE TI: BNE 1900$ ;IF NE, NO - CONTINUE TST TTWK+2 ;IS IT TI0: ? BEQ 1600$ ;IF EQ, YES - GO FIND UCB 1900$: CALL $SWSTK,2100$ ;SWITCH TO SYSTEM STACK 2000$: MOV U.RED(R1),R1 ;FOLLOW REDIRECT CHAIN CMP U.RED(R1),R1 ;END OF CHAIN ? BNE 2000$ ;IF NE, NO - CONTINUE SEARCH MOV R1,TTUCB ;SAVE A(TERMINAL UCB) RETURN ;RETURN TO USER STATE 2100$: MOV TTUCB,R1 ;R1 = A(TERMINAL UCB) BIT #DV.TTY,U.CW1(R1) ;VALID DEVICE BEQ 1800$ ;IF EQ, NO BIT #ANYWC,PARFLG ;VALID LOG FILE NAME BEQ 2200$ ;IF EQ, YES MSGN$S PFX,3,M004,,,ABORT ;INVALID LOG FILE SPECIFICATION JMP 1000$ ;FORCE PROMPT 2200$: ALUN$S #2,PARDEV,PARUN ;ASSIGN LUN 2 RO LOG DEVICE BCC 2300$ ;IF CC, LUN ASSIGNED MSGN$S PFX,3,M005,,,ABORT ;INVALID LOG DEVICE JMP 1000$ ;FORCE PROMPT 2300$: MOV PARDEV,LFNB+N.DVNM ;SET UP FILE NAME BLOCK MOV PARUN,LFNB+N.UNIT CLR LFNB+N.DID CLR LFNB+N.DID+2 CLR LFNB+N.DID+4 MOV #2,R2 ;R2 = LUN MOV PARUIC,R0 ;R0 = PARSED UIC BIT #NB.DIR,PARFLG ;WAS DIRECTORY SPECIFIED? BNE 2350$ ;IF EQ, NO MOV $HEADR,R0 ;R0 = A(MY TASK HEADER) MOV H.CUIC(R0),R0 ;R0 = CURRENT UIC 2350$: MOV #LFNB,R1 ;R1 = A(FNB) CALL $FNDIR ;FIND THE DIRECTORY BCC 2400$ ;IF CC, DIRECTORY FOUND MSGN$S PFX,3,M006,,,ABORT ;ERROR FINDING DIRECTORY JMP 1000$ ;FORCE PROMPT 2400$: MOV #LFNB,R0 ;R0 = A(FNB) CLR (R0)+ ;COMPLETE FNB CLR (R0)+ CLR (R0)+ MOV #PARFNM,R1 ;R1 = A(PARSED FILE NAME) MOV #6,R2 ;R2 = COUNT 2500$: MOV (R1)+,(R0)+ ;COPY SOB R2,2500$ ;LOOP UNTIL DONE CLR (R0)+ RETURN ;RETURN TO CALLER .END