/* Autoconf patching by David Hedbor, neotron@lysator.liu.se */
/*********************************************************************/
/* file: antisub.c - functions related to the substitute command */
/* TINTIN III */
/* (T)he K(I)cki(N) (T)ickin D(I)kumud Clie(N)t */
/* coded by peter unold 1992 */
/*********************************************************************/
#ifdef HAVE_STRING_H
#include <string.h>
#else
#ifdef HAVE_STRINGS_H
#include <strings.h>
#endif
#endif
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include "tintin.h"
char *get_arg_in_braces();
struct listnode *searchnode_list();
struct listnode *search_node_with_wild();
extern struct listnode *deletenode_list();
extern struct listnode *common_antisubs;
extern char vars[10][BUFFER_SIZE]; /* the %0, %1, %2,....%9 variables */
extern int antisubnum;
extern int mesvar[7];
/***************************/
/* the #substitute command */
/***************************/
void parse_antisub(arg, ses)
char *arg;
struct session *ses;
{
char left[BUFFER_SIZE], result[BUFFER_SIZE];
struct listnode *myantisubs, *ln;
myantisubs = (ses) ? ses->antisubs : common_antisubs;
arg = get_arg_in_braces(arg, left, 1);
if (!*left) {
tintin_puts("#THESE ANTISUBSTITUTES HAS BEEN DEFINED:", ses);
show_list(myantisubs);
prompt(ses);
}
else {
if ((ln = searchnode_list(myantisubs, left)) != NULL)
deletenode_list(myantisubs, ln);
insertnode_list(myantisubs, left, left, "0", ALPHA);
antisubnum++;
if (mesvar[3]) {
sprintf(result, "Ok. Any line with {%s} will not be subbed.", left);
tintin_puts2(result, ses);
}
}
}
void unantisubstitute_command(arg, ses)
char *arg;
struct session *ses;
{
char left[BUFFER_SIZE], result[BUFFER_SIZE];
struct listnode *myantisubs, *ln, *temp;
int flag;
flag = FALSE;
myantisubs = (ses) ? ses->antisubs : common_antisubs;
temp = myantisubs;
arg = get_arg_in_braces(arg, left, 1);
while ((ln = search_node_with_wild(temp, left)) != NULL) {
if (mesvar[3]) {
sprintf(result, "#Ok. Lines with {%s} will now be subbed.", ln->left);
tintin_puts2(result, ses);
}
/* @@@changed -- perry (ln is deleted and free'd by deletenode!!!)
deletenode_list(myantisubs, ln);
temp=ln;
*/
temp = deletenode_list(myantisubs, ln);
flag = TRUE;
}
if (!flag && mesvar[3])
tintin_puts2("#THAT ANTISUBSTITUTE IS NOT DEFINED.", ses);
}
int do_one_antisub(line, ses)
char *line;
struct session *ses;
{
struct listnode *ln;
ln = ses->antisubs;
while ((ln = ln->next)) {
if (check_one_action(line, ln->left, ses))
return TRUE;
}
return FALSE;
}