Patch title: Release 92 bulk changes
Abstract:
File: /admin/file.pli
Key:
    Removed line
    Added line
   
abstract
  [Files handling (listing, copying, ...)] ; eol


function file_move oldfilename newfilename -> status
  arg Str oldfilename newfilename ; arg ExtendedStatus statu
abstract
  [Files handling (listing, copying, ...)] ; eol


function file_move oldfilename newfilename -> status
  arg Str oldfilename newfilename ; arg ExtendedStatus statu
  if newfilename=oldfilename
    return success
  var Str target := (file_query newfilename extended):option
  if target<>""
    if (file_configure oldfilename "move "+string:target)=su
      return success
  status := file_copy oldfilename newfilename
  if status=success and newfilename<>oldfilename
    file_delete oldfilename



function file_tree_copy src dest flags -> status
  arg Str src dest ; arg Int flags ; arg ExtendedStatus stat
  check (flags .and. delete)=0 or (flags .and. bidirectional
  check src<>"" and (src src:len-1)="/" and dest<>"" and (de
  status := success
  var Str target := (file_query newfilename extended):option
  if target<>""
    if (file_configure oldfilename "move "+string:target)=su
      return success
  status := file_copy oldfilename newfilename
  if status=success and newfilename<>oldfilename
    file_delete oldfilename



function file_tree_copy src dest flags -> status
  arg Str src dest ; arg Int flags ; arg ExtendedStatus stat
  check (flags .and. delete)=0 or (flags .and. bidirectional
  check src<>"" and (src src:len-1)="/" and dest<>"" and (de
  status := success
  var Array:FileInfo src_files := file_list src  extended+re
  var Array:FileInfo src_files := file_list src extended+recursive+relative
  for (var Int i) 0 src_files:size-1
    var FileInfo srci := src_files i ; srci name := file_nam
    var FileInfo desti := file_query (file_name_concat dest 
    if (file_copy srci desti flags)=failure
      status := failure
  if (flags .and. (bidirectional .or. delete))<>0
    var Array:FileInfo dest_files := file_list dest extended
    for (var Int i) 0 dest_files:size-1
      var FileInfo desti := dest_files i ; desti name := fil
      var FileInfo srci := file_query (file_name_concat src 
      if srci=undefined
        if (flags .and. bidirectional)<>0
          if (file_copy desti srci flags)=failure
            status := failure
        else
          check (flags .and. delete)<>0
          if (file_delete desti:name)=failure
            status := failure
(the_function file_tree_copy Str Str Int -> ExtendedStatus) 


function file_temporary filename options -> temp
  arg Str filename options temp
  for (var Int i) 0 src_files:size-1
    var FileInfo srci := src_files i ; srci name := file_nam
    var FileInfo desti := file_query (file_name_concat dest 
    if (file_copy srci desti flags)=failure
      status := failure
  if (flags .and. (bidirectional .or. delete))<>0
    var Array:FileInfo dest_files := file_list dest extended
    for (var Int i) 0 dest_files:size-1
      var FileInfo desti := dest_files i ; desti name := fil
      var FileInfo srci := file_query (file_name_concat src 
      if srci=undefined
        if (flags .and. bidirectional)<>0
          if (file_copy desti srci flags)=failure
            status := failure
        else
          check (flags .and. delete)<>0
          if (file_delete desti:name)=failure
            status := failure
(the_function file_tree_copy Str Str Int -> ExtendedStatus) 


function file_temporary filename options -> temp
  arg Str filename options temp
  if (options option "notmp")
    return filename
  var Str temp0
  if (temp eparse (var Str base) any:(var Str opt))
    temp0 := string:(file_temporary base options)+opt
  var Str temp0
  if (temp eparse (var Str base) any:(var Str opt))
    temp0 := string:(file_temporary base options)+opt
  eif filename:len<>0 and (filename filename:len-1)="."
    temp0 := filename+"tmp"
  else
    temp0 := filename+".tmp"
  var Int counter := 0
  part checkit
    temp := temp0+(shunt counter=0 "" string:counter)
    if (file_query temp standard)=defined
      counter += 1
      restart checkit


export file_delete file_link file_clone file_copy file_move 
export file_tree_create file_tree_delete file_tree_copy file
export file_temporary file_temporary_cleanup file_os_name fi
  else
    temp0 := filename+".tmp"
  var Int counter := 0
  part checkit
    temp := temp0+(shunt counter=0 "" string:counter)
    if (file_query temp standard)=defined
      counter += 1
      restart checkit


export file_delete file_link file_clone file_copy file_move 
export file_tree_create file_tree_delete file_tree_copy file
export file_temporary file_temporary_cleanup file_os_name fi