/*
 * tkFileFilter.h --
 *
 *	Declarations for the file filter processing routines needed by the
 *	file selection dialogs.
 *
 * Copyright © 1996 Sun Microsystems, Inc.
 *
 * See the file "license.terms" for information on usage and redistribution of
 * this file, and for a DISCLAIMER OF ALL WARRANTIES.
 */

#ifndef _TK_FILE_FILTER
#define _TK_FILE_FILTER

#ifdef __cplusplus
extern "C" {
#endif

#define OSType long

typedef struct GlobPattern {
    struct GlobPattern *next;	/* Chains to the next glob pattern in a glob
				 * pattern list */
    char *pattern;		/* String value of the pattern, such as
				 * "*.txt" or "*.*" */
} GlobPattern;

typedef struct MacFileType {
    struct MacFileType *next;	/* Chains to the next mac file type in a mac
				 * file type list */
    OSType type;		/* Mac file type, such as 'TEXT' or 'GIFF' */
} MacFileType;

typedef struct FileFilterClause {
    struct FileFilterClause *next;
				/* Chains to the next clause in a clause
				 * list */
    GlobPattern *patterns;	/* Head of glob pattern type list */
    GlobPattern *patternsTail;	/* Tail of glob pattern type list */
    MacFileType *macTypes;	/* Head of mac file type list */
    MacFileType *macTypesTail;	/* Tail of mac file type list */
} FileFilterClause;

typedef struct FileFilter {
    struct FileFilter *next;	/* Chains to the next filter in a filter
				 * list */
    char *name;			/* Name of the file filter, such as "Text
				 * Documents" */
    FileFilterClause *clauses;	/* Head of the clauses list */
    FileFilterClause *clausesTail;
				/* Tail of the clauses list */
} FileFilter;

/*
 *----------------------------------------------------------------------
 *
 * FileFilterList --
 *
 *	The routine TkGetFileFilters() translates the string value of the
 *	-filefilters option into a FileFilterList structure, which consists of
 *	a list of file filters.
 *
 *	Each file filter consists of one or more clauses. Each clause has one
 *	or more glob patterns and/or one or more Mac file types
 *
 *----------------------------------------------------------------------
 */

typedef struct FileFilterList {
    FileFilter *filters;	/* Head of the filter list */
    FileFilter *filtersTail;	/* Tail of the filter list */
    int numFilters;		/* number of filters in the list */
} FileFilterList;

MODULE_SCOPE void	TkFreeFileFilters(FileFilterList *flistPtr);
MODULE_SCOPE void	TkInitFileFilters(FileFilterList *flistPtr);
MODULE_SCOPE int	TkGetFileFilters(Tcl_Interp *interp,
			    FileFilterList *flistPtr, Tcl_Obj *valuePtr,
			    int isWindows);

#ifdef __cplusplus
}
#endif

#endif	/* _TK_FILE_FILTER */
