?? RIGHT := 110 ??
MODULE ram$get_file_names;
*copyc osd$default_pragmats
?? PUSH (LISTEXT := ON) ??
*copyc rat$file_values
*copyc rat$open_file_list
*copyc rae$error_messages
*copyc osp$set_status_abnormal
*copyc pfp$attach
?? POP ??

*copyc rah$get_file_names

  PROCEDURE [XDCL] rap$get_file_names (element: ost$name;
        old_file: rat$file_values;
        new_file: rat$file_values;
    VAR status: ost$status);

    VAR
      cycle_sel: pft$cycle_selector,
      found: boolean,
      j: integer,
      password: pft$password,
      rav$open_file_list: [STATIC, XREF] rat$open_file_list,
      share: pft$share_selections,
      usage: pft$usage_selections;


    status.normal := TRUE;

    cycle_sel.cycle_option := pfc$highest_cycle;
    password := osc$null_name;
    usage := $pft$usage_selections [pfc$read];
    share := $pft$share_selections [pfc$read, pfc$execute];

    pfp$attach (old_file.lfn, old_file.path^, cycle_sel, password, usage, share, pfc$no_wait, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;

    found := FALSE;
    j := 1;
    WHILE (j <= UPPERBOUND (rav$open_file_list)) AND NOT found DO
      IF rav$open_file_list [j].name = old_file.lfn THEN
        rav$open_file_list [j].attached := TRUE;
        found := TRUE;
      IFEND;
      j := j + 1;
    WHILEND;

    IF NOT found THEN
      j := 1;
      WHILE (j <= UPPERBOUND (rav$open_file_list)) AND NOT found DO
        IF rav$open_file_list [j].name = osc$null_name THEN
          rav$open_file_list [j].name := old_file.lfn;
          rav$open_file_list [j].attached := TRUE;
          found := TRUE;
        IFEND;
        j := j + 1;
      WHILEND;
    IFEND;

    IF NOT found THEN
      osp$set_status_abnormal ('RA', rae$open_file_list_full, '', status);
      RETURN;
    IFEND;


    pfp$attach (new_file.lfn, new_file.path^, cycle_sel, password, usage, share, pfc$no_wait, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;

    found := FALSE;
    j := 1;
    WHILE (j <= UPPERBOUND (rav$open_file_list)) AND NOT found DO
      IF rav$open_file_list [j].name = new_file.lfn THEN
        rav$open_file_list [j].attached := TRUE;
        found := TRUE;
      IFEND;
      j := j + 1;
    WHILEND;

    IF NOT found THEN
      j := 1;
      WHILE (j <= UPPERBOUND (rav$open_file_list)) AND NOT found DO
        IF rav$open_file_list [j].name = osc$null_name THEN
          rav$open_file_list [j].name := new_file.lfn;
          rav$open_file_list [j].attached := TRUE;
          found := TRUE;
        IFEND;
        j := j + 1;
      WHILEND;
    IFEND;

    IF NOT found THEN
      osp$set_status_abnormal ('RA', rae$open_file_list_full, '', status);
      RETURN;
    IFEND;

  PROCEND rap$get_file_names;
MODEND ram$get_file_names;
