31     grfid(t->townnamegrfid), 
 
   34   if (t->townnamegrfid != 0 && GetGRFTownName(t->townnamegrfid) == NULL) {
 
   37     this->
type = SPECSTR_TOWNNAME_ENGLISH;
 
   53   if (par->
grfid == 0) {
 
   54     int64 args_array[1] = { townnameparts };
 
   59   return GRFTownNameGenerate(buff, par->
grfid, par->
type, townnameparts, last);
 
   73   return GetTownName(buff, &par, t->townnameparts, last);
 
   95   if (town_names != NULL) {
 
   96     if (town_names->find(buf1) != town_names->end()) 
return false;
 
   97     town_names->insert(buf1);
 
  103       const char *buf = t->
name;
 
  108       if (strcmp(buf1, buf) == 0) 
return false;
 
  135   for (
int i = 1000; i != 0; i--) {
 
  157   return (
GB(seed, shift_by, 16) * max) >> 16;
 
  179   return (seed >> shift_by) % 
max;
 
  193   return SeedChance(shift_by, max + bias, seed) - bias;
 
  205   assert(strlen(org) == 4 && strlen(rep) == 4 && strlen(buf) >= 4);
 
  206   if (strncmp(buf, org, 4) == 0) memcpy(buf, rep, 4); 
 
  241   if (i >= 0) buf = 
strecpy(buf, _name_original_english_1[i], last);
 
  251   if (i >= 0) buf = 
strecpy(buf, _name_original_english_6[i], last);
 
  254   if (orig[0] == 
'C' && (orig[1] == 
'e' || orig[1] == 
'i')) {
 
  258   assert(buf - orig >= 4);
 
  277   if (i >= 0) buf = 
strecpy(buf, _name_additional_english_prefix[i], last);
 
  295   if (i >= 0) buf = 
strecpy(buf, _name_additional_english_3[i], last);
 
  297   assert(buf - orig >= 4);
 
  314   if (i >= 0) buf = 
strecpy(buf, _name_austrian_a1[i], last);
 
  338   } 
else if (i >= 2 - j) {
 
  356   uint seed_derivative = 
SeedChance(7, 28, seed);
 
  359   if (seed_derivative == 12 || seed_derivative == 19) {
 
  361     buf = 
strecpy(buf, _name_german_pre[i], last);
 
  366   if (i < 
lengthof(_name_german_real)) {
 
  367     buf = 
strecpy(buf, _name_german_real[i], last);
 
  369     buf = 
strecpy(buf, _name_german_1[i - 
lengthof(_name_german_real)], last);
 
  372     buf = 
strecpy(buf, _name_german_2[i], last);
 
  376   if (seed_derivative == 24) {
 
  378     if (i < 
lengthof(_name_german_4_an_der)) {
 
  379       buf = 
strecpy(buf, _name_german_3_an_der[0], last);
 
  380       buf = 
strecpy(buf, _name_german_4_an_der[i], last);
 
  382       buf = 
strecpy(buf, _name_german_3_am[0], last);
 
  383       buf = 
strecpy(buf, _name_german_4_am[i - 
lengthof(_name_german_4_an_der)], last);
 
  440   if (i >= 0) buf = 
strecpy(buf, _name_swedish_1[i], last);
 
  467   if (i >= 0) buf = 
strecpy(buf, _name_dutch_1[i], last);
 
  503     buf = 
strecpy(buf, _name_finnish_1[sel], last);
 
  506     if (*end == 
'i') *end = 
'e';
 
  507     if (strstr(orig, 
"a") != NULL || strstr(orig, 
"o") != NULL || strstr(orig, 
"u") != NULL ||
 
  508         strstr(orig, 
"A") != NULL || strstr(orig, 
"O") != NULL || strstr(orig, 
"U")  != NULL) {
 
  509       buf = 
strecpy(buf, 
"la", last);
 
  511       buf = 
strecpy(buf, 
"l\xC3\xA4", last);
 
  519   if (sel >= 
lengthof(_name_finnish_1)) {
 
  520     buf = 
strecpy(buf, _name_finnish_2[sel - 
lengthof(_name_finnish_1)], last);
 
  522     buf = 
strecpy(buf, _name_finnish_1[sel], last);
 
  547   if (i < 
lengthof(_name_polish_2_o)) {
 
  558     if (j >= 4 && j < 16) {
 
  572     if (j >= 4 && j < 16) {
 
  585   if (j >= 4 && j < 16) {
 
  606   const char *orig = buf;
 
  611   bool do_prefix = prob_tails < 12;
 
  612   bool do_suffix = prob_tails > 11 && prob_tails < 17;
 
  616   int prefix = 0, ending = 0, suffix = 0;
 
  631   if (stem < 
lengthof(_name_czech_subst_full)) {
 
  633     dynamic_subst = 
false;
 
  634     gender = _name_czech_subst_full[stem].gender;
 
  635     choose = _name_czech_subst_full[stem].choose;
 
  636     allow = _name_czech_subst_full[stem].allow;
 
  638     uint map[
lengthof(_name_czech_subst_ending)];
 
  639     int ending_start = -1, ending_stop = -1;
 
  642     dynamic_subst = 
true;
 
  643     stem -= 
lengthof(_name_czech_subst_full);
 
  644     stem %= 
lengthof(_name_czech_subst_stem);
 
  645     gender = _name_czech_subst_stem[stem].gender;
 
  646     choose = _name_czech_subst_stem[stem].choose;
 
  647     allow = _name_czech_subst_stem[stem].allow;
 
  652     if (choose & CZC_POSTFIX) {
 
  654       postfix %= 
lengthof(_name_czech_subst_postfix);
 
  656     if (choose & CZC_NOPOSTFIX) {
 
  658       postfix += 
lengthof(_name_czech_subst_postfix);
 
  660     if (postfix < 
lengthof(_name_czech_subst_postfix)) {
 
  661       choose |= CZC_POSTFIX;
 
  663       choose |= CZC_NOPOSTFIX;
 
  667     for (ending = 0; ending < (int)
lengthof(_name_czech_subst_ending); ending++) {
 
  670       if (gender == CZG_FREE ||
 
  671           (gender == CZG_NFREE && e->gender != CZG_SNEUT && e->gender != CZG_PNEUT) ||
 
  672            gender == e->gender) {
 
  673         if (ending_start < 0) {
 
  674           ending_start = ending;
 
  676       } 
else if (ending_start >= 0) {
 
  677         ending_stop = ending - 1;
 
  681     if (ending_stop < 0) {
 
  683       ending_stop = ending - 1;
 
  688     for (ending = ending_start; ending <= ending_stop; ending++) {
 
  691       if ((e->choose & choose) == choose && (e->allow & allow) != 0) {
 
  701     gender = _name_czech_subst_ending[ending].gender;
 
  702     assert(gender != CZG_FREE && gender != CZG_NFREE);
 
  705   if (do_prefix && (_name_czech_adj[prefix].choose & choose) != choose) {
 
  712     CzechPattern pattern = _name_czech_adj[prefix].pattern;
 
  714     buf = 
strecpy(buf, _name_czech_adj[prefix].name, last);
 
  716     char *endpos = buf - 1;
 
  718     while (
GB(*endpos, 6, 2) == 2) endpos--;
 
  720     if (gender == CZG_SMASC && pattern == CZP_PRIVL) {
 
  721       assert(endpos >= orig + 2);
 
  724       assert(*(endpos - 1) == 
'v');
 
  727       assert(endpos >= orig);
 
  728       endpos = 
strecpy(endpos, _name_czech_patmod[gender][pattern], last);
 
  731     buf = 
strecpy(endpos, 
" ", last);
 
  735     buf = 
strecpy(buf, _name_czech_subst_stem[stem].name, last);
 
  736     if (postfix < 
lengthof(_name_czech_subst_postfix)) {
 
  737       const char *poststr = _name_czech_subst_postfix[postfix];
 
  738       const char *endstr = _name_czech_subst_ending[ending].name;
 
  740       size_t postlen = strlen(poststr);
 
  741       size_t endlen = strlen(endstr);
 
  742       assert(postlen > 0 && endlen > 0);
 
  745       if (postlen < 2 || postlen > endlen ||
 
  746           ((poststr[1] != 
'v' || poststr[1] != endstr[1]) &&
 
  747           poststr[2] != endstr[1])) {
 
  748         buf = 
strecpy(buf, poststr, last);
 
  751         if (endstr[0] == 
'i') {
 
  752           switch (*(buf - 1)) {
 
  753             case 'k': *(buf - 1) = 
'c'; 
break;
 
  754             case 'h': *(buf - 1) = 
'z'; 
break;
 
  760     buf = 
strecpy(buf, _name_czech_subst_ending[ending].name, last);
 
  762     buf = 
strecpy(buf, _name_czech_subst_full[stem].name, last);
 
  767     buf = 
strecpy(buf, _name_czech_suffix[suffix], last);
 
  836   if (i < 
lengthof(_name_hungarian_1)) buf = 
strecpy(buf, _name_hungarian_1[i], last);
 
  844   if (i < 
lengthof(_name_hungarian_4)) {
 
  845     buf = 
strecpy(buf, _name_hungarian_4[i], last);
 
  874   if (i >= 0) buf = 
strecpy(buf, _name_danish_1[i], last);
 
  933   static const char * 
const mascul_femin_italian[] = {
 
  951     buf = 
strecpy(buf, mascul_femin_italian[i], last);
 
 1057   assert(lang < 
lengthof(_town_name_generators));
 
 1066   if (last >= buf + par->
min) 
return par->
proc(buf, last, seed);
 
 1069   par->
proc(buffer, buffer + par->
min, seed);
 
 1071   return strecpy(buf, buffer, last);