?? RIGHT := 110 ??
?? NEWTITLE := 'NOS/VE:  Object Code Utilities' ??
MODULE ocm$object_code_utility_helpers;



{ PURPOSE:                                 }
{   This module contains global variables  }
{   and routines needed by all object code }
{   utilities.



  VAR
    ocv$nlm_list: [XDCL] ^oct$new_library_module_list,
    ocv$open_file_list: [XDCL] oct$open_file_list,
    ocv$global_display_toggles: [XDCL] oct$display_toggles,
    ocv$olg_scratch_seq: [XDCL] ^oct$olg_scratch_seq,
    ocv$olg_working_heap: [XDCL] ^oct$olg_working_heap;

?? OLDTITLE ??
?? PUSH (LISTEXT := ON) ??
*copyc oct$display_toggles
*copyc oct$new_library_module_list
*copyc oct$olg_scratch_seq
*copyc oct$olg_working_heap
*copyc oct$open_file_list
*copyc ost$status
?? POP ??
*copyc ocp$create_transient_segment

*copyc amp$get_file_attributes

*copyc osp$set_status_abnormal
?? NEWTITLE := '  OCP$INITIALIZE_OLG_WORKING_HEAP', EJECT ??

  PROCEDURE [XDCL] ocp$initialize_olg_working_heap;


    RESET ocv$olg_working_heap^;


    ALLOCATE ocv$nlm_list IN ocv$olg_working_heap^;
    ALLOCATE ocv$nlm_list^.description IN ocv$olg_working_heap^;

    ocv$nlm_list^.name := osc$null_name;
    ocv$nlm_list^.description := NIL;
    ocv$nlm_list^.changed_info := NIL;

    ocv$nlm_list^.f_link := ocv$nlm_list;
    ocv$nlm_list^.b_link := ocv$nlm_list;

    ocv$nlm_list^.r_link := NIL;
    ocv$nlm_list^.l_link := NIL;
    ocv$nlm_list^.t_link := NIL;

  PROCEND ocp$initialize_olg_working_heap;
?? OLDTITLE ??
?? NEWTITLE := '  OCP$INITIALIZE_OC_ENVIRONMENT', EJECT ??

  PROCEDURE [XDCL] ocp$initialize_oc_environment (VAR status: ost$status);


    VAR
      segment_pointer: amt$segment_pointer;


    ocv$open_file_list.name := 'CURRENT';
    ocv$open_file_list.kind := occ$current;
    ocv$open_file_list.link := NIL;


    ocv$global_display_toggles := $oct$display_toggles [occ$display_time_date];


    ocp$create_transient_segment (amc$sequence_pointer, segment_pointer, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;
    ocv$olg_scratch_seq := segment_pointer.sequence_pointer;


    ocp$create_transient_segment (amc$heap_pointer, segment_pointer, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;
    ocv$olg_working_heap := segment_pointer.heap_pointer;

    ocp$initialize_olg_working_heap;


  PROCEND ocp$initialize_oc_environment;
?? OLDTITLE ??
?? NEWTITLE := '  OCP$GET_RING_BRACKETS', EJECT ??

  PROCEDURE [XDCL] ocp$get_ring_brackets (file_name: amt$local_file_name;
    VAR ring_brackets: amt$ring_attributes;
    VAR status: ost$status);


    VAR
      get_attributes: array [1 .. 1] of amt$get_item,
      local_file: boolean,
      existing_file: boolean,
      contains_data: boolean,
      ring: ost$valid_ring;


    get_attributes [1].key := amc$ring_attributes;

    amp$get_file_attributes (file_name, get_attributes, local_file,
          existing_file, contains_data, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;


    IF get_attributes [1].source <> amc$undefined_attribute THEN
      ring_brackets.r1 := get_attributes [1].ring_attributes.r1;
      ring_brackets.r2 := get_attributes [1].ring_attributes.r2;
      ring_brackets.r3 := get_attributes [1].ring_attributes.r3;

    ELSE
      ring := #ring (#LOC (get_attributes));
      ring_brackets.r1 := ring;
      ring_brackets.r2 := ring;
      ring_brackets.r3 := ring;

    IFEND;


  PROCEND ocp$get_ring_brackets;
?? OLDTITLE ??

MODEND ocm$object_code_utility_helpers.
