CARD FUNC BinSearch(BYTE ARRAY idstr)›;Does a binary search in the array›;idptrs for identifier idstr.› INT› hi, lo, mid, comp›› hi=NUMIDS-1› lo=0› WHILE hi>=lo DO› mid=(hi+lo) RSH 1› comp=SCompare(idstr,idptrs(mid))› IF comp=0 THEN› RETURN(idptrs(mid))› ELSEIF comp<0 THEN› hi=mid-1› ELSE› lo=mid+1› FI› OD›RETURN(0)›››PROC MarkList(BYTE ARRAY rec)›;Given the address of an id record,›;mark it and all id's in its›;dependency list.› BYTE› stktop=[0]› CARD ARRAY› stack(10)› CARD POINTER› calls, depend›› calls=rec+rec(0)+1› calls^==+1› depend=calls+4› DO› IF depend^=0 THEN› EXIT› ELSE› stktop==+1› stack(stktop)=depend› MarkList(depend^)› depend=stack(stktop)› stktop==-1› depend==+2› FI› OD›RETURN›››PROC ClrRecs()›;Zeros the # of calls to each›;routine (except _CPYPRMS = 1)› BYTE ARRAY› s› CARD POINTER› next, calls›› s=IdRecs› calls=s+s(0)+1› calls^=1› next=calls+2› DO› IF next^=0 THEN› EXIT› ELSE› s=next^› calls=s+s(0)+1› calls^=0› next=calls+2› FI› OD›RETURN›››PROC PrintList()›;Print the records marked used.› BYTE› i› BYTE ARRAY› s› CARD POINTER› next, calls›› s=IdRecs› calls=s+s(0)+1› next=calls+2› DO› IF calls^ THEN› PrintF("%S",s)› FOR i=s(0) TO 11 DO› Put(' )› OD› PrintF("(%U)%E",calls^)› FI› IF next^=0 THEN› EXIT› ELSE› s=next^› calls=s+s(0)+1› next=calls+2› FI› OD›RETURN›