; PARSER STATE TABLE FOR NETSPEC UTILITY ; NETSPEC FORMAT: ; NETSPEC[/ALL/SAMEPASSWORD] [NODE1 NODE2...NODE8] $TPADEF ; DEFINE TPA OFFSETS $INIT_STATE PARSE_STATE,PARSE_KEY $STATE START $TRAN '/',QUALIFIERS $TRAN TPA$_STRING, START, MATCHNODE $TRAN TPA$_EOS,TPA$_EXIT $STATE QUALIFIERS $TRAN 'ALL', START, ALLNODES $TRAN 'SAMEPASSWORD', START, SAMEPASS $END_STATE ; BIT MASKS FOR SWITCHES ALL = ^X1FFF SAME = ^X80000000 KEYVALUE: .LONG 0 ; KEY TABLE FOR NODE NAMES KEYTABLE:: .LONG MAXNODES*2 ; LONGWORD COUNT OF TABLE .LONG NODENAMES ; ADDR OF 1ST NODE NAME .LONG 1 ; BIT MASK FOR NODE .LONG NODENAMES+ .LONG 2 .LONG NODENAMES+ .LONG 4 .LONG NODENAMES+ .LONG 8 .LONG NODENAMES+ .LONG ^X10 .LONG NODENAMES+ .LONG ^X20 .LONG NODENAMES+ .LONG ^X40 .LONG NODENAMES+ .LONG ^X80 .LONG NODENAMES+ .LONG ^X100 .LONG NODENAMES+ .LONG ^X200 .LONG NODENAMES+ .LONG ^X400 .LONG NODENAMES+ .LONG ^X800 .LONG NODENAMES+ .LONG ^X1000 .LONG NODENAMES+ .LONG ^X2000 .LONG NODENAMES+ .LONG ^X4000 .LONG NODENAMES+ .LONG ^X8000 .LONG NODENAMES+ .LONG ^X10000 .LONG NODENAMES+ .LONG ^X20000 .LONG NODENAMES+ .LONG ^X40000 .LONG NODENAMES+ .LONG ^X80000 ENDTABLE: ; ; ACTION ROUTINES ; .ENTRY ALLNODES,^M<> MOVAL KEYTABLE+4,R0 10$: MOVL (R0)+,R1 TSTB 1(R1) BEQL 20$ BISL (R0),NODEMASK 20$: TSTL (R0)+ CMPL R0,#ENDTABLE BNEQ 10$ MOVL #1,R0 RET .ENTRY SAMEPASS,^M<> BISL2 #SAME,NODEMASK RET .ENTRY MATCHNODE,^M<> PUSHAL KEYVALUE PUSHAL KEYTABLE MOVL AP,R0 ADDL2 #TPA$L_TOKENCNT,R0 PUSHL R0 CALLS #3,G^LIB$LOOKUP_KEY BLBC R0,MATCHRET BISL2 KEYVALUE,NODEMASK MATCHRET: RET .END