INTEGER*4 FUNCTION VOCAB(ID,INIT) C LOOK UP ID IN THE VOCABULARY (ATAB) AND RETURN ITS "DEFINITION" (KTAB), OR C -1 IF NOT FOUND. IF INIT IS POSITIVE, THIS IS AN INITIALISATION CALL SETTING C UP A KEYWORD VARIABLE, AND NOT FINDING IT CONSTITUTES A BUG. IT ALSO MEANS C THAT ONLY KTAB VALUES WHICH TAKEN OVER 1000 EQUAL INIT MAY BE CONSIDERED. C (THUS "STEPS", WHICH IS A MOTION VERB AS WELL AS AN OBJECT, MAY BE LOCATED C AS AN OBJECT.) AND IT ALSO MEANS THE KTAB VALUE IS TAKEN MOD 1000. IMPLICIT INTEGER*4 (A-Z) C INTEGER*2 KTAB,ASCVAR COMMON /VOCCOM/KTAB,ATAB,TABSIZ DIMENSION KTAB(300),ATAB(300) HASH=ID DO 1 I=1,TABSIZ IF(KTAB(I).EQ.-1) GOTO 2 IF(INIT.GE.0.AND.KTAB(I)/1000.NE.INIT) GOTO 1 IF(ATAB(I).EQ.HASH) GOTO 3 1 CONTINUE CALL BUG(21) 2 VOCAB=-1 IF(INIT.LT.0) RETURN WRITE(*,100) HASH 100 FORMAT(' KEYWORD = ',A4) CALL BUG(5) 3 VOCAB=KTAB(I) IF(INIT.GE.0) VOCAB=MOD(VOCAB,1000) RETURN END