At 10:47 PM 3/19/98 -0500, George Greer wrote:
>
>Nope, but I'm sure people using it are interested.
>
Well, here it is.
my color.c file.
This is for all people whose color is done by typing &##
where ## is a 2-digit number from 00 - 15 (and up).
now you can do up to &99 without having to add anything to an array.
btw, if anyone is using HEDIT and my help color addition,
they may need to have a strip_color_codes function for when they use HEDIT.
I have included the updated addition here.
----------------------------------------------------------------------------
strip_color_codes (prototype it in olc.h btw)
----------------------------------------------------------------------------
void strip_color_codes(char *string)
{
register char *ptr, *str;
ptr = string;
str = ptr;
while (*ptr == '&') {
if (*(ptr + 1) && isdigit(*(ptr + 1)) && *(ptr + 2) && isdigit(*(ptr +
2))) {
ptr += 3;
}
else if (*(ptr + 1) && *(ptr + 1) == '&')
{ *str = *ptr; str++; ptr++; break; }
else break;
}
while ((*str = *ptr)) {
str++;
ptr++;
while (*ptr == '&') {
if (*(ptr + 1) && isdigit(*(ptr + 1)) && *(ptr + 2) && isdigit(*(ptr +
2))) {
ptr += 3;
}
else if (*(ptr + 1) && *(ptr + 1) == '&')
{ *str = *ptr; str++; ptr++; break; }
else break;
}
}
}
===========================================================================
/* color.c */
#include "conf.h"
#include "sysdep.h"
#define MAX_COLORS 100
#define ABS(a) ((a < 0) ? (-a) : (a))
#define MAX(a, b) ((a > b) ? (a) : (b))
#define MIN(a, b) ((a < b) ? (a) : (b))
/* Underline, Flashing */
#define UNDER "\x1B[4m" /* %25 */
#define FLASH "\x1B[5m" /* %26 */
inline int isnum(char i)
{ return ((i >= '0') && (i <= '9')); }
void proc_color(char *inbuf, int color)
{
register int j = 0, p = 0;
int c;
char out_buf[32768];
if (inbuf[0] == '\0')
return;
while (inbuf[j]!='\0') {
if (inbuf[j] == '&' && isnum(inbuf[j+1]) && isnum(inbuf[j+2])) {
c = (inbuf[j+1]-'0')*10 + inbuf[j+2]-'0';
j += 3;
if (!color)
continue;
c = MAX(0, MIN(c, (MAX_COLORS-1)));
if ((c % 16) >= 8)
p += sprintf(out_buf + p, "\x1B[1;");
else if ((c % 16) < 8)
p += sprintf(out_buf + p, "\x1B[0;");
p += sprintf(out_buf + p, "3%d", c % 8);
if ((c / 16) != 0)
p += sprintf(out_buf + p, ";4%dm", (c / 16));
else p+= sprintf(out_buf + p, "m");
}
else if (inbuf[j] == '&' && inbuf[j+1] == '&')
{ out_buf[p] = inbuf[j]; j += 2; p++; } // so typing &&09 prints &09
(not color)
else { out_buf[p] = inbuf[j]; j++; p++; }
}
out_buf[p] = '\0';
strcpy(inbuf, out_buf);
}
Sample Colorlist Function
-----------------------------
ACMD(do_colorlist) {
int i = 0;
strcpy(buf, "Colors &&00 - &&99 : \r\n");
for (i = 0; i < 100; i++) {
sprintf(buf + strlen(buf), "&%.2d&&%.2d", (int)i, (int)i);
if (!((i+1) % 16))
strcat(buf, "&07\r\n");
}
send_to_char(buf, ch);
}
-----------------------------------------------------------------------
This should all add in easily enough,
although if you have made any changes to the color.c file,
try and find a way to add back in those changes.
anyway, good luck, and as always i'm not responsible for blah blah blah.
also, please give credit where credit is due.
especially since I saved you the trouble of having to memorize
ANSI codes :-)
Code On
Akuma the Raging Coder
+------------------------------------------------------------+
| "The poets talk about love, but what I talk about is DOOM, |
| because in the end, DOOM is all that counts." - |
| Alex Machine/George Stark/Stephen King, The Dark Half |
| "Nothing is IMPOSSIBLE, Just IMPROBABLE" |
| "Easier Said Than Done, But Better Done Than Said..." |
+------------------------------------------------------------+
+------------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
+------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST