?? RIGHT := 110 ??
MODULE ocm$process_function_dictionary;
*copyc osd$default_pragmats
?? PUSH (LISTEXT := ON) ??
*copyc llt$section_address
*copyc llt$function_dictionary
*copyc llt$library_member_header
*copyc oct$offset_change_list
*copyc ocp$new_global_offset
?? POP ??

*copyc och$process_function_dictionary

  PROCEDURE [XDCL] ocp$process_function_dictionary (function_dictionary: ^llt$function_dictionary;
        mod_dictionary_ocv: ^oct$offset_change_list;
        int_ol: ^SEQ ( * ));

    VAR
      library_member_header: record
        case boolean of
        = TRUE =
          pointer: ^llt$library_member_header,
        = FALSE =
          pva: ^cell,
        casend,
      recend,

      i: llt$module_index,
      new_offset: llt$section_address_range;

    FOR i := 1 TO UPPERBOUND (function_dictionary^) DO
      CASE function_dictionary^ [i].module_kind OF
      = llc$function_procedure =
        library_member_header.pointer := #PTR (function_dictionary^ [i].function_header, int_ol^);
        new_offset := ocp$new_global_offset (#offset (library_member_header.pointer), mod_dictionary_ocv);
        library_member_header.pva := #address (#ring (library_member_header.pointer), #segment
              (library_member_header.pointer), new_offset);
        function_dictionary^ [i].function_header := #REL (library_member_header.pointer, int_ol^);
      = llc$function_description =
        library_member_header.pointer := #PTR (function_dictionary^ [i].function_description_header, int_ol^);
        new_offset := ocp$new_global_offset (#offset (library_member_header.pointer), mod_dictionary_ocv);
        library_member_header.pva := #address (#ring (library_member_header.pointer), #segment
              (library_member_header.pointer), new_offset);
        function_dictionary^ [i].function_description_header := #REL (library_member_header.pointer, int_ol^);
      CASEND;
    FOREND;
  PROCEND ocp$process_function_dictionary;
MODEND ocm$process_function_dictionary;
