lglob.h revision 170257
1/*
2 * Copyright (C) 1984-2007  Mark Nudelman
3 *
4 * You may distribute under the terms of either the GNU General Public
5 * License or the Less License, as specified in the README file.
6 *
7 * For more information about less, or for information on how to
8 * contact the author, see the README file.
9 */
10
11
12/*
13 * Macros to define the method of doing filename "globbing".
14 * There are three possible mechanisms:
15 *   1.	GLOB_LIST
16 *	This defines a function that returns a list of matching filenames.
17 *   2. GLOB_NAME
18 *	This defines a function that steps thru the list of matching
19 *	filenames, returning one name each time it is called.
20 *   3. GLOB_STRING
21 *	This defines a function that returns the complete list of
22 *	matching filenames as a single space-separated string.
23 */
24
25#if OS2
26
27#define	DECL_GLOB_LIST(list)		char **list;  char **pp;
28#define	GLOB_LIST(filename,list)	list = _fnexplode(filename)
29#define	GLOB_LIST_FAILED(list)		list == NULL
30#define	SCAN_GLOB_LIST(list,p)		pp = list;  *pp != NULL;  pp++
31#define	INIT_GLOB_LIST(list,p)		p = *pp
32#define	GLOB_LIST_DONE(list)		_fnexplodefree(list)
33
34#else
35#if MSDOS_COMPILER==DJGPPC
36
37#define	DECL_GLOB_LIST(list)		glob_t list;  int i;
38#define	GLOB_LIST(filename,list)	glob(filename,GLOB_NOCHECK,0,&list)
39#define	GLOB_LIST_FAILED(list)		0
40#define	SCAN_GLOB_LIST(list,p)		i = 0;  i < list.gl_pathc;  i++
41#define	INIT_GLOB_LIST(list,p)		p = list.gl_pathv[i]
42#define	GLOB_LIST_DONE(list)		globfree(&list)
43
44#else
45#if MSDOS_COMPILER==MSOFTC || MSDOS_COMPILER==BORLANDC
46
47#define	GLOB_FIRST_NAME(filename,fndp,h) h = _dos_findfirst(filename, ~_A_VOLID, fndp)
48#define	GLOB_FIRST_FAILED(handle)	((handle) != 0)
49#define	GLOB_NEXT_NAME(handle,fndp)		_dos_findnext(fndp)
50#define	GLOB_NAME_DONE(handle)
51#define	GLOB_NAME			name
52#define	DECL_GLOB_NAME(fnd,drive,dir,fname,ext,handle) \
53					struct find_t fnd;	\
54					char drive[_MAX_DRIVE];	\
55					char dir[_MAX_DIR];	\
56					char fname[_MAX_FNAME];	\
57					char ext[_MAX_EXT];	\
58					int handle;
59#else
60#if MSDOS_COMPILER==WIN32C && defined(_MSC_VER)
61
62#define	GLOB_FIRST_NAME(filename,fndp,h) h = _findfirst(filename, fndp)
63#define	GLOB_FIRST_FAILED(handle)	((handle) == -1)
64#define	GLOB_NEXT_NAME(handle,fndp)	_findnext(handle, fndp)
65#define	GLOB_NAME_DONE(handle)		_findclose(handle)
66#define	GLOB_NAME			name
67#define	DECL_GLOB_NAME(fnd,drive,dir,fname,ext,handle) \
68					struct _finddata_t fnd;	\
69					char drive[_MAX_DRIVE];	\
70					char dir[_MAX_DIR];	\
71					char fname[_MAX_FNAME];	\
72					char ext[_MAX_EXT];	\
73					long handle;
74
75#else
76#if MSDOS_COMPILER==WIN32C && !defined(_MSC_VER) /* Borland C for Windows */
77
78#define	GLOB_FIRST_NAME(filename,fndp,h) h = findfirst(filename, fndp, ~FA_LABEL)
79#define	GLOB_FIRST_FAILED(handle)	((handle) != 0)
80#define	GLOB_NEXT_NAME(handle,fndp)	findnext(fndp)
81#define	GLOB_NAME_DONE(handle)
82#define	GLOB_NAME			ff_name
83#define	DECL_GLOB_NAME(fnd,drive,dir,fname,ext,handle) \
84					struct ffblk fnd;	\
85					char drive[MAXDRIVE];	\
86					char dir[MAXDIR];	\
87					char fname[MAXFILE];	\
88					char ext[MAXEXT];	\
89					int handle;
90
91#endif
92#endif
93#endif
94#endif
95#endif
96