a /usr/bin/banner clone, written by Simon J. Gerraty

This commit is contained in:
cgd 1995-04-09 05:53:04 +00:00
parent f0dfc32ae9
commit b83d704e42
5 changed files with 2380 additions and 0 deletions

17
usr.bin/banner/Makefile Normal file
View File

@ -0,0 +1,17 @@
# $NetBSD: Makefile,v 1.1.1.1 1995/04/09 05:53:04 cgd Exp $
PROG= banner
SRCS= $(PROG).c chset.c
# if you want to make chars from the letter involved (like lpd), then
# un-comment the following.
#CFLAGS+= -DNOHASH_ONLY
# if you want to use the same char set that lpd uses then un-comment
# the following. Lpd uses a much nicer character set but banner
# output will not be the same as the real thing.
#CFLAGS+= -DLPD_CHSET
.include <bsd.prog.mk>

33
usr.bin/banner/banner.1 Normal file
View File

@ -0,0 +1,33 @@
.\" $NetBSD: banner.1,v 1.1.1.1 1995/04/09 05:53:04 cgd Exp $
.\"
.\" @(#)Copyright (c) 1995, Simon J. Gerraty.
.\"
.\" This is free software. It comes with NO WARRANTY.
.\" Permission to use, modify and distribute this source code
.\" is granted subject to the following conditions.
.\" 1/ that the above copyright notice and this notice
.\" are preserved in all copies and that due credit be given
.\" to the author.
.\" 2/ that any changes to this code are clearly commented
.\" as such so that the author does not get blamed for bugs
.\" other than his own.
.\"
.\" Please send copies of changes and bug-fixes to:
.\" sjg@zen.void.oz.au
.\"
.Dd April 9, 1995
.Dt BANNER 1
.Os
.Sh NAME
.Nm banner
.Nd print strings in large letters
.Sh SYNOPSIS
.Nm banner
.Ar string ...
.Sh DESCRIPTION
.Nm Banner
prints up to 10 chars of each
.Ar string
in large letters on the standard output.
.Sh SEE ALSO
.Xr banner 6

173
usr.bin/banner/banner.c Normal file
View File

@ -0,0 +1,173 @@
/* $NetBSD: banner.c,v 1.1.1.1 1995/04/09 05:53:05 cgd Exp $ */
/*
* Changes for banner(1)
*
* @(#)Copyright (c) 1995, Simon J. Gerraty.
*
* This is free software. It comes with NO WARRANTY.
* Permission to use, modify and distribute this source code
* is granted subject to the following conditions.
* 1/ that the above copyright notice and this notice
* are preserved in all copies and that due credit be given
* to the author.
* 2/ that any changes to this code are clearly commented
* as such so that the author does not get blamed for bugs
* other than his own.
*
* Please send copies of changes and bug-fixes to:
* sjg@zen.void.oz.au
*/
/*
* Copyright (c) 1983, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#ifndef lint
static char copyright[] =
"@(#) Copyright (c) 1983, 1993\n\
The Regents of the University of California. All rights reserved.\n";
#endif /* not lint */
#ifndef lint
static char sccsid[] = "@(#)printjob.c 8.2 (Berkeley) 4/16/94";
#endif /* not lint */
#ifndef lint
static char rcsid[] = "$NetBSD: banner.c,v 1.1.1.1 1995/04/09 05:53:05 cgd Exp $";
#endif
#include <stdio.h>
#include "banner.h"
static long PW = LINELEN;
/* the char gen code below is lifted from lpd */
static char *
scnline(key, p, c)
register int key;
register char *p;
int c;
{
register scnwidth;
/*
* <sjg> lpd makes chars out of the letter in question.
* the results are somewhat mixed. Sticking to '#' as
* banner(1) does is more consistent.
*/
#ifndef NOHASH_ONLY
c = '#';
#endif
for (scnwidth = WIDTH; --scnwidth;) {
key <<= 1;
*p++ = key & 0200 ? c : BACKGND;
}
return (p);
}
#define TRC(q) (((q)-' ')&0177)
static int
dropit(c)
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);
}
}
static void
scan_out(scfd, scsp, dlm)
int scfd, dlm;
char *scsp;
{
register char *strp;
register nchrs, j;
char outbuf[LINELEN+1], *sp, c, cc;
int d, scnhgt;
extern char scnkey[][HEIGHT]; /* in lpdchar.c */
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[c][scnhgt-1-d], strp, cc);
if (*sp == dlm || *sp == '\0' || nchrs++ >= PW/(WIDTH+1)-1)
break;
*strp++ = BACKGND;
#ifdef LPD_CHSET /* <sjg> */
*strp++ = BACKGND;
#endif
}
while (*--strp == BACKGND && strp >= outbuf)
;
strp++;
*strp++ = '\n';
(void) write(scfd, outbuf, strp-outbuf);
}
}
/*
* for each word, print up to 10 chars in big letters.
*/
int
main(argc, argv)
int argc;
char **argv;
{
char word[10+1]; /* strings limited to 10 chars */
while (*++argv) {
(void)strncpy(word, *argv, sizeof (word) - 1);
word[sizeof (word) - 1] = '\0';
scan_out(1, word, '\0');
}
exit(0);
}

32
usr.bin/banner/banner.h Normal file
View File

@ -0,0 +1,32 @@
/* $NetBSD: banner.h,v 1.1.1.1 1995/04/09 05:53:05 cgd Exp $ */
/*
* Various defines needed for code lifted from lpd.
*
* @(#)Copyright (c) 1995, Simon J. Gerraty.
*
* This is free software. It comes with NO WARRANTY.
* Permission to use, modify and distribute this source code
* is granted subject to the following conditions.
* 1/ that the above copyright notice and this notice
* are preserved in all copies and that due credit be given
* to the author.
* 2/ that any changes to this code are clearly commented
* as such so that the author does not get blamed for bugs
* other than his own.
*
* Please send copies of changes and bug-fixes to:
* sjg@zen.void.oz.au
*/
#define LINELEN 132
#define BACKGND ' '
#ifdef LPD_CHSET
#define HEIGHT 9 /* height of characters */
#define DROP 3 /* offset to drop characters with descenders */
#else
#define HEIGHT 8 /* height of characters */
#define DROP 0 /* offset to drop characters with descenders */
#endif
#define WIDTH 8 /* width of characters */

2125
usr.bin/banner/chset.c Normal file

File diff suppressed because it is too large Load Diff