diff options
Diffstat (limited to 'xorg-server/fonts.src/font-util')
-rw-r--r-- | xorg-server/fonts.src/font-util/COPYING | 240 | ||||
-rw-r--r-- | xorg-server/fonts.src/font-util/Makefile.am | 140 | ||||
-rw-r--r-- | xorg-server/fonts.src/font-util/configure.ac | 122 | ||||
-rw-r--r-- | xorg-server/fonts.src/font-util/fontutil.m4.in | 724 | ||||
-rw-r--r-- | xorg-server/fonts.src/font-util/fontutil.pc.in | 22 | ||||
-rw-r--r-- | xorg-server/fonts.src/font-util/ucs2any.c | 1902 |
6 files changed, 1575 insertions, 1575 deletions
diff --git a/xorg-server/fonts.src/font-util/COPYING b/xorg-server/fonts.src/font-util/COPYING index 9c6ebb820..0ff904238 100644 --- a/xorg-server/fonts.src/font-util/COPYING +++ b/xorg-server/fonts.src/font-util/COPYING @@ -1,120 +1,120 @@ -Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the "Software"),
-to deal in the Software without restriction, including without limitation
-the rights to use, copy, modify, merge, publish, distribute, sublicense,
-and/or sell copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice (including the next
-paragraph) shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
-
- ------------------------------------------------------------------------
-
-Copyright (c) 2003 The NetBSD Foundation, Inc.
-All rights reserved.
-
-This code is derived from software contributed to The NetBSD Foundation
-by Ben Collver <collver1@attbi.com>.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
-``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-
- ------------------------------------------------------------------------
-
-Copyright (c) 2006 Martin Husemann.
-Copyright (c) 2007 Joerg Sonnenberger.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-2. The name of the author may not be used to endorse or promote
- products derived from this software without specific prior
- written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
-``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-
- ------------------------------------------------------------------------
-
-Copyright 2005 Red Hat, 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.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of the copyright holders shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from the copyright holders.
-
- ------------------------------------------------------------------------
-
-Copyright (c) 1991-2003 Unicode, Inc. All Rights reserved.
-
-This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
-No claims are made as to fitness for any particular purpose. No
-warranties of any kind are expressed or implied. The recipient
-agrees to determine applicability of information provided. If this
-file has been provided on optical media by Unicode, Inc., the sole
-remedy for any claim will be exchange of defective media within 90
-days of receipt.
-
-Unicode, Inc. hereby grants the right to freely use the information
-supplied in this file in the creation of products supporting the
-Unicode Standard, and to make copies of this file in any form for
-internal or external distribution as long as this notice remains
-attached.
+Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next +paragraph) shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + + ------------------------------------------------------------------------ + +Copyright (c) 2003 The NetBSD Foundation, Inc. +All rights reserved. + +This code is derived from software contributed to The NetBSD Foundation +by Ben Collver <collver1@attbi.com>. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + + ------------------------------------------------------------------------ + +Copyright (c) 2006 Martin Husemann. +Copyright (c) 2007 Joerg Sonnenberger. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. The name of the author may not be used to endorse or promote + products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + + ------------------------------------------------------------------------ + +Copyright 2005 Red Hat, 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. + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the copyright holders shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from the copyright holders. + + ------------------------------------------------------------------------ + +Copyright (c) 1991-2003 Unicode, Inc. All Rights reserved. + +This file is provided as-is by Unicode, Inc. (The Unicode Consortium). +No claims are made as to fitness for any particular purpose. No +warranties of any kind are expressed or implied. The recipient +agrees to determine applicability of information provided. If this +file has been provided on optical media by Unicode, Inc., the sole +remedy for any claim will be exchange of defective media within 90 +days of receipt. + +Unicode, Inc. hereby grants the right to freely use the information +supplied in this file in the creation of products supporting the +Unicode Standard, and to make copies of this file in any form for +internal or external distribution as long as this notice remains +attached. diff --git a/xorg-server/fonts.src/font-util/Makefile.am b/xorg-server/fonts.src/font-util/Makefile.am index 87a4fe17c..48561efef 100644 --- a/xorg-server/fonts.src/font-util/Makefile.am +++ b/xorg-server/fonts.src/font-util/Makefile.am @@ -1,70 +1,70 @@ -# Copyright 2005 Red Hat, 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 Red Hat
-# not be used in advertising or publicity pertaining to distribution
-# of the software without specific, written prior permission. Red
-# Hat makes no representations about the suitability of this software
-# for any purpose. It is provided "as is" without express or implied
-# warranty.
-#
-# RED HAT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
-# NO EVENT SHALL RED HAT 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.
-
-SUBDIRS = man
-bin_PROGRAMS = bdftruncate ucs2any
-
-AM_CFLAGS = $(CWARNFLAGS)
-
-ucs2any_SOURCES = ucs2any.c
-bdftruncate_SOURCES = bdftruncate.c
-
-aclocaldir = $(datadir)/aclocal
-aclocal_DATA = fontutil.m4
-
-mapfilesdir = @MAPDIR@
-mapfiles_DATA = \
- map-ISO8859-1 \
- map-ISO8859-2 \
- map-ISO8859-3 \
- map-ISO8859-4 \
- map-ISO8859-5 \
- map-ISO8859-6 \
- map-ISO8859-7 \
- map-ISO8859-8 \
- map-ISO8859-9 \
- map-ISO8859-10 \
- map-ISO8859-11 \
- map-ISO8859-13 \
- map-ISO8859-14 \
- map-ISO8859-15 \
- map-ISO8859-16 \
- map-JISX0201.1976-0 \
- map-KOI8-R
-
-pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = fontutil.pc
-
-CLEANFILES = bdftruncate
-
-EXTRA_DIST = $(mapfiles_DATA)
-
-MAINTAINERCLEANFILES = ChangeLog INSTALL
-
-.PHONY: ChangeLog INSTALL
-
-INSTALL:
- $(INSTALL_CMD)
-
-ChangeLog:
- $(CHANGELOG_CMD)
-
-dist-hook: ChangeLog INSTALL
+# Copyright 2005 Red Hat, 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 Red Hat +# not be used in advertising or publicity pertaining to distribution +# of the software without specific, written prior permission. Red +# Hat makes no representations about the suitability of this software +# for any purpose. It is provided "as is" without express or implied +# warranty. +# +# RED HAT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN +# NO EVENT SHALL RED HAT 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. + +SUBDIRS = man +bin_PROGRAMS = bdftruncate ucs2any + +AM_CFLAGS = $(CWARNFLAGS) + +ucs2any_SOURCES = ucs2any.c +bdftruncate_SOURCES = bdftruncate.c + +aclocaldir = $(datadir)/aclocal +aclocal_DATA = fontutil.m4 + +mapfilesdir = @MAPDIR@ +mapfiles_DATA = \ + map-ISO8859-1 \ + map-ISO8859-2 \ + map-ISO8859-3 \ + map-ISO8859-4 \ + map-ISO8859-5 \ + map-ISO8859-6 \ + map-ISO8859-7 \ + map-ISO8859-8 \ + map-ISO8859-9 \ + map-ISO8859-10 \ + map-ISO8859-11 \ + map-ISO8859-13 \ + map-ISO8859-14 \ + map-ISO8859-15 \ + map-ISO8859-16 \ + map-JISX0201.1976-0 \ + map-KOI8-R + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = fontutil.pc + +CLEANFILES = bdftruncate + +EXTRA_DIST = $(mapfiles_DATA) + +MAINTAINERCLEANFILES = ChangeLog INSTALL + +.PHONY: ChangeLog INSTALL + +INSTALL: + $(INSTALL_CMD) + +ChangeLog: + $(CHANGELOG_CMD) + +dist-hook: ChangeLog INSTALL diff --git a/xorg-server/fonts.src/font-util/configure.ac b/xorg-server/fonts.src/font-util/configure.ac index 0c8e502ee..471a527f9 100644 --- a/xorg-server/fonts.src/font-util/configure.ac +++ b/xorg-server/fonts.src/font-util/configure.ac @@ -1,61 +1,61 @@ -dnl Copyright 2005 Red Hat, Inc.
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this software
-dnl and its documentation for any purpose is hereby granted without
-dnl fee, provided that the above copyright notice appear in all copies
-dnl and that both that copyright notice and this permission notice
-dnl appear in supporting documentation, and that the name of Red Hat
-dnl not be used in advertising or publicity pertaining to distribution
-dnl of the software without specific, written prior permission. Red
-dnl Hat makes no representations about the suitability of this software
-dnl for any purpose. It is provided "as is" without express or implied
-dnl warranty.
-dnl
-dnl RED HAT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-dnl INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
-dnl NO EVENT SHALL RED HAT BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-dnl CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-dnl OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-dnl NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-dnl CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-dnl
-dnl Process this file with autoconf to create configure.
-
-AC_PREREQ([2.60])
-AC_INIT([font-util], [1.2.0],
- [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [font-util])
-AM_INIT_AUTOMAKE([foreign dist-bzip2])
-AM_MAINTAINER_MODE
-
-# Require X.Org macros 1.8 or later for MAN_SUBSTS set by XORG_MANPAGE_SECTIONS
-m4_ifndef([XORG_MACROS_VERSION],
- [m4_fatal([must install xorg-macros 1.8 or later before running autoconf/autogen])])
-XORG_MACROS_VERSION(1.8)
-AM_CONFIG_HEADER(config.h)
-
-XORG_DEFAULT_OPTIONS
-
-AC_PROG_CC
-AC_PROG_INSTALL
-
-AC_MSG_CHECKING([for root directory for font files])
-fontrootdir='${datadir}/fonts/X11'
-AC_ARG_WITH(fontrootdir, [AC_HELP_STRING([--with-fontrootdir=DIR],
- [Path to parent of font subdirectories [DATADIR/fonts/X11]])],
- [fontrootdir="${withval}"])
-AC_SUBST(fontrootdir)
-AC_MSG_RESULT([${fontrootdir}])
-
-mapdir='${fontrootdir}/util'
-AC_ARG_WITH(mapdir, [AC_HELP_STRING([--with-mapdir=DIR],
- [Path to install font maps [FONTROOTDIR/util]])],
- [mapdir="${withval}"])
-MAPDIR="$mapdir"
-AC_SUBST(MAPDIR)
-
-AC_CONFIG_FILES([Makefile
- man/Makefile
- fontutil.m4
- fontutil.pc])
-
-AC_OUTPUT
+dnl Copyright 2005 Red Hat, Inc. +dnl +dnl Permission to use, copy, modify, distribute, and sell this software +dnl and its documentation for any purpose is hereby granted without +dnl fee, provided that the above copyright notice appear in all copies +dnl and that both that copyright notice and this permission notice +dnl appear in supporting documentation, and that the name of Red Hat +dnl not be used in advertising or publicity pertaining to distribution +dnl of the software without specific, written prior permission. Red +dnl Hat makes no representations about the suitability of this software +dnl for any purpose. It is provided "as is" without express or implied +dnl warranty. +dnl +dnl RED HAT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +dnl INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN +dnl NO EVENT SHALL RED HAT BE LIABLE FOR ANY SPECIAL, INDIRECT OR +dnl CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +dnl OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +dnl NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +dnl CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +dnl +dnl Process this file with autoconf to create configure. + +AC_PREREQ([2.60]) +AC_INIT([font-util], [1.2.0], + [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [font-util]) +AM_INIT_AUTOMAKE([foreign dist-bzip2]) +AM_MAINTAINER_MODE + +# Require X.Org macros 1.8 or later for MAN_SUBSTS set by XORG_MANPAGE_SECTIONS +m4_ifndef([XORG_MACROS_VERSION], + [m4_fatal([must install xorg-macros 1.8 or later before running autoconf/autogen])]) +XORG_MACROS_VERSION(1.8) +AM_CONFIG_HEADER(config.h) + +XORG_DEFAULT_OPTIONS + +AC_PROG_CC +AC_PROG_INSTALL + +AC_MSG_CHECKING([for root directory for font files]) +fontrootdir='${datadir}/fonts/X11' +AC_ARG_WITH(fontrootdir, [AC_HELP_STRING([--with-fontrootdir=DIR], + [Path to parent of font subdirectories [DATADIR/fonts/X11]])], + [fontrootdir="${withval}"]) +AC_SUBST(fontrootdir) +AC_MSG_RESULT([${fontrootdir}]) + +mapdir='${fontrootdir}/util' +AC_ARG_WITH(mapdir, [AC_HELP_STRING([--with-mapdir=DIR], + [Path to install font maps [FONTROOTDIR/util]])], + [mapdir="${withval}"]) +MAPDIR="$mapdir" +AC_SUBST(MAPDIR) + +AC_CONFIG_FILES([Makefile + man/Makefile + fontutil.m4 + fontutil.pc]) + +AC_OUTPUT diff --git a/xorg-server/fonts.src/font-util/fontutil.m4.in b/xorg-server/fonts.src/font-util/fontutil.m4.in index 56d5e7b61..b2b9bd8b5 100644 --- a/xorg-server/fonts.src/font-util/fontutil.m4.in +++ b/xorg-server/fonts.src/font-util/fontutil.m4.in @@ -1,362 +1,362 @@ -dnl @configure_input@
-dnl
-dnl This file comes from X.Org's @PACKAGE_STRING@
-dnl
-dnl Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
-dnl
-dnl Permission is hereby granted, free of charge, to any person obtaining a
-dnl copy of this software and associated documentation files (the "Software"),
-dnl to deal in the Software without restriction, including without limitation
-dnl the rights to use, copy, modify, merge, publish, distribute, sublicense,
-dnl and/or sell copies of the Software, and to permit persons to whom the
-dnl Software is furnished to do so, subject to the following conditions:
-dnl
-dnl The above copyright notice and this permission notice (including the next
-dnl paragraph) shall be included in all copies or substantial portions of the
-dnl Software.
-dnl
-dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-dnl IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-dnl FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-dnl THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-dnl LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-dnl FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-dnl DEALINGS IN THE SOFTWARE.
-dnl
-dnl --------------------------------------------------------------------
-dnl
-dnl Copyright 2005 Red Hat, Inc
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this software and its
-dnl documentation for any purpose is hereby granted without fee, provided that
-dnl the above copyright notice appear in all copies and that both that
-dnl copyright notice and this permission notice appear in supporting
-dnl documentation.
-dnl
-dnl The above copyright notice and this permission notice shall be included
-dnl in all copies or substantial portions of the Software.
-dnl
-dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-dnl IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-dnl OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-dnl ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-dnl OTHER DEALINGS IN THE SOFTWARE.
-dnl
-dnl Except as contained in this notice, the name of the copyright holders shall
-dnl not be used in advertising or otherwise to promote the sale, use or
-dnl other dealings in this Software without prior written authorization
-dnl from the copyright holders.
-
-# XORG_FONT_MACROS_VERSION(required-version)
-# ------------------------------------------
-# Minimum version: 1.1.0
-#
-# If you're using a macro added in Version 1.1 or newer, include this in
-# your configure.ac with the minimum required version, such as:
-# XORG_FONT_MACROS_VERSION(1.1)
-#
-# To ensure that this macro is defined, also add:
-# m4_ifndef([XORG_FONT_MACROS_VERSION],
-# [m4_fatal([must install X.Org font-util 1.1 or later before running autoconf/autogen])])
-#
-#
-# See the "minimum version" comment for each macro you use to see what
-# version you require.
-m4_defun([XORG_FONT_MACROS_VERSION],[
-m4_define([vers_have], [@VERSION@])
-m4_define([maj_have], m4_substr(vers_have, 0, m4_index(vers_have, [.])))
-m4_define([maj_needed], m4_substr([$1], 0, m4_index([$1], [.])))
-m4_if(m4_cmp(maj_have, maj_needed), 0,,
- [m4_fatal([font-util major version ]maj_needed[ is required but ]vers_have[ found])])
-m4_if(m4_version_compare(vers_have, [$1]), -1,
- [m4_fatal([font-util version $1 or higher is required but ]vers_have[ found])])
-m4_undefine([vers_have])
-m4_undefine([maj_have])
-m4_undefine([maj_needed])
-]) # XORG_FONT_MACROS_VERSION
-
-# XORG_FONT_CHECK_{maps}()
-# ------------------------
-# Minimum version: 1.0.0
-# These macros add --enable/disable-{maps} where {maps} are ISO8859-*,
-# JISX0201 or KOI8_R. By default, they are all enabled.
-
-AC_DEFUN([XORG_FONT_CHECK_ISO8859_1], [XORG_FONT_CHECK_ENCODING(ISO8859-1)])
-AC_DEFUN([XORG_FONT_CHECK_ISO8859_2], [XORG_FONT_CHECK_ENCODING(ISO8859-2)])
-AC_DEFUN([XORG_FONT_CHECK_ISO8859_3], [XORG_FONT_CHECK_ENCODING(ISO8859-3)])
-AC_DEFUN([XORG_FONT_CHECK_ISO8859_4], [XORG_FONT_CHECK_ENCODING(ISO8859-4)])
-AC_DEFUN([XORG_FONT_CHECK_ISO8859_5], [XORG_FONT_CHECK_ENCODING(ISO8859-5)])
-AC_DEFUN([XORG_FONT_CHECK_ISO8859_6], [XORG_FONT_CHECK_ENCODING(ISO8859-6)])
-AC_DEFUN([XORG_FONT_CHECK_ISO8859_7], [XORG_FONT_CHECK_ENCODING(ISO8859-7)])
-AC_DEFUN([XORG_FONT_CHECK_ISO8859_8], [XORG_FONT_CHECK_ENCODING(ISO8859-8)])
-AC_DEFUN([XORG_FONT_CHECK_ISO8859_9], [XORG_FONT_CHECK_ENCODING(ISO8859-9)])
-AC_DEFUN([XORG_FONT_CHECK_ISO8859_10],[XORG_FONT_CHECK_ENCODING(ISO8859-10)])
-AC_DEFUN([XORG_FONT_CHECK_ISO8859_11],[XORG_FONT_CHECK_ENCODING(ISO8859-11)])
-AC_DEFUN([XORG_FONT_CHECK_ISO8859_12],[XORG_FONT_CHECK_ENCODING(ISO8859-12)])
-AC_DEFUN([XORG_FONT_CHECK_ISO8859_13],[XORG_FONT_CHECK_ENCODING(ISO8859-13)])
-AC_DEFUN([XORG_FONT_CHECK_ISO8859_14],[XORG_FONT_CHECK_ENCODING(ISO8859-14)])
-AC_DEFUN([XORG_FONT_CHECK_ISO8859_15],[XORG_FONT_CHECK_ENCODING(ISO8859-15)])
-AC_DEFUN([XORG_FONT_CHECK_ISO8859_16],[XORG_FONT_CHECK_ENCODING(ISO8859-16)])
-AC_DEFUN([XORG_FONT_CHECK_JISX0201], [XORG_FONT_CHECK_ENCODING(JISX0201)])
-AC_DEFUN([XORG_FONT_CHECK_KOI8_R], [XORG_FONT_CHECK_ENCODING(KOI8-R)])
-
-# XORG_FONT_CHECK_ENCODING(encoding)
-# ----------------------------------
-# Minimum version: 1.1.0
-# This macro adds --enable/disable-<encoding>, enabled by default.
-# It replaced individual copies of this code in the above macros in 1.1.
-# Currently assumes encoding names will be all upper-case - add m4_toupper
-# calls if this is not true in the future.
-
-AC_DEFUN([XORG_FONT_CHECK_ENCODING],[
- AC_ARG_ENABLE(m4_tolower($1),
- AS_HELP_STRING(m4_join([-], [--disable], m4_tolower($1)),
- [Build $1 fonts (default: yes)]),
- [AS_TR_SH($1)=$enableval])
- AC_MSG_CHECKING([whether to build $1 fonts])
- AC_MSG_RESULT($[AS_TR_SH($1)])
- AM_CONDITIONAL(AS_TR_SH($1), [test "x$AS_TR_SH($1)" = xyes])
-]) # XORG_FONT_CHECK_ENCODING
-
-# XORG_FONT_CHECK_ENCODING_LIST(encoding1 encoding2....)
-# -----------------------------------------------------
-# Minimum version: 1.1.0
-# Call XORG_FONT_CHECK_ENCODING for multiple encodings at once.
-# Add a shorthand --enable/disable-all-encodings option.
-
-AC_DEFUN([XORG_FONT_CHECK_ENCODING_LIST],[
- AC_ARG_ENABLE([all-encodings],
- AS_HELP_STRING([--disable-all-encodings],
- [Disable building of all font encodings]),
- [m4_foreach_w([enc], [$1], [
- AS_TR_SH(enc)=$enableval
- ])],
- [m4_foreach_w([enc], [$1], [
- AS_TR_SH(enc)=yes
- ])])
- m4_foreach_w([enc], [$1], [XORG_FONT_CHECK_ENCODING(enc)])
-]) # XORG_FONT_CHECK_ENCODING_LIST
-
-# XORG_FONT_REQUIRED_PROG(VARNAME, progname)
-# ------------------------------------------
-# Minimum version: 1.1.0
-#
-# Simple wrapper around AC_PATH_PROG that errors if not found
-#
-
-AC_DEFUN([XORG_FONT_REQUIRED_PROG],[
- AC_PATH_PROG($1, $2)
- if test x"$$1" = x; then
- AC_MSG_ERROR([$2 is required to build $PACKAGE_NAME.])
- fi
-])
-
-
-# XORG_FONT_FCCACHE()
-# -------------------
-# Minimum version: 1.1.0
-#
-# Set FCCACHE to path to fc-cache (fontconfig cache builder) if found
-# Set RUN_FCCACHE to a rule suitable for substituting into a makefile
-# to run fc-cache if found and not installing to $DESTDIR
-#
-# fc-cache is optional, not required, and should be skipped when making
-# packages (installing to $DESTDIR).
-#
-AC_DEFUN([XORG_FONT_FCCACHE],[
- AC_PATH_PROG(FCCACHE, fc-cache)
- FCCACHE_WARN='echo "** Warning: fonts.cache not built" ; echo "** Generate this file manually on host system using fc-cache"'
- if test x"$FCCACHE" = x ; then
- RUN_FCCACHE="${FCCACHE_WARN}"
- else
- RUN_FCCACHE='@(if test -z "$(DESTDIR)"; then echo $(FCCACHE) $(fontdir); $(FCCACHE) $(fontdir); else'
- RUN_FCCACHE="${RUN_FCCACHE} ${FCCACHE_WARN} ; fi)"
- fi
- AC_SUBST([RUN_FCCACHE])
-])
-
-
-# XORG_FONT_COMMON_UTILS()
-# ------------------------
-# Minimum version: 1.1.0
-#
-# Call XORG_FONT_REQUIRED_PROG for programs needed for all font types
-
-AC_DEFUN([XORG_FONT_COMMON_UTILS],[
- XORG_FONT_FCCACHE
- XORG_FONT_REQUIRED_PROG(MKFONTDIR, mkfontdir)
-])
-
-# XORG_FONT_SCALED_UTILS()
-# ------------------------
-# Minimum version: 1.1.0
-#
-# Call XORG_FONT_REQUIRED_PROG for programs needed for scalable fonts
-# (TrueType, OpenType, Type1)
-
-AC_DEFUN([XORG_FONT_SCALED_UTILS],[
- XORG_FONT_COMMON_UTILS
- XORG_FONT_REQUIRED_PROG(MKFONTSCALE, mkfontscale)
-])
-
-# XORG_FONT_BDF_UTILS()
-# ---------------------
-# Minimum version: 1.1.0
-#
-# Call XORG_FONT_REQUIRED_PROG for programs needed for BDF format bitmap fonts
-# Also call XORG_FONT_CHECK_COMPRESSION to determine how to compress the
-# PCF output files created by bdftopcf
-
-AC_DEFUN([XORG_FONT_BDF_UTILS],[
- XORG_FONT_COMMON_UTILS
- XORG_FONT_REQUIRED_PROG(BDFTOPCF, bdftopcf)
- XORG_FONT_CHECK_COMPRESSION
-])
-
-# XORG_FONT_CHECK_COMPRESSION()
-# -----------------------------
-# Minimum version: 1.1.0
-#
-# Offer a --with-compression flag to control what compression method is
-# used for pcf font files. Offers all the methods currently supported
-# by libXfont, including no compression.
-
-AC_DEFUN([XORG_FONT_CHECK_COMPRESSION],[
- AC_MSG_CHECKING([font compression method])
- AC_ARG_WITH(compression,
- [AS_HELP_STRING([--with-compression=<no|compress|gzip|bzip2>],
- [compression method to use on pcf fonts])],
- [compression="$withval"], [compression="yes"])
- if test x"$compression" = "xyes" ; then
- compression="gzip"
- fi
- AC_MSG_RESULT([${compression}])
- case ${compression} in
- *compress) COMPRESS_SUFFIX=".Z" ;;
- *gzip) COMPRESS_SUFFIX=".gz" ;;
- *bzip2) COMPRESS_SUFFIX=".bz2" ;;
- no|none) COMPRESS_SUFFIX="" ; COMPRESS="cat" ;;
- *) AC_MSG_ERROR([${compression} is not a supported compression method]) ;;
- esac
- if test x"$COMPRESS_SUFFIX" != "x" ; then
- XORG_FONT_REQUIRED_PROG(COMPRESS, ${compression})
- fi
- AC_SUBST([COMPRESS_SUFFIX])
-])
-
-# XORG_FONT_UCS2ANY()
-# -------------------
-# Minimum version: 1.1.0
-#
-# Call XORG_FONT_REQUIRED_PROG for ucs2any program needed for splitting
-# Unicode-encoded BDF format bitmap fonts into subsets for older encodings.
-# Also call pkg-config to find the directory with the encoding files needed
-# by ucs2any, and export it as MAPFILES_PATH to the Makefiles
-
-AC_DEFUN([XORG_FONT_UCS2ANY],[
- XORG_FONT_REQUIRED_PROG(UCS2ANY, ucs2any)
- PKG_CHECK_MODULES(MAPS, [fontutil])
- AC_MSG_CHECKING([for ucs2any encoding data files])
- MAPFILES_PATH=`pkg-config --variable=mapdir fontutil`
- AC_SUBST(MAPFILES_PATH)
- AC_MSG_RESULT([${MAPFILES_PATH}])
-])
-
-
-
-# XORG_FONT_FC_CONFDIR()
-# --------------------
-# Minimum version: 1.2.0
-#
-# Sets FC_CONFDIR to the fontconfig config directory
-# (which should be --with-confdir=... when building fontconfig)
-# found from:
-# --with-fc-confdir=...
-# pkg-config --variable=confdir fontconfig
-# ${sysconfdir}/fonts
-
-AC_DEFUN([XORG_FONT_FC_CONFDIR],[
- dnl Ensure $PKG_CONFIG is set first
- AC_REQUIRE([PKG_PROG_PKG_CONFIG])
-
- AC_MSG_CHECKING([for fontconfig's configuration directory])
- AC_ARG_WITH(fc-confdir,
- AS_HELP_STRING([--with-fc-confdir=DIR],
- [Path to fontconfig's configuration directory]),
- [FC_CONFDIR="$withval"])
- # if --with-fc-confdir was not specified
- if test "x${FC_CONFDIR}" = "x"; then
- FC_CONFDIR=`$PKG_CONFIG --variable=confdir fontconfig`
- fi
- # ...and if pkg-config didn't find confdir in fontconfig.pc...
- if test "x${FC_CONFDIR}" = "x"; then
- FC_CONFDIR="${sysconfdir}/fonts"
- fi
- AC_SUBST(FC_CONFDIR)
- AC_MSG_RESULT([${FC_CONFDIR}])
-])
-
-
-
-# XORG_FONTROOTDIR()
-# --------------------
-# Minimum version: 1.1.0
-#
-# Sets FONTROOTDIR to the root directory for font files. Uses the first
-# found from:
-# --with-fontrootdir
-# pkg-config --variable=fontrootdir fontutil
-# ${datadir}/fonts/X11
-
-AC_DEFUN([XORG_FONTROOTDIR],[
- dnl Ensure $PKG_CONFIG is set first
- AC_REQUIRE([PKG_PROG_PKG_CONFIG])
-
- AC_MSG_CHECKING([for root directory for font files])
- AC_ARG_WITH(fontrootdir,
- AS_HELP_STRING([--with-fontrootdir=DIR],
- [Path to root directory for font files]),
- [FONTROOTDIR="$withval"])
- # if --with-fontrootdir not specified...
- if test "x${FONTROOTDIR}" = "x"; then
- FONTROOTDIR=`$PKG_CONFIG --variable=fontrootdir fontutil`
- fi
- # ...and if pkg-config didn't find fontdir in fontutil.pc...
- if test "x${FONTROOTDIR}" = "x"; then
- FONTROOTDIR="${datadir}/fonts/X11"
- fi
- AC_SUBST(FONTROOTDIR)
- AC_MSG_RESULT([${FONTROOTDIR}])
-])
-
-# XORG_FONTSUBDIR(variable, flag, subdir)
-# ---------------------------------------
-# Minimum version: 1.1.0
-#
-# Offer a --with-<flag> flag to control directory for font installation
-# Default is the specified <subdir> of the font root directory.
-# Sets <variable> to the selected directory
-
-AC_DEFUN([XORG_FONTSUBDIR],[
- AC_REQUIRE([XORG_FONTROOTDIR])
-
- AC_MSG_CHECKING([for directory for $3 files])
- AC_ARG_WITH($2,
- [AS_HELP_STRING([--with-$2=DIR],
- [Path to $3 files [FONTROOTDIR/$3]])],
- [$1="${withval}"], [$1='${FONTROOTDIR}/$3'])
- AC_SUBST($1)
- AC_MSG_RESULT([${$1}])
-]) # XORG_FONTSUBDIR
-
-# XORG_FONTDIR(subdir)
-# --------------------
-# Minimum version: 1.1.0
-#
-# Offer a --with-fontdir flag to control directory for font installation
-# Default is the specified subdir of the font root directory.
-# Sets FONTDIR to the selected directory
-
-AC_DEFUN([XORG_FONTDIR],[XORG_FONTSUBDIR([FONTDIR], [fontdir], [$1])])
+dnl @configure_input@ +dnl +dnl This file comes from X.Org's @PACKAGE_STRING@ +dnl +dnl Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. +dnl +dnl Permission is hereby granted, free of charge, to any person obtaining a +dnl copy of this software and associated documentation files (the "Software"), +dnl to deal in the Software without restriction, including without limitation +dnl the rights to use, copy, modify, merge, publish, distribute, sublicense, +dnl and/or sell copies of the Software, and to permit persons to whom the +dnl Software is furnished to do so, subject to the following conditions: +dnl +dnl The above copyright notice and this permission notice (including the next +dnl paragraph) shall be included in all copies or substantial portions of the +dnl Software. +dnl +dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +dnl IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +dnl FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +dnl THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +dnl LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +dnl FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +dnl DEALINGS IN THE SOFTWARE. +dnl +dnl -------------------------------------------------------------------- +dnl +dnl Copyright 2005 Red Hat, Inc +dnl +dnl Permission to use, copy, modify, distribute, and sell this software and its +dnl documentation for any purpose is hereby granted without fee, provided that +dnl the above copyright notice appear in all copies and that both that +dnl copyright notice and this permission notice appear in supporting +dnl documentation. +dnl +dnl The above copyright notice and this permission notice shall be included +dnl in all copies or substantial portions of the Software. +dnl +dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +dnl IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR +dnl OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +dnl ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +dnl OTHER DEALINGS IN THE SOFTWARE. +dnl +dnl Except as contained in this notice, the name of the copyright holders shall +dnl not be used in advertising or otherwise to promote the sale, use or +dnl other dealings in this Software without prior written authorization +dnl from the copyright holders. + +# XORG_FONT_MACROS_VERSION(required-version) +# ------------------------------------------ +# Minimum version: 1.1.0 +# +# If you're using a macro added in Version 1.1 or newer, include this in +# your configure.ac with the minimum required version, such as: +# XORG_FONT_MACROS_VERSION(1.1) +# +# To ensure that this macro is defined, also add: +# m4_ifndef([XORG_FONT_MACROS_VERSION], +# [m4_fatal([must install X.Org font-util 1.1 or later before running autoconf/autogen])]) +# +# +# See the "minimum version" comment for each macro you use to see what +# version you require. +m4_defun([XORG_FONT_MACROS_VERSION],[ +m4_define([vers_have], [@VERSION@]) +m4_define([maj_have], m4_substr(vers_have, 0, m4_index(vers_have, [.]))) +m4_define([maj_needed], m4_substr([$1], 0, m4_index([$1], [.]))) +m4_if(m4_cmp(maj_have, maj_needed), 0,, + [m4_fatal([font-util major version ]maj_needed[ is required but ]vers_have[ found])]) +m4_if(m4_version_compare(vers_have, [$1]), -1, + [m4_fatal([font-util version $1 or higher is required but ]vers_have[ found])]) +m4_undefine([vers_have]) +m4_undefine([maj_have]) +m4_undefine([maj_needed]) +]) # XORG_FONT_MACROS_VERSION + +# XORG_FONT_CHECK_{maps}() +# ------------------------ +# Minimum version: 1.0.0 +# These macros add --enable/disable-{maps} where {maps} are ISO8859-*, +# JISX0201 or KOI8_R. By default, they are all enabled. + +AC_DEFUN([XORG_FONT_CHECK_ISO8859_1], [XORG_FONT_CHECK_ENCODING(ISO8859-1)]) +AC_DEFUN([XORG_FONT_CHECK_ISO8859_2], [XORG_FONT_CHECK_ENCODING(ISO8859-2)]) +AC_DEFUN([XORG_FONT_CHECK_ISO8859_3], [XORG_FONT_CHECK_ENCODING(ISO8859-3)]) +AC_DEFUN([XORG_FONT_CHECK_ISO8859_4], [XORG_FONT_CHECK_ENCODING(ISO8859-4)]) +AC_DEFUN([XORG_FONT_CHECK_ISO8859_5], [XORG_FONT_CHECK_ENCODING(ISO8859-5)]) +AC_DEFUN([XORG_FONT_CHECK_ISO8859_6], [XORG_FONT_CHECK_ENCODING(ISO8859-6)]) +AC_DEFUN([XORG_FONT_CHECK_ISO8859_7], [XORG_FONT_CHECK_ENCODING(ISO8859-7)]) +AC_DEFUN([XORG_FONT_CHECK_ISO8859_8], [XORG_FONT_CHECK_ENCODING(ISO8859-8)]) +AC_DEFUN([XORG_FONT_CHECK_ISO8859_9], [XORG_FONT_CHECK_ENCODING(ISO8859-9)]) +AC_DEFUN([XORG_FONT_CHECK_ISO8859_10],[XORG_FONT_CHECK_ENCODING(ISO8859-10)]) +AC_DEFUN([XORG_FONT_CHECK_ISO8859_11],[XORG_FONT_CHECK_ENCODING(ISO8859-11)]) +AC_DEFUN([XORG_FONT_CHECK_ISO8859_12],[XORG_FONT_CHECK_ENCODING(ISO8859-12)]) +AC_DEFUN([XORG_FONT_CHECK_ISO8859_13],[XORG_FONT_CHECK_ENCODING(ISO8859-13)]) +AC_DEFUN([XORG_FONT_CHECK_ISO8859_14],[XORG_FONT_CHECK_ENCODING(ISO8859-14)]) +AC_DEFUN([XORG_FONT_CHECK_ISO8859_15],[XORG_FONT_CHECK_ENCODING(ISO8859-15)]) +AC_DEFUN([XORG_FONT_CHECK_ISO8859_16],[XORG_FONT_CHECK_ENCODING(ISO8859-16)]) +AC_DEFUN([XORG_FONT_CHECK_JISX0201], [XORG_FONT_CHECK_ENCODING(JISX0201)]) +AC_DEFUN([XORG_FONT_CHECK_KOI8_R], [XORG_FONT_CHECK_ENCODING(KOI8-R)]) + +# XORG_FONT_CHECK_ENCODING(encoding) +# ---------------------------------- +# Minimum version: 1.1.0 +# This macro adds --enable/disable-<encoding>, enabled by default. +# It replaced individual copies of this code in the above macros in 1.1. +# Currently assumes encoding names will be all upper-case - add m4_toupper +# calls if this is not true in the future. + +AC_DEFUN([XORG_FONT_CHECK_ENCODING],[ + AC_ARG_ENABLE(m4_tolower($1), + AS_HELP_STRING(m4_join([-], [--disable], m4_tolower($1)), + [Build $1 fonts (default: yes)]), + [AS_TR_SH($1)=$enableval]) + AC_MSG_CHECKING([whether to build $1 fonts]) + AC_MSG_RESULT($[AS_TR_SH($1)]) + AM_CONDITIONAL(AS_TR_SH($1), [test "x$AS_TR_SH($1)" = xyes]) +]) # XORG_FONT_CHECK_ENCODING + +# XORG_FONT_CHECK_ENCODING_LIST(encoding1 encoding2....) +# ----------------------------------------------------- +# Minimum version: 1.1.0 +# Call XORG_FONT_CHECK_ENCODING for multiple encodings at once. +# Add a shorthand --enable/disable-all-encodings option. + +AC_DEFUN([XORG_FONT_CHECK_ENCODING_LIST],[ + AC_ARG_ENABLE([all-encodings], + AS_HELP_STRING([--disable-all-encodings], + [Disable building of all font encodings]), + [m4_foreach_w([enc], [$1], [ + AS_TR_SH(enc)=$enableval + ])], + [m4_foreach_w([enc], [$1], [ + AS_TR_SH(enc)=yes + ])]) + m4_foreach_w([enc], [$1], [XORG_FONT_CHECK_ENCODING(enc)]) +]) # XORG_FONT_CHECK_ENCODING_LIST + +# XORG_FONT_REQUIRED_PROG(VARNAME, progname) +# ------------------------------------------ +# Minimum version: 1.1.0 +# +# Simple wrapper around AC_PATH_PROG that errors if not found +# + +AC_DEFUN([XORG_FONT_REQUIRED_PROG],[ + AC_PATH_PROG($1, $2) + if test x"$$1" = x; then + AC_MSG_ERROR([$2 is required to build $PACKAGE_NAME.]) + fi +]) + + +# XORG_FONT_FCCACHE() +# ------------------- +# Minimum version: 1.1.0 +# +# Set FCCACHE to path to fc-cache (fontconfig cache builder) if found +# Set RUN_FCCACHE to a rule suitable for substituting into a makefile +# to run fc-cache if found and not installing to $DESTDIR +# +# fc-cache is optional, not required, and should be skipped when making +# packages (installing to $DESTDIR). +# +AC_DEFUN([XORG_FONT_FCCACHE],[ + AC_PATH_PROG(FCCACHE, fc-cache) + FCCACHE_WARN='echo "** Warning: fonts.cache not built" ; echo "** Generate this file manually on host system using fc-cache"' + if test x"$FCCACHE" = x ; then + RUN_FCCACHE="${FCCACHE_WARN}" + else + RUN_FCCACHE='@(if test -z "$(DESTDIR)"; then echo $(FCCACHE) $(fontdir); $(FCCACHE) $(fontdir); else' + RUN_FCCACHE="${RUN_FCCACHE} ${FCCACHE_WARN} ; fi)" + fi + AC_SUBST([RUN_FCCACHE]) +]) + + +# XORG_FONT_COMMON_UTILS() +# ------------------------ +# Minimum version: 1.1.0 +# +# Call XORG_FONT_REQUIRED_PROG for programs needed for all font types + +AC_DEFUN([XORG_FONT_COMMON_UTILS],[ + XORG_FONT_FCCACHE + XORG_FONT_REQUIRED_PROG(MKFONTDIR, mkfontdir) +]) + +# XORG_FONT_SCALED_UTILS() +# ------------------------ +# Minimum version: 1.1.0 +# +# Call XORG_FONT_REQUIRED_PROG for programs needed for scalable fonts +# (TrueType, OpenType, Type1) + +AC_DEFUN([XORG_FONT_SCALED_UTILS],[ + XORG_FONT_COMMON_UTILS + XORG_FONT_REQUIRED_PROG(MKFONTSCALE, mkfontscale) +]) + +# XORG_FONT_BDF_UTILS() +# --------------------- +# Minimum version: 1.1.0 +# +# Call XORG_FONT_REQUIRED_PROG for programs needed for BDF format bitmap fonts +# Also call XORG_FONT_CHECK_COMPRESSION to determine how to compress the +# PCF output files created by bdftopcf + +AC_DEFUN([XORG_FONT_BDF_UTILS],[ + XORG_FONT_COMMON_UTILS + XORG_FONT_REQUIRED_PROG(BDFTOPCF, bdftopcf) + XORG_FONT_CHECK_COMPRESSION +]) + +# XORG_FONT_CHECK_COMPRESSION() +# ----------------------------- +# Minimum version: 1.1.0 +# +# Offer a --with-compression flag to control what compression method is +# used for pcf font files. Offers all the methods currently supported +# by libXfont, including no compression. + +AC_DEFUN([XORG_FONT_CHECK_COMPRESSION],[ + AC_MSG_CHECKING([font compression method]) + AC_ARG_WITH(compression, + [AS_HELP_STRING([--with-compression=<no|compress|gzip|bzip2>], + [compression method to use on pcf fonts])], + [compression="$withval"], [compression="yes"]) + if test x"$compression" = "xyes" ; then + compression="gzip" + fi + AC_MSG_RESULT([${compression}]) + case ${compression} in + *compress) COMPRESS_SUFFIX=".Z" ;; + *gzip) COMPRESS_SUFFIX=".gz" ;; + *bzip2) COMPRESS_SUFFIX=".bz2" ;; + no|none) COMPRESS_SUFFIX="" ; COMPRESS="cat" ;; + *) AC_MSG_ERROR([${compression} is not a supported compression method]) ;; + esac + if test x"$COMPRESS_SUFFIX" != "x" ; then + XORG_FONT_REQUIRED_PROG(COMPRESS, ${compression}) + fi + AC_SUBST([COMPRESS_SUFFIX]) +]) + +# XORG_FONT_UCS2ANY() +# ------------------- +# Minimum version: 1.1.0 +# +# Call XORG_FONT_REQUIRED_PROG for ucs2any program needed for splitting +# Unicode-encoded BDF format bitmap fonts into subsets for older encodings. +# Also call pkg-config to find the directory with the encoding files needed +# by ucs2any, and export it as MAPFILES_PATH to the Makefiles + +AC_DEFUN([XORG_FONT_UCS2ANY],[ + XORG_FONT_REQUIRED_PROG(UCS2ANY, ucs2any) + PKG_CHECK_MODULES(MAPS, [fontutil]) + AC_MSG_CHECKING([for ucs2any encoding data files]) + MAPFILES_PATH=`pkg-config --variable=mapdir fontutil` + AC_SUBST(MAPFILES_PATH) + AC_MSG_RESULT([${MAPFILES_PATH}]) +]) + + + +# XORG_FONT_FC_CONFDIR() +# -------------------- +# Minimum version: 1.2.0 +# +# Sets FC_CONFDIR to the fontconfig config directory +# (which should be --with-confdir=... when building fontconfig) +# found from: +# --with-fc-confdir=... +# pkg-config --variable=confdir fontconfig +# ${sysconfdir}/fonts + +AC_DEFUN([XORG_FONT_FC_CONFDIR],[ + dnl Ensure $PKG_CONFIG is set first + AC_REQUIRE([PKG_PROG_PKG_CONFIG]) + + AC_MSG_CHECKING([for fontconfig's configuration directory]) + AC_ARG_WITH(fc-confdir, + AS_HELP_STRING([--with-fc-confdir=DIR], + [Path to fontconfig's configuration directory]), + [FC_CONFDIR="$withval"]) + # if --with-fc-confdir was not specified + if test "x${FC_CONFDIR}" = "x"; then + FC_CONFDIR=`$PKG_CONFIG --variable=confdir fontconfig` + fi + # ...and if pkg-config didn't find confdir in fontconfig.pc... + if test "x${FC_CONFDIR}" = "x"; then + FC_CONFDIR="${sysconfdir}/fonts" + fi + AC_SUBST(FC_CONFDIR) + AC_MSG_RESULT([${FC_CONFDIR}]) +]) + + + +# XORG_FONTROOTDIR() +# -------------------- +# Minimum version: 1.1.0 +# +# Sets FONTROOTDIR to the root directory for font files. Uses the first +# found from: +# --with-fontrootdir +# pkg-config --variable=fontrootdir fontutil +# ${datadir}/fonts/X11 + +AC_DEFUN([XORG_FONTROOTDIR],[ + dnl Ensure $PKG_CONFIG is set first + AC_REQUIRE([PKG_PROG_PKG_CONFIG]) + + AC_MSG_CHECKING([for root directory for font files]) + AC_ARG_WITH(fontrootdir, + AS_HELP_STRING([--with-fontrootdir=DIR], + [Path to root directory for font files]), + [FONTROOTDIR="$withval"]) + # if --with-fontrootdir not specified... + if test "x${FONTROOTDIR}" = "x"; then + FONTROOTDIR=`$PKG_CONFIG --variable=fontrootdir fontutil` + fi + # ...and if pkg-config didn't find fontdir in fontutil.pc... + if test "x${FONTROOTDIR}" = "x"; then + FONTROOTDIR="${datadir}/fonts/X11" + fi + AC_SUBST(FONTROOTDIR) + AC_MSG_RESULT([${FONTROOTDIR}]) +]) + +# XORG_FONTSUBDIR(variable, flag, subdir) +# --------------------------------------- +# Minimum version: 1.1.0 +# +# Offer a --with-<flag> flag to control directory for font installation +# Default is the specified <subdir> of the font root directory. +# Sets <variable> to the selected directory + +AC_DEFUN([XORG_FONTSUBDIR],[ + AC_REQUIRE([XORG_FONTROOTDIR]) + + AC_MSG_CHECKING([for directory for $3 files]) + AC_ARG_WITH($2, + [AS_HELP_STRING([--with-$2=DIR], + [Path to $3 files [FONTROOTDIR/$3]])], + [$1="${withval}"], [$1='${FONTROOTDIR}/$3']) + AC_SUBST($1) + AC_MSG_RESULT([${$1}]) +]) # XORG_FONTSUBDIR + +# XORG_FONTDIR(subdir) +# -------------------- +# Minimum version: 1.1.0 +# +# Offer a --with-fontdir flag to control directory for font installation +# Default is the specified subdir of the font root directory. +# Sets FONTDIR to the selected directory + +AC_DEFUN([XORG_FONTDIR],[XORG_FONTSUBDIR([FONTDIR], [fontdir], [$1])]) diff --git a/xorg-server/fonts.src/font-util/fontutil.pc.in b/xorg-server/fonts.src/font-util/fontutil.pc.in index c5a22ed1a..27055a1e8 100644 --- a/xorg-server/fonts.src/font-util/fontutil.pc.in +++ b/xorg-server/fonts.src/font-util/fontutil.pc.in @@ -1,11 +1,11 @@ -prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-datarootdir=@datarootdir@
-datadir=@datadir@
-fontrootdir=@fontrootdir@
-mapdir=@MAPDIR@
-
-Name: FontUtil
-Description: Font utilities dirs
-Version: @PACKAGE_VERSION@
+prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +datarootdir=@datarootdir@ +datadir=@datadir@ +fontrootdir=@fontrootdir@ +mapdir=@MAPDIR@ + +Name: FontUtil +Description: Font utilities dirs +Version: @PACKAGE_VERSION@ diff --git a/xorg-server/fonts.src/font-util/ucs2any.c b/xorg-server/fonts.src/font-util/ucs2any.c index f51d0cbf7..a6e8fb6bb 100644 --- a/xorg-server/fonts.src/font-util/ucs2any.c +++ b/xorg-server/fonts.src/font-util/ucs2any.c @@ -1,951 +1,951 @@ -/*-
- * Copyright (c) 2003 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Ben Collver <collver1@attbi.com>.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-/*
- * This utility allows you to generate from an ISO10646-1 encoded
- * BDF font other BDF fonts in any possible encoding. This way, you can
- * derive from a single ISO10646-1 master font a whole set of 8-bit
- * fonts in all ISO 8859 and various other encodings. (Hopefully
- * a future XFree86 release will have a similar facility built into
- * the server, which can reencode ISO10646-1 on the fly, because
- * storing the same fonts in many different encodings is clearly
- * a waste of storage capacity).
-*/
-
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#if !defined(NEED_BASENAME) && !defined(Lynx)
-#include <libgen.h>
-#endif
-#include <limits.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-/* global variable for argv[0] */
-static const char *my_name = NULL;
-
-#ifdef NEED_BASENAME
-static char *
-basename(char *pathname)
-{
- char *ptr;
-
- ptr = strrchr(pathname, '/');
- return ((ptr == NULL) ? pathname : &ptr[1]);
-}
-#endif
-
-/* "CLASS" "z" string and memory manipulation */
-
-static void *
-zmalloc(size_t size)
-{
- void *r;
- r = malloc(size);
- if (r == NULL) {
- perror(my_name);
- exit(errno);
- }
- memset(r, 0, size);
- return r;
-}
-
-static void *
-zrealloc(void *ptr, size_t size)
-{
- void *temp;
- temp = realloc(ptr, size);
- if (temp == NULL) {
- perror(my_name);
- exit(errno);
- }
- return temp;
-}
-
-static char *
-zstrdup(const char *str)
-{
- char *retval;
-
- if (str == NULL) {
- fprintf(stderr, "%s: zstrdup(NULL)\n", my_name);
- exit(1);
- }
- retval = strdup(str);
- if (retval == NULL) {
- perror(my_name);
- exit(errno);
- }
- return retval;
-}
-
-static void
-zstrcpy(char **dest, const char *source)
-{
- if (*dest != NULL)
- free(*dest);
- *dest = zstrdup(source);
-}
-
-static void
-zquotedcpy(char **dest, const char *source)
-{
- const char *start, *end;
-
- if (*dest != NULL)
- free(*dest);
- *dest = NULL;
- start = source;
- if (*start == '"') {
- start = source+1;
- end = strrchr(start, '"');
- if (!end) return;
- *dest = zmalloc(end-start+1);
- strncpy(*dest, start, end-start);
- (*dest)[end-start] = '\0';
- } else {
- *dest = zstrdup(source);
- }
-}
-
-static void
-zstrcat(char **dest, const char *source)
-{
- int dest_size = 1;
- int source_size;
-
- if (*dest != NULL)
- dest_size = strlen(*dest) + 1;
- source_size = strlen(source);
- *dest = zrealloc(*dest, dest_size + source_size);
- strcpy(*dest + dest_size - 1, source);
-}
-
-static void
-zstrtoupper(char *s)
-{
- char *t;
-
- for (t = s; *t != '\000'; t++)
- *t = toupper(*t);
-}
-
-#define zs_true(x) (x != NULL && strcmp(x, "0") != 0)
-#define zi_true(x) (x == 1)
-
-/* "CLASS" "dynamic array" */
-
-typedef struct {
- char *name;
- int size;
- int count;
- void **values;
- void *nv;
-} da_t;
-
-static da_t *
-da_new(char *name)
-{
- da_t *da;
-
- da = zmalloc(sizeof(da_t));
- da->size = 0;
- da->count = 0;
- da->values = NULL;
- da->nv = NULL;
- da->name = NULL;
- zstrcpy(&(da->name), name);
- return da;
-}
-
-static void *
-da_fetch(da_t *da, int key)
-{
- void *r = NULL;
-
- if (key >= 0 && key < da->size && da->values[key] != NULL)
- r = da->values[key];
- else
- if (key == -1 && da->nv != NULL)
- r = da->nv;
-
- return r;
-}
-
-static int
-da_fetch_int(da_t *da, int key)
-{
- int *t;
- int r = -1;
- t = da_fetch(da, key);
- if (t != NULL)
- r = *t;
- return r;
-}
-
-#define da_fetch_str(a,k) \
- (char *)da_fetch(a,k)
-
-static void
-da_add(da_t *da, int key, void *value)
-{
- int i = da->size;
- if (key >= 0) {
- if (key >= da->size) {
- da->size = key + 1;
- da->values = zrealloc(da->values,
- da->size * sizeof(void *));
- for (; i < da->size; i++)
- da->values[i] = NULL;
- }
- if (da->values[key] != NULL) {
- free(da->values[key]);
- } else {
- if (value == NULL) {
- if (da->count > 0)
- da->count--;
- } else {
- da->count++;
- }
- }
- da->values[key] = value;
- } else if (key == -1) {
- if (da->nv != NULL)
- free(da->nv);
- da->nv = value;
- }
-}
-
-static void
-da_add_str(da_t *da, int key, char *value)
-{
- da_add(da, key, value?zstrdup(value):NULL);
-}
-
-static void
-da_add_int(da_t *da, int key, int value)
-{
- int *v;
-
- v = zmalloc(sizeof(int));
- *v = value;
- da_add(da, key, v);
-}
-
-#define da_count(da) (da->count)
-#define da_size(da) (da->size)
-
-static void
-da_clear(da_t *da)
-{
- int i;
-
- for (i = da->size; i; i--)
- free(da->values[i]);
- if (da->values != NULL)
- free(da->values);
- da->size = 0;
- da->count = 0;
- da->values = NULL;
-}
-
-/* "CLASS" file input */
-
-#define TYPICAL_LINE_SIZE (80)
-
-/* read a line and strip trailing whitespace */
-static int
-read_line(FILE *fp, char **buffer)
-{
- int buffer_size = TYPICAL_LINE_SIZE;
- int eof = 0;
- int position = 0;
- int c;
-
- *buffer = zmalloc(TYPICAL_LINE_SIZE);
- (*buffer)[0] = '\0';
-
- if ((c = getc(fp)) == EOF)
- eof = 1;
-
- while (c != '\n' && !eof) {
- if (position + 1 >= buffer_size) {
- buffer_size = buffer_size * 2 + 1;
- *buffer = zrealloc(*buffer, buffer_size);
- }
- (*buffer)[position++] = c;
- (*buffer)[position] = '\0';
- c = getc(fp);
- if (c == EOF)
- eof = 1;
- }
-
- if (eof) {
- free(*buffer);
- *buffer = NULL;
- return 0;
- }
-
- while (position > 1) {
- position--;
- if (!isspace((*buffer)[position]))
- break;
- (*buffer)[position] = '\0';
- }
-
- return 1;
-}
-
-/* BEGIN */
-
-/*
-DEC VT100 graphics characters in the range 1-31 (as expected by
-some old xterm versions and a few other applications)
-*/
-#define decmap_size 31
-static int decmap[decmap_size] = {
- 0x25C6, /* BLACK DIAMOND */
- 0x2592, /* MEDIUM SHADE */
- 0x2409, /* SYMBOL FOR HORIZONTAL TABULATION */
- 0x240C, /* SYMBOL FOR FORM FEED */
- 0x240D, /* SYMBOL FOR CARRIAGE RETURN */
- 0x240A, /* SYMBOL FOR LINE FEED */
- 0x00B0, /* DEGREE SIGN */
- 0x00B1, /* PLUS-MINUS SIGN */
- 0x2424, /* SYMBOL FOR NEWLINE */
- 0x240B, /* SYMBOL FOR VERTICAL TABULATION */
- 0x2518, /* BOX DRAWINGS LIGHT UP AND LEFT */
- 0x2510, /* BOX DRAWINGS LIGHT DOWN AND LEFT */
- 0x250C, /* BOX DRAWINGS LIGHT DOWN AND RIGHT */
- 0x2514, /* BOX DRAWINGS LIGHT UP AND RIGHT */
- 0x253C, /* BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */
- 0x23BA, /* HORIZONTAL SCAN LINE-1 (Unicode 3.2 draft) */
- 0x23BB, /* HORIZONTAL SCAN LINE-3 (Unicode 3.2 draft) */
- 0x2500, /* BOX DRAWINGS LIGHT HORIZONTAL */
- 0x23BC, /* HORIZONTAL SCAN LINE-7 (Unicode 3.2 draft) */
- 0x23BD, /* HORIZONTAL SCAN LINE-9 (Unicode 3.2 draft) */
- 0x251C, /* BOX DRAWINGS LIGHT VERTICAL AND RIGHT */
- 0x2524, /* BOX DRAWINGS LIGHT VERTICAL AND LEFT */
- 0x2534, /* BOX DRAWINGS LIGHT UP AND HORIZONTAL */
- 0x252C, /* BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */
- 0x2502, /* BOX DRAWINGS LIGHT VERTICAL */
- 0x2264, /* LESS-THAN OR EQUAL TO */
- 0x2265, /* GREATER-THAN OR EQUAL TO */
- 0x03C0, /* GREEK SMALL LETTER PI */
- 0x2260, /* NOT EQUAL TO */
- 0x00A3, /* POUND SIGN */
- 0x00B7 /* MIDDLE DOT */
-};
-
-static int
-is_control(int ucs)
-{
- return ((ucs >= 0x00 && ucs <= 0x1f) ||
- (ucs >= 0x7f && ucs <= 0x9f));
-}
-
-static int
-is_blockgraphics(int ucs)
-{
- return ucs >= 0x2500 && ucs <= 0x25FF;
-}
-
-/* calculate the bounding box that covers both provided bounding boxes */
-typedef struct {
- int cwidth;
- int cheight;
- int cxoff;
- int cyoff;
-} bbx_t;
-
-static bbx_t *
-combine_bbx(int awidth, int aheight, int axoff, int ayoff,
- int cwidth, int cheight, int cxoff, int cyoff, bbx_t *r)
-{
- r->cwidth = cwidth;
- r->cheight = cheight;
- r->cxoff = cxoff;
- r->cyoff = cyoff;
-
- if (axoff < r->cxoff) {
- r->cwidth += r->cxoff - axoff;
- r->cxoff = axoff;
- }
- if (ayoff < r->cyoff) {
- r->cheight += r->cyoff - ayoff;
- r->cyoff = ayoff;
- }
- if (awidth + axoff > r->cwidth + r->cxoff) {
- r->cwidth = awidth + axoff - r->cxoff;
- }
- if (aheight + ayoff > r->cheight + r->cyoff) {
- r->cheight = aheight + ayoff - r->cyoff;
- }
-
- return r;
-}
-
-static void
-usage(void) {
- printf("%s", "\n"
-"Usage: ucs2any [+d|-d] <source-name> { <mapping-file> <registry-encoding> }\n"
-"\n"
-"where\n"
-"\n"
-" +d put DEC VT100 graphics characters in the C0 range\n"
-" (default for upright charcell fonts)\n"
-"\n"
-" -d do not put DEC VT100 graphics characters in the\n"
-" C0 range (default for all other font types)\n"
-"\n"
-" <source-name> is the name of an ISO10646-1 encoded BDF file\n"
-"\n"
-" <mapping-file> is the name of a character set table like those on\n"
-" <ftp://ftp.unicode.org/Public/MAPPINGS/>\n"
-"\n"
-" <registry-encoding> are the CHARSET_REGISTRY and CHARSET_ENCODING\n"
-" field values for the font name (XLFD) of the\n"
-" target font, separated by a hyphen\n"
-"\n"
-"Example:\n"
-"\n"
-" ucs2any 6x13.bdf 8859-1.TXT iso8859-1 8859-2.TXT iso8859-2\n"
-"\n"
-"will generate the files 6x13-iso8859-1.bdf and 6x13-iso8859-2.bdf\n"
-"\n");
-}
-
-static int
-chars_compare(const void *aa, const void *bb)
-{
- int a = *(int *)aa;
- int b = *(int *)bb;
-
- return a - b;
-}
-
-/*
- * Return != 0 if "string" starts with "pattern" followed by whitespace.
- * If it does, return a pointer to the first non space char.
- */
-static const char *
-startswith(const char *string, const char *pattern)
-{
- int l = strlen(pattern);
-
- if (strlen(string) <= l) return NULL;
- if (strncmp(string, pattern, l) != 0) return NULL;
- string += l;
- if (!isspace(*string)) return NULL;
- while (isspace(*string))
- string++;
- return string;
-}
-
-int
-main(int argc, char *argv[])
-{
- int ai = 1;
- int dec_chars = -1;
- char *fsource = NULL;
- FILE *fsource_fp;
- int properties;
- int default_char;
- char *l = NULL;
- char *t = NULL;
- const char *nextc = NULL;
- char *startfont = NULL;
- char *slant = NULL;
- char *spacing = NULL;
- char *sc = NULL;
- int code = -1;
- da_t *startchar;
- da_t *my_char;
- char *fmap = NULL;
- char *registry = NULL;
- char *encoding = NULL;
- char *fontname = NULL;
- FILE *fmap_fp;
- da_t *map;
- da_t *headers;
- int nextheader = -1;
- int default_char_index = -1;
- int startproperties_index = -1;
- int fontname_index = -1;
- int charset_registry_index = -1;
- int slant_index = -1;
- int spacing_index = -1;
- int charset_encoding_index = -1;
- int fontboundingbox_index = -1;
- int target;
- int ucs;
- int i;
- int j;
- int *chars = NULL;
- bbx_t bbx;
- char *fout = NULL;
- FILE *fout_fp;
- int k;
- char *registry_encoding = NULL;
-
- my_name = argv[0];
- bbx.cheight = bbx.cxoff = bbx.cyoff = -1;
-
- startchar = da_new("startchar");
- my_char = da_new("my_char");
- map = da_new("map");
- headers = da_new("headers");
-
- if (argc < 2) {
- usage();
- exit(0);
- }
-
- /* check options */
- if (strcmp(argv[ai], "+d") == 0) {
- ai++;
- dec_chars = 1;
- } else if (strcmp(argv[ai], "-d") == 0) {
- ai++;
- dec_chars = 0;
- }
- if (ai >= argc) {
- usage();
- exit(0);
- }
-
- /* open and read source file */
- fsource = argv[ai];
- fsource_fp = fopen(fsource, "r");
- if (fsource_fp == NULL) {
- fprintf(stderr, "%s: Can't read file '%s': %s!\n", my_name,
- fsource, strerror(errno));
- exit(1);
- }
-
- /* read header */
- properties = 0;
- default_char = 0;
- while (read_line(fsource_fp, &l)) {
- if (startswith(l, "CHARS"))
- break;
- if (startswith(l, "STARTFONT")) {
- zstrcpy(&startfont, l);
- } else if (startswith(l, "_XMBDFED_INFO") ||
- startswith(l, "XFREE86_GLYPH_RANGES"))
- {
- properties--;
- } else if ((nextc = startswith(l, "DEFAULT_CHAR")) != NULL)
- {
- default_char = atoi(nextc);
- default_char_index = ++nextheader;
- da_add_str(headers, default_char_index, NULL);
- } else {
- if ((nextc = startswith(l, "STARTPROPERTIES")) != NULL)
- {
- properties = atoi(nextc);
- startproperties_index = ++nextheader;
- da_add_str(headers, startproperties_index, NULL);
- } else if ((nextc = startswith(l, "FONT")) != NULL)
- {
- char * term;
- /* slightly simplistic check ... */
- zquotedcpy(&fontname, nextc);
- if ((term = strstr(fontname, "-ISO10646-1")) == NULL) {
- fprintf(stderr,
- "%s: FONT name in '%s' is '%s' and not '*-ISO10646-1'!\n",
- my_name, fsource, fontname);
- exit(1);
- }
- *term = '\0';
- fontname_index = ++nextheader;
- da_add_str(headers, fontname_index, NULL);
- } else if ((nextc = startswith(l, "CHARSET_REGISTRY")) != NULL)
- {
- if (strcmp(nextc, "\"ISO10646\"") != 0) {
- fprintf(stderr,
- "%s: CHARSET_REGISTRY in '%s' is '%s' and not 'ISO10646'!\n",
- my_name, fsource, nextc);
- exit(1);
- }
- charset_registry_index = ++nextheader;
- da_add_str(headers, charset_registry_index, NULL);
- } else if ((nextc = startswith(l, "CHARSET_ENCODING")) != NULL)
- {
- if (strcmp(nextc, "\"1\"") != 0) {
- fprintf(stderr,
- "%s: CHARSET_ENCODING in '%s' is '%s' and not '1'!\n",
- my_name, fsource, nextc);
- exit(1);
- }
- charset_encoding_index = ++nextheader;
- da_add_str(headers, charset_encoding_index, NULL);
- } else if (startswith(l, "FONTBOUNDINGBOX")) {
- fontboundingbox_index = ++nextheader;
- da_add_str(headers, fontboundingbox_index, NULL);
- } else if ((nextc = startswith(l, "SLANT")) != NULL)
- {
- zquotedcpy(&slant, nextc);
- slant_index = ++nextheader;
- da_add_str(headers, slant_index, NULL);
- } else if ((nextc = startswith(l, "SPACING")) != NULL)
- {
- zquotedcpy(&spacing, nextc);
- zstrtoupper(spacing);
- spacing_index = ++nextheader;
- da_add_str(headers, spacing_index, NULL);
- } else if ((nextc = startswith(l, "COMMENT")) != NULL) {
- if (strncmp(nextc, "$Id: ", 5)==0) {
- char *header = NULL;
- char *id = NULL, *end = NULL;
- id = zstrdup(nextc + 5);
- end = strrchr(id, '$');
- if (end) *end = '\0';
- zstrcpy(&header, "COMMENT Derived from ");
- zstrcat(&header, id);
- zstrcat(&header, "\n");
- free(id);
- da_add_str(headers, ++nextheader, header);
- free(header);
- } else {
- da_add_str(headers, ++nextheader, l);
- }
- } else {
- da_add_str(headers, ++nextheader, l);
- }
- }
- free(l);
- }
-
- if (startfont == NULL) {
- fprintf(stderr, "%s: No STARTFONT line found in '%s'!\n",
- my_name, fsource);
- exit(1);
- }
-
- /* read characters */
- while (read_line(fsource_fp, &l)) {
- if (startswith(l, "STARTCHAR")) {
- zstrcpy(&sc, l);
- zstrcat(&sc, "\n");
- code = -1;
- } else if ((nextc = startswith(l, "ENCODING")) != NULL) {
- code = atoi(nextc);
- da_add_str(startchar, code, sc);
- da_add_str(my_char, code, "");
- } else if (strcmp(l, "ENDFONT")==0) {
- code = -1;
- zstrcpy(&sc, "STARTCHAR ???\n");
- } else {
- zstrcpy(&t, da_fetch_str(my_char, code));
- zstrcat(&t, l);
- zstrcat(&t, "\n");
- da_add_str(my_char, code, t);
- if (strcmp(l, "ENDCHAR")==0) {
- code = -1;
- zstrcpy(&sc, "STARTCHAR ???\n");
- }
- }
- free(l);
- }
-
- fclose(fsource_fp);
-
- ai++;
- while (ai < argc) {
- zstrcpy(&fmap, argv[ai]);
- i = ai + 1;
- if (i < argc) {
- char *temp = NULL;
- char * hyphen = strchr(argv[i], '-');
- if (!hyphen || strchr(hyphen+1, '-') != NULL) {
- fprintf(stderr,
- "%s: Argument registry-encoding '%s' not in expected format!\n",
- my_name, i < argc ? fmap : "");
- exit(1);
- }
- temp = zstrdup(argv[i]);
- hyphen = strchr(temp, '-');
- if (hyphen) *hyphen = 0;
- zstrcpy(®istry, temp);
- zstrcpy(&encoding, hyphen+1);
- free(temp);
- } else {
- fprintf(stderr, "map file argument \"%s\" needs a "
- "coresponding registry-encoding argument\n", fmap);
- exit(0);
- }
-
- ai++;
- ai++;
-
- /* open and read source file */
- fmap_fp = fopen(fmap, "r");
- if (fmap_fp == NULL) {
- fprintf(stderr,
- "%s: Can't read mapping file '%s': %s!\n",
- my_name, fmap, strerror(errno));
- exit(1);
- }
-
- da_clear(map);
-
- for (;read_line(fmap_fp, &l); free(l)) {
- char *p, *endp;
-
- for (p = l; isspace(p[0]); p++)
- ;
- if (p[0] == '\0' || p[0] == '#')
- continue;
- if (p[0] == '0' && (p[1] == 'x' || p[1] == 'X')) {
- target = strtol(p+2, &endp, 16);
- if (*endp == '\0') goto bad;
- p = endp;
- } else
- goto bad;
- for (; isspace(p[0]); p++)
- ;
- if (p[0] == '0' && (p[1] == 'x' || p[1] == 'X')) {
- ucs = strtol(p+2, &endp, 16);
- if (*endp == '\0') goto bad;
- p = endp;
- } else
- goto bad;
-
- if (!is_control(ucs)) {
- if (zs_true(da_fetch_str(startchar, ucs)))
- {
- da_add_int(map, target, ucs);
- } else {
- if (!((is_blockgraphics(ucs) &&
- strcmp(slant, "R") != 0) ||
- (ucs >= 0x200e &&
- ucs <= 0x200f))) {
- fprintf(stderr,
- "No glyph for character U+%04X (0x%02x) available.\n",
- ucs, target);
- }
- }
- }
- continue;
- bad:
- fprintf(stderr, "Unrecognized line in '%s':\n%s\n", fmap, l);
- }
- fclose(fmap_fp);
-
- /* add default character */
- if (!zi_true(da_fetch_int(map, 0))) {
- if (zs_true(da_fetch_str(startchar, default_char))) {
- da_add_int(map, 0, default_char);
- da_add_str(startchar, default_char,
- "STARTCHAR defaultchar\n");
- } else {
- fprintf(stderr, "%s",
- "No default character defined.\n");
- }
- }
-
- if (dec_chars == 1 ||
- (dec_chars == -1 && strcmp(slant, "R") == 0 &&
- strcmp(spacing, "C") == 0))
- {
- /* add DEC VT100 graphics characters in the range 1-31
- (as expected by some old xterm versions) */
- for (i = 0; i < decmap_size; i++) {
- if (zs_true(da_fetch_str(startchar, decmap[i])))
- {
- da_add_int(map, i + 1, decmap[i]);
- }
- }
- }
-
- /* list of characters that will be written out */
- j = da_count(map);
- if (j < 0) {
- fprintf(stderr,
- "No characters found for %s-%s.\n",
- registry, encoding);
- continue;
- }
- if (chars != NULL)
- free(chars);
- chars = zmalloc(j * sizeof(int));
- memset(chars, 0, j * sizeof(int));
- for (k = 0, i = 0; k < da_count(map) && i < da_size(map); i++) {
- if (da_fetch(map, i) != NULL)
- chars[k++] = i;
- }
- qsort(chars, j, sizeof(int), chars_compare);
-
- /* find overall font bounding box */
- bbx.cwidth = -1;
- for (i = 0; i < j; i++) {
- ucs = da_fetch_int(map, chars[i]);
- zstrcpy(&t, da_fetch_str(my_char, ucs));
- if ((nextc = startswith(t, "BBX")) != NULL
- || (nextc = strstr(t, "\nBBX")) != NULL)
- {
- char *endp;
- long w, h, x, y;
-
- if (*nextc == '\n') {
- nextc += 4;
- while (isspace(*nextc))
- nextc++;
- }
- for (;isspace(*nextc);)
- nextc++;
- w = strtol(nextc, &endp, 10);
- nextc = endp;
- if (*nextc == '\0') goto bbxbad;
- for (;isspace(*nextc);)
- nextc++;
- h = strtol(nextc, &endp, 10);
- nextc = endp;
- if (*nextc == '\0') goto bbxbad;
- for (;isspace(*nextc);)
- nextc++;
- x = strtol(nextc, &endp, 10);
- nextc = endp;
- if (*nextc == '\0') goto bbxbad;
- for (;isspace(*nextc);)
- nextc++;
- y = strtol(nextc, &endp, 10);
- if (bbx.cwidth == -1) {
- bbx.cwidth = w;
- bbx.cheight = h;
- bbx.cxoff = x;
- bbx.cyoff = y;
- } else {
- combine_bbx(bbx.cwidth, bbx.cheight,
- bbx.cxoff, bbx.cyoff,
- w, h, x, y, &bbx);
- }
- continue;
- bbxbad:
- fprintf(stderr, "Unparsable BBX found for U+%04x!\n", ucs);
- } else {
- fprintf(stderr,
- "Warning: No BBX found for U+%04X!\n",
- ucs);
- }
- }
-
- if (!registry) registry = zstrdup("");
- if (!encoding) encoding = zstrdup("");
-
- /* generate output file name */
- zstrcpy(®istry_encoding, "-");
- zstrcat(®istry_encoding, registry);
- zstrcat(®istry_encoding, "-");
- zstrcat(®istry_encoding, encoding);
-
- {
- char * p = strstr(fsource, ".bdf");
- if (p) {
- zstrcpy(&fout, fsource);
- p = strstr(fout, ".bdf");
- *p = 0;
- zstrcat(&fout, registry_encoding);
- zstrcat(&fout, ".bdf");
- } else {
- zstrcpy(&fout, fsource);
- zstrcat(&fout, registry_encoding);
- }
- }
-
- /* remove path prefix */
- zstrcpy(&t, basename(fout));
- zstrcpy(&fout, t);
-
- /* write new BDF file */
- fprintf(stderr, "Writing %d characters into file '%s'.\n",
- j, fout);
- fout_fp = fopen(fout, "w");
- if (fout_fp == NULL) {
- fprintf(stderr, "%s: Can't write file '%s': %s!\n",
- my_name, fout, strerror(errno));
- exit(1);
- }
-
- fprintf(fout_fp, "%s\n", startfont);
- fprintf(fout_fp, "%s",
- "COMMENT AUTOMATICALLY GENERATED FILE. DO NOT EDIT!\n");
- fprintf(fout_fp,
- "COMMENT Generated with 'ucs2any %s %s %s-%s'\n",
- fsource, fmap, registry, encoding);
- fprintf(fout_fp, "%s",
- "COMMENT from an ISO10646-1 encoded source BDF font.\n");
- fprintf(fout_fp, "%s",
- "COMMENT ucs2any by Ben Collver <collver1@attbi.com>, 2003, based on\n");
- fprintf(fout_fp, "%s",
- "COMMENT ucs2any.pl by Markus Kuhn <http://www.cl.cam.ac.uk/~mgk25/>, 2000.\n");
-
- for (i = 0; i <= nextheader; i++) {
- if (i == default_char_index)
- fprintf(fout_fp, "DEFAULT_CHAR %d\n", default_char);
- else if (i == startproperties_index)
- fprintf(fout_fp, "STARTPROPERTIES %d\n", properties);
- else if (i == fontname_index) {
- fprintf(fout_fp, "FONT %s%s\n", fontname, registry_encoding);
- }
- else if (i == charset_registry_index)
- fprintf(fout_fp, "CHARSET_REGISTRY \"%s\"\n", registry);
- else if (i == slant_index)
- fprintf(fout_fp, "SLANT \"%s\"\n", slant);
- else if (i == charset_encoding_index)
- fprintf(fout_fp, "CHARSET_ENCODING \"%s\"\n", encoding);
- else if (i == fontboundingbox_index)
- fprintf(fout_fp, "FONTBOUNDINGBOX %d %d %d %d\n", bbx.cwidth, bbx.cheight, bbx.cxoff, bbx.cyoff);
- else if (i == spacing_index)
- fprintf(fout_fp, "SPACING \"%s\"\n", spacing);
- else
- fprintf(fout_fp, "%s\n", da_fetch_str(headers, i));
- }
-
- fprintf(fout_fp, "CHARS %d\n", j);
-
- /* Write characters */
- for (i = 0; i < j; i++) {
- ucs = da_fetch_int(map, chars[i]);
- fprintf(fout_fp, "%s", da_fetch_str(startchar,
- ucs));
- fprintf(fout_fp, "ENCODING %d\n", chars[i]);
- fprintf(fout_fp, "%s", da_fetch_str(my_char,
- ucs));
- }
- fprintf(fout_fp, "%s", "ENDFONT\n");
- fclose(fout_fp);
- }
-
- exit(0);
-}
+/*- + * Copyright (c) 2003 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Ben Collver <collver1@attbi.com>. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +/* + * This utility allows you to generate from an ISO10646-1 encoded + * BDF font other BDF fonts in any possible encoding. This way, you can + * derive from a single ISO10646-1 master font a whole set of 8-bit + * fonts in all ISO 8859 and various other encodings. (Hopefully + * a future XFree86 release will have a similar facility built into + * the server, which can reencode ISO10646-1 on the fly, because + * storing the same fonts in many different encodings is clearly + * a waste of storage capacity). +*/ + +#include <ctype.h> +#include <errno.h> +#include <fcntl.h> +#if !defined(NEED_BASENAME) && !defined(Lynx) +#include <libgen.h> +#endif +#include <limits.h> +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +/* global variable for argv[0] */ +static const char *my_name = NULL; + +#ifdef NEED_BASENAME +static char * +basename(char *pathname) +{ + char *ptr; + + ptr = strrchr(pathname, '/'); + return ((ptr == NULL) ? pathname : &ptr[1]); +} +#endif + +/* "CLASS" "z" string and memory manipulation */ + +static void * +zmalloc(size_t size) +{ + void *r; + r = malloc(size); + if (r == NULL) { + perror(my_name); + exit(errno); + } + memset(r, 0, size); + return r; +} + +static void * +zrealloc(void *ptr, size_t size) +{ + void *temp; + temp = realloc(ptr, size); + if (temp == NULL) { + perror(my_name); + exit(errno); + } + return temp; +} + +static char * +zstrdup(const char *str) +{ + char *retval; + + if (str == NULL) { + fprintf(stderr, "%s: zstrdup(NULL)\n", my_name); + exit(1); + } + retval = strdup(str); + if (retval == NULL) { + perror(my_name); + exit(errno); + } + return retval; +} + +static void +zstrcpy(char **dest, const char *source) +{ + if (*dest != NULL) + free(*dest); + *dest = zstrdup(source); +} + +static void +zquotedcpy(char **dest, const char *source) +{ + const char *start, *end; + + if (*dest != NULL) + free(*dest); + *dest = NULL; + start = source; + if (*start == '"') { + start = source+1; + end = strrchr(start, '"'); + if (!end) return; + *dest = zmalloc(end-start+1); + strncpy(*dest, start, end-start); + (*dest)[end-start] = '\0'; + } else { + *dest = zstrdup(source); + } +} + +static void +zstrcat(char **dest, const char *source) +{ + int dest_size = 1; + int source_size; + + if (*dest != NULL) + dest_size = strlen(*dest) + 1; + source_size = strlen(source); + *dest = zrealloc(*dest, dest_size + source_size); + strcpy(*dest + dest_size - 1, source); +} + +static void +zstrtoupper(char *s) +{ + char *t; + + for (t = s; *t != '\000'; t++) + *t = toupper(*t); +} + +#define zs_true(x) (x != NULL && strcmp(x, "0") != 0) +#define zi_true(x) (x == 1) + +/* "CLASS" "dynamic array" */ + +typedef struct { + char *name; + int size; + int count; + void **values; + void *nv; +} da_t; + +static da_t * +da_new(char *name) +{ + da_t *da; + + da = zmalloc(sizeof(da_t)); + da->size = 0; + da->count = 0; + da->values = NULL; + da->nv = NULL; + da->name = NULL; + zstrcpy(&(da->name), name); + return da; +} + +static void * +da_fetch(da_t *da, int key) +{ + void *r = NULL; + + if (key >= 0 && key < da->size && da->values[key] != NULL) + r = da->values[key]; + else + if (key == -1 && da->nv != NULL) + r = da->nv; + + return r; +} + +static int +da_fetch_int(da_t *da, int key) +{ + int *t; + int r = -1; + t = da_fetch(da, key); + if (t != NULL) + r = *t; + return r; +} + +#define da_fetch_str(a,k) \ + (char *)da_fetch(a,k) + +static void +da_add(da_t *da, int key, void *value) +{ + int i = da->size; + if (key >= 0) { + if (key >= da->size) { + da->size = key + 1; + da->values = zrealloc(da->values, + da->size * sizeof(void *)); + for (; i < da->size; i++) + da->values[i] = NULL; + } + if (da->values[key] != NULL) { + free(da->values[key]); + } else { + if (value == NULL) { + if (da->count > 0) + da->count--; + } else { + da->count++; + } + } + da->values[key] = value; + } else if (key == -1) { + if (da->nv != NULL) + free(da->nv); + da->nv = value; + } +} + +static void +da_add_str(da_t *da, int key, char *value) +{ + da_add(da, key, value?zstrdup(value):NULL); +} + +static void +da_add_int(da_t *da, int key, int value) +{ + int *v; + + v = zmalloc(sizeof(int)); + *v = value; + da_add(da, key, v); +} + +#define da_count(da) (da->count) +#define da_size(da) (da->size) + +static void +da_clear(da_t *da) +{ + int i; + + for (i = da->size; i; i--) + free(da->values[i]); + if (da->values != NULL) + free(da->values); + da->size = 0; + da->count = 0; + da->values = NULL; +} + +/* "CLASS" file input */ + +#define TYPICAL_LINE_SIZE (80) + +/* read a line and strip trailing whitespace */ +static int +read_line(FILE *fp, char **buffer) +{ + int buffer_size = TYPICAL_LINE_SIZE; + int eof = 0; + int position = 0; + int c; + + *buffer = zmalloc(TYPICAL_LINE_SIZE); + (*buffer)[0] = '\0'; + + if ((c = getc(fp)) == EOF) + eof = 1; + + while (c != '\n' && !eof) { + if (position + 1 >= buffer_size) { + buffer_size = buffer_size * 2 + 1; + *buffer = zrealloc(*buffer, buffer_size); + } + (*buffer)[position++] = c; + (*buffer)[position] = '\0'; + c = getc(fp); + if (c == EOF) + eof = 1; + } + + if (eof) { + free(*buffer); + *buffer = NULL; + return 0; + } + + while (position > 1) { + position--; + if (!isspace((*buffer)[position])) + break; + (*buffer)[position] = '\0'; + } + + return 1; +} + +/* BEGIN */ + +/* +DEC VT100 graphics characters in the range 1-31 (as expected by +some old xterm versions and a few other applications) +*/ +#define decmap_size 31 +static int decmap[decmap_size] = { + 0x25C6, /* BLACK DIAMOND */ + 0x2592, /* MEDIUM SHADE */ + 0x2409, /* SYMBOL FOR HORIZONTAL TABULATION */ + 0x240C, /* SYMBOL FOR FORM FEED */ + 0x240D, /* SYMBOL FOR CARRIAGE RETURN */ + 0x240A, /* SYMBOL FOR LINE FEED */ + 0x00B0, /* DEGREE SIGN */ + 0x00B1, /* PLUS-MINUS SIGN */ + 0x2424, /* SYMBOL FOR NEWLINE */ + 0x240B, /* SYMBOL FOR VERTICAL TABULATION */ + 0x2518, /* BOX DRAWINGS LIGHT UP AND LEFT */ + 0x2510, /* BOX DRAWINGS LIGHT DOWN AND LEFT */ + 0x250C, /* BOX DRAWINGS LIGHT DOWN AND RIGHT */ + 0x2514, /* BOX DRAWINGS LIGHT UP AND RIGHT */ + 0x253C, /* BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */ + 0x23BA, /* HORIZONTAL SCAN LINE-1 (Unicode 3.2 draft) */ + 0x23BB, /* HORIZONTAL SCAN LINE-3 (Unicode 3.2 draft) */ + 0x2500, /* BOX DRAWINGS LIGHT HORIZONTAL */ + 0x23BC, /* HORIZONTAL SCAN LINE-7 (Unicode 3.2 draft) */ + 0x23BD, /* HORIZONTAL SCAN LINE-9 (Unicode 3.2 draft) */ + 0x251C, /* BOX DRAWINGS LIGHT VERTICAL AND RIGHT */ + 0x2524, /* BOX DRAWINGS LIGHT VERTICAL AND LEFT */ + 0x2534, /* BOX DRAWINGS LIGHT UP AND HORIZONTAL */ + 0x252C, /* BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */ + 0x2502, /* BOX DRAWINGS LIGHT VERTICAL */ + 0x2264, /* LESS-THAN OR EQUAL TO */ + 0x2265, /* GREATER-THAN OR EQUAL TO */ + 0x03C0, /* GREEK SMALL LETTER PI */ + 0x2260, /* NOT EQUAL TO */ + 0x00A3, /* POUND SIGN */ + 0x00B7 /* MIDDLE DOT */ +}; + +static int +is_control(int ucs) +{ + return ((ucs >= 0x00 && ucs <= 0x1f) || + (ucs >= 0x7f && ucs <= 0x9f)); +} + +static int +is_blockgraphics(int ucs) +{ + return ucs >= 0x2500 && ucs <= 0x25FF; +} + +/* calculate the bounding box that covers both provided bounding boxes */ +typedef struct { + int cwidth; + int cheight; + int cxoff; + int cyoff; +} bbx_t; + +static bbx_t * +combine_bbx(int awidth, int aheight, int axoff, int ayoff, + int cwidth, int cheight, int cxoff, int cyoff, bbx_t *r) +{ + r->cwidth = cwidth; + r->cheight = cheight; + r->cxoff = cxoff; + r->cyoff = cyoff; + + if (axoff < r->cxoff) { + r->cwidth += r->cxoff - axoff; + r->cxoff = axoff; + } + if (ayoff < r->cyoff) { + r->cheight += r->cyoff - ayoff; + r->cyoff = ayoff; + } + if (awidth + axoff > r->cwidth + r->cxoff) { + r->cwidth = awidth + axoff - r->cxoff; + } + if (aheight + ayoff > r->cheight + r->cyoff) { + r->cheight = aheight + ayoff - r->cyoff; + } + + return r; +} + +static void +usage(void) { + printf("%s", "\n" +"Usage: ucs2any [+d|-d] <source-name> { <mapping-file> <registry-encoding> }\n" +"\n" +"where\n" +"\n" +" +d put DEC VT100 graphics characters in the C0 range\n" +" (default for upright charcell fonts)\n" +"\n" +" -d do not put DEC VT100 graphics characters in the\n" +" C0 range (default for all other font types)\n" +"\n" +" <source-name> is the name of an ISO10646-1 encoded BDF file\n" +"\n" +" <mapping-file> is the name of a character set table like those on\n" +" <ftp://ftp.unicode.org/Public/MAPPINGS/>\n" +"\n" +" <registry-encoding> are the CHARSET_REGISTRY and CHARSET_ENCODING\n" +" field values for the font name (XLFD) of the\n" +" target font, separated by a hyphen\n" +"\n" +"Example:\n" +"\n" +" ucs2any 6x13.bdf 8859-1.TXT iso8859-1 8859-2.TXT iso8859-2\n" +"\n" +"will generate the files 6x13-iso8859-1.bdf and 6x13-iso8859-2.bdf\n" +"\n"); +} + +static int +chars_compare(const void *aa, const void *bb) +{ + int a = *(int *)aa; + int b = *(int *)bb; + + return a - b; +} + +/* + * Return != 0 if "string" starts with "pattern" followed by whitespace. + * If it does, return a pointer to the first non space char. + */ +static const char * +startswith(const char *string, const char *pattern) +{ + int l = strlen(pattern); + + if (strlen(string) <= l) return NULL; + if (strncmp(string, pattern, l) != 0) return NULL; + string += l; + if (!isspace(*string)) return NULL; + while (isspace(*string)) + string++; + return string; +} + +int +main(int argc, char *argv[]) +{ + int ai = 1; + int dec_chars = -1; + char *fsource = NULL; + FILE *fsource_fp; + int properties; + int default_char; + char *l = NULL; + char *t = NULL; + const char *nextc = NULL; + char *startfont = NULL; + char *slant = NULL; + char *spacing = NULL; + char *sc = NULL; + int code = -1; + da_t *startchar; + da_t *my_char; + char *fmap = NULL; + char *registry = NULL; + char *encoding = NULL; + char *fontname = NULL; + FILE *fmap_fp; + da_t *map; + da_t *headers; + int nextheader = -1; + int default_char_index = -1; + int startproperties_index = -1; + int fontname_index = -1; + int charset_registry_index = -1; + int slant_index = -1; + int spacing_index = -1; + int charset_encoding_index = -1; + int fontboundingbox_index = -1; + int target; + int ucs; + int i; + int j; + int *chars = NULL; + bbx_t bbx; + char *fout = NULL; + FILE *fout_fp; + int k; + char *registry_encoding = NULL; + + my_name = argv[0]; + bbx.cheight = bbx.cxoff = bbx.cyoff = -1; + + startchar = da_new("startchar"); + my_char = da_new("my_char"); + map = da_new("map"); + headers = da_new("headers"); + + if (argc < 2) { + usage(); + exit(0); + } + + /* check options */ + if (strcmp(argv[ai], "+d") == 0) { + ai++; + dec_chars = 1; + } else if (strcmp(argv[ai], "-d") == 0) { + ai++; + dec_chars = 0; + } + if (ai >= argc) { + usage(); + exit(0); + } + + /* open and read source file */ + fsource = argv[ai]; + fsource_fp = fopen(fsource, "r"); + if (fsource_fp == NULL) { + fprintf(stderr, "%s: Can't read file '%s': %s!\n", my_name, + fsource, strerror(errno)); + exit(1); + } + + /* read header */ + properties = 0; + default_char = 0; + while (read_line(fsource_fp, &l)) { + if (startswith(l, "CHARS")) + break; + if (startswith(l, "STARTFONT")) { + zstrcpy(&startfont, l); + } else if (startswith(l, "_XMBDFED_INFO") || + startswith(l, "XFREE86_GLYPH_RANGES")) + { + properties--; + } else if ((nextc = startswith(l, "DEFAULT_CHAR")) != NULL) + { + default_char = atoi(nextc); + default_char_index = ++nextheader; + da_add_str(headers, default_char_index, NULL); + } else { + if ((nextc = startswith(l, "STARTPROPERTIES")) != NULL) + { + properties = atoi(nextc); + startproperties_index = ++nextheader; + da_add_str(headers, startproperties_index, NULL); + } else if ((nextc = startswith(l, "FONT")) != NULL) + { + char * term; + /* slightly simplistic check ... */ + zquotedcpy(&fontname, nextc); + if ((term = strstr(fontname, "-ISO10646-1")) == NULL) { + fprintf(stderr, + "%s: FONT name in '%s' is '%s' and not '*-ISO10646-1'!\n", + my_name, fsource, fontname); + exit(1); + } + *term = '\0'; + fontname_index = ++nextheader; + da_add_str(headers, fontname_index, NULL); + } else if ((nextc = startswith(l, "CHARSET_REGISTRY")) != NULL) + { + if (strcmp(nextc, "\"ISO10646\"") != 0) { + fprintf(stderr, + "%s: CHARSET_REGISTRY in '%s' is '%s' and not 'ISO10646'!\n", + my_name, fsource, nextc); + exit(1); + } + charset_registry_index = ++nextheader; + da_add_str(headers, charset_registry_index, NULL); + } else if ((nextc = startswith(l, "CHARSET_ENCODING")) != NULL) + { + if (strcmp(nextc, "\"1\"") != 0) { + fprintf(stderr, + "%s: CHARSET_ENCODING in '%s' is '%s' and not '1'!\n", + my_name, fsource, nextc); + exit(1); + } + charset_encoding_index = ++nextheader; + da_add_str(headers, charset_encoding_index, NULL); + } else if (startswith(l, "FONTBOUNDINGBOX")) { + fontboundingbox_index = ++nextheader; + da_add_str(headers, fontboundingbox_index, NULL); + } else if ((nextc = startswith(l, "SLANT")) != NULL) + { + zquotedcpy(&slant, nextc); + slant_index = ++nextheader; + da_add_str(headers, slant_index, NULL); + } else if ((nextc = startswith(l, "SPACING")) != NULL) + { + zquotedcpy(&spacing, nextc); + zstrtoupper(spacing); + spacing_index = ++nextheader; + da_add_str(headers, spacing_index, NULL); + } else if ((nextc = startswith(l, "COMMENT")) != NULL) { + if (strncmp(nextc, "$Id: ", 5)==0) { + char *header = NULL; + char *id = NULL, *end = NULL; + id = zstrdup(nextc + 5); + end = strrchr(id, '$'); + if (end) *end = '\0'; + zstrcpy(&header, "COMMENT Derived from "); + zstrcat(&header, id); + zstrcat(&header, "\n"); + free(id); + da_add_str(headers, ++nextheader, header); + free(header); + } else { + da_add_str(headers, ++nextheader, l); + } + } else { + da_add_str(headers, ++nextheader, l); + } + } + free(l); + } + + if (startfont == NULL) { + fprintf(stderr, "%s: No STARTFONT line found in '%s'!\n", + my_name, fsource); + exit(1); + } + + /* read characters */ + while (read_line(fsource_fp, &l)) { + if (startswith(l, "STARTCHAR")) { + zstrcpy(&sc, l); + zstrcat(&sc, "\n"); + code = -1; + } else if ((nextc = startswith(l, "ENCODING")) != NULL) { + code = atoi(nextc); + da_add_str(startchar, code, sc); + da_add_str(my_char, code, ""); + } else if (strcmp(l, "ENDFONT")==0) { + code = -1; + zstrcpy(&sc, "STARTCHAR ???\n"); + } else { + zstrcpy(&t, da_fetch_str(my_char, code)); + zstrcat(&t, l); + zstrcat(&t, "\n"); + da_add_str(my_char, code, t); + if (strcmp(l, "ENDCHAR")==0) { + code = -1; + zstrcpy(&sc, "STARTCHAR ???\n"); + } + } + free(l); + } + + fclose(fsource_fp); + + ai++; + while (ai < argc) { + zstrcpy(&fmap, argv[ai]); + i = ai + 1; + if (i < argc) { + char *temp = NULL; + char * hyphen = strchr(argv[i], '-'); + if (!hyphen || strchr(hyphen+1, '-') != NULL) { + fprintf(stderr, + "%s: Argument registry-encoding '%s' not in expected format!\n", + my_name, i < argc ? fmap : ""); + exit(1); + } + temp = zstrdup(argv[i]); + hyphen = strchr(temp, '-'); + if (hyphen) *hyphen = 0; + zstrcpy(®istry, temp); + zstrcpy(&encoding, hyphen+1); + free(temp); + } else { + fprintf(stderr, "map file argument \"%s\" needs a " + "coresponding registry-encoding argument\n", fmap); + exit(0); + } + + ai++; + ai++; + + /* open and read source file */ + fmap_fp = fopen(fmap, "r"); + if (fmap_fp == NULL) { + fprintf(stderr, + "%s: Can't read mapping file '%s': %s!\n", + my_name, fmap, strerror(errno)); + exit(1); + } + + da_clear(map); + + for (;read_line(fmap_fp, &l); free(l)) { + char *p, *endp; + + for (p = l; isspace(p[0]); p++) + ; + if (p[0] == '\0' || p[0] == '#') + continue; + if (p[0] == '0' && (p[1] == 'x' || p[1] == 'X')) { + target = strtol(p+2, &endp, 16); + if (*endp == '\0') goto bad; + p = endp; + } else + goto bad; + for (; isspace(p[0]); p++) + ; + if (p[0] == '0' && (p[1] == 'x' || p[1] == 'X')) { + ucs = strtol(p+2, &endp, 16); + if (*endp == '\0') goto bad; + p = endp; + } else + goto bad; + + if (!is_control(ucs)) { + if (zs_true(da_fetch_str(startchar, ucs))) + { + da_add_int(map, target, ucs); + } else { + if (!((is_blockgraphics(ucs) && + strcmp(slant, "R") != 0) || + (ucs >= 0x200e && + ucs <= 0x200f))) { + fprintf(stderr, + "No glyph for character U+%04X (0x%02x) available.\n", + ucs, target); + } + } + } + continue; + bad: + fprintf(stderr, "Unrecognized line in '%s':\n%s\n", fmap, l); + } + fclose(fmap_fp); + + /* add default character */ + if (!zi_true(da_fetch_int(map, 0))) { + if (zs_true(da_fetch_str(startchar, default_char))) { + da_add_int(map, 0, default_char); + da_add_str(startchar, default_char, + "STARTCHAR defaultchar\n"); + } else { + fprintf(stderr, "%s", + "No default character defined.\n"); + } + } + + if (dec_chars == 1 || + (dec_chars == -1 && strcmp(slant, "R") == 0 && + strcmp(spacing, "C") == 0)) + { + /* add DEC VT100 graphics characters in the range 1-31 + (as expected by some old xterm versions) */ + for (i = 0; i < decmap_size; i++) { + if (zs_true(da_fetch_str(startchar, decmap[i]))) + { + da_add_int(map, i + 1, decmap[i]); + } + } + } + + /* list of characters that will be written out */ + j = da_count(map); + if (j < 0) { + fprintf(stderr, + "No characters found for %s-%s.\n", + registry, encoding); + continue; + } + if (chars != NULL) + free(chars); + chars = zmalloc(j * sizeof(int)); + memset(chars, 0, j * sizeof(int)); + for (k = 0, i = 0; k < da_count(map) && i < da_size(map); i++) { + if (da_fetch(map, i) != NULL) + chars[k++] = i; + } + qsort(chars, j, sizeof(int), chars_compare); + + /* find overall font bounding box */ + bbx.cwidth = -1; + for (i = 0; i < j; i++) { + ucs = da_fetch_int(map, chars[i]); + zstrcpy(&t, da_fetch_str(my_char, ucs)); + if ((nextc = startswith(t, "BBX")) != NULL + || (nextc = strstr(t, "\nBBX")) != NULL) + { + char *endp; + long w, h, x, y; + + if (*nextc == '\n') { + nextc += 4; + while (isspace(*nextc)) + nextc++; + } + for (;isspace(*nextc);) + nextc++; + w = strtol(nextc, &endp, 10); + nextc = endp; + if (*nextc == '\0') goto bbxbad; + for (;isspace(*nextc);) + nextc++; + h = strtol(nextc, &endp, 10); + nextc = endp; + if (*nextc == '\0') goto bbxbad; + for (;isspace(*nextc);) + nextc++; + x = strtol(nextc, &endp, 10); + nextc = endp; + if (*nextc == '\0') goto bbxbad; + for (;isspace(*nextc);) + nextc++; + y = strtol(nextc, &endp, 10); + if (bbx.cwidth == -1) { + bbx.cwidth = w; + bbx.cheight = h; + bbx.cxoff = x; + bbx.cyoff = y; + } else { + combine_bbx(bbx.cwidth, bbx.cheight, + bbx.cxoff, bbx.cyoff, + w, h, x, y, &bbx); + } + continue; + bbxbad: + fprintf(stderr, "Unparsable BBX found for U+%04x!\n", ucs); + } else { + fprintf(stderr, + "Warning: No BBX found for U+%04X!\n", + ucs); + } + } + + if (!registry) registry = zstrdup(""); + if (!encoding) encoding = zstrdup(""); + + /* generate output file name */ + zstrcpy(®istry_encoding, "-"); + zstrcat(®istry_encoding, registry); + zstrcat(®istry_encoding, "-"); + zstrcat(®istry_encoding, encoding); + + { + char * p = strstr(fsource, ".bdf"); + if (p) { + zstrcpy(&fout, fsource); + p = strstr(fout, ".bdf"); + *p = 0; + zstrcat(&fout, registry_encoding); + zstrcat(&fout, ".bdf"); + } else { + zstrcpy(&fout, fsource); + zstrcat(&fout, registry_encoding); + } + } + + /* remove path prefix */ + zstrcpy(&t, basename(fout)); + zstrcpy(&fout, t); + + /* write new BDF file */ + fprintf(stderr, "Writing %d characters into file '%s'.\n", + j, fout); + fout_fp = fopen(fout, "w"); + if (fout_fp == NULL) { + fprintf(stderr, "%s: Can't write file '%s': %s!\n", + my_name, fout, strerror(errno)); + exit(1); + } + + fprintf(fout_fp, "%s\n", startfont); + fprintf(fout_fp, "%s", + "COMMENT AUTOMATICALLY GENERATED FILE. DO NOT EDIT!\n"); + fprintf(fout_fp, + "COMMENT Generated with 'ucs2any %s %s %s-%s'\n", + fsource, fmap, registry, encoding); + fprintf(fout_fp, "%s", + "COMMENT from an ISO10646-1 encoded source BDF font.\n"); + fprintf(fout_fp, "%s", + "COMMENT ucs2any by Ben Collver <collver1@attbi.com>, 2003, based on\n"); + fprintf(fout_fp, "%s", + "COMMENT ucs2any.pl by Markus Kuhn <http://www.cl.cam.ac.uk/~mgk25/>, 2000.\n"); + + for (i = 0; i <= nextheader; i++) { + if (i == default_char_index) + fprintf(fout_fp, "DEFAULT_CHAR %d\n", default_char); + else if (i == startproperties_index) + fprintf(fout_fp, "STARTPROPERTIES %d\n", properties); + else if (i == fontname_index) { + fprintf(fout_fp, "FONT %s%s\n", fontname, registry_encoding); + } + else if (i == charset_registry_index) + fprintf(fout_fp, "CHARSET_REGISTRY \"%s\"\n", registry); + else if (i == slant_index) + fprintf(fout_fp, "SLANT \"%s\"\n", slant); + else if (i == charset_encoding_index) + fprintf(fout_fp, "CHARSET_ENCODING \"%s\"\n", encoding); + else if (i == fontboundingbox_index) + fprintf(fout_fp, "FONTBOUNDINGBOX %d %d %d %d\n", bbx.cwidth, bbx.cheight, bbx.cxoff, bbx.cyoff); + else if (i == spacing_index) + fprintf(fout_fp, "SPACING \"%s\"\n", spacing); + else + fprintf(fout_fp, "%s\n", da_fetch_str(headers, i)); + } + + fprintf(fout_fp, "CHARS %d\n", j); + + /* Write characters */ + for (i = 0; i < j; i++) { + ucs = da_fetch_int(map, chars[i]); + fprintf(fout_fp, "%s", da_fetch_str(startchar, + ucs)); + fprintf(fout_fp, "ENCODING %d\n", chars[i]); + fprintf(fout_fp, "%s", da_fetch_str(my_char, + ucs)); + } + fprintf(fout_fp, "%s", "ENDFONT\n"); + fclose(fout_fp); + } + + exit(0); +} |