home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume5 / rnameg < prev    next >
Text File  |  1989-02-03  |  7KB  |  222 lines

  1. Path: xanth!nic.MR.NET!hal!ncoast!allbery
  2. From: slocum@hi-csc.UUCP (Brett Slocum)
  3. Newsgroups: comp.sources.misc
  4. Subject: v05i039: Random Name Generator Source Code
  5. Summary: name generator for RPG games
  6. Message-ID: <3f6d7ec2.805@hi-csc.UUCP>
  7. Date: 9 Nov 88 02:21:39 GMT
  8. Sender: allbery@ncoast.UUCP
  9. Reply-To: slocum@hi-csc.UUCP (Brett Slocum)
  10. Organization: csdd
  11. Lines: 208
  12. Approved: allbery@ncoast.UUCP
  13.  
  14. Posting-number: Volume 5, Issue 39
  15. Submitted-by: "Brett Slocum" <slocum@hi-csc.UUCP>
  16. Archive-name: rnameg
  17.  
  18. [Looks reasonably portable to BSD or System V, but wants one of the better
  19. random number generators.  ++bsa]
  20.  
  21. This program is a very simple random name generator that produces
  22. surprisingly good names.  They tend to be exotic, since 'X' and 
  23. 'Z' have the same chance of coming up as 'T' and 'N'.  Many of the
  24. names have a Japanese or African flavor.  Some of my favorites
  25. came in the first page: Zozaras, Lyxam, Rux, and Zelica.
  26.  
  27. The program 'name.c' produces the names, and two scripts are 
  28. included to formats them into pages: names.csh and names.sh, 
  29. for C-shell and Bourne shell, respectively.
  30.  
  31. These programs have been tested on an Apollo DN330 with both
  32. BSD4.2 and Sys V, and on BSD4.3.  The makefile and names.csh 
  33. script have Sys V versions commented out.
  34.  
  35. Send any changes or updates to me:
  36.  
  37. Brett Slocum
  38. ...uunet!hi-csc!slocum
  39. slocum@hi-csc.honeywell.com
  40.  
  41. P.S. Thanks to Geoff Kimbrough <geoff@ism780c.isc.com> for
  42. suggesting some improvements.
  43.  
  44. #--------------------------------CUT HERE-------------------------------------
  45. #! /bin/sh
  46. #
  47. # This is a shell archive.  Save this into a file, edit it
  48. # and delete all lines above this comment.  Then give this
  49. # file to sh by executing the command "sh file".  The files
  50. # will be extracted into the current directory owned by
  51. # you with default permissions.
  52. #
  53. # The files contained herein are:
  54. #
  55. # \c
  56. -rwxrwx---  1 slocum        251 Nov  2 09:15 Makefile
  57. # \c
  58. -rwxrwx---  1 slocum        451 Nov  2 09:15 names.csh
  59. # \c
  60. -rwxrwx---  1 slocum        111 Nov  2 09:15 names.sh
  61. # \c
  62. -rwxrwx---  1 slocum       2545 Nov  2 09:15 name.c
  63. #
  64. echo 'x - Makefile'
  65. if test -f Makefile; then echo 'shar: not overwriting Makefile'; else
  66. sed 's/^X//' << '________This_Is_The_END________' > Makefile
  67. X#  makefile for name.c
  68. X#
  69. X#       Comment out the BSD line if you're on System V
  70. X#       Comment out the SYSV line if you're using Berkely Unix.
  71. X# SYSTEM = -DSYSV 
  72. XSYSTEM = -DBSD
  73. XCFLAGS = -O $(SYSTEM)
  74. Xname:   name.c
  75. X    cc -o name $(CFLAGS) name.c
  76. X
  77. ________This_Is_The_END________
  78. if test `wc -l < Makefile` -ne 13; then
  79.     echo 'shar: Makefile was damaged during transit (should have been 13 bytes)'
  80. fi
  81. fi        ; : end of overwriting check
  82. echo 'x - names.csh'
  83. if test -f names.csh; then echo 'shar: not overwriting names.csh'; else
  84. sed 's/^X//' << '________This_Is_The_END________' > names.csh
  85. X#! /bin/csh
  86. X# names - generate random names
  87. X#
  88. X# usage: names [pages]
  89. X
  90. X# bsd script -- uncomment these lines if bsd
  91. X
  92. Xif ($#argv == 0) then
  93. X    name 336 | sort -u | pr -6 | expand
  94. Xelse
  95. X    @ n = 336 * $1
  96. X    name $n | sort -u | pr -6 | expand
  97. Xendif
  98. X
  99. X# sysv script -- uncomment these lines if sysv
  100. X# note: no tab expansion performed
  101. X
  102. X#if ($#argv == 0) then
  103. X#    name 336 | sort -u | pr -6
  104. X#else
  105. X#    @ n = 336 * $1
  106. X#    name $n | sort -u | pr -6
  107. X#endif
  108. X
  109. ________This_Is_The_END________
  110. if test `wc -l < names.csh` -ne 24; then
  111.     echo 'shar: names.csh was damaged during transit (should have been 24 bytes)'
  112. fi
  113. fi        ; : end of overwriting check
  114. echo 'x - names.sh'
  115. if test -f names.sh; then echo 'shar: not overwriting names.sh'; else
  116. sed 's/^X//' << '________This_Is_The_END________' > names.sh
  117. Xif [ $# = 0 ]
  118. Xthen
  119. X    name 336 | sort -u | pr -6
  120. Xelse
  121. X    n=`expr 336 \* $1`
  122. X    name $n | sort -u | pr -6
  123. Xfi
  124. ________This_Is_The_END________
  125. if test `wc -l < names.sh` -ne 7; then
  126.     echo 'shar: names.sh was damaged during transit (should have been 7 bytes)'
  127. fi
  128. fi        ; : end of overwriting check
  129. echo 'x - name.c'
  130. if test -f name.c; then echo 'shar: not overwriting name.c'; else
  131. sed 's/^X//' << '________This_Is_The_END________' > name.c
  132. X/**************************************************************************
  133. X *      name - prints random names                                        * 
  134. X *  Copyright 1988 by Brett Slocum.  All rights reserved.                 *
  135. X *  Permission is granted to distribute, modify, or use portions of this  *
  136. X *  code in other programs, as long as this copyright notice remains      *
  137. X *  intact.  This program may not be sold for profit without permission.  *
  138. X *                                                                        *
  139. X *  Changes were suggested by Geoff Kimbrough <geoff@ism780c.isc.com>     *
  140. X **************************************************************************/
  141. X
  142. X#ifdef SYSV
  143. X#include <string.h>
  144. X#define srandom srand48
  145. X#define random lrand48
  146. X#else
  147. X#include <strings.h>
  148. X#endif
  149. X
  150. X#include <ctype.h>
  151. X
  152. X#define YES 1
  153. X#define NO 0
  154. X#define MAXNAME 30
  155. X#define MINLENGTH 3
  156. X#define RANGE 6
  157. X#define rnd(n) ((unsigned) random() % (unsigned) n)
  158. X
  159. X/* Since "y" and "'" appear twice, once in each array, all other 
  160. X   letters are doubled to keep the distribution even. */
  161. X
  162. X char vowels[] = "aaeeiioouuy'";
  163. X char cons[] = "bbccddffgghhjjkkllmmnnppqqrrssttvvwwxxyzz'";
  164. X
  165. Xmain(argc, argv)  
  166. Xint argc;
  167. Xchar *argv[];
  168. X{
  169. X     int n, letters, vowel;
  170. X     char name[MAXNAME];
  171. X
  172. X     if (argc == 2) {
  173. X         /* initialize random number generator */
  174. X         srandom(time(0L));
  175. X
  176. X         /* generate argv[1] names */
  177. X         for (n = atoi(argv[1]); n > 0; n--) {
  178. X             name[0] = '\0';
  179. X             /* choose whether first character is a vowel */
  180. X             vowel =  (rnd(2) ? YES : NO);
  181. X             /* get initial character - not " ' " */
  182. X             if (vowel)  
  183. X                 strncat(name, &vowels[rnd(sizeof(vowels)-2)], 1);
  184. X             else 
  185. X                 strncat(name, &cons[rnd(sizeof(cons)-2)], 1);
  186. X             /* upper case first letter */
  187. X             name[0] = _toupper(name[0]);
  188. X             /* complete rest of letters */
  189. X             for (letters = rnd(RANGE) + MINLENGTH; letters > 0; letters--) {
  190. X                 /* alternate vowels and consonants */
  191. X                 vowel = ( vowel ? NO : YES );
  192. X                 /* get next character */
  193. X                 if (vowel) 
  194. X                     strncat(name, &vowels[rnd(sizeof(vowels))], 1);
  195. X                 else 
  196. X                     strncat(name, &cons[rnd(sizeof(cons))], 1);
  197. X             }
  198. X             printf("%s\n", name);
  199. X         }
  200. X     }
  201. X     else 
  202. X         usage();
  203. X}
  204. X
  205. Xusage()  /* print usage statement */
  206. X{
  207. X     printf("Usage: name number-of-names\n");
  208. X}
  209. ________This_Is_The_END________
  210. if test `wc -l < name.c` -ne 77; then
  211.     echo 'shar: name.c was damaged during transit (should have been 77 bytes)'
  212. fi
  213. fi        ; : end of overwriting check
  214. exit 0
  215. -- 
  216. Brett Slocum   UUCP: ...uunet!hi-csc!slocum
  217.                Arpa: slocum@hi-csc.honeywell.com
  218. "My name is Inigo Montoya. You killed my father. Prepare to die."
  219.