?? RIGHT := 110 ??
MODULE ocm$process_exts;
*copyc osd$default_pragmats
?? PUSH (LISTEXT := ON) ??
*copyc llt$external_linkage
*copyc llt$object_text_descriptor
*copyc oct$section_directory
*copyc ocp$new_offset
?? POP ??

*copyc och$process_exts

  PROCEDURE [XDCL] ocp$process_exts (p_int_ol: ^ SEQ ( * );
        external_element: ^llt$object_text_descriptor;
        section_directory: ^oct$section_directory);

    VAR
      external_linkage: ^llt$external_linkage,
      externals_all_processed: boolean,
      i: 1 .. llc$max_ext_items,
      int_ol: ^ SEQ ( * ),
      object_text_descriptor: ^llt$object_text_descriptor;

    int_ol := p_int_ol;

    externals_all_processed := FALSE;
    RESET int_ol TO external_element;
    REPEAT
      NEXT object_text_descriptor IN int_ol;
      IF object_text_descriptor^.kind <> llc$external_linkage THEN
        externals_all_processed := TRUE;
      ELSE
        NEXT external_linkage: [1 .. object_text_descriptor^.number_of_ext_items] IN int_ol;
        FOR i := 1 TO object_text_descriptor^.number_of_ext_items DO
          external_linkage^.item [i].offset := ocp$new_offset (external_linkage^.item [i].offset,
                section_directory^ [external_linkage^.item [i].section_ordinal].section_offset_change_vector);
          external_linkage^.item [i].section_ordinal := section_directory^ [external_linkage^.item [i].
                section_ordinal].new_section_number;
        FOREND;
      IFEND;
    UNTIL externals_all_processed;
  PROCEND ocp$process_exts;
MODEND ocm$process_exts;
