1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
include <ctype.h>
include <finfo.h>
# ISDIRECTORY -- Test whether the named file is a directory. Check first to
# see if it is a subdirectory of the current directory; otherwise look in
# the environment to see if it is a logical directory. If VFN is a directory,
# return the OS pathname of the directory in pathname, and the number of
# chars in the pathname as the function value. Otherwise return 0.
int procedure isdirectory (vfn, pathname, maxch)
char vfn[ARB] # name to be tested
char pathname[ARB] # receives path of directory
int maxch # max chars out
bool isdir
pointer sp, fname, op
int ip, fd, nchars, ch
long file_info[LEN_FINFO]
int finfo(), diropen(), gstrcpy(), strlen()
begin
call smark (sp)
call salloc (fname, SZ_PATHNAME, TY_CHAR)
# Copy the VFN string, minus any whitespace on either end.
op = fname
for (ip=1; vfn[ip] != EOS; ip=ip+1) {
ch = vfn[ip]
if (!IS_WHITE (ch)) {
Memc[op] = ch
op = op + 1
}
}
Memc[op] = EOS
isdir = false
if (finfo (Memc[fname], file_info) != ERR) {
isdir = (FI_TYPE(file_info) == FI_DIRECTORY)
if (isdir) {
call fdirname (Memc[fname], pathname, maxch)
nchars = strlen (pathname)
}
} else {
# If we get here, either VFN is a logical directory (with the
# $ omitted), or it is the name of a new file.
Memc[op] = '$'
Memc[op+1] = EOS
ifnoerr (fd = diropen (Memc[fname], 0)) {
call close (fd)
isdir = true
}
nchars = gstrcpy (Memc[fname], pathname, maxch)
}
call sfree (sp)
if (isdir)
return (nchars)
else {
pathname[1] = EOS
return (0)
}
end
|