User:Rhebus/Gem table generator


 * 1) include
 * 2) include
 * 3) include
 * 4) include

using std::string;

using std::cout; using std::endl;

using std::atoi;

using std::stringstream;

printrow(name,desc,prob,wt,gval,nutr,mohs,glass,color)
 * 1) define GEM(name,desc,prob,wt,gval,nutr,mohs,glass,color) \

printrow(name,desc,prob,wt,gval,nutr,mohs,glass,color)
 * 1) define ROCK(name,desc,kn,prob,wt,gval,sdam,ldam,mgc,nutr,mohs,glass,color) \

const char *GEMSTONE = "gemstone"; const char *GLASS   = "glass"; const char *MINERAL = "mineral";

const char *CLR_WHITE  = "white"; const char *CLR_RED    = "red"; const char *CLR_ORANGE = "orange"; const char *CLR_BLUE   = "blue"; const char *CLR_BLACK  = "black"; const char *CLR_GREEN  = "green"; const char *CLR_YELLOW = "yellow"; const char *CLR_MAGENTA = "magenta"; const char *CLR_BROWN  = "brown"; const char *CLR_GRAY   = "gray";

/* Need forward declaration. */ string mkdesc(const char *name, const char *desc, const char *material);

string mksymbol(const char *name,				const char *desc,				const char *material,				const char *color) { string ascii = string(""); string tile = "";

return ascii + " " + tile; }

/* Don't display "stone" after the name. */ const string NO_STONE[] = { "dilithium crystal", "ruby", "diamond", "sapphire", "black opal", "emerald", "opal", "" };

string stone(const char *name, const char *material) { if (name == "flint") { return " stone"; } else if (material == "glass"		|| material == "mineral") { return ""; } else { for (const string *sp = NO_STONE; *sp != ""; ++sp) { if (*sp == name) { return ""; } }

return " stone"; } }

/* Name should be a wikilink. */ const string LINK_NAME[] = { "dilithium crystal", "luckstone", "loadstone", "touchstone", "flint", "rock", "" };

bool link(const char *name) { for (const string *sp = LINK_NAME; *sp != ""; ++sp) { if (*sp == name) { return true; }	}	return false; }

string mkname(const char *name, const char *material) { bool dolink = link(name);

return string("'''") + (dolink ? "" : "")		+ name		+ stone(name, material)		+ (dolink ? "" : "") + string("'''"); }

string mkdesc(const char *name, const char *desc, const char *material) { if (!desc) { return string(name); } else { string gem = (material == string("mineral")) ? "stone" : "gem"; return string(desc) + " " + gem; } }

string mkcost(int gval) { stringstream ss; string sgval; ss << gval; ss >> sgval;

return sgval + " zm"; }

string mkweight(int wt) { stringstream ss; string swt; ss << wt; ss >> swt;

return string("") + swt + string(""); }

string mkhard(int mohs) { return (mohs >= 8) ? string("HARD") : string("soft"); }

string mkmaterial(const char *material) { return string("") + material + string(""); }

typedef const char *S; typedef int I;

void pre(void) { cout << "\r\n"; cout << "{| class=\"prettytable sortable\"\r\n"; cout << "! class="unsortable" | * !! Name !! Description !! Cost !! Weight !! Hardness !! class="unsortable" | Material\r\n"; }

void printrow(S name, S desc, I prob, I wt, I gval, I nutr, I mohs, S glass, S color) { cout << "|-" << "\r\n"; cout << "| " << mksymbol(name, desc, glass, color); //printf("|| %s ", mkname(name, glass)); cout << "|| " << mkname(name, glass); //printf("|| %s ", mkdesc(name, desc, glass)); cout << "|| " << mkdesc(name, desc, glass); //printf("|| %s ", mkcost(gval)); cout << "|| " << mkcost(gval); //printf("|| %s ", mkweight(wt)); cout << "|| " << mkweight(wt); //printf("|| %s ", mkhard(mohs)); cout << "|| " << mkhard(mohs); //printf("|| %s ", mkmaterial(glass)); cout << "|| " << mkmaterial(glass);

printf("\r\n"); }

void mid(void) { cout << "|-\r\n"; cout << "| colspan=7 |\r\n"; }

void post(void) { cout << "|}\r\n"; cout << "\r\n"; }

int main {

pre;

GEM("dilithium crystal", "white",     2,  1, 4500, 15,  5, GEMSTONE, CLR_WHITE), GEM("diamond", "white",               3,  1, 4000, 15, 10, GEMSTONE, CLR_WHITE), GEM("ruby", "red",                    4,  1, 3500, 15,  9, GEMSTONE, CLR_RED), GEM("jacinth", "orange",              3,  1, 3250, 15,  9, GEMSTONE, CLR_ORANGE), GEM("sapphire", "blue",               4,  1, 3000, 15,  9, GEMSTONE, CLR_BLUE), GEM("black opal", "black",            3,  1, 2500, 15,  8, GEMSTONE, CLR_BLACK), GEM("emerald", "green",               5,  1, 2500, 15,  8, GEMSTONE, CLR_GREEN), GEM("turquoise", "green",             6,  1, 2000, 15,  6, GEMSTONE, CLR_GREEN), GEM("citrine", "yellow",              4,  1, 1500, 15,  6, GEMSTONE, CLR_YELLOW), GEM("aquamarine", "green",            6,  1, 1500, 15,  8, GEMSTONE, CLR_GREEN), GEM("amber", "yellowish brown",       8,  1, 1000, 15,  2, GEMSTONE, CLR_BROWN), GEM("topaz", "yellowish brown",      10,  1,  900, 15,  8, GEMSTONE, CLR_BROWN), GEM("jet", "black",                   6,  1,  850, 15,  7, GEMSTONE, CLR_BLACK), GEM("opal", "white",                 12,  1,  800, 15,  6, GEMSTONE, CLR_WHITE), GEM("chrysoberyl", "yellow",          8,  1,  700, 15,  5, GEMSTONE, CLR_YELLOW), GEM("garnet", "red",                 12,  1,  700, 15,  7, GEMSTONE, CLR_RED), GEM("amethyst", "violet",            14,  1,  600, 15,  7, GEMSTONE, CLR_MAGENTA), GEM("jasper", "red",                 15,  1,  500, 15,  7, GEMSTONE, CLR_RED), GEM("fluorite", "violet",            15,  1,  400, 15,  4, GEMSTONE, CLR_MAGENTA), GEM("obsidian", "black",              9,  1,  200, 15,  6, GEMSTONE, CLR_BLACK), GEM("agate", "orange",               12,  1,  200, 15,  6, GEMSTONE, CLR_ORANGE), GEM("jade", "green",                 10,  1,  300, 15,  6, GEMSTONE, CLR_GREEN),

mid;

GEM("worthless piece of white glass", "white",  77, 1, 0, 6, 5, GLASS, CLR_WHITE), GEM("worthless piece of blue glass", "blue",    77, 1, 0, 6, 5, GLASS, CLR_BLUE), GEM("worthless piece of red glass", "red",      77, 1, 0, 6, 5, GLASS, CLR_RED), GEM("worthless piece of yellowish brown glass", "yellowish brown", 77, 1, 0, 6, 5, GLASS, CLR_BROWN), GEM("worthless piece of orange glass", "orange", 76, 1, 0, 6, 5, GLASS, CLR_ORANGE), GEM("worthless piece of yellow glass", "yellow", 77, 1, 0, 6, 5, GLASS, CLR_YELLOW), GEM("worthless piece of black glass", "black",  76, 1, 0, 6, 5, GLASS, CLR_BLACK), GEM("worthless piece of green glass", "green",  77, 1, 0, 6, 5, GLASS, CLR_GREEN), GEM("worthless piece of violet glass", "violet", 77, 1, 0, 6, 5, GLASS, CLR_MAGENTA),

mid;

ROCK("luckstone", "gray",	0, 10, 10, 60, 3, 3, 1, 10, 7, MINERAL, CLR_GRAY), ROCK("loadstone", "gray",	0, 10, 500, 1, 3, 3, 1, 10, 6, MINERAL, CLR_GRAY), ROCK("touchstone", "gray",	0, 8,  10, 45, 3, 3, 1, 10, 6, MINERAL, CLR_GRAY), ROCK("flint", "gray",		0, 10, 10,  1, 6, 6, 0, 10, 7, MINERAL, CLR_GRAY), ROCK("rock", (char *)0,		1,100, 10,  0, 3, 3, 0, 10, 7, MINERAL, CLR_GRAY),

post; }