diff options
Diffstat (limited to 'figlet.c')
-rw-r--r-- | figlet.c | 38 |
1 files changed, 24 insertions, 14 deletions
@@ -3,16 +3,17 @@ FIGlet Copyright 1991, 1993, 1994 Glenn Chappell and Ian Chai FIGlet Copyright 1996, 1997, 1998, 1999, 2000, 2001 John Cowan FIGlet Copyright 2002 Christiaan Keet + FIGlet Copyright 2011 Claudio Matsuoka Portions written by Paul Burton and Christiaan Keet Internet: <info@figlet.org> FIGlet, along with the various FIGlet fonts and documentation, is - copyrighted under the provisions of the Academic Free License + copyrighted under the provisions of the New BSD License (3-clause) (as listed in the file "LICENSE" which is included in this package) ****************************************************************************/ -#define DATE "05 July 2005" -#define VERSION "2.2.2" -#define VERSION_INT 20202 +#define DATE "12 January 2011" +#define VERSION "2.2.3" +#define VERSION_INT 20203 /* FIGlet (Frank, Ian & Glenn's Letters) */ /* by Glenn Chappell */ @@ -36,6 +37,7 @@ http://www.figlet.org/ */ /* Release 2.2.2 by Christiaan Keet: License changed from "Artistic License" to "Academic Free License" as agreed by FIGlet authors. 05 July 2005 */ +/* Release 2.2.3 by Claudio Matsuoka, 12 January 2011 */ /*--------------------------------------------------------------------------- DEFAULTFONTDIR and DEFAULTFONTFILE should be defined in the Makefile. @@ -62,6 +64,7 @@ #include <fcntl.h> /* Needed for get_columns */ #ifdef unix +#include <unistd.h> #include <sys/ioctl.h> /* Needed for get_columns */ #endif @@ -655,7 +658,7 @@ char *controlname; inchr firstch,lastch; char dashcheck; inchr offset; - char *controlpath,magicnum[5]; + char *controlpath; int command; ZFILE *controlfile; int namelen; @@ -1423,7 +1426,7 @@ int smushamt() int addchar(c) inchr c; { - int smushamount,row,k; + int smushamount,row,k,column,offset; char *templine; getletter(c); @@ -1433,6 +1436,7 @@ inchr c; return 0; } + offset = 0; templine = (char*)myalloc(sizeof(char)*(outlinelenlimit+1)); for (row=0;row<charheight;row++) { if (right2left) { @@ -1446,8 +1450,13 @@ inchr c; } else { for (k=0;k<smushamount;k++) { - outputline[row][outlinelen-smushamount+k] = - smushem(outputline[row][outlinelen-smushamount+k],currchar[row][k]); + column = outlinelen-smushamount+k; + if (column < 0) { + offset = -column; + column = 0; + } + outputline[row][column] = + smushem(outputline[row][column],currchar[row][k + offset]); } strcat(outputline[row],currchar[row]+smushamount); } @@ -1532,6 +1541,7 @@ void splitline() 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; @@ -1605,7 +1615,7 @@ inchr c; int Agetchar() { extern int optind; /* current argv[] element under study */ - static AgetMode = 0; /* >= 0 for displacement into argv[n], <0 EOF */ + static int AgetMode = 0; /* >= 0 for displacement into argv[n], <0 EOF */ char *arg; /* pointer to active character */ int c; /* current character */ @@ -1657,12 +1667,12 @@ inchr iso2022() if (ch == 27) ch = Agetchar() + 0x100; /* ESC x */ if (ch == 0x100 + '$') ch = Agetchar() + 0x200; /* ESC $ x */ switch (ch) { - case 14: /* invoke G0 into GL */ - gl = 0; - return iso2022(); - case 15: /* invoke G1 into GL */ + 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; @@ -2029,5 +2039,5 @@ char *argv[]; if (outlinelen!=0) { printline(); } - exit(0); + return 0; } |