MODULE››DEFINE› EOL="$9B", INFILE="2",› BUFFLEN="4096"››INT› tmpchar››BYTE ARRAY› idname(40), buffer(BUFFLEN)›››INT FUNC BGetD=*(BYTE ch CARD addr, len)›;Get len (0=0 THEN› c=tmpchar› tmpchar=-1› ELSE› IF bindx=blen THEN› bindx=0› blen=BGetD(INFILE,buffer,BUFFLEN)› IF blen=0 THEN› EOF(INFILE)=1› RETURN(0)› FI› FI› c=buffer(bindx)› bindx==+1› FI›;Added by TMH, 3.27.94›;To uppercase the letter from the›;input stream.›if c >'` and c <'{ then› c==-$20›fi›RETURN(c)›››BYTE FUNC HexDigit(BYTE c)›;Returns a non-zero number if›;c is a legal hex digit.›› IF (c>='A AND c<='F) OR (c>='0 AND c<='9) THEN› RETURN(1)› FI›RETURN(0)›››BYTE FUNC IdChar(BYTE c)›;Returns a non-zero number if›;c is a legal id char (not a digit).›› IF (c='_) OR (c>='A AND c<='Z) OR› (c>='a AND c<='z) THEN› RETURN(1)› FI›RETURN(0)›››PROC ScanId()›;Reads the input stream until an›;identifier is found or the end›;of the file is reached.›BYTE› state, c, idindx›› state=0› idindx=0› idname(0)=0› DO› c=GetChar()› IF EOF(INFILE) THEN› RETURN› ELSE› IF state=0 THEN› IF c='= THEN› state=1› ELSEIF c='* THEN› SCopy(idname,"_MUL")› RETURN› ELSEIF c='/ THEN› SCopy(idname,"_DIV")› RETURN› ELSEIF c='$ THEN› state=2› ELSEIF c='' THEN› state=3› ELSEIF c='" THEN› state=4› ELSEIF c='; THEN› state=6› ELSEIF IdChar(c) THEN› idindx==+1› idname(idindx)=c› state=7› FI› ELSEIF state=1 THEN› IF c<>'* THEN› tmpchar=c› FI› state=0› ELSEIF state=2 THEN› IF HexDigit(c)=0 THEN› tmpchar=c› state=0› FI› ELSEIF state=3 THEN› state=0› ELSEIF state=4 THEN› IF c='" THEN› state=5› FI› ELSEIF state=5 THEN› IF c='" THEN› state=4› ELSE› tmpchar=c› state=0› FI› ELSEIF state=6 THEN› IF c=EOL THEN› state=0› FI› ELSEIF state=7 THEN› IF IdChar(c)<>0 OR HexDigit(c)<>0 THEN› idindx==+1› idname(idindx)=c› ELSE› tmpchar=c› idname(0)=idindx› IF SCompare(idname,"MOD")=0 THEN› SCopy(idname,"_MODOP")› ELSEIF SCompare(idname,"LSH")=0 THEN› SCopy(idname,"_LSHOP")› ELSEIF SCompare(idname,"RSH")=0 THEN› SCopy(idname,"_RSHOP")› FI› RETURN› FI› FI› FI› OD›RETURN›››MODULE››BYTE› errflg››PROC DOS=*()›;Jump to DOS through DOSVEC ($000A)› [$6C $0A $00]›››PROC MyError(BYTE errnum)› BYTE› i›› PrintF("Error #%U%E",errnum)› IF errnum=128 THEN ;break› FOR i=1 TO 7 DO› Close(i)› OD› DOS()› ELSE› errflg=1› FI›RETURN›››PROC ScanFile(BYTE ARRAY filestr)›;Scan the ids in filestr.›CARD› id›› errflg=0› Open(INFILE,filestr,4,0)› IF errflg=0 THEN› tmpchar=-1› WHILE EOF(INFILE)=0 DO› ScanId()› IF idname(0) THEN› id=BinSearch(idname)› IF id THEN› MarkList(id)› FI› FI› OD› FI› Close(INFILE)›RETURN›