Stellarcore.net

Stellarcore.net

Here is a C version of the script, this was written by Steve Frostrom [the Original author of the Bash version].

#include 
#include 

#define FMTH	"%5s %9s %11s %11s %9s %9s\n"
#define FMT		"%5s %9d %11d %11.1f %9s %9s\n"

char *say(char *str, int val) {
	char	ends;

	if (! val) return(strcpy(str, "--"));
	sprintf(str, "%d", val);
	switch (val) {
	case 11: case 12: case 13:
		return(strcat(str, "th"));
	default:
		ends = str[strlen(str) - 1];
		switch (ends) {
		case '0': case '4': case '5': case '6': case '7': case '8': case '9':
			return(strcat(str, "th"));
		case '1':
			return(strcat(str, "st"));
		case '2':
			return(strcat(str, "nd"));
		case '3':
			return(strcat(str, "rd"));
		}
	}
}

main(int argc, char *argv[]) {
	int			MAXLEVEL = (argc > 1) ? atoi(argv[1]) : 40;
	int			level, xp, maxranks, feats, stats, say_feats, say_stats;
	float		maxcc;
	static char	str_level[5], str_feats[5], str_stats[5];

	system("clear");
	printf(FMTH, "Char",   "",   "Class Skill", "CC Skill",  "",      "Stat");
	printf(FMTH, "Level",  "XP", "Max Ranks",   "Max Ranks", "Feats", "Inc's");
	for (level = 1, xp = 0, feats = 1, stats = 0 ; level <= MAXLEVEL; level++) {
		xp += (level - 1) * 1000;
		maxranks = level + 3;
		maxcc = maxranks / 2.0;
		say_feats = (level % 3) ? (level == 1 ? 1 : 0) : ++feats;
		say_stats = (level % 4) ? 0 : ++stats;
		printf(FMT, say(str_level, level), xp, maxranks, maxcc,
			say(str_feats, say_feats), say(str_stats, say_stats));
	}
}