On Thu, 25 Jul 2002, Mike Stilson wrote: > (It's amazing the number of li'l routines you add to your libraries over > some years then forget about) Why not just: char *bar(char *buf, int M, int per) { const char barChar = '*'; int len = MIN(M - 1, per / 10); memset(buf, barChar, len); *(buf + len) = '\0'; return buf; } #define PERC(p,w) ((w) > 0 ? ((p) * 100) / (w) : 0) where buf is a local buffer to write to, M is the maximum length of the bar plus terminating '\0', and per is a percentage. A scaling of 1:10 is automatically applied. Example: int hp = PERC(GET_HIT(ch), GET_MAX_HIT(ch)); char hbar[11]; send_to_char(ch, "H: %s\r\n", bar(hbar, 11, hp)); Simple, flexible, and doesn't require you to fiddle with memory allocation. A convenience macro like #define SBAR(b,v,m) bar((b), sizeof(b), PERC((v), (m))) can make it even simpler to use for the common case of a percentage bar: char hbar[11]; send_to_char(ch, "H: %s\r\n", SBAR(hbar, GET_HIT(ch), GET_MAX_HIT(ch)); -dak -- +---------------------------------------------------------------+ | FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html | | Archives: http://post.queensu.ca/listserv/wwwarch/circle.html | | Newbie List: http://groups.yahoo.com/group/circle-newbies/ | +---------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 06/25/03 PDT