
  PROCEDURE [INLINE] gfp$get_segment_sfid
    (    pva: ^cell;
     VAR sfid: gft$system_file_identifier;
     VAR status: ost$status);

?? PUSH (LISTEXT := ON) ??

    VAR
      sdte_p: ^mmt$segment_descriptor,
      sdtxe_p: ^mmt$segment_descriptor_extended,
      segment_number: ost$segment,
      xcb_p: ^ost$execution_control_block;

    status.normal := TRUE;
    segment_number := #SEGMENT (pva);
    xcb_p := pmf$executing_task_xcb ();

    IF segment_number > xcb_p^.xp.segment_table_length THEN
      IF segment_number > 4095 THEN
        osp$set_status_condition (mme$segment_number_too_big, status);
      ELSE
        osp$set_status_condition (mme$segment_number_not_in_use, status);
      IFEND;
      RETURN; {----->
    IFEND;

    sdte_p := mmp$get_sdt_entry_p (xcb_p, segment_number);
    IF sdte_p^.ste.vl = osc$vl_invalid_entry THEN
      osp$set_status_condition (mme$segment_number_not_in_use, status);
      RETURN; {----->
    IFEND;

    sdtxe_p := mmp$get_sdtx_entry_p (xcb_p, segment_number);
    sfid := sdtxe_p^.sfid;

  PROCEND gfp$get_segment_sfid;

*copyc gft$system_file_identifier
*copyc mme$condition_codes
*copyc mmp$get_sdt_entry_p
*copyc mmp$get_sdtx_entry_p
*copyc osd$virtual_address
*copyc osp$set_status_condition
*copyc ost$execution_control_block
*copyc ost$status
*copyc pmf$executing_task_xcb
?? POP ??
