?? RIGHT := 110 ??
MODULE ram$get_corrector_element;
*copyc osd$default_pragmats
?? PUSH (LISTEXT := ON) ??
*copyc rac$status_id
*copyc rae$error_messages
*copyc rav$correction_package_header
*copyc rav$elements
*copyc ost$name
*copyc rat$correction_package
*copyc osp$set_status_abnormal
?? POP ??

*copyc rah$get_corrector_element

  PROCEDURE [XDCL] rap$get_corrector_element (element: ost$name;
    VAR k: rat$element_index;
    VAR status: ost$status);

    VAR
      temp: integer,
      found: boolean,
      hi: rat$element_index,
      low: rat$element_index,
      mid: rat$element_index;

    status.normal := TRUE;

    k := 0;
    found := FALSE;
    hi := rav$correction_package_header^.number_of_elements;
    low := 1;
    WHILE (low <= hi) AND NOT found DO
      temp := low + hi;
      mid := temp DIV 2;
      IF rav$elements^ [mid].name = element THEN
        found := TRUE;
      ELSEIF rav$elements^ [mid].name > element THEN
        hi := mid - 1;
      ELSE
        low := mid + 1;
      IFEND;
    WHILEND;
    IF found THEN
      k := mid;
    ELSE
      osp$set_status_abnormal (rac$status_id, rae$element_not_found, element, status);
      RETURN;
    IFEND;
  PROCEND rap$get_corrector_element;
MODEND ram$get_corrector_element;
