
{ ******************************************************************************
{ NOTE:  Some of the types in this deck are used by the ASSEMBLER deck
{ PMM$INTERCEPT_PROCEDURES.  If these types are changed PMM$INTERCEPT_PROCEDURES
{ may have to be upgraded too or ANALYZE_PROGRAM_DYNAMICS will break.
{ ******************************************************************************

  CONST
    mpe_remote_module_name = '{** REMOTE_MODULE **}',
    mpe_utility_name = 'MEASURE_PROGRAM_EXECUTION      ',
    mpe_prompt_string = 'MPE',
    mpe_verification_header = 'MPE1';


  TYPE
    pmt$loader_seq_descriptor = record
      seq_ptr: ^SEQ ( * ),
      mpe_aborted: boolean,
      file_id: amt$file_identifier,
      block_name_map_exists: boolean,
      local_block_id: pmt$block_id,
      remote_block_id: pmt$block_id,
      remote_block_name_map: ^array [0 .. * ] of pmt$block_name_map_entry,
      local_block_name_map: ^array [0 .. * ] of pmt$block_name_map_entry,
      first_interblock_segment_name:  amt$local_file_name,
      last_interblock_segment:  ^SEQ ( * ),
      number_of_interblock_segments: 1 .. 0fff(16),
      accumulated_intercept_time: pmt$reference_time,
      max_segment_length: 0 .. 7fffffff(16),
      number_of_intercepted_calls: pmt$number_of_interblock_refs,
      number_of_intercepted_returns: pmt$number_of_interblock_refs,
      accum_intercept_call_time: pmt$reference_time,
      accum_intercept_return_time: pmt$reference_time,
      average_intercept_call_time: pmt$reference_time,
      average_intercept_return_time: pmt$reference_time,
      average_stats_request_time: pmt$reference_time,
      timed_call_overhead: pmt$reference_time,
      timed_return_overhead: pmt$reference_time,
      untimed_call_overhead: pmt$reference_time,
      untimed_return_overhead: pmt$reference_time,
      average_null_procedure_time: pmt$reference_time,
    recend,

    pmt$interblock_references_hdr = record
      file_id: amt$file_identifier,
      number_of_interblock_references: pmt$number_of_interblock_refs,
      next_segment_file_name: amt$local_file_name,
    recend,

    pmc$interblock_references = SEQ ( * ),

    pmt$mpe_seq_descriptor = record
      seq_ptr: ^SEQ ( * ),
      creation_date: string (8),
      number_of_runs: 0 .. 0ffff(16),
      local_execution_time_totals: ^array [0 .. * ] of
        pmt$execution_time_totals,
      remote_execution_time_totals: ^array [0 .. * ] of
        pmt$execution_time_totals,
      connectivity_matrix: ^array [0 .. * ] of 0 .. 0ffffff(16),
      intercolumn_bond_matrix: ^array [1 .. * ] of 0 .. 0ffffffff(16),
    recend,

    pmt$mpe_environment_descriptor = record
      verification_header: string (4),
      creation_date: string (8),
      number_of_runs: 0 .. 0ffff(16),
      number_of_local_blocks: pmt$block_id,
      number_of_remote_blocks: pmt$block_id,
      target_text_path_name: clt$path_name,
      saved_environment: pmt$environment_contents,
      program_description_size: 0 .. osc$max_segment_length,
      program_description: ^llt$program_description,
    recend,


    pmt$number_of_interblock_refs = 0 .. 0ffffffff(16),


    pmt$block_name_map_entry = record
      module_name: pmt$program_name,
      section_ordinal: llt$section_ordinal,
      procedure_name: pmt$program_name,
    recend,



    pmt$execution_time_totals = record
      block_total: integer,
      remote_total: integer,
      block_paging_total: pmt$paging_statistics,
      remote_paging_total: pmt$paging_statistics,
      number_of_calls: 0 .. 0ffffffff(16),
    recend,


    pmt$interblock_reference = record
      reference_type: pmt$reference,
      reference_time: pmt$reference_time,
      block_id: pmt$block_identifier,
      page_fault_stats: pmt$paging_statistics,
    recend,

    pmt$reference_time = 0 .. 7fffffffffff(16),


    pmt$reference = (pmc$call, pmc$return, pmc$pop, pmc$final_return),

    pmt$paging_statistics = record
      page_in_count: 0 .. 0ffffffff(16),
      pages_reclaimed_from_queue: 0 .. 0ffffffff(16),
      new_pages_assigned: 0 .. 0ffffffff(16),
      page_fault_count:   0 .. 0ffffffffffff(16),
    recend,

    pmt$block_statistic = record
      link: ^pmt$block_statistic,
      block_id: pmt$block_identifier,
      call_time: pmt$reference_time,
      subordinate_time: pmt$reference_time,
      paging_stats: pmt$paging_statistics,
      subordinate_paging_stats: pmt$paging_statistics,
      pop_count: integer,
    recend,


    pmt$candidate_list = record
      local_block_id: pmt$block_id,
      cluster_merit: integer,
      best_position: ^pmt$candidate_list,
      link: ^pmt$candidate_list,
    recend,


    pmt$working_set_block_reference = record
      block_number: pmt$block_id,
      reference_time: pmt$reference_time,
      link: ^pmt$working_set_block_reference,
    recend,


    pmt$block_identifier = record
      local: boolean,
      block_number: pmt$block_id,
    recend,


    pmt$loader_description = record
      apd_load: boolean,
      target_text: clt$file,
      mpe_loader_seq: amt$local_file_name,
    recend,


    pmt$block_id = 0 .. 07fffffff(16),


    pmt$number_of_block_entries = record
      remote: pmt$block_id,
      local: pmt$block_id,
    recend,


    pmt$environment_contents = set of pmt$environment_content,

    pmt$environment_content = (pmc$connectivity_matrix,
      pmc$execution_time_totals),


    pmt$procedures = (pmc$all, pmc$local, pmc$remote),

    pmt$profile_order = (pmc$module_procedure, pmc$procedure, pmc$time);

*copyc PMT$PROGRAM_NAME
*copyc AMT$LOCAL_FILE_NAME
*copyc AMT$FILE_IDENTIFIER
*copyc CLT$FILE
*copyc LLT$PROGRAM_DESCRIPTION
*copyc llt$section_address
