First attempt at making this nicely installable.

This commit is contained in:
tony 1999-08-14 08:03:16 +00:00
parent 1ea4c1be38
commit 218d8cbdf7
9 changed files with 376 additions and 81 deletions

54
Files.base Normal file
View File

@ -0,0 +1,54 @@
INSTALL
LICENSE
MANIFEST
README
pgp_public_key.txt
cowsay
cowsay.1
cows/
cows/beavis.zen.cow
cows/bong.cow
cows/bud-frogs.cow
cows/bunny.cow
cows/cheese.cow
cows/cower.cow
cows/default.cow
cows/devil.cow
cows/dragon-and-cow.cow
cows/dragon.cow
cows/elephant-in-snake.cow
cows/elephant.cow
cows/eyes.cow
cows/flaming-sheep.cow
cows/ghostbusters.cow
cows/head-in.cow
cows/hellokitty.cow
cows/kiss.cow
cows/kitty.cow
cows/koala.cow
cows/kosh.cow
cows/luke-koala.cow
cows/mech-and-cow
cows/meow.cow
cows/milk.cow
cows/moofasa.cow
cows/moose.cow
cows/mutilated.cow
cows/ren.cow
cows/satanic.cow
cows/sheep.cow
cows/skeleton.cow
cows/small.cow
cows/sodomized.cow
cows/stegosaurus.cow
cows/stimpy.cow
cows/supermilker.cow
cows/surgery.cow
cows/telebears.cow
cows/three-eyes.cow
cows/turkey.cow
cows/turtle.cow
cows/udder.cow
cows/vader-koala.cow
cows/www.cow
cows/vader.cow

15
INSTALL Normal file
View File

@ -0,0 +1,15 @@
=================
Installing cowsay
=================
If you really want to get things installed a nice and pretty way,
sh install.sh
It will ask approximately one question. If you can't answer it,
you need serious help.
If the install goes well, you can start cowing immediately! Just
be sure to read the manual page first...
$Id$

36
LICENSE Normal file
View File

@ -0,0 +1,36 @@
==============
cowsay License
==============
cowsay is distributed under the same licensing terms as Perl: the
Artistic License or the GNU General Public License. If you don't
want to track down these licenses and read them for yourself, use
the parts that I'd prefer:
(0) I wrote it and you didn't.
(1) Give credit where credit is due if you borrow the code for some
other purpose.
(2) If you have any bugfixes or suggestions, please notify me so
that I may incorporate them.
(3) If you try to make money off of cowsay, you suck.
===============
cowsay Legalese
===============
(0) Copyright (c) 1999 Tony Monroe. All rights reserved. All
lefts may or may not be reversed at my discretion.
(1) This software package can be freely redistributed or modified
under the terms described above in the "cowsay License" section
of this file.
(2) cowsay is provided "as is," with no warranties whatsoever,
expressed or implied. If you want some implied warranty about
merchantability and/or fitness for a particular purpose, you will
not find it here, because there is no such thing here.
(3) I hate legalese.

9
MANIFEST Normal file
View File

@ -0,0 +1,9 @@
INSTALL Instructions for installing cowsay.
LICENSE The license for use and redistribution of cowsay.
MANIFEST This file.
README Read this first. Really.
cows/* Support files used by cowsay.
cowsay Main cowsay executable.
cowsay.1 Main cowsay manual page.
install.sh cowsay installation script.
pgp_public_key.txt Verify the signature file with this key.

40
Makefile Normal file
View File

@ -0,0 +1,40 @@
##
## Makefile for managing simple NetHirc-related tasks
##
## $Id$
##
FILES= Files.base
PRODUCT= cowsay
VER= 3.0
BASE= ${PRODUCT}-${VER}
TARZ= ${BASE}.tar.Z
TARGZ= ${BASE}.tar.gz
TARS= ${TARZ} ${TARGZ}
SIGZ= ${TARZ}.sig
SIGGZ= ${TARGZ}.sig
SIGS= ${SIGZ} ${SIGGZ}
FTP= jariten:ftp/cowsay
release: run-pax sign upload
tar: run-pax
run-pax: ${FILES}
-chmod +x install.sh
pax -w -d -x tar \
-s ",^,${BASE}/," \
-f ${BASE}.tar \
`cat ${FILES}`
gzip -c ${BASE}.tar > ${TARGZ}
compress ${BASE}.tar
sign: ${TARS}
for i in ${TARS}; do pgp -sb $$i; done
chmod 644 ${SIGS}
upload: ${TARS} ${SIGS}
scp ${TARS} ${SIGS} ${FTP}
clean:
-rm -f ${TARS} ${SIGS}

28
README Normal file
View File

@ -0,0 +1,28 @@
==========
cowsay 3.0
==========
cowsay is a configurable talking cow, written in Perl. It operates
much as the figlet program does, and it written in the same spirit
of silliness.
cowsay is actually a pretty old program. It has not really been
released before, and I am releasing it in the hope that someone
other than myself will be amused by it.
The first major version of cowsay had one cow and one message
template: $foo is $verb $bar. Not very flexible, but people managed
to do pretty interesting things with it. The second major version
scrapped many of the limitations of the first, by allowing arbitrary
messages, multiple cowfiles, and even support for cows talking in
figlet. The third version was a rewrite of the second into Perl
5, whereupon the code got a lot smaller and more manageable. :-)
To install cowsay, consult the INSTALL file in this directory.
For the terms and conditions of use, consult the LICENSE file in
this directory.
-- Tony Monroe (tony@nog.net)
$Id$

9
cowsay
View File

@ -1,8 +1,9 @@
#!/usr/bin/perl -w #%BANGPERL%
## ##
## Cowsay 3.0 ## Cowsay 3.0
## Tony Monroe, 13 April 1999 ##
## This file is part of cowsay. (c) 1999 Tony Monroe.
## ##
use Text::Wrap qw(wrap fill $columns $tabstop); use Text::Wrap qw(wrap fill $columns $tabstop);
@ -15,7 +16,7 @@ $progname = basename($0);
$eyes = "oo"; $eyes = "oo";
$tongue = " "; $tongue = " ";
$wrap = 40; $wrap = 40;
$cowpath = $ENV{'COWPATH'} || '/usr/local/share/cows'; $cowpath = $ENV{'COWPATH'} || '%PREFIX%/share/cows';
@message = (); @message = ();
$thoughts = ""; $thoughts = "";
%opts = ( %opts = (
@ -159,7 +160,7 @@ sub get_cow {
sub display_usage { sub display_usage {
die <<EOF; die <<EOF;
cow{say,think} version $version, (c) 1999 Tony's SquidWarez cow{say,think} version $version, (c) 1999 Tony Monroe
Usage: $progname [-bdgpstwy] [-h] [-e eyes] [-f cowfile] Usage: $progname [-bdgpstwy] [-h] [-e eyes] [-f cowfile]
[-l] [-n] [-T tongue] [-W wrapcolumn] [message] [-l] [-n] [-T tongue] [-W wrapcolumn] [message]
EOF EOF

182
cowsay.1
View File

@ -1,44 +1,57 @@
.so /usr/local/etc/nmh/tmac.h .\"
.TH COWSAY 1 "Barnyard Animal Management" .\" cowsay.1
.\"
.\" $Id$
.\"
.\" This file is part of cowsay. (c) 1999 Tony Monroe.
.\"
.ds Nm Cowsay
.ds nm cowsay
.TH \*(nm 1 "$Date$"
.SH NAME .SH NAME
cowsay, cowthink \- configurable speaking/thinking cow \*(nm/cowthink \- configurable speaking/thinking cow (and a bit more)
.SH SYNOPSIS .SH SYNOPSIS
cowsay cowsay
\%[\-e eye_string] .RB [ \-e
\%[\-f cowfile] .IR eye_string ]
\%[\-h] .RB [ \-f
\%[\-l] .IR cowfile ]
\%[\-n] .RB [ \-h ]
\%[\-T tongue_string] .RB [ \-l ]
\%[\-W column] .RB [ \-n ]
\%[\-bdgpstwy] .RB [ \-T
.IR tongue_string ]
.RB [ \-W
.IR column ]
.RB [ \-bdgpstwy ]
.SH DESCRIPTION .SH DESCRIPTION
.I Cowsay .I Cowsay
generates an ASCII picture of a cow saying something provided by the generates an ASCII picture of a cow saying something provided by the
user. If run with no arguments, it accepts standard input, word-wraps user. If run with no arguments, it accepts standard input, word-wraps
the message given at about 40 columns, and prints the cow saying the the message given at about 40 columns, and prints the cow saying the
given message on standard output. given message on standard output.
.PP
To aid in the use of arbitrary messages with arbitrary whitespace, use the To aid in the use of arbitrary messages with arbitrary whitespace,
.B -n use the
option. If it is specified, the given message will not .B \-n
be word-wrapped. This is possibly useful if you want to make the cow option. If it is specified, the given message will not be
think or speak in figlet(6). If word-wrapped. This is possibly useful if you want to make the cow
.B -n think or speak in figlet(6). If
is specified, there must not be any command-line arguments left after .B \-n
all the switches have been processed. is specified, there must not be any command-line arguments left
after all the switches have been processed.
.PP
The The
.B -W .B \-W
specifies roughly (where the message should be wrapped. The default is specifies roughly (where the message should be wrapped. The default
equivalent to is equivalent to
.B -W 40 .B \-W 40
i.e. wrap words at or before the 40th column. i.e. wrap words at or before the 40th column.
.PP
If any command-line arguments are left over after all switches have If any command-line arguments are left over after all switches have
been processed, they become the cow\'s message. The program will not been processed, they become the cow's message. The program will not
accept standard input for a message in this case. accept standard input for a message in this case.
.PP
There are several provided modes which change the appearance of the There are several provided modes which change the appearance of the
cow depending on its particular emotional/physical state. The cow depending on its particular emotional/physical state. The
.B \-b .B \-b
@ -54,79 +67,94 @@ makes the cow appear thoroughly stoned;
.B \-t .B \-t
yields a tired cow; yields a tired cow;
.B \-w .B \-w
is somewhat the opposite of \-t, and initiates wired mode; is somewhat the opposite of
.BR \-t ,
and initiates wired mode;
.B \-y .B \-y
brings on the cow's youthful appearance. brings on the cow's youthful appearance.
.PP
The user may specify the The user may specify the
.B -e .B \-e
option to select the appearance of the cow's eyes, in which option to select the appearance of the cow's eyes, in which case
case the first two characters of the argument string the first two characters of the argument string
.B eye_string .I eye_string
will be used. The default eyes are 'oo'. The tongue is similarly will be used. The default eyes are 'oo'. The tongue is similarly
configurable through configurable through
.B -T .B \-T
and and
.B tongue_string; .IR tongue_string ;
it must be two characters and does not appear by it must be two characters and does not appear by default. However,
default. However, it does appear in the 'dead' and 'stoned' modes. it does appear in the 'dead' and 'stoned' modes. Any configuration
Any configuration done by done by
.B -e .B \-e
and and
.B -T .B \-T
will be lost if one of the provided modes is used. will be lost if one of the provided modes is used.
.PP
The The
.B -f .B \-f
option specifies a particular cow picture file (``cowfile'') to option specifies a particular cow picture file (``cowfile'') to
use. If the cowfile spec contains / then it will be interpreted use. If the cowfile spec contains '/' then it will be interpreted
as a path relative to the current directory. Otherwise, cowsay as a path relative to the current directory. Otherwise, cowsay
will search the path specified in the COWPATH environment variable. will search the path specified in the
To list all cowfiles on the current $COWPATH, invoke .B COWPATH
.B cowsay environment variable.
To list all cowfiles on the current
.BR COWPATH ,
invoke
.B \*(nm
with the with the
.B -l .B \-l
switch. switch.
.PP
If the program is invoked as If the program is invoked as
.B cowthink .B cowthink
then the cow will think its message instead of saying it. then the cow will think its message instead of saying it.
.PP
.SH COWFILE FORMAT .SH COWFILE FORMAT
A cowfile is made up of a simple block of perl(1) code, which A cowfile is made up of a simple block of
assigns a picture of a cow to the variable ``$the_cow''. Should .BR perl (1)
you wish to customize the eyes or the tongue of the cow, then the code, which assigns a picture of a cow to the variable
variables ``$eyes'' and ``$tongue'' may be used. The trail leading .BR $the_cow .
up to the cow\'s message balloon is composed of the character(s) Should you wish to customize the eyes or the tongue of the cow,
in the ``$thoughts'' variable. Any backslashes must be reduplicated then the variables
to prevent interpolation. The name of a cowfile should end with .BR $eyes and $tongue
``.cow'', otherwise it is assumed not to be a cowfile. Also, may be used. The trail leading up to the cow's message balloon is
at-signs (``@'') must be backslashed because that is what Perl 5 composed of the character(s) in the
expects. .B $thoughts
variable. Any backslashes must be reduplicated to prevent
interpolation. The name of a cowfile should end with
.BR .cow ,
otherwise it is assumed not to be a cowfile. Also, at-signs (``@'')
must be backslashed because that is what Perl 5 expects.
.PP
.SH COMPATIBILITY WITH OLDER VERSIONS .SH COMPATIBILITY WITH OLDER VERSIONS
.PP
What older versions? :-)
.PP
Version 3.0 is fully backward-compatible with 2.x versions. If Version 3.0 is fully backward-compatible with 2.x versions. If
you're still using a 1.x version, consider upgrading. you're still using a 1.x version, consider upgrading.
.SH ENVIRONMENT .SH ENVIRONMENT
The COWPATH environment variable, if present, will be used to search The COWPATH environment variable, if present, will be used to search
for cowfiles. It contains a colon-separated list of directories, for cowfiles. It contains a colon-separated list of directories,
much like PATH or MANPATH. It should always contain the much like
/usr/local/share/cows directory, or at least a directory with a .B PATH or
file called ``default.cow'' in it. .BR MANPATH .
It should always contain the
.B /usr/local/share/cows
directory, or at least a directory with a file called
.B default.cow
in it.
.SH FILES .SH FILES
/usr/local/share/cows holds a sample set of cowfiles. If your .B %PREFIX%/share/cows
COWPATH is not explicitly set, it automatically contains this directory. holds a sample set of cowfiles. If your
.B COWPATH
is not explicitly set, it automatically contains this directory.
.SH BUGS .SH BUGS
If there are any left, please notify the author at the address below. If there are any left, please notify the author at the address below.
.SH AUTHOR .SH AUTHOR
Tony Monroe (tmonroe@csua.berkeley.edu), with suggestions from Shannon Tony Monroe (tony@nog.net), with suggestions from Shannon
Appel (appel@csua.berkeley.edu) and contributions from Anthony Polito Appel (appel@CSUA.Berkeley.EDU) and contributions from Anthony Polito
(aspolito@csua.berkeley.edu). (aspolito@CSUA.Berkeley.EDU).
.SH SEE ALSO .SH SEE ALSO
perl(1), wall(1), nwrite(1), figlet(6), /csua/bin/rootcow perl(1), wall(1), nwrite(1), figlet(6)

84
install.sh Executable file
View File

@ -0,0 +1,84 @@
#!/bin/sh
##
## install.sh
##
## Installation script for cowsay.
##
## $Id$
##
## This file is part of cowsay. (c) 1999 Tony Monroe.
##
rcs_id='$Id$'
filelist='cows'
cat <<DOG
===================
cowsay Installation
===================
Searching for useful perl executables...
DOG
pathdirs=`echo $PATH | tr : " "`
for p in $pathdirs; do
set $p/perl $p/perl5*
while [ ! -z $1 ]; do
if [ -x $1 ]; then
echo Found perl in $1
perls="$perls $1"
fi
shift
done
done
for perl in $perls; do
if $perl -MText::Wrap -e0 >/dev/null 2>&1; then
echo Found a good perl in $perl
goodperls="$goodperls $perl"
fi
done
echo The following perl executables will run cowsay:
echo $goodperls
echo I recommend the latest stable perl you can find.
set $goodperls
if [ -z "$1" ]; then
echo Ack! You do not have Perl 5 installed correctly!
echo Get thee to CPAN!
exit 1
fi
usethisperl=$1
echo I will be using $1 because I know it will work.
echo Now I need an installation prefix. I will use /usr/local unless
printf "you give me a better idea here: "
read prefix
PREFIX=${prefix:-/usr/local}
echo Okay, time to install this puppy.
echo s,%BANGPERL%,!$usethisperl,\; > install.pl
echo s,%PREFIX%,$PREFIX,\; >> install.pl
set -x
mkdir -p $PREFIX/bin || (mkdir $PREFIX; mkdir $PREFIX/bin)
$usethisperl -p install.pl nhirc.pl > $PREFIX/bin/cowsay
chmod a+x $PREFIX/bin/cowsay
ln -s $PREFIX/bin/cowsay $PREFIX/bin/cowthink
mkdir -p $PREFIX/man/man1 || ($mkdir $PREFIX; mkdir $PREFIX/man; mkdir $PREFIX/man/man1)
$usethisperl -p install.pl cowsay.1 > $PREFIX/man/man1/cowsay.1
chmod a+r $PREFIX/man/man1/cowsay.1
ln -s $PREFIX/man/man1/cowsay.1 $PREFIX/man/man1/cowthink.1
mkdir -p $PREFIX/share/cows || (mkdir $PREFIX; mkdir $PREFIX/share; mkdir $PREFIX/share/cows)
tar -cf - $filelist | (cd $PREFIX/share && tar -xvf -)
set +x
echo Okay, let us see if the install actually worked.
if [ ! -f $PREFIX/share/cows/default.cow ]; then
echo The default cow file did not make it across!
echo Ooops, it failed...sorry!
exit 1
fi
echo Installation complete! Enjoy the cows!