

PROC qcm$locate_file, locate_file,  locf (
  file_name, fn       : name = $required
  local_file_name, lfn: name
  search_catalogs, sc : list of file
  status)

  create_variable check_status kind=status
  create_variable found kind=boolean value=false
  create_variable lfn kind=string

  IF NOT $specified(local_file_name) THEN
    lfn = $string($value(file_name))
  ELSE
    lfn = $string($value(local_file_name))
  IFEND

  IF $file($fname('$local.'//lfn), opened) THEN
    check_status.normal = true
    EXIT_PROC WITH check_status
  IFEND

  IF $specified(search_catalogs) THEN
    FOR i = 1 TO $set_count(search_catalogs) DO
      IF $path($value(sc i), count) = 2 AND $path($value(sc i), catalog) = ':$LOCAL' THEN
        "This is not a valid path name - go on to next one."
      ELSE
        attach_file $fname($string($value(sc i))//'.'//$string($value(file_name))) lfn=$name(lfn) ..
              am=(read execute) sm=(read execute) status=check_status
        IF check_status.normal THEN
          found = true
        IFEND
      IFEND
    FOREND
  IFEND

  IF found THEN
    check_status.normal = true
  IFEND

  EXIT_PROC WITH check_status

PROCEND qcm$locate_file
