Here's a little function to linewrap lines at 79. It's not perfect,
but it works fairly well. There's no question about the fact that
it's ugly.
char *linewrap(char *str) {
char xbuf2[MAX_STRING_LENGTH];
char xbuf[MAX_STRING_LENGTH];
bool cap=TRUE;
char *tmp;
int i;
xbuf[0]=xbuf2[0]='\0';
i = 0;
if (strlen(str) < 79)
return (str);
for (tmp = str; *tmp; tmp++) {
if (*tmp=='\r') {
if (xbuf[i-1] != ' ') {
xbuf[[i]=' ';
i++;
}
} else if (*tmp=='\n')
;
else if (*tmp == ' ') {
if (xbuf[i-1] != ' ') {
xbuf[i] = ' ';
i++;
}
} else {
xbuf[i] = *tmp;
xbuf[i+1] = ' ';
i += 2;
}
cap = TRUE;
} else {
xbuf[i]=*tmp;
if (cap) {
cap = FALSE;
xbuf[i] = UPPER(xbuf[i]);
}
i++;
}
}
xbuf[i]='\0';
strcpy(xbuf2, xbuf);
tmp=xbuf2;
xbuf[0]='\0';
for (;;) {
for (i=0; i<79; i++)
if (!*(tmp+i))
break;
if (i<79)
break;
// locate the last space
for (i=(xbuf[0]?78:75); i; i--)
if (*(tmp+i)==' ')
break;
if (i) {
*(tmp+i)='\0';
strcat(xbuf, tmp);
strcat(xbuf, "\r\n");
tmp += i+1;
while (*tmp == ' ')
tmp++;
} else {
*(tmp+77)='\0';
strcat(xbuf,tmp);
strcat(xbuf,"-\r\n");
tmp += 78;
}
}
while (*(tmp+i) && (*(tmp+i)==' ' || IS_NEWL(*(tmp+i))))
i--;
*(tmp+i+1)='\0';
strcat(xbuf,tmp);
if (xbuf[strlen(xbuf)-2] != '\r')
strcat(xbuf, "\r\n");
return (str_dup(xbuf)); }
Note that the above wasn't written for beauty or for speed, it's
a cheap and (very) dirty hack. Furthermore, note that I retyped
this from memory, so it may not even work. Oh, and here, too, is
a function to properly capitalize a string despite ansi codes:
char *ProperString(char *str) {
char xbuf[MAX_STRING_LENGTH];
int i = 0;
*xbuf = '\0';
strcpy(xbuf, str);
if (xbuf[i] == '\x1b') {
while ((xbuf[i] >= '0' && xbuf[i] <= 9) || xbuf[i] == ';')
i++;
i++;
}
xbuf[i] = UPPER(xbuf[i]);
return (str_dup(xbuf));
}
Neither are the most efficient things in the world, but they work (or
did before I retyped them :P).
--
Daniel Koepke
dkoepke@california.com
Forgive me father, for I am sin.
+-----------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://cspo.queensu.ca/~fletcher/Circle/list_faq.html |
| Or send 'info circle' to majordomo@cspo.queensu.ca |
+-----------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/18/00 PST