.TITLE DSMPR2 - STATE TABLE FOR DSM COMMAND LINE ; ; AUTHOR: LEN ; WRITTEN: 01/30/79 ; ; REVISED: ; ; ; THIS IS THE STATE TABLE SPECIFICATIONS FOR PARSING ; THE DSM COMMAND LINE ; .MCALL ISTAT$, STATE$, TRAN$ .NLIST ME ; .GLOBL DSMPR2 ; ; FLAG BITS FOR DEV/UIC PRESENCE AND WILDCARDS ; DS.DEV==1 DS.UIC==2 DS.WGR==4 DS.WOW==10 DS.EOL==20 DS.PLU==40 DS.EQU==100 ; $CR=15 ; COMMON AREA WITH FORTRAN CALLING ROUTINE ; .PSECT DSMCLP,RW,D,OVR,GBL $UDEV: .WORD $UNIT: .WORD $UIC: .WORD $TOT: .WORD .WORD ; ; DEFINE BITS TO TEST ; $FLAGS: .WORD IDSDEV: .WORD DS.DEV IDSUIC: .WORD DS.UIC IDSWGR: .WORD DS.WGR IDSWOW: .WORD DS.WOW IDSEOL: .WORD DS.EOL IDSPLU: .WORD DS.PLU IDSEQU: .WORD DS.EQU ; ; ; BLANK SUPPRESS, INDICATED BY R1 ; ISTAT$ DSMSTB,DSMKTB ; ; READ OVER COMMAND NAME ; STATE$ DSMPR2 TRAN$ "DSX",DEV0 TRAN$ $LAMDA ; ; CHECK FOR DEVICE AND UNIT NUMBER ; STATE$ DEV0 TRAN$ $ALPHA,SD2,SETDV1,DS.DEV,$FLAGS TRAN$ $LAMDA,RUIC ; ; SECOND CHARACTER OF DEVICE NAME ; STATE$ SD2 TRAN$ $ALPHA,,SETDV2 ; ; UNIT NUMBER ; STATE$ TRAN$ $NUMBR,DEV1,SETUNT ; ; CHECK FOR ':' TO COMPLETE DEVICE/UNIT SCAN ; STATE$ DEV1 TRAN$ ': ; ; ; NOW CHECK THE UIC ; ; STATE$ RUIC TRAN$ '[,GNUM TRAN$ $CR,$EXIT,,DS.EOL,$FLAGS ; ; GROUP CODE ; STATE$ GNUM TRAN$ $NUMBR,COMMA,SETGN TRAN$ '*,,,DS.WGR,$FLAGS ; ; COMMA IS NEXT ; STATE$ COMMA TRAN$ <',> ; ; OWNER CODE ; STATE$ TRAN$ $NUMBR,RBRKT,SETPN TRAN$ '*,,,DS.WOW,$FLAGS ; ; CLOSING RIGHT BRACKET ; STATE$ RBRKT TRAN$ '],,,DS.UIC,$FLAGS ; ; CHECK FOR ON MCR LINE OR + OR = OF BLOCKS ALLOWED FORMULA. ; STATE$ TRAN$ $CR,$EXIT,,DS.EOL,$FLAGS TRAN$ '+,$EXIT,,DS.PLU,$FLAGS TRAN$ '= ; ; MUST HAVE BEEN THE BLOCK EXPRESSION WITH =, ; CHECK FOR NUMBER OF BLOCKS ; STATE$ TRAN$ $DNUMB,,SETTOT,DS.EQU,$FLAGS ; ; CHECK FOR END OF LINE (EOL) NOW ; STATE$ TRAN$ $EOS,$EXIT ; ; LAST STATE$ NEEDED, REFER TO I/O OPERATIONS MANUAL, .TPARS ; STATE$ ; ; ; ACTION ROUTINES FOR SPECIFIC TRANSITIONS ; ; SETDV1::MOVB .PCHAR,$UDEV RETURN ; SETDV2::MOVB .PCHAR,$UDEV+1 RETURN ; SETUNT::MOV .PNUMB,$UNIT RETURN ; ; GROUP NUMBER ; SETGN:: MOVB .PNUMB,$UIC+1 BR TSTPPN ; ; OWNER NUMBER ; SETPN:: MOVB .PNUMB,$UIC TSTPPN: TST .PNUMH ; CHECK FOR ZERO HIGH ORDER BNE 10$ TSTB .PNUMB+1 ; CHECK FOR BYTE VALUE BEQ 20$ 10$: ADD #2,(SP) ; BAD VALUE - REJECT TRANSITION 20$: RETURN ; ; GET NUMBER OF BLOCKS ALLOWED ; SETTOT::MOV .PNUMB,$TOT MOV .PNUMH,$TOT+2 TST .PNUMH BGE 30$ ADD #2,(SP) 30$: RETURN ; .END