
  PROCEDURE [INLINE] clp$check_keyword
    (    candidate: clt$keyword;
         keyword_specifications: ^clt$keyword_specifications;
     VAR result_keyword: clt$keyword);

?? PUSH (LISTEXT := ON) ??

    VAR
      current_index: 0 .. clc$max_keywords,
      high_index: 0 .. clc$max_keywords,
      temp: integer,
      low_index: 1 .. clc$max_keywords + 1;


    IF keyword_specifications <> NIL THEN
      low_index := 1;
      high_index := UPPERBOUND (keyword_specifications^);

    /search/
      REPEAT
        temp := low_index + high_index;
        current_index := temp DIV 2;
        IF keyword_specifications^ [current_index].keyword = candidate THEN
          IF keyword_specifications^ [current_index].class =
                clc$nominal_entry THEN
            result_keyword := candidate;
            RETURN;
          IFEND;
          EXIT /search/;
        ELSEIF keyword_specifications^ [current_index].keyword > candidate THEN
          high_index := current_index - 1;
        ELSE
          low_index := current_index + 1;
        IFEND;
      UNTIL low_index > high_index {/search/} ;
    IFEND;

    result_keyword := osc$null_name;

  PROCEND clp$check_keyword;

*copyc clc$max_keywords
*copyc clt$keyword
*copyc clt$keyword_specifications
?? POP ??
