[alt.sources] a "cute .siggie" random inserter for csh.

xanthian@zorch.SF-Bay.ORG (Kent Paul Dolan) (07/09/90)

Here is something trivial but fun.  If you put a constant signature file
in home directory file .siggie, and a set of "quotable quotes" in home
directory files .sig01, .sig02, etc., then csh script "catsig" will write
file .siggie, write a line with "--" on it, and write a random file selected
from the .sig[0-9]* set of quotes.  Program catsig can be used from within
mail or vi to put a personal tag on a letter or news article.  Also included
is program timemod.c, which accepts the number of .sig[0-9]* files from
stdin, and uses it as a modulus with the current system time in seconds to
produce a number from 1 to the file count.  This is good enough for a "random"
selection of a signature for your mail or postings.

Example output:  ;-)

Kent the man from xanth.
<xanthian@Zorch.SF-Bay.ORG> <xanthian@well.sf.ca.us>
--
When someone has broken off a relationship with you, you become very
unattractive, which confirms all the reasons they had for leaving you.
     -- Laurie Moore, Starving Again, in: Like Life

-----------------------------8<--cut here-->8------------------------
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
#	catsig
#	timemod.c
# This archive created: Sun Jul  8 17:02:28 1990
export PATH; PATH=/bin:$PATH
echo shar: extracting "'catsig'" '(2308 characters)'
if test -f 'catsig'
then
       echo shar: will not over-write existing file "'catsig'"
else
sed 's/^XX//' << \SHAR_EOF > 'catsig'
XX#! /bin/csh
XX#
XX#   csh script program "catsig", Copyright 1990 by Kent Paul Dolan, 94039-0755.
XX#
XX#   The purpose of catsig is to add to the end of a letter or news article
XX#   (from the editor) a signature block consisting of the contents of
XX#   home directory file ".siggie", and the contents of a "random" member of
XX#   a list of home directory files with names of the form ".sig[0-9]*".  The
XX#   .sig[0-9]* file names do not have to be sequentially numbered.
XX#
XX#   Uses:  from within mail, say "~r !catsig"; from within vi, say
XX#   ":r !catsig".  Executables "catsig" and "timemod" must be in your
XX#   executable file path list.
XX#
XX#   catsig uses two auxiliary files in the home directory, .sigtemp and
XX#   .sigpick, sets a csh environmental variable SIGPICK, and requires 
XX#   at least the old version of "awk", and program "timemod"by the current
XX#   author, distributed with this program.
XX#
XX#   Permission to use and disseminate this file for any use, except sale as
XX#   part of a commercial product, so long as this header remains intact, is
XX#   hereby granted by the author.  As for any free software, this comes with
XX#   no guarantees of useablity.  "It worked for me!"
XX#
XX#   Write file .siggie to the standard output.
XX#
XXcat ~/.siggie
XX#
XX#   Separate it from the random ~/.sig[0-9]* file with the usual "--" alone
XX#   on a line, written to the standard output.
XX#
XXecho "--"
XX#
XX#   Inventory the files with names of format .sig[0-9]* into file ~/.sigtemp.
XX#
XXls ~/.sig[0-9]* > ~/.sigtemp
XX#
XX#   Use the number of lines in ~/sigtemp as a count of the .sig[0-9]* files,
XX#   and hand that count to "timemod" to get back a random number from 1 to
XX#   that count.  Store that number in envronmental variable SIGPICK.
XX#
XXsetenv SIGPICK `wc -l ~/.sigtemp | timemod`
XX#
XX#   Create a one line awk program to pick the line with this line number from
XX#   .sigtemp.  [Can you guess that my system doesn't support "head"?  ;-)]
XX#
XXecho "NR==$SIGPICK {print}" > ~/.sigpick
XX#
XX#   Use awk to dump this file name into a cat command's file list, and use this
XX#   cat command in turn to copy the random .sig[0-9]* to the standard output.
XX#
XXcat `awk -f ~/.sigpick ~/.sigtemp`
XX#
XX#   That's it.  Slow as molasses and ugly as sin, but it works.  Sorry to use
XX#   csh instead of sh, but perhaps some kind person will translate this.
SHAR_EOF
if test 2308 -ne "`wc -c < 'catsig'`"
then
       echo shar: error transmitting "'catsig'" '(should have been 2308 characters)'
fi
chmod +x 'catsig'
fi # end of overwriting check
echo shar: extracting "'timemod.c'" '(1568 characters)'
if test -f 'timemod.c'
then
       echo shar: will not over-write existing file "'timemod.c'"
else
sed 's/^XX//' << \SHAR_EOF > 'timemod.c'
XX/*
XX    timemod.c -- Copyright 1990 Kent Paul Dolan, Mountain View, CA 94039-0755.
XX
XX    Main program timemod accepts a strictly positive (long) integer from
XX    the standard input.  Error checking is not performed on the input.
XX
XX    It uses this integer as a modulus base MOD.
XX
XX    Using the system time in seconds from time(3f), it performs the long
XX    integer equivalent of "time() % MOD".
XX
XX    It adds 1 to the result and writes a number in the range 1 to MOD to
XX    the standard output.  
XX
XX    Program timemod is useful for producing small "random" numbers during
XX    interactive operations, for example to choose an element from a list
XX    based on the (reasonably) random time when the user calls timemod.
XX
XX    Timemod requires function time(3f), which can be in one of several
XX    libraries depending on the site's OS and libraries.  At the developer's
XX    site, it was found in /usr/lib/libc-nofp.a, and this program was
XX    compiled using "cc -o timemod timemod.c -lc-nofp".
XX
XX    Permission to use this program for any purpose except sale as part of
XX    a commercial product, and to disseminate it so long as the source
XX    including this credit comment is included with the executable, is
XX    hereby granted by the author.
XX
XX    As usual, this free software comes with no guarantees of useability, nor
XX    does the author accept any liability for its use by others.
XX
XX*/
XX
XX#include <stdio.h>
XX
XXmain ()
XX{
XX  long count,timehold,temp;
XX  scanf("%ld",&count);
XX  timehold = time();
XX  temp = timehold/count;
XX  printf("%ld\n",timehold - (temp*count) + 1);
XX  exit (0);
XX}
SHAR_EOF
if test 1568 -ne "`wc -c < 'timemod.c'`"
then
       echo shar: error transmitting "'timemod.c'" '(should have been 1568 characters)'
fi
fi # end of overwriting check
#	End of shell archive
exit 0