ia64/xen-unstable

changeset 3333:5ed086e1cfd0

bitkeeper revision 1.1159.170.67 (41d291f6BNS1b72mftsOXrpMhpZ9og)

M
author kaf24@scramble.cl.cam.ac.uk
date Wed Dec 29 11:16:06 2004 +0000 (2004-12-29)
parents 56a5e9ed0e89
children 60e5912b6b28
files .rootkeys xen/Makefile xen/figlet/LICENSE xen/figlet/Makefile xen/figlet/README xen/figlet/figlet.c xen/figlet/xen.flf xen/tools/Makefile xen/tools/figlet/LICENSE xen/tools/figlet/Makefile xen/tools/figlet/README xen/tools/figlet/figlet.c xen/tools/figlet/xen.flf
line diff
     1.1 --- a/.rootkeys	Sun Dec 26 14:31:14 2004 +0000
     1.2 +++ b/.rootkeys	Wed Dec 29 11:16:06 2004 +0000
     1.3 @@ -741,11 +741,6 @@ 3ddb79bfyX7-pD6XdxY_mdNrJR20iw xen/drive
     1.4  3ddb79bf2AS7YBGwooE_Kbv7XgUqNQ xen/drivers/pci/pci.ids
     1.5  3ddb79bf7sTn85WtP_8Nc2YEmmVExQ xen/drivers/pci/quirks.c
     1.6  3ddb79bfJaf0bkE1Y67bnll8-kjEPg xen/drivers/pci/setup-res.c
     1.7 -3eb3c87fc79FXLA6R9TvdBJNTvQDwA xen/figlet/LICENSE
     1.8 -3eb3c87fPL2T_zBb0bHlbZY-ACEKRw xen/figlet/Makefile
     1.9 -3eb3c87fmKYTC5GCh_rydFakZp9ayw xen/figlet/README
    1.10 -3eb3c87fdQKQ5OBGbM-KjZfi9Us4ng xen/figlet/figlet.c
    1.11 -3eb3c87fS7DNbg0i6yhFs28UIqAK5g xen/figlet/xen.flf
    1.12  40715b2cFpte_UNWnBZW0Du7z9AhTQ xen/include/acpi/acconfig.h
    1.13  40715b2cEQWX-PaxEH30qI48K1krnQ xen/include/acpi/acdebug.h
    1.14  40715b2c_7j-oy3ZNAuqE3IFNPzArg xen/include/acpi/acdisasm.h
    1.15 @@ -891,3 +886,9 @@ 3e7f358aMtFMUVvN_Zjg5qvEJIqEBA xen/inclu
    1.16  3ddb79c0BnA20PbgmuMPSGIBljNRQw xen/include/xen/time.h
    1.17  403a3edbG9K5uZjuY19_LORbQGmFbA xen/include/xen/trace.h
    1.18  3ddb79c1-kVvF8cVa0k3ZHDdBMj01Q xen/include/xen/types.h
    1.19 +41d291f5u3J3HYViXLs3cNuFGTvzNg xen/tools/Makefile
    1.20 +3eb3c87fc79FXLA6R9TvdBJNTvQDwA xen/tools/figlet/LICENSE
    1.21 +3eb3c87fPL2T_zBb0bHlbZY-ACEKRw xen/tools/figlet/Makefile
    1.22 +3eb3c87fmKYTC5GCh_rydFakZp9ayw xen/tools/figlet/README
    1.23 +3eb3c87fdQKQ5OBGbM-KjZfi9Us4ng xen/tools/figlet/figlet.c
    1.24 +3eb3c87fS7DNbg0i6yhFs28UIqAK5g xen/tools/figlet/xen.flf
     2.1 --- a/xen/Makefile	Sun Dec 26 14:31:14 2004 +0000
     2.2 +++ b/xen/Makefile	Wed Dec 29 11:16:06 2004 +0000
     2.3 @@ -29,7 +29,7 @@ dist: $(TARGET)
     2.4  	$(MAKE) prefix=`pwd`/../dist/install dist=yes install
     2.5  
     2.6  clean:
     2.7 -	$(MAKE) -C figlet clean
     2.8 +	$(MAKE) -C tools clean
     2.9  	$(MAKE) -C common clean
    2.10  	$(MAKE) -C drivers clean
    2.11  	$(MAKE) -C arch/$(TARGET_ARCH) clean
    2.12 @@ -38,6 +38,7 @@ clean:
    2.13  
    2.14  $(TARGET): delete-unfresh-files
    2.15  	[ -e include/asm ] || ln -sf asm-$(TARGET_ARCH) include/asm
    2.16 +	$(MAKE) -C tools
    2.17  	$(MAKE) include/xen/compile.h
    2.18  	$(MAKE) -C arch/$(TARGET_ARCH) asm-offsets.s
    2.19  	$(MAKE) include/asm-$(TARGET_ARCH)/asm-offsets.h
    2.20 @@ -67,7 +68,7 @@ include/xen/compile.h:
    2.21  	@LANG=C echo \#define XEN_CHANGESET \"`bk changes -nd':D: :T: :REV: :MD5KEY:' -r+ 2>/dev/null || echo "information unavailable"`\" >> $@
    2.22  	@LANG=C echo >> $@
    2.23  	@LANG=C echo \#define XEN_BANNER \\ >> $@
    2.24 -	cd ./figlet && make && ./figlet Xen $(XEN_VERSION).$(XEN_SUBVERSION)$(XEN_EXTRAVERSION) 1>>../$@ && cd ..
    2.25 +	( cd ./tools/figlet && ./figlet Xen $(XEN_VERSION).$(XEN_SUBVERSION)$(XEN_EXTRAVERSION) 1>>../../$@ )
    2.26  	@LANG=C echo >> $@
    2.27  
    2.28  include/asm-$(TARGET_ARCH)/asm-offsets.h: arch/$(TARGET_ARCH)/asm-offsets.s
     3.1 --- a/xen/figlet/LICENSE	Sun Dec 26 14:31:14 2004 +0000
     3.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.3 @@ -1,111 +0,0 @@
     3.4 -http://www.sunsite.unc.edu/pub/Linux/LICENSES/artistic.license
     3.5 -
     3.6 -			 The "Artistic License"
     3.7 -
     3.8 -				Preamble
     3.9 -
    3.10 -The intent of this document is to state the conditions under which a
    3.11 -Package may be copied, such that the Copyright Holder maintains some
    3.12 -semblance of artistic control over the development of the package,
    3.13 -while giving the users of the package the right to use and distribute
    3.14 -the Package in a more-or-less customary fashion, plus the right to make
    3.15 -reasonable modifications.
    3.16 -
    3.17 -Definitions:
    3.18 -
    3.19 -	"Package" refers to the collection of files distributed by the
    3.20 -	Copyright Holder, and derivatives of that collection of files
    3.21 -	created through textual modification.
    3.22 -
    3.23 -	"Standard Version" refers to such a Package if it has not been
    3.24 -	modified, or has been modified in accordance with the wishes
    3.25 -	of the Copyright Holder.
    3.26 -
    3.27 -	"Copyright Holder" is whoever is named in the copyright or
    3.28 -	copyrights for the package.
    3.29 -
    3.30 -	"You" is you, if you're thinking about copying or distributing
    3.31 -	this Package.
    3.32 -
    3.33 -	"Reasonable copying fee" is whatever you can justify on the
    3.34 -	basis of media cost, duplication charges, time of people involved,
    3.35 -	and so on.  (You will not be required to justify it to the
    3.36 -	Copyright Holder, but only to the computing community at large
    3.37 -	as a market that must bear the fee.)
    3.38 -
    3.39 -	"Freely Available" means that no fee is charged for the item
    3.40 -	itself, though there may be fees involved in handling the item.
    3.41 -	It also means that recipients of the item may redistribute it
    3.42 -	under the same conditions they received it.
    3.43 -
    3.44 -1. You may make and give away verbatim copies of the source form of the
    3.45 -Standard Version of this Package without restriction, provided that you
    3.46 -duplicate all of the original copyright notices and associated disclaimers.
    3.47 -
    3.48 -2. You may apply bug fixes, portability fixes and other modifications
    3.49 -derived from the Public Domain or from the Copyright Holder.  A Package
    3.50 -modified in such a way shall still be considered the Standard Version.
    3.51 -
    3.52 -3. You may otherwise modify your copy of this Package in any way, provided
    3.53 -that you insert a prominent notice in each changed file stating how and
    3.54 -when you changed that file, and provided that you do at least ONE of the
    3.55 -following:
    3.56 -
    3.57 -    a) place your modifications in the Public Domain or otherwise make them
    3.58 -    Freely Available, such as by posting said modifications to Usenet or
    3.59 -    an equivalent medium, or placing the modifications on a major archive
    3.60 -    site such as ftp.uu.net, or by allowing the Copyright Holder to include
    3.61 -    your modifications in the Standard Version of the Package.
    3.62 -
    3.63 -    b) use the modified Package only within your corporation or organization.
    3.64 -
    3.65 -    c) rename any non-standard executables so the names do not conflict
    3.66 -    with standard executables, which must also be provided, and provide
    3.67 -    a separate manual page for each non-standard executable that clearly
    3.68 -    documents how it differs from the Standard Version.
    3.69 -
    3.70 -    d) make other distribution arrangements with the Copyright Holder.
    3.71 -
    3.72 -4. You may distribute the programs of this Package in object code or
    3.73 -executable form, provided that you do at least ONE of the following:
    3.74 -
    3.75 -    a) distribute a Standard Version of the executables and library files,
    3.76 -    together with instructions (in the manual page or equivalent) on where
    3.77 -    to get the Standard Version.
    3.78 -
    3.79 -    b) accompany the distribution with the machine-readable source of
    3.80 -    the Package with your modifications.
    3.81 -
    3.82 -    c) accompany any non-standard executables with their corresponding
    3.83 -    Standard Version executables, giving the non-standard executables
    3.84 -    non-standard names, and clearly documenting the differences in manual
    3.85 -    pages (or equivalent), together with instructions on where to get
    3.86 -    the Standard Version.
    3.87 -
    3.88 -    d) make other distribution arrangements with the Copyright Holder.
    3.89 -
    3.90 -5. You may charge a reasonable copying fee for any distribution of this
    3.91 -Package.  You may charge any fee you choose for support of this Package.
    3.92 -You may not charge a fee for this Package itself.  However,
    3.93 -you may distribute this Package in aggregate with other (possibly
    3.94 -commercial) programs as part of a larger (possibly commercial) software
    3.95 -distribution provided that you do not advertise this Package as a
    3.96 -product of your own.
    3.97 -
    3.98 -6. The scripts and library files supplied as input to or produced as
    3.99 -output from the programs of this Package do not automatically fall
   3.100 -under the copyright of this Package, but belong to whomever generated
   3.101 -them, and may be sold commercially, and may be aggregated with this
   3.102 -Package.
   3.103 -
   3.104 -7. C or perl subroutines supplied by you and linked into this Package
   3.105 -shall not be considered part of this Package.
   3.106 -
   3.107 -8. The name of the Copyright Holder may not be used to endorse or promote
   3.108 -products derived from this software without specific prior written permission.
   3.109 -
   3.110 -9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
   3.111 -IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
   3.112 -WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
   3.113 -
   3.114 -				The End
     4.1 --- a/xen/figlet/Makefile	Sun Dec 26 14:31:14 2004 +0000
     4.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.3 @@ -1,8 +0,0 @@
     4.4 -
     4.5 -CC := gcc
     4.6 -
     4.7 -figlet: figlet.c
     4.8 -	$(CC) -o $@ $<
     4.9 -
    4.10 -clean:
    4.11 -	rm -f *.o figlet
     5.1 --- a/xen/figlet/README	Sun Dec 26 14:31:14 2004 +0000
     5.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.3 @@ -1,9 +0,0 @@
     5.4 -
     5.5 -NB. This is a very hacked version of Figlet 2.2.1. 
     5.6 -
     5.7 -Don't use this outside the Xen build system. A proper version of Figlet
     5.8 -can be had from <http://www.figlet.org>.
     5.9 -
    5.10 -The distribution license is intact in the LICENSE file.
    5.11 -
    5.12 - -- Keir Fraser (2/5/2003)
     6.1 --- a/xen/figlet/figlet.c	Sun Dec 26 14:31:14 2004 +0000
     6.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.3 @@ -1,2075 +0,0 @@
     6.4 -
     6.5 -/*
     6.6 - * XXXXXXXXXXXXXXXXXXXXXXXXXXX
     6.7 - * 
     6.8 - * This is a HACKED figlet source file for Xen.
     6.9 - * 
    6.10 - * Hacked to output C octal strings for inclusion in a header file.
    6.11 - * Support for opening zipped files is removed.
    6.12 - * 
    6.13 - * Go to www.figlet.org for the unhacked Figlet sources.
    6.14 - */
    6.15 -
    6.16 -/****************************************************************************
    6.17 -
    6.18 -  FIGlet Copyright 1991, 1993, 1994 Glenn Chappell and Ian Chai
    6.19 -  FIGlet Copyright 1996, 1997, 1998, 1999, 2000, 2001 John Cowan
    6.20 -  FIGlet Copyright 2002 Christiaan Keet
    6.21 -  Portions written by Paul Burton and Christiaan Keet
    6.22 -  Internet: <info@figlet.org>
    6.23 -  FIGlet, along with the various FIGlet fonts and documentation, is
    6.24 -    copyrighted under the provisions of the Artistic License (as listed
    6.25 -    in the file "Artistic-license.txt" which is included in this package.
    6.26 -****************************************************************************/
    6.27 -
    6.28 -#define DATE "13 July 2002"
    6.29 -#define VERSION "2.2.1"
    6.30 -#define VERSION_INT 20201
    6.31 -
    6.32 -/* FIGlet (Frank, Ian & Glenn's Letters) */
    6.33 -/* by Glenn Chappell */
    6.34 -/* Apr 1991 */
    6.35 -/* Automatic file addition by Ian Chai May 1991 */
    6.36 -/* Punctuation and numbers addition by Ian Chai Jan 1993 */
    6.37 -/* Full ASCII by Glenn Chappell Feb 1993 */
    6.38 -/* Line-breaking, general rewrite by Glenn Chappell Mar 1993 */
    6.39 -/* Hard blanks by Glenn Chappell Apr 1993 */
    6.40 -/* Release 2.0 5 Aug 1993 */
    6.41 -/* Right-to-left printing, extended char set by Glenn Chappell Dec 1993 */
    6.42 -/* Control files by Glenn Chappell Feb 1994 */
    6.43 -/* Release 2.1 12 Aug 1994 */
    6.44 -/* Release 2.1.1 25 Aug 1994 */
    6.45 -/* Release 2.1.2 by Gilbert (Mad Programmer) Healton: Add -A command line 
    6.46 -   option.  Sept 8, 1996 */
    6.47 -/* Release 2.2 by John Cowan: multibyte inputs, compressed fonts,
    6.48 -   mapping tables, kerning/smushing options. */
    6.49 -/* Release 2.2.1 by Christiaan Keet: minor updates including readmes
    6.50 -   FAQs and comments. 13 July 2002. The new official FIGlet website is 
    6.51 -   http://www.figlet.org/  */
    6.52 -
    6.53 -#define DEFAULTFONTDIR "."
    6.54 -#define DEFAULTFONTFILE "xen.flf"
    6.55 -
    6.56 -#include <stdio.h>
    6.57 -#ifdef __STDC__
    6.58 -#include <stdlib.h>
    6.59 -#endif
    6.60 -#include <string.h>
    6.61 -#include <ctype.h>
    6.62 -#include <fcntl.h>     /* Needed for get_columns */
    6.63 -
    6.64 -#ifdef unix
    6.65 -#include <sys/ioctl.h> /* Needed for get_columns */
    6.66 -#endif
    6.67 -
    6.68 -
    6.69 -#define ZFILE FILE
    6.70 -#define Zopen fopen
    6.71 -#define Zgetc fgetc
    6.72 -#define Zungetc(_x,_y) fseek(_y,-1,SEEK_CUR)
    6.73 -#define Zclose fclose
    6.74 -
    6.75 -#define MYSTRLEN(x) ((int)strlen(x)) /* Eliminate ANSI problem */
    6.76 -
    6.77 -#define DIRSEP '/'
    6.78 -#define DIRSEP2 '\\'
    6.79 -/* Leave alone for Unix and MS-DOS/Windows!
    6.80 -Note: '/' also used in filename in get_columns(). */
    6.81 -
    6.82 -#define FONTFILESUFFIX ".flf"
    6.83 -#define FONTFILEMAGICNUMBER "flf2"
    6.84 -#define FSUFFIXLEN MYSTRLEN(FONTFILESUFFIX)
    6.85 -#define CONTROLFILESUFFIX ".flc"
    6.86 -#define CONTROLFILEMAGICNUMBER "flc2"   /* no longer used in 2.2 */
    6.87 -#define CSUFFIXLEN MYSTRLEN(CONTROLFILESUFFIX)
    6.88 -#define DEFAULTCOLUMNS 80
    6.89 -
    6.90 -
    6.91 -/****************************************************************************
    6.92 -
    6.93 -  Globals dealing with chars that are read
    6.94 -
    6.95 -****************************************************************************/
    6.96 -
    6.97 -typedef long inchr; /* "char" read from stdin */
    6.98 -
    6.99 -inchr *inchrline;  /* Alloc'd inchr inchrline[inchrlinelenlimit+1]; */
   6.100 -                   /* Note: not null-terminated. */
   6.101 -int inchrlinelen,inchrlinelenlimit;
   6.102 -inchr deutsch[7] = {196, 214, 220, 228, 246, 252, 223};
   6.103 -  /* Latin-1 codes for German letters, respectively:
   6.104 -     LATIN CAPITAL LETTER A WITH DIAERESIS = A-umlaut
   6.105 -     LATIN CAPITAL LETTER O WITH DIAERESIS = O-umlaut
   6.106 -     LATIN CAPITAL LETTER U WITH DIAERESIS = U-umlaut
   6.107 -     LATIN SMALL LETTER A WITH DIAERESIS = a-umlaut
   6.108 -     LATIN SMALL LETTER O WITH DIAERESIS = o-umlaut
   6.109 -     LATIN SMALL LETTER U WITH DIAERESIS = u-umlaut
   6.110 -     LATIN SMALL LETTER SHARP S = ess-zed
   6.111 -  */
   6.112 -
   6.113 -int hzmode;  /* true if reading double-bytes in HZ mode */
   6.114 -int gndbl[4]; /* gndbl[n] is true if Gn is double-byte */
   6.115 -inchr gn[4]; /* Gn character sets: ASCII, Latin-1, none, none */
   6.116 -int gl; /* 0-3 specifies left-half Gn character set */
   6.117 -int gr; /* 0-3 specifies right-half Gn character set */
   6.118 -
   6.119 -int Myargc;  /* to avoid passing around argc and argv */
   6.120 -char **Myargv;
   6.121 -
   6.122 -/****************************************************************************
   6.123 -
   6.124 -  Globals dealing with chars that are written
   6.125 -
   6.126 -****************************************************************************/
   6.127 -
   6.128 -typedef struct fc {
   6.129 -  inchr ord;
   6.130 -  char **thechar;  /* Alloc'd char thechar[charheight][]; */
   6.131 -  struct fc *next;
   6.132 -  } fcharnode;
   6.133 -
   6.134 -fcharnode *fcharlist;
   6.135 -char **currchar;
   6.136 -int currcharwidth;
   6.137 -int previouscharwidth;
   6.138 -char **outputline;    /* Alloc'd char outputline[charheight][outlinelenlimit+1]; */
   6.139 -int outlinelen;
   6.140 -
   6.141 -
   6.142 -/****************************************************************************
   6.143 -
   6.144 -  Globals dealing with command file storage
   6.145 -
   6.146 -****************************************************************************/
   6.147 -
   6.148 -typedef struct cfn {
   6.149 -  char *thename;
   6.150 -  struct cfn *next;
   6.151 -  } cfnamenode;
   6.152 -
   6.153 -cfnamenode *cfilelist,**cfilelistend;
   6.154 -
   6.155 -typedef struct cm {
   6.156 -  int thecommand;
   6.157 -  inchr rangelo;
   6.158 -  inchr rangehi;
   6.159 -  inchr offset;
   6.160 -  struct cm *next;
   6.161 -  } comnode;
   6.162 -
   6.163 -comnode *commandlist,**commandlistend;
   6.164 -
   6.165 -/****************************************************************************
   6.166 -
   6.167 -  Globals affected by command line options
   6.168 -
   6.169 -****************************************************************************/
   6.170 -
   6.171 -int deutschflag,justification,paragraphflag,right2left,multibyte;
   6.172 -int cmdinput;
   6.173 -
   6.174 -#define SM_SMUSH 128
   6.175 -#define SM_KERN 64
   6.176 -#define SM_EQUAL 1
   6.177 -#define SM_LOWLINE 2
   6.178 -#define SM_HIERARCHY 4
   6.179 -#define SM_PAIR 8
   6.180 -#define SM_BIGX 16
   6.181 -#define SM_HARDBLANK 32
   6.182 -
   6.183 -int smushmode;
   6.184 -
   6.185 -#define SMO_NO 0     /* no command-line smushmode */
   6.186 -#define SMO_YES 1    /* use command-line smushmode, ignore font smushmode */
   6.187 -#define SMO_FORCE 2  /* logically OR command-line and font smushmodes */
   6.188 -
   6.189 -int smushoverride;
   6.190 -
   6.191 -int outputwidth;
   6.192 -int outlinelenlimit;
   6.193 -char *fontdirname,*fontname;
   6.194 -
   6.195 -
   6.196 -/****************************************************************************
   6.197 -
   6.198 -  Globals read from font file
   6.199 -
   6.200 -****************************************************************************/
   6.201 -
   6.202 -char hardblank;
   6.203 -int charheight;
   6.204 -
   6.205 -
   6.206 -/****************************************************************************
   6.207 -
   6.208 -  Name of program, used in error messages
   6.209 -
   6.210 -****************************************************************************/
   6.211 -
   6.212 -char *myname;
   6.213 -
   6.214 -
   6.215 -#ifdef TIOCGWINSZ
   6.216 -/****************************************************************************
   6.217 -
   6.218 -  get_columns
   6.219 -
   6.220 -  Determines the number of columns of /dev/tty.  Returns the number of
   6.221 -  columns, or -1 if error.  May return 0 if columns unknown.
   6.222 -  Requires include files <fcntl.h> and <sys/ioctl.h>.
   6.223 -  by Glenn Chappell & Ian Chai 14 Apr 1993
   6.224 -
   6.225 -****************************************************************************/
   6.226 -
   6.227 -int get_columns()
   6.228 -{
   6.229 -  struct winsize ws;
   6.230 -  int fd,result;
   6.231 -
   6.232 -  if ((fd = open("/dev/tty",O_WRONLY))<0) return -1;
   6.233 -  result = ioctl(fd,TIOCGWINSZ,&ws);
   6.234 -  close(fd);
   6.235 -  return result?-1:ws.ws_col;
   6.236 -}
   6.237 -#endif /* ifdef TIOCGWINSZ */
   6.238 -
   6.239 -
   6.240 -/****************************************************************************
   6.241 -
   6.242 -  myalloc
   6.243 -
   6.244 -  Calls malloc.  If malloc returns error, prints error message and
   6.245 -  quits.
   6.246 -
   6.247 -****************************************************************************/
   6.248 -
   6.249 -#ifdef __STDC__
   6.250 -char *myalloc(size_t size)
   6.251 -#else
   6.252 -char *myalloc(size)
   6.253 -int size;
   6.254 -#endif
   6.255 -{
   6.256 -  char *ptr;
   6.257 -#ifndef __STDC__
   6.258 -  extern void *malloc();
   6.259 -#endif
   6.260 -
   6.261 -  if ((ptr = (char*)malloc(size))==NULL) {
   6.262 -    fprintf(stderr,"%s: Out of memory\n",myname);
   6.263 -    exit(1);
   6.264 -    }
   6.265 -  else {
   6.266 -    return ptr;
   6.267 -    }
   6.268 -}
   6.269 -
   6.270 -
   6.271 -/****************************************************************************
   6.272 -
   6.273 -  hasdirsep
   6.274 -
   6.275 -  Returns true if s1 contains a DIRSEP or DIRSEP2 character.
   6.276 -
   6.277 -****************************************************************************/
   6.278 -
   6.279 -int hasdirsep(s1)
   6.280 -char *s1;
   6.281 -{
   6.282 -  if (strchr(s1, DIRSEP)) return 1;
   6.283 -  else if (strchr(s1, DIRSEP2)) return 1;
   6.284 -  else return 0;
   6.285 -}
   6.286 -
   6.287 -/****************************************************************************
   6.288 -
   6.289 -  suffixcmp
   6.290 -
   6.291 -  Returns true if s2 is a suffix of s1; uses case-blind comparison.
   6.292 -
   6.293 -****************************************************************************/
   6.294 -
   6.295 -int suffixcmp(s1, s2)
   6.296 -char *s1;
   6.297 -char *s2;
   6.298 -{
   6.299 -  int len1, len2;
   6.300 -
   6.301 -  len1 = MYSTRLEN(s1);
   6.302 -  len2 = MYSTRLEN(s2);
   6.303 -  if (len2 > len1) return 0;
   6.304 -  s1 += len1 - len2;
   6.305 -  while (*s1) {
   6.306 -    if (tolower(*s1) != tolower(*s2)) return 0;
   6.307 -    s1++;
   6.308 -    s2++;
   6.309 -    }
   6.310 -  return 1;
   6.311 -}
   6.312 -   
   6.313 -/****************************************************************************
   6.314 -
   6.315 -  skiptoeol
   6.316 -
   6.317 -  Skips to the end of a line, given a stream.  Handles \r, \n, or \r\n.
   6.318 -
   6.319 -****************************************************************************/
   6.320 -
   6.321 -void skiptoeol(fp)
   6.322 -ZFILE *fp;
   6.323 -{
   6.324 -  int dummy;
   6.325 -
   6.326 -  while (dummy=Zgetc(fp),dummy!=EOF) {
   6.327 -    if (dummy == '\n') return;
   6.328 -    if (dummy == '\r') {
   6.329 -      dummy = Zgetc(fp);
   6.330 -      if (dummy != EOF && dummy != '\n') Zungetc(dummy,fp);
   6.331 -      return;
   6.332 -      }
   6.333 -  }
   6.334 -}
   6.335 -
   6.336 -
   6.337 -/****************************************************************************
   6.338 -
   6.339 -  myfgets
   6.340 -
   6.341 -  Local version of fgets.  Handles \r, \n, and \r\n terminators.
   6.342 -
   6.343 -****************************************************************************/
   6.344 -
   6.345 -char *myfgets(line,maxlen,fp)
   6.346 -char *line;
   6.347 -int maxlen;
   6.348 -ZFILE *fp;
   6.349 -{
   6.350 -  int c = 0;
   6.351 -  char *p;
   6.352 -
   6.353 -  p = line;
   6.354 -  while((c=Zgetc(fp))!=EOF&&maxlen) {
   6.355 -    *p++ = c;
   6.356 -    maxlen--;
   6.357 -    if (c=='\n') break;
   6.358 -    if (c=='\r') {
   6.359 -      c = Zgetc(fp);
   6.360 -      if (c != EOF && c != '\n') Zungetc(c,fp);
   6.361 -      *(p-1) = '\n';
   6.362 -      break;
   6.363 -      }
   6.364 -    }
   6.365 -  *p = 0;
   6.366 -  return (c==EOF) ? NULL : line;
   6.367 -}
   6.368 -
   6.369 -/****************************************************************************
   6.370 -
   6.371 -  usageerr
   6.372 -
   6.373 -  Prints "Usage: ...." line to the given stream.
   6.374 -
   6.375 -****************************************************************************/
   6.376 -
   6.377 -void printusage(out)
   6.378 -FILE *out;
   6.379 -{
   6.380 -  fprintf(out,
   6.381 -    "Usage: %s [ -cklnoprstvxDELNRSWX ] [ -d fontdirectory ]\n",
   6.382 -    myname);
   6.383 -  fprintf(out,
   6.384 -    "              [ -f fontfile ] [ -m smushmode ] [ -w outputwidth ]\n");
   6.385 -  fprintf(out,
   6.386 -    "              [ -C controlfile ] [ -I infocode ] [ message ]\n");
   6.387 -}
   6.388 -
   6.389 -
   6.390 -/****************************************************************************
   6.391 -
   6.392 -  printinfo
   6.393 -
   6.394 -  Prints version and copyright message, or utility information.
   6.395 -
   6.396 -****************************************************************************/
   6.397 -
   6.398 -void printinfo(infonum)
   6.399 -int infonum;
   6.400 -{
   6.401 -  switch (infonum) {
   6.402 -    case 0: /* Copyright message */
   6.403 -      printf("FIGlet Copyright 1991-2002 Glenn Chappell, Ian Chai, ");
   6.404 -      printf("John Cowan, Christiaan Keet\n");
   6.405 -      printf("Internet: <info@figlet.org> ");
   6.406 -      printf("Version: %s, date: %s\n\n",VERSION,DATE);
   6.407 -      printf("FIGlet, along with the various FIGlet fonts");
   6.408 -      printf(" and documentation, may be\n");
   6.409 -      printf("freely copied and distributed.\n\n");
   6.410 -      printf("If you use FIGlet, please send an");
   6.411 -      printf(" e-mail message to <info@figlet.org>.\n\n");
   6.412 -      printf("The latest version of FIGlet is available from the");
   6.413 -      printf(" web site,\n\thttp://www.figlet.org/\n\n");
   6.414 -      printusage(stdout);
   6.415 -      break;
   6.416 -    case 1: /* Version (integer) */
   6.417 -      printf("%d\n",VERSION_INT);
   6.418 -      break;
   6.419 -    case 2: /* Font directory */
   6.420 -      printf("%s\n",fontdirname);
   6.421 -      break;
   6.422 -    case 3: /* Font */
   6.423 -      printf("%s\n",fontname);
   6.424 -      break;
   6.425 -    case 4: /* Outputwidth */
   6.426 -      printf("%d\n",outputwidth);
   6.427 -    }
   6.428 -}
   6.429 -
   6.430 -
   6.431 -/****************************************************************************
   6.432 -
   6.433 -  readmagic
   6.434 -
   6.435 -  Reads a four-character magic string from a stream.
   6.436 -
   6.437 -****************************************************************************/
   6.438 -void readmagic(fp,magic)
   6.439 -ZFILE *fp;
   6.440 -char *magic;
   6.441 -{
   6.442 -  int i;
   6.443 -
   6.444 -  for (i=0;i<4;i++) {
   6.445 -    magic[i] = Zgetc(fp);
   6.446 -    }
   6.447 -  magic[4] = 0;
   6.448 -  }
   6.449 -  
   6.450 -/****************************************************************************
   6.451 -
   6.452 -  skipws
   6.453 -
   6.454 -  Skips whitespace characters from a stream.
   6.455 -
   6.456 -****************************************************************************/
   6.457 -void skipws(fp)
   6.458 -ZFILE *fp;
   6.459 -{
   6.460 -  int c;
   6.461 -  while (c=Zgetc(fp),isascii(c)&&isspace(c)) ;
   6.462 -  Zungetc(c,fp);
   6.463 -  }
   6.464 -
   6.465 -/****************************************************************************
   6.466 -
   6.467 -  readnum
   6.468 -
   6.469 -  Reads a number from a stream.  Accepts "0" prefix for octal and
   6.470 -  "0x" or "0X" for hexadecimal.  Ignores leading whitespace.
   6.471 -
   6.472 -****************************************************************************/
   6.473 -void readnum(fp,nump)
   6.474 -ZFILE *fp;
   6.475 -inchr *nump;
   6.476 -{
   6.477 -  int acc = 0;
   6.478 -  char *p;
   6.479 -  int c;
   6.480 -  int base;
   6.481 -  int sign = 1;
   6.482 -  char digits[] = "0123456789ABCDEF";
   6.483 -
   6.484 -  skipws(fp);
   6.485 -  c = Zgetc(fp);
   6.486 -  if (c=='-') {
   6.487 -    sign = -1;
   6.488 -    }
   6.489 -  else {
   6.490 -    Zungetc(c,fp);
   6.491 -    }
   6.492 -  c = Zgetc(fp);
   6.493 -  if (c=='0') {
   6.494 -     c = Zgetc(fp);
   6.495 -     if (c=='x'||c=='X') {
   6.496 -       base = 16;
   6.497 -       }
   6.498 -     else {
   6.499 -       base = 8;
   6.500 -       Zungetc(c,fp);
   6.501 -       }
   6.502 -    }
   6.503 -  else {
   6.504 -    base = 10;
   6.505 -    Zungetc(c,fp);
   6.506 -    }
   6.507 -
   6.508 -  while((c=Zgetc(fp))!=EOF) {
   6.509 -    c=toupper(c);
   6.510 -    p=strchr(digits,c);
   6.511 -    if (!p) {
   6.512 -      Zungetc(c,fp);
   6.513 -      *nump = acc * sign;
   6.514 -      return;
   6.515 -      }
   6.516 -    acc = acc*base+(p-digits);
   6.517 -    }
   6.518 -  *nump = acc * sign;
   6.519 -  }  
   6.520 -
   6.521 -/****************************************************************************
   6.522 -
   6.523 -  readTchar
   6.524 -
   6.525 -  Reads a control file "T" command character specification.
   6.526 -
   6.527 -  Character is a single byte, an escape sequence, or
   6.528 -  an escaped numeric.
   6.529 -
   6.530 -****************************************************************************/
   6.531 -
   6.532 -inchr readTchar(fp)
   6.533 -ZFILE *fp;
   6.534 -{
   6.535 -  inchr thechar;
   6.536 -  char next;
   6.537 -
   6.538 -  thechar=Zgetc(fp);
   6.539 -  if (thechar=='\n' || thechar=='\r') { /* Handle badly-formatted file */
   6.540 -    Zungetc(thechar,fp);
   6.541 -    return '\0';
   6.542 -    }
   6.543 -  if (thechar!='\\') return thechar;
   6.544 -  next=Zgetc(fp);
   6.545 -  switch(next) {
   6.546 -    case 'a':
   6.547 -      return 7;
   6.548 -    case 'b':
   6.549 -      return 8;
   6.550 -    case 'e':
   6.551 -      return 27;
   6.552 -    case 'f':
   6.553 -      return 12;
   6.554 -    case 'n':
   6.555 -      return 10;
   6.556 -    case 'r':
   6.557 -      return 13;
   6.558 -    case 't':
   6.559 -      return 9;
   6.560 -    case 'v':
   6.561 -      return 11;
   6.562 -    default:
   6.563 -      if (next=='-' || next=='x' || (next>='0' && next<='9')) {
   6.564 -        Zungetc(next,fp);
   6.565 -        readnum(fp,&thechar);
   6.566 -        return thechar;
   6.567 -        }
   6.568 -      return next;
   6.569 -    }
   6.570 -}
   6.571 -
   6.572 -/****************************************************************************
   6.573 -
   6.574 -  charsetname
   6.575 -
   6.576 -  Get a Tchar representing a charset name, or 0 if none available.
   6.577 -  Called in getcharset().
   6.578 -
   6.579 -****************************************************************************/
   6.580 -
   6.581 -inchr charsetname(fp)
   6.582 -ZFILE *fp;
   6.583 -{
   6.584 -  inchr result;
   6.585 -
   6.586 -  result = readTchar(fp);
   6.587 -  if (result == '\n' || result == '\r') {
   6.588 -    result = 0;
   6.589 -    Zungetc(result,fp);
   6.590 -    }
   6.591 -  return result;
   6.592 -  }
   6.593 -
   6.594 -/****************************************************************************
   6.595 -
   6.596 -  charset
   6.597 -
   6.598 -  Processes "g[0123]" character set specifier
   6.599 -  Called in readcontrol().
   6.600 -
   6.601 -****************************************************************************/
   6.602 -
   6.603 -void charset(n, controlfile)
   6.604 -int n;
   6.605 -ZFILE *controlfile;
   6.606 -{
   6.607 -  int ch;
   6.608 -
   6.609 -  skipws(controlfile);
   6.610 -  if (Zgetc(controlfile) != '9') {
   6.611 -    skiptoeol(controlfile);
   6.612 -    return;
   6.613 -    }
   6.614 -  ch = Zgetc(controlfile);
   6.615 -  if (ch == '6') {
   6.616 -     gn[n] = 65536L * charsetname(controlfile) + 0x80;
   6.617 -     gndbl[n] = 0;
   6.618 -     skiptoeol(controlfile);
   6.619 -     return;
   6.620 -     }
   6.621 -  if (ch != '4') {
   6.622 -    skiptoeol(controlfile);
   6.623 -    return;
   6.624 -    }
   6.625 -  ch = Zgetc(controlfile);
   6.626 -  if (ch == 'x') {
   6.627 -     if (Zgetc(controlfile) != '9') {
   6.628 -       skiptoeol(controlfile);
   6.629 -       return;
   6.630 -       }
   6.631 -     if (Zgetc(controlfile) != '4') {
   6.632 -       skiptoeol(controlfile);
   6.633 -       return;
   6.634 -       }
   6.635 -     skipws(controlfile);
   6.636 -     gn[n] = 65536L * charsetname(controlfile);
   6.637 -     gndbl[n] = 1;
   6.638 -     skiptoeol(controlfile);
   6.639 -     return;
   6.640 -     }
   6.641 -  Zungetc(ch, controlfile);
   6.642 -  skipws(controlfile);
   6.643 -  gn[n] = 65536L * charsetname(controlfile);
   6.644 -  gndbl[n] = 0;
   6.645 -  return;
   6.646 -  }
   6.647 -
   6.648 -/****************************************************************************
   6.649 -
   6.650 -  readcontrol
   6.651 -
   6.652 -  Allocates memory and reads in the given control file.
   6.653 -  Called in readcontrolfiles().
   6.654 -
   6.655 -****************************************************************************/
   6.656 -
   6.657 -void readcontrol(controlname)
   6.658 -char *controlname;
   6.659 -{
   6.660 -  inchr firstch,lastch;
   6.661 -  char dashcheck;
   6.662 -  inchr offset;
   6.663 -  char *controlpath,magicnum[5];
   6.664 -  int command;
   6.665 -  ZFILE *controlfile;
   6.666 -  int namelen;
   6.667 -
   6.668 -  namelen = MYSTRLEN(fontdirname);
   6.669 -  controlpath = (char*)myalloc(sizeof(char)
   6.670 -    *(namelen+MYSTRLEN(controlname)+CSUFFIXLEN+2));
   6.671 -  controlfile = NULL;
   6.672 -  if (!hasdirsep(controlname)) {
   6.673 -    strcpy(controlpath,fontdirname);
   6.674 -    controlpath[namelen] = DIRSEP;
   6.675 -    controlpath[namelen+1] = '\0';
   6.676 -    strcat(controlpath,controlname);
   6.677 -    strcat(controlpath,CONTROLFILESUFFIX);
   6.678 -    controlfile = Zopen(controlpath,"rb");
   6.679 -    }
   6.680 -  if (controlfile==NULL) {
   6.681 -    strcpy(controlpath,controlname);
   6.682 -    strcat(controlpath,CONTROLFILESUFFIX);
   6.683 -    controlfile = Zopen(controlpath,"rb");
   6.684 -    if (controlfile==NULL) {
   6.685 -      fprintf(stderr,"%s: %s: Unable to open control file\n",myname,
   6.686 -        controlpath);
   6.687 -      exit(1);
   6.688 -      }
   6.689 -    }
   6.690 -
   6.691 -  free(controlpath);
   6.692 -
   6.693 -  (*commandlistend) = (comnode*)myalloc(sizeof(comnode));
   6.694 -  (*commandlistend)->thecommand = 0; /* Begin with a freeze command */
   6.695 -  commandlistend = &(*commandlistend)->next;
   6.696 -  (*commandlistend) = NULL;
   6.697 -
   6.698 -  while(command=Zgetc(controlfile),command!=EOF) {
   6.699 -    switch (command) {
   6.700 -      case 't': /* Translate */
   6.701 -        skipws(controlfile);
   6.702 -        firstch=readTchar(controlfile);
   6.703 -        if ((dashcheck=Zgetc(controlfile))=='-') {
   6.704 -          lastch=readTchar(controlfile);
   6.705 -          }
   6.706 -        else {
   6.707 -          Zungetc(dashcheck,controlfile);
   6.708 -          lastch=firstch;
   6.709 -          }
   6.710 -        skipws(controlfile);
   6.711 -        offset=readTchar(controlfile)-firstch;
   6.712 -        skiptoeol(controlfile);
   6.713 -        (*commandlistend) = (comnode*)myalloc(sizeof(comnode));
   6.714 -        (*commandlistend)->thecommand = 1;
   6.715 -        (*commandlistend)->rangelo = firstch;
   6.716 -        (*commandlistend)->rangehi = lastch;
   6.717 -        (*commandlistend)->offset = offset;
   6.718 -        commandlistend = &(*commandlistend)->next;
   6.719 -        (*commandlistend) = NULL;
   6.720 -        break;
   6.721 -      case '0': case '1': case '2': case '3': case '4':
   6.722 -      case '5': case '6': case '7': case '8': case '9':
   6.723 -      case '-':
   6.724 -                /* Mapping table entry */
   6.725 -        Zungetc(command,controlfile);
   6.726 -        readnum(controlfile,&firstch);
   6.727 -        skipws(controlfile);
   6.728 -	readnum(controlfile,&lastch);
   6.729 -	offset=lastch-firstch;
   6.730 -        lastch=firstch;
   6.731 -        skiptoeol(controlfile);
   6.732 -        (*commandlistend) = (comnode*)myalloc(sizeof(comnode));
   6.733 -        (*commandlistend)->thecommand = 1;
   6.734 -        (*commandlistend)->rangelo = firstch;
   6.735 -        (*commandlistend)->rangehi = lastch;
   6.736 -        (*commandlistend)->offset = offset;
   6.737 -        commandlistend = &(*commandlistend)->next;
   6.738 -        (*commandlistend) = NULL;
   6.739 -        break;
   6.740 -      case 'f': /* freeze */
   6.741 -        skiptoeol(controlfile);
   6.742 -        (*commandlistend) = (comnode*)myalloc(sizeof(comnode));
   6.743 -        (*commandlistend)->thecommand = 0;
   6.744 -        commandlistend = &(*commandlistend)->next;
   6.745 -        (*commandlistend) = NULL;
   6.746 -        break;
   6.747 -      case 'b': /* DBCS input mode */
   6.748 -        multibyte = 1;
   6.749 -        break;
   6.750 -      case 'u': /* UTF-8 input mode */
   6.751 -        multibyte = 2;
   6.752 -        break;
   6.753 -      case 'h': /* HZ input mode */
   6.754 -        multibyte = 3;
   6.755 -        break;
   6.756 -      case 'j': /* Shift-JIS input mode */
   6.757 -        multibyte = 4;
   6.758 -        break;
   6.759 -      case 'g': /* ISO 2022 character set choices */
   6.760 -        multibyte = 0;
   6.761 -        skipws(controlfile);
   6.762 -        command=Zgetc(controlfile);
   6.763 -        switch (command) {
   6.764 -          case '0': /* define G0 charset */
   6.765 -            charset(0, controlfile);
   6.766 -            break;
   6.767 -          case '1': /* set G1 charset */
   6.768 -            charset(1, controlfile);
   6.769 -            break;
   6.770 -          case '2': /* set G2 charset */
   6.771 -            charset(2, controlfile);
   6.772 -            break;
   6.773 -          case '3': /* set G3 charset */
   6.774 -            charset(3, controlfile);
   6.775 -            break;
   6.776 -          case 'l': case 'L': /* define left half */
   6.777 -            skipws(controlfile);
   6.778 -            gl = Zgetc(controlfile) - '0';
   6.779 -            skiptoeol(controlfile);
   6.780 -            break;
   6.781 -          case 'r': case 'R': /* define right half */
   6.782 -            skipws(controlfile);
   6.783 -            gr = Zgetc(controlfile) - '0';
   6.784 -            skiptoeol(controlfile);
   6.785 -            break;
   6.786 -          default: /* meaningless "g" command */
   6.787 -            skiptoeol(controlfile);
   6.788 -          }
   6.789 -      case '\r': case '\n': /* blank line */
   6.790 -        break;
   6.791 -      default: /* Includes '#' */
   6.792 -        skiptoeol(controlfile);
   6.793 -      }
   6.794 -    }
   6.795 -  Zclose(controlfile);
   6.796 -}
   6.797 -
   6.798 -
   6.799 -/****************************************************************************
   6.800 -
   6.801 -  readcontrolfiles
   6.802 -
   6.803 -  Reads in the controlfiles names in cfilelist.  Uses readcontrol.
   6.804 -  Called in main().
   6.805 -
   6.806 -****************************************************************************/
   6.807 -
   6.808 -void readcontrolfiles()
   6.809 -{
   6.810 -  cfnamenode *cfnptr;
   6.811 -
   6.812 -  for (cfnptr=cfilelist;cfnptr!=NULL;cfnptr=cfnptr->next) {
   6.813 -    readcontrol(cfnptr->thename);
   6.814 -    }
   6.815 -}
   6.816 -
   6.817 -
   6.818 -/****************************************************************************
   6.819 -
   6.820 -  clearcfilelist
   6.821 -
   6.822 -  Clears the control file list.  Assumes thename does not need freeing.
   6.823 -
   6.824 -****************************************************************************/
   6.825 -
   6.826 -void clearcfilelist()
   6.827 -{
   6.828 -  cfnamenode *cfnptr1,*cfnptr2;
   6.829 -
   6.830 -  cfnptr1 = cfilelist;
   6.831 -  while (cfnptr1 != NULL) {
   6.832 -    cfnptr2 = cfnptr1->next;
   6.833 -    free(cfnptr1);
   6.834 -    cfnptr1 = cfnptr2;
   6.835 -    }
   6.836 -  cfilelist = NULL;
   6.837 -  cfilelistend = &cfilelist;
   6.838 -}
   6.839 -
   6.840 -
   6.841 -/****************************************************************************
   6.842 -
   6.843 -  getparams
   6.844 -
   6.845 -  Handles all command-line parameters.  Puts all parameters within
   6.846 -  bounds.
   6.847 -
   6.848 -****************************************************************************/
   6.849 -
   6.850 -void getparams()
   6.851 -{
   6.852 -  extern char *optarg;
   6.853 -  extern int optind;
   6.854 -  int c; /* "Should" be a char -- need int for "!= -1" test*/
   6.855 -  int columns,firstfont,infoprint;
   6.856 -  char *controlname;
   6.857 -
   6.858 -  if ((myname = strrchr(Myargv[0],DIRSEP))!=NULL) {
   6.859 -    myname++;
   6.860 -    }
   6.861 -  else {
   6.862 -    myname = Myargv[0];
   6.863 -    }
   6.864 -  fontdirname = DEFAULTFONTDIR;
   6.865 -  firstfont = 1;
   6.866 -  fontname = (char*)myalloc(sizeof(char)*(MYSTRLEN(DEFAULTFONTFILE)+1));
   6.867 -  strcpy(fontname,DEFAULTFONTFILE); /* Some systems don't have strdup() */
   6.868 -  if (suffixcmp(fontname,FONTFILESUFFIX)) {
   6.869 -    fontname[MYSTRLEN(fontname)-FSUFFIXLEN]='\0';
   6.870 -    }
   6.871 -  cfilelist = NULL;
   6.872 -  cfilelistend = &cfilelist;
   6.873 -  commandlist = NULL;
   6.874 -  commandlistend = &commandlist;
   6.875 -  smushoverride = SMO_NO;
   6.876 -  deutschflag = 0;
   6.877 -  justification = -1;
   6.878 -  right2left = -1;
   6.879 -  paragraphflag = 0;
   6.880 -  infoprint = -1;
   6.881 -  cmdinput = 0;
   6.882 -  outputwidth = DEFAULTCOLUMNS;
   6.883 -  gn[1] = 0x80;
   6.884 -  gr = 1;
   6.885 -  while ((c = getopt(Myargc,Myargv,"ADEXLRI:xlcrpntvm:w:d:f:C:NFskSWo"))!= -1) {
   6.886 -      /* Note: -F is not a legal option -- prints a special err message.  */
   6.887 -    switch (c) {
   6.888 -      case 'A':
   6.889 -        cmdinput = 1;
   6.890 -        break;
   6.891 -      case 'D':
   6.892 -        deutschflag = 1;
   6.893 -        break;
   6.894 -      case 'E':
   6.895 -        deutschflag = 0;
   6.896 -        break;
   6.897 -      case 'X':
   6.898 -        right2left = -1;
   6.899 -        break;
   6.900 -      case 'L':
   6.901 -        right2left = 0;
   6.902 -        break;
   6.903 -      case 'R':
   6.904 -        right2left = 1;
   6.905 -        break;
   6.906 -      case 'x':
   6.907 -        justification = -1;
   6.908 -        break;
   6.909 -      case 'l':
   6.910 -        justification = 0;
   6.911 -        break;
   6.912 -      case 'c':
   6.913 -        justification = 1;
   6.914 -        break;
   6.915 -      case 'r':
   6.916 -        justification = 2;
   6.917 -        break;
   6.918 -      case 'p':
   6.919 -        paragraphflag = 1;
   6.920 -        break;
   6.921 -      case 'n':
   6.922 -        paragraphflag = 0;
   6.923 -        break;
   6.924 -      case 's':
   6.925 -        smushoverride = SMO_NO;
   6.926 -        break;
   6.927 -      case 'k':
   6.928 -        smushmode = SM_KERN;
   6.929 -        smushoverride = SMO_YES;
   6.930 -        break;
   6.931 -      case 'S':
   6.932 -        smushmode = SM_SMUSH;
   6.933 -	smushoverride = SMO_FORCE;
   6.934 -        break;
   6.935 -      case 'o':
   6.936 -        smushmode = SM_SMUSH;
   6.937 -	smushoverride = SMO_YES;
   6.938 -        break;
   6.939 -      case 'W':
   6.940 -        smushmode = 0;
   6.941 -	smushoverride = SMO_YES;
   6.942 -        break;
   6.943 -      case 't':
   6.944 -#ifdef TIOCGWINSZ
   6.945 -        columns = get_columns();
   6.946 -        if (columns>0) {
   6.947 -          outputwidth = columns;
   6.948 -          }
   6.949 -#else /* ifdef TIOCGWINSZ */
   6.950 -        fprintf(stderr,
   6.951 -          "%s: \"-t\" is disabled, since ioctl is not fully implemented.\n",
   6.952 -          myname);
   6.953 -#endif /* ifdef TIOCGWINSZ */
   6.954 -        break;
   6.955 -      case 'v':
   6.956 -        infoprint = 0;
   6.957 -        break;
   6.958 -      case 'I':
   6.959 -        infoprint = atoi(optarg);
   6.960 -        break;
   6.961 -      case 'm':
   6.962 -        smushmode = atoi(optarg);
   6.963 -        if (smushmode < -1) {
   6.964 -          smushoverride = SMO_NO;
   6.965 -          break;
   6.966 -          }
   6.967 -	if (smushmode == 0) smushmode = SM_KERN;
   6.968 -	else if (smushmode == -1) smushmode = 0;
   6.969 -	else smushmode = (smushmode & 63) | SM_SMUSH;
   6.970 -	smushoverride = SMO_YES;
   6.971 -        break;
   6.972 -      case 'w':
   6.973 -        columns = atoi(optarg);
   6.974 -        if (columns>0) {
   6.975 -          outputwidth = columns;
   6.976 -          }
   6.977 -        break;
   6.978 -      case 'd':
   6.979 -        fontdirname = optarg;
   6.980 -        break;
   6.981 -      case 'f':
   6.982 -        if (firstfont) {
   6.983 -          free(fontname);
   6.984 -          firstfont = 0;
   6.985 -          }
   6.986 -        fontname = optarg;
   6.987 -        if (suffixcmp(fontname,FONTFILESUFFIX)) {
   6.988 -          fontname[MYSTRLEN(fontname)-FSUFFIXLEN] = '\0';
   6.989 -          }
   6.990 -        break;
   6.991 -      case 'C':
   6.992 -        controlname = optarg;
   6.993 -        if (suffixcmp(controlname, CONTROLFILESUFFIX)) {
   6.994 -          controlname[MYSTRLEN(controlname)-CSUFFIXLEN] = '\0';
   6.995 -          }
   6.996 -        (*cfilelistend) = (cfnamenode*)myalloc(sizeof(cfnamenode));
   6.997 -        (*cfilelistend)->thename = controlname;
   6.998 -        cfilelistend = &(*cfilelistend)->next;
   6.999 -        (*cfilelistend) = NULL;
  6.1000 -        break;
  6.1001 -      case 'N':
  6.1002 -        clearcfilelist();
  6.1003 -        multibyte = 0;
  6.1004 -        gn[0] = 0;
  6.1005 -        gn[1] = 0x80;
  6.1006 -        gn[2] = gn[3] = 0;
  6.1007 -        gndbl[0] = gndbl[1] = gndbl[2] = gndbl[3] = 0;
  6.1008 -        gl = 0;
  6.1009 -        gr = 1;
  6.1010 -        break;
  6.1011 -      case 'F': /* Not a legal option */
  6.1012 -        fprintf(stderr,"%s: illegal option -- F\n",myname);
  6.1013 -        printusage(stderr);
  6.1014 -        fprintf(stderr,"\nBecause of numerous incompatibilities, the");
  6.1015 -        fprintf(stderr," \"-F\" option has been\n");
  6.1016 -        fprintf(stderr,"removed.  It has been replaced by the \"figlist\"");
  6.1017 -        fprintf(stderr," program, which is now\n");
  6.1018 -        fprintf(stderr,"included in the basic FIGlet package.  \"figlist\"");
  6.1019 -        fprintf(stderr," is also available\n");
  6.1020 -        fprintf(stderr,"from  http://www.figlet.org/");
  6.1021 -        fprintf(stderr,"under UNIX utilities.\n");
  6.1022 -        exit(1);
  6.1023 -        break;
  6.1024 -      default:
  6.1025 -        printusage(stderr);
  6.1026 -        exit(1);
  6.1027 -      }
  6.1028 -    }
  6.1029 -  if (optind!=Myargc) cmdinput = 1; /* force cmdinput if more arguments */
  6.1030 -  outlinelenlimit = outputwidth-1;
  6.1031 -  if (infoprint>=0) {
  6.1032 -    printinfo(infoprint);
  6.1033 -    exit(0);
  6.1034 -    }
  6.1035 -}
  6.1036 -
  6.1037 -
  6.1038 -/****************************************************************************
  6.1039 -
  6.1040 -  clearline
  6.1041 -
  6.1042 -  Clears both the input (inchrline) and output (outputline) storage.
  6.1043 -
  6.1044 -****************************************************************************/
  6.1045 -
  6.1046 -void clearline()
  6.1047 -{
  6.1048 -  int i;
  6.1049 -
  6.1050 -  for (i=0;i<charheight;i++) {
  6.1051 -    outputline[i][0] = '\0';
  6.1052 -    }
  6.1053 -  outlinelen = 0;
  6.1054 -  inchrlinelen = 0;
  6.1055 -}
  6.1056 -
  6.1057 -
  6.1058 -/****************************************************************************
  6.1059 -
  6.1060 -  readfontchar
  6.1061 -
  6.1062 -  Reads a font character from the font file, and places it in a
  6.1063 -  newly-allocated entry in the list.
  6.1064 -
  6.1065 -****************************************************************************/
  6.1066 -
  6.1067 -void readfontchar(file,theord,line,maxlen)
  6.1068 -ZFILE *file;
  6.1069 -inchr theord;
  6.1070 -char *line;
  6.1071 -int maxlen;
  6.1072 -{
  6.1073 -  int row,k;
  6.1074 -  char endchar;
  6.1075 -  fcharnode *fclsave;
  6.1076 -
  6.1077 -  fclsave = fcharlist;
  6.1078 -  fcharlist = (fcharnode*)myalloc(sizeof(fcharnode));
  6.1079 -  fcharlist->ord = theord;
  6.1080 -  fcharlist->thechar = (char**)myalloc(sizeof(char*)*charheight);
  6.1081 -  fcharlist->next = fclsave;
  6.1082 -  for (row=0;row<charheight;row++) {
  6.1083 -    if (myfgets(line,maxlen+1,file)==NULL) {
  6.1084 -      line[0] = '\0';
  6.1085 -      }
  6.1086 -    k = MYSTRLEN(line)-1;
  6.1087 -    while (k>=0 && isspace(line[k])) {
  6.1088 -      k--;
  6.1089 -      }
  6.1090 -    if (k>=0) {
  6.1091 -      endchar = line[k];
  6.1092 -      while (k>=0 ? line[k]==endchar : 0) {
  6.1093 -        k--;
  6.1094 -        }
  6.1095 -      }
  6.1096 -    line[k+1] = '\0';
  6.1097 -    fcharlist->thechar[row] = (char*)myalloc(sizeof(char)*(k+2));
  6.1098 -    strcpy(fcharlist->thechar[row],line);
  6.1099 -    }
  6.1100 -}
  6.1101 -
  6.1102 -
  6.1103 -/****************************************************************************
  6.1104 -
  6.1105 -  readfont
  6.1106 -
  6.1107 -  Allocates memory, initializes variables, and reads in the font.
  6.1108 -  Called near beginning of main().
  6.1109 -
  6.1110 -****************************************************************************/
  6.1111 -
  6.1112 -void readfont()
  6.1113 -{
  6.1114 -#define MAXFIRSTLINELEN 1000
  6.1115 -  int i,row,numsread;
  6.1116 -  inchr theord;
  6.1117 -  int maxlen,cmtlines,ffright2left;
  6.1118 -  int smush,smush2;
  6.1119 -  char *fontpath,*fileline,magicnum[5];
  6.1120 -  ZFILE *fontfile;
  6.1121 -  int namelen;
  6.1122 -
  6.1123 -  namelen = MYSTRLEN(fontdirname);
  6.1124 -  fontpath = (char*)myalloc(sizeof(char)
  6.1125 -    *(namelen+MYSTRLEN(fontname)+FSUFFIXLEN+2));
  6.1126 -  fontfile = NULL;
  6.1127 -  if (!hasdirsep(fontname)) {
  6.1128 -    strcpy(fontpath,fontdirname);
  6.1129 -    fontpath[namelen] = DIRSEP;
  6.1130 -    fontpath[namelen+1] = '\0';
  6.1131 -    strcat(fontpath,fontname);
  6.1132 -    strcat(fontpath,FONTFILESUFFIX);
  6.1133 -    fontfile = Zopen(fontpath,"rb");
  6.1134 -    }
  6.1135 -  if (fontfile==NULL) {
  6.1136 -    strcpy(fontpath,fontname);
  6.1137 -    strcat(fontpath,FONTFILESUFFIX);
  6.1138 -    fontfile = Zopen(fontpath,"rb");
  6.1139 -    if (fontfile==NULL) {
  6.1140 -      fprintf(stderr,"%s: %s: Unable to open font file\n",myname,fontpath);
  6.1141 -      exit(1);
  6.1142 -      }
  6.1143 -    }
  6.1144 -
  6.1145 -  readmagic(fontfile,magicnum);
  6.1146 -  fileline = (char*)myalloc(sizeof(char)*(MAXFIRSTLINELEN+1));
  6.1147 -  if (myfgets(fileline,MAXFIRSTLINELEN+1,fontfile)==NULL) {
  6.1148 -    fileline[0] = '\0';
  6.1149 -    }
  6.1150 -  if (MYSTRLEN(fileline)>0 ? fileline[MYSTRLEN(fileline)-1]!='\n' : 0) {
  6.1151 -    skiptoeol(fontfile);
  6.1152 -    }
  6.1153 -  numsread = sscanf(fileline,"%*c%c %d %*d %d %d %d %d %d",
  6.1154 -    &hardblank,&charheight,&maxlen,&smush,&cmtlines,
  6.1155 -    &ffright2left,&smush2);
  6.1156 -  free(fileline);
  6.1157 -  if (strcmp(magicnum,FONTFILEMAGICNUMBER) || numsread<5) {
  6.1158 -    fprintf(stderr,"%s: %s: Not a FIGlet 2 font file\n",myname,fontpath);
  6.1159 -    exit(1);
  6.1160 -    }
  6.1161 -  for (i=1;i<=cmtlines;i++) {
  6.1162 -    skiptoeol(fontfile);
  6.1163 -    }
  6.1164 -  free(fontpath);
  6.1165 -
  6.1166 -  if (numsread<6) {
  6.1167 -    ffright2left = 0;
  6.1168 -    }
  6.1169 -
  6.1170 -  if (numsread<7) { /* if no smush2, decode smush into smush2 */
  6.1171 -    if (smush == 0) smush2 = SM_KERN;
  6.1172 -    else if (smush < 0) smush2 = 0;
  6.1173 -    else smush2 = (smush & 31) | SM_SMUSH;
  6.1174 -    }
  6.1175 -
  6.1176 -  if (charheight<1) {
  6.1177 -    charheight = 1;
  6.1178 -    }
  6.1179 -
  6.1180 -  if (maxlen<1) {
  6.1181 -    maxlen = 1;
  6.1182 -    }
  6.1183 -
  6.1184 -  maxlen += 100; /* Give ourselves some extra room */
  6.1185 -
  6.1186 -  if (smushoverride == SMO_NO)
  6.1187 -     smushmode = smush2;
  6.1188 -  else if (smushoverride == SMO_FORCE)
  6.1189 -     smushmode |= smush2;
  6.1190 -
  6.1191 -  if (right2left<0) {
  6.1192 -    right2left = ffright2left;
  6.1193 -    }
  6.1194 -
  6.1195 -  if (justification<0) {
  6.1196 -    justification = 2*right2left;
  6.1197 -    }
  6.1198 -
  6.1199 -  fileline = (char*)myalloc(sizeof(char)*(maxlen+1));
  6.1200 -  /* Allocate "missing" character */
  6.1201 -  fcharlist = (fcharnode*)myalloc(sizeof(fcharnode));
  6.1202 -  fcharlist->ord = 0;
  6.1203 -  fcharlist->thechar = (char**)myalloc(sizeof(char*)*charheight);
  6.1204 -  fcharlist->next = NULL;
  6.1205 -  for (row=0;row<charheight;row++) {
  6.1206 -    fcharlist->thechar[row] = (char*)myalloc(sizeof(char));
  6.1207 -    fcharlist->thechar[row][0] = '\0';
  6.1208 -    }
  6.1209 -  for (theord=' ';theord<='~';theord++) {
  6.1210 -    readfontchar(fontfile,theord,fileline,maxlen);
  6.1211 -    }
  6.1212 -  for (theord=0;theord<=6;theord++) {
  6.1213 -    readfontchar(fontfile,deutsch[theord],fileline,maxlen);
  6.1214 -    }
  6.1215 -  while (myfgets(fileline,maxlen+1,fontfile)==NULL?0:
  6.1216 -    sscanf(fileline,"%li",&theord)==1) {
  6.1217 -    readfontchar(fontfile,theord,fileline,maxlen);
  6.1218 -    }
  6.1219 -  Zclose(fontfile);
  6.1220 -  free(fileline);
  6.1221 -}
  6.1222 -
  6.1223 -
  6.1224 -/****************************************************************************
  6.1225 -
  6.1226 -  linealloc
  6.1227 -
  6.1228 -  Allocates & clears outputline, inchrline. Sets inchrlinelenlimit.
  6.1229 -  Called near beginning of main().
  6.1230 -
  6.1231 -****************************************************************************/
  6.1232 -
  6.1233 -void linealloc()
  6.1234 -{
  6.1235 -  int row; 
  6.1236 -
  6.1237 -  outputline = (char**)myalloc(sizeof(char*)*charheight);
  6.1238 -  for (row=0;row<charheight;row++) {
  6.1239 -    outputline[row] = (char*)myalloc(sizeof(char)*(outlinelenlimit+1));
  6.1240 -    }
  6.1241 -  inchrlinelenlimit = outputwidth*4+100;
  6.1242 -  inchrline = (inchr*)myalloc(sizeof(inchr)*(inchrlinelenlimit+1));
  6.1243 -  clearline();
  6.1244 -}
  6.1245 -
  6.1246 -
  6.1247 -/****************************************************************************
  6.1248 -
  6.1249 -  getletter
  6.1250 -
  6.1251 -  Sets currchar to point to the font entry for the given character.
  6.1252 -  Sets currcharwidth to the width of this character.
  6.1253 -
  6.1254 -****************************************************************************/
  6.1255 -
  6.1256 -void getletter(c)
  6.1257 -inchr c;
  6.1258 -{
  6.1259 -  fcharnode *charptr;
  6.1260 -
  6.1261 -  for (charptr=fcharlist;charptr==NULL?0:charptr->ord!=c;
  6.1262 -    charptr=charptr->next) ;
  6.1263 -  if (charptr!=NULL) {
  6.1264 -    currchar = charptr->thechar;
  6.1265 -    }
  6.1266 -  else {
  6.1267 -    for (charptr=fcharlist;charptr==NULL?0:charptr->ord!=0;
  6.1268 -      charptr=charptr->next) ;
  6.1269 -    currchar = charptr->thechar;
  6.1270 -    }
  6.1271 -  previouscharwidth = currcharwidth;
  6.1272 -  currcharwidth = MYSTRLEN(currchar[0]);
  6.1273 -}
  6.1274 -
  6.1275 -
  6.1276 -/****************************************************************************
  6.1277 -
  6.1278 -  smushem
  6.1279 -
  6.1280 -  Given 2 characters, attempts to smush them into 1, according to
  6.1281 -  smushmode.  Returns smushed character or '\0' if no smushing can be
  6.1282 -  done.
  6.1283 -
  6.1284 -  smushmode values are sum of following (all values smush blanks):
  6.1285 -    1: Smush equal chars (not hardblanks)
  6.1286 -    2: Smush '_' with any char in hierarchy below
  6.1287 -    4: hierarchy: "|", "/\", "[]", "{}", "()", "<>"
  6.1288 -       Each class in hier. can be replaced by later class.
  6.1289 -    8: [ + ] -> |, { + } -> |, ( + ) -> |
  6.1290 -   16: / + \ -> X, > + < -> X (only in that order)
  6.1291 -   32: hardblank + hardblank -> hardblank
  6.1292 -
  6.1293 -****************************************************************************/
  6.1294 -
  6.1295 -char smushem(lch,rch)
  6.1296 -char lch,rch;
  6.1297 -{
  6.1298 -  if (lch==' ') return rch;
  6.1299 -  if (rch==' ') return lch;
  6.1300 -
  6.1301 -  if (previouscharwidth<2 || currcharwidth<2) return '\0';
  6.1302 -    /* Disallows overlapping if the previous character */
  6.1303 -    /* or the current character has a width of 1 or zero. */
  6.1304 -
  6.1305 -  if ((smushmode & SM_SMUSH) == 0) return '\0';  /* kerning */
  6.1306 -
  6.1307 -  if ((smushmode & 63) == 0) {
  6.1308 -    /* This is smushing by universal overlapping. */
  6.1309 -    if (lch==' ') return rch;
  6.1310 -    if (rch==' ') return lch;
  6.1311 -    if (lch==hardblank) return rch;
  6.1312 -    if (rch==hardblank) return lch;
  6.1313 -      /* Above four lines ensure overlapping preference to */
  6.1314 -      /* visible characters. */
  6.1315 -    if (right2left==1) return lch;
  6.1316 -      /* Above line ensures that the dominant (foreground) */
  6.1317 -      /* fig-character for overlapping is the latter in the */
  6.1318 -      /* user's text, not necessarily the rightmost character. */
  6.1319 -    return rch;
  6.1320 -      /* Occurs in the absence of above exceptions. */
  6.1321 -    }
  6.1322 -  
  6.1323 -  if (smushmode & SM_HARDBLANK) {
  6.1324 -    if (lch==hardblank && rch==hardblank) return lch;
  6.1325 -    }
  6.1326 -
  6.1327 -  if (lch==hardblank || rch==hardblank) return '\0';
  6.1328 -
  6.1329 -  if (smushmode & SM_EQUAL) {
  6.1330 -    if (lch==rch) return lch;
  6.1331 -    }
  6.1332 -
  6.1333 -  if (smushmode & SM_LOWLINE) {
  6.1334 -    if (lch=='_' && strchr("|/\\[]{}()<>",rch)) return rch;
  6.1335 -    if (rch=='_' && strchr("|/\\[]{}()<>",lch)) return lch;
  6.1336 -    }
  6.1337 -
  6.1338 -  if (smushmode & SM_HIERARCHY) {
  6.1339 -    if (lch=='|' && strchr("/\\[]{}()<>",rch)) return rch;
  6.1340 -    if (rch=='|' && strchr("/\\[]{}()<>",lch)) return lch;
  6.1341 -    if (strchr("/\\",lch) && strchr("[]{}()<>",rch)) return rch;
  6.1342 -    if (strchr("/\\",rch) && strchr("[]{}()<>",lch)) return lch;
  6.1343 -    if (strchr("[]",lch) && strchr("{}()<>",rch)) return rch;
  6.1344 -    if (strchr("[]",rch) && strchr("{}()<>",lch)) return lch;
  6.1345 -    if (strchr("{}",lch) && strchr("()<>",rch)) return rch;
  6.1346 -    if (strchr("{}",rch) && strchr("()<>",lch)) return lch;
  6.1347 -    if (strchr("()",lch) && strchr("<>",rch)) return rch;
  6.1348 -    if (strchr("()",rch) && strchr("<>",lch)) return lch;
  6.1349 -    }
  6.1350 -
  6.1351 -  if (smushmode & SM_PAIR) {
  6.1352 -    if (lch=='[' && rch==']') return '|';
  6.1353 -    if (rch=='[' && lch==']') return '|';
  6.1354 -    if (lch=='{' && rch=='}') return '|';
  6.1355 -    if (rch=='{' && lch=='}') return '|';
  6.1356 -    if (lch=='(' && rch==')') return '|';
  6.1357 -    if (rch=='(' && lch==')') return '|';
  6.1358 -    }
  6.1359 -
  6.1360 -  if (smushmode & SM_BIGX) {
  6.1361 -    if (lch=='/' && rch=='\\') return '|';
  6.1362 -    if (rch=='/' && lch=='\\') return 'Y';
  6.1363 -    if (lch=='>' && rch=='<') return 'X';
  6.1364 -      /* Don't want the reverse of above to give 'X'. */
  6.1365 -    }
  6.1366 -
  6.1367 -  return '\0';
  6.1368 -}
  6.1369 -
  6.1370 -
  6.1371 -/****************************************************************************
  6.1372 -
  6.1373 -  smushamt
  6.1374 -
  6.1375 -  Returns the maximum amount that the current character can be smushed
  6.1376 -  into the current line.
  6.1377 -
  6.1378 -****************************************************************************/
  6.1379 -
  6.1380 -int smushamt()
  6.1381 -{
  6.1382 -  int maxsmush,amt;
  6.1383 -  int row,linebd,charbd;
  6.1384 -  char ch1,ch2;
  6.1385 -
  6.1386 -  if ((smushmode & (SM_SMUSH | SM_KERN)) == 0) {
  6.1387 -    return 0;
  6.1388 -    }
  6.1389 -  maxsmush = currcharwidth;
  6.1390 -  for (row=0;row<charheight;row++) {
  6.1391 -    if (right2left) {
  6.1392 -      for (charbd=MYSTRLEN(currchar[row]);
  6.1393 -        ch1=currchar[row][charbd],(charbd>0&&(!ch1||ch1==' '));charbd--) ;
  6.1394 -      for (linebd=0;ch2=outputline[row][linebd],ch2==' ';linebd++) ;
  6.1395 -      amt = linebd+currcharwidth-1-charbd;
  6.1396 -      }
  6.1397 -    else {
  6.1398 -      for (linebd=MYSTRLEN(outputline[row]);
  6.1399 -        ch1 = outputline[row][linebd],(linebd>0&&(!ch1||ch1==' '));linebd--) ;
  6.1400 -      for (charbd=0;ch2=currchar[row][charbd],ch2==' ';charbd++) ;
  6.1401 -      amt = charbd+outlinelen-1-linebd;
  6.1402 -      }
  6.1403 -    if (!ch1||ch1==' ') {
  6.1404 -      amt++;
  6.1405 -      }
  6.1406 -    else if (ch2) {
  6.1407 -      if (smushem(ch1,ch2)!='\0') {
  6.1408 -        amt++;
  6.1409 -        }
  6.1410 -      }
  6.1411 -    if (amt<maxsmush) {
  6.1412 -      maxsmush = amt;
  6.1413 -      }
  6.1414 -    }
  6.1415 -  return maxsmush;
  6.1416 -}
  6.1417 -
  6.1418 -
  6.1419 -/****************************************************************************
  6.1420 -
  6.1421 -  addchar
  6.1422 -
  6.1423 -  Attempts to add the given character onto the end of the current line.
  6.1424 -  Returns 1 if this can be done, 0 otherwise.
  6.1425 -
  6.1426 -****************************************************************************/
  6.1427 -
  6.1428 -int addchar(c)
  6.1429 -inchr c;
  6.1430 -{
  6.1431 -  int smushamount,row,k;
  6.1432 -  char *templine;
  6.1433 -
  6.1434 -  getletter(c);
  6.1435 -  smushamount = smushamt();
  6.1436 -  if (outlinelen+currcharwidth-smushamount>outlinelenlimit
  6.1437 -      ||inchrlinelen+1>inchrlinelenlimit) {
  6.1438 -    return 0;
  6.1439 -    }
  6.1440 -
  6.1441 -  templine = (char*)myalloc(sizeof(char)*(outlinelenlimit+1));
  6.1442 -  for (row=0;row<charheight;row++) {
  6.1443 -    if (right2left) {
  6.1444 -      strcpy(templine,currchar[row]);
  6.1445 -      for (k=0;k<smushamount;k++) {
  6.1446 -        templine[currcharwidth-smushamount+k] =
  6.1447 -          smushem(templine[currcharwidth-smushamount+k],outputline[row][k]);
  6.1448 -        }
  6.1449 -      strcat(templine,outputline[row]+smushamount);
  6.1450 -      strcpy(outputline[row],templine);
  6.1451 -      }
  6.1452 -    else {
  6.1453 -      for (k=0;k<smushamount;k++) {
  6.1454 -        outputline[row][outlinelen-smushamount+k] =
  6.1455 -          smushem(outputline[row][outlinelen-smushamount+k],currchar[row][k]);
  6.1456 -        }
  6.1457 -      strcat(outputline[row],currchar[row]+smushamount);
  6.1458 -      }
  6.1459 -    }
  6.1460 -  free(templine);
  6.1461 -  outlinelen = MYSTRLEN(outputline[0]);
  6.1462 -  inchrline[inchrlinelen++] = c;
  6.1463 -  return 1;
  6.1464 -}
  6.1465 -
  6.1466 -
  6.1467 -/****************************************************************************
  6.1468 -
  6.1469 -  putstring
  6.1470 -
  6.1471 -  Prints out the given null-terminated string, substituting blanks
  6.1472 -  for hardblanks.  If outputwidth is 1, prints the entire string;
  6.1473 -  otherwise prints at most outputwidth-1 characters.  Prints a newline
  6.1474 -  at the end of the string.  The string is left-justified, centered or
  6.1475 -  right-justified (taking outputwidth as the screen width) if
  6.1476 -  justification is 0, 1 or 2, respectively.
  6.1477 -
  6.1478 -****************************************************************************/
  6.1479 -
  6.1480 -static int nr_chars=0;
  6.1481 -static void myputchar(unsigned char c)
  6.1482 -{
  6.1483 -    static int startline = 1;
  6.1484 -
  6.1485 -    if ( startline )
  6.1486 -    {
  6.1487 -        startline = 0;
  6.1488 -        myputchar(' ');
  6.1489 -    }
  6.1490 -
  6.1491 -    putc(c, stderr);
  6.1492 -
  6.1493 -    if ( nr_chars == 0 )
  6.1494 -        putchar('"');
  6.1495 -
  6.1496 -    putchar('\\');
  6.1497 -    putchar('0' + ((c>>6)&7));
  6.1498 -    putchar('0' + ((c>>3)&7));
  6.1499 -    putchar('0' + ((c>>0)&7));
  6.1500 -
  6.1501 -    if ( c == '\n' )
  6.1502 -        startline = 1;
  6.1503 -
  6.1504 -    if ( ++nr_chars == 18 ) 
  6.1505 -    {
  6.1506 -        nr_chars = 0;
  6.1507 -        putchar('"');
  6.1508 -        putchar(' ');
  6.1509 -        putchar('\\');
  6.1510 -        putchar('\n');
  6.1511 -    }
  6.1512 -}
  6.1513 -
  6.1514 -void putstring(string)
  6.1515 -char *string;
  6.1516 -{
  6.1517 -  int i,len;
  6.1518 -
  6.1519 -  len = MYSTRLEN(string);
  6.1520 -  if (outputwidth>1) {
  6.1521 -    if (len>outputwidth-1) {
  6.1522 -      len = outputwidth-1;
  6.1523 -      }
  6.1524 -    if (justification>0) {
  6.1525 -      for (i=1;(3-justification)*i+len+justification-2<outputwidth;i++) {
  6.1526 -        myputchar(' ');
  6.1527 -        }
  6.1528 -      }
  6.1529 -    }
  6.1530 -  for (i=0;i<len;i++) {
  6.1531 -    myputchar(string[i]==hardblank?' ':string[i]);
  6.1532 -    }
  6.1533 -  myputchar('\n');
  6.1534 -}
  6.1535 -
  6.1536 -
  6.1537 -/****************************************************************************
  6.1538 -
  6.1539 -  printline
  6.1540 -
  6.1541 -  Prints outputline using putstring, then clears the current line.
  6.1542 -
  6.1543 -****************************************************************************/
  6.1544 -
  6.1545 -void printline()
  6.1546 -{
  6.1547 -  int i;
  6.1548 -
  6.1549 -  for (i=0;i<charheight;i++) {
  6.1550 -    putstring(outputline[i]);
  6.1551 -    }
  6.1552 -  clearline();
  6.1553 -}
  6.1554 -
  6.1555 -
  6.1556 -/****************************************************************************
  6.1557 -
  6.1558 -  splitline
  6.1559 -
  6.1560 -  Splits inchrline at the last word break (bunch of consecutive blanks).
  6.1561 -  Makes a new line out of the first part and prints it using
  6.1562 -  printline.  Makes a new line out of the second part and returns.
  6.1563 -
  6.1564 -****************************************************************************/
  6.1565 -
  6.1566 -void splitline()
  6.1567 -{
  6.1568 -  int i,gotspace,lastspace,len1,len2;
  6.1569 -  inchr *part1,*part2;
  6.1570 -
  6.1571 -  part1 = (inchr*)myalloc(sizeof(inchr)*(inchrlinelen+1));
  6.1572 -  part2 = (inchr*)myalloc(sizeof(inchr)*(inchrlinelen+1));
  6.1573 -  gotspace = 0;
  6.1574 -  for (i=inchrlinelen-1;i>=0;i--) {
  6.1575 -    if (!gotspace && inchrline[i]==' ') {
  6.1576 -      gotspace = 1;
  6.1577 -      lastspace = i;
  6.1578 -      }
  6.1579 -    if (gotspace && inchrline[i]!=' ') {
  6.1580 -      break;
  6.1581 -      }
  6.1582 -    }
  6.1583 -  len1 = i+1;
  6.1584 -  len2 = inchrlinelen-lastspace-1;
  6.1585 -  for (i=0;i<len1;i++) {
  6.1586 -    part1[i] = inchrline[i];
  6.1587 -    }
  6.1588 -  for (i=0;i<len2;i++) {
  6.1589 -    part2[i] = inchrline[lastspace+1+i];
  6.1590 -    }
  6.1591 -  clearline();
  6.1592 -  for (i=0;i<len1;i++) {
  6.1593 -    addchar(part1[i]);
  6.1594 -    }
  6.1595 -  printline();
  6.1596 -  for (i=0;i<len2;i++) {
  6.1597 -    addchar(part2[i]);
  6.1598 -    }
  6.1599 -  free(part1);
  6.1600 -  free(part2);
  6.1601 -}
  6.1602 -
  6.1603 -
  6.1604 -/****************************************************************************
  6.1605 -
  6.1606 -  handlemapping
  6.1607 -
  6.1608 -  Given an input character (type inchr), executes re-mapping commands
  6.1609 -  read from control files.  Returns re-mapped character (inchr).
  6.1610 -
  6.1611 -****************************************************************************/
  6.1612 -
  6.1613 -inchr handlemapping(c)
  6.1614 -inchr c;
  6.1615 -{
  6.1616 -  comnode *cmptr;
  6.1617 -
  6.1618 -  cmptr=commandlist;
  6.1619 -  while (cmptr!=NULL) {
  6.1620 -    if (cmptr->thecommand ?
  6.1621 -      (c >= cmptr->rangelo && c <= cmptr->rangehi) : 0) {
  6.1622 -      c += cmptr->offset;
  6.1623 -      while(cmptr!=NULL ? cmptr->thecommand : 0) {
  6.1624 -        cmptr=cmptr->next;
  6.1625 -        }
  6.1626 -      }
  6.1627 -    else {
  6.1628 -      cmptr=cmptr->next;
  6.1629 -      }
  6.1630 -    }
  6.1631 -  return c;
  6.1632 -}
  6.1633 -
  6.1634 -/****************************************************************************
  6.1635 -
  6.1636 -  Agetchar
  6.1637 -
  6.1638 -  Replacement to getchar().
  6.1639 -  Acts exactly like getchar if -A is NOT specified,
  6.1640 -  else obtains input from All remaining command line words.
  6.1641 -
  6.1642 -****************************************************************************/
  6.1643 -
  6.1644 -int Agetchar()
  6.1645 -{
  6.1646 -    extern int optind;		/* current argv[] element under study */
  6.1647 -    static AgetMode = 0;	/* >= 0 for displacement into argv[n], <0 EOF */
  6.1648 -    char   *arg;		/* pointer to active character */
  6.1649 -    int    c;			/* current character */
  6.1650 -
  6.1651 -    if ( ! cmdinput )		/* is -A active? */
  6.1652 -	return( getchar() );	/* no: return stdin character */
  6.1653 -
  6.1654 -    if ( AgetMode < 0 || optind >= Myargc )		/* EOF is sticky: */
  6.1655 -	return( EOF );		/* **ensure it now and forever more */
  6.1656 -
  6.1657 -    /* find next character */
  6.1658 -    arg = Myargv[optind];		/* pointer to active arg */
  6.1659 -    c = arg[AgetMode++]&0xFF;	/* get appropriate char of arg */
  6.1660 -
  6.1661 -    if ( ! c )			/* at '\0' that terminates word? */
  6.1662 -    {   /* at end of word: return ' ' if normal word, '\n' if empty */
  6.1663 -	c = ' ';		/* suppose normal word and return blank */
  6.1664 -	if ( AgetMode == 1 )	/* if ran out in very 1st char, force \n */
  6.1665 -	    c = '\n';		/* (allows "hello '' world" to do \n at '') */
  6.1666 -	AgetMode = 0;		/* return to char 0 in NEXT word */
  6.1667 -	if ( ++optind >= Myargc )	/* run up word count and check if at "EOF" */
  6.1668 -	{   /* just ran out of arguments */
  6.1669 -	    c = EOF;		/* return EOF */
  6.1670 -	    AgetMode = -1;	/* ensure all future returns return EOF */
  6.1671 -	}
  6.1672 -    }
  6.1673 -
  6.1674 -    return( c );		/* return appropriate character */
  6.1675 -
  6.1676 -}	/* end: Agetchar() */
  6.1677 -
  6.1678 -
  6.1679 -/****************************************************************************
  6.1680 -
  6.1681 -  iso2022
  6.1682 -
  6.1683 -  Called by getinchr.  Interprets ISO 2022 sequences
  6.1684 -
  6.1685 -******************************************************************************/
  6.1686 -
  6.1687 -inchr iso2022()
  6.1688 -{
  6.1689 -  inchr ch;
  6.1690 -  inchr ch2;
  6.1691 -  int save_gl;
  6.1692 -  int save_gr;
  6.1693 -
  6.1694 -  ch = Agetchar();
  6.1695 -  if (ch == EOF) return ch;
  6.1696 -  if (ch == 27) ch = Agetchar() + 0x100; /* ESC x */
  6.1697 -  if (ch == 0x100 + '$') ch = Agetchar() + 0x200; /* ESC $ x */
  6.1698 -  switch (ch) {
  6.1699 -    case 14: /* invoke G0 into GL */
  6.1700 -      gl = 0;
  6.1701 -      return iso2022();
  6.1702 -    case 15: /* invoke G1 into GL */
  6.1703 -      gl = 1;
  6.1704 -      return iso2022();
  6.1705 -    case 142: case 'N' + 0x100: /* invoke G2 into GL for next char */
  6.1706 -      save_gl = gl; save_gr = gr;
  6.1707 -      gl = gr = 2;
  6.1708 -      ch = iso2022();
  6.1709 -      gl = save_gl; gr = save_gr;
  6.1710 -      return ch;
  6.1711 -    case 143: case 'O' + 0x100: /* invoke G3 into GL for next char */
  6.1712 -      save_gl = gl; save_gr = gr;
  6.1713 -      gl = gr = 3;
  6.1714 -      ch = iso2022();
  6.1715 -      gl = save_gl; gr = save_gr;
  6.1716 -      return ch;
  6.1717 -    case 'n' + 0x100: /* invoke G2 into GL */
  6.1718 -      gl = 2;
  6.1719 -      return iso2022();
  6.1720 -    case 'o' + 0x100: /* invoke G3 into GL */
  6.1721 -      gl = 3;
  6.1722 -      return iso2022();
  6.1723 -    case '~' + 0x100: /* invoke G1 into GR */
  6.1724 -      gr = 1;
  6.1725 -      return iso2022();
  6.1726 -    case '}' + 0x100: /* invoke G2 into GR */
  6.1727 -      gr = 2;
  6.1728 -      return iso2022();
  6.1729 -    case '|' + 0x100: /* invoke G3 into GR */
  6.1730 -      gr = 3;
  6.1731 -      return iso2022();
  6.1732 -    case '(' + 0x100: /* set G0 to 94-char set */
  6.1733 -      ch = Agetchar();
  6.1734 -      if (ch == 'B') ch = 0; /* ASCII */
  6.1735 -      gn[0] = ch << 16;
  6.1736 -      gndbl[0] = 0;
  6.1737 -      return iso2022();
  6.1738 -    case ')' + 0x100: /* set G1 to 94-char set */
  6.1739 -      ch = Agetchar();
  6.1740 -      if (ch == 'B') ch = 0;
  6.1741 -      gn[1] = ch << 16;
  6.1742 -      gndbl[1] = 0;
  6.1743 -      return iso2022();
  6.1744 -    case '*' + 0x100: /* set G2 to 94-char set */
  6.1745 -      ch = Agetchar();
  6.1746 -      if (ch == 'B') ch = 0;
  6.1747 -      gn[2] = ch << 16;
  6.1748 -      gndbl[2] = 0;
  6.1749 -      return iso2022();
  6.1750 -    case '+' + 0x100: /* set G3 to 94-char set */
  6.1751 -      ch = Agetchar();
  6.1752 -      if (ch == 'B') ch = 0;
  6.1753 -      gn[3] = ch << 16;
  6.1754 -      gndbl[3] = 0;
  6.1755 -      return iso2022();
  6.1756 -    case '-' + 0x100: /* set G1 to 96-char set */
  6.1757 -      ch = Agetchar();
  6.1758 -      if (ch == 'A') ch = 0; /* Latin-1 top half */
  6.1759 -      gn[1] = (ch << 16) | 0x80;
  6.1760 -      gndbl[1] = 0;
  6.1761 -      return iso2022();
  6.1762 -    case '.' + 0x100: /* set G2 to 96-char set */
  6.1763 -      ch = Agetchar();
  6.1764 -      if (ch == 'A') ch = 0;
  6.1765 -      gn[2] = (ch << 16) | 0x80;
  6.1766 -      gndbl[2] = 0;
  6.1767 -      return iso2022();
  6.1768 -    case '/' + 0x100: /* set G3 to 96-char set */
  6.1769 -      ch = Agetchar();
  6.1770 -      if (ch == 'A') ch = 0;
  6.1771 -      gn[3] = (ch << 16) | 0x80;
  6.1772 -      gndbl[3] = 0;
  6.1773 -      return iso2022();
  6.1774 -    case '(' + 0x200: /* set G0 to 94 x 94 char set */
  6.1775 -      ch = Agetchar();
  6.1776 -      gn[0] = ch << 16;
  6.1777 -      gndbl[0] = 1;
  6.1778 -      return iso2022();
  6.1779 -    case ')' + 0x200: /* set G1 to 94 x 94 char set */
  6.1780 -      ch = Agetchar();
  6.1781 -      gn[1] = ch << 16;
  6.1782 -      gndbl[1] = 1;
  6.1783 -      return iso2022();
  6.1784 -    case '*' + 0x200: /* set G2 to 94 x 94 char set */
  6.1785 -      ch = Agetchar();
  6.1786 -      gn[2] = ch << 16;
  6.1787 -      gndbl[2] = 1;
  6.1788 -      return iso2022();
  6.1789 -    case '+' + 0x200: /* set G3 to 94 x 94 char set */
  6.1790 -      ch = Agetchar();
  6.1791 -      gn[3] = ch << 16;
  6.1792 -      gndbl[3] = 1;
  6.1793 -      return iso2022();
  6.1794 -    default:
  6.1795 -      if (ch & 0x200) { /* set G0 to 94 x 94 char set (deprecated) */
  6.1796 -        gn[0] = (ch & ~0x200) << 16;
  6.1797 -        gndbl[0] = 1;
  6.1798 -        return iso2022();
  6.1799 -        }
  6.1800 -      }
  6.1801 -
  6.1802 -  if (ch >= 0x21 && ch <= 0x7E) { /* process GL */
  6.1803 -    if (gndbl[gl]) {
  6.1804 -      ch2 = Agetchar();
  6.1805 -      return gn[gl] | (ch << 8) | ch2;
  6.1806 -      }
  6.1807 -    else return gn[gl] | ch;
  6.1808 -    }
  6.1809 -  else if (ch >= 0xA0 && ch <= 0xFF) { /* process GR */
  6.1810 -    if (gndbl[gr]) {
  6.1811 -      ch2 = Agetchar();
  6.1812 -      return gn[gr] | (ch << 8) | ch2;
  6.1813 -      }
  6.1814 -    else return gn[gr] | (ch & ~0x80);
  6.1815 -    }
  6.1816 -  else return ch;
  6.1817 -  }
  6.1818 -
  6.1819 -/****************************************************************************
  6.1820 -
  6.1821 -  ungetinchr
  6.1822 -
  6.1823 -  Called by main.  Pushes back an "inchr" to be read by getinchr
  6.1824 -  on the next call.
  6.1825 -
  6.1826 -******************************************************************************/
  6.1827 -inchr getinchr_buffer;
  6.1828 -int getinchr_flag;
  6.1829 -
  6.1830 -inchr ungetinchr(c)
  6.1831 -inchr c;
  6.1832 -{
  6.1833 -  getinchr_buffer = c;
  6.1834 -  getinchr_flag = 1;
  6.1835 -  return c;
  6.1836 -}
  6.1837 -
  6.1838 -/*****************************************************************************
  6.1839 -
  6.1840 -  getinchr
  6.1841 -
  6.1842 -  Called by main.  Processes multibyte characters.  Invokes Agetchar.
  6.1843 -  If multibyte = 0, ISO 2022 mode (see iso2022 routine).
  6.1844 -  If multibyte = 1,  double-byte mode (0x00-0x7f bytes are characters,
  6.1845 -    0x80-0xFF bytes are first byte of a double-byte character).
  6.1846 -  If multibyte = 2, Unicode UTF-8 mode (0x00-0x7F bytes are characters,
  6.1847 -    0x80-0xBF bytes are nonfirst byte of a multibyte character,
  6.1848 -    0xC0-0xFD bytes are first byte of a multibyte character,
  6.1849 -    0xFE-0xFF bytes are errors (all errors return code 0x0080)).
  6.1850 -  If multibyte = 3, HZ mode ("~{" starts double-byte mode, "}~" ends it,
  6.1851 -    "~~" is a tilde, "~x" for all other x is ignored).
  6.1852 -  If multibyte = 4, Shift-JIS mode (0x80-0x9F and 0xE0-0xEF are first byte
  6.1853 -    of a double-byte character, all other bytes are characters).
  6.1854 - 
  6.1855 -
  6.1856 -*****************************************************************************/
  6.1857 -
  6.1858 -inchr getinchr()
  6.1859 -{
  6.1860 -  int ch, ch2, ch3, ch4, ch5, ch6;
  6.1861 -
  6.1862 -  if (getinchr_flag) {
  6.1863 -    getinchr_flag = 0;
  6.1864 -    return getinchr_buffer;
  6.1865 -    }
  6.1866 -
  6.1867 -  switch(multibyte) {
  6.1868 -    case 0: /* single-byte */
  6.1869 -      return iso2022();
  6.1870 -   case 1: /* DBCS */
  6.1871 -     ch = Agetchar();
  6.1872 -     if ((ch >= 0x80 && ch <= 0x9F) ||
  6.1873 -         (ch >= 0xE0 && ch <= 0xEF)) {
  6.1874 -       ch = (ch << 8) + Agetchar();
  6.1875 -       }
  6.1876 -     return ch;
  6.1877 -   case 2: /* UTF-8 */
  6.1878 -      ch = Agetchar();
  6.1879 -      if (ch < 0x80) return ch;  /* handles EOF, too */
  6.1880 -      if (ch < 0xC0 || ch > 0xFD)
  6.1881 -        return 0x0080;  /* illegal first character */
  6.1882 -      ch2 = Agetchar() & 0x3F;
  6.1883 -      if (ch < 0xE0) return ((ch & 0x1F) << 6) + ch2;
  6.1884 -      ch3 = Agetchar() & 0x3F;
  6.1885 -      if (ch < 0xF0)
  6.1886 -        return ((ch & 0x0F) << 12) + (ch2 << 6) + ch3;
  6.1887 -      ch4 = Agetchar() & 0x3F;
  6.1888 -      if (ch < 0xF8)
  6.1889 -        return ((ch & 0x07) << 18) + (ch2 << 12) + (ch3 << 6) + ch4;
  6.1890 -      ch5 = Agetchar() & 0x3F;
  6.1891 -      if (ch < 0xFC)
  6.1892 -        return ((ch & 0x03) << 24) + (ch2 << 18) + (ch3 << 12) +
  6.1893 -          (ch4 << 6) + ch5;
  6.1894 -      ch6 = Agetchar() & 0x3F;
  6.1895 -      return ((ch & 0x01) << 30) + (ch2 << 24) + (ch3 << 18) +
  6.1896 -        (ch4 << 12) + (ch5 << 6) + ch6;
  6.1897 -   case 3: /* HZ */
  6.1898 -     ch = Agetchar();
  6.1899 -     if (ch == EOF) return ch;
  6.1900 -     if (hzmode) {
  6.1901 -       ch = (ch << 8) + Agetchar();
  6.1902 -       if (ch == ('}' << 8) + '~') {
  6.1903 -         hzmode = 0;
  6.1904 -         return getinchr();
  6.1905 -         }
  6.1906 -       return ch;
  6.1907 -       }
  6.1908 -     else if (ch == '~') {
  6.1909 -       ch = Agetchar();
  6.1910 -       if (ch == '{') {
  6.1911 -          hzmode = 1;
  6.1912 -          return getinchr();
  6.1913 -          }
  6.1914 -      else if (ch == '~') {
  6.1915 -        return ch;
  6.1916 -        }
  6.1917 -      else {
  6.1918 -        return getinchr();
  6.1919 -        }
  6.1920 -      }
  6.1921 -     else return ch;
  6.1922 -   case 4: /* Shift-JIS */
  6.1923 -     ch = Agetchar();
  6.1924 -     if ((ch >= 0x80 && ch <= 0x9F) ||
  6.1925 -         (ch >= 0xE0 && ch <= 0xEF)) {
  6.1926 -       ch = (ch << 8) + Agetchar();
  6.1927 -       }
  6.1928 -     return ch;
  6.1929 -   default:
  6.1930 -     return 0x80;
  6.1931 -    }
  6.1932 -  }
  6.1933 -
  6.1934 -/****************************************************************************
  6.1935 -
  6.1936 -  main
  6.1937 -
  6.1938 -  The main program, of course.
  6.1939 -  Reads characters 1 by 1 from stdin, and makes lines out of them using
  6.1940 -  addchar. Handles line breaking, (which accounts for most of the
  6.1941 -  complexity in this function).
  6.1942 -
  6.1943 -****************************************************************************/
  6.1944 -
  6.1945 -int main(argc,argv)
  6.1946 -int argc;
  6.1947 -char *argv[];
  6.1948 -{
  6.1949 -  inchr c,c2;
  6.1950 -  int i;
  6.1951 -  int last_was_eol_flag;
  6.1952 -/*---------------------------------------------------------------------------
  6.1953 -  wordbreakmode:
  6.1954 -    -1: /^$/ and blanks are to be absorbed (when line break was forced
  6.1955 -      by a blank or character larger than outlinelenlimit)
  6.1956 -    0: /^ *$/ and blanks are not to be absorbed
  6.1957 -    1: /[^ ]$/ no word break yet
  6.1958 -    2: /[^ ]  *$/
  6.1959 -    3: /[^ ]$/ had a word break
  6.1960 ----------------------------------------------------------------------------*/
  6.1961 -  int wordbreakmode;
  6.1962 -  int char_not_added;
  6.1963 -
  6.1964 -  Myargc = argc;
  6.1965 -  Myargv = argv;
  6.1966 -  getparams();
  6.1967 -  readcontrolfiles();
  6.1968 -  readfont();
  6.1969 -  linealloc();
  6.1970 -
  6.1971 -  wordbreakmode = 0;
  6.1972 -  last_was_eol_flag = 0;
  6.1973 -
  6.1974 -  while ((c = getinchr())!=EOF) {
  6.1975 -
  6.1976 -    if (c=='\n'&&paragraphflag&&!last_was_eol_flag) {
  6.1977 -      ungetinchr(c2 = getinchr());
  6.1978 -      c = ((isascii(c2)&&isspace(c2))?'\n':' ');
  6.1979 -      }
  6.1980 -    last_was_eol_flag = (isascii(c)&&isspace(c)&&c!='\t'&&c!=' ');
  6.1981 -
  6.1982 -    if (deutschflag) {
  6.1983 -      if (c>='[' && c<=']') {
  6.1984 -        c = deutsch[c-'['];
  6.1985 -        }
  6.1986 -      else if (c >='{' && c <= '~') {
  6.1987 -        c = deutsch[c-'{'+3];
  6.1988 -        }
  6.1989 -      }
  6.1990 -
  6.1991 -    c = handlemapping(c);
  6.1992 -
  6.1993 -    if (isascii(c)&&isspace(c)) {
  6.1994 -      c = (c=='\t'||c==' ') ? ' ' : '\n';
  6.1995 -      }
  6.1996 -
  6.1997 -    if ((c>'\0' && c<' ' && c!='\n') || c==127) continue;
  6.1998 -
  6.1999 -/*
  6.2000 -  Note: The following code is complex and thoroughly tested.
  6.2001 -  Be careful when modifying!
  6.2002 -*/
  6.2003 -
  6.2004 -    do {
  6.2005 -      char_not_added = 0;
  6.2006 -
  6.2007 -      if (wordbreakmode== -1) {
  6.2008 -        if (c==' ') {
  6.2009 -          break;
  6.2010 -          }
  6.2011 -        else if (c=='\n') {
  6.2012 -          wordbreakmode = 0;
  6.2013 -          break;
  6.2014 -          }
  6.2015 -        wordbreakmode = 0;
  6.2016 -        }
  6.2017 -
  6.2018 -      if (c=='\n') {
  6.2019 -        printline();
  6.2020 -        wordbreakmode = 0;
  6.2021 -        }
  6.2022 -
  6.2023 -      else if (addchar(c)) {
  6.2024 -        if (c!=' ') {
  6.2025 -          wordbreakmode = (wordbreakmode>=2)?3:1;
  6.2026 -          }
  6.2027 -        else {
  6.2028 -          wordbreakmode = (wordbreakmode>0)?2:0;
  6.2029 -          }
  6.2030 -        }
  6.2031 -
  6.2032 -      else if (outlinelen==0) {
  6.2033 -        for (i=0;i<charheight;i++) {
  6.2034 -          if (right2left && outputwidth>1) {
  6.2035 -            putstring(currchar[i]+MYSTRLEN(currchar[i])-outlinelenlimit);
  6.2036 -            }
  6.2037 -          else {
  6.2038 -            putstring(currchar[i]);
  6.2039 -            }
  6.2040 -          }
  6.2041 -        wordbreakmode = -1;
  6.2042 -        }
  6.2043 -
  6.2044 -      else if (c==' ') {
  6.2045 -        if (wordbreakmode==2) {
  6.2046 -          splitline();
  6.2047 -          }
  6.2048 -        else {
  6.2049 -          printline();
  6.2050 -          }
  6.2051 -        wordbreakmode = -1;
  6.2052 -        }
  6.2053 -
  6.2054 -      else {
  6.2055 -        if (wordbreakmode>=2) {
  6.2056 -          splitline();
  6.2057 -          }
  6.2058 -        else {
  6.2059 -          printline();
  6.2060 -          }
  6.2061 -        wordbreakmode = (wordbreakmode==3)?1:0;
  6.2062 -        char_not_added = 1;
  6.2063 -        }
  6.2064 -
  6.2065 -      } while (char_not_added);
  6.2066 -    }
  6.2067 -
  6.2068 -  if (outlinelen!=0) {
  6.2069 -    printline();
  6.2070 -    }
  6.2071 -
  6.2072 -  /* XXX Xen hack -- finish off the C macro output */
  6.2073 -  if ( nr_chars != 0 )
  6.2074 -      putchar('"');
  6.2075 -  putchar('\n');
  6.2076 -
  6.2077 -  exit(0);
  6.2078 -}
     7.1 --- a/xen/figlet/xen.flf	Sun Dec 26 14:31:14 2004 +0000
     7.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.3 @@ -1,2230 +0,0 @@
     7.4 -flf2a$ 6 5 16 15 14 0 24463 229
     7.5 -Standard by Glenn Chappell & Ian Chai 3/93 -- based on Frank's .sig
     7.6 -Includes ISO Latin-1
     7.7 -figlet release 2.1 -- 12 Aug 1994
     7.8 -Modified for figlet 2.2 by John Cowan <cowan@ccil.org>
     7.9 -  to add Latin-{2,3,4,5} support (Unicode U+0100-017F).
    7.10 -Permission is hereby given to modify this font, as long as the
    7.11 -modifier's name is placed on a comment line.
    7.12 -
    7.13 -Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
    7.14 -supported by FIGlet and FIGWin.  May also be slightly modified for better use
    7.15 -of new full-width/kern/smush alternatives, but default output is NOT changed.
    7.16 -
    7.17 -Modified by Keir Fraser <kaf24@cl.cam.ac.uk> for Xen build system.
    7.18 -
    7.19 - $@
    7.20 - $@
    7.21 - $@
    7.22 - $@
    7.23 - $@
    7.24 - $@@
    7.25 -  _ @
    7.26 - | |@
    7.27 - | |@
    7.28 - |_|@
    7.29 - (_)@
    7.30 -    @@
    7.31 -  _ _ @
    7.32 - ( | )@
    7.33 -  V V @
    7.34 -   $  @
    7.35 -   $  @
    7.36 -      @@
    7.37 -    _  _   @
    7.38 -  _| || |_ @
    7.39 - |_  ..  _|@
    7.40 - |_      _|@
    7.41 -   |_||_|  @
    7.42 -           @@
    7.43 -   _  @
    7.44 -  | | @
    7.45 - / __)@
    7.46 - \__ \@
    7.47 - (   /@
    7.48 -  |_| @@
    7.49 -  _  __@
    7.50 - (_)/ /@
    7.51 -   / / @
    7.52 -  / /_ @
    7.53 - /_/(_)@
    7.54 -       @@
    7.55 -   ___   @
    7.56 -  ( _ )  @
    7.57 -  / _ \/\@
    7.58 - | (_>  <@
    7.59 -  \___/\/@
    7.60 -         @@
    7.61 -  _ @
    7.62 - ( )@
    7.63 - |/ @
    7.64 -  $ @
    7.65 -  $ @
    7.66 -    @@
    7.67 -   __@
    7.68 -  / /@
    7.69 - | | @
    7.70 - | | @
    7.71 - | | @
    7.72 -  \_\@@
    7.73 - __  @
    7.74 - \ \ @
    7.75 -  | |@
    7.76 -  | |@
    7.77 -  | |@
    7.78 - /_/ @@
    7.79 -       @
    7.80 - __/\__@
    7.81 - \    /@
    7.82 - /_  _\@
    7.83 -   \/  @
    7.84 -       @@
    7.85 -        @
    7.86 -    _   @
    7.87 -  _| |_ @
    7.88 - |_   _|@
    7.89 -   |_|  @
    7.90 -        @@
    7.91 -    @
    7.92 -    @
    7.93 -    @
    7.94 -  _ @
    7.95 - ( )@
    7.96 - |/ @@
    7.97 -     @
    7.98 -     @
    7.99 -  __ @
   7.100 - |__|@
   7.101 -  $  @
   7.102 -     @@
   7.103 -    @
   7.104 -    @
   7.105 -    @
   7.106 -  _ @
   7.107 - (_)@
   7.108 -    @@
   7.109 -     __@
   7.110 -    / /@
   7.111 -   / / @
   7.112 -  / /  @
   7.113 - /_/   @
   7.114 -       @@
   7.115 -   ___  @
   7.116 -  / _ \ @
   7.117 - | | | |@
   7.118 - | |_| |@
   7.119 -  \___/ @
   7.120 -        @@
   7.121 -  _ @
   7.122 - / |@
   7.123 - | |@
   7.124 - | |@
   7.125 - |_|@
   7.126 -    @@
   7.127 -  ____  @
   7.128 - |___ \ @
   7.129 -   __) |@
   7.130 -  / __/ @
   7.131 - |_____|@
   7.132 -        @@
   7.133 -  _____ @
   7.134 - |___ / @
   7.135 -   |_ \ @
   7.136 -  ___) |@
   7.137 - |____/ @
   7.138 -        @@
   7.139 -  _  _   @
   7.140 - | || |  @
   7.141 - | || |_ @
   7.142 - |__   _|@
   7.143 -    |_|  @
   7.144 -         @@
   7.145 -  ____  @
   7.146 - | ___| @
   7.147 - |___ \ @
   7.148 -  ___) |@
   7.149 - |____/ @
   7.150 -        @@
   7.151 -   __   @
   7.152 -  / /_  @
   7.153 - | '_ \ @
   7.154 - | (_) |@
   7.155 -  \___/ @
   7.156 -        @@
   7.157 -  _____ @
   7.158 - |___  |@
   7.159 -    / / @
   7.160 -   / /  @
   7.161 -  /_/   @
   7.162 -        @@
   7.163 -   ___  @
   7.164 -  ( _ ) @
   7.165 -  / _ \ @
   7.166 - | (_) |@
   7.167 -  \___/ @
   7.168 -        @@
   7.169 -   ___  @
   7.170 -  / _ \ @
   7.171 - | (_) |@
   7.172 -  \__, |@
   7.173 -    /_/ @
   7.174 -        @@
   7.175 -    @
   7.176 -  _ @
   7.177 - (_)@
   7.178 -  _ @
   7.179 - (_)@
   7.180 -    @@
   7.181 -    @
   7.182 -  _ @
   7.183 - (_)@
   7.184 -  _ @
   7.185 - ( )@
   7.186 - |/ @@
   7.187 -   __@
   7.188 -  / /@
   7.189 - / / @
   7.190 - \ \ @
   7.191 -  \_\@
   7.192 -     @@
   7.193 -        @
   7.194 -  _____ @
   7.195 - |_____|@
   7.196 - |_____|@
   7.197 -    $   @
   7.198 -        @@
   7.199 - __  @
   7.200 - \ \ @
   7.201 -  \ \@
   7.202 -  / /@
   7.203 - /_/ @
   7.204 -     @@
   7.205 -  ___ @
   7.206 - |__ \@
   7.207 -   / /@
   7.208 -  |_| @
   7.209 -  (_) @
   7.210 -      @@
   7.211 -    ____  @
   7.212 -   / __ \ @
   7.213 -  / / _` |@
   7.214 - | | (_| |@
   7.215 -  \ \__,_|@
   7.216 -   \____/ @@
   7.217 -     _    @
   7.218 -    / \   @
   7.219 -   / _ \  @
   7.220 -  / ___ \ @
   7.221 - /_/   \_\@
   7.222 -          @@
   7.223 -  ____  @
   7.224 - | __ ) @
   7.225 - |  _ \ @
   7.226 - | |_) |@
   7.227 - |____/ @
   7.228 -        @@
   7.229 -   ____ @
   7.230 -  / ___|@
   7.231 - | |    @
   7.232 - | |___ @
   7.233 -  \____|@
   7.234 -        @@
   7.235 -  ____  @
   7.236 - |  _ \ @
   7.237 - | | | |@
   7.238 - | |_| |@
   7.239 - |____/ @
   7.240 -        @@
   7.241 -  _____ @
   7.242 - | ____|@
   7.243 - |  _|  @
   7.244 - | |___ @
   7.245 - |_____|@
   7.246 -        @@
   7.247 -  _____ @
   7.248 - |  ___|@
   7.249 - | |_   @
   7.250 - |  _|  @
   7.251 - |_|    @
   7.252 -        @@
   7.253 -   ____ @
   7.254 -  / ___|@
   7.255 - | |  _ @
   7.256 - | |_| |@
   7.257 -  \____|@
   7.258 -        @@
   7.259 -  _   _ @
   7.260 - | | | |@
   7.261 - | |_| |@
   7.262 - |  _  |@
   7.263 - |_| |_|@
   7.264 -        @@
   7.265 -  ___ @
   7.266 - |_ _|@
   7.267 -  | | @
   7.268 -  | | @
   7.269 - |___|@
   7.270 -      @@
   7.271 -      _ @
   7.272 -     | |@
   7.273 -  _  | |@
   7.274 - | |_| |@
   7.275 -  \___/ @
   7.276 -        @@
   7.277 -  _  __@
   7.278 - | |/ /@
   7.279 - | ' / @
   7.280 - | . \ @
   7.281 - |_|\_\@
   7.282 -       @@
   7.283 -  _     @
   7.284 - | |    @
   7.285 - | |    @
   7.286 - | |___ @
   7.287 - |_____|@
   7.288 -        @@
   7.289 -  __  __ @
   7.290 - |  \/  |@
   7.291 - | |\/| |@
   7.292 - | |  | |@
   7.293 - |_|  |_|@
   7.294 -         @@
   7.295 -  _   _ @
   7.296 - | \ | |@
   7.297 - |  \| |@
   7.298 - | |\  |@
   7.299 - |_| \_|@
   7.300 -        @@
   7.301 -   ___  @
   7.302 -  / _ \ @
   7.303 - | | | |@
   7.304 - | |_| |@
   7.305 -  \___/ @
   7.306 -        @@
   7.307 -  ____  @
   7.308 - |  _ \ @
   7.309 - | |_) |@
   7.310 - |  __/ @
   7.311 - |_|    @
   7.312 -        @@
   7.313 -   ___  @
   7.314 -  / _ \ @
   7.315 - | | | |@
   7.316 - | |_| |@
   7.317 -  \__\_\@
   7.318 -        @@
   7.319 -  ____  @
   7.320 - |  _ \ @
   7.321 - | |_) |@
   7.322 - |  _ < @
   7.323 - |_| \_\@
   7.324 -        @@
   7.325 -  ____  @
   7.326 - / ___| @
   7.327 - \___ \ @
   7.328 -  ___) |@
   7.329 - |____/ @
   7.330 -        @@
   7.331 -  _____ @
   7.332 - |_   _|@
   7.333 -   | |  @
   7.334 -   | |  @
   7.335 -   |_|  @
   7.336 -        @@
   7.337 -  _   _ @
   7.338 - | | | |@
   7.339 - | | | |@
   7.340 - | |_| |@
   7.341 -  \___/ @
   7.342 -        @@
   7.343 - __     __@
   7.344 - \ \   / /@
   7.345 -  \ \ / / @
   7.346 -   \ V /  @
   7.347 -    \_/   @
   7.348 -          @@
   7.349 - __        __@
   7.350 - \ \      / /@
   7.351 -  \ \ /\ / / @
   7.352 -   \ V  V /  @
   7.353 -    \_/\_/   @
   7.354 -             @@
   7.355 - __  __@
   7.356 - \ \/ /@
   7.357 -  \  / @
   7.358 -  /  \ @
   7.359 - /_/\_\@
   7.360 -       @@
   7.361 - __   __@
   7.362 - \ \ / /@
   7.363 -  \ V / @
   7.364 -   | |  @
   7.365 -   |_|  @
   7.366 -        @@
   7.367 -  _____@
   7.368 - |__  /@
   7.369 -   / / @
   7.370 -  / /_ @
   7.371 - /____|@
   7.372 -       @@
   7.373 -  __ @
   7.374 - | _|@
   7.375 - | | @
   7.376 - | | @
   7.377 - | | @
   7.378 - |__|@@
   7.379 - __    @
   7.380 - \ \   @
   7.381 -  \ \  @
   7.382 -   \ \ @
   7.383 -    \_\@
   7.384 -       @@
   7.385 -  __ @
   7.386 - |_ |@
   7.387 -  | |@
   7.388 -  | |@
   7.389 -  | |@
   7.390 - |__|@@
   7.391 -  /\ @
   7.392 - |/\|@
   7.393 -   $ @
   7.394 -   $ @
   7.395 -   $ @
   7.396 -     @@
   7.397 -        @
   7.398 -        @
   7.399 -        @
   7.400 -        @
   7.401 -  _____ @
   7.402 - |_____|@@
   7.403 -  _ @
   7.404 - ( )@
   7.405 -  \|@
   7.406 -  $ @
   7.407 -  $ @
   7.408 -    @@
   7.409 -        @
   7.410 -   __ _ @
   7.411 -  / _` |@
   7.412 - | (_| |@
   7.413 -  \__,_|@
   7.414 -        @@
   7.415 -  _     @
   7.416 - | |__  @
   7.417 - | '_ \ @
   7.418 - | |_) |@
   7.419 - |_.__/ @
   7.420 -        @@
   7.421 -       @
   7.422 -   ___ @
   7.423 -  / __|@
   7.424 - | (__ @
   7.425 -  \___|@
   7.426 -       @@
   7.427 -      _ @
   7.428 -   __| |@
   7.429 -  / _` |@
   7.430 - | (_| |@
   7.431 -  \__,_|@
   7.432 -        @@
   7.433 -       @
   7.434 -   ___ @
   7.435 -  / _ \@
   7.436 - |  __/@
   7.437 -  \___|@
   7.438 -       @@
   7.439 -   __ @
   7.440 -  / _|@
   7.441 - | |_ @
   7.442 - |  _|@
   7.443 - |_|  @
   7.444 -      @@
   7.445 -        @
   7.446 -   __ _ @
   7.447 -  / _` |@
   7.448 - | (_| |@
   7.449 -  \__, |@
   7.450 -  |___/ @@
   7.451 -  _     @
   7.452 - | |__  @
   7.453 - | '_ \ @
   7.454 - | | | |@
   7.455 - |_| |_|@
   7.456 -        @@
   7.457 -  _ @
   7.458 - (_)@
   7.459 - | |@
   7.460 - | |@
   7.461 - |_|@
   7.462 -    @@
   7.463 -    _ @
   7.464 -   (_)@
   7.465 -   | |@
   7.466 -   | |@
   7.467 -  _/ |@
   7.468 - |__/ @@
   7.469 -  _    @
   7.470 - | | __@
   7.471 - | |/ /@
   7.472 - |   < @
   7.473 - |_|\_\@
   7.474 -       @@
   7.475 -  _ @
   7.476 - | |@
   7.477 - | |@
   7.478 - | |@
   7.479 - |_|@
   7.480 -    @@
   7.481 -            @
   7.482 -  _ __ ___  @
   7.483 - | '_ ` _ \ @
   7.484 - | | | | | |@
   7.485 - |_| |_| |_|@
   7.486 -            @@
   7.487 -        @
   7.488 -  _ __  @
   7.489 - | '_ \ @
   7.490 - | | | |@
   7.491 - |_| |_|@
   7.492 -        @@
   7.493 -        @
   7.494 -   ___  @
   7.495 -  / _ \ @
   7.496 - | (_) |@
   7.497 -  \___/ @
   7.498 -        @@
   7.499 -        @
   7.500 -  _ __  @
   7.501 - | '_ \ @
   7.502 - | |_) |@
   7.503 - | .__/ @
   7.504 - |_|    @@
   7.505 -        @
   7.506 -   __ _ @
   7.507 -  / _` |@
   7.508 - | (_| |@
   7.509 -  \__, |@
   7.510 -     |_|@@
   7.511 -       @
   7.512 -  _ __ @
   7.513 - | '__|@
   7.514 - | |   @
   7.515 - |_|   @
   7.516 -       @@
   7.517 -      @
   7.518 -  ___ @
   7.519 - / __|@
   7.520 - \__ \@
   7.521 - |___/@
   7.522 -      @@
   7.523 -  _   @
   7.524 - | |_ @
   7.525 - | __|@
   7.526 - | |_ @
   7.527 -  \__|@
   7.528 -      @@
   7.529 -        @
   7.530 -  _   _ @
   7.531 - | | | |@
   7.532 - | |_| |@
   7.533 -  \__,_|@
   7.534 -        @@
   7.535 -        @
   7.536 - __   __@
   7.537 - \ \ / /@
   7.538 -  \ V / @
   7.539 -   \_/  @
   7.540 -        @@
   7.541 -           @
   7.542 - __      __@
   7.543 - \ \ /\ / /@
   7.544 -  \ V  V / @
   7.545 -   \_/\_/  @
   7.546 -           @@
   7.547 -       @
   7.548 - __  __@
   7.549 - \ \/ /@
   7.550 -  >  < @
   7.551 - /_/\_\@
   7.552 -       @@
   7.553 -        @
   7.554 -  _   _ @
   7.555 - | | | |@
   7.556 - | |_| |@
   7.557 -  \__, |@
   7.558 -  |___/ @@
   7.559 -      @
   7.560 -  ____@
   7.561 - |_  /@
   7.562 -  / / @
   7.563 - /___|@
   7.564 -      @@
   7.565 -    __@
   7.566 -   / /@
   7.567 -  | | @
   7.568 - < <  @
   7.569 -  | | @
   7.570 -   \_\@@
   7.571 -  _ @
   7.572 - | |@
   7.573 - | |@
   7.574 - | |@
   7.575 - | |@
   7.576 - |_|@@
   7.577 - __   @
   7.578 - \ \  @
   7.579 -  | | @
   7.580 -   > >@
   7.581 -  | | @
   7.582 - /_/  @@
   7.583 -  /\/|@
   7.584 - |/\/ @
   7.585 -   $  @
   7.586 -   $  @
   7.587 -   $  @
   7.588 -      @@
   7.589 -  _   _ @
   7.590 - (_)_(_)@
   7.591 -   /_\  @
   7.592 -  / _ \ @
   7.593 - /_/ \_\@
   7.594 -        @@
   7.595 -  _   _ @
   7.596 - (_)_(_)@
   7.597 -  / _ \ @
   7.598 - | |_| |@
   7.599 -  \___/ @
   7.600 -        @@
   7.601 -  _   _ @
   7.602 - (_) (_)@
   7.603 - | | | |@
   7.604 - | |_| |@
   7.605 -  \___/ @
   7.606 -        @@
   7.607 -  _   _ @
   7.608 - (_)_(_)@
   7.609 -  / _` |@
   7.610 - | (_| |@
   7.611 -  \__,_|@
   7.612 -        @@
   7.613 -  _   _ @
   7.614 - (_)_(_)@
   7.615 -  / _ \ @
   7.616 - | (_) |@
   7.617 -  \___/ @
   7.618 -        @@
   7.619 -  _   _ @
   7.620 - (_) (_)@
   7.621 - | | | |@
   7.622 - | |_| |@
   7.623 -  \__,_|@
   7.624 -        @@
   7.625 -   ___ @
   7.626 -  / _ \@
   7.627 - | |/ /@
   7.628 - | |\ \@
   7.629 - | ||_/@
   7.630 - |_|   @@
   7.631 -160  NO-BREAK SPACE
   7.632 - $@
   7.633 - $@
   7.634 - $@
   7.635 - $@
   7.636 - $@
   7.637 - $@@
   7.638 -161  INVERTED EXCLAMATION MARK
   7.639 -  _ @
   7.640 - (_)@
   7.641 - | |@
   7.642 - | |@
   7.643 - |_|@
   7.644 -    @@
   7.645 -162  CENT SIGN
   7.646 -    _  @
   7.647 -   | | @
   7.648 -  / __)@
   7.649 - | (__ @
   7.650 -  \   )@
   7.651 -   |_| @@
   7.652 -163  POUND SIGN
   7.653 -    ___  @
   7.654 -   / ,_\ @
   7.655 - _| |_   @
   7.656 -  | |___ @
   7.657 - (_,____|@
   7.658 -         @@
   7.659 -164  CURRENCY SIGN
   7.660 - /\___/\@
   7.661 - \  _  /@
   7.662 - | (_) |@
   7.663 - / ___ \@
   7.664 - \/   \/@
   7.665 -        @@
   7.666 -165  YEN SIGN
   7.667 -  __ __ @
   7.668 -  \ V / @
   7.669 - |__ __|@
   7.670 - |__ __|@
   7.671 -   |_|  @
   7.672 -        @@
   7.673 -166  BROKEN BAR
   7.674 -  _ @
   7.675 - | |@
   7.676 - |_|@
   7.677 -  _ @
   7.678 - | |@
   7.679 - |_|@@
   7.680 -167  SECTION SIGN
   7.681 -    __ @
   7.682 -  _/ _)@
   7.683 - / \ \ @
   7.684 - \ \\ \@
   7.685 -  \ \_/@
   7.686 - (__/  @@
   7.687 -168  DIAERESIS
   7.688 -  _   _ @
   7.689 - (_) (_)@
   7.690 -  $   $ @
   7.691 -  $   $ @
   7.692 -  $   $ @
   7.693 -        @@
   7.694 -169  COPYRIGHT SIGN
   7.695 -    _____   @
   7.696 -   / ___ \  @
   7.697 -  / / __| \ @
   7.698 - | | (__   |@
   7.699 -  \ \___| / @
   7.700 -   \_____/  @@
   7.701 -170  FEMININE ORDINAL INDICATOR
   7.702 -  __ _ @
   7.703 - / _` |@
   7.704 - \__,_|@
   7.705 - |____|@
   7.706 -    $  @
   7.707 -       @@
   7.708 -171  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
   7.709 -   ____@
   7.710 -  / / /@
   7.711 - / / / @
   7.712 - \ \ \ @
   7.713 -  \_\_\@
   7.714 -       @@
   7.715 -172  NOT SIGN
   7.716 -        @
   7.717 -  _____ @
   7.718 - |___  |@
   7.719 -     |_|@
   7.720 -    $   @
   7.721 -        @@
   7.722 -173  SOFT HYPHEN
   7.723 -       @
   7.724 -       @
   7.725 -  ____ @
   7.726 - |____|@
   7.727 -    $  @
   7.728 -       @@
   7.729 -174  REGISTERED SIGN
   7.730 -    _____   @
   7.731 -   / ___ \  @
   7.732 -  / | _ \ \ @
   7.733 - |  |   /  |@
   7.734 -  \ |_|_\ / @
   7.735 -   \_____/  @@
   7.736 -175  MACRON
   7.737 -  _____ @
   7.738 - |_____|@
   7.739 -    $   @
   7.740 -    $   @
   7.741 -    $   @
   7.742 -        @@
   7.743 -176  DEGREE SIGN
   7.744 -   __  @
   7.745 -  /  \ @
   7.746 - | () |@
   7.747 -  \__/ @
   7.748 -    $  @
   7.749 -       @@
   7.750 -177  PLUS-MINUS SIGN
   7.751 -    _   @
   7.752 -  _| |_ @
   7.753 - |_   _|@
   7.754 -  _|_|_ @
   7.755 - |_____|@
   7.756 -        @@
   7.757 -178  SUPERSCRIPT TWO
   7.758 -  ___ @
   7.759 - |_  )@
   7.760 -  / / @
   7.761 - /___|@
   7.762 -   $  @
   7.763 -      @@
   7.764 -179  SUPERSCRIPT THREE
   7.765 -  ____@
   7.766 - |__ /@
   7.767 -  |_ \@
   7.768 - |___/@
   7.769 -   $  @
   7.770 -      @@
   7.771 -180  ACUTE ACCENT
   7.772 -  __@
   7.773 - /_/@
   7.774 -  $ @
   7.775 -  $ @
   7.776 -  $ @
   7.777 -    @@
   7.778 -181  MICRO SIGN
   7.779 -        @
   7.780 -  _   _ @
   7.781 - | | | |@
   7.782 - | |_| |@
   7.783 - | ._,_|@
   7.784 - |_|    @@
   7.785 -182  PILCROW SIGN
   7.786 -   _____ @
   7.787 -  /     |@
   7.788 - | (| | |@
   7.789 -  \__ | |@
   7.790 -    |_|_|@
   7.791 -         @@
   7.792 -183  MIDDLE DOT
   7.793 -    @
   7.794 -  _ @
   7.795 - (_)@
   7.796 -  $ @
   7.797 -  $ @
   7.798 -    @@
   7.799 -184  CEDILLA
   7.800 -    @
   7.801 -    @
   7.802 -    @
   7.803 -    @
   7.804 -  _ @
   7.805 - )_)@@
   7.806 -185  SUPERSCRIPT ONE
   7.807 -  _ @
   7.808 - / |@
   7.809 - | |@
   7.810 - |_|@
   7.811 -  $ @
   7.812 -    @@
   7.813 -186  MASCULINE ORDINAL INDICATOR
   7.814 -  ___ @
   7.815 - / _ \@
   7.816 - \___/@
   7.817 - |___|@
   7.818 -   $  @
   7.819 -      @@
   7.820 -187  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
   7.821 - ____  @
   7.822 - \ \ \ @
   7.823 -  \ \ \@
   7.824 -  / / /@
   7.825 - /_/_/ @
   7.826 -       @@
   7.827 -188  VULGAR FRACTION ONE QUARTER
   7.828 -  _   __    @
   7.829 - / | / / _  @
   7.830 - | |/ / | | @
   7.831 - |_/ /|_  _|@
   7.832 -  /_/   |_| @
   7.833 -            @@
   7.834 -189  VULGAR FRACTION ONE HALF
   7.835 -  _   __   @
   7.836 - / | / /__ @
   7.837 - | |/ /_  )@
   7.838 - |_/ / / / @
   7.839 -  /_/ /___|@
   7.840 -           @@
   7.841 -190  VULGAR FRACTION THREE QUARTERS
   7.842 -  ____  __    @
   7.843 - |__ / / / _  @
   7.844 -  |_ \/ / | | @
   7.845 - |___/ /|_  _|@
   7.846 -    /_/   |_| @
   7.847 -              @@
   7.848 -191  INVERTED QUESTION MARK
   7.849 -   _  @
   7.850 -  (_) @
   7.851 -  | | @
   7.852 - / /_ @
   7.853 - \___|@
   7.854 -      @@
   7.855 -192  LATIN CAPITAL LETTER A WITH GRAVE
   7.856 -   __   @
   7.857 -   \_\  @
   7.858 -   /_\  @
   7.859 -  / _ \ @
   7.860 - /_/ \_\@
   7.861 -        @@
   7.862 -193  LATIN CAPITAL LETTER A WITH ACUTE
   7.863 -    __  @
   7.864 -   /_/  @
   7.865 -   /_\  @
   7.866 -  / _ \ @
   7.867 - /_/ \_\@
   7.868 -        @@
   7.869 -194  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
   7.870 -   //\  @
   7.871 -  |/_\| @
   7.872 -   /_\  @
   7.873 -  / _ \ @
   7.874 - /_/ \_\@
   7.875 -        @@
   7.876 -195  LATIN CAPITAL LETTER A WITH TILDE
   7.877 -   /\/| @
   7.878 -  |/\/  @
   7.879 -   /_\  @
   7.880 -  / _ \ @
   7.881 - /_/ \_\@
   7.882 -        @@
   7.883 -196  LATIN CAPITAL LETTER A WITH DIAERESIS
   7.884 -  _   _ @
   7.885 - (_)_(_)@
   7.886 -   /_\  @
   7.887 -  / _ \ @
   7.888 - /_/ \_\@
   7.889 -        @@
   7.890 -197  LATIN CAPITAL LETTER A WITH RING ABOVE
   7.891 -    _   @
   7.892 -   (o)  @
   7.893 -   /_\  @
   7.894 -  / _ \ @
   7.895 - /_/ \_\@
   7.896 -        @@
   7.897 -198  LATIN CAPITAL LETTER AE
   7.898 -     ______ @
   7.899 -    /  ____|@
   7.900 -   / _  _|  @
   7.901 -  / __ |___ @
   7.902 - /_/ |_____|@
   7.903 -            @@
   7.904 -199  LATIN CAPITAL LETTER C WITH CEDILLA
   7.905 -   ____ @
   7.906 -  / ___|@
   7.907 - | |    @
   7.908 - | |___ @
   7.909 -  \____|@
   7.910 -    )_) @@
   7.911 -200  LATIN CAPITAL LETTER E WITH GRAVE
   7.912 -   __   @
   7.913 -  _\_\_ @
   7.914 - | ____|@
   7.915 - |  _|_ @
   7.916 - |_____|@
   7.917 -        @@
   7.918 -201  LATIN CAPITAL LETTER E WITH ACUTE
   7.919 -    __  @
   7.920 -  _/_/_ @
   7.921 - | ____|@
   7.922 - |  _|_ @
   7.923 - |_____|@
   7.924 -        @@
   7.925 -202  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
   7.926 -   //\  @
   7.927 -  |/_\| @
   7.928 - | ____|@
   7.929 - |  _|_ @
   7.930 - |_____|@
   7.931 -        @@
   7.932 -203  LATIN CAPITAL LETTER E WITH DIAERESIS
   7.933 -  _   _ @
   7.934 - (_)_(_)@
   7.935 - | ____|@
   7.936 - |  _|_ @
   7.937 - |_____|@
   7.938 -        @@
   7.939 -204  LATIN CAPITAL LETTER I WITH GRAVE
   7.940 -  __  @
   7.941 -  \_\ @
   7.942 - |_ _|@
   7.943 -  | | @
   7.944 - |___|@
   7.945 -      @@
   7.946 -205  LATIN CAPITAL LETTER I WITH ACUTE
   7.947 -   __ @
   7.948 -  /_/ @
   7.949 - |_ _|@
   7.950 -  | | @
   7.951 - |___|@
   7.952 -      @@
   7.953 -206  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
   7.954 -  //\ @
   7.955 - |/_\|@
   7.956 - |_ _|@
   7.957 -  | | @
   7.958 - |___|@
   7.959 -      @@
   7.960 -207  LATIN CAPITAL LETTER I WITH DIAERESIS
   7.961 -  _   _ @
   7.962 - (_)_(_)@
   7.963 -  |_ _| @
   7.964 -   | |  @
   7.965 -  |___| @
   7.966 -        @@
   7.967 -208  LATIN CAPITAL LETTER ETH
   7.968 -    ____  @
   7.969 -   |  _ \ @
   7.970 -  _| |_| |@
   7.971 - |__ __| |@
   7.972 -   |____/ @
   7.973 -          @@
   7.974 -209  LATIN CAPITAL LETTER N WITH TILDE
   7.975 -   /\/|@
   7.976 -  |/\/ @
   7.977 - | \| |@
   7.978 - | .` |@
   7.979 - |_|\_|@
   7.980 -       @@
   7.981 -210  LATIN CAPITAL LETTER O WITH GRAVE
   7.982 -   __   @
   7.983 -   \_\  @
   7.984 -  / _ \ @
   7.985 - | |_| |@
   7.986 -  \___/ @
   7.987 -        @@
   7.988 -211  LATIN CAPITAL LETTER O WITH ACUTE
   7.989 -    __  @
   7.990 -   /_/  @
   7.991 -  / _ \ @
   7.992 - | |_| |@
   7.993 -  \___/ @
   7.994 -        @@
   7.995 -212  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
   7.996 -   //\  @
   7.997 -  |/_\| @
   7.998 -  / _ \ @
   7.999 - | |_| |@
  7.1000 -  \___/ @
  7.1001 -        @@
  7.1002 -213  LATIN CAPITAL LETTER O WITH TILDE
  7.1003 -   /\/| @
  7.1004 -  |/\/  @
  7.1005 -  / _ \ @
  7.1006 - | |_| |@
  7.1007 -  \___/ @
  7.1008 -        @@
  7.1009 -214  LATIN CAPITAL LETTER O WITH DIAERESIS
  7.1010 -  _   _ @
  7.1011 - (_)_(_)@
  7.1012 -  / _ \ @
  7.1013 - | |_| |@
  7.1014 -  \___/ @
  7.1015 -        @@
  7.1016 -215  MULTIPLICATION SIGN
  7.1017 -     @
  7.1018 -     @
  7.1019 - /\/\@
  7.1020 - >  <@
  7.1021 - \/\/@
  7.1022 -     @@
  7.1023 -216  LATIN CAPITAL LETTER O WITH STROKE
  7.1024 -   ____ @
  7.1025 -  / _// @
  7.1026 - | |// |@
  7.1027 - | //| |@
  7.1028 -  //__/ @
  7.1029 -        @@
  7.1030 -217  LATIN CAPITAL LETTER U WITH GRAVE
  7.1031 -   __   @
  7.1032 -  _\_\_ @
  7.1033 - | | | |@
  7.1034 - | |_| |@
  7.1035 -  \___/ @
  7.1036 -        @@
  7.1037 -218  LATIN CAPITAL LETTER U WITH ACUTE
  7.1038 -    __  @
  7.1039 -  _/_/_ @
  7.1040 - | | | |@
  7.1041 - | |_| |@
  7.1042 -  \___/ @
  7.1043 -        @@
  7.1044 -219  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
  7.1045 -   //\  @
  7.1046 -  |/ \| @
  7.1047 - | | | |@
  7.1048 - | |_| |@
  7.1049 -  \___/ @
  7.1050 -        @@
  7.1051 -220  LATIN CAPITAL LETTER U WITH DIAERESIS
  7.1052 -  _   _ @
  7.1053 - (_) (_)@
  7.1054 - | | | |@
  7.1055 - | |_| |@
  7.1056 -  \___/ @
  7.1057 -        @@
  7.1058 -221  LATIN CAPITAL LETTER Y WITH ACUTE
  7.1059 -    __  @
  7.1060 - __/_/__@
  7.1061 - \ \ / /@
  7.1062 -  \ V / @
  7.1063 -   |_|  @
  7.1064 -        @@
  7.1065 -222  LATIN CAPITAL LETTER THORN
  7.1066 -  _     @
  7.1067 - | |___ @
  7.1068 - |  __ \@
  7.1069 - |  ___/@
  7.1070 - |_|    @
  7.1071 -        @@
  7.1072 -223  LATIN SMALL LETTER SHARP S
  7.1073 -   ___ @
  7.1074 -  / _ \@
  7.1075 - | |/ /@
  7.1076 - | |\ \@
  7.1077 - | ||_/@
  7.1078 - |_|   @@
  7.1079 -224  LATIN SMALL LETTER A WITH GRAVE
  7.1080 -   __   @
  7.1081 -   \_\_ @
  7.1082 -  / _` |@
  7.1083 - | (_| |@
  7.1084 -  \__,_|@
  7.1085 -        @@
  7.1086 -225  LATIN SMALL LETTER A WITH ACUTE
  7.1087 -    __  @
  7.1088 -   /_/_ @
  7.1089 -  / _` |@
  7.1090 - | (_| |@
  7.1091 -  \__,_|@
  7.1092 -        @@
  7.1093 -226  LATIN SMALL LETTER A WITH CIRCUMFLEX
  7.1094 -   //\  @
  7.1095 -  |/_\| @
  7.1096 -  / _` |@
  7.1097 - | (_| |@
  7.1098 -  \__,_|@
  7.1099 -        @@
  7.1100 -227  LATIN SMALL LETTER A WITH TILDE
  7.1101 -   /\/| @
  7.1102 -  |/\/_ @
  7.1103 -  / _` |@
  7.1104 - | (_| |@
  7.1105 -  \__,_|@
  7.1106 -        @@
  7.1107 -228  LATIN SMALL LETTER A WITH DIAERESIS
  7.1108 -  _   _ @
  7.1109 - (_)_(_)@
  7.1110 -  / _` |@
  7.1111 - | (_| |@
  7.1112 -  \__,_|@
  7.1113 -        @@
  7.1114 -229  LATIN SMALL LETTER A WITH RING ABOVE
  7.1115 -    __  @
  7.1116 -   (()) @
  7.1117 -  / _ '|@
  7.1118 - | (_| |@
  7.1119 -  \__,_|@
  7.1120 -        @@
  7.1121 -230  LATIN SMALL LETTER AE
  7.1122 -           @
  7.1123 -   __ ____ @
  7.1124 -  / _`  _ \@
  7.1125 - | (_|  __/@
  7.1126 -  \__,____|@
  7.1127 -           @@
  7.1128 -231  LATIN SMALL LETTER C WITH CEDILLA
  7.1129 -       @
  7.1130 -   ___ @
  7.1131 -  / __|@
  7.1132 - | (__ @
  7.1133 -  \___|@
  7.1134 -   )_) @@
  7.1135 -232  LATIN SMALL LETTER E WITH GRAVE
  7.1136 -   __  @
  7.1137 -   \_\ @
  7.1138 -  / _ \@
  7.1139 - |  __/@
  7.1140 -  \___|@
  7.1141 -       @@
  7.1142 -233  LATIN SMALL LETTER E WITH ACUTE
  7.1143 -    __ @
  7.1144 -   /_/ @
  7.1145 -  / _ \@
  7.1146 - |  __/@
  7.1147 -  \___|@
  7.1148 -       @@
  7.1149 -234  LATIN SMALL LETTER E WITH CIRCUMFLEX
  7.1150 -   //\ @
  7.1151 -  |/_\|@
  7.1152 -  / _ \@
  7.1153 - |  __/@
  7.1154 -  \___|@
  7.1155 -       @@
  7.1156 -235  LATIN SMALL LETTER E WITH DIAERESIS
  7.1157 -  _   _ @
  7.1158 - (_)_(_)@
  7.1159 -  / _ \ @
  7.1160 - |  __/ @
  7.1161 -  \___| @
  7.1162 -        @@
  7.1163 -236  LATIN SMALL LETTER I WITH GRAVE
  7.1164 - __ @
  7.1165 - \_\@
  7.1166 - | |@
  7.1167 - | |@
  7.1168 - |_|@
  7.1169 -    @@
  7.1170 -237  LATIN SMALL LETTER I WITH ACUTE
  7.1171 -  __@
  7.1172 - /_/@
  7.1173 - | |@
  7.1174 - | |@
  7.1175 - |_|@
  7.1176 -    @@
  7.1177 -238  LATIN SMALL LETTER I WITH CIRCUMFLEX
  7.1178 -  //\ @
  7.1179 - |/_\|@
  7.1180 -  | | @
  7.1181 -  | | @
  7.1182 -  |_| @
  7.1183 -      @@
  7.1184 -239  LATIN SMALL LETTER I WITH DIAERESIS
  7.1185 -  _   _ @
  7.1186 - (_)_(_)@
  7.1187 -   | |  @
  7.1188 -   | |  @
  7.1189 -   |_|  @
  7.1190 -        @@
  7.1191 -240  LATIN SMALL LETTER ETH
  7.1192 -   /\/\ @
  7.1193 -   >  < @
  7.1194 -  _\/\ |@
  7.1195 - / __` |@
  7.1196 - \____/ @
  7.1197 -        @@
  7.1198 -241  LATIN SMALL LETTER N WITH TILDE
  7.1199 -   /\/| @
  7.1200 -  |/\/  @
  7.1201 - | '_ \ @
  7.1202 - | | | |@
  7.1203 - |_| |_|@
  7.1204 -        @@
  7.1205 -242  LATIN SMALL LETTER O WITH GRAVE
  7.1206 -   __   @
  7.1207 -   \_\  @
  7.1208 -  / _ \ @
  7.1209 - | (_) |@
  7.1210 -  \___/ @
  7.1211 -        @@
  7.1212 -243  LATIN SMALL LETTER O WITH ACUTE
  7.1213 -    __  @
  7.1214 -   /_/  @
  7.1215 -  / _ \ @
  7.1216 - | (_) |@
  7.1217 -  \___/ @
  7.1218 -        @@
  7.1219 -244  LATIN SMALL LETTER O WITH CIRCUMFLEX
  7.1220 -   //\  @
  7.1221 -  |/_\| @
  7.1222 -  / _ \ @
  7.1223 - | (_) |@
  7.1224 -  \___/ @
  7.1225 -        @@
  7.1226 -245  LATIN SMALL LETTER O WITH TILDE
  7.1227 -   /\/| @
  7.1228 -  |/\/  @
  7.1229 -  / _ \ @
  7.1230 - | (_) |@
  7.1231 -  \___/ @
  7.1232 -        @@
  7.1233 -246  LATIN SMALL LETTER O WITH DIAERESIS
  7.1234 -  _   _ @
  7.1235 - (_)_(_)@
  7.1236 -  / _ \ @
  7.1237 - | (_) |@
  7.1238 -  \___/ @
  7.1239 -        @@
  7.1240 -247  DIVISION SIGN
  7.1241 -        @
  7.1242 -    _   @
  7.1243 -  _(_)_ @
  7.1244 - |_____|@
  7.1245 -   (_)  @
  7.1246 -        @@
  7.1247 -248  LATIN SMALL LETTER O WITH STROKE
  7.1248 -         @
  7.1249 -   ____  @
  7.1250 -  / _//\ @
  7.1251 - | (//) |@
  7.1252 -  \//__/ @
  7.1253 -         @@
  7.1254 -249  LATIN SMALL LETTER U WITH GRAVE
  7.1255 -   __   @
  7.1256 -  _\_\_ @
  7.1257 - | | | |@
  7.1258 - | |_| |@
  7.1259 -  \__,_|@
  7.1260 -        @@
  7.1261 -250  LATIN SMALL LETTER U WITH ACUTE
  7.1262 -    __  @
  7.1263 -  _/_/_ @
  7.1264 - | | | |@
  7.1265 - | |_| |@
  7.1266 -  \__,_|@
  7.1267 -        @@
  7.1268 -251  LATIN SMALL LETTER U WITH CIRCUMFLEX
  7.1269 -   //\  @
  7.1270 -  |/ \| @
  7.1271 - | | | |@
  7.1272 - | |_| |@
  7.1273 -  \__,_|@
  7.1274 -        @@
  7.1275 -252  LATIN SMALL LETTER U WITH DIAERESIS
  7.1276 -  _   _ @
  7.1277 - (_) (_)@
  7.1278 - | | | |@
  7.1279 - | |_| |@
  7.1280 -  \__,_|@
  7.1281 -        @@
  7.1282 -253  LATIN SMALL LETTER Y WITH ACUTE
  7.1283 -    __  @
  7.1284 -  _/_/_ @
  7.1285 - | | | |@
  7.1286 - | |_| |@
  7.1287 -  \__, |@
  7.1288 -  |___/ @@
  7.1289 -254  LATIN SMALL LETTER THORN
  7.1290 -  _     @
  7.1291 - | |__  @
  7.1292 - | '_ \ @
  7.1293 - | |_) |@
  7.1294 - | .__/ @
  7.1295 - |_|    @@
  7.1296 -255  LATIN SMALL LETTER Y WITH DIAERESIS
  7.1297 -  _   _ @
  7.1298 - (_) (_)@
  7.1299 - | | | |@
  7.1300 - | |_| |@
  7.1301 -  \__, |@
  7.1302 -  |___/ @@
  7.1303 -0x0100  LATIN CAPITAL LETTER A WITH MACRON
  7.1304 -   ____ @
  7.1305 -  /___/ @
  7.1306 -   /_\  @
  7.1307 -  / _ \ @
  7.1308 - /_/ \_\@
  7.1309 -        @@
  7.1310 -0x0101  LATIN SMALL LETTER A WITH MACRON
  7.1311 -    ___ @
  7.1312 -   /_ _/@
  7.1313 -  / _` |@
  7.1314 - | (_| |@
  7.1315 -  \__,_|@
  7.1316 -        @@
  7.1317 -0x0102  LATIN CAPITAL LETTER A WITH BREVE
  7.1318 -  _   _ @
  7.1319 -  \\_// @
  7.1320 -   /_\  @
  7.1321 -  / _ \ @
  7.1322 - /_/ \_\@
  7.1323 -        @@
  7.1324 -0x0103  LATIN SMALL LETTER A WITH BREVE
  7.1325 -   \_/  @
  7.1326 -   ___  @
  7.1327 -  / _` |@
  7.1328 - | (_| |@
  7.1329 -  \__,_|@
  7.1330 -        @@
  7.1331 -0x0104  LATIN CAPITAL LETTER A WITH OGONEK
  7.1332 -        @
  7.1333 -    _   @
  7.1334 -   /_\  @
  7.1335 -  / _ \ @
  7.1336 - /_/ \_\@
  7.1337 -     (_(@@
  7.1338 -0x0105  LATIN SMALL LETTER A WITH OGONEK
  7.1339 -        @
  7.1340 -   __ _ @
  7.1341 -  / _` |@
  7.1342 - | (_| |@
  7.1343 -  \__,_|@
  7.1344 -     (_(@@
  7.1345 -0x0106  LATIN CAPITAL LETTER C WITH ACUTE
  7.1346 -     __ @
  7.1347 -   _/_/ @
  7.1348 -  / ___|@
  7.1349 - | |___ @
  7.1350 -  \____|@
  7.1351 -        @@
  7.1352 -0x0107  LATIN SMALL LETTER C WITH ACUTE
  7.1353 -    __ @
  7.1354 -   /__/@
  7.1355 -  / __|@
  7.1356 - | (__ @
  7.1357 -  \___|@
  7.1358 -       @@
  7.1359 -0x0108  LATIN CAPITAL LETTER C WITH CIRCUMFLEX
  7.1360 -     /\ @
  7.1361 -   _//\\@
  7.1362 -  / ___|@
  7.1363 - | |___ @
  7.1364 -  \____|@
  7.1365 -        @@
  7.1366 -0x0109  LATIN SMALL LETTER C WITH CIRCUMFLEX
  7.1367 -    /\ @
  7.1368 -   /_\ @
  7.1369 -  / __|@
  7.1370 - | (__ @
  7.1371 -  \___|@
  7.1372 -       @@
  7.1373 -0x010A  LATIN CAPITAL LETTER C WITH DOT ABOVE
  7.1374 -    []  @
  7.1375 -   ____ @
  7.1376 -  / ___|@
  7.1377 - | |___ @
  7.1378 -  \____|@
  7.1379 -        @@
  7.1380 -0x010B  LATIN SMALL LETTER C WITH DOT ABOVE
  7.1381 -   []  @
  7.1382 -   ___ @
  7.1383 -  / __|@
  7.1384 - | (__ @
  7.1385 -  \___|@
  7.1386 -       @@
  7.1387 -0x010C  LATIN CAPITAL LETTER C WITH CARON
  7.1388 -   \\// @
  7.1389 -   _\/_ @
  7.1390 -  / ___|@
  7.1391 - | |___ @
  7.1392 -  \____|@
  7.1393 -        @@
  7.1394 -0x010D  LATIN SMALL LETTER C WITH CARON
  7.1395 -   \\//@
  7.1396 -   _\/ @
  7.1397 -  / __|@
  7.1398 - | (__ @
  7.1399 -  \___|@
  7.1400 -       @@
  7.1401 -0x010E  LATIN CAPITAL LETTER D WITH CARON
  7.1402 -   \\// @
  7.1403 -  __\/  @
  7.1404 - |  _ \ @
  7.1405 - | |_| |@
  7.1406 - |____/ @
  7.1407 -        @@
  7.1408 -0x010F  LATIN SMALL LETTER D WITH CARON
  7.1409 -  \/  _ @
  7.1410 -   __| |@
  7.1411 -  / _` |@
  7.1412 - | (_| |@
  7.1413 -  \__,_|@
  7.1414 -        @@
  7.1415 -0x0110  LATIN CAPITAL LETTER D WITH STROKE
  7.1416 -   ____   @
  7.1417 -  |_ __ \ @
  7.1418 - /| |/ | |@
  7.1419 - /|_|/_| |@
  7.1420 -  |_____/ @
  7.1421 -          @@
  7.1422 -0x0111  LATIN SMALL LETTER D WITH STROKE
  7.1423 -    ---|@
  7.1424 -   __| |@
  7.1425 -  / _` |@
  7.1426 - | (_| |@
  7.1427 -  \__,_|@
  7.1428 -        @@
  7.1429 -0x0112  LATIN CAPITAL LETTER E WITH MACRON
  7.1430 -   ____ @
  7.1431 -  /___/ @
  7.1432 - | ____|@
  7.1433 - |  _|_ @
  7.1434 - |_____|@
  7.1435 -        @@
  7.1436 -0x0113  LATIN SMALL LETTER E WITH MACRON
  7.1437 -    ____@
  7.1438 -   /_ _/@
  7.1439 -  / _ \ @
  7.1440 - |  __/ @
  7.1441 -  \___| @
  7.1442 -        @@
  7.1443 -0x0114  LATIN CAPITAL LETTER E WITH BREVE
  7.1444 -  _   _ @
  7.1445 -  \\_// @
  7.1446 - | ____|@
  7.1447 - |  _|_ @
  7.1448 - |_____|@
  7.1449 -        @@
  7.1450 -0x0115  LATIN SMALL LETTER E WITH BREVE
  7.1451 -  \\  //@
  7.1452 -    --  @
  7.1453 -  / _ \ @
  7.1454 - |  __/ @
  7.1455 -  \___| @
  7.1456 -        @@
  7.1457 -0x0116  LATIN CAPITAL LETTER E WITH DOT ABOVE
  7.1458 -    []  @
  7.1459 -  _____ @
  7.1460 - | ____|@
  7.1461 - |  _|_ @
  7.1462 - |_____|@
  7.1463 -        @@
  7.1464 -0x0117  LATIN SMALL LETTER E WITH DOT ABOVE
  7.1465 -    [] @
  7.1466 -    __ @
  7.1467 -  / _ \@
  7.1468 - |  __/@
  7.1469 -  \___|@
  7.1470 -       @@
  7.1471 -0x0118  LATIN CAPITAL LETTER E WITH OGONEK
  7.1472 -        @
  7.1473 -  _____ @
  7.1474 - | ____|@
  7.1475 - |  _|_ @
  7.1476 - |_____|@
  7.1477 -    (__(@@
  7.1478 -0x0119  LATIN SMALL LETTER E WITH OGONEK
  7.1479 -       @
  7.1480 -   ___ @
  7.1481 -  / _ \@
  7.1482 - |  __/@
  7.1483 -  \___|@
  7.1484 -    (_(@@
  7.1485 -0x011A  LATIN CAPITAL LETTER E WITH CARON
  7.1486 -   \\// @
  7.1487 -  __\/_ @
  7.1488 - | ____|@
  7.1489 - |  _|_ @
  7.1490 - |_____|@
  7.1491 -        @@
  7.1492 -0x011B  LATIN SMALL LETTER E WITH CARON
  7.1493 -   \\//@
  7.1494 -    \/ @
  7.1495 -  / _ \@
  7.1496 - |  __/@
  7.1497 -  \___|@
  7.1498 -       @@
  7.1499 -0x011C  LATIN CAPITAL LETTER G WITH CIRCUMFLEX
  7.1500 -   _/\_ @
  7.1501 -  / ___|@
  7.1502 - | |  _ @
  7.1503 - | |_| |@
  7.1504 -  \____|@
  7.1505 -        @@
  7.1506 -0x011D  LATIN SMALL LETTER G WITH CIRCUMFLEX
  7.1507 -     /\ @
  7.1508 -   _/_ \@
  7.1509 -  / _` |@
  7.1510 - | (_| |@
  7.1511 -  \__, |@
  7.1512 -  |___/ @@
  7.1513 -0x011E  LATIN CAPITAL LETTER G WITH BREVE
  7.1514 -   _\/_ @
  7.1515 -  / ___|@
  7.1516 - | |  _ @
  7.1517 - | |_| |@
  7.1518 -  \____|@
  7.1519 -        @@
  7.1520 -0x011F  LATIN SMALL LETTER G WITH BREVE
  7.1521 -  \___/ @
  7.1522 -   __ _ @
  7.1523 -  / _` |@
  7.1524 - | (_| |@
  7.1525 -  \__, |@
  7.1526 -  |___/ @@
  7.1527 -0x0120  LATIN CAPITAL LETTER G WITH DOT ABOVE
  7.1528 -   _[]_ @
  7.1529 -  / ___|@
  7.1530 - | |  _ @
  7.1531 - | |_| |@
  7.1532 -  \____|@
  7.1533 -        @@
  7.1534 -0x0121  LATIN SMALL LETTER G WITH DOT ABOVE
  7.1535 -   []   @
  7.1536 -   __ _ @
  7.1537 -  / _` |@
  7.1538 - | (_| |@
  7.1539 -  \__, |@
  7.1540 -  |___/ @@
  7.1541 -0x0122  LATIN CAPITAL LETTER G WITH CEDILLA
  7.1542 -   ____ @
  7.1543 -  / ___|@
  7.1544 - | |  _ @
  7.1545 - | |_| |@
  7.1546 -  \____|@
  7.1547 -   )__) @@
  7.1548 -0x0123  LATIN SMALL LETTER G WITH CEDILLA
  7.1549 -        @
  7.1550 -   __ _ @
  7.1551 -  / _` |@
  7.1552 - | (_| |@
  7.1553 -  \__, |@
  7.1554 -  |_))))@@
  7.1555 -0x0124  LATIN CAPITAL LETTER H WITH CIRCUMFLEX
  7.1556 -  _/ \_ @
  7.1557 - | / \ |@
  7.1558 - | |_| |@
  7.1559 - |  _  |@
  7.1560 - |_| |_|@
  7.1561 -        @@
  7.1562 -0x0125  LATIN SMALL LETTER H WITH CIRCUMFLEX
  7.1563 -  _  /\ @
  7.1564 - | |//\ @
  7.1565 - | '_ \ @
  7.1566 - | | | |@
  7.1567 - |_| |_|@
  7.1568 -        @@
  7.1569 -0x0126  LATIN CAPITAL LETTER H WITH STROKE
  7.1570 -  _   _ @
  7.1571 - | |=| |@
  7.1572 - | |_| |@
  7.1573 - |  _  |@
  7.1574 - |_| |_|@
  7.1575 -        @@
  7.1576 -0x0127  LATIN SMALL LETTER H WITH STROKE
  7.1577 -  _     @
  7.1578 - |=|__  @
  7.1579 - | '_ \ @
  7.1580 - | | | |@
  7.1581 - |_| |_|@
  7.1582 -        @@
  7.1583 -0x0128  LATIN CAPITAL LETTER I WITH TILDE
  7.1584 -  /\//@
  7.1585 - |_ _|@
  7.1586 -  | | @
  7.1587 -  | | @
  7.1588 - |___|@
  7.1589 -      @@
  7.1590 -0x0129  LATIN SMALL LETTER I WITH TILDE
  7.1591 -    @
  7.1592 - /\/@
  7.1593 - | |@
  7.1594 - | |@
  7.1595 - |_|@
  7.1596 -    @@
  7.1597 -0x012A  LATIN CAPITAL LETTER I WITH MACRON
  7.1598 - /___/@
  7.1599 - |_ _|@
  7.1600 -  | | @
  7.1601 -  | | @
  7.1602 - |___|@
  7.1603 -      @@
  7.1604 -0x012B  LATIN SMALL LETTER I WITH MACRON
  7.1605 -  ____@
  7.1606 - /___/@
  7.1607 -  | | @
  7.1608 -  | | @
  7.1609 -  |_| @
  7.1610 -      @@
  7.1611 -0x012C  LATIN CAPITAL LETTER I WITH BREVE
  7.1612 -  \__/@
  7.1613 - |_ _|@
  7.1614 -  | | @
  7.1615 -  | | @
  7.1616 - |___|@
  7.1617 -      @@
  7.1618 -0x012D  LATIN SMALL LETTER I WITH BREVE
  7.1619 -    @
  7.1620 - \_/@
  7.1621 - | |@
  7.1622 - | |@
  7.1623 - |_|@
  7.1624 -    @@
  7.1625 -0x012E  LATIN CAPITAL LETTER I WITH OGONEK
  7.1626 -  ___ @
  7.1627 - |_ _|@
  7.1628 -  | | @
  7.1629 -  | | @
  7.1630 - |___|@
  7.1631 -  (__(@@
  7.1632 -0x012F  LATIN SMALL LETTER I WITH OGONEK
  7.1633 -  _  @
  7.1634 - (_) @
  7.1635 - | | @
  7.1636 - | | @
  7.1637 - |_|_@
  7.1638 -  (_(@@
  7.1639 -0x0130  LATIN CAPITAL LETTER I WITH DOT ABOVE
  7.1640 -  _[] @
  7.1641 - |_ _|@
  7.1642 -  | | @
  7.1643 -  | | @
  7.1644 - |___|@
  7.1645 -      @@
  7.1646 -0x0131  LATIN SMALL LETTER DOTLESS I
  7.1647 -    @
  7.1648 -  _ @
  7.1649 - | |@
  7.1650 - | |@
  7.1651 - |_|@
  7.1652 -    @@
  7.1653 -0x0132  LATIN CAPITAL LIGATURE IJ
  7.1654 -  ___  _ @
  7.1655 - |_ _|| |@
  7.1656 -  | | | |@
  7.1657 -  | |_| |@
  7.1658 - |__|__/ @
  7.1659 -         @@
  7.1660 -0x0133  LATIN SMALL LIGATURE IJ
  7.1661 -  _   _ @
  7.1662 - (_) (_)@
  7.1663 - | | | |@
  7.1664 - | | | |@
  7.1665 - |_|_/ |@
  7.1666 -   |__/ @@
  7.1667 -0x0134  LATIN CAPITAL LETTER J WITH CIRCUMFLEX
  7.1668 -      /\ @
  7.1669 -     /_\|@
  7.1670 -  _  | | @
  7.1671 - | |_| | @
  7.1672 -  \___/  @
  7.1673 -         @@
  7.1674 -0x0135  LATIN SMALL LETTER J WITH CIRCUMFLEX
  7.1675 -    /\@
  7.1676 -   /_\@
  7.1677 -   | |@
  7.1678 -   | |@
  7.1679 -  _/ |@
  7.1680 - |__/ @@
  7.1681 -0x0136  LATIN CAPITAL LETTER K WITH CEDILLA
  7.1682 -  _  _  @
  7.1683 - | |/ / @
  7.1684 - | ' /  @
  7.1685 - | . \  @
  7.1686 - |_|\_\ @
  7.1687 -    )__)@@
  7.1688 -0x0137  LATIN SMALL LETTER K WITH CEDILLA
  7.1689 -  _    @
  7.1690 - | | __@
  7.1691 - | |/ /@
  7.1692 - |   < @
  7.1693 - |_|\_\@
  7.1694 -    )_)@@
  7.1695 -0x0138  LATIN SMALL LETTER KRA
  7.1696 -       @
  7.1697 -  _ __ @
  7.1698 - | |/ \@
  7.1699 - |   < @
  7.1700 - |_|\_\@
  7.1701 -       @@
  7.1702 -0x0139  LATIN CAPITAL LETTER L WITH ACUTE
  7.1703 -  _   //@
  7.1704 - | | // @
  7.1705 - | |    @
  7.1706 - | |___ @
  7.1707 - |_____|@
  7.1708 -        @@
  7.1709 -0x013A  LATIN SMALL LETTER L WITH ACUTE
  7.1710 -  //@
  7.1711 - | |@
  7.1712 - | |@
  7.1713 - | |@
  7.1714 - |_|@
  7.1715 -    @@
  7.1716 -0x013B  LATIN CAPITAL LETTER L WITH CEDILLA
  7.1717 -  _     @
  7.1718 - | |    @
  7.1719 - | |    @
  7.1720 - | |___ @
  7.1721 - |_____|@
  7.1722 -    )__)@@
  7.1723 -0x013C  LATIN SMALL LETTER L WITH CEDILLA
  7.1724 -  _   @
  7.1725 - | |  @
  7.1726 - | |  @
  7.1727 - | |  @
  7.1728 - |_|  @
  7.1729 -   )_)@@
  7.1730 -0x013D  LATIN CAPITAL LETTER L WITH CARON
  7.1731 -  _ \\//@
  7.1732 - | | \/ @
  7.1733 - | |    @
  7.1734 - | |___ @
  7.1735 - |_____|@
  7.1736 -        @@
  7.1737 -0x013E  LATIN SMALL LETTER L WITH CARON
  7.1738 -  _ \\//@
  7.1739 - | | \/ @
  7.1740 - | |    @
  7.1741 - | |    @
  7.1742 - |_|    @
  7.1743 -        @@
  7.1744 -0x013F  LATIN CAPITAL LETTER L WITH MIDDLE DOT
  7.1745 -  _     @
  7.1746 - | |    @
  7.1747 - | | [] @
  7.1748 - | |___ @
  7.1749 - |_____|@
  7.1750 -        @@
  7.1751 -0x0140  LATIN SMALL LETTER L WITH MIDDLE DOT
  7.1752 -  _    @
  7.1753 - | |   @
  7.1754 - | | []@
  7.1755 - | |   @
  7.1756 - |_|   @
  7.1757 -       @@
  7.1758 -0x0141  LATIN CAPITAL LETTER L WITH STROKE
  7.1759 -  __    @
  7.1760 - | //   @
  7.1761 - |//|   @
  7.1762 - // |__ @
  7.1763 - |_____|@
  7.1764 -        @@
  7.1765 -0x0142  LATIN SMALL LETTER L WITH STROKE
  7.1766 -  _ @
  7.1767 - | |@
  7.1768 - |//@
  7.1769 - //|@
  7.1770 - |_|@
  7.1771 -    @@
  7.1772 -0x0143  LATIN CAPITAL LETTER N WITH ACUTE
  7.1773 -  _/ /_ @
  7.1774 - | \ | |@
  7.1775 - |  \| |@
  7.1776 - | |\  |@
  7.1777 - |_| \_|@
  7.1778 -        @@
  7.1779 -0x0144  LATIN SMALL LETTER N WITH ACUTE
  7.1780 -     _  @
  7.1781 -  _ /_/ @
  7.1782 - | '_ \ @
  7.1783 - | | | |@
  7.1784 - |_| |_|@
  7.1785 -        @@
  7.1786 -0x0145  LATIN CAPITAL LETTER N WITH CEDILLA
  7.1787 -  _   _ @
  7.1788 - | \ | |@
  7.1789 - |  \| |@
  7.1790 - | |\  |@
  7.1791 - |_| \_|@
  7.1792 - )_)    @@
  7.1793 -0x0146  LATIN SMALL LETTER N WITH CEDILLA
  7.1794 -        @
  7.1795 -  _ __  @
  7.1796 - | '_ \ @
  7.1797 - | | | |@
  7.1798 - |_| |_|@
  7.1799 - )_)    @@
  7.1800 -0x0147  LATIN CAPITAL LETTER N WITH CARON
  7.1801 -  _\/ _ @
  7.1802 - | \ | |@
  7.1803 - |  \| |@
  7.1804 - | |\  |@
  7.1805 - |_| \_|@
  7.1806 -        @@
  7.1807 -0x0148  LATIN SMALL LETTER N WITH CARON
  7.1808 -  \\//  @
  7.1809 -  _\/_  @
  7.1810 - | '_ \ @
  7.1811 - | | | |@
  7.1812 - |_| |_|@
  7.1813 -        @@
  7.1814 -0x0149  LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
  7.1815 -          @
  7.1816 -  _  __   @
  7.1817 - ( )| '_\ @
  7.1818 - |/| | | |@
  7.1819 -   |_| |_|@
  7.1820 -          @@
  7.1821 -0x014A  LATIN CAPITAL LETTER ENG
  7.1822 -  _   _ @
  7.1823 - | \ | |@
  7.1824 - |  \| |@
  7.1825 - | |\  |@
  7.1826 - |_| \ |@
  7.1827 -     )_)@@
  7.1828 -0x014B  LATIN SMALL LETTER ENG
  7.1829 -  _ __  @
  7.1830 - | '_ \ @
  7.1831 - | | | |@
  7.1832 - |_| | |@
  7.1833 -     | |@
  7.1834 -    |__ @@
  7.1835 -0x014C  LATIN CAPITAL LETTER O WITH MACRON
  7.1836 -   ____ @
  7.1837 -  /_ _/ @
  7.1838 -  / _ \ @
  7.1839 - | (_) |@
  7.1840 -  \___/ @
  7.1841 -        @@
  7.1842 -0x014D  LATIN SMALL LETTER O WITH MACRON
  7.1843 -   ____ @
  7.1844 -  /_ _/ @
  7.1845 -  / _ \ @
  7.1846 - | (_) |@
  7.1847 -  \___/ @
  7.1848 -        @@
  7.1849 -0x014E  LATIN CAPITAL LETTER O WITH BREVE
  7.1850 -  \   / @
  7.1851 -   _-_  @
  7.1852 -  / _ \ @
  7.1853 - | |_| |@
  7.1854 -  \___/ @
  7.1855 -        @@
  7.1856 -0x014F  LATIN SMALL LETTER O WITH BREVE
  7.1857 -  \   / @
  7.1858 -   _-_  @
  7.1859 -  / _ \ @
  7.1860 - | |_| |@
  7.1861 -  \___/ @
  7.1862 -        @@
  7.1863 -0x0150  LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
  7.1864 -    ___ @
  7.1865 -   /_/_/@
  7.1866 -  / _ \ @
  7.1867 - | |_| |@
  7.1868 -  \___/ @
  7.1869 -        @@
  7.1870 -0x0151  LATIN SMALL LETTER O WITH DOUBLE ACUTE
  7.1871 -    ___ @
  7.1872 -   /_/_/@
  7.1873 -  / _ \ @
  7.1874 - | |_| |@
  7.1875 -  \___/ @
  7.1876 -        @@
  7.1877 -0x0152  LATIN CAPITAL LIGATURE OE
  7.1878 -   ___  ___ @
  7.1879 -  / _ \| __|@
  7.1880 - | | | |  | @
  7.1881 - | |_| | |__@
  7.1882 -  \___/|____@
  7.1883 -            @@
  7.1884 -0x0153  LATIN SMALL LIGATURE OE
  7.1885 -             @
  7.1886 -   ___   ___ @
  7.1887 -  / _ \ / _ \@
  7.1888 - | (_) |  __/@
  7.1889 -  \___/ \___|@
  7.1890 -             @@
  7.1891 -0x0154  LATIN CAPITAL LETTER R WITH ACUTE
  7.1892 -  _/_/  @
  7.1893 - |  _ \ @
  7.1894 - | |_) |@
  7.1895 - |  _ < @
  7.1896 - |_| \_\@
  7.1897 -        @@
  7.1898 -0x0155  LATIN SMALL LETTER R WITH ACUTE
  7.1899 -     __@
  7.1900 -  _ /_/@
  7.1901 - | '__|@
  7.1902 - | |   @
  7.1903 - |_|   @
  7.1904 -       @@
  7.1905 -0x0156  LATIN CAPITAL LETTER R WITH CEDILLA
  7.1906 -  ____  @
  7.1907 - |  _ \ @
  7.1908 - | |_) |@
  7.1909 - |  _ < @
  7.1910 - |_| \_\@
  7.1911 - )_)    @@
  7.1912 -0x0157  LATIN SMALL LETTER R WITH CEDILLA
  7.1913 -       @
  7.1914 -  _ __ @
  7.1915 - | '__|@
  7.1916 - | |   @
  7.1917 - |_|   @
  7.1918 -   )_) @@
  7.1919 -0x0158  LATIN CAPITAL LETTER R WITH CARON
  7.1920 -  _\_/  @
  7.1921 - |  _ \ @
  7.1922 - | |_) |@
  7.1923 - |  _ < @
  7.1924 - |_| \_\@
  7.1925 -        @@
  7.1926 -0x0159  LATIN SMALL LETTER R WITH CARON
  7.1927 -  \\// @
  7.1928 -  _\/_ @
  7.1929 - | '__|@
  7.1930 - | |   @
  7.1931 - |_|   @
  7.1932 -       @@
  7.1933 -0x015A  LATIN CAPITAL LETTER S WITH ACUTE
  7.1934 -  _/_/  @
  7.1935 - / ___| @
  7.1936 - \___ \ @
  7.1937 -  ___) |@
  7.1938 - |____/ @
  7.1939 -        @@
  7.1940 -0x015B  LATIN SMALL LETTER S WITH ACUTE
  7.1941 -    __@
  7.1942 -  _/_/@
  7.1943 - / __|@
  7.1944 - \__ \@
  7.1945 - |___/@
  7.1946 -      @@
  7.1947 -0x015C  LATIN CAPITAL LETTER S WITH CIRCUMFLEX
  7.1948 -  _/\_  @
  7.1949 - / ___| @
  7.1950 - \___ \ @
  7.1951 -  ___) |@
  7.1952 - |____/ @
  7.1953 -        @@
  7.1954 -0x015D  LATIN SMALL LETTER S WITH CIRCUMFLEX
  7.1955 -      @
  7.1956 -  /_\_@
  7.1957 - / __|@
  7.1958 - \__ \@
  7.1959 - |___/@
  7.1960 -      @@
  7.1961 -0x015E  LATIN CAPITAL LETTER S WITH CEDILLA
  7.1962 -  ____  @
  7.1963 - / ___| @
  7.1964 - \___ \ @
  7.1965 -  ___) |@
  7.1966 - |____/ @
  7.1967 -    )__)@@
  7.1968 -0x015F  LATIN SMALL LETTER S WITH CEDILLA
  7.1969 -      @
  7.1970 -  ___ @
  7.1971 - / __|@
  7.1972 - \__ \@
  7.1973 - |___/@
  7.1974 -   )_)@@
  7.1975 -0x0160  LATIN CAPITAL LETTER S WITH CARON
  7.1976 -  _\_/  @
  7.1977 - / ___| @
  7.1978 - \___ \ @
  7.1979 -  ___) |@
  7.1980 - |____/ @
  7.1981 -        @@
  7.1982 -0x0161  LATIN SMALL LETTER S WITH CARON
  7.1983 -  \\//@
  7.1984 -  _\/ @
  7.1985 - / __|@
  7.1986 - \__ \@
  7.1987 - |___/@
  7.1988 -      @@
  7.1989 -0x0162  LATIN CAPITAL LETTER T WITH CEDILLA
  7.1990 -  _____ @
  7.1991 - |_   _|@
  7.1992 -   | |  @
  7.1993 -   | |  @
  7.1994 -   |_|  @
  7.1995 -    )__)@@
  7.1996 -0x0163  LATIN SMALL LETTER T WITH CEDILLA
  7.1997 -  _   @
  7.1998 - | |_ @
  7.1999 - | __|@
  7.2000 - | |_ @
  7.2001 -  \__|@
  7.2002 -   )_)@@
  7.2003 -0x0164  LATIN CAPITAL LETTER T WITH CARON
  7.2004 -  _____ @
  7.2005 - |_   _|@
  7.2006 -   | |  @
  7.2007 -   | |  @
  7.2008 -   |_|  @
  7.2009 -        @@
  7.2010 -0x0165  LATIN SMALL LETTER T WITH CARON
  7.2011 -  \/  @
  7.2012 - | |_ @
  7.2013 - | __|@
  7.2014 - | |_ @
  7.2015 -  \__|@
  7.2016 -      @@
  7.2017 -0x0166  LATIN CAPITAL LETTER T WITH STROKE
  7.2018 -  _____ @
  7.2019 - |_   _|@
  7.2020 -   | |  @
  7.2021 -  -|-|- @
  7.2022 -   |_|  @
  7.2023 -        @@
  7.2024 -0x0167  LATIN SMALL LETTER T WITH STROKE
  7.2025 -  _   @
  7.2026 - | |_ @
  7.2027 - | __|@
  7.2028 - |-|_ @
  7.2029 -  \__|@
  7.2030 -      @@
  7.2031 -0x0168  LATIN CAPITAL LETTER U WITH TILDE
  7.2032 -        @
  7.2033 -  _/\/_ @
  7.2034 - | | | |@
  7.2035 - | |_| |@
  7.2036 -  \___/ @
  7.2037 -        @@
  7.2038 -0x0169  LATIN SMALL LETTER U WITH TILDE
  7.2039 -        @
  7.2040 -  _/\/_ @
  7.2041 - | | | |@
  7.2042 - | |_| |@
  7.2043 -  \__,_|@
  7.2044 -        @@
  7.2045 -0x016A  LATIN CAPITAL LETTER U WITH MACRON
  7.2046 -   ____ @
  7.2047 -  /__ _/@
  7.2048 - | | | |@
  7.2049 - | |_| |@
  7.2050 -  \___/ @
  7.2051 -        @@
  7.2052 -0x016B  LATIN SMALL LETTER U WITH MACRON
  7.2053 -   ____ @
  7.2054 -  / _  /@
  7.2055 - | | | |@
  7.2056 - | |_| |@
  7.2057 -  \__,_|@
  7.2058 -        @@
  7.2059 -0x016C  LATIN CAPITAL LETTER U WITH BREVE
  7.2060 -        @
  7.2061 -   \_/_ @
  7.2062 - | | | |@
  7.2063 - | |_| |@
  7.2064 -  \____|@
  7.2065 -        @@
  7.2066 -0x016D  LATIN SMALL LETTER U WITH BREVE
  7.2067 -        @
  7.2068 -   \_/_ @
  7.2069 - | | | |@
  7.2070 - | |_| |@
  7.2071 -  \__,_|@
  7.2072 -        @@
  7.2073 -0x016E  LATIN CAPITAL LETTER U WITH RING ABOVE
  7.2074 -    O   @
  7.2075 -  __  _ @
  7.2076 - | | | |@
  7.2077 - | |_| |@
  7.2078 -  \___/ @
  7.2079 -        @@
  7.2080 -0x016F  LATIN SMALL LETTER U WITH RING ABOVE
  7.2081 -    O   @
  7.2082 -  __ __ @
  7.2083 - | | | |@
  7.2084 - | |_| |@
  7.2085 -  \__,_|@
  7.2086 -        @@
  7.2087 -0x0170  LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
  7.2088 -   -- --@
  7.2089 -  /_//_/@
  7.2090 - | | | |@
  7.2091 - | |_| |@
  7.2092 -  \___/ @
  7.2093 -        @@
  7.2094 -0x0171  LATIN SMALL LETTER U WITH DOUBLE ACUTE
  7.2095 -    ____@
  7.2096 -  _/_/_/@
  7.2097 - | | | |@
  7.2098 - | |_| |@
  7.2099 -  \__,_|@
  7.2100 -        @@
  7.2101 -0x0172  LATIN CAPITAL LETTER U WITH OGONEK
  7.2102 -  _   _ @
  7.2103 - | | | |@
  7.2104 - | | | |@
  7.2105 - | |_| |@
  7.2106 -  \___/ @
  7.2107 -    (__(@@
  7.2108 -0x0173  LATIN SMALL LETTER U WITH OGONEK
  7.2109 -        @
  7.2110 -  _   _ @
  7.2111 - | | | |@
  7.2112 - | |_| |@
  7.2113 -  \__,_|@
  7.2114 -     (_(@@
  7.2115 -0x0174  LATIN CAPITAL LETTER W WITH CIRCUMFLEX
  7.2116 - __    /\  __@
  7.2117 - \ \  //\\/ /@
  7.2118 -  \ \ /\ / / @
  7.2119 -   \ V  V /  @
  7.2120 -    \_/\_/   @
  7.2121 -             @@
  7.2122 -0x0175  LATIN SMALL LETTER W WITH CIRCUMFLEX
  7.2123 -      /\   @
  7.2124 - __  //\\__@
  7.2125 - \ \ /\ / /@
  7.2126 -  \ V  V / @
  7.2127 -   \_/\_/  @
  7.2128 -           @@
  7.2129 -0x0176  LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
  7.2130 -    /\  @
  7.2131 - __//\\ @
  7.2132 - \ \ / /@
  7.2133 -  \ V / @
  7.2134 -   |_|  @
  7.2135 -        @@
  7.2136 -0x0177  LATIN SMALL LETTER Y WITH CIRCUMFLEX
  7.2137 -    /\  @
  7.2138 -   //\\ @
  7.2139 - | | | |@
  7.2140 - | |_| |@
  7.2141 -  \__, |@
  7.2142 -  |___/ @@
  7.2143 -0x0178  LATIN CAPITAL LETTER Y WITH DIAERESIS
  7.2144 -  []  []@
  7.2145 - __    _@
  7.2146 - \ \ / /@
  7.2147 -  \ V / @
  7.2148 -   |_|  @
  7.2149 -        @@
  7.2150 -0x0179  LATIN CAPITAL LETTER Z WITH ACUTE
  7.2151 -  __/_/@
  7.2152 - |__  /@
  7.2153 -   / / @
  7.2154 -  / /_ @
  7.2155 - /____|@
  7.2156 -       @@
  7.2157 -0x017A  LATIN SMALL LETTER Z WITH ACUTE
  7.2158 -    _ @
  7.2159 -  _/_/@
  7.2160 - |_  /@
  7.2161 -  / / @
  7.2162 - /___|@
  7.2163 -      @@
  7.2164 -0x017B  LATIN CAPITAL LETTER Z WITH DOT ABOVE
  7.2165 -  __[]_@
  7.2166 - |__  /@
  7.2167 -   / / @
  7.2168 -  / /_ @
  7.2169 - /____|@
  7.2170 -       @@
  7.2171 -0x017C  LATIN SMALL LETTER Z WITH DOT ABOVE
  7.2172 -   [] @
  7.2173 -  ____@
  7.2174 - |_  /@
  7.2175 -  / / @
  7.2176 - /___|@
  7.2177 -      @@
  7.2178 -0x017D  LATIN CAPITAL LETTER Z WITH CARON
  7.2179 -  _\_/_@
  7.2180 - |__  /@
  7.2181 -   / / @
  7.2182 -  / /_ @
  7.2183 - /____|@
  7.2184 -       @@
  7.2185 -0x017E  LATIN SMALL LETTER Z WITH CARON
  7.2186 -  \\//@
  7.2187 -  _\/_@
  7.2188 - |_  /@
  7.2189 -  / / @
  7.2190 - /___|@
  7.2191 -      @@
  7.2192 -0x017F  LATIN SMALL LETTER LONG S
  7.2193 -     __ @
  7.2194 -    / _|@
  7.2195 - |-| |  @
  7.2196 - |-| |  @
  7.2197 -   |_|  @
  7.2198 -        @@
  7.2199 -0x02C7  CARON
  7.2200 - \\//@
  7.2201 -  \/ @
  7.2202 -    $@
  7.2203 -    $@
  7.2204 -    $@
  7.2205 -    $@@
  7.2206 -0x02D8  BREVE
  7.2207 - \\_//@
  7.2208 -  \_/ @
  7.2209 -     $@
  7.2210 -     $@
  7.2211 -     $@
  7.2212 -     $@@
  7.2213 -0x02D9  DOT ABOVE
  7.2214 - []@
  7.2215 -  $@
  7.2216 -  $@
  7.2217 -  $@
  7.2218 -  $@
  7.2219 -  $@@
  7.2220 -0x02DB  OGONEK
  7.2221 -    $@
  7.2222 -    $@
  7.2223 -    $@
  7.2224 -    $@
  7.2225 -    $@
  7.2226 - )_) @@
  7.2227 -0x02DD  DOUBLE ACUTE ACCENT
  7.2228 -  _ _ @
  7.2229 - /_/_/@
  7.2230 -     $@
  7.2231 -     $@
  7.2232 -     $@
  7.2233 -     $@@
     8.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     8.2 +++ b/xen/tools/Makefile	Wed Dec 29 11:16:06 2004 +0000
     8.3 @@ -0,0 +1,6 @@
     8.4 +
     8.5 +default:
     8.6 +	$(MAKE) -C figlet
     8.7 +
     8.8 +clean:
     8.9 +	$(MAKE) -C figlet clean
    8.10 \ No newline at end of file
     9.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     9.2 +++ b/xen/tools/figlet/LICENSE	Wed Dec 29 11:16:06 2004 +0000
     9.3 @@ -0,0 +1,111 @@
     9.4 +http://www.sunsite.unc.edu/pub/Linux/LICENSES/artistic.license
     9.5 +
     9.6 +			 The "Artistic License"
     9.7 +
     9.8 +				Preamble
     9.9 +
    9.10 +The intent of this document is to state the conditions under which a
    9.11 +Package may be copied, such that the Copyright Holder maintains some
    9.12 +semblance of artistic control over the development of the package,
    9.13 +while giving the users of the package the right to use and distribute
    9.14 +the Package in a more-or-less customary fashion, plus the right to make
    9.15 +reasonable modifications.
    9.16 +
    9.17 +Definitions:
    9.18 +
    9.19 +	"Package" refers to the collection of files distributed by the
    9.20 +	Copyright Holder, and derivatives of that collection of files
    9.21 +	created through textual modification.
    9.22 +
    9.23 +	"Standard Version" refers to such a Package if it has not been
    9.24 +	modified, or has been modified in accordance with the wishes
    9.25 +	of the Copyright Holder.
    9.26 +
    9.27 +	"Copyright Holder" is whoever is named in the copyright or
    9.28 +	copyrights for the package.
    9.29 +
    9.30 +	"You" is you, if you're thinking about copying or distributing
    9.31 +	this Package.
    9.32 +
    9.33 +	"Reasonable copying fee" is whatever you can justify on the
    9.34 +	basis of media cost, duplication charges, time of people involved,
    9.35 +	and so on.  (You will not be required to justify it to the
    9.36 +	Copyright Holder, but only to the computing community at large
    9.37 +	as a market that must bear the fee.)
    9.38 +
    9.39 +	"Freely Available" means that no fee is charged for the item
    9.40 +	itself, though there may be fees involved in handling the item.
    9.41 +	It also means that recipients of the item may redistribute it
    9.42 +	under the same conditions they received it.
    9.43 +
    9.44 +1. You may make and give away verbatim copies of the source form of the
    9.45 +Standard Version of this Package without restriction, provided that you
    9.46 +duplicate all of the original copyright notices and associated disclaimers.
    9.47 +
    9.48 +2. You may apply bug fixes, portability fixes and other modifications
    9.49 +derived from the Public Domain or from the Copyright Holder.  A Package
    9.50 +modified in such a way shall still be considered the Standard Version.
    9.51 +
    9.52 +3. You may otherwise modify your copy of this Package in any way, provided
    9.53 +that you insert a prominent notice in each changed file stating how and
    9.54 +when you changed that file, and provided that you do at least ONE of the
    9.55 +following:
    9.56 +
    9.57 +    a) place your modifications in the Public Domain or otherwise make them
    9.58 +    Freely Available, such as by posting said modifications to Usenet or
    9.59 +    an equivalent medium, or placing the modifications on a major archive
    9.60 +    site such as ftp.uu.net, or by allowing the Copyright Holder to include
    9.61 +    your modifications in the Standard Version of the Package.
    9.62 +
    9.63 +    b) use the modified Package only within your corporation or organization.
    9.64 +
    9.65 +    c) rename any non-standard executables so the names do not conflict
    9.66 +    with standard executables, which must also be provided, and provide
    9.67 +    a separate manual page for each non-standard executable that clearly
    9.68 +    documents how it differs from the Standard Version.
    9.69 +
    9.70 +    d) make other distribution arrangements with the Copyright Holder.
    9.71 +
    9.72 +4. You may distribute the programs of this Package in object code or
    9.73 +executable form, provided that you do at least ONE of the following:
    9.74 +
    9.75 +    a) distribute a Standard Version of the executables and library files,
    9.76 +    together with instructions (in the manual page or equivalent) on where
    9.77 +    to get the Standard Version.
    9.78 +
    9.79 +    b) accompany the distribution with the machine-readable source of
    9.80 +    the Package with your modifications.
    9.81 +
    9.82 +    c) accompany any non-standard executables with their corresponding
    9.83 +    Standard Version executables, giving the non-standard executables
    9.84 +    non-standard names, and clearly documenting the differences in manual
    9.85 +    pages (or equivalent), together with instructions on where to get
    9.86 +    the Standard Version.
    9.87 +
    9.88 +    d) make other distribution arrangements with the Copyright Holder.
    9.89 +
    9.90 +5. You may charge a reasonable copying fee for any distribution of this
    9.91 +Package.  You may charge any fee you choose for support of this Package.
    9.92 +You may not charge a fee for this Package itself.  However,
    9.93 +you may distribute this Package in aggregate with other (possibly
    9.94 +commercial) programs as part of a larger (possibly commercial) software
    9.95 +distribution provided that you do not advertise this Package as a
    9.96 +product of your own.
    9.97 +
    9.98 +6. The scripts and library files supplied as input to or produced as
    9.99 +output from the programs of this Package do not automatically fall
   9.100 +under the copyright of this Package, but belong to whomever generated
   9.101 +them, and may be sold commercially, and may be aggregated with this
   9.102 +Package.
   9.103 +
   9.104 +7. C or perl subroutines supplied by you and linked into this Package
   9.105 +shall not be considered part of this Package.
   9.106 +
   9.107 +8. The name of the Copyright Holder may not be used to endorse or promote
   9.108 +products derived from this software without specific prior written permission.
   9.109 +
   9.110 +9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
   9.111 +IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
   9.112 +WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
   9.113 +
   9.114 +				The End
    10.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    10.2 +++ b/xen/tools/figlet/Makefile	Wed Dec 29 11:16:06 2004 +0000
    10.3 @@ -0,0 +1,8 @@
    10.4 +
    10.5 +CC := gcc
    10.6 +
    10.7 +figlet: figlet.c
    10.8 +	$(CC) -o $@ $<
    10.9 +
   10.10 +clean:
   10.11 +	rm -f *.o figlet
    11.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    11.2 +++ b/xen/tools/figlet/README	Wed Dec 29 11:16:06 2004 +0000
    11.3 @@ -0,0 +1,9 @@
    11.4 +
    11.5 +NB. This is a very hacked version of Figlet 2.2.1. 
    11.6 +
    11.7 +Don't use this outside the Xen build system. A proper version of Figlet
    11.8 +can be had from <http://www.figlet.org>.
    11.9 +
   11.10 +The distribution license is intact in the LICENSE file.
   11.11 +
   11.12 + -- Keir Fraser (2/5/2003)
    12.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    12.2 +++ b/xen/tools/figlet/figlet.c	Wed Dec 29 11:16:06 2004 +0000
    12.3 @@ -0,0 +1,2075 @@
    12.4 +
    12.5 +/*
    12.6 + * XXXXXXXXXXXXXXXXXXXXXXXXXXX
    12.7 + * 
    12.8 + * This is a HACKED figlet source file for Xen.
    12.9 + * 
   12.10 + * Hacked to output C octal strings for inclusion in a header file.
   12.11 + * Support for opening zipped files is removed.
   12.12 + * 
   12.13 + * Go to www.figlet.org for the unhacked Figlet sources.
   12.14 + */
   12.15 +
   12.16 +/****************************************************************************
   12.17 +
   12.18 +  FIGlet Copyright 1991, 1993, 1994 Glenn Chappell and Ian Chai
   12.19 +  FIGlet Copyright 1996, 1997, 1998, 1999, 2000, 2001 John Cowan
   12.20 +  FIGlet Copyright 2002 Christiaan Keet
   12.21 +  Portions written by Paul Burton and Christiaan Keet
   12.22 +  Internet: <info@figlet.org>
   12.23 +  FIGlet, along with the various FIGlet fonts and documentation, is
   12.24 +    copyrighted under the provisions of the Artistic License (as listed
   12.25 +    in the file "Artistic-license.txt" which is included in this package.
   12.26 +****************************************************************************/
   12.27 +
   12.28 +#define DATE "13 July 2002"
   12.29 +#define VERSION "2.2.1"
   12.30 +#define VERSION_INT 20201
   12.31 +
   12.32 +/* FIGlet (Frank, Ian & Glenn's Letters) */
   12.33 +/* by Glenn Chappell */
   12.34 +/* Apr 1991 */
   12.35 +/* Automatic file addition by Ian Chai May 1991 */
   12.36 +/* Punctuation and numbers addition by Ian Chai Jan 1993 */
   12.37 +/* Full ASCII by Glenn Chappell Feb 1993 */
   12.38 +/* Line-breaking, general rewrite by Glenn Chappell Mar 1993 */
   12.39 +/* Hard blanks by Glenn Chappell Apr 1993 */
   12.40 +/* Release 2.0 5 Aug 1993 */
   12.41 +/* Right-to-left printing, extended char set by Glenn Chappell Dec 1993 */
   12.42 +/* Control files by Glenn Chappell Feb 1994 */
   12.43 +/* Release 2.1 12 Aug 1994 */
   12.44 +/* Release 2.1.1 25 Aug 1994 */
   12.45 +/* Release 2.1.2 by Gilbert (Mad Programmer) Healton: Add -A command line 
   12.46 +   option.  Sept 8, 1996 */
   12.47 +/* Release 2.2 by John Cowan: multibyte inputs, compressed fonts,
   12.48 +   mapping tables, kerning/smushing options. */
   12.49 +/* Release 2.2.1 by Christiaan Keet: minor updates including readmes
   12.50 +   FAQs and comments. 13 July 2002. The new official FIGlet website is 
   12.51 +   http://www.figlet.org/  */
   12.52 +
   12.53 +#define DEFAULTFONTDIR "."
   12.54 +#define DEFAULTFONTFILE "xen.flf"
   12.55 +
   12.56 +#include <stdio.h>
   12.57 +#ifdef __STDC__
   12.58 +#include <stdlib.h>
   12.59 +#endif
   12.60 +#include <string.h>
   12.61 +#include <ctype.h>
   12.62 +#include <fcntl.h>     /* Needed for get_columns */
   12.63 +
   12.64 +#ifdef unix
   12.65 +#include <sys/ioctl.h> /* Needed for get_columns */
   12.66 +#endif
   12.67 +
   12.68 +
   12.69 +#define ZFILE FILE
   12.70 +#define Zopen fopen
   12.71 +#define Zgetc fgetc
   12.72 +#define Zungetc(_x,_y) fseek(_y,-1,SEEK_CUR)
   12.73 +#define Zclose fclose
   12.74 +
   12.75 +#define MYSTRLEN(x) ((int)strlen(x)) /* Eliminate ANSI problem */
   12.76 +
   12.77 +#define DIRSEP '/'
   12.78 +#define DIRSEP2 '\\'
   12.79 +/* Leave alone for Unix and MS-DOS/Windows!
   12.80 +Note: '/' also used in filename in get_columns(). */
   12.81 +
   12.82 +#define FONTFILESUFFIX ".flf"
   12.83 +#define FONTFILEMAGICNUMBER "flf2"
   12.84 +#define FSUFFIXLEN MYSTRLEN(FONTFILESUFFIX)
   12.85 +#define CONTROLFILESUFFIX ".flc"
   12.86 +#define CONTROLFILEMAGICNUMBER "flc2"   /* no longer used in 2.2 */
   12.87 +#define CSUFFIXLEN MYSTRLEN(CONTROLFILESUFFIX)
   12.88 +#define DEFAULTCOLUMNS 80
   12.89 +
   12.90 +
   12.91 +/****************************************************************************
   12.92 +
   12.93 +  Globals dealing with chars that are read
   12.94 +
   12.95 +****************************************************************************/
   12.96 +
   12.97 +typedef long inchr; /* "char" read from stdin */
   12.98 +
   12.99 +inchr *inchrline;  /* Alloc'd inchr inchrline[inchrlinelenlimit+1]; */
  12.100 +                   /* Note: not null-terminated. */
  12.101 +int inchrlinelen,inchrlinelenlimit;
  12.102 +inchr deutsch[7] = {196, 214, 220, 228, 246, 252, 223};
  12.103 +  /* Latin-1 codes for German letters, respectively:
  12.104 +     LATIN CAPITAL LETTER A WITH DIAERESIS = A-umlaut
  12.105 +     LATIN CAPITAL LETTER O WITH DIAERESIS = O-umlaut
  12.106 +     LATIN CAPITAL LETTER U WITH DIAERESIS = U-umlaut
  12.107 +     LATIN SMALL LETTER A WITH DIAERESIS = a-umlaut
  12.108 +     LATIN SMALL LETTER O WITH DIAERESIS = o-umlaut
  12.109 +     LATIN SMALL LETTER U WITH DIAERESIS = u-umlaut
  12.110 +     LATIN SMALL LETTER SHARP S = ess-zed
  12.111 +  */
  12.112 +
  12.113 +int hzmode;  /* true if reading double-bytes in HZ mode */
  12.114 +int gndbl[4]; /* gndbl[n] is true if Gn is double-byte */
  12.115 +inchr gn[4]; /* Gn character sets: ASCII, Latin-1, none, none */
  12.116 +int gl; /* 0-3 specifies left-half Gn character set */
  12.117 +int gr; /* 0-3 specifies right-half Gn character set */
  12.118 +
  12.119 +int Myargc;  /* to avoid passing around argc and argv */
  12.120 +char **Myargv;
  12.121 +
  12.122 +/****************************************************************************
  12.123 +
  12.124 +  Globals dealing with chars that are written
  12.125 +
  12.126 +****************************************************************************/
  12.127 +
  12.128 +typedef struct fc {
  12.129 +  inchr ord;
  12.130 +  char **thechar;  /* Alloc'd char thechar[charheight][]; */
  12.131 +  struct fc *next;
  12.132 +  } fcharnode;
  12.133 +
  12.134 +fcharnode *fcharlist;
  12.135 +char **currchar;
  12.136 +int currcharwidth;
  12.137 +int previouscharwidth;
  12.138 +char **outputline;    /* Alloc'd char outputline[charheight][outlinelenlimit+1]; */
  12.139 +int outlinelen;
  12.140 +
  12.141 +
  12.142 +/****************************************************************************
  12.143 +
  12.144 +  Globals dealing with command file storage
  12.145 +
  12.146 +****************************************************************************/
  12.147 +
  12.148 +typedef struct cfn {
  12.149 +  char *thename;
  12.150 +  struct cfn *next;
  12.151 +  } cfnamenode;
  12.152 +
  12.153 +cfnamenode *cfilelist,**cfilelistend;
  12.154 +
  12.155 +typedef struct cm {
  12.156 +  int thecommand;
  12.157 +  inchr rangelo;
  12.158 +  inchr rangehi;
  12.159 +  inchr offset;
  12.160 +  struct cm *next;
  12.161 +  } comnode;
  12.162 +
  12.163 +comnode *commandlist,**commandlistend;
  12.164 +
  12.165 +/****************************************************************************
  12.166 +
  12.167 +  Globals affected by command line options
  12.168 +
  12.169 +****************************************************************************/
  12.170 +
  12.171 +int deutschflag,justification,paragraphflag,right2left,multibyte;
  12.172 +int cmdinput;
  12.173 +
  12.174 +#define SM_SMUSH 128
  12.175 +#define SM_KERN 64
  12.176 +#define SM_EQUAL 1
  12.177 +#define SM_LOWLINE 2
  12.178 +#define SM_HIERARCHY 4
  12.179 +#define SM_PAIR 8
  12.180 +#define SM_BIGX 16
  12.181 +#define SM_HARDBLANK 32
  12.182 +
  12.183 +int smushmode;
  12.184 +
  12.185 +#define SMO_NO 0     /* no command-line smushmode */
  12.186 +#define SMO_YES 1    /* use command-line smushmode, ignore font smushmode */
  12.187 +#define SMO_FORCE 2  /* logically OR command-line and font smushmodes */
  12.188 +
  12.189 +int smushoverride;
  12.190 +
  12.191 +int outputwidth;
  12.192 +int outlinelenlimit;
  12.193 +char *fontdirname,*fontname;
  12.194 +
  12.195 +
  12.196 +/****************************************************************************
  12.197 +
  12.198 +  Globals read from font file
  12.199 +
  12.200 +****************************************************************************/
  12.201 +
  12.202 +char hardblank;
  12.203 +int charheight;
  12.204 +
  12.205 +
  12.206 +/****************************************************************************
  12.207 +
  12.208 +  Name of program, used in error messages
  12.209 +
  12.210 +****************************************************************************/
  12.211 +
  12.212 +char *myname;
  12.213 +
  12.214 +
  12.215 +#ifdef TIOCGWINSZ
  12.216 +/****************************************************************************
  12.217 +
  12.218 +  get_columns
  12.219 +
  12.220 +  Determines the number of columns of /dev/tty.  Returns the number of
  12.221 +  columns, or -1 if error.  May return 0 if columns unknown.
  12.222 +  Requires include files <fcntl.h> and <sys/ioctl.h>.
  12.223 +  by Glenn Chappell & Ian Chai 14 Apr 1993
  12.224 +
  12.225 +****************************************************************************/
  12.226 +
  12.227 +int get_columns()
  12.228 +{
  12.229 +  struct winsize ws;
  12.230 +  int fd,result;
  12.231 +
  12.232 +  if ((fd = open("/dev/tty",O_WRONLY))<0) return -1;
  12.233 +  result = ioctl(fd,TIOCGWINSZ,&ws);
  12.234 +  close(fd);
  12.235 +  return result?-1:ws.ws_col;
  12.236 +}
  12.237 +#endif /* ifdef TIOCGWINSZ */
  12.238 +
  12.239 +
  12.240 +/****************************************************************************
  12.241 +
  12.242 +  myalloc
  12.243 +
  12.244 +  Calls malloc.  If malloc returns error, prints error message and
  12.245 +  quits.
  12.246 +
  12.247 +****************************************************************************/
  12.248 +
  12.249 +#ifdef __STDC__
  12.250 +char *myalloc(size_t size)
  12.251 +#else
  12.252 +char *myalloc(size)
  12.253 +int size;
  12.254 +#endif
  12.255 +{
  12.256 +  char *ptr;
  12.257 +#ifndef __STDC__
  12.258 +  extern void *malloc();
  12.259 +#endif
  12.260 +
  12.261 +  if ((ptr = (char*)malloc(size))==NULL) {
  12.262 +    fprintf(stderr,"%s: Out of memory\n",myname);
  12.263 +    exit(1);
  12.264 +    }
  12.265 +  else {
  12.266 +    return ptr;
  12.267 +    }
  12.268 +}
  12.269 +
  12.270 +
  12.271 +/****************************************************************************
  12.272 +
  12.273 +  hasdirsep
  12.274 +
  12.275 +  Returns true if s1 contains a DIRSEP or DIRSEP2 character.
  12.276 +
  12.277 +****************************************************************************/
  12.278 +
  12.279 +int hasdirsep(s1)
  12.280 +char *s1;
  12.281 +{
  12.282 +  if (strchr(s1, DIRSEP)) return 1;
  12.283 +  else if (strchr(s1, DIRSEP2)) return 1;
  12.284 +  else return 0;
  12.285 +}
  12.286 +
  12.287 +/****************************************************************************
  12.288 +
  12.289 +  suffixcmp
  12.290 +
  12.291 +  Returns true if s2 is a suffix of s1; uses case-blind comparison.
  12.292 +
  12.293 +****************************************************************************/
  12.294 +
  12.295 +int suffixcmp(s1, s2)
  12.296 +char *s1;
  12.297 +char *s2;
  12.298 +{
  12.299 +  int len1, len2;
  12.300 +
  12.301 +  len1 = MYSTRLEN(s1);
  12.302 +  len2 = MYSTRLEN(s2);
  12.303 +  if (len2 > len1) return 0;
  12.304 +  s1 += len1 - len2;
  12.305 +  while (*s1) {
  12.306 +    if (tolower(*s1) != tolower(*s2)) return 0;
  12.307 +    s1++;
  12.308 +    s2++;
  12.309 +    }
  12.310 +  return 1;
  12.311 +}
  12.312 +   
  12.313 +/****************************************************************************
  12.314 +
  12.315 +  skiptoeol
  12.316 +
  12.317 +  Skips to the end of a line, given a stream.  Handles \r, \n, or \r\n.
  12.318 +
  12.319 +****************************************************************************/
  12.320 +
  12.321 +void skiptoeol(fp)
  12.322 +ZFILE *fp;
  12.323 +{
  12.324 +  int dummy;
  12.325 +
  12.326 +  while (dummy=Zgetc(fp),dummy!=EOF) {
  12.327 +    if (dummy == '\n') return;
  12.328 +    if (dummy == '\r') {
  12.329 +      dummy = Zgetc(fp);
  12.330 +      if (dummy != EOF && dummy != '\n') Zungetc(dummy,fp);
  12.331 +      return;
  12.332 +      }
  12.333 +  }
  12.334 +}
  12.335 +
  12.336 +
  12.337 +/****************************************************************************
  12.338 +
  12.339 +  myfgets
  12.340 +
  12.341 +  Local version of fgets.  Handles \r, \n, and \r\n terminators.
  12.342 +
  12.343 +****************************************************************************/
  12.344 +
  12.345 +char *myfgets(line,maxlen,fp)
  12.346 +char *line;
  12.347 +int maxlen;
  12.348 +ZFILE *fp;
  12.349 +{
  12.350 +  int c = 0;
  12.351 +  char *p;
  12.352 +
  12.353 +  p = line;
  12.354 +  while((c=Zgetc(fp))!=EOF&&maxlen) {
  12.355 +    *p++ = c;
  12.356 +    maxlen--;
  12.357 +    if (c=='\n') break;
  12.358 +    if (c=='\r') {
  12.359 +      c = Zgetc(fp);
  12.360 +      if (c != EOF && c != '\n') Zungetc(c,fp);
  12.361 +      *(p-1) = '\n';
  12.362 +      break;
  12.363 +      }
  12.364 +    }
  12.365 +  *p = 0;
  12.366 +  return (c==EOF) ? NULL : line;
  12.367 +}
  12.368 +
  12.369 +/****************************************************************************
  12.370 +
  12.371 +  usageerr
  12.372 +
  12.373 +  Prints "Usage: ...." line to the given stream.
  12.374 +
  12.375 +****************************************************************************/
  12.376 +
  12.377 +void printusage(out)
  12.378 +FILE *out;
  12.379 +{
  12.380 +  fprintf(out,
  12.381 +    "Usage: %s [ -cklnoprstvxDELNRSWX ] [ -d fontdirectory ]\n",
  12.382 +    myname);
  12.383 +  fprintf(out,
  12.384 +    "              [ -f fontfile ] [ -m smushmode ] [ -w outputwidth ]\n");
  12.385 +  fprintf(out,
  12.386 +    "              [ -C controlfile ] [ -I infocode ] [ message ]\n");
  12.387 +}
  12.388 +
  12.389 +
  12.390 +/****************************************************************************
  12.391 +
  12.392 +  printinfo
  12.393 +
  12.394 +  Prints version and copyright message, or utility information.
  12.395 +
  12.396 +****************************************************************************/
  12.397 +
  12.398 +void printinfo(infonum)
  12.399 +int infonum;
  12.400 +{
  12.401 +  switch (infonum) {
  12.402 +    case 0: /* Copyright message */
  12.403 +      printf("FIGlet Copyright 1991-2002 Glenn Chappell, Ian Chai, ");
  12.404 +      printf("John Cowan, Christiaan Keet\n");
  12.405 +      printf("Internet: <info@figlet.org> ");
  12.406 +      printf("Version: %s, date: %s\n\n",VERSION,DATE);
  12.407 +      printf("FIGlet, along with the various FIGlet fonts");
  12.408 +      printf(" and documentation, may be\n");
  12.409 +      printf("freely copied and distributed.\n\n");
  12.410 +      printf("If you use FIGlet, please send an");
  12.411 +      printf(" e-mail message to <info@figlet.org>.\n\n");
  12.412 +      printf("The latest version of FIGlet is available from the");
  12.413 +      printf(" web site,\n\thttp://www.figlet.org/\n\n");
  12.414 +      printusage(stdout);
  12.415 +      break;
  12.416 +    case 1: /* Version (integer) */
  12.417 +      printf("%d\n",VERSION_INT);
  12.418 +      break;
  12.419 +    case 2: /* Font directory */
  12.420 +      printf("%s\n",fontdirname);
  12.421 +      break;
  12.422 +    case 3: /* Font */
  12.423 +      printf("%s\n",fontname);
  12.424 +      break;
  12.425 +    case 4: /* Outputwidth */
  12.426 +      printf("%d\n",outputwidth);
  12.427 +    }
  12.428 +}
  12.429 +
  12.430 +
  12.431 +/****************************************************************************
  12.432 +
  12.433 +  readmagic
  12.434 +
  12.435 +  Reads a four-character magic string from a stream.
  12.436 +
  12.437 +****************************************************************************/
  12.438 +void readmagic(fp,magic)
  12.439 +ZFILE *fp;
  12.440 +char *magic;
  12.441 +{
  12.442 +  int i;
  12.443 +
  12.444 +  for (i=0;i<4;i++) {
  12.445 +    magic[i] = Zgetc(fp);
  12.446 +    }
  12.447 +  magic[4] = 0;
  12.448 +  }
  12.449 +  
  12.450 +/****************************************************************************
  12.451 +
  12.452 +  skipws
  12.453 +
  12.454 +  Skips whitespace characters from a stream.
  12.455 +
  12.456 +****************************************************************************/
  12.457 +void skipws(fp)
  12.458 +ZFILE *fp;
  12.459 +{
  12.460 +  int c;
  12.461 +  while (c=Zgetc(fp),isascii(c)&&isspace(c)) ;
  12.462 +  Zungetc(c,fp);
  12.463 +  }
  12.464 +
  12.465 +/****************************************************************************
  12.466 +
  12.467 +  readnum
  12.468 +
  12.469 +  Reads a number from a stream.  Accepts "0" prefix for octal and
  12.470 +  "0x" or "0X" for hexadecimal.  Ignores leading whitespace.
  12.471 +
  12.472 +****************************************************************************/
  12.473 +void readnum(fp,nump)
  12.474 +ZFILE *fp;
  12.475 +inchr *nump;
  12.476 +{
  12.477 +  int acc = 0;
  12.478 +  char *p;
  12.479 +  int c;
  12.480 +  int base;
  12.481 +  int sign = 1;
  12.482 +  char digits[] = "0123456789ABCDEF";
  12.483 +
  12.484 +  skipws(fp);
  12.485 +  c = Zgetc(fp);
  12.486 +  if (c=='-') {
  12.487 +    sign = -1;
  12.488 +    }
  12.489 +  else {
  12.490 +    Zungetc(c,fp);
  12.491 +    }
  12.492 +  c = Zgetc(fp);
  12.493 +  if (c=='0') {
  12.494 +     c = Zgetc(fp);
  12.495 +     if (c=='x'||c=='X') {
  12.496 +       base = 16;
  12.497 +       }
  12.498 +     else {
  12.499 +       base = 8;
  12.500 +       Zungetc(c,fp);
  12.501 +       }
  12.502 +    }
  12.503 +  else {
  12.504 +    base = 10;
  12.505 +    Zungetc(c,fp);
  12.506 +    }
  12.507 +
  12.508 +  while((c=Zgetc(fp))!=EOF) {
  12.509 +    c=toupper(c);
  12.510 +    p=strchr(digits,c);
  12.511 +    if (!p) {
  12.512 +      Zungetc(c,fp);
  12.513 +      *nump = acc * sign;
  12.514 +      return;
  12.515 +      }
  12.516 +    acc = acc*base+(p-digits);
  12.517 +    }
  12.518 +  *nump = acc * sign;
  12.519 +  }  
  12.520 +
  12.521 +/****************************************************************************
  12.522 +
  12.523 +  readTchar
  12.524 +
  12.525 +  Reads a control file "T" command character specification.
  12.526 +
  12.527 +  Character is a single byte, an escape sequence, or
  12.528 +  an escaped numeric.
  12.529 +
  12.530 +****************************************************************************/
  12.531 +
  12.532 +inchr readTchar(fp)
  12.533 +ZFILE *fp;
  12.534 +{
  12.535 +  inchr thechar;
  12.536 +  char next;
  12.537 +
  12.538 +  thechar=Zgetc(fp);
  12.539 +  if (thechar=='\n' || thechar=='\r') { /* Handle badly-formatted file */
  12.540 +    Zungetc(thechar,fp);
  12.541 +    return '\0';
  12.542 +    }
  12.543 +  if (thechar!='\\') return thechar;
  12.544 +  next=Zgetc(fp);
  12.545 +  switch(next) {
  12.546 +    case 'a':
  12.547 +      return 7;
  12.548 +    case 'b':
  12.549 +      return 8;
  12.550 +    case 'e':
  12.551 +      return 27;
  12.552 +    case 'f':
  12.553 +      return 12;
  12.554 +    case 'n':
  12.555 +      return 10;
  12.556 +    case 'r':
  12.557 +      return 13;
  12.558 +    case 't':
  12.559 +      return 9;
  12.560 +    case 'v':
  12.561 +      return 11;
  12.562 +    default:
  12.563 +      if (next=='-' || next=='x' || (next>='0' && next<='9')) {
  12.564 +        Zungetc(next,fp);
  12.565 +        readnum(fp,&thechar);
  12.566 +        return thechar;
  12.567 +        }
  12.568 +      return next;
  12.569 +    }
  12.570 +}
  12.571 +
  12.572 +/****************************************************************************
  12.573 +
  12.574 +  charsetname
  12.575 +
  12.576 +  Get a Tchar representing a charset name, or 0 if none available.
  12.577 +  Called in getcharset().
  12.578 +
  12.579 +****************************************************************************/
  12.580 +
  12.581 +inchr charsetname(fp)
  12.582 +ZFILE *fp;
  12.583 +{
  12.584 +  inchr result;
  12.585 +
  12.586 +  result = readTchar(fp);
  12.587 +  if (result == '\n' || result == '\r') {
  12.588 +    result = 0;
  12.589 +    Zungetc(result,fp);
  12.590 +    }
  12.591 +  return result;
  12.592 +  }
  12.593 +
  12.594 +/****************************************************************************
  12.595 +
  12.596 +  charset
  12.597 +
  12.598 +  Processes "g[0123]" character set specifier
  12.599 +  Called in readcontrol().
  12.600 +
  12.601 +****************************************************************************/
  12.602 +
  12.603 +void charset(n, controlfile)
  12.604 +int n;
  12.605 +ZFILE *controlfile;
  12.606 +{
  12.607 +  int ch;
  12.608 +
  12.609 +  skipws(controlfile);
  12.610 +  if (Zgetc(controlfile) != '9') {
  12.611 +    skiptoeol(controlfile);
  12.612 +    return;
  12.613 +    }
  12.614 +  ch = Zgetc(controlfile);
  12.615 +  if (ch == '6') {
  12.616 +     gn[n] = 65536L * charsetname(controlfile) + 0x80;
  12.617 +     gndbl[n] = 0;
  12.618 +     skiptoeol(controlfile);
  12.619 +     return;
  12.620 +     }
  12.621 +  if (ch != '4') {
  12.622 +    skiptoeol(controlfile);
  12.623 +    return;
  12.624 +    }
  12.625 +  ch = Zgetc(controlfile);
  12.626 +  if (ch == 'x') {
  12.627 +     if (Zgetc(controlfile) != '9') {
  12.628 +       skiptoeol(controlfile);
  12.629 +       return;
  12.630 +       }
  12.631 +     if (Zgetc(controlfile) != '4') {
  12.632 +       skiptoeol(controlfile);
  12.633 +       return;
  12.634 +       }
  12.635 +     skipws(controlfile);
  12.636 +     gn[n] = 65536L * charsetname(controlfile);
  12.637 +     gndbl[n] = 1;
  12.638 +     skiptoeol(controlfile);
  12.639 +     return;
  12.640 +     }
  12.641 +  Zungetc(ch, controlfile);
  12.642 +  skipws(controlfile);
  12.643 +  gn[n] = 65536L * charsetname(controlfile);
  12.644 +  gndbl[n] = 0;
  12.645 +  return;
  12.646 +  }
  12.647 +
  12.648 +/****************************************************************************
  12.649 +
  12.650 +  readcontrol
  12.651 +
  12.652 +  Allocates memory and reads in the given control file.
  12.653 +  Called in readcontrolfiles().
  12.654 +
  12.655 +****************************************************************************/
  12.656 +
  12.657 +void readcontrol(controlname)
  12.658 +char *controlname;
  12.659 +{
  12.660 +  inchr firstch,lastch;
  12.661 +  char dashcheck;
  12.662 +  inchr offset;
  12.663 +  char *controlpath,magicnum[5];
  12.664 +  int command;
  12.665 +  ZFILE *controlfile;
  12.666 +  int namelen;
  12.667 +
  12.668 +  namelen = MYSTRLEN(fontdirname);
  12.669 +  controlpath = (char*)myalloc(sizeof(char)
  12.670 +    *(namelen+MYSTRLEN(controlname)+CSUFFIXLEN+2));
  12.671 +  controlfile = NULL;
  12.672 +  if (!hasdirsep(controlname)) {
  12.673 +    strcpy(controlpath,fontdirname);
  12.674 +    controlpath[namelen] = DIRSEP;
  12.675 +    controlpath[namelen+1] = '\0';
  12.676 +    strcat(controlpath,controlname);
  12.677 +    strcat(controlpath,CONTROLFILESUFFIX);
  12.678 +    controlfile = Zopen(controlpath,"rb");
  12.679 +    }
  12.680 +  if (controlfile==NULL) {
  12.681 +    strcpy(controlpath,controlname);
  12.682 +    strcat(controlpath,CONTROLFILESUFFIX);
  12.683 +    controlfile = Zopen(controlpath,"rb");
  12.684 +    if (controlfile==NULL) {
  12.685 +      fprintf(stderr,"%s: %s: Unable to open control file\n",myname,
  12.686 +        controlpath);
  12.687 +      exit(1);
  12.688 +      }
  12.689 +    }
  12.690 +
  12.691 +  free(controlpath);
  12.692 +
  12.693 +  (*commandlistend) = (comnode*)myalloc(sizeof(comnode));
  12.694 +  (*commandlistend)->thecommand = 0; /* Begin with a freeze command */
  12.695 +  commandlistend = &(*commandlistend)->next;
  12.696 +  (*commandlistend) = NULL;
  12.697 +
  12.698 +  while(command=Zgetc(controlfile),command!=EOF) {
  12.699 +    switch (command) {
  12.700 +      case 't': /* Translate */
  12.701 +        skipws(controlfile);
  12.702 +        firstch=readTchar(controlfile);
  12.703 +        if ((dashcheck=Zgetc(controlfile))=='-') {
  12.704 +          lastch=readTchar(controlfile);
  12.705 +          }
  12.706 +        else {
  12.707 +          Zungetc(dashcheck,controlfile);
  12.708 +          lastch=firstch;
  12.709 +          }
  12.710 +        skipws(controlfile);
  12.711 +        offset=readTchar(controlfile)-firstch;
  12.712 +        skiptoeol(controlfile);
  12.713 +        (*commandlistend) = (comnode*)myalloc(sizeof(comnode));
  12.714 +        (*commandlistend)->thecommand = 1;
  12.715 +        (*commandlistend)->rangelo = firstch;
  12.716 +        (*commandlistend)->rangehi = lastch;
  12.717 +        (*commandlistend)->offset = offset;
  12.718 +        commandlistend = &(*commandlistend)->next;
  12.719 +        (*commandlistend) = NULL;
  12.720 +        break;
  12.721 +      case '0': case '1': case '2': case '3': case '4':
  12.722 +      case '5': case '6': case '7': case '8': case '9':
  12.723 +      case '-':
  12.724 +                /* Mapping table entry */
  12.725 +        Zungetc(command,controlfile);
  12.726 +        readnum(controlfile,&firstch);
  12.727 +        skipws(controlfile);
  12.728 +	readnum(controlfile,&lastch);
  12.729 +	offset=lastch-firstch;
  12.730 +        lastch=firstch;
  12.731 +        skiptoeol(controlfile);
  12.732 +        (*commandlistend) = (comnode*)myalloc(sizeof(comnode));
  12.733 +        (*commandlistend)->thecommand = 1;
  12.734 +        (*commandlistend)->rangelo = firstch;
  12.735 +        (*commandlistend)->rangehi = lastch;
  12.736 +        (*commandlistend)->offset = offset;
  12.737 +        commandlistend = &(*commandlistend)->next;
  12.738 +        (*commandlistend) = NULL;
  12.739 +        break;
  12.740 +      case 'f': /* freeze */
  12.741 +        skiptoeol(controlfile);
  12.742 +        (*commandlistend) = (comnode*)myalloc(sizeof(comnode));
  12.743 +        (*commandlistend)->thecommand = 0;
  12.744 +        commandlistend = &(*commandlistend)->next;
  12.745 +        (*commandlistend) = NULL;
  12.746 +        break;
  12.747 +      case 'b': /* DBCS input mode */
  12.748 +        multibyte = 1;
  12.749 +        break;
  12.750 +      case 'u': /* UTF-8 input mode */
  12.751 +        multibyte = 2;
  12.752 +        break;
  12.753 +      case 'h': /* HZ input mode */
  12.754 +        multibyte = 3;
  12.755 +        break;
  12.756 +      case 'j': /* Shift-JIS input mode */
  12.757 +        multibyte = 4;
  12.758 +        break;
  12.759 +      case 'g': /* ISO 2022 character set choices */
  12.760 +        multibyte = 0;
  12.761 +        skipws(controlfile);
  12.762 +        command=Zgetc(controlfile);
  12.763 +        switch (command) {
  12.764 +          case '0': /* define G0 charset */
  12.765 +            charset(0, controlfile);
  12.766 +            break;
  12.767 +          case '1': /* set G1 charset */
  12.768 +            charset(1, controlfile);
  12.769 +            break;
  12.770 +          case '2': /* set G2 charset */
  12.771 +            charset(2, controlfile);
  12.772 +            break;
  12.773 +          case '3': /* set G3 charset */
  12.774 +            charset(3, controlfile);
  12.775 +            break;
  12.776 +          case 'l': case 'L': /* define left half */
  12.777 +            skipws(controlfile);
  12.778 +            gl = Zgetc(controlfile) - '0';
  12.779 +            skiptoeol(controlfile);
  12.780 +            break;
  12.781 +          case 'r': case 'R': /* define right half */
  12.782 +            skipws(controlfile);
  12.783 +            gr = Zgetc(controlfile) - '0';
  12.784 +            skiptoeol(controlfile);
  12.785 +            break;
  12.786 +          default: /* meaningless "g" command */
  12.787 +            skiptoeol(controlfile);
  12.788 +          }
  12.789 +      case '\r': case '\n': /* blank line */
  12.790 +        break;
  12.791 +      default: /* Includes '#' */
  12.792 +        skiptoeol(controlfile);
  12.793 +      }
  12.794 +    }
  12.795 +  Zclose(controlfile);
  12.796 +}
  12.797 +
  12.798 +
  12.799 +/****************************************************************************
  12.800 +
  12.801 +  readcontrolfiles
  12.802 +
  12.803 +  Reads in the controlfiles names in cfilelist.  Uses readcontrol.
  12.804 +  Called in main().
  12.805 +
  12.806 +****************************************************************************/
  12.807 +
  12.808 +void readcontrolfiles()
  12.809 +{
  12.810 +  cfnamenode *cfnptr;
  12.811 +
  12.812 +  for (cfnptr=cfilelist;cfnptr!=NULL;cfnptr=cfnptr->next) {
  12.813 +    readcontrol(cfnptr->thename);
  12.814 +    }
  12.815 +}
  12.816 +
  12.817 +
  12.818 +/****************************************************************************
  12.819 +
  12.820 +  clearcfilelist
  12.821 +
  12.822 +  Clears the control file list.  Assumes thename does not need freeing.
  12.823 +
  12.824 +****************************************************************************/
  12.825 +
  12.826 +void clearcfilelist()
  12.827 +{
  12.828 +  cfnamenode *cfnptr1,*cfnptr2;
  12.829 +
  12.830 +  cfnptr1 = cfilelist;
  12.831 +  while (cfnptr1 != NULL) {
  12.832 +    cfnptr2 = cfnptr1->next;
  12.833 +    free(cfnptr1);
  12.834 +    cfnptr1 = cfnptr2;
  12.835 +    }
  12.836 +  cfilelist = NULL;
  12.837 +  cfilelistend = &cfilelist;
  12.838 +}
  12.839 +
  12.840 +
  12.841 +/****************************************************************************
  12.842 +
  12.843 +  getparams
  12.844 +
  12.845 +  Handles all command-line parameters.  Puts all parameters within
  12.846 +  bounds.
  12.847 +
  12.848 +****************************************************************************/
  12.849 +
  12.850 +void getparams()
  12.851 +{
  12.852 +  extern char *optarg;
  12.853 +  extern int optind;
  12.854 +  int c; /* "Should" be a char -- need int for "!= -1" test*/
  12.855 +  int columns,firstfont,infoprint;
  12.856 +  char *controlname;
  12.857 +
  12.858 +  if ((myname = strrchr(Myargv[0],DIRSEP))!=NULL) {
  12.859 +    myname++;
  12.860 +    }
  12.861 +  else {
  12.862 +    myname = Myargv[0];
  12.863 +    }
  12.864 +  fontdirname = DEFAULTFONTDIR;
  12.865 +  firstfont = 1;
  12.866 +  fontname = (char*)myalloc(sizeof(char)*(MYSTRLEN(DEFAULTFONTFILE)+1));
  12.867 +  strcpy(fontname,DEFAULTFONTFILE); /* Some systems don't have strdup() */
  12.868 +  if (suffixcmp(fontname,FONTFILESUFFIX)) {
  12.869 +    fontname[MYSTRLEN(fontname)-FSUFFIXLEN]='\0';
  12.870 +    }
  12.871 +  cfilelist = NULL;
  12.872 +  cfilelistend = &cfilelist;
  12.873 +  commandlist = NULL;
  12.874 +  commandlistend = &commandlist;
  12.875 +  smushoverride = SMO_NO;
  12.876 +  deutschflag = 0;
  12.877 +  justification = -1;
  12.878 +  right2left = -1;
  12.879 +  paragraphflag = 0;
  12.880 +  infoprint = -1;
  12.881 +  cmdinput = 0;
  12.882 +  outputwidth = DEFAULTCOLUMNS;
  12.883 +  gn[1] = 0x80;
  12.884 +  gr = 1;
  12.885 +  while ((c = getopt(Myargc,Myargv,"ADEXLRI:xlcrpntvm:w:d:f:C:NFskSWo"))!= -1) {
  12.886 +      /* Note: -F is not a legal option -- prints a special err message.  */
  12.887 +    switch (c) {
  12.888 +      case 'A':
  12.889 +        cmdinput = 1;
  12.890 +        break;
  12.891 +      case 'D':
  12.892 +        deutschflag = 1;
  12.893 +        break;
  12.894 +      case 'E':
  12.895 +        deutschflag = 0;
  12.896 +        break;
  12.897 +      case 'X':
  12.898 +        right2left = -1;
  12.899 +        break;
  12.900 +      case 'L':
  12.901 +        right2left = 0;
  12.902 +        break;
  12.903 +      case 'R':
  12.904 +        right2left = 1;
  12.905 +        break;
  12.906 +      case 'x':
  12.907 +        justification = -1;
  12.908 +        break;
  12.909 +      case 'l':
  12.910 +        justification = 0;
  12.911 +        break;
  12.912 +      case 'c':
  12.913 +        justification = 1;
  12.914 +        break;
  12.915 +      case 'r':
  12.916 +        justification = 2;
  12.917 +        break;
  12.918 +      case 'p':
  12.919 +        paragraphflag = 1;
  12.920 +        break;
  12.921 +      case 'n':
  12.922 +        paragraphflag = 0;
  12.923 +        break;
  12.924 +      case 's':
  12.925 +        smushoverride = SMO_NO;
  12.926 +        break;
  12.927 +      case 'k':
  12.928 +        smushmode = SM_KERN;
  12.929 +        smushoverride = SMO_YES;
  12.930 +        break;
  12.931 +      case 'S':
  12.932 +        smushmode = SM_SMUSH;
  12.933 +	smushoverride = SMO_FORCE;
  12.934 +        break;
  12.935 +      case 'o':
  12.936 +        smushmode = SM_SMUSH;
  12.937 +	smushoverride = SMO_YES;
  12.938 +        break;
  12.939 +      case 'W':
  12.940 +        smushmode = 0;
  12.941 +	smushoverride = SMO_YES;
  12.942 +        break;
  12.943 +      case 't':
  12.944 +#ifdef TIOCGWINSZ
  12.945 +        columns = get_columns();
  12.946 +        if (columns>0) {
  12.947 +          outputwidth = columns;
  12.948 +          }
  12.949 +#else /* ifdef TIOCGWINSZ */
  12.950 +        fprintf(stderr,
  12.951 +          "%s: \"-t\" is disabled, since ioctl is not fully implemented.\n",
  12.952 +          myname);
  12.953 +#endif /* ifdef TIOCGWINSZ */
  12.954 +        break;
  12.955 +      case 'v':
  12.956 +        infoprint = 0;
  12.957 +        break;
  12.958 +      case 'I':
  12.959 +        infoprint = atoi(optarg);
  12.960 +        break;
  12.961 +      case 'm':
  12.962 +        smushmode = atoi(optarg);
  12.963 +        if (smushmode < -1) {
  12.964 +          smushoverride = SMO_NO;
  12.965 +          break;
  12.966 +          }
  12.967 +	if (smushmode == 0) smushmode = SM_KERN;
  12.968 +	else if (smushmode == -1) smushmode = 0;
  12.969 +	else smushmode = (smushmode & 63) | SM_SMUSH;
  12.970 +	smushoverride = SMO_YES;
  12.971 +        break;
  12.972 +      case 'w':
  12.973 +        columns = atoi(optarg);
  12.974 +        if (columns>0) {
  12.975 +          outputwidth = columns;
  12.976 +          }
  12.977 +        break;
  12.978 +      case 'd':
  12.979 +        fontdirname = optarg;
  12.980 +        break;
  12.981 +      case 'f':
  12.982 +        if (firstfont) {
  12.983 +          free(fontname);
  12.984 +          firstfont = 0;
  12.985 +          }
  12.986 +        fontname = optarg;
  12.987 +        if (suffixcmp(fontname,FONTFILESUFFIX)) {
  12.988 +          fontname[MYSTRLEN(fontname)-FSUFFIXLEN] = '\0';
  12.989 +          }
  12.990 +        break;
  12.991 +      case 'C':
  12.992 +        controlname = optarg;
  12.993 +        if (suffixcmp(controlname, CONTROLFILESUFFIX)) {
  12.994 +          controlname[MYSTRLEN(controlname)-CSUFFIXLEN] = '\0';
  12.995 +          }
  12.996 +        (*cfilelistend) = (cfnamenode*)myalloc(sizeof(cfnamenode));
  12.997 +        (*cfilelistend)->thename = controlname;
  12.998 +        cfilelistend = &(*cfilelistend)->next;
  12.999 +        (*cfilelistend) = NULL;
 12.1000 +        break;
 12.1001 +      case 'N':
 12.1002 +        clearcfilelist();
 12.1003 +        multibyte = 0;
 12.1004 +        gn[0] = 0;
 12.1005 +        gn[1] = 0x80;
 12.1006 +        gn[2] = gn[3] = 0;
 12.1007 +        gndbl[0] = gndbl[1] = gndbl[2] = gndbl[3] = 0;
 12.1008 +        gl = 0;
 12.1009 +        gr = 1;
 12.1010 +        break;
 12.1011 +      case 'F': /* Not a legal option */
 12.1012 +        fprintf(stderr,"%s: illegal option -- F\n",myname);
 12.1013 +        printusage(stderr);
 12.1014 +        fprintf(stderr,"\nBecause of numerous incompatibilities, the");
 12.1015 +        fprintf(stderr," \"-F\" option has been\n");
 12.1016 +        fprintf(stderr,"removed.  It has been replaced by the \"figlist\"");
 12.1017 +        fprintf(stderr," program, which is now\n");
 12.1018 +        fprintf(stderr,"included in the basic FIGlet package.  \"figlist\"");
 12.1019 +        fprintf(stderr," is also available\n");
 12.1020 +        fprintf(stderr,"from  http://www.figlet.org/");
 12.1021 +        fprintf(stderr,"under UNIX utilities.\n");
 12.1022 +        exit(1);
 12.1023 +        break;
 12.1024 +      default:
 12.1025 +        printusage(stderr);
 12.1026 +        exit(1);
 12.1027 +      }
 12.1028 +    }
 12.1029 +  if (optind!=Myargc) cmdinput = 1; /* force cmdinput if more arguments */
 12.1030 +  outlinelenlimit = outputwidth-1;
 12.1031 +  if (infoprint>=0) {
 12.1032 +    printinfo(infoprint);
 12.1033 +    exit(0);
 12.1034 +    }
 12.1035 +}
 12.1036 +
 12.1037 +
 12.1038 +/****************************************************************************
 12.1039 +
 12.1040 +  clearline
 12.1041 +
 12.1042 +  Clears both the input (inchrline) and output (outputline) storage.
 12.1043 +
 12.1044 +****************************************************************************/
 12.1045 +
 12.1046 +void clearline()
 12.1047 +{
 12.1048 +  int i;
 12.1049 +
 12.1050 +  for (i=0;i<charheight;i++) {
 12.1051 +    outputline[i][0] = '\0';
 12.1052 +    }
 12.1053 +  outlinelen = 0;
 12.1054 +  inchrlinelen = 0;
 12.1055 +}
 12.1056 +
 12.1057 +
 12.1058 +/****************************************************************************
 12.1059 +
 12.1060 +  readfontchar
 12.1061 +
 12.1062 +  Reads a font character from the font file, and places it in a
 12.1063 +  newly-allocated entry in the list.
 12.1064 +
 12.1065 +****************************************************************************/
 12.1066 +
 12.1067 +void readfontchar(file,theord,line,maxlen)
 12.1068 +ZFILE *file;
 12.1069 +inchr theord;
 12.1070 +char *line;
 12.1071 +int maxlen;
 12.1072 +{
 12.1073 +  int row,k;
 12.1074 +  char endchar;
 12.1075 +  fcharnode *fclsave;
 12.1076 +
 12.1077 +  fclsave = fcharlist;
 12.1078 +  fcharlist = (fcharnode*)myalloc(sizeof(fcharnode));
 12.1079 +  fcharlist->ord = theord;
 12.1080 +  fcharlist->thechar = (char**)myalloc(sizeof(char*)*charheight);
 12.1081 +  fcharlist->next = fclsave;
 12.1082 +  for (row=0;row<charheight;row++) {
 12.1083 +    if (myfgets(line,maxlen+1,file)==NULL) {
 12.1084 +      line[0] = '\0';
 12.1085 +      }
 12.1086 +    k = MYSTRLEN(line)-1;
 12.1087 +    while (k>=0 && isspace(line[k])) {
 12.1088 +      k--;
 12.1089 +      }
 12.1090 +    if (k>=0) {
 12.1091 +      endchar = line[k];
 12.1092 +      while (k>=0 ? line[k]==endchar : 0) {
 12.1093 +        k--;
 12.1094 +        }
 12.1095 +      }
 12.1096 +    line[k+1] = '\0';
 12.1097 +    fcharlist->thechar[row] = (char*)myalloc(sizeof(char)*(k+2));
 12.1098 +    strcpy(fcharlist->thechar[row],line);
 12.1099 +    }
 12.1100 +}
 12.1101 +
 12.1102 +
 12.1103 +/****************************************************************************
 12.1104 +
 12.1105 +  readfont
 12.1106 +
 12.1107 +  Allocates memory, initializes variables, and reads in the font.
 12.1108 +  Called near beginning of main().
 12.1109 +
 12.1110 +****************************************************************************/
 12.1111 +
 12.1112 +void readfont()
 12.1113 +{
 12.1114 +#define MAXFIRSTLINELEN 1000
 12.1115 +  int i,row,numsread;
 12.1116 +  inchr theord;
 12.1117 +  int maxlen,cmtlines,ffright2left;
 12.1118 +  int smush,smush2;
 12.1119 +  char *fontpath,*fileline,magicnum[5];
 12.1120 +  ZFILE *fontfile;
 12.1121 +  int namelen;
 12.1122 +
 12.1123 +  namelen = MYSTRLEN(fontdirname);
 12.1124 +  fontpath = (char*)myalloc(sizeof(char)
 12.1125 +    *(namelen+MYSTRLEN(fontname)+FSUFFIXLEN+2));
 12.1126 +  fontfile = NULL;
 12.1127 +  if (!hasdirsep(fontname)) {
 12.1128 +    strcpy(fontpath,fontdirname);
 12.1129 +    fontpath[namelen] = DIRSEP;
 12.1130 +    fontpath[namelen+1] = '\0';
 12.1131 +    strcat(fontpath,fontname);
 12.1132 +    strcat(fontpath,FONTFILESUFFIX);
 12.1133 +    fontfile = Zopen(fontpath,"rb");
 12.1134 +    }
 12.1135 +  if (fontfile==NULL) {
 12.1136 +    strcpy(fontpath,fontname);
 12.1137 +    strcat(fontpath,FONTFILESUFFIX);
 12.1138 +    fontfile = Zopen(fontpath,"rb");
 12.1139 +    if (fontfile==NULL) {
 12.1140 +      fprintf(stderr,"%s: %s: Unable to open font file\n",myname,fontpath);
 12.1141 +      exit(1);
 12.1142 +      }
 12.1143 +    }
 12.1144 +
 12.1145 +  readmagic(fontfile,magicnum);
 12.1146 +  fileline = (char*)myalloc(sizeof(char)*(MAXFIRSTLINELEN+1));
 12.1147 +  if (myfgets(fileline,MAXFIRSTLINELEN+1,fontfile)==NULL) {
 12.1148 +    fileline[0] = '\0';
 12.1149 +    }
 12.1150 +  if (MYSTRLEN(fileline)>0 ? fileline[MYSTRLEN(fileline)-1]!='\n' : 0) {
 12.1151 +    skiptoeol(fontfile);
 12.1152 +    }
 12.1153 +  numsread = sscanf(fileline,"%*c%c %d %*d %d %d %d %d %d",
 12.1154 +    &hardblank,&charheight,&maxlen,&smush,&cmtlines,
 12.1155 +    &ffright2left,&smush2);
 12.1156 +  free(fileline);
 12.1157 +  if (strcmp(magicnum,FONTFILEMAGICNUMBER) || numsread<5) {
 12.1158 +    fprintf(stderr,"%s: %s: Not a FIGlet 2 font file\n",myname,fontpath);
 12.1159 +    exit(1);
 12.1160 +    }
 12.1161 +  for (i=1;i<=cmtlines;i++) {
 12.1162 +    skiptoeol(fontfile);
 12.1163 +    }
 12.1164 +  free(fontpath);
 12.1165 +
 12.1166 +  if (numsread<6) {
 12.1167 +    ffright2left = 0;
 12.1168 +    }
 12.1169 +
 12.1170 +  if (numsread<7) { /* if no smush2, decode smush into smush2 */
 12.1171 +    if (smush == 0) smush2 = SM_KERN;
 12.1172 +    else if (smush < 0) smush2 = 0;
 12.1173 +    else smush2 = (smush & 31) | SM_SMUSH;
 12.1174 +    }
 12.1175 +
 12.1176 +  if (charheight<1) {
 12.1177 +    charheight = 1;
 12.1178 +    }
 12.1179 +
 12.1180 +  if (maxlen<1) {
 12.1181 +    maxlen = 1;
 12.1182 +    }
 12.1183 +
 12.1184 +  maxlen += 100; /* Give ourselves some extra room */
 12.1185 +
 12.1186 +  if (smushoverride == SMO_NO)
 12.1187 +     smushmode = smush2;
 12.1188 +  else if (smushoverride == SMO_FORCE)
 12.1189 +     smushmode |= smush2;
 12.1190 +
 12.1191 +  if (right2left<0) {
 12.1192 +    right2left = ffright2left;
 12.1193 +    }
 12.1194 +
 12.1195 +  if (justification<0) {
 12.1196 +    justification = 2*right2left;
 12.1197 +    }
 12.1198 +
 12.1199 +  fileline = (char*)myalloc(sizeof(char)*(maxlen+1));
 12.1200 +  /* Allocate "missing" character */
 12.1201 +  fcharlist = (fcharnode*)myalloc(sizeof(fcharnode));
 12.1202 +  fcharlist->ord = 0;
 12.1203 +  fcharlist->thechar = (char**)myalloc(sizeof(char*)*charheight);
 12.1204 +  fcharlist->next = NULL;
 12.1205 +  for (row=0;row<charheight;row++) {
 12.1206 +    fcharlist->thechar[row] = (char*)myalloc(sizeof(char));
 12.1207 +    fcharlist->thechar[row][0] = '\0';
 12.1208 +    }
 12.1209 +  for (theord=' ';theord<='~';theord++) {
 12.1210 +    readfontchar(fontfile,theord,fileline,maxlen);
 12.1211 +    }
 12.1212 +  for (theord=0;theord<=6;theord++) {
 12.1213 +    readfontchar(fontfile,deutsch[theord],fileline,maxlen);
 12.1214 +    }
 12.1215 +  while (myfgets(fileline,maxlen+1,fontfile)==NULL?0:
 12.1216 +    sscanf(fileline,"%li",&theord)==1) {
 12.1217 +    readfontchar(fontfile,theord,fileline,maxlen);
 12.1218 +    }
 12.1219 +  Zclose(fontfile);
 12.1220 +  free(fileline);
 12.1221 +}
 12.1222 +
 12.1223 +
 12.1224 +/****************************************************************************
 12.1225 +
 12.1226 +  linealloc
 12.1227 +
 12.1228 +  Allocates & clears outputline, inchrline. Sets inchrlinelenlimit.
 12.1229 +  Called near beginning of main().
 12.1230 +
 12.1231 +****************************************************************************/
 12.1232 +
 12.1233 +void linealloc()
 12.1234 +{
 12.1235 +  int row; 
 12.1236 +
 12.1237 +  outputline = (char**)myalloc(sizeof(char*)*charheight);
 12.1238 +  for (row=0;row<charheight;row++) {
 12.1239 +    outputline[row] = (char*)myalloc(sizeof(char)*(outlinelenlimit+1));
 12.1240 +    }
 12.1241 +  inchrlinelenlimit = outputwidth*4+100;
 12.1242 +  inchrline = (inchr*)myalloc(sizeof(inchr)*(inchrlinelenlimit+1));
 12.1243 +  clearline();
 12.1244 +}
 12.1245 +
 12.1246 +
 12.1247 +/****************************************************************************
 12.1248 +
 12.1249 +  getletter
 12.1250 +
 12.1251 +  Sets currchar to point to the font entry for the given character.
 12.1252 +  Sets currcharwidth to the width of this character.
 12.1253 +
 12.1254 +****************************************************************************/
 12.1255 +
 12.1256 +void getletter(c)
 12.1257 +inchr c;
 12.1258 +{
 12.1259 +  fcharnode *charptr;
 12.1260 +
 12.1261 +  for (charptr=fcharlist;charptr==NULL?0:charptr->ord!=c;
 12.1262 +    charptr=charptr->next) ;
 12.1263 +  if (charptr!=NULL) {
 12.1264 +    currchar = charptr->thechar;
 12.1265 +    }
 12.1266 +  else {
 12.1267 +    for (charptr=fcharlist;charptr==NULL?0:charptr->ord!=0;
 12.1268 +      charptr=charptr->next) ;
 12.1269 +    currchar = charptr->thechar;
 12.1270 +    }
 12.1271 +  previouscharwidth = currcharwidth;
 12.1272 +  currcharwidth = MYSTRLEN(currchar[0]);
 12.1273 +}
 12.1274 +
 12.1275 +
 12.1276 +/****************************************************************************
 12.1277 +
 12.1278 +  smushem
 12.1279 +
 12.1280 +  Given 2 characters, attempts to smush them into 1, according to
 12.1281 +  smushmode.  Returns smushed character or '\0' if no smushing can be
 12.1282 +  done.
 12.1283 +
 12.1284 +  smushmode values are sum of following (all values smush blanks):
 12.1285 +    1: Smush equal chars (not hardblanks)
 12.1286 +    2: Smush '_' with any char in hierarchy below
 12.1287 +    4: hierarchy: "|", "/\", "[]", "{}", "()", "<>"
 12.1288 +       Each class in hier. can be replaced by later class.
 12.1289 +    8: [ + ] -> |, { + } -> |, ( + ) -> |
 12.1290 +   16: / + \ -> X, > + < -> X (only in that order)
 12.1291 +   32: hardblank + hardblank -> hardblank
 12.1292 +
 12.1293 +****************************************************************************/
 12.1294 +
 12.1295 +char smushem(lch,rch)
 12.1296 +char lch,rch;
 12.1297 +{
 12.1298 +  if (lch==' ') return rch;
 12.1299 +  if (rch==' ') return lch;
 12.1300 +
 12.1301 +  if (previouscharwidth<2 || currcharwidth<2) return '\0';
 12.1302 +    /* Disallows overlapping if the previous character */
 12.1303 +    /* or the current character has a width of 1 or zero. */
 12.1304 +
 12.1305 +  if ((smushmode & SM_SMUSH) == 0) return '\0';  /* kerning */
 12.1306 +
 12.1307 +  if ((smushmode & 63) == 0) {
 12.1308 +    /* This is smushing by universal overlapping. */
 12.1309 +    if (lch==' ') return rch;
 12.1310 +    if (rch==' ') return lch;
 12.1311 +    if (lch==hardblank) return rch;
 12.1312 +    if (rch==hardblank) return lch;
 12.1313 +      /* Above four lines ensure overlapping preference to */
 12.1314 +      /* visible characters. */
 12.1315 +    if (right2left==1) return lch;
 12.1316 +      /* Above line ensures that the dominant (foreground) */
 12.1317 +      /* fig-character for overlapping is the latter in the */
 12.1318 +      /* user's text, not necessarily the rightmost character. */
 12.1319 +    return rch;
 12.1320 +      /* Occurs in the absence of above exceptions. */
 12.1321 +    }
 12.1322 +  
 12.1323 +  if (smushmode & SM_HARDBLANK) {
 12.1324 +    if (lch==hardblank && rch==hardblank) return lch;
 12.1325 +    }
 12.1326 +
 12.1327 +  if (lch==hardblank || rch==hardblank) return '\0';
 12.1328 +
 12.1329 +  if (smushmode & SM_EQUAL) {
 12.1330 +    if (lch==rch) return lch;
 12.1331 +    }
 12.1332 +
 12.1333 +  if (smushmode & SM_LOWLINE) {
 12.1334 +    if (lch=='_' && strchr("|/\\[]{}()<>",rch)) return rch;
 12.1335 +    if (rch=='_' && strchr("|/\\[]{}()<>",lch)) return lch;
 12.1336 +    }
 12.1337 +
 12.1338 +  if (smushmode & SM_HIERARCHY) {
 12.1339 +    if (lch=='|' && strchr("/\\[]{}()<>",rch)) return rch;
 12.1340 +    if (rch=='|' && strchr("/\\[]{}()<>",lch)) return lch;
 12.1341 +    if (strchr("/\\",lch) && strchr("[]{}()<>",rch)) return rch;
 12.1342 +    if (strchr("/\\",rch) && strchr("[]{}()<>",lch)) return lch;
 12.1343 +    if (strchr("[]",lch) && strchr("{}()<>",rch)) return rch;
 12.1344 +    if (strchr("[]",rch) && strchr("{}()<>",lch)) return lch;
 12.1345 +    if (strchr("{}",lch) && strchr("()<>",rch)) return rch;
 12.1346 +    if (strchr("{}",rch) && strchr("()<>",lch)) return lch;
 12.1347 +    if (strchr("()",lch) && strchr("<>",rch)) return rch;
 12.1348 +    if (strchr("()",rch) && strchr("<>",lch)) return lch;
 12.1349 +    }
 12.1350 +
 12.1351 +  if (smushmode & SM_PAIR) {
 12.1352 +    if (lch=='[' && rch==']') return '|';
 12.1353 +    if (rch=='[' && lch==']') return '|';
 12.1354 +    if (lch=='{' && rch=='}') return '|';
 12.1355 +    if (rch=='{' && lch=='}') return '|';
 12.1356 +    if (lch=='(' && rch==')') return '|';
 12.1357 +    if (rch=='(' && lch==')') return '|';
 12.1358 +    }
 12.1359 +
 12.1360 +  if (smushmode & SM_BIGX) {
 12.1361 +    if (lch=='/' && rch=='\\') return '|';
 12.1362 +    if (rch=='/' && lch=='\\') return 'Y';
 12.1363 +    if (lch=='>' && rch=='<') return 'X';
 12.1364 +      /* Don't want the reverse of above to give 'X'. */
 12.1365 +    }
 12.1366 +
 12.1367 +  return '\0';
 12.1368 +}
 12.1369 +
 12.1370 +
 12.1371 +/****************************************************************************
 12.1372 +
 12.1373 +  smushamt
 12.1374 +
 12.1375 +  Returns the maximum amount that the current character can be smushed
 12.1376 +  into the current line.
 12.1377 +
 12.1378 +****************************************************************************/
 12.1379 +
 12.1380 +int smushamt()
 12.1381 +{
 12.1382 +  int maxsmush,amt;
 12.1383 +  int row,linebd,charbd;
 12.1384 +  char ch1,ch2;
 12.1385 +
 12.1386 +  if ((smushmode & (SM_SMUSH | SM_KERN)) == 0) {
 12.1387 +    return 0;
 12.1388 +    }
 12.1389 +  maxsmush = currcharwidth;
 12.1390 +  for (row=0;row<charheight;row++) {
 12.1391 +    if (right2left) {
 12.1392 +      for (charbd=MYSTRLEN(currchar[row]);
 12.1393 +        ch1=currchar[row][charbd],(charbd>0&&(!ch1||ch1==' '));charbd--) ;
 12.1394 +      for (linebd=0;ch2=outputline[row][linebd],ch2==' ';linebd++) ;
 12.1395 +      amt = linebd+currcharwidth-1-charbd;
 12.1396 +      }
 12.1397 +    else {
 12.1398 +      for (linebd=MYSTRLEN(outputline[row]);
 12.1399 +        ch1 = outputline[row][linebd],(linebd>0&&(!ch1||ch1==' '));linebd--) ;
 12.1400 +      for (charbd=0;ch2=currchar[row][charbd],ch2==' ';charbd++) ;
 12.1401 +      amt = charbd+outlinelen-1-linebd;
 12.1402 +      }
 12.1403 +    if (!ch1||ch1==' ') {
 12.1404 +      amt++;
 12.1405 +      }
 12.1406 +    else if (ch2) {
 12.1407 +      if (smushem(ch1,ch2)!='\0') {
 12.1408 +        amt++;
 12.1409 +        }
 12.1410 +      }
 12.1411 +    if (amt<maxsmush) {
 12.1412 +      maxsmush = amt;
 12.1413 +      }
 12.1414 +    }
 12.1415 +  return maxsmush;
 12.1416 +}
 12.1417 +
 12.1418 +
 12.1419 +/****************************************************************************
 12.1420 +
 12.1421 +  addchar
 12.1422 +
 12.1423 +  Attempts to add the given character onto the end of the current line.
 12.1424 +  Returns 1 if this can be done, 0 otherwise.
 12.1425 +
 12.1426 +****************************************************************************/
 12.1427 +
 12.1428 +int addchar(c)
 12.1429 +inchr c;
 12.1430 +{
 12.1431 +  int smushamount,row,k;
 12.1432 +  char *templine;
 12.1433 +
 12.1434 +  getletter(c);
 12.1435 +  smushamount = smushamt();
 12.1436 +  if (outlinelen+currcharwidth-smushamount>outlinelenlimit
 12.1437 +      ||inchrlinelen+1>inchrlinelenlimit) {
 12.1438 +    return 0;
 12.1439 +    }
 12.1440 +
 12.1441 +  templine = (char*)myalloc(sizeof(char)*(outlinelenlimit+1));
 12.1442 +  for (row=0;row<charheight;row++) {
 12.1443 +    if (right2left) {
 12.1444 +      strcpy(templine,currchar[row]);
 12.1445 +      for (k=0;k<smushamount;k++) {
 12.1446 +        templine[currcharwidth-smushamount+k] =
 12.1447 +          smushem(templine[currcharwidth-smushamount+k],outputline[row][k]);
 12.1448 +        }
 12.1449 +      strcat(templine,outputline[row]+smushamount);
 12.1450 +      strcpy(outputline[row],templine);
 12.1451 +      }
 12.1452 +    else {
 12.1453 +      for (k=0;k<smushamount;k++) {
 12.1454 +        outputline[row][outlinelen-smushamount+k] =
 12.1455 +          smushem(outputline[row][outlinelen-smushamount+k],currchar[row][k]);
 12.1456 +        }
 12.1457 +      strcat(outputline[row],currchar[row]+smushamount);
 12.1458 +      }
 12.1459 +    }
 12.1460 +  free(templine);
 12.1461 +  outlinelen = MYSTRLEN(outputline[0]);
 12.1462 +  inchrline[inchrlinelen++] = c;
 12.1463 +  return 1;
 12.1464 +}
 12.1465 +
 12.1466 +
 12.1467 +/****************************************************************************
 12.1468 +
 12.1469 +  putstring
 12.1470 +
 12.1471 +  Prints out the given null-terminated string, substituting blanks
 12.1472 +  for hardblanks.  If outputwidth is 1, prints the entire string;
 12.1473 +  otherwise prints at most outputwidth-1 characters.  Prints a newline
 12.1474 +  at the end of the string.  The string is left-justified, centered or
 12.1475 +  right-justified (taking outputwidth as the screen width) if
 12.1476 +  justification is 0, 1 or 2, respectively.
 12.1477 +
 12.1478 +****************************************************************************/
 12.1479 +
 12.1480 +static int nr_chars=0;
 12.1481 +static void myputchar(unsigned char c)
 12.1482 +{
 12.1483 +    static int startline = 1;
 12.1484 +
 12.1485 +    if ( startline )
 12.1486 +    {
 12.1487 +        startline = 0;
 12.1488 +        myputchar(' ');
 12.1489 +    }
 12.1490 +
 12.1491 +    putc(c, stderr);
 12.1492 +
 12.1493 +    if ( nr_chars == 0 )
 12.1494 +        putchar('"');
 12.1495 +
 12.1496 +    putchar('\\');
 12.1497 +    putchar('0' + ((c>>6)&7));
 12.1498 +    putchar('0' + ((c>>3)&7));
 12.1499 +    putchar('0' + ((c>>0)&7));
 12.1500 +
 12.1501 +    if ( c == '\n' )
 12.1502 +        startline = 1;
 12.1503 +
 12.1504 +    if ( ++nr_chars == 18 ) 
 12.1505 +    {
 12.1506 +        nr_chars = 0;
 12.1507 +        putchar('"');
 12.1508 +        putchar(' ');
 12.1509 +        putchar('\\');
 12.1510 +        putchar('\n');
 12.1511 +    }
 12.1512 +}
 12.1513 +
 12.1514 +void putstring(string)
 12.1515 +char *string;
 12.1516 +{
 12.1517 +  int i,len;
 12.1518 +
 12.1519 +  len = MYSTRLEN(string);
 12.1520 +  if (outputwidth>1) {
 12.1521 +    if (len>outputwidth-1) {
 12.1522 +      len = outputwidth-1;
 12.1523 +      }
 12.1524 +    if (justification>0) {
 12.1525 +      for (i=1;(3-justification)*i+len+justification-2<outputwidth;i++) {
 12.1526 +        myputchar(' ');
 12.1527 +        }
 12.1528 +      }
 12.1529 +    }
 12.1530 +  for (i=0;i<len;i++) {
 12.1531 +    myputchar(string[i]==hardblank?' ':string[i]);
 12.1532 +    }
 12.1533 +  myputchar('\n');
 12.1534 +}
 12.1535 +
 12.1536 +
 12.1537 +/****************************************************************************
 12.1538 +
 12.1539 +  printline
 12.1540 +
 12.1541 +  Prints outputline using putstring, then clears the current line.
 12.1542 +
 12.1543 +****************************************************************************/
 12.1544 +
 12.1545 +void printline()
 12.1546 +{
 12.1547 +  int i;
 12.1548 +
 12.1549 +  for (i=0;i<charheight;i++) {
 12.1550 +    putstring(outputline[i]);
 12.1551 +    }
 12.1552 +  clearline();
 12.1553 +}
 12.1554 +
 12.1555 +
 12.1556 +/****************************************************************************
 12.1557 +
 12.1558 +  splitline
 12.1559 +
 12.1560 +  Splits inchrline at the last word break (bunch of consecutive blanks).
 12.1561 +  Makes a new line out of the first part and prints it using
 12.1562 +  printline.  Makes a new line out of the second part and returns.
 12.1563 +
 12.1564 +****************************************************************************/
 12.1565 +
 12.1566 +void splitline()
 12.1567 +{
 12.1568 +  int i,gotspace,lastspace,len1,len2;
 12.1569 +  inchr *part1,*part2;
 12.1570 +
 12.1571 +  part1 = (inchr*)myalloc(sizeof(inchr)*(inchrlinelen+1));
 12.1572 +  part2 = (inchr*)myalloc(sizeof(inchr)*(inchrlinelen+1));
 12.1573 +  gotspace = 0;
 12.1574 +  for (i=inchrlinelen-1;i>=0;i--) {
 12.1575 +    if (!gotspace && inchrline[i]==' ') {
 12.1576 +      gotspace = 1;
 12.1577 +      lastspace = i;
 12.1578 +      }
 12.1579 +    if (gotspace && inchrline[i]!=' ') {
 12.1580 +      break;
 12.1581 +      }
 12.1582 +    }
 12.1583 +  len1 = i+1;
 12.1584 +  len2 = inchrlinelen-lastspace-1;
 12.1585 +  for (i=0;i<len1;i++) {
 12.1586 +    part1[i] = inchrline[i];
 12.1587 +    }
 12.1588 +  for (i=0;i<len2;i++) {
 12.1589 +    part2[i] = inchrline[lastspace+1+i];
 12.1590 +    }
 12.1591 +  clearline();
 12.1592 +  for (i=0;i<len1;i++) {
 12.1593 +    addchar(part1[i]);
 12.1594 +    }
 12.1595 +  printline();
 12.1596 +  for (i=0;i<len2;i++) {
 12.1597 +    addchar(part2[i]);
 12.1598 +    }
 12.1599 +  free(part1);
 12.1600 +  free(part2);
 12.1601 +}
 12.1602 +
 12.1603 +
 12.1604 +/****************************************************************************
 12.1605 +
 12.1606 +  handlemapping
 12.1607 +
 12.1608 +  Given an input character (type inchr), executes re-mapping commands
 12.1609 +  read from control files.  Returns re-mapped character (inchr).
 12.1610 +
 12.1611 +****************************************************************************/
 12.1612 +
 12.1613 +inchr handlemapping(c)
 12.1614 +inchr c;
 12.1615 +{
 12.1616 +  comnode *cmptr;
 12.1617 +
 12.1618 +  cmptr=commandlist;
 12.1619 +  while (cmptr!=NULL) {
 12.1620 +    if (cmptr->thecommand ?
 12.1621 +      (c >= cmptr->rangelo && c <= cmptr->rangehi) : 0) {
 12.1622 +      c += cmptr->offset;
 12.1623 +      while(cmptr!=NULL ? cmptr->thecommand : 0) {
 12.1624 +        cmptr=cmptr->next;
 12.1625 +        }
 12.1626 +      }
 12.1627 +    else {
 12.1628 +      cmptr=cmptr->next;
 12.1629 +      }
 12.1630 +    }
 12.1631 +  return c;
 12.1632 +}
 12.1633 +
 12.1634 +/****************************************************************************
 12.1635 +
 12.1636 +  Agetchar
 12.1637 +
 12.1638 +  Replacement to getchar().
 12.1639 +  Acts exactly like getchar if -A is NOT specified,
 12.1640 +  else obtains input from All remaining command line words.
 12.1641 +
 12.1642 +****************************************************************************/
 12.1643 +
 12.1644 +int Agetchar()
 12.1645 +{
 12.1646 +    extern int optind;		/* current argv[] element under study */
 12.1647 +    static AgetMode = 0;	/* >= 0 for displacement into argv[n], <0 EOF */
 12.1648 +    char   *arg;		/* pointer to active character */
 12.1649 +    int    c;			/* current character */
 12.1650 +
 12.1651 +    if ( ! cmdinput )		/* is -A active? */
 12.1652 +	return( getchar() );	/* no: return stdin character */
 12.1653 +
 12.1654 +    if ( AgetMode < 0 || optind >= Myargc )		/* EOF is sticky: */
 12.1655 +	return( EOF );		/* **ensure it now and forever more */
 12.1656 +
 12.1657 +    /* find next character */
 12.1658 +    arg = Myargv[optind];		/* pointer to active arg */
 12.1659 +    c = arg[AgetMode++]&0xFF;	/* get appropriate char of arg */
 12.1660 +
 12.1661 +    if ( ! c )			/* at '\0' that terminates word? */
 12.1662 +    {   /* at end of word: return ' ' if normal word, '\n' if empty */
 12.1663 +	c = ' ';		/* suppose normal word and return blank */
 12.1664 +	if ( AgetMode == 1 )	/* if ran out in very 1st char, force \n */
 12.1665 +	    c = '\n';		/* (allows "hello '' world" to do \n at '') */
 12.1666 +	AgetMode = 0;		/* return to char 0 in NEXT word */
 12.1667 +	if ( ++optind >= Myargc )	/* run up word count and check if at "EOF" */
 12.1668 +	{   /* just ran out of arguments */
 12.1669 +	    c = EOF;		/* return EOF */
 12.1670 +	    AgetMode = -1;	/* ensure all future returns return EOF */
 12.1671 +	}
 12.1672 +    }
 12.1673 +
 12.1674 +    return( c );		/* return appropriate character */
 12.1675 +
 12.1676 +}	/* end: Agetchar() */
 12.1677 +
 12.1678 +
 12.1679 +/****************************************************************************
 12.1680 +
 12.1681 +  iso2022
 12.1682 +
 12.1683 +  Called by getinchr.  Interprets ISO 2022 sequences
 12.1684 +
 12.1685 +******************************************************************************/
 12.1686 +
 12.1687 +inchr iso2022()
 12.1688 +{
 12.1689 +  inchr ch;
 12.1690 +  inchr ch2;
 12.1691 +  int save_gl;
 12.1692 +  int save_gr;
 12.1693 +
 12.1694 +  ch = Agetchar();
 12.1695 +  if (ch == EOF) return ch;
 12.1696 +  if (ch == 27) ch = Agetchar() + 0x100; /* ESC x */
 12.1697 +  if (ch == 0x100 + '$') ch = Agetchar() + 0x200; /* ESC $ x */
 12.1698 +  switch (ch) {
 12.1699 +    case 14: /* invoke G0 into GL */
 12.1700 +      gl = 0;
 12.1701 +      return iso2022();
 12.1702 +    case 15: /* invoke G1 into GL */
 12.1703 +      gl = 1;
 12.1704 +      return iso2022();
 12.1705 +    case 142: case 'N' + 0x100: /* invoke G2 into GL for next char */
 12.1706 +      save_gl = gl; save_gr = gr;
 12.1707 +      gl = gr = 2;
 12.1708 +      ch = iso2022();
 12.1709 +      gl = save_gl; gr = save_gr;
 12.1710 +      return ch;
 12.1711 +    case 143: case 'O' + 0x100: /* invoke G3 into GL for next char */
 12.1712 +      save_gl = gl; save_gr = gr;
 12.1713 +      gl = gr = 3;
 12.1714 +      ch = iso2022();
 12.1715 +      gl = save_gl; gr = save_gr;
 12.1716 +      return ch;
 12.1717 +    case 'n' + 0x100: /* invoke G2 into GL */
 12.1718 +      gl = 2;
 12.1719 +      return iso2022();
 12.1720 +    case 'o' + 0x100: /* invoke G3 into GL */
 12.1721 +      gl = 3;
 12.1722 +      return iso2022();
 12.1723 +    case '~' + 0x100: /* invoke G1 into GR */
 12.1724 +      gr = 1;
 12.1725 +      return iso2022();
 12.1726 +    case '}' + 0x100: /* invoke G2 into GR */
 12.1727 +      gr = 2;
 12.1728 +      return iso2022();
 12.1729 +    case '|' + 0x100: /* invoke G3 into GR */
 12.1730 +      gr = 3;
 12.1731 +      return iso2022();
 12.1732 +    case '(' + 0x100: /* set G0 to 94-char set */
 12.1733 +      ch = Agetchar();
 12.1734 +      if (ch == 'B') ch = 0; /* ASCII */
 12.1735 +      gn[0] = ch << 16;
 12.1736 +      gndbl[0] = 0;
 12.1737 +      return iso2022();
 12.1738 +    case ')' + 0x100: /* set G1 to 94-char set */
 12.1739 +      ch = Agetchar();
 12.1740 +      if (ch == 'B') ch = 0;
 12.1741 +      gn[1] = ch << 16;
 12.1742 +      gndbl[1] = 0;
 12.1743 +      return iso2022();
 12.1744 +    case '*' + 0x100: /* set G2 to 94-char set */
 12.1745 +      ch = Agetchar();
 12.1746 +      if (ch == 'B') ch = 0;
 12.1747 +      gn[2] = ch << 16;
 12.1748 +      gndbl[2] = 0;
 12.1749 +      return iso2022();
 12.1750 +    case '+' + 0x100: /* set G3 to 94-char set */
 12.1751 +      ch = Agetchar();
 12.1752 +      if (ch == 'B') ch = 0;
 12.1753 +      gn[3] = ch << 16;
 12.1754 +      gndbl[3] = 0;
 12.1755 +      return iso2022();
 12.1756 +    case '-' + 0x100: /* set G1 to 96-char set */
 12.1757 +      ch = Agetchar();
 12.1758 +      if (ch == 'A') ch = 0; /* Latin-1 top half */
 12.1759 +      gn[1] = (ch << 16) | 0x80;
 12.1760 +      gndbl[1] = 0;
 12.1761 +      return iso2022();
 12.1762 +    case '.' + 0x100: /* set G2 to 96-char set */
 12.1763 +      ch = Agetchar();
 12.1764 +      if (ch == 'A') ch = 0;
 12.1765 +      gn[2] = (ch << 16) | 0x80;
 12.1766 +      gndbl[2] = 0;
 12.1767 +      return iso2022();
 12.1768 +    case '/' + 0x100: /* set G3 to 96-char set */
 12.1769 +      ch = Agetchar();
 12.1770 +      if (ch == 'A') ch = 0;
 12.1771 +      gn[3] = (ch << 16) | 0x80;
 12.1772 +      gndbl[3] = 0;
 12.1773 +      return iso2022();
 12.1774 +    case '(' + 0x200: /* set G0 to 94 x 94 char set */
 12.1775 +      ch = Agetchar();
 12.1776 +      gn[0] = ch << 16;
 12.1777 +      gndbl[0] = 1;
 12.1778 +      return iso2022();
 12.1779 +    case ')' + 0x200: /* set G1 to 94 x 94 char set */
 12.1780 +      ch = Agetchar();
 12.1781 +      gn[1] = ch << 16;
 12.1782 +      gndbl[1] = 1;
 12.1783 +      return iso2022();
 12.1784 +    case '*' + 0x200: /* set G2 to 94 x 94 char set */
 12.1785 +      ch = Agetchar();
 12.1786 +      gn[2] = ch << 16;
 12.1787 +      gndbl[2] = 1;
 12.1788 +      return iso2022();
 12.1789 +    case '+' + 0x200: /* set G3 to 94 x 94 char set */
 12.1790 +      ch = Agetchar();
 12.1791 +      gn[3] = ch << 16;
 12.1792 +      gndbl[3] = 1;
 12.1793 +      return iso2022();
 12.1794 +    default:
 12.1795 +      if (ch & 0x200) { /* set G0 to 94 x 94 char set (deprecated) */
 12.1796 +        gn[0] = (ch & ~0x200) << 16;
 12.1797 +        gndbl[0] = 1;
 12.1798 +        return iso2022();
 12.1799 +        }
 12.1800 +      }
 12.1801 +
 12.1802 +  if (ch >= 0x21 && ch <= 0x7E) { /* process GL */
 12.1803 +    if (gndbl[gl]) {
 12.1804 +      ch2 = Agetchar();
 12.1805 +      return gn[gl] | (ch << 8) | ch2;
 12.1806 +      }
 12.1807 +    else return gn[gl] | ch;
 12.1808 +    }
 12.1809 +  else if (ch >= 0xA0 && ch <= 0xFF) { /* process GR */
 12.1810 +    if (gndbl[gr]) {
 12.1811 +      ch2 = Agetchar();
 12.1812 +      return gn[gr] | (ch << 8) | ch2;
 12.1813 +      }
 12.1814 +    else return gn[gr] | (ch & ~0x80);
 12.1815 +    }
 12.1816 +  else return ch;
 12.1817 +  }
 12.1818 +
 12.1819 +/****************************************************************************
 12.1820 +
 12.1821 +  ungetinchr
 12.1822 +
 12.1823 +  Called by main.  Pushes back an "inchr" to be read by getinchr
 12.1824 +  on the next call.
 12.1825 +
 12.1826 +******************************************************************************/
 12.1827 +inchr getinchr_buffer;
 12.1828 +int getinchr_flag;
 12.1829 +
 12.1830 +inchr ungetinchr(c)
 12.1831 +inchr c;
 12.1832 +{
 12.1833 +  getinchr_buffer = c;
 12.1834 +  getinchr_flag = 1;
 12.1835 +  return c;
 12.1836 +}
 12.1837 +
 12.1838 +/*****************************************************************************
 12.1839 +
 12.1840 +  getinchr
 12.1841 +
 12.1842 +  Called by main.  Processes multibyte characters.  Invokes Agetchar.
 12.1843 +  If multibyte = 0, ISO 2022 mode (see iso2022 routine).
 12.1844 +  If multibyte = 1,  double-byte mode (0x00-0x7f bytes are characters,
 12.1845 +    0x80-0xFF bytes are first byte of a double-byte character).
 12.1846 +  If multibyte = 2, Unicode UTF-8 mode (0x00-0x7F bytes are characters,
 12.1847 +    0x80-0xBF bytes are nonfirst byte of a multibyte character,
 12.1848 +    0xC0-0xFD bytes are first byte of a multibyte character,
 12.1849 +    0xFE-0xFF bytes are errors (all errors return code 0x0080)).
 12.1850 +  If multibyte = 3, HZ mode ("~{" starts double-byte mode, "}~" ends it,
 12.1851 +    "~~" is a tilde, "~x" for all other x is ignored).
 12.1852 +  If multibyte = 4, Shift-JIS mode (0x80-0x9F and 0xE0-0xEF are first byte
 12.1853 +    of a double-byte character, all other bytes are characters).
 12.1854 + 
 12.1855 +
 12.1856 +*****************************************************************************/
 12.1857 +
 12.1858 +inchr getinchr()
 12.1859 +{
 12.1860 +  int ch, ch2, ch3, ch4, ch5, ch6;
 12.1861 +
 12.1862 +  if (getinchr_flag) {
 12.1863 +    getinchr_flag = 0;
 12.1864 +    return getinchr_buffer;
 12.1865 +    }
 12.1866 +
 12.1867 +  switch(multibyte) {
 12.1868 +    case 0: /* single-byte */
 12.1869 +      return iso2022();
 12.1870 +   case 1: /* DBCS */
 12.1871 +     ch = Agetchar();
 12.1872 +     if ((ch >= 0x80 && ch <= 0x9F) ||
 12.1873 +         (ch >= 0xE0 && ch <= 0xEF)) {
 12.1874 +       ch = (ch << 8) + Agetchar();
 12.1875 +       }
 12.1876 +     return ch;
 12.1877 +   case 2: /* UTF-8 */
 12.1878 +      ch = Agetchar();
 12.1879 +      if (ch < 0x80) return ch;  /* handles EOF, too */
 12.1880 +      if (ch < 0xC0 || ch > 0xFD)
 12.1881 +        return 0x0080;  /* illegal first character */
 12.1882 +      ch2 = Agetchar() & 0x3F;
 12.1883 +      if (ch < 0xE0) return ((ch & 0x1F) << 6) + ch2;
 12.1884 +      ch3 = Agetchar() & 0x3F;
 12.1885 +      if (ch < 0xF0)
 12.1886 +        return ((ch & 0x0F) << 12) + (ch2 << 6) + ch3;
 12.1887 +      ch4 = Agetchar() & 0x3F;
 12.1888 +      if (ch < 0xF8)
 12.1889 +        return ((ch & 0x07) << 18) + (ch2 << 12) + (ch3 << 6) + ch4;
 12.1890 +      ch5 = Agetchar() & 0x3F;
 12.1891 +      if (ch < 0xFC)
 12.1892 +        return ((ch & 0x03) << 24) + (ch2 << 18) + (ch3 << 12) +
 12.1893 +          (ch4 << 6) + ch5;
 12.1894 +      ch6 = Agetchar() & 0x3F;
 12.1895 +      return ((ch & 0x01) << 30) + (ch2 << 24) + (ch3 << 18) +
 12.1896 +        (ch4 << 12) + (ch5 << 6) + ch6;
 12.1897 +   case 3: /* HZ */
 12.1898 +     ch = Agetchar();
 12.1899 +     if (ch == EOF) return ch;
 12.1900 +     if (hzmode) {
 12.1901 +       ch = (ch << 8) + Agetchar();
 12.1902 +       if (ch == ('}' << 8) + '~') {
 12.1903 +         hzmode = 0;
 12.1904 +         return getinchr();
 12.1905 +         }
 12.1906 +       return ch;
 12.1907 +       }
 12.1908 +     else if (ch == '~') {
 12.1909 +       ch = Agetchar();
 12.1910 +       if (ch == '{') {
 12.1911 +          hzmode = 1;
 12.1912 +          return getinchr();
 12.1913 +          }
 12.1914 +      else if (ch == '~') {
 12.1915 +        return ch;
 12.1916 +        }
 12.1917 +      else {
 12.1918 +        return getinchr();
 12.1919 +        }
 12.1920 +      }
 12.1921 +     else return ch;
 12.1922 +   case 4: /* Shift-JIS */
 12.1923 +     ch = Agetchar();
 12.1924 +     if ((ch >= 0x80 && ch <= 0x9F) ||
 12.1925 +         (ch >= 0xE0 && ch <= 0xEF)) {
 12.1926 +       ch = (ch << 8) + Agetchar();
 12.1927 +       }
 12.1928 +     return ch;
 12.1929 +   default:
 12.1930 +     return 0x80;
 12.1931 +    }
 12.1932 +  }
 12.1933 +
 12.1934 +/****************************************************************************
 12.1935 +
 12.1936 +  main
 12.1937 +
 12.1938 +  The main program, of course.
 12.1939 +  Reads characters 1 by 1 from stdin, and makes lines out of them using
 12.1940 +  addchar. Handles line breaking, (which accounts for most of the
 12.1941 +  complexity in this function).
 12.1942 +
 12.1943 +****************************************************************************/
 12.1944 +
 12.1945 +int main(argc,argv)
 12.1946 +int argc;
 12.1947 +char *argv[];
 12.1948 +{
 12.1949 +  inchr c,c2;
 12.1950 +  int i;
 12.1951 +  int last_was_eol_flag;
 12.1952 +/*---------------------------------------------------------------------------
 12.1953 +  wordbreakmode:
 12.1954 +    -1: /^$/ and blanks are to be absorbed (when line break was forced
 12.1955 +      by a blank or character larger than outlinelenlimit)
 12.1956 +    0: /^ *$/ and blanks are not to be absorbed
 12.1957 +    1: /[^ ]$/ no word break yet
 12.1958 +    2: /[^ ]  *$/
 12.1959 +    3: /[^ ]$/ had a word break
 12.1960 +---------------------------------------------------------------------------*/
 12.1961 +  int wordbreakmode;
 12.1962 +  int char_not_added;
 12.1963 +
 12.1964 +  Myargc = argc;
 12.1965 +  Myargv = argv;
 12.1966 +  getparams();
 12.1967 +  readcontrolfiles();
 12.1968 +  readfont();
 12.1969 +  linealloc();
 12.1970 +
 12.1971 +  wordbreakmode = 0;
 12.1972 +  last_was_eol_flag = 0;
 12.1973 +
 12.1974 +  while ((c = getinchr())!=EOF) {
 12.1975 +
 12.1976 +    if (c=='\n'&&paragraphflag&&!last_was_eol_flag) {
 12.1977 +      ungetinchr(c2 = getinchr());
 12.1978 +      c = ((isascii(c2)&&isspace(c2))?'\n':' ');
 12.1979 +      }
 12.1980 +    last_was_eol_flag = (isascii(c)&&isspace(c)&&c!='\t'&&c!=' ');
 12.1981 +
 12.1982 +    if (deutschflag) {
 12.1983 +      if (c>='[' && c<=']') {
 12.1984 +        c = deutsch[c-'['];
 12.1985 +        }
 12.1986 +      else if (c >='{' && c <= '~') {
 12.1987 +        c = deutsch[c-'{'+3];
 12.1988 +        }
 12.1989 +      }
 12.1990 +
 12.1991 +    c = handlemapping(c);
 12.1992 +
 12.1993 +    if (isascii(c)&&isspace(c)) {
 12.1994 +      c = (c=='\t'||c==' ') ? ' ' : '\n';
 12.1995 +      }
 12.1996 +
 12.1997 +    if ((c>'\0' && c<' ' && c!='\n') || c==127) continue;
 12.1998 +
 12.1999 +/*
 12.2000 +  Note: The following code is complex and thoroughly tested.
 12.2001 +  Be careful when modifying!
 12.2002 +*/
 12.2003 +
 12.2004 +    do {
 12.2005 +      char_not_added = 0;
 12.2006 +
 12.2007 +      if (wordbreakmode== -1) {
 12.2008 +        if (c==' ') {
 12.2009 +          break;
 12.2010 +          }
 12.2011 +        else if (c=='\n') {
 12.2012 +          wordbreakmode = 0;
 12.2013 +          break;
 12.2014 +          }
 12.2015 +        wordbreakmode = 0;
 12.2016 +        }
 12.2017 +
 12.2018 +      if (c=='\n') {
 12.2019 +        printline();
 12.2020 +        wordbreakmode = 0;
 12.2021 +        }
 12.2022 +
 12.2023 +      else if (addchar(c)) {
 12.2024 +        if (c!=' ') {
 12.2025 +          wordbreakmode = (wordbreakmode>=2)?3:1;
 12.2026 +          }
 12.2027 +        else {
 12.2028 +          wordbreakmode = (wordbreakmode>0)?2:0;
 12.2029 +          }
 12.2030 +        }
 12.2031 +
 12.2032 +      else if (outlinelen==0) {
 12.2033 +        for (i=0;i<charheight;i++) {
 12.2034 +          if (right2left && outputwidth>1) {
 12.2035 +            putstring(currchar[i]+MYSTRLEN(currchar[i])-outlinelenlimit);
 12.2036 +            }
 12.2037 +          else {
 12.2038 +            putstring(currchar[i]);
 12.2039 +            }
 12.2040 +          }
 12.2041 +        wordbreakmode = -1;
 12.2042 +        }
 12.2043 +
 12.2044 +      else if (c==' ') {
 12.2045 +        if (wordbreakmode==2) {
 12.2046 +          splitline();
 12.2047 +          }
 12.2048 +        else {
 12.2049 +          printline();
 12.2050 +          }
 12.2051 +        wordbreakmode = -1;
 12.2052 +        }
 12.2053 +
 12.2054 +      else {
 12.2055 +        if (wordbreakmode>=2) {
 12.2056 +          splitline();
 12.2057 +          }
 12.2058 +        else {
 12.2059 +          printline();
 12.2060 +          }
 12.2061 +        wordbreakmode = (wordbreakmode==3)?1:0;
 12.2062 +        char_not_added = 1;
 12.2063 +        }
 12.2064 +
 12.2065 +      } while (char_not_added);
 12.2066 +    }
 12.2067 +
 12.2068 +  if (outlinelen!=0) {
 12.2069 +    printline();
 12.2070 +    }
 12.2071 +
 12.2072 +  /* XXX Xen hack -- finish off the C macro output */
 12.2073 +  if ( nr_chars != 0 )
 12.2074 +      putchar('"');
 12.2075 +  putchar('\n');
 12.2076 +
 12.2077 +  exit(0);
 12.2078 +}
    13.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    13.2 +++ b/xen/tools/figlet/xen.flf	Wed Dec 29 11:16:06 2004 +0000
    13.3 @@ -0,0 +1,2230 @@
    13.4 +flf2a$ 6 5 16 15 14 0 24463 229
    13.5 +Standard by Glenn Chappell & Ian Chai 3/93 -- based on Frank's .sig
    13.6 +Includes ISO Latin-1
    13.7 +figlet release 2.1 -- 12 Aug 1994
    13.8 +Modified for figlet 2.2 by John Cowan <cowan@ccil.org>
    13.9 +  to add Latin-{2,3,4,5} support (Unicode U+0100-017F).
   13.10 +Permission is hereby given to modify this font, as long as the
   13.11 +modifier's name is placed on a comment line.
   13.12 +
   13.13 +Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
   13.14 +supported by FIGlet and FIGWin.  May also be slightly modified for better use
   13.15 +of new full-width/kern/smush alternatives, but default output is NOT changed.
   13.16 +
   13.17 +Modified by Keir Fraser <kaf24@cl.cam.ac.uk> for Xen build system.
   13.18 +
   13.19 + $@
   13.20 + $@
   13.21 + $@
   13.22 + $@
   13.23 + $@
   13.24 + $@@
   13.25 +  _ @
   13.26 + | |@
   13.27 + | |@
   13.28 + |_|@
   13.29 + (_)@
   13.30 +    @@
   13.31 +  _ _ @
   13.32 + ( | )@
   13.33 +  V V @
   13.34 +   $  @
   13.35 +   $  @
   13.36 +      @@
   13.37 +    _  _   @
   13.38 +  _| || |_ @
   13.39 + |_  ..  _|@
   13.40 + |_      _|@
   13.41 +   |_||_|  @
   13.42 +           @@
   13.43 +   _  @
   13.44 +  | | @
   13.45 + / __)@
   13.46 + \__ \@
   13.47 + (   /@
   13.48 +  |_| @@
   13.49 +  _  __@
   13.50 + (_)/ /@
   13.51 +   / / @
   13.52 +  / /_ @
   13.53 + /_/(_)@
   13.54 +       @@
   13.55 +   ___   @
   13.56 +  ( _ )  @
   13.57 +  / _ \/\@
   13.58 + | (_>  <@
   13.59 +  \___/\/@
   13.60 +         @@
   13.61 +  _ @
   13.62 + ( )@
   13.63 + |/ @
   13.64 +  $ @
   13.65 +  $ @
   13.66 +    @@
   13.67 +   __@
   13.68 +  / /@
   13.69 + | | @
   13.70 + | | @
   13.71 + | | @
   13.72 +  \_\@@
   13.73 + __  @
   13.74 + \ \ @
   13.75 +  | |@
   13.76 +  | |@
   13.77 +  | |@
   13.78 + /_/ @@
   13.79 +       @
   13.80 + __/\__@
   13.81 + \    /@
   13.82 + /_  _\@
   13.83 +   \/  @
   13.84 +       @@
   13.85 +        @
   13.86 +    _   @
   13.87 +  _| |_ @
   13.88 + |_   _|@
   13.89 +   |_|  @
   13.90 +        @@
   13.91 +    @
   13.92 +    @
   13.93 +    @
   13.94 +  _ @
   13.95 + ( )@
   13.96 + |/ @@
   13.97 +     @
   13.98 +     @
   13.99 +  __ @
  13.100 + |__|@
  13.101 +  $  @
  13.102 +     @@
  13.103 +    @
  13.104 +    @
  13.105 +    @
  13.106 +  _ @
  13.107 + (_)@
  13.108 +    @@
  13.109 +     __@
  13.110 +    / /@
  13.111 +   / / @
  13.112 +  / /  @
  13.113 + /_/   @
  13.114 +       @@
  13.115 +   ___  @
  13.116 +  / _ \ @
  13.117 + | | | |@
  13.118 + | |_| |@
  13.119 +  \___/ @
  13.120 +        @@
  13.121 +  _ @
  13.122 + / |@
  13.123 + | |@
  13.124 + | |@
  13.125 + |_|@
  13.126 +    @@
  13.127 +  ____  @
  13.128 + |___ \ @
  13.129 +   __) |@
  13.130 +  / __/ @
  13.131 + |_____|@
  13.132 +        @@
  13.133 +  _____ @
  13.134 + |___ / @
  13.135 +   |_ \ @
  13.136 +  ___) |@
  13.137 + |____/ @
  13.138 +        @@
  13.139 +  _  _   @
  13.140 + | || |  @
  13.141 + | || |_ @
  13.142 + |__   _|@
  13.143 +    |_|  @
  13.144 +         @@
  13.145 +  ____  @
  13.146 + | ___| @
  13.147 + |___ \ @
  13.148 +  ___) |@
  13.149 + |____/ @
  13.150 +        @@
  13.151 +   __   @
  13.152 +  / /_  @
  13.153 + | '_ \ @
  13.154 + | (_) |@
  13.155 +  \___/ @
  13.156 +        @@
  13.157 +  _____ @
  13.158 + |___  |@
  13.159 +    / / @
  13.160 +   / /  @
  13.161 +  /_/   @
  13.162 +        @@
  13.163 +   ___  @
  13.164 +  ( _ ) @
  13.165 +  / _ \ @
  13.166 + | (_) |@
  13.167 +  \___/ @
  13.168 +        @@
  13.169 +   ___  @
  13.170 +  / _ \ @
  13.171 + | (_) |@
  13.172 +  \__, |@
  13.173 +    /_/ @
  13.174 +        @@
  13.175 +    @
  13.176 +  _ @
  13.177 + (_)@
  13.178 +  _ @
  13.179 + (_)@
  13.180 +    @@
  13.181 +    @
  13.182 +  _ @
  13.183 + (_)@
  13.184 +  _ @
  13.185 + ( )@
  13.186 + |/ @@
  13.187 +   __@
  13.188 +  / /@
  13.189 + / / @
  13.190 + \ \ @
  13.191 +  \_\@
  13.192 +     @@
  13.193 +        @
  13.194 +  _____ @
  13.195 + |_____|@
  13.196 + |_____|@
  13.197 +    $   @
  13.198 +        @@
  13.199 + __  @
  13.200 + \ \ @
  13.201 +  \ \@
  13.202 +  / /@
  13.203 + /_/ @
  13.204 +     @@
  13.205 +  ___ @
  13.206 + |__ \@
  13.207 +   / /@
  13.208 +  |_| @
  13.209 +  (_) @
  13.210 +      @@
  13.211 +    ____  @
  13.212 +   / __ \ @
  13.213 +  / / _` |@
  13.214 + | | (_| |@
  13.215 +  \ \__,_|@
  13.216 +   \____/ @@
  13.217 +     _    @
  13.218 +    / \   @
  13.219 +   / _ \  @
  13.220 +  / ___ \ @
  13.221 + /_/   \_\@
  13.222 +          @@
  13.223 +  ____  @
  13.224 + | __ ) @
  13.225 + |  _ \ @
  13.226 + | |_) |@
  13.227 + |____/ @
  13.228 +        @@
  13.229 +   ____ @
  13.230 +  / ___|@
  13.231 + | |    @
  13.232 + | |___ @
  13.233 +  \____|@
  13.234 +        @@
  13.235 +  ____  @
  13.236 + |  _ \ @
  13.237 + | | | |@
  13.238 + | |_| |@
  13.239 + |____/ @
  13.240 +        @@
  13.241 +  _____ @
  13.242 + | ____|@
  13.243 + |  _|  @
  13.244 + | |___ @
  13.245 + |_____|@
  13.246 +        @@
  13.247 +  _____ @
  13.248 + |  ___|@
  13.249 + | |_   @
  13.250 + |  _|  @
  13.251 + |_|    @
  13.252 +        @@
  13.253 +   ____ @
  13.254 +  / ___|@
  13.255 + | |  _ @
  13.256 + | |_| |@
  13.257 +  \____|@
  13.258 +        @@
  13.259 +  _   _ @
  13.260 + | | | |@
  13.261 + | |_| |@
  13.262 + |  _  |@
  13.263 + |_| |_|@
  13.264 +        @@
  13.265 +  ___ @
  13.266 + |_ _|@
  13.267 +  | | @
  13.268 +  | | @
  13.269 + |___|@
  13.270 +      @@
  13.271 +      _ @
  13.272 +     | |@
  13.273 +  _  | |@
  13.274 + | |_| |@
  13.275 +  \___/ @
  13.276 +        @@
  13.277 +  _  __@
  13.278 + | |/ /@
  13.279 + | ' / @
  13.280 + | . \ @
  13.281 + |_|\_\@
  13.282 +       @@
  13.283 +  _     @
  13.284 + | |    @
  13.285 + | |    @
  13.286 + | |___ @
  13.287 + |_____|@
  13.288 +        @@
  13.289 +  __  __ @
  13.290 + |  \/  |@
  13.291 + | |\/| |@
  13.292 + | |  | |@
  13.293 + |_|  |_|@
  13.294 +         @@
  13.295 +  _   _ @
  13.296 + | \ | |@
  13.297 + |  \| |@
  13.298 + | |\  |@
  13.299 + |_| \_|@
  13.300 +        @@
  13.301 +   ___  @
  13.302 +  / _ \ @
  13.303 + | | | |@
  13.304 + | |_| |@
  13.305 +  \___/ @
  13.306 +        @@
  13.307 +  ____  @
  13.308 + |  _ \ @
  13.309 + | |_) |@
  13.310 + |  __/ @
  13.311 + |_|    @
  13.312 +        @@
  13.313 +   ___  @
  13.314 +  / _ \ @
  13.315 + | | | |@
  13.316 + | |_| |@
  13.317 +  \__\_\@
  13.318 +        @@
  13.319 +  ____  @
  13.320 + |  _ \ @
  13.321 + | |_) |@
  13.322 + |  _ < @
  13.323 + |_| \_\@
  13.324 +        @@
  13.325 +  ____  @
  13.326 + / ___| @
  13.327 + \___ \ @
  13.328 +  ___) |@
  13.329 + |____/ @
  13.330 +        @@
  13.331 +  _____ @
  13.332 + |_   _|@
  13.333 +   | |  @
  13.334 +   | |  @
  13.335 +   |_|  @
  13.336 +        @@
  13.337 +  _   _ @
  13.338 + | | | |@
  13.339 + | | | |@
  13.340 + | |_| |@
  13.341 +  \___/ @
  13.342 +        @@
  13.343 + __     __@
  13.344 + \ \   / /@
  13.345 +  \ \ / / @
  13.346 +   \ V /  @
  13.347 +    \_/   @
  13.348 +          @@
  13.349 + __        __@
  13.350 + \ \      / /@
  13.351 +  \ \ /\ / / @
  13.352 +   \ V  V /  @
  13.353 +    \_/\_/   @
  13.354 +             @@
  13.355 + __  __@
  13.356 + \ \/ /@
  13.357 +  \  / @
  13.358 +  /  \ @
  13.359 + /_/\_\@
  13.360 +       @@
  13.361 + __   __@
  13.362 + \ \ / /@
  13.363 +  \ V / @
  13.364 +   | |  @
  13.365 +   |_|  @
  13.366 +        @@
  13.367 +  _____@
  13.368 + |__  /@
  13.369 +   / / @
  13.370 +  / /_ @
  13.371 + /____|@
  13.372 +       @@
  13.373 +  __ @
  13.374 + | _|@
  13.375 + | | @
  13.376 + | | @
  13.377 + | | @
  13.378 + |__|@@
  13.379 + __    @
  13.380 + \ \   @
  13.381 +  \ \  @
  13.382 +   \ \ @
  13.383 +    \_\@
  13.384 +       @@
  13.385 +  __ @
  13.386 + |_ |@
  13.387 +  | |@
  13.388 +  | |@
  13.389 +  | |@
  13.390 + |__|@@
  13.391 +  /\ @
  13.392 + |/\|@
  13.393 +   $ @
  13.394 +   $ @
  13.395 +   $ @
  13.396 +     @@
  13.397 +        @
  13.398 +        @
  13.399 +        @
  13.400 +        @
  13.401 +  _____ @
  13.402 + |_____|@@
  13.403 +  _ @
  13.404 + ( )@
  13.405 +  \|@
  13.406 +  $ @
  13.407 +  $ @
  13.408 +    @@
  13.409 +        @
  13.410 +   __ _ @
  13.411 +  / _` |@
  13.412 + | (_| |@
  13.413 +  \__,_|@
  13.414 +        @@
  13.415 +  _     @
  13.416 + | |__  @
  13.417 + | '_ \ @
  13.418 + | |_) |@
  13.419 + |_.__/ @
  13.420 +        @@
  13.421 +       @
  13.422 +   ___ @
  13.423 +  / __|@
  13.424 + | (__ @
  13.425 +  \___|@
  13.426 +       @@
  13.427 +      _ @
  13.428 +   __| |@
  13.429 +  / _` |@
  13.430 + | (_| |@
  13.431 +  \__,_|@
  13.432 +        @@
  13.433 +       @
  13.434 +   ___ @
  13.435 +  / _ \@
  13.436 + |  __/@
  13.437 +  \___|@
  13.438 +       @@
  13.439 +   __ @
  13.440 +  / _|@
  13.441 + | |_ @
  13.442 + |  _|@
  13.443 + |_|  @
  13.444 +      @@
  13.445 +        @
  13.446 +   __ _ @
  13.447 +  / _` |@
  13.448 + | (_| |@
  13.449 +  \__, |@
  13.450 +  |___/ @@
  13.451 +  _     @
  13.452 + | |__  @
  13.453 + | '_ \ @
  13.454 + | | | |@
  13.455 + |_| |_|@
  13.456 +        @@
  13.457 +  _ @
  13.458 + (_)@
  13.459 + | |@
  13.460 + | |@
  13.461 + |_|@
  13.462 +    @@
  13.463 +    _ @
  13.464 +   (_)@
  13.465 +   | |@
  13.466 +   | |@
  13.467 +  _/ |@
  13.468 + |__/ @@
  13.469 +  _    @
  13.470 + | | __@
  13.471 + | |/ /@
  13.472 + |   < @
  13.473 + |_|\_\@
  13.474 +       @@
  13.475 +  _ @
  13.476 + | |@
  13.477 + | |@
  13.478 + | |@
  13.479 + |_|@
  13.480 +    @@
  13.481 +            @
  13.482 +  _ __ ___  @
  13.483 + | '_ ` _ \ @
  13.484 + | | | | | |@
  13.485 + |_| |_| |_|@
  13.486 +            @@
  13.487 +        @
  13.488 +  _ __  @
  13.489 + | '_ \ @
  13.490 + | | | |@
  13.491 + |_| |_|@
  13.492 +        @@
  13.493 +        @
  13.494 +   ___  @
  13.495 +  / _ \ @
  13.496 + | (_) |@
  13.497 +  \___/ @
  13.498 +        @@
  13.499 +        @
  13.500 +  _ __  @
  13.501 + | '_ \ @
  13.502 + | |_) |@
  13.503 + | .__/ @
  13.504 + |_|    @@
  13.505 +        @
  13.506 +   __ _ @
  13.507 +  / _` |@
  13.508 + | (_| |@
  13.509 +  \__, |@
  13.510 +     |_|@@
  13.511 +       @
  13.512 +  _ __ @
  13.513 + | '__|@
  13.514 + | |   @
  13.515 + |_|   @
  13.516 +       @@
  13.517 +      @
  13.518 +  ___ @
  13.519 + / __|@
  13.520 + \__ \@
  13.521 + |___/@
  13.522 +      @@
  13.523 +  _   @
  13.524 + | |_ @
  13.525 + | __|@
  13.526 + | |_ @
  13.527 +  \__|@
  13.528 +      @@
  13.529 +        @
  13.530 +  _   _ @
  13.531 + | | | |@
  13.532 + | |_| |@
  13.533 +  \__,_|@
  13.534 +        @@
  13.535 +        @
  13.536 + __   __@
  13.537 + \ \ / /@
  13.538 +  \ V / @
  13.539 +   \_/  @
  13.540 +        @@
  13.541 +           @
  13.542 + __      __@
  13.543 + \ \ /\ / /@
  13.544 +  \ V  V / @
  13.545 +   \_/\_/  @
  13.546 +           @@
  13.547 +       @
  13.548 + __  __@
  13.549 + \ \/ /@
  13.550 +  >  < @
  13.551 + /_/\_\@
  13.552 +       @@
  13.553 +        @
  13.554 +  _   _ @
  13.555 + | | | |@
  13.556 + | |_| |@
  13.557 +  \__, |@
  13.558 +  |___/ @@
  13.559 +      @
  13.560 +  ____@
  13.561 + |_  /@
  13.562 +  / / @
  13.563 + /___|@
  13.564 +      @@
  13.565 +    __@
  13.566 +   / /@
  13.567 +  | | @
  13.568 + < <  @
  13.569 +  | | @
  13.570 +   \_\@@
  13.571 +  _ @
  13.572 + | |@
  13.573 + | |@
  13.574 + | |@
  13.575 + | |@
  13.576 + |_|@@
  13.577 + __   @
  13.578 + \ \  @
  13.579 +  | | @
  13.580 +   > >@
  13.581 +  | | @
  13.582 + /_/  @@
  13.583 +  /\/|@
  13.584 + |/\/ @
  13.585 +   $  @
  13.586 +   $  @
  13.587 +   $  @
  13.588 +      @@
  13.589 +  _   _ @
  13.590 + (_)_(_)@
  13.591 +   /_\  @
  13.592 +  / _ \ @
  13.593 + /_/ \_\@
  13.594 +        @@
  13.595 +  _   _ @
  13.596 + (_)_(_)@
  13.597 +  / _ \ @
  13.598 + | |_| |@
  13.599 +  \___/ @
  13.600 +        @@
  13.601 +  _   _ @
  13.602 + (_) (_)@
  13.603 + | | | |@
  13.604 + | |_| |@
  13.605 +  \___/ @
  13.606 +        @@
  13.607 +  _   _ @
  13.608 + (_)_(_)@
  13.609 +  / _` |@
  13.610 + | (_| |@
  13.611 +  \__,_|@
  13.612 +        @@
  13.613 +  _   _ @
  13.614 + (_)_(_)@
  13.615 +  / _ \ @
  13.616 + | (_) |@
  13.617 +  \___/ @
  13.618 +        @@
  13.619 +  _   _ @
  13.620 + (_) (_)@
  13.621 + | | | |@
  13.622 + | |_| |@
  13.623 +  \__,_|@
  13.624 +        @@
  13.625 +   ___ @
  13.626 +  / _ \@
  13.627 + | |/ /@
  13.628 + | |\ \@
  13.629 + | ||_/@
  13.630 + |_|   @@
  13.631 +160  NO-BREAK SPACE
  13.632 + $@
  13.633 + $@
  13.634 + $@
  13.635 + $@
  13.636 + $@
  13.637 + $@@
  13.638 +161  INVERTED EXCLAMATION MARK
  13.639 +  _ @
  13.640 + (_)@
  13.641 + | |@
  13.642 + | |@
  13.643 + |_|@
  13.644 +    @@
  13.645 +162  CENT SIGN
  13.646 +    _  @
  13.647 +   | | @
  13.648 +  / __)@
  13.649 + | (__ @
  13.650 +  \   )@
  13.651 +   |_| @@
  13.652 +163  POUND SIGN
  13.653 +    ___  @
  13.654 +   / ,_\ @
  13.655 + _| |_   @
  13.656 +  | |___ @
  13.657 + (_,____|@
  13.658 +         @@
  13.659 +164  CURRENCY SIGN
  13.660 + /\___/\@
  13.661 + \  _  /@
  13.662 + | (_) |@
  13.663 + / ___ \@
  13.664 + \/   \/@
  13.665 +        @@
  13.666 +165  YEN SIGN
  13.667 +  __ __ @
  13.668 +  \ V / @
  13.669 + |__ __|@
  13.670 + |__ __|@
  13.671 +   |_|  @
  13.672 +        @@
  13.673 +166  BROKEN BAR
  13.674 +  _ @
  13.675 + | |@
  13.676 + |_|@
  13.677 +  _ @
  13.678 + | |@
  13.679 + |_|@@
  13.680 +167  SECTION SIGN
  13.681 +    __ @
  13.682 +  _/ _)@
  13.683 + / \ \ @
  13.684 + \ \\ \@
  13.685 +  \ \_/@
  13.686 + (__/  @@
  13.687 +168  DIAERESIS
  13.688 +  _   _ @
  13.689 + (_) (_)@
  13.690 +  $   $ @
  13.691 +  $   $ @
  13.692 +  $   $ @
  13.693 +        @@
  13.694 +169  COPYRIGHT SIGN
  13.695 +    _____   @
  13.696 +   / ___ \  @
  13.697 +  / / __| \ @
  13.698 + | | (__   |@
  13.699 +  \ \___| / @
  13.700 +   \_____/  @@
  13.701 +170  FEMININE ORDINAL INDICATOR
  13.702 +  __ _ @
  13.703 + / _` |@
  13.704 + \__,_|@
  13.705 + |____|@
  13.706 +    $  @
  13.707 +       @@
  13.708 +171  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
  13.709 +   ____@
  13.710 +  / / /@
  13.711 + / / / @
  13.712 + \ \ \ @
  13.713 +  \_\_\@
  13.714 +       @@
  13.715 +172  NOT SIGN
  13.716 +        @
  13.717 +  _____ @
  13.718 + |___  |@
  13.719 +     |_|@
  13.720 +    $   @
  13.721 +        @@
  13.722 +173  SOFT HYPHEN
  13.723 +       @
  13.724 +       @
  13.725 +  ____ @
  13.726 + |____|@
  13.727 +    $  @
  13.728 +       @@
  13.729 +174  REGISTERED SIGN
  13.730 +    _____   @
  13.731 +   / ___ \  @
  13.732 +  / | _ \ \ @
  13.733 + |  |   /  |@
  13.734 +  \ |_|_\ / @
  13.735 +   \_____/  @@
  13.736 +175  MACRON
  13.737 +  _____ @
  13.738 + |_____|@
  13.739 +    $   @
  13.740 +    $   @
  13.741 +    $   @
  13.742 +        @@
  13.743 +176  DEGREE SIGN
  13.744 +   __  @
  13.745 +  /  \ @
  13.746 + | () |@
  13.747 +  \__/ @
  13.748 +    $  @
  13.749 +       @@
  13.750 +177  PLUS-MINUS SIGN
  13.751 +    _   @
  13.752 +  _| |_ @
  13.753 + |_   _|@
  13.754 +  _|_|_ @
  13.755 + |_____|@
  13.756 +        @@
  13.757 +178  SUPERSCRIPT TWO
  13.758 +  ___ @
  13.759 + |_  )@
  13.760 +  / / @
  13.761 + /___|@
  13.762 +   $  @
  13.763 +      @@
  13.764 +179  SUPERSCRIPT THREE
  13.765 +  ____@
  13.766 + |__ /@
  13.767 +  |_ \@
  13.768 + |___/@
  13.769 +   $  @
  13.770 +      @@
  13.771 +180  ACUTE ACCENT
  13.772 +  __@
  13.773 + /_/@
  13.774 +  $ @
  13.775 +  $ @
  13.776 +  $ @
  13.777 +    @@
  13.778 +181  MICRO SIGN
  13.779 +        @
  13.780 +  _   _ @
  13.781 + | | | |@
  13.782 + | |_| |@
  13.783 + | ._,_|@
  13.784 + |_|    @@
  13.785 +182  PILCROW SIGN
  13.786 +   _____ @
  13.787 +  /     |@
  13.788 + | (| | |@
  13.789 +  \__ | |@
  13.790 +    |_|_|@
  13.791 +         @@
  13.792 +183  MIDDLE DOT
  13.793 +    @
  13.794 +  _ @
  13.795 + (_)@
  13.796 +  $ @
  13.797 +  $ @
  13.798 +    @@
  13.799 +184  CEDILLA
  13.800 +    @
  13.801 +    @
  13.802 +    @
  13.803 +    @
  13.804 +  _ @
  13.805 + )_)@@
  13.806 +185  SUPERSCRIPT ONE
  13.807 +  _ @
  13.808 + / |@
  13.809 + | |@
  13.810 + |_|@
  13.811 +  $ @
  13.812 +    @@
  13.813 +186  MASCULINE ORDINAL INDICATOR
  13.814 +  ___ @
  13.815 + / _ \@
  13.816 + \___/@
  13.817 + |___|@
  13.818 +   $  @
  13.819 +      @@
  13.820 +187  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
  13.821 + ____  @
  13.822 + \ \ \ @
  13.823 +  \ \ \@
  13.824 +  / / /@
  13.825 + /_/_/ @
  13.826 +       @@
  13.827 +188  VULGAR FRACTION ONE QUARTER
  13.828 +  _   __    @
  13.829 + / | / / _  @
  13.830 + | |/ / | | @
  13.831 + |_/ /|_  _|@
  13.832 +  /_/   |_| @
  13.833 +            @@
  13.834 +189  VULGAR FRACTION ONE HALF
  13.835 +  _   __   @
  13.836 + / | / /__ @
  13.837 + | |/ /_  )@
  13.838 + |_/ / / / @
  13.839 +  /_/ /___|@
  13.840 +           @@
  13.841 +190  VULGAR FRACTION THREE QUARTERS
  13.842 +  ____  __    @
  13.843 + |__ / / / _  @
  13.844 +  |_ \/ / | | @
  13.845 + |___/ /|_  _|@
  13.846 +    /_/   |_| @
  13.847 +              @@
  13.848 +191  INVERTED QUESTION MARK
  13.849 +   _  @
  13.850 +  (_) @
  13.851 +  | | @
  13.852 + / /_ @
  13.853 + \___|@
  13.854 +      @@
  13.855 +192  LATIN CAPITAL LETTER A WITH GRAVE
  13.856 +   __   @
  13.857 +   \_\  @
  13.858 +   /_\  @
  13.859 +  / _ \ @
  13.860 + /_/ \_\@
  13.861 +        @@
  13.862 +193  LATIN CAPITAL LETTER A WITH ACUTE
  13.863 +    __  @
  13.864 +   /_/  @
  13.865 +   /_\  @
  13.866 +  / _ \ @
  13.867 + /_/ \_\@
  13.868 +        @@
  13.869 +194  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
  13.870 +   //\  @
  13.871 +  |/_\| @
  13.872 +   /_\  @
  13.873 +  / _ \ @
  13.874 + /_/ \_\@
  13.875 +        @@
  13.876 +195  LATIN CAPITAL LETTER A WITH TILDE
  13.877 +   /\/| @
  13.878 +  |/\/  @
  13.879 +   /_\  @
  13.880 +  / _ \ @
  13.881 + /_/ \_\@
  13.882 +        @@
  13.883 +196  LATIN CAPITAL LETTER A WITH DIAERESIS
  13.884 +  _   _ @
  13.885 + (_)_(_)@
  13.886 +   /_\  @
  13.887 +  / _ \ @
  13.888 + /_/ \_\@
  13.889 +        @@
  13.890 +197  LATIN CAPITAL LETTER A WITH RING ABOVE
  13.891 +    _   @
  13.892 +   (o)  @
  13.893 +   /_\  @
  13.894 +  / _ \ @
  13.895 + /_/ \_\@
  13.896 +        @@
  13.897 +198  LATIN CAPITAL LETTER AE
  13.898 +     ______ @
  13.899 +    /  ____|@
  13.900 +   / _  _|  @
  13.901 +  / __ |___ @
  13.902 + /_/ |_____|@
  13.903 +            @@
  13.904 +199  LATIN CAPITAL LETTER C WITH CEDILLA
  13.905 +   ____ @
  13.906 +  / ___|@
  13.907 + | |    @
  13.908 + | |___ @
  13.909 +  \____|@
  13.910 +    )_) @@
  13.911 +200  LATIN CAPITAL LETTER E WITH GRAVE
  13.912 +   __   @
  13.913 +  _\_\_ @
  13.914 + | ____|@
  13.915 + |  _|_ @
  13.916 + |_____|@
  13.917 +        @@
  13.918 +201  LATIN CAPITAL LETTER E WITH ACUTE
  13.919 +    __  @
  13.920 +  _/_/_ @
  13.921 + | ____|@
  13.922 + |  _|_ @
  13.923 + |_____|@
  13.924 +        @@
  13.925 +202  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
  13.926 +   //\  @
  13.927 +  |/_\| @
  13.928 + | ____|@
  13.929 + |  _|_ @
  13.930 + |_____|@
  13.931 +        @@
  13.932 +203  LATIN CAPITAL LETTER E WITH DIAERESIS
  13.933 +  _   _ @
  13.934 + (_)_(_)@
  13.935 + | ____|@
  13.936 + |  _|_ @
  13.937 + |_____|@
  13.938 +        @@
  13.939 +204  LATIN CAPITAL LETTER I WITH GRAVE
  13.940 +  __  @
  13.941 +  \_\ @
  13.942 + |_ _|@
  13.943 +  | | @
  13.944 + |___|@
  13.945 +      @@
  13.946 +205  LATIN CAPITAL LETTER I WITH ACUTE
  13.947 +   __ @
  13.948 +  /_/ @
  13.949 + |_ _|@
  13.950 +  | | @
  13.951 + |___|@
  13.952 +      @@
  13.953 +206  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
  13.954 +  //\ @
  13.955 + |/_\|@
  13.956 + |_ _|@
  13.957 +  | | @
  13.958 + |___|@
  13.959 +      @@
  13.960 +207  LATIN CAPITAL LETTER I WITH DIAERESIS
  13.961 +  _   _ @
  13.962 + (_)_(_)@
  13.963 +  |_ _| @
  13.964 +   | |  @
  13.965 +  |___| @
  13.966 +        @@
  13.967 +208  LATIN CAPITAL LETTER ETH
  13.968 +    ____  @
  13.969 +   |  _ \ @
  13.970 +  _| |_| |@
  13.971 + |__ __| |@
  13.972 +   |____/ @
  13.973 +          @@
  13.974 +209  LATIN CAPITAL LETTER N WITH TILDE
  13.975 +   /\/|@
  13.976 +  |/\/ @
  13.977 + | \| |@
  13.978 + | .` |@
  13.979 + |_|\_|@
  13.980 +       @@
  13.981 +210  LATIN CAPITAL LETTER O WITH GRAVE
  13.982 +   __   @
  13.983 +   \_\  @
  13.984 +  / _ \ @
  13.985 + | |_| |@
  13.986 +  \___/ @
  13.987 +        @@
  13.988 +211  LATIN CAPITAL LETTER O WITH ACUTE
  13.989 +    __  @
  13.990 +   /_/  @
  13.991 +  / _ \ @
  13.992 + | |_| |@
  13.993 +  \___/ @
  13.994 +        @@
  13.995 +212  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
  13.996 +   //\  @
  13.997 +  |/_\| @
  13.998 +  / _ \ @
  13.999 + | |_| |@
 13.1000 +  \___/ @
 13.1001 +        @@
 13.1002 +213  LATIN CAPITAL LETTER O WITH TILDE
 13.1003 +   /\/| @
 13.1004 +  |/\/  @
 13.1005 +  / _ \ @
 13.1006 + | |_| |@
 13.1007 +  \___/ @
 13.1008 +        @@
 13.1009 +214  LATIN CAPITAL LETTER O WITH DIAERESIS
 13.1010 +  _   _ @
 13.1011 + (_)_(_)@
 13.1012 +  / _ \ @
 13.1013 + | |_| |@
 13.1014 +  \___/ @
 13.1015 +        @@
 13.1016 +215  MULTIPLICATION SIGN
 13.1017 +     @
 13.1018 +     @
 13.1019 + /\/\@
 13.1020 + >  <@
 13.1021 + \/\/@
 13.1022 +     @@
 13.1023 +216  LATIN CAPITAL LETTER O WITH STROKE
 13.1024 +   ____ @
 13.1025 +  / _// @
 13.1026 + | |// |@
 13.1027 + | //| |@
 13.1028 +  //__/ @
 13.1029 +        @@
 13.1030 +217  LATIN CAPITAL LETTER U WITH GRAVE
 13.1031 +   __   @
 13.1032 +  _\_\_ @
 13.1033 + | | | |@
 13.1034 + | |_| |@
 13.1035 +  \___/ @
 13.1036 +        @@
 13.1037 +218  LATIN CAPITAL LETTER U WITH ACUTE
 13.1038 +    __  @
 13.1039 +  _/_/_ @
 13.1040 + | | | |@
 13.1041 + | |_| |@
 13.1042 +  \___/ @
 13.1043 +        @@
 13.1044 +219  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
 13.1045 +   //\  @
 13.1046 +  |/ \| @
 13.1047 + | | | |@
 13.1048 + | |_| |@
 13.1049 +  \___/ @
 13.1050 +        @@
 13.1051 +220  LATIN CAPITAL LETTER U WITH DIAERESIS
 13.1052 +  _   _ @
 13.1053 + (_) (_)@
 13.1054 + | | | |@
 13.1055 + | |_| |@
 13.1056 +  \___/ @
 13.1057 +        @@
 13.1058 +221  LATIN CAPITAL LETTER Y WITH ACUTE
 13.1059 +    __  @
 13.1060 + __/_/__@
 13.1061 + \ \ / /@
 13.1062 +  \ V / @
 13.1063 +   |_|  @
 13.1064 +        @@
 13.1065 +222  LATIN CAPITAL LETTER THORN
 13.1066 +  _     @
 13.1067 + | |___ @
 13.1068 + |  __ \@
 13.1069 + |  ___/@
 13.1070 + |_|    @
 13.1071 +        @@
 13.1072 +223  LATIN SMALL LETTER SHARP S
 13.1073 +   ___ @
 13.1074 +  / _ \@
 13.1075 + | |/ /@
 13.1076 + | |\ \@
 13.1077 + | ||_/@
 13.1078 + |_|   @@
 13.1079 +224  LATIN SMALL LETTER A WITH GRAVE
 13.1080 +   __   @
 13.1081 +   \_\_ @
 13.1082 +  / _` |@
 13.1083 + | (_| |@
 13.1084 +  \__,_|@
 13.1085 +        @@
 13.1086 +225  LATIN SMALL LETTER A WITH ACUTE
 13.1087 +    __  @
 13.1088 +   /_/_ @
 13.1089 +  / _` |@
 13.1090 + | (_| |@
 13.1091 +  \__,_|@
 13.1092 +        @@
 13.1093 +226  LATIN SMALL LETTER A WITH CIRCUMFLEX
 13.1094 +   //\  @
 13.1095 +  |/_\| @
 13.1096 +  / _` |@
 13.1097 + | (_| |@
 13.1098 +  \__,_|@
 13.1099 +        @@
 13.1100 +227  LATIN SMALL LETTER A WITH TILDE
 13.1101 +   /\/| @
 13.1102 +  |/\/_ @
 13.1103 +  / _` |@
 13.1104 + | (_| |@
 13.1105 +  \__,_|@
 13.1106 +        @@
 13.1107 +228  LATIN SMALL LETTER A WITH DIAERESIS
 13.1108 +  _   _ @
 13.1109 + (_)_(_)@
 13.1110 +  / _` |@
 13.1111 + | (_| |@
 13.1112 +  \__,_|@
 13.1113 +        @@
 13.1114 +229  LATIN SMALL LETTER A WITH RING ABOVE
 13.1115 +    __  @
 13.1116 +   (()) @
 13.1117 +  / _ '|@
 13.1118 + | (_| |@
 13.1119 +  \__,_|@
 13.1120 +        @@
 13.1121 +230  LATIN SMALL LETTER AE
 13.1122 +           @
 13.1123 +   __ ____ @
 13.1124 +  / _`  _ \@
 13.1125 + | (_|  __/@
 13.1126 +  \__,____|@
 13.1127 +           @@
 13.1128 +231  LATIN SMALL LETTER C WITH CEDILLA
 13.1129 +       @
 13.1130 +   ___ @
 13.1131 +  / __|@
 13.1132 + | (__ @
 13.1133 +  \___|@
 13.1134 +   )_) @@
 13.1135 +232  LATIN SMALL LETTER E WITH GRAVE
 13.1136 +   __  @
 13.1137 +   \_\ @
 13.1138 +  / _ \@
 13.1139 + |  __/@
 13.1140 +  \___|@
 13.1141 +       @@
 13.1142 +233  LATIN SMALL LETTER E WITH ACUTE
 13.1143 +    __ @
 13.1144 +   /_/ @
 13.1145 +  / _ \@
 13.1146 + |  __/@
 13.1147 +  \___|@
 13.1148 +       @@
 13.1149 +234  LATIN SMALL LETTER E WITH CIRCUMFLEX
 13.1150 +   //\ @
 13.1151 +  |/_\|@
 13.1152 +  / _ \@
 13.1153 + |  __/@
 13.1154 +  \___|@
 13.1155 +       @@
 13.1156 +235  LATIN SMALL LETTER E WITH DIAERESIS
 13.1157 +  _   _ @
 13.1158 + (_)_(_)@
 13.1159 +  / _ \ @
 13.1160 + |  __/ @
 13.1161 +  \___| @
 13.1162 +        @@
 13.1163 +236  LATIN SMALL LETTER I WITH GRAVE
 13.1164 + __ @
 13.1165 + \_\@
 13.1166 + | |@
 13.1167 + | |@
 13.1168 + |_|@
 13.1169 +    @@
 13.1170 +237  LATIN SMALL LETTER I WITH ACUTE
 13.1171 +  __@
 13.1172 + /_/@
 13.1173 + | |@
 13.1174 + | |@
 13.1175 + |_|@
 13.1176 +    @@
 13.1177 +238  LATIN SMALL LETTER I WITH CIRCUMFLEX
 13.1178 +  //\ @
 13.1179 + |/_\|@
 13.1180 +  | | @
 13.1181 +  | | @
 13.1182 +  |_| @
 13.1183 +      @@
 13.1184 +239  LATIN SMALL LETTER I WITH DIAERESIS
 13.1185 +  _   _ @
 13.1186 + (_)_(_)@
 13.1187 +   | |  @
 13.1188 +   | |  @
 13.1189 +   |_|  @
 13.1190 +        @@
 13.1191 +240  LATIN SMALL LETTER ETH
 13.1192 +   /\/\ @
 13.1193 +   >  < @
 13.1194 +  _\/\ |@
 13.1195 + / __` |@
 13.1196 + \____/ @
 13.1197 +        @@
 13.1198 +241  LATIN SMALL LETTER N WITH TILDE
 13.1199 +   /\/| @
 13.1200 +  |/\/  @
 13.1201 + | '_ \ @
 13.1202 + | | | |@
 13.1203 + |_| |_|@
 13.1204 +        @@
 13.1205 +242  LATIN SMALL LETTER O WITH GRAVE
 13.1206 +   __   @
 13.1207 +   \_\  @
 13.1208 +  / _ \ @
 13.1209 + | (_) |@
 13.1210 +  \___/ @
 13.1211 +        @@
 13.1212 +243  LATIN SMALL LETTER O WITH ACUTE
 13.1213 +    __  @
 13.1214 +   /_/  @
 13.1215 +  / _ \ @
 13.1216 + | (_) |@
 13.1217 +  \___/ @
 13.1218 +        @@
 13.1219 +244  LATIN SMALL LETTER O WITH CIRCUMFLEX
 13.1220 +   //\  @
 13.1221 +  |/_\| @
 13.1222 +  / _ \ @
 13.1223 + | (_) |@
 13.1224 +  \___/ @
 13.1225 +        @@
 13.1226 +245  LATIN SMALL LETTER O WITH TILDE
 13.1227 +   /\/| @
 13.1228 +  |/\/  @
 13.1229 +  / _ \ @
 13.1230 + | (_) |@
 13.1231 +  \___/ @
 13.1232 +        @@
 13.1233 +246  LATIN SMALL LETTER O WITH DIAERESIS
 13.1234 +  _   _ @
 13.1235 + (_)_(_)@
 13.1236 +  / _ \ @
 13.1237 + | (_) |@
 13.1238 +  \___/ @
 13.1239 +        @@
 13.1240 +247  DIVISION SIGN
 13.1241 +        @
 13.1242 +    _   @
 13.1243 +  _(_)_ @
 13.1244 + |_____|@
 13.1245 +   (_)  @
 13.1246 +        @@
 13.1247 +248  LATIN SMALL LETTER O WITH STROKE
 13.1248 +         @
 13.1249 +   ____  @
 13.1250 +  / _//\ @
 13.1251 + | (//) |@
 13.1252 +  \//__/ @
 13.1253 +         @@
 13.1254 +249  LATIN SMALL LETTER U WITH GRAVE
 13.1255 +   __   @
 13.1256 +  _\_\_ @
 13.1257 + | | | |@
 13.1258 + | |_| |@
 13.1259 +  \__,_|@
 13.1260 +        @@
 13.1261 +250  LATIN SMALL LETTER U WITH ACUTE
 13.1262 +    __  @
 13.1263 +  _/_/_ @
 13.1264 + | | | |@
 13.1265 + | |_| |@
 13.1266 +  \__,_|@
 13.1267 +        @@
 13.1268 +251  LATIN SMALL LETTER U WITH CIRCUMFLEX
 13.1269 +   //\  @
 13.1270 +  |/ \| @
 13.1271 + | | | |@
 13.1272 + | |_| |@
 13.1273 +  \__,_|@
 13.1274 +        @@
 13.1275 +252  LATIN SMALL LETTER U WITH DIAERESIS
 13.1276 +  _   _ @
 13.1277 + (_) (_)@
 13.1278 + | | | |@
 13.1279 + | |_| |@
 13.1280 +  \__,_|@
 13.1281 +        @@
 13.1282 +253  LATIN SMALL LETTER Y WITH ACUTE
 13.1283 +    __  @
 13.1284 +  _/_/_ @
 13.1285 + | | | |@
 13.1286 + | |_| |@
 13.1287 +  \__, |@
 13.1288 +  |___/ @@
 13.1289 +254  LATIN SMALL LETTER THORN
 13.1290 +  _     @
 13.1291 + | |__  @
 13.1292 + | '_ \ @
 13.1293 + | |_) |@
 13.1294 + | .__/ @
 13.1295 + |_|    @@
 13.1296 +255  LATIN SMALL LETTER Y WITH DIAERESIS
 13.1297 +  _   _ @
 13.1298 + (_) (_)@
 13.1299 + | | | |@
 13.1300 + | |_| |@
 13.1301 +  \__, |@
 13.1302 +  |___/ @@
 13.1303 +0x0100  LATIN CAPITAL LETTER A WITH MACRON
 13.1304 +   ____ @
 13.1305 +  /___/ @
 13.1306 +   /_\  @
 13.1307 +  / _ \ @
 13.1308 + /_/ \_\@
 13.1309 +        @@
 13.1310 +0x0101  LATIN SMALL LETTER A WITH MACRON
 13.1311 +    ___ @
 13.1312 +   /_ _/@
 13.1313 +  / _` |@
 13.1314 + | (_| |@
 13.1315 +  \__,_|@
 13.1316 +        @@
 13.1317 +0x0102  LATIN CAPITAL LETTER A WITH BREVE
 13.1318 +  _   _ @
 13.1319 +  \\_// @
 13.1320 +   /_\  @
 13.1321 +  / _ \ @
 13.1322 + /_/ \_\@
 13.1323 +        @@
 13.1324 +0x0103  LATIN SMALL LETTER A WITH BREVE
 13.1325 +   \_/  @
 13.1326 +   ___  @
 13.1327 +  / _` |@
 13.1328 + | (_| |@
 13.1329 +  \__,_|@
 13.1330 +        @@
 13.1331 +0x0104  LATIN CAPITAL LETTER A WITH OGONEK
 13.1332 +        @
 13.1333 +    _   @
 13.1334 +   /_\  @
 13.1335 +  / _ \ @
 13.1336 + /_/ \_\@
 13.1337 +     (_(@@
 13.1338 +0x0105  LATIN SMALL LETTER A WITH OGONEK
 13.1339 +        @
 13.1340 +   __ _ @
 13.1341 +  / _` |@
 13.1342 + | (_| |@
 13.1343 +  \__,_|@
 13.1344 +     (_(@@
 13.1345 +0x0106  LATIN CAPITAL LETTER C WITH ACUTE
 13.1346 +     __ @
 13.1347 +   _/_/ @
 13.1348 +  / ___|@
 13.1349 + | |___ @
 13.1350 +  \____|@
 13.1351 +        @@
 13.1352 +0x0107  LATIN SMALL LETTER C WITH ACUTE
 13.1353 +    __ @
 13.1354 +   /__/@
 13.1355 +  / __|@
 13.1356 + | (__ @
 13.1357 +  \___|@
 13.1358 +       @@
 13.1359 +0x0108  LATIN CAPITAL LETTER C WITH CIRCUMFLEX
 13.1360 +     /\ @
 13.1361 +   _//\\@
 13.1362 +  / ___|@
 13.1363 + | |___ @
 13.1364 +  \____|@
 13.1365 +        @@
 13.1366 +0x0109  LATIN SMALL LETTER C WITH CIRCUMFLEX
 13.1367 +    /\ @
 13.1368 +   /_\ @
 13.1369 +  / __|@
 13.1370 + | (__ @
 13.1371 +  \___|@
 13.1372 +       @@
 13.1373 +0x010A  LATIN CAPITAL LETTER C WITH DOT ABOVE
 13.1374 +    []  @
 13.1375 +   ____ @
 13.1376 +  / ___|@
 13.1377 + | |___ @
 13.1378 +  \____|@
 13.1379 +        @@
 13.1380 +0x010B  LATIN SMALL LETTER C WITH DOT ABOVE
 13.1381 +   []  @
 13.1382 +   ___ @
 13.1383 +  / __|@
 13.1384 + | (__ @
 13.1385 +  \___|@
 13.1386 +       @@
 13.1387 +0x010C  LATIN CAPITAL LETTER C WITH CARON
 13.1388 +   \\// @
 13.1389 +   _\/_ @
 13.1390 +  / ___|@
 13.1391 + | |___ @
 13.1392 +  \____|@
 13.1393 +        @@
 13.1394 +0x010D  LATIN SMALL LETTER C WITH CARON
 13.1395 +   \\//@
 13.1396 +   _\/ @
 13.1397 +  / __|@
 13.1398 + | (__ @
 13.1399 +  \___|@
 13.1400 +       @@
 13.1401 +0x010E  LATIN CAPITAL LETTER D WITH CARON
 13.1402 +   \\// @
 13.1403 +  __\/  @
 13.1404 + |  _ \ @
 13.1405 + | |_| |@
 13.1406 + |____/ @
 13.1407 +        @@
 13.1408 +0x010F  LATIN SMALL LETTER D WITH CARON
 13.1409 +  \/  _ @
 13.1410 +   __| |@
 13.1411 +  / _` |@
 13.1412 + | (_| |@
 13.1413 +  \__,_|@
 13.1414 +        @@
 13.1415 +0x0110  LATIN CAPITAL LETTER D WITH STROKE
 13.1416 +   ____   @
 13.1417 +  |_ __ \ @
 13.1418 + /| |/ | |@
 13.1419 + /|_|/_| |@
 13.1420 +  |_____/ @
 13.1421 +          @@
 13.1422 +0x0111  LATIN SMALL LETTER D WITH STROKE
 13.1423 +    ---|@
 13.1424 +   __| |@
 13.1425 +  / _` |@
 13.1426 + | (_| |@
 13.1427 +  \__,_|@
 13.1428 +        @@
 13.1429 +0x0112  LATIN CAPITAL LETTER E WITH MACRON
 13.1430 +   ____ @
 13.1431 +  /___/ @
 13.1432 + | ____|@
 13.1433 + |  _|_ @
 13.1434 + |_____|@
 13.1435 +        @@
 13.1436 +0x0113  LATIN SMALL LETTER E WITH MACRON
 13.1437 +    ____@
 13.1438 +   /_ _/@
 13.1439 +  / _ \ @
 13.1440 + |  __/ @
 13.1441 +  \___| @
 13.1442 +        @@
 13.1443 +0x0114  LATIN CAPITAL LETTER E WITH BREVE
 13.1444 +  _   _ @
 13.1445 +  \\_// @
 13.1446 + | ____|@
 13.1447 + |  _|_ @
 13.1448 + |_____|@
 13.1449 +        @@
 13.1450 +0x0115  LATIN SMALL LETTER E WITH BREVE
 13.1451 +  \\  //@
 13.1452 +    --  @
 13.1453 +  / _ \ @
 13.1454 + |  __/ @
 13.1455 +  \___| @
 13.1456 +        @@
 13.1457 +0x0116  LATIN CAPITAL LETTER E WITH DOT ABOVE
 13.1458 +    []  @
 13.1459 +  _____ @
 13.1460 + | ____|@
 13.1461 + |  _|_ @
 13.1462 + |_____|@
 13.1463 +        @@
 13.1464 +0x0117  LATIN SMALL LETTER E WITH DOT ABOVE
 13.1465 +    [] @
 13.1466 +    __ @
 13.1467 +  / _ \@
 13.1468 + |  __/@
 13.1469 +  \___|@
 13.1470 +       @@
 13.1471 +0x0118  LATIN CAPITAL LETTER E WITH OGONEK
 13.1472 +        @
 13.1473 +  _____ @
 13.1474 + | ____|@
 13.1475 + |  _|_ @
 13.1476 + |_____|@
 13.1477 +    (__(@@
 13.1478 +0x0119  LATIN SMALL LETTER E WITH OGONEK
 13.1479 +       @
 13.1480 +   ___ @
 13.1481 +  / _ \@
 13.1482 + |  __/@
 13.1483 +  \___|@
 13.1484 +    (_(@@
 13.1485 +0x011A  LATIN CAPITAL LETTER E WITH CARON
 13.1486 +   \\// @
 13.1487 +  __\/_ @
 13.1488 + | ____|@
 13.1489 + |  _|_ @
 13.1490 + |_____|@
 13.1491 +        @@
 13.1492 +0x011B  LATIN SMALL LETTER E WITH CARON
 13.1493 +   \\//@
 13.1494 +    \/ @
 13.1495 +  / _ \@
 13.1496 + |  __/@
 13.1497 +  \___|@
 13.1498 +       @@
 13.1499 +0x011C  LATIN CAPITAL LETTER G WITH CIRCUMFLEX
 13.1500 +   _/\_ @
 13.1501 +  / ___|@
 13.1502 + | |  _ @
 13.1503 + | |_| |@
 13.1504 +  \____|@
 13.1505 +        @@
 13.1506 +0x011D  LATIN SMALL LETTER G WITH CIRCUMFLEX
 13.1507 +     /\ @
 13.1508 +   _/_ \@
 13.1509 +  / _` |@
 13.1510 + | (_| |@
 13.1511 +  \__, |@
 13.1512 +  |___/ @@
 13.1513 +0x011E  LATIN CAPITAL LETTER G WITH BREVE
 13.1514 +   _\/_ @
 13.1515 +  / ___|@
 13.1516 + | |  _ @
 13.1517 + | |_| |@
 13.1518 +  \____|@
 13.1519 +        @@
 13.1520 +0x011F  LATIN SMALL LETTER G WITH BREVE
 13.1521 +  \___/ @
 13.1522 +   __ _ @
 13.1523 +  / _` |@
 13.1524 + | (_| |@
 13.1525 +  \__, |@
 13.1526 +  |___/ @@
 13.1527 +0x0120  LATIN CAPITAL LETTER G WITH DOT ABOVE
 13.1528 +   _[]_ @
 13.1529 +  / ___|@
 13.1530 + | |  _ @
 13.1531 + | |_| |@
 13.1532 +  \____|@
 13.1533 +        @@
 13.1534 +0x0121  LATIN SMALL LETTER G WITH DOT ABOVE
 13.1535 +   []   @
 13.1536 +   __ _ @
 13.1537 +  / _` |@
 13.1538 + | (_| |@
 13.1539 +  \__, |@
 13.1540 +  |___/ @@
 13.1541 +0x0122  LATIN CAPITAL LETTER G WITH CEDILLA
 13.1542 +   ____ @
 13.1543 +  / ___|@
 13.1544 + | |  _ @
 13.1545 + | |_| |@
 13.1546 +  \____|@
 13.1547 +   )__) @@
 13.1548 +0x0123  LATIN SMALL LETTER G WITH CEDILLA
 13.1549 +        @
 13.1550 +   __ _ @
 13.1551 +  / _` |@
 13.1552 + | (_| |@
 13.1553 +  \__, |@
 13.1554 +  |_))))@@
 13.1555 +0x0124  LATIN CAPITAL LETTER H WITH CIRCUMFLEX
 13.1556 +  _/ \_ @
 13.1557 + | / \ |@
 13.1558 + | |_| |@
 13.1559 + |  _  |@
 13.1560 + |_| |_|@
 13.1561 +        @@
 13.1562 +0x0125  LATIN SMALL LETTER H WITH CIRCUMFLEX
 13.1563 +  _  /\ @
 13.1564 + | |//\ @
 13.1565 + | '_ \ @
 13.1566 + | | | |@
 13.1567 + |_| |_|@
 13.1568 +        @@
 13.1569 +0x0126  LATIN CAPITAL LETTER H WITH STROKE
 13.1570 +  _   _ @
 13.1571 + | |=| |@
 13.1572 + | |_| |@
 13.1573 + |  _  |@
 13.1574 + |_| |_|@
 13.1575 +        @@
 13.1576 +0x0127  LATIN SMALL LETTER H WITH STROKE
 13.1577 +  _     @
 13.1578 + |=|__  @
 13.1579 + | '_ \ @
 13.1580 + | | | |@
 13.1581 + |_| |_|@
 13.1582 +        @@
 13.1583 +0x0128  LATIN CAPITAL LETTER I WITH TILDE
 13.1584 +  /\//@
 13.1585 + |_ _|@
 13.1586 +  | | @
 13.1587 +  | | @
 13.1588 + |___|@
 13.1589 +      @@
 13.1590 +0x0129  LATIN SMALL LETTER I WITH TILDE
 13.1591 +    @
 13.1592 + /\/@
 13.1593 + | |@
 13.1594 + | |@
 13.1595 + |_|@
 13.1596 +    @@
 13.1597 +0x012A  LATIN CAPITAL LETTER I WITH MACRON
 13.1598 + /___/@
 13.1599 + |_ _|@
 13.1600 +  | | @
 13.1601 +  | | @
 13.1602 + |___|@
 13.1603 +      @@
 13.1604 +0x012B  LATIN SMALL LETTER I WITH MACRON
 13.1605 +  ____@
 13.1606 + /___/@
 13.1607 +  | | @
 13.1608 +  | | @
 13.1609 +  |_| @
 13.1610 +      @@
 13.1611 +0x012C  LATIN CAPITAL LETTER I WITH BREVE
 13.1612 +  \__/@
 13.1613 + |_ _|@
 13.1614 +  | | @
 13.1615 +  | | @
 13.1616 + |___|@
 13.1617 +      @@
 13.1618 +0x012D  LATIN SMALL LETTER I WITH BREVE
 13.1619 +    @
 13.1620 + \_/@
 13.1621 + | |@
 13.1622 + | |@
 13.1623 + |_|@
 13.1624 +    @@
 13.1625 +0x012E  LATIN CAPITAL LETTER I WITH OGONEK
 13.1626 +  ___ @
 13.1627 + |_ _|@
 13.1628 +  | | @
 13.1629 +  | | @
 13.1630 + |___|@
 13.1631 +  (__(@@
 13.1632 +0x012F  LATIN SMALL LETTER I WITH OGONEK
 13.1633 +  _  @
 13.1634 + (_) @
 13.1635 + | | @
 13.1636 + | | @
 13.1637 + |_|_@
 13.1638 +  (_(@@
 13.1639 +0x0130  LATIN CAPITAL LETTER I WITH DOT ABOVE
 13.1640 +  _[] @
 13.1641 + |_ _|@
 13.1642 +  | | @
 13.1643 +  | | @
 13.1644 + |___|@
 13.1645 +      @@
 13.1646 +0x0131  LATIN SMALL LETTER DOTLESS I
 13.1647 +    @
 13.1648 +  _ @
 13.1649 + | |@
 13.1650 + | |@
 13.1651 + |_|@
 13.1652 +    @@
 13.1653 +0x0132  LATIN CAPITAL LIGATURE IJ
 13.1654 +  ___  _ @
 13.1655 + |_ _|| |@
 13.1656 +  | | | |@
 13.1657 +  | |_| |@
 13.1658 + |__|__/ @
 13.1659 +         @@
 13.1660 +0x0133  LATIN SMALL LIGATURE IJ
 13.1661 +  _   _ @
 13.1662 + (_) (_)@
 13.1663 + | | | |@
 13.1664 + | | | |@
 13.1665 + |_|_/ |@
 13.1666 +   |__/ @@
 13.1667 +0x0134  LATIN CAPITAL LETTER J WITH CIRCUMFLEX
 13.1668 +      /\ @
 13.1669 +     /_\|@
 13.1670 +  _  | | @
 13.1671 + | |_| | @
 13.1672 +  \___/  @
 13.1673 +         @@
 13.1674 +0x0135  LATIN SMALL LETTER J WITH CIRCUMFLEX
 13.1675 +    /\@
 13.1676 +   /_\@
 13.1677 +   | |@
 13.1678 +   | |@
 13.1679 +  _/ |@
 13.1680 + |__/ @@
 13.1681 +0x0136  LATIN CAPITAL LETTER K WITH CEDILLA
 13.1682 +  _  _  @
 13.1683 + | |/ / @
 13.1684 + | ' /  @
 13.1685 + | . \  @
 13.1686 + |_|\_\ @
 13.1687 +    )__)@@
 13.1688 +0x0137  LATIN SMALL LETTER K WITH CEDILLA
 13.1689 +  _    @
 13.1690 + | | __@
 13.1691 + | |/ /@
 13.1692 + |   < @
 13.1693 + |_|\_\@
 13.1694 +    )_)@@
 13.1695 +0x0138  LATIN SMALL LETTER KRA
 13.1696 +       @
 13.1697 +  _ __ @
 13.1698 + | |/ \@
 13.1699 + |   < @
 13.1700 + |_|\_\@
 13.1701 +       @@
 13.1702 +0x0139  LATIN CAPITAL LETTER L WITH ACUTE
 13.1703 +  _   //@
 13.1704 + | | // @
 13.1705 + | |    @
 13.1706 + | |___ @
 13.1707 + |_____|@
 13.1708 +        @@
 13.1709 +0x013A  LATIN SMALL LETTER L WITH ACUTE
 13.1710 +  //@
 13.1711 + | |@
 13.1712 + | |@
 13.1713 + | |@
 13.1714 + |_|@
 13.1715 +    @@
 13.1716 +0x013B  LATIN CAPITAL LETTER L WITH CEDILLA
 13.1717 +  _     @
 13.1718 + | |    @
 13.1719 + | |    @
 13.1720 + | |___ @
 13.1721 + |_____|@
 13.1722 +    )__)@@
 13.1723 +0x013C  LATIN SMALL LETTER L WITH CEDILLA
 13.1724 +  _   @
 13.1725 + | |  @
 13.1726 + | |  @
 13.1727 + | |  @
 13.1728 + |_|  @
 13.1729 +   )_)@@
 13.1730 +0x013D  LATIN CAPITAL LETTER L WITH CARON
 13.1731 +  _ \\//@
 13.1732 + | | \/ @
 13.1733 + | |    @
 13.1734 + | |___ @
 13.1735 + |_____|@
 13.1736 +        @@
 13.1737 +0x013E  LATIN SMALL LETTER L WITH CARON
 13.1738 +  _ \\//@
 13.1739 + | | \/ @
 13.1740 + | |    @
 13.1741 + | |    @
 13.1742 + |_|    @
 13.1743 +        @@
 13.1744 +0x013F  LATIN CAPITAL LETTER L WITH MIDDLE DOT
 13.1745 +  _     @
 13.1746 + | |    @
 13.1747 + | | [] @
 13.1748 + | |___ @
 13.1749 + |_____|@
 13.1750 +        @@
 13.1751 +0x0140  LATIN SMALL LETTER L WITH MIDDLE DOT
 13.1752 +  _    @
 13.1753 + | |   @
 13.1754 + | | []@
 13.1755 + | |   @
 13.1756 + |_|   @
 13.1757 +       @@
 13.1758 +0x0141  LATIN CAPITAL LETTER L WITH STROKE
 13.1759 +  __    @
 13.1760 + | //   @
 13.1761 + |//|   @
 13.1762 + // |__ @
 13.1763 + |_____|@
 13.1764 +        @@
 13.1765 +0x0142  LATIN SMALL LETTER L WITH STROKE
 13.1766 +  _ @
 13.1767 + | |@
 13.1768 + |//@
 13.1769 + //|@
 13.1770 + |_|@
 13.1771 +    @@
 13.1772 +0x0143  LATIN CAPITAL LETTER N WITH ACUTE
 13.1773 +  _/ /_ @
 13.1774 + | \ | |@
 13.1775 + |  \| |@
 13.1776 + | |\  |@
 13.1777 + |_| \_|@
 13.1778 +        @@
 13.1779 +0x0144  LATIN SMALL LETTER N WITH ACUTE
 13.1780 +     _  @
 13.1781 +  _ /_/ @
 13.1782 + | '_ \ @
 13.1783 + | | | |@
 13.1784 + |_| |_|@
 13.1785 +        @@
 13.1786 +0x0145  LATIN CAPITAL LETTER N WITH CEDILLA
 13.1787 +  _   _ @
 13.1788 + | \ | |@
 13.1789 + |  \| |@
 13.1790 + | |\  |@
 13.1791 + |_| \_|@
 13.1792 + )_)    @@
 13.1793 +0x0146  LATIN SMALL LETTER N WITH CEDILLA
 13.1794 +        @
 13.1795 +  _ __  @
 13.1796 + | '_ \ @
 13.1797 + | | | |@
 13.1798 + |_| |_|@
 13.1799 + )_)    @@
 13.1800 +0x0147  LATIN CAPITAL LETTER N WITH CARON
 13.1801 +  _\/ _ @
 13.1802 + | \ | |@
 13.1803 + |  \| |@
 13.1804 + | |\  |@
 13.1805 + |_| \_|@
 13.1806 +        @@
 13.1807 +0x0148  LATIN SMALL LETTER N WITH CARON
 13.1808 +  \\//  @
 13.1809 +  _\/_  @
 13.1810 + | '_ \ @
 13.1811 + | | | |@
 13.1812 + |_| |_|@
 13.1813 +        @@
 13.1814 +0x0149  LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
 13.1815 +          @
 13.1816 +  _  __   @
 13.1817 + ( )| '_\ @
 13.1818 + |/| | | |@
 13.1819 +   |_| |_|@
 13.1820 +          @@
 13.1821 +0x014A  LATIN CAPITAL LETTER ENG
 13.1822 +  _   _ @
 13.1823 + | \ | |@
 13.1824 + |  \| |@
 13.1825 + | |\  |@
 13.1826 + |_| \ |@
 13.1827 +     )_)@@
 13.1828 +0x014B  LATIN SMALL LETTER ENG
 13.1829 +  _ __  @
 13.1830 + | '_ \ @
 13.1831 + | | | |@
 13.1832 + |_| | |@
 13.1833 +     | |@
 13.1834 +    |__ @@
 13.1835 +0x014C  LATIN CAPITAL LETTER O WITH MACRON
 13.1836 +   ____ @
 13.1837 +  /_ _/ @
 13.1838 +  / _ \ @
 13.1839 + | (_) |@
 13.1840 +  \___/ @
 13.1841 +        @@
 13.1842 +0x014D  LATIN SMALL LETTER O WITH MACRON
 13.1843 +   ____ @
 13.1844 +  /_ _/ @
 13.1845 +  / _ \ @
 13.1846 + | (_) |@
 13.1847 +  \___/ @
 13.1848 +        @@
 13.1849 +0x014E  LATIN CAPITAL LETTER O WITH BREVE
 13.1850 +  \   / @
 13.1851 +   _-_  @
 13.1852 +  / _ \ @
 13.1853 + | |_| |@
 13.1854 +  \___/ @
 13.1855 +        @@
 13.1856 +0x014F  LATIN SMALL LETTER O WITH BREVE
 13.1857 +  \   / @
 13.1858 +   _-_  @
 13.1859 +  / _ \ @
 13.1860 + | |_| |@
 13.1861 +  \___/ @
 13.1862 +        @@
 13.1863 +0x0150  LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
 13.1864 +    ___ @
 13.1865 +   /_/_/@
 13.1866 +  / _ \ @
 13.1867 + | |_| |@
 13.1868 +  \___/ @
 13.1869 +        @@
 13.1870 +0x0151  LATIN SMALL LETTER O WITH DOUBLE ACUTE
 13.1871 +    ___ @
 13.1872 +   /_/_/@
 13.1873 +  / _ \ @
 13.1874 + | |_| |@
 13.1875 +  \___/ @
 13.1876 +        @@
 13.1877 +0x0152  LATIN CAPITAL LIGATURE OE
 13.1878 +   ___  ___ @
 13.1879 +  / _ \| __|@
 13.1880 + | | | |  | @
 13.1881 + | |_| | |__@
 13.1882 +  \___/|____@
 13.1883 +            @@
 13.1884 +0x0153  LATIN SMALL LIGATURE OE
 13.1885 +             @
 13.1886 +   ___   ___ @
 13.1887 +  / _ \ / _ \@
 13.1888 + | (_) |  __/@
 13.1889 +  \___/ \___|@
 13.1890 +             @@
 13.1891 +0x0154  LATIN CAPITAL LETTER R WITH ACUTE
 13.1892 +  _/_/  @
 13.1893 + |  _ \ @
 13.1894 + | |_) |@
 13.1895 + |  _ < @
 13.1896 + |_| \_\@
 13.1897 +        @@
 13.1898 +0x0155  LATIN SMALL LETTER R WITH ACUTE
 13.1899 +     __@
 13.1900 +  _ /_/@
 13.1901 + | '__|@
 13.1902 + | |   @
 13.1903 + |_|   @
 13.1904 +       @@
 13.1905 +0x0156  LATIN CAPITAL LETTER R WITH CEDILLA
 13.1906 +  ____  @
 13.1907 + |  _ \ @
 13.1908 + | |_) |@
 13.1909 + |  _ < @
 13.1910 + |_| \_\@
 13.1911 + )_)    @@
 13.1912 +0x0157  LATIN SMALL LETTER R WITH CEDILLA
 13.1913 +       @
 13.1914 +  _ __ @
 13.1915 + | '__|@
 13.1916 + | |   @
 13.1917 + |_|   @
 13.1918 +   )_) @@
 13.1919 +0x0158  LATIN CAPITAL LETTER R WITH CARON
 13.1920 +  _\_/  @
 13.1921 + |  _ \ @
 13.1922 + | |_) |@
 13.1923 + |  _ < @
 13.1924 + |_| \_\@
 13.1925 +        @@
 13.1926 +0x0159  LATIN SMALL LETTER R WITH CARON
 13.1927 +  \\// @
 13.1928 +  _\/_ @
 13.1929 + | '__|@
 13.1930 + | |   @
 13.1931 + |_|   @
 13.1932 +       @@
 13.1933 +0x015A  LATIN CAPITAL LETTER S WITH ACUTE
 13.1934 +  _/_/  @
 13.1935 + / ___| @
 13.1936 + \___ \ @
 13.1937 +  ___) |@
 13.1938 + |____/ @
 13.1939 +        @@
 13.1940 +0x015B  LATIN SMALL LETTER S WITH ACUTE
 13.1941 +    __@
 13.1942 +  _/_/@
 13.1943 + / __|@
 13.1944 + \__ \@
 13.1945 + |___/@
 13.1946 +      @@
 13.1947 +0x015C  LATIN CAPITAL LETTER S WITH CIRCUMFLEX
 13.1948 +  _/\_  @
 13.1949 + / ___| @
 13.1950 + \___ \ @
 13.1951 +  ___) |@
 13.1952 + |____/ @
 13.1953 +        @@
 13.1954 +0x015D  LATIN SMALL LETTER S WITH CIRCUMFLEX
 13.1955 +      @
 13.1956 +  /_\_@
 13.1957 + / __|@
 13.1958 + \__ \@
 13.1959 + |___/@
 13.1960 +      @@
 13.1961 +0x015E  LATIN CAPITAL LETTER S WITH CEDILLA
 13.1962 +  ____  @
 13.1963 + / ___| @
 13.1964 + \___ \ @
 13.1965 +  ___) |@
 13.1966 + |____/ @
 13.1967 +    )__)@@
 13.1968 +0x015F  LATIN SMALL LETTER S WITH CEDILLA
 13.1969 +      @
 13.1970 +  ___ @
 13.1971 + / __|@
 13.1972 + \__ \@
 13.1973 + |___/@
 13.1974 +   )_)@@
 13.1975 +0x0160  LATIN CAPITAL LETTER S WITH CARON
 13.1976 +  _\_/  @
 13.1977 + / ___| @
 13.1978 + \___ \ @
 13.1979 +  ___) |@
 13.1980 + |____/ @
 13.1981 +        @@
 13.1982 +0x0161  LATIN SMALL LETTER S WITH CARON
 13.1983 +  \\//@
 13.1984 +  _\/ @
 13.1985 + / __|@
 13.1986 + \__ \@
 13.1987 + |___/@
 13.1988 +      @@
 13.1989 +0x0162  LATIN CAPITAL LETTER T WITH CEDILLA
 13.1990 +  _____ @
 13.1991 + |_   _|@
 13.1992 +   | |  @
 13.1993 +   | |  @
 13.1994 +   |_|  @
 13.1995 +    )__)@@
 13.1996 +0x0163  LATIN SMALL LETTER T WITH CEDILLA
 13.1997 +  _   @
 13.1998 + | |_ @
 13.1999 + | __|@
 13.2000 + | |_ @
 13.2001 +  \__|@
 13.2002 +   )_)@@
 13.2003 +0x0164  LATIN CAPITAL LETTER T WITH CARON
 13.2004 +  _____ @
 13.2005 + |_   _|@
 13.2006 +   | |  @
 13.2007 +   | |  @
 13.2008 +   |_|  @
 13.2009 +        @@
 13.2010 +0x0165  LATIN SMALL LETTER T WITH CARON
 13.2011 +  \/  @
 13.2012 + | |_ @
 13.2013 + | __|@
 13.2014 + | |_ @
 13.2015 +  \__|@
 13.2016 +      @@
 13.2017 +0x0166  LATIN CAPITAL LETTER T WITH STROKE
 13.2018 +  _____ @
 13.2019 + |_   _|@
 13.2020 +   | |  @
 13.2021 +  -|-|- @
 13.2022 +   |_|  @
 13.2023 +        @@
 13.2024 +0x0167  LATIN SMALL LETTER T WITH STROKE
 13.2025 +  _   @
 13.2026 + | |_ @
 13.2027 + | __|@
 13.2028 + |-|_ @
 13.2029 +  \__|@
 13.2030 +      @@
 13.2031 +0x0168  LATIN CAPITAL LETTER U WITH TILDE
 13.2032 +        @
 13.2033 +  _/\/_ @
 13.2034 + | | | |@
 13.2035 + | |_| |@
 13.2036 +  \___/ @
 13.2037 +        @@
 13.2038 +0x0169  LATIN SMALL LETTER U WITH TILDE
 13.2039 +        @
 13.2040 +  _/\/_ @
 13.2041 + | | | |@
 13.2042 + | |_| |@
 13.2043 +  \__,_|@
 13.2044 +        @@
 13.2045 +0x016A  LATIN CAPITAL LETTER U WITH MACRON
 13.2046 +   ____ @
 13.2047 +  /__ _/@
 13.2048 + | | | |@
 13.2049 + | |_| |@
 13.2050 +  \___/ @
 13.2051 +        @@
 13.2052 +0x016B  LATIN SMALL LETTER U WITH MACRON
 13.2053 +   ____ @
 13.2054 +  / _  /@
 13.2055 + | | | |@
 13.2056 + | |_| |@
 13.2057 +  \__,_|@
 13.2058 +        @@
 13.2059 +0x016C  LATIN CAPITAL LETTER U WITH BREVE
 13.2060 +        @
 13.2061 +   \_/_ @
 13.2062 + | | | |@
 13.2063 + | |_| |@
 13.2064 +  \____|@
 13.2065 +        @@
 13.2066 +0x016D  LATIN SMALL LETTER U WITH BREVE
 13.2067 +        @
 13.2068 +   \_/_ @
 13.2069 + | | | |@
 13.2070 + | |_| |@
 13.2071 +  \__,_|@
 13.2072 +        @@
 13.2073 +0x016E  LATIN CAPITAL LETTER U WITH RING ABOVE
 13.2074 +    O   @
 13.2075 +  __  _ @
 13.2076 + | | | |@
 13.2077 + | |_| |@
 13.2078 +  \___/ @
 13.2079 +        @@
 13.2080 +0x016F  LATIN SMALL LETTER U WITH RING ABOVE
 13.2081 +    O   @
 13.2082 +  __ __ @
 13.2083 + | | | |@
 13.2084 + | |_| |@
 13.2085 +  \__,_|@
 13.2086 +        @@
 13.2087 +0x0170  LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
 13.2088 +   -- --@
 13.2089 +  /_//_/@
 13.2090 + | | | |@
 13.2091 + | |_| |@
 13.2092 +  \___/ @
 13.2093 +        @@
 13.2094 +0x0171  LATIN SMALL LETTER U WITH DOUBLE ACUTE
 13.2095 +    ____@
 13.2096 +  _/_/_/@
 13.2097 + | | | |@
 13.2098 + | |_| |@
 13.2099 +  \__,_|@
 13.2100 +        @@
 13.2101 +0x0172  LATIN CAPITAL LETTER U WITH OGONEK
 13.2102 +  _   _ @
 13.2103 + | | | |@
 13.2104 + | | | |@
 13.2105 + | |_| |@
 13.2106 +  \___/ @
 13.2107 +    (__(@@
 13.2108 +0x0173  LATIN SMALL LETTER U WITH OGONEK
 13.2109 +        @
 13.2110 +  _   _ @
 13.2111 + | | | |@
 13.2112 + | |_| |@
 13.2113 +  \__,_|@
 13.2114 +     (_(@@
 13.2115 +0x0174  LATIN CAPITAL LETTER W WITH CIRCUMFLEX
 13.2116 + __    /\  __@
 13.2117 + \ \  //\\/ /@
 13.2118 +  \ \ /\ / / @
 13.2119 +   \ V  V /  @
 13.2120 +    \_/\_/   @
 13.2121 +             @@
 13.2122 +0x0175  LATIN SMALL LETTER W WITH CIRCUMFLEX
 13.2123 +      /\   @
 13.2124 + __  //\\__@
 13.2125 + \ \ /\ / /@
 13.2126 +  \ V  V / @
 13.2127 +   \_/\_/  @
 13.2128 +           @@
 13.2129 +0x0176  LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
 13.2130 +    /\  @
 13.2131 + __//\\ @
 13.2132 + \ \ / /@
 13.2133 +  \ V / @
 13.2134 +   |_|  @
 13.2135 +        @@
 13.2136 +0x0177  LATIN SMALL LETTER Y WITH CIRCUMFLEX
 13.2137 +    /\  @
 13.2138 +   //\\ @
 13.2139 + | | | |@
 13.2140 + | |_| |@
 13.2141 +  \__, |@
 13.2142 +  |___/ @@
 13.2143 +0x0178  LATIN CAPITAL LETTER Y WITH DIAERESIS
 13.2144 +  []  []@
 13.2145 + __    _@
 13.2146 + \ \ / /@
 13.2147 +  \ V / @
 13.2148 +   |_|  @
 13.2149 +        @@
 13.2150 +0x0179  LATIN CAPITAL LETTER Z WITH ACUTE
 13.2151 +  __/_/@
 13.2152 + |__  /@
 13.2153 +   / / @
 13.2154 +  / /_ @
 13.2155 + /____|@
 13.2156 +       @@
 13.2157 +0x017A  LATIN SMALL LETTER Z WITH ACUTE
 13.2158 +    _ @
 13.2159 +  _/_/@
 13.2160 + |_  /@
 13.2161 +  / / @
 13.2162 + /___|@
 13.2163 +      @@
 13.2164 +0x017B  LATIN CAPITAL LETTER Z WITH DOT ABOVE
 13.2165 +  __[]_@
 13.2166 + |__  /@
 13.2167 +   / / @
 13.2168 +  / /_ @
 13.2169 + /____|@
 13.2170 +       @@
 13.2171 +0x017C  LATIN SMALL LETTER Z WITH DOT ABOVE
 13.2172 +   [] @
 13.2173 +  ____@
 13.2174 + |_  /@
 13.2175 +  / / @
 13.2176 + /___|@
 13.2177 +      @@
 13.2178 +0x017D  LATIN CAPITAL LETTER Z WITH CARON
 13.2179 +  _\_/_@
 13.2180 + |__  /@
 13.2181 +   / / @
 13.2182 +  / /_ @
 13.2183 + /____|@
 13.2184 +       @@
 13.2185 +0x017E  LATIN SMALL LETTER Z WITH CARON
 13.2186 +  \\//@
 13.2187 +  _\/_@
 13.2188 + |_  /@
 13.2189 +  / / @
 13.2190 + /___|@
 13.2191 +      @@
 13.2192 +0x017F  LATIN SMALL LETTER LONG S
 13.2193 +     __ @
 13.2194 +    / _|@
 13.2195 + |-| |  @
 13.2196 + |-| |  @
 13.2197 +   |_|  @
 13.2198 +        @@
 13.2199 +0x02C7  CARON
 13.2200 + \\//@
 13.2201 +  \/ @
 13.2202 +    $@
 13.2203 +    $@
 13.2204 +    $@
 13.2205 +    $@@
 13.2206 +0x02D8  BREVE
 13.2207 + \\_//@
 13.2208 +  \_/ @
 13.2209 +     $@
 13.2210 +     $@
 13.2211 +     $@
 13.2212 +     $@@
 13.2213 +0x02D9  DOT ABOVE
 13.2214 + []@
 13.2215 +  $@
 13.2216 +  $@
 13.2217 +  $@
 13.2218 +  $@
 13.2219 +  $@@
 13.2220 +0x02DB  OGONEK
 13.2221 +    $@
 13.2222 +    $@
 13.2223 +    $@
 13.2224 +    $@
 13.2225 +    $@
 13.2226 + )_) @@
 13.2227 +0x02DD  DOUBLE ACUTE ACCENT
 13.2228 +  _ _ @
 13.2229 + /_/_/@
 13.2230 +     $@
 13.2231 +     $@
 13.2232 +     $@
 13.2233 +     $@@