.NLIST .TITLE MACROS TO GENERATE STATE AND KEYWORD TABLES ; VERSION 0006 ; ; COPYRIGHT (C) 1975, DIGITAL EQUIPMENT CORP., MAYNARD, MASS. ; ; THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USE ; ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION ; OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT ; AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC. ; ; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT ; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL ; EQUIPMENT CORPORATION. ; ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY ; OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. ; ; ANDREW C. GOLDSTEIN 12 JUN 75 21:45 ; INITIALIZE TABLE GENERATION - CALL ONCE AT START OF EACH ; FINITE STATE MACHINE DESCRIPTION. USER MUST SUPPLY LABELS ; FOR THE STATE AND KEYWORD TABLES. .MACRO ISTAT$ STTBL,KEYTBL .MCALL MTRAN$ .IF DF $RONLY .PSECT $STATE,D,RO .IFF .PSECT $STATE,D .ENDC STTBL:: .IF DF $RONLY .PSECT $KTAB,D,RO .IFF .PSECT $KTAB,D .ENDC KEYTBL:: .IF DF $RONLY .PSECT $KSTR,D,RO .IFF .PSECT $KSTR,D .ENDC $$$KEY = -1 $$$FLG = -1 $EXIT = 0 $LAMDA = 300 $NUMBR = 302 $STRNG = 304 $BLANK = 306 $SUBXP = 310 $EOS = 312 $DNUMB = 314 $RAD50 = 316 $ANY = 320 $ALPHA = 322 $DIGIT = 324 .PSECT .ENDM ISTAT$ ; DECLARE A STATE .MACRO STATE$ LABEL .PSECT $STATE $$$FLG = $$$FLG!200 MTRAN$ .IF NB LABEL LABEL: .ENDC $$$FLG = -1 .PSECT .ENDM STATE$ ; SPECIFY A STATE TRANSITION .MACRO TRAN$ TYPE,LABEL,ACTION,MASK,ADDR .PSECT $STATE MTRAN$ .IF NB ACTION $$$FLG = $$$FLG!2 .MACRO $$$ACT .WORD ACTION .ENDM $$$ACT .ENDC .IF NB MASK $$$FLG = $$$FLG!14 .IF B ADDR .ERROR "MASK ADDRESS NOT PRESENT" .ENDC .MACRO $$$BIT .WORD MASK,ADDR .ENDM $$$BIT .ENDC .IF NB LABEL $$$FLG = $$$FLG!20 $$$STA = LABEL .ENDC .IRPC X, .IF IDN ,<"> .PSECT $KSTR $$$TMP = . .ASCII TYPE<377> .PSECT $KTAB .WORD $$$TMP .MACRO $$$TYP .BYTE $$$KEY!200 .ENDM $$$TYP $$$KEY = $$$KEY+1 .IF GT $$$KEY-63. .ERROR "TOO MANY KEYWORDS" .ENDC .MEXIT .ENDC .IF IDN , $$$FLG = $$$FLG!1 .MACRO $$$EXT .WORD 0'TYPE .ENDM $$$EXT .MACRO $$$TYP .BYTE $SUBXP .ENDM $$$TYP .MEXIT .ENDC .MACRO $$$TYP .BYTE TYPE .ENDM $$$TYP .MEXIT .ENDM .PSECT .ENDM TRAN$ ; OUTPUT LAST TRANSITION ENTRY .MACRO MTRAN$ .PSECT $STATE .IF EQ $$$FLG+1 $$$FLG = 0 .MEXIT .ENDC $$$TYP .BYTE $$$FLG .IF NE $$$FLG&1 $$$EXT .ENDC .IF NE $$$FLG&2 $$$ACT .ENDC .IF NE $$$FLG&4 $$$BIT .ENDC .IF NE $$$FLG&20 .WORD $$$STA .IFF .IF EQ $$$FLG&200 .ERROR "BAD DEFAULT TRANSITION" .ENDC .ENDC $$$FLG = 0 .ENDM MTRAN$ .LIST