?? RIGHT := 110 ??
MODULE ocm$process_module_dictionary;
*copyc osd$default_pragmats
?? PUSH (LISTEXT := ON) ??
*copyc oce$metapatch_generator_errors
*copyc llt$section_address
*copyc llt$module_dictionary
*copyc llt$load_module_header
*copyc llt$object_text_descriptor
*copyc llt$library_member_header
*copyc oct$offset_change_list
*copyc ocp$new_global_offset
*copyc osp$set_status_abnormal
?? POP ??

*copyc och$process_module_dictionary

  PROCEDURE [XDCL] ocp$process_module_dictionary (module_dictionary: ^llt$module_dictionary;
        mod_dictionary_ocv: ^oct$offset_change_list;
        int_ol: ^SEQ ( * );
    VAR status: ost$status);

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

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

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

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

      i: llt$module_index,
      length: integer,
      message: string (100),
      new_offset: llt$section_address_range;

    FOR i := 1 TO UPPERBOUND (module_dictionary^) DO
      CASE module_dictionary^ [i].kind OF
      = llc$load_module =
        module_header.pointer := #PTR (module_dictionary^ [i].module_header, int_ol^);
        new_offset := ocp$new_global_offset (#offset (module_header.pointer), mod_dictionary_ocv);
        module_header.pva := #address (#ring (module_header.pointer), #segment (module_header.pointer),
              new_offset);
        module_dictionary^ [i].module_header := #REL (module_header.pointer, int_ol^);
      = llc$ppu_object_module =
        ppu_header.pointer := #PTR (module_dictionary^ [i].ppu_header, int_ol^);
        new_offset := ocp$new_global_offset (#offset (ppu_header.pointer), mod_dictionary_ocv);
        ppu_header.pva := #address (#ring (ppu_header.pointer), #segment (ppu_header.pointer), new_offset);
        module_dictionary^ [i].ppu_header := #REL (ppu_header.pointer, int_ol^);
      = llc$program_description =
        library_member_header.pointer := #PTR (module_dictionary^ [i].program_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);
        module_dictionary^ [i].program_header := #REL (library_member_header.pointer, int_ol^);
      = llc$command_procedure =
        library_member_header.pointer := #PTR (module_dictionary^ [i].command_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);
        module_dictionary^ [i].command_header := #REL (library_member_header.pointer, int_ol^);
      = llc$command_description =
        library_member_header.pointer := #PTR (module_dictionary^ [i].command_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);
        module_dictionary^ [i].command_description_header := #REL (library_member_header.pointer, int_ol^);
      = llc$function_procedure =
        library_member_header.pointer := #PTR (module_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);
        module_dictionary^ [i].function_header := #REL (library_member_header.pointer, int_ol^);
      = llc$function_description =
        library_member_header.pointer := #PTR (module_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);
        module_dictionary^ [i].function_description_header := #REL (library_member_header.pointer, int_ol^);
      = llc$message_module =
        library_member_header.pointer := #PTR (module_dictionary^ [i].message_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);
        module_dictionary^ [i].message_header := #REL (library_member_header.pointer, int_ol^);
      = llc$panel_module =
        library_member_header.pointer := #PTR (module_dictionary^ [i].panel_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);
        module_dictionary^ [i].panel_header := #REL (library_member_header.pointer, int_ol^);
      = llc$applic_program_description =
        application_member_header.pointer := #PTR (module_dictionary^ [i].applic_program_header, int_ol^);
        new_offset := ocp$new_global_offset (#offset (application_member_header.pointer), mod_dictionary_ocv);
        application_member_header.pva := #address (#ring (application_member_header.pointer), #segment
              (application_member_header.pointer), new_offset);
        module_dictionary^ [i].applic_program_header := #REL (application_member_header.pointer, int_ol^);
      = llc$applic_command_procedure =
        application_member_header.pointer := #PTR (module_dictionary^ [i].applic_command_header, int_ol^);
        new_offset := ocp$new_global_offset (#offset (application_member_header.pointer), mod_dictionary_ocv);
        application_member_header.pva := #address (#ring (application_member_header.pointer), #segment
              (application_member_header.pointer), new_offset);
        module_dictionary^ [i].applic_command_header := #REL (application_member_header.pointer, int_ol^);
      = llc$applic_command_description =
        application_member_header.pointer := #PTR (module_dictionary^ [i].applic_command_description_hdr,
              int_ol^);
        new_offset := ocp$new_global_offset (#offset (application_member_header.pointer), mod_dictionary_ocv);
        application_member_header.pva := #address (#ring (application_member_header.pointer), #segment
              (application_member_header.pointer), new_offset);
        module_dictionary^ [i].applic_command_description_hdr := #REL (application_member_header.pointer,
              int_ol^);
      ELSE
        STRINGREP (message, length, module_dictionary^ [i].kind);
        osp$set_status_abnormal (occ$status_id, oce$unexpected_record_kind, message (1, length), status);
        RETURN;
      CASEND;
    FOREND;
  PROCEND ocp$process_module_dictionary;
MODEND ocm$process_module_dictionary;
