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 *
scnline(int key,char * p,int c)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
dropit(int c)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
lp_banner(int scfd,char * scsp,int pw)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