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