#include "lp.h"
#define LINELEN 132
#define BACKGND ' '
#define HEIGHT 9
#define DROP 3
#define WIDTH 8
#define c_______ 0
#define c______1 01
#define c_____1_ 02
#define c____1__ 04
#define c____11_ 06
#define c___1___ 010
#define c___1__1 011
#define c___1_1_ 012
#define c___11__ 014
#define c__1____ 020
#define c__1__1_ 022
#define c__1_1__ 024
#define c__11___ 030
#define c__111__ 034
#define c__111_1 035
#define c__1111_ 036
#define c__11111 037
#define c_1_____ 040
#define c_1____1 041
#define c_1___1_ 042
#define c_1__1__ 044
#define c_1_1___ 050
#define c_1_1__1 051
#define c_1_1_1_ 052
#define c_11____ 060
#define c_11_11_ 066
#define c_111___ 070
#define c_111__1 071
#define c_111_1_ 072
#define c_1111__ 074
#define c_1111_1 075
#define c_11111_ 076
#define c_111111 077
#define c1______ 0100
#define c1_____1 0101
#define c1____1_ 0102
#define c1____11 0103
#define c1___1__ 0104
#define c1___1_1 0105
#define c1___11_ 0106
#define c1__1___ 0110
#define c1__1__1 0111
#define c1__11_1 0115
#define c1__1111 0117
#define c1_1____ 0120
#define c1_1___1 0121
#define c1_1_1_1 0125
#define c1_1_11_ 0126
#define c1_111__ 0134
#define c1_1111_ 0136
#define c11____1 0141
#define c11___1_ 0142
#define c11___11 0143
#define c11_1___ 0150
#define c11_1__1 0151
#define c111_11_ 0166
#define c1111___ 0170
#define c11111__ 0174
#define c111111_ 0176
#define c1111111 0177
static const char scnkey[][HEIGHT] =
{
{ c_______,
c_______,
c_______,
c_______,
c_______,
c_______,
c_______,
c_______,
c_______ },
{ c__11___,
c__11___,
c__11___,
c__11___,
c__11___,
c_______,
c_______,
c__11___,
c__11___ },
{ c_1__1__,
c_1__1__,
c_______,
c_______,
c_______,
c_______,
c_______,
c_______,
c_______ },
{ c_______,
c__1_1__,
c__1_1__,
c1111111,
c__1_1__,
c1111111,
c__1_1__,
c__1_1__,
c_______ },
{ c___1___,
c_11111_,
c1__1__1,
c1__1___,
c_11111_,
c___1__1,
c1__1__1,
c_11111_,
c___1___ },
{ c_1_____,
c1_1___1,
c_1___1_,
c____1__,
c___1___,
c__1____,
c_1___1_,
c1___1_1,
c_____1_ },
{ c_11____,
c1__1___,
c1___1__,
c_1_1___,
c__1____,
c_1_1__1,
c1___11_,
c1___11_,
c_111__1 },
{ c___11__,
c___11__,
c___1___,
c__1____,
c_______,
c_______,
c_______,
c_______,
c_______ },
{ c____1__,
c___1___,
c__1____,
c__1____,
c__1____,
c__1____,
c__1____,
c___1___,
c____1__ },
{ c__1____,
c___1___,
c____1__,
c____1__,
c____1__,
c____1__,
c____1__,
c___1___,
c__1____ },
{ c_______,
c___1___,
c1__1__1,
c_1_1_1_,
c__111__,
c_1_1_1_,
c1__1__1,
c___1___,
c_______ },
{ c_______,
c___1___,
c___1___,
c___1___,
c1111111,
c___1___,
c___1___,
c___1___,
c_______ },
{ c_______,
c_______,
c_______,
c_______,
c__11___,
c__11___,
c__1____,
c_1_____,
c_______ },
{ c_______,
c_______,
c_______,
c_______,
c1111111,
c_______,
c_______,
c_______,
c_______ },
{ c_______,
c_______,
c_______,
c_______,
c_______,
c_______,
c_______,
c__11___,
c__11___ },
{ c_______,
c______1,
c_____1_,
c____1__,
c___1___,
c__1____,
c_1_____,
c1______,
c_______ },
{ c_11111_,
c1_____1,
c1____11,
c1___1_1,
c1__1__1,
c1_1___1,
c11____1,
c1_____1,
c_11111_ },
{ c___1___,
c__11___,
c_1_1___,
c___1___,
c___1___,
c___1___,
c___1___,
c___1___,
c_11111_ },
{ c_11111_,
c1_____1,
c______1,
c_____1_,
c__111__,
c_1_____,
c1______,
c1______,
c1111111 },
{ c_11111_,
c1_____1,
c______1,
c______1,
c__1111_,
c______1,
c______1,
c1_____1,
c_11111_ },
{ c_____1_,
c____11_,
c___1_1_,
c__1__1_,
c_1___1_,
c1____1_,
c1111111,
c_____1_,
c_____1_ },
{ c1111111,
c1______,
c1______,
c11111__,
c_____1_,
c______1,
c______1,
c1____1_,
c_1111__ },
{ c__1111_,
c_1_____,
c1______,
c1______,
c1_1111_,
c11____1,
c1_____1,
c1_____1,
c_11111_ },
{ c1111111,
c1_____1,
c_____1_,
c____1__,
c___1___,
c__1____,
c__1____,
c__1____,
c__1____ },
{ c_11111_,
c1_____1,
c1_____1,
c1_____1,
c_11111_,
c1_____1,
c1_____1,
c1_____1,
c_11111_ },
{ c_11111_,
c1_____1,
c1_____1,
c1_____1,
c_111111,
c______1,
c______1,
c1_____1,
c_1111__ },
{ c_______,
c_______,
c_______,
c__11___,
c__11___,
c_______,
c_______,
c__11___,
c__11___ },
{ c__11___,
c__11___,
c_______,
c_______,
c__11___,
c__11___,
c__1____,
c_1_____,
c_______ },
{ c____1__,
c___1___,
c__1____,
c_1_____,
c1______,
c_1_____,
c__1____,
c___1___,
c____1__ },
{ c_______,
c_______,
c_______,
c1111111,
c_______,
c1111111,
c_______,
c_______,
c_______ },
{ c__1____,
c___1___,
c____1__,
c_____1_,
c______1,
c_____1_,
c____1__,
c___1___,
c__1____ },
{ c__1111_,
c_1____1,
c_1____1,
c______1,
c____11_,
c___1___,
c___1___,
c_______,
c___1___ },
{ c__1111_,
c_1____1,
c1__11_1,
c1_1_1_1,
c1_1_1_1,
c1_1111_,
c1______,
c_1____1,
c__1111_ },
{ c__111__,
c_1___1_,
c1_____1,
c1_____1,
c1111111,
c1_____1,
c1_____1,
c1_____1,
c1_____1 },
{ c111111_,
c_1____1,
c_1____1,
c_1____1,
c_11111_,
c_1____1,
c_1____1,
c_1____1,
c111111_ },
{ c__1111_,
c_1____1,
c1______,
c1______,
c1______,
c1______,
c1______,
c_1____1,
c__1111_ },
{ c11111__,
c_1___1_,
c_1____1,
c_1____1,
c_1____1,
c_1____1,
c_1____1,
c_1___1_,
c11111__ },
{ c1111111,
c1______,
c1______,
c1______,
c111111_,
c1______,
c1______,
c1______,
c1111111 },
{ c1111111,
c1______,
c1______,
c1______,
c111111_,
c1______,
c1______,
c1______,
c1______ },
{ c__1111_,
c_1____1,
c1______,
c1______,
c1______,
c1__1111,
c1_____1,
c_1____1,
c__1111_ },
{ c1_____1,
c1_____1,
c1_____1,
c1_____1,
c1111111,
c1_____1,
c1_____1,
c1_____1,
c1_____1 },
{ c_11111_,
c___1___,
c___1___,
c___1___,
c___1___,
c___1___,
c___1___,
c___1___,
c_11111_ },
{ c__11111,
c____1__,
c____1__,
c____1__,
c____1__,
c____1__,
c____1__,
c1___1__,
c_111___ },
{ c1_____1,
c1____1_,
c1___1__,
c1__1___,
c1_1____,
c11_1___,
c1___1__,
c1____1_,
c1_____1 },
{ c1______,
c1______,
c1______,
c1______,
c1______,
c1______,
c1______,
c1______,
c1111111 },
{ c1_____1,
c11___11,
c1_1_1_1,
c1__1__1,
c1_____1,
c1_____1,
c1_____1,
c1_____1,
c1_____1 },
{ c1_____1,
c11____1,
c1_1___1,
c1__1__1,
c1___1_1,
c1____11,
c1_____1,
c1_____1,
c1_____1 },
{ c__111__,
c_1___1_,
c1_____1,
c1_____1,
c1_____1,
c1_____1,
c1_____1,
c_1___1_,
c__111__ },
{ c111111_,
c1_____1,
c1_____1,
c1_____1,
c111111_,
c1______,
c1______,
c1______,
c1______ },
{ c__111__,
c_1___1_,
c1_____1,
c1_____1,
c1_____1,
c1__1__1,
c1___1_1,
c_1___1_,
c__111_1 },
{ c111111_,
c1_____1,
c1_____1,
c1_____1,
c111111_,
c1__1___,
c1___1__,
c1____1_,
c1_____1 },
{ c_11111_,
c1_____1,
c1______,
c1______,
c_11111_,
c______1,
c______1,
c1_____1,
c_11111_ },
{ c1111111,
c___1___,
c___1___,
c___1___,
c___1___,
c___1___,
c___1___,
c___1___,
c___1___ },
{ c1_____1,
c1_____1,
c1_____1,
c1_____1,
c1_____1,
c1_____1,
c1_____1,
c1_____1,
c_11111_ },
{ c1_____1,
c1_____1,
c1_____1,
c_1___1_,
c_1___1_,
c__1_1__,
c__1_1__,
c___1___,
c___1___ },
{ c1_____1,
c1_____1,
c1_____1,
c1_____1,
c1__1__1,
c1__1__1,
c1_1_1_1,
c11___11,
c1_____1 },
{ c1_____1,
c1_____1,
c_1___1_,
c__1_1__,
c___1___,
c__1_1__,
c_1___1_,
c1_____1,
c1_____1 },
{ c1_____1,
c1_____1,
c_1___1_,
c__1_1__,
c___1___,
c___1___,
c___1___,
c___1___,
c___1___ },
{ c1111111,
c______1,
c_____1_,
c____1__,
c___1___,
c__1____,
c_1_____,
c1______,
c1111111 },
{ c_1111__,
c_1_____,
c_1_____,
c_1_____,
c_1_____,
c_1_____,
c_1_____,
c_1_____,
c_1111__ },
{ c_______,
c1______,
c_1_____,
c__1____,
c___1___,
c____1__,
c_____1_,
c______1,
c_______ },
{ c__1111_,
c_____1_,
c_____1_,
c_____1_,
c_____1_,
c_____1_,
c_____1_,
c_____1_,
c__1111_ },
{ c___1___,
c__1_1__,
c_1___1_,
c1_____1,
c_______,
c_______,
c_______,
c_______ },
{ c_______,
c_______,
c_______,
c_______,
c_______,
c_______,
c_______,
c1111111,
c_______ },
{ c__11___,
c__11___,
c___1___,
c____1__,
c_______,
c_______,
c_______,
c_______,
c_______ },
{ c_______,
c_______,
c_______,
c_1111__,
c_____1_,
c_11111_,
c1_____1,
c1____11,
c_1111_1 },
{ c1______,
c1______,
c1______,
c1_111__,
c11___1_,
c1_____1,
c1_____1,
c11___1_,
c1_111__ },
{ c_______,
c_______,
c_______,
c_1111__,
c1____1_,
c1______,
c1______,
c1____1_,
c_1111__ },
{ c_____1_,
c_____1_,
c_____1_,
c_111_1_,
c1___11_,
c1____1_,
c1____1_,
c1___11_,
c_111_1_ },
{ c_______,
c_______,
c_______,
c_1111__,
c1____1_,
c111111_,
c1______,
c1____1_,
c_1111__ },
{ c___11__,
c__1__1_,
c__1____,
c__1____,
c11111__,
c__1____,
c__1____,
c__1____,
c__1____ },
{ c_111_1_,
c1___11_,
c1____1_,
c1____1_,
c1___11_,
c_111_1_,
c_____1_,
c1____1_,
c_1111__ },
{ c1______,
c1______,
c1______,
c1_111__,
c11___1_,
c1____1_,
c1____1_,
c1____1_,
c1____1_ },
{ c_______,
c___1___,
c_______,
c__11___,
c___1___,
c___1___,
c___1___,
c___1___,
c__111__ },
{ c____11_,
c_____1_,
c_____1_,
c_____1_,
c_____1_,
c_____1_,
c_____1_,
c_1___1_,
c__111__ },
{ c1______,
c1______,
c1______,
c1___1__,
c1__1___,
c1_1____,
c11_1___,
c1___1__,
c1____1_ },
{ c__11___,
c___1___,
c___1___,
c___1___,
c___1___,
c___1___,
c___1___,
c___1___,
c__111__ },
{ c_______,
c_______,
c_______,
c1_1_11_,
c11_1__1,
c1__1__1,
c1__1__1,
c1__1__1,
c1__1__1 },
{ c_______,
c_______,
c_______,
c1_111__,
c11___1_,
c1____1_,
c1____1_,
c1____1_,
c1____1_ },
{ c_______,
c_______,
c_______,
c_1111__,
c1____1_,
c1____1_,
c1____1_,
c1____1_,
c_1111__ },
{ c1_111__,
c11___1_,
c1____1_,
c1____1_,
c11___1_,
c1_111__,
c1______,
c1______,
c1______ },
{ c_111_1_,
c1___11_,
c1____1_,
c1____1_,
c1___11_,
c_111_1_,
c_____1_,
c_____1_,
c_____1_ },
{ c_______,
c_______,
c_______,
c1_111__,
c11___1_,
c1______,
c1______,
c1______,
c1______ },
{ c_______,
c_______,
c_______,
c_1111__,
c1____1_,
c_11____,
c___11__,
c1____1_,
c_1111__ },
{ c_______,
c__1____,
c__1____,
c11111__,
c__1____,
c__1____,
c__1____,
c__1__1_,
c___11__ },
{ c_______,
c_______,
c_______,
c1____1_,
c1____1_,
c1____1_,
c1____1_,
c1___11_,
c_111_1_ },
{ c_______,
c_______,
c_______,
c1_____1,
c1_____1,
c1_____1,
c_1___1_,
c__1_1__,
c___1___ },
{ c_______,
c_______,
c_______,
c1_____1,
c1__1__1,
c1__1__1,
c1__1__1,
c1__1__1,
c_11_11_ },
{ c_______,
c_______,
c_______,
c1____1_,
c_1__1__,
c__11___,
c__11___,
c_1__1__,
c1____1_ },
{ c1____1_,
c1____1_,
c1____1_,
c1____1_,
c1___11_,
c_111_1_,
c_____1_,
c1____1_,
c_1111__ },
{ c_______,
c_______,
c_______,
c111111_,
c____1__,
c___1___,
c__1____,
c_1_____,
c111111_ },
{ c___11__,
c__1____,
c__1____,
c__1____,
c_1_____,
c__1____,
c__1____,
c__1____,
c___11__ },
{ c___1___,
c___1___,
c___1___,
c___1___,
c___1___,
c___1___,
c___1___,
c___1___,
c___1___ },
{ c__11___,
c____1__,
c____1__,
c____1__,
c_____1_,
c____1__,
c____1__,
c____1__,
c__11___ },
{ c_11____,
c1__1__1,
c____11_,
c_______,
c_______,
c_______,
c_______,
c_______,
c_______ },
{ c_1__1__,
c1__1__1,
c__1__1_,
c_1__1__,
c1__1__1,
c__1__1_,
c_1__1__,
c1__1__1,
c__1__1_ }
};
#include <unistd.h>
static char *
scnline(int key, char *p, int c)
{
int scnwidth;
for (scnwidth = WIDTH; --scnwidth;) {
key <<= 1;
*p++ = key & 0200 ? c : BACKGND;
}
return (p);
}
#define TRC(q) (((q)-' ')&0177)
static int
dropit(int c)
{
switch(c) {
case TRC('_'):
case TRC(';'):
case TRC(','):
case TRC('g'):
case TRC('j'):
case TRC('p'):
case TRC('q'):
case TRC('y'):
return (DROP);
default:
return (0);
}
}
int
lp_banner(int scfd, char *scsp, int pw)
{
char *strp;
int nchrs, j;
char outbuf[LINELEN+1], *sp, c, cc;
int d, scnhgt;
for (scnhgt = 0; scnhgt++ < HEIGHT+DROP; ) {
strp = &outbuf[0];
sp = scsp;
for (nchrs = 0; ; ) {
d = dropit(c = TRC(cc = *sp++));
if ((!d && scnhgt > HEIGHT) || (scnhgt <= DROP && d))
for (j = WIDTH; --j;)
*strp++ = BACKGND;
else
strp = scnline(scnkey[(int)c][scnhgt-1-d],
strp, cc);
if (*sp == '\0' || nchrs++ >= pw/(WIDTH+1)-1)
break;
*strp++ = BACKGND;
*strp++ = BACKGND;
}
while (*--strp == BACKGND && strp >= outbuf)
;
strp++;
*strp++ = '\n';
if (write(scfd, outbuf, strp-outbuf) == -1)
return -1;
}
return 0;
}