I have pulled this from an old comp.sources.misc issue and inserted a
few improvements to accomodate the program to the needs of modern Un*x
"passwd" commands. Many of them require at least one capital letter
and/or digit in passwords. So I've changed the algorithm as follows:
Optionally, the second syllable of the generated word is capitalized
(i.e. the starting consonant is), and on another option, the second
syllable is prefixed with a digit. This scheme is predictable but
better than nothing - you can easily remember the word with the second
syllable stressed, so you know which letter to capitalize, and
remember the digit along with the word and already know where to
insert it. 

The following compile-time options are recognized. If none of them is
active, you get the original version.

CAPITALIZE - put capital letters into the generated passwords.
NUMERALS - put numerals into the generated passwords.
ALTPHON - use some alternate spellings. 
  Originally, the number of "o"s in the generated words is
  disproportionally high, and "ooo" sequences are common.
RAND48 - set this to use the better pseudorandom number generator of
  the drand48(3) family if your system has this.

I've also taken the liberty to write a Makefile and a man page.

Following are results of test runs how many duplicate words are
generated. The test was run under HPUX 8.05 with all the above
options set. For each length, 10 test runs were conducted which all
had to generate 100,000 passwords, and counted the number of words
that were repeated at least once (uniq -d).

length=8   1232 1273 1266 1308 1291 1248 1280 1266 1250 1278   
length=9    178  190  174  184  210  192  204  237  210  205
length=10    35   29   36   24   24   19   30   36   28   32
length=11     7    3    4    7    3    7    6    3    4    7
length=12     0    1    0    0    3    0    1    1    1    0
length=13     0    0    0    0    0    0    0    0    0    0
length=14     0    0    0    0    0    0    0    0    0    0


Olaf Titz <titz@askdonald.ask.uni-karlsruhe.de>