source: trunk/SRC/Utilities/isafile.pro @ 230

Last change on this file since 230 was 224, checked in by pinsard, 17 years ago

improvements/corrections of some *.pro headers

  • Property svn:keywords set to Id
File size: 4.1 KB
Line 
1;------------------------------------------------------------
2;------------------------------------------------------------
3;------------------------------------------------------------
4;+
5; @file_comments
6; same as find.pro except that as long as the file is 'NOT FOUND',
7; isafile calls dialog_pickfile, to ask the user to select a file.
8;
9; @categories io
10;
11; @param FILEIN {in}{optional}
12; a proposed name. If neither filein input parameter of filename keyword are
13; defined, the ask the user to choose a file.
14;
15; @keyword FILENAME
16; a proposed filename.
17;
18; @keyword IODIRECTORY
19; a directory where we look for the file. this
20; keyword is taken into account only if the dirname
21; of filein or filename is '.'
22;
23; @keyword NEW
24; to specify that filename is a new file and that we should check only its
25; path
26;
27; @keyword ONLYPRO
28; force to look only at file ending with .pro
29;
30; @keyword ONLYNC
31; force to look only at file ending with .nc
32;
33; @keyword RECURSIVE
34; performs recursive searching of directory hierarchies.
35; In a recursive search, find looks recursively for any and all
36; subdirectories in the file hierarchy rooted at the IODIRECTORY argument.
37;
38; @keyword _EXTRA
39; used to pass your keywords
40;
41; all find, file_search and dialog_pickfile keywords (like title) can be used
42;
43; @returns
44; the filename with its path
45;
46; @examples
47;
48; IDL> print, isafile('/Users/sebastie/SAXO_RD/Commons/cm_4mesh.pro')
49;  /Users/sebastie/SAXO_RD/Commons/cm_4mesh.pro
50; IDL> print, isafile('cm_4mesh.pro', iodir = '/Users/sebastie/SAXO_RD/Commons')
51;  /Users/sebastie/SAXO_RD/Commons/cm_4mesh.pro
52; IDL> print, isafile('cm_4mesh.pro', iodir = !path)
53;  /Users/sebastie/SAXO_RD/Commons/cm_4mesh.pro
54; IDL> print, isafile('cm_4mesh.pro', iodir = '/Users/sebastie/SAXO_RD', /recursive)
55;  /Users/sebastie/SAXO_RD/Commons/cm_4mesh.pro
56; IDL> print, isafile('cm_4mesh.pro', iodir = getenv('HOME'), /recursive)
57;  /Users/sebastie/SAXO_RD/Commons/cm_4mesh.pro
58; IDL> print, isafile('fake_file.pro')
59;
60; @history
61; Sebastien Masson (smasson\@lodyc.jussieu.fr)
62;                      11/2/2000
63; June 2005: Sebastien Masson: cleaning, use for file_* functions
64;
65; @version
66; $Id$
67;-
68;------------------------------------------------------------
69;------------------------------------------------------------
70;------------------------------------------------------------
71FUNCTION isafile, filein, FILENAME = filename, IODIRECTORY = iodirectory $
72                  , NEW = new, RECURSIVE = RECURSIVE, ONLYPRO = onlypro $
73                  , ONLYNC = onlync, _extra = ex
74;------------------------------------------------------------
75;
76  compile_opt idl2, strictarrsubs
77;
78  CASE 1 OF
79    (size(filein, /type))[0] EQ 7:fileout = filein
80    keyword_set(filename):fileout = filename[0]
81    ELSE:fileout = 'file that is not existing'
82  ENDCASE
83  if size(fileout, /type) NE 7 THEN return, -1
84;
85  CASE 1 OF
86    keyword_set(onlypro): filter = '*.pro'
87    keyword_set(onlync): filter = '*.nc'
88    else: filter = '*'
89  ENDCASE
90;
91  basename = file_basename(fileout)
92  dirname = file_dirname(fileout)
93; should we redefine dirname?
94  if keyword_set(iodirectory) AND dirname EQ '.' then dirname = iodirectory
95;
96  if keyword_set(new) then return, dirname + path_sep() + basename
97;
98  fileout = find(basename, iodirectory = dirname $
99                 , recursive = recursive, /unique, /firstfound, ONLYPRO = onlypro $
100                 , ONLYNC = onlync, _extra = ex)
101  WHILE fileout[0] EQ 'NOT FOUND' DO BEGIN
102    fileout = dialog_pickfile(path = dirname[0], filter = filter, _extra = ex)
103    if fileout EQ '' THEN RETURN, report('check/find file canceled')
104; check again everything...
105    basename = file_basename(fileout)
106    dirname = file_dirname(fileout)
107; check if the name of the dirname is ok
108    dirname = isadirectory(dirname, title = 'choose a directory for the file ' $
109                           + basename)
110; if we cancel the check
111    IF size(dirname, /type) NE 7 THEN return, report('check/find file canceled')
112    fileout = find(basename, iodirectory = dirname $
113                   , recursive = recursive, /unique, /firstfound, ONLYPRO = onlypro $
114                   , ONLYNC = onlync, _extra = ex)
115  ENDWHILE
116;
117  RETURN, fileout
118END
Note: See TracBrowser for help on using the repository browser.