Difference between revisions of "Talk:Gem"
Jump to navigation
Jump to search
(table-generating program) |
m (updated program) |
||
Line 2: | Line 2: | ||
<pre><nowiki> | <pre><nowiki> | ||
+ | |||
#include <stdio.h> | #include <stdio.h> | ||
#include <string.h> | #include <string.h> | ||
Line 7: | Line 8: | ||
#define GEM(name,desc,prob,wt,gval,nutr,mohs,glass,color) \ | #define GEM(name,desc,prob,wt,gval,nutr,mohs,glass,color) \ | ||
− | + | printrow(name,desc,prob,wt,gval,nutr,mohs,glass,color) | |
+ | |||
+ | #define ROCK(name,desc,kn,prob,wt,gval,sdam,ldam,mgc,nutr,mohs,glass,color) \ | ||
+ | printrow(name,desc,prob,wt,gval,nutr,mohs,glass,color) | ||
#define GEMSTONE "gemstone" | #define GEMSTONE "gemstone" | ||
#define GLASS "glass" | #define GLASS "glass" | ||
+ | #define MINERAL "mineral" | ||
#define CLR_WHITE "white" | #define CLR_WHITE "white" | ||
Line 21: | Line 26: | ||
#define CLR_MAGENTA "magenta" | #define CLR_MAGENTA "magenta" | ||
#define CLR_BROWN "brown" | #define CLR_BROWN "brown" | ||
+ | #define CLR_GRAY "gray" | ||
/* Don't display "stone" after the name. */ | /* Don't display "stone" after the name. */ | ||
Line 38: | Line 44: | ||
char **i; | char **i; | ||
− | if (!strcmp(material, "glass")) { | + | if (!strcmp(name, "flint")) { return " stone"; } |
− | + | ||
− | } | + | if (!strcmp(material, "glass")) { return ""; } |
+ | if (!strcmp(material, "mineral")) { return ""; } | ||
for (i = NO_STONE; *i != NULL; i++) { | for (i = NO_STONE; *i != NULL; i++) { | ||
Line 53: | Line 60: | ||
char *LINK_NAME[] = { | char *LINK_NAME[] = { | ||
"dilithium crystal", | "dilithium crystal", | ||
+ | "luckstone", | ||
+ | "loadstone", | ||
+ | "touchstone", | ||
+ | "flint", | ||
+ | "rock", | ||
NULL | NULL | ||
}; | }; | ||
Line 71: | Line 83: | ||
char *closelink(char *name) { | char *closelink(char *name) { | ||
return link(name) ? "]]" : ""; | return link(name) ? "]]" : ""; | ||
+ | } | ||
+ | |||
+ | char *gem(char *name, char *material) { | ||
+ | if (!strcmp(name, "rock")) { return ""; } | ||
+ | if (!strcmp(material, "mineral")) { return " stone"; } | ||
+ | return " gem"; | ||
} | } | ||
Line 86: | Line 104: | ||
} | } | ||
− | void | + | void printrow(S name, S desc, I prob, I wt, I gval, I nutr, I mohs, S glass, S color) { |
printf("|-\r\n"); | printf("|-\r\n"); | ||
printf("| {{%s|*}} ", color); | printf("| {{%s|*}} ", color); | ||
printf("|| '''%s%s%s%s''' ", openlink(name), name, stone(name, glass), closelink(name)); | printf("|| '''%s%s%s%s''' ", openlink(name), name, stone(name, glass), closelink(name)); | ||
− | printf("|| %s | + | printf("|| %s %s ", (desc ? desc : name), gem(name, glass)); |
printf("|| %i [[zm]] ", gval); | printf("|| %i [[zm]] ", gval); | ||
printf("|| [[weight|%i]] ", wt); | printf("|| [[weight|%i]] ", wt); | ||
Line 146: | Line 164: | ||
GEM("worthless piece of green glass", "green", 77, 1, 0, 6, 5, GLASS, CLR_GREEN), | 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), | 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(); | post(); | ||
} | } | ||
</nowiki></pre> | </nowiki></pre> |
Revision as of 09:17, 19 October 2006
This is the program I wrote to generate the table of gems. -- Killian 08:52, 19 October 2006 (UTC)
#include <stdio.h> #include <string.h> #include <stdlib.h> #define GEM(name,desc,prob,wt,gval,nutr,mohs,glass,color) \ printrow(name,desc,prob,wt,gval,nutr,mohs,glass,color) #define ROCK(name,desc,kn,prob,wt,gval,sdam,ldam,mgc,nutr,mohs,glass,color) \ printrow(name,desc,prob,wt,gval,nutr,mohs,glass,color) #define GEMSTONE "gemstone" #define GLASS "glass" #define MINERAL "mineral" #define CLR_WHITE "white" #define CLR_RED "red" #define CLR_ORANGE "orange" #define CLR_BLUE "blue" #define CLR_BLACK "black" #define CLR_GREEN "green" #define CLR_YELLOW "yellow" #define CLR_MAGENTA "magenta" #define CLR_BROWN "brown" #define CLR_GRAY "gray" /* Don't display "stone" after the name. */ char *NO_STONE[] = { "dilithium crystal", "ruby", "diamond", "sapphire", "black opal", "emerald", "opal", NULL }; /* Returns " stone" if it should be appended, or else "". */ char *stone(char *name, char *material) { char **i; if (!strcmp(name, "flint")) { return " stone"; } if (!strcmp(material, "glass")) { return ""; } if (!strcmp(material, "mineral")) { return ""; } for (i = NO_STONE; *i != NULL; i++) { if (!strcmp(name, *i)) { return ""; } } return " stone"; } /* Name should be a wikilink. */ char *LINK_NAME[] = { "dilithium crystal", "luckstone", "loadstone", "touchstone", "flint", "rock", NULL }; int link(char *name) { char **i; for (i = LINK_NAME; *i != NULL; i++) { if (!strcmp(name, *i)) { return 1; } } return 0; } char *openlink(char *name) { return link(name) ? "[[" : ""; } char *closelink(char *name) { return link(name) ? "]]" : ""; } char *gem(char *name, char *material) { if (!strcmp(name, "rock")) { return ""; } if (!strcmp(material, "mineral")) { return " stone"; } return " gem"; } char *hard(int mohs) { return (mohs >= 8) ? "HARD" : "soft"; } typedef char *S; typedef int I; void pre(void) { printf("<!-- This table was generated by a program; see the talk page. -->\r\n"); printf("{| class=\"prettytable\"\r\n"); printf("! * !! Name !! Description !! Cost !! Weight !! Hardness !! Material\r\n"); } void printrow(S name, S desc, I prob, I wt, I gval, I nutr, I mohs, S glass, S color) { printf("|-\r\n"); printf("| {{%s|*}} ", color); printf("|| '''%s%s%s%s''' ", openlink(name), name, stone(name, glass), closelink(name)); printf("|| %s %s ", (desc ? desc : name), gem(name, glass)); printf("|| %i [[zm]] ", gval); printf("|| [[weight|%i]] ", wt); printf("|| %s ", hard(mohs)); printf("|| [[%s]] ", glass); printf("\r\n"); } void mid(void) { printf("|-\r\n"); printf("| colspan=7 |\r\n"); } void post(void) { printf("|}\r\n"); printf("<!-- End generated table. -->\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(); }