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