home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 1 / 1791 < prev    next >
Encoding:
Internet Message Format  |  1990-12-28  |  12.0 KB

  1. From: lee@sq.sq.com (Liam R. E. Quin)
  2. Newsgroups: alt.sources,rec.games.frp
  3. Subject: Generating Random Names -- source included!
  4. Message-ID: <1990Sep7.214707.13852@sq.sq.com>
  5. Date: 7 Sep 90 21:47:07 GMT
  6.  
  7. After I posted my ancient, horrible, gunky Rolemaster Non-Player-Character
  8. gnerating program (for fantasy rolepaying games), I got mail asking for
  9. the program it references to generate names for characters.
  10.  
  11. I have several programs.  I'm posting two here.  The first one I wrote
  12. in 1983 or 1984 (I forget the exact date) at Warwick University, and Kay
  13. Dekker hacked it mercilessly to make it read a file.
  14.  
  15. The second one I wrote a couple of weeks ago in awk in an hour or so...
  16.  
  17. If I find more, I'll post them.
  18.  
  19. These programs want data files, so I'll include two of those.  I'll
  20. also post an article (to rec.games.frp only) talking a little more about
  21. the philosophy behind these, and about strategies for choosing names.
  22. Unless I forget.
  23. These programs both make a name out of
  24.     A start syllable
  25.     0 or more middle syllable [the awk program uses 1 here I think]
  26.     An ending syllable
  27.  
  28. Here are some sample names made by the C program:
  29. Valayngar      Jestuny        Darorn         Klabere        Ostdy
  30. Ryleyn         Chiesartsene   Jastgethen     Valcheanastar  Caiam
  31. Tocydeas       Jararyr        Kolain         Geyne          Laracy
  32. Lararyr        Harar          Klabain        Moldyddney     Harlyarn
  33. Starluth       Elazer         Darzane        Drassa         Queranayn
  34. Cracy          Calorn         Perisant       Kaern          Tydor
  35.  
  36. Here are some names made by the awk program:
  37. [Plag-art-ar]     [Jar-carth-bin]   [Klab-art-a]      [Cal-len-ayne]
  38. [Kor-is-ydd]      [El-quent-arne]   [Jar-reth-yne]    [Ob-quent-el]
  39. [Kor-aver-sume]   [Cal-erry-an]     [Vart-lin-yne]    [Chies-arne-ane]
  40. [Win-ime-y]       [Odas-zane-un]    [Est-end-aryn]    [Nor-mel-art]
  41. [Shot-cath-art]   [Pas-aldy-azer]   [Ob-yd-tyne]      [Pan-yne-oller]
  42. [Wearn-arth-yn]   [In-asc-gayn]     [Zol-valer-varn]  [Bae-y-art]
  43.  
  44. Here are some names made by the C program using the "dragon-oe" list
  45. of syllables (see _Dragon_ No. 72, p.56):
  46. aldwini        healfberct     theodgeofu     hrethwealch    aldsige
  47. beomonfled     sexwuduwiv     quicwict       aelfweald      dryhtbrand
  48. erconwic       beohard        earcongisllid  earngyd        ceonhelm
  49. leofgyd        ceonflaed      hrothmon       tunward        ealdhathu
  50. cuthgifu       grimfrid       cenebrand      healffled      cwicraed
  51. maegengeld     selefridcyn    breguthryd     bregubeald     fordlindwiw
  52.  
  53. The C ones seem the best.  The awk ones retain the - so you can see how
  54. they're made --- this lets you work out meanings easily if each syllable
  55. is a real word root.  A fairly simple modification would be to have the
  56. "meaning" for each syllable in the file listing syllables.  Then you
  57. could generate (for example)
  58.     Cuth-brand    [Known, famous -- sword]
  59.     Aelf-wic    [Elf -- dwelling-place]
  60. but I'll leave this to enthusiasts.
  61.  
  62. The rolemaster "npc" program uses "names -i" to generate an "infinite"
  63. stream of names.
  64.  
  65. Have fun...
  66.  
  67. Lee
  68.  
  69.  
  70. : To unbundle, sh this file
  71. echo x - names.c 1>&2
  72. sed 's/^X//' >names.c <<'@@@End of names.c'
  73. X#include <stdio.h>
  74. X#define MAXSYLLNUM 1024
  75. X#define GETSYLL()    fscanf (dfile, "%s", linebuf);
  76. X#define USAGE "Usage: names [-f file] [-n number-of-names] [-i]\n"
  77. Xchar *progname;
  78. X
  79. X#ifndef NAMEFILE
  80. X# define NAMEFILE "/userpk/etc/req/lib/names/default"
  81. X                /* default file for names */
  82. X#endif
  83. X
  84. Xmain(argc, argv)
  85. Xint argc;
  86. Xchar **argv;
  87. X
  88. X{
  89. X    extern char *optarg;
  90. X    extern int optind, getopt();
  91. X
  92. X    int  how_many,    /* number of names to generate        */
  93. X         num_mids,    /*   "     " middle syllables (0-2)    */
  94. X     seed = getpid ();    /* for random number generator        */
  95. X    int  max_start = 0,    /* maximum numbers of start, middle and    */
  96. X         max_mid = 0,    /* end syllables read  (subject to    */
  97. X         max_end = 0;    /* ceiling of MAXSYLLNUM)          */
  98. X
  99. X    char *name_start[MAXSYLLNUM];
  100. X    char *name_middle[MAXSYLLNUM];
  101. X    char *name_end[MAXSYLLNUM];
  102. X    char linebuf[BUFSIZ];
  103. X
  104. X    char *name_file = NAMEFILE;
  105. X    FILE *dfile = NULL;    /* file pointer for data file */
  106. X    int infinity = 0;    /* give an infinite number of names if set */
  107. X    int option;
  108. X
  109. X    progname = argv[0];
  110. X
  111. X    /* parse args */
  112. X
  113. X    while ( (option = getopt(argc, argv, "f:in:") )  != EOF) {
  114. X    switch(option) {
  115. X        case '?' :    /* no-such-option, getopt has printed a message */
  116. X        fprintf(stderr, "%s", USAGE);
  117. X        exit(1);
  118. X        case 'f': {    /* -f file-of-syllables */
  119. X        name_file = optarg;
  120. X        break;
  121. X        }
  122. X        case 'n': {    /* how many names to do */
  123. X        if ( (how_many = atoi(optarg)) < 0 ) {
  124. X            err("number of names invalid (-n %d)\n", optarg);
  125. X            exit(2);
  126. X        }
  127. X        break;
  128. X        }
  129. X        case 'i': {    /* infinite number of names */
  130. X        infinity = 1;
  131. X        break;
  132. X        }
  133. X
  134. X        default: {
  135. X        fprintf(stderr, USAGE);
  136. X        exit(2);
  137. X        }
  138. X    }
  139. X    }
  140. X    if (optind != argc) {
  141. X    fprintf(stderr, USAGE);
  142. X    exit(2);
  143. X    }
  144. X    if ((dfile = fopen (name_file, "r")) == NULL) {
  145. X    err("cannot read database %s\n", name_file);
  146. X    exit (2);
  147. X    }
  148. X
  149. X    /* read the data file */
  150. X
  151. X    GETSYLL();
  152. X    while (strcmp(linebuf, "%") != NULL && *linebuf) {
  153. X    name_start[max_start] = (char *) malloc (strlen (linebuf) + 1);
  154. X    strcpy (name_start[max_start++], linebuf);
  155. X    if (max_start == MAXSYLLNUM) {
  156. X        err("too many initial syllables - but continuing\n");
  157. X        while (strcmp (linebuf, "%")) GETSYLL();
  158. X        break;
  159. X    } else GETSYLL();
  160. X    }
  161. X
  162. X    max_mid = 0;        /* initialise medial syllables */
  163. X    GETSYLL();
  164. X    while (strcmp (linebuf, "%") != NULL) {
  165. X    name_middle[max_mid] = (char *) malloc (strlen (linebuf) + 1);
  166. X    strcpy (name_middle[max_mid++], linebuf);
  167. X    if (max_mid == MAXSYLLNUM) {
  168. X        err("too many medial syllables - but continuing\n");
  169. X        while (strcmp (linebuf, "%"))
  170. X        GETSYLL();
  171. X        break;
  172. X    } else GETSYLL();
  173. X    }
  174. X
  175. X    max_end = 0;
  176. X    GETSYLL();
  177. X    while (strcmp (linebuf, "%") != NULL) {
  178. X    name_end[max_end] = (char *) malloc (strlen (linebuf) + 1);
  179. X    strcpy (name_end[max_end++], linebuf);
  180. X    if (max_end == MAXSYLLNUM) {
  181. X        err("too many final syllables - but continuing\n");
  182. X        while (strcmp (linebuf, "%"))
  183. X        GETSYLL();
  184. X        break;
  185. X    } else GETSYLL();
  186. X    }
  187. X
  188. X    /* now print the names out */
  189. X
  190. X    if (!(max_start && max_mid && max_end)) {
  191. X    err("zero-length section in datafile\n");
  192. X    exit (3);
  193. X    }
  194. X
  195. X    srand (seed);
  196. X
  197. X    while (infinity || how_many-- > 0) {
  198. X    printf ("%s", name_start[rand_int () % max_start]);
  199. X    for (num_mids = (rand_int () % 3) / 2; num_mids > 0; num_mids--)
  200. X        printf ("%s", name_middle[rand_int () % max_mid]);
  201. X    printf ("%s\n", name_end[rand_int () % max_end]);
  202. X    }
  203. X}
  204. X
  205. Xrand_int() {
  206. X    return ((int) (rand() / 37));
  207. X}
  208. X
  209. Xerr(s, a1, a2, a3)
  210. X    char *s;
  211. X{
  212. X    fputs(progname, stderr);
  213. X    fputs(": ", stderr);
  214. X    fprintf (stderr, s, a1, a2, a3);
  215. X}
  216. @@@End of names.c
  217. echo x - default "(put this in $HOME/lib/names, for example)" 1>&2
  218. sed 's/^X//' >default <<'@@@End of default'
  219. XRal
  220. XNa
  221. XArd
  222. XVald
  223. XCal
  224. XHy
  225. XPan
  226. XChies
  227. XPer
  228. XEr
  229. XHob
  230. XHarg
  231. XWin
  232. XMar
  233. XQuarne
  234. XBa
  235. XEr
  236. XOdas
  237. XKa
  238. XMold
  239. XSyn
  240. XRo
  241. XJast
  242. XYal
  243. XNap
  244. XVard
  245. XAs
  246. XBinthe
  247. XZald
  248. XDez
  249. XLas
  250. XUld
  251. XNev
  252. XHaur
  253. XBar
  254. XDas
  255. XTy
  256. XDar
  257. XOst
  258. XTral
  259. XGrave
  260. XEth
  261. XFlar
  262. XYal
  263. XKlab
  264. XHarab
  265. XJar
  266. XNor
  267. XDain
  268. XToc
  269. XBay
  270. XHaith
  271. XCal
  272. XLar
  273. XNaut
  274. XDruc
  275. XBar
  276. XArt
  277. XFor
  278. XMart
  279. XYar
  280. XHa
  281. XNy
  282. XYar
  283. XVerd
  284. XWy
  285. XPlag
  286. XTer
  287. XHaur
  288. XVar
  289. XAr
  290. XDar
  291. XVal
  292. XMar
  293. XCar
  294. XLoc
  295. XWearn
  296. XDras
  297. XBel
  298. XHar
  299. XJar
  300. XFor
  301. XKil
  302. XOc
  303. XAl
  304. XSkal
  305. XNun
  306. XAz
  307. XKop
  308. XHoul
  309. XLab
  310. XJar
  311. XVast
  312. XClaune
  313. XTes
  314. XOb
  315. XNist
  316. XEl
  317. XEst
  318. XZol
  319. XBrow
  320. XPulg
  321. XStar
  322. XKren
  323. XCrac
  324. XScaun
  325. XWal
  326. XQuer
  327. XRy
  328. XCyn
  329. XRusk
  330. XDel
  331. XLab
  332. XMel
  333. XSep
  334. XLor
  335. XRos
  336. XJar
  337. XDaf
  338. XHal
  339. XKol
  340. XIn
  341. XAel
  342. XSald
  343. XKuv
  344. XYm
  345. XCa
  346. XKeld
  347. XBar
  348. XTarl
  349. XShot
  350. XPes
  351. XQuer
  352. XLor
  353. XGeld
  354. XAr
  355. XHar
  356. XBae
  357. XVad
  358. XPas
  359. XUr
  360. XNor
  361. XKir
  362. XVar
  363. XMel
  364. XAr
  365. XShy
  366. XI
  367. XRald
  368. XCor
  369. XSar
  370. XKor
  371. XRol
  372. XHar
  373. XAsh
  374. XDir
  375. XLas
  376. XVab
  377. XAld
  378. XPar
  379. XOb
  380. XHor
  381. XChy
  382. XJar
  383. XRyle
  384. XChar
  385. XHab
  386. XSar
  387. XVart
  388. XNist
  389. XObr
  390. XJar
  391. XGe
  392. XYas
  393. XPav
  394. XJes
  395. XShot
  396. XMar
  397. XHor
  398. XEr
  399. XKi
  400. XHar
  401. XCal
  402. XAnd
  403. X%
  404. Xgur
  405. Xcarn
  406. Xaz
  407. Xacy
  408. Xayn
  409. Xasc
  410. Xgary
  411. Xhen
  412. Xtan
  413. Xarny
  414. Xalen
  415. Xcarth
  416. Xgant
  417. Xrath
  418. Xcam
  419. Xart
  420. Xron
  421. Xarth
  422. Xarth
  423. Xcarad
  424. Xere
  425. Xgeth
  426. Xaldy
  427. Xyn
  428. Xvaler
  429. Xarne
  430. Xaller
  431. Xvarn
  432. Xar
  433. Xan
  434. Xnal
  435. Xtyne
  436. Xar
  437. Xart
  438. Xont
  439. Xaur
  440. Xaver
  441. Xlyn
  442. Xas
  443. Xgar
  444. Xcuth
  445. Xarry
  446. Xor
  447. Xquine
  448. Xastar
  449. Xmel
  450. Xaryn
  451. Xart
  452. Xwar
  453. Xasty
  454. Xzane
  455. Xarik
  456. Xayne
  457. Xloc
  458. Xoller
  459. Xwarty
  460. Xaryne
  461. Xchean
  462. Xquin
  463. Xtar
  464. Xdar
  465. Xreth
  466. Xant
  467. Xan
  468. Xyne
  469. Xax
  470. Xtuny
  471. Xwat
  472. Xjuin
  473. Xa
  474. Xgayn
  475. Xon
  476. Xan
  477. Xcar
  478. Xgine
  479. Xcodd
  480. Xquent
  481. Xeas
  482. Xew
  483. Xazer
  484. Xam
  485. Xly
  486. Xstead
  487. Xorn
  488. Xar
  489. Xcath
  490. Xiera
  491. Xque
  492. Xair
  493. Xla
  494. Xart
  495. Xerry
  496. Xend
  497. Xom
  498. Xast
  499. Xet
  500. Xarty
  501. Xdoth
  502. Xcath
  503. Xert
  504. Xdy
  505. Xorn
  506. Xont
  507. Xtak
  508. Xar
  509. Xart
  510. Xwarne
  511. Xarn
  512. Xin
  513. Xian
  514. Xel
  515. Xak
  516. Xil
  517. Xydd
  518. Xime
  519. Xyn
  520. Xen
  521. Xin
  522. Xim
  523. Xel
  524. Xar
  525. Xro
  526. Xis
  527. Xis
  528. Xro
  529. Xera
  530. Xene
  531. Xin
  532. Xane
  533. Xiam
  534. Xain
  535. Xir
  536. Xun
  537. Xil
  538. Xbin
  539. Xlin
  540. Xis
  541. Xsene
  542. Xbin
  543. Xlir
  544. Xame
  545. Xa
  546. Xfyn
  547. Xy
  548. Xin
  549. Xyd
  550. Xien
  551. Xain
  552. Xyn
  553. Xar
  554. Xer
  555. Xin
  556. Xsume
  557. Xras
  558. Xid
  559. Xmel
  560. Xluth
  561. Xance
  562. Xer
  563. Xyn
  564. Xan
  565. Xar
  566. Xayne
  567. Xeth
  568. Xlen
  569. Xter
  570. Xrik
  571. Xer
  572. Xro
  573. Xtin
  574. Xmel
  575. Xyn
  576. Xris
  577. Xlene
  578. Xane
  579. Xas
  580. X%
  581. Xty
  582. Xcarn
  583. Xar
  584. Xacy
  585. Xer
  586. Xal
  587. Xgary
  588. Xy
  589. Xar
  590. Xarny
  591. Xalen
  592. Xcarth
  593. Xgant
  594. Xy
  595. Xber
  596. Xart
  597. Xdal
  598. Xarth
  599. Xarth
  600. Xan
  601. Xere
  602. Xgeth
  603. Xaldy
  604. Xyn
  605. Xvaler
  606. Xarne
  607. Xaller
  608. Xvarn
  609. Xayne
  610. Xan
  611. Xnal
  612. Xtyne
  613. Xayne
  614. Xart
  615. Xont
  616. Xney
  617. Xaver
  618. Xlyn
  619. Xiel
  620. Xgar
  621. Xy
  622. Xarry
  623. Xor
  624. Xquine
  625. Xastar
  626. Xer
  627. Xaryn
  628. Xart
  629. Xwar
  630. Xasty
  631. Xzane
  632. Xarik
  633. Xayne
  634. Xan
  635. Xoller
  636. Xwarty
  637. Xaryne
  638. Xchean
  639. Xta
  640. Xun
  641. Xtha
  642. Xreth
  643. Xant
  644. Xel
  645. Xyne
  646. Xel
  647. Xtuny
  648. Xwat
  649. Xjuin
  650. Xdor
  651. Xgayn
  652. Xtyn
  653. Xdar
  654. Xcar
  655. Xgine
  656. Xcodd
  657. Xquent
  658. Xeas
  659. Xew
  660. Xazer
  661. Xont
  662. Xly
  663. Xstead
  664. Xorn
  665. Xen
  666. Xcath
  667. Xiera
  668. Xque
  669. Xair
  670. Xla
  671. Xart
  672. Xerry
  673. Xsa
  674. Xar
  675. Xer
  676. Xern
  677. Xarty
  678. Xdoth
  679. Xy
  680. Xert
  681. Xdy
  682. Xorn
  683. Xont
  684. Xern
  685. Xayn
  686. Xart
  687. Xwarne
  688. Xarn
  689. Xin
  690. Xian
  691. Xel
  692. Xak
  693. Xil
  694. Xydd
  695. Xime
  696. Xyn
  697. Xen
  698. Xin
  699. Xim
  700. Xel
  701. Xar
  702. Xro
  703. Xis
  704. Xis
  705. Xro
  706. Xera
  707. Xene
  708. Xin
  709. Xane
  710. Xiam
  711. Xain
  712. Xir
  713. Xun
  714. Xil
  715. Xbin
  716. Xlin
  717. Xis
  718. Xsene
  719. Xbin
  720. Xlir
  721. Xame
  722. Xa
  723. Xfyn
  724. Xse
  725. Xin
  726. Xyd
  727. Xien
  728. Xain
  729. Xyn
  730. Xar
  731. Xer
  732. Xin
  733. Xsume
  734. Xras
  735. Xon
  736. Xmel
  737. Xluth
  738. Xance
  739. Xer
  740. Xyn
  741. Xan
  742. Xar
  743. Xayne
  744. Xeth
  745. Xnyd
  746. Xter
  747. Xrik
  748. Xnik
  749. Xro
  750. Xa
  751. Xmel
  752. Xyn
  753. Xris
  754. Xlene
  755. Xane
  756. Xyr
  757. X%
  758. @@@End of default
  759. echo x - newnames.awk 1>&2
  760. sed 's/^X//' >newnames.awk <<'@@@End of newnames.awk'
  761. X#! /usr/local/bin/nawk -f
  762. X
  763. XBEGIN {
  764. X    srand()
  765. X    Count[0] = 0
  766. X    Section = 0
  767. X}
  768. X
  769. X/^%[     ]*$/ {
  770. X    Section++;
  771. X    Count[Section] = 0
  772. X    next
  773. X}
  774. X
  775. X/^#.*$/ { next }  # ignore comments
  776. X
  777. X/^[     ]*$/ { next } # ignore blank lines
  778. X
  779. X{
  780. X    Syllables[Section, Count[Section] ] = $0
  781. X    Count[Section]++
  782. X}
  783. X
  784. XEND {
  785. X    for (;;) {
  786. X    # random from first section
  787. X    printf "[%s", Syllables[0, Rand(0, Count[0] - 1)]
  788. X
  789. X    for (i = 1; i <= Section && i in Count; i++) {
  790. X        if (Count[i]) {
  791. X        printf "-%s", Syllables[i, Rand(0, Count[i] - 1)]
  792. X        }
  793. X    }
  794. X
  795. X    printf "]\n"
  796. X    }
  797. X}
  798. X
  799. Xfunction Rand(min, max)
  800. X{
  801. X    return int((max + 1 - min) * rand()) + min
  802. X}
  803. @@@End of newnames.awk
  804. echo x - dragonOEnames 1>&2
  805. sed 's/^X//' >dragonOEnames <<'@@@End of dragonOEnames'
  806. Xaelf
  807. Xaelb
  808. Xaethel
  809. Xaedil
  810. Xbadu
  811. Xbeado
  812. Xbeo
  813. Xblith
  814. Xbregu
  815. Xceol
  816. Xceon
  817. Xcoin
  818. Xcene
  819. Xcuth
  820. Xcud
  821. Xcwic
  822. Xcuic
  823. Xquic
  824. Xdryct
  825. Xdryht
  826. Xead
  827. Xed
  828. Xaead
  829. Xeald
  830. Xald
  831. Xealh
  832. Xalh
  833. Xearcon
  834. Xercon
  835. Xearn
  836. Xecg
  837. Xec
  838. Xeofor
  839. Xeorcon
  840. Xeormen
  841. Xyrmen
  842. Xfolc
  843. Xford
  844. Xfri
  845. Xgold
  846. Xgrim
  847. Xhaem
  848. Xhaeth
  849. Xheah
  850. Xhealf
  851. Xhreth
  852. Xhroth
  853. Xhuaet
  854. Xhyg
  855. Xhugu
  856. Xiaru
  857. Xleof
  858. Xmaegen
  859. Xoidil
  860. Xongen
  861. Xos
  862. Xrath
  863. Xsaex
  864. Xsax
  865. Xsex
  866. Xsele
  867. Xtat
  868. Xtheod
  869. Xtil
  870. Xtorct
  871. Xtrum
  872. Xtun
  873. Xwaeg
  874. Xwig
  875. Xwil
  876. X%
  877. Xbald
  878. Xbeald
  879. Xbalt
  880. Xbalth
  881. Xbeorht
  882. Xberct
  883. Xberict
  884. Xbeorn
  885. Xbern
  886. Xbrand
  887. Xbroad
  888. Xburg
  889. Xburh
  890. Xcyni
  891. Xcyn
  892. Xdegn
  893. Xferth
  894. Xflaed
  895. Xfled
  896. Xfor
  897. Xfrith
  898. Xfrit
  899. Xfrid
  900. Xgar
  901. Xgeld
  902. Xgifu
  903. Xgeofu
  904. Xgisl
  905. Xgund
  906. Xgunn
  907. Xgyth
  908. Xgyd
  909. Xhaed
  910. Xhathu
  911. Xheard
  912. Xhard
  913. Xhere
  914. Xheri
  915. Xhelm
  916. Xhild
  917. Xhun
  918. Xlac
  919. Xlaf
  920. Xlid
  921. Xlind
  922. Xlinda
  923. Xmaer
  924. Xman
  925. Xmon
  926. Xmund
  927. Xnoth
  928. Xraed
  929. Xred
  930. Xrefu
  931. Xric
  932. Xsig
  933. Xsige
  934. Xstan
  935. Xswith
  936. Xswid
  937. Xtheof
  938. Xtheow
  939. Xthryth
  940. Xthryd
  941. Xwealch
  942. Xwalh
  943. Xweald
  944. Xwald
  945. Xweard
  946. Xward
  947. Xwic
  948. Xwict
  949. Xwiht
  950. Xwine
  951. Xwini
  952. Xwiw
  953. Xwiv
  954. Xwuda
  955. Xwida
  956. Xwudu
  957. Xwulf
  958. Xulf
  959. Xwyn
  960. Xwynn
  961. X%
  962. X%
  963. Xbald
  964. Xbeald
  965. Xbalt
  966. Xbalth
  967. Xbeorht
  968. Xberct
  969. Xberict
  970. Xbeorn
  971. Xbern
  972. Xbrand
  973. Xbroad
  974. Xburg
  975. Xburh
  976. Xcyni
  977. Xcyn
  978. Xdegn
  979. Xferth
  980. Xflaed
  981. Xfled
  982. Xfor
  983. Xfrith
  984. Xfrit
  985. Xfrid
  986. Xgar
  987. Xgeld
  988. Xgifu
  989. Xgeofu
  990. Xgisl
  991. Xgund
  992. Xgunn
  993. Xgyth
  994. Xgyd
  995. Xhaed
  996. Xhathu
  997. Xheard
  998. Xhard
  999. Xhere
  1000. Xheri
  1001. Xhelm
  1002. Xhild
  1003. Xhun
  1004. Xlac
  1005. Xlaf
  1006. Xlid
  1007. Xlind
  1008. Xlinda
  1009. Xmaer
  1010. Xman
  1011. Xmon
  1012. Xmund
  1013. Xnoth
  1014. Xraed
  1015. Xred
  1016. Xrefu
  1017. Xric
  1018. Xsig
  1019. Xsige
  1020. Xstan
  1021. Xswith
  1022. Xswid
  1023. Xtheof
  1024. Xtheow
  1025. Xthryth
  1026. Xthryd
  1027. Xwealch
  1028. Xwalh
  1029. Xweald
  1030. Xwald
  1031. Xweard
  1032. Xward
  1033. Xwic
  1034. Xwict
  1035. Xwiht
  1036. Xwine
  1037. Xwini
  1038. Xwiw
  1039. Xwiv
  1040. Xwuda
  1041. Xwida
  1042. Xwudu
  1043. Xwulf
  1044. Xulf
  1045. Xwyn
  1046. Xwynn
  1047. X%
  1048. @@@dragonOEnames
  1049. echo "Congratulations.  You've unpacked the entire archive." 1>&2
  1050. exit 0
  1051.  
  1052.  
  1053. -- 
  1054. Liam R. E. Quin,  lee@sq.com, SoftQuad Inc., Toronto, +1 (416) 963-8337
  1055.