WHOCSI - WHO COMMAND PARSER MACRO M1113 11-APR-80 13:03 PAGE 4 1 .TITLE WHOCSI - WHO COMMAND PARSER 2 .IDENT /V01/ 3 .ENABL LC 4 ;+ 5 ; WRITTEN BY: GARY L. MAXWELL 6 ; 29-MAR-80 7 ; OFFICE OF EARTHQUAKE STUDIES 8 ; U.S. GEOLOGICAL SURVEY 9 ; 345 MIDDLEFIELD ROAD 10 ; MAIL STOP 77 11 ; MENLO PARK, CALIFORNIA 94025 12 ; 13 ; ** WHOCSI ** 14 ; 15 ; THIS MODULE PARSES THE COMMAND LINE FOR WHO AND SETS APPROPRIATE 16 ; BITS IN THE $FLAG WORD FOR PROCESSING BY WHO. 17 ; 18 ; NO RETURN IS MADE FROM THIS MODULE IF A SYNTAX ERROR IS DETECTED. 19 ;- 20 21 .MCALL PMSG,ERROR 22 .MCALL ISTAT$,STATE$,TRAN$ 23 ;+ 24 ; LOCAL SYMBOLS 25 ;- 26 000015 CR = 15 ; CARRIAGE RETURN 27 000012 LF = 12 ; LINE FEED 28 000040 SPACE = <' > ; SPACE CHAR 29 30 .NLIST BEX 31 000000 015 HLPBUF: .BYTE 32 000001 127 110 117 .ASCII ^WHO Commands --^ 33 000023 040 040 040 .ASCII ^ >WHO^ 34 000036 154 151 163 .ASCII ^lists the terminal IDs, user names and UICs of all logged on users,^ 35 000141 015 012 .BYTE , 36 000143 141 156 144 .ASCII ^and the names of the active tasks owned by each user.^ 37 000230 015 012 .BYTE , 38 000232 123 164 141 .ASCII ^Status codes which precede tasknames are:^ 39 000303 015 012 .BYTE , 40 000305 040 040 040 .ASCII ^ Task executing ? Terminal input pending^ 41 000401 040 040 040 .ASCII ^ % Task stopped * I/O pending^ 42 000462 040 040 040 .ASCII ^ / Task checkpointed $ Task suspended^ 43 000546 040 040 040 .ASCII ^ # Waitfor in progress^ 44 000605 015 012 012 .BYTE ,, 45 000610 040 040 040 .ASCII ^ >WHO last-name -or- >WHO ggg,mmm -or- ^ 46 000672 076 127 110 .ASCII ^>WHO [ggg,mmm]^ 47 000713 143 141 165 .ASCII ^causes a search in the system account file for the user's UIC if^ 48 001013 015 012 .BYTE , 49 001015 047 154 141 .ASCII ^'last-name' is specified; otherwise, all user names matching the^ 50 001115 015 012 .BYTE , 51 001117 125 111 103 .ASCII ^UIC [ggg,mmm] are matched. The most recent logon date and time^ 52 001215 015 012 141 .ASCII ^are also displayed.^ 53 001242 015 012 012 .BYTE ,, 54 001245 040 040 040 .ASCII ^ >WHO /HE^ 55 001264 160 162 151 .ASCII ^prints this message.^ 56 001312 HLPLEN = . - HLPBUF 57 .EVEN WHOCSI - WHO COMMAND PARSER MACRO M1113 11-APR-80 13:03 PAGE 4-1 58 .LIST BEX WHOCSI - WHO COMMAND PARSER MACRO M1113 11-APR-80 13:03 PAGE 5 60 ;+ 61 ; WHOCSI - PARSING ROUTINE 62 ; 63 ; INPUTS: R4 POINTS TO THE BEGINNING OF THE COMMAND LINE 64 ; R3 CONTAINS THE BYTE COUNT OF THE COMMAND LINE 65 ; 66 ; OUTPUTS: $FLAG INDICATES THE TYPE OF WHO COMMAND GIVEN. 67 ; IF $FLAG IS CLEAR, THEN "WHO /HE" WAS ENTERED, AND 68 ; A HELP MESSAGE WAS PRINTED. 69 ; 70 ; IF 'WHO LAST-NAME' WAS ENTERED, THEN THE $NAME BUFFER 71 ; CONTAINS "LAST-NAME". 72 ; 73 ; IF 'WHO UIC' WAS ENTERED, THEN $UIC CONTAINS THE BINARY 74 ; GROUP AND MEMBER SPECIFICATIONS GIVEN. 75 ;- 76 77 001312 WHOCSI:: 78 001312 005067 000000G CLR $FLAG ; CLEAR FLAG WORD 79 001316 005001 CLR R1 ; IGNORE BLANKS IN TPARS 80 001320 012705 000000' MOV #WHOST,R5 ; POINT TO FIRST STATE 81 001324 012702 000000' MOV #WHOKTB,R2 ; POINT TO KEY TABLE 82 001330 CALL .TPARS ; CALL THE PARSER 83 001334 103401 BCS SYNERR ; EXIT IF SYNTAX ERROR 84 001336 RETURN ; ELSE RETURN WITH RESULTS 85 86 001340 SYNERR: ERROR < WHO -- Syntax error> WHOCSI - WHO COMMAND PARSER MACRO M1113 11-APR-80 13:03 PAGE 6 88 ;+ 89 ; TPARS STATE TABLES 90 ;- 91 001402 ISTAT$ WHOSTB,WHOKTB 92 93 001402 STATE$ WHOST 94 001402 TRAN$ "WHO" 95 96 001402 STATE$ 97 001402 TRAN$ <'[>,WBRK 98 001402 TRAN$ <'/>,WSWIT 99 001402 TRAN$ $EOS,$EXIT,,WH.DEF,$FLAG 100 001402 TRAN$ !UIC,WHEX,,WH.UIC,$FLAG 101 001402 TRAN$ $STRNG,WHEX,NAMCMD,WH.NAM,$FLAG 102 103 001402 STATE$ WBRK 104 001402 TRAN$ !UIC,,,WH.UIC,$FLAG 105 106 001402 STATE$ 107 001402 TRAN$ <']>,WHEX 108 109 001402 STATE$ UIC 110 001402 TRAN$ $NUMBR,,GTGRP 111 112 001402 STATE$ 113 001402 TRAN$ <',> 114 115 001402 STATE$ 116 001402 TRAN$ $NUMBR,$EXIT,GTMEM 117 118 001402 STATE$ WSWIT 119 001402 TRAN$ "HE",WHEX,HLPCMD 120 001402 TRAN$ "HEL",WHEX,HLPCMD 121 001402 TRAN$ "HELP",WHEX,HLPCMD 122 123 001402 STATE$ WHEX 124 001402 TRAN$ $EOS,$EXIT 125 126 001402 STATE$ 127 ;+ 128 ; END OF STATE TABLES 129 ;- WHOCSI - WHO COMMAND PARSER MACRO M1113 11-APR-80 13:03 PAGE 7 131 ;+ 132 ; PARSING ACTION ROUTINES 133 ;- 134 135 001402 016700 000000G NAMCMD: MOV .PSTPT,R0 ; GET ADDRESS OF NAME 136 001406 016701 000000G MOV .PSTCN,R1 ; GET BYTE LENGTH OF NAME 137 001412 012702 000000G MOV #$NAME,R2 ; POINT TO NAME BUFFER 138 001416 022701 000000G CMP #$NAMSZ,R1 ; IS INPUT LONGER THAN BUFFER? 139 001422 002002 BGE 10$ ; NO, PROCEED 140 001424 012701 000000G MOV #$NAMSZ,R1 ; ELSE TRUNCATE TO BUFFER SIZE 141 142 001430 112022 10$: MOVB (R0)+,(R2)+ ; TRANSFER A BYTE 143 001432 077102 SOB R1,10$ ; DO UNTIL THROUGH 144 001434 105012 CLRB (R2) ; CLEAR TRAILING BYTE 145 001436 RETURN ; RETURN TO PARSER 146 147 001440 012700 000000G GTGRP: MOV #$UGRP,R0 ; POINT TO SAVE BYTE 148 001444 000402 BR GTNUM ; AND GO GET GROUP SPEC 149 150 001446 012700 000000G GTMEM: MOV #$UMEM,R0 ; POINT BYTE FOR MEMBER 151 152 001452 005767 000000G GTNUM: TST .PNUMH ; HIGH ORDER SHOULD BE CLEAR 153 001456 001006 BNE 10$ ; IT ISN'T - REJECT 154 001460 105767 000001G TSTB .PNUMB+1 ; SHOULD HAVE LOW ORDER BYTE ONLY 155 001464 001003 BNE 10$ ; WE DON'T - REJECT 156 001466 116710 000000G MOVB .PNUMB,(R0) ; ELSE MOVE THE BINARY VALUE 157 001472 001002 BNE 20$ ; OK IF VALUE WAS NON-ZERO 158 001474 062716 000002 10$: ADD #2,(SP) ; ELSE REJECT THE TRANSITION 159 001500 20$: RETURN ; AND RETURN 160 161 001502 HLPCMD: PMSG #HLPBUF,#HLPLEN,#SPACE ; PRINT HELP MESSAGE 162 001536 RETURN ; AND RETURN 163 164 000001 .END WHOCSI - WHO COMMAND PARSER MACRO M1113 11-APR-80 13:03 PAGE 7-1 SYMBOL TABLE A$$CHK= 000000 G$$TPP= 000000 NAMCMD 001402R T$$BTW= 000000 WHEX 000120R 003 A$$CPS= 000000 G$$TSS= 000000 N$$LDV= 000001 T$$BUF= 000000 WHOCSI 001312RG A$$NSI= 000000 G$$TTK= 000000 N$$MOV= 000041 T$$CCA= 000000 WHOKTB 000000RG 004 A$$PRI= 000000 HLPBUF 000000R N$$UMR= 000024 T$$CCO= 000000 WHOST 000000R 003 A$$TRP= 000000 HLPCMD 001502R P$$D70= 000000 T$$CPW= 000000 WHOSTB 000000RG 003 CR = 000015 HLPLEN= 001312 P$$GMX= 000000 T$$CTR= 000000 WH.DEF= ****** GX C$$CDA= 000004 H$$RTZ= 000074 P$$LAS= 000000 T$$CUP= 000000 WH.NAM= ****** GX C$$CKP= 000000 I$$RAR= 000000 P$$OFF= 000000 T$$ESC= 000000 WH.UIC= ****** GX C$$CSR= 172440 I$$RDN= 000000 P$$P45= 000000 T$$GMC= 000000 WSWIT 000076R 003 C$$INT= 000000 K$$CNT= 177546 P$$RFL= 000000 T$$GTS= 000000 $ALPHA= 000322 C$$ORE= 002000 K$$CSR= 177546 P$$RTY= 000000 T$$HFF= 000000 $ANY = 000320 C$$RSH= 177564 K$$IEN= 000115 P$$SRF= 000000 T$$HLD= 000000 $BLANK= 000306 C$$RUN= 000000 K$$LDC= 000001 P.MSGW= ****** GX T$$J16= 000001 $DIGIT= 000324 C$$SMT= 000000 K$$TPS= 000074 Q$$OPT= 000001 T$$KMG= 000000 $DNUMB= 000314 C$$TTY= 177564 LD$DB = 000000 R$$EXV= 000000 T$$LWC= 000000 $EOS = 000312 D$$E11= 000001 LD$DR = 000000 R$$JPO= 000000 T$$RED= 000000 $EXIT = 000000 D$$IAG= 000000 LD$DY = 000000 R$$JP1= 000001 T$$RNE= 000000 $FLAG = ****** GX D$$ISK= 000000 LD$LP = 000000 R$$LKL= 000001 T$$RPR= 000000 $LAMDA= 000300 D$$L11= 000001 LD$MM = 000000 R$$MOF= 000000 T$$RST= 000000 $NAME = ****** GX D$$SHF= 000000 LD$TT = 000000 R$$M11= 000001 T$$RUB= 000000 $NAMSZ= ****** GX D$$WCH= 000000 LD$XL = 000000 R$$NDC= 000005 T$$SMC= 000000 $NUMBR= 000302 D$$YNC= 000000 LF = 000012 R$$NDH= 000226 T$$SYN= 000000 $RAD50= 000316 D$$YNM= 000000 L$$ASG= 000000 R$$NDL= 000012 T$$TRW= 000000 $STRNG= 000304 D$$ZMD= 000000 L$$DRV= 000000 R$$SND= 000000 T$$UTB= 000000 $SUBXP= 000310 D$$Z11= 000001 L$$PTO= 000036 R$$SOB= 000000 T$$UTO= 000170 $UGRP = ****** GX E$$DVC= 000000 L$$P11= 000002 R$$X21= 000001 T$$VBF= 000000 $UMEM = ****** GX E$$NSI= 000000 MSGADR= 000000R 002 R$$11M= 000000 T$$ZAN= 012430 $$$FLG= 177777 E$$PER= 000000 MSGLEN= 000024 SPACE = 000040 T$$30P= 000000 $$$KEY= 000003 E$$XPR= 000000 M$$CRB= 000124 SYNERR 001340R UIC 000062R 003 $$$STA= 000000 F$$LPP= 000000 M$$CRX= 000000 S$$ECC= 000000 U$$MHI= 000000 $$$TMP= 000013R 005 F$$LVL= 000001 M$$EXT= 000000 S$$TOP= 000000 U$$MLO= 120000 .PNUMB= ****** GX GTGRP 001440R M$$FCS= 000000 S$$WPC= 000036 U$$MRN= 170224 .PNUMH= ****** GX GTMEM 001446R M$$MGE= 000000 S$$WPR= 000002 V$$CTR= 000400 .PSTCN= ****** GX GTNUM 001452R M$$MUP= 000000 S$$YSZ= 010000 V$$RSN= 000032 .PSTPT= ****** GX G$$EFN= 000000 M$$OVR= 000000 T$$ACR= 000000 WBRK 000046R 003 .TPARS= ****** GX . ABS. 000000 000 001540 001 MSGTXT 000024 002 $STATE 000124 003 $KTAB 000010 004 $KSTR 000020 005 ERRORS DETECTED: 0 VIRTUAL MEMORY USED: 4663 WORDS ( 19 PAGES) DYNAMIC MEMORY: 5990 WORDS ( 23 PAGES) ELAPSED TIME: 00:00:27 WHOCSI,WHOCSI/-SP=[1,1]EXEMC/ML,USERMAC/ML,[200,200]RSXMC/PA:1,[201,104]WHOCSI