aboutsummaryrefslogtreecommitdiffstats
path: root/xen/tools
diff options
context:
space:
mode:
authorkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2004-07-10 14:55:46 +0000
committerkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2004-07-10 14:55:46 +0000
commit7fecdc557871231862d4ec6974e7fb58ab598bc7 (patch)
tree4521dd6c86b685338058c6aefdebd1b15ec3015d /xen/tools
parent405da05b93269b1c412fab1d9ee181df1119bfd8 (diff)
downloadxen-7fecdc557871231862d4ec6974e7fb58ab598bc7.tar.gz
xen-7fecdc557871231862d4ec6974e7fb58ab598bc7.tar.bz2
xen-7fecdc557871231862d4ec6974e7fb58ab598bc7.zip
bitkeeper revision 1.1062.1.1 (40f00372K2jgGqY_Vwj24Lvaf0UqRw)
Rewritten bootstrap Elf-header creation to allow encapsulation of x86-64 code for 32-bit bootloaders.
Diffstat (limited to 'xen/tools')
-rw-r--r--xen/tools/Makefile14
-rw-r--r--xen/tools/elf-reloc.c115
-rw-r--r--xen/tools/figlet/LICENSE111
-rw-r--r--xen/tools/figlet/Makefile8
-rw-r--r--xen/tools/figlet/README9
-rw-r--r--xen/tools/figlet/figlet.c2075
-rw-r--r--xen/tools/figlet/xen.flf2230
7 files changed, 0 insertions, 4562 deletions
diff --git a/xen/tools/Makefile b/xen/tools/Makefile
deleted file mode 100644
index a143ffdcbf..0000000000
--- a/xen/tools/Makefile
+++ /dev/null
@@ -1,14 +0,0 @@
-
-all: figlet elf-reloc
-
-figlet:
- $(MAKE) -C figlet
-
-elf-reloc: elf-reloc.c
- gcc -O2 -Wall -o $@ $<
-
-clean:
- rm -f elf-reloc *~ core
- $(MAKE) -C figlet clean
-
-.PHONY: figlet
diff --git a/xen/tools/elf-reloc.c b/xen/tools/elf-reloc.c
deleted file mode 100644
index e2a5860e27..0000000000
--- a/xen/tools/elf-reloc.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/******************************************************************************
- * elf-reloc.c
- *
- * Usage: elf-reloc <old base> <new base> <image>
- *
- * Relocates <image> from <old base> address to <new base> address by
- * frobbing the Elf headers. Segment contents are unmodified.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-typedef unsigned long Elf32_Addr;
-typedef unsigned short Elf32_Half;
-typedef unsigned long Elf32_Off;
-typedef unsigned long Elf32_Word;
-
-typedef struct {
- unsigned char e_ident[16];
- Elf32_Half e_type;
- Elf32_Half e_machine;
- Elf32_Word e_version;
- Elf32_Addr e_entry;
- Elf32_Off e_phoff;
- Elf32_Off e_shoff;
- Elf32_Word e_flags;
- Elf32_Half e_ehsize;
- Elf32_Half e_phentsize;
- Elf32_Half e_phnum;
- Elf32_Half e_shentsize;
- Elf32_Half e_shnum;
- Elf32_Half e_shstrndx;
-} Elf32_Ehdr;
-
-typedef struct {
- Elf32_Word p_type;
- Elf32_Off p_offset;
- Elf32_Addr p_vaddr;
- Elf32_Addr p_paddr;
- Elf32_Word p_filesz;
- Elf32_Word p_memsz;
- Elf32_Word p_flags;
- Elf32_Word p_align;
-} Elf32_Phdr;
-
-#define offsetof(_f,_p) ((unsigned long)&(((_p *)0)->_f))
-
-
-/* Add @reloc_distance to address at offset @off in file @fp. */
-void reloc(FILE *fp, long off, unsigned long reloc_distance)
-{
- unsigned long base;
- fseek(fp, off, SEEK_SET);
- fread(&base, sizeof(base), 1, fp);
- base += reloc_distance;
- fseek(fp, off, SEEK_SET);
- fwrite(&base, sizeof(base), 1, fp);
-
-}
-
-
-int main(int argc, char **argv)
-{
- unsigned long old_base, new_base, reloc_distance;
- long virt_section, phys_section;
- char *image_name;
- FILE *fp;
- Elf32_Off phoff;
- Elf32_Half phnum, phentsz;
- int i;
-
- if ( argc != 4 )
- {
- fprintf(stderr, "Usage: elf-reloc <old base> <new base> <image>\n");
- return(1);
- }
-
- old_base = strtoul(argv[1], NULL, 16);
- new_base = strtoul(argv[2], NULL, 16);
- image_name = argv[3];
-
- fp = fopen(image_name, "rb+");
- if ( !fp )
- {
- fprintf(stderr, "Failed to load image!\n");
- return(1);
- }
-
- reloc_distance = new_base - old_base;
-
- /* First frob the entry address. */
- reloc(fp, offsetof(e_entry, Elf32_Ehdr), reloc_distance);
-
- fseek(fp, offsetof(e_phoff, Elf32_Ehdr), SEEK_SET);
- fread(&phoff, sizeof(phoff), 1, fp);
- fseek(fp, offsetof(e_phnum, Elf32_Ehdr), SEEK_SET);
- fread(&phnum, sizeof(phnum), 1, fp);
- fseek(fp, offsetof(e_phentsize, Elf32_Ehdr), SEEK_SET);
- fread(&phentsz, sizeof(phentsz), 1, fp);
-
- virt_section = (long)phoff + offsetof(p_vaddr, Elf32_Phdr);
- phys_section = (long)phoff + offsetof(p_paddr, Elf32_Phdr);
- for ( i = 0; i < phnum; i++ )
- {
- reloc(fp, phys_section, reloc_distance);
- reloc(fp, virt_section, reloc_distance);
- phys_section += phentsz;
- virt_section += phentsz;
- }
-
- fclose(fp);
-
- return(0);
-}
diff --git a/xen/tools/figlet/LICENSE b/xen/tools/figlet/LICENSE
deleted file mode 100644
index 59fd244536..0000000000
--- a/xen/tools/figlet/LICENSE
+++ /dev/null
@@ -1,111 +0,0 @@
-http://www.sunsite.unc.edu/pub/Linux/LICENSES/artistic.license
-
- The "Artistic License"
-
- Preamble
-
-The intent of this document is to state the conditions under which a
-Package may be copied, such that the Copyright Holder maintains some
-semblance of artistic control over the development of the package,
-while giving the users of the package the right to use and distribute
-the Package in a more-or-less customary fashion, plus the right to make
-reasonable modifications.
-
-Definitions:
-
- "Package" refers to the collection of files distributed by the
- Copyright Holder, and derivatives of that collection of files
- created through textual modification.
-
- "Standard Version" refers to such a Package if it has not been
- modified, or has been modified in accordance with the wishes
- of the Copyright Holder.
-
- "Copyright Holder" is whoever is named in the copyright or
- copyrights for the package.
-
- "You" is you, if you're thinking about copying or distributing
- this Package.
-
- "Reasonable copying fee" is whatever you can justify on the
- basis of media cost, duplication charges, time of people involved,
- and so on. (You will not be required to justify it to the
- Copyright Holder, but only to the computing community at large
- as a market that must bear the fee.)
-
- "Freely Available" means that no fee is charged for the item
- itself, though there may be fees involved in handling the item.
- It also means that recipients of the item may redistribute it
- under the same conditions they received it.
-
-1. You may make and give away verbatim copies of the source form of the
-Standard Version of this Package without restriction, provided that you
-duplicate all of the original copyright notices and associated disclaimers.
-
-2. You may apply bug fixes, portability fixes and other modifications
-derived from the Public Domain or from the Copyright Holder. A Package
-modified in such a way shall still be considered the Standard Version.
-
-3. You may otherwise modify your copy of this Package in any way, provided
-that you insert a prominent notice in each changed file stating how and
-when you changed that file, and provided that you do at least ONE of the
-following:
-
- a) place your modifications in the Public Domain or otherwise make them
- Freely Available, such as by posting said modifications to Usenet or
- an equivalent medium, or placing the modifications on a major archive
- site such as ftp.uu.net, or by allowing the Copyright Holder to include
- your modifications in the Standard Version of the Package.
-
- b) use the modified Package only within your corporation or organization.
-
- c) rename any non-standard executables so the names do not conflict
- with standard executables, which must also be provided, and provide
- a separate manual page for each non-standard executable that clearly
- documents how it differs from the Standard Version.
-
- d) make other distribution arrangements with the Copyright Holder.
-
-4. You may distribute the programs of this Package in object code or
-executable form, provided that you do at least ONE of the following:
-
- a) distribute a Standard Version of the executables and library files,
- together with instructions (in the manual page or equivalent) on where
- to get the Standard Version.
-
- b) accompany the distribution with the machine-readable source of
- the Package with your modifications.
-
- c) accompany any non-standard executables with their corresponding
- Standard Version executables, giving the non-standard executables
- non-standard names, and clearly documenting the differences in manual
- pages (or equivalent), together with instructions on where to get
- the Standard Version.
-
- d) make other distribution arrangements with the Copyright Holder.
-
-5. You may charge a reasonable copying fee for any distribution of this
-Package. You may charge any fee you choose for support of this Package.
-You may not charge a fee for this Package itself. However,
-you may distribute this Package in aggregate with other (possibly
-commercial) programs as part of a larger (possibly commercial) software
-distribution provided that you do not advertise this Package as a
-product of your own.
-
-6. The scripts and library files supplied as input to or produced as
-output from the programs of this Package do not automatically fall
-under the copyright of this Package, but belong to whomever generated
-them, and may be sold commercially, and may be aggregated with this
-Package.
-
-7. C or perl subroutines supplied by you and linked into this Package
-shall not be considered part of this Package.
-
-8. The name of the Copyright Holder may not be used to endorse or promote
-products derived from this software without specific prior written permission.
-
-9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
-IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-
- The End
diff --git a/xen/tools/figlet/Makefile b/xen/tools/figlet/Makefile
deleted file mode 100644
index 9ed8fdff9c..0000000000
--- a/xen/tools/figlet/Makefile
+++ /dev/null
@@ -1,8 +0,0 @@
-
-CC := gcc
-
-figlet: figlet.c
- $(CC) -o $@ $<
-
-clean:
- rm -f *.o figlet
diff --git a/xen/tools/figlet/README b/xen/tools/figlet/README
deleted file mode 100644
index b4c58b3a5b..0000000000
--- a/xen/tools/figlet/README
+++ /dev/null
@@ -1,9 +0,0 @@
-
-NB. This is a very hacked version of Figlet 2.2.1.
-
-Don't use this outside the Xen build system. A proper version of Figlet
-can be had from <http://www.figlet.org>.
-
-The distribution license is intact in the LICENSE file.
-
- -- Keir Fraser (2/5/2003)
diff --git a/xen/tools/figlet/figlet.c b/xen/tools/figlet/figlet.c
deleted file mode 100644
index 8e79e83170..0000000000
--- a/xen/tools/figlet/figlet.c
+++ /dev/null
@@ -1,2075 +0,0 @@
-
-/*
- * XXXXXXXXXXXXXXXXXXXXXXXXXXX
- *
- * This is a HACKED figlet source file for Xen.
- *
- * Hacked to output C octal strings for inclusion in a header file.
- * Support for opening zipped files is removed.
- *
- * Go to www.figlet.org for the unhacked Figlet sources.
- */
-
-/****************************************************************************
-
- FIGlet Copyright 1991, 1993, 1994 Glenn Chappell and Ian Chai
- FIGlet Copyright 1996, 1997, 1998, 1999, 2000, 2001 John Cowan
- FIGlet Copyright 2002 Christiaan Keet
- Portions written by Paul Burton and Christiaan Keet
- Internet: <info@figlet.org>
- FIGlet, along with the various FIGlet fonts and documentation, is
- copyrighted under the provisions of the Artistic License (as listed
- in the file "Artistic-license.txt" which is included in this package.
-****************************************************************************/
-
-#define DATE "13 July 2002"
-#define VERSION "2.2.1"
-#define VERSION_INT 20201
-
-/* FIGlet (Frank, Ian & Glenn's Letters) */
-/* by Glenn Chappell */
-/* Apr 1991 */
-/* Automatic file addition by Ian Chai May 1991 */
-/* Punctuation and numbers addition by Ian Chai Jan 1993 */
-/* Full ASCII by Glenn Chappell Feb 1993 */
-/* Line-breaking, general rewrite by Glenn Chappell Mar 1993 */
-/* Hard blanks by Glenn Chappell Apr 1993 */
-/* Release 2.0 5 Aug 1993 */
-/* Right-to-left printing, extended char set by Glenn Chappell Dec 1993 */
-/* Control files by Glenn Chappell Feb 1994 */
-/* Release 2.1 12 Aug 1994 */
-/* Release 2.1.1 25 Aug 1994 */
-/* Release 2.1.2 by Gilbert (Mad Programmer) Healton: Add -A command line
- option. Sept 8, 1996 */
-/* Release 2.2 by John Cowan: multibyte inputs, compressed fonts,
- mapping tables, kerning/smushing options. */
-/* Release 2.2.1 by Christiaan Keet: minor updates including readmes
- FAQs and comments. 13 July 2002. The new official FIGlet website is
- http://www.figlet.org/ */
-
-#define DEFAULTFONTDIR "."
-#define DEFAULTFONTFILE "xen.flf"
-
-#include <stdio.h>
-#ifdef __STDC__
-#include <stdlib.h>
-#endif
-#include <string.h>
-#include <ctype.h>
-#include <fcntl.h> /* Needed for get_columns */
-
-#ifdef unix
-#include <sys/ioctl.h> /* Needed for get_columns */
-#endif
-
-
-#define ZFILE FILE
-#define Zopen fopen
-#define Zgetc fgetc
-#define Zungetc(_x,_y) fseek(_y,-1,SEEK_CUR)
-#define Zclose fclose
-
-#define MYSTRLEN(x) ((int)strlen(x)) /* Eliminate ANSI problem */
-
-#define DIRSEP '/'
-#define DIRSEP2 '\\'
-/* Leave alone for Unix and MS-DOS/Windows!
-Note: '/' also used in filename in get_columns(). */
-
-#define FONTFILESUFFIX ".flf"
-#define FONTFILEMAGICNUMBER "flf2"
-#define FSUFFIXLEN MYSTRLEN(FONTFILESUFFIX)
-#define CONTROLFILESUFFIX ".flc"
-#define CONTROLFILEMAGICNUMBER "flc2" /* no longer used in 2.2 */
-#define CSUFFIXLEN MYSTRLEN(CONTROLFILESUFFIX)
-#define DEFAULTCOLUMNS 80
-
-
-/****************************************************************************
-
- Globals dealing with chars that are read
-
-****************************************************************************/
-
-typedef long inchr; /* "char" read from stdin */
-
-inchr *inchrline; /* Alloc'd inchr inchrline[inchrlinelenlimit+1]; */
- /* Note: not null-terminated. */
-int inchrlinelen,inchrlinelenlimit;
-inchr deutsch[7] = {196, 214, 220, 228, 246, 252, 223};
- /* Latin-1 codes for German letters, respectively:
- LATIN CAPITAL LETTER A WITH DIAERESIS = A-umlaut
- LATIN CAPITAL LETTER O WITH DIAERESIS = O-umlaut
- LATIN CAPITAL LETTER U WITH DIAERESIS = U-umlaut
- LATIN SMALL LETTER A WITH DIAERESIS = a-umlaut
- LATIN SMALL LETTER O WITH DIAERESIS = o-umlaut
- LATIN SMALL LETTER U WITH DIAERESIS = u-umlaut
- LATIN SMALL LETTER SHARP S = ess-zed
- */
-
-int hzmode; /* true if reading double-bytes in HZ mode */
-int gndbl[4]; /* gndbl[n] is true if Gn is double-byte */
-inchr gn[4]; /* Gn character sets: ASCII, Latin-1, none, none */
-int gl; /* 0-3 specifies left-half Gn character set */
-int gr; /* 0-3 specifies right-half Gn character set */
-
-int Myargc; /* to avoid passing around argc and argv */
-char **Myargv;
-
-/****************************************************************************
-
- Globals dealing with chars that are written
-
-****************************************************************************/
-
-typedef struct fc {
- inchr ord;
- char **thechar; /* Alloc'd char thechar[charheight][]; */
- struct fc *next;
- } fcharnode;
-
-fcharnode *fcharlist;
-char **currchar;
-int currcharwidth;
-int previouscharwidth;
-char **outputline; /* Alloc'd char outputline[charheight][outlinelenlimit+1]; */
-int outlinelen;
-
-
-/****************************************************************************
-
- Globals dealing with command file storage
-
-****************************************************************************/
-
-typedef struct cfn {
- char *thename;
- struct cfn *next;
- } cfnamenode;
-
-cfnamenode *cfilelist,**cfilelistend;
-
-typedef struct cm {
- int thecommand;
- inchr rangelo;
- inchr rangehi;
- inchr offset;
- struct cm *next;
- } comnode;
-
-comnode *commandlist,**commandlistend;
-
-/****************************************************************************
-
- Globals affected by command line options
-
-****************************************************************************/
-
-int deutschflag,justification,paragraphflag,right2left,multibyte;
-int cmdinput;
-
-#define SM_SMUSH 128
-#define SM_KERN 64
-#define SM_EQUAL 1
-#define SM_LOWLINE 2
-#define SM_HIERARCHY 4
-#define SM_PAIR 8
-#define SM_BIGX 16
-#define SM_HARDBLANK 32
-
-int smushmode;
-
-#define SMO_NO 0 /* no command-line smushmode */
-#define SMO_YES 1 /* use command-line smushmode, ignore font smushmode */
-#define SMO_FORCE 2 /* logically OR command-line and font smushmodes */
-
-int smushoverride;
-
-int outputwidth;
-int outlinelenlimit;
-char *fontdirname,*fontname;
-
-
-/****************************************************************************
-
- Globals read from font file
-
-****************************************************************************/
-
-char hardblank;
-int charheight;
-
-
-/****************************************************************************
-
- Name of program, used in error messages
-
-****************************************************************************/
-
-char *myname;
-
-
-#ifdef TIOCGWINSZ
-/****************************************************************************
-
- get_columns
-
- Determines the number of columns of /dev/tty. Returns the number of
- columns, or -1 if error. May return 0 if columns unknown.
- Requires include files <fcntl.h> and <sys/ioctl.h>.
- by Glenn Chappell & Ian Chai 14 Apr 1993
-
-****************************************************************************/
-
-int get_columns()
-{
- struct winsize ws;
- int fd,result;
-
- if ((fd = open("/dev/tty",O_WRONLY))<0) return -1;
- result = ioctl(fd,TIOCGWINSZ,&ws);
- close(fd);
- return result?-1:ws.ws_col;
-}
-#endif /* ifdef TIOCGWINSZ */
-
-
-/****************************************************************************
-
- myalloc
-
- Calls malloc. If malloc returns error, prints error message and
- quits.
-
-****************************************************************************/
-
-#ifdef __STDC__
-char *myalloc(size_t size)
-#else
-char *myalloc(size)
-int size;
-#endif
-{
- char *ptr;
-#ifndef __STDC__
- extern void *malloc();
-#endif
-
- if ((ptr = (char*)malloc(size))==NULL) {
- fprintf(stderr,"%s: Out of memory\n",myname);
- exit(1);
- }
- else {
- return ptr;
- }
-}
-
-
-/****************************************************************************
-
- hasdirsep
-
- Returns true if s1 contains a DIRSEP or DIRSEP2 character.
-
-****************************************************************************/
-
-int hasdirsep(s1)
-char *s1;
-{
- if (strchr(s1, DIRSEP)) return 1;
- else if (strchr(s1, DIRSEP2)) return 1;
- else return 0;
-}
-
-/****************************************************************************
-
- suffixcmp
-
- Returns true if s2 is a suffix of s1; uses case-blind comparison.
-
-****************************************************************************/
-
-int suffixcmp(s1, s2)
-char *s1;
-char *s2;
-{
- int len1, len2;
-
- len1 = MYSTRLEN(s1);
- len2 = MYSTRLEN(s2);
- if (len2 > len1) return 0;
- s1 += len1 - len2;
- while (*s1) {
- if (tolower(*s1) != tolower(*s2)) return 0;
- s1++;
- s2++;
- }
- return 1;
-}
-
-/****************************************************************************
-
- skiptoeol
-
- Skips to the end of a line, given a stream. Handles \r, \n, or \r\n.
-
-****************************************************************************/
-
-void skiptoeol(fp)
-ZFILE *fp;
-{
- int dummy;
-
- while (dummy=Zgetc(fp),dummy!=EOF) {
- if (dummy == '\n') return;
- if (dummy == '\r') {
- dummy = Zgetc(fp);
- if (dummy != EOF && dummy != '\n') Zungetc(dummy,fp);
- return;
- }
- }
-}
-
-
-/****************************************************************************
-
- myfgets
-
- Local version of fgets. Handles \r, \n, and \r\n terminators.
-
-****************************************************************************/
-
-char *myfgets(line,maxlen,fp)
-char *line;
-int maxlen;
-ZFILE *fp;
-{
- int c = 0;
- char *p;
-
- p = line;
- while((c=Zgetc(fp))!=EOF&&maxlen) {
- *p++ = c;
- maxlen--;
- if (c=='\n') break;
- if (c=='\r') {
- c = Zgetc(fp);
- if (c != EOF && c != '\n') Zungetc(c,fp);
- *(p-1) = '\n';
- break;
- }
- }
- *p = 0;
- return (c==EOF) ? NULL : line;
-}
-
-/****************************************************************************
-
- usageerr
-
- Prints "Usage: ...." line to the given stream.
-
-****************************************************************************/
-
-void printusage(out)
-FILE *out;
-{
- fprintf(out,
- "Usage: %s [ -cklnoprstvxDELNRSWX ] [ -d fontdirectory ]\n",
- myname);
- fprintf(out,
- " [ -f fontfile ] [ -m smushmode ] [ -w outputwidth ]\n");
- fprintf(out,
- " [ -C controlfile ] [ -I infocode ] [ message ]\n");
-}
-
-
-/****************************************************************************
-
- printinfo
-
- Prints version and copyright message, or utility information.
-
-****************************************************************************/
-
-void printinfo(infonum)
-int infonum;
-{
- switch (infonum) {
- case 0: /* Copyright message */
- printf("FIGlet Copyright 1991-2002 Glenn Chappell, Ian Chai, ");
- printf("John Cowan, Christiaan Keet\n");
- printf("Internet: <info@figlet.org> ");
- printf("Version: %s, date: %s\n\n",VERSION,DATE);
- printf("FIGlet, along with the various FIGlet fonts");
- printf(" and documentation, may be\n");
- printf("freely copied and distributed.\n\n");
- printf("If you use FIGlet, please send an");
- printf(" e-mail message to <info@figlet.org>.\n\n");
- printf("The latest version of FIGlet is available from the");
- printf(" web site,\n\thttp://www.figlet.org/\n\n");
- printusage(stdout);
- break;
- case 1: /* Version (integer) */
- printf("%d\n",VERSION_INT);
- break;
- case 2: /* Font directory */
- printf("%s\n",fontdirname);
- break;
- case 3: /* Font */
- printf("%s\n",fontname);
- break;
- case 4: /* Outputwidth */
- printf("%d\n",outputwidth);
- }
-}
-
-
-/****************************************************************************
-
- readmagic
-
- Reads a four-character magic string from a stream.
-
-****************************************************************************/
-void readmagic(fp,magic)
-ZFILE *fp;
-char *magic;
-{
- int i;
-
- for (i=0;i<4;i++) {
- magic[i] = Zgetc(fp);
- }
- magic[4] = 0;
- }
-
-/****************************************************************************
-
- skipws
-
- Skips whitespace characters from a stream.
-
-****************************************************************************/
-void skipws(fp)
-ZFILE *fp;
-{
- int c;
- while (c=Zgetc(fp),isascii(c)&&isspace(c)) ;
- Zungetc(c,fp);
- }
-
-/****************************************************************************
-
- readnum
-
- Reads a number from a stream. Accepts "0" prefix for octal and
- "0x" or "0X" for hexadecimal. Ignores leading whitespace.
-
-****************************************************************************/
-void readnum(fp,nump)
-ZFILE *fp;
-inchr *nump;
-{
- int acc = 0;
- char *p;
- int c;
- int base;
- int sign = 1;
- char digits[] = "0123456789ABCDEF";
-
- skipws(fp);
- c = Zgetc(fp);
- if (c=='-') {
- sign = -1;
- }
- else {
- Zungetc(c,fp);
- }
- c = Zgetc(fp);
- if (c=='0') {
- c = Zgetc(fp);
- if (c=='x'||c=='X') {
- base = 16;
- }
- else {
- base = 8;
- Zungetc(c,fp);
- }
- }
- else {
- base = 10;
- Zungetc(c,fp);
- }
-
- while((c=Zgetc(fp))!=EOF) {
- c=toupper(c);
- p=strchr(digits,c);
- if (!p) {
- Zungetc(c,fp);
- *nump = acc * sign;
- return;
- }
- acc = acc*base+(p-digits);
- }
- *nump = acc * sign;
- }
-
-/****************************************************************************
-
- readTchar
-
- Reads a control file "T" command character specification.
-
- Character is a single byte, an escape sequence, or
- an escaped numeric.
-
-****************************************************************************/
-
-inchr readTchar(fp)
-ZFILE *fp;
-{
- inchr thechar;
- char next;
-
- thechar=Zgetc(fp);
- if (thechar=='\n' || thechar=='\r') { /* Handle badly-formatted file */
- Zungetc(thechar,fp);
- return '\0';
- }
- if (thechar!='\\') return thechar;
- next=Zgetc(fp);
- switch(next) {
- case 'a':
- return 7;
- case 'b':
- return 8;
- case 'e':
- return 27;
- case 'f':
- return 12;
- case 'n':
- return 10;
- case 'r':
- return 13;
- case 't':
- return 9;
- case 'v':
- return 11;
- default:
- if (next=='-' || next=='x' || (next>='0' && next<='9')) {
- Zungetc(next,fp);
- readnum(fp,&thechar);
- return thechar;
- }
- return next;
- }
-}
-
-/****************************************************************************
-
- charsetname
-
- Get a Tchar representing a charset name, or 0 if none available.
- Called in getcharset().
-
-****************************************************************************/
-
-inchr charsetname(fp)
-ZFILE *fp;
-{
- inchr result;
-
- result = readTchar(fp);
- if (result == '\n' || result == '\r') {
- result = 0;
- Zungetc(result,fp);
- }
- return result;
- }
-
-/****************************************************************************
-
- charset
-
- Processes "g[0123]" character set specifier
- Called in readcontrol().
-
-****************************************************************************/
-
-void charset(n, controlfile)
-int n;
-ZFILE *controlfile;
-{
- int ch;
-
- skipws(controlfile);
- if (Zgetc(controlfile) != '9') {
- skiptoeol(controlfile);
- return;
- }
- ch = Zgetc(controlfile);
- if (ch == '6') {
- gn[n] = 65536L * charsetname(controlfile) + 0x80;
- gndbl[n] = 0;
- skiptoeol(controlfile);
- return;
- }
- if (ch != '4') {
- skiptoeol(controlfile);
- return;
- }
- ch = Zgetc(controlfile);
- if (ch == 'x') {
- if (Zgetc(controlfile) != '9') {
- skiptoeol(controlfile);
- return;
- }
- if (Zgetc(controlfile) != '4') {
- skiptoeol(controlfile);
- return;
- }
- skipws(controlfile);
- gn[n] = 65536L * charsetname(controlfile);
- gndbl[n] = 1;
- skiptoeol(controlfile);
- return;
- }
- Zungetc(ch, controlfile);
- skipws(controlfile);
- gn[n] = 65536L * charsetname(controlfile);
- gndbl[n] = 0;
- return;
- }
-
-/****************************************************************************
-
- readcontrol
-
- Allocates memory and reads in the given control file.
- Called in readcontrolfiles().
-
-****************************************************************************/
-
-void readcontrol(controlname)
-char *controlname;
-{
- inchr firstch,lastch;
- char dashcheck;
- inchr offset;
- char *controlpath,magicnum[5];
- int command;
- ZFILE *controlfile;
- int namelen;
-
- namelen = MYSTRLEN(fontdirname);
- controlpath = (char*)myalloc(sizeof(char)
- *(namelen+MYSTRLEN(controlname)+CSUFFIXLEN+2));
- controlfile = NULL;
- if (!hasdirsep(controlname)) {
- strcpy(controlpath,fontdirname);
- controlpath[namelen] = DIRSEP;
- controlpath[namelen+1] = '\0';
- strcat(controlpath,controlname);
- strcat(controlpath,CONTROLFILESUFFIX);
- controlfile = Zopen(controlpath,"rb");
- }
- if (controlfile==NULL) {
- strcpy(controlpath,controlname);
- strcat(controlpath,CONTROLFILESUFFIX);
- controlfile = Zopen(controlpath,"rb");
- if (controlfile==NULL) {
- fprintf(stderr,"%s: %s: Unable to open control file\n",myname,
- controlpath);
- exit(1);
- }
- }
-
- free(controlpath);
-
- (*commandlistend) = (comnode*)myalloc(sizeof(comnode));
- (*commandlistend)->thecommand = 0; /* Begin with a freeze command */
- commandlistend = &(*commandlistend)->next;
- (*commandlistend) = NULL;
-
- while(command=Zgetc(controlfile),command!=EOF) {
- switch (command) {
- case 't': /* Translate */
- skipws(controlfile);
- firstch=readTchar(controlfile);
- if ((dashcheck=Zgetc(controlfile))=='-') {
- lastch=readTchar(controlfile);
- }
- else {
- Zungetc(dashcheck,controlfile);
- lastch=firstch;
- }
- skipws(controlfile);
- offset=readTchar(controlfile)-firstch;
- skiptoeol(controlfile);
- (*commandlistend) = (comnode*)myalloc(sizeof(comnode));
- (*commandlistend)->thecommand = 1;
- (*commandlistend)->rangelo = firstch;
- (*commandlistend)->rangehi = lastch;
- (*commandlistend)->offset = offset;
- commandlistend = &(*commandlistend)->next;
- (*commandlistend) = NULL;
- break;
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- case '-':
- /* Mapping table entry */
- Zungetc(command,controlfile);
- readnum(controlfile,&firstch);
- skipws(controlfile);
- readnum(controlfile,&lastch);
- offset=lastch-firstch;
- lastch=firstch;
- skiptoeol(controlfile);
- (*commandlistend) = (comnode*)myalloc(sizeof(comnode));
- (*commandlistend)->thecommand = 1;
- (*commandlistend)->rangelo = firstch;
- (*commandlistend)->rangehi = lastch;
- (*commandlistend)->offset = offset;
- commandlistend = &(*commandlistend)->next;
- (*commandlistend) = NULL;
- break;
- case 'f': /* freeze */
- skiptoeol(controlfile);
- (*commandlistend) = (comnode*)myalloc(sizeof(comnode));
- (*commandlistend)->thecommand = 0;
- commandlistend = &(*commandlistend)->next;
- (*commandlistend) = NULL;
- break;
- case 'b': /* DBCS input mode */
- multibyte = 1;
- break;
- case 'u': /* UTF-8 input mode */
- multibyte = 2;
- break;
- case 'h': /* HZ input mode */
- multibyte = 3;
- break;
- case 'j': /* Shift-JIS input mode */
- multibyte = 4;
- break;
- case 'g': /* ISO 2022 character set choices */
- multibyte = 0;
- skipws(controlfile);
- command=Zgetc(controlfile);
- switch (command) {
- case '0': /* define G0 charset */
- charset(0, controlfile);
- break;
- case '1': /* set G1 charset */
- charset(1, controlfile);
- break;
- case '2': /* set G2 charset */
- charset(2, controlfile);
- break;
- case '3': /* set G3 charset */
- charset(3, controlfile);
- break;
- case 'l': case 'L': /* define left half */
- skipws(controlfile);
- gl = Zgetc(controlfile) - '0';
- skiptoeol(controlfile);
- break;
- case 'r': case 'R': /* define right half */
- skipws(controlfile);
- gr = Zgetc(controlfile) - '0';
- skiptoeol(controlfile);
- break;
- default: /* meaningless "g" command */
- skiptoeol(controlfile);
- }
- case '\r': case '\n': /* blank line */
- break;
- default: /* Includes '#' */
- skiptoeol(controlfile);
- }
- }
- Zclose(controlfile);
-}
-
-
-/****************************************************************************
-
- readcontrolfiles
-
- Reads in the controlfiles names in cfilelist. Uses readcontrol.
- Called in main().
-
-****************************************************************************/
-
-void readcontrolfiles()
-{
- cfnamenode *cfnptr;
-
- for (cfnptr=cfilelist;cfnptr!=NULL;cfnptr=cfnptr->next) {
- readcontrol(cfnptr->thename);
- }
-}
-
-
-/****************************************************************************
-
- clearcfilelist
-
- Clears the control file list. Assumes thename does not need freeing.
-
-****************************************************************************/
-
-void clearcfilelist()
-{
- cfnamenode *cfnptr1,*cfnptr2;
-
- cfnptr1 = cfilelist;
- while (cfnptr1 != NULL) {
- cfnptr2 = cfnptr1->next;
- free(cfnptr1);
- cfnptr1 = cfnptr2;
- }
- cfilelist = NULL;
- cfilelistend = &cfilelist;
-}
-
-
-/****************************************************************************
-
- getparams
-
- Handles all command-line parameters. Puts all parameters within
- bounds.
-
-****************************************************************************/
-
-void getparams()
-{
- extern char *optarg;
- extern int optind;
- int c; /* "Should" be a char -- need int for "!= -1" test*/
- int columns,firstfont,infoprint;
- char *controlname;
-
- if ((myname = strrchr(Myargv[0],DIRSEP))!=NULL) {
- myname++;
- }
- else {
- myname = Myargv[0];
- }
- fontdirname = DEFAULTFONTDIR;
- firstfont = 1;
- fontname = (char*)myalloc(sizeof(char)*(MYSTRLEN(DEFAULTFONTFILE)+1));
- strcpy(fontname,DEFAULTFONTFILE); /* Some systems don't have strdup() */
- if (suffixcmp(fontname,FONTFILESUFFIX)) {
- fontname[MYSTRLEN(fontname)-FSUFFIXLEN]='\0';
- }
- cfilelist = NULL;
- cfilelistend = &cfilelist;
- commandlist = NULL;
- commandlistend = &commandlist;
- smushoverride = SMO_NO;
- deutschflag = 0;
- justification = -1;
- right2left = -1;
- paragraphflag = 0;
- infoprint = -1;
- cmdinput = 0;
- outputwidth = DEFAULTCOLUMNS;
- gn[1] = 0x80;
- gr = 1;
- while ((c = getopt(Myargc,Myargv,"ADEXLRI:xlcrpntvm:w:d:f:C:NFskSWo"))!= -1) {
- /* Note: -F is not a legal option -- prints a special err message. */
- switch (c) {
- case 'A':
- cmdinput = 1;
- break;
- case 'D':
- deutschflag = 1;
- break;
- case 'E':
- deutschflag = 0;
- break;
- case 'X':
- right2left = -1;
- break;
- case 'L':
- right2left = 0;
- break;
- case 'R':
- right2left = 1;
- break;
- case 'x':
- justification = -1;
- break;
- case 'l':
- justification = 0;
- break;
- case 'c':
- justification = 1;
- break;
- case 'r':
- justification = 2;
- break;
- case 'p':
- paragraphflag = 1;
- break;
- case 'n':
- paragraphflag = 0;
- break;
- case 's':
- smushoverride = SMO_NO;
- break;
- case 'k':
- smushmode = SM_KERN;
- smushoverride = SMO_YES;
- break;
- case 'S':
- smushmode = SM_SMUSH;
- smushoverride = SMO_FORCE;
- break;
- case 'o':
- smushmode = SM_SMUSH;
- smushoverride = SMO_YES;
- break;
- case 'W':
- smushmode = 0;
- smushoverride = SMO_YES;
- break;
- case 't':
-#ifdef TIOCGWINSZ
- columns = get_columns();
- if (columns>0) {
- outputwidth = columns;
- }
-#else /* ifdef TIOCGWINSZ */
- fprintf(stderr,
- "%s: \"-t\" is disabled, since ioctl is not fully implemented.\n",
- myname);
-#endif /* ifdef TIOCGWINSZ */
- break;
- case 'v':
- infoprint = 0;
- break;
- case 'I':
- infoprint = atoi(optarg);
- break;
- case 'm':
- smushmode = atoi(optarg);
- if (smushmode < -1) {
- smushoverride = SMO_NO;
- break;
- }
- if (smushmode == 0) smushmode = SM_KERN;
- else if (smushmode == -1) smushmode = 0;
- else smushmode = (smushmode & 63) | SM_SMUSH;
- smushoverride = SMO_YES;
- break;
- case 'w':
- columns = atoi(optarg);
- if (columns>0) {
- outputwidth = columns;
- }
- break;
- case 'd':
- fontdirname = optarg;
- break;
- case 'f':
- if (firstfont) {
- free(fontname);
- firstfont = 0;
- }
- fontname = optarg;
- if (suffixcmp(fontname,FONTFILESUFFIX)) {
- fontname[MYSTRLEN(fontname)-FSUFFIXLEN] = '\0';
- }
- break;
- case 'C':
- controlname = optarg;
- if (suffixcmp(controlname, CONTROLFILESUFFIX)) {
- controlname[MYSTRLEN(controlname)-CSUFFIXLEN] = '\0';
- }
- (*cfilelistend) = (cfnamenode*)myalloc(sizeof(cfnamenode));
- (*cfilelistend)->thename = controlname;
- cfilelistend = &(*cfilelistend)->next;
- (*cfilelistend) = NULL;
- break;
- case 'N':
- clearcfilelist();
- multibyte = 0;
- gn[0] = 0;
- gn[1] = 0x80;
- gn[2] = gn[3] = 0;
- gndbl[0] = gndbl[1] = gndbl[2] = gndbl[3] = 0;
- gl = 0;
- gr = 1;
- break;
- case 'F': /* Not a legal option */
- fprintf(stderr,"%s: illegal option -- F\n",myname);
- printusage(stderr);
- fprintf(stderr,"\nBecause of numerous incompatibilities, the");
- fprintf(stderr," \"-F\" option has been\n");
- fprintf(stderr,"removed. It has been replaced by the \"figlist\"");
- fprintf(stderr," program, which is now\n");
- fprintf(stderr,"included in the basic FIGlet package. \"figlist\"");
- fprintf(stderr," is also available\n");
- fprintf(stderr,"from http://www.figlet.org/");
- fprintf(stderr,"under UNIX utilities.\n");
- exit(1);
- break;
- default:
- printusage(stderr);
- exit(1);
- }
- }
- if (optind!=Myargc) cmdinput = 1; /* force cmdinput if more arguments */
- outlinelenlimit = outputwidth-1;
- if (infoprint>=0) {
- printinfo(infoprint);
- exit(0);
- }
-}
-
-
-/****************************************************************************
-
- clearline
-
- Clears both the input (inchrline) and output (outputline) storage.
-
-****************************************************************************/
-
-void clearline()
-{
- int i;
-
- for (i=0;i<charheight;i++) {
- outputline[i][0] = '\0';
- }
- outlinelen = 0;
- inchrlinelen = 0;
-}
-
-
-/****************************************************************************
-
- readfontchar
-
- Reads a font character from the font file, and places it in a
- newly-allocated entry in the list.
-
-****************************************************************************/
-
-void readfontchar(file,theord,line,maxlen)
-ZFILE *file;
-inchr theord;
-char *line;
-int maxlen;
-{
- int row,k;
- char endchar;
- fcharnode *fclsave;
-
- fclsave = fcharlist;
- fcharlist = (fcharnode*)myalloc(sizeof(fcharnode));
- fcharlist->ord = theord;
- fcharlist->thechar = (char**)myalloc(sizeof(char*)*charheight);
- fcharlist->next = fclsave;
- for (row=0;row<charheight;row++) {
- if (myfgets(line,maxlen+1,file)==NULL) {
- line[0] = '\0';
- }
- k = MYSTRLEN(line)-1;
- while (k>=0 && isspace(line[k])) {
- k--;
- }
- if (k>=0) {
- endchar = line[k];
- while (k>=0 ? line[k]==endchar : 0) {
- k--;
- }
- }
- line[k+1] = '\0';
- fcharlist->thechar[row] = (char*)myalloc(sizeof(char)*(k+2));
- strcpy(fcharlist->thechar[row],line);
- }
-}
-
-
-/****************************************************************************
-
- readfont
-
- Allocates memory, initializes variables, and reads in the font.
- Called near beginning of main().
-
-****************************************************************************/
-
-void readfont()
-{
-#define MAXFIRSTLINELEN 1000
- int i,row,numsread;
- inchr theord;
- int maxlen,cmtlines,ffright2left;
- int smush,smush2;
- char *fontpath,*fileline,magicnum[5];
- ZFILE *fontfile;
- int namelen;
-
- namelen = MYSTRLEN(fontdirname);
- fontpath = (char*)myalloc(sizeof(char)
- *(namelen+MYSTRLEN(fontname)+FSUFFIXLEN+2));
- fontfile = NULL;
- if (!hasdirsep(fontname)) {
- strcpy(fontpath,fontdirname);
- fontpath[namelen] = DIRSEP;
- fontpath[namelen+1] = '\0';
- strcat(fontpath,fontname);
- strcat(fontpath,FONTFILESUFFIX);
- fontfile = Zopen(fontpath,"rb");
- }
- if (fontfile==NULL) {
- strcpy(fontpath,fontname);
- strcat(fontpath,FONTFILESUFFIX);
- fontfile = Zopen(fontpath,"rb");
- if (fontfile==NULL) {
- fprintf(stderr,"%s: %s: Unable to open font file\n",myname,fontpath);
- exit(1);
- }
- }
-
- readmagic(fontfile,magicnum);
- fileline = (char*)myalloc(sizeof(char)*(MAXFIRSTLINELEN+1));
- if (myfgets(fileline,MAXFIRSTLINELEN+1,fontfile)==NULL) {
- fileline[0] = '\0';
- }
- if (MYSTRLEN(fileline)>0 ? fileline[MYSTRLEN(fileline)-1]!='\n' : 0) {
- skiptoeol(fontfile);
- }
- numsread = sscanf(fileline,"%*c%c %d %*d %d %d %d %d %d",
- &hardblank,&charheight,&maxlen,&smush,&cmtlines,
- &ffright2left,&smush2);
- free(fileline);
- if (strcmp(magicnum,FONTFILEMAGICNUMBER) || numsread<5) {
- fprintf(stderr,"%s: %s: Not a FIGlet 2 font file\n",myname,fontpath);
- exit(1);
- }
- for (i=1;i<=cmtlines;i++) {
- skiptoeol(fontfile);
- }
- free(fontpath);
-
- if (numsread<6) {
- ffright2left = 0;
- }
-
- if (numsread<7) { /* if no smush2, decode smush into smush2 */
- if (smush == 0) smush2 = SM_KERN;
- else if (smush < 0) smush2 = 0;
- else smush2 = (smush & 31) | SM_SMUSH;
- }
-
- if (charheight<1) {
- charheight = 1;
- }
-
- if (maxlen<1) {
- maxlen = 1;
- }
-
- maxlen += 100; /* Give ourselves some extra room */
-
- if (smushoverride == SMO_NO)
- smushmode = smush2;
- else if (smushoverride == SMO_FORCE)
- smushmode |= smush2;
-
- if (right2left<0) {
- right2left = ffright2left;
- }
-
- if (justification<0) {
- justification = 2*right2left;
- }
-
- fileline = (char*)myalloc(sizeof(char)*(maxlen+1));
- /* Allocate "missing" character */
- fcharlist = (fcharnode*)myalloc(sizeof(fcharnode));
- fcharlist->ord = 0;
- fcharlist->thechar = (char**)myalloc(sizeof(char*)*charheight);
- fcharlist->next = NULL;
- for (row=0;row<charheight;row++) {
- fcharlist->thechar[row] = (char*)myalloc(sizeof(char));
- fcharlist->thechar[row][0] = '\0';
- }
- for (theord=' ';theord<='~';theord++) {
- readfontchar(fontfile,theord,fileline,maxlen);
- }
- for (theord=0;theord<=6;theord++) {
- readfontchar(fontfile,deutsch[theord],fileline,maxlen);
- }
- while (myfgets(fileline,maxlen+1,fontfile)==NULL?0:
- sscanf(fileline,"%li",&theord)==1) {
- readfontchar(fontfile,theord,fileline,maxlen);
- }
- Zclose(fontfile);
- free(fileline);
-}
-
-
-/****************************************************************************
-
- linealloc
-
- Allocates & clears outputline, inchrline. Sets inchrlinelenlimit.
- Called near beginning of main().
-
-****************************************************************************/
-
-void linealloc()
-{
- int row;
-
- outputline = (char**)myalloc(sizeof(char*)*charheight);
- for (row=0;row<charheight;row++) {
- outputline[row] = (char*)myalloc(sizeof(char)*(outlinelenlimit+1));
- }
- inchrlinelenlimit = outputwidth*4+100;
- inchrline = (inchr*)myalloc(sizeof(inchr)*(inchrlinelenlimit+1));
- clearline();
-}
-
-
-/****************************************************************************
-
- getletter
-
- Sets currchar to point to the font entry for the given character.
- Sets currcharwidth to the width of this character.
-
-****************************************************************************/
-
-void getletter(c)
-inchr c;
-{
- fcharnode *charptr;
-
- for (charptr=fcharlist;charptr==NULL?0:charptr->ord!=c;
- charptr=charptr->next) ;
- if (charptr!=NULL) {
- currchar = charptr->thechar;
- }
- else {
- for (charptr=fcharlist;charptr==NULL?0:charptr->ord!=0;
- charptr=charptr->next) ;
- currchar = charptr->thechar;
- }
- previouscharwidth = currcharwidth;
- currcharwidth = MYSTRLEN(currchar[0]);
-}
-
-
-/****************************************************************************
-
- smushem
-
- Given 2 characters, attempts to smush them into 1, according to
- smushmode. Returns smushed character or '\0' if no smushing can be
- done.
-
- smushmode values are sum of following (all values smush blanks):
- 1: Smush equal chars (not hardblanks)
- 2: Smush '_' with any char in hierarchy below
- 4: hierarchy: "|", "/\", "[]", "{}", "()", "<>"
- Each class in hier. can be replaced by later class.
- 8: [ + ] -> |, { + } -> |, ( + ) -> |
- 16: / + \ -> X, > + < -> X (only in that order)
- 32: hardblank + hardblank -> hardblank
-
-****************************************************************************/
-
-char smushem(lch,rch)
-char lch,rch;
-{
- if (lch==' ') return rch;
- if (rch==' ') return lch;
-
- if (previouscharwidth<2 || currcharwidth<2) return '\0';
- /* Disallows overlapping if the previous character */
- /* or the current character has a width of 1 or zero. */
-
- if ((smushmode & SM_SMUSH) == 0) return '\0'; /* kerning */
-
- if ((smushmode & 63) == 0) {
- /* This is smushing by universal overlapping. */
- if (lch==' ') return rch;
- if (rch==' ') return lch;
- if (lch==hardblank) return rch;
- if (rch==hardblank) return lch;
- /* Above four lines ensure overlapping preference to */
- /* visible characters. */
- if (right2left==1) return lch;
- /* Above line ensures that the dominant (foreground) */
- /* fig-character for overlapping is the latter in the */
- /* user's text, not necessarily the rightmost character. */
- return rch;
- /* Occurs in the absence of above exceptions. */
- }
-
- if (smushmode & SM_HARDBLANK) {
- if (lch==hardblank && rch==hardblank) return lch;
- }
-
- if (lch==hardblank || rch==hardblank) return '\0';
-
- if (smushmode & SM_EQUAL) {
- if (lch==rch) return lch;
- }
-
- if (smushmode & SM_LOWLINE) {
- if (lch=='_' && strchr("|/\\[]{}()<>",rch)) return rch;
- if (rch=='_' && strchr("|/\\[]{}()<>",lch)) return lch;
- }
-
- if (smushmode & SM_HIERARCHY) {
- if (lch=='|' && strchr("/\\[]{}()<>",rch)) return rch;
- if (rch=='|' && strchr("/\\[]{}()<>",lch)) return lch;
- if (strchr("/\\",lch) && strchr("[]{}()<>",rch)) return rch;
- if (strchr("/\\",rch) && strchr("[]{}()<>",lch)) return lch;
- if (strchr("[]",lch) && strchr("{}()<>",rch)) return rch;
- if (strchr("[]",rch) && strchr("{}()<>",lch)) return lch;
- if (strchr("{}",lch) && strchr("()<>",rch)) return rch;
- if (strchr("{}",rch) && strchr("()<>",lch)) return lch;
- if (strchr("()",lch) && strchr("<>",rch)) return rch;
- if (strchr("()",rch) && strchr("<>",lch)) return lch;
- }
-
- if (smushmode & SM_PAIR) {
- if (lch=='[' && rch==']') return '|';
- if (rch=='[' && lch==']') return '|';
- if (lch=='{' && rch=='}') return '|';
- if (rch=='{' && lch=='}') return '|';
- if (lch=='(' && rch==')') return '|';
- if (rch=='(' && lch==')') return '|';
- }
-
- if (smushmode & SM_BIGX) {
- if (lch=='/' && rch=='\\') return '|';
- if (rch=='/' && lch=='\\') return 'Y';
- if (lch=='>' && rch=='<') return 'X';
- /* Don't want the reverse of above to give 'X'. */
- }
-
- return '\0';
-}
-
-
-/****************************************************************************
-
- smushamt
-
- Returns the maximum amount that the current character can be smushed
- into the current line.
-
-****************************************************************************/
-
-int smushamt()
-{
- int maxsmush,amt;
- int row,linebd,charbd;
- char ch1,ch2;
-
- if ((smushmode & (SM_SMUSH | SM_KERN)) == 0) {
- return 0;
- }
- maxsmush = currcharwidth;
- for (row=0;row<charheight;row++) {
- if (right2left) {
- for (charbd=MYSTRLEN(currchar[row]);
- ch1=currchar[row][charbd],(charbd>0&&(!ch1||ch1==' '));charbd--) ;
- for (linebd=0;ch2=outputline[row][linebd],ch2==' ';linebd++) ;
- amt = linebd+currcharwidth-1-charbd;
- }
- else {
- for (linebd=MYSTRLEN(outputline[row]);
- ch1 = outputline[row][linebd],(linebd>0&&(!ch1||ch1==' '));linebd--) ;
- for (charbd=0;ch2=currchar[row][charbd],ch2==' ';charbd++) ;
- amt = charbd+outlinelen-1-linebd;
- }
- if (!ch1||ch1==' ') {
- amt++;
- }
- else if (ch2) {
- if (smushem(ch1,ch2)!='\0') {
- amt++;
- }
- }
- if (amt<maxsmush) {
- maxsmush = amt;
- }
- }
- return maxsmush;
-}
-
-
-/****************************************************************************
-
- addchar
-
- Attempts to add the given character onto the end of the current line.
- Returns 1 if this can be done, 0 otherwise.
-
-****************************************************************************/
-
-int addchar(c)
-inchr c;
-{
- int smushamount,row,k;
- char *templine;
-
- getletter(c);
- smushamount = smushamt();
- if (outlinelen+currcharwidth-smushamount>outlinelenlimit
- ||inchrlinelen+1>inchrlinelenlimit) {
- return 0;
- }
-
- templine = (char*)myalloc(sizeof(char)*(outlinelenlimit+1));
- for (row=0;row<charheight;row++) {
- if (right2left) {
- strcpy(templine,currchar[row]);
- for (k=0;k<smushamount;k++) {
- templine[currcharwidth-smushamount+k] =
- smushem(templine[currcharwidth-smushamount+k],outputline[row][k]);
- }
- strcat(templine,outputline[row]+smushamount);
- strcpy(outputline[row],templine);
- }
- else {
- for (k=0;k<smushamount;k++) {
- outputline[row][outlinelen-smushamount+k] =
- smushem(outputline[row][outlinelen-smushamount+k],currchar[row][k]);
- }
- strcat(outputline[row],currchar[row]+smushamount);
- }
- }
- free(templine);
- outlinelen = MYSTRLEN(outputline[0]);
- inchrline[inchrlinelen++] = c;
- return 1;
-}
-
-
-/****************************************************************************
-
- putstring
-
- Prints out the given null-terminated string, substituting blanks
- for hardblanks. If outputwidth is 1, prints the entire string;
- otherwise prints at most outputwidth-1 characters. Prints a newline
- at the end of the string. The string is left-justified, centered or
- right-justified (taking outputwidth as the screen width) if
- justification is 0, 1 or 2, respectively.
-
-****************************************************************************/
-
-static int nr_chars=0;
-static void myputchar(unsigned char c)
-{
- static int startline = 1;
-
- if ( startline )
- {
- startline = 0;
- myputchar(' ');
- }
-
- putc(c, stderr);
-
- if ( nr_chars == 0 )
- putchar('"');
-
- putchar('\\');
- putchar('0' + ((c>>6)&7));
- putchar('0' + ((c>>3)&7));
- putchar('0' + ((c>>0)&7));
-
- if ( c == '\n' )
- startline = 1;
-
- if ( ++nr_chars == 18 )
- {
- nr_chars = 0;
- putchar('"');
- putchar(' ');
- putchar('\\');
- putchar('\n');
- }
-}
-
-void putstring(string)
-char *string;
-{
- int i,len;
-
- len = MYSTRLEN(string);
- if (outputwidth>1) {
- if (len>outputwidth-1) {
- len = outputwidth-1;
- }
- if (justification>0) {
- for (i=1;(3-justification)*i+len+justification-2<outputwidth;i++) {
- myputchar(' ');
- }
- }
- }
- for (i=0;i<len;i++) {
- myputchar(string[i]==hardblank?' ':string[i]);
- }
- myputchar('\n');
-}
-
-
-/****************************************************************************
-
- printline
-
- Prints outputline using putstring, then clears the current line.
-
-****************************************************************************/
-
-void printline()
-{
- int i;
-
- for (i=0;i<charheight;i++) {
- putstring(outputline[i]);
- }
- clearline();
-}
-
-
-/****************************************************************************
-
- splitline
-
- Splits inchrline at the last word break (bunch of consecutive blanks).
- Makes a new line out of the first part and prints it using
- printline. Makes a new line out of the second part and returns.
-
-****************************************************************************/
-
-void splitline()
-{
- int i,gotspace,lastspace,len1,len2;
- inchr *part1,*part2;
-
- part1 = (inchr*)myalloc(sizeof(inchr)*(inchrlinelen+1));
- part2 = (inchr*)myalloc(sizeof(inchr)*(inchrlinelen+1));
- gotspace = 0;
- for (i=inchrlinelen-1;i>=0;i--) {
- if (!gotspace && inchrline[i]==' ') {
- gotspace = 1;
- lastspace = i;
- }
- if (gotspace && inchrline[i]!=' ') {
- break;
- }
- }
- len1 = i+1;
- len2 = inchrlinelen-lastspace-1;
- for (i=0;i<len1;i++) {
- part1[i] = inchrline[i];
- }
- for (i=0;i<len2;i++) {
- part2[i] = inchrline[lastspace+1+i];
- }
- clearline();
- for (i=0;i<len1;i++) {
- addchar(part1[i]);
- }
- printline();
- for (i=0;i<len2;i++) {
- addchar(part2[i]);
- }
- free(part1);
- free(part2);
-}
-
-
-/****************************************************************************
-
- handlemapping
-
- Given an input character (type inchr), executes re-mapping commands
- read from control files. Returns re-mapped character (inchr).
-
-****************************************************************************/
-
-inchr handlemapping(c)
-inchr c;
-{
- comnode *cmptr;
-
- cmptr=commandlist;
- while (cmptr!=NULL) {
- if (cmptr->thecommand ?
- (c >= cmptr->rangelo && c <= cmptr->rangehi) : 0) {
- c += cmptr->offset;
- while(cmptr!=NULL ? cmptr->thecommand : 0) {
- cmptr=cmptr->next;
- }
- }
- else {
- cmptr=cmptr->next;
- }
- }
- return c;
-}
-
-/****************************************************************************
-
- Agetchar
-
- Replacement to getchar().
- Acts exactly like getchar if -A is NOT specified,
- else obtains input from All remaining command line words.
-
-****************************************************************************/
-
-int Agetchar()
-{
- extern int optind; /* current argv[] element under study */
- static AgetMode = 0; /* >= 0 for displacement into argv[n], <0 EOF */
- char *arg; /* pointer to active character */
- int c; /* current character */
-
- if ( ! cmdinput ) /* is -A active? */
- return( getchar() ); /* no: return stdin character */
-
- if ( AgetMode < 0 || optind >= Myargc ) /* EOF is sticky: */
- return( EOF ); /* **ensure it now and forever more */
-
- /* find next character */
- arg = Myargv[optind]; /* pointer to active arg */
- c = arg[AgetMode++]&0xFF; /* get appropriate char of arg */
-
- if ( ! c ) /* at '\0' that terminates word? */
- { /* at end of word: return ' ' if normal word, '\n' if empty */
- c = ' '; /* suppose normal word and return blank */
- if ( AgetMode == 1 ) /* if ran out in very 1st char, force \n */
- c = '\n'; /* (allows "hello '' world" to do \n at '') */
- AgetMode = 0; /* return to char 0 in NEXT word */
- if ( ++optind >= Myargc ) /* run up word count and check if at "EOF" */
- { /* just ran out of arguments */
- c = EOF; /* return EOF */
- AgetMode = -1; /* ensure all future returns return EOF */
- }
- }
-
- return( c ); /* return appropriate character */
-
-} /* end: Agetchar() */
-
-
-/****************************************************************************
-
- iso2022
-
- Called by getinchr. Interprets ISO 2022 sequences
-
-******************************************************************************/
-
-inchr iso2022()
-{
- inchr ch;
- inchr ch2;
- int save_gl;
- int save_gr;
-
- ch = Agetchar();
- if (ch == EOF) return ch;
- if (ch == 27) ch = Agetchar() + 0x100; /* ESC x */
- if (ch == 0x100 + '$') ch = Agetchar() + 0x200; /* ESC $ x */
- switch (ch) {
- case 14: /* invoke G0 into GL */
- gl = 0;
- return iso2022();
- case 15: /* invoke G1 into GL */
- gl = 1;
- return iso2022();
- case 142: case 'N' + 0x100: /* invoke G2 into GL for next char */
- save_gl = gl; save_gr = gr;
- gl = gr = 2;
- ch = iso2022();
- gl = save_gl; gr = save_gr;
- return ch;
- case 143: case 'O' + 0x100: /* invoke G3 into GL for next char */
- save_gl = gl; save_gr = gr;
- gl = gr = 3;
- ch = iso2022();
- gl = save_gl; gr = save_gr;
- return ch;
- case 'n' + 0x100: /* invoke G2 into GL */
- gl = 2;
- return iso2022();
- case 'o' + 0x100: /* invoke G3 into GL */
- gl = 3;
- return iso2022();
- case '~' + 0x100: /* invoke G1 into GR */
- gr = 1;
- return iso2022();
- case '}' + 0x100: /* invoke G2 into GR */
- gr = 2;
- return iso2022();
- case '|' + 0x100: /* invoke G3 into GR */
- gr = 3;
- return iso2022();
- case '(' + 0x100: /* set G0 to 94-char set */
- ch = Agetchar();
- if (ch == 'B') ch = 0; /* ASCII */
- gn[0] = ch << 16;
- gndbl[0] = 0;
- return iso2022();
- case ')' + 0x100: /* set G1 to 94-char set */
- ch = Agetchar();
- if (ch == 'B') ch = 0;
- gn[1] = ch << 16;
- gndbl[1] = 0;
- return iso2022();
- case '*' + 0x100: /* set G2 to 94-char set */
- ch = Agetchar();
- if (ch == 'B') ch = 0;
- gn[2] = ch << 16;
- gndbl[2] = 0;
- return iso2022();
- case '+' + 0x100: /* set G3 to 94-char set */
- ch = Agetchar();
- if (ch == 'B') ch = 0;
- gn[3] = ch << 16;
- gndbl[3] = 0;
- return iso2022();
- case '-' + 0x100: /* set G1 to 96-char set */
- ch = Agetchar();
- if (ch == 'A') ch = 0; /* Latin-1 top half */
- gn[1] = (ch << 16) | 0x80;
- gndbl[1] = 0;
- return iso2022();
- case '.' + 0x100: /* set G2 to 96-char set */
- ch = Agetchar();
- if (ch == 'A') ch = 0;
- gn[2] = (ch << 16) | 0x80;
- gndbl[2] = 0;
- return iso2022();
- case '/' + 0x100: /* set G3 to 96-char set */
- ch = Agetchar();
- if (ch == 'A') ch = 0;
- gn[3] = (ch << 16) | 0x80;
- gndbl[3] = 0;
- return iso2022();
- case '(' + 0x200: /* set G0 to 94 x 94 char set */
- ch = Agetchar();
- gn[0] = ch << 16;
- gndbl[0] = 1;
- return iso2022();
- case ')' + 0x200: /* set G1 to 94 x 94 char set */
- ch = Agetchar();
- gn[1] = ch << 16;
- gndbl[1] = 1;
- return iso2022();
- case '*' + 0x200: /* set G2 to 94 x 94 char set */
- ch = Agetchar();
- gn[2] = ch << 16;
- gndbl[2] = 1;
- return iso2022();
- case '+' + 0x200: /* set G3 to 94 x 94 char set */
- ch = Agetchar();
- gn[3] = ch << 16;
- gndbl[3] = 1;
- return iso2022();
- default:
- if (ch & 0x200) { /* set G0 to 94 x 94 char set (deprecated) */
- gn[0] = (ch & ~0x200) << 16;
- gndbl[0] = 1;
- return iso2022();
- }
- }
-
- if (ch >= 0x21 && ch <= 0x7E) { /* process GL */
- if (gndbl[gl]) {
- ch2 = Agetchar();
- return gn[gl] | (ch << 8) | ch2;
- }
- else return gn[gl] | ch;
- }
- else if (ch >= 0xA0 && ch <= 0xFF) { /* process GR */
- if (gndbl[gr]) {
- ch2 = Agetchar();
- return gn[gr] | (ch << 8) | ch2;
- }
- else return gn[gr] | (ch & ~0x80);
- }
- else return ch;
- }
-
-/****************************************************************************
-
- ungetinchr
-
- Called by main. Pushes back an "inchr" to be read by getinchr
- on the next call.
-
-******************************************************************************/
-inchr getinchr_buffer;
-int getinchr_flag;
-
-inchr ungetinchr(c)
-inchr c;
-{
- getinchr_buffer = c;
- getinchr_flag = 1;
- return c;
-}
-
-/*****************************************************************************
-
- getinchr
-
- Called by main. Processes multibyte characters. Invokes Agetchar.
- If multibyte = 0, ISO 2022 mode (see iso2022 routine).
- If multibyte = 1, double-byte mode (0x00-0x7f bytes are characters,
- 0x80-0xFF bytes are first byte of a double-byte character).
- If multibyte = 2, Unicode UTF-8 mode (0x00-0x7F bytes are characters,
- 0x80-0xBF bytes are nonfirst byte of a multibyte character,
- 0xC0-0xFD bytes are first byte of a multibyte character,
- 0xFE-0xFF bytes are errors (all errors return code 0x0080)).
- If multibyte = 3, HZ mode ("~{" starts double-byte mode, "}~" ends it,
- "~~" is a tilde, "~x" for all other x is ignored).
- If multibyte = 4, Shift-JIS mode (0x80-0x9F and 0xE0-0xEF are first byte
- of a double-byte character, all other bytes are characters).
-
-
-*****************************************************************************/
-
-inchr getinchr()
-{
- int ch, ch2, ch3, ch4, ch5, ch6;
-
- if (getinchr_flag) {
- getinchr_flag = 0;
- return getinchr_buffer;
- }
-
- switch(multibyte) {
- case 0: /* single-byte */
- return iso2022();
- case 1: /* DBCS */
- ch = Agetchar();
- if ((ch >= 0x80 && ch <= 0x9F) ||
- (ch >= 0xE0 && ch <= 0xEF)) {
- ch = (ch << 8) + Agetchar();
- }
- return ch;
- case 2: /* UTF-8 */
- ch = Agetchar();
- if (ch < 0x80) return ch; /* handles EOF, too */
- if (ch < 0xC0 || ch > 0xFD)
- return 0x0080; /* illegal first character */
- ch2 = Agetchar() & 0x3F;
- if (ch < 0xE0) return ((ch & 0x1F) << 6) + ch2;
- ch3 = Agetchar() & 0x3F;
- if (ch < 0xF0)
- return ((ch & 0x0F) << 12) + (ch2 << 6) + ch3;
- ch4 = Agetchar() & 0x3F;
- if (ch < 0xF8)
- return ((ch & 0x07) << 18) + (ch2 << 12) + (ch3 << 6) + ch4;
- ch5 = Agetchar() & 0x3F;
- if (ch < 0xFC)
- return ((ch & 0x03) << 24) + (ch2 << 18) + (ch3 << 12) +
- (ch4 << 6) + ch5;
- ch6 = Agetchar() & 0x3F;
- return ((ch & 0x01) << 30) + (ch2 << 24) + (ch3 << 18) +
- (ch4 << 12) + (ch5 << 6) + ch6;
- case 3: /* HZ */
- ch = Agetchar();
- if (ch == EOF) return ch;
- if (hzmode) {
- ch = (ch << 8) + Agetchar();
- if (ch == ('}' << 8) + '~') {
- hzmode = 0;
- return getinchr();
- }
- return ch;
- }
- else if (ch == '~') {
- ch = Agetchar();
- if (ch == '{') {
- hzmode = 1;
- return getinchr();
- }
- else if (ch == '~') {
- return ch;
- }
- else {
- return getinchr();
- }
- }
- else return ch;
- case 4: /* Shift-JIS */
- ch = Agetchar();
- if ((ch >= 0x80 && ch <= 0x9F) ||
- (ch >= 0xE0 && ch <= 0xEF)) {
- ch = (ch << 8) + Agetchar();
- }
- return ch;
- default:
- return 0x80;
- }
- }
-
-/****************************************************************************
-
- main
-
- The main program, of course.
- Reads characters 1 by 1 from stdin, and makes lines out of them using
- addchar. Handles line breaking, (which accounts for most of the
- complexity in this function).
-
-****************************************************************************/
-
-int main(argc,argv)
-int argc;
-char *argv[];
-{
- inchr c,c2;
- int i;
- int last_was_eol_flag;
-/*---------------------------------------------------------------------------
- wordbreakmode:
- -1: /^$/ and blanks are to be absorbed (when line break was forced
- by a blank or character larger than outlinelenlimit)
- 0: /^ *$/ and blanks are not to be absorbed
- 1: /[^ ]$/ no word break yet
- 2: /[^ ] *$/
- 3: /[^ ]$/ had a word break
----------------------------------------------------------------------------*/
- int wordbreakmode;
- int char_not_added;
-
- Myargc = argc;
- Myargv = argv;
- getparams();
- readcontrolfiles();
- readfont();
- linealloc();
-
- wordbreakmode = 0;
- last_was_eol_flag = 0;
-
- while ((c = getinchr())!=EOF) {
-
- if (c=='\n'&&paragraphflag&&!last_was_eol_flag) {
- ungetinchr(c2 = getinchr());
- c = ((isascii(c2)&&isspace(c2))?'\n':' ');
- }
- last_was_eol_flag = (isascii(c)&&isspace(c)&&c!='\t'&&c!=' ');
-
- if (deutschflag) {
- if (c>='[' && c<=']') {
- c = deutsch[c-'['];
- }
- else if (c >='{' && c <= '~') {
- c = deutsch[c-'{'+3];
- }
- }
-
- c = handlemapping(c);
-
- if (isascii(c)&&isspace(c)) {
- c = (c=='\t'||c==' ') ? ' ' : '\n';
- }
-
- if ((c>'\0' && c<' ' && c!='\n') || c==127) continue;
-
-/*
- Note: The following code is complex and thoroughly tested.
- Be careful when modifying!
-*/
-
- do {
- char_not_added = 0;
-
- if (wordbreakmode== -1) {
- if (c==' ') {
- break;
- }
- else if (c=='\n') {
- wordbreakmode = 0;
- break;
- }
- wordbreakmode = 0;
- }
-
- if (c=='\n') {
- printline();
- wordbreakmode = 0;
- }
-
- else if (addchar(c)) {
- if (c!=' ') {
- wordbreakmode = (wordbreakmode>=2)?3:1;
- }
- else {
- wordbreakmode = (wordbreakmode>0)?2:0;
- }
- }
-
- else if (outlinelen==0) {
- for (i=0;i<charheight;i++) {
- if (right2left && outputwidth>1) {
- putstring(currchar[i]+MYSTRLEN(currchar[i])-outlinelenlimit);
- }
- else {
- putstring(currchar[i]);
- }
- }
- wordbreakmode = -1;
- }
-
- else if (c==' ') {
- if (wordbreakmode==2) {
- splitline();
- }
- else {
- printline();
- }
- wordbreakmode = -1;
- }
-
- else {
- if (wordbreakmode>=2) {
- splitline();
- }
- else {
- printline();
- }
- wordbreakmode = (wordbreakmode==3)?1:0;
- char_not_added = 1;
- }
-
- } while (char_not_added);
- }
-
- if (outlinelen!=0) {
- printline();
- }
-
- /* XXX Xen hack -- finish off the C macro output */
- if ( nr_chars != 0 )
- putchar('"');
- putchar('\n');
-
- exit(0);
-}
diff --git a/xen/tools/figlet/xen.flf b/xen/tools/figlet/xen.flf
deleted file mode 100644
index e13e842fd7..0000000000
--- a/xen/tools/figlet/xen.flf
+++ /dev/null
@@ -1,2230 +0,0 @@
-flf2a$ 6 5 16 15 14 0 24463 229
-Standard by Glenn Chappell & Ian Chai 3/93 -- based on Frank's .sig
-Includes ISO Latin-1
-figlet release 2.1 -- 12 Aug 1994
-Modified for figlet 2.2 by John Cowan <cowan@ccil.org>
- to add Latin-{2,3,4,5} support (Unicode U+0100-017F).
-Permission is hereby given to modify this font, as long as the
-modifier's name is placed on a comment line.
-
-Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter
-supported by FIGlet and FIGWin. May also be slightly modified for better use
-of new full-width/kern/smush alternatives, but default output is NOT changed.
-
-Modified by Keir Fraser <kaf24@cl.cam.ac.uk> for Xen build system.
-
- $@
- $@
- $@
- $@
- $@
- $@@
- _ @
- | |@
- | |@
- |_|@
- (_)@
- @@
- _ _ @
- ( | )@
- V V @
- $ @
- $ @
- @@
- _ _ @
- _| || |_ @
- |_ .. _|@
- |_ _|@
- |_||_| @
- @@
- _ @
- | | @
- / __)@
- \__ \@
- ( /@
- |_| @@
- _ __@
- (_)/ /@
- / / @
- / /_ @
- /_/(_)@
- @@
- ___ @
- ( _ ) @
- / _ \/\@
- | (_> <@
- \___/\/@
- @@
- _ @
- ( )@
- |/ @
- $ @
- $ @
- @@
- __@
- / /@
- | | @
- | | @
- | | @
- \_\@@
- __ @
- \ \ @
- | |@
- | |@
- | |@
- /_/ @@
- @
- __/\__@
- \ /@
- /_ _\@
- \/ @
- @@
- @
- _ @
- _| |_ @
- |_ _|@
- |_| @
- @@
- @
- @
- @
- _ @
- ( )@
- |/ @@
- @
- @
- __ @
- |__|@
- $ @
- @@
- @
- @
- @
- _ @
- (_)@
- @@
- __@
- / /@
- / / @
- / / @
- /_/ @
- @@
- ___ @
- / _ \ @
- | | | |@
- | |_| |@
- \___/ @
- @@
- _ @
- / |@
- | |@
- | |@
- |_|@
- @@
- ____ @
- |___ \ @
- __) |@
- / __/ @
- |_____|@
- @@
- _____ @
- |___ / @
- |_ \ @
- ___) |@
- |____/ @
- @@
- _ _ @
- | || | @
- | || |_ @
- |__ _|@
- |_| @
- @@
- ____ @
- | ___| @
- |___ \ @
- ___) |@
- |____/ @
- @@
- __ @
- / /_ @
- | '_ \ @
- | (_) |@
- \___/ @
- @@
- _____ @
- |___ |@
- / / @
- / / @
- /_/ @
- @@
- ___ @
- ( _ ) @
- / _ \ @
- | (_) |@
- \___/ @
- @@
- ___ @
- / _ \ @
- | (_) |@
- \__, |@
- /_/ @
- @@
- @
- _ @
- (_)@
- _ @
- (_)@
- @@
- @
- _ @
- (_)@
- _ @
- ( )@
- |/ @@
- __@
- / /@
- / / @
- \ \ @
- \_\@
- @@
- @
- _____ @
- |_____|@
- |_____|@
- $ @
- @@
- __ @
- \ \ @
- \ \@
- / /@
- /_/ @
- @@
- ___ @
- |__ \@
- / /@
- |_| @
- (_) @
- @@
- ____ @
- / __ \ @
- / / _` |@
- | | (_| |@
- \ \__,_|@
- \____/ @@
- _ @
- / \ @
- / _ \ @
- / ___ \ @
- /_/ \_\@
- @@
- ____ @
- | __ ) @
- | _ \ @
- | |_) |@
- |____/ @
- @@
- ____ @
- / ___|@
- | | @
- | |___ @
- \____|@
- @@
- ____ @
- | _ \ @
- | | | |@
- | |_| |@
- |____/ @
- @@
- _____ @
- | ____|@
- | _| @
- | |___ @
- |_____|@
- @@
- _____ @
- | ___|@
- | |_ @
- | _| @
- |_| @
- @@
- ____ @
- / ___|@
- | | _ @
- | |_| |@
- \____|@
- @@
- _ _ @
- | | | |@
- | |_| |@
- | _ |@
- |_| |_|@
- @@
- ___ @
- |_ _|@
- | | @
- | | @
- |___|@
- @@
- _ @
- | |@
- _ | |@
- | |_| |@
- \___/ @
- @@
- _ __@
- | |/ /@
- | ' / @
- | . \ @
- |_|\_\@
- @@
- _ @
- | | @
- | | @
- | |___ @
- |_____|@
- @@
- __ __ @
- | \/ |@
- | |\/| |@
- | | | |@
- |_| |_|@
- @@
- _ _ @
- | \ | |@
- | \| |@
- | |\ |@
- |_| \_|@
- @@
- ___ @
- / _ \ @
- | | | |@
- | |_| |@
- \___/ @
- @@
- ____ @
- | _ \ @
- | |_) |@
- | __/ @
- |_| @
- @@
- ___ @
- / _ \ @
- | | | |@
- | |_| |@
- \__\_\@
- @@
- ____ @
- | _ \ @
- | |_) |@
- | _ < @
- |_| \_\@
- @@
- ____ @
- / ___| @
- \___ \ @
- ___) |@
- |____/ @
- @@
- _____ @
- |_ _|@
- | | @
- | | @
- |_| @
- @@
- _ _ @
- | | | |@
- | | | |@
- | |_| |@
- \___/ @
- @@
- __ __@
- \ \ / /@
- \ \ / / @
- \ V / @
- \_/ @
- @@
- __ __@
- \ \ / /@
- \ \ /\ / / @
- \ V V / @
- \_/\_/ @
- @@
- __ __@
- \ \/ /@
- \ / @
- / \ @
- /_/\_\@
- @@
- __ __@
- \ \ / /@
- \ V / @
- | | @
- |_| @
- @@
- _____@
- |__ /@
- / / @
- / /_ @
- /____|@
- @@
- __ @
- | _|@
- | | @
- | | @
- | | @
- |__|@@
- __ @
- \ \ @
- \ \ @
- \ \ @
- \_\@
- @@
- __ @
- |_ |@
- | |@
- | |@
- | |@
- |__|@@
- /\ @
- |/\|@
- $ @
- $ @
- $ @
- @@
- @
- @
- @
- @
- _____ @
- |_____|@@
- _ @
- ( )@
- \|@
- $ @
- $ @
- @@
- @
- __ _ @
- / _` |@
- | (_| |@
- \__,_|@
- @@
- _ @
- | |__ @
- | '_ \ @
- | |_) |@
- |_.__/ @
- @@
- @
- ___ @
- / __|@
- | (__ @
- \___|@
- @@
- _ @
- __| |@
- / _` |@
- | (_| |@
- \__,_|@
- @@
- @
- ___ @
- / _ \@
- | __/@
- \___|@
- @@
- __ @
- / _|@
- | |_ @
- | _|@
- |_| @
- @@
- @
- __ _ @
- / _` |@
- | (_| |@
- \__, |@
- |___/ @@
- _ @
- | |__ @
- | '_ \ @
- | | | |@
- |_| |_|@
- @@
- _ @
- (_)@
- | |@
- | |@
- |_|@
- @@
- _ @
- (_)@
- | |@
- | |@
- _/ |@
- |__/ @@
- _ @
- | | __@
- | |/ /@
- | < @
- |_|\_\@
- @@
- _ @
- | |@
- | |@
- | |@
- |_|@
- @@
- @
- _ __ ___ @
- | '_ ` _ \ @
- | | | | | |@
- |_| |_| |_|@
- @@
- @
- _ __ @
- | '_ \ @
- | | | |@
- |_| |_|@
- @@
- @
- ___ @
- / _ \ @
- | (_) |@
- \___/ @
- @@
- @
- _ __ @
- | '_ \ @
- | |_) |@
- | .__/ @
- |_| @@
- @
- __ _ @
- / _` |@
- | (_| |@
- \__, |@
- |_|@@
- @
- _ __ @
- | '__|@
- | | @
- |_| @
- @@
- @
- ___ @
- / __|@
- \__ \@
- |___/@
- @@
- _ @
- | |_ @
- | __|@
- | |_ @
- \__|@
- @@
- @
- _ _ @
- | | | |@
- | |_| |@
- \__,_|@
- @@
- @
- __ __@
- \ \ / /@
- \ V / @
- \_/ @
- @@
- @
- __ __@
- \ \ /\ / /@
- \ V V / @
- \_/\_/ @
- @@
- @
- __ __@
- \ \/ /@
- > < @
- /_/\_\@
- @@
- @
- _ _ @
- | | | |@
- | |_| |@
- \__, |@
- |___/ @@
- @
- ____@
- |_ /@
- / / @
- /___|@
- @@
- __@
- / /@
- | | @
- < < @
- | | @
- \_\@@
- _ @
- | |@
- | |@
- | |@
- | |@
- |_|@@
- __ @
- \ \ @
- | | @
- > >@
- | | @
- /_/ @@
- /\/|@
- |/\/ @
- $ @
- $ @
- $ @
- @@
- _ _ @
- (_)_(_)@
- /_\ @
- / _ \ @
- /_/ \_\@
- @@
- _ _ @
- (_)_(_)@
- / _ \ @
- | |_| |@
- \___/ @
- @@
- _ _ @
- (_) (_)@
- | | | |@
- | |_| |@
- \___/ @
- @@
- _ _ @
- (_)_(_)@
- / _` |@
- | (_| |@
- \__,_|@
- @@
- _ _ @
- (_)_(_)@
- / _ \ @
- | (_) |@
- \___/ @
- @@
- _ _ @
- (_) (_)@
- | | | |@
- | |_| |@
- \__,_|@
- @@
- ___ @
- / _ \@
- | |/ /@
- | |\ \@
- | ||_/@
- |_| @@
-160 NO-BREAK SPACE
- $@
- $@
- $@
- $@
- $@
- $@@
-161 INVERTED EXCLAMATION MARK
- _ @
- (_)@
- | |@
- | |@
- |_|@
- @@
-162 CENT SIGN
- _ @
- | | @
- / __)@
- | (__ @
- \ )@
- |_| @@
-163 POUND SIGN
- ___ @
- / ,_\ @
- _| |_ @
- | |___ @
- (_,____|@
- @@
-164 CURRENCY SIGN
- /\___/\@
- \ _ /@
- | (_) |@
- / ___ \@
- \/ \/@
- @@
-165 YEN SIGN
- __ __ @
- \ V / @
- |__ __|@
- |__ __|@
- |_| @
- @@
-166 BROKEN BAR
- _ @
- | |@
- |_|@
- _ @
- | |@
- |_|@@
-167 SECTION SIGN
- __ @
- _/ _)@
- / \ \ @
- \ \\ \@
- \ \_/@
- (__/ @@
-168 DIAERESIS
- _ _ @
- (_) (_)@
- $ $ @
- $ $ @
- $ $ @
- @@
-169 COPYRIGHT SIGN
- _____ @
- / ___ \ @
- / / __| \ @
- | | (__ |@
- \ \___| / @
- \_____/ @@
-170 FEMININE ORDINAL INDICATOR
- __ _ @
- / _` |@
- \__,_|@
- |____|@
- $ @
- @@
-171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
- ____@
- / / /@
- / / / @
- \ \ \ @
- \_\_\@
- @@
-172 NOT SIGN
- @
- _____ @
- |___ |@
- |_|@
- $ @
- @@
-173 SOFT HYPHEN
- @
- @
- ____ @
- |____|@
- $ @
- @@
-174 REGISTERED SIGN
- _____ @
- / ___ \ @
- / | _ \ \ @
- | | / |@
- \ |_|_\ / @
- \_____/ @@
-175 MACRON
- _____ @
- |_____|@
- $ @
- $ @
- $ @
- @@
-176 DEGREE SIGN
- __ @
- / \ @
- | () |@
- \__/ @
- $ @
- @@
-177 PLUS-MINUS SIGN
- _ @
- _| |_ @
- |_ _|@
- _|_|_ @
- |_____|@
- @@
-178 SUPERSCRIPT TWO
- ___ @
- |_ )@
- / / @
- /___|@
- $ @
- @@
-179 SUPERSCRIPT THREE
- ____@
- |__ /@
- |_ \@
- |___/@
- $ @
- @@
-180 ACUTE ACCENT
- __@
- /_/@
- $ @
- $ @
- $ @
- @@
-181 MICRO SIGN
- @
- _ _ @
- | | | |@
- | |_| |@
- | ._,_|@
- |_| @@
-182 PILCROW SIGN
- _____ @
- / |@
- | (| | |@
- \__ | |@
- |_|_|@
- @@
-183 MIDDLE DOT
- @
- _ @
- (_)@
- $ @
- $ @
- @@
-184 CEDILLA
- @
- @
- @
- @
- _ @
- )_)@@
-185 SUPERSCRIPT ONE
- _ @
- / |@
- | |@
- |_|@
- $ @
- @@
-186 MASCULINE ORDINAL INDICATOR
- ___ @
- / _ \@
- \___/@
- |___|@
- $ @
- @@
-187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
- ____ @
- \ \ \ @
- \ \ \@
- / / /@
- /_/_/ @
- @@
-188 VULGAR FRACTION ONE QUARTER
- _ __ @
- / | / / _ @
- | |/ / | | @
- |_/ /|_ _|@
- /_/ |_| @
- @@
-189 VULGAR FRACTION ONE HALF
- _ __ @
- / | / /__ @
- | |/ /_ )@
- |_/ / / / @
- /_/ /___|@
- @@
-190 VULGAR FRACTION THREE QUARTERS
- ____ __ @
- |__ / / / _ @
- |_ \/ / | | @
- |___/ /|_ _|@
- /_/ |_| @
- @@
-191 INVERTED QUESTION MARK
- _ @
- (_) @
- | | @
- / /_ @
- \___|@
- @@
-192 LATIN CAPITAL LETTER A WITH GRAVE
- __ @
- \_\ @
- /_\ @
- / _ \ @
- /_/ \_\@
- @@
-193 LATIN CAPITAL LETTER A WITH ACUTE
- __ @
- /_/ @
- /_\ @
- / _ \ @
- /_/ \_\@
- @@
-194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
- //\ @
- |/_\| @
- /_\ @
- / _ \ @
- /_/ \_\@
- @@
-195 LATIN CAPITAL LETTER A WITH TILDE
- /\/| @
- |/\/ @
- /_\ @
- / _ \ @
- /_/ \_\@
- @@
-196 LATIN CAPITAL LETTER A WITH DIAERESIS
- _ _ @
- (_)_(_)@
- /_\ @
- / _ \ @
- /_/ \_\@
- @@
-197 LATIN CAPITAL LETTER A WITH RING ABOVE
- _ @
- (o) @
- /_\ @
- / _ \ @
- /_/ \_\@
- @@
-198 LATIN CAPITAL LETTER AE
- ______ @
- / ____|@
- / _ _| @
- / __ |___ @
- /_/ |_____|@
- @@
-199 LATIN CAPITAL LETTER C WITH CEDILLA
- ____ @
- / ___|@
- | | @
- | |___ @
- \____|@
- )_) @@
-200 LATIN CAPITAL LETTER E WITH GRAVE
- __ @
- _\_\_ @
- | ____|@
- | _|_ @
- |_____|@
- @@
-201 LATIN CAPITAL LETTER E WITH ACUTE
- __ @
- _/_/_ @
- | ____|@
- | _|_ @
- |_____|@
- @@
-202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
- //\ @
- |/_\| @
- | ____|@
- | _|_ @
- |_____|@
- @@
-203 LATIN CAPITAL LETTER E WITH DIAERESIS
- _ _ @
- (_)_(_)@
- | ____|@
- | _|_ @
- |_____|@
- @@
-204 LATIN CAPITAL LETTER I WITH GRAVE
- __ @
- \_\ @
- |_ _|@
- | | @
- |___|@
- @@
-205 LATIN CAPITAL LETTER I WITH ACUTE
- __ @
- /_/ @
- |_ _|@
- | | @
- |___|@
- @@
-206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX
- //\ @
- |/_\|@
- |_ _|@
- | | @
- |___|@
- @@
-207 LATIN CAPITAL LETTER I WITH DIAERESIS
- _ _ @
- (_)_(_)@
- |_ _| @
- | | @
- |___| @
- @@
-208 LATIN CAPITAL LETTER ETH
- ____ @
- | _ \ @
- _| |_| |@
- |__ __| |@
- |____/ @
- @@
-209 LATIN CAPITAL LETTER N WITH TILDE
- /\/|@
- |/\/ @
- | \| |@
- | .` |@
- |_|\_|@
- @@
-210 LATIN CAPITAL LETTER O WITH GRAVE
- __ @
- \_\ @
- / _ \ @
- | |_| |@
- \___/ @
- @@
-211 LATIN CAPITAL LETTER O WITH ACUTE
- __ @
- /_/ @
- / _ \ @
- | |_| |@
- \___/ @
- @@
-212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
- //\ @
- |/_\| @
- / _ \ @
- | |_| |@
- \___/ @
- @@
-213 LATIN CAPITAL LETTER O WITH TILDE
- /\/| @
- |/\/ @
- / _ \ @
- | |_| |@
- \___/ @
- @@
-214 LATIN CAPITAL LETTER O WITH DIAERESIS
- _ _ @
- (_)_(_)@
- / _ \ @
- | |_| |@
- \___/ @
- @@
-215 MULTIPLICATION SIGN
- @
- @
- /\/\@
- > <@
- \/\/@
- @@
-216 LATIN CAPITAL LETTER O WITH STROKE
- ____ @
- / _// @
- | |// |@
- | //| |@
- //__/ @
- @@
-217 LATIN CAPITAL LETTER U WITH GRAVE
- __ @
- _\_\_ @
- | | | |@
- | |_| |@
- \___/ @
- @@
-218 LATIN CAPITAL LETTER U WITH ACUTE
- __ @
- _/_/_ @
- | | | |@
- | |_| |@
- \___/ @
- @@
-219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX
- //\ @
- |/ \| @
- | | | |@
- | |_| |@
- \___/ @
- @@
-220 LATIN CAPITAL LETTER U WITH DIAERESIS
- _ _ @
- (_) (_)@
- | | | |@
- | |_| |@
- \___/ @
- @@
-221 LATIN CAPITAL LETTER Y WITH ACUTE
- __ @
- __/_/__@
- \ \ / /@
- \ V / @
- |_| @
- @@
-222 LATIN CAPITAL LETTER THORN
- _ @
- | |___ @
- | __ \@
- | ___/@
- |_| @
- @@
-223 LATIN SMALL LETTER SHARP S
- ___ @
- / _ \@
- | |/ /@
- | |\ \@
- | ||_/@
- |_| @@
-224 LATIN SMALL LETTER A WITH GRAVE
- __ @
- \_\_ @
- / _` |@
- | (_| |@
- \__,_|@
- @@
-225 LATIN SMALL LETTER A WITH ACUTE
- __ @
- /_/_ @
- / _` |@
- | (_| |@
- \__,_|@
- @@
-226 LATIN SMALL LETTER A WITH CIRCUMFLEX
- //\ @
- |/_\| @
- / _` |@
- | (_| |@
- \__,_|@
- @@
-227 LATIN SMALL LETTER A WITH TILDE
- /\/| @
- |/\/_ @
- / _` |@
- | (_| |@
- \__,_|@
- @@
-228 LATIN SMALL LETTER A WITH DIAERESIS
- _ _ @
- (_)_(_)@
- / _` |@
- | (_| |@
- \__,_|@
- @@
-229 LATIN SMALL LETTER A WITH RING ABOVE
- __ @
- (()) @
- / _ '|@
- | (_| |@
- \__,_|@
- @@
-230 LATIN SMALL LETTER AE
- @
- __ ____ @
- / _` _ \@
- | (_| __/@
- \__,____|@
- @@
-231 LATIN SMALL LETTER C WITH CEDILLA
- @
- ___ @
- / __|@
- | (__ @
- \___|@
- )_) @@
-232 LATIN SMALL LETTER E WITH GRAVE
- __ @
- \_\ @
- / _ \@
- | __/@
- \___|@
- @@
-233 LATIN SMALL LETTER E WITH ACUTE
- __ @
- /_/ @
- / _ \@
- | __/@
- \___|@
- @@
-234 LATIN SMALL LETTER E WITH CIRCUMFLEX
- //\ @
- |/_\|@
- / _ \@
- | __/@
- \___|@
- @@
-235 LATIN SMALL LETTER E WITH DIAERESIS
- _ _ @
- (_)_(_)@
- / _ \ @
- | __/ @
- \___| @
- @@
-236 LATIN SMALL LETTER I WITH GRAVE
- __ @
- \_\@
- | |@
- | |@
- |_|@
- @@
-237 LATIN SMALL LETTER I WITH ACUTE
- __@
- /_/@
- | |@
- | |@
- |_|@
- @@
-238 LATIN SMALL LETTER I WITH CIRCUMFLEX
- //\ @
- |/_\|@
- | | @
- | | @
- |_| @
- @@
-239 LATIN SMALL LETTER I WITH DIAERESIS
- _ _ @
- (_)_(_)@
- | | @
- | | @
- |_| @
- @@
-240 LATIN SMALL LETTER ETH
- /\/\ @
- > < @
- _\/\ |@
- / __` |@
- \____/ @
- @@
-241 LATIN SMALL LETTER N WITH TILDE
- /\/| @
- |/\/ @
- | '_ \ @
- | | | |@
- |_| |_|@
- @@
-242 LATIN SMALL LETTER O WITH GRAVE
- __ @
- \_\ @
- / _ \ @
- | (_) |@
- \___/ @
- @@
-243 LATIN SMALL LETTER O WITH ACUTE
- __ @
- /_/ @
- / _ \ @
- | (_) |@
- \___/ @
- @@
-244 LATIN SMALL LETTER O WITH CIRCUMFLEX
- //\ @
- |/_\| @
- / _ \ @
- | (_) |@
- \___/ @
- @@
-245 LATIN SMALL LETTER O WITH TILDE
- /\/| @
- |/\/ @
- / _ \ @
- | (_) |@
- \___/ @
- @@
-246 LATIN SMALL LETTER O WITH DIAERESIS
- _ _ @
- (_)_(_)@
- / _ \ @
- | (_) |@
- \___/ @
- @@
-247 DIVISION SIGN
- @
- _ @
- _(_)_ @
- |_____|@
- (_) @
- @@
-248 LATIN SMALL LETTER O WITH STROKE
- @
- ____ @
- / _//\ @
- | (//) |@
- \//__/ @
- @@
-249 LATIN SMALL LETTER U WITH GRAVE
- __ @
- _\_\_ @
- | | | |@
- | |_| |@
- \__,_|@
- @@
-250 LATIN SMALL LETTER U WITH ACUTE
- __ @
- _/_/_ @
- | | | |@
- | |_| |@
- \__,_|@
- @@
-251 LATIN SMALL LETTER U WITH CIRCUMFLEX
- //\ @
- |/ \| @
- | | | |@
- | |_| |@
- \__,_|@
- @@
-252 LATIN SMALL LETTER U WITH DIAERESIS
- _ _ @
- (_) (_)@
- | | | |@
- | |_| |@
- \__,_|@
- @@
-253 LATIN SMALL LETTER Y WITH ACUTE
- __ @
- _/_/_ @
- | | | |@
- | |_| |@
- \__, |@
- |___/ @@
-254 LATIN SMALL LETTER THORN
- _ @
- | |__ @
- | '_ \ @
- | |_) |@
- | .__/ @
- |_| @@
-255 LATIN SMALL LETTER Y WITH DIAERESIS
- _ _ @
- (_) (_)@
- | | | |@
- | |_| |@
- \__, |@
- |___/ @@
-0x0100 LATIN CAPITAL LETTER A WITH MACRON
- ____ @
- /___/ @
- /_\ @
- / _ \ @
- /_/ \_\@
- @@
-0x0101 LATIN SMALL LETTER A WITH MACRON
- ___ @
- /_ _/@
- / _` |@
- | (_| |@
- \__,_|@
- @@
-0x0102 LATIN CAPITAL LETTER A WITH BREVE
- _ _ @
- \\_// @
- /_\ @
- / _ \ @
- /_/ \_\@
- @@
-0x0103 LATIN SMALL LETTER A WITH BREVE
- \_/ @
- ___ @
- / _` |@
- | (_| |@
- \__,_|@
- @@
-0x0104 LATIN CAPITAL LETTER A WITH OGONEK
- @
- _ @
- /_\ @
- / _ \ @
- /_/ \_\@
- (_(@@
-0x0105 LATIN SMALL LETTER A WITH OGONEK
- @
- __ _ @
- / _` |@
- | (_| |@
- \__,_|@
- (_(@@
-0x0106 LATIN CAPITAL LETTER C WITH ACUTE
- __ @
- _/_/ @
- / ___|@
- | |___ @
- \____|@
- @@
-0x0107 LATIN SMALL LETTER C WITH ACUTE
- __ @
- /__/@
- / __|@
- | (__ @
- \___|@
- @@
-0x0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX
- /\ @
- _//\\@
- / ___|@
- | |___ @
- \____|@
- @@
-0x0109 LATIN SMALL LETTER C WITH CIRCUMFLEX
- /\ @
- /_\ @
- / __|@
- | (__ @
- \___|@
- @@
-0x010A LATIN CAPITAL LETTER C WITH DOT ABOVE
- [] @
- ____ @
- / ___|@
- | |___ @
- \____|@
- @@
-0x010B LATIN SMALL LETTER C WITH DOT ABOVE
- [] @
- ___ @
- / __|@
- | (__ @
- \___|@
- @@
-0x010C LATIN CAPITAL LETTER C WITH CARON
- \\// @
- _\/_ @
- / ___|@
- | |___ @
- \____|@
- @@
-0x010D LATIN SMALL LETTER C WITH CARON
- \\//@
- _\/ @
- / __|@
- | (__ @
- \___|@
- @@
-0x010E LATIN CAPITAL LETTER D WITH CARON
- \\// @
- __\/ @
- | _ \ @
- | |_| |@
- |____/ @
- @@
-0x010F LATIN SMALL LETTER D WITH CARON
- \/ _ @
- __| |@
- / _` |@
- | (_| |@
- \__,_|@
- @@
-0x0110 LATIN CAPITAL LETTER D WITH STROKE
- ____ @
- |_ __ \ @
- /| |/ | |@
- /|_|/_| |@
- |_____/ @
- @@
-0x0111 LATIN SMALL LETTER D WITH STROKE
- ---|@
- __| |@
- / _` |@
- | (_| |@
- \__,_|@
- @@
-0x0112 LATIN CAPITAL LETTER E WITH MACRON
- ____ @
- /___/ @
- | ____|@
- | _|_ @
- |_____|@
- @@
-0x0113 LATIN SMALL LETTER E WITH MACRON
- ____@
- /_ _/@
- / _ \ @
- | __/ @
- \___| @
- @@
-0x0114 LATIN CAPITAL LETTER E WITH BREVE
- _ _ @
- \\_// @
- | ____|@
- | _|_ @
- |_____|@
- @@
-0x0115 LATIN SMALL LETTER E WITH BREVE
- \\ //@
- -- @
- / _ \ @
- | __/ @
- \___| @
- @@
-0x0116 LATIN CAPITAL LETTER E WITH DOT ABOVE
- [] @
- _____ @
- | ____|@
- | _|_ @
- |_____|@
- @@
-0x0117 LATIN SMALL LETTER E WITH DOT ABOVE
- [] @
- __ @
- / _ \@
- | __/@
- \___|@
- @@
-0x0118 LATIN CAPITAL LETTER E WITH OGONEK
- @
- _____ @
- | ____|@
- | _|_ @
- |_____|@
- (__(@@
-0x0119 LATIN SMALL LETTER E WITH OGONEK
- @
- ___ @
- / _ \@
- | __/@
- \___|@
- (_(@@
-0x011A LATIN CAPITAL LETTER E WITH CARON
- \\// @
- __\/_ @
- | ____|@
- | _|_ @
- |_____|@
- @@
-0x011B LATIN SMALL LETTER E WITH CARON
- \\//@
- \/ @
- / _ \@
- | __/@
- \___|@
- @@
-0x011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX
- _/\_ @
- / ___|@
- | | _ @
- | |_| |@
- \____|@
- @@
-0x011D LATIN SMALL LETTER G WITH CIRCUMFLEX
- /\ @
- _/_ \@
- / _` |@
- | (_| |@
- \__, |@
- |___/ @@
-0x011E LATIN CAPITAL LETTER G WITH BREVE
- _\/_ @
- / ___|@
- | | _ @
- | |_| |@
- \____|@
- @@
-0x011F LATIN SMALL LETTER G WITH BREVE
- \___/ @
- __ _ @
- / _` |@
- | (_| |@
- \__, |@
- |___/ @@
-0x0120 LATIN CAPITAL LETTER G WITH DOT ABOVE
- _[]_ @
- / ___|@
- | | _ @
- | |_| |@
- \____|@
- @@
-0x0121 LATIN SMALL LETTER G WITH DOT ABOVE
- [] @
- __ _ @
- / _` |@
- | (_| |@
- \__, |@
- |___/ @@
-0x0122 LATIN CAPITAL LETTER G WITH CEDILLA
- ____ @
- / ___|@
- | | _ @
- | |_| |@
- \____|@
- )__) @@
-0x0123 LATIN SMALL LETTER G WITH CEDILLA
- @
- __ _ @
- / _` |@
- | (_| |@
- \__, |@
- |_))))@@
-0x0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX
- _/ \_ @
- | / \ |@
- | |_| |@
- | _ |@
- |_| |_|@
- @@
-0x0125 LATIN SMALL LETTER H WITH CIRCUMFLEX
- _ /\ @
- | |//\ @
- | '_ \ @
- | | | |@
- |_| |_|@
- @@
-0x0126 LATIN CAPITAL LETTER H WITH STROKE
- _ _ @
- | |=| |@
- | |_| |@
- | _ |@
- |_| |_|@
- @@
-0x0127 LATIN SMALL LETTER H WITH STROKE
- _ @
- |=|__ @
- | '_ \ @
- | | | |@
- |_| |_|@
- @@
-0x0128 LATIN CAPITAL LETTER I WITH TILDE
- /\//@
- |_ _|@
- | | @
- | | @
- |___|@
- @@
-0x0129 LATIN SMALL LETTER I WITH TILDE
- @
- /\/@
- | |@
- | |@
- |_|@
- @@
-0x012A LATIN CAPITAL LETTER I WITH MACRON
- /___/@
- |_ _|@
- | | @
- | | @
- |___|@
- @@
-0x012B LATIN SMALL LETTER I WITH MACRON
- ____@
- /___/@
- | | @
- | | @
- |_| @
- @@
-0x012C LATIN CAPITAL LETTER I WITH BREVE
- \__/@
- |_ _|@
- | | @
- | | @
- |___|@
- @@
-0x012D LATIN SMALL LETTER I WITH BREVE
- @
- \_/@
- | |@
- | |@
- |_|@
- @@
-0x012E LATIN CAPITAL LETTER I WITH OGONEK
- ___ @
- |_ _|@
- | | @
- | | @
- |___|@
- (__(@@
-0x012F LATIN SMALL LETTER I WITH OGONEK
- _ @
- (_) @
- | | @
- | | @
- |_|_@
- (_(@@
-0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE
- _[] @
- |_ _|@
- | | @
- | | @
- |___|@
- @@
-0x0131 LATIN SMALL LETTER DOTLESS I
- @
- _ @
- | |@
- | |@
- |_|@
- @@
-0x0132 LATIN CAPITAL LIGATURE IJ
- ___ _ @
- |_ _|| |@
- | | | |@
- | |_| |@
- |__|__/ @
- @@
-0x0133 LATIN SMALL LIGATURE IJ
- _ _ @
- (_) (_)@
- | | | |@
- | | | |@
- |_|_/ |@
- |__/ @@
-0x0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX
- /\ @
- /_\|@
- _ | | @
- | |_| | @
- \___/ @
- @@
-0x0135 LATIN SMALL LETTER J WITH CIRCUMFLEX
- /\@
- /_\@
- | |@
- | |@
- _/ |@
- |__/ @@
-0x0136 LATIN CAPITAL LETTER K WITH CEDILLA
- _ _ @
- | |/ / @
- | ' / @
- | . \ @
- |_|\_\ @
- )__)@@
-0x0137 LATIN SMALL LETTER K WITH CEDILLA
- _ @
- | | __@
- | |/ /@
- | < @
- |_|\_\@
- )_)@@
-0x0138 LATIN SMALL LETTER KRA
- @
- _ __ @
- | |/ \@
- | < @
- |_|\_\@
- @@
-0x0139 LATIN CAPITAL LETTER L WITH ACUTE
- _ //@
- | | // @
- | | @
- | |___ @
- |_____|@
- @@
-0x013A LATIN SMALL LETTER L WITH ACUTE
- //@
- | |@
- | |@
- | |@
- |_|@
- @@
-0x013B LATIN CAPITAL LETTER L WITH CEDILLA
- _ @
- | | @
- | | @
- | |___ @
- |_____|@
- )__)@@
-0x013C LATIN SMALL LETTER L WITH CEDILLA
- _ @
- | | @
- | | @
- | | @
- |_| @
- )_)@@
-0x013D LATIN CAPITAL LETTER L WITH CARON
- _ \\//@
- | | \/ @
- | | @
- | |___ @
- |_____|@
- @@
-0x013E LATIN SMALL LETTER L WITH CARON
- _ \\//@
- | | \/ @
- | | @
- | | @
- |_| @
- @@
-0x013F LATIN CAPITAL LETTER L WITH MIDDLE DOT
- _ @
- | | @
- | | [] @
- | |___ @
- |_____|@
- @@
-0x0140 LATIN SMALL LETTER L WITH MIDDLE DOT
- _ @
- | | @
- | | []@
- | | @
- |_| @
- @@
-0x0141 LATIN CAPITAL LETTER L WITH STROKE
- __ @
- | // @
- |//| @
- // |__ @
- |_____|@
- @@
-0x0142 LATIN SMALL LETTER L WITH STROKE
- _ @
- | |@
- |//@
- //|@
- |_|@
- @@
-0x0143 LATIN CAPITAL LETTER N WITH ACUTE
- _/ /_ @
- | \ | |@
- | \| |@
- | |\ |@
- |_| \_|@
- @@
-0x0144 LATIN SMALL LETTER N WITH ACUTE
- _ @
- _ /_/ @
- | '_ \ @
- | | | |@
- |_| |_|@
- @@
-0x0145 LATIN CAPITAL LETTER N WITH CEDILLA
- _ _ @
- | \ | |@
- | \| |@
- | |\ |@
- |_| \_|@
- )_) @@
-0x0146 LATIN SMALL LETTER N WITH CEDILLA
- @
- _ __ @
- | '_ \ @
- | | | |@
- |_| |_|@
- )_) @@
-0x0147 LATIN CAPITAL LETTER N WITH CARON
- _\/ _ @
- | \ | |@
- | \| |@
- | |\ |@
- |_| \_|@
- @@
-0x0148 LATIN SMALL LETTER N WITH CARON
- \\// @
- _\/_ @
- | '_ \ @
- | | | |@
- |_| |_|@
- @@
-0x0149 LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
- @
- _ __ @
- ( )| '_\ @
- |/| | | |@
- |_| |_|@
- @@
-0x014A LATIN CAPITAL LETTER ENG
- _ _ @
- | \ | |@
- | \| |@
- | |\ |@
- |_| \ |@
- )_)@@
-0x014B LATIN SMALL LETTER ENG
- _ __ @
- | '_ \ @
- | | | |@
- |_| | |@
- | |@
- |__ @@
-0x014C LATIN CAPITAL LETTER O WITH MACRON
- ____ @
- /_ _/ @
- / _ \ @
- | (_) |@
- \___/ @
- @@
-0x014D LATIN SMALL LETTER O WITH MACRON
- ____ @
- /_ _/ @
- / _ \ @
- | (_) |@
- \___/ @
- @@
-0x014E LATIN CAPITAL LETTER O WITH BREVE
- \ / @
- _-_ @
- / _ \ @
- | |_| |@
- \___/ @
- @@
-0x014F LATIN SMALL LETTER O WITH BREVE
- \ / @
- _-_ @
- / _ \ @
- | |_| |@
- \___/ @
- @@
-0x0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
- ___ @
- /_/_/@
- / _ \ @
- | |_| |@
- \___/ @
- @@
-0x0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE
- ___ @
- /_/_/@
- / _ \ @
- | |_| |@
- \___/ @
- @@
-0x0152 LATIN CAPITAL LIGATURE OE
- ___ ___ @
- / _ \| __|@
- | | | | | @
- | |_| | |__@
- \___/|____@
- @@
-0x0153 LATIN SMALL LIGATURE OE
- @
- ___ ___ @
- / _ \ / _ \@
- | (_) | __/@
- \___/ \___|@
- @@
-0x0154 LATIN CAPITAL LETTER R WITH ACUTE
- _/_/ @
- | _ \ @
- | |_) |@
- | _ < @
- |_| \_\@
- @@
-0x0155 LATIN SMALL LETTER R WITH ACUTE
- __@
- _ /_/@
- | '__|@
- | | @
- |_| @
- @@
-0x0156 LATIN CAPITAL LETTER R WITH CEDILLA
- ____ @
- | _ \ @
- | |_) |@
- | _ < @
- |_| \_\@
- )_) @@
-0x0157 LATIN SMALL LETTER R WITH CEDILLA
- @
- _ __ @
- | '__|@
- | | @
- |_| @
- )_) @@
-0x0158 LATIN CAPITAL LETTER R WITH CARON
- _\_/ @
- | _ \ @
- | |_) |@
- | _ < @
- |_| \_\@
- @@
-0x0159 LATIN SMALL LETTER R WITH CARON
- \\// @
- _\/_ @
- | '__|@
- | | @
- |_| @
- @@
-0x015A LATIN CAPITAL LETTER S WITH ACUTE
- _/_/ @
- / ___| @
- \___ \ @
- ___) |@
- |____/ @
- @@
-0x015B LATIN SMALL LETTER S WITH ACUTE
- __@
- _/_/@
- / __|@
- \__ \@
- |___/@
- @@
-0x015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX
- _/\_ @
- / ___| @
- \___ \ @
- ___) |@
- |____/ @
- @@
-0x015D LATIN SMALL LETTER S WITH CIRCUMFLEX
- @
- /_\_@
- / __|@
- \__ \@
- |___/@
- @@
-0x015E LATIN CAPITAL LETTER S WITH CEDILLA
- ____ @
- / ___| @
- \___ \ @
- ___) |@
- |____/ @
- )__)@@
-0x015F LATIN SMALL LETTER S WITH CEDILLA
- @
- ___ @
- / __|@
- \__ \@
- |___/@
- )_)@@
-0x0160 LATIN CAPITAL LETTER S WITH CARON
- _\_/ @
- / ___| @
- \___ \ @
- ___) |@
- |____/ @
- @@
-0x0161 LATIN SMALL LETTER S WITH CARON
- \\//@
- _\/ @
- / __|@
- \__ \@
- |___/@
- @@
-0x0162 LATIN CAPITAL LETTER T WITH CEDILLA
- _____ @
- |_ _|@
- | | @
- | | @
- |_| @
- )__)@@
-0x0163 LATIN SMALL LETTER T WITH CEDILLA
- _ @
- | |_ @
- | __|@
- | |_ @
- \__|@
- )_)@@
-0x0164 LATIN CAPITAL LETTER T WITH CARON
- _____ @
- |_ _|@
- | | @
- | | @
- |_| @
- @@
-0x0165 LATIN SMALL LETTER T WITH CARON
- \/ @
- | |_ @
- | __|@
- | |_ @
- \__|@
- @@
-0x0166 LATIN CAPITAL LETTER T WITH STROKE
- _____ @
- |_ _|@
- | | @
- -|-|- @
- |_| @
- @@
-0x0167 LATIN SMALL LETTER T WITH STROKE
- _ @
- | |_ @
- | __|@
- |-|_ @
- \__|@
- @@
-0x0168 LATIN CAPITAL LETTER U WITH TILDE
- @
- _/\/_ @
- | | | |@
- | |_| |@
- \___/ @
- @@
-0x0169 LATIN SMALL LETTER U WITH TILDE
- @
- _/\/_ @
- | | | |@
- | |_| |@
- \__,_|@
- @@
-0x016A LATIN CAPITAL LETTER U WITH MACRON
- ____ @
- /__ _/@
- | | | |@
- | |_| |@
- \___/ @
- @@
-0x016B LATIN SMALL LETTER U WITH MACRON
- ____ @
- / _ /@
- | | | |@
- | |_| |@
- \__,_|@
- @@
-0x016C LATIN CAPITAL LETTER U WITH BREVE
- @
- \_/_ @
- | | | |@
- | |_| |@
- \____|@
- @@
-0x016D LATIN SMALL LETTER U WITH BREVE
- @
- \_/_ @
- | | | |@
- | |_| |@
- \__,_|@
- @@
-0x016E LATIN CAPITAL LETTER U WITH RING ABOVE
- O @
- __ _ @
- | | | |@
- | |_| |@
- \___/ @
- @@
-0x016F LATIN SMALL LETTER U WITH RING ABOVE
- O @
- __ __ @
- | | | |@
- | |_| |@
- \__,_|@
- @@
-0x0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
- -- --@
- /_//_/@
- | | | |@
- | |_| |@
- \___/ @
- @@
-0x0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE
- ____@
- _/_/_/@
- | | | |@
- | |_| |@
- \__,_|@
- @@
-0x0172 LATIN CAPITAL LETTER U WITH OGONEK
- _ _ @
- | | | |@
- | | | |@
- | |_| |@
- \___/ @
- (__(@@
-0x0173 LATIN SMALL LETTER U WITH OGONEK
- @
- _ _ @
- | | | |@
- | |_| |@
- \__,_|@
- (_(@@
-0x0174 LATIN CAPITAL LETTER W WITH CIRCUMFLEX
- __ /\ __@
- \ \ //\\/ /@
- \ \ /\ / / @
- \ V V / @
- \_/\_/ @
- @@
-0x0175 LATIN SMALL LETTER W WITH CIRCUMFLEX
- /\ @
- __ //\\__@
- \ \ /\ / /@
- \ V V / @
- \_/\_/ @
- @@
-0x0176 LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
- /\ @
- __//\\ @
- \ \ / /@
- \ V / @
- |_| @
- @@
-0x0177 LATIN SMALL LETTER Y WITH CIRCUMFLEX
- /\ @
- //\\ @
- | | | |@
- | |_| |@
- \__, |@
- |___/ @@
-0x0178 LATIN CAPITAL LETTER Y WITH DIAERESIS
- [] []@
- __ _@
- \ \ / /@
- \ V / @
- |_| @
- @@
-0x0179 LATIN CAPITAL LETTER Z WITH ACUTE
- __/_/@
- |__ /@
- / / @
- / /_ @
- /____|@
- @@
-0x017A LATIN SMALL LETTER Z WITH ACUTE
- _ @
- _/_/@
- |_ /@
- / / @
- /___|@
- @@
-0x017B LATIN CAPITAL LETTER Z WITH DOT ABOVE
- __[]_@
- |__ /@
- / / @
- / /_ @
- /____|@
- @@
-0x017C LATIN SMALL LETTER Z WITH DOT ABOVE
- [] @
- ____@
- |_ /@
- / / @
- /___|@
- @@
-0x017D LATIN CAPITAL LETTER Z WITH CARON
- _\_/_@
- |__ /@
- / / @
- / /_ @
- /____|@
- @@
-0x017E LATIN SMALL LETTER Z WITH CARON
- \\//@
- _\/_@
- |_ /@
- / / @
- /___|@
- @@
-0x017F LATIN SMALL LETTER LONG S
- __ @
- / _|@
- |-| | @
- |-| | @
- |_| @
- @@
-0x02C7 CARON
- \\//@
- \/ @
- $@
- $@
- $@
- $@@
-0x02D8 BREVE
- \\_//@
- \_/ @
- $@
- $@
- $@
- $@@
-0x02D9 DOT ABOVE
- []@
- $@
- $@
- $@
- $@
- $@@
-0x02DB OGONEK
- $@
- $@
- $@
- $@
- $@
- )_) @@
-0x02DD DOUBLE ACUTE ACCENT
- _ _ @
- /_/_/@
- $@
- $@
- $@
- $@@