void goat_soup(const char *source,plansys * psy) { for(;;) { int c=(unsigned char)*(source++); if(c=='\0') break; if(c<0x80) printf("%c",c); else { if (c <=0xA4) { int rnd = gen_rnd_number(); goat_soup(desc_list[c-0x81].option[(rnd >= 0x33)+(rnd >= 0x66)+(rnd >= 0x99)+(rnd >= 0xCC)],psy); } else switch(c) { case 0xB0: /* planet name */ { int i=1; printf("%c",psy->name[0]); while(psy->name[i]!='\0') printf("%c",mytolower(psy->name[i++])); } break; case 0xB1: /* <planet name>ian */ { int i=1; printf("%c",psy->name[0]); while(psy->name[i]!='\0') { if((psy->name[i+1]!='\0') || ((psy->name[i]!='E') && (psy->name[i]!='I'))) printf("%c",mytolower(psy->name[i])); i++; } printf("ian"); } break; case 0xB2: /* random name */ { int i; int len = gen_rnd_number() & 3; for(i=0;i<=len;i++) { int x = gen_rnd_number() & 0x3e; /* fixed (R.C.): transform chars to lowercase unless first char of first pair, or second char of first pair when first char was not printed */ char p1 = pairs[x]; char p2 = pairs[x+1]; if(p1!='.') { if (i) p1 = mytolower(p1); printf("%c",p1); } if(p2!='.') { if (i || (p1!='.')) p2 = mytolower(p2); printf("%c",p2); } } } break; default: printf("<bad char in data [%X]>",c); return; } /* endswitch */ } /* endelse */ } /* endwhile */ } /* endfunc */
void goat_soup(const char *source,plansys * psy) { for(;;) { int c=*(source++); if(c=='\0') break; if(c<0x80) printf("%c",c); else { if (c <=0xA4) { int rnd = gen_rnd_number(); goat_soup(desc_list[c-0x81].option[(rnd >= 0x33)+(rnd >= 0x66)+(rnd >= 0x99)+(rnd >= 0xCC)],psy); } else switch(c) { case 0xB0: /* planet name */ { int i=1; printf("%c",psy->name[0]); while(psy->name[i]!='\0') printf("%c",tolower(psy->name[i++])); } break; case 0xB1: /* <planet name>ian */ { int i=1; printf("%c",psy->name[0]); while(psy->name[i]!='\0') { if((psy->name[i+1]!='\0') || ((psy->name[i]!='E') && (psy->name[i]!='I'))) printf("%c",tolower(psy->name[i])); i++; } printf("ian"); } break; case 0xB2: /* random name */ { int i; int len = gen_rnd_number() & 3; for(i=0;i<=len;i++) { int x = gen_rnd_number() & 0x3e; if(pairs0[x]!='.') printf("%c",pairs0[x]); if(i && (pairs0[x+1]!='.')) printf("%c",pairs0[x+1]); } } break; default: printf("<bad char in data [%X]>",c); return; } /* endswitch */ } /* endelse */ } /* endwhile */ } /* endfunc */
void expand_description (char *source) { char str[32]; char *ptr; int num; int rnd; int option; int i, len, x; while (*source != '\0') { if (*source == '<') { source++; ptr = str; while (*source != '>') *ptr++ = *source++; *ptr = '\0'; source++; num = atoi(str); if (hoopy_casinos) { option = gen_msx_rnd_number(); } else { rnd = gen_rnd_number(); option = 0; if (rnd >= 0x33) option++; if (rnd >= 0x66) option++; if (rnd >= 0x99) option++; if (rnd >= 0xCC) option++; } expand_description (desc_list[num][option]); continue; } if (*source == '%') { source++; switch (*source) { case 'H': name_planet (str, hyperspace_planet); capitalise_name (str); for (ptr = str; *ptr != '\0';) *desc_ptr++ = *ptr++; break; case 'I': name_planet (str, hyperspace_planet); capitalise_name (str); for (ptr = str; *ptr != '\0';) *desc_ptr++ = *ptr++; desc_ptr--; strcpy (desc_ptr, "ian"); desc_ptr += 3; break; case 'R': len = gen_rnd_number() & 3; for (i = 0; i <= len; i++) { x = gen_rnd_number() & 0x3e; if (i == 0) *desc_ptr++ = digrams[x]; else *desc_ptr++ = tolower(digrams[x]); *desc_ptr++ = tolower(digrams[x+1]); } } source++; continue; } *desc_ptr++ = *source++; } *desc_ptr = '\0'; }