/*
 * $Id$
 *
 * Copyright © 2003 Keith Packard
 *
 * Permission to use, copy, modify, distribute, and sell this software and its
 * documentation for any purpose is hereby granted without fee, provided that
 * the above copyright notice appear in all copies and that both that
 * copyright notice and this permission notice appear in supporting
 * documentation, and that the name of Keith Packard not be used in
 * advertising or publicity pertaining to distribution of the software without
 * specific, written prior permission.  Keith Packard makes no
 * representations about the suitability of this software for any purpose.  It
 * is provided "as is" without express or implied warranty.
 *
 * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
 * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 * PERFORMANCE OF THIS SOFTWARE.
 */

@RET@		FcBool 	
@FUNC@		FcFileScan 
@TYPE1@		FcFontSet *			@ARG1@		set	
@TYPE2@		FcStrSet *			@ARG2@		dirs	
@TYPE3@		FcFileCache *			@ARG3@		cache	
@TYPE4@		FcBlanks *			@ARG4@		blanks	
@TYPE5@		const char *			@ARG5@		file	
@TYPE6@		FcBool% 				@ARG6@		force	
@PURPOSE@	scan a font file
@DESC@
Scans a single file and adds all fonts found to <parameter>set</parameter>.
If <parameter>force</parameter> is FcTrue, then the file is scanned even if
associated information is found in <parameter>cache</parameter>.  If
<parameter>file</parameter> is a directory, it is added to
<parameter>dirs</parameter>.
@@

@RET@		FcBool 	
@FUNC@		FcDirScan 
@TYPE1@		FcFontSet *			@ARG1@		set	
@TYPE2@		FcStrSet *			@ARG2@		dirs	
@TYPE3@		FcFileCache *			@ARG3@		cache	
@TYPE4@		FcBlanks *			@ARG4@		blanks	
@TYPE5@		const char *			@ARG5@		dir	
@TYPE6@		FcBool% 				@ARG6@		force	
@PURPOSE@	scan a font directory
@DESC@
Scans an entire directory and adds all fonts found to
<parameter>set</parameter>.  If <parameter>force</parameter> is FcTrue, then
the directory and all files within it are scanned even if information is
present in the per-directory cache file or <parameter>cache</parameter>.  Any
subdirectories found are added to <parameter>dirs</parameter>.
@@

@RET@		FcBool 	
@FUNC@		FcDirSave 
@TYPE1@		FcFontSet *			@ARG1@		set	
@TYPE2@		FcStrSet *			@ARG2@		dirs	
@TYPE3@		const char *			@ARG3@		dir	
@PURPOSE@	save a directory cache
@DESC@
Creates the per-directory cache file for <parameter>dir</parameter> and
populates it with the fonts in <parameter>set</parameter> and subdirectories
in <parameter>dirs</parameter>.
@@

@RET@		FcBool 	
@FUNC@		FcDirCacheValid 
@TYPE1@		const FcChar8 *			@ARG1@		cache_file	
@PURPOSE@	check directory cache timestamp
@DESC@
Returns FcTrue if <parameter>cache_file</parameter> is no older than the
directory containing it, else FcFalse.
@@
