Commit 24330d27 authored by Keith Packard's avatar Keith Packard

Initial revision

parents
Keith Packard <keithp@keithp.com>
$XFree86: $
Copyright © 2001 Keith Packard, member of The XFree86 Project, Inc.
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.
The configuration files (fonts.conf, fonts.dtd) go in a new directory
/etc/fonts, the install step doesn't current create this directory or copy
the config files.
#define IHaveSubdirs
#define PassCDebugFlags
LINTSUBDIRS=src fc-cache fc-list
SUBDIRS=fontconfig $(LINTSUBDIRS)
#ifndef FontconfigDir
#define FontconfigDir /etc/fonts
#endif
FONTCONFIGDIR=FontconfigDir
MakeSubdirs($(SUBDIRS))
DependSubdirs($(SUBDIRS))
MakeLintLibSubdirs($(LINTSUBDIRS))
MakeLintSubdirs($(LINTSUBDIRS),install.ln,install.ln)
InstallNonExecFileNoClobber(fonts.conf,$(FONTCONFIGDIR))
InstallNonExecFileNoClobber(fonts.dtd,$(FONTCONFIGDIR))
all:: fonts.conf
fonts.conf: fonts.conf.in
sh ./setfontdirs
Fontconfig
Font configuration and customization library
#undef HAVE_FREETYPE
#undef FC_FALLBACK_FONTS
AC_INIT(fontconfig/fontconfig.h)
AC_PREREQ(2.13)
FC_MAJOR=1
FC_MINOR=0
FC_SUB=1
FC_PRE=
FC_IFACE_AGE=0
FC_BIN_AGE=0
AC_SUBST(FC_MAJOR)
AC_SUBST(FC_MINOR)
AC_SUBST(FC_SUB)
AC_SUBST(FC_IFACE_AGE)
AC_SUBST(FC_BIN_AGE)
LT_RELEASE=$FC_MAJOR.$FC_MINOR
LT_CURRENT=`expr $FC_SUB - $FC_IFACE_AGE`
LT_REVISION=$FC_IFACE_AGE
LT_AGE=`expr $FC_BIN_AGE - $FC_IFACE_AGE`
AC_SUBST(LT_RELEASE)
AC_SUBST(LT_CURRENT)
AC_SUBST(LT_REVISION)
AC_SUBST(LT_AGE)
AM_INIT_AUTOMAKE("fontconfig", $FC_MAJOR.$FC_MINOR.$FC_SUB$FC_PRE)
AC_CANONICAL_HOST
AM_CONFIG_HEADER(config.h)
AC_ARG_WITH(freetype_includes, [ --with-freetype-includes=DIR Use FreeType includes in DIR], freetype_includes=$withval, freetype_includes=yes)
AC_ARG_WITH(freetype_lib, [ --with-freetype-lib=DIR Use FreeType library in DIR], freetype_lib=$withval, freetype_lib=yes)
AC_ARG_WITH(freetype_config, [ --with-freeetype-config=PROG Use FreeType configuration program PROG], freetype_config=$withval, freetype_config=yes)
AC_ARG_WITH(xml2_includes, [ --with-xml2-includes=DIR Use xml2 includes in DIR], xml2_includes=$withval, xml2_includes=yes)
AC_ARG_WITH(xml2_lib, [ --with-xml2-lib=DIR Use xml2 library in DIR], xml2_lib=$withval, xml2_lib=yes)
AC_ARG_WITH(xml2_config, [ --with-freeetype-config=PROG Use FreeType configuration program PROG], xml2_config=$withval, xml2_config=yes)
AC_ARG_WITH(fallback_fonts, [ --with-fallback-fonts=DIR Use fonts from DIR when config is busted], fallback_fonts="$withval", fallback_fonts=yes)
AC_ISC_POSIX
AC_PROG_CC
AC_STDC_HEADERS
AC_PROG_MAKE_SET
AC_PROG_INSTALL
AC_PROG_LN_S
dnl
dnl Libtool
dnl
AM_DISABLE_STATIC
AM_PROG_LIBTOOL
AC_SUBST(LIBTOOL_DEPS)
if libtool --features | grep "enable static" >/dev/null; then
STATIC="-static"
else
STATIC=
fi
AC_SUBST(STATIC)
AC_SUBST(DEBUG_CFLAGS)
AC_SUBST(GLOBAL_CFLAGS)
AC_CHECK_FUNCS(getopt_long getopt)
case "$freetype_config" in
no)
;;
yes)
AC_CHECK_PROG(ft_config, freetype-config, freetype-config, no)
;;
*)
ft_config="$freetype_config"
;;
esac
case "$freetype_includes" in
no)
freetype_includes=""
;;
yes)
case "$ft_config" in
no)
freetype_includes=""
;;
*)
freetype_includes="`$ft_config --cflags`"
;;
esac
;;
*)
freetype_includes="-I$freetype_includes"
;;
esac
case "$freetype_lib" in
no)
freetype_lib=""
;;
yes)
case "$ft_config" in
no)
freetype_lib=""
;;
*)
freetype_lib="`$ft_config --libs`"
;;
esac
;;
*)
freetype_lib="-L$freetype_lib -lfreetype"
;;
esac
case "$fallback_fonts" in
yes)
AC_DEFINE_UNQUOTED(FC_FALLBACK_FONTS, "/usr/X11R6/lib/X11/fonts/Type1")
;;
*)
AC_DEFINE_UNQUOTED(FC_FALLBACK_FONTS, "$fallback_fonts")
;;
esac
saved_LIBS="$LIBS"
LIBS="$LIBS $freetype_lib"
saved_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $freetype_includes"
AC_CHECK_HEADERS(ft2build.h)
case "$ac_cv_header_ft2build_h" in
no)
CPPFLAGS="$saved_CPPFLAGS"
LIBS="$saved_LIBS"
;;
yes)
AC_CHECK_FUNCS(FT_Init_FreeType)
case "$ac_cv_func_FT_Init_FreeType" in
no)
CPPFLAGS="$saved_CPPFLAGS"
LIBS="$saved_LIBS"
;;
yes)
AC_DEFINE(HAVE_FREETYPE)
;;
esac
;;
esac
case "$xml2_config" in
no)
;;
yes)
AC_CHECK_PROG(xml2_config_prog, xml2-config, xml2-config, no)
;;
*)
;;
esac
case "$xml2_includes" in
no)
xml2_includes=""
;;
yes)
case "$xml2_config_prog" in
no)
xml2_includes=""
;;
*)
xml2_includes="`$xml2_config_prog --cflags`"
;;
esac
;;
*)
xml2_includes="-I$xml2_includes"
;;
esac
case "$xml2_lib" in
no)
xml2_lib=""
;;
yes)
case "$xml2_config_prog" in
no)
xml2_lib=""
;;
*)
xml2_lib="`$xml2_config_prog --libs`"
;;
esac
;;
*)
xml2_lib="-L$xml2_lib -lxml2"
;;
esac
saved_LIBS="$LIBS"
LIBS="$LIBS $xml2_lib"
saved_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $xml2_includes"
AC_CHECK_HEADERS(xmlversion.h)
AC_OUTPUT(Makefile src/Makefile fontconfig/Makefile fc-cache/Makefile fc-list/Makefile)
#!/bin/sh
aclocal
autoheader
automake -a
autoconf
\documentclass[10pt]{article}
\usepackage{latexsym}
\usepackage{epsfig}
\usepackage{times}
\begin{document}
\date{}
\title{The Fontconfig Library:\\
Architecture and Users Guide}
\author{Keith Packard\\
{\em XFree86 Core Team}\\
keithp@keithp.com}
\maketitle
\thispagestyle{empty}
\abstract
The Fontconfig library provides for central administration and configuration
of fonts in a POSIX system. All font consumers can share a common database
of fonts and use common matching rules for font names. The set of available
fonts can be configured for each user and a set of configurable matching
rules allow for customizing the selection of fonts and configuring various
parameters related to rasterizing of those fonts for display in a variety of
media. The Fontconfig library is designed to co-exist peacefully with
existing font configuration and rasterization mechanisms; while it uses the
FreeType library to discover characteristics of available fonts, there
is no requirement to use FreeType for rasterization.
\section {Introduction}
\section {Configuration Files}
\section {Application Interface}
\subsection {Datatypes}
\subsection {Font Set Interface}
\subsection {Font Patterns}
\subsection {Listing Available Fonts}
\subsection {Using Font Names}
\subsection {Manipulating Matrices}
\subsection {UTF-8 Helper Functions}
\section {Font Sub-System Interface}
\subsection {Extending Font Names}
\subsection {Executing Configuration Rules}
\end{document}
#include "../../libxml2/config.h"
#if HAVE_ZLIB_H
ZLIB=-lz
#endif
INCLUDES=-I../../freetype2 -I/usr/include/libxml2 -I..
FREETYPE2REQLIB = ../../freetype2/libfreetype.a
XML2REQLIB=../../libxml2/.libs/libxml2.a $(ZLIB) -lm
LOCAL_LIBRARIES=-L../src -lfontconfig $(FREETYPE2REQLIB) $(XML2REQLIB)
SRCS=fc-cache.c
OBJS=fc-cache.o
ComplexProgramTarget(fc-cache)
LinkBuildBinary(ProgramTargetName(fc-cache))
install::
FC_DEBUG=128 FONTCONFIG_PATH=.. ./fc-cache -v
/*
* $XFree86: $
*
* Copyright 2002 Keith Packard, member of The XFree86 Project, Inc.
*
* 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.
*/
#include <fontconfig/fontconfig.h>
#include <stdio.h>
#include <unistd.h>
#ifdef HAVE_CONFIG_H
#include <config.h>
#else
#define HAVE_GETOPT 1
#endif
#if HAVE_GETOPT_LONG
#define _GNU_SOURCE
#include <getopt.h>
const struct option longopts[] = {
{"version", 0, 0, 'V'},
{"verbose", 0, 0, 'v'},
{"help", 0, 0, '?'},
{NULL,0,0,0},
};
#else
#if HAVE_GETOPT
extern char *optarg;
extern int optind, opterr, optopt;
#endif
#endif
void usage (char *program)
{
fprintf (stderr, "usage: %s [-vV?] [--verbose] [--version] [--help] [dirs]\n",
program);
fprintf (stderr, "Build font information caches in [dirs]\n"
"(all directories in font configuration by default).\n");
fprintf (stderr, "\n");
fprintf (stderr, " -v, --verbose display status information while busy\n");
fprintf (stderr, " -V, --version display font config version and exit\n");
fprintf (stderr, " -?, --help display this help and exit\n");
exit (1);
}
int
main (int argc, char **argv)
{
int ret = 0;
FcFontSet *set;
char **dirs;
int verbose = 0;
int i;
#if HAVE_GETOPT_LONG || HAVE_GETOPT
int c;
#if HAVE_GETOPT_LONG
while ((c = getopt_long (argc, argv, "Vv?", longopts, NULL)) != -1)
#else
while ((c = getopt (argc, argv, "Vv?")) != -1)
#endif
{
switch (c) {
case 'V':
fprintf (stderr, "fontconfig version %d.%d.%d\n",
FC_MAJOR, FC_MINOR, FC_REVISION);
exit (0);
case 'v':
verbose = 1;
break;
default:
usage (argv[0]);
}
}
i = optind;
#else
i = 1;
#endif
if (!FcInitConfig ())
{
fprintf (stderr, "Can't init font config library\n");
return 1;
}
if (argv[i])
dirs = argv+i;
else
dirs = FcConfigGetDirs (0);
/*
* Now scan all of the directories into separate databases
* and write out the results
*/
while (dirs && *dirs)
{
if (verbose)
printf ("%s: Scanning directory \"%s\"\n", argv[0], *dirs);
set = FcFontSetCreate ();
if (!set)
{
fprintf (stderr, "Out of memory in \"%s\"\n", *dirs);
ret++;
}
else
{
if (!FcDirScan (set, 0, FcConfigGetBlanks (0), *dirs, FcTrue))
{
fprintf (stderr, "Can't scan directory \"%s\"\n", *dirs);
ret++;
}
else
{
if (verbose)
printf ("%s: Saving %d font names for \"%s\"\n",
argv[0], set->nfont, *dirs);
if (!FcDirSave (set, *dirs))
{
fprintf (stderr, "Can't save cache in \"%s\"\n", *dirs);
ret++;
}
}
FcFontSetDestroy (set);
}
++dirs;
}
if (verbose)
printf ("%s: %s\n", argv[0], ret ? "failed" : "succeeded");
return ret;
}
.\"
.\" Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc.
.\"
.\" 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.
.\"
.\"
.\" $XFree86: xc/programs/fc-cache/fc-cache.man,v 1.3 2001/02/09 03:47:56 tsi Exp $
.\"
.TH FC-CACHE 1 __vendorversion__
.SH NAME
fc-cache, fonts.cache \- create an index of FreeType font files in a directory
.SH SYNOPSIS
.B "fc-cache"
.RI [ directory-name
\|.\|.\|. ]
.SH DESCRIPTION
If directory arguments are not given,
.I fc-cache
uses each directory in the current font configuration. Each directory is
scanned for font files readable by FreeType. A cache is created which
contains properties of each font and the associated filename. This cache is
used to speed application startup when using the fontconfig library.
.SH FILES
.TP 15
.B fonts.cache
Maps file names to font properties. Read by the fontconfig library at
application startup to locate appropriate fonts.
.SH "SEE ALSO"
fontconfig(3)
#include "../../libxml2/config.h"
#if HAVE_ZLIB_H
ZLIB=-lz
#endif
INCLUDES=-I../../freetype2 -I/usr/include/libxml2 -I..
FREETYPE2REQLIB = ../../freetype2/libfreetype.a
XML2REQLIB=../../libxml2/.libs/libxml2.a $(ZLIB) -lm
LOCAL_LIBRARIES=-L../src -lfontconfig $(FREETYPE2REQLIB) $(XML2REQLIB)
DEPLIBS=../src/libfontconfig.a
SRCS=fc-list.c
OBJS=fc-list.o
ComplexProgramTarget(fc-list)
LinkBuildBinary(ProgramTargetName(fc-list))
/*
* $XFree86: $
*
* Copyright 2002 Keith Packard, member of The XFree86 Project, Inc.
*
* 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.
*/
#include <fontconfig/fontconfig.h>
#include <stdio.h>
#include <unistd.h>
#ifdef HAVE_CONFIG_H
#include <config.h>
#else
#define HAVE_GETOPT 1
#endif
#if HAVE_GETOPT_LONG
#define _GNU_SOURCE
#include <getopt.h>
const struct option longopts[] = {
{"version", 0, 0, 'V'},
{"verbose", 0, 0, 'v'},
{"help", 0, 0, '?'},
{NULL,0,0,0},
};
#else
#if HAVE_GETOPT
extern char *optarg;
extern int optind, opterr, optopt;
#endif
#endif
void usage (char *program)
{
fprintf (stderr, "usage: %s [-vV?] [--verbose] [--version] [--help] [dirs]\n",
program);
fprintf (stderr, "Build font information caches in [dirs]\n"
"(all directories in font configuration by default).\n");
fprintf (stderr, "\n");
fprintf (stderr, " -v, --verbose display status information while busy\n");
fprintf (stderr, " -V, --version display font config version and exit\n");
fprintf (stderr, " -?, --help display this help and exit\n");
exit (1);
}
int
main (int argc, char **argv)
{
int ret = 0;
FcFontSet *set;
int verbose = 0;
int i;
FcObjectSet *os = FcObjectSetBuild (FC_FAMILY, FC_LANG, 0);
FcFontSet *fs;
FcPattern *pat;
#if HAVE_GETOPT_LONG || HAVE_GETOPT
int c;
#if HAVE_GETOPT_LONG
while ((c = getopt_long (argc, argv, "Vv?", longopts, NULL)) != -1)
#else
while ((c = getopt (argc, argv, "Vv?")) != -1)
#endif
{
switch (c) {
case 'V':
fprintf (stderr, "fontconfig version %d.%d.%d\n",
FC_MAJOR, FC_MINOR, FC_REVISION);
exit (0);
case 'v':
verbose = 1;
break;
default:
usage (argv[0]);
}
}
i = optind;
#else
i = 1;
#endif
if (!FcInit ())
{
fprintf (stderr, "Can't init font config library\n");
return 1;
}
if (argv[i])
pat = FcNameParse (argv[i]);
else
pat = FcPatternCreate ();
fs = FcFontList (0, pat, os);
if (pat)
FcPatternDestroy (pat);
if (fs)
{
int j;
for (j = 0; j < fs->nfont; j++)
{
FcChar8 *font;
font = FcNameUnparse (fs->fonts[j]);
printf ("%s\n", font);
free (font);
}
FcFontSetDestroy (fs);
}
return 0;
}
.\"
.\" Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc.
.\"
.\" 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.
.\"
.\"
.\" $XFree86: xc/programs/fc-list/fc-list.man,v 1.3 2001/02/09 03:47:56 tsi Exp $
.\"
.TH FC-LIST 1 __vendorversion__
.SH NAME
fc-list \- list available fonts
.SH SYNOPSIS
.B "fc-list"
.RI [ font-pattern ]
.SH DESCRIPTION
If font pattern is not given,
.I fc-list
lists all available faces and styles in the current font configuration.
.SH "SEE ALSO"
fontconfig(3)
#!/bin/sh
dirs="/usr/share/fonts /usr/X11R6/lib/X11/fonts"
for d in $dirs; do
find $d \( -name '*.[Tt][Tt][Ff]' -o -name '*.[Pp][Ff][BbAa]' \) -print
done | while read f; do
dir=`dirname $f`
echo $dir
done | sort -u | sed 's/^/ <dir>/' | sed 's;$;</dir>;'
#define IncSubdir fontconfig
HEADERS=fcfreetype.h fcprivate.h fcxml.h fontconfig.h
BuildIncludes($(HEADERS),IncSubdir,..)
#if BuildLibraries
InstallMultipleFlags($(HEADERS),$(INCDIR)/IncSubdir,$(INSTINCFLAGS))
#endif
/*
* $XFree86: $
*
* Copyright © 2001 Keith Packard, member of The XFree86 Project, Inc.
*
* 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.
*