From fd8bdecb536349d3ab94c25bab43eaba12513ee9 Mon Sep 17 00:00:00 2001
From: anon <anon@anon.anon>
Date: Mon, 13 Mar 2023 10:35:02 +0100
Subject: [PATCH] working demo

---
 FIGlib-test    |  Bin 0 -> 87952 bytes
 FIGlib.h       | 3637 ++++++++++++++++++++++++------------------------
 Makefile       |    8 +-
 figlet.c       |   10 +-
 libfiglib.so   |  Bin 0 -> 65176 bytes
 tests/FIGlib.c |    8 +-
 6 files changed, 1846 insertions(+), 1817 deletions(-)
 create mode 100755 FIGlib-test
 create mode 100755 libfiglib.so

diff --git a/FIGlib-test b/FIGlib-test
new file mode 100755
index 0000000000000000000000000000000000000000..2aa363b04f771f9e345316a10122d8e5af2130f3
GIT binary patch
literal 87952
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
Jfshe({y!Xa)mZ=l

literal 0
HcmV?d00001

diff --git a/FIGlib.h b/FIGlib.h
index 7aa3f54..098d132 100644
--- a/FIGlib.h
+++ b/FIGlib.h
@@ -54,7 +54,7 @@
 #define DEFAULTFONTDIR "fonts"
 #endif
 #ifndef DEFAULTFONTFILE
-#define DEFAULTFONTFILE "standard.flf"
+#define DEFAULTFONTFILE "standard"
 #endif
 
 #include <stdio.h>
@@ -167,1875 +167,1884 @@ outchr **currchar;
 int currcharwidth;
 int previouscharwidth;
 outchr **outputline;   /* Alloc'd char outputline[charheight][outlinelenlimit+1]; */
-int outlinelen;
+	int outlinelen;
 
 
-/****************************************************************************
+	/****************************************************************************
 
-  Globals dealing with command file storage
+	  Globals dealing with command file storage
 
-****************************************************************************/
+	****************************************************************************/
 
-typedef struct cfn {
-  char *thename;
-  struct cfn *next;
-  } cfnamenode;
+	typedef struct cfn {
+	  char *thename;
+	  struct cfn *next;
+	  } cfnamenode;
 
-cfnamenode *cfilelist,**cfilelistend;
+	cfnamenode *cfilelist,**cfilelistend;
 
-typedef struct cm {
-  int thecommand;
-  inchr rangelo;
-  inchr rangehi;
-  inchr offset;
-  struct cm *next;
-  } comnode;
+	typedef struct cm {
+	  int thecommand;
+	  inchr rangelo;
+	  inchr rangehi;
+	  inchr offset;
+	  struct cm *next;
+	  } comnode;
 
-comnode *commandlist,**commandlistend;
+	comnode *commandlist,**commandlistend;
 
-/****************************************************************************
+	/****************************************************************************
 
-  Globals affected by command line options
+	  Globals affected by command line options
 
-****************************************************************************/
+	****************************************************************************/
 
-int deutschflag,justification,paragraphflag,right2left,multibyte;
-int cmdinput;
+	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
+	#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;
+	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 */
+	#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 smushoverride;
 
-int outputwidth;
-int outlinelenlimit;
-char *fontdirname,*fontname;
+	int outputwidth;
+	int outlinelenlimit;
+	char *fontdirname,*fontname;
 
 
-/****************************************************************************
+	/****************************************************************************
 
-  Globals read from font file
+	  Globals read from font file
 
-****************************************************************************/
+	****************************************************************************/
 
-char hardblank;
-int charheight;
+	char hardblank;
+	int charheight;
 
 
-/****************************************************************************
+	/****************************************************************************
 
-  Name of program, used in error messages
+	  Name of program, used in error messages
 
-****************************************************************************/
+	****************************************************************************/
 
-char *myname;
+	char *myname;
 
 
-/*---------------------------------------------------------------------------
-  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
----------------------------------------------------------------------------*/
+	/*---------------------------------------------------------------------------
+	  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
+	---------------------------------------------------------------------------*/
 
 
-#ifdef TIOCGWINSZ
-/****************************************************************************
+	#ifdef TIOCGWINSZ
+	/****************************************************************************
 
-  get_columns
+	  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
+	  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;
+	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",
-    "              [ -f fontfile ] [ -m smushmode ] [ -w outputwidth ]\n"
-    "              [ -C controlfile ] [ -I infocode ] [ message ]\n",
-    myname);
-}
-
-
-/****************************************************************************
-
-  printinfo
-
-  Prints version and copyright message, or utility information.
-
-****************************************************************************/
-
-void printinfo(infonum)
-int infonum;
-{
-  switch (infonum) {
-    case 0: /* Copyright message */
-      printf("FIGlet Copyright (C) 1991-2012 Glenn Chappell, Ian Chai, "
-             "John Cowan,\nChristiaan Keet and Claudio Matsuoka\n"
-             "Internet: <info@figlet.org> "
-             "Version: %s, date: %s\n\n"
-             "FIGlet, along with the various FIGlet fonts"
-             " and documentation, may be\n"
-             "freely copied and distributed.\n\n"
-             "If you use FIGlet, please send an"
-             " e-mail message to <info@figlet.org>.\n\n"
-             "The latest version of FIGlet is available from the"
-             " web site,\n\thttp://www.figlet.org/\n\n",
-       VERSION,DATE);
-      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);
-      break;
-    case 5: /* Font formats */
-      printf("%s", FONTFILEMAGICNUMBER);
-#ifdef TLF_FONTS
-      printf(" %s", TOILETFILEMAGICNUMBER);
-#endif
-      printf("\n");
-    }
-}
-
-
-/****************************************************************************
-
-  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;
-  }
-
-/****************************************************************************
-
-  FIGopen
-
-  Given a FIGlet font or control file name and suffix, return the file
-  or NULL if not found
-
-****************************************************************************/
-
-ZFILE *FIGopen(name,suffix)
-char *name;
-char *suffix;
-{
-  char *fontpath;
-  ZFILE *fontfile;
-  struct stat st;
-  int namelen;
-
-  namelen = MYSTRLEN(fontdirname);
-  fontpath = (char*)alloca(sizeof(char)*
-    (namelen+MYSTRLEN(name)+MYSTRLEN(suffix)+2));
-  fontfile = NULL;
-  if (!hasdirsep(name)) {  /* not a full path name */
-    strcpy(fontpath,fontdirname);
-    fontpath[namelen] = DIRSEP;
-    fontpath[namelen+1] = '\0';
-    strcat(fontpath,name);
-    strcat(fontpath,suffix);
-    if(stat(fontpath,&st)==0) goto ok;
-    }
-  /* just append suffix */
-  strcpy(fontpath,name);
-  strcat(fontpath,suffix);
-  if(stat(fontpath,&st)==0) goto ok;
-
-  return NULL;
-
-ok:
-  fontfile = Zopen(fontpath,"rb");
-  return fontfile;
-}
-
-/****************************************************************************
-
-  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;
-  int command;
-  ZFILE *controlfile;
-
-  controlfile = FIGopen(controlname,CONTROLFILESUFFIX);
-
-  if (controlfile==NULL) {
-    fprintf(stderr,"%s: %s: Unable to open control file\n",myname,
-      controlname);
-    exit(1);
-    }
-
-  (*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,infoprint;
-  char *controlname,*env;
-
-  if ((myname = strrchr(Myargv[0],DIRSEP))!=NULL) {
-    myname++;
-    }
-  else {
-    myname = Myargv[0];
-    }
-  fontdirname = DEFAULTFONTDIR;
-  env = getenv("FIGLET_FONTDIR");
-  if (env!=NULL) {
-    fontdirname = env;
-    }
-  fontname = DEFAULTFONTFILE;
-  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':
-        fontname = optarg;
-        if (suffixcmp(fontname,FONTFILESUFFIX)) {
-          fontname[MYSTRLEN(fontname)-FSUFFIXLEN] = '\0';
-          }
-#ifdef TLF_FONTS
-        else if (suffixcmp(fontname,TOILETFILESUFFIX)) {
-          fontname[MYSTRLEN(fontname)-TSUFFIXLEN] = '\0';
-          }
-#endif
-        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"
-          " \"-F\" option has been\n"
-          "removed.  It has been replaced by the \"figlist\""
-          " program, which is now\n"
-          "included in the basic FIGlet package.  \"figlist\""
-          " is also available\n"
-          "from  http://www.figlet.org/"
-          "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)
-ZFILE *file;
-inchr theord;
-{
-  int row,k;
-  char templine[MAXLEN+1];
-  outchr endchar, outline[MAXLEN+1];
-  fcharnode *fclsave;
-
-  fclsave = fcharlist;
-  fcharlist = (fcharnode*)myalloc(sizeof(fcharnode));
-  fcharlist->ord = theord;
-  fcharlist->thechar = (outchr**)myalloc(sizeof(outchr*)*charheight);
-  fcharlist->next = fclsave;
-
-  outline[0] = 0;
-
-  for (row=0;row<charheight;row++) {
-    if (myfgets(templine,MAXLEN,file)==NULL) {
-      templine[0] = '\0';
-      }
-#ifdef TLF_FONTS
-    utf8_to_wchar(templine,MAXLEN,outline,MAXLEN,0);
-#else
-    strcpy(outline,templine);
-#endif
-    k = STRLEN(outline)-1;
-    while (k>=0 && ISSPACE(outline[k])) {  /* remove trailing spaces */
-      k--;
-      }
-    if (k>=0) {
-      endchar = outline[k];  /* remove endmarks */
-      while (k>=0 && outline[k]==endchar) {
-        k--;
-        }
-      }
-    outline[k+1] = '\0';
-    fcharlist->thechar[row] = (outchr*)myalloc(sizeof(outchr)*(STRLEN(outline)+1));
-    STRCPY(fcharlist->thechar[row],outline);
-    }
-}
-
-
-/****************************************************************************
-
-  readfont
-
-  Allocates memory, initializes variables, and reads in the font.
-  Called near beginning of main().
-
-****************************************************************************/
-
-void readfont()
-{
-  int i,row,numsread;
-  inchr theord;
-  int maxlen,cmtlines,ffright2left;
-  int smush,smush2;
-  char fileline[MAXLEN+1],magicnum[5];
-  ZFILE *fontfile;
-
-  fontfile = FIGopen(fontname,FONTFILESUFFIX);
-#ifdef TLF_FONTS
-  if (fontfile==NULL) {
-    fontfile = FIGopen(fontname,TOILETFILESUFFIX);
-    if(fontfile) toiletfont = 1;
-    }
-#endif
-
-  if (fontfile==NULL) {
-    fprintf(stderr,"%s: %s: Unable to open font file\n",myname,fontname);
-    exit(1);
-    }
-
-  readmagic(fontfile,magicnum);
-  if (myfgets(fileline,MAXLEN,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);
-
-  if (maxlen > MAXLEN) {
-    fprintf(stderr,"%s: %s: character is too wide\n",myname,fontname);
-    exit(1);
-    }
-#ifdef TLF_FONTS
-  if ((!toiletfont && strcmp(magicnum,FONTFILEMAGICNUMBER)) ||
-      (toiletfont && strcmp(magicnum,TOILETFILEMAGICNUMBER)) || numsread<5) {
-#else
-  if (strcmp(magicnum,FONTFILEMAGICNUMBER) || numsread<5) {
-#endif
-    fprintf(stderr,"%s: %s: Not a FIGlet 2 font file\n",myname,fontname);
-    exit(1);
-    }
-  for (i=1;i<=cmtlines;i++) {
-    skiptoeol(fontfile);
-    }
-
-  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;
-    }
-
-  /* Allocate "missing" character */
-  fcharlist = (fcharnode*)myalloc(sizeof(fcharnode));
-  fcharlist->ord = 0;
-  fcharlist->thechar = (outchr**)myalloc(sizeof(outchr*)*charheight);
-  fcharlist->next = NULL;
-  for (row=0;row<charheight;row++) {
-    fcharlist->thechar[row] = (outchr*)myalloc(sizeof(outchr));
-    fcharlist->thechar[row][0] = '\0';
-    }
-  for (theord=' ';theord<='~';theord++) {
-    readfontchar(fontfile,theord);
-    }
-  for (theord=0;theord<=6;theord++) {
-    readfontchar(fontfile,deutsch[theord]);
-    }
-  while (myfgets(fileline,maxlen+1,fontfile)==NULL?0:
-    sscanf(fileline,"%li",&theord)==1) {
-    readfontchar(fontfile,theord);
-    }
-  Zclose(fontfile);
-}
-
-
-/****************************************************************************
-
-  linealloc
-
-  Allocates & clears outputline, inchrline. Sets inchrlinelenlimit.
-  Called near beginning of main().
-
-****************************************************************************/
-
-void linealloc()
-{
-  int row; 
-
-  outputline = (outchr**)myalloc(sizeof(outchr*)*charheight);
-  for (row=0;row<charheight;row++) {
-    outputline[row] = (outchr*)myalloc(sizeof(outchr)*(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 = STRLEN(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
-
-****************************************************************************/
-
-outchr smushem(lch,rch)
-outchr 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. */
-    /* Unreachable code: lch==' ' or rch==' ' already handled!
-    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;
-  outchr ch1,ch2;
-
-  if ((smushmode & (SM_SMUSH | SM_KERN)) == 0) {
-    return 0;
-    }
-  maxsmush = currcharwidth;
-  for (row=0;row<charheight;row++) {
-    if (right2left) {
-      if (maxsmush>STRLEN(outputline[row])) {
-        maxsmush=STRLEN(outputline[row]);
-        }
-      for (charbd=STRLEN(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=STRLEN(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,column;
-  outchr *templine;
-
-  getletter(c);
-  smushamount = smushamt();
-  if (outlinelen+currcharwidth-smushamount>outlinelenlimit
-      ||inchrlinelen+1>inchrlinelenlimit) {
-    return 0;
-    }
-
-  templine = (outchr*)myalloc(sizeof(outchr)*(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++) {
-	column = outlinelen-smushamount+k;
-	if (column < 0) {
-	  column = 0;
-	  }
-        outputline[row][column] =
-          smushem(outputline[row][column],currchar[row][k]);
-        }
-      STRCAT(outputline[row],currchar[row]+smushamount);
-      }
-    }
-  free(templine);
-  outlinelen = STRLEN(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.
-
-****************************************************************************/
-
-void putstring(string)
-outchr *string;
-{
-  int i,len;
-  char c[10];
-#ifdef TLF_FONTS
-  size_t size;
-  wchar_t wc[2];
-#endif
-
-  len = STRLEN(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++) {
-        putchar(' ');
-        }
-      }
-    }
-  for (i=0;i<len;i++) {
-#ifdef TLF_FONTS
-    wc[0] = string[i];
-    wc[1] = 0;
-    size = wchar_to_utf8(wc,1,c,10,0);
-    if(size==1) {
-      if(c[0]==hardblank) {
-        c[0] = ' ';
-        }
-      }
-    c[size] = 0;
-    printf("%s",c);
-#else
-    putchar(string[i]==hardblank?' ':string[i]);
-#endif
-    }
-  putchar('\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;
-  lastspace = inchrlinelen-1;
-  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 int 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 */
+	  if ((fd = open("/dev/tty",O_WRONLY))<0) return -1;
+	  result = ioctl(fd,TIOCGWINSZ,&ws);
+	  close(fd);
+	  return result?-1:ws.ws_col;
 	}
-    }
-
-    return( c );		/* return appropriate character */
-
-}	/* end: Agetchar() */
+	#endif /* ifdef TIOCGWINSZ */
 
 
-/****************************************************************************
+	/****************************************************************************
 
-  iso2022
+	  myalloc
 
-  Called by getinchr.  Interprets ISO 2022 sequences
+	  Calls malloc.  If malloc returns error, prints error message and
+	  quits.
 
-******************************************************************************/
+	****************************************************************************/
 
-inchr iso2022()
-{
-  inchr ch;
-  inchr ch2;
-  int save_gl;
-  int save_gr;
+	#ifdef __STDC__
+	char *myalloc(size_t size)
+	#else
+	char *myalloc(size)
+	int size;
+	#endif
+	{
+	  char *ptr;
+	#ifndef __STDC__
+	  extern void *malloc();
+	#endif
 
-  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 G1 into GL */
-      gl = 1;
-      return iso2022();
-    case 15: /* invoke G0 into GL */
-      gl = 0;
-      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 ((ptr = (char*)malloc(size))==NULL) {
+		fprintf(stderr,"%s: Out of memory\n",myname);
+		exit(1);
+		}
+	  else {
+		return ptr;
+		}
+	}
 
-  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
+	  hasdirsep
 
-  Called by main.  Pushes back an "inchr" to be read by getinchr
-  on the next call.
+	  Returns true if s1 contains a DIRSEP or DIRSEP2 character.
 
-******************************************************************************/
-inchr getinchr_buffer;
-int getinchr_flag;
+	****************************************************************************/
 
-inchr ungetinchr(c)
-inchr c;
-{
-  getinchr_buffer = c;
-  getinchr_flag = 1;
-  return c;
-}
+	int hasdirsep(s1)
+	char *s1;
+	{
+	  if (strchr(s1, DIRSEP)) return 1;
+	  else if (strchr(s1, DIRSEP2)) return 1;
+	  else return 0;
+	}
 
-/*****************************************************************************
+	/****************************************************************************
 
-  getinchr
+	  suffixcmp
 
-  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).
- 
+	  Returns true if s2 is a suffix of s1; uses case-blind comparison.
 
-*****************************************************************************/
+	****************************************************************************/
 
-inchr getinchr()
-{
-  int ch, ch2, ch3, ch4, ch5, ch6;
+	int suffixcmp(s1, s2)
+	char *s1;
+	char *s2;
+	{
+	  int len1, len2;
 
-  if (getinchr_flag) {
-    getinchr_flag = 0;
-    return getinchr_buffer;
-    }
+	  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;
+	}
+	   
+	/****************************************************************************
 
-  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;
-    }
-  }
+	  skiptoeol
 
-void f(c)
-inchr c;
-{
-  int i;
-  int char_not_added;
-  int wordbreakmode = 0;
+	  Skips to the end of a line, given a stream.  Handles \r, \n, or \r\n.
 
-    do {
-      char_not_added = 0;
+	****************************************************************************/
 
-      if (wordbreakmode== -1) {
-        if (c==' ') {
-          break;
-          }
-        else if (c=='\n') {
-          wordbreakmode = 0;
-          break;
-          }
-        wordbreakmode = 0;
-        }
+	void skiptoeol(fp)
+	ZFILE *fp;
+	{
+	  int dummy;
 
-      if (c=='\n') {
-        printline();
-        wordbreakmode = 0;
-        }
+	  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;
+		  }
+	  }
+	}
 
-      else if (addchar(c)) {
-        if (c!=' ') {
-          wordbreakmode = (wordbreakmode>=2)?3:1;
-          }
-        else {
-          wordbreakmode = (wordbreakmode>0)?2:0;
-          }
-        }
 
-      else if (outlinelen==0) {
+	/****************************************************************************
+
+	  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",
+		"              [ -f fontfile ] [ -m smushmode ] [ -w outputwidth ]\n"
+		"              [ -C controlfile ] [ -I infocode ] [ message ]\n",
+		myname);
+	}
+
+
+	/****************************************************************************
+
+	  printinfo
+
+	  Prints version and copyright message, or utility information.
+
+	****************************************************************************/
+
+	void printinfo(infonum)
+	int infonum;
+	{
+	  switch (infonum) {
+		case 0: /* Copyright message */
+		  printf("FIGlet Copyright (C) 1991-2012 Glenn Chappell, Ian Chai, "
+				 "John Cowan,\nChristiaan Keet and Claudio Matsuoka\n"
+				 "Internet: <info@figlet.org> "
+				 "Version: %s, date: %s\n\n"
+				 "FIGlet, along with the various FIGlet fonts"
+				 " and documentation, may be\n"
+				 "freely copied and distributed.\n\n"
+				 "If you use FIGlet, please send an"
+				 " e-mail message to <info@figlet.org>.\n\n"
+				 "The latest version of FIGlet is available from the"
+				 " web site,\n\thttp://www.figlet.org/\n\n",
+		   VERSION,DATE);
+		  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);
+		  break;
+		case 5: /* Font formats */
+		  printf("%s", FONTFILEMAGICNUMBER);
+	#ifdef TLF_FONTS
+		  printf(" %s", TOILETFILEMAGICNUMBER);
+	#endif
+		  printf("\n");
+		}
+	}
+
+
+	/****************************************************************************
+
+	  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;
+	  }
+
+	/****************************************************************************
+
+	  FIGopen
+
+	  Given a FIGlet font or control file name and suffix, return the file
+	  or NULL if not found
+
+	****************************************************************************/
+
+	ZFILE *FIGopen(name,suffix)
+	char *name;
+	char *suffix;
+	{
+	  char *fontpath;
+	  ZFILE *fontfile;
+	  struct stat st;
+	  int namelen;
+
+	  namelen = MYSTRLEN(fontdirname);
+	  fontpath = (char*)alloca(sizeof(char)*
+		(namelen+MYSTRLEN(name)+MYSTRLEN(suffix)+2));
+	  fontfile = NULL;
+	  if (!hasdirsep(name)) {  /* not a full path name */
+		strcpy(fontpath,fontdirname);
+		fontpath[namelen] = DIRSEP;
+		fontpath[namelen+1] = '\0';
+		strcat(fontpath,name);
+		strcat(fontpath,suffix);
+		if(stat(fontpath,&st)==0) goto ok;
+		}
+	  /* just append suffix */
+	  strcpy(fontpath,name);
+	  strcat(fontpath,suffix);
+	  if(stat(fontpath,&st)==0) goto ok;
+
+	  return NULL;
+
+	ok:
+	  fontfile = Zopen(fontpath,"rb");
+	  return fontfile;
+	}
+
+	/****************************************************************************
+
+	  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;
+	  int command;
+	  ZFILE *controlfile;
+
+	  controlfile = FIGopen(controlname,CONTROLFILESUFFIX);
+
+	  if (controlfile==NULL) {
+		fprintf(stderr,"%s: %s: Unable to open control file\n",myname,
+		  controlname);
+		exit(1);
+		}
+
+	  (*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,infoprint;
+	  char *controlname,*env;
+
+	  env = getenv("FIGLET_FONTDIR");
+	  if (env!=NULL) {
+		fontdirname = env;
+		}
+	  infoprint = -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':
+			fontname = optarg;
+			if (suffixcmp(fontname,FONTFILESUFFIX)) {
+			  fontname[MYSTRLEN(fontname)-FSUFFIXLEN] = '\0';
+			  }
+	#ifdef TLF_FONTS
+			else if (suffixcmp(fontname,TOILETFILESUFFIX)) {
+			  fontname[MYSTRLEN(fontname)-TSUFFIXLEN] = '\0';
+			  }
+	#endif
+			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"
+			  " \"-F\" option has been\n"
+			  "removed.  It has been replaced by the \"figlist\""
+			  " program, which is now\n"
+			  "included in the basic FIGlet package.  \"figlist\""
+			  " is also available\n"
+			  "from  http://www.figlet.org/"
+			  "under UNIX utilities.\n");
+			exit(1);
+			break;
+		  default:
+			printusage(stderr);
+			exit(1);
+		  }
+		}
+	  if (optind!=Myargc) cmdinput = 1; /* force cmdinput if more arguments */
+	  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)
+	ZFILE *file;
+	inchr theord;
+	{
+	  int row,k;
+	  char templine[MAXLEN+1];
+	  outchr endchar, outline[MAXLEN+1];
+	  fcharnode *fclsave;
+
+	  fclsave = fcharlist;
+	  fcharlist = (fcharnode*)myalloc(sizeof(fcharnode));
+	  fcharlist->ord = theord;
+	  fcharlist->thechar = (outchr**)myalloc(sizeof(outchr*)*charheight);
+	  fcharlist->next = fclsave;
+
+	  outline[0] = 0;
+
+	  for (row=0;row<charheight;row++) {
+		if (myfgets(templine,MAXLEN,file)==NULL) {
+		  templine[0] = '\0';
+		  }
+	#ifdef TLF_FONTS
+		utf8_to_wchar(templine,MAXLEN,outline,MAXLEN,0);
+	#else
+		strcpy(outline,templine);
+	#endif
+		k = STRLEN(outline)-1;
+		while (k>=0 && ISSPACE(outline[k])) {  /* remove trailing spaces */
+		  k--;
+		  }
+		if (k>=0) {
+		  endchar = outline[k];  /* remove endmarks */
+		  while (k>=0 && outline[k]==endchar) {
+			k--;
+			}
+		  }
+		outline[k+1] = '\0';
+		fcharlist->thechar[row] = (outchr*)myalloc(sizeof(outchr)*(STRLEN(outline)+1));
+		STRCPY(fcharlist->thechar[row],outline);
+		}
+	}
+
+
+	/****************************************************************************
+
+	  readfont
+
+	  Allocates memory, initializes variables, and reads in the font.
+	  Called near beginning of main().
+
+	****************************************************************************/
+
+	void readfont()
+	{
+	  int i,row,numsread;
+	  inchr theord;
+	  int maxlen,cmtlines,ffright2left;
+	  int smush,smush2;
+	  char fileline[MAXLEN+1],magicnum[5];
+	  ZFILE *fontfile;
+
+	  fontfile = FIGopen(fontname,FONTFILESUFFIX);
+	#ifdef TLF_FONTS
+	  if (fontfile==NULL) {
+		fontfile = FIGopen(fontname,TOILETFILESUFFIX);
+		if(fontfile) toiletfont = 1;
+		}
+	#endif
+
+	  if (fontfile==NULL) {
+		fprintf(stderr,"%s: %s: Unable to open font file\n",myname,fontname);
+		exit(1);
+		}
+
+	  readmagic(fontfile,magicnum);
+	  if (myfgets(fileline,MAXLEN,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);
+
+	  if (maxlen > MAXLEN) {
+		fprintf(stderr,"%s: %s: character is too wide\n",myname,fontname);
+		exit(1);
+		}
+	#ifdef TLF_FONTS
+	  if ((!toiletfont && strcmp(magicnum,FONTFILEMAGICNUMBER)) ||
+		  (toiletfont && strcmp(magicnum,TOILETFILEMAGICNUMBER)) || numsread<5) {
+	#else
+	  if (strcmp(magicnum,FONTFILEMAGICNUMBER) || numsread<5) {
+	#endif
+		fprintf(stderr,"%s: %s: Not a FIGlet 2 font file\n",myname,fontname);
+		exit(1);
+		}
+	  for (i=1;i<=cmtlines;i++) {
+		skiptoeol(fontfile);
+		}
+
+	  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;
+		}
+
+	  /* Allocate "missing" character */
+	  fcharlist = (fcharnode*)myalloc(sizeof(fcharnode));
+	  fcharlist->ord = 0;
+	  fcharlist->thechar = (outchr**)myalloc(sizeof(outchr*)*charheight);
+	  fcharlist->next = NULL;
+	  for (row=0;row<charheight;row++) {
+		fcharlist->thechar[row] = (outchr*)myalloc(sizeof(outchr));
+		fcharlist->thechar[row][0] = '\0';
+		}
+	  for (theord=' ';theord<='~';theord++) {
+		readfontchar(fontfile,theord);
+		}
+	  for (theord=0;theord<=6;theord++) {
+		readfontchar(fontfile,deutsch[theord]);
+		}
+	  while (myfgets(fileline,maxlen+1,fontfile)==NULL?0:
+		sscanf(fileline,"%li",&theord)==1) {
+		readfontchar(fontfile,theord);
+		}
+	  Zclose(fontfile);
+	}
+
+
+	/****************************************************************************
+
+	  linealloc
+
+	  Allocates & clears outputline, inchrline. Sets inchrlinelenlimit.
+	  Called near beginning of main().
+
+	****************************************************************************/
+
+	void linealloc()
+	{
+	  int row; 
+
+	  outputline = (outchr**)myalloc(sizeof(outchr*)*charheight);
+	  for (row=0;row<charheight;row++) {
+		outputline[row] = (outchr*)myalloc(sizeof(outchr)*(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 = STRLEN(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
+
+	****************************************************************************/
+
+	outchr smushem(lch,rch)
+	outchr 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. */
+		/* Unreachable code: lch==' ' or rch==' ' already handled!
+		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;
+	  outchr ch1,ch2;
+
+	  if ((smushmode & (SM_SMUSH | SM_KERN)) == 0) {
+		return 0;
+		}
+	  maxsmush = currcharwidth;
+	  for (row=0;row<charheight;row++) {
+		if (right2left) {
+		  if (maxsmush>STRLEN(outputline[row])) {
+			maxsmush=STRLEN(outputline[row]);
+			}
+		  for (charbd=STRLEN(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=STRLEN(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,column;
+	  outchr *templine;
+
+	  getletter(c);
+	  smushamount = smushamt();
+	  if (outlinelen+currcharwidth-smushamount>outlinelenlimit
+		  ||inchrlinelen+1>inchrlinelenlimit) {
+		return 0;
+		}
+
+	  templine = (outchr*)myalloc(sizeof(outchr)*(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++) {
+		column = outlinelen-smushamount+k;
+		if (column < 0) {
+		  column = 0;
+		  }
+			outputline[row][column] =
+			  smushem(outputline[row][column],currchar[row][k]);
+			}
+		  STRCAT(outputline[row],currchar[row]+smushamount);
+		  }
+		}
+	  free(templine);
+	  outlinelen = STRLEN(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.
+
+	****************************************************************************/
+
+	void putstring(string)
+	outchr *string;
+	{
+	  int i,len;
+	  char c[10];
+	#ifdef TLF_FONTS
+	  size_t size;
+	  wchar_t wc[2];
+	#endif
+
+	  len = STRLEN(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++) {
+			putchar(' ');
+			}
+		  }
+		}
+	  for (i=0;i<len;i++) {
+	#ifdef TLF_FONTS
+		wc[0] = string[i];
+		wc[1] = 0;
+		size = wchar_to_utf8(wc,1,c,10,0);
+		if(size==1) {
+		  if(c[0]==hardblank) {
+			c[0] = ' ';
+			}
+		  }
+		c[size] = 0;
+		printf("%s",c);
+	#else
+		putchar(string[i]==hardblank?' ':string[i]);
+	#endif
+		}
+	  putchar('\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;
+	  lastspace = inchrlinelen-1;
+	  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 int 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 G1 into GL */
+		  gl = 1;
+		  return iso2022();
+		case 15: /* invoke G0 into GL */
+		  gl = 0;
+		  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;
+		}
+	  }
+
+	void fig_init(argc, argv)
+	int argc;
+	char** argv;
+	{
+	  Myargc = argc;
+	  Myargv = argv;
+
+	  if ((myname = strrchr(Myargv[0],DIRSEP))!=NULL) {
+		myname++;
+		}
+	  else {
+		myname = Myargv[0];
+		}
+	  fontdirname = DEFAULTFONTDIR;
+	  fontname = DEFAULTFONTFILE;
+	  cfilelist = NULL;
+	  cfilelistend = &cfilelist;
+	  commandlist = NULL;
+	  commandlistend = &commandlist;
+	  smushoverride = SMO_NO;
+	  deutschflag = 0;
+	  justification = -1;
+	  right2left = -1;
+	  paragraphflag = 0;
+	  cmdinput = 0;
+	  outputwidth = DEFAULTCOLUMNS;
+	  gn[1] = 0x80;
+	  gr = 1;
+	  outlinelenlimit = outputwidth-1;
+	}
+
+	void f(c)
+	const inchr c;
+	{
+	  int i;
+	  int char_not_added;
+	  static int wordbreakmode = 0;
+
+		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]+STRLEN(currchar[i])-outlinelenlimit);
@@ -2069,8 +2078,14 @@ inchr c;
         }
 
       } while (char_not_added);
-
-  if (outlinelen!=0) {
-    printline();
-    }
+}
+
+void fs(string)
+char* string;
+{
+	char* str_ptr = string;
+	while(*str_ptr!=0){
+		f(*str_ptr);
+		++str_ptr;
+	}
 }
diff --git a/Makefile b/Makefile
index e92bcaf..e3f56a4 100644
--- a/Makefile
+++ b/Makefile
@@ -54,7 +54,8 @@ DEFAULTFONTFILE = standard
 
 VERSION	= 2.2.5
 DIST	= figlet-$(VERSION)
-OBJS	= figlet.o zipio.o crc.o inflate.o utf8.o
+LIBOBJS = zipio.o crc.o inflate.o utf8.o
+OBJS	= $(LIBOBJS) figlet.o 
 BINS	= figlet chkfont figlist showfigfonts
 MANUAL	= figlet.6 chkfont.6 figlist.6 showfigfonts.6
 DFILES	= Makefile Makefile.tc $(MANUAL) $(OBJS:.o=.c) chkfont.c getopt.c \
@@ -70,6 +71,11 @@ all: $(BINS)
 figlet: $(OBJS)
 	$(LD) $(LDFLAGS) -o $@ $(OBJS)
 
+figlib: $(LIBOBJS)
+	$(CC) -shared -o libfiglib.so $(LIBOBJS)
+	$(CC) $(CFLAGS) $(LDFLAGS) -I /home/anon/Swap/figlet/ -L /home/anon/Swap/figlet/ \
+		tests/FIGlib.c -o FIGlib-test -lfiglib 
+
 chkfont: chkfont.o
 	$(LD) $(LDFLAGS) -o $@ chkfont.o
 
diff --git a/figlet.c b/figlet.c
index 537c201..e26c207 100644
--- a/figlet.c
+++ b/figlet.c
@@ -16,11 +16,9 @@ int argc;
 char *argv[];
 {
   inchr c,c2;
-  int i;
   int last_was_eol_flag;
 
-  Myargc = argc;
-  Myargv = argv;
+  fig_init(argc, argv);
   getparams();
   readcontrolfiles();
   readfont();
@@ -58,7 +56,11 @@ char *argv[];
     if ((c>'\0' && c<' ' && c!='\n') || c==127) continue;
 
 	f(c);
-
   }
+
+  if (outlinelen!=0) {
+    printline();
+    }
+
   return 0;
 }
diff --git a/libfiglib.so b/libfiglib.so
new file mode 100755
index 0000000000000000000000000000000000000000..872ada18d3dd0593dd88225585d8872c6d9fa369
GIT binary patch
literal 65176
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

literal 0
HcmV?d00001

diff --git a/tests/FIGlib.c b/tests/FIGlib.c
index 01bcb28..7fc6471 100644
--- a/tests/FIGlib.c
+++ b/tests/FIGlib.c
@@ -7,8 +7,14 @@ char *argv[];
 {
   //fontinfo fi;
   //readfont(&fi);
+  fig_init();
+  fontdirname = "fonts/";
+  readcontrolfiles();
   readfont();
-	inchrline = "test";
+  linealloc();
+	fs("Hello ");
+	fs("World!");
+    printline();
 
   return 0;
 }