xref: /openbsd/usr.sbin/lpd/lp_banner.c (revision 4cfece93)
1 /* $OpenBSD: lp_banner.c,v 1.1.1.1 2018/04/27 16:14:36 eric Exp $ */
2 
3 /*
4  * Adapted from the following files in src/usr.sbin/lpr/lpd:
5  *
6  * lpdchar.c,v 1.8 2016/02/28 20:55:40
7  * printjob.c,v 1.58 2016/11/22 16:03:57
8  */
9 
10 /*
11  * Copyright (c) 1983, 1993
12  *	The Regents of the University of California.  All rights reserved.
13  *
14  * Redistribution and use in source and binary forms, with or without
15  * modification, are permitted provided that the following conditions
16  * are met:
17  * 1. Redistributions of source code must retain the above copyright
18  *    notice, this list of conditions and the following disclaimer.
19  * 2. Redistributions in binary form must reproduce the above copyright
20  *    notice, this list of conditions and the following disclaimer in the
21  *    documentation and/or other materials provided with the distribution.
22  * 3. Neither the name of the University nor the names of its contributors
23  *    may be used to endorse or promote products derived from this software
24  *    without specific prior written permission.
25  *
26  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
27  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
30  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
31  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
32  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
33  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
35  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36  * SUCH DAMAGE.
37  */
38 
39 #include "lp.h"
40 
41 #define LINELEN	132
42 #define BACKGND	' '
43 #define HEIGHT	9
44 #define DROP	3
45 #define WIDTH	8
46 
47 /*
48  * from lpdchar.c
49  */
50 
51 /*
52  *	Character set for line printer daemon
53  */
54 
55 #define c_______ 0
56 #define c______1 01
57 #define c_____1_ 02
58 #define c____1__ 04
59 #define c____11_ 06
60 #define c___1___ 010
61 #define c___1__1 011
62 #define c___1_1_ 012
63 #define c___11__ 014
64 #define c__1____ 020
65 #define c__1__1_ 022
66 #define c__1_1__ 024
67 #define c__11___ 030
68 #define c__111__ 034
69 #define c__111_1 035
70 #define c__1111_ 036
71 #define c__11111 037
72 #define c_1_____ 040
73 #define c_1____1 041
74 #define c_1___1_ 042
75 #define c_1__1__ 044
76 #define c_1_1___ 050
77 #define c_1_1__1 051
78 #define c_1_1_1_ 052
79 #define c_11____ 060
80 #define c_11_11_ 066
81 #define c_111___ 070
82 #define c_111__1 071
83 #define c_111_1_ 072
84 #define c_1111__ 074
85 #define c_1111_1 075
86 #define c_11111_ 076
87 #define c_111111 077
88 #define c1______ 0100
89 #define c1_____1 0101
90 #define c1____1_ 0102
91 #define c1____11 0103
92 #define c1___1__ 0104
93 #define c1___1_1 0105
94 #define c1___11_ 0106
95 #define c1__1___ 0110
96 #define c1__1__1 0111
97 #define c1__11_1 0115
98 #define c1__1111 0117
99 #define c1_1____ 0120
100 #define c1_1___1 0121
101 #define c1_1_1_1 0125
102 #define c1_1_11_ 0126
103 #define c1_111__ 0134
104 #define c1_1111_ 0136
105 #define c11____1 0141
106 #define c11___1_ 0142
107 #define c11___11 0143
108 #define c11_1___ 0150
109 #define c11_1__1 0151
110 #define c111_11_ 0166
111 #define c1111___ 0170
112 #define c11111__ 0174
113 #define c111111_ 0176
114 #define c1111111 0177
115 
116 static const char scnkey[][HEIGHT] =	/* this is relatively easy to modify */
117 			/* just look: */
118 {
119 	{ c_______,
120 	  c_______,
121 	  c_______,
122 	  c_______,
123 	  c_______,
124 	  c_______,
125 	  c_______,
126 	  c_______,
127 	  c_______ },			/*   */
128 
129 	{ c__11___,
130 	  c__11___,
131 	  c__11___,
132 	  c__11___,
133 	  c__11___,
134 	  c_______,
135 	  c_______,
136 	  c__11___,
137 	  c__11___ },			/* ! */
138 
139 	{ c_1__1__,
140 	  c_1__1__,
141 	  c_______,
142 	  c_______,
143 	  c_______,
144 	  c_______,
145 	  c_______,
146 	  c_______,
147 	  c_______ },			/* " */
148 
149 	{ c_______,
150 	  c__1_1__,
151 	  c__1_1__,
152 	  c1111111,
153 	  c__1_1__,
154 	  c1111111,
155 	  c__1_1__,
156 	  c__1_1__,
157 	  c_______ },			/* # */
158 
159 	{ c___1___,
160 	  c_11111_,
161 	  c1__1__1,
162 	  c1__1___,
163 	  c_11111_,
164 	  c___1__1,
165 	  c1__1__1,
166 	  c_11111_,
167 	  c___1___ },			/* $ */
168 
169 	{ c_1_____,
170 	  c1_1___1,
171 	  c_1___1_,
172 	  c____1__,
173 	  c___1___,
174 	  c__1____,
175 	  c_1___1_,
176 	  c1___1_1,
177 	  c_____1_ },			/* % */
178 
179 	{ c_11____,
180 	  c1__1___,
181 	  c1___1__,
182 	  c_1_1___,
183 	  c__1____,
184 	  c_1_1__1,
185 	  c1___11_,
186 	  c1___11_,
187 	  c_111__1 },			/* & */
188 
189 	{ c___11__,
190 	  c___11__,
191 	  c___1___,
192 	  c__1____,
193 	  c_______,
194 	  c_______,
195 	  c_______,
196 	  c_______,
197 	  c_______ },			/* ' */
198 
199 	{ c____1__,
200 	  c___1___,
201 	  c__1____,
202 	  c__1____,
203 	  c__1____,
204 	  c__1____,
205 	  c__1____,
206 	  c___1___,
207 	  c____1__ },			/* ( */
208 
209 	{ c__1____,
210 	  c___1___,
211 	  c____1__,
212 	  c____1__,
213 	  c____1__,
214 	  c____1__,
215 	  c____1__,
216 	  c___1___,
217 	  c__1____ },			/* ) */
218 
219 	{ c_______,
220 	  c___1___,
221 	  c1__1__1,
222 	  c_1_1_1_,
223 	  c__111__,
224 	  c_1_1_1_,
225 	  c1__1__1,
226 	  c___1___,
227 	  c_______ },			/* * */
228 
229 	{ c_______,
230 	  c___1___,
231 	  c___1___,
232 	  c___1___,
233 	  c1111111,
234 	  c___1___,
235 	  c___1___,
236 	  c___1___,
237 	  c_______ },			/* + */
238 
239 	{ c_______,
240 	  c_______,
241 	  c_______,
242 	  c_______,
243 	  c__11___,
244 	  c__11___,
245 	  c__1____,
246 	  c_1_____,
247 	  c_______ },			/* , */
248 
249 	{ c_______,
250 	  c_______,
251 	  c_______,
252 	  c_______,
253 	  c1111111,
254 	  c_______,
255 	  c_______,
256 	  c_______,
257 	  c_______ },			/* - */
258 
259 	{ c_______,
260 	  c_______,
261 	  c_______,
262 	  c_______,
263 	  c_______,
264 	  c_______,
265 	  c_______,
266 	  c__11___,
267 	  c__11___ },			/* . */
268 
269 	{ c_______,
270 	  c______1,
271 	  c_____1_,
272 	  c____1__,
273 	  c___1___,
274 	  c__1____,
275 	  c_1_____,
276 	  c1______,
277 	  c_______ },			/* / */
278 
279 	{ c_11111_,
280 	  c1_____1,
281 	  c1____11,
282 	  c1___1_1,
283 	  c1__1__1,
284 	  c1_1___1,
285 	  c11____1,
286 	  c1_____1,
287 	  c_11111_ },			/* 0 */
288 
289 	{ c___1___,
290 	  c__11___,
291 	  c_1_1___,
292 	  c___1___,
293 	  c___1___,
294 	  c___1___,
295 	  c___1___,
296 	  c___1___,
297 	  c_11111_ },			/* 1 */
298 
299 	{ c_11111_,
300 	  c1_____1,
301 	  c______1,
302 	  c_____1_,
303 	  c__111__,
304 	  c_1_____,
305 	  c1______,
306 	  c1______,
307 	  c1111111 },			/* 2 */
308 
309 	{ c_11111_,
310 	  c1_____1,
311 	  c______1,
312 	  c______1,
313 	  c__1111_,
314 	  c______1,
315 	  c______1,
316 	  c1_____1,
317 	  c_11111_ },			/* 3 */
318 
319 	{ c_____1_,
320 	  c____11_,
321 	  c___1_1_,
322 	  c__1__1_,
323 	  c_1___1_,
324 	  c1____1_,
325 	  c1111111,
326 	  c_____1_,
327 	  c_____1_ },			/* 4 */
328 
329 	{ c1111111,
330 	  c1______,
331 	  c1______,
332 	  c11111__,
333 	  c_____1_,
334 	  c______1,
335 	  c______1,
336 	  c1____1_,
337 	  c_1111__ },			/* 5 */
338 
339 	{ c__1111_,
340 	  c_1_____,
341 	  c1______,
342 	  c1______,
343 	  c1_1111_,
344 	  c11____1,
345 	  c1_____1,
346 	  c1_____1,
347 	  c_11111_ },			/* 6 */
348 
349 	{ c1111111,
350 	  c1_____1,
351 	  c_____1_,
352 	  c____1__,
353 	  c___1___,
354 	  c__1____,
355 	  c__1____,
356 	  c__1____,
357 	  c__1____ },			/* 7 */
358 
359 	{ c_11111_,
360 	  c1_____1,
361 	  c1_____1,
362 	  c1_____1,
363 	  c_11111_,
364 	  c1_____1,
365 	  c1_____1,
366 	  c1_____1,
367 	  c_11111_ },			/* 8 */
368 
369 	{ c_11111_,
370 	  c1_____1,
371 	  c1_____1,
372 	  c1_____1,
373 	  c_111111,
374 	  c______1,
375 	  c______1,
376 	  c1_____1,
377 	  c_1111__ },			/* 9 */
378 
379 	{ c_______,
380 	  c_______,
381 	  c_______,
382 	  c__11___,
383 	  c__11___,
384 	  c_______,
385 	  c_______,
386 	  c__11___,
387 	  c__11___ },			/* : */
388 
389 	{ c__11___,
390 	  c__11___,
391 	  c_______,
392 	  c_______,
393 	  c__11___,
394 	  c__11___,
395 	  c__1____,
396 	  c_1_____,
397 	  c_______ },			/* ; */
398 
399 	{ c____1__,
400 	  c___1___,
401 	  c__1____,
402 	  c_1_____,
403 	  c1______,
404 	  c_1_____,
405 	  c__1____,
406 	  c___1___,
407 	  c____1__ },			/* < */
408 
409 	{ c_______,
410 	  c_______,
411 	  c_______,
412 	  c1111111,
413 	  c_______,
414 	  c1111111,
415 	  c_______,
416 	  c_______,
417 	  c_______ },			/* = */
418 
419 	{ c__1____,
420 	  c___1___,
421 	  c____1__,
422 	  c_____1_,
423 	  c______1,
424 	  c_____1_,
425 	  c____1__,
426 	  c___1___,
427 	  c__1____ },			/* > */
428 
429 	{ c__1111_,
430 	  c_1____1,
431 	  c_1____1,
432 	  c______1,
433 	  c____11_,
434 	  c___1___,
435 	  c___1___,
436 	  c_______,
437 	  c___1___ },			/* ? */
438 
439 	{ c__1111_,
440 	  c_1____1,
441 	  c1__11_1,
442 	  c1_1_1_1,
443 	  c1_1_1_1,
444 	  c1_1111_,
445 	  c1______,
446 	  c_1____1,
447 	  c__1111_ },			/* @ */
448 
449 	{ c__111__,
450 	  c_1___1_,
451 	  c1_____1,
452 	  c1_____1,
453 	  c1111111,
454 	  c1_____1,
455 	  c1_____1,
456 	  c1_____1,
457 	  c1_____1 },			/* A */
458 
459 	{ c111111_,
460 	  c_1____1,
461 	  c_1____1,
462 	  c_1____1,
463 	  c_11111_,
464 	  c_1____1,
465 	  c_1____1,
466 	  c_1____1,
467 	  c111111_ },			/* B */
468 
469 	{ c__1111_,
470 	  c_1____1,
471 	  c1______,
472 	  c1______,
473 	  c1______,
474 	  c1______,
475 	  c1______,
476 	  c_1____1,
477 	  c__1111_ },			/* C */
478 
479 	{ c11111__,
480 	  c_1___1_,
481 	  c_1____1,
482 	  c_1____1,
483 	  c_1____1,
484 	  c_1____1,
485 	  c_1____1,
486 	  c_1___1_,
487 	  c11111__ },			/* D */
488 
489 	{ c1111111,
490 	  c1______,
491 	  c1______,
492 	  c1______,
493 	  c111111_,
494 	  c1______,
495 	  c1______,
496 	  c1______,
497 	  c1111111 },			/* E */
498 
499 	{ c1111111,
500 	  c1______,
501 	  c1______,
502 	  c1______,
503 	  c111111_,
504 	  c1______,
505 	  c1______,
506 	  c1______,
507 	  c1______ },			/* F */
508 
509 	{ c__1111_,
510 	  c_1____1,
511 	  c1______,
512 	  c1______,
513 	  c1______,
514 	  c1__1111,
515 	  c1_____1,
516 	  c_1____1,
517 	  c__1111_ },			/* G */
518 
519 	{ c1_____1,
520 	  c1_____1,
521 	  c1_____1,
522 	  c1_____1,
523 	  c1111111,
524 	  c1_____1,
525 	  c1_____1,
526 	  c1_____1,
527 	  c1_____1 },			/* H */
528 
529 	{ c_11111_,
530 	  c___1___,
531 	  c___1___,
532 	  c___1___,
533 	  c___1___,
534 	  c___1___,
535 	  c___1___,
536 	  c___1___,
537 	  c_11111_ },			/* I */
538 
539 	{ c__11111,
540 	  c____1__,
541 	  c____1__,
542 	  c____1__,
543 	  c____1__,
544 	  c____1__,
545 	  c____1__,
546 	  c1___1__,
547 	  c_111___ },			/* J */
548 
549 	{ c1_____1,
550 	  c1____1_,
551 	  c1___1__,
552 	  c1__1___,
553 	  c1_1____,
554 	  c11_1___,
555 	  c1___1__,
556 	  c1____1_,
557 	  c1_____1 },			/* K */
558 
559 	{ c1______,
560 	  c1______,
561 	  c1______,
562 	  c1______,
563 	  c1______,
564 	  c1______,
565 	  c1______,
566 	  c1______,
567 	  c1111111 },			/* L */
568 
569 	{ c1_____1,
570 	  c11___11,
571 	  c1_1_1_1,
572 	  c1__1__1,
573 	  c1_____1,
574 	  c1_____1,
575 	  c1_____1,
576 	  c1_____1,
577 	  c1_____1 },			/* M */
578 
579 	{ c1_____1,
580 	  c11____1,
581 	  c1_1___1,
582 	  c1__1__1,
583 	  c1___1_1,
584 	  c1____11,
585 	  c1_____1,
586 	  c1_____1,
587 	  c1_____1 },			/* N */
588 
589 	{ c__111__,
590 	  c_1___1_,
591 	  c1_____1,
592 	  c1_____1,
593 	  c1_____1,
594 	  c1_____1,
595 	  c1_____1,
596 	  c_1___1_,
597 	  c__111__ },			/* O */
598 
599 	{ c111111_,
600 	  c1_____1,
601 	  c1_____1,
602 	  c1_____1,
603 	  c111111_,
604 	  c1______,
605 	  c1______,
606 	  c1______,
607 	  c1______ },			/* P */
608 
609 	{ c__111__,
610 	  c_1___1_,
611 	  c1_____1,
612 	  c1_____1,
613 	  c1_____1,
614 	  c1__1__1,
615 	  c1___1_1,
616 	  c_1___1_,
617 	  c__111_1 },			/* Q */
618 
619 	{ c111111_,
620 	  c1_____1,
621 	  c1_____1,
622 	  c1_____1,
623 	  c111111_,
624 	  c1__1___,
625 	  c1___1__,
626 	  c1____1_,
627 	  c1_____1 },			/* R */
628 
629 	{ c_11111_,
630 	  c1_____1,
631 	  c1______,
632 	  c1______,
633 	  c_11111_,
634 	  c______1,
635 	  c______1,
636 	  c1_____1,
637 	  c_11111_ },			/* S */
638 
639 	{ c1111111,
640 	  c___1___,
641 	  c___1___,
642 	  c___1___,
643 	  c___1___,
644 	  c___1___,
645 	  c___1___,
646 	  c___1___,
647 	  c___1___ },			/* T */
648 
649 	{ c1_____1,
650 	  c1_____1,
651 	  c1_____1,
652 	  c1_____1,
653 	  c1_____1,
654 	  c1_____1,
655 	  c1_____1,
656 	  c1_____1,
657 	  c_11111_ },			/* U */
658 
659 	{ c1_____1,
660 	  c1_____1,
661 	  c1_____1,
662 	  c_1___1_,
663 	  c_1___1_,
664 	  c__1_1__,
665 	  c__1_1__,
666 	  c___1___,
667 	  c___1___ },			/* V */
668 
669 	{ c1_____1,
670 	  c1_____1,
671 	  c1_____1,
672 	  c1_____1,
673 	  c1__1__1,
674 	  c1__1__1,
675 	  c1_1_1_1,
676 	  c11___11,
677 	  c1_____1 },			/* W */
678 
679 	{ c1_____1,
680 	  c1_____1,
681 	  c_1___1_,
682 	  c__1_1__,
683 	  c___1___,
684 	  c__1_1__,
685 	  c_1___1_,
686 	  c1_____1,
687 	  c1_____1 },			/* X */
688 
689 	{ c1_____1,
690 	  c1_____1,
691 	  c_1___1_,
692 	  c__1_1__,
693 	  c___1___,
694 	  c___1___,
695 	  c___1___,
696 	  c___1___,
697 	  c___1___ },			/* Y */
698 
699 	{ c1111111,
700 	  c______1,
701 	  c_____1_,
702 	  c____1__,
703 	  c___1___,
704 	  c__1____,
705 	  c_1_____,
706 	  c1______,
707 	  c1111111 },			/* Z */
708 
709 	{ c_1111__,
710 	  c_1_____,
711 	  c_1_____,
712 	  c_1_____,
713 	  c_1_____,
714 	  c_1_____,
715 	  c_1_____,
716 	  c_1_____,
717 	  c_1111__ },			/* [ */
718 
719 	{ c_______,
720 	  c1______,
721 	  c_1_____,
722 	  c__1____,
723 	  c___1___,
724 	  c____1__,
725 	  c_____1_,
726 	  c______1,
727 	  c_______ },			/* \ */
728 
729 	{ c__1111_,
730 	  c_____1_,
731 	  c_____1_,
732 	  c_____1_,
733 	  c_____1_,
734 	  c_____1_,
735 	  c_____1_,
736 	  c_____1_,
737 	  c__1111_ },			/* ] */
738 
739 	{ c___1___,
740 	  c__1_1__,
741 	  c_1___1_,
742 	  c1_____1,
743 	  c_______,
744 	  c_______,
745 	  c_______,
746 	  c_______ },			/* ^ */
747 
748 	{ c_______,
749 	  c_______,
750 	  c_______,
751 	  c_______,
752 	  c_______,
753 	  c_______,
754 	  c_______,
755 	  c1111111,
756 	  c_______ },			/* _ */
757 
758 	{ c__11___,
759 	  c__11___,
760 	  c___1___,
761 	  c____1__,
762 	  c_______,
763 	  c_______,
764 	  c_______,
765 	  c_______,
766 	  c_______ },			/* ` */
767 
768 	{ c_______,
769 	  c_______,
770 	  c_______,
771 	  c_1111__,
772 	  c_____1_,
773 	  c_11111_,
774 	  c1_____1,
775 	  c1____11,
776 	  c_1111_1 },			/* a */
777 
778 	{ c1______,
779 	  c1______,
780 	  c1______,
781 	  c1_111__,
782 	  c11___1_,
783 	  c1_____1,
784 	  c1_____1,
785 	  c11___1_,
786 	  c1_111__ },			/* b */
787 
788 	{ c_______,
789 	  c_______,
790 	  c_______,
791 	  c_1111__,
792 	  c1____1_,
793 	  c1______,
794 	  c1______,
795 	  c1____1_,
796 	  c_1111__ },			/* c */
797 
798 	{ c_____1_,
799 	  c_____1_,
800 	  c_____1_,
801 	  c_111_1_,
802 	  c1___11_,
803 	  c1____1_,
804 	  c1____1_,
805 	  c1___11_,
806 	  c_111_1_ },			/* d */
807 
808 	{ c_______,
809 	  c_______,
810 	  c_______,
811 	  c_1111__,
812 	  c1____1_,
813 	  c111111_,
814 	  c1______,
815 	  c1____1_,
816 	  c_1111__ },			/* e */
817 
818 	{ c___11__,
819 	  c__1__1_,
820 	  c__1____,
821 	  c__1____,
822 	  c11111__,
823 	  c__1____,
824 	  c__1____,
825 	  c__1____,
826 	  c__1____ },			/* f */
827 
828 	{ c_111_1_,
829 	  c1___11_,
830 	  c1____1_,
831 	  c1____1_,
832 	  c1___11_,
833 	  c_111_1_,
834 	  c_____1_,
835 	  c1____1_,
836 	  c_1111__ },			/* g */
837 
838 	{ c1______,
839 	  c1______,
840 	  c1______,
841 	  c1_111__,
842 	  c11___1_,
843 	  c1____1_,
844 	  c1____1_,
845 	  c1____1_,
846 	  c1____1_ },			/* h */
847 
848 	{ c_______,
849 	  c___1___,
850 	  c_______,
851 	  c__11___,
852 	  c___1___,
853 	  c___1___,
854 	  c___1___,
855 	  c___1___,
856 	  c__111__ },			/* i */
857 
858 	{ c____11_,
859 	  c_____1_,
860 	  c_____1_,
861 	  c_____1_,
862 	  c_____1_,
863 	  c_____1_,
864 	  c_____1_,
865 	  c_1___1_,
866 	  c__111__ },			/* j */
867 
868 	{ c1______,
869 	  c1______,
870 	  c1______,
871 	  c1___1__,
872 	  c1__1___,
873 	  c1_1____,
874 	  c11_1___,
875 	  c1___1__,
876 	  c1____1_ },			/* k */
877 
878 	{ c__11___,
879 	  c___1___,
880 	  c___1___,
881 	  c___1___,
882 	  c___1___,
883 	  c___1___,
884 	  c___1___,
885 	  c___1___,
886 	  c__111__ },			/* l */
887 
888 	{ c_______,
889 	  c_______,
890 	  c_______,
891 	  c1_1_11_,
892 	  c11_1__1,
893 	  c1__1__1,
894 	  c1__1__1,
895 	  c1__1__1,
896 	  c1__1__1 },			/* m */
897 
898 	{ c_______,
899 	  c_______,
900 	  c_______,
901 	  c1_111__,
902 	  c11___1_,
903 	  c1____1_,
904 	  c1____1_,
905 	  c1____1_,
906 	  c1____1_ },			/* n */
907 
908 	{ c_______,
909 	  c_______,
910 	  c_______,
911 	  c_1111__,
912 	  c1____1_,
913 	  c1____1_,
914 	  c1____1_,
915 	  c1____1_,
916 	  c_1111__ },			/* o */
917 
918 	{ c1_111__,
919 	  c11___1_,
920 	  c1____1_,
921 	  c1____1_,
922 	  c11___1_,
923 	  c1_111__,
924 	  c1______,
925 	  c1______,
926 	  c1______ },			/* p */
927 
928 	{ c_111_1_,
929 	  c1___11_,
930 	  c1____1_,
931 	  c1____1_,
932 	  c1___11_,
933 	  c_111_1_,
934 	  c_____1_,
935 	  c_____1_,
936 	  c_____1_ },			/* q */
937 
938 	{ c_______,
939 	  c_______,
940 	  c_______,
941 	  c1_111__,
942 	  c11___1_,
943 	  c1______,
944 	  c1______,
945 	  c1______,
946 	  c1______ },			/* r */
947 
948 	{ c_______,
949 	  c_______,
950 	  c_______,
951 	  c_1111__,
952 	  c1____1_,
953 	  c_11____,
954 	  c___11__,
955 	  c1____1_,
956 	  c_1111__ },			/* s */
957 
958 	{ c_______,
959 	  c__1____,
960 	  c__1____,
961 	  c11111__,
962 	  c__1____,
963 	  c__1____,
964 	  c__1____,
965 	  c__1__1_,
966 	  c___11__ },			/* t */
967 
968 	{ c_______,
969 	  c_______,
970 	  c_______,
971 	  c1____1_,
972 	  c1____1_,
973 	  c1____1_,
974 	  c1____1_,
975 	  c1___11_,
976 	  c_111_1_ },			/* u */
977 
978 	{ c_______,
979 	  c_______,
980 	  c_______,
981 	  c1_____1,
982 	  c1_____1,
983 	  c1_____1,
984 	  c_1___1_,
985 	  c__1_1__,
986 	  c___1___ },			/* v */
987 
988 	{ c_______,
989 	  c_______,
990 	  c_______,
991 	  c1_____1,
992 	  c1__1__1,
993 	  c1__1__1,
994 	  c1__1__1,
995 	  c1__1__1,
996 	  c_11_11_ },			/* w */
997 
998 	{ c_______,
999 	  c_______,
1000 	  c_______,
1001 	  c1____1_,
1002 	  c_1__1__,
1003 	  c__11___,
1004 	  c__11___,
1005 	  c_1__1__,
1006 	  c1____1_ },			/* x */
1007 
1008 	{ c1____1_,
1009 	  c1____1_,
1010 	  c1____1_,
1011 	  c1____1_,
1012 	  c1___11_,
1013 	  c_111_1_,
1014 	  c_____1_,
1015 	  c1____1_,
1016 	  c_1111__ },			/* y */
1017 
1018 	{ c_______,
1019 	  c_______,
1020 	  c_______,
1021 	  c111111_,
1022 	  c____1__,
1023 	  c___1___,
1024 	  c__1____,
1025 	  c_1_____,
1026 	  c111111_ },			/* z */
1027 
1028 	{ c___11__,
1029 	  c__1____,
1030 	  c__1____,
1031 	  c__1____,
1032 	  c_1_____,
1033 	  c__1____,
1034 	  c__1____,
1035 	  c__1____,
1036 	  c___11__ },			/* { */
1037 
1038 	{ c___1___,
1039 	  c___1___,
1040 	  c___1___,
1041 	  c___1___,
1042 	  c___1___,
1043 	  c___1___,
1044 	  c___1___,
1045 	  c___1___,
1046 	  c___1___ },			/* | */
1047 
1048 	{ c__11___,
1049 	  c____1__,
1050 	  c____1__,
1051 	  c____1__,
1052 	  c_____1_,
1053 	  c____1__,
1054 	  c____1__,
1055 	  c____1__,
1056 	  c__11___ },			/* } */
1057 
1058 	{ c_11____,
1059 	  c1__1__1,
1060 	  c____11_,
1061 	  c_______,
1062 	  c_______,
1063 	  c_______,
1064 	  c_______,
1065 	  c_______,
1066 	  c_______ },			/* ~ */
1067 
1068 	{ c_1__1__,
1069 	  c1__1__1,
1070 	  c__1__1_,
1071 	  c_1__1__,
1072 	  c1__1__1,
1073 	  c__1__1_,
1074 	  c_1__1__,
1075 	  c1__1__1,
1076 	  c__1__1_ }			/* rub-out */
1077 };
1078 
1079 
1080 /*
1081  * from printjob.c
1082  */
1083 
1084 #include <unistd.h>
1085 
1086 static char *
1087 scnline(int key, char *p, int c)
1088 {
1089 	int scnwidth;
1090 
1091 	for (scnwidth = WIDTH; --scnwidth;) {
1092 		key <<= 1;
1093 		*p++ = key & 0200 ? c : BACKGND;
1094 	}
1095 	return (p);
1096 }
1097 
1098 #define TRC(q)	(((q)-' ')&0177)
1099 
1100 static int
1101 dropit(int c)
1102 {
1103 	switch(c) {
1104 
1105 	case TRC('_'):
1106 	case TRC(';'):
1107 	case TRC(','):
1108 	case TRC('g'):
1109 	case TRC('j'):
1110 	case TRC('p'):
1111 	case TRC('q'):
1112 	case TRC('y'):
1113 		return (DROP);
1114 
1115 	default:
1116 		return (0);
1117 	}
1118 }
1119 
1120 int
1121 lp_banner(int scfd, char *scsp, int pw)
1122 {
1123 	char *strp;
1124 	int nchrs, j;
1125 	char outbuf[LINELEN+1], *sp, c, cc;
1126 	int d, scnhgt;
1127 
1128 	for (scnhgt = 0; scnhgt++ < HEIGHT+DROP; ) {
1129 		strp = &outbuf[0];
1130 		sp = scsp;
1131 		for (nchrs = 0; ; ) {
1132 			d = dropit(c = TRC(cc = *sp++));
1133 			if ((!d && scnhgt > HEIGHT) || (scnhgt <= DROP && d))
1134 				for (j = WIDTH; --j;)
1135 					*strp++ = BACKGND;
1136 			else
1137 				strp = scnline(scnkey[(int)c][scnhgt-1-d],
1138 				    strp, cc);
1139 			if (*sp == '\0' || nchrs++ >= pw/(WIDTH+1)-1)
1140 				break;
1141 			*strp++ = BACKGND;
1142 			*strp++ = BACKGND;
1143 		}
1144 		while (*--strp == BACKGND && strp >= outbuf)
1145 			;
1146 		strp++;
1147 		*strp++ = '\n';
1148 		if (write(scfd, outbuf, strp-outbuf) == -1)
1149 			return -1;
1150 	}
1151 
1152 	return 0;
1153 }
1154