ia64/xen-unstable
changeset 422:5d0fd4216f8f
bitkeeper revision 1.205 (3eb3c88eduKB4UKYwbNPBquG4zJDqg)
Merge scramble.cl.cam.ac.uk:/auto/groups/xeno/BK/xeno.bk
into scramble.cl.cam.ac.uk:/local/scratch/kaf24/xeno
Merge scramble.cl.cam.ac.uk:/auto/groups/xeno/BK/xeno.bk
into scramble.cl.cam.ac.uk:/local/scratch/kaf24/xeno
author | kaf24@scramble.cl.cam.ac.uk |
---|---|
date | Sat May 03 13:47:58 2003 +0000 (2003-05-03) |
parents | 56e5f664744d d5610c721158 |
children | 67a66de6d9a0 |
files | .rootkeys xen/Makefile xen/common/kernel.c xen/include/xeno/version.h 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 Fri May 02 15:53:41 2003 +0000 1.2 +++ b/.rootkeys Sat May 03 13:47:58 2003 +0000 1.3 @@ -365,6 +365,11 @@ 3ddb79c4NSDwiQ-AmrYdxcRAwLPzwQ xen/net/e 1.4 3ddb79c4TZj1wXPKQt36O72SddtBNQ xen/net/skbuff.c 1.5 3ddb79c4x8dvwPtzclghWAKFWpEBFA xen/tools/Makefile 1.6 3ddb79c4yGZ7_22QAFFwPzqP4NSHwA xen/tools/elf-reloc.c 1.7 +3eb3c87fc79FXLA6R9TvdBJNTvQDwA xen/tools/figlet/LICENSE 1.8 +3eb3c87fPL2T_zBb0bHlbZY-ACEKRw xen/tools/figlet/Makefile 1.9 +3eb3c87fmKYTC5GCh_rydFakZp9ayw xen/tools/figlet/README 1.10 +3eb3c87fdQKQ5OBGbM-KjZfi9Us4ng xen/tools/figlet/figlet.c 1.11 +3eb3c87fS7DNbg0i6yhFs28UIqAK5g xen/tools/figlet/xen.flf 1.12 3e5a4e6589G-U42lFKs43plskXoFxQ xenolinux-2.4.21-pre4-sparse/Makefile 1.13 3e5a4e65IEPjnWPZ5w3TxS5scV8Ewg xenolinux-2.4.21-pre4-sparse/arch/xeno/Makefile 1.14 3e5a4e65n-KhsEAs-A4ULiStBp-r6w xenolinux-2.4.21-pre4-sparse/arch/xeno/boot/Makefile
2.1 --- a/xen/Makefile Fri May 02 15:53:41 2003 +0000 2.2 +++ b/xen/Makefile Sat May 03 13:47:58 2003 +0000 2.3 @@ -1,10 +1,16 @@ 2.4 2.5 -export BASEDIR := $(shell pwd) 2.6 +# This is the correct place to edit the build version. 2.7 +# All other places this is stored (eg. compile.h) should be autogenerated. 2.8 +export XEN_VERSION = 1 2.9 +export XEN_SUBVERSION = 0 2.10 +export XEN_EXTRAVERSION = "-beta" 2.11 + 2.12 +export BASEDIR := $(shell pwd) 2.13 + 2.14 +include Rules.mk 2.15 2.16 GENERATED_FILES := include/xeno/compile.h 2.17 2.18 -include Rules.mk 2.19 - 2.20 default: $(TARGET) 2.21 gzip -f -9 < $(TARGET) > $(TARGET).gz 2.22 2.23 @@ -37,28 +43,37 @@ make-links: delete-links 2.24 delete-links: 2.25 rm -f include/linux include/asm 2.26 2.27 -# NB. kernel.o is blown away as the build date is stored statically within it 2.28 -# Basically it's the only file dependent on compile.h -- we blow that 2.29 -# dependency away for all other files in Rules.mk. 2.30 +# Blow away kernel.o because build info is stored statically within it. 2.31 delete-unfresh-files: 2.32 rm -f $(GENERATED_FILES) common/kernel.o 2.33 2.34 +# compile.h contains dynamic build info. Rebuilt on every 'make' invocation. 2.35 include/xeno/compile.h: 2.36 - @LANG=C echo \#define XEN_COMPILE_DATE \"`date`\" > $@ 2.37 + @LANG=C echo /\* Autogenerated by root Makefile. Do not edit. \*/ > $@ 2.38 + @LANG=C echo >> $@ 2.39 + @LANG=C echo \#define XEN_COMPILE_DATE \"`date`\" >> $@ 2.40 @LANG=C echo \#define XEN_COMPILE_TIME \"`date +%T`\" >> $@ 2.41 @LANG=C echo \#define XEN_COMPILE_BY \"`whoami`\" >> $@ 2.42 @LANG=C echo \#define XEN_COMPILE_DOMAIN \"`([ -x /bin/dnsdomainname ] && /bin/dnsdomainname) || ([ -x /bin/domainname ] && /bin/domainname || echo [unknown])`\" >> $@ 2.43 @LANG=C echo \#define XEN_COMPILE_HOST \"`hostname`\" >> $@ 2.44 @LANG=C echo \#define XEN_COMPILER \"`$(CC) $(CFLAGS) -v 2>&1 | tail -1`\" >> $@ 2.45 - 2.46 -.PHONY: $(GENERATED_FILES) make-links delete-links default debug install clean delete-unfresh-files 2.47 + @LANG=C echo >> $@ 2.48 + @LANG=C echo \#define XEN_VERSION\ \ \ \ \ \ $(XEN_VERSION) >> $@ 2.49 + @LANG=C echo \#define XEN_SUBVERSION\ \ \ $(XEN_SUBVERSION) >> $@ 2.50 + @LANG=C echo \#define XEN_EXTRAVERSION \"$(XEN_EXTRAVERSION)\" >> $@ 2.51 + @LANG=C echo >> $@ 2.52 + @LANG=C echo \#define XEN_BANNER \\ >> $@ 2.53 + cd tools/figlet && make && ./figlet Xen $(XEN_VERSION).$(XEN_SUBVERSION)$(XEN_EXTRAVERSION) 1>>../../$@ && cd ../.. 2.54 + @LANG=C echo >> $@ 2.55 2.56 +.PHONY: $(GENERATED_FILES) make-links delete-links default 2.57 +.PHONY: debug install clean delete-unfresh-files 2.58 2.59 -SUBDIRS =arch common drivers net 2.60 +SUBDIRS = arch common drivers net 2.61 TAGS: 2.62 etags `find include/asm-$(ARCH) -name '*.h'` 2.63 find include -type d \( -name "asm-*" -o -name config \) -prune -o -name '*.h' -print | xargs etags -a 2.64 find $(SUBDIRS) -name '*.[ch]' | xargs etags -a 2.65 - 2.66 MAP: 2.67 nm image | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | sort > System.map 2.68 +
3.1 --- a/xen/common/kernel.c Fri May 02 15:53:41 2003 +0000 3.2 +++ b/xen/common/kernel.c Sat May 03 13:47:58 2003 +0000 3.3 @@ -171,12 +171,7 @@ void cmain (unsigned long magic, multibo 3.4 /* INITIALISE SERIAL LINE (printk will work okay from here on). */ 3.5 init_serial(); 3.6 3.7 - /* Print the intro banner. The ASCII art is ugle since '\\' -> '\'. */ 3.8 - printk(" __ __ _ ___ _ _ \n"); 3.9 - printk(" \\ \\/ /___ _ __ / | / _ \\ | |__ ___| |_ __ _ \n"); 3.10 - printk(" \\ // _ \\ '_ \\ | || | | | | '_ \\ / _ \\ __/ _` |\n"); 3.11 - printk(" / \\ __/ | | | | || |_| | | |_) | __/ || (_| |\n"); 3.12 - printk(" /_/\\_\\___|_| |_| |_(_)___/ |_.__/ \\___|\\__\\__,_|\n\n"); 3.13 + printk(XEN_BANNER); 3.14 printk(" http://www.cl.cam.ac.uk/xeno\n"); 3.15 printk(" University of Cambridge Computer Laboratory\n\n"); 3.16 printk(" Xen version %d.%d%s (%s@%s) (%s) %s\n\n", 3.17 @@ -390,14 +385,22 @@ static inline void __putstr(const char * 3.18 void printf (const char *fmt, ...) 3.19 { 3.20 va_list args; 3.21 - char buf[128], *p; 3.22 + char buf[128], *p = fmt; 3.23 unsigned long flags; 3.24 3.25 - va_start(args, fmt); 3.26 - (void)vsnprintf(buf, sizeof(buf), fmt, args); 3.27 - va_end(args); 3.28 - 3.29 - p = buf; 3.30 + /* 3.31 + * If the format string contains '%' descriptors then we have to parse it 3.32 + * before printing it. We parse it into a fixed-length buffer. Long 3.33 + * strings should therefore _not_ contain '%' characters! 3.34 + */ 3.35 + if ( strchr(fmt, '%') != NULL ) 3.36 + { 3.37 + va_start(args, fmt); 3.38 + (void)vsnprintf(buf, sizeof(buf), fmt, args); 3.39 + va_end(args); 3.40 + p = buf; 3.41 + } 3.42 + 3.43 spin_lock_irqsave(&console_lock, flags); 3.44 while ( *p ) putchar(*p++); 3.45 spin_unlock_irqrestore(&console_lock, flags);
4.1 --- a/xen/include/xeno/version.h Fri May 02 15:53:41 2003 +0000 4.2 +++ b/xen/include/xeno/version.h Sat May 03 13:47:58 2003 +0000 4.3 @@ -1,6 +1,2 @@ 4.4 #define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) 4.5 #define LINUX_VERSION_CODE KERNEL_VERSION(2,4,21) 4.6 - 4.7 -#define XEN_VERSION 1 4.8 -#define XEN_SUBVERSION 0 4.9 -#define XEN_EXTRAVERSION "-beta"
5.1 --- a/xen/tools/Makefile Fri May 02 15:53:41 2003 +0000 5.2 +++ b/xen/tools/Makefile Sat May 03 13:47:58 2003 +0000 5.3 @@ -1,6 +1,14 @@ 5.4 + 5.5 +all: figlet elf-reloc 5.6 + 5.7 +figlet: 5.8 + $(MAKE) -C figlet 5.9 5.10 elf-reloc: elf-reloc.c 5.11 gcc -O2 -Wall -o $@ $< 5.12 5.13 clean: 5.14 rm -f elf-reloc *~ core 5.15 + $(MAKE) -C figlet clean 5.16 + 5.17 +.PHONY: figlet
6.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 6.2 +++ b/xen/tools/figlet/LICENSE Sat May 03 13:47:58 2003 +0000 6.3 @@ -0,0 +1,111 @@ 6.4 +http://www.sunsite.unc.edu/pub/Linux/LICENSES/artistic.license 6.5 + 6.6 + The "Artistic License" 6.7 + 6.8 + Preamble 6.9 + 6.10 +The intent of this document is to state the conditions under which a 6.11 +Package may be copied, such that the Copyright Holder maintains some 6.12 +semblance of artistic control over the development of the package, 6.13 +while giving the users of the package the right to use and distribute 6.14 +the Package in a more-or-less customary fashion, plus the right to make 6.15 +reasonable modifications. 6.16 + 6.17 +Definitions: 6.18 + 6.19 + "Package" refers to the collection of files distributed by the 6.20 + Copyright Holder, and derivatives of that collection of files 6.21 + created through textual modification. 6.22 + 6.23 + "Standard Version" refers to such a Package if it has not been 6.24 + modified, or has been modified in accordance with the wishes 6.25 + of the Copyright Holder. 6.26 + 6.27 + "Copyright Holder" is whoever is named in the copyright or 6.28 + copyrights for the package. 6.29 + 6.30 + "You" is you, if you're thinking about copying or distributing 6.31 + this Package. 6.32 + 6.33 + "Reasonable copying fee" is whatever you can justify on the 6.34 + basis of media cost, duplication charges, time of people involved, 6.35 + and so on. (You will not be required to justify it to the 6.36 + Copyright Holder, but only to the computing community at large 6.37 + as a market that must bear the fee.) 6.38 + 6.39 + "Freely Available" means that no fee is charged for the item 6.40 + itself, though there may be fees involved in handling the item. 6.41 + It also means that recipients of the item may redistribute it 6.42 + under the same conditions they received it. 6.43 + 6.44 +1. You may make and give away verbatim copies of the source form of the 6.45 +Standard Version of this Package without restriction, provided that you 6.46 +duplicate all of the original copyright notices and associated disclaimers. 6.47 + 6.48 +2. You may apply bug fixes, portability fixes and other modifications 6.49 +derived from the Public Domain or from the Copyright Holder. A Package 6.50 +modified in such a way shall still be considered the Standard Version. 6.51 + 6.52 +3. You may otherwise modify your copy of this Package in any way, provided 6.53 +that you insert a prominent notice in each changed file stating how and 6.54 +when you changed that file, and provided that you do at least ONE of the 6.55 +following: 6.56 + 6.57 + a) place your modifications in the Public Domain or otherwise make them 6.58 + Freely Available, such as by posting said modifications to Usenet or 6.59 + an equivalent medium, or placing the modifications on a major archive 6.60 + site such as ftp.uu.net, or by allowing the Copyright Holder to include 6.61 + your modifications in the Standard Version of the Package. 6.62 + 6.63 + b) use the modified Package only within your corporation or organization. 6.64 + 6.65 + c) rename any non-standard executables so the names do not conflict 6.66 + with standard executables, which must also be provided, and provide 6.67 + a separate manual page for each non-standard executable that clearly 6.68 + documents how it differs from the Standard Version. 6.69 + 6.70 + d) make other distribution arrangements with the Copyright Holder. 6.71 + 6.72 +4. You may distribute the programs of this Package in object code or 6.73 +executable form, provided that you do at least ONE of the following: 6.74 + 6.75 + a) distribute a Standard Version of the executables and library files, 6.76 + together with instructions (in the manual page or equivalent) on where 6.77 + to get the Standard Version. 6.78 + 6.79 + b) accompany the distribution with the machine-readable source of 6.80 + the Package with your modifications. 6.81 + 6.82 + c) accompany any non-standard executables with their corresponding 6.83 + Standard Version executables, giving the non-standard executables 6.84 + non-standard names, and clearly documenting the differences in manual 6.85 + pages (or equivalent), together with instructions on where to get 6.86 + the Standard Version. 6.87 + 6.88 + d) make other distribution arrangements with the Copyright Holder. 6.89 + 6.90 +5. You may charge a reasonable copying fee for any distribution of this 6.91 +Package. You may charge any fee you choose for support of this Package. 6.92 +You may not charge a fee for this Package itself. However, 6.93 +you may distribute this Package in aggregate with other (possibly 6.94 +commercial) programs as part of a larger (possibly commercial) software 6.95 +distribution provided that you do not advertise this Package as a 6.96 +product of your own. 6.97 + 6.98 +6. The scripts and library files supplied as input to or produced as 6.99 +output from the programs of this Package do not automatically fall 6.100 +under the copyright of this Package, but belong to whomever generated 6.101 +them, and may be sold commercially, and may be aggregated with this 6.102 +Package. 6.103 + 6.104 +7. C or perl subroutines supplied by you and linked into this Package 6.105 +shall not be considered part of this Package. 6.106 + 6.107 +8. The name of the Copyright Holder may not be used to endorse or promote 6.108 +products derived from this software without specific prior written permission. 6.109 + 6.110 +9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR 6.111 +IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 6.112 +WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. 6.113 + 6.114 + The End
7.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 7.2 +++ b/xen/tools/figlet/Makefile Sat May 03 13:47:58 2003 +0000 7.3 @@ -0,0 +1,7 @@ 7.4 + 7.5 +CC := gcc 7.6 + 7.7 +figlet: figlet.c 7.8 + 7.9 +clean: 7.10 + rm -f *.o figlet
8.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 8.2 +++ b/xen/tools/figlet/README Sat May 03 13:47:58 2003 +0000 8.3 @@ -0,0 +1,9 @@ 8.4 + 8.5 +NB. This is a very hacked version of Figlet 2.2.1. 8.6 + 8.7 +Don't use this outside the Xen build system. A proper version of Figlet 8.8 +can be had from <http://www.figlet.org>. 8.9 + 8.10 +The distribution license is intact in the LICENSE file. 8.11 + 8.12 + -- Keir Fraser (2/5/2003)
9.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 9.2 +++ b/xen/tools/figlet/figlet.c Sat May 03 13:47:58 2003 +0000 9.3 @@ -0,0 +1,2075 @@ 9.4 + 9.5 +/* 9.6 + * XXXXXXXXXXXXXXXXXXXXXXXXXXX 9.7 + * 9.8 + * This is a HACKED figlet source file for Xen. 9.9 + * 9.10 + * Hacked to output C octal strings for inclusion in a header file. 9.11 + * Support for opening zippe files is removed. 9.12 + * 9.13 + * Go to www.figlet.org for teh unhacked Figlet sources! 9.14 + */ 9.15 + 9.16 +/**************************************************************************** 9.17 + 9.18 + FIGlet Copyright 1991, 1993, 1994 Glenn Chappell and Ian Chai 9.19 + FIGlet Copyright 1996, 1997, 1998, 1999, 2000, 2001 John Cowan 9.20 + FIGlet Copyright 2002 Christiaan Keet 9.21 + Portions written by Paul Burton and Christiaan Keet 9.22 + Internet: <info@figlet.org> 9.23 + FIGlet, along with the various FIGlet fonts and documentation, is 9.24 + copyrighted under the provisions of the Artistic License (as listed 9.25 + in the file "Artistic-license.txt" which is included in this package. 9.26 +****************************************************************************/ 9.27 + 9.28 +#define DATE "13 July 2002" 9.29 +#define VERSION "2.2.1" 9.30 +#define VERSION_INT 20201 9.31 + 9.32 +/* FIGlet (Frank, Ian & Glenn's Letters) */ 9.33 +/* by Glenn Chappell */ 9.34 +/* Apr 1991 */ 9.35 +/* Automatic file addition by Ian Chai May 1991 */ 9.36 +/* Punctuation and numbers addition by Ian Chai Jan 1993 */ 9.37 +/* Full ASCII by Glenn Chappell Feb 1993 */ 9.38 +/* Line-breaking, general rewrite by Glenn Chappell Mar 1993 */ 9.39 +/* Hard blanks by Glenn Chappell Apr 1993 */ 9.40 +/* Release 2.0 5 Aug 1993 */ 9.41 +/* Right-to-left printing, extended char set by Glenn Chappell Dec 1993 */ 9.42 +/* Control files by Glenn Chappell Feb 1994 */ 9.43 +/* Release 2.1 12 Aug 1994 */ 9.44 +/* Release 2.1.1 25 Aug 1994 */ 9.45 +/* Release 2.1.2 by Gilbert (Mad Programmer) Healton: Add -A command line 9.46 + option. Sept 8, 1996 */ 9.47 +/* Release 2.2 by John Cowan: multibyte inputs, compressed fonts, 9.48 + mapping tables, kerning/smushing options. */ 9.49 +/* Release 2.2.1 by Christiaan Keet: minor updates including readmes 9.50 + FAQs and comments. 13 July 2002. The new official FIGlet website is 9.51 + http://www.figlet.org/ */ 9.52 + 9.53 +#define DEFAULTFONTDIR "." 9.54 +#define DEFAULTFONTFILE "xen.flf" 9.55 + 9.56 +#include <stdio.h> 9.57 +#ifdef __STDC__ 9.58 +#include <stdlib.h> 9.59 +#endif 9.60 +#include <string.h> 9.61 +#include <ctype.h> 9.62 +#include <fcntl.h> /* Needed for get_columns */ 9.63 + 9.64 +#ifdef unix 9.65 +#include <sys/ioctl.h> /* Needed for get_columns */ 9.66 +#endif 9.67 + 9.68 + 9.69 +#define ZFILE FILE 9.70 +#define Zopen fopen 9.71 +#define Zgetc fgetc 9.72 +#define Zungetc(_x,_y) fseek(_y,-1,SEEK_CUR) 9.73 +#define Zclose fclose 9.74 + 9.75 +#define MYSTRLEN(x) ((int)strlen(x)) /* Eliminate ANSI problem */ 9.76 + 9.77 +#define DIRSEP '/' 9.78 +#define DIRSEP2 '\\' 9.79 +/* Leave alone for Unix and MS-DOS/Windows! 9.80 +Note: '/' also used in filename in get_columns(). */ 9.81 + 9.82 +#define FONTFILESUFFIX ".flf" 9.83 +#define FONTFILEMAGICNUMBER "flf2" 9.84 +#define FSUFFIXLEN MYSTRLEN(FONTFILESUFFIX) 9.85 +#define CONTROLFILESUFFIX ".flc" 9.86 +#define CONTROLFILEMAGICNUMBER "flc2" /* no longer used in 2.2 */ 9.87 +#define CSUFFIXLEN MYSTRLEN(CONTROLFILESUFFIX) 9.88 +#define DEFAULTCOLUMNS 80 9.89 + 9.90 + 9.91 +/**************************************************************************** 9.92 + 9.93 + Globals dealing with chars that are read 9.94 + 9.95 +****************************************************************************/ 9.96 + 9.97 +typedef long inchr; /* "char" read from stdin */ 9.98 + 9.99 +inchr *inchrline; /* Alloc'd inchr inchrline[inchrlinelenlimit+1]; */ 9.100 + /* Note: not null-terminated. */ 9.101 +int inchrlinelen,inchrlinelenlimit; 9.102 +inchr deutsch[7] = {196, 214, 220, 228, 246, 252, 223}; 9.103 + /* Latin-1 codes for German letters, respectively: 9.104 + LATIN CAPITAL LETTER A WITH DIAERESIS = A-umlaut 9.105 + LATIN CAPITAL LETTER O WITH DIAERESIS = O-umlaut 9.106 + LATIN CAPITAL LETTER U WITH DIAERESIS = U-umlaut 9.107 + LATIN SMALL LETTER A WITH DIAERESIS = a-umlaut 9.108 + LATIN SMALL LETTER O WITH DIAERESIS = o-umlaut 9.109 + LATIN SMALL LETTER U WITH DIAERESIS = u-umlaut 9.110 + LATIN SMALL LETTER SHARP S = ess-zed 9.111 + */ 9.112 + 9.113 +int hzmode; /* true if reading double-bytes in HZ mode */ 9.114 +int gndbl[4]; /* gndbl[n] is true if Gn is double-byte */ 9.115 +inchr gn[4]; /* Gn character sets: ASCII, Latin-1, none, none */ 9.116 +int gl; /* 0-3 specifies left-half Gn character set */ 9.117 +int gr; /* 0-3 specifies right-half Gn character set */ 9.118 + 9.119 +int Myargc; /* to avoid passing around argc and argv */ 9.120 +char **Myargv; 9.121 + 9.122 +/**************************************************************************** 9.123 + 9.124 + Globals dealing with chars that are written 9.125 + 9.126 +****************************************************************************/ 9.127 + 9.128 +typedef struct fc { 9.129 + inchr ord; 9.130 + char **thechar; /* Alloc'd char thechar[charheight][]; */ 9.131 + struct fc *next; 9.132 + } fcharnode; 9.133 + 9.134 +fcharnode *fcharlist; 9.135 +char **currchar; 9.136 +int currcharwidth; 9.137 +int previouscharwidth; 9.138 +char **outputline; /* Alloc'd char outputline[charheight][outlinelenlimit+1]; */ 9.139 +int outlinelen; 9.140 + 9.141 + 9.142 +/**************************************************************************** 9.143 + 9.144 + Globals dealing with command file storage 9.145 + 9.146 +****************************************************************************/ 9.147 + 9.148 +typedef struct cfn { 9.149 + char *thename; 9.150 + struct cfn *next; 9.151 + } cfnamenode; 9.152 + 9.153 +cfnamenode *cfilelist,**cfilelistend; 9.154 + 9.155 +typedef struct cm { 9.156 + int thecommand; 9.157 + inchr rangelo; 9.158 + inchr rangehi; 9.159 + inchr offset; 9.160 + struct cm *next; 9.161 + } comnode; 9.162 + 9.163 +comnode *commandlist,**commandlistend; 9.164 + 9.165 +/**************************************************************************** 9.166 + 9.167 + Globals affected by command line options 9.168 + 9.169 +****************************************************************************/ 9.170 + 9.171 +int deutschflag,justification,paragraphflag,right2left,multibyte; 9.172 +int cmdinput; 9.173 + 9.174 +#define SM_SMUSH 128 9.175 +#define SM_KERN 64 9.176 +#define SM_EQUAL 1 9.177 +#define SM_LOWLINE 2 9.178 +#define SM_HIERARCHY 4 9.179 +#define SM_PAIR 8 9.180 +#define SM_BIGX 16 9.181 +#define SM_HARDBLANK 32 9.182 + 9.183 +int smushmode; 9.184 + 9.185 +#define SMO_NO 0 /* no command-line smushmode */ 9.186 +#define SMO_YES 1 /* use command-line smushmode, ignore font smushmode */ 9.187 +#define SMO_FORCE 2 /* logically OR command-line and font smushmodes */ 9.188 + 9.189 +int smushoverride; 9.190 + 9.191 +int outputwidth; 9.192 +int outlinelenlimit; 9.193 +char *fontdirname,*fontname; 9.194 + 9.195 + 9.196 +/**************************************************************************** 9.197 + 9.198 + Globals read from font file 9.199 + 9.200 +****************************************************************************/ 9.201 + 9.202 +char hardblank; 9.203 +int charheight; 9.204 + 9.205 + 9.206 +/**************************************************************************** 9.207 + 9.208 + Name of program, used in error messages 9.209 + 9.210 +****************************************************************************/ 9.211 + 9.212 +char *myname; 9.213 + 9.214 + 9.215 +#ifdef TIOCGWINSZ 9.216 +/**************************************************************************** 9.217 + 9.218 + get_columns 9.219 + 9.220 + Determines the number of columns of /dev/tty. Returns the number of 9.221 + columns, or -1 if error. May return 0 if columns unknown. 9.222 + Requires include files <fcntl.h> and <sys/ioctl.h>. 9.223 + by Glenn Chappell & Ian Chai 14 Apr 1993 9.224 + 9.225 +****************************************************************************/ 9.226 + 9.227 +int get_columns() 9.228 +{ 9.229 + struct winsize ws; 9.230 + int fd,result; 9.231 + 9.232 + if ((fd = open("/dev/tty",O_WRONLY))<0) return -1; 9.233 + result = ioctl(fd,TIOCGWINSZ,&ws); 9.234 + close(fd); 9.235 + return result?-1:ws.ws_col; 9.236 +} 9.237 +#endif /* ifdef TIOCGWINSZ */ 9.238 + 9.239 + 9.240 +/**************************************************************************** 9.241 + 9.242 + myalloc 9.243 + 9.244 + Calls malloc. If malloc returns error, prints error message and 9.245 + quits. 9.246 + 9.247 +****************************************************************************/ 9.248 + 9.249 +#ifdef __STDC__ 9.250 +char *myalloc(size_t size) 9.251 +#else 9.252 +char *myalloc(size) 9.253 +int size; 9.254 +#endif 9.255 +{ 9.256 + char *ptr; 9.257 +#ifndef __STDC__ 9.258 + extern void *malloc(); 9.259 +#endif 9.260 + 9.261 + if ((ptr = (char*)malloc(size))==NULL) { 9.262 + fprintf(stderr,"%s: Out of memory\n",myname); 9.263 + exit(1); 9.264 + } 9.265 + else { 9.266 + return ptr; 9.267 + } 9.268 +} 9.269 + 9.270 + 9.271 +/**************************************************************************** 9.272 + 9.273 + hasdirsep 9.274 + 9.275 + Returns true if s1 contains a DIRSEP or DIRSEP2 character. 9.276 + 9.277 +****************************************************************************/ 9.278 + 9.279 +int hasdirsep(s1) 9.280 +char *s1; 9.281 +{ 9.282 + if (strchr(s1, DIRSEP)) return 1; 9.283 + else if (strchr(s1, DIRSEP2)) return 1; 9.284 + else return 0; 9.285 +} 9.286 + 9.287 +/**************************************************************************** 9.288 + 9.289 + suffixcmp 9.290 + 9.291 + Returns true if s2 is a suffix of s1; uses case-blind comparison. 9.292 + 9.293 +****************************************************************************/ 9.294 + 9.295 +int suffixcmp(s1, s2) 9.296 +char *s1; 9.297 +char *s2; 9.298 +{ 9.299 + int len1, len2; 9.300 + 9.301 + len1 = MYSTRLEN(s1); 9.302 + len2 = MYSTRLEN(s2); 9.303 + if (len2 > len1) return 0; 9.304 + s1 += len1 - len2; 9.305 + while (*s1) { 9.306 + if (tolower(*s1) != tolower(*s2)) return 0; 9.307 + s1++; 9.308 + s2++; 9.309 + } 9.310 + return 1; 9.311 +} 9.312 + 9.313 +/**************************************************************************** 9.314 + 9.315 + skiptoeol 9.316 + 9.317 + Skips to the end of a line, given a stream. Handles \r, \n, or \r\n. 9.318 + 9.319 +****************************************************************************/ 9.320 + 9.321 +void skiptoeol(fp) 9.322 +ZFILE *fp; 9.323 +{ 9.324 + int dummy; 9.325 + 9.326 + while (dummy=Zgetc(fp),dummy!=EOF) { 9.327 + if (dummy == '\n') return; 9.328 + if (dummy == '\r') { 9.329 + dummy = Zgetc(fp); 9.330 + if (dummy != EOF && dummy != '\n') Zungetc(dummy,fp); 9.331 + return; 9.332 + } 9.333 + } 9.334 +} 9.335 + 9.336 + 9.337 +/**************************************************************************** 9.338 + 9.339 + myfgets 9.340 + 9.341 + Local version of fgets. Handles \r, \n, and \r\n terminators. 9.342 + 9.343 +****************************************************************************/ 9.344 + 9.345 +char *myfgets(line,maxlen,fp) 9.346 +char *line; 9.347 +int maxlen; 9.348 +ZFILE *fp; 9.349 +{ 9.350 + int c = 0; 9.351 + char *p; 9.352 + 9.353 + p = line; 9.354 + while((c=Zgetc(fp))!=EOF&&maxlen) { 9.355 + *p++ = c; 9.356 + maxlen--; 9.357 + if (c=='\n') break; 9.358 + if (c=='\r') { 9.359 + c = Zgetc(fp); 9.360 + if (c != EOF && c != '\n') Zungetc(c,fp); 9.361 + *(p-1) = '\n'; 9.362 + break; 9.363 + } 9.364 + } 9.365 + *p = 0; 9.366 + return (c==EOF) ? NULL : line; 9.367 +} 9.368 + 9.369 +/**************************************************************************** 9.370 + 9.371 + usageerr 9.372 + 9.373 + Prints "Usage: ...." line to the given stream. 9.374 + 9.375 +****************************************************************************/ 9.376 + 9.377 +void printusage(out) 9.378 +FILE *out; 9.379 +{ 9.380 + fprintf(out, 9.381 + "Usage: %s [ -cklnoprstvxDELNRSWX ] [ -d fontdirectory ]\n", 9.382 + myname); 9.383 + fprintf(out, 9.384 + " [ -f fontfile ] [ -m smushmode ] [ -w outputwidth ]\n"); 9.385 + fprintf(out, 9.386 + " [ -C controlfile ] [ -I infocode ] [ message ]\n"); 9.387 +} 9.388 + 9.389 + 9.390 +/**************************************************************************** 9.391 + 9.392 + printinfo 9.393 + 9.394 + Prints version and copyright message, or utility information. 9.395 + 9.396 +****************************************************************************/ 9.397 + 9.398 +void printinfo(infonum) 9.399 +int infonum; 9.400 +{ 9.401 + switch (infonum) { 9.402 + case 0: /* Copyright message */ 9.403 + printf("FIGlet Copyright 1991-2002 Glenn Chappell, Ian Chai, "); 9.404 + printf("John Cowan, Christiaan Keet\n"); 9.405 + printf("Internet: <info@figlet.org> "); 9.406 + printf("Version: %s, date: %s\n\n",VERSION,DATE); 9.407 + printf("FIGlet, along with the various FIGlet fonts"); 9.408 + printf(" and documentation, may be\n"); 9.409 + printf("freely copied and distributed.\n\n"); 9.410 + printf("If you use FIGlet, please send an"); 9.411 + printf(" e-mail message to <info@figlet.org>.\n\n"); 9.412 + printf("The latest version of FIGlet is available from the"); 9.413 + printf(" web site,\n\thttp://www.figlet.org/\n\n"); 9.414 + printusage(stdout); 9.415 + break; 9.416 + case 1: /* Version (integer) */ 9.417 + printf("%d\n",VERSION_INT); 9.418 + break; 9.419 + case 2: /* Font directory */ 9.420 + printf("%s\n",fontdirname); 9.421 + break; 9.422 + case 3: /* Font */ 9.423 + printf("%s\n",fontname); 9.424 + break; 9.425 + case 4: /* Outputwidth */ 9.426 + printf("%d\n",outputwidth); 9.427 + } 9.428 +} 9.429 + 9.430 + 9.431 +/**************************************************************************** 9.432 + 9.433 + readmagic 9.434 + 9.435 + Reads a four-character magic string from a stream. 9.436 + 9.437 +****************************************************************************/ 9.438 +void readmagic(fp,magic) 9.439 +ZFILE *fp; 9.440 +char *magic; 9.441 +{ 9.442 + int i; 9.443 + 9.444 + for (i=0;i<4;i++) { 9.445 + magic[i] = Zgetc(fp); 9.446 + } 9.447 + magic[4] = 0; 9.448 + } 9.449 + 9.450 +/**************************************************************************** 9.451 + 9.452 + skipws 9.453 + 9.454 + Skips whitespace characters from a stream. 9.455 + 9.456 +****************************************************************************/ 9.457 +void skipws(fp) 9.458 +ZFILE *fp; 9.459 +{ 9.460 + int c; 9.461 + while (c=Zgetc(fp),isascii(c)&&isspace(c)) ; 9.462 + Zungetc(c,fp); 9.463 + } 9.464 + 9.465 +/**************************************************************************** 9.466 + 9.467 + readnum 9.468 + 9.469 + Reads a number from a stream. Accepts "0" prefix for octal and 9.470 + "0x" or "0X" for hexadecimal. Ignores leading whitespace. 9.471 + 9.472 +****************************************************************************/ 9.473 +void readnum(fp,nump) 9.474 +ZFILE *fp; 9.475 +inchr *nump; 9.476 +{ 9.477 + int acc = 0; 9.478 + char *p; 9.479 + int c; 9.480 + int base; 9.481 + int sign = 1; 9.482 + char digits[] = "0123456789ABCDEF"; 9.483 + 9.484 + skipws(fp); 9.485 + c = Zgetc(fp); 9.486 + if (c=='-') { 9.487 + sign = -1; 9.488 + } 9.489 + else { 9.490 + Zungetc(c,fp); 9.491 + } 9.492 + c = Zgetc(fp); 9.493 + if (c=='0') { 9.494 + c = Zgetc(fp); 9.495 + if (c=='x'||c=='X') { 9.496 + base = 16; 9.497 + } 9.498 + else { 9.499 + base = 8; 9.500 + Zungetc(c,fp); 9.501 + } 9.502 + } 9.503 + else { 9.504 + base = 10; 9.505 + Zungetc(c,fp); 9.506 + } 9.507 + 9.508 + while((c=Zgetc(fp))!=EOF) { 9.509 + c=toupper(c); 9.510 + p=strchr(digits,c); 9.511 + if (!p) { 9.512 + Zungetc(c,fp); 9.513 + *nump = acc * sign; 9.514 + return; 9.515 + } 9.516 + acc = acc*base+(p-digits); 9.517 + } 9.518 + *nump = acc * sign; 9.519 + } 9.520 + 9.521 +/**************************************************************************** 9.522 + 9.523 + readTchar 9.524 + 9.525 + Reads a control file "T" command character specification. 9.526 + 9.527 + Character is a single byte, an escape sequence, or 9.528 + an escaped numeric. 9.529 + 9.530 +****************************************************************************/ 9.531 + 9.532 +inchr readTchar(fp) 9.533 +ZFILE *fp; 9.534 +{ 9.535 + inchr thechar; 9.536 + char next; 9.537 + 9.538 + thechar=Zgetc(fp); 9.539 + if (thechar=='\n' || thechar=='\r') { /* Handle badly-formatted file */ 9.540 + Zungetc(thechar,fp); 9.541 + return '\0'; 9.542 + } 9.543 + if (thechar!='\\') return thechar; 9.544 + next=Zgetc(fp); 9.545 + switch(next) { 9.546 + case 'a': 9.547 + return 7; 9.548 + case 'b': 9.549 + return 8; 9.550 + case 'e': 9.551 + return 27; 9.552 + case 'f': 9.553 + return 12; 9.554 + case 'n': 9.555 + return 10; 9.556 + case 'r': 9.557 + return 13; 9.558 + case 't': 9.559 + return 9; 9.560 + case 'v': 9.561 + return 11; 9.562 + default: 9.563 + if (next=='-' || next=='x' || (next>='0' && next<='9')) { 9.564 + Zungetc(next,fp); 9.565 + readnum(fp,&thechar); 9.566 + return thechar; 9.567 + } 9.568 + return next; 9.569 + } 9.570 +} 9.571 + 9.572 +/**************************************************************************** 9.573 + 9.574 + charsetname 9.575 + 9.576 + Get a Tchar representing a charset name, or 0 if none available. 9.577 + Called in getcharset(). 9.578 + 9.579 +****************************************************************************/ 9.580 + 9.581 +inchr charsetname(fp) 9.582 +ZFILE *fp; 9.583 +{ 9.584 + inchr result; 9.585 + 9.586 + result = readTchar(fp); 9.587 + if (result == '\n' || result == '\r') { 9.588 + result = 0; 9.589 + Zungetc(result,fp); 9.590 + } 9.591 + return result; 9.592 + } 9.593 + 9.594 +/**************************************************************************** 9.595 + 9.596 + charset 9.597 + 9.598 + Processes "g[0123]" character set specifier 9.599 + Called in readcontrol(). 9.600 + 9.601 +****************************************************************************/ 9.602 + 9.603 +void charset(n, controlfile) 9.604 +int n; 9.605 +ZFILE *controlfile; 9.606 +{ 9.607 + int ch; 9.608 + 9.609 + skipws(controlfile); 9.610 + if (Zgetc(controlfile) != '9') { 9.611 + skiptoeol(controlfile); 9.612 + return; 9.613 + } 9.614 + ch = Zgetc(controlfile); 9.615 + if (ch == '6') { 9.616 + gn[n] = 65536L * charsetname(controlfile) + 0x80; 9.617 + gndbl[n] = 0; 9.618 + skiptoeol(controlfile); 9.619 + return; 9.620 + } 9.621 + if (ch != '4') { 9.622 + skiptoeol(controlfile); 9.623 + return; 9.624 + } 9.625 + ch = Zgetc(controlfile); 9.626 + if (ch == 'x') { 9.627 + if (Zgetc(controlfile) != '9') { 9.628 + skiptoeol(controlfile); 9.629 + return; 9.630 + } 9.631 + if (Zgetc(controlfile) != '4') { 9.632 + skiptoeol(controlfile); 9.633 + return; 9.634 + } 9.635 + skipws(controlfile); 9.636 + gn[n] = 65536L * charsetname(controlfile); 9.637 + gndbl[n] = 1; 9.638 + skiptoeol(controlfile); 9.639 + return; 9.640 + } 9.641 + Zungetc(ch, controlfile); 9.642 + skipws(controlfile); 9.643 + gn[n] = 65536L * charsetname(controlfile); 9.644 + gndbl[n] = 0; 9.645 + return; 9.646 + } 9.647 + 9.648 +/**************************************************************************** 9.649 + 9.650 + readcontrol 9.651 + 9.652 + Allocates memory and reads in the given control file. 9.653 + Called in readcontrolfiles(). 9.654 + 9.655 +****************************************************************************/ 9.656 + 9.657 +void readcontrol(controlname) 9.658 +char *controlname; 9.659 +{ 9.660 + inchr firstch,lastch; 9.661 + char dashcheck; 9.662 + inchr offset; 9.663 + char *controlpath,magicnum[5]; 9.664 + int command; 9.665 + ZFILE *controlfile; 9.666 + int namelen; 9.667 + 9.668 + namelen = MYSTRLEN(fontdirname); 9.669 + controlpath = (char*)myalloc(sizeof(char) 9.670 + *(namelen+MYSTRLEN(controlname)+CSUFFIXLEN+2)); 9.671 + controlfile = NULL; 9.672 + if (!hasdirsep(controlname)) { 9.673 + strcpy(controlpath,fontdirname); 9.674 + controlpath[namelen] = DIRSEP; 9.675 + controlpath[namelen+1] = '\0'; 9.676 + strcat(controlpath,controlname); 9.677 + strcat(controlpath,CONTROLFILESUFFIX); 9.678 + controlfile = Zopen(controlpath,"rb"); 9.679 + } 9.680 + if (controlfile==NULL) { 9.681 + strcpy(controlpath,controlname); 9.682 + strcat(controlpath,CONTROLFILESUFFIX); 9.683 + controlfile = Zopen(controlpath,"rb"); 9.684 + if (controlfile==NULL) { 9.685 + fprintf(stderr,"%s: %s: Unable to open control file\n",myname, 9.686 + controlpath); 9.687 + exit(1); 9.688 + } 9.689 + } 9.690 + 9.691 + free(controlpath); 9.692 + 9.693 + (*commandlistend) = (comnode*)myalloc(sizeof(comnode)); 9.694 + (*commandlistend)->thecommand = 0; /* Begin with a freeze command */ 9.695 + commandlistend = &(*commandlistend)->next; 9.696 + (*commandlistend) = NULL; 9.697 + 9.698 + while(command=Zgetc(controlfile),command!=EOF) { 9.699 + switch (command) { 9.700 + case 't': /* Translate */ 9.701 + skipws(controlfile); 9.702 + firstch=readTchar(controlfile); 9.703 + if ((dashcheck=Zgetc(controlfile))=='-') { 9.704 + lastch=readTchar(controlfile); 9.705 + } 9.706 + else { 9.707 + Zungetc(dashcheck,controlfile); 9.708 + lastch=firstch; 9.709 + } 9.710 + skipws(controlfile); 9.711 + offset=readTchar(controlfile)-firstch; 9.712 + skiptoeol(controlfile); 9.713 + (*commandlistend) = (comnode*)myalloc(sizeof(comnode)); 9.714 + (*commandlistend)->thecommand = 1; 9.715 + (*commandlistend)->rangelo = firstch; 9.716 + (*commandlistend)->rangehi = lastch; 9.717 + (*commandlistend)->offset = offset; 9.718 + commandlistend = &(*commandlistend)->next; 9.719 + (*commandlistend) = NULL; 9.720 + break; 9.721 + case '0': case '1': case '2': case '3': case '4': 9.722 + case '5': case '6': case '7': case '8': case '9': 9.723 + case '-': 9.724 + /* Mapping table entry */ 9.725 + Zungetc(command,controlfile); 9.726 + readnum(controlfile,&firstch); 9.727 + skipws(controlfile); 9.728 + readnum(controlfile,&lastch); 9.729 + offset=lastch-firstch; 9.730 + lastch=firstch; 9.731 + skiptoeol(controlfile); 9.732 + (*commandlistend) = (comnode*)myalloc(sizeof(comnode)); 9.733 + (*commandlistend)->thecommand = 1; 9.734 + (*commandlistend)->rangelo = firstch; 9.735 + (*commandlistend)->rangehi = lastch; 9.736 + (*commandlistend)->offset = offset; 9.737 + commandlistend = &(*commandlistend)->next; 9.738 + (*commandlistend) = NULL; 9.739 + break; 9.740 + case 'f': /* freeze */ 9.741 + skiptoeol(controlfile); 9.742 + (*commandlistend) = (comnode*)myalloc(sizeof(comnode)); 9.743 + (*commandlistend)->thecommand = 0; 9.744 + commandlistend = &(*commandlistend)->next; 9.745 + (*commandlistend) = NULL; 9.746 + break; 9.747 + case 'b': /* DBCS input mode */ 9.748 + multibyte = 1; 9.749 + break; 9.750 + case 'u': /* UTF-8 input mode */ 9.751 + multibyte = 2; 9.752 + break; 9.753 + case 'h': /* HZ input mode */ 9.754 + multibyte = 3; 9.755 + break; 9.756 + case 'j': /* Shift-JIS input mode */ 9.757 + multibyte = 4; 9.758 + break; 9.759 + case 'g': /* ISO 2022 character set choices */ 9.760 + multibyte = 0; 9.761 + skipws(controlfile); 9.762 + command=Zgetc(controlfile); 9.763 + switch (command) { 9.764 + case '0': /* define G0 charset */ 9.765 + charset(0, controlfile); 9.766 + break; 9.767 + case '1': /* set G1 charset */ 9.768 + charset(1, controlfile); 9.769 + break; 9.770 + case '2': /* set G2 charset */ 9.771 + charset(2, controlfile); 9.772 + break; 9.773 + case '3': /* set G3 charset */ 9.774 + charset(3, controlfile); 9.775 + break; 9.776 + case 'l': case 'L': /* define left half */ 9.777 + skipws(controlfile); 9.778 + gl = Zgetc(controlfile) - '0'; 9.779 + skiptoeol(controlfile); 9.780 + break; 9.781 + case 'r': case 'R': /* define right half */ 9.782 + skipws(controlfile); 9.783 + gr = Zgetc(controlfile) - '0'; 9.784 + skiptoeol(controlfile); 9.785 + break; 9.786 + default: /* meaningless "g" command */ 9.787 + skiptoeol(controlfile); 9.788 + } 9.789 + case '\r': case '\n': /* blank line */ 9.790 + break; 9.791 + default: /* Includes '#' */ 9.792 + skiptoeol(controlfile); 9.793 + } 9.794 + } 9.795 + Zclose(controlfile); 9.796 +} 9.797 + 9.798 + 9.799 +/**************************************************************************** 9.800 + 9.801 + readcontrolfiles 9.802 + 9.803 + Reads in the controlfiles names in cfilelist. Uses readcontrol. 9.804 + Called in main(). 9.805 + 9.806 +****************************************************************************/ 9.807 + 9.808 +void readcontrolfiles() 9.809 +{ 9.810 + cfnamenode *cfnptr; 9.811 + 9.812 + for (cfnptr=cfilelist;cfnptr!=NULL;cfnptr=cfnptr->next) { 9.813 + readcontrol(cfnptr->thename); 9.814 + } 9.815 +} 9.816 + 9.817 + 9.818 +/**************************************************************************** 9.819 + 9.820 + clearcfilelist 9.821 + 9.822 + Clears the control file list. Assumes thename does not need freeing. 9.823 + 9.824 +****************************************************************************/ 9.825 + 9.826 +void clearcfilelist() 9.827 +{ 9.828 + cfnamenode *cfnptr1,*cfnptr2; 9.829 + 9.830 + cfnptr1 = cfilelist; 9.831 + while (cfnptr1 != NULL) { 9.832 + cfnptr2 = cfnptr1->next; 9.833 + free(cfnptr1); 9.834 + cfnptr1 = cfnptr2; 9.835 + } 9.836 + cfilelist = NULL; 9.837 + cfilelistend = &cfilelist; 9.838 +} 9.839 + 9.840 + 9.841 +/**************************************************************************** 9.842 + 9.843 + getparams 9.844 + 9.845 + Handles all command-line parameters. Puts all parameters within 9.846 + bounds. 9.847 + 9.848 +****************************************************************************/ 9.849 + 9.850 +void getparams() 9.851 +{ 9.852 + extern char *optarg; 9.853 + extern int optind; 9.854 + int c; /* "Should" be a char -- need int for "!= -1" test*/ 9.855 + int columns,firstfont,infoprint; 9.856 + char *controlname; 9.857 + 9.858 + if ((myname = strrchr(Myargv[0],DIRSEP))!=NULL) { 9.859 + myname++; 9.860 + } 9.861 + else { 9.862 + myname = Myargv[0]; 9.863 + } 9.864 + fontdirname = DEFAULTFONTDIR; 9.865 + firstfont = 1; 9.866 + fontname = (char*)myalloc(sizeof(char)*(MYSTRLEN(DEFAULTFONTFILE)+1)); 9.867 + strcpy(fontname,DEFAULTFONTFILE); /* Some systems don't have strdup() */ 9.868 + if (suffixcmp(fontname,FONTFILESUFFIX)) { 9.869 + fontname[MYSTRLEN(fontname)-FSUFFIXLEN]='\0'; 9.870 + } 9.871 + cfilelist = NULL; 9.872 + cfilelistend = &cfilelist; 9.873 + commandlist = NULL; 9.874 + commandlistend = &commandlist; 9.875 + smushoverride = SMO_NO; 9.876 + deutschflag = 0; 9.877 + justification = -1; 9.878 + right2left = -1; 9.879 + paragraphflag = 0; 9.880 + infoprint = -1; 9.881 + cmdinput = 0; 9.882 + outputwidth = DEFAULTCOLUMNS; 9.883 + gn[1] = 0x80; 9.884 + gr = 1; 9.885 + while ((c = getopt(Myargc,Myargv,"ADEXLRI:xlcrpntvm:w:d:f:C:NFskSWo"))!= -1) { 9.886 + /* Note: -F is not a legal option -- prints a special err message. */ 9.887 + switch (c) { 9.888 + case 'A': 9.889 + cmdinput = 1; 9.890 + break; 9.891 + case 'D': 9.892 + deutschflag = 1; 9.893 + break; 9.894 + case 'E': 9.895 + deutschflag = 0; 9.896 + break; 9.897 + case 'X': 9.898 + right2left = -1; 9.899 + break; 9.900 + case 'L': 9.901 + right2left = 0; 9.902 + break; 9.903 + case 'R': 9.904 + right2left = 1; 9.905 + break; 9.906 + case 'x': 9.907 + justification = -1; 9.908 + break; 9.909 + case 'l': 9.910 + justification = 0; 9.911 + break; 9.912 + case 'c': 9.913 + justification = 1; 9.914 + break; 9.915 + case 'r': 9.916 + justification = 2; 9.917 + break; 9.918 + case 'p': 9.919 + paragraphflag = 1; 9.920 + break; 9.921 + case 'n': 9.922 + paragraphflag = 0; 9.923 + break; 9.924 + case 's': 9.925 + smushoverride = SMO_NO; 9.926 + break; 9.927 + case 'k': 9.928 + smushmode = SM_KERN; 9.929 + smushoverride = SMO_YES; 9.930 + break; 9.931 + case 'S': 9.932 + smushmode = SM_SMUSH; 9.933 + smushoverride = SMO_FORCE; 9.934 + break; 9.935 + case 'o': 9.936 + smushmode = SM_SMUSH; 9.937 + smushoverride = SMO_YES; 9.938 + break; 9.939 + case 'W': 9.940 + smushmode = 0; 9.941 + smushoverride = SMO_YES; 9.942 + break; 9.943 + case 't': 9.944 +#ifdef TIOCGWINSZ 9.945 + columns = get_columns(); 9.946 + if (columns>0) { 9.947 + outputwidth = columns; 9.948 + } 9.949 +#else /* ifdef TIOCGWINSZ */ 9.950 + fprintf(stderr, 9.951 + "%s: \"-t\" is disabled, since ioctl is not fully implemented.\n", 9.952 + myname); 9.953 +#endif /* ifdef TIOCGWINSZ */ 9.954 + break; 9.955 + case 'v': 9.956 + infoprint = 0; 9.957 + break; 9.958 + case 'I': 9.959 + infoprint = atoi(optarg); 9.960 + break; 9.961 + case 'm': 9.962 + smushmode = atoi(optarg); 9.963 + if (smushmode < -1) { 9.964 + smushoverride = SMO_NO; 9.965 + break; 9.966 + } 9.967 + if (smushmode == 0) smushmode = SM_KERN; 9.968 + else if (smushmode == -1) smushmode = 0; 9.969 + else smushmode = (smushmode & 63) | SM_SMUSH; 9.970 + smushoverride = SMO_YES; 9.971 + break; 9.972 + case 'w': 9.973 + columns = atoi(optarg); 9.974 + if (columns>0) { 9.975 + outputwidth = columns; 9.976 + } 9.977 + break; 9.978 + case 'd': 9.979 + fontdirname = optarg; 9.980 + break; 9.981 + case 'f': 9.982 + if (firstfont) { 9.983 + free(fontname); 9.984 + firstfont = 0; 9.985 + } 9.986 + fontname = optarg; 9.987 + if (suffixcmp(fontname,FONTFILESUFFIX)) { 9.988 + fontname[MYSTRLEN(fontname)-FSUFFIXLEN] = '\0'; 9.989 + } 9.990 + break; 9.991 + case 'C': 9.992 + controlname = optarg; 9.993 + if (suffixcmp(controlname, CONTROLFILESUFFIX)) { 9.994 + controlname[MYSTRLEN(controlname)-CSUFFIXLEN] = '\0'; 9.995 + } 9.996 + (*cfilelistend) = (cfnamenode*)myalloc(sizeof(cfnamenode)); 9.997 + (*cfilelistend)->thename = controlname; 9.998 + cfilelistend = &(*cfilelistend)->next; 9.999 + (*cfilelistend) = NULL; 9.1000 + break; 9.1001 + case 'N': 9.1002 + clearcfilelist(); 9.1003 + multibyte = 0; 9.1004 + gn[0] = 0; 9.1005 + gn[1] = 0x80; 9.1006 + gn[2] = gn[3] = 0; 9.1007 + gndbl[0] = gndbl[1] = gndbl[2] = gndbl[3] = 0; 9.1008 + gl = 0; 9.1009 + gr = 1; 9.1010 + break; 9.1011 + case 'F': /* Not a legal option */ 9.1012 + fprintf(stderr,"%s: illegal option -- F\n",myname); 9.1013 + printusage(stderr); 9.1014 + fprintf(stderr,"\nBecause of numerous incompatibilities, the"); 9.1015 + fprintf(stderr," \"-F\" option has been\n"); 9.1016 + fprintf(stderr,"removed. It has been replaced by the \"figlist\""); 9.1017 + fprintf(stderr," program, which is now\n"); 9.1018 + fprintf(stderr,"included in the basic FIGlet package. \"figlist\""); 9.1019 + fprintf(stderr," is also available\n"); 9.1020 + fprintf(stderr,"from http://www.figlet.org/"); 9.1021 + fprintf(stderr,"under UNIX utilities.\n"); 9.1022 + exit(1); 9.1023 + break; 9.1024 + default: 9.1025 + printusage(stderr); 9.1026 + exit(1); 9.1027 + } 9.1028 + } 9.1029 + if (optind!=Myargc) cmdinput = 1; /* force cmdinput if more arguments */ 9.1030 + outlinelenlimit = outputwidth-1; 9.1031 + if (infoprint>=0) { 9.1032 + printinfo(infoprint); 9.1033 + exit(0); 9.1034 + } 9.1035 +} 9.1036 + 9.1037 + 9.1038 +/**************************************************************************** 9.1039 + 9.1040 + clearline 9.1041 + 9.1042 + Clears both the input (inchrline) and output (outputline) storage. 9.1043 + 9.1044 +****************************************************************************/ 9.1045 + 9.1046 +void clearline() 9.1047 +{ 9.1048 + int i; 9.1049 + 9.1050 + for (i=0;i<charheight;i++) { 9.1051 + outputline[i][0] = '\0'; 9.1052 + } 9.1053 + outlinelen = 0; 9.1054 + inchrlinelen = 0; 9.1055 +} 9.1056 + 9.1057 + 9.1058 +/**************************************************************************** 9.1059 + 9.1060 + readfontchar 9.1061 + 9.1062 + Reads a font character from the font file, and places it in a 9.1063 + newly-allocated entry in the list. 9.1064 + 9.1065 +****************************************************************************/ 9.1066 + 9.1067 +void readfontchar(file,theord,line,maxlen) 9.1068 +ZFILE *file; 9.1069 +inchr theord; 9.1070 +char *line; 9.1071 +int maxlen; 9.1072 +{ 9.1073 + int row,k; 9.1074 + char endchar; 9.1075 + fcharnode *fclsave; 9.1076 + 9.1077 + fclsave = fcharlist; 9.1078 + fcharlist = (fcharnode*)myalloc(sizeof(fcharnode)); 9.1079 + fcharlist->ord = theord; 9.1080 + fcharlist->thechar = (char**)myalloc(sizeof(char*)*charheight); 9.1081 + fcharlist->next = fclsave; 9.1082 + for (row=0;row<charheight;row++) { 9.1083 + if (myfgets(line,maxlen+1,file)==NULL) { 9.1084 + line[0] = '\0'; 9.1085 + } 9.1086 + k = MYSTRLEN(line)-1; 9.1087 + while (k>=0 && isspace(line[k])) { 9.1088 + k--; 9.1089 + } 9.1090 + if (k>=0) { 9.1091 + endchar = line[k]; 9.1092 + while (k>=0 ? line[k]==endchar : 0) { 9.1093 + k--; 9.1094 + } 9.1095 + } 9.1096 + line[k+1] = '\0'; 9.1097 + fcharlist->thechar[row] = (char*)myalloc(sizeof(char)*(k+2)); 9.1098 + strcpy(fcharlist->thechar[row],line); 9.1099 + } 9.1100 +} 9.1101 + 9.1102 + 9.1103 +/**************************************************************************** 9.1104 + 9.1105 + readfont 9.1106 + 9.1107 + Allocates memory, initializes variables, and reads in the font. 9.1108 + Called near beginning of main(). 9.1109 + 9.1110 +****************************************************************************/ 9.1111 + 9.1112 +void readfont() 9.1113 +{ 9.1114 +#define MAXFIRSTLINELEN 1000 9.1115 + int i,row,numsread; 9.1116 + inchr theord; 9.1117 + int maxlen,cmtlines,ffright2left; 9.1118 + int smush,smush2; 9.1119 + char *fontpath,*fileline,magicnum[5]; 9.1120 + ZFILE *fontfile; 9.1121 + int namelen; 9.1122 + 9.1123 + namelen = MYSTRLEN(fontdirname); 9.1124 + fontpath = (char*)myalloc(sizeof(char) 9.1125 + *(namelen+MYSTRLEN(fontname)+FSUFFIXLEN+2)); 9.1126 + fontfile = NULL; 9.1127 + if (!hasdirsep(fontname)) { 9.1128 + strcpy(fontpath,fontdirname); 9.1129 + fontpath[namelen] = DIRSEP; 9.1130 + fontpath[namelen+1] = '\0'; 9.1131 + strcat(fontpath,fontname); 9.1132 + strcat(fontpath,FONTFILESUFFIX); 9.1133 + fontfile = Zopen(fontpath,"rb"); 9.1134 + } 9.1135 + if (fontfile==NULL) { 9.1136 + strcpy(fontpath,fontname); 9.1137 + strcat(fontpath,FONTFILESUFFIX); 9.1138 + fontfile = Zopen(fontpath,"rb"); 9.1139 + if (fontfile==NULL) { 9.1140 + fprintf(stderr,"%s: %s: Unable to open font file\n",myname,fontpath); 9.1141 + exit(1); 9.1142 + } 9.1143 + } 9.1144 + 9.1145 + readmagic(fontfile,magicnum); 9.1146 + fileline = (char*)myalloc(sizeof(char)*(MAXFIRSTLINELEN+1)); 9.1147 + if (myfgets(fileline,MAXFIRSTLINELEN+1,fontfile)==NULL) { 9.1148 + fileline[0] = '\0'; 9.1149 + } 9.1150 + if (MYSTRLEN(fileline)>0 ? fileline[MYSTRLEN(fileline)-1]!='\n' : 0) { 9.1151 + skiptoeol(fontfile); 9.1152 + } 9.1153 + numsread = sscanf(fileline,"%*c%c %d %*d %d %d %d %d %d", 9.1154 + &hardblank,&charheight,&maxlen,&smush,&cmtlines, 9.1155 + &ffright2left,&smush2); 9.1156 + free(fileline); 9.1157 + if (strcmp(magicnum,FONTFILEMAGICNUMBER) || numsread<5) { 9.1158 + fprintf(stderr,"%s: %s: Not a FIGlet 2 font file\n",myname,fontpath); 9.1159 + exit(1); 9.1160 + } 9.1161 + for (i=1;i<=cmtlines;i++) { 9.1162 + skiptoeol(fontfile); 9.1163 + } 9.1164 + free(fontpath); 9.1165 + 9.1166 + if (numsread<6) { 9.1167 + ffright2left = 0; 9.1168 + } 9.1169 + 9.1170 + if (numsread<7) { /* if no smush2, decode smush into smush2 */ 9.1171 + if (smush == 0) smush2 = SM_KERN; 9.1172 + else if (smush < 0) smush2 = 0; 9.1173 + else smush2 = (smush & 31) | SM_SMUSH; 9.1174 + } 9.1175 + 9.1176 + if (charheight<1) { 9.1177 + charheight = 1; 9.1178 + } 9.1179 + 9.1180 + if (maxlen<1) { 9.1181 + maxlen = 1; 9.1182 + } 9.1183 + 9.1184 + maxlen += 100; /* Give ourselves some extra room */ 9.1185 + 9.1186 + if (smushoverride == SMO_NO) 9.1187 + smushmode = smush2; 9.1188 + else if (smushoverride == SMO_FORCE) 9.1189 + smushmode |= smush2; 9.1190 + 9.1191 + if (right2left<0) { 9.1192 + right2left = ffright2left; 9.1193 + } 9.1194 + 9.1195 + if (justification<0) { 9.1196 + justification = 2*right2left; 9.1197 + } 9.1198 + 9.1199 + fileline = (char*)myalloc(sizeof(char)*(maxlen+1)); 9.1200 + /* Allocate "missing" character */ 9.1201 + fcharlist = (fcharnode*)myalloc(sizeof(fcharnode)); 9.1202 + fcharlist->ord = 0; 9.1203 + fcharlist->thechar = (char**)myalloc(sizeof(char*)*charheight); 9.1204 + fcharlist->next = NULL; 9.1205 + for (row=0;row<charheight;row++) { 9.1206 + fcharlist->thechar[row] = (char*)myalloc(sizeof(char)); 9.1207 + fcharlist->thechar[row][0] = '\0'; 9.1208 + } 9.1209 + for (theord=' ';theord<='~';theord++) { 9.1210 + readfontchar(fontfile,theord,fileline,maxlen); 9.1211 + } 9.1212 + for (theord=0;theord<=6;theord++) { 9.1213 + readfontchar(fontfile,deutsch[theord],fileline,maxlen); 9.1214 + } 9.1215 + while (myfgets(fileline,maxlen+1,fontfile)==NULL?0: 9.1216 + sscanf(fileline,"%li",&theord)==1) { 9.1217 + readfontchar(fontfile,theord,fileline,maxlen); 9.1218 + } 9.1219 + Zclose(fontfile); 9.1220 + free(fileline); 9.1221 +} 9.1222 + 9.1223 + 9.1224 +/**************************************************************************** 9.1225 + 9.1226 + linealloc 9.1227 + 9.1228 + Allocates & clears outputline, inchrline. Sets inchrlinelenlimit. 9.1229 + Called near beginning of main(). 9.1230 + 9.1231 +****************************************************************************/ 9.1232 + 9.1233 +void linealloc() 9.1234 +{ 9.1235 + int row; 9.1236 + 9.1237 + outputline = (char**)myalloc(sizeof(char*)*charheight); 9.1238 + for (row=0;row<charheight;row++) { 9.1239 + outputline[row] = (char*)myalloc(sizeof(char)*(outlinelenlimit+1)); 9.1240 + } 9.1241 + inchrlinelenlimit = outputwidth*4+100; 9.1242 + inchrline = (inchr*)myalloc(sizeof(inchr)*(inchrlinelenlimit+1)); 9.1243 + clearline(); 9.1244 +} 9.1245 + 9.1246 + 9.1247 +/**************************************************************************** 9.1248 + 9.1249 + getletter 9.1250 + 9.1251 + Sets currchar to point to the font entry for the given character. 9.1252 + Sets currcharwidth to the width of this character. 9.1253 + 9.1254 +****************************************************************************/ 9.1255 + 9.1256 +void getletter(c) 9.1257 +inchr c; 9.1258 +{ 9.1259 + fcharnode *charptr; 9.1260 + 9.1261 + for (charptr=fcharlist;charptr==NULL?0:charptr->ord!=c; 9.1262 + charptr=charptr->next) ; 9.1263 + if (charptr!=NULL) { 9.1264 + currchar = charptr->thechar; 9.1265 + } 9.1266 + else { 9.1267 + for (charptr=fcharlist;charptr==NULL?0:charptr->ord!=0; 9.1268 + charptr=charptr->next) ; 9.1269 + currchar = charptr->thechar; 9.1270 + } 9.1271 + previouscharwidth = currcharwidth; 9.1272 + currcharwidth = MYSTRLEN(currchar[0]); 9.1273 +} 9.1274 + 9.1275 + 9.1276 +/**************************************************************************** 9.1277 + 9.1278 + smushem 9.1279 + 9.1280 + Given 2 characters, attempts to smush them into 1, according to 9.1281 + smushmode. Returns smushed character or '\0' if no smushing can be 9.1282 + done. 9.1283 + 9.1284 + smushmode values are sum of following (all values smush blanks): 9.1285 + 1: Smush equal chars (not hardblanks) 9.1286 + 2: Smush '_' with any char in hierarchy below 9.1287 + 4: hierarchy: "|", "/\", "[]", "{}", "()", "<>" 9.1288 + Each class in hier. can be replaced by later class. 9.1289 + 8: [ + ] -> |, { + } -> |, ( + ) -> | 9.1290 + 16: / + \ -> X, > + < -> X (only in that order) 9.1291 + 32: hardblank + hardblank -> hardblank 9.1292 + 9.1293 +****************************************************************************/ 9.1294 + 9.1295 +char smushem(lch,rch) 9.1296 +char lch,rch; 9.1297 +{ 9.1298 + if (lch==' ') return rch; 9.1299 + if (rch==' ') return lch; 9.1300 + 9.1301 + if (previouscharwidth<2 || currcharwidth<2) return '\0'; 9.1302 + /* Disallows overlapping if the previous character */ 9.1303 + /* or the current character has a width of 1 or zero. */ 9.1304 + 9.1305 + if ((smushmode & SM_SMUSH) == 0) return '\0'; /* kerning */ 9.1306 + 9.1307 + if ((smushmode & 63) == 0) { 9.1308 + /* This is smushing by universal overlapping. */ 9.1309 + if (lch==' ') return rch; 9.1310 + if (rch==' ') return lch; 9.1311 + if (lch==hardblank) return rch; 9.1312 + if (rch==hardblank) return lch; 9.1313 + /* Above four lines ensure overlapping preference to */ 9.1314 + /* visible characters. */ 9.1315 + if (right2left==1) return lch; 9.1316 + /* Above line ensures that the dominant (foreground) */ 9.1317 + /* fig-character for overlapping is the latter in the */ 9.1318 + /* user's text, not necessarily the rightmost character. */ 9.1319 + return rch; 9.1320 + /* Occurs in the absence of above exceptions. */ 9.1321 + } 9.1322 + 9.1323 + if (smushmode & SM_HARDBLANK) { 9.1324 + if (lch==hardblank && rch==hardblank) return lch; 9.1325 + } 9.1326 + 9.1327 + if (lch==hardblank || rch==hardblank) return '\0'; 9.1328 + 9.1329 + if (smushmode & SM_EQUAL) { 9.1330 + if (lch==rch) return lch; 9.1331 + } 9.1332 + 9.1333 + if (smushmode & SM_LOWLINE) { 9.1334 + if (lch=='_' && strchr("|/\\[]{}()<>",rch)) return rch; 9.1335 + if (rch=='_' && strchr("|/\\[]{}()<>",lch)) return lch; 9.1336 + } 9.1337 + 9.1338 + if (smushmode & SM_HIERARCHY) { 9.1339 + if (lch=='|' && strchr("/\\[]{}()<>",rch)) return rch; 9.1340 + if (rch=='|' && strchr("/\\[]{}()<>",lch)) return lch; 9.1341 + if (strchr("/\\",lch) && strchr("[]{}()<>",rch)) return rch; 9.1342 + if (strchr("/\\",rch) && strchr("[]{}()<>",lch)) return lch; 9.1343 + if (strchr("[]",lch) && strchr("{}()<>",rch)) return rch; 9.1344 + if (strchr("[]",rch) && strchr("{}()<>",lch)) return lch; 9.1345 + if (strchr("{}",lch) && strchr("()<>",rch)) return rch; 9.1346 + if (strchr("{}",rch) && strchr("()<>",lch)) return lch; 9.1347 + if (strchr("()",lch) && strchr("<>",rch)) return rch; 9.1348 + if (strchr("()",rch) && strchr("<>",lch)) return lch; 9.1349 + } 9.1350 + 9.1351 + if (smushmode & SM_PAIR) { 9.1352 + if (lch=='[' && rch==']') return '|'; 9.1353 + if (rch=='[' && lch==']') return '|'; 9.1354 + if (lch=='{' && rch=='}') return '|'; 9.1355 + if (rch=='{' && lch=='}') return '|'; 9.1356 + if (lch=='(' && rch==')') return '|'; 9.1357 + if (rch=='(' && lch==')') return '|'; 9.1358 + } 9.1359 + 9.1360 + if (smushmode & SM_BIGX) { 9.1361 + if (lch=='/' && rch=='\\') return '|'; 9.1362 + if (rch=='/' && lch=='\\') return 'Y'; 9.1363 + if (lch=='>' && rch=='<') return 'X'; 9.1364 + /* Don't want the reverse of above to give 'X'. */ 9.1365 + } 9.1366 + 9.1367 + return '\0'; 9.1368 +} 9.1369 + 9.1370 + 9.1371 +/**************************************************************************** 9.1372 + 9.1373 + smushamt 9.1374 + 9.1375 + Returns the maximum amount that the current character can be smushed 9.1376 + into the current line. 9.1377 + 9.1378 +****************************************************************************/ 9.1379 + 9.1380 +int smushamt() 9.1381 +{ 9.1382 + int maxsmush,amt; 9.1383 + int row,linebd,charbd; 9.1384 + char ch1,ch2; 9.1385 + 9.1386 + if ((smushmode & (SM_SMUSH | SM_KERN)) == 0) { 9.1387 + return 0; 9.1388 + } 9.1389 + maxsmush = currcharwidth; 9.1390 + for (row=0;row<charheight;row++) { 9.1391 + if (right2left) { 9.1392 + for (charbd=MYSTRLEN(currchar[row]); 9.1393 + ch1=currchar[row][charbd],(charbd>0&&(!ch1||ch1==' '));charbd--) ; 9.1394 + for (linebd=0;ch2=outputline[row][linebd],ch2==' ';linebd++) ; 9.1395 + amt = linebd+currcharwidth-1-charbd; 9.1396 + } 9.1397 + else { 9.1398 + for (linebd=MYSTRLEN(outputline[row]); 9.1399 + ch1 = outputline[row][linebd],(linebd>0&&(!ch1||ch1==' '));linebd--) ; 9.1400 + for (charbd=0;ch2=currchar[row][charbd],ch2==' ';charbd++) ; 9.1401 + amt = charbd+outlinelen-1-linebd; 9.1402 + } 9.1403 + if (!ch1||ch1==' ') { 9.1404 + amt++; 9.1405 + } 9.1406 + else if (ch2) { 9.1407 + if (smushem(ch1,ch2)!='\0') { 9.1408 + amt++; 9.1409 + } 9.1410 + } 9.1411 + if (amt<maxsmush) { 9.1412 + maxsmush = amt; 9.1413 + } 9.1414 + } 9.1415 + return maxsmush; 9.1416 +} 9.1417 + 9.1418 + 9.1419 +/**************************************************************************** 9.1420 + 9.1421 + addchar 9.1422 + 9.1423 + Attempts to add the given character onto the end of the current line. 9.1424 + Returns 1 if this can be done, 0 otherwise. 9.1425 + 9.1426 +****************************************************************************/ 9.1427 + 9.1428 +int addchar(c) 9.1429 +inchr c; 9.1430 +{ 9.1431 + int smushamount,row,k; 9.1432 + char *templine; 9.1433 + 9.1434 + getletter(c); 9.1435 + smushamount = smushamt(); 9.1436 + if (outlinelen+currcharwidth-smushamount>outlinelenlimit 9.1437 + ||inchrlinelen+1>inchrlinelenlimit) { 9.1438 + return 0; 9.1439 + } 9.1440 + 9.1441 + templine = (char*)myalloc(sizeof(char)*(outlinelenlimit+1)); 9.1442 + for (row=0;row<charheight;row++) { 9.1443 + if (right2left) { 9.1444 + strcpy(templine,currchar[row]); 9.1445 + for (k=0;k<smushamount;k++) { 9.1446 + templine[currcharwidth-smushamount+k] = 9.1447 + smushem(templine[currcharwidth-smushamount+k],outputline[row][k]); 9.1448 + } 9.1449 + strcat(templine,outputline[row]+smushamount); 9.1450 + strcpy(outputline[row],templine); 9.1451 + } 9.1452 + else { 9.1453 + for (k=0;k<smushamount;k++) { 9.1454 + outputline[row][outlinelen-smushamount+k] = 9.1455 + smushem(outputline[row][outlinelen-smushamount+k],currchar[row][k]); 9.1456 + } 9.1457 + strcat(outputline[row],currchar[row]+smushamount); 9.1458 + } 9.1459 + } 9.1460 + free(templine); 9.1461 + outlinelen = MYSTRLEN(outputline[0]); 9.1462 + inchrline[inchrlinelen++] = c; 9.1463 + return 1; 9.1464 +} 9.1465 + 9.1466 + 9.1467 +/**************************************************************************** 9.1468 + 9.1469 + putstring 9.1470 + 9.1471 + Prints out the given null-terminated string, substituting blanks 9.1472 + for hardblanks. If outputwidth is 1, prints the entire string; 9.1473 + otherwise prints at most outputwidth-1 characters. Prints a newline 9.1474 + at the end of the string. The string is left-justified, centered or 9.1475 + right-justified (taking outputwidth as the screen width) if 9.1476 + justification is 0, 1 or 2, respectively. 9.1477 + 9.1478 +****************************************************************************/ 9.1479 + 9.1480 +static int nr_chars=0; 9.1481 +static void myputchar(unsigned char c) 9.1482 +{ 9.1483 + static int startline = 1; 9.1484 + 9.1485 + if ( startline ) 9.1486 + { 9.1487 + startline = 0; 9.1488 + myputchar(' '); 9.1489 + } 9.1490 + 9.1491 + putc(c, stderr); 9.1492 + 9.1493 + if ( nr_chars == 0 ) 9.1494 + putchar('"'); 9.1495 + 9.1496 + putchar('\\'); 9.1497 + putchar('0' + ((c>>6)&7)); 9.1498 + putchar('0' + ((c>>3)&7)); 9.1499 + putchar('0' + ((c>>0)&7)); 9.1500 + 9.1501 + if ( c == '\n' ) 9.1502 + startline = 1; 9.1503 + 9.1504 + if ( ++nr_chars == 18 ) 9.1505 + { 9.1506 + nr_chars = 0; 9.1507 + putchar('"'); 9.1508 + putchar(' '); 9.1509 + putchar('\\'); 9.1510 + putchar('\n'); 9.1511 + } 9.1512 +} 9.1513 + 9.1514 +void putstring(string) 9.1515 +char *string; 9.1516 +{ 9.1517 + int i,len; 9.1518 + 9.1519 + len = MYSTRLEN(string); 9.1520 + if (outputwidth>1) { 9.1521 + if (len>outputwidth-1) { 9.1522 + len = outputwidth-1; 9.1523 + } 9.1524 + if (justification>0) { 9.1525 + for (i=1;(3-justification)*i+len+justification-2<outputwidth;i++) { 9.1526 + myputchar(' '); 9.1527 + } 9.1528 + } 9.1529 + } 9.1530 + for (i=0;i<len;i++) { 9.1531 + myputchar(string[i]==hardblank?' ':string[i]); 9.1532 + } 9.1533 + myputchar('\n'); 9.1534 +} 9.1535 + 9.1536 + 9.1537 +/**************************************************************************** 9.1538 + 9.1539 + printline 9.1540 + 9.1541 + Prints outputline using putstring, then clears the current line. 9.1542 + 9.1543 +****************************************************************************/ 9.1544 + 9.1545 +void printline() 9.1546 +{ 9.1547 + int i; 9.1548 + 9.1549 + for (i=0;i<charheight;i++) { 9.1550 + putstring(outputline[i]); 9.1551 + } 9.1552 + clearline(); 9.1553 +} 9.1554 + 9.1555 + 9.1556 +/**************************************************************************** 9.1557 + 9.1558 + splitline 9.1559 + 9.1560 + Splits inchrline at the last word break (bunch of consecutive blanks). 9.1561 + Makes a new line out of the first part and prints it using 9.1562 + printline. Makes a new line out of the second part and returns. 9.1563 + 9.1564 +****************************************************************************/ 9.1565 + 9.1566 +void splitline() 9.1567 +{ 9.1568 + int i,gotspace,lastspace,len1,len2; 9.1569 + inchr *part1,*part2; 9.1570 + 9.1571 + part1 = (inchr*)myalloc(sizeof(inchr)*(inchrlinelen+1)); 9.1572 + part2 = (inchr*)myalloc(sizeof(inchr)*(inchrlinelen+1)); 9.1573 + gotspace = 0; 9.1574 + for (i=inchrlinelen-1;i>=0;i--) { 9.1575 + if (!gotspace && inchrline[i]==' ') { 9.1576 + gotspace = 1; 9.1577 + lastspace = i; 9.1578 + } 9.1579 + if (gotspace && inchrline[i]!=' ') { 9.1580 + break; 9.1581 + } 9.1582 + } 9.1583 + len1 = i+1; 9.1584 + len2 = inchrlinelen-lastspace-1; 9.1585 + for (i=0;i<len1;i++) { 9.1586 + part1[i] = inchrline[i]; 9.1587 + } 9.1588 + for (i=0;i<len2;i++) { 9.1589 + part2[i] = inchrline[lastspace+1+i]; 9.1590 + } 9.1591 + clearline(); 9.1592 + for (i=0;i<len1;i++) { 9.1593 + addchar(part1[i]); 9.1594 + } 9.1595 + printline(); 9.1596 + for (i=0;i<len2;i++) { 9.1597 + addchar(part2[i]); 9.1598 + } 9.1599 + free(part1); 9.1600 + free(part2); 9.1601 +} 9.1602 + 9.1603 + 9.1604 +/**************************************************************************** 9.1605 + 9.1606 + handlemapping 9.1607 + 9.1608 + Given an input character (type inchr), executes re-mapping commands 9.1609 + read from control files. Returns re-mapped character (inchr). 9.1610 + 9.1611 +****************************************************************************/ 9.1612 + 9.1613 +inchr handlemapping(c) 9.1614 +inchr c; 9.1615 +{ 9.1616 + comnode *cmptr; 9.1617 + 9.1618 + cmptr=commandlist; 9.1619 + while (cmptr!=NULL) { 9.1620 + if (cmptr->thecommand ? 9.1621 + (c >= cmptr->rangelo && c <= cmptr->rangehi) : 0) { 9.1622 + c += cmptr->offset; 9.1623 + while(cmptr!=NULL ? cmptr->thecommand : 0) { 9.1624 + cmptr=cmptr->next; 9.1625 + } 9.1626 + } 9.1627 + else { 9.1628 + cmptr=cmptr->next; 9.1629 + } 9.1630 + } 9.1631 + return c; 9.1632 +} 9.1633 + 9.1634 +/**************************************************************************** 9.1635 + 9.1636 + Agetchar 9.1637 + 9.1638 + Replacement to getchar(). 9.1639 + Acts exactly like getchar if -A is NOT specified, 9.1640 + else obtains input from All remaining command line words. 9.1641 + 9.1642 +****************************************************************************/ 9.1643 + 9.1644 +int Agetchar() 9.1645 +{ 9.1646 + extern int optind; /* current argv[] element under study */ 9.1647 + static AgetMode = 0; /* >= 0 for displacement into argv[n], <0 EOF */ 9.1648 + char *arg; /* pointer to active character */ 9.1649 + int c; /* current character */ 9.1650 + 9.1651 + if ( ! cmdinput ) /* is -A active? */ 9.1652 + return( getchar() ); /* no: return stdin character */ 9.1653 + 9.1654 + if ( AgetMode < 0 || optind >= Myargc ) /* EOF is sticky: */ 9.1655 + return( EOF ); /* **ensure it now and forever more */ 9.1656 + 9.1657 + /* find next character */ 9.1658 + arg = Myargv[optind]; /* pointer to active arg */ 9.1659 + c = arg[AgetMode++]&0xFF; /* get appropriate char of arg */ 9.1660 + 9.1661 + if ( ! c ) /* at '\0' that terminates word? */ 9.1662 + { /* at end of word: return ' ' if normal word, '\n' if empty */ 9.1663 + c = ' '; /* suppose normal word and return blank */ 9.1664 + if ( AgetMode == 1 ) /* if ran out in very 1st char, force \n */ 9.1665 + c = '\n'; /* (allows "hello '' world" to do \n at '') */ 9.1666 + AgetMode = 0; /* return to char 0 in NEXT word */ 9.1667 + if ( ++optind >= Myargc ) /* run up word count and check if at "EOF" */ 9.1668 + { /* just ran out of arguments */ 9.1669 + c = EOF; /* return EOF */ 9.1670 + AgetMode = -1; /* ensure all future returns return EOF */ 9.1671 + } 9.1672 + } 9.1673 + 9.1674 + return( c ); /* return appropriate character */ 9.1675 + 9.1676 +} /* end: Agetchar() */ 9.1677 + 9.1678 + 9.1679 +/**************************************************************************** 9.1680 + 9.1681 + iso2022 9.1682 + 9.1683 + Called by getinchr. Interprets ISO 2022 sequences 9.1684 + 9.1685 +******************************************************************************/ 9.1686 + 9.1687 +inchr iso2022() 9.1688 +{ 9.1689 + inchr ch; 9.1690 + inchr ch2; 9.1691 + int save_gl; 9.1692 + int save_gr; 9.1693 + 9.1694 + ch = Agetchar(); 9.1695 + if (ch == EOF) return ch; 9.1696 + if (ch == 27) ch = Agetchar() + 0x100; /* ESC x */ 9.1697 + if (ch == 0x100 + '$') ch = Agetchar() + 0x200; /* ESC $ x */ 9.1698 + switch (ch) { 9.1699 + case 14: /* invoke G0 into GL */ 9.1700 + gl = 0; 9.1701 + return iso2022(); 9.1702 + case 15: /* invoke G1 into GL */ 9.1703 + gl = 1; 9.1704 + return iso2022(); 9.1705 + case 142: case 'N' + 0x100: /* invoke G2 into GL for next char */ 9.1706 + save_gl = gl; save_gr = gr; 9.1707 + gl = gr = 2; 9.1708 + ch = iso2022(); 9.1709 + gl = save_gl; gr = save_gr; 9.1710 + return ch; 9.1711 + case 143: case 'O' + 0x100: /* invoke G3 into GL for next char */ 9.1712 + save_gl = gl; save_gr = gr; 9.1713 + gl = gr = 3; 9.1714 + ch = iso2022(); 9.1715 + gl = save_gl; gr = save_gr; 9.1716 + return ch; 9.1717 + case 'n' + 0x100: /* invoke G2 into GL */ 9.1718 + gl = 2; 9.1719 + return iso2022(); 9.1720 + case 'o' + 0x100: /* invoke G3 into GL */ 9.1721 + gl = 3; 9.1722 + return iso2022(); 9.1723 + case '~' + 0x100: /* invoke G1 into GR */ 9.1724 + gr = 1; 9.1725 + return iso2022(); 9.1726 + case '}' + 0x100: /* invoke G2 into GR */ 9.1727 + gr = 2; 9.1728 + return iso2022(); 9.1729 + case '|' + 0x100: /* invoke G3 into GR */ 9.1730 + gr = 3; 9.1731 + return iso2022(); 9.1732 + case '(' + 0x100: /* set G0 to 94-char set */ 9.1733 + ch = Agetchar(); 9.1734 + if (ch == 'B') ch = 0; /* ASCII */ 9.1735 + gn[0] = ch << 16; 9.1736 + gndbl[0] = 0; 9.1737 + return iso2022(); 9.1738 + case ')' + 0x100: /* set G1 to 94-char set */ 9.1739 + ch = Agetchar(); 9.1740 + if (ch == 'B') ch = 0; 9.1741 + gn[1] = ch << 16; 9.1742 + gndbl[1] = 0; 9.1743 + return iso2022(); 9.1744 + case '*' + 0x100: /* set G2 to 94-char set */ 9.1745 + ch = Agetchar(); 9.1746 + if (ch == 'B') ch = 0; 9.1747 + gn[2] = ch << 16; 9.1748 + gndbl[2] = 0; 9.1749 + return iso2022(); 9.1750 + case '+' + 0x100: /* set G3 to 94-char set */ 9.1751 + ch = Agetchar(); 9.1752 + if (ch == 'B') ch = 0; 9.1753 + gn[3] = ch << 16; 9.1754 + gndbl[3] = 0; 9.1755 + return iso2022(); 9.1756 + case '-' + 0x100: /* set G1 to 96-char set */ 9.1757 + ch = Agetchar(); 9.1758 + if (ch == 'A') ch = 0; /* Latin-1 top half */ 9.1759 + gn[1] = (ch << 16) | 0x80; 9.1760 + gndbl[1] = 0; 9.1761 + return iso2022(); 9.1762 + case '.' + 0x100: /* set G2 to 96-char set */ 9.1763 + ch = Agetchar(); 9.1764 + if (ch == 'A') ch = 0; 9.1765 + gn[2] = (ch << 16) | 0x80; 9.1766 + gndbl[2] = 0; 9.1767 + return iso2022(); 9.1768 + case '/' + 0x100: /* set G3 to 96-char set */ 9.1769 + ch = Agetchar(); 9.1770 + if (ch == 'A') ch = 0; 9.1771 + gn[3] = (ch << 16) | 0x80; 9.1772 + gndbl[3] = 0; 9.1773 + return iso2022(); 9.1774 + case '(' + 0x200: /* set G0 to 94 x 94 char set */ 9.1775 + ch = Agetchar(); 9.1776 + gn[0] = ch << 16; 9.1777 + gndbl[0] = 1; 9.1778 + return iso2022(); 9.1779 + case ')' + 0x200: /* set G1 to 94 x 94 char set */ 9.1780 + ch = Agetchar(); 9.1781 + gn[1] = ch << 16; 9.1782 + gndbl[1] = 1; 9.1783 + return iso2022(); 9.1784 + case '*' + 0x200: /* set G2 to 94 x 94 char set */ 9.1785 + ch = Agetchar(); 9.1786 + gn[2] = ch << 16; 9.1787 + gndbl[2] = 1; 9.1788 + return iso2022(); 9.1789 + case '+' + 0x200: /* set G3 to 94 x 94 char set */ 9.1790 + ch = Agetchar(); 9.1791 + gn[3] = ch << 16; 9.1792 + gndbl[3] = 1; 9.1793 + return iso2022(); 9.1794 + default: 9.1795 + if (ch & 0x200) { /* set G0 to 94 x 94 char set (deprecated) */ 9.1796 + gn[0] = (ch & ~0x200) << 16; 9.1797 + gndbl[0] = 1; 9.1798 + return iso2022(); 9.1799 + } 9.1800 + } 9.1801 + 9.1802 + if (ch >= 0x21 && ch <= 0x7E) { /* process GL */ 9.1803 + if (gndbl[gl]) { 9.1804 + ch2 = Agetchar(); 9.1805 + return gn[gl] | (ch << 8) | ch2; 9.1806 + } 9.1807 + else return gn[gl] | ch; 9.1808 + } 9.1809 + else if (ch >= 0xA0 && ch <= 0xFF) { /* process GR */ 9.1810 + if (gndbl[gr]) { 9.1811 + ch2 = Agetchar(); 9.1812 + return gn[gr] | (ch << 8) | ch2; 9.1813 + } 9.1814 + else return gn[gr] | (ch & ~0x80); 9.1815 + } 9.1816 + else return ch; 9.1817 + } 9.1818 + 9.1819 +/**************************************************************************** 9.1820 + 9.1821 + ungetinchr 9.1822 + 9.1823 + Called by main. Pushes back an "inchr" to be read by getinchr 9.1824 + on the next call. 9.1825 + 9.1826 +******************************************************************************/ 9.1827 +inchr getinchr_buffer; 9.1828 +int getinchr_flag; 9.1829 + 9.1830 +inchr ungetinchr(c) 9.1831 +inchr c; 9.1832 +{ 9.1833 + getinchr_buffer = c; 9.1834 + getinchr_flag = 1; 9.1835 + return c; 9.1836 +} 9.1837 + 9.1838 +/***************************************************************************** 9.1839 + 9.1840 + getinchr 9.1841 + 9.1842 + Called by main. Processes multibyte characters. Invokes Agetchar. 9.1843 + If multibyte = 0, ISO 2022 mode (see iso2022 routine). 9.1844 + If multibyte = 1, double-byte mode (0x00-0x7f bytes are characters, 9.1845 + 0x80-0xFF bytes are first byte of a double-byte character). 9.1846 + If multibyte = 2, Unicode UTF-8 mode (0x00-0x7F bytes are characters, 9.1847 + 0x80-0xBF bytes are nonfirst byte of a multibyte character, 9.1848 + 0xC0-0xFD bytes are first byte of a multibyte character, 9.1849 + 0xFE-0xFF bytes are errors (all errors return code 0x0080)). 9.1850 + If multibyte = 3, HZ mode ("~{" starts double-byte mode, "}~" ends it, 9.1851 + "~~" is a tilde, "~x" for all other x is ignored). 9.1852 + If multibyte = 4, Shift-JIS mode (0x80-0x9F and 0xE0-0xEF are first byte 9.1853 + of a double-byte character, all other bytes are characters). 9.1854 + 9.1855 + 9.1856 +*****************************************************************************/ 9.1857 + 9.1858 +inchr getinchr() 9.1859 +{ 9.1860 + int ch, ch2, ch3, ch4, ch5, ch6; 9.1861 + 9.1862 + if (getinchr_flag) { 9.1863 + getinchr_flag = 0; 9.1864 + return getinchr_buffer; 9.1865 + } 9.1866 + 9.1867 + switch(multibyte) { 9.1868 + case 0: /* single-byte */ 9.1869 + return iso2022(); 9.1870 + case 1: /* DBCS */ 9.1871 + ch = Agetchar(); 9.1872 + if ((ch >= 0x80 && ch <= 0x9F) || 9.1873 + (ch >= 0xE0 && ch <= 0xEF)) { 9.1874 + ch = (ch << 8) + Agetchar(); 9.1875 + } 9.1876 + return ch; 9.1877 + case 2: /* UTF-8 */ 9.1878 + ch = Agetchar(); 9.1879 + if (ch < 0x80) return ch; /* handles EOF, too */ 9.1880 + if (ch < 0xC0 || ch > 0xFD) 9.1881 + return 0x0080; /* illegal first character */ 9.1882 + ch2 = Agetchar() & 0x3F; 9.1883 + if (ch < 0xE0) return ((ch & 0x1F) << 6) + ch2; 9.1884 + ch3 = Agetchar() & 0x3F; 9.1885 + if (ch < 0xF0) 9.1886 + return ((ch & 0x0F) << 12) + (ch2 << 6) + ch3; 9.1887 + ch4 = Agetchar() & 0x3F; 9.1888 + if (ch < 0xF8) 9.1889 + return ((ch & 0x07) << 18) + (ch2 << 12) + (ch3 << 6) + ch4; 9.1890 + ch5 = Agetchar() & 0x3F; 9.1891 + if (ch < 0xFC) 9.1892 + return ((ch & 0x03) << 24) + (ch2 << 18) + (ch3 << 12) + 9.1893 + (ch4 << 6) + ch5; 9.1894 + ch6 = Agetchar() & 0x3F; 9.1895 + return ((ch & 0x01) << 30) + (ch2 << 24) + (ch3 << 18) + 9.1896 + (ch4 << 12) + (ch5 << 6) + ch6; 9.1897 + case 3: /* HZ */ 9.1898 + ch = Agetchar(); 9.1899 + if (ch == EOF) return ch; 9.1900 + if (hzmode) { 9.1901 + ch = (ch << 8) + Agetchar(); 9.1902 + if (ch == ('}' << 8) + '~') { 9.1903 + hzmode = 0; 9.1904 + return getinchr(); 9.1905 + } 9.1906 + return ch; 9.1907 + } 9.1908 + else if (ch == '~') { 9.1909 + ch = Agetchar(); 9.1910 + if (ch == '{') { 9.1911 + hzmode = 1; 9.1912 + return getinchr(); 9.1913 + } 9.1914 + else if (ch == '~') { 9.1915 + return ch; 9.1916 + } 9.1917 + else { 9.1918 + return getinchr(); 9.1919 + } 9.1920 + } 9.1921 + else return ch; 9.1922 + case 4: /* Shift-JIS */ 9.1923 + ch = Agetchar(); 9.1924 + if ((ch >= 0x80 && ch <= 0x9F) || 9.1925 + (ch >= 0xE0 && ch <= 0xEF)) { 9.1926 + ch = (ch << 8) + Agetchar(); 9.1927 + } 9.1928 + return ch; 9.1929 + default: 9.1930 + return 0x80; 9.1931 + } 9.1932 + } 9.1933 + 9.1934 +/**************************************************************************** 9.1935 + 9.1936 + main 9.1937 + 9.1938 + The main program, of course. 9.1939 + Reads characters 1 by 1 from stdin, and makes lines out of them using 9.1940 + addchar. Handles line breaking, (which accounts for most of the 9.1941 + complexity in this function). 9.1942 + 9.1943 +****************************************************************************/ 9.1944 + 9.1945 +int main(argc,argv) 9.1946 +int argc; 9.1947 +char *argv[]; 9.1948 +{ 9.1949 + inchr c,c2; 9.1950 + int i; 9.1951 + int last_was_eol_flag; 9.1952 +/*--------------------------------------------------------------------------- 9.1953 + wordbreakmode: 9.1954 + -1: /^$/ and blanks are to be absorbed (when line break was forced 9.1955 + by a blank or character larger than outlinelenlimit) 9.1956 + 0: /^ *$/ and blanks are not to be absorbed 9.1957 + 1: /[^ ]$/ no word break yet 9.1958 + 2: /[^ ] *$/ 9.1959 + 3: /[^ ]$/ had a word break 9.1960 +---------------------------------------------------------------------------*/ 9.1961 + int wordbreakmode; 9.1962 + int char_not_added; 9.1963 + 9.1964 + Myargc = argc; 9.1965 + Myargv = argv; 9.1966 + getparams(); 9.1967 + readcontrolfiles(); 9.1968 + readfont(); 9.1969 + linealloc(); 9.1970 + 9.1971 + wordbreakmode = 0; 9.1972 + last_was_eol_flag = 0; 9.1973 + 9.1974 + while ((c = getinchr())!=EOF) { 9.1975 + 9.1976 + if (c=='\n'&¶graphflag&&!last_was_eol_flag) { 9.1977 + ungetinchr(c2 = getinchr()); 9.1978 + c = ((isascii(c2)&&isspace(c2))?'\n':' '); 9.1979 + } 9.1980 + last_was_eol_flag = (isascii(c)&&isspace(c)&&c!='\t'&&c!=' '); 9.1981 + 9.1982 + if (deutschflag) { 9.1983 + if (c>='[' && c<=']') { 9.1984 + c = deutsch[c-'[']; 9.1985 + } 9.1986 + else if (c >='{' && c <= '~') { 9.1987 + c = deutsch[c-'{'+3]; 9.1988 + } 9.1989 + } 9.1990 + 9.1991 + c = handlemapping(c); 9.1992 + 9.1993 + if (isascii(c)&&isspace(c)) { 9.1994 + c = (c=='\t'||c==' ') ? ' ' : '\n'; 9.1995 + } 9.1996 + 9.1997 + if ((c>'\0' && c<' ' && c!='\n') || c==127) continue; 9.1998 + 9.1999 +/* 9.2000 + Note: The following code is complex and thoroughly tested. 9.2001 + Be careful when modifying! 9.2002 +*/ 9.2003 + 9.2004 + do { 9.2005 + char_not_added = 0; 9.2006 + 9.2007 + if (wordbreakmode== -1) { 9.2008 + if (c==' ') { 9.2009 + break; 9.2010 + } 9.2011 + else if (c=='\n') { 9.2012 + wordbreakmode = 0; 9.2013 + break; 9.2014 + } 9.2015 + wordbreakmode = 0; 9.2016 + } 9.2017 + 9.2018 + if (c=='\n') { 9.2019 + printline(); 9.2020 + wordbreakmode = 0; 9.2021 + } 9.2022 + 9.2023 + else if (addchar(c)) { 9.2024 + if (c!=' ') { 9.2025 + wordbreakmode = (wordbreakmode>=2)?3:1; 9.2026 + } 9.2027 + else { 9.2028 + wordbreakmode = (wordbreakmode>0)?2:0; 9.2029 + } 9.2030 + } 9.2031 + 9.2032 + else if (outlinelen==0) { 9.2033 + for (i=0;i<charheight;i++) { 9.2034 + if (right2left && outputwidth>1) { 9.2035 + putstring(currchar[i]+MYSTRLEN(currchar[i])-outlinelenlimit); 9.2036 + } 9.2037 + else { 9.2038 + putstring(currchar[i]); 9.2039 + } 9.2040 + } 9.2041 + wordbreakmode = -1; 9.2042 + } 9.2043 + 9.2044 + else if (c==' ') { 9.2045 + if (wordbreakmode==2) { 9.2046 + splitline(); 9.2047 + } 9.2048 + else { 9.2049 + printline(); 9.2050 + } 9.2051 + wordbreakmode = -1; 9.2052 + } 9.2053 + 9.2054 + else { 9.2055 + if (wordbreakmode>=2) { 9.2056 + splitline(); 9.2057 + } 9.2058 + else { 9.2059 + printline(); 9.2060 + } 9.2061 + wordbreakmode = (wordbreakmode==3)?1:0; 9.2062 + char_not_added = 1; 9.2063 + } 9.2064 + 9.2065 + } while (char_not_added); 9.2066 + } 9.2067 + 9.2068 + if (outlinelen!=0) { 9.2069 + printline(); 9.2070 + } 9.2071 + 9.2072 + /* XXX Xen hack -- finish off the C macro output */ 9.2073 + if ( nr_chars != 0 ) 9.2074 + putchar('"'); 9.2075 + putchar('\n'); 9.2076 + 9.2077 + exit(0); 9.2078 +}
10.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 10.2 +++ b/xen/tools/figlet/xen.flf Sat May 03 13:47:58 2003 +0000 10.3 @@ -0,0 +1,2230 @@ 10.4 +flf2a$ 6 5 16 15 14 0 24463 229 10.5 +Standard by Glenn Chappell & Ian Chai 3/93 -- based on Frank's .sig 10.6 +Includes ISO Latin-1 10.7 +figlet release 2.1 -- 12 Aug 1994 10.8 +Modified for figlet 2.2 by John Cowan <cowan@ccil.org> 10.9 + to add Latin-{2,3,4,5} support (Unicode U+0100-017F). 10.10 +Permission is hereby given to modify this font, as long as the 10.11 +modifier's name is placed on a comment line. 10.12 + 10.13 +Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter 10.14 +supported by FIGlet and FIGWin. May also be slightly modified for better use 10.15 +of new full-width/kern/smush alternatives, but default output is NOT changed. 10.16 + 10.17 +Modified by Keir Fraser <kaf24@cl.cam.ac.uk> for Xen build system. 10.18 + 10.19 + $@ 10.20 + $@ 10.21 + $@ 10.22 + $@ 10.23 + $@ 10.24 + $@@ 10.25 + _ @ 10.26 + | |@ 10.27 + | |@ 10.28 + |_|@ 10.29 + (_)@ 10.30 + @@ 10.31 + _ _ @ 10.32 + ( | )@ 10.33 + V V @ 10.34 + $ @ 10.35 + $ @ 10.36 + @@ 10.37 + _ _ @ 10.38 + _| || |_ @ 10.39 + |_ .. _|@ 10.40 + |_ _|@ 10.41 + |_||_| @ 10.42 + @@ 10.43 + _ @ 10.44 + | | @ 10.45 + / __)@ 10.46 + \__ \@ 10.47 + ( /@ 10.48 + |_| @@ 10.49 + _ __@ 10.50 + (_)/ /@ 10.51 + / / @ 10.52 + / /_ @ 10.53 + /_/(_)@ 10.54 + @@ 10.55 + ___ @ 10.56 + ( _ ) @ 10.57 + / _ \/\@ 10.58 + | (_> <@ 10.59 + \___/\/@ 10.60 + @@ 10.61 + _ @ 10.62 + ( )@ 10.63 + |/ @ 10.64 + $ @ 10.65 + $ @ 10.66 + @@ 10.67 + __@ 10.68 + / /@ 10.69 + | | @ 10.70 + | | @ 10.71 + | | @ 10.72 + \_\@@ 10.73 + __ @ 10.74 + \ \ @ 10.75 + | |@ 10.76 + | |@ 10.77 + | |@ 10.78 + /_/ @@ 10.79 + @ 10.80 + __/\__@ 10.81 + \ /@ 10.82 + /_ _\@ 10.83 + \/ @ 10.84 + @@ 10.85 + @ 10.86 + _ @ 10.87 + _| |_ @ 10.88 + |_ _|@ 10.89 + |_| @ 10.90 + @@ 10.91 + @ 10.92 + @ 10.93 + @ 10.94 + _ @ 10.95 + ( )@ 10.96 + |/ @@ 10.97 + @ 10.98 + @ 10.99 + __ @ 10.100 + |__|@ 10.101 + $ @ 10.102 + @@ 10.103 + @ 10.104 + @ 10.105 + @ 10.106 + _ @ 10.107 + (_)@ 10.108 + @@ 10.109 + __@ 10.110 + / /@ 10.111 + / / @ 10.112 + / / @ 10.113 + /_/ @ 10.114 + @@ 10.115 + ___ @ 10.116 + / _ \ @ 10.117 + | | | |@ 10.118 + | |_| |@ 10.119 + \___/ @ 10.120 + @@ 10.121 + _ @ 10.122 + / |@ 10.123 + | |@ 10.124 + | |@ 10.125 + |_|@ 10.126 + @@ 10.127 + ____ @ 10.128 + |___ \ @ 10.129 + __) |@ 10.130 + / __/ @ 10.131 + |_____|@ 10.132 + @@ 10.133 + _____ @ 10.134 + |___ / @ 10.135 + |_ \ @ 10.136 + ___) |@ 10.137 + |____/ @ 10.138 + @@ 10.139 + _ _ @ 10.140 + | || | @ 10.141 + | || |_ @ 10.142 + |__ _|@ 10.143 + |_| @ 10.144 + @@ 10.145 + ____ @ 10.146 + | ___| @ 10.147 + |___ \ @ 10.148 + ___) |@ 10.149 + |____/ @ 10.150 + @@ 10.151 + __ @ 10.152 + / /_ @ 10.153 + | '_ \ @ 10.154 + | (_) |@ 10.155 + \___/ @ 10.156 + @@ 10.157 + _____ @ 10.158 + |___ |@ 10.159 + / / @ 10.160 + / / @ 10.161 + /_/ @ 10.162 + @@ 10.163 + ___ @ 10.164 + ( _ ) @ 10.165 + / _ \ @ 10.166 + | (_) |@ 10.167 + \___/ @ 10.168 + @@ 10.169 + ___ @ 10.170 + / _ \ @ 10.171 + | (_) |@ 10.172 + \__, |@ 10.173 + /_/ @ 10.174 + @@ 10.175 + @ 10.176 + _ @ 10.177 + (_)@ 10.178 + _ @ 10.179 + (_)@ 10.180 + @@ 10.181 + @ 10.182 + _ @ 10.183 + (_)@ 10.184 + _ @ 10.185 + ( )@ 10.186 + |/ @@ 10.187 + __@ 10.188 + / /@ 10.189 + / / @ 10.190 + \ \ @ 10.191 + \_\@ 10.192 + @@ 10.193 + @ 10.194 + _____ @ 10.195 + |_____|@ 10.196 + |_____|@ 10.197 + $ @ 10.198 + @@ 10.199 + __ @ 10.200 + \ \ @ 10.201 + \ \@ 10.202 + / /@ 10.203 + /_/ @ 10.204 + @@ 10.205 + ___ @ 10.206 + |__ \@ 10.207 + / /@ 10.208 + |_| @ 10.209 + (_) @ 10.210 + @@ 10.211 + ____ @ 10.212 + / __ \ @ 10.213 + / / _` |@ 10.214 + | | (_| |@ 10.215 + \ \__,_|@ 10.216 + \____/ @@ 10.217 + _ @ 10.218 + / \ @ 10.219 + / _ \ @ 10.220 + / ___ \ @ 10.221 + /_/ \_\@ 10.222 + @@ 10.223 + ____ @ 10.224 + | __ ) @ 10.225 + | _ \ @ 10.226 + | |_) |@ 10.227 + |____/ @ 10.228 + @@ 10.229 + ____ @ 10.230 + / ___|@ 10.231 + | | @ 10.232 + | |___ @ 10.233 + \____|@ 10.234 + @@ 10.235 + ____ @ 10.236 + | _ \ @ 10.237 + | | | |@ 10.238 + | |_| |@ 10.239 + |____/ @ 10.240 + @@ 10.241 + _____ @ 10.242 + | ____|@ 10.243 + | _| @ 10.244 + | |___ @ 10.245 + |_____|@ 10.246 + @@ 10.247 + _____ @ 10.248 + | ___|@ 10.249 + | |_ @ 10.250 + | _| @ 10.251 + |_| @ 10.252 + @@ 10.253 + ____ @ 10.254 + / ___|@ 10.255 + | | _ @ 10.256 + | |_| |@ 10.257 + \____|@ 10.258 + @@ 10.259 + _ _ @ 10.260 + | | | |@ 10.261 + | |_| |@ 10.262 + | _ |@ 10.263 + |_| |_|@ 10.264 + @@ 10.265 + ___ @ 10.266 + |_ _|@ 10.267 + | | @ 10.268 + | | @ 10.269 + |___|@ 10.270 + @@ 10.271 + _ @ 10.272 + | |@ 10.273 + _ | |@ 10.274 + | |_| |@ 10.275 + \___/ @ 10.276 + @@ 10.277 + _ __@ 10.278 + | |/ /@ 10.279 + | ' / @ 10.280 + | . \ @ 10.281 + |_|\_\@ 10.282 + @@ 10.283 + _ @ 10.284 + | | @ 10.285 + | | @ 10.286 + | |___ @ 10.287 + |_____|@ 10.288 + @@ 10.289 + __ __ @ 10.290 + | \/ |@ 10.291 + | |\/| |@ 10.292 + | | | |@ 10.293 + |_| |_|@ 10.294 + @@ 10.295 + _ _ @ 10.296 + | \ | |@ 10.297 + | \| |@ 10.298 + | |\ |@ 10.299 + |_| \_|@ 10.300 + @@ 10.301 + ___ @ 10.302 + / _ \ @ 10.303 + | | | |@ 10.304 + | |_| |@ 10.305 + \___/ @ 10.306 + @@ 10.307 + ____ @ 10.308 + | _ \ @ 10.309 + | |_) |@ 10.310 + | __/ @ 10.311 + |_| @ 10.312 + @@ 10.313 + ___ @ 10.314 + / _ \ @ 10.315 + | | | |@ 10.316 + | |_| |@ 10.317 + \__\_\@ 10.318 + @@ 10.319 + ____ @ 10.320 + | _ \ @ 10.321 + | |_) |@ 10.322 + | _ < @ 10.323 + |_| \_\@ 10.324 + @@ 10.325 + ____ @ 10.326 + / ___| @ 10.327 + \___ \ @ 10.328 + ___) |@ 10.329 + |____/ @ 10.330 + @@ 10.331 + _____ @ 10.332 + |_ _|@ 10.333 + | | @ 10.334 + | | @ 10.335 + |_| @ 10.336 + @@ 10.337 + _ _ @ 10.338 + | | | |@ 10.339 + | | | |@ 10.340 + | |_| |@ 10.341 + \___/ @ 10.342 + @@ 10.343 + __ __@ 10.344 + \ \ / /@ 10.345 + \ \ / / @ 10.346 + \ V / @ 10.347 + \_/ @ 10.348 + @@ 10.349 + __ __@ 10.350 + \ \ / /@ 10.351 + \ \ /\ / / @ 10.352 + \ V V / @ 10.353 + \_/\_/ @ 10.354 + @@ 10.355 + __ __@ 10.356 + \ \/ /@ 10.357 + \ / @ 10.358 + / \ @ 10.359 + /_/\_\@ 10.360 + @@ 10.361 + __ __@ 10.362 + \ \ / /@ 10.363 + \ V / @ 10.364 + | | @ 10.365 + |_| @ 10.366 + @@ 10.367 + _____@ 10.368 + |__ /@ 10.369 + / / @ 10.370 + / /_ @ 10.371 + /____|@ 10.372 + @@ 10.373 + __ @ 10.374 + | _|@ 10.375 + | | @ 10.376 + | | @ 10.377 + | | @ 10.378 + |__|@@ 10.379 + __ @ 10.380 + \ \ @ 10.381 + \ \ @ 10.382 + \ \ @ 10.383 + \_\@ 10.384 + @@ 10.385 + __ @ 10.386 + |_ |@ 10.387 + | |@ 10.388 + | |@ 10.389 + | |@ 10.390 + |__|@@ 10.391 + /\ @ 10.392 + |/\|@ 10.393 + $ @ 10.394 + $ @ 10.395 + $ @ 10.396 + @@ 10.397 + @ 10.398 + @ 10.399 + @ 10.400 + @ 10.401 + _____ @ 10.402 + |_____|@@ 10.403 + _ @ 10.404 + ( )@ 10.405 + \|@ 10.406 + $ @ 10.407 + $ @ 10.408 + @@ 10.409 + @ 10.410 + __ _ @ 10.411 + / _` |@ 10.412 + | (_| |@ 10.413 + \__,_|@ 10.414 + @@ 10.415 + _ @ 10.416 + | |__ @ 10.417 + | '_ \ @ 10.418 + | |_) |@ 10.419 + |_.__/ @ 10.420 + @@ 10.421 + @ 10.422 + ___ @ 10.423 + / __|@ 10.424 + | (__ @ 10.425 + \___|@ 10.426 + @@ 10.427 + _ @ 10.428 + __| |@ 10.429 + / _` |@ 10.430 + | (_| |@ 10.431 + \__,_|@ 10.432 + @@ 10.433 + @ 10.434 + ___ @ 10.435 + / _ \@ 10.436 + | __/@ 10.437 + \___|@ 10.438 + @@ 10.439 + __ @ 10.440 + / _|@ 10.441 + | |_ @ 10.442 + | _|@ 10.443 + |_| @ 10.444 + @@ 10.445 + @ 10.446 + __ _ @ 10.447 + / _` |@ 10.448 + | (_| |@ 10.449 + \__, |@ 10.450 + |___/ @@ 10.451 + _ @ 10.452 + | |__ @ 10.453 + | '_ \ @ 10.454 + | | | |@ 10.455 + |_| |_|@ 10.456 + @@ 10.457 + _ @ 10.458 + (_)@ 10.459 + | |@ 10.460 + | |@ 10.461 + |_|@ 10.462 + @@ 10.463 + _ @ 10.464 + (_)@ 10.465 + | |@ 10.466 + | |@ 10.467 + _/ |@ 10.468 + |__/ @@ 10.469 + _ @ 10.470 + | | __@ 10.471 + | |/ /@ 10.472 + | < @ 10.473 + |_|\_\@ 10.474 + @@ 10.475 + _ @ 10.476 + | |@ 10.477 + | |@ 10.478 + | |@ 10.479 + |_|@ 10.480 + @@ 10.481 + @ 10.482 + _ __ ___ @ 10.483 + | '_ ` _ \ @ 10.484 + | | | | | |@ 10.485 + |_| |_| |_|@ 10.486 + @@ 10.487 + @ 10.488 + _ __ @ 10.489 + | '_ \ @ 10.490 + | | | |@ 10.491 + |_| |_|@ 10.492 + @@ 10.493 + @ 10.494 + ___ @ 10.495 + / _ \ @ 10.496 + | (_) |@ 10.497 + \___/ @ 10.498 + @@ 10.499 + @ 10.500 + _ __ @ 10.501 + | '_ \ @ 10.502 + | |_) |@ 10.503 + | .__/ @ 10.504 + |_| @@ 10.505 + @ 10.506 + __ _ @ 10.507 + / _` |@ 10.508 + | (_| |@ 10.509 + \__, |@ 10.510 + |_|@@ 10.511 + @ 10.512 + _ __ @ 10.513 + | '__|@ 10.514 + | | @ 10.515 + |_| @ 10.516 + @@ 10.517 + @ 10.518 + ___ @ 10.519 + / __|@ 10.520 + \__ \@ 10.521 + |___/@ 10.522 + @@ 10.523 + _ @ 10.524 + | |_ @ 10.525 + | __|@ 10.526 + | |_ @ 10.527 + \__|@ 10.528 + @@ 10.529 + @ 10.530 + _ _ @ 10.531 + | | | |@ 10.532 + | |_| |@ 10.533 + \__,_|@ 10.534 + @@ 10.535 + @ 10.536 + __ __@ 10.537 + \ \ / /@ 10.538 + \ V / @ 10.539 + \_/ @ 10.540 + @@ 10.541 + @ 10.542 + __ __@ 10.543 + \ \ /\ / /@ 10.544 + \ V V / @ 10.545 + \_/\_/ @ 10.546 + @@ 10.547 + @ 10.548 + __ __@ 10.549 + \ \/ /@ 10.550 + > < @ 10.551 + /_/\_\@ 10.552 + @@ 10.553 + @ 10.554 + _ _ @ 10.555 + | | | |@ 10.556 + | |_| |@ 10.557 + \__, |@ 10.558 + |___/ @@ 10.559 + @ 10.560 + ____@ 10.561 + |_ /@ 10.562 + / / @ 10.563 + /___|@ 10.564 + @@ 10.565 + __@ 10.566 + / /@ 10.567 + | | @ 10.568 + < < @ 10.569 + | | @ 10.570 + \_\@@ 10.571 + _ @ 10.572 + | |@ 10.573 + | |@ 10.574 + | |@ 10.575 + | |@ 10.576 + |_|@@ 10.577 + __ @ 10.578 + \ \ @ 10.579 + | | @ 10.580 + > >@ 10.581 + | | @ 10.582 + /_/ @@ 10.583 + /\/|@ 10.584 + |/\/ @ 10.585 + $ @ 10.586 + $ @ 10.587 + $ @ 10.588 + @@ 10.589 + _ _ @ 10.590 + (_)_(_)@ 10.591 + /_\ @ 10.592 + / _ \ @ 10.593 + /_/ \_\@ 10.594 + @@ 10.595 + _ _ @ 10.596 + (_)_(_)@ 10.597 + / _ \ @ 10.598 + | |_| |@ 10.599 + \___/ @ 10.600 + @@ 10.601 + _ _ @ 10.602 + (_) (_)@ 10.603 + | | | |@ 10.604 + | |_| |@ 10.605 + \___/ @ 10.606 + @@ 10.607 + _ _ @ 10.608 + (_)_(_)@ 10.609 + / _` |@ 10.610 + | (_| |@ 10.611 + \__,_|@ 10.612 + @@ 10.613 + _ _ @ 10.614 + (_)_(_)@ 10.615 + / _ \ @ 10.616 + | (_) |@ 10.617 + \___/ @ 10.618 + @@ 10.619 + _ _ @ 10.620 + (_) (_)@ 10.621 + | | | |@ 10.622 + | |_| |@ 10.623 + \__,_|@ 10.624 + @@ 10.625 + ___ @ 10.626 + / _ \@ 10.627 + | |/ /@ 10.628 + | |\ \@ 10.629 + | ||_/@ 10.630 + |_| @@ 10.631 +160 NO-BREAK SPACE 10.632 + $@ 10.633 + $@ 10.634 + $@ 10.635 + $@ 10.636 + $@ 10.637 + $@@ 10.638 +161 INVERTED EXCLAMATION MARK 10.639 + _ @ 10.640 + (_)@ 10.641 + | |@ 10.642 + | |@ 10.643 + |_|@ 10.644 + @@ 10.645 +162 CENT SIGN 10.646 + _ @ 10.647 + | | @ 10.648 + / __)@ 10.649 + | (__ @ 10.650 + \ )@ 10.651 + |_| @@ 10.652 +163 POUND SIGN 10.653 + ___ @ 10.654 + / ,_\ @ 10.655 + _| |_ @ 10.656 + | |___ @ 10.657 + (_,____|@ 10.658 + @@ 10.659 +164 CURRENCY SIGN 10.660 + /\___/\@ 10.661 + \ _ /@ 10.662 + | (_) |@ 10.663 + / ___ \@ 10.664 + \/ \/@ 10.665 + @@ 10.666 +165 YEN SIGN 10.667 + __ __ @ 10.668 + \ V / @ 10.669 + |__ __|@ 10.670 + |__ __|@ 10.671 + |_| @ 10.672 + @@ 10.673 +166 BROKEN BAR 10.674 + _ @ 10.675 + | |@ 10.676 + |_|@ 10.677 + _ @ 10.678 + | |@ 10.679 + |_|@@ 10.680 +167 SECTION SIGN 10.681 + __ @ 10.682 + _/ _)@ 10.683 + / \ \ @ 10.684 + \ \\ \@ 10.685 + \ \_/@ 10.686 + (__/ @@ 10.687 +168 DIAERESIS 10.688 + _ _ @ 10.689 + (_) (_)@ 10.690 + $ $ @ 10.691 + $ $ @ 10.692 + $ $ @ 10.693 + @@ 10.694 +169 COPYRIGHT SIGN 10.695 + _____ @ 10.696 + / ___ \ @ 10.697 + / / __| \ @ 10.698 + | | (__ |@ 10.699 + \ \___| / @ 10.700 + \_____/ @@ 10.701 +170 FEMININE ORDINAL INDICATOR 10.702 + __ _ @ 10.703 + / _` |@ 10.704 + \__,_|@ 10.705 + |____|@ 10.706 + $ @ 10.707 + @@ 10.708 +171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 10.709 + ____@ 10.710 + / / /@ 10.711 + / / / @ 10.712 + \ \ \ @ 10.713 + \_\_\@ 10.714 + @@ 10.715 +172 NOT SIGN 10.716 + @ 10.717 + _____ @ 10.718 + |___ |@ 10.719 + |_|@ 10.720 + $ @ 10.721 + @@ 10.722 +173 SOFT HYPHEN 10.723 + @ 10.724 + @ 10.725 + ____ @ 10.726 + |____|@ 10.727 + $ @ 10.728 + @@ 10.729 +174 REGISTERED SIGN 10.730 + _____ @ 10.731 + / ___ \ @ 10.732 + / | _ \ \ @ 10.733 + | | / |@ 10.734 + \ |_|_\ / @ 10.735 + \_____/ @@ 10.736 +175 MACRON 10.737 + _____ @ 10.738 + |_____|@ 10.739 + $ @ 10.740 + $ @ 10.741 + $ @ 10.742 + @@ 10.743 +176 DEGREE SIGN 10.744 + __ @ 10.745 + / \ @ 10.746 + | () |@ 10.747 + \__/ @ 10.748 + $ @ 10.749 + @@ 10.750 +177 PLUS-MINUS SIGN 10.751 + _ @ 10.752 + _| |_ @ 10.753 + |_ _|@ 10.754 + _|_|_ @ 10.755 + |_____|@ 10.756 + @@ 10.757 +178 SUPERSCRIPT TWO 10.758 + ___ @ 10.759 + |_ )@ 10.760 + / / @ 10.761 + /___|@ 10.762 + $ @ 10.763 + @@ 10.764 +179 SUPERSCRIPT THREE 10.765 + ____@ 10.766 + |__ /@ 10.767 + |_ \@ 10.768 + |___/@ 10.769 + $ @ 10.770 + @@ 10.771 +180 ACUTE ACCENT 10.772 + __@ 10.773 + /_/@ 10.774 + $ @ 10.775 + $ @ 10.776 + $ @ 10.777 + @@ 10.778 +181 MICRO SIGN 10.779 + @ 10.780 + _ _ @ 10.781 + | | | |@ 10.782 + | |_| |@ 10.783 + | ._,_|@ 10.784 + |_| @@ 10.785 +182 PILCROW SIGN 10.786 + _____ @ 10.787 + / |@ 10.788 + | (| | |@ 10.789 + \__ | |@ 10.790 + |_|_|@ 10.791 + @@ 10.792 +183 MIDDLE DOT 10.793 + @ 10.794 + _ @ 10.795 + (_)@ 10.796 + $ @ 10.797 + $ @ 10.798 + @@ 10.799 +184 CEDILLA 10.800 + @ 10.801 + @ 10.802 + @ 10.803 + @ 10.804 + _ @ 10.805 + )_)@@ 10.806 +185 SUPERSCRIPT ONE 10.807 + _ @ 10.808 + / |@ 10.809 + | |@ 10.810 + |_|@ 10.811 + $ @ 10.812 + @@ 10.813 +186 MASCULINE ORDINAL INDICATOR 10.814 + ___ @ 10.815 + / _ \@ 10.816 + \___/@ 10.817 + |___|@ 10.818 + $ @ 10.819 + @@ 10.820 +187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 10.821 + ____ @ 10.822 + \ \ \ @ 10.823 + \ \ \@ 10.824 + / / /@ 10.825 + /_/_/ @ 10.826 + @@ 10.827 +188 VULGAR FRACTION ONE QUARTER 10.828 + _ __ @ 10.829 + / | / / _ @ 10.830 + | |/ / | | @ 10.831 + |_/ /|_ _|@ 10.832 + /_/ |_| @ 10.833 + @@ 10.834 +189 VULGAR FRACTION ONE HALF 10.835 + _ __ @ 10.836 + / | / /__ @ 10.837 + | |/ /_ )@ 10.838 + |_/ / / / @ 10.839 + /_/ /___|@ 10.840 + @@ 10.841 +190 VULGAR FRACTION THREE QUARTERS 10.842 + ____ __ @ 10.843 + |__ / / / _ @ 10.844 + |_ \/ / | | @ 10.845 + |___/ /|_ _|@ 10.846 + /_/ |_| @ 10.847 + @@ 10.848 +191 INVERTED QUESTION MARK 10.849 + _ @ 10.850 + (_) @ 10.851 + | | @ 10.852 + / /_ @ 10.853 + \___|@ 10.854 + @@ 10.855 +192 LATIN CAPITAL LETTER A WITH GRAVE 10.856 + __ @ 10.857 + \_\ @ 10.858 + /_\ @ 10.859 + / _ \ @ 10.860 + /_/ \_\@ 10.861 + @@ 10.862 +193 LATIN CAPITAL LETTER A WITH ACUTE 10.863 + __ @ 10.864 + /_/ @ 10.865 + /_\ @ 10.866 + / _ \ @ 10.867 + /_/ \_\@ 10.868 + @@ 10.869 +194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX 10.870 + //\ @ 10.871 + |/_\| @ 10.872 + /_\ @ 10.873 + / _ \ @ 10.874 + /_/ \_\@ 10.875 + @@ 10.876 +195 LATIN CAPITAL LETTER A WITH TILDE 10.877 + /\/| @ 10.878 + |/\/ @ 10.879 + /_\ @ 10.880 + / _ \ @ 10.881 + /_/ \_\@ 10.882 + @@ 10.883 +196 LATIN CAPITAL LETTER A WITH DIAERESIS 10.884 + _ _ @ 10.885 + (_)_(_)@ 10.886 + /_\ @ 10.887 + / _ \ @ 10.888 + /_/ \_\@ 10.889 + @@ 10.890 +197 LATIN CAPITAL LETTER A WITH RING ABOVE 10.891 + _ @ 10.892 + (o) @ 10.893 + /_\ @ 10.894 + / _ \ @ 10.895 + /_/ \_\@ 10.896 + @@ 10.897 +198 LATIN CAPITAL LETTER AE 10.898 + ______ @ 10.899 + / ____|@ 10.900 + / _ _| @ 10.901 + / __ |___ @ 10.902 + /_/ |_____|@ 10.903 + @@ 10.904 +199 LATIN CAPITAL LETTER C WITH CEDILLA 10.905 + ____ @ 10.906 + / ___|@ 10.907 + | | @ 10.908 + | |___ @ 10.909 + \____|@ 10.910 + )_) @@ 10.911 +200 LATIN CAPITAL LETTER E WITH GRAVE 10.912 + __ @ 10.913 + _\_\_ @ 10.914 + | ____|@ 10.915 + | _|_ @ 10.916 + |_____|@ 10.917 + @@ 10.918 +201 LATIN CAPITAL LETTER E WITH ACUTE 10.919 + __ @ 10.920 + _/_/_ @ 10.921 + | ____|@ 10.922 + | _|_ @ 10.923 + |_____|@ 10.924 + @@ 10.925 +202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX 10.926 + //\ @ 10.927 + |/_\| @ 10.928 + | ____|@ 10.929 + | _|_ @ 10.930 + |_____|@ 10.931 + @@ 10.932 +203 LATIN CAPITAL LETTER E WITH DIAERESIS 10.933 + _ _ @ 10.934 + (_)_(_)@ 10.935 + | ____|@ 10.936 + | _|_ @ 10.937 + |_____|@ 10.938 + @@ 10.939 +204 LATIN CAPITAL LETTER I WITH GRAVE 10.940 + __ @ 10.941 + \_\ @ 10.942 + |_ _|@ 10.943 + | | @ 10.944 + |___|@ 10.945 + @@ 10.946 +205 LATIN CAPITAL LETTER I WITH ACUTE 10.947 + __ @ 10.948 + /_/ @ 10.949 + |_ _|@ 10.950 + | | @ 10.951 + |___|@ 10.952 + @@ 10.953 +206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX 10.954 + //\ @ 10.955 + |/_\|@ 10.956 + |_ _|@ 10.957 + | | @ 10.958 + |___|@ 10.959 + @@ 10.960 +207 LATIN CAPITAL LETTER I WITH DIAERESIS 10.961 + _ _ @ 10.962 + (_)_(_)@ 10.963 + |_ _| @ 10.964 + | | @ 10.965 + |___| @ 10.966 + @@ 10.967 +208 LATIN CAPITAL LETTER ETH 10.968 + ____ @ 10.969 + | _ \ @ 10.970 + _| |_| |@ 10.971 + |__ __| |@ 10.972 + |____/ @ 10.973 + @@ 10.974 +209 LATIN CAPITAL LETTER N WITH TILDE 10.975 + /\/|@ 10.976 + |/\/ @ 10.977 + | \| |@ 10.978 + | .` |@ 10.979 + |_|\_|@ 10.980 + @@ 10.981 +210 LATIN CAPITAL LETTER O WITH GRAVE 10.982 + __ @ 10.983 + \_\ @ 10.984 + / _ \ @ 10.985 + | |_| |@ 10.986 + \___/ @ 10.987 + @@ 10.988 +211 LATIN CAPITAL LETTER O WITH ACUTE 10.989 + __ @ 10.990 + /_/ @ 10.991 + / _ \ @ 10.992 + | |_| |@ 10.993 + \___/ @ 10.994 + @@ 10.995 +212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX 10.996 + //\ @ 10.997 + |/_\| @ 10.998 + / _ \ @ 10.999 + | |_| |@ 10.1000 + \___/ @ 10.1001 + @@ 10.1002 +213 LATIN CAPITAL LETTER O WITH TILDE 10.1003 + /\/| @ 10.1004 + |/\/ @ 10.1005 + / _ \ @ 10.1006 + | |_| |@ 10.1007 + \___/ @ 10.1008 + @@ 10.1009 +214 LATIN CAPITAL LETTER O WITH DIAERESIS 10.1010 + _ _ @ 10.1011 + (_)_(_)@ 10.1012 + / _ \ @ 10.1013 + | |_| |@ 10.1014 + \___/ @ 10.1015 + @@ 10.1016 +215 MULTIPLICATION SIGN 10.1017 + @ 10.1018 + @ 10.1019 + /\/\@ 10.1020 + > <@ 10.1021 + \/\/@ 10.1022 + @@ 10.1023 +216 LATIN CAPITAL LETTER O WITH STROKE 10.1024 + ____ @ 10.1025 + / _// @ 10.1026 + | |// |@ 10.1027 + | //| |@ 10.1028 + //__/ @ 10.1029 + @@ 10.1030 +217 LATIN CAPITAL LETTER U WITH GRAVE 10.1031 + __ @ 10.1032 + _\_\_ @ 10.1033 + | | | |@ 10.1034 + | |_| |@ 10.1035 + \___/ @ 10.1036 + @@ 10.1037 +218 LATIN CAPITAL LETTER U WITH ACUTE 10.1038 + __ @ 10.1039 + _/_/_ @ 10.1040 + | | | |@ 10.1041 + | |_| |@ 10.1042 + \___/ @ 10.1043 + @@ 10.1044 +219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX 10.1045 + //\ @ 10.1046 + |/ \| @ 10.1047 + | | | |@ 10.1048 + | |_| |@ 10.1049 + \___/ @ 10.1050 + @@ 10.1051 +220 LATIN CAPITAL LETTER U WITH DIAERESIS 10.1052 + _ _ @ 10.1053 + (_) (_)@ 10.1054 + | | | |@ 10.1055 + | |_| |@ 10.1056 + \___/ @ 10.1057 + @@ 10.1058 +221 LATIN CAPITAL LETTER Y WITH ACUTE 10.1059 + __ @ 10.1060 + __/_/__@ 10.1061 + \ \ / /@ 10.1062 + \ V / @ 10.1063 + |_| @ 10.1064 + @@ 10.1065 +222 LATIN CAPITAL LETTER THORN 10.1066 + _ @ 10.1067 + | |___ @ 10.1068 + | __ \@ 10.1069 + | ___/@ 10.1070 + |_| @ 10.1071 + @@ 10.1072 +223 LATIN SMALL LETTER SHARP S 10.1073 + ___ @ 10.1074 + / _ \@ 10.1075 + | |/ /@ 10.1076 + | |\ \@ 10.1077 + | ||_/@ 10.1078 + |_| @@ 10.1079 +224 LATIN SMALL LETTER A WITH GRAVE 10.1080 + __ @ 10.1081 + \_\_ @ 10.1082 + / _` |@ 10.1083 + | (_| |@ 10.1084 + \__,_|@ 10.1085 + @@ 10.1086 +225 LATIN SMALL LETTER A WITH ACUTE 10.1087 + __ @ 10.1088 + /_/_ @ 10.1089 + / _` |@ 10.1090 + | (_| |@ 10.1091 + \__,_|@ 10.1092 + @@ 10.1093 +226 LATIN SMALL LETTER A WITH CIRCUMFLEX 10.1094 + //\ @ 10.1095 + |/_\| @ 10.1096 + / _` |@ 10.1097 + | (_| |@ 10.1098 + \__,_|@ 10.1099 + @@ 10.1100 +227 LATIN SMALL LETTER A WITH TILDE 10.1101 + /\/| @ 10.1102 + |/\/_ @ 10.1103 + / _` |@ 10.1104 + | (_| |@ 10.1105 + \__,_|@ 10.1106 + @@ 10.1107 +228 LATIN SMALL LETTER A WITH DIAERESIS 10.1108 + _ _ @ 10.1109 + (_)_(_)@ 10.1110 + / _` |@ 10.1111 + | (_| |@ 10.1112 + \__,_|@ 10.1113 + @@ 10.1114 +229 LATIN SMALL LETTER A WITH RING ABOVE 10.1115 + __ @ 10.1116 + (()) @ 10.1117 + / _ '|@ 10.1118 + | (_| |@ 10.1119 + \__,_|@ 10.1120 + @@ 10.1121 +230 LATIN SMALL LETTER AE 10.1122 + @ 10.1123 + __ ____ @ 10.1124 + / _` _ \@ 10.1125 + | (_| __/@ 10.1126 + \__,____|@ 10.1127 + @@ 10.1128 +231 LATIN SMALL LETTER C WITH CEDILLA 10.1129 + @ 10.1130 + ___ @ 10.1131 + / __|@ 10.1132 + | (__ @ 10.1133 + \___|@ 10.1134 + )_) @@ 10.1135 +232 LATIN SMALL LETTER E WITH GRAVE 10.1136 + __ @ 10.1137 + \_\ @ 10.1138 + / _ \@ 10.1139 + | __/@ 10.1140 + \___|@ 10.1141 + @@ 10.1142 +233 LATIN SMALL LETTER E WITH ACUTE 10.1143 + __ @ 10.1144 + /_/ @ 10.1145 + / _ \@ 10.1146 + | __/@ 10.1147 + \___|@ 10.1148 + @@ 10.1149 +234 LATIN SMALL LETTER E WITH CIRCUMFLEX 10.1150 + //\ @ 10.1151 + |/_\|@ 10.1152 + / _ \@ 10.1153 + | __/@ 10.1154 + \___|@ 10.1155 + @@ 10.1156 +235 LATIN SMALL LETTER E WITH DIAERESIS 10.1157 + _ _ @ 10.1158 + (_)_(_)@ 10.1159 + / _ \ @ 10.1160 + | __/ @ 10.1161 + \___| @ 10.1162 + @@ 10.1163 +236 LATIN SMALL LETTER I WITH GRAVE 10.1164 + __ @ 10.1165 + \_\@ 10.1166 + | |@ 10.1167 + | |@ 10.1168 + |_|@ 10.1169 + @@ 10.1170 +237 LATIN SMALL LETTER I WITH ACUTE 10.1171 + __@ 10.1172 + /_/@ 10.1173 + | |@ 10.1174 + | |@ 10.1175 + |_|@ 10.1176 + @@ 10.1177 +238 LATIN SMALL LETTER I WITH CIRCUMFLEX 10.1178 + //\ @ 10.1179 + |/_\|@ 10.1180 + | | @ 10.1181 + | | @ 10.1182 + |_| @ 10.1183 + @@ 10.1184 +239 LATIN SMALL LETTER I WITH DIAERESIS 10.1185 + _ _ @ 10.1186 + (_)_(_)@ 10.1187 + | | @ 10.1188 + | | @ 10.1189 + |_| @ 10.1190 + @@ 10.1191 +240 LATIN SMALL LETTER ETH 10.1192 + /\/\ @ 10.1193 + > < @ 10.1194 + _\/\ |@ 10.1195 + / __` |@ 10.1196 + \____/ @ 10.1197 + @@ 10.1198 +241 LATIN SMALL LETTER N WITH TILDE 10.1199 + /\/| @ 10.1200 + |/\/ @ 10.1201 + | '_ \ @ 10.1202 + | | | |@ 10.1203 + |_| |_|@ 10.1204 + @@ 10.1205 +242 LATIN SMALL LETTER O WITH GRAVE 10.1206 + __ @ 10.1207 + \_\ @ 10.1208 + / _ \ @ 10.1209 + | (_) |@ 10.1210 + \___/ @ 10.1211 + @@ 10.1212 +243 LATIN SMALL LETTER O WITH ACUTE 10.1213 + __ @ 10.1214 + /_/ @ 10.1215 + / _ \ @ 10.1216 + | (_) |@ 10.1217 + \___/ @ 10.1218 + @@ 10.1219 +244 LATIN SMALL LETTER O WITH CIRCUMFLEX 10.1220 + //\ @ 10.1221 + |/_\| @ 10.1222 + / _ \ @ 10.1223 + | (_) |@ 10.1224 + \___/ @ 10.1225 + @@ 10.1226 +245 LATIN SMALL LETTER O WITH TILDE 10.1227 + /\/| @ 10.1228 + |/\/ @ 10.1229 + / _ \ @ 10.1230 + | (_) |@ 10.1231 + \___/ @ 10.1232 + @@ 10.1233 +246 LATIN SMALL LETTER O WITH DIAERESIS 10.1234 + _ _ @ 10.1235 + (_)_(_)@ 10.1236 + / _ \ @ 10.1237 + | (_) |@ 10.1238 + \___/ @ 10.1239 + @@ 10.1240 +247 DIVISION SIGN 10.1241 + @ 10.1242 + _ @ 10.1243 + _(_)_ @ 10.1244 + |_____|@ 10.1245 + (_) @ 10.1246 + @@ 10.1247 +248 LATIN SMALL LETTER O WITH STROKE 10.1248 + @ 10.1249 + ____ @ 10.1250 + / _//\ @ 10.1251 + | (//) |@ 10.1252 + \//__/ @ 10.1253 + @@ 10.1254 +249 LATIN SMALL LETTER U WITH GRAVE 10.1255 + __ @ 10.1256 + _\_\_ @ 10.1257 + | | | |@ 10.1258 + | |_| |@ 10.1259 + \__,_|@ 10.1260 + @@ 10.1261 +250 LATIN SMALL LETTER U WITH ACUTE 10.1262 + __ @ 10.1263 + _/_/_ @ 10.1264 + | | | |@ 10.1265 + | |_| |@ 10.1266 + \__,_|@ 10.1267 + @@ 10.1268 +251 LATIN SMALL LETTER U WITH CIRCUMFLEX 10.1269 + //\ @ 10.1270 + |/ \| @ 10.1271 + | | | |@ 10.1272 + | |_| |@ 10.1273 + \__,_|@ 10.1274 + @@ 10.1275 +252 LATIN SMALL LETTER U WITH DIAERESIS 10.1276 + _ _ @ 10.1277 + (_) (_)@ 10.1278 + | | | |@ 10.1279 + | |_| |@ 10.1280 + \__,_|@ 10.1281 + @@ 10.1282 +253 LATIN SMALL LETTER Y WITH ACUTE 10.1283 + __ @ 10.1284 + _/_/_ @ 10.1285 + | | | |@ 10.1286 + | |_| |@ 10.1287 + \__, |@ 10.1288 + |___/ @@ 10.1289 +254 LATIN SMALL LETTER THORN 10.1290 + _ @ 10.1291 + | |__ @ 10.1292 + | '_ \ @ 10.1293 + | |_) |@ 10.1294 + | .__/ @ 10.1295 + |_| @@ 10.1296 +255 LATIN SMALL LETTER Y WITH DIAERESIS 10.1297 + _ _ @ 10.1298 + (_) (_)@ 10.1299 + | | | |@ 10.1300 + | |_| |@ 10.1301 + \__, |@ 10.1302 + |___/ @@ 10.1303 +0x0100 LATIN CAPITAL LETTER A WITH MACRON 10.1304 + ____ @ 10.1305 + /___/ @ 10.1306 + /_\ @ 10.1307 + / _ \ @ 10.1308 + /_/ \_\@ 10.1309 + @@ 10.1310 +0x0101 LATIN SMALL LETTER A WITH MACRON 10.1311 + ___ @ 10.1312 + /_ _/@ 10.1313 + / _` |@ 10.1314 + | (_| |@ 10.1315 + \__,_|@ 10.1316 + @@ 10.1317 +0x0102 LATIN CAPITAL LETTER A WITH BREVE 10.1318 + _ _ @ 10.1319 + \\_// @ 10.1320 + /_\ @ 10.1321 + / _ \ @ 10.1322 + /_/ \_\@ 10.1323 + @@ 10.1324 +0x0103 LATIN SMALL LETTER A WITH BREVE 10.1325 + \_/ @ 10.1326 + ___ @ 10.1327 + / _` |@ 10.1328 + | (_| |@ 10.1329 + \__,_|@ 10.1330 + @@ 10.1331 +0x0104 LATIN CAPITAL LETTER A WITH OGONEK 10.1332 + @ 10.1333 + _ @ 10.1334 + /_\ @ 10.1335 + / _ \ @ 10.1336 + /_/ \_\@ 10.1337 + (_(@@ 10.1338 +0x0105 LATIN SMALL LETTER A WITH OGONEK 10.1339 + @ 10.1340 + __ _ @ 10.1341 + / _` |@ 10.1342 + | (_| |@ 10.1343 + \__,_|@ 10.1344 + (_(@@ 10.1345 +0x0106 LATIN CAPITAL LETTER C WITH ACUTE 10.1346 + __ @ 10.1347 + _/_/ @ 10.1348 + / ___|@ 10.1349 + | |___ @ 10.1350 + \____|@ 10.1351 + @@ 10.1352 +0x0107 LATIN SMALL LETTER C WITH ACUTE 10.1353 + __ @ 10.1354 + /__/@ 10.1355 + / __|@ 10.1356 + | (__ @ 10.1357 + \___|@ 10.1358 + @@ 10.1359 +0x0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX 10.1360 + /\ @ 10.1361 + _//\\@ 10.1362 + / ___|@ 10.1363 + | |___ @ 10.1364 + \____|@ 10.1365 + @@ 10.1366 +0x0109 LATIN SMALL LETTER C WITH CIRCUMFLEX 10.1367 + /\ @ 10.1368 + /_\ @ 10.1369 + / __|@ 10.1370 + | (__ @ 10.1371 + \___|@ 10.1372 + @@ 10.1373 +0x010A LATIN CAPITAL LETTER C WITH DOT ABOVE 10.1374 + [] @ 10.1375 + ____ @ 10.1376 + / ___|@ 10.1377 + | |___ @ 10.1378 + \____|@ 10.1379 + @@ 10.1380 +0x010B LATIN SMALL LETTER C WITH DOT ABOVE 10.1381 + [] @ 10.1382 + ___ @ 10.1383 + / __|@ 10.1384 + | (__ @ 10.1385 + \___|@ 10.1386 + @@ 10.1387 +0x010C LATIN CAPITAL LETTER C WITH CARON 10.1388 + \\// @ 10.1389 + _\/_ @ 10.1390 + / ___|@ 10.1391 + | |___ @ 10.1392 + \____|@ 10.1393 + @@ 10.1394 +0x010D LATIN SMALL LETTER C WITH CARON 10.1395 + \\//@ 10.1396 + _\/ @ 10.1397 + / __|@ 10.1398 + | (__ @ 10.1399 + \___|@ 10.1400 + @@ 10.1401 +0x010E LATIN CAPITAL LETTER D WITH CARON 10.1402 + \\// @ 10.1403 + __\/ @ 10.1404 + | _ \ @ 10.1405 + | |_| |@ 10.1406 + |____/ @ 10.1407 + @@ 10.1408 +0x010F LATIN SMALL LETTER D WITH CARON 10.1409 + \/ _ @ 10.1410 + __| |@ 10.1411 + / _` |@ 10.1412 + | (_| |@ 10.1413 + \__,_|@ 10.1414 + @@ 10.1415 +0x0110 LATIN CAPITAL LETTER D WITH STROKE 10.1416 + ____ @ 10.1417 + |_ __ \ @ 10.1418 + /| |/ | |@ 10.1419 + /|_|/_| |@ 10.1420 + |_____/ @ 10.1421 + @@ 10.1422 +0x0111 LATIN SMALL LETTER D WITH STROKE 10.1423 + ---|@ 10.1424 + __| |@ 10.1425 + / _` |@ 10.1426 + | (_| |@ 10.1427 + \__,_|@ 10.1428 + @@ 10.1429 +0x0112 LATIN CAPITAL LETTER E WITH MACRON 10.1430 + ____ @ 10.1431 + /___/ @ 10.1432 + | ____|@ 10.1433 + | _|_ @ 10.1434 + |_____|@ 10.1435 + @@ 10.1436 +0x0113 LATIN SMALL LETTER E WITH MACRON 10.1437 + ____@ 10.1438 + /_ _/@ 10.1439 + / _ \ @ 10.1440 + | __/ @ 10.1441 + \___| @ 10.1442 + @@ 10.1443 +0x0114 LATIN CAPITAL LETTER E WITH BREVE 10.1444 + _ _ @ 10.1445 + \\_// @ 10.1446 + | ____|@ 10.1447 + | _|_ @ 10.1448 + |_____|@ 10.1449 + @@ 10.1450 +0x0115 LATIN SMALL LETTER E WITH BREVE 10.1451 + \\ //@ 10.1452 + -- @ 10.1453 + / _ \ @ 10.1454 + | __/ @ 10.1455 + \___| @ 10.1456 + @@ 10.1457 +0x0116 LATIN CAPITAL LETTER E WITH DOT ABOVE 10.1458 + [] @ 10.1459 + _____ @ 10.1460 + | ____|@ 10.1461 + | _|_ @ 10.1462 + |_____|@ 10.1463 + @@ 10.1464 +0x0117 LATIN SMALL LETTER E WITH DOT ABOVE 10.1465 + [] @ 10.1466 + __ @ 10.1467 + / _ \@ 10.1468 + | __/@ 10.1469 + \___|@ 10.1470 + @@ 10.1471 +0x0118 LATIN CAPITAL LETTER E WITH OGONEK 10.1472 + @ 10.1473 + _____ @ 10.1474 + | ____|@ 10.1475 + | _|_ @ 10.1476 + |_____|@ 10.1477 + (__(@@ 10.1478 +0x0119 LATIN SMALL LETTER E WITH OGONEK 10.1479 + @ 10.1480 + ___ @ 10.1481 + / _ \@ 10.1482 + | __/@ 10.1483 + \___|@ 10.1484 + (_(@@ 10.1485 +0x011A LATIN CAPITAL LETTER E WITH CARON 10.1486 + \\// @ 10.1487 + __\/_ @ 10.1488 + | ____|@ 10.1489 + | _|_ @ 10.1490 + |_____|@ 10.1491 + @@ 10.1492 +0x011B LATIN SMALL LETTER E WITH CARON 10.1493 + \\//@ 10.1494 + \/ @ 10.1495 + / _ \@ 10.1496 + | __/@ 10.1497 + \___|@ 10.1498 + @@ 10.1499 +0x011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX 10.1500 + _/\_ @ 10.1501 + / ___|@ 10.1502 + | | _ @ 10.1503 + | |_| |@ 10.1504 + \____|@ 10.1505 + @@ 10.1506 +0x011D LATIN SMALL LETTER G WITH CIRCUMFLEX 10.1507 + /\ @ 10.1508 + _/_ \@ 10.1509 + / _` |@ 10.1510 + | (_| |@ 10.1511 + \__, |@ 10.1512 + |___/ @@ 10.1513 +0x011E LATIN CAPITAL LETTER G WITH BREVE 10.1514 + _\/_ @ 10.1515 + / ___|@ 10.1516 + | | _ @ 10.1517 + | |_| |@ 10.1518 + \____|@ 10.1519 + @@ 10.1520 +0x011F LATIN SMALL LETTER G WITH BREVE 10.1521 + \___/ @ 10.1522 + __ _ @ 10.1523 + / _` |@ 10.1524 + | (_| |@ 10.1525 + \__, |@ 10.1526 + |___/ @@ 10.1527 +0x0120 LATIN CAPITAL LETTER G WITH DOT ABOVE 10.1528 + _[]_ @ 10.1529 + / ___|@ 10.1530 + | | _ @ 10.1531 + | |_| |@ 10.1532 + \____|@ 10.1533 + @@ 10.1534 +0x0121 LATIN SMALL LETTER G WITH DOT ABOVE 10.1535 + [] @ 10.1536 + __ _ @ 10.1537 + / _` |@ 10.1538 + | (_| |@ 10.1539 + \__, |@ 10.1540 + |___/ @@ 10.1541 +0x0122 LATIN CAPITAL LETTER G WITH CEDILLA 10.1542 + ____ @ 10.1543 + / ___|@ 10.1544 + | | _ @ 10.1545 + | |_| |@ 10.1546 + \____|@ 10.1547 + )__) @@ 10.1548 +0x0123 LATIN SMALL LETTER G WITH CEDILLA 10.1549 + @ 10.1550 + __ _ @ 10.1551 + / _` |@ 10.1552 + | (_| |@ 10.1553 + \__, |@ 10.1554 + |_))))@@ 10.1555 +0x0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX 10.1556 + _/ \_ @ 10.1557 + | / \ |@ 10.1558 + | |_| |@ 10.1559 + | _ |@ 10.1560 + |_| |_|@ 10.1561 + @@ 10.1562 +0x0125 LATIN SMALL LETTER H WITH CIRCUMFLEX 10.1563 + _ /\ @ 10.1564 + | |//\ @ 10.1565 + | '_ \ @ 10.1566 + | | | |@ 10.1567 + |_| |_|@ 10.1568 + @@ 10.1569 +0x0126 LATIN CAPITAL LETTER H WITH STROKE 10.1570 + _ _ @ 10.1571 + | |=| |@ 10.1572 + | |_| |@ 10.1573 + | _ |@ 10.1574 + |_| |_|@ 10.1575 + @@ 10.1576 +0x0127 LATIN SMALL LETTER H WITH STROKE 10.1577 + _ @ 10.1578 + |=|__ @ 10.1579 + | '_ \ @ 10.1580 + | | | |@ 10.1581 + |_| |_|@ 10.1582 + @@ 10.1583 +0x0128 LATIN CAPITAL LETTER I WITH TILDE 10.1584 + /\//@ 10.1585 + |_ _|@ 10.1586 + | | @ 10.1587 + | | @ 10.1588 + |___|@ 10.1589 + @@ 10.1590 +0x0129 LATIN SMALL LETTER I WITH TILDE 10.1591 + @ 10.1592 + /\/@ 10.1593 + | |@ 10.1594 + | |@ 10.1595 + |_|@ 10.1596 + @@ 10.1597 +0x012A LATIN CAPITAL LETTER I WITH MACRON 10.1598 + /___/@ 10.1599 + |_ _|@ 10.1600 + | | @ 10.1601 + | | @ 10.1602 + |___|@ 10.1603 + @@ 10.1604 +0x012B LATIN SMALL LETTER I WITH MACRON 10.1605 + ____@ 10.1606 + /___/@ 10.1607 + | | @ 10.1608 + | | @ 10.1609 + |_| @ 10.1610 + @@ 10.1611 +0x012C LATIN CAPITAL LETTER I WITH BREVE 10.1612 + \__/@ 10.1613 + |_ _|@ 10.1614 + | | @ 10.1615 + | | @ 10.1616 + |___|@ 10.1617 + @@ 10.1618 +0x012D LATIN SMALL LETTER I WITH BREVE 10.1619 + @ 10.1620 + \_/@ 10.1621 + | |@ 10.1622 + | |@ 10.1623 + |_|@ 10.1624 + @@ 10.1625 +0x012E LATIN CAPITAL LETTER I WITH OGONEK 10.1626 + ___ @ 10.1627 + |_ _|@ 10.1628 + | | @ 10.1629 + | | @ 10.1630 + |___|@ 10.1631 + (__(@@ 10.1632 +0x012F LATIN SMALL LETTER I WITH OGONEK 10.1633 + _ @ 10.1634 + (_) @ 10.1635 + | | @ 10.1636 + | | @ 10.1637 + |_|_@ 10.1638 + (_(@@ 10.1639 +0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE 10.1640 + _[] @ 10.1641 + |_ _|@ 10.1642 + | | @ 10.1643 + | | @ 10.1644 + |___|@ 10.1645 + @@ 10.1646 +0x0131 LATIN SMALL LETTER DOTLESS I 10.1647 + @ 10.1648 + _ @ 10.1649 + | |@ 10.1650 + | |@ 10.1651 + |_|@ 10.1652 + @@ 10.1653 +0x0132 LATIN CAPITAL LIGATURE IJ 10.1654 + ___ _ @ 10.1655 + |_ _|| |@ 10.1656 + | | | |@ 10.1657 + | |_| |@ 10.1658 + |__|__/ @ 10.1659 + @@ 10.1660 +0x0133 LATIN SMALL LIGATURE IJ 10.1661 + _ _ @ 10.1662 + (_) (_)@ 10.1663 + | | | |@ 10.1664 + | | | |@ 10.1665 + |_|_/ |@ 10.1666 + |__/ @@ 10.1667 +0x0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX 10.1668 + /\ @ 10.1669 + /_\|@ 10.1670 + _ | | @ 10.1671 + | |_| | @ 10.1672 + \___/ @ 10.1673 + @@ 10.1674 +0x0135 LATIN SMALL LETTER J WITH CIRCUMFLEX 10.1675 + /\@ 10.1676 + /_\@ 10.1677 + | |@ 10.1678 + | |@ 10.1679 + _/ |@ 10.1680 + |__/ @@ 10.1681 +0x0136 LATIN CAPITAL LETTER K WITH CEDILLA 10.1682 + _ _ @ 10.1683 + | |/ / @ 10.1684 + | ' / @ 10.1685 + | . \ @ 10.1686 + |_|\_\ @ 10.1687 + )__)@@ 10.1688 +0x0137 LATIN SMALL LETTER K WITH CEDILLA 10.1689 + _ @ 10.1690 + | | __@ 10.1691 + | |/ /@ 10.1692 + | < @ 10.1693 + |_|\_\@ 10.1694 + )_)@@ 10.1695 +0x0138 LATIN SMALL LETTER KRA 10.1696 + @ 10.1697 + _ __ @ 10.1698 + | |/ \@ 10.1699 + | < @ 10.1700 + |_|\_\@ 10.1701 + @@ 10.1702 +0x0139 LATIN CAPITAL LETTER L WITH ACUTE 10.1703 + _ //@ 10.1704 + | | // @ 10.1705 + | | @ 10.1706 + | |___ @ 10.1707 + |_____|@ 10.1708 + @@ 10.1709 +0x013A LATIN SMALL LETTER L WITH ACUTE 10.1710 + //@ 10.1711 + | |@ 10.1712 + | |@ 10.1713 + | |@ 10.1714 + |_|@ 10.1715 + @@ 10.1716 +0x013B LATIN CAPITAL LETTER L WITH CEDILLA 10.1717 + _ @ 10.1718 + | | @ 10.1719 + | | @ 10.1720 + | |___ @ 10.1721 + |_____|@ 10.1722 + )__)@@ 10.1723 +0x013C LATIN SMALL LETTER L WITH CEDILLA 10.1724 + _ @ 10.1725 + | | @ 10.1726 + | | @ 10.1727 + | | @ 10.1728 + |_| @ 10.1729 + )_)@@ 10.1730 +0x013D LATIN CAPITAL LETTER L WITH CARON 10.1731 + _ \\//@ 10.1732 + | | \/ @ 10.1733 + | | @ 10.1734 + | |___ @ 10.1735 + |_____|@ 10.1736 + @@ 10.1737 +0x013E LATIN SMALL LETTER L WITH CARON 10.1738 + _ \\//@ 10.1739 + | | \/ @ 10.1740 + | | @ 10.1741 + | | @ 10.1742 + |_| @ 10.1743 + @@ 10.1744 +0x013F LATIN CAPITAL LETTER L WITH MIDDLE DOT 10.1745 + _ @ 10.1746 + | | @ 10.1747 + | | [] @ 10.1748 + | |___ @ 10.1749 + |_____|@ 10.1750 + @@ 10.1751 +0x0140 LATIN SMALL LETTER L WITH MIDDLE DOT 10.1752 + _ @ 10.1753 + | | @ 10.1754 + | | []@ 10.1755 + | | @ 10.1756 + |_| @ 10.1757 + @@ 10.1758 +0x0141 LATIN CAPITAL LETTER L WITH STROKE 10.1759 + __ @ 10.1760 + | // @ 10.1761 + |//| @ 10.1762 + // |__ @ 10.1763 + |_____|@ 10.1764 + @@ 10.1765 +0x0142 LATIN SMALL LETTER L WITH STROKE 10.1766 + _ @ 10.1767 + | |@ 10.1768 + |//@ 10.1769 + //|@ 10.1770 + |_|@ 10.1771 + @@ 10.1772 +0x0143 LATIN CAPITAL LETTER N WITH ACUTE 10.1773 + _/ /_ @ 10.1774 + | \ | |@ 10.1775 + | \| |@ 10.1776 + | |\ |@ 10.1777 + |_| \_|@ 10.1778 + @@ 10.1779 +0x0144 LATIN SMALL LETTER N WITH ACUTE 10.1780 + _ @ 10.1781 + _ /_/ @ 10.1782 + | '_ \ @ 10.1783 + | | | |@ 10.1784 + |_| |_|@ 10.1785 + @@ 10.1786 +0x0145 LATIN CAPITAL LETTER N WITH CEDILLA 10.1787 + _ _ @ 10.1788 + | \ | |@ 10.1789 + | \| |@ 10.1790 + | |\ |@ 10.1791 + |_| \_|@ 10.1792 + )_) @@ 10.1793 +0x0146 LATIN SMALL LETTER N WITH CEDILLA 10.1794 + @ 10.1795 + _ __ @ 10.1796 + | '_ \ @ 10.1797 + | | | |@ 10.1798 + |_| |_|@ 10.1799 + )_) @@ 10.1800 +0x0147 LATIN CAPITAL LETTER N WITH CARON 10.1801 + _\/ _ @ 10.1802 + | \ | |@ 10.1803 + | \| |@ 10.1804 + | |\ |@ 10.1805 + |_| \_|@ 10.1806 + @@ 10.1807 +0x0148 LATIN SMALL LETTER N WITH CARON 10.1808 + \\// @ 10.1809 + _\/_ @ 10.1810 + | '_ \ @ 10.1811 + | | | |@ 10.1812 + |_| |_|@ 10.1813 + @@ 10.1814 +0x0149 LATIN SMALL LETTER N PRECEDED BY APOSTROPHE 10.1815 + @ 10.1816 + _ __ @ 10.1817 + ( )| '_\ @ 10.1818 + |/| | | |@ 10.1819 + |_| |_|@ 10.1820 + @@ 10.1821 +0x014A LATIN CAPITAL LETTER ENG 10.1822 + _ _ @ 10.1823 + | \ | |@ 10.1824 + | \| |@ 10.1825 + | |\ |@ 10.1826 + |_| \ |@ 10.1827 + )_)@@ 10.1828 +0x014B LATIN SMALL LETTER ENG 10.1829 + _ __ @ 10.1830 + | '_ \ @ 10.1831 + | | | |@ 10.1832 + |_| | |@ 10.1833 + | |@ 10.1834 + |__ @@ 10.1835 +0x014C LATIN CAPITAL LETTER O WITH MACRON 10.1836 + ____ @ 10.1837 + /_ _/ @ 10.1838 + / _ \ @ 10.1839 + | (_) |@ 10.1840 + \___/ @ 10.1841 + @@ 10.1842 +0x014D LATIN SMALL LETTER O WITH MACRON 10.1843 + ____ @ 10.1844 + /_ _/ @ 10.1845 + / _ \ @ 10.1846 + | (_) |@ 10.1847 + \___/ @ 10.1848 + @@ 10.1849 +0x014E LATIN CAPITAL LETTER O WITH BREVE 10.1850 + \ / @ 10.1851 + _-_ @ 10.1852 + / _ \ @ 10.1853 + | |_| |@ 10.1854 + \___/ @ 10.1855 + @@ 10.1856 +0x014F LATIN SMALL LETTER O WITH BREVE 10.1857 + \ / @ 10.1858 + _-_ @ 10.1859 + / _ \ @ 10.1860 + | |_| |@ 10.1861 + \___/ @ 10.1862 + @@ 10.1863 +0x0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 10.1864 + ___ @ 10.1865 + /_/_/@ 10.1866 + / _ \ @ 10.1867 + | |_| |@ 10.1868 + \___/ @ 10.1869 + @@ 10.1870 +0x0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE 10.1871 + ___ @ 10.1872 + /_/_/@ 10.1873 + / _ \ @ 10.1874 + | |_| |@ 10.1875 + \___/ @ 10.1876 + @@ 10.1877 +0x0152 LATIN CAPITAL LIGATURE OE 10.1878 + ___ ___ @ 10.1879 + / _ \| __|@ 10.1880 + | | | | | @ 10.1881 + | |_| | |__@ 10.1882 + \___/|____@ 10.1883 + @@ 10.1884 +0x0153 LATIN SMALL LIGATURE OE 10.1885 + @ 10.1886 + ___ ___ @ 10.1887 + / _ \ / _ \@ 10.1888 + | (_) | __/@ 10.1889 + \___/ \___|@ 10.1890 + @@ 10.1891 +0x0154 LATIN CAPITAL LETTER R WITH ACUTE 10.1892 + _/_/ @ 10.1893 + | _ \ @ 10.1894 + | |_) |@ 10.1895 + | _ < @ 10.1896 + |_| \_\@ 10.1897 + @@ 10.1898 +0x0155 LATIN SMALL LETTER R WITH ACUTE 10.1899 + __@ 10.1900 + _ /_/@ 10.1901 + | '__|@ 10.1902 + | | @ 10.1903 + |_| @ 10.1904 + @@ 10.1905 +0x0156 LATIN CAPITAL LETTER R WITH CEDILLA 10.1906 + ____ @ 10.1907 + | _ \ @ 10.1908 + | |_) |@ 10.1909 + | _ < @ 10.1910 + |_| \_\@ 10.1911 + )_) @@ 10.1912 +0x0157 LATIN SMALL LETTER R WITH CEDILLA 10.1913 + @ 10.1914 + _ __ @ 10.1915 + | '__|@ 10.1916 + | | @ 10.1917 + |_| @ 10.1918 + )_) @@ 10.1919 +0x0158 LATIN CAPITAL LETTER R WITH CARON 10.1920 + _\_/ @ 10.1921 + | _ \ @ 10.1922 + | |_) |@ 10.1923 + | _ < @ 10.1924 + |_| \_\@ 10.1925 + @@ 10.1926 +0x0159 LATIN SMALL LETTER R WITH CARON 10.1927 + \\// @ 10.1928 + _\/_ @ 10.1929 + | '__|@ 10.1930 + | | @ 10.1931 + |_| @ 10.1932 + @@ 10.1933 +0x015A LATIN CAPITAL LETTER S WITH ACUTE 10.1934 + _/_/ @ 10.1935 + / ___| @ 10.1936 + \___ \ @ 10.1937 + ___) |@ 10.1938 + |____/ @ 10.1939 + @@ 10.1940 +0x015B LATIN SMALL LETTER S WITH ACUTE 10.1941 + __@ 10.1942 + _/_/@ 10.1943 + / __|@ 10.1944 + \__ \@ 10.1945 + |___/@ 10.1946 + @@ 10.1947 +0x015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX 10.1948 + _/\_ @ 10.1949 + / ___| @ 10.1950 + \___ \ @ 10.1951 + ___) |@ 10.1952 + |____/ @ 10.1953 + @@ 10.1954 +0x015D LATIN SMALL LETTER S WITH CIRCUMFLEX 10.1955 + @ 10.1956 + /_\_@ 10.1957 + / __|@ 10.1958 + \__ \@ 10.1959 + |___/@ 10.1960 + @@ 10.1961 +0x015E LATIN CAPITAL LETTER S WITH CEDILLA 10.1962 + ____ @ 10.1963 + / ___| @ 10.1964 + \___ \ @ 10.1965 + ___) |@ 10.1966 + |____/ @ 10.1967 + )__)@@ 10.1968 +0x015F LATIN SMALL LETTER S WITH CEDILLA 10.1969 + @ 10.1970 + ___ @ 10.1971 + / __|@ 10.1972 + \__ \@ 10.1973 + |___/@ 10.1974 + )_)@@ 10.1975 +0x0160 LATIN CAPITAL LETTER S WITH CARON 10.1976 + _\_/ @ 10.1977 + / ___| @ 10.1978 + \___ \ @ 10.1979 + ___) |@ 10.1980 + |____/ @ 10.1981 + @@ 10.1982 +0x0161 LATIN SMALL LETTER S WITH CARON 10.1983 + \\//@ 10.1984 + _\/ @ 10.1985 + / __|@ 10.1986 + \__ \@ 10.1987 + |___/@ 10.1988 + @@ 10.1989 +0x0162 LATIN CAPITAL LETTER T WITH CEDILLA 10.1990 + _____ @ 10.1991 + |_ _|@ 10.1992 + | | @ 10.1993 + | | @ 10.1994 + |_| @ 10.1995 + )__)@@ 10.1996 +0x0163 LATIN SMALL LETTER T WITH CEDILLA 10.1997 + _ @ 10.1998 + | |_ @ 10.1999 + | __|@ 10.2000 + | |_ @ 10.2001 + \__|@ 10.2002 + )_)@@ 10.2003 +0x0164 LATIN CAPITAL LETTER T WITH CARON 10.2004 + _____ @ 10.2005 + |_ _|@ 10.2006 + | | @ 10.2007 + | | @ 10.2008 + |_| @ 10.2009 + @@ 10.2010 +0x0165 LATIN SMALL LETTER T WITH CARON 10.2011 + \/ @ 10.2012 + | |_ @ 10.2013 + | __|@ 10.2014 + | |_ @ 10.2015 + \__|@ 10.2016 + @@ 10.2017 +0x0166 LATIN CAPITAL LETTER T WITH STROKE 10.2018 + _____ @ 10.2019 + |_ _|@ 10.2020 + | | @ 10.2021 + -|-|- @ 10.2022 + |_| @ 10.2023 + @@ 10.2024 +0x0167 LATIN SMALL LETTER T WITH STROKE 10.2025 + _ @ 10.2026 + | |_ @ 10.2027 + | __|@ 10.2028 + |-|_ @ 10.2029 + \__|@ 10.2030 + @@ 10.2031 +0x0168 LATIN CAPITAL LETTER U WITH TILDE 10.2032 + @ 10.2033 + _/\/_ @ 10.2034 + | | | |@ 10.2035 + | |_| |@ 10.2036 + \___/ @ 10.2037 + @@ 10.2038 +0x0169 LATIN SMALL LETTER U WITH TILDE 10.2039 + @ 10.2040 + _/\/_ @ 10.2041 + | | | |@ 10.2042 + | |_| |@ 10.2043 + \__,_|@ 10.2044 + @@ 10.2045 +0x016A LATIN CAPITAL LETTER U WITH MACRON 10.2046 + ____ @ 10.2047 + /__ _/@ 10.2048 + | | | |@ 10.2049 + | |_| |@ 10.2050 + \___/ @ 10.2051 + @@ 10.2052 +0x016B LATIN SMALL LETTER U WITH MACRON 10.2053 + ____ @ 10.2054 + / _ /@ 10.2055 + | | | |@ 10.2056 + | |_| |@ 10.2057 + \__,_|@ 10.2058 + @@ 10.2059 +0x016C LATIN CAPITAL LETTER U WITH BREVE 10.2060 + @ 10.2061 + \_/_ @ 10.2062 + | | | |@ 10.2063 + | |_| |@ 10.2064 + \____|@ 10.2065 + @@ 10.2066 +0x016D LATIN SMALL LETTER U WITH BREVE 10.2067 + @ 10.2068 + \_/_ @ 10.2069 + | | | |@ 10.2070 + | |_| |@ 10.2071 + \__,_|@ 10.2072 + @@ 10.2073 +0x016E LATIN CAPITAL LETTER U WITH RING ABOVE 10.2074 + O @ 10.2075 + __ _ @ 10.2076 + | | | |@ 10.2077 + | |_| |@ 10.2078 + \___/ @ 10.2079 + @@ 10.2080 +0x016F LATIN SMALL LETTER U WITH RING ABOVE 10.2081 + O @ 10.2082 + __ __ @ 10.2083 + | | | |@ 10.2084 + | |_| |@ 10.2085 + \__,_|@ 10.2086 + @@ 10.2087 +0x0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 10.2088 + -- --@ 10.2089 + /_//_/@ 10.2090 + | | | |@ 10.2091 + | |_| |@ 10.2092 + \___/ @ 10.2093 + @@ 10.2094 +0x0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE 10.2095 + ____@ 10.2096 + _/_/_/@ 10.2097 + | | | |@ 10.2098 + | |_| |@ 10.2099 + \__,_|@ 10.2100 + @@ 10.2101 +0x0172 LATIN CAPITAL LETTER U WITH OGONEK 10.2102 + _ _ @ 10.2103 + | | | |@ 10.2104 + | | | |@ 10.2105 + | |_| |@ 10.2106 + \___/ @ 10.2107 + (__(@@ 10.2108 +0x0173 LATIN SMALL LETTER U WITH OGONEK 10.2109 + @ 10.2110 + _ _ @ 10.2111 + | | | |@ 10.2112 + | |_| |@ 10.2113 + \__,_|@ 10.2114 + (_(@@ 10.2115 +0x0174 LATIN CAPITAL LETTER W WITH CIRCUMFLEX 10.2116 + __ /\ __@ 10.2117 + \ \ //\\/ /@ 10.2118 + \ \ /\ / / @ 10.2119 + \ V V / @ 10.2120 + \_/\_/ @ 10.2121 + @@ 10.2122 +0x0175 LATIN SMALL LETTER W WITH CIRCUMFLEX 10.2123 + /\ @ 10.2124 + __ //\\__@ 10.2125 + \ \ /\ / /@ 10.2126 + \ V V / @ 10.2127 + \_/\_/ @ 10.2128 + @@ 10.2129 +0x0176 LATIN CAPITAL LETTER Y WITH CIRCUMFLEX 10.2130 + /\ @ 10.2131 + __//\\ @ 10.2132 + \ \ / /@ 10.2133 + \ V / @ 10.2134 + |_| @ 10.2135 + @@ 10.2136 +0x0177 LATIN SMALL LETTER Y WITH CIRCUMFLEX 10.2137 + /\ @ 10.2138 + //\\ @ 10.2139 + | | | |@ 10.2140 + | |_| |@ 10.2141 + \__, |@ 10.2142 + |___/ @@ 10.2143 +0x0178 LATIN CAPITAL LETTER Y WITH DIAERESIS 10.2144 + [] []@ 10.2145 + __ _@ 10.2146 + \ \ / /@ 10.2147 + \ V / @ 10.2148 + |_| @ 10.2149 + @@ 10.2150 +0x0179 LATIN CAPITAL LETTER Z WITH ACUTE 10.2151 + __/_/@ 10.2152 + |__ /@ 10.2153 + / / @ 10.2154 + / /_ @ 10.2155 + /____|@ 10.2156 + @@ 10.2157 +0x017A LATIN SMALL LETTER Z WITH ACUTE 10.2158 + _ @ 10.2159 + _/_/@ 10.2160 + |_ /@ 10.2161 + / / @ 10.2162 + /___|@ 10.2163 + @@ 10.2164 +0x017B LATIN CAPITAL LETTER Z WITH DOT ABOVE 10.2165 + __[]_@ 10.2166 + |__ /@ 10.2167 + / / @ 10.2168 + / /_ @ 10.2169 + /____|@ 10.2170 + @@ 10.2171 +0x017C LATIN SMALL LETTER Z WITH DOT ABOVE 10.2172 + [] @ 10.2173 + ____@ 10.2174 + |_ /@ 10.2175 + / / @ 10.2176 + /___|@ 10.2177 + @@ 10.2178 +0x017D LATIN CAPITAL LETTER Z WITH CARON 10.2179 + _\_/_@ 10.2180 + |__ /@ 10.2181 + / / @ 10.2182 + / /_ @ 10.2183 + /____|@ 10.2184 + @@ 10.2185 +0x017E LATIN SMALL LETTER Z WITH CARON 10.2186 + \\//@ 10.2187 + _\/_@ 10.2188 + |_ /@ 10.2189 + / / @ 10.2190 + /___|@ 10.2191 + @@ 10.2192 +0x017F LATIN SMALL LETTER LONG S 10.2193 + __ @ 10.2194 + / _|@ 10.2195 + |-| | @ 10.2196 + |-| | @ 10.2197 + |_| @ 10.2198 + @@ 10.2199 +0x02C7 CARON 10.2200 + \\//@ 10.2201 + \/ @ 10.2202 + $@ 10.2203 + $@ 10.2204 + $@ 10.2205 + $@@ 10.2206 +0x02D8 BREVE 10.2207 + \\_//@ 10.2208 + \_/ @ 10.2209 + $@ 10.2210 + $@ 10.2211 + $@ 10.2212 + $@@ 10.2213 +0x02D9 DOT ABOVE 10.2214 + []@ 10.2215 + $@ 10.2216 + $@ 10.2217 + $@ 10.2218 + $@ 10.2219 + $@@ 10.2220 +0x02DB OGONEK 10.2221 + $@ 10.2222 + $@ 10.2223 + $@ 10.2224 + $@ 10.2225 + $@ 10.2226 + )_) @@ 10.2227 +0x02DD DOUBLE ACUTE ACCENT 10.2228 + _ _ @ 10.2229 + /_/_/@ 10.2230 + $@ 10.2231 + $@ 10.2232 + $@ 10.2233 + $@@