?? RIGHT := 110 ??
?? NEWTITLE := 'NOS/VE:  Object Library Generator' ??
MODULE ocm$copy_modules;


{  This module contains the routines for copying modules to the temporary
{  library and file.


  VAR
    object_type_checking: [STATIC, READ] string (6) := 'OBJECT';

?? PUSH (LISTEXT := ON) ??
*copyc clt$scl_procedure
*copyc llt$deferred_common_blocks
*copyc llt$deferred_entry_points
*copyc llt$line_address_table
*copyc llt$load_module
*copyc oce$library_generator_errors
*copyc oct$changed_info
*copyc oct$debug_table
*copyc oct$display_toggles
*copyc oct$external_declaration_list
*copyc oct$module_description
*copyc oct$segment_relocation_info
*copyc ost$message_template_module
?? POP ??
*copyc i#move
*copyc ocp$convert_information_element
*copyc osp$append_status_integer
*copyc osp$append_status_parameter
*copyc osp$set_status_abnormal
*copyc pmp$position_object_library
*copyc ocv$olg_scratch_seq

?? NEWTITLE := '  OCP$RELOCATE_SEG_DEFINITIONS', EJECT ??

  PROCEDURE [XDCL] ocp$relocate_seg_definitions
    (    relocation: ^llt$relocation;
         segment_relocation_info: ^oct$segment_relocation_info);


    VAR
      i: integer,
      offset: ^ost$segment_length,
      rs: llt$section_ordinal,
      so: llt$section_ordinal;


    FOR i := 1 TO UPPERBOUND (relocation^) DO
      rs := relocation^ [i].relocating_section;

      IF segment_relocation_info^ [rs].old_offset <> segment_relocation_info^ [rs].new_offset THEN
        so := relocation^ [i].section_ordinal;
        offset := #LOC (segment_relocation_info^ [so].text^ [(relocation^ [i].offset + 1)]);

        offset^ := offset^ -segment_relocation_info^ [rs].old_offset +
              segment_relocation_info^ [rs].new_offset;
      IFEND;
    FOREND;


  PROCEND ocp$relocate_seg_definitions;
?? OLDTITLE ??
?? NEWTITLE := 'FIND_OLD_ENTRY_POINT_NAME' ??
?? EJECT ??

  PROCEDURE find_old_entry_point_name
    (    module_name: pmt$program_name;
         changed_entry_points: ^oct$external_declaration_list;
         old_name: pmt$program_name;
     VAR new_name: pmt$program_name;
     VAR status: ost$status);

    VAR
      entry_point: ^oct$external_declaration_list,
      external_declaration_list: ^oct$external_declaration_list;


    status.normal := TRUE;

    external_declaration_list := changed_entry_points;
    WHILE (external_declaration_list <> NIL) AND (external_declaration_list^.old_name <> old_name) DO
      external_declaration_list := external_declaration_list^.link;
    WHILEND;

    IF external_declaration_list = NIL THEN
      osp$set_status_abnormal (oc, oce$entry_not_found_for_formal, old_name, status);
      osp$append_status_parameter (osc$status_parameter_delimiter, module_name, status);
      RETURN;
    IFEND;

    new_name := external_declaration_list^.name;

  PROCEND find_old_entry_point_name;

?? OLDTITLE ??
?? NEWTITLE := '  COPY_CPU_OBJECT_MODULE' ??
?? EJECT ??

  PROCEDURE [XDCL] copy_cpu_object_module
    (    module_description: ^oct$module_description;
         changed_info: ^oct$changed_info;
     VAR temporary_object_file: ^SEQ ( * );
     VAR status: ost$status);


    VAR
      old_object_text_descriptor: ^llt$object_text_descriptor,
      old_identification: ^llt$identification,
      old_application_identifier: ^llt$application_identifier,
      old_libraries: ^llt$libraries,
      old_section_definition: ^llt$section_definition,
      old_segment_definition: ^llt$segment_definition,
      old_obsolete_segment_def: ^llt$obsolete_segment_definition,
      old_text: ^llt$text,
      old_replication: ^llt$replication,
      old_bit_string_insertion: ^llt$bit_string_insertion,
      old_entry_definition: ^llt$entry_definition,
      old_deferred_entry_points: ^llt$deferred_entry_points,
      old_deferred_common_blocks: ^llt$deferred_common_blocks,
      old_relocation: ^llt$relocation,
      old_address_formulation: ^llt$address_formulation,
      old_external_linkage: ^llt$external_linkage,
      old_obsolete_formal_parameters: ^llt$obsolete_formal_parameters,
      old_formal_parameters: ^llt$formal_parameters,
      old_actual_parameters: ^llt$actual_parameters,
      old_debug_table_fragment: ^llt$debug_table_fragment,
      old_obsolete_line_address_table: ^llt$obsolete_line_address_table,
      old_symbol_table: ^llt$symbol_table,
      old_line_address_table: ^llt$line_address_table,
      old_supplemental_debug_tables: ^llt$supplemental_debug_tables,
      old_binding_template: ^llt$binding_template,
      old_m68000_absolute: ^llt$68000_absolute,
      old_transfer_symbol: ^llt$transfer_symbol;

    VAR
      new_object_text_descriptor: ^llt$object_text_descriptor,
      new_identification: ^llt$identification,
      new_application_identifier: ^llt$application_identifier,
      new_libraries: ^llt$libraries,
      new_section_definition: ^llt$section_definition,
      new_segment_definition: ^llt$segment_definition,
      new_obsolete_segment_def: ^llt$obsolete_segment_definition,
      new_text: ^llt$text,
      new_replication: ^llt$replication,
      new_bit_string_insertion: ^llt$bit_string_insertion,
      new_entry_definition: ^llt$entry_definition,
      new_deferred_entry_points: ^llt$deferred_entry_points,
      new_deferred_common_blocks: ^llt$deferred_common_blocks,
      new_relocation: ^llt$relocation,
      new_address_formulation: ^llt$address_formulation,
      new_external_linkage: ^llt$external_linkage,
      new_formal_parameters: ^llt$formal_parameters,
      new_actual_parameters: ^llt$actual_parameters,
      new_debug_table_fragment: ^llt$debug_table_fragment,
      new_obsolete_line_address_table: ^llt$obsolete_line_address_table,
      new_symbol_table: ^llt$symbol_table,
      new_line_address_table: ^llt$line_address_table,
      new_supplemental_debug_tables: ^llt$supplemental_debug_tables,
      new_binding_template: ^llt$binding_template,
      new_m68000_absolute: ^llt$68000_absolute,
      new_transfer_symbol: ^llt$transfer_symbol;

    VAR
      module_name: pmt$program_name,
      application_identifier_changed: boolean,
      libraries_have_been_changed: boolean,
      library_list: ^oct$name_list,
      number_of_libraries: integer,
      library_name: integer,
      entry_points_have_been_changed: boolean,
      new_entry_point: ^oct$external_declaration_list,
      new_starting_procedure: pmt$program_name,
      debug_tables_to_omit: oct$debug_tables;


    RESET module_description^.file TO module_description^.cpu_object_module_header^.identification;


    NEXT new_object_text_descriptor IN temporary_object_file;

    IF new_object_text_descriptor = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY1', status);
      RETURN;
    IFEND;

    new_object_text_descriptor^.kind := llc$identification;


    NEXT old_identification IN module_description^.file;
    NEXT new_identification IN temporary_object_file;

    IF new_identification = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY2', status);
      RETURN;
    IFEND;

    new_identification^ := old_identification^;

    application_identifier_changed := FALSE;
    entry_points_have_been_changed := FALSE;

    IF changed_info <> NIL THEN
      IF changed_info^.name <> NIL THEN
        new_identification^.name := changed_info^.name^;
      IFEND;

      IF changed_info^.commentary <> NIL THEN
        new_identification^.commentary := changed_info^.commentary^;
      IFEND;

      IF changed_info^.entry_points <> NIL THEN
        entry_points_have_been_changed := TRUE;
        new_entry_point := changed_info^.entry_points;
        new_starting_procedure := changed_info^.starting_procedure;
      IFEND;

      IF changed_info^.application_identifier <> NIL THEN
        application_identifier_changed := TRUE;
      IFEND;

      IF changed_info^.cybil_parameter_checking = object_type_checking THEN
        new_identification^.attributes := new_identification^.attributes +
              $llt$module_attributes [llc$object_cybil_checking];
      ELSE
        new_identification^.attributes := new_identification^.attributes -
              $llt$module_attributes [llc$object_cybil_checking];
      IFEND;

      libraries_have_been_changed := changed_info^.new_libraries;
      debug_tables_to_omit := changed_info^.debug_tables_to_omit;
    ELSE
      libraries_have_been_changed := FALSE;
      debug_tables_to_omit := $oct$debug_tables [];
    IFEND;

    IF application_identifier_changed AND (changed_info^.application_identifier^.name <> osc$null_name) THEN
      NEXT new_object_text_descriptor IN temporary_object_file;
      IF new_object_text_descriptor = NIL THEN
        osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY2.25', status);
        RETURN;
      IFEND;

      new_object_text_descriptor^.kind := llc$application_identifier;

      NEXT new_application_identifier IN temporary_object_file;
      IF new_application_identifier = NIL THEN
        osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY2.5', status);
        RETURN;
      IFEND;

      new_application_identifier^.name := changed_info^.application_identifier^.name;
    IFEND;

    IF libraries_have_been_changed THEN
      IF changed_info^.library_list <> NIL THEN
        number_of_libraries := 0;
        library_list := changed_info^.library_list;
        WHILE library_list <> NIL DO
          number_of_libraries := number_of_libraries + 1;
          library_list := library_list^.link;
        WHILEND;

        IF number_of_libraries > llc$max_libraries THEN
          osp$set_status_abnormal (oc, oce$e_too_many_libraries, '', status);
          RETURN;
        IFEND;

        NEXT new_object_text_descriptor IN temporary_object_file;
        IF new_object_text_descriptor = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY3', status);
          RETURN;
        IFEND;

        new_object_text_descriptor^.kind := llc$libraries;
        new_object_text_descriptor^.number_of_libraries := number_of_libraries;

        NEXT new_libraries: [1 .. new_object_text_descriptor^.number_of_libraries] IN temporary_object_file;
        IF new_libraries = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY4', status);
          RETURN;
        IFEND;

        library_list := changed_info^.library_list;
        FOR library_name := 1 TO number_of_libraries DO
          new_libraries^ [library_name] := library_list^.name;
          library_list := library_list^.link;
        FOREND;
      IFEND;
    IFEND;

    REPEAT
      NEXT old_object_text_descriptor IN module_description^.file;
      NEXT new_object_text_descriptor IN temporary_object_file;

      IF new_object_text_descriptor = NIL THEN
        osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY5', status);
        RETURN;
      IFEND;

      new_object_text_descriptor^ := old_object_text_descriptor^;


      CASE new_object_text_descriptor^.kind OF
      = llc$application_identifier =
        NEXT old_application_identifier IN module_description^.file;

        IF NOT application_identifier_changed THEN
          NEXT new_application_identifier IN temporary_object_file;
          IF new_application_identifier = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY5.5', status);
            RETURN;
          IFEND;

          new_application_identifier^ := old_application_identifier^;
        ELSE
          RESET temporary_object_file TO new_object_text_descriptor;
        IFEND;

      = llc$libraries =
        NEXT old_libraries: [1 .. old_object_text_descriptor^.number_of_libraries] IN
              module_description^.file;

        IF NOT libraries_have_been_changed THEN
          NEXT new_libraries: [1 .. new_object_text_descriptor^.number_of_libraries] IN temporary_object_file;

          IF new_libraries = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY6', status);
            RETURN;
          IFEND;

          new_libraries^ := old_libraries^;
        ELSE
          RESET temporary_object_file TO new_object_text_descriptor;
        IFEND;

      = llc$section_definition, llc$unallocated_common_block =
        NEXT old_section_definition IN module_description^.file;
        NEXT new_section_definition IN temporary_object_file;

        IF new_section_definition = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY7', status);
          RETURN;
        IFEND;

        new_section_definition^ := old_section_definition^;


      = llc$segment_definition =
        NEXT old_segment_definition IN module_description^.file;
        NEXT new_segment_definition IN temporary_object_file;

        IF new_segment_definition = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY8', status);
          RETURN;
        IFEND;

        new_segment_definition^ := old_segment_definition^;

      = llc$obsolete_segment_definition =
        NEXT old_obsolete_segment_def IN module_description^.file;
        NEXT new_obsolete_segment_def IN temporary_object_file;

        IF new_obsolete_segment_def = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY9', status);
          RETURN;
        IFEND;

        new_obsolete_segment_def^ := old_obsolete_segment_def^;

      = llc$text =
        NEXT old_text: [1 .. old_object_text_descriptor^.number_of_bytes] IN module_description^.file;
        NEXT new_text: [1 .. new_object_text_descriptor^.number_of_bytes] IN temporary_object_file;

        IF new_text = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY10', status);
          RETURN;
        IFEND;

        new_text^ := old_text^;


      = llc$replication =
        NEXT old_replication: [1 .. old_object_text_descriptor^.number_of_bytes] IN module_description^.file;
        NEXT new_replication: [1 .. new_object_text_descriptor^.number_of_bytes] IN temporary_object_file;

        IF new_replication = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY11', status);
          RETURN;
        IFEND;

        new_replication^ := old_replication^;


      = llc$bit_string_insertion =
        NEXT old_bit_string_insertion IN module_description^.file;
        NEXT new_bit_string_insertion IN temporary_object_file;

        IF new_bit_string_insertion = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY12', status);
          RETURN;
        IFEND;

        new_bit_string_insertion^ := old_bit_string_insertion^;

      = llc$entry_definition =
        NEXT old_entry_definition IN module_description^.file;

        IF (entry_points_have_been_changed) AND (new_entry_point^.name = osc$null_name) THEN
          new_entry_point := new_entry_point^.link;
          RESET temporary_object_file TO new_object_text_descriptor;
        ELSE
          NEXT new_entry_definition IN temporary_object_file;

          IF new_entry_definition = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY13', status);
            RETURN;
          IFEND;

          new_entry_definition^ := old_entry_definition^;

          IF entry_points_have_been_changed THEN
            new_entry_definition^.name := new_entry_point^.name;
            new_entry_definition^.attributes := new_entry_point^.attributes;
            new_entry_point := new_entry_point^.link;
          IFEND;
        IFEND;

      = llc$deferred_entry_points =
        NEXT old_deferred_entry_points: [1 .. old_object_text_descriptor^.number_of_entry_points] IN
              module_description^.file;
        NEXT new_deferred_entry_points: [1 .. new_object_text_descriptor^.number_of_entry_points] IN
              temporary_object_file;

        IF new_deferred_entry_points = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY13.3', status);
          RETURN;
        IFEND;

        new_deferred_entry_points^ := old_deferred_entry_points^;

      = llc$deferred_common_blocks =
        NEXT old_deferred_common_blocks: [1 .. old_object_text_descriptor^.number_of_common_blocks] IN
              module_description^.file;
        NEXT new_deferred_common_blocks: [1 .. new_object_text_descriptor^.number_of_common_blocks] IN
              temporary_object_file;

        IF new_deferred_common_blocks = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY13.6', status);
          RETURN;
        IFEND;

        new_deferred_common_blocks^ := old_deferred_common_blocks^;

      = llc$relocation =
        NEXT old_relocation: [1 .. old_object_text_descriptor^.number_of_rel_items] IN
              module_description^.file;
        NEXT new_relocation: [1 .. new_object_text_descriptor^.number_of_rel_items] IN temporary_object_file;

        IF new_relocation = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY14', status);
          RETURN;
        IFEND;

        new_relocation^ := old_relocation^;

      = llc$address_formulation =
        NEXT old_address_formulation: [1 .. old_object_text_descriptor^.number_of_adr_items] IN
              module_description^.file;
        NEXT new_address_formulation: [1 .. new_object_text_descriptor^.number_of_adr_items] IN
              temporary_object_file;

        IF new_address_formulation = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY15', status);
          RETURN;
        IFEND;

        new_address_formulation^ := old_address_formulation^;


      = llc$external_linkage =
        NEXT old_external_linkage: [1 .. old_object_text_descriptor^.number_of_ext_items] IN
              module_description^.file;
        NEXT new_external_linkage: [1 .. new_object_text_descriptor^.number_of_ext_items] IN
              temporary_object_file;

        IF new_external_linkage = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY16', status);
          RETURN;
        IFEND;

        new_external_linkage^ := old_external_linkage^;



      = llc$obsolete_formal_parameters =
        NEXT old_obsolete_formal_parameters: [[REP old_object_text_descriptor^.sequence_length OF cell]] IN
              module_description^.file;
        RESET temporary_object_file TO new_object_text_descriptor;


      = llc$formal_parameters =
        NEXT old_formal_parameters: [[REP old_object_text_descriptor^.sequence_length OF cell]] IN
              module_description^.file;

        IF NOT (occ$parameter_checking IN debug_tables_to_omit) THEN
          NEXT new_formal_parameters: [[REP new_object_text_descriptor^.sequence_length OF cell]] IN
                temporary_object_file;

          IF new_formal_parameters = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY17', status);
            RETURN;
          IFEND;

          new_formal_parameters^ := old_formal_parameters^;

          IF entry_points_have_been_changed THEN
            find_old_entry_point_name (module_description^.name, changed_info^.entry_points,
                  old_formal_parameters^.procedure_name, new_formal_parameters^.procedure_name, status);
            IF NOT status.normal THEN
              RETURN;
            IFEND;

            IF (new_formal_parameters^.procedure_name = osc$null_name) THEN
              RESET temporary_object_file TO new_object_text_descriptor;
              RETURN;
            IFEND;
          IFEND;
        ELSE
          RESET temporary_object_file TO new_object_text_descriptor;
        IFEND;


      = llc$actual_parameters =
        NEXT old_actual_parameters: [[REP old_object_text_descriptor^.sequence_length OF cell]] IN
              module_description^.file;

        IF NOT (occ$parameter_checking IN debug_tables_to_omit) THEN
          NEXT new_actual_parameters: [[REP new_object_text_descriptor^.sequence_length OF cell]] IN
                temporary_object_file;

          IF new_actual_parameters = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY18', status);
            RETURN;
          IFEND;

          new_actual_parameters^ := old_actual_parameters^;
        ELSE
          RESET temporary_object_file TO new_object_text_descriptor;
        IFEND;


      = llc$binding_template =
        NEXT old_binding_template IN module_description^.file;
        NEXT new_binding_template IN temporary_object_file;

        IF new_binding_template = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY19', status);
          RETURN;
        IFEND;

        new_binding_template^ := old_binding_template^;

      = llc$cybil_symbol_table_fragment =
        NEXT old_debug_table_fragment: [[REP old_object_text_descriptor^.sequence_length OF cell]] IN
              module_description^.file;

        IF NOT (occ$symbol_table IN debug_tables_to_omit) THEN
          NEXT new_debug_table_fragment: [[REP new_object_text_descriptor^.sequence_length OF cell]] IN
                temporary_object_file;

          IF new_debug_table_fragment = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY20', status);
            RETURN;
          IFEND;

          new_debug_table_fragment^ := old_debug_table_fragment^;
        ELSE
          RESET temporary_object_file TO new_object_text_descriptor;
        IFEND;


      = llc$obsolete_line_table =
        NEXT old_obsolete_line_address_table: [1 .. old_object_text_descriptor^.number_of_line_items] IN
              module_description^.file;

        IF NOT (occ$line_table IN debug_tables_to_omit) THEN
          NEXT new_obsolete_line_address_table: [1 .. new_object_text_descriptor^.number_of_line_items] IN
                temporary_object_file;

          IF new_obsolete_line_address_table = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY21', status);
            RETURN;
          IFEND;

          new_obsolete_line_address_table^ := old_obsolete_line_address_table^;
        ELSE
          RESET temporary_object_file TO new_object_text_descriptor;
        IFEND;

      = llc$symbol_table =
        NEXT old_symbol_table: [[REP old_object_text_descriptor^.sequence_length OF cell]] IN
              module_description^.file;

        IF NOT (occ$symbol_table IN debug_tables_to_omit) THEN
          NEXT new_symbol_table: [[REP new_object_text_descriptor^.sequence_length OF cell]] IN
                temporary_object_file;

          IF new_symbol_table = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY22', status);
            RETURN;
          IFEND;

          new_symbol_table^ := old_symbol_table^;
        ELSE
          RESET temporary_object_file TO new_object_text_descriptor;
        IFEND;


      = llc$line_table =
        NEXT old_line_address_table: [1 .. old_object_text_descriptor^.number_of_line_items] IN
              module_description^.file;

        IF NOT (occ$line_table IN debug_tables_to_omit) THEN
          NEXT new_line_address_table: [1 .. new_object_text_descriptor^.number_of_line_items] IN
                temporary_object_file;

          IF new_line_address_table = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY23', status);
            RETURN;
          IFEND;

          new_line_address_table^ := old_line_address_table^;
        ELSE
          RESET temporary_object_file TO new_object_text_descriptor;
        IFEND;

      = llc$supplemental_debug_tables =
        NEXT old_supplemental_debug_tables: [[REP old_object_text_descriptor^.sequence_length OF cell]] IN
              module_description^.file;

        IF NOT (occ$supplemental_debug_table IN debug_tables_to_omit) THEN
          NEXT new_supplemental_debug_tables: [[REP new_object_text_descriptor^.sequence_length OF cell]] IN
                temporary_object_file;

          IF new_supplemental_debug_tables = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY24', status);
            RETURN;
          IFEND;

          new_supplemental_debug_tables^ := old_supplemental_debug_tables^;
        ELSE
          RESET temporary_object_file TO new_object_text_descriptor;
        IFEND;


      = llc$form_definition =
        osp$set_status_abnormal (oc, oce$e_form_def_found_in_module, module_name, status);
        RETURN;

      = llc$68000_absolute =
        NEXT old_m68000_absolute: [[REP old_object_text_descriptor^.number_of_68000_bytes OF cell]] IN
              module_description^.file;

        NEXT new_m68000_absolute: [[REP new_object_text_descriptor^.number_of_68000_bytes OF cell]] IN
              temporary_object_file;
        IF new_m68000_absolute = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY25', status);
          RETURN;
        IFEND;

        new_m68000_absolute^ := old_m68000_absolute^;



      = llc$transfer_symbol =
        NEXT old_transfer_symbol IN module_description^.file;
        NEXT new_transfer_symbol IN temporary_object_file;

        IF new_transfer_symbol = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY26', status);
          RETURN;
        IFEND;

        IF entry_points_have_been_changed THEN
          new_transfer_symbol^.name := new_starting_procedure;
        ELSE
          new_transfer_symbol^ := old_transfer_symbol^;
        IFEND;

      CASEND;
    UNTIL new_object_text_descriptor^.kind = llc$transfer_symbol;

  PROCEND copy_cpu_object_module;
?? OLDTITLE ??
?? NEWTITLE := '  COPY_PPU_OBJECT_MODULE' ??
?? EJECT ??

  PROCEDURE [XDCL] copy_ppu_object_module
    (    module_description: ^oct$module_description;
         changed_info: ^oct$changed_info;
     VAR object_text_descriptor: ^llt$object_text_descriptor;
     VAR temporary_object_file: ^SEQ ( * );
     VAR status: ost$status);


    VAR
      old_object_text_descriptor: ^llt$object_text_descriptor,
      old_identification: ^llt$identification,
      old_ppu_absolute: ^llt$ppu_absolute;

    VAR
      new_object_text_descriptor: ^llt$object_text_descriptor,
      new_identification: ^llt$identification,
      new_ppu_absolute: ^llt$ppu_absolute;


    RESET module_description^.file TO module_description^.ppu_object_module_header;


    NEXT object_text_descriptor IN temporary_object_file;

    IF object_text_descriptor = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY27', status);
      RETURN;
    IFEND;

    object_text_descriptor^.kind := llc$identification;


    NEXT old_identification IN module_description^.file;
    NEXT new_identification IN temporary_object_file;

    IF new_identification = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY28', status);
      RETURN;
    IFEND;

    new_identification^ := old_identification^;


    IF changed_info <> NIL THEN
      IF changed_info^.name <> NIL THEN
        new_identification^.name := changed_info^.name^;
      IFEND;

      IF changed_info^.commentary <> NIL THEN
        new_identification^.commentary := changed_info^.commentary^;
      IFEND;
    IFEND;

    NEXT old_object_text_descriptor IN module_description^.file;
    IF old_object_text_descriptor = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_object_text_descriptor IN temporary_object_file;

    IF new_object_text_descriptor = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY29', status);
      RETURN;
    IFEND;

    new_object_text_descriptor^ := old_object_text_descriptor^;


    NEXT old_ppu_absolute: [0 .. old_object_text_descriptor^.number_of_words - 1] IN module_description^.file;
    IF old_ppu_absolute = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_ppu_absolute: [0 .. new_object_text_descriptor^.number_of_words - 1] IN temporary_object_file;

    IF new_ppu_absolute = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY30', status);
      RETURN;
    IFEND;

    new_ppu_absolute^ := old_ppu_absolute^;


  PROCEND copy_ppu_object_module;
?? OLDTITLE ??
?? NEWTITLE := '  WRITE_NEW_SECTION' ??
?? EJECT ??

  PROCEDURE write_new_section
    (    old_section: ^llt$code_element;
         section_definition: ^llt$section_definition;
         length: ost$segment_length;
     VAR new_section: ^cell;
     VAR allotted_section: ost$relative_pointer);



    VAR
      temp_address: ^cell,
      section_base: ost$segment_offset;



    section_base := #OFFSET (new_section);

    WHILE section_definition^.allocation_offset <> (section_base MOD section_definition^.allocation_alignment)
          DO
      section_base := section_base + 1;
    WHILEND;

    temp_address := new_section;
    new_section := #ADDRESS (#RING (temp_address), #SEGMENT (temp_address), section_base);

    i#move (#LOC (old_section^), new_section, length);

    allotted_section := section_base;

    new_section := #ADDRESS (#RING (temp_address), #SEGMENT (temp_address), section_base + length);


  PROCEND write_new_section;
?? OLDTITLE ??
?? NEWTITLE := '  COPY_LOAD_MODULE' ??
?? EJECT ??

  PROCEDURE [XDCL] copy_load_module
    (    module_index: llt$module_index;
         module_description: ^oct$module_description;
         changed_info: ^oct$changed_info;
     VAR new_load_module_header: ^llt$load_module_header;
     VAR new_code_section: ^cell;
     VAR new_read_section: ^cell;
     VAR temporary_library: ^SEQ ( * );
     VAR status: ost$status);


    VAR
      application_identifier_changed: boolean,
      debug_tables_to_omit: oct$debug_tables,
      deferred_index: 1 .. llc$max_deferred_entry_points,
      entry_points_have_been_changed: boolean,
      length: ost$segment_length,
      library_list: ^oct$name_list,
      library_number: integer,
      libraries_have_been_changed: boolean,
      module_name: pmt$program_name,
      new_actual_parameters: ^llt$actual_parameters,
      new_address_formulation: ^llt$address_formulation,
      new_application_identifier: ^llt$application_identifier,
      new_bit_string_insertion: ^llt$bit_string_insertion,
      new_debug_table_fragment: ^llt$debug_table_fragment,
      new_deferred_common_blocks: ^llt$deferred_common_blocks,
      new_deferred_entry_points: ^llt$deferred_entry_points,
      new_entry_definition: ^llt$entry_definition,
      new_entry_point: ^oct$external_declaration_list,
      new_external_linkage: ^llt$external_linkage,
      new_formal_parameters: ^llt$formal_parameters,
      new_identification: ^llt$identification,
      new_libraries: ^llt$libraries,
      new_line_address_table: ^llt$line_address_table,
      new_m68000_absolute: ^llt$68000_absolute,
      new_object_text_descriptor: ^llt$object_text_descriptor,
      new_obsolete_line_address_table: ^llt$obsolete_line_address_table,
      new_obsolete_segment_def: ^llt$obsolete_segment_definition,
      new_replication: ^llt$replication,
      new_section_definition: ^llt$section_definition,
      new_segment_definition: ^llt$segment_definition,
      new_starting_procedure: pmt$program_name,
      new_supplemental_debug_tables: ^llt$supplemental_debug_tables,
      new_symbol_table: ^llt$symbol_table,
      new_text: ^llt$text,
      new_transfer_symbol: ^llt$transfer_symbol,
      number_of_libraries: integer,
      old_actual_parameters: ^llt$actual_parameters,
      old_address_formulation: ^llt$address_formulation,
      old_application_identifier: ^llt$application_identifier,
      old_bit_string_insertion: ^llt$bit_string_insertion,
      old_debug_table_fragment: ^llt$debug_table_fragment,
      old_deferred_common_blocks: ^llt$deferred_common_blocks,
      old_deferred_entry_points: ^llt$deferred_entry_points,
      old_entry_definition: ^llt$entry_definition,
      old_external_linkage: ^llt$external_linkage,
      old_formal_parameters: ^llt$formal_parameters,
      old_identification: ^llt$identification,
      old_libraries: ^llt$libraries,
      old_line_address_table: ^llt$line_address_table,
      old_load_module_header: ^llt$load_module_header,
      old_m68000_absolute: ^llt$68000_absolute,
      old_object_text_descriptor: ^llt$object_text_descriptor,
      old_obsolete_formal_parameters: ^llt$obsolete_formal_parameters,
      old_obsolete_line_address_table: ^llt$obsolete_line_address_table,
      old_obsolete_segment_def: ^llt$obsolete_segment_definition,
      old_replication: ^llt$replication,
      old_section: ^llt$code_element,
      old_section_definition: ^llt$section_definition,
      old_segment_definition: ^llt$segment_definition,
      old_supplemental_debug_tables: ^llt$supplemental_debug_tables,
      old_symbol_table: ^llt$symbol_table,
      old_text: ^llt$text,
      old_transfer_symbol: ^llt$transfer_symbol,
      record_number: integer,
      relative_pointer: ost$relative_pointer,
      reset_value: ^SEQ ( * ),
      sec_or_seg_def_encountered: boolean,
      valid_position: boolean;


    NEXT new_load_module_header IN temporary_library;
    IF new_load_module_header = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY31', status);
      RETURN;
    IFEND;

    new_load_module_header^.module_index := module_index;
    new_load_module_header^.interpretive_header.elements_defined := $llt$interpretive_elements [];
    new_load_module_header^.elements_defined := $llt$load_module_elements [llc$interpretive_element];

    old_object_text_descriptor := #PTR (module_description^.load_module_header^.interpretive_element,
          module_description^.file^);
    IF old_object_text_descriptor = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    RESET module_description^.file TO old_object_text_descriptor;
    NEXT old_object_text_descriptor IN module_description^.file;

    record_number := 1;

    NEXT new_object_text_descriptor IN temporary_library;
    IF new_object_text_descriptor = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY32', status);
      RETURN;
    IFEND;

    new_object_text_descriptor^ := old_object_text_descriptor^;

    new_load_module_header^.interpretive_element := #REL (new_object_text_descriptor, temporary_library^);

    NEXT old_identification IN module_description^.file;
    IF old_identification = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_identification IN temporary_library;
    IF new_identification = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY33', status);
      RETURN;
    IFEND;

    new_identification^ := old_identification^;

    module_description^.segment_relocation_info := NIL;

    entry_points_have_been_changed := FALSE;
    application_identifier_changed := FALSE;

    IF changed_info <> NIL THEN
      IF changed_info^.name <> NIL THEN
        new_identification^.name := changed_info^.name^;
      IFEND;

      IF changed_info^.commentary <> NIL THEN
        new_identification^.commentary := changed_info^.commentary^;
      IFEND;

      IF changed_info^.entry_points <> NIL THEN
        entry_points_have_been_changed := TRUE;
        new_entry_point := changed_info^.entry_points;
        new_starting_procedure := changed_info^.starting_procedure;
      IFEND;

      IF changed_info^.application_identifier <> NIL THEN
        application_identifier_changed := TRUE;
      IFEND;

      IF changed_info^.cybil_parameter_checking = object_type_checking THEN
        new_identification^.attributes := new_identification^.attributes +
              $llt$module_attributes [llc$object_cybil_checking];
      ELSE
        new_identification^.attributes := new_identification^.attributes -
              $llt$module_attributes [llc$object_cybil_checking];
      IFEND;

      libraries_have_been_changed := changed_info^.new_libraries;
      debug_tables_to_omit := changed_info^.debug_tables_to_omit;
    ELSE
      libraries_have_been_changed := FALSE;
      debug_tables_to_omit := $oct$debug_tables [];
    IFEND;

    NEXT old_object_text_descriptor IN module_description^.file;
    IF old_object_text_descriptor = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    record_number := record_number + 1;

    NEXT new_object_text_descriptor IN temporary_library;
    IF new_object_text_descriptor = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY34', status);
      RETURN;
    IFEND;

    new_object_text_descriptor^ := old_object_text_descriptor^;

    IF NOT application_identifier_changed THEN
      IF old_object_text_descriptor^.kind = llc$application_identifier THEN

        NEXT old_application_identifier IN module_description^.file;
        IF old_application_identifier = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        NEXT new_application_identifier IN temporary_library;
        IF new_application_identifier = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY34.2', status);
          RETURN;
        IFEND;

        new_application_identifier^ := old_application_identifier^;

        NEXT old_object_text_descriptor IN module_description^.file;
        IF old_object_text_descriptor = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        record_number := record_number + 1;

        NEXT new_object_text_descriptor IN temporary_library;
        IF new_object_text_descriptor = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY34.4', status);
          RETURN;
        IFEND;

        new_object_text_descriptor^ := old_object_text_descriptor^;
      IFEND;

    ELSE
      IF changed_info^.application_identifier^.name <> osc$null_name THEN
        new_object_text_descriptor^.kind := llc$application_identifier;

        NEXT new_application_identifier IN temporary_library;
        IF new_application_identifier = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY34.6', status);
          RETURN;
        IFEND;

        new_application_identifier^.name := changed_info^.application_identifier^.name;

        NEXT new_object_text_descriptor IN temporary_library;
        IF new_object_text_descriptor = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY34.8', status);
          RETURN;
        IFEND;
      IFEND;

      IF old_object_text_descriptor^.kind = llc$application_identifier THEN
        NEXT old_application_identifier IN module_description^.file;
        IF old_application_identifier = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        NEXT old_object_text_descriptor IN module_description^.file;
        IF old_object_text_descriptor = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        record_number := record_number + 1;
      IFEND;
      new_object_text_descriptor^ := old_object_text_descriptor^;
    IFEND;

    IF NOT libraries_have_been_changed THEN
      IF old_object_text_descriptor^.kind = llc$libraries THEN
        new_load_module_header^.interpretive_header.library_list :=
              #REL (new_object_text_descriptor, temporary_library^);
        new_load_module_header^.interpretive_header.elements_defined :=
              new_load_module_header^.interpretive_header.elements_defined +
              $llt$interpretive_elements [llc$library_element];

        NEXT old_libraries: [1 .. old_object_text_descriptor^.number_of_libraries] IN
              module_description^.file;
        IF old_libraries = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        NEXT new_libraries: [1 .. new_object_text_descriptor^.number_of_libraries] IN temporary_library;
        IF new_libraries = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY35', status);
          RETURN;
        IFEND;

        new_libraries^ := old_libraries^;

        NEXT old_object_text_descriptor IN module_description^.file;
        IF old_object_text_descriptor = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        record_number := record_number + 1;

        NEXT new_object_text_descriptor IN temporary_library;
        IF new_object_text_descriptor = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY36', status);
          RETURN;
        IFEND;

        new_object_text_descriptor^ := old_object_text_descriptor^;
      IFEND;

    ELSE
      IF changed_info^.library_list <> NIL THEN
        new_load_module_header^.interpretive_header.library_list :=
              #REL (new_object_text_descriptor, temporary_library^);
        new_load_module_header^.interpretive_header.elements_defined :=
              new_load_module_header^.interpretive_header.elements_defined +
              $llt$interpretive_elements [llc$library_element];
        library_list := changed_info^.library_list;
        number_of_libraries := 0;
        WHILE library_list <> NIL DO
          number_of_libraries := number_of_libraries + 1;
          library_list := library_list^.link;
        WHILEND;

        IF number_of_libraries > llc$max_libraries THEN
          osp$set_status_abnormal (oc, oce$e_too_many_libraries, '', status);
          RETURN;
        IFEND;

        new_object_text_descriptor^.kind := llc$libraries;
        new_object_text_descriptor^.number_of_libraries := number_of_libraries;

        NEXT new_libraries: [1 .. new_object_text_descriptor^.number_of_libraries] IN temporary_library;
        IF new_libraries = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY37', status);
          RETURN;
        IFEND;

        library_list := changed_info^.library_list;

        FOR library_number := 1 TO number_of_libraries DO
          new_libraries^ [library_number] := library_list^.name;
          library_list := library_list^.link;
        FOREND;

        NEXT new_object_text_descriptor IN temporary_library;
        IF new_object_text_descriptor = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY38', status);
          RETURN;
        IFEND;
      IFEND;

      IF old_object_text_descriptor^.kind = llc$libraries THEN
        NEXT old_libraries: [1 .. old_object_text_descriptor^.number_of_libraries] IN
              module_description^.file;
        IF old_libraries = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        NEXT old_object_text_descriptor IN module_description^.file;
        IF old_object_text_descriptor = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        record_number := record_number + 1;
      IFEND;
      new_object_text_descriptor^ := old_object_text_descriptor^;
    IFEND;

    sec_or_seg_def_encountered := FALSE;

    IF (old_object_text_descriptor^.kind = llc$segment_definition) OR
          (old_object_text_descriptor^.kind = llc$allotted_segment_definition) THEN

      old_obsolete_segment_def := NIL; { Make sure these aren't used }
      new_obsolete_segment_def := NIL;

      IF NOT sec_or_seg_def_encountered THEN
        new_load_module_header^.interpretive_header.section_definitions :=
              #REL (new_object_text_descriptor, temporary_library^);
        new_load_module_header^.interpretive_header.elements_defined :=
              new_load_module_header^.interpretive_header.elements_defined +
              $llt$interpretive_elements [llc$section_element];
        sec_or_seg_def_encountered := TRUE;
      IFEND;

      NEXT module_description^.segment_relocation_info: [0 .. new_identification^.greatest_section_ordinal] IN
            ocv$olg_scratch_seq;
      IF module_description^.segment_relocation_info = NIL THEN
        osp$set_status_abnormal (oc, oce$e_internal_olg_seg_overflow, '', status);
        RETURN;
      IFEND;

      REPEAT
        NEXT old_segment_definition IN module_description^.file;
        IF old_segment_definition = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        NEXT new_segment_definition IN temporary_library;
        IF new_segment_definition = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY39', status);
          RETURN;
        IFEND;

        new_segment_definition^ := old_segment_definition^;

        IF new_object_text_descriptor^.kind <> llc$allotted_segment_definition THEN
          module_description^.segment_relocation_info^ [new_segment_definition^.section_definition.
                section_ordinal].old_offset := 0;
          module_description^.segment_relocation_info^ [new_segment_definition^.section_definition.
                section_ordinal].new_offset := 0;
        ELSE
          IF (old_object_text_descriptor^.allotted_segment_length <> 0) THEN
            length := old_object_text_descriptor^.allotted_segment_length;
          ELSE
            length := new_segment_definition^.section_definition.length;
          IFEND;

          reset_value := module_description^.file;
          pmp$position_object_library (module_description^.file, old_object_text_descriptor^.allotted_segment,
                valid_position);
          IF NOT valid_position THEN
            osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
            RETURN;
          IFEND;

          NEXT old_section: [1 .. length] IN module_description^.file;
          IF old_section = NIL THEN
            osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
            RETURN;
          IFEND;

          module_description^.file := reset_value;

          IF old_segment_definition^.section_definition.kind = llc$code_section THEN
            write_new_section (old_section, ^new_segment_definition^.section_definition, length,
                  new_code_section, relative_pointer);
          ELSE
            write_new_section (old_section, ^new_segment_definition^.section_definition, length,
                  new_read_section, relative_pointer);
          IFEND;
          new_object_text_descriptor^.allotted_segment := relative_pointer;

          reset_value := temporary_library;
          pmp$position_object_library (temporary_library, new_object_text_descriptor^.allotted_segment,
                valid_position);
          IF NOT valid_position THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY40', status);
            RETURN;
          IFEND;

          IF (old_object_text_descriptor^.allotted_segment_length <> 0) THEN
            NEXT module_description^.segment_relocation_info^
                  [new_segment_definition^.section_definition.section_ordinal].text: [1 .. length] IN
                  temporary_library;
            module_description^.segment_relocation_info^ [new_segment_definition^.section_definition.
                  section_ordinal].old_offset := 0;
            module_description^.segment_relocation_info^ [new_segment_definition^.section_definition.
                  section_ordinal].new_offset := 0;
          ELSE
            NEXT module_description^.segment_relocation_info^
                  [new_segment_definition^.section_definition.section_ordinal].text: [1 .. length] IN
                  temporary_library;
            module_description^.segment_relocation_info^ [new_segment_definition^.section_definition.
                  section_ordinal].old_offset := old_object_text_descriptor^.allotted_segment;
            module_description^.segment_relocation_info^ [new_segment_definition^.section_definition.
                  section_ordinal].new_offset := new_object_text_descriptor^.allotted_segment;
          IFEND;
          temporary_library := reset_value;
        IFEND;

        NEXT old_object_text_descriptor IN module_description^.file;
        IF old_object_text_descriptor = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        record_number := record_number + 1;

        NEXT new_object_text_descriptor IN temporary_library;
        IF new_object_text_descriptor = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY41', status);
          RETURN;
        IFEND;

        new_object_text_descriptor^ := old_object_text_descriptor^;

      UNTIL (old_object_text_descriptor^.kind <> llc$segment_definition) AND
            (old_object_text_descriptor^.kind <> llc$allotted_segment_definition);
    IFEND;

    IF (old_object_text_descriptor^.kind = llc$obsolete_segment_definition) OR
          (old_object_text_descriptor^.kind = llc$obsolete_allotted_seg_def) THEN

      old_segment_definition := NIL; { Make sure these aren't used }
      new_segment_definition := NIL;

      IF NOT sec_or_seg_def_encountered THEN
        new_load_module_header^.interpretive_header.section_definitions :=
              #REL (new_object_text_descriptor, temporary_library^);
        new_load_module_header^.interpretive_header.elements_defined :=
              new_load_module_header^.interpretive_header.elements_defined +
              $llt$interpretive_elements [llc$section_element];
        sec_or_seg_def_encountered := TRUE;
      IFEND;

      NEXT module_description^.segment_relocation_info: [0 .. new_identification^.greatest_section_ordinal] IN
            ocv$olg_scratch_seq;
      IF module_description^.segment_relocation_info = NIL THEN
        osp$set_status_abnormal (oc, oce$e_internal_olg_seg_overflow, '', status);
        RETURN;
      IFEND;

      REPEAT
        NEXT old_obsolete_segment_def IN module_description^.file;
        IF old_obsolete_segment_def = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        NEXT new_obsolete_segment_def IN temporary_library;
        IF new_obsolete_segment_def = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY42', status);
          RETURN;
        IFEND;

        new_obsolete_segment_def^ := old_obsolete_segment_def^;

        IF new_object_text_descriptor^.kind <> llc$obsolete_allotted_seg_def THEN
          module_description^.segment_relocation_info^ [new_obsolete_segment_def^.section_definition.
                section_ordinal].old_offset := 0;
          module_description^.segment_relocation_info^ [new_obsolete_segment_def^.section_definition.
                section_ordinal].new_offset := 0;
        ELSE
          IF (old_object_text_descriptor^.allotted_segment_length <> 0) THEN
            length := old_object_text_descriptor^.allotted_segment_length;
          ELSE
            length := new_obsolete_segment_def^.section_definition.length;
          IFEND;

          reset_value := module_description^.file;
          pmp$position_object_library (module_description^.file, old_object_text_descriptor^.allotted_segment,
                valid_position);
          IF NOT valid_position THEN
            osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
            RETURN;
          IFEND;

          NEXT old_section: [1 .. length] IN module_description^.file;
          IF old_section = NIL THEN
            osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
            RETURN;
          IFEND;

          module_description^.file := reset_value;

          IF old_obsolete_segment_def^.section_definition.kind = llc$code_section THEN
            write_new_section (old_section, ^new_obsolete_segment_def^.section_definition, length,
                  new_code_section, relative_pointer);
          ELSE
            write_new_section (old_section, ^new_obsolete_segment_def^.section_definition, length,
                  new_read_section, relative_pointer);
          IFEND;
          new_object_text_descriptor^.allotted_segment := relative_pointer;

          reset_value := temporary_library;
          pmp$position_object_library (temporary_library, new_object_text_descriptor^.allotted_segment,
                valid_position);
          IF NOT valid_position THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY43', status);
            RETURN;
          IFEND;

          IF (old_object_text_descriptor^.allotted_segment_length <> 0) THEN
            NEXT module_description^.segment_relocation_info^
                  [new_obsolete_segment_def^.section_definition.section_ordinal].text: [1 .. length] IN
                  temporary_library;
            module_description^.segment_relocation_info^ [new_obsolete_segment_def^.section_definition.
                  section_ordinal].old_offset := 0;
            module_description^.segment_relocation_info^ [new_obsolete_segment_def^.section_definition.
                  section_ordinal].new_offset := 0;
          ELSE
            NEXT module_description^.segment_relocation_info^
                  [new_obsolete_segment_def^.section_definition.section_ordinal].text: [1 .. length] IN
                  temporary_library;
            module_description^.segment_relocation_info^ [new_obsolete_segment_def^.section_definition.
                  section_ordinal].old_offset := old_object_text_descriptor^.allotted_segment;
            module_description^.segment_relocation_info^ [new_obsolete_segment_def^.section_definition.
                  section_ordinal].new_offset := new_object_text_descriptor^.allotted_segment;
          IFEND;
          temporary_library := reset_value;
        IFEND;

        NEXT old_object_text_descriptor IN module_description^.file;
        IF old_object_text_descriptor = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        record_number := record_number + 1;

        NEXT new_object_text_descriptor IN temporary_library;
        IF new_object_text_descriptor = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY44', status);
          RETURN;
        IFEND;

        new_object_text_descriptor^ := old_object_text_descriptor^;

      UNTIL (old_object_text_descriptor^.kind <> llc$obsolete_segment_definition) AND
            (old_object_text_descriptor^.kind <> llc$obsolete_allotted_seg_def);
    IFEND;

    IF (old_object_text_descriptor^.kind = llc$section_definition) OR
          (old_object_text_descriptor^.kind = llc$allotted_section_definition) OR
          (old_object_text_descriptor^.kind = llc$unallocated_common_block) THEN

      IF NOT sec_or_seg_def_encountered THEN
        new_load_module_header^.interpretive_header.section_definitions :=
              #REL (new_object_text_descriptor, temporary_library^);
        new_load_module_header^.interpretive_header.elements_defined :=
              new_load_module_header^.interpretive_header.elements_defined +
              $llt$interpretive_elements [llc$section_element];
        sec_or_seg_def_encountered := TRUE;
      IFEND;

      REPEAT
        NEXT old_section_definition IN module_description^.file;
        IF old_section_definition = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        NEXT new_section_definition IN temporary_library;
        IF new_section_definition = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY45', status);
          RETURN;
        IFEND;

        new_section_definition^ := old_section_definition^;
        IF (module_description^.segment_relocation_info <> NIL) THEN
          module_description^.segment_relocation_info^ [new_section_definition^.section_ordinal].old_offset :=
                0;
          module_description^.segment_relocation_info^ [new_section_definition^.section_ordinal].new_offset :=
                0;
        IFEND;

        IF old_object_text_descriptor^.kind = llc$allotted_section_definition THEN
          reset_value := module_description^.file;
          pmp$position_object_library (module_description^.file, old_object_text_descriptor^.allotted_section,
                valid_position);
          IF NOT valid_position THEN
            osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
            RETURN;
          IFEND;

          NEXT old_section: [1 .. old_section_definition^.length] IN module_description^.file;
          IF old_section = NIL THEN
            osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
            RETURN;
          IFEND;

          module_description^.file := reset_value;

          IF old_section_definition^.kind = llc$code_section THEN
            write_new_section (old_section, new_section_definition, new_section_definition^.length,
                  new_code_section, new_object_text_descriptor^.allotted_section);
          ELSE
            write_new_section (old_section, new_section_definition, new_section_definition^.length,
                  new_read_section, new_object_text_descriptor^.allotted_section);
          IFEND;
        IFEND;

        NEXT old_object_text_descriptor IN module_description^.file;
        IF old_object_text_descriptor = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        record_number := record_number + 1;

        NEXT new_object_text_descriptor IN temporary_library;
        IF new_object_text_descriptor = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY46', status);
          RETURN;
        IFEND;

        new_object_text_descriptor^ := old_object_text_descriptor^;

      UNTIL (old_object_text_descriptor^.kind <> llc$section_definition) AND
            (old_object_text_descriptor^.kind <> llc$allotted_section_definition) AND
            (old_object_text_descriptor^.kind <> llc$unallocated_common_block);
    IFEND;

    new_load_module_header^.interpretive_header.elements_defined :=
          new_load_module_header^.interpretive_header.elements_defined -
          $llt$interpretive_elements [llc$entry_point_element, llc$external_element];

    REPEAT

      CASE old_object_text_descriptor^.kind OF

      = llc$text =
        NEXT old_text: [1 .. old_object_text_descriptor^.number_of_bytes] IN module_description^.file;
        IF old_text = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        NEXT new_text: [1 .. new_object_text_descriptor^.number_of_bytes] IN temporary_library;
        IF new_text = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY47', status);
          RETURN;
        IFEND;

        new_text^ := old_text^;

        IF module_description^.segment_relocation_info <> NIL THEN
          module_description^.segment_relocation_info^ [new_text^.section_ordinal].text := ^new_text^.byte;
        IFEND;

      = llc$replication =
        NEXT old_replication: [1 .. old_object_text_descriptor^.number_of_bytes] IN module_description^.file;
        IF old_replication = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        NEXT new_replication: [1 .. new_object_text_descriptor^.number_of_bytes] IN temporary_library;
        IF new_replication = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY48', status);
          RETURN;
        IFEND;

        new_replication^ := old_replication^;

      = llc$bit_string_insertion =
        NEXT old_bit_string_insertion IN module_description^.file;
        IF old_bit_string_insertion = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        NEXT new_bit_string_insertion IN temporary_library;
        IF new_bit_string_insertion = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY49', status);
          RETURN;
        IFEND;

        new_bit_string_insertion^ := old_bit_string_insertion^;

      = llc$address_formulation =
        NEXT old_address_formulation: [1 .. old_object_text_descriptor^.number_of_adr_items] IN
              module_description^.file;
        IF old_address_formulation = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        NEXT new_address_formulation: [1 .. new_object_text_descriptor^.number_of_adr_items] IN
              temporary_library;
        IF new_address_formulation = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY50', status);
          RETURN;
        IFEND;

        new_address_formulation^ := old_address_formulation^;

      = llc$obsolete_formal_parameters =
        NEXT old_obsolete_formal_parameters: [[REP old_object_text_descriptor^.sequence_length OF cell]] IN
              module_description^.file;
        IF old_obsolete_formal_parameters = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;
        RESET temporary_library TO new_object_text_descriptor;

      = llc$formal_parameters =
        NEXT old_formal_parameters: [[REP old_object_text_descriptor^.sequence_length OF cell]] IN
              module_description^.file;
        IF old_formal_parameters = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        IF NOT (occ$parameter_checking IN debug_tables_to_omit) THEN
          NEXT new_formal_parameters: [[REP new_object_text_descriptor^.sequence_length OF cell]] IN
                temporary_library;
          IF new_formal_parameters = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY51', status);
            RETURN;
          IFEND;

          new_formal_parameters^ := old_formal_parameters^;

          IF entry_points_have_been_changed THEN
            find_old_entry_point_name (module_description^.name, changed_info^.entry_points,
                  old_formal_parameters^.procedure_name, new_formal_parameters^.procedure_name, status);
            IF NOT status.normal THEN
              RETURN;
            IFEND;

            IF (new_formal_parameters^.procedure_name = osc$null_name) THEN
              RESET temporary_library TO new_object_text_descriptor;
              RETURN;
            IFEND;
          IFEND;
        ELSE
          RESET temporary_library TO new_object_text_descriptor;
        IFEND;

      = llc$actual_parameters =
        NEXT old_actual_parameters: [[REP old_object_text_descriptor^.sequence_length OF cell]] IN
              module_description^.file;
        IF old_actual_parameters = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        IF NOT (occ$parameter_checking IN debug_tables_to_omit) THEN
          NEXT new_actual_parameters: [[REP new_object_text_descriptor^.sequence_length OF cell]] IN
                temporary_library;
          IF new_actual_parameters = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY52', status);
            RETURN;
          IFEND;

          new_actual_parameters^ := old_actual_parameters^;
        ELSE
          RESET temporary_library TO new_object_text_descriptor;
        IFEND;

      = llc$cybil_symbol_table_fragment =
        NEXT old_debug_table_fragment: [[REP old_object_text_descriptor^.sequence_length OF cell]] IN
              module_description^.file;
        IF old_debug_table_fragment = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        IF NOT (occ$symbol_table IN debug_tables_to_omit) THEN
          NEXT new_debug_table_fragment: [[REP new_object_text_descriptor^.sequence_length OF cell]] IN
                temporary_library;
          IF new_debug_table_fragment = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY53', status);
            RETURN;
          IFEND;

          new_debug_table_fragment^ := old_debug_table_fragment^;
        ELSE
          RESET temporary_library TO new_object_text_descriptor;
        IFEND;

      = llc$obsolete_line_table =
        NEXT old_obsolete_line_address_table: [1 .. old_object_text_descriptor^.number_of_line_items] IN
              module_description^.file;
        IF old_obsolete_line_address_table = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        IF NOT (occ$line_table IN debug_tables_to_omit) THEN
          NEXT new_obsolete_line_address_table: [1 .. new_object_text_descriptor^.number_of_line_items] IN
                temporary_library;
          IF new_obsolete_line_address_table = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY54', status);
            RETURN;
          IFEND;

          new_obsolete_line_address_table^ := old_obsolete_line_address_table^;
        ELSE
          RESET temporary_library TO new_object_text_descriptor;
        IFEND;

      = llc$symbol_table =
        NEXT old_symbol_table: [[REP old_object_text_descriptor^.sequence_length OF cell]] IN
              module_description^.file;
        IF old_symbol_table = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        IF NOT (occ$symbol_table IN debug_tables_to_omit) THEN
          NEXT new_symbol_table: [[REP new_object_text_descriptor^.sequence_length OF cell]] IN
                temporary_library;
          IF new_symbol_table = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY55', status);
            RETURN;
          IFEND;

          new_symbol_table^ := old_symbol_table^;
        ELSE
          RESET temporary_library TO new_object_text_descriptor;
        IFEND;

      = llc$line_table =
        NEXT old_line_address_table: [1 .. old_object_text_descriptor^.number_of_line_items] IN
              module_description^.file;
        IF old_line_address_table = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        IF NOT (occ$line_table IN debug_tables_to_omit) THEN
          NEXT new_line_address_table: [1 .. new_object_text_descriptor^.number_of_line_items] IN
                temporary_library;
          IF new_line_address_table = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY56', status);
            RETURN;
          IFEND;

          new_line_address_table^ := old_line_address_table^;
        ELSE
          RESET temporary_library TO new_object_text_descriptor;
        IFEND;

      = llc$supplemental_debug_tables =
        NEXT old_supplemental_debug_tables: [[REP old_object_text_descriptor^.sequence_length OF cell]] IN
              module_description^.file;
        IF old_supplemental_debug_tables = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        IF NOT (occ$supplemental_debug_table IN debug_tables_to_omit) THEN
          NEXT new_supplemental_debug_tables: [[REP new_object_text_descriptor^.sequence_length OF cell]] IN
                temporary_library;
          IF new_supplemental_debug_tables = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY57', status);
            RETURN;
          IFEND;

          new_supplemental_debug_tables^ := old_supplemental_debug_tables^;
        ELSE
          RESET temporary_library TO new_object_text_descriptor;
        IFEND;

      = llc$form_definition =
        osp$set_status_abnormal (oc, oce$e_form_def_found_in_module, module_name, status);
        RETURN;

      = llc$68000_absolute =
        NEXT old_m68000_absolute: [[REP old_object_text_descriptor^.number_of_68000_bytes OF cell]] IN
              module_description^.file;
        IF old_m68000_absolute = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        NEXT new_m68000_absolute: [[REP new_object_text_descriptor^.number_of_68000_bytes OF cell]] IN
              temporary_library;
        IF new_m68000_absolute = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY58', status);
          RETURN;
        IFEND;

        new_m68000_absolute^ := old_m68000_absolute^;

      = llc$entry_definition =
        NEXT old_entry_definition IN module_description^.file;
        IF old_entry_definition = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        IF (entry_points_have_been_changed) AND (new_entry_point^.name = osc$null_name) THEN
          new_entry_point := new_entry_point^.link;
          RESET temporary_library TO new_object_text_descriptor;
        ELSE
          NEXT new_entry_definition IN temporary_library;
          IF new_entry_definition = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY59', status);
            RETURN;
          IFEND;

          new_entry_definition^ := old_entry_definition^;

          IF NOT (llc$entry_point_element IN new_load_module_header^.interpretive_header.elements_defined)
                THEN
            new_load_module_header^.interpretive_header.elements_defined :=
                  new_load_module_header^.interpretive_header.elements_defined +
                  $llt$interpretive_elements [llc$entry_point_element];
            new_load_module_header^.interpretive_header.entry_points :=
                  #REL (new_object_text_descriptor, temporary_library^);
          IFEND;

          IF entry_points_have_been_changed THEN
            new_entry_definition^.name := new_entry_point^.name;
            new_entry_definition^.attributes := new_entry_point^.attributes;
            new_entry_point := new_entry_point^.link;
          IFEND;
        IFEND;

      = llc$deferred_entry_points =
        NEXT old_deferred_entry_points: [1 .. old_object_text_descriptor^.number_of_entry_points] IN
              module_description^.file;
        IF old_deferred_entry_points = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        NEXT new_deferred_entry_points: [1 .. new_object_text_descriptor^.number_of_entry_points] IN
              temporary_library;
        IF new_deferred_entry_points = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY59.3', status);
          RETURN;
        IFEND;

        new_deferred_entry_points^ := old_deferred_entry_points^;

        IF NOT (llc$entry_point_element IN new_load_module_header^.interpretive_header.elements_defined) THEN
          new_load_module_header^.interpretive_header.elements_defined :=
                new_load_module_header^.interpretive_header.elements_defined +
                $llt$interpretive_elements [llc$entry_point_element];
          new_load_module_header^.interpretive_header.entry_points :=
                #REL (new_object_text_descriptor, temporary_library^);
        IFEND;

        IF module_description^.segment_relocation_info <> NIL THEN
          FOR deferred_index := 1 TO new_object_text_descriptor^.number_of_entry_points DO
            new_deferred_entry_points^ [deferred_index].address.offset :=
                  new_deferred_entry_points^ [deferred_index].address.offset +
                  module_description^.segment_relocation_info^ [new_deferred_entry_points^ [deferred_index].
                  section_ordinal].new_offset - module_description^.
                  segment_relocation_info^ [new_deferred_entry_points^ [deferred_index].section_ordinal].
                  old_offset;
          FOREND;
        IFEND;

      = llc$deferred_common_blocks =
        NEXT old_deferred_common_blocks: [1 .. old_object_text_descriptor^.number_of_common_blocks] IN
              module_description^.file;
        IF old_deferred_common_blocks = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        NEXT new_deferred_common_blocks: [1 .. new_object_text_descriptor^.number_of_common_blocks] IN
              temporary_library;
        IF new_deferred_common_blocks = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY59.6', status);
          RETURN;
        IFEND;

        new_deferred_common_blocks^ := old_deferred_common_blocks^;

      = llc$external_linkage =
        IF NOT (llc$external_element IN new_load_module_header^.interpretive_header.elements_defined) THEN
          new_load_module_header^.interpretive_header.elements_defined :=
                new_load_module_header^.interpretive_header.elements_defined +
                $llt$interpretive_elements [llc$external_element];
          new_load_module_header^.interpretive_header.external_linkages :=
                #REL (new_object_text_descriptor, temporary_library^);
        IFEND;

        NEXT old_external_linkage: [1 .. old_object_text_descriptor^.number_of_ext_items] IN
              module_description^.file;
        IF old_external_linkage = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        NEXT new_external_linkage: [1 .. new_object_text_descriptor^.number_of_ext_items] IN
              temporary_library;
        IF new_external_linkage = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY60', status);
          RETURN;
        IFEND;

        new_external_linkage^ := old_external_linkage^;

      = llc$transfer_symbol =
        new_load_module_header^.interpretive_header.transfer_symbol :=
              #REL (new_object_text_descriptor, temporary_library^);
        new_load_module_header^.interpretive_header.elements_defined :=
              new_load_module_header^.interpretive_header.elements_defined +
              $llt$interpretive_elements [llc$transfer_symbol_element];

        NEXT old_transfer_symbol IN module_description^.file;
        IF old_transfer_symbol = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        NEXT new_transfer_symbol IN temporary_library;
        IF new_transfer_symbol = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY61', status);
          RETURN;
        IFEND;

        IF entry_points_have_been_changed THEN
          new_transfer_symbol^.name := new_starting_procedure;
        ELSE
          new_transfer_symbol^.name := old_transfer_symbol^.name;
        IFEND;

        RETURN;

      ELSE

        osp$set_status_abnormal (oc, oce$e_invalid_object_rec_kind, module_description^.name, status);
        osp$append_status_integer (osc$status_parameter_delimiter, record_number, 10, FALSE, status);
        RETURN;

      CASEND;

      NEXT old_object_text_descriptor IN module_description^.file;
      IF old_object_text_descriptor = NIL THEN
        osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
        RETURN;
      IFEND;

      record_number := record_number + 1;

      NEXT new_object_text_descriptor IN temporary_library;
      IF new_object_text_descriptor = NIL THEN
        osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY62', status);
        RETURN;
      IFEND;

      new_object_text_descriptor^ := old_object_text_descriptor^;

    UNTIL FALSE;


{ The normal return is through the transfer symbol.

  PROCEND copy_load_module;
?? OLDTITLE ??
?? NEWTITLE := '  COPY_LOAD_TO_OBJECT_MODULE' ??
?? EJECT ??

  PROCEDURE [XDCL] copy_load_to_object_module
    (    module_description: ^oct$module_description;
         changed_info: ^oct$changed_info;
     VAR temporary_library: ^SEQ ( * );
     VAR status: ost$status);




    VAR
      old_object_text_descriptor: ^llt$object_text_descriptor,
      old_load_module_header: ^llt$load_module_header,

      old_identification: ^llt$identification,
      old_application_identifier: ^llt$application_identifier,
      old_libraries: ^llt$libraries,
      old_section_definition: ^llt$section_definition,
      old_segment_definition: ^llt$segment_definition,
      old_obsolete_segment_def: ^llt$obsolete_segment_definition,
      old_text: ^llt$text,
      old_replication: ^llt$replication,
      old_bit_string_insertion: ^llt$bit_string_insertion,
      old_entry_definition: ^llt$entry_definition,
      old_deferred_entry_points: ^llt$deferred_entry_points,
      old_deferred_common_blocks: ^llt$deferred_common_blocks,
      old_external_linkage: ^llt$external_linkage,
      old_address_formulation: ^llt$address_formulation,
      old_obsolete_formal_parameters: ^llt$obsolete_formal_parameters,
      old_formal_parameters: ^llt$formal_parameters,
      old_actual_parameters: ^llt$actual_parameters,
      old_debug_table_fragment: ^llt$debug_table_fragment,
      old_obsolete_line_address_table: ^llt$obsolete_line_address_table,
      old_symbol_table: ^llt$symbol_table,
      old_line_address_table: ^llt$line_address_table,
      old_supplemental_debug_tables: ^llt$supplemental_debug_tables,
      old_m68000_absolute: ^llt$68000_absolute,
      old_relocation: ^llt$relocation,
      old_binding_template: ^llt$binding_section_template,
      old_transfer_symbol: ^llt$transfer_symbol,
      old_info_element_header: ^llt$info_element_header,
      old_header: llt$info_element_header,

      new_object_text_descriptor: ^llt$object_text_descriptor,

      new_identification: ^llt$identification,
      new_application_identifier: ^llt$application_identifier,
      new_libraries: ^llt$libraries,
      new_section_definition: ^llt$section_definition,
      new_segment_definition: ^llt$segment_definition,
      new_obsolete_segment_def: ^llt$obsolete_segment_definition,
      new_text: ^llt$text,
      new_replication: ^llt$replication,
      new_bit_string_insertion: ^llt$bit_string_insertion,
      new_entry_definition: ^llt$entry_definition,
      new_deferred_entry_points: ^llt$deferred_entry_points,
      new_deferred_common_blocks: ^llt$deferred_common_blocks,
      new_external_linkage: ^llt$external_linkage,
      new_address_formulation: ^llt$address_formulation,
      new_formal_parameters: ^llt$formal_parameters,
      new_actual_parameters: ^llt$actual_parameters,
      new_debug_table_fragment: ^llt$debug_table_fragment,
      new_obsolete_line_address_table: ^llt$obsolete_line_address_table,
      new_symbol_table: ^llt$symbol_table,
      new_line_address_table: ^llt$line_address_table,
      new_m68000_absolute: ^llt$68000_absolute,
      new_relocation: ^llt$relocation,
      new_supplemental_debug_tables: ^llt$supplemental_debug_tables,
      number_of_rel_items: integer,
      next_rel_item: integer,
      new_binding_template: ^llt$binding_template,
      new_transfer_symbol: ^llt$transfer_symbol,

      valid_position: boolean,
      length: ost$segment_length,
      old_section: ^array [1 .. * ] of 0 .. 255,
      reset_value: ^SEQ ( * ),

      application_identifier_changed: boolean,
      entry_points_have_been_changed: boolean,
      new_starting_procedure: pmt$program_name,

      deferred_index: 1 .. llc$max_deferred_entry_points,
      new_entry_point: ^oct$external_declaration_list,
      module_name: pmt$program_name,
      libraries_have_been_changed: boolean,
      library_list: ^oct$name_list,
      library_number: integer,
      number_of_libraries: integer,
      i: integer,
      debug_tables_to_omit: oct$debug_tables,
      segment_relocation_info: ^oct$segment_relocation_info,
      record_number: integer;


    segment_relocation_info := NIL;

    old_object_text_descriptor := #PTR (module_description^.load_module_header^.interpretive_element,
          module_description^.file^);
    IF old_object_text_descriptor = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    RESET module_description^.file TO old_object_text_descriptor;
    NEXT old_object_text_descriptor IN module_description^.file;

    record_number := 1;

    NEXT new_object_text_descriptor IN temporary_library;
    IF new_object_text_descriptor = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY63', status);
      RETURN;
    IFEND;

    new_object_text_descriptor^ := old_object_text_descriptor^;

    NEXT old_identification IN module_description^.file;
    IF old_identification = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_identification IN temporary_library;
    IF new_identification = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY64', status);
      RETURN;
    IFEND;

    new_identification^ := old_identification^;

    entry_points_have_been_changed := FALSE;
    application_identifier_changed := FALSE;

    IF changed_info <> NIL THEN
      IF changed_info^.name <> NIL THEN
        new_identification^.name := changed_info^.name^;
      IFEND;

      IF changed_info^.commentary <> NIL THEN
        new_identification^.commentary := changed_info^.commentary^;
      IFEND;

      IF changed_info^.entry_points <> NIL THEN
        entry_points_have_been_changed := TRUE;
        new_entry_point := changed_info^.entry_points;
        new_starting_procedure := changed_info^.starting_procedure;
      IFEND;

      IF changed_info^.application_identifier <> NIL THEN
        application_identifier_changed := TRUE;
      IFEND;

      libraries_have_been_changed := changed_info^.new_libraries;
      debug_tables_to_omit := changed_info^.debug_tables_to_omit;
    ELSE
      libraries_have_been_changed := FALSE;
      debug_tables_to_omit := $oct$debug_tables [];
    IFEND;

    NEXT old_object_text_descriptor IN module_description^.file;
    IF old_object_text_descriptor = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    record_number := record_number + 1;

    NEXT new_object_text_descriptor IN temporary_library;
    IF new_object_text_descriptor = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY65', status);
      RETURN;
    IFEND;

    new_object_text_descriptor^ := old_object_text_descriptor^;

    IF NOT application_identifier_changed THEN
      IF old_object_text_descriptor^.kind = llc$application_identifier THEN
        NEXT old_application_identifier IN module_description^.file;
        IF old_application_identifier = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        NEXT new_application_identifier IN temporary_library;
        IF new_application_identifier = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY65.2', status);
          RETURN;
        IFEND;

        new_application_identifier^ := old_application_identifier^;

        NEXT old_object_text_descriptor IN module_description^.file;
        IF old_object_text_descriptor = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        record_number := record_number + 1;

        NEXT new_object_text_descriptor IN temporary_library;
        IF new_object_text_descriptor = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY65.4', status);
          RETURN;
        IFEND;

        new_object_text_descriptor^ := old_object_text_descriptor^;
      IFEND;

    ELSE
      IF changed_info^.application_identifier^.name <> osc$null_name THEN
        new_object_text_descriptor^.kind := llc$application_identifier;

        NEXT new_application_identifier IN temporary_library;
        IF new_application_identifier = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY65.6', status);
          RETURN;
        IFEND;

        new_application_identifier^.name := changed_info^.application_identifier^.name;

        NEXT new_object_text_descriptor IN temporary_library;
        IF new_object_text_descriptor = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY65.8', status);
          RETURN;
        IFEND;
      IFEND;

      IF old_object_text_descriptor^.kind = llc$application_identifier THEN
        NEXT old_application_identifier IN module_description^.file;
        IF old_application_identifier = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        NEXT old_object_text_descriptor IN module_description^.file;
        IF old_object_text_descriptor = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        record_number := record_number + 1;
      IFEND;
      new_object_text_descriptor^ := old_object_text_descriptor^;
    IFEND;

    IF NOT libraries_have_been_changed THEN
      IF old_object_text_descriptor^.kind = llc$libraries THEN
        NEXT old_libraries: [1 .. old_object_text_descriptor^.number_of_libraries] IN
              module_description^.file;
        IF old_libraries = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        NEXT new_libraries: [1 .. new_object_text_descriptor^.number_of_libraries] IN temporary_library;
        IF new_libraries = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY66', status);
          RETURN;
        IFEND;

        new_libraries^ := old_libraries^;

        NEXT old_object_text_descriptor IN module_description^.file;
        IF old_object_text_descriptor = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        record_number := record_number + 1;

        NEXT new_object_text_descriptor IN temporary_library;
        IF new_object_text_descriptor = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY67', status);
          RETURN;
        IFEND;

        new_object_text_descriptor^ := old_object_text_descriptor^;
      IFEND;

    ELSE
      IF changed_info^.library_list <> NIL THEN
        library_list := changed_info^.library_list;
        number_of_libraries := 0;
        WHILE library_list <> NIL DO
          number_of_libraries := number_of_libraries + 1;
          library_list := library_list^.link;
        WHILEND;

        IF number_of_libraries > llc$max_libraries THEN
          osp$set_status_abnormal (oc, oce$e_too_many_libraries, '', status);
          RETURN;
        IFEND;

        new_object_text_descriptor^.kind := llc$libraries;
        new_object_text_descriptor^.number_of_libraries := number_of_libraries;

        NEXT new_libraries: [1 .. new_object_text_descriptor^.number_of_libraries] IN temporary_library;
        IF new_libraries = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY68', status);
          RETURN;
        IFEND;

        library_list := changed_info^.library_list;

        FOR library_number := 1 TO number_of_libraries DO
          new_libraries^ [library_number] := library_list^.name;
          library_list := library_list^.link;
        FOREND;

        NEXT new_object_text_descriptor IN temporary_library;
        IF new_object_text_descriptor = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY69', status);
          RETURN;
        IFEND;
      IFEND;

      IF old_object_text_descriptor^.kind = llc$libraries THEN
        NEXT old_libraries: [1 .. old_object_text_descriptor^.number_of_libraries] IN
              module_description^.file;
        IF old_libraries = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        NEXT old_object_text_descriptor IN module_description^.file;
        IF old_object_text_descriptor = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        record_number := record_number + 1;
      IFEND;
      new_object_text_descriptor^ := old_object_text_descriptor^;
    IFEND;

    IF (old_object_text_descriptor^.kind = llc$segment_definition) OR
          (old_object_text_descriptor^.kind = llc$allotted_segment_definition) THEN
      PUSH segment_relocation_info: [0 .. new_identification^.greatest_section_ordinal];

      old_obsolete_segment_def := NIL; { Make sure these aren't used }
      new_obsolete_segment_def := NIL;

      WHILE (old_object_text_descriptor^.kind = llc$segment_definition) OR
            (old_object_text_descriptor^.kind = llc$allotted_segment_definition) DO

        NEXT old_segment_definition IN module_description^.file;
        IF old_segment_definition = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        NEXT new_segment_definition IN temporary_library;
        IF new_segment_definition = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY70', status);
          RETURN;
        IFEND;

        new_segment_definition^ := old_segment_definition^;

        IF new_object_text_descriptor^.kind <> llc$allotted_segment_definition THEN
          segment_relocation_info^ [new_segment_definition^.section_definition.section_ordinal].old_offset :=
                0;
          segment_relocation_info^ [new_segment_definition^.section_definition.section_ordinal].new_offset :=
                0;
        ELSE
          new_object_text_descriptor^.kind := llc$segment_definition;
          new_object_text_descriptor^.unused := 0;

          reset_value := module_description^.file;
          pmp$position_object_library (module_description^.file, old_object_text_descriptor^.allotted_segment,
                valid_position);
          IF NOT valid_position THEN
            osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
            RETURN;
          IFEND;

          IF (old_object_text_descriptor^.allotted_segment_length <> 0) AND
                (old_object_text_descriptor^.allotted_segment_length <=
                old_segment_definition^.section_definition.length) THEN
            length := old_object_text_descriptor^.allotted_segment_length;
          ELSE
            length := old_segment_definition^.section_definition.length;
          IFEND;

          NEXT old_section: [1 .. length] IN module_description^.file;
          IF old_section = NIL THEN
            osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
            RETURN;
          IFEND;

          module_description^.file := reset_value;

          NEXT new_object_text_descriptor IN temporary_library;
          IF new_object_text_descriptor = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY71', status);
            RETURN;
          IFEND;

          new_object_text_descriptor^.kind := llc$text;
          new_object_text_descriptor^.number_of_bytes := length;

          NEXT new_text: [1 .. new_object_text_descriptor^.number_of_bytes] IN temporary_library;
          IF new_text = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY72', status);
            RETURN;
          IFEND;

          new_text^.section_ordinal := new_segment_definition^.section_definition.section_ordinal;
          new_text^.offset := 0;
          new_text^.byte := old_section^;

          IF (old_object_text_descriptor^.allotted_segment_length <> 0) THEN {allotted rw relocates to 0}
            segment_relocation_info^ [new_segment_definition^.section_definition.section_ordinal].
                  old_offset := 0;
            segment_relocation_info^ [new_segment_definition^.section_definition.section_ordinal].
                  new_offset := 0;
          ELSE
            segment_relocation_info^ [new_segment_definition^.section_definition.section_ordinal].
                  old_offset := old_object_text_descriptor^.allotted_segment;
            segment_relocation_info^ [new_segment_definition^.section_definition.section_ordinal].
                  new_offset := 0;
          IFEND;
          segment_relocation_info^ [new_segment_definition^.section_definition.section_ordinal].text :=
                ^new_text^.byte;
        IFEND;


        NEXT old_object_text_descriptor IN module_description^.file;
        IF old_object_text_descriptor = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        record_number := record_number + 1;

        NEXT new_object_text_descriptor IN temporary_library;
        IF new_object_text_descriptor = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY73', status);
          RETURN;
        IFEND;

        new_object_text_descriptor^ := old_object_text_descriptor^;

      WHILEND;
    IFEND;

    IF (old_object_text_descriptor^.kind = llc$obsolete_segment_definition) OR
          (old_object_text_descriptor^.kind = llc$obsolete_allotted_seg_def) THEN
      PUSH segment_relocation_info: [0 .. new_identification^.greatest_section_ordinal];

      old_segment_definition := NIL; { Make sure these aren't used }
      new_segment_definition := NIL;

      WHILE (old_object_text_descriptor^.kind = llc$obsolete_segment_definition) OR
            (old_object_text_descriptor^.kind = llc$obsolete_allotted_seg_def) DO

        NEXT old_obsolete_segment_def IN module_description^.file;
        IF old_obsolete_segment_def = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        NEXT new_obsolete_segment_def IN temporary_library;
        IF new_obsolete_segment_def = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY74', status);
          RETURN;
        IFEND;

        new_obsolete_segment_def^ := old_obsolete_segment_def^;

        IF new_object_text_descriptor^.kind <> llc$obsolete_allotted_seg_def THEN
          segment_relocation_info^ [new_obsolete_segment_def^.section_definition.section_ordinal].
                old_offset := 0;
          segment_relocation_info^ [new_obsolete_segment_def^.section_definition.section_ordinal].
                new_offset := 0;
        ELSE
          new_object_text_descriptor^.kind := llc$obsolete_segment_definition;
          new_object_text_descriptor^.unused := 0;

          reset_value := module_description^.file;
          pmp$position_object_library (module_description^.file, old_object_text_descriptor^.allotted_segment,
                valid_position);
          IF NOT valid_position THEN
            osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
            RETURN;
          IFEND;

          IF (old_object_text_descriptor^.allotted_segment_length <> 0) AND
                (old_object_text_descriptor^.allotted_segment_length <=
                old_obsolete_segment_def^.section_definition.length) THEN
            length := old_object_text_descriptor^.allotted_segment_length;
          ELSE
            length := old_obsolete_segment_def^.section_definition.length;
          IFEND;

          NEXT old_section: [1 .. length] IN module_description^.file;
          IF old_section = NIL THEN
            osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
            RETURN;
          IFEND;

          module_description^.file := reset_value;

          NEXT new_object_text_descriptor IN temporary_library;
          IF new_object_text_descriptor = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY75', status);
            RETURN;
          IFEND;

          new_object_text_descriptor^.kind := llc$text;
          new_object_text_descriptor^.number_of_bytes := length;

          NEXT new_text: [1 .. new_object_text_descriptor^.number_of_bytes] IN temporary_library;
          IF new_text = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY76', status);
            RETURN;
          IFEND;

          new_text^.section_ordinal := new_obsolete_segment_def^.section_definition.section_ordinal;
          new_text^.offset := 0;
          new_text^.byte := old_section^;

          IF (old_object_text_descriptor^.allotted_segment_length <> 0) THEN {allotted rw relocates to 0}
            segment_relocation_info^ [new_obsolete_segment_def^.section_definition.section_ordinal].
                  old_offset := 0;
            segment_relocation_info^ [new_obsolete_segment_def^.section_definition.section_ordinal].
                  new_offset := 0;
          ELSE
            segment_relocation_info^ [new_obsolete_segment_def^.section_definition.section_ordinal].
                  old_offset := old_object_text_descriptor^.allotted_segment;
            segment_relocation_info^ [new_obsolete_segment_def^.section_definition.section_ordinal].
                  new_offset := 0;
          IFEND;
          segment_relocation_info^ [new_obsolete_segment_def^.section_definition.section_ordinal].text :=
                ^new_text^.byte;
        IFEND;


        NEXT old_object_text_descriptor IN module_description^.file;
        IF old_object_text_descriptor = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        record_number := record_number + 1;

        NEXT new_object_text_descriptor IN temporary_library;
        IF new_object_text_descriptor = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY77', status);
          RETURN;
        IFEND;

        new_object_text_descriptor^ := old_object_text_descriptor^;

      WHILEND;
    IFEND;

    WHILE (old_object_text_descriptor^.kind = llc$section_definition) OR
          (old_object_text_descriptor^.kind = llc$allotted_section_definition) OR
          (old_object_text_descriptor^.kind = llc$unallocated_common_block) DO

      NEXT old_section_definition IN module_description^.file;
      IF old_section_definition = NIL THEN
        osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
        RETURN;
      IFEND;

      NEXT new_section_definition IN temporary_library;
      IF new_section_definition = NIL THEN
        osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY78', status);
        RETURN;
      IFEND;

      new_section_definition^ := old_section_definition^;
      IF (segment_relocation_info <> NIL) THEN
        segment_relocation_info^ [new_section_definition^.section_ordinal].old_offset := 0;
        segment_relocation_info^ [new_section_definition^.section_ordinal].new_offset := 0;
      IFEND;

      IF old_object_text_descriptor^.kind = llc$allotted_section_definition THEN
        new_object_text_descriptor^.kind := llc$section_definition;
        new_object_text_descriptor^.unused := 0;

        reset_value := module_description^.file;
        pmp$position_object_library (module_description^.file, old_object_text_descriptor^.allotted_section,
              valid_position);
        IF NOT valid_position THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        NEXT old_section: [1 .. old_section_definition^.length] IN module_description^.file;
        IF old_section = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        module_description^.file := reset_value;

        NEXT new_object_text_descriptor IN temporary_library;
        IF new_object_text_descriptor = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY79', status);
          RETURN;
        IFEND;

        new_object_text_descriptor^.kind := llc$text;
        new_object_text_descriptor^.number_of_bytes := new_section_definition^.length;

        NEXT new_text: [1 .. new_object_text_descriptor^.number_of_bytes] IN temporary_library;
        IF new_text = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY80', status);
          RETURN;
        IFEND;

        new_text^.section_ordinal := new_section_definition^.section_ordinal;
        new_text^.offset := 0;
        new_text^.byte := old_section^;
      IFEND;


      NEXT old_object_text_descriptor IN module_description^.file;
      IF old_object_text_descriptor = NIL THEN
        osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
        RETURN;
      IFEND;

      record_number := record_number + 1;

      NEXT new_object_text_descriptor IN temporary_library;
      IF new_object_text_descriptor = NIL THEN
        osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY81', status);
        RETURN;
      IFEND;

      new_object_text_descriptor^ := old_object_text_descriptor^;

    WHILEND;

    REPEAT

      CASE old_object_text_descriptor^.kind OF

      = llc$text =
        NEXT old_text: [1 .. old_object_text_descriptor^.number_of_bytes] IN module_description^.file;
        IF old_text = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        NEXT new_text: [1 .. new_object_text_descriptor^.number_of_bytes] IN temporary_library;
        IF new_text = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY82', status);
          RETURN;
        IFEND;

        new_text^ := old_text^;

        IF segment_relocation_info <> NIL THEN
          segment_relocation_info^ [new_text^.section_ordinal].text := ^new_text^.byte;
        IFEND;


      = llc$replication =
        NEXT old_replication: [1 .. old_object_text_descriptor^.number_of_bytes] IN module_description^.file;
        IF old_replication = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        NEXT new_replication: [1 .. new_object_text_descriptor^.number_of_bytes] IN temporary_library;
        IF new_replication = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY83', status);
          RETURN;
        IFEND;

        new_replication^ := old_replication^;

      = llc$bit_string_insertion =
        NEXT old_bit_string_insertion IN module_description^.file;
        IF old_bit_string_insertion = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        NEXT new_bit_string_insertion IN temporary_library;
        IF new_bit_string_insertion = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY84', status);
          RETURN;
        IFEND;

        new_bit_string_insertion^ := old_bit_string_insertion^;

      = llc$address_formulation =
        NEXT old_address_formulation: [1 .. old_object_text_descriptor^.number_of_adr_items] IN
              module_description^.file;
        IF old_address_formulation = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        NEXT new_address_formulation: [1 .. new_object_text_descriptor^.number_of_adr_items] IN
              temporary_library;
        IF new_address_formulation = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY85', status);
          RETURN;
        IFEND;

        new_address_formulation^ := old_address_formulation^;


      = llc$obsolete_formal_parameters =
        NEXT old_obsolete_formal_parameters: [[REP old_object_text_descriptor^.sequence_length OF cell]] IN
              module_description^.file;
        IF old_obsolete_formal_parameters = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;
        RESET temporary_library TO new_object_text_descriptor;

      = llc$formal_parameters =
        NEXT old_formal_parameters: [[REP old_object_text_descriptor^.sequence_length OF cell]] IN
              module_description^.file;
        IF old_formal_parameters = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        IF NOT (occ$parameter_checking IN debug_tables_to_omit) THEN
          NEXT new_formal_parameters: [[REP new_object_text_descriptor^.sequence_length OF cell]] IN
                temporary_library;
          IF new_formal_parameters = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY86', status);
            RETURN;
          IFEND;

          new_formal_parameters^ := old_formal_parameters^;

          IF entry_points_have_been_changed THEN
            find_old_entry_point_name (module_description^.name, changed_info^.entry_points,
                  old_formal_parameters^.procedure_name, new_formal_parameters^.procedure_name, status);
            IF NOT status.normal THEN
              RETURN;
            IFEND;

            IF (new_formal_parameters^.procedure_name = osc$null_name) THEN
              RESET temporary_library TO new_object_text_descriptor;
              RETURN;
            IFEND;
          IFEND;
        ELSE
          RESET temporary_library TO new_object_text_descriptor;
        IFEND;


      = llc$actual_parameters =
        NEXT old_actual_parameters: [[REP old_object_text_descriptor^.sequence_length OF cell]] IN
              module_description^.file;
        IF old_actual_parameters = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        IF NOT (occ$parameter_checking IN debug_tables_to_omit) THEN
          NEXT new_actual_parameters: [[REP new_object_text_descriptor^.sequence_length OF cell]] IN
                temporary_library;
          IF new_actual_parameters = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY87', status);
            RETURN;
          IFEND;

          new_actual_parameters^ := old_actual_parameters^;
        ELSE
          RESET temporary_library TO new_object_text_descriptor;
        IFEND;

      = llc$cybil_symbol_table_fragment =
        NEXT old_debug_table_fragment: [[REP old_object_text_descriptor^.sequence_length OF cell]] IN
              module_description^.file;
        IF old_debug_table_fragment = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        IF NOT (occ$symbol_table IN debug_tables_to_omit) THEN
          NEXT new_debug_table_fragment: [[REP new_object_text_descriptor^.sequence_length OF cell]] IN
                temporary_library;
          IF new_debug_table_fragment = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY88', status);
            RETURN;
          IFEND;

          new_debug_table_fragment^ := old_debug_table_fragment^;
        ELSE
          RESET temporary_library TO new_object_text_descriptor;
        IFEND;

      = llc$obsolete_line_table =
        NEXT old_obsolete_line_address_table: [1 .. old_object_text_descriptor^.number_of_line_items] IN
              module_description^.file;
        IF old_obsolete_line_address_table = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        IF NOT (occ$line_table IN debug_tables_to_omit) THEN
          NEXT new_obsolete_line_address_table: [1 .. new_object_text_descriptor^.number_of_line_items] IN
                temporary_library;
          IF new_obsolete_line_address_table = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY89', status);
            RETURN;
          IFEND;

          new_obsolete_line_address_table^ := old_obsolete_line_address_table^;
        ELSE
          RESET temporary_library TO new_object_text_descriptor;
        IFEND;


      = llc$symbol_table =
        NEXT old_symbol_table: [[REP old_object_text_descriptor^.sequence_length OF cell]] IN
              module_description^.file;
        IF old_symbol_table = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        IF NOT (occ$symbol_table IN debug_tables_to_omit) THEN
          NEXT new_symbol_table: [[REP new_object_text_descriptor^.sequence_length OF cell]] IN
                temporary_library;
          IF new_symbol_table = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY90', status);
            RETURN;
          IFEND;

          new_symbol_table^ := old_symbol_table^;
        ELSE
          RESET temporary_library TO new_object_text_descriptor;
        IFEND;

      = llc$line_table =
        NEXT old_line_address_table: [1 .. old_object_text_descriptor^.number_of_line_items] IN
              module_description^.file;
        IF old_line_address_table = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        IF NOT (occ$line_table IN debug_tables_to_omit) THEN
          NEXT new_line_address_table: [1 .. new_object_text_descriptor^.number_of_line_items] IN
                temporary_library;
          IF new_line_address_table = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY91', status);
            RETURN;
          IFEND;

          new_line_address_table^ := old_line_address_table^;
        ELSE
          RESET temporary_library TO new_object_text_descriptor;
        IFEND;

      = llc$supplemental_debug_tables =
        NEXT old_supplemental_debug_tables: [[REP old_object_text_descriptor^.sequence_length OF cell]] IN
              module_description^.file;
        IF old_supplemental_debug_tables = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        IF NOT (occ$supplemental_debug_table IN debug_tables_to_omit) THEN
          NEXT new_supplemental_debug_tables: [[REP new_object_text_descriptor^.sequence_length OF cell]] IN
                temporary_library;
          IF new_supplemental_debug_tables = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY92', status);
            RETURN;
          IFEND;

          new_supplemental_debug_tables^ := old_supplemental_debug_tables^;
        ELSE
          RESET temporary_library TO new_object_text_descriptor;
        IFEND;

      = llc$form_definition =
        osp$set_status_abnormal (oc, oce$e_form_def_found_in_module, module_name, status);
        RETURN;

      = llc$68000_absolute =
        NEXT old_m68000_absolute: [[REP old_object_text_descriptor^.number_of_68000_bytes OF cell]] IN
              module_description^.file;
        IF old_m68000_absolute = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        NEXT new_m68000_absolute: [[REP new_object_text_descriptor^.number_of_68000_bytes OF cell]] IN
              temporary_library;
        IF new_m68000_absolute = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY93', status);
          RETURN;
        IFEND;

        new_m68000_absolute^ := old_m68000_absolute^;

      = llc$entry_definition =
        NEXT old_entry_definition IN module_description^.file;
        IF old_entry_definition = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        IF (entry_points_have_been_changed) AND (new_entry_point^.name = osc$null_name) THEN
          new_entry_point := new_entry_point^.link;
          RESET temporary_library TO new_object_text_descriptor;
        ELSE
          NEXT new_entry_definition IN temporary_library;
          IF new_entry_definition = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY94', status);
            RETURN;
          IFEND;

          new_entry_definition^ := old_entry_definition^;


          IF entry_points_have_been_changed THEN
            new_entry_definition^.name := new_entry_point^.name;
            new_entry_definition^.attributes := new_entry_point^.attributes;
            new_entry_point := new_entry_point^.link;
          IFEND;
        IFEND;

      = llc$deferred_entry_points =
        NEXT old_deferred_entry_points: [1 .. old_object_text_descriptor^.number_of_entry_points] IN
              module_description^.file;
        IF old_deferred_entry_points = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        NEXT new_deferred_entry_points: [1 .. new_object_text_descriptor^.number_of_entry_points] IN
              temporary_library;
        IF new_deferred_entry_points = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY94.3', status);
          RETURN;
        IFEND;

        new_deferred_entry_points^ := old_deferred_entry_points^;

        IF segment_relocation_info <> NIL THEN
          FOR deferred_index := 1 TO new_object_text_descriptor^.number_of_entry_points DO
            new_deferred_entry_points^ [deferred_index].address.offset :=
                  new_deferred_entry_points^ [deferred_index].address.offset +
                  segment_relocation_info^ [new_deferred_entry_points^ [deferred_index].section_ordinal].
                  new_offset - segment_relocation_info^ [new_deferred_entry_points^ [deferred_index].
                  section_ordinal].old_offset;
          FOREND;
        IFEND;

      = llc$deferred_common_blocks =
        NEXT old_deferred_common_blocks: [1 .. old_object_text_descriptor^.number_of_common_blocks] IN
              module_description^.file;
        IF old_deferred_common_blocks = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        NEXT new_deferred_common_blocks: [1 .. new_object_text_descriptor^.number_of_common_blocks] IN
              temporary_library;
        IF new_deferred_common_blocks = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY94.6', status);
          RETURN;
        IFEND;

        new_deferred_common_blocks^ := old_deferred_common_blocks^;


      = llc$external_linkage =
        NEXT old_external_linkage: [1 .. old_object_text_descriptor^.number_of_ext_items] IN
              module_description^.file;
        IF old_external_linkage = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;

        NEXT new_external_linkage: [1 .. new_object_text_descriptor^.number_of_ext_items] IN
              temporary_library;
        IF new_external_linkage = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY95', status);
          RETURN;
        IFEND;

        new_external_linkage^ := old_external_linkage^;

      = llc$transfer_symbol =
        NEXT old_transfer_symbol IN module_description^.file;
        IF old_transfer_symbol = NIL THEN
          osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
          RETURN;
        IFEND;


        IF llc$information_element IN module_description^.load_module_header^.elements_defined THEN
          old_info_element_header := #PTR (module_description^.load_module_header^.information_element,
                module_description^.file^);
          IF old_info_element_header = NIL THEN
            osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
            RETURN;
          IFEND;


          IF (old_info_element_header^.version <> llc$info_element_version) THEN
            ocp$convert_information_element (old_info_element_header, old_header);
            old_info_element_header := ^old_header;
          IFEND;

          IF old_info_element_header^.number_of_rel_items <> 0 THEN
            old_relocation := #PTR (old_info_element_header^.relocation_ptr, module_description^.file^);
            IF old_relocation = NIL THEN
              osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
              RETURN;
            IFEND;

            number_of_rel_items := old_info_element_header^.number_of_rel_items;
            next_rel_item := 0;

            WHILE (number_of_rel_items > 0) DO
              new_object_text_descriptor^.kind := llc$relocation;
              IF (number_of_rel_items <= UPPERVALUE (new_object_text_descriptor^.number_of_rel_items)) THEN
                new_object_text_descriptor^.number_of_rel_items := number_of_rel_items;
              ELSE
                new_object_text_descriptor^.number_of_rel_items :=
                      UPPERVALUE (new_object_text_descriptor^.number_of_rel_items);
              IFEND;

              NEXT new_relocation: [1 .. new_object_text_descriptor^.number_of_rel_items] IN
                    temporary_library;
              IF new_relocation = NIL THEN
                osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY96', status);
                RETURN;
              IFEND;

              IF (old_info_element_header^.number_of_rel_items =
                    new_object_text_descriptor^.number_of_rel_items) THEN
                new_relocation^ := old_relocation^;
              ELSE
                FOR i := 1 TO new_object_text_descriptor^.number_of_rel_items DO
                  new_relocation^ [i] := old_relocation^ [next_rel_item + i];
                FOREND;
              IFEND;
              next_rel_item := next_rel_item + new_object_text_descriptor^.number_of_rel_items;
              number_of_rel_items := number_of_rel_items - new_object_text_descriptor^.number_of_rel_items;

              NEXT new_object_text_descriptor IN temporary_library;
              IF new_object_text_descriptor = NIL THEN
                osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY97', status);
                RETURN;
              IFEND;

              IF segment_relocation_info <> NIL THEN
                ocp$relocate_seg_definitions (new_relocation, segment_relocation_info);
              IFEND;
            WHILEND;
          IFEND;

          IF old_info_element_header^.number_of_template_items <> 0 THEN
            old_binding_template := #PTR (old_info_element_header^.binding_template_ptr,
                  module_description^.file^);
            IF old_binding_template = NIL THEN
              osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
              RETURN;
            IFEND;

            FOR i := 1 TO old_info_element_header^.number_of_template_items DO
              new_object_text_descriptor^.kind := llc$binding_template;
              new_object_text_descriptor^.unused := 0;

              NEXT new_binding_template IN temporary_library;
              IF new_binding_template = NIL THEN
                osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY98', status);
                RETURN;
              IFEND;

              new_binding_template^ := old_binding_template^ [i];

              NEXT new_object_text_descriptor IN temporary_library;
              IF new_object_text_descriptor = NIL THEN
                osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY99', status);
                RETURN;
              IFEND;
            FOREND;
          IFEND;
        IFEND;
        new_object_text_descriptor^.kind := llc$transfer_symbol;
        new_object_text_descriptor^.unused := 0;

        NEXT new_transfer_symbol IN temporary_library;
        IF new_transfer_symbol = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY100', status);
          RETURN;
        IFEND;

        IF entry_points_have_been_changed THEN
          new_transfer_symbol^.name := new_starting_procedure;
        ELSE
          new_transfer_symbol^.name := old_transfer_symbol^.name;
        IFEND;

        RETURN;

      ELSE

        osp$set_status_abnormal (oc, oce$e_invalid_object_rec_kind, module_description^.name, status);
        osp$append_status_integer (osc$status_parameter_delimiter, record_number, 10, FALSE, status);
        RETURN;

      CASEND;

      NEXT old_object_text_descriptor IN module_description^.file;
      IF old_object_text_descriptor = NIL THEN
        osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
        RETURN;
      IFEND;

      record_number := record_number + 1;

      NEXT new_object_text_descriptor IN temporary_library;
      IF new_object_text_descriptor = NIL THEN
        osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY101', status);
        RETURN;
      IFEND;

      new_object_text_descriptor^ := old_object_text_descriptor^;

    UNTIL FALSE;


{ The normal return is through the transfer symbol.

  PROCEND copy_load_to_object_module;
?? OLDTITLE ??
?? NEWTITLE := '[XDCL] copy_temporary_load_module', EJECT ??

  PROCEDURE [XDCL] copy_temporary_load_module
    (    module_index: llt$module_index;
         module_description: ^oct$module_description;
     VAR load_module_header: ^llt$load_module_header;
     VAR code_section: ^cell;
     VAR read_section: ^cell;
     VAR temporary_library: ^SEQ ( * );
     VAR status: ost$status);

?? NEWTITLE := 'no_segment_definitions', EJECT ??

    FUNCTION no_segment_definitions
      (    section_definition_list: ^oct$section_definition_list): boolean;


      VAR
        sections: ^oct$section_definition_list;


      sections := section_definition_list;

      WHILE (sections <> NIL) DO
        IF (sections^.predefined_segment) THEN
          no_segment_definitions := FALSE;
          RETURN;
        IFEND;

        sections := sections^.link;
      WHILEND;

      no_segment_definitions := TRUE;


    FUNCEND no_segment_definitions;
?? OLDTITLE ??
?? NEWTITLE := 'sort_section_definitions', EJECT ??

    PROCEDURE sort_section_definitions
      (    greatest_section_ordinal: llt$section_ordinal;
           section_definitions: REL (llt$object_library) ^llt$object_text_descriptor;
       VAR temporary_library: ^SEQ ( * );
       VAR sections: ^array [0 .. * ] of section_record);


      VAR
        section_ptr: ^llt$object_text_descriptor,
        reset_value: ^SEQ ( * ),
        attributes: llt$section_access_attributes,
        temp: section_record,
        i,
        j: integer;


      reset_value := temporary_library;
      section_ptr := #PTR (section_definitions, temporary_library^);
      RESET temporary_library TO section_ptr;

      NEXT sections: [0 .. greatest_section_ordinal] IN temporary_library;

      i := 0;
      REPEAT
        attributes := sections^ [i].definition.access_attributes;
        j := i + 1;

        WHILE j <= greatest_section_ordinal DO
          IF attributes = sections^ [j].definition.access_attributes THEN
            i := i + 1;
            temp := sections^ [i];
            sections^ [i] := sections^ [j];
            sections^ [j] := temp;
          IFEND;
          j := j + 1;
        WHILEND;

        i := i + 1;
      UNTIL i >= (greatest_section_ordinal - 1);

      temporary_library := reset_value;

    PROCEND sort_section_definitions;
?? OLDTITLE ??
?? NEWTITLE := 'build_segment_relocation_info', EJECT ??

    PROCEDURE build_segment_relocation_info
      (    greatest_section_ordinal: llt$section_ordinal;
           section_definitions: REL (llt$object_library) ^llt$object_text_descriptor;
           temporary_library: ^SEQ ( * );
       VAR segment_relocation_info: ^oct$segment_relocation_info;
       VAR status: ost$status);

      VAR
        object_text_descriptor: ^llt$object_text_descriptor,
        segment_definition: ^llt$segment_definition,
        section_definition: ^llt$section_definition,
        section_ordinal: llt$section_ordinal,
        library: ^SEQ ( * ),
        reset_value: ^SEQ ( * ),
        valid_position: boolean,
        i: integer;


      library := temporary_library;
      object_text_descriptor := #PTR (section_definitions, library^);
      RESET library TO object_text_descriptor;

      NEXT segment_relocation_info: [0 .. greatest_section_ordinal] IN ocv$olg_scratch_seq;
      IF segment_relocation_info = NIL THEN
        osp$set_status_abnormal (oc, oce$e_internal_olg_seg_overflow, '', status);
        RETURN;
      IFEND;

      FOR i := 0 TO greatest_section_ordinal DO
        NEXT object_text_descriptor IN library;
        CASE object_text_descriptor^.kind OF
        = llc$section_definition, llc$allotted_section_definition, llc$unallocated_common_block =
          NEXT section_definition IN library;
          section_ordinal := section_definition^.section_ordinal;
        = llc$segment_definition, llc$allotted_segment_definition =
          NEXT segment_definition IN library;
          section_ordinal := segment_definition^.section_definition.section_ordinal;
        CASEND;

        IF (object_text_descriptor^.kind <> llc$allotted_segment_definition) THEN
          module_description^.segment_relocation_info^ [section_ordinal].old_offset := 0;
          module_description^.segment_relocation_info^ [section_ordinal].new_offset := 0;
        ELSE
          reset_value := library;
          pmp$position_object_library (library, object_text_descriptor^.allotted_segment, valid_position);
          IF NOT valid_position THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY102', status);
            RETURN;
          IFEND;

          IF (object_text_descriptor^.allotted_segment_length <> 0) THEN
            NEXT segment_relocation_info^ [section_ordinal].text:
                  [1 .. object_text_descriptor^.allotted_segment_length] IN library;
            segment_relocation_info^ [section_ordinal].old_offset := 0;
            segment_relocation_info^ [section_ordinal].new_offset := 0;
          ELSE
            NEXT segment_relocation_info^ [section_ordinal].text:
                  [1 .. segment_definition^.section_definition.length] IN library;
            segment_relocation_info^ [section_ordinal].old_offset := 0;
            segment_relocation_info^ [section_ordinal].new_offset := object_text_descriptor^.allotted_segment;
          IFEND;

          library := reset_value;
        IFEND;
      FOREND;

    PROCEND build_segment_relocation_info;
?? OLDTITLE ??
?? NEWTITLE := '    ********* NEXT KLUDGE ********' ??
?? EJECT ??

    PROCEDURE next_kludge
      (VAR object_text_descriptor: ^llt$object_text_descriptor;
       VAR temporary_library: ^SEQ ( * ));


      NEXT object_text_descriptor IN temporary_library;


    PROCEND next_kludge;
?? OLDTITLE ??
?? EJECT ??

    TYPE
      section_record = record
        descriptor: llt$object_text_descriptor,
        definition: llt$section_definition,
      recend;

    VAR
      actual_parameters: ^llt$actual_parameters,
      address_formulation: ^llt$address_formulation,
      address_formulation_list: ^oct$address_formulation_list,
      apl: ^oct$actual_parameter_list,
      application_identifier: ^llt$application_identifier,
      bit_string_insertion: ^llt$bit_string_insertion,
      debug_table_fragment: ^llt$debug_table_fragment,
      deferred_common_blocks: ^llt$deferred_common_blocks,
      deferred_entry_points: ^llt$deferred_entry_points,
      deferred_index: 1 .. llc$max_deferred_entry_points,
      entry_definition: ^llt$entry_definition,
      entry_definition_list: ^oct$entry_definition_list,
      external_linkage: ^llt$external_linkage,
      external_linkage_list: ^oct$external_linkage_list,
      formal_parameters: ^llt$formal_parameters,
      identification: ^llt$identification,
      length: ost$segment_length,
      libraries: ^llt$libraries,
      library_list: ^oct$name_list,
      library_number: integer,
      line_address_table: ^llt$line_address_table,
      m68000_absolute: ^llt$68000_absolute,
      miscellaneous_record_list: ^oct$object_record_list,
      module_name: pmt$program_name,
      number_of_libraries: integer,
      object_text_descriptor: ^llt$object_text_descriptor,
      obsolete_line_address_table: ^llt$obsolete_line_address_table,
      relative_pointer: ost$relative_pointer,
      replication: ^llt$replication,
      section_count: integer,
      section_definition: ^llt$section_definition,
      section_definition_list: ^oct$section_definition_list,
      sections: ^array [0 .. * ] of section_record,
      segment_definition: ^llt$segment_definition,
      supplemental_debug_tables: ^llt$supplemental_debug_tables,
      symbol_table: ^llt$symbol_table,
      temporary_module: ^oct$temporary_module_header,
      text: ^llt$text,
      text_insertion_list: ^oct$text_insertion_list,
      transfer_symbol: ^llt$transfer_symbol;


    module_description^.segment_relocation_info := NIL;

    temporary_module := module_description^.temporary_module_header;

    NEXT load_module_header IN temporary_library;
    IF load_module_header = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY103', status);
      RETURN;
    IFEND;

    load_module_header^.module_index := module_index;
    load_module_header^.interpretive_header.elements_defined := $llt$interpretive_elements [];
    load_module_header^.elements_defined := $llt$load_module_elements [llc$interpretive_element];

    next_kludge (object_text_descriptor, temporary_library);
    IF object_text_descriptor = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY104', status);
      RETURN;
    IFEND;

    load_module_header^.interpretive_element := #REL (object_text_descriptor, temporary_library^);
    object_text_descriptor^.kind := llc$identification;
    object_text_descriptor^.unused := 0;

    NEXT identification IN temporary_library;
    IF identification = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY105', status);
      RETURN;
    IFEND;

    identification^ := temporary_module^.identification;
    identification^.greatest_section_ordinal := 0;

    NEXT object_text_descriptor IN temporary_library;
    IF object_text_descriptor = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY106', status);
      RETURN;
    IFEND;

    IF temporary_module^.application_identifier <> NIL THEN

      IF temporary_module^.application_identifier^.name <> osc$null_name THEN
        object_text_descriptor^.kind := llc$application_identifier;

        NEXT application_identifier IN temporary_library;
        IF application_identifier = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY106.25', status);
          RETURN;
        IFEND;

        application_identifier^.name := temporary_module^.application_identifier^.name;

        NEXT object_text_descriptor IN temporary_library;
        IF object_text_descriptor = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY106.5', status);
          RETURN;
        IFEND;
      IFEND;
    IFEND;

    IF temporary_module^.library_list.link <> NIL THEN
      load_module_header^.interpretive_header.library_list :=
            #REL (object_text_descriptor, temporary_library^);
      load_module_header^.interpretive_header.elements_defined :=
            load_module_header^.interpretive_header.elements_defined +
            $llt$interpretive_elements [llc$library_element];

      library_list := temporary_module^.library_list.link;
      number_of_libraries := 0;
      WHILE library_list <> NIL DO
        number_of_libraries := number_of_libraries + 1;
        library_list := library_list^.link;
      WHILEND;

      IF number_of_libraries > llc$max_libraries THEN
        osp$set_status_abnormal (oc, oce$e_too_many_libraries, '', status);
        RETURN;
      IFEND;

      object_text_descriptor^.kind := llc$libraries;
      object_text_descriptor^.number_of_libraries := number_of_libraries;

      NEXT libraries: [1 .. object_text_descriptor^.number_of_libraries] IN temporary_library;
      IF libraries = NIL THEN
        osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY107', status);
        RETURN;
      IFEND;

      library_list := temporary_module^.library_list.link;

      FOR library_number := 1 TO number_of_libraries DO
        libraries^ [library_number] := library_list^.name;
        library_list := library_list^.link;
      FOREND;

      NEXT object_text_descriptor IN temporary_library;
      IF object_text_descriptor = NIL THEN
        osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY108', status);
        RETURN;
      IFEND;
    IFEND;

    IF temporary_module^.section_definitions.link <> NIL THEN
      load_module_header^.interpretive_header.section_definitions :=
            #REL (object_text_descriptor, temporary_library^);
      load_module_header^.interpretive_header.elements_defined :=
            load_module_header^.interpretive_header.elements_defined +
            $llt$interpretive_elements [llc$section_element];
      section_count := 0;

      IF no_segment_definitions (temporary_module^.section_definitions.link) THEN
        section_definition_list := temporary_module^.section_definitions.link;
        REPEAT
          IF section_definition_list^.unallocated_common_block THEN
            object_text_descriptor^.kind := llc$unallocated_common_block;
          ELSE
            object_text_descriptor^.kind := llc$section_definition;
          IFEND;

          NEXT section_definition IN temporary_library;
          IF section_definition = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY109', status);
            RETURN;
          IFEND;

          section_definition^ := section_definition_list^.section_definition;
          IF identification^.greatest_section_ordinal < section_definition^.section_ordinal THEN
            identification^.greatest_section_ordinal := section_definition^.section_ordinal;
          IFEND;

          IF NOT section_definition_list^.allotted_section THEN
            object_text_descriptor^.unused := 0;
          ELSE
            object_text_descriptor^.kind := llc$allotted_section_definition;

            IF section_definition_list^.section_definition.kind = llc$code_section THEN
              write_new_section (section_definition_list^.section_ptr, section_definition,
                    section_definition^.length, code_section, object_text_descriptor^.allotted_section);
            ELSE
              write_new_section (section_definition_list^.section_ptr, section_definition,
                    section_definition^.length, read_section, object_text_descriptor^.allotted_section);
            IFEND;
          IFEND;

          section_definition_list := section_definition_list^.link;
          section_count := section_count + 1;

          NEXT object_text_descriptor IN temporary_library;
          IF object_text_descriptor = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY110', status);
            RETURN;
          IFEND;
        UNTIL section_definition_list = NIL;

        sort_section_definitions (section_count - 1, load_module_header^.interpretive_header.
              section_definitions, temporary_library, sections);

        FOR section_count := 0 TO section_count - 1 DO
          section_definition_list := temporary_module^.section_definitions.link;
          WHILE sections^ [section_count].definition.section_ordinal <>
                section_definition_list^.section_definition.section_ordinal DO
            section_definition_list := section_definition_list^.link;
          WHILEND;

          IF section_definition_list^.text_insertion_records.link <> NIL THEN
            text_insertion_list := section_definition_list^.text_insertion_records.link;

            REPEAT

              CASE text_insertion_list^.kind OF
              = llc$text =
                object_text_descriptor^.kind := llc$text;
                object_text_descriptor^.number_of_bytes := UPPERBOUND (text_insertion_list^.text^.byte);

                NEXT text: [1 .. object_text_descriptor^.number_of_bytes] IN temporary_library;
                IF text = NIL THEN
                  osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY111', status);
                  RETURN;
                IFEND;

                text^ := text_insertion_list^.text^;

                NEXT object_text_descriptor IN temporary_library;
                IF object_text_descriptor = NIL THEN
                  osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY112', status);
                  RETURN;
                IFEND;

              = llc$replication =
                object_text_descriptor^.kind := llc$replication;
                object_text_descriptor^.number_of_bytes := UPPERBOUND (text_insertion_list^.replication^.
                      byte);

                NEXT replication: [1 .. object_text_descriptor^.number_of_bytes] IN temporary_library;
                IF replication = NIL THEN
                  osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY113', status);
                  RETURN;
                IFEND;

                replication^ := text_insertion_list^.replication^;

                NEXT object_text_descriptor IN temporary_library;
                IF object_text_descriptor = NIL THEN
                  osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY114', status);
                  RETURN;
                IFEND;

              = llc$bit_string_insertion =
                object_text_descriptor^.kind := llc$bit_string_insertion;
                object_text_descriptor^.unused := 0;

                NEXT bit_string_insertion IN temporary_library;
                IF bit_string_insertion = NIL THEN
                  osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY115', status);
                  RETURN;
                IFEND;

                bit_string_insertion^ := text_insertion_list^.bit_string_insertion^;

                NEXT object_text_descriptor IN temporary_library;
                IF object_text_descriptor = NIL THEN
                  osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY116', status);
                  RETURN;
                IFEND;

              CASEND;

              text_insertion_list := text_insertion_list^.link;

            UNTIL text_insertion_list = NIL;
          IFEND;

          IF temporary_module^.address_formulation_list <> NIL THEN
            address_formulation_list := temporary_module^.address_formulation_list;

            REPEAT
              IF address_formulation_list^.address_formulation.dest_section =
                    sections^ [section_count].definition.section_ordinal THEN
                object_text_descriptor^.kind := llc$address_formulation;
                object_text_descriptor^.number_of_adr_items := UPPERBOUND (address_formulation_list^.
                      address_formulation.item);

                NEXT address_formulation: [1 .. object_text_descriptor^.number_of_adr_items] IN
                      temporary_library;
                IF address_formulation = NIL THEN
                  osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY117', status);
                  RETURN;
                IFEND;

                address_formulation^ := address_formulation_list^.address_formulation;

                NEXT object_text_descriptor IN temporary_library;
                IF object_text_descriptor = NIL THEN
                  osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY118', status);
                  RETURN;
                IFEND;
              IFEND;

              address_formulation_list := address_formulation_list^.link;

            UNTIL address_formulation_list = NIL;
          IFEND;
        FOREND;

      ELSE { predefined segments and maybe section definitions }
        section_definition_list := temporary_module^.section_definitions.link;

        REPEAT
          IF (section_definition_list^.predefined_segment) THEN
            object_text_descriptor^.kind := llc$segment_definition;

            NEXT segment_definition IN temporary_library;
            IF segment_definition = NIL THEN
              osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY119', status);
              RETURN;
            IFEND;

            segment_definition^.segment_number := section_definition_list^.predefined_segment_number;
            segment_definition^.r1 := section_definition_list^.predefined_r1;
            segment_definition^.r2 := section_definition_list^.predefined_r2;
            segment_definition^.section_definition := section_definition_list^.section_definition;
            segment_definition^.binding_section_ordinal := section_definition_list^.
                  predefined_binding_ordinal;
            segment_definition^.binding_section_offset := section_definition_list^.predefined_binding_offset;
            segment_definition^.future_use := 0;
            IF identification^.greatest_section_ordinal < segment_definition^.section_definition.
                  section_ordinal THEN
              identification^.greatest_section_ordinal := segment_definition^.section_definition.
                    section_ordinal;
            IFEND;

            IF NOT section_definition_list^.allotted_section THEN
              object_text_descriptor^.unused := 0;
            ELSE
              object_text_descriptor^.kind := llc$allotted_segment_definition;
              object_text_descriptor^.allotted_segment_length :=
                    section_definition_list^.allotted_section_length;
              IF (object_text_descriptor^.allotted_segment_length <> 0) THEN
                length := section_definition_list^.allotted_section_length;
              ELSE
                length := segment_definition^.section_definition.length;
              IFEND;

              IF section_definition_list^.section_definition.kind = llc$code_section THEN
                write_new_section (section_definition_list^.section_ptr,
                      ^segment_definition^.section_definition, length, code_section, relative_pointer);
              ELSE
                write_new_section (section_definition_list^.section_ptr,
                      ^segment_definition^.section_definition, length, read_section, relative_pointer);
              IFEND;
              object_text_descriptor^.allotted_segment := relative_pointer;
            IFEND;

            section_count := section_count + 1;

            NEXT object_text_descriptor IN temporary_library;
            IF object_text_descriptor = NIL THEN
              osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY120', status);
              RETURN;
            IFEND;
          IFEND;

          section_definition_list := section_definition_list^.link;
        UNTIL section_definition_list = NIL;

{ Sections definitions must be next so segments can be shared at load time

        section_definition_list := temporary_module^.section_definitions.link;

        REPEAT
          IF (NOT section_definition_list^.predefined_segment) THEN
            IF section_definition_list^.unallocated_common_block THEN
              object_text_descriptor^.kind := llc$unallocated_common_block;
            ELSE
              object_text_descriptor^.kind := llc$section_definition;
            IFEND;

            NEXT section_definition IN temporary_library;
            IF section_definition = NIL THEN
              osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY121', status);
              RETURN;
            IFEND;

            section_definition^ := section_definition_list^.section_definition;
            IF identification^.greatest_section_ordinal < section_definition^.section_ordinal THEN
              identification^.greatest_section_ordinal := section_definition^.section_ordinal;
            IFEND;

            IF NOT section_definition_list^.allotted_section THEN
              object_text_descriptor^.unused := 0;
            ELSE
              object_text_descriptor^.kind := llc$allotted_section_definition;

              IF section_definition_list^.section_definition.kind = llc$code_section THEN
                write_new_section (section_definition_list^.section_ptr, section_definition,
                      section_definition^.length, code_section, object_text_descriptor^.allotted_section);
              ELSE
                write_new_section (section_definition_list^.section_ptr, section_definition,
                      section_definition^.length, read_section, object_text_descriptor^.allotted_section);
              IFEND;
            IFEND;

            section_count := section_count + 1;

            NEXT object_text_descriptor IN temporary_library;
            IF object_text_descriptor = NIL THEN
              osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY122', status);
              RETURN;
            IFEND;
          IFEND;

          section_definition_list := section_definition_list^.link;
        UNTIL section_definition_list = NIL;

        build_segment_relocation_info (section_count - 1, load_module_header^.interpretive_header.
              section_definitions, temporary_library, module_description^.segment_relocation_info, status);
        IF NOT status.normal THEN
          RETURN;
        IFEND;

        section_definition_list := temporary_module^.section_definitions.link;

        WHILE (section_definition_list <> NIL) DO

          IF section_definition_list^.text_insertion_records.link <> NIL THEN
            text_insertion_list := section_definition_list^.text_insertion_records.link;

            REPEAT
              CASE text_insertion_list^.kind OF
              = llc$text =
                object_text_descriptor^.kind := llc$text;
                object_text_descriptor^.number_of_bytes := UPPERBOUND (text_insertion_list^.text^.byte);

                NEXT text: [1 .. object_text_descriptor^.number_of_bytes] IN temporary_library;
                IF text = NIL THEN
                  osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY123', status);
                  RETURN;
                IFEND;
              CASEND;

              text^ := text_insertion_list^.text^;

              IF module_description^.segment_relocation_info <> NIL THEN
                module_description^.segment_relocation_info^ [text^.section_ordinal].text := ^text^.byte;
              IFEND;

              NEXT object_text_descriptor IN temporary_library;
              IF object_text_descriptor = NIL THEN
                osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY124', status);
                RETURN;
              IFEND;

              text_insertion_list := text_insertion_list^.link;
            UNTIL text_insertion_list = NIL;
          IFEND;

          IF temporary_module^.address_formulation_list <> NIL THEN
            address_formulation_list := temporary_module^.address_formulation_list;

            REPEAT
              IF address_formulation_list^.address_formulation.dest_section =
                    section_definition_list^.section_definition.section_ordinal THEN
                object_text_descriptor^.kind := llc$address_formulation;
                object_text_descriptor^.number_of_adr_items := UPPERBOUND (address_formulation_list^.
                      address_formulation.item);

                NEXT address_formulation: [1 .. object_text_descriptor^.number_of_adr_items] IN
                      temporary_library;
                IF address_formulation = NIL THEN
                  osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY125', status);
                  RETURN;
                IFEND;

                address_formulation^ := address_formulation_list^.address_formulation;

                NEXT object_text_descriptor IN temporary_library;
                IF object_text_descriptor = NIL THEN
                  osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY126', status);
                  RETURN;
                IFEND;
              IFEND;

              address_formulation_list := address_formulation_list^.link;

            UNTIL address_formulation_list = NIL;
          IFEND;

          section_definition_list := section_definition_list^.link;
        WHILEND;
      IFEND;
    IFEND;

    IF temporary_module^.external_linkage_list <> NIL THEN
      external_linkage_list := temporary_module^.external_linkage_list;
      load_module_header^.interpretive_header.external_linkages :=
            #REL (object_text_descriptor, temporary_library^);
      load_module_header^.interpretive_header.elements_defined :=
            load_module_header^.interpretive_header.elements_defined +
            $llt$interpretive_elements [llc$external_element];

      REPEAT
        object_text_descriptor^.kind := llc$external_linkage;
        object_text_descriptor^.number_of_ext_items := UPPERBOUND (external_linkage_list^.external_linkage.
              item);

        NEXT external_linkage: [1 .. object_text_descriptor^.number_of_ext_items] IN temporary_library;
        IF external_linkage = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY127', status);
          RETURN;
        IFEND;

        external_linkage^ := external_linkage_list^.external_linkage;

        NEXT object_text_descriptor IN temporary_library;
        IF object_text_descriptor = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY128', status);
          RETURN;
        IFEND;
        external_linkage_list := external_linkage_list^.link;
      UNTIL external_linkage_list = NIL;
    IFEND;

    IF temporary_module^.entry_definition_list.link <> NIL THEN
      load_module_header^.interpretive_header.entry_points :=
            #REL (object_text_descriptor, temporary_library^);
      load_module_header^.interpretive_header.elements_defined :=
            load_module_header^.interpretive_header.elements_defined +
            $llt$interpretive_elements [llc$entry_point_element];
      entry_definition_list := temporary_module^.entry_definition_list.link;

      REPEAT
        object_text_descriptor^.kind := llc$entry_definition;
        object_text_descriptor^.unused := 0;

        NEXT entry_definition IN temporary_library;
        IF entry_definition = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY129', status);
          RETURN;
        IFEND;

        entry_definition^ := entry_definition_list^.entry_definition;

        NEXT object_text_descriptor IN temporary_library;
        IF object_text_descriptor = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY130', status);
          RETURN;
        IFEND;

        entry_definition_list := entry_definition_list^.link;
      UNTIL entry_definition_list = NIL;
    IFEND;

    IF temporary_module^.deferred_entry_points <> NIL THEN
      IF NOT (llc$entry_point_element IN load_module_header^.interpretive_header.elements_defined) THEN
        load_module_header^.interpretive_header.entry_points :=
              #REL (object_text_descriptor, temporary_library^);
        load_module_header^.interpretive_header.elements_defined :=
              load_module_header^.interpretive_header.elements_defined +
              $llt$interpretive_elements [llc$entry_point_element];
      IFEND;

      object_text_descriptor^.kind := llc$deferred_entry_points;
      object_text_descriptor^.number_of_entry_points := UPPERBOUND (temporary_module^.deferred_entry_points^);

      NEXT deferred_entry_points: [1 .. object_text_descriptor^.number_of_entry_points] IN temporary_library;
      IF deferred_entry_points = NIL THEN
        osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY132.3', status);
        RETURN;
      IFEND;

      deferred_entry_points^ := temporary_module^.deferred_entry_points^;

      IF module_description^.segment_relocation_info <> NIL THEN
        FOR deferred_index := 1 TO object_text_descriptor^.number_of_entry_points DO
          deferred_entry_points^ [deferred_index].address.offset :=
                deferred_entry_points^ [deferred_index].address.offset +
                module_description^.segment_relocation_info^ [deferred_entry_points^ [deferred_index].
                section_ordinal].new_offset - module_description^.
                segment_relocation_info^ [deferred_entry_points^ [deferred_index].section_ordinal].old_offset;
        FOREND;
      IFEND;

      NEXT object_text_descriptor IN temporary_library;
      IF object_text_descriptor = NIL THEN
        osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY132.6', status);
        RETURN;
      IFEND;
    IFEND;

    IF temporary_module^.entry_definition_list.link <> NIL THEN
      entry_definition_list := temporary_module^.entry_definition_list.link;
      REPEAT
        IF entry_definition_list^.formal_parameter <> NIL THEN

          object_text_descriptor^.kind := llc$formal_parameters;
          object_text_descriptor^.sequence_length := #SIZE (entry_definition_list^.formal_parameter^.
                specification);
          NEXT formal_parameters: [[REP object_text_descriptor^.sequence_length OF cell]] IN
                temporary_library;
          IF formal_parameters = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY131', status);
            RETURN;
          IFEND;

          formal_parameters^ := entry_definition_list^.formal_parameter^;

          NEXT object_text_descriptor IN temporary_library;
          IF object_text_descriptor = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY132', status);
            RETURN;
          IFEND;
        IFEND;
        entry_definition_list := entry_definition_list^.link;
      UNTIL entry_definition_list = NIL;
    IFEND;

    IF temporary_module^.deferred_common_blocks <> NIL THEN
      object_text_descriptor^.kind := llc$deferred_common_blocks;
      object_text_descriptor^.number_of_common_blocks := UPPERBOUND (temporary_module^.
            deferred_common_blocks^);

      NEXT deferred_common_blocks: [1 .. object_text_descriptor^.number_of_common_blocks] IN
            temporary_library;
      IF deferred_common_blocks = NIL THEN
        osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY124.3', status);
        RETURN;
      IFEND;

      deferred_common_blocks^ := temporary_module^.deferred_common_blocks^;

      NEXT object_text_descriptor IN temporary_library;
      IF object_text_descriptor = NIL THEN
        osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY124.6', status);
        RETURN;
      IFEND;
    IFEND;

    IF temporary_module^.external_linkage_list <> NIL THEN
      external_linkage_list := temporary_module^.external_linkage_list;

      REPEAT
        IF external_linkage_list^.actual_parameter_list.nnext <> NIL THEN
          apl := external_linkage_list^.actual_parameter_list.nnext;
          WHILE apl <> NIL DO
            object_text_descriptor^.kind := llc$actual_parameters;
            object_text_descriptor^.sequence_length := #SIZE (apl^.actual_parameter^.specification);

            NEXT actual_parameters: [[REP object_text_descriptor^.sequence_length OF cell]] IN
                  temporary_library;
            IF actual_parameters = NIL THEN
              osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY133', status);
              RETURN;
            IFEND;

            actual_parameters^ := apl^.actual_parameter^;

            NEXT object_text_descriptor IN temporary_library;
            IF object_text_descriptor = NIL THEN
              osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY134', status);
              RETURN;
            IFEND;
            apl := apl^.nnext;
          WHILEND;
        IFEND;
        external_linkage_list := external_linkage_list^.link;
      UNTIL external_linkage_list = NIL;
    IFEND;

    IF temporary_module^.miscellaneous_record_list.link <> NIL THEN
      miscellaneous_record_list := temporary_module^.miscellaneous_record_list.link;

      REPEAT

        CASE miscellaneous_record_list^.kind OF

        = llc$cybil_symbol_table_fragment =
          object_text_descriptor^.kind := llc$cybil_symbol_table_fragment;
          object_text_descriptor^.sequence_length := #SIZE (miscellaneous_record_list^.debug_table_fragment^.
                text);

          NEXT debug_table_fragment: [[REP object_text_descriptor^.sequence_length OF cell]] IN
                temporary_library;
          IF debug_table_fragment = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY135', status);
            RETURN;
          IFEND;

          debug_table_fragment^ := miscellaneous_record_list^.debug_table_fragment^;

        = llc$obsolete_line_table =
          object_text_descriptor^.kind := llc$obsolete_line_table;
          object_text_descriptor^.number_of_line_items := UPPERBOUND (miscellaneous_record_list^.
                obsolete_line_address_table^.item);

          NEXT obsolete_line_address_table: [1 .. object_text_descriptor^.number_of_line_items] IN
                temporary_library;
          IF obsolete_line_address_table = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY136', status);
            RETURN;
          IFEND;

          obsolete_line_address_table^ := miscellaneous_record_list^.obsolete_line_address_table^;

        = llc$symbol_table =
          object_text_descriptor^.kind := llc$symbol_table;
          object_text_descriptor^.sequence_length := #SIZE (miscellaneous_record_list^.symbol_table^.text);

          NEXT symbol_table: [[REP object_text_descriptor^.sequence_length OF cell]] IN temporary_library;
          IF symbol_table = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY137', status);
            RETURN;
          IFEND;

          symbol_table^ := miscellaneous_record_list^.symbol_table^;

        = llc$line_table =
          object_text_descriptor^.kind := llc$line_table;
          object_text_descriptor^.number_of_line_items := UPPERBOUND (miscellaneous_record_list^.
                line_address_table^.item);

          NEXT line_address_table: [1 .. object_text_descriptor^.number_of_line_items] IN temporary_library;
          IF line_address_table = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY138', status);
            RETURN;
          IFEND;

          line_address_table^ := miscellaneous_record_list^.line_address_table^;

        = llc$supplemental_debug_tables =
          object_text_descriptor^.kind := llc$supplemental_debug_tables;
          object_text_descriptor^.sequence_length := #SIZE (miscellaneous_record_list^.
                supplemental_debug_tables^.sd_table);

          NEXT supplemental_debug_tables: [[REP object_text_descriptor^.sequence_length OF cell]] IN
                temporary_library;
          IF supplemental_debug_tables = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY139', status);
            RETURN;
          IFEND;

          supplemental_debug_tables^ := miscellaneous_record_list^.supplemental_debug_tables^;

        = llc$form_definition =
          osp$set_status_abnormal (oc, oce$e_form_def_found_in_module, module_name, status);
          RETURN;

        = llc$68000_absolute =
          object_text_descriptor^.kind := llc$68000_absolute;
          object_text_descriptor^.number_of_68000_bytes := #SIZE (miscellaneous_record_list^.m68000_absolute^.
                text);

          NEXT m68000_absolute: [[REP object_text_descriptor^.number_of_68000_bytes OF cell]] IN
                temporary_library;
          IF m68000_absolute = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY140', status);
            RETURN;
          IFEND;

          m68000_absolute^ := miscellaneous_record_list^.m68000_absolute^;
        CASEND;

        NEXT object_text_descriptor IN temporary_library;
        IF object_text_descriptor = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY141', status);
          RETURN;
        IFEND;

        miscellaneous_record_list := miscellaneous_record_list^.link;

      UNTIL miscellaneous_record_list = NIL;
    IFEND;

    load_module_header^.interpretive_header.transfer_symbol :=
          #REL (object_text_descriptor, temporary_library^);
    load_module_header^.interpretive_header.elements_defined :=
          load_module_header^.interpretive_header.elements_defined +
          $llt$interpretive_elements [llc$transfer_symbol_element];

    object_text_descriptor^.kind := llc$transfer_symbol;
    object_text_descriptor^.unused := 0;

    NEXT transfer_symbol IN temporary_library;
    IF transfer_symbol = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY142', status);
      RETURN;
    IFEND;

    transfer_symbol^.name := temporary_module^.starting_procedure;

  PROCEND copy_temporary_load_module;
?? OLDTITLE ??
?? NEWTITLE := '  COPY_PROGRAM_DESCRIPTION' ??
?? EJECT ??

  PROCEDURE [XDCL] copy_program_description
    (    module_index: llt$module_index;
         module_description: ^oct$module_description;
         changed_info: ^oct$changed_info;
     VAR new_program_description_header: ^llt$library_member_header;
     VAR temporary_library: ^SEQ ( * );
     VAR status: ost$status);


    VAR
      temp_seq: ^SEQ ( * ),

      old_program_description_header: ^llt$library_member_header,
      old_alias_list: ^pmt$module_list,
      old_program_description: ^llt$program_description,

      new_alias_list: ^pmt$module_list,
      new_program_description: ^llt$program_description,

      last_alias: ^oct$external_declaration_list,
      new_alias: ^pmt$program_name,
      number_of_aliases: llt$number_of_aliases;




    old_program_description_header := module_description^.program_description_header;
    IF old_program_description_header = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_program_description_header IN temporary_library;
    IF new_program_description_header = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY143', status);
      RETURN;
    IFEND;

    new_program_description_header^ := old_program_description_header^;
    new_program_description_header^.module_index := module_index;

    IF changed_info <> NIL THEN
      IF changed_info^.name <> NIL THEN
        new_program_description_header^.name := changed_info^.name^;
      IFEND;

      IF changed_info^.commentary <> NIL THEN
        new_program_description_header^.commentary := changed_info^.commentary^;
      IFEND;
    IFEND;

    number_of_aliases := old_program_description_header^.number_of_aliases;

    IF number_of_aliases <> 0 THEN
      old_alias_list := #PTR (old_program_description_header^.aliases, module_description^.file^);
      IF old_alias_list = NIL THEN
        osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
        RETURN;
      IFEND;

      IF (changed_info <> NIL) AND (changed_info^.entry_points <> NIL) THEN
        last_alias := changed_info^.entry_points;
        number_of_aliases := 0;
        temp_seq := temporary_library;

        WHILE last_alias <> NIL DO
          IF last_alias^.name <> osc$null_name THEN
            number_of_aliases := number_of_aliases + 1;

            NEXT new_alias IN temp_seq;
            IF new_alias = NIL THEN
              osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY144', status);
              RETURN;
            IFEND;

            new_alias^ := last_alias^.name;
          IFEND;

          last_alias := last_alias^.link;
        WHILEND;

        new_program_description_header^.number_of_aliases := number_of_aliases;

        IF number_of_aliases <> 0 THEN
          NEXT new_alias_list: [1 .. number_of_aliases] IN temporary_library;
          IF new_alias_list = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY145', status);
            RETURN;
          IFEND;
          new_program_description_header^.aliases := #REL (new_alias_list, temporary_library^);
        IFEND;
      ELSE

        NEXT new_alias_list: [1 .. number_of_aliases] IN temporary_library;
        IF new_alias_list = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY146', status);
          RETURN;
        IFEND;

        new_alias_list^ := old_alias_list^;
        new_program_description_header^.aliases := #REL (new_alias_list, temporary_library^);
      IFEND;
    IFEND;

    old_program_description := #PTR (old_program_description_header^.member, module_description^.file^);
    IF old_program_description = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_program_description: [[REP new_program_description_header^.member_size OF cell]] IN
          temporary_library;
    IF new_program_description = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY147', status);
      RETURN;
    IFEND;

    new_program_description_header^.member := #REL (new_program_description, temporary_library^);


    new_program_description^ := old_program_description^;


  PROCEND copy_program_description;
?? OLDTITLE ??
?? NEWTITLE := '  COPY_SCL_PROCEDURE' ??
?? EJECT ??

  PROCEDURE [XDCL] copy_scl_procedure
    (    module_index: llt$module_index;
         module_description: ^oct$module_description;
         changed_info: ^oct$changed_info;
     VAR new_scl_procedure_header: ^llt$library_member_header;
     VAR temporary_library: ^SEQ ( * );
     VAR status: ost$status);


    VAR
      old_scl_procedure_header: ^llt$library_member_header,
      old_alias_list: ^pmt$module_list,
      old_scl_procedure: ^clt$scl_procedure,

      new_alias_list: ^pmt$module_list,
      temp_seq: ^SEQ ( * ),
      new_scl_procedure: ^clt$scl_procedure,

      last_alias: ^oct$external_declaration_list,
      new_alias: ^pmt$program_name,
      number_of_aliases: llt$number_of_aliases;



    CASE module_description^.kind OF
    = occ$command_procedure =
      old_scl_procedure_header := module_description^.command_procedure_header;
    = occ$function_procedure =
      old_scl_procedure_header := module_description^.function_procedure_header;
    CASEND;

    IF old_scl_procedure_header = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_scl_procedure_header IN temporary_library;
    IF new_scl_procedure_header = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY148', status);
      RETURN;
    IFEND;

    new_scl_procedure_header^ := old_scl_procedure_header^;
    new_scl_procedure_header^.module_index := module_index;

    IF changed_info <> NIL THEN
      IF changed_info^.name <> NIL THEN
        new_scl_procedure_header^.name := changed_info^.name^;
      IFEND;

      IF changed_info^.commentary <> NIL THEN
        new_scl_procedure_header^.commentary := changed_info^.commentary^;
      IFEND;
    IFEND;

    number_of_aliases := old_scl_procedure_header^.number_of_aliases;

    IF number_of_aliases <> 0 THEN
      old_alias_list := #PTR (old_scl_procedure_header^.aliases, module_description^.file^);
      IF old_alias_list = NIL THEN
        osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
        RETURN;
      IFEND;

      IF (changed_info <> NIL) AND (changed_info^.entry_points <> NIL) THEN
        last_alias := changed_info^.entry_points;
        number_of_aliases := 0;
        temp_seq := temporary_library;

        WHILE last_alias <> NIL DO
          IF last_alias^.name <> osc$null_name THEN
            number_of_aliases := number_of_aliases + 1;

            NEXT new_alias IN temp_seq;
            IF new_alias = NIL THEN
              osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY149', status);
              RETURN;
            IFEND;

            new_alias^ := last_alias^.name;
          IFEND;

          last_alias := last_alias^.link;
        WHILEND;

        new_scl_procedure_header^.number_of_aliases := number_of_aliases;

        IF number_of_aliases <> 0 THEN
          NEXT new_alias_list: [1 .. number_of_aliases] IN temporary_library;
          IF new_alias_list = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY150', status);
            RETURN;
          IFEND;
          new_scl_procedure_header^.aliases := #REL (new_alias_list, temporary_library^);
        IFEND;
      ELSE
        NEXT new_alias_list: [1 .. number_of_aliases] IN temporary_library;
        IF new_alias_list = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY151', status);
          RETURN;
        IFEND;

        new_alias_list^ := old_alias_list^;
        new_scl_procedure_header^.aliases := #REL (new_alias_list, temporary_library^);
      IFEND;
    IFEND;

    old_scl_procedure := #PTR (old_scl_procedure_header^.member, module_description^.file^);
    IF old_scl_procedure = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_scl_procedure: [[REP new_scl_procedure_header^.member_size OF cell]] IN temporary_library;
    IF new_scl_procedure = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY152', status);
      RETURN;
    IFEND;

    new_scl_procedure_header^.member := #REL (new_scl_procedure, temporary_library^);


    new_scl_procedure^ := old_scl_procedure^;

  PROCEND copy_scl_procedure;
?? OLDTITLE ??
?? NEWTITLE := '  COPY_COMMAND_DESCRIPTION' ??
?? EJECT ??

  PROCEDURE [XDCL] copy_command_description (module_index: llt$module_index;
        module_description: ^oct$module_description;
        changed_info: ^oct$changed_info;
    VAR new_command_description_header: ^llt$library_member_header;
    VAR temporary_library: ^SEQ ( * );
    VAR status: ost$status);


    VAR
      temp_seq: ^SEQ ( * ),

      old_command_description_header: ^llt$library_member_header,
      old_alias_list: ^pmt$module_list,
      old_command_description: ^llt$command_description,

      new_alias_list: ^pmt$module_list,
      new_command_description: ^llt$command_description,

      last_alias: ^oct$external_declaration_list,
      new_alias: ^pmt$program_name,
      number_of_aliases: llt$number_of_aliases;


    status.normal := TRUE;

    old_command_description_header :=  module_description^.command_description_header;
    IF old_command_description_header = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_command_description_header IN temporary_library;
    IF new_command_description_header = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY143a', status);
      RETURN;
    IFEND;

    new_command_description_header^ := old_command_description_header^;
    new_command_description_header^.module_index := module_index;

    IF changed_info <> NIL THEN
      IF changed_info^.name <> NIL THEN
        new_command_description_header^.name := changed_info^.name^;
      IFEND;

      IF changed_info^.commentary <> NIL THEN
        new_command_description_header^.commentary := changed_info^.commentary^;
      IFEND;
    IFEND;

    number_of_aliases := old_command_description_header^.number_of_aliases;

    IF number_of_aliases <> 0 THEN
      old_alias_list := #PTR (old_command_description_header^.aliases, module_description^.file^);
      IF old_alias_list = NIL THEN
        osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
        RETURN;
      IFEND;

      IF (changed_info <> NIL) AND (changed_info^.entry_points <> NIL) THEN
        last_alias := changed_info^.entry_points;
        number_of_aliases := 0;
        temp_seq := temporary_library;

        WHILE last_alias <> NIL DO
          IF last_alias^.name <> osc$null_name THEN
            number_of_aliases := number_of_aliases + 1;

            NEXT new_alias IN temp_seq;
            IF new_alias = NIL THEN
              osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY144a', status);
              RETURN;
            IFEND;

            new_alias^ := last_alias^.name;
          IFEND;

          last_alias := last_alias^.link;
        WHILEND;

        new_command_description_header^.number_of_aliases := number_of_aliases;

        IF number_of_aliases <> 0 THEN
          NEXT new_alias_list: [1 .. number_of_aliases] IN temporary_library;
          IF new_alias_list = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY145a', status);
            RETURN;
          IFEND;
          new_command_description_header^.aliases := #REL (new_alias_list, temporary_library^);
        IFEND;
      ELSE

        NEXT new_alias_list: [1 .. number_of_aliases] IN temporary_library;
        IF new_alias_list = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY146a', status);
          RETURN;
        IFEND;

        new_alias_list^ := old_alias_list^;
        new_command_description_header^.aliases := #REL (new_alias_list, temporary_library^);
      IFEND;
    IFEND;

    old_command_description := #PTR (old_command_description_header^.member, module_description^.file^);
    IF old_command_description = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_command_description: [[REP new_command_description_header^.member_size OF cell]] IN
          temporary_library;
    IF new_command_description = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY147a', status);
      RETURN;
    IFEND;

    new_command_description_header^.member := #REL (new_command_description, temporary_library^);

    new_command_description^ := old_command_description^;

  PROCEND copy_command_description;
?? OLDTITLE ??
?? NEWTITLE := '  COPY_FUNCTION_DESCRIPTION' ??
?? EJECT ??

  PROCEDURE [XDCL] copy_function_description (module_index: llt$module_index;
        module_description: ^oct$module_description;
        changed_info: ^oct$changed_info;
    VAR new_function_description_header: ^llt$library_member_header;
    VAR temporary_library: ^SEQ ( * );
    VAR status: ost$status);


    VAR
      temp_seq: ^SEQ ( * ),

      old_function_description_header: ^llt$library_member_header,
      old_alias_list: ^pmt$module_list,
      old_function_description: ^llt$function_description,

      new_alias_list: ^pmt$module_list,
      new_function_description: ^llt$function_description,

      last_alias: ^oct$external_declaration_list,
      new_alias: ^pmt$program_name,
      number_of_aliases: llt$number_of_aliases;


    status.normal := TRUE;

    old_function_description_header :=  module_description^.function_description_header;
    IF old_function_description_header = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_function_description_header IN temporary_library;
    IF new_function_description_header = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY143b', status);
      RETURN;
    IFEND;

    new_function_description_header^ := old_function_description_header^;
    new_function_description_header^.module_index := module_index;

    IF changed_info <> NIL THEN
      IF changed_info^.name <> NIL THEN
        new_function_description_header^.name := changed_info^.name^;
      IFEND;

      IF changed_info^.commentary <> NIL THEN
        new_function_description_header^.commentary := changed_info^.commentary^;
      IFEND;
    IFEND;

    number_of_aliases := old_function_description_header^.number_of_aliases;

    IF number_of_aliases <> 0 THEN
      old_alias_list := #PTR (old_function_description_header^.aliases, module_description^.file^);
      IF old_alias_list = NIL THEN
        osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
        RETURN;
      IFEND;

      IF (changed_info <> NIL) AND (changed_info^.entry_points <> NIL) THEN
        last_alias := changed_info^.entry_points;
        number_of_aliases := 0;
        temp_seq := temporary_library;

        WHILE last_alias <> NIL DO
          IF last_alias^.name <> osc$null_name THEN
            number_of_aliases := number_of_aliases + 1;

            NEXT new_alias IN temp_seq;
            IF new_alias = NIL THEN
              osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY144b', status);
              RETURN;
            IFEND;

            new_alias^ := last_alias^.name;
          IFEND;

          last_alias := last_alias^.link;
        WHILEND;

        new_function_description_header^.number_of_aliases := number_of_aliases;

        IF number_of_aliases <> 0 THEN
          NEXT new_alias_list: [1 .. number_of_aliases] IN temporary_library;
          IF new_alias_list = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY145b', status);
            RETURN;
          IFEND;
          new_function_description_header^.aliases := #REL (new_alias_list, temporary_library^);
        IFEND;
      ELSE

        NEXT new_alias_list: [1 .. number_of_aliases] IN temporary_library;
        IF new_alias_list = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY146b', status);
          RETURN;
        IFEND;

        new_alias_list^ := old_alias_list^;
        new_function_description_header^.aliases := #REL (new_alias_list, temporary_library^);
      IFEND;
    IFEND;

    old_function_description := #PTR (old_function_description_header^.member, module_description^.file^);
    IF old_function_description = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_function_description: [[REP new_function_description_header^.member_size OF cell]] IN
          temporary_library;
    IF new_function_description = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY147b', status);
      RETURN;
    IFEND;

    new_function_description_header^.member := #REL (new_function_description, temporary_library^);

    new_function_description^ := old_function_description^;

  PROCEND copy_function_description;
?? OLDTITLE ??
?? NEWTITLE := '  COPY_MESSAGE_MODULE' ??
?? EJECT ??

  PROCEDURE [XDCL] copy_message_module
    (    module_index: llt$module_index;
         module_description: ^oct$module_description;
         changed_info: ^oct$changed_info;
     VAR new_message_module_header: ^llt$library_member_header;
     VAR temporary_library: ^SEQ ( * );
     VAR status: ost$status);


    VAR
      old_message_module_header: ^llt$library_member_header,
      old_message_module: ^ost$message_template_module,

      temp_seq: ^SEQ ( * ),
      new_message_module: ^ost$message_template_module;




    RESET module_description^.file TO module_description^.message_module_header;


    NEXT old_message_module_header IN module_description^.file;
    IF old_message_module_header = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_message_module_header IN temporary_library;
    IF new_message_module_header = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY153', status);
      RETURN;
    IFEND;

    new_message_module_header^ := old_message_module_header^;
    new_message_module_header^.module_index := module_index;

    IF changed_info <> NIL THEN
      IF changed_info^.name <> NIL THEN
        new_message_module_header^.name := changed_info^.name^;
      IFEND;

      IF changed_info^.commentary <> NIL THEN
        new_message_module_header^.commentary := changed_info^.commentary^;
      IFEND;
    IFEND;

    old_message_module := #PTR (old_message_module_header^.member, module_description^.file^);
    IF old_message_module = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_message_module: [[REP new_message_module_header^.member_size OF cell]] IN temporary_library;
    IF new_message_module = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY154', status);
      RETURN;
    IFEND;

    new_message_module_header^.member := #REL (new_message_module, temporary_library^);


    new_message_module^ := old_message_module^;

  PROCEND copy_message_module;

?? OLDTITLE ??
?? NEWTITLE := '  COPY_PANEL_MODULE' ??
?? EJECT ??

  PROCEDURE [XDCL] copy_panel_module
    (    module_index: llt$module_index;
         module_description: ^oct$module_description;
         changed_info: ^oct$changed_info;
     VAR new_panel_module_header: ^llt$library_member_header;
     VAR temporary_library: ^SEQ ( * );
     VAR status: ost$status);


    VAR
      old_panel_module_header: ^llt$library_member_header,
      old_panel_module: ^SEQ ( * ),

      temp_seq: ^SEQ ( * ),
      new_panel_module: ^SEQ ( * );



    RESET module_description^.file TO module_description^.panel_module_header;


    NEXT old_panel_module_header IN module_description^.file;
    IF old_panel_module_header = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_panel_module_header IN temporary_library;
    IF new_panel_module_header = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY155', status);
      RETURN;
    IFEND;

    new_panel_module_header^ := old_panel_module_header^;
    new_panel_module_header^.module_index := module_index;

    IF changed_info <> NIL THEN
      IF changed_info^.name <> NIL THEN
        new_panel_module_header^.name := changed_info^.name^;
      IFEND;

      IF changed_info^.commentary <> NIL THEN
        new_panel_module_header^.commentary := changed_info^.commentary^;
      IFEND;
    IFEND;

    old_panel_module := #PTR (old_panel_module_header^.member, module_description^.file^);
    IF old_panel_module = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_panel_module: [[REP new_panel_module_header^.member_size OF cell]] IN temporary_library;
    IF new_panel_module = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY156', status);
      RETURN;
    IFEND;

    new_panel_module_header^.member := #REL (new_panel_module, temporary_library^);


    new_panel_module^ := old_panel_module^;

  PROCEND copy_panel_module;
?? OLDTITLE ??
?? NEWTITLE := '  COPY_APPLIC_PROGRAM_DESCRIPTION' ??
?? EJECT ??

  PROCEDURE [XDCL] copy_applic_program_description
    (    module_index: llt$module_index;
         module_description: ^oct$module_description;
         changed_info: ^oct$changed_info;
     VAR new_applic_program_des_hdr: ^llt$application_member_header;
     VAR temporary_library: ^SEQ ( * );
     VAR status: ost$status);


    VAR
      temp_seq: ^SEQ ( * ),

      old_applic_program_des_hdr: ^llt$application_member_header,
      old_alias_list: ^pmt$module_list,
      old_applic_program_description: ^llt$program_description,

      new_alias_list: ^pmt$module_list,
      new_applic_program_description: ^llt$program_description,

      last_alias: ^oct$external_declaration_list,
      new_alias: ^pmt$program_name,
      number_of_aliases: llt$number_of_aliases;


    old_applic_program_des_hdr := module_description^.applic_program_description_hdr;
    IF old_applic_program_des_hdr = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_applic_program_des_hdr IN temporary_library;
    IF new_applic_program_des_hdr = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY157', status);
      RETURN;
    IFEND;

    new_applic_program_des_hdr^ := old_applic_program_des_hdr^;
    new_applic_program_des_hdr^.library_member_header.module_index := module_index;

    IF changed_info <> NIL THEN
      IF changed_info^.name <> NIL THEN
        new_applic_program_des_hdr^.library_member_header.name := changed_info^.name^;
      IFEND;

      IF changed_info^.commentary <> NIL THEN
        new_applic_program_des_hdr^.library_member_header.commentary := changed_info^.commentary^;
      IFEND;

      IF changed_info^.application_identifier <> NIL THEN
        new_applic_program_des_hdr^.application_identifier.name := changed_info^.application_identifier^.name;
      IFEND;
    IFEND;

    number_of_aliases := old_applic_program_des_hdr^.library_member_header.number_of_aliases;

    IF number_of_aliases <> 0 THEN
      old_alias_list := #PTR (old_applic_program_des_hdr^.library_member_header.aliases,
            module_description^.file^);
      IF old_alias_list = NIL THEN
        osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
        RETURN;
      IFEND;

      IF (changed_info <> NIL) AND (changed_info^.entry_points <> NIL) THEN
        last_alias := changed_info^.entry_points;
        number_of_aliases := 0;
        temp_seq := temporary_library;

        WHILE last_alias <> NIL DO
          IF last_alias^.name <> osc$null_name THEN
            number_of_aliases := number_of_aliases + 1;

            NEXT new_alias IN temp_seq;
            IF new_alias = NIL THEN
              osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY158', status);
              RETURN;
            IFEND;

            new_alias^ := last_alias^.name;
          IFEND;

          last_alias := last_alias^.link;
        WHILEND;

        new_applic_program_des_hdr^.library_member_header.number_of_aliases := number_of_aliases;

        IF number_of_aliases <> 0 THEN
          NEXT new_alias_list: [1 .. number_of_aliases] IN temporary_library;
          IF new_alias_list = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY159', status);
            RETURN;
          IFEND;
          new_applic_program_des_hdr^.library_member_header.aliases :=
                #REL (new_alias_list, temporary_library^);
        IFEND;
      ELSE

        NEXT new_alias_list: [1 .. number_of_aliases] IN temporary_library;
        IF new_alias_list = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY160', status);
          RETURN;
        IFEND;

        new_alias_list^ := old_alias_list^;
        new_applic_program_des_hdr^.library_member_header.aliases :=
              #REL (new_alias_list, temporary_library^);
      IFEND;
    IFEND;

    old_applic_program_description := #PTR (old_applic_program_des_hdr^.library_member_header.member,
          module_description^.file^);
    IF old_applic_program_description = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_applic_program_description: [[REP new_applic_program_des_hdr^.library_member_header.
          member_size OF cell]] IN temporary_library;
    IF new_applic_program_description = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY161', status);
      RETURN;
    IFEND;

    new_applic_program_des_hdr^.library_member_header.member :=
          #REL (new_applic_program_description, temporary_library^);


    new_applic_program_description^ := old_applic_program_description^;


  PROCEND copy_applic_program_description;
?? OLDTITLE ??
?? NEWTITLE := '  COPY_APPLIC_COMMAND_PROCEDURE' ??
?? EJECT ??

  PROCEDURE [XDCL] copy_applic_command_procedure
    (    module_index: llt$module_index;
         module_description: ^oct$module_description;
         changed_info: ^oct$changed_info;
     VAR new_applic_command_proc_hdr: ^llt$application_member_header;
     VAR temporary_library: ^SEQ ( * );
     VAR status: ost$status);


    VAR
      old_applic_command_proc_hdr: ^llt$application_member_header,
      old_alias_list: ^pmt$module_list,
      old_applic_command_procedure: ^clt$scl_procedure,

      new_alias_list: ^pmt$module_list,
      temp_seq: ^SEQ ( * ),
      new_applic_command_procedure: ^clt$scl_procedure,

      last_alias: ^oct$external_declaration_list,
      new_alias: ^pmt$program_name,
      number_of_aliases: llt$number_of_aliases;



    old_applic_command_proc_hdr := module_description^.applic_command_procedure_header;
    IF old_applic_command_proc_hdr = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_applic_command_proc_hdr IN temporary_library;
    IF new_applic_command_proc_hdr = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY162', status);
      RETURN;
    IFEND;

    new_applic_command_proc_hdr^ := old_applic_command_proc_hdr^;
    new_applic_command_proc_hdr^.library_member_header.module_index := module_index;

    IF changed_info <> NIL THEN
      IF changed_info^.name <> NIL THEN
        new_applic_command_proc_hdr^.library_member_header.name := changed_info^.name^;
      IFEND;

      IF changed_info^.commentary <> NIL THEN
        new_applic_command_proc_hdr^.library_member_header.commentary := changed_info^.commentary^;
      IFEND;

      IF changed_info^.application_identifier <> NIL THEN
        new_applic_command_proc_hdr^.application_identifier.name :=
              changed_info^.application_identifier^.name;
      IFEND;
    IFEND;

    number_of_aliases := old_applic_command_proc_hdr^.library_member_header.number_of_aliases;

    IF number_of_aliases <> 0 THEN
      old_alias_list := #PTR (old_applic_command_proc_hdr^.library_member_header.aliases,
            module_description^.file^);
      IF old_alias_list = NIL THEN
        osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
        RETURN;
      IFEND;

      IF (changed_info <> NIL) AND (changed_info^.entry_points <> NIL) THEN
        last_alias := changed_info^.entry_points;
        number_of_aliases := 0;
        temp_seq := temporary_library;

        WHILE last_alias <> NIL DO
          IF last_alias^.name <> osc$null_name THEN
            number_of_aliases := number_of_aliases + 1;

            NEXT new_alias IN temp_seq;
            IF new_alias = NIL THEN
              osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY163', status);
              RETURN;
            IFEND;

            new_alias^ := last_alias^.name;
          IFEND;

          last_alias := last_alias^.link;
        WHILEND;

        new_applic_command_proc_hdr^.library_member_header.number_of_aliases := number_of_aliases;

        IF number_of_aliases <> 0 THEN
          NEXT new_alias_list: [1 .. number_of_aliases] IN temporary_library;
          IF new_alias_list = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY164', status);
            RETURN;
          IFEND;
          new_applic_command_proc_hdr^.library_member_header.aliases :=
                #REL (new_alias_list, temporary_library^);
        IFEND;
      ELSE
        NEXT new_alias_list: [1 .. number_of_aliases] IN temporary_library;
        IF new_alias_list = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY165', status);
          RETURN;
        IFEND;

        new_alias_list^ := old_alias_list^;
        new_applic_command_proc_hdr^.library_member_header.aliases :=
              #REL (new_alias_list, temporary_library^);
      IFEND;
    IFEND;

    old_applic_command_procedure := #PTR (old_applic_command_proc_hdr^.library_member_header.member,
          module_description^.file^);
    IF old_applic_command_procedure = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_applic_command_procedure: [[REP new_applic_command_proc_hdr^.library_member_header.member_size OF
          cell]] IN temporary_library;
    IF new_applic_command_procedure = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY166', status);
      RETURN;
    IFEND;

    new_applic_command_proc_hdr^.library_member_header.member :=
          #REL (new_applic_command_procedure, temporary_library^);


    new_applic_command_procedure^ := old_applic_command_procedure^;

  PROCEND copy_applic_command_procedure;
?? OLDTITLE ??
?? NEWTITLE := '  COPY_APPLIC_COMMAND_DESCRIPTION' ??
?? EJECT ??

  PROCEDURE [XDCL] copy_applic_command_description (module_index: llt$module_index;
        module_description: ^oct$module_description;
        changed_info: ^oct$changed_info;
    VAR new_applic_command_des_hdr: ^llt$application_member_header;
    VAR temporary_library: ^SEQ ( * );
    VAR status: ost$status);


    VAR
      temp_seq: ^SEQ ( * ),

      old_applic_command_des_hdr: ^llt$application_member_header,
      old_alias_list: ^pmt$module_list,
      old_applic_command_description: ^llt$command_description,

      new_alias_list: ^pmt$module_list,
      new_applic_command_description: ^llt$command_description,

      last_alias: ^oct$external_declaration_list,
      new_alias: ^pmt$program_name,
      number_of_aliases: llt$number_of_aliases;


    status.normal := TRUE;

    old_applic_command_des_hdr :=  module_description^.applic_command_description_hdr;
    IF old_applic_command_des_hdr = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_applic_command_des_hdr IN temporary_library;
    IF new_applic_command_des_hdr = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY157a', status);
      RETURN;
    IFEND;

    new_applic_command_des_hdr^ := old_applic_command_des_hdr^;
    new_applic_command_des_hdr^.library_member_header.module_index := module_index;

    IF changed_info <> NIL THEN
      IF changed_info^.name <> NIL THEN
        new_applic_command_des_hdr^.library_member_header.name := changed_info^.name^;
      IFEND;

      IF changed_info^.commentary <> NIL THEN
        new_applic_command_des_hdr^.library_member_header.commentary := changed_info^.commentary^;
      IFEND;

      IF changed_info^.application_identifier <> NIL THEN
        new_applic_command_des_hdr^.application_identifier.name := changed_info^.
              application_identifier^.name;
      IFEND;
    IFEND;

    number_of_aliases := old_applic_command_des_hdr^.library_member_header.number_of_aliases;

    IF number_of_aliases <> 0 THEN
      old_alias_list := #PTR (old_applic_command_des_hdr^.library_member_header.aliases,
            module_description^.file^);
      IF old_alias_list = NIL THEN
        osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
        RETURN;
      IFEND;

      IF (changed_info <> NIL) AND (changed_info^.entry_points <> NIL) THEN
        last_alias := changed_info^.entry_points;
        number_of_aliases := 0;
        temp_seq := temporary_library;

        WHILE last_alias <> NIL DO
          IF last_alias^.name <> osc$null_name THEN
            number_of_aliases := number_of_aliases + 1;

            NEXT new_alias IN temp_seq;
            IF new_alias = NIL THEN
              osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY158a', status);
              RETURN;
            IFEND;

            new_alias^ := last_alias^.name;
          IFEND;

          last_alias := last_alias^.link;
        WHILEND;

        new_applic_command_des_hdr^.library_member_header.number_of_aliases := number_of_aliases;

        IF number_of_aliases <> 0 THEN
          NEXT new_alias_list: [1 .. number_of_aliases] IN temporary_library;
          IF new_alias_list = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY159a', status);
            RETURN;
          IFEND;
          new_applic_command_des_hdr^.library_member_header.aliases := #REL (new_alias_list,
                temporary_library^);
        IFEND;
      ELSE

        NEXT new_alias_list: [1 .. number_of_aliases] IN temporary_library;
        IF new_alias_list = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY160', status);
          RETURN;
        IFEND;

        new_alias_list^ := old_alias_list^;
        new_applic_command_des_hdr^.library_member_header.aliases := #REL (new_alias_list,
              temporary_library^);
      IFEND;
    IFEND;

    old_applic_command_description := #PTR (old_applic_command_des_hdr^.library_member_header.member,
          module_description^.file^);
    IF old_applic_command_description = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_applic_command_description: [[REP new_applic_command_des_hdr^.library_member_header.
          member_size OF cell]] IN temporary_library;
    IF new_applic_command_description = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY161', status);
      RETURN;
    IFEND;

    new_applic_command_des_hdr^.library_member_header.member := #REL (new_applic_command_description,
          temporary_library^);

    new_applic_command_description^ := old_applic_command_description^;

  PROCEND copy_applic_command_description;
?? OLDTITLE ??
?? NEWTITLE := '  COPY_PROG_DES_TO_APP_PROG_DES' ??
?? EJECT ??

  PROCEDURE [XDCL] copy_prog_des_to_app_prog_des
    (    module_index: llt$module_index;
         module_description: ^oct$module_description;
         changed_info: ^oct$changed_info;
     VAR new_applic_program_des_hdr: ^llt$application_member_header;
     VAR temporary_library: ^SEQ ( * );
     VAR status: ost$status);


    VAR
      temp_seq: ^SEQ ( * ),

      old_program_description_header: ^llt$library_member_header,
      old_alias_list: ^pmt$module_list,
      old_applic_program_description: ^llt$program_description,

      new_alias_list: ^pmt$module_list,
      new_applic_program_description: ^llt$program_description,

      last_alias: ^oct$external_declaration_list,
      new_alias: ^pmt$program_name,
      number_of_aliases: llt$number_of_aliases;

    old_program_description_header := module_description^.program_description_header;
    IF old_program_description_header = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_applic_program_des_hdr IN temporary_library;
    IF new_applic_program_des_hdr = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY167', status);
      RETURN;
    IFEND;

    new_applic_program_des_hdr^.library_member_header := old_program_description_header^;
    new_applic_program_des_hdr^.application_identifier.name := changed_info^.application_identifier^.name;
    new_applic_program_des_hdr^.library_member_header.kind := llc$applic_program_description;
    new_applic_program_des_hdr^.library_member_header.module_index := module_index;

    IF changed_info^.name <> NIL THEN
      new_applic_program_des_hdr^.library_member_header.name := changed_info^.name^;
    IFEND;

    IF changed_info^.commentary <> NIL THEN
      new_applic_program_des_hdr^.library_member_header.commentary := changed_info^.commentary^;
    IFEND;

    number_of_aliases := old_program_description_header^.number_of_aliases;

    IF number_of_aliases <> 0 THEN
      old_alias_list := #PTR (old_program_description_header^.aliases, module_description^.file^);
      IF old_alias_list = NIL THEN
        osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
        RETURN;
      IFEND;

      IF changed_info^.entry_points <> NIL THEN
        last_alias := changed_info^.entry_points;
        number_of_aliases := 0;
        temp_seq := temporary_library;

        WHILE last_alias <> NIL DO
          IF last_alias^.name <> osc$null_name THEN
            number_of_aliases := number_of_aliases + 1;

            NEXT new_alias IN temp_seq;
            IF new_alias = NIL THEN
              osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY168', status);
              RETURN;
            IFEND;

            new_alias^ := last_alias^.name;
          IFEND;

          last_alias := last_alias^.link;
        WHILEND;

        new_applic_program_des_hdr^.library_member_header.number_of_aliases := number_of_aliases;

        IF number_of_aliases <> 0 THEN
          NEXT new_alias_list: [1 .. number_of_aliases] IN temporary_library;
          IF new_alias_list = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY169', status);
            RETURN;
          IFEND;
          new_applic_program_des_hdr^.library_member_header.aliases :=
                #REL (new_alias_list, temporary_library^);
        IFEND;
      ELSE

        NEXT new_alias_list: [1 .. number_of_aliases] IN temporary_library;
        IF new_alias_list = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY170', status);
          RETURN;
        IFEND;

        new_alias_list^ := old_alias_list^;
        new_applic_program_des_hdr^.library_member_header.aliases :=
              #REL (new_alias_list, temporary_library^);
      IFEND;
    IFEND;

    old_applic_program_description := #PTR (old_program_description_header^.member,
          module_description^.file^);
    IF old_applic_program_description = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_applic_program_description: [[REP new_applic_program_des_hdr^.library_member_header.
          member_size OF cell]] IN temporary_library;
    IF new_applic_program_description = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY171', status);
      RETURN;
    IFEND;

    new_applic_program_des_hdr^.library_member_header.member :=
          #REL (new_applic_program_description, temporary_library^);

    new_applic_program_description^ := old_applic_program_description^;


  PROCEND copy_prog_des_to_app_prog_des;
?? OLDTITLE ??
?? NEWTITLE := '  COPY_SCL_PROC_TO_APP_SCL_PROC' ??
?? EJECT ??

  PROCEDURE [XDCL] copy_scl_proc_to_app_scl_proc
    (    module_index: llt$module_index;
         module_description: ^oct$module_description;
         changed_info: ^oct$changed_info;
     VAR new_applic_command_proc_hdr: ^llt$application_member_header;
     VAR temporary_library: ^SEQ ( * );
     VAR status: ost$status);


    VAR
      old_command_procedure_header: ^llt$library_member_header,
      old_alias_list: ^pmt$module_list,
      old_applic_command_procedure: ^clt$scl_procedure,

      new_alias_list: ^pmt$module_list,
      temp_seq: ^SEQ ( * ),
      new_applic_command_procedure: ^clt$scl_procedure,

      last_alias: ^oct$external_declaration_list,
      new_alias: ^pmt$program_name,
      number_of_aliases: llt$number_of_aliases;



    old_command_procedure_header := module_description^.command_procedure_header;
    IF old_command_procedure_header = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_applic_command_proc_hdr IN temporary_library;
    IF new_applic_command_proc_hdr = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY172', status);
      RETURN;
    IFEND;

    new_applic_command_proc_hdr^.library_member_header := old_command_procedure_header^;
    new_applic_command_proc_hdr^.application_identifier.name := changed_info^.application_identifier^.name;
    new_applic_command_proc_hdr^.library_member_header.kind := llc$applic_command_procedure;
    new_applic_command_proc_hdr^.library_member_header.module_index := module_index;

    IF changed_info^.name <> NIL THEN
      new_applic_command_proc_hdr^.library_member_header.name := changed_info^.name^;
    IFEND;

    IF changed_info^.commentary <> NIL THEN
      new_applic_command_proc_hdr^.library_member_header.commentary := changed_info^.commentary^;
    IFEND;

    number_of_aliases := old_command_procedure_header^.number_of_aliases;

    IF number_of_aliases <> 0 THEN
      old_alias_list := #PTR (old_command_procedure_header^.aliases, module_description^.file^);
      IF old_alias_list = NIL THEN
        osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
        RETURN;
      IFEND;

      IF changed_info^.entry_points <> NIL THEN
        last_alias := changed_info^.entry_points;
        number_of_aliases := 0;
        temp_seq := temporary_library;

        WHILE last_alias <> NIL DO
          IF last_alias^.name <> osc$null_name THEN
            number_of_aliases := number_of_aliases + 1;

            NEXT new_alias IN temp_seq;
            IF new_alias = NIL THEN
              osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY173', status);
              RETURN;
            IFEND;

            new_alias^ := last_alias^.name;
          IFEND;

          last_alias := last_alias^.link;
        WHILEND;

        new_applic_command_proc_hdr^.library_member_header.number_of_aliases := number_of_aliases;

        IF number_of_aliases <> 0 THEN
          NEXT new_alias_list: [1 .. number_of_aliases] IN temporary_library;
          IF new_alias_list = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY174', status);
            RETURN;
          IFEND;
          new_applic_command_proc_hdr^.library_member_header.aliases :=
                #REL (new_alias_list, temporary_library^);
        IFEND;
      ELSE
        NEXT new_alias_list: [1 .. number_of_aliases] IN temporary_library;
        IF new_alias_list = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY175', status);
          RETURN;
        IFEND;

        new_alias_list^ := old_alias_list^;
        new_applic_command_proc_hdr^.library_member_header.aliases :=
              #REL (new_alias_list, temporary_library^);
      IFEND;
    IFEND;

    old_applic_command_procedure := #PTR (old_command_procedure_header^.member, module_description^.file^);
    IF old_applic_command_procedure = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_applic_command_procedure: [[REP new_applic_command_proc_hdr^.library_member_header.member_size OF
          cell]] IN temporary_library;
    IF new_applic_command_procedure = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY176', status);
      RETURN;
    IFEND;

    new_applic_command_proc_hdr^.library_member_header.member :=
          #REL (new_applic_command_procedure, temporary_library^);

    new_applic_command_procedure^ := old_applic_command_procedure^;

  PROCEND copy_scl_proc_to_app_scl_proc;
?? OLDTITLE ??
?? NEWTITLE := '  COPY_CMND_DES_TO_APP_CMND_DES' ??
?? EJECT ??

  PROCEDURE [XDCL] copy_cmnd_des_to_app_cmnd_des (module_index: llt$module_index;
        module_description: ^oct$module_description;
        changed_info: ^oct$changed_info;
    VAR new_applic_command_des_hdr: ^llt$application_member_header;
    VAR temporary_library: ^SEQ ( * );
    VAR status: ost$status);


    VAR
      temp_seq: ^SEQ ( * ),

      old_command_description_header: ^llt$library_member_header,
      old_alias_list: ^pmt$module_list,
      old_applic_command_description: ^llt$command_description,

      new_alias_list: ^pmt$module_list,
      new_applic_command_description: ^llt$command_description,

      last_alias: ^oct$external_declaration_list,
      new_alias: ^pmt$program_name,
      number_of_aliases: llt$number_of_aliases;

    old_command_description_header :=  module_description^.command_description_header;
    IF old_command_description_header = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_applic_command_des_hdr IN temporary_library;
    IF new_applic_command_des_hdr = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY167', status);
      RETURN;
    IFEND;

    new_applic_command_des_hdr^.library_member_header := old_command_description_header^;
    new_applic_command_des_hdr^.application_identifier.name := changed_info^.application_identifier^.name;
    new_applic_command_des_hdr^.library_member_header.kind := llc$applic_command_description;
    new_applic_command_des_hdr^.library_member_header.module_index := module_index;

    IF changed_info^.name <> NIL THEN
      new_applic_command_des_hdr^.library_member_header.name := changed_info^.name^;
    IFEND;

    IF changed_info^.commentary <> NIL THEN
      new_applic_command_des_hdr^.library_member_header.commentary := changed_info^.commentary^;
    IFEND;

    number_of_aliases := old_command_description_header^.number_of_aliases;

    IF number_of_aliases <> 0 THEN
      old_alias_list := #PTR (old_command_description_header^.aliases, module_description^.file^);
      IF old_alias_list = NIL THEN
        osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
        RETURN;
      IFEND;

      IF changed_info^.entry_points <> NIL THEN
        last_alias := changed_info^.entry_points;
        number_of_aliases := 0;
        temp_seq := temporary_library;

        WHILE last_alias <> NIL DO
          IF last_alias^.name <> osc$null_name THEN
            number_of_aliases := number_of_aliases + 1;

            NEXT new_alias IN temp_seq;
            IF new_alias = NIL THEN
              osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY168', status);
              RETURN;
            IFEND;

            new_alias^ := last_alias^.name;
          IFEND;

          last_alias := last_alias^.link;
        WHILEND;

        new_applic_command_des_hdr^.library_member_header.number_of_aliases := number_of_aliases;

        IF number_of_aliases <> 0 THEN
          NEXT new_alias_list: [1 .. number_of_aliases] IN temporary_library;
          IF new_alias_list = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY169', status);
            RETURN;
          IFEND;
          new_applic_command_des_hdr^.library_member_header.aliases := #REL (new_alias_list,
                temporary_library^);
        IFEND;
      ELSE

        NEXT new_alias_list: [1 .. number_of_aliases] IN temporary_library;
        IF new_alias_list = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY170', status);
          RETURN;
        IFEND;

        new_alias_list^ := old_alias_list^;
        new_applic_command_des_hdr^.library_member_header.aliases := #REL (new_alias_list,
              temporary_library^);
      IFEND;
    IFEND;

    old_applic_command_description := #PTR (old_command_description_header^.member,
          module_description^.file^);
    IF old_applic_command_description = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_applic_command_description: [[REP new_applic_command_des_hdr^.library_member_header.
          member_size OF cell]] IN temporary_library;
    IF new_applic_command_description = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY171', status);
      RETURN;
    IFEND;

    new_applic_command_des_hdr^.library_member_header.member := #REL (new_applic_command_description,
          temporary_library^);

    new_applic_command_description^ := old_applic_command_description^;


  PROCEND copy_cmnd_des_to_app_cmnd_des;
?? OLDTITLE ??
?? NEWTITLE := '  COPY_APP_PROG_DES_TO_PROG_DES' ??
?? EJECT ??

  PROCEDURE [XDCL] copy_app_prog_des_to_prog_des
    (    module_index: llt$module_index;
         module_description: ^oct$module_description;
         changed_info: ^oct$changed_info;
     VAR new_program_description_header: ^llt$library_member_header;
     VAR temporary_library: ^SEQ ( * );
     VAR status: ost$status);


    VAR
      temp_seq: ^SEQ ( * ),

      old_applic_program_des_hdr: ^llt$application_member_header,
      old_alias_list: ^pmt$module_list,
      old_program_description: ^llt$program_description,

      new_alias_list: ^pmt$module_list,
      new_program_description: ^llt$program_description,

      last_alias: ^oct$external_declaration_list,
      new_alias: ^pmt$program_name,
      number_of_aliases: llt$number_of_aliases;

    old_applic_program_des_hdr := module_description^.applic_program_description_hdr;
    IF old_applic_program_des_hdr = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_program_description_header IN temporary_library;
    IF new_program_description_header = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY177', status);
      RETURN;
    IFEND;

    new_program_description_header^ := old_applic_program_des_hdr^.library_member_header;
    new_program_description_header^.kind := llc$program_description;
    new_program_description_header^.module_index := module_index;

    IF changed_info^.name <> NIL THEN
      new_program_description_header^.name := changed_info^.name^;
    IFEND;

    IF changed_info^.commentary <> NIL THEN
      new_program_description_header^.commentary := changed_info^.commentary^;
    IFEND;

    number_of_aliases := old_applic_program_des_hdr^.library_member_header.number_of_aliases;

    IF number_of_aliases <> 0 THEN
      old_alias_list := #PTR (old_applic_program_des_hdr^.library_member_header.aliases,
            module_description^.file^);
      IF old_alias_list = NIL THEN
        osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
        RETURN;
      IFEND;

      IF changed_info^.entry_points <> NIL THEN
        last_alias := changed_info^.entry_points;
        number_of_aliases := 0;
        temp_seq := temporary_library;

        WHILE last_alias <> NIL DO
          IF last_alias^.name <> osc$null_name THEN
            number_of_aliases := number_of_aliases + 1;

            NEXT new_alias IN temp_seq;
            IF new_alias = NIL THEN
              osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY178', status);
              RETURN;
            IFEND;

            new_alias^ := last_alias^.name;
          IFEND;

          last_alias := last_alias^.link;
        WHILEND;

        new_program_description_header^.number_of_aliases := number_of_aliases;

        IF number_of_aliases <> 0 THEN
          NEXT new_alias_list: [1 .. number_of_aliases] IN temporary_library;
          IF new_alias_list = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY179', status);
            RETURN;
          IFEND;
          new_program_description_header^.aliases := #REL (new_alias_list, temporary_library^);
        IFEND;
      ELSE

        NEXT new_alias_list: [1 .. number_of_aliases] IN temporary_library;
        IF new_alias_list = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY180', status);
          RETURN;
        IFEND;

        new_alias_list^ := old_alias_list^;
        new_program_description_header^.aliases := #REL (new_alias_list, temporary_library^);
      IFEND;
    IFEND;

    old_program_description := #PTR (old_applic_program_des_hdr^.library_member_header.member,
          module_description^.file^);
    IF old_program_description = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_program_description: [[REP new_program_description_header^.member_size OF cell]] IN
          temporary_library;
    IF new_program_description = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY181', status);
      RETURN;
    IFEND;

    new_program_description_header^.member := #REL (new_program_description, temporary_library^);


    new_program_description^ := old_program_description^;


  PROCEND copy_app_prog_des_to_prog_des;
?? OLDTITLE ??
?? NEWTITLE := '  COPY_APP_SCL_PROC_TO_SCL_PROC' ??
?? EJECT ??

  PROCEDURE [XDCL] copy_app_scl_proc_to_scl_proc
    (    module_index: llt$module_index;
         module_description: ^oct$module_description;
         changed_info: ^oct$changed_info;
     VAR new_scl_procedure_header: ^llt$library_member_header;
     VAR temporary_library: ^SEQ ( * );
     VAR status: ost$status);


    VAR
      old_applic_scl_proc_header: ^llt$application_member_header,
      old_alias_list: ^pmt$module_list,
      old_scl_procedure: ^clt$scl_procedure,

      new_alias_list: ^pmt$module_list,
      temp_seq: ^SEQ ( * ),
      new_scl_procedure: ^clt$scl_procedure,

      last_alias: ^oct$external_declaration_list,
      new_alias: ^pmt$program_name,
      number_of_aliases: llt$number_of_aliases;


    old_applic_scl_proc_header := module_description^.applic_command_procedure_header;
    IF old_applic_scl_proc_header = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_scl_procedure_header IN temporary_library;
    IF new_scl_procedure_header = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY182', status);
      RETURN;
    IFEND;

    new_scl_procedure_header^ := old_applic_scl_proc_header^.library_member_header;
    new_scl_procedure_header^.kind := llc$command_procedure;
    new_scl_procedure_header^.module_index := module_index;

    IF changed_info^.name <> NIL THEN
      new_scl_procedure_header^.name := changed_info^.name^;
    IFEND;

    IF changed_info^.commentary <> NIL THEN
      new_scl_procedure_header^.commentary := changed_info^.commentary^;
    IFEND;

    number_of_aliases := old_applic_scl_proc_header^.library_member_header.number_of_aliases;

    IF number_of_aliases <> 0 THEN
      old_alias_list := #PTR (old_applic_scl_proc_header^.library_member_header.aliases,
            module_description^.file^);
      IF old_alias_list = NIL THEN
        osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
        RETURN;
      IFEND;

      IF changed_info^.entry_points <> NIL THEN
        last_alias := changed_info^.entry_points;
        number_of_aliases := 0;
        temp_seq := temporary_library;

        WHILE last_alias <> NIL DO
          IF last_alias^.name <> osc$null_name THEN
            number_of_aliases := number_of_aliases + 1;

            NEXT new_alias IN temp_seq;
            IF new_alias = NIL THEN
              osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY183', status);
              RETURN;
            IFEND;

            new_alias^ := last_alias^.name;
          IFEND;

          last_alias := last_alias^.link;
        WHILEND;

        new_scl_procedure_header^.number_of_aliases := number_of_aliases;

        IF number_of_aliases <> 0 THEN
          NEXT new_alias_list: [1 .. number_of_aliases] IN temporary_library;
          IF new_alias_list = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY184', status);
            RETURN;
          IFEND;
          new_scl_procedure_header^.aliases := #REL (new_alias_list, temporary_library^);
        IFEND;
      ELSE
        NEXT new_alias_list: [1 .. number_of_aliases] IN temporary_library;
        IF new_alias_list = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY185', status);
          RETURN;
        IFEND;

        new_alias_list^ := old_alias_list^;
        new_scl_procedure_header^.aliases := #REL (new_alias_list, temporary_library^);
      IFEND;
    IFEND;

    old_scl_procedure := #PTR (old_applic_scl_proc_header^.library_member_header.member,
          module_description^.file^);
    IF old_scl_procedure = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_scl_procedure: [[REP new_scl_procedure_header^.member_size OF cell]] IN temporary_library;
    IF new_scl_procedure = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY186', status);
      RETURN;
    IFEND;

    new_scl_procedure_header^.member := #REL (new_scl_procedure, temporary_library^);


    new_scl_procedure^ := old_scl_procedure^;

  PROCEND copy_app_scl_proc_to_scl_proc;
?? OLDTITLE ??
?? NEWTITLE := '  COPY_APP_CMND_DES_TO_CMND_DES' ??
?? EJECT ??

  PROCEDURE [XDCL] copy_app_cmnd_des_to_cmnd_des (module_index: llt$module_index;
        module_description: ^oct$module_description;
        changed_info: ^oct$changed_info;
    VAR new_command_description_header: ^llt$library_member_header;
    VAR temporary_library: ^SEQ ( * );
    VAR status: ost$status);


    VAR
      temp_seq: ^SEQ ( * ),

      old_applic_command_des_hdr: ^llt$application_member_header,
      old_alias_list: ^pmt$module_list,
      old_command_description: ^llt$command_description,

      new_alias_list: ^pmt$module_list,
      new_command_description: ^llt$command_description,

      last_alias: ^oct$external_declaration_list,
      new_alias: ^pmt$program_name,
      number_of_aliases: llt$number_of_aliases;

    old_applic_command_des_hdr :=  module_description^.applic_command_description_hdr;
    IF old_applic_command_des_hdr = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_command_description_header IN temporary_library;
    IF new_command_description_header = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY177', status);
      RETURN;
    IFEND;

    new_command_description_header^ := old_applic_command_des_hdr^.library_member_header;
    new_command_description_header^.kind := llc$command_description;
    new_command_description_header^.module_index := module_index;

    IF changed_info^.name <> NIL THEN
      new_command_description_header^.name := changed_info^.name^;
    IFEND;

    IF changed_info^.commentary <> NIL THEN
      new_command_description_header^.commentary := changed_info^.commentary^;
    IFEND;

    number_of_aliases := old_applic_command_des_hdr^.library_member_header.number_of_aliases;

    IF number_of_aliases <> 0 THEN
      old_alias_list := #PTR (old_applic_command_des_hdr^.library_member_header.aliases, module_description^
            .file^);
      IF old_alias_list = NIL THEN
        osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
        RETURN;
      IFEND;

      IF changed_info^.entry_points <> NIL THEN
        last_alias := changed_info^.entry_points;
        number_of_aliases := 0;
        temp_seq := temporary_library;

        WHILE last_alias <> NIL DO
          IF last_alias^.name <> osc$null_name THEN
            number_of_aliases := number_of_aliases + 1;

            NEXT new_alias IN temp_seq;
            IF new_alias = NIL THEN
              osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY178', status);
              RETURN;
            IFEND;

            new_alias^ := last_alias^.name;
          IFEND;

          last_alias := last_alias^.link;
        WHILEND;

        new_command_description_header^.number_of_aliases := number_of_aliases;

        IF number_of_aliases <> 0 THEN
          NEXT new_alias_list: [1 .. number_of_aliases] IN temporary_library;
          IF new_alias_list = NIL THEN
            osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY179', status);
            RETURN;
          IFEND;
          new_command_description_header^.aliases := #REL (new_alias_list, temporary_library^);
        IFEND;
      ELSE

        NEXT new_alias_list: [1 .. number_of_aliases] IN temporary_library;
        IF new_alias_list = NIL THEN
          osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY180', status);
          RETURN;
        IFEND;

        new_alias_list^ := old_alias_list^;
        new_command_description_header^.aliases := #REL (new_alias_list, temporary_library^);
      IFEND;
    IFEND;

    old_command_description := #PTR (old_applic_command_des_hdr^.library_member_header.member,
          module_description^.file^);
    IF old_command_description = NIL THEN
      osp$set_status_abnormal (oc, oce$e_premature_eof_in_module, module_description^.name, status);
      RETURN;
    IFEND;

    NEXT new_command_description: [[REP new_command_description_header^.member_size OF cell]] IN
          temporary_library;
    IF new_command_description = NIL THEN
      osp$set_status_abnormal (oc, oce$e_eof_on_generated_file, 'CPY181', status);
      RETURN;
    IFEND;

    new_command_description_header^.member := #REL (new_command_description, temporary_library^);


    new_command_description^ := old_command_description^;


  PROCEND copy_app_cmnd_des_to_cmnd_des;

MODEND ocm$copy_modules;
