#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <sys/wait.h>
#include "toc.h"
void set_state(int i)
{
state = i;
}
int escape_text(char *msg)
{
char *c, *cpy;
int cnt=0;
if (strlen(msg) > BUF_LEN) {
fprintf(stderr, "Warning: truncating message to 2048 bytes\n");
msg[2047]='\0';
}
cpy = strdup(msg);
c = cpy;
while(*c) {
switch(*c) {
case '{':
case '}':
case '\\':
case '"':
msg[cnt++]='\\';
default:
msg[cnt++]=*c;
}
c++;
}
msg[cnt]='\0';
free(cpy);
return cnt;
}
int escape_message(char *msg)
{
char *c, *cpy;
int cnt=0;
if (strlen(msg) > BUF_LEN) {
toc_debug_printf("Warning: truncating message to 2048 bytes\n");
msg[2047]='\0';
}
cpy = strdup(msg);
c = cpy;
while(*c) {
switch(*c) {
case '$':
case '[':
case ']':
case '(':
case ')':
case '#':
msg[cnt++]='\\';
default:
msg[cnt++]=*c;
}
c++;
}
msg[cnt]='\0';
free(cpy);
return cnt;
}
char *normalize(char *s)
{
static char buf[BUF_LEN];
char *t, *u;
int x=0;
u = t = malloc(strlen(s) + 1);
strcpy(t, s);
strdown(t);
while(*t) {
if (*t != ' ') {
buf[x] = *t;
x++;
}
t++;
}
buf[x]='\0';
free(u);
return buf;
}
void strdown(char *s) {
while ( *s ) {
if ( *s >= 65 && *s <= 90)
*s += 32;
s++;
}
}
void toc_debug_printf(char *fmt, ...)
{
#ifdef DEBUG_LIB_TOC
FILE *fp;
char data[MAX_OUTPUT_MSG_LEN];
va_list ptr;
if ( ! (fp=fopen(TOC_DEBUG_LOG,"a")) ) {
perror("ERROR couldn't open debug log file!@$\n");
}
va_start(ptr, fmt);
vsnprintf(data, MAX_OUTPUT_MSG_LEN - 1 , fmt, ptr);
va_end(ptr);
fprintf(fp,"%s\n",data);
fflush(fp);
fclose(fp);
return;
#endif
}
void toc_msg_printf(int type, char *fmt, ...) {
char data[MAX_OUTPUT_MSG_LEN];
char *args[1];
va_list ptr;
va_start(ptr, fmt);
vsnprintf(data, MAX_OUTPUT_MSG_LEN - 1 , fmt, ptr);
va_end(ptr);
args[0] = data;
use_handler(TOC_HANDLE,type,args);
return;
}
char * strip_html(char * text)
{
int i, j;
int visible = 1;
char *text2 = malloc(strlen(text) + 1);
strcpy(text2, text);
for (i = 0, j = 0;text2[i]; i++)
{
if(text2[i]=='<')
{
visible = 0;
continue;
}
else if(text2[i]=='>')
{
visible = 1;
continue;
}
if(visible)
{
text2[j++] = text2[i];
}
}
text2[j] = '\0';
return text2;
}