#include <string.h> #include <stdlib.h> #include <sys/types.h> #include <stdio.h> #include <ctype.h> #include <unistd.h> #include "merc.h" #include "interp.h" #include "recycle.h" #include "tables.h" #include "names.h" #define END_MARKER "END" /* * find_a_name() * * Opens filename and reads until max is hit, and returns last word * read. */ char * find_a_name(const char *filename, int max) { FILE * fp; int i = number_range(1, max); int x = 1; char *first; fclose(fpReserve); if ( (fp = fopen(filename, "r") ) == NULL) { bug( "names.c: find_firstname(): fopen", 0 ); perror( "names.c" ); } for (;;) { first = fread_word(fp); if (x == i) return first; if (first[0] == '$') break; x++; } fclose(fp); return first; } /* * count_names() * * Counts the number of names in a file */ int count_names(const char *filename) { FILE * fp; int x = 1; char *word; if ( (fp = fopen(filename, "r") ) == NULL) { bug( "names.c: find_firstname(): fopen", 0 ); perror( "names.c" ); } word = fread_word(fp); for (;;) { word = fread_word(fp); if (word[0] == '~') { fclose( fp ); break; } x++; } return x; } void cmd_name1(CHAR_DATA * ch, char *argument) { char buf[MSL]; sprintf(buf, "Your name is: %s\n", name_finder(NAME_ORC_WARRIOR)); stc(buf, ch); /* int value = number_range(1,40); sprintf(buf, "Random name: %s", find_a_name("../data/names/orc_first.txt", value)); stc(buf, ch); value = number_range(1, 40); sprintf(buf, "%s\n", find_a_name("../data/names/orc_last.txt", value)); stc(buf, ch); sprintf(buf, "Lines in file %d\n", count_names("../data/names/orc_last.txt")); stc(buf, ch); */ return; } /* * name_finder() * * Takes argument for type of name, then generates the name. */ char * name_finder(int type) { static char name[MSL]; static char buf[MSL]; int number; static char name1[MSL]; static char name2[MSL]; static char name3[MSL]; switch(type) { default: sprintf(buf, "No Name. Invalid type"); break; case NAME_DROW_FEMALE: sprintf(buf, "../data/names/drow_female_first.txt"); number = count_names(buf); sprintf(name1, "%s", find_a_name(buf, number)); sprintf(buf, "../data/names/drow_female_last.txt"); number = count_names(buf); sprintf(name3, "%s", find_a_name(buf, number)); sprintf(name, "%s%s", name1, name3); break; case NAME_DROW_MALE: sprintf(buf, "../data/names/drow_male_first.txt"); number = count_names(buf); sprintf(name1, "%s", find_a_name(buf, number)); sprintf(buf, "../data/names/drow_male_last.txt"); number = count_names(buf); sprintf(name3, "%s", find_a_name(buf, number)); sprintf(name, "%s%s", name1, name3); break; case NAME_ORC_NORMAL: sprintf(buf, "../data/names/orc_normal_first.txt"); number = count_names(buf); sprintf(name1, "%s", find_a_name(buf, number)); sprintf(buf, "../data/names/orc_normal_middle.txt"); number = count_names(buf); sprintf(name2, "%s", find_a_name(buf, number)); sprintf(buf, "../data/names/orc_normal_last.txt"); number = count_names(buf); sprintf(name3, "%s", find_a_name(buf, number)); sprintf(name, "%s%s%s", name1, name2, name3); break; case NAME_ORC_WARRIOR: sprintf(buf, "../data/names/orc_warrior_first.txt"); number = count_names(buf); sprintf(name1, "%s", find_a_name(buf, number)); sprintf(buf, "../data/names/orc_warrior_last.txt"); number = count_names(buf); sprintf(name3, "%s", find_a_name(buf, number)); sprintf(name, "%s%s", name1, name3); break; case NAME_DWARF_CASTE: sprintf(buf, "../data/names/dwarf_caste_first.txt"); number = count_names(buf); sprintf(name1, "%s", find_a_name(buf, number)); sprintf(buf, "../data/names/dwarf_caste_last.txt"); number = count_names(buf); sprintf(name3, "%s", find_a_name(buf, number)); sprintf(name, "%s%s", name1, name3); break; case NAME_DWARF_NORMAL: sprintf(buf, "../data/names/dwarf_first.txt"); number = count_names(buf); sprintf(name1, "%s", find_a_name(buf, number)); sprintf(buf, "../data/names/dwarf_middle.txt"); number = count_names(buf); sprintf(name2, "%s", find_a_name(buf, number)); sprintf(buf, "../data/names/dwarf_last.txt"); number = count_names(buf); sprintf(name3, "%s", find_a_name(buf, number)); sprintf(name, "%s%s%s", name1, name2, name3); break; case NAME_HUMAN_MALE: sprintf(buf, "../data/names/human_male_first.txt"); number = count_names(buf); sprintf(name1, "%s", find_a_name(buf, number)); sprintf(buf, "../data/names/human_male_middle.txt"); number = count_names(buf); sprintf(name2, "%s", find_a_name(buf, number)); sprintf(buf, "../data/names/human_male_last.txt"); number = count_names(buf); sprintf(name3, "%s", find_a_name(buf, number)); sprintf(name, "%s%s%s", name1, name2, name3); break; case NAME_HUMAN_FEMALE: sprintf(buf, "../data/names/human_female_first.txt"); number = count_names(buf); sprintf(name1, "%s", find_a_name(buf, number)); sprintf(buf, "../data/names/human_female_middle.txt"); number = count_names(buf); sprintf(name2, "%s", find_a_name(buf, number)); sprintf(buf, "../data/names/human_female_last.txt"); number = count_names(buf); sprintf(name3, "%s", find_a_name(buf, number)); sprintf(name, "%s%s%s", name1, name2, name3); break; case NAME_GNOME: sprintf(buf, "../data/names/gnome_first.txt"); number = count_names(buf); sprintf(name1, "%s", find_a_name(buf, number)); sprintf(buf, "../data/names/gnome_middle.txt"); number = count_names(buf); sprintf(name2, "%s", find_a_name(buf, number)); sprintf(buf, "../data/names/gnome_last.txt"); number = count_names(buf); sprintf(name3, "%s", find_a_name(buf, number)); sprintf(name, "%s%s%s", name1, name2, name3); break; case NAME_GOBLIN: sprintf(buf, "../data/names/goblin_first.txt"); number = count_names(buf); sprintf(name1, "%s", find_a_name(buf, number)); sprintf(buf, "../data/names/goblin_last.txt"); number = count_names(buf); sprintf(name3, "%s", find_a_name(buf, number)); sprintf(name, "%s%s", name1, name3); break; case NAME_ELVEN_MALE: sprintf(buf, "../data/names/elf_male_first.txt"); number = count_names(buf); sprintf(name1, "%s", find_a_name(buf, number)); sprintf(buf, "../data/names/elf_male_middle.txt"); number = count_names(buf); sprintf(name2, "%s", find_a_name(buf, number)); sprintf(buf, "../data/names/elf_male_last.txt"); number = count_names(buf); sprintf(name3, "%s", find_a_name(buf, number)); sprintf(name, "%s%s%s", name1, name2, name3); break; } return name; }