?? RIGHT := 110 ??
MODULE ocm$process_sections;
*copyc osd$default_pragmats
?? PUSH (LISTEXT := ON) ??
*copyc llt$object_text_descriptor
*copyc llt$section_definition
*copyc llt$obsolete_segment_definition
*copyc llt$segment_definition
*copyc llt$text
*copyc llt$replication
*copyc llt$bit_string_insertion
*copyc llt$address_formulation
*copyc oct$section_directory
*copyc oct$offset_change_list
*copyc ocp$new_global_offset
*copyc ocp$new_offset
?? POP ??

*copyc och$process_sections

  PROCEDURE [XDCL] ocp$process_sections (p_int_ol: ^SEQ ( * );
        section_defs: ^llt$object_text_descriptor;
        section_directory: ^oct$section_directory;
        mod_dictionary_ocv: ^oct$offset_change_list);

    VAR
      address_formulation: ^llt$address_formulation,
      bit_string_insertion: ^llt$bit_string_insertion,
      i: 1 .. llc$max_adr_items,
      int_ol: ^SEQ ( * ),
      new_offset: ost$relative_pointer,
      object_text_descriptor: ^llt$object_text_descriptor,
      obsolete_segment_definition: ^llt$obsolete_segment_definition,
      replication: ^llt$replication,
      section_definition: ^llt$section_definition,
      segment_definition: ^llt$segment_definition,
      sections_all_processed: boolean,
      text: ^llt$text;

    int_ol := p_int_ol;

    sections_all_processed := FALSE;
    RESET int_ol TO section_defs;
    REPEAT
      NEXT object_text_descriptor IN int_ol;
      CASE object_text_descriptor^.kind OF

      = llc$allotted_section_definition =
        object_text_descriptor^.allotted_section := ocp$new_global_offset (object_text_descriptor^.
              allotted_section, mod_dictionary_ocv);
        NEXT section_definition IN int_ol;
        section_definition^.section_ordinal := section_directory^ [section_definition^.section_ordinal].
              new_section_number;

      = llc$section_definition, llc$unallocated_common_block =
        NEXT section_definition IN int_ol;
        section_definition^.section_ordinal := section_directory^ [section_definition^.section_ordinal].
              new_section_number;

      = llc$obsolete_allotted_seg_def =
        object_text_descriptor^.allotted_segment := ocp$new_global_offset (object_text_descriptor^.
              allotted_segment, mod_dictionary_ocv);
        NEXT obsolete_segment_definition IN int_ol;
        obsolete_segment_definition^.section_definition.section_ordinal := section_directory^ [
              obsolete_segment_definition^.section_definition.section_ordinal].new_section_number;

      = llc$obsolete_segment_definition =
        NEXT obsolete_segment_definition IN int_ol;
        obsolete_segment_definition^.section_definition.section_ordinal := section_directory^ [
              obsolete_segment_definition^.section_definition.section_ordinal].new_section_number;

      = llc$allotted_segment_definition =
        object_text_descriptor^.allotted_segment := ocp$new_global_offset (object_text_descriptor^.
              allotted_segment, mod_dictionary_ocv);
        NEXT segment_definition IN int_ol;
        segment_definition^.section_definition.section_ordinal := section_directory^ [segment_definition^.
              section_definition.section_ordinal].new_section_number;

      = llc$segment_definition =
        NEXT segment_definition IN int_ol;
        segment_definition^.section_definition.section_ordinal := section_directory^ [segment_definition^.
              section_definition.section_ordinal].new_section_number;

      = llc$text =
        NEXT text: [1 .. object_text_descriptor^.number_of_bytes] IN int_ol;
        text^.offset := ocp$new_offset (text^.offset, section_directory^ [text^.section_ordinal].
              section_offset_change_vector);
        text^.section_ordinal := section_directory^ [text^.section_ordinal].new_section_number;

      = llc$replication =
        NEXT replication: [1 .. object_text_descriptor^.number_of_bytes] IN int_ol;
        replication^.offset := ocp$new_offset (replication^.offset, section_directory^ [replication^.
              section_ordinal].section_offset_change_vector);
        replication^.section_ordinal := section_directory^ [replication^.section_ordinal].new_section_number;

      = llc$bit_string_insertion =
        NEXT bit_string_insertion IN int_ol;
        bit_string_insertion^.offset := ocp$new_offset (bit_string_insertion^.offset, section_directory^
              [bit_string_insertion^.section_ordinal].section_offset_change_vector);
        bit_string_insertion^.section_ordinal := section_directory^ [bit_string_insertion^.section_ordinal].
              new_section_number;

      = llc$address_formulation =
        NEXT address_formulation: [1 .. object_text_descriptor^.number_of_adr_items] IN int_ol;
        FOR i := 1 TO object_text_descriptor^.number_of_adr_items DO
          address_formulation^.item [i].value_offset := ocp$new_offset (address_formulation^.item [i].
                value_offset, section_directory^ [address_formulation^.value_section].
                section_offset_change_vector);
          address_formulation^.item [i].dest_offset := ocp$new_offset (address_formulation^.item [i].
                dest_offset, section_directory^ [address_formulation^.dest_section].
                section_offset_change_vector);
        FOREND;
        address_formulation^.value_section := section_directory^ [address_formulation^.value_section].
              new_section_number;
        address_formulation^.dest_section := section_directory^ [address_formulation^.dest_section].
              new_section_number;

      ELSE
        sections_all_processed := TRUE;
      CASEND;
    UNTIL sections_all_processed;
  PROCEND ocp$process_sections;
MODEND ocm$process_sections;
