lglob.h revision 221715
177943Sdfr/*
277943Sdfr * Copyright (C) 1984-2011  Mark Nudelman
377943Sdfr *
477943Sdfr * You may distribute under the terms of either the GNU General Public
577943Sdfr * License or the Less License, as specified in the README file.
677943Sdfr *
777943Sdfr * For more information about less, or for information on how to
877943Sdfr * contact the author, see the README file.
977943Sdfr */
1077943Sdfr
1177943Sdfr
1277943Sdfr/*
1377943Sdfr * Macros to define the method of doing filename "globbing".
1477943Sdfr * There are three possible mechanisms:
1577943Sdfr *   1.	GLOB_LIST
1677943Sdfr *	This defines a function that returns a list of matching filenames.
1777943Sdfr *   2. GLOB_NAME
1877943Sdfr *	This defines a function that steps thru the list of matching
1977943Sdfr *	filenames, returning one name each time it is called.
2077943Sdfr *   3. GLOB_STRING
2177943Sdfr *	This defines a function that returns the complete list of
2277943Sdfr *	matching filenames as a single space-separated string.
2377943Sdfr */
2477943Sdfr
2577943Sdfr#if OS2
2677943Sdfr
2777943Sdfr#define	DECL_GLOB_LIST(list)		char **list;  char **pp;
2877943Sdfr#define	GLOB_LIST(filename,list)	list = _fnexplode(filename)
2977943Sdfr#define	GLOB_LIST_FAILED(list)		list == NULL
3077943Sdfr#define	SCAN_GLOB_LIST(list,p)		pp = list;  *pp != NULL;  pp++
3177943Sdfr#define	INIT_GLOB_LIST(list,p)		p = *pp
32154527Smarcel#define	GLOB_LIST_DONE(list)		_fnexplodefree(list)
3377943Sdfr
3477943Sdfr#else
3577943Sdfr#if MSDOS_COMPILER==DJGPPC
36154527Smarcel
3777943Sdfr#define	DECL_GLOB_LIST(list)		glob_t list;  int i;
3877943Sdfr#define	GLOB_LIST(filename,list)	glob(filename,GLOB_NOCHECK,0,&list)
3977943Sdfr#define	GLOB_LIST_FAILED(list)		0
4077943Sdfr#define	SCAN_GLOB_LIST(list,p)		i = 0;  i < list.gl_pathc;  i++
4177943Sdfr#define	INIT_GLOB_LIST(list,p)		p = list.gl_pathv[i]
4277943Sdfr#define	GLOB_LIST_DONE(list)		globfree(&list)
4377943Sdfr
4477943Sdfr#else
4577943Sdfr#if MSDOS_COMPILER==MSOFTC || MSDOS_COMPILER==BORLANDC
46154491Smarcel
47154491Smarcel#define	GLOB_FIRST_NAME(filename,fndp,h) h = _dos_findfirst(filename, ~_A_VOLID, fndp)
48154491Smarcel#define	GLOB_FIRST_FAILED(handle)	((handle) != 0)
49154491Smarcel#define	GLOB_NEXT_NAME(handle,fndp)		_dos_findnext(fndp)
50154491Smarcel#define	GLOB_NAME_DONE(handle)
51154491Smarcel#define	GLOB_NAME			name
5277943Sdfr#define	DECL_GLOB_NAME(fnd,drive,dir,fname,ext,handle) \
5377943Sdfr					struct find_t fnd;	\
5477943Sdfr					char drive[_MAX_DRIVE];	\
5577943Sdfr					char dir[_MAX_DIR];	\
5677943Sdfr					char fname[_MAX_FNAME];	\
5777943Sdfr					char ext[_MAX_EXT];	\
5877943Sdfr					int handle;
5977943Sdfr#else
6077943Sdfr#if MSDOS_COMPILER==WIN32C && defined(_MSC_VER)
6177943Sdfr
6295190Smarcel#define	GLOB_FIRST_NAME(filename,fndp,h) h = _findfirst(filename, fndp)
6377943Sdfr#define	GLOB_FIRST_FAILED(handle)	((handle) == -1)
6477943Sdfr#define	GLOB_NEXT_NAME(handle,fndp)	_findnext(handle, fndp)
6577943Sdfr#define	GLOB_NAME_DONE(handle)		_findclose(handle)
6677943Sdfr#define	GLOB_NAME			name
6777943Sdfr#define	DECL_GLOB_NAME(fnd,drive,dir,fname,ext,handle) \
6877943Sdfr					struct _finddata_t fnd;	\
6977943Sdfr					char drive[_MAX_DRIVE];	\
7077943Sdfr					char dir[_MAX_DIR];	\
7177943Sdfr					char fname[_MAX_FNAME];	\
7277943Sdfr					char ext[_MAX_EXT];	\
7377943Sdfr					long handle;
7477943Sdfr
7577943Sdfr#else
7677943Sdfr#if MSDOS_COMPILER==WIN32C && !defined(_MSC_VER) /* Borland C for Windows */
7777943Sdfr
7877943Sdfr#define	GLOB_FIRST_NAME(filename,fndp,h) h = findfirst(filename, fndp, ~FA_LABEL)
7977943Sdfr#define	GLOB_FIRST_FAILED(handle)	((handle) != 0)
8077943Sdfr#define	GLOB_NEXT_NAME(handle,fndp)	findnext(fndp)
81132437Smarcel#define	GLOB_NAME_DONE(handle)
82132437Smarcel#define	GLOB_NAME			ff_name
83132437Smarcel#define	DECL_GLOB_NAME(fnd,drive,dir,fname,ext,handle) \
8477943Sdfr					struct ffblk fnd;	\
8577943Sdfr					char drive[MAXDRIVE];	\
8677943Sdfr					char dir[MAXDIR];	\
8777943Sdfr					char fname[MAXFILE];	\
88132437Smarcel					char ext[MAXEXT];	\
89132437Smarcel					int handle;
90132437Smarcel
91132437Smarcel#endif
9277943Sdfr#endif
9377943Sdfr#endif
9495190Smarcel#endif
9595190Smarcel#endif
9695190Smarcel