Annotation of src/usr.bin/banner/banner.c, Revision 1.1
1.1 ! deraadt 1: /* $NetBSD: banner.c,v 1.2 1995/04/09 06:00:15 cgd Exp $ */
! 2:
! 3: /*
! 4: * Changes for banner(1)
! 5: *
! 6: * @(#)Copyright (c) 1995, Simon J. Gerraty.
! 7: *
! 8: * This is free software. It comes with NO WARRANTY.
! 9: * Permission to use, modify and distribute this source code
! 10: * is granted subject to the following conditions.
! 11: * 1/ that the above copyright notice and this notice
! 12: * are preserved in all copies and that due credit be given
! 13: * to the author.
! 14: * 2/ that any changes to this code are clearly commented
! 15: * as such so that the author does not get blamed for bugs
! 16: * other than his own.
! 17: *
! 18: * Please send copies of changes and bug-fixes to:
! 19: * sjg@zen.void.oz.au
! 20: */
! 21:
! 22: /*
! 23: * Copyright (c) 1983, 1993
! 24: * The Regents of the University of California. All rights reserved.
! 25: *
! 26: * Redistribution and use in source and binary forms, with or without
! 27: * modification, are permitted provided that the following conditions
! 28: * are met:
! 29: * 1. Redistributions of source code must retain the above copyright
! 30: * notice, this list of conditions and the following disclaimer.
! 31: * 2. Redistributions in binary form must reproduce the above copyright
! 32: * notice, this list of conditions and the following disclaimer in the
! 33: * documentation and/or other materials provided with the distribution.
! 34: * 3. All advertising materials mentioning features or use of this software
! 35: * must display the following acknowledgement:
! 36: * This product includes software developed by the University of
! 37: * California, Berkeley and its contributors.
! 38: * 4. Neither the name of the University nor the names of its contributors
! 39: * may be used to endorse or promote products derived from this software
! 40: * without specific prior written permission.
! 41: *
! 42: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
! 43: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
! 44: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
! 45: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
! 46: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
! 47: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
! 48: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
! 49: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
! 50: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
! 51: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
! 52: * SUCH DAMAGE.
! 53: */
! 54: #ifndef lint
! 55: static char copyright[] =
! 56: "@(#) Copyright (c) 1983, 1993\n\
! 57: The Regents of the University of California. All rights reserved.\n";
! 58: #endif /* not lint */
! 59:
! 60: #ifndef lint
! 61: #if 0
! 62: static char sccsid[] = "@(#)printjob.c 8.2 (Berkeley) 4/16/94";
! 63: #else
! 64: static char rcsid[] = "$NetBSD: banner.c,v 1.2 1995/04/09 06:00:15 cgd Exp $";
! 65: #endif
! 66: #endif /* not lint */
! 67:
! 68: #include <stdio.h>
! 69:
! 70: #include "banner.h"
! 71:
! 72: static long PW = LINELEN;
! 73:
! 74: /* the char gen code below is lifted from lpd */
! 75:
! 76: static char *
! 77: scnline(key, p, c)
! 78: register int key;
! 79: register char *p;
! 80: int c;
! 81: {
! 82: register scnwidth;
! 83:
! 84: /*
! 85: * <sjg> lpd makes chars out of the letter in question.
! 86: * the results are somewhat mixed. Sticking to '#' as
! 87: * banner(1) does is more consistent.
! 88: */
! 89: #ifndef NOHASH_ONLY
! 90: c = '#';
! 91: #endif
! 92:
! 93: for (scnwidth = WIDTH; --scnwidth;) {
! 94: key <<= 1;
! 95: *p++ = key & 0200 ? c : BACKGND;
! 96: }
! 97: return (p);
! 98: }
! 99:
! 100: #define TRC(q) (((q)-' ')&0177)
! 101:
! 102:
! 103: static int
! 104: dropit(c)
! 105: int c;
! 106: {
! 107: switch(c) {
! 108:
! 109: case TRC('_'):
! 110: case TRC(';'):
! 111: case TRC(','):
! 112: case TRC('g'):
! 113: case TRC('j'):
! 114: case TRC('p'):
! 115: case TRC('q'):
! 116: case TRC('y'):
! 117: return (DROP);
! 118:
! 119: default:
! 120: return (0);
! 121: }
! 122: }
! 123:
! 124: static void
! 125: scan_out(scfd, scsp, dlm)
! 126: int scfd, dlm;
! 127: char *scsp;
! 128: {
! 129: register char *strp;
! 130: register nchrs, j;
! 131: char outbuf[LINELEN+1], *sp, c, cc;
! 132: int d, scnhgt;
! 133: extern char scnkey[][HEIGHT]; /* in lpdchar.c */
! 134:
! 135: for (scnhgt = 0; scnhgt++ < HEIGHT+DROP; ) {
! 136: strp = &outbuf[0];
! 137: sp = scsp;
! 138: for (nchrs = 0; ; ) {
! 139: d = dropit(c = TRC(cc = *sp++));
! 140: if ((!d && scnhgt > HEIGHT) || (scnhgt <= DROP && d))
! 141: for (j = WIDTH; --j;)
! 142: *strp++ = BACKGND;
! 143: else
! 144: strp = scnline(scnkey[c][scnhgt-1-d], strp, cc);
! 145: if (*sp == dlm || *sp == '\0' || nchrs++ >= PW/(WIDTH+1)-1)
! 146: break;
! 147: *strp++ = BACKGND;
! 148: #ifdef LPD_CHSET /* <sjg> */
! 149: *strp++ = BACKGND;
! 150: #endif
! 151: }
! 152: while (*--strp == BACKGND && strp >= outbuf)
! 153: ;
! 154: strp++;
! 155: *strp++ = '\n';
! 156: (void) write(scfd, outbuf, strp-outbuf);
! 157: }
! 158: }
! 159:
! 160: /*
! 161: * for each word, print up to 10 chars in big letters.
! 162: */
! 163: int
! 164: main(argc, argv)
! 165: int argc;
! 166: char **argv;
! 167: {
! 168: char word[10+1]; /* strings limited to 10 chars */
! 169:
! 170: while (*++argv) {
! 171: (void)strncpy(word, *argv, sizeof (word) - 1);
! 172: word[sizeof (word) - 1] = '\0';
! 173: scan_out(1, word, '\0');
! 174: }
! 175: exit(0);
! 176: }