1 /* File name wild card expansion for VMS.
2 This file is part of the etags program.
3 Copyright (C) 1987 Free Software Foundation, Inc.
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2, or (at your option)
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
22 /* This is a BUG! ANY arbitrary limit is a BUG!
23 Won't someone please fix this? */
24 #define MAX_FILE_SPEC_LEN 255
27 char body
[MAX_FILE_SPEC_LEN
+ 1];
34 /* gfnames - return in successive calls the
35 name of each file specified by all the remaining args in the command-line
36 expanding wild cards and
37 stepping over arguments when they have been processed completely
40 gfnames(pac
, pav
, p_error
)
45 static vspec filename
= {MAX_FILE_SPEC_LEN
, "\0"};
54 else switch(fn_exp(&filename
, **pav
))
58 return(filename
.body
);
66 return(filename
.body
);
72 /* fn_exp - expand specification of list of file names
73 returning in each successive call the next filename matching the input
74 spec. The function expects that each in_spec passed
75 to it will be processed to completion; in particular, up to and
76 including the call following that in which the last matching name
77 is returned, the function ignores the value of in_spec, and will
78 only start processing a new spec with the following call.
79 If an error occurs, on return out_spec contains the value
80 of in_spec when the error occurred.
82 With each successive filename returned in out_spec, the
83 function's return value is one. When there are no more matching
84 names the function returns zero. If on the first call no file
85 matches in_spec, or there is any other error, -1 is returned.
90 #define OUTSIZE MAX_FILE_SPEC_LEN
96 static long context
= 0;
97 static struct dsc$descriptor_s o
;
98 static struct dsc$descriptor_s i
;
99 static tbool pass1
= YES
;
106 o
.dsc$a_pointer
= (char *) out
;
107 o
.dsc$w_length
= (short)OUTSIZE
;
108 i
.dsc$a_pointer
= in
;
109 i
.dsc$w_length
= (short)strlen(in
);
110 i
.dsc$b_dtype
= DSC$K_DTYPE_T
;
111 i
.dsc$b_class
= DSC$K_CLASS_S
;
112 o
.dsc$b_dtype
= DSC$K_DTYPE_VT
;
113 o
.dsc$b_class
= DSC$K_CLASS_VS
;
115 if ( (status
= lib$
find_file(&i
, &o
, &context
, 0, 0)) == RMS$_NORMAL
)
117 out
->body
[out
->curlen
] = EOS
;
120 else if (status
== RMS$_NMF
)
124 strcpy(out
->body
, in
);
127 lib$
find_file_end(&context
);
132 #ifndef OLD /* Newer versions of VMS do provide `system'. */
136 fprintf(stderr
, "system() function not implemented under VMS\n");
140 #define VERSION_DELIM ';'
141 char *massage_name(s
)
147 if (*s
== VERSION_DELIM
)