home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: comp.unix.questions
- Path: sparky!uunet!cs.utexas.edu!convex!convex!tchrist
- From: Tom Christiansen <tchrist@convex.COM>
- Subject: Re: Fortunes
- Message-ID: <1992Jul23.143441.11923@news.eng.convex.com>
- Originator: tchrist@pixel.convex.com
- Sender: usenet@news.eng.convex.com (news access account)
- Nntp-Posting-Host: pixel.convex.com
- Reply-To: tchrist@convex.COM (Tom Christiansen)
- Organization: CONVEX Realtime Development, Colorado Springs, CO
- References: <1992Jul23.023102.11675@polari>
- Date: Thu, 23 Jul 1992 14:34:41 GMT
- X-Disclaimer: This message was written by a user at CONVEX Computer
- Corp. The opinions expressed are those of the user and
- not necessarily those of CONVEX.
- Lines: 152
-
- From the keyboard of sparky@polari.online.com:
- :Don't know if this is the correct place to post this question, but...
- :
- :I know there is a way to create one's own "fortune" file for use in
- :mail and messages. How is this done, and how can I make mush, for
- :example, use *my* fortune file instead of the default one?
-
- This way:
-
- --tom
-
-
- #!/usr/bin/perl
- #
- # sigrand -- supply random fortunes for .signature file
-
- ################################################################
- # begin configuration section
-
- $MKNOD = "/etc/mknod";
-
- &gethome;
-
- # for rec/humor/funny instead of rec.humor.funny
- $NG_IS_DIR = 1;
-
- $FULLNAME = "$HOME/.fullname";
- $FIFO = "$HOME/.signature";
- $ART = "$HOME/.article";
- $NEWS = "$HOME/News";
- $SIGS = "$NEWS/SIGNATURES";
- $SEMA = "$HOME/.sigrandpid";
-
- # end configuration section -- HOME and FORTUNE get autoconf'd
- ################################################################
-
- &setup;
-
- &justme;
-
- fork && exit; # be a daemon
-
- open (SEMA, ">$SEMA") || die "can't write $SEMA: $!";
- print SEMA "$$\n";
- close SEMA || die "can't close $SEMA: $!";
-
- MAIN: while (1) {
- open (FIFO, "> $FIFO") || die "can't write $FIFO: $!";
- &load_sigs;
- $sig = $sig[rand @sig];
- print FIFO $name, "\n" x (3 - ($sig =~ tr/\n//)), $sig;
- close FIFO;
- sleep 2; # to avoid dup sigs
- }
-
- ################################################################
-
- sub setup {
- if (-e $FULLNAME) {
- $name = `cat $FULLNAME`;
- die "$FULLNAME should contain only 1 line, aborting"
- if $name =~ tr/\n// > 1;
- } else {
- chop($host = `hostname`);
- ($host) = gethostbyname($host) unless $host =~ /\./;
- $user = $ENV{USER} || $ENV{LOGNAME} || $pw[0] || die "intruder alert";
- ($name = $pw[6]) =~ s/,.*//;
- $name =~ s/&/$user/g; # can't believe some folks still do this
- $name = "\t$name\t$user\@$host\n";
- }
-
-
- &check_fortunes if !-e $SIGS;
-
- unless (-p $FIFO) {
- if (!-e _) {
- system("$MKNOD $FIFO p") && die "can't mknod $FIFO";
- warn "created $FIFO as a named pipe\n";
- } else {
- die "$0: won't overwrite file .signature\n";
- }
- }
-
-
- srand(time|$$);
- }
-
- sub load_sigs {
- local($sigfile) = &ng;
- if (!-e $sigfile) {
- @sig = (&fortune);
- return;
- }
- open (SIGS,$sigfile) || die "can't open $sigfile";
- local($/) = "%%\n";
- undef @sig;
- while (<SIGS>) {
- s!$/$!!o;
- push(@sig,$_);
- }
- close SIGS;
- }
-
- sub ng {
- open ART || return $SIGS;
- local($/) = '';
- $_ = <ART>;
- ($ng) = /Newsgroups:\s*([^,\s]*)/;
- $ng =~ s!\.!/!g if $NG_IS_DIR; # if rn -/, or SAVEDIR=%p/%c
- $ng = "$NEWS/$ng/SIGNATURES";
- -f $ng ? $ng : $SIGS;
- }
-
- sub fortune {
- local($_, $tries);
- do {
- $_ = `$FORTUNE -s`;
- } until tr/\n// < 4 || $tries++ > 20;
- local($*) = 1;
- s/^/ /g;
- $_ || " SIGRAND: deliver random signals to all processes.\n";
- }
-
- sub check_fortunes {
- return if $FORTUNE;
- foreach $dir (split(/:/, $ENV{PATH}), '/usr/games') {
- return if -x ($FORTUNE = "$dir/fortune");
- }
- die "Need either $SIGS or a fortune program, bailing out";
- }
-
- sub gethome {
- @pw = getpwuid($<);
- $HOME = $ENV{HOME} || $ENV{LOGDIR} || $pw[7]
- || die "no home directory for user $<";
- }
-
- # "There can be only one." --the Highlander
- sub justme {
- if (open SEMA) {
- chop($pid = <SEMA>);
- kill(0, $pid) && die "$0 already running (pid $pid)\n";
- #warn "COOL: no $pid: $!";
- close SEMA;
- }
- }
- __END__
- --
- Tom Christiansen tchrist@convex.com convex!tchrist
-
- One word sums up probably the responsibility of any vice president,
- and that one word is 'to be prepared'. --Vice President Dan Quayle
-