/*********************************************************************/
/* file: substitute.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 */
/*********************************************************************/
#include <string.h>
#include "tintin.h"
extern char *get_arg_in_braces();
extern struct listnode *search_node_with_wild();
extern struct listnode *searchnode_list();
extern struct listnode *common_subs;
extern char vars[10][BUFFER_SIZE]; /* the %0, %1, %2,....%9 variables */
extern int subnum;
extern int mesvar[7];
/***************************/
/* the #substitute command */
/***************************/
void parse_sub(arg, ses)
char *arg;
struct session *ses;
{
char left[BUFFER_SIZE], right[BUFFER_SIZE], result[BUFFER_SIZE];
struct listnode *mysubs, *ln;
mysubs=(ses) ? ses->subs : common_subs;
arg=get_arg_in_braces(arg, left,0);
arg=get_arg_in_braces(arg, right,1);
if(!*left) {
tintin_puts2("#THESE SUBSTITUTES HAVE BEEN DEFINED:", ses);
show_list(mysubs);
prompt(ses);
}
else if(*left && !*right) {
if ((ln=search_node_with_wild(mysubs,left))!=NULL) {
while((mysubs=search_node_with_wild(mysubs, left))!=NULL) {
shownode_list(mysubs);
}
prompt(ses);
}
else
if (mesvar[2])
tintin_puts2("#THAT SUBSTITUTE IS NOT DEFINED.", ses);
}
else {
if((ln=searchnode_list(mysubs, left))!=NULL)
deletenode_list(mysubs, ln);
insertnode_list(mysubs, left, right, "0", ALPHA);
subnum++;
if (strcmp(right,".")!=0)
sprintf(result, "#Ok. {%s} now replaces {%s}.",right,left);
else
sprintf(result, "#Ok. {%s} is now gagged.", left);
if (mesvar[2])
tintin_puts2(result, ses);
}
}
/*****************************/
/* the #unsubstitute command */
/*****************************/
void unsubstitute_command(arg, ses)
char *arg;
struct session *ses;
{
char left[BUFFER_SIZE] ,result[BUFFER_SIZE];
struct listnode *mysubs, *ln, *temp;
int flag;
flag=FALSE;
mysubs=(ses) ? ses->subs : common_subs;
temp=mysubs;
arg=get_arg_in_braces(arg,left,1);
while ((ln=search_node_with_wild(temp, left))!=NULL) {
if (mesvar[2]) {
if (*(ln->right)=='.' && !*(ln->right+1))
sprintf(result, "#Ok. {%s} is no longer gagged.", ln->left);
else
sprintf(result, "#Ok. {%s} is no longer substituted.", ln->left);
tintin_puts2(result, ses);
}
deletenode_list(mysubs, ln);
flag=TRUE;
temp=ln;
}
if (!flag && mesvar[2])
tintin_puts2("#THAT SUBSTITUTE IS NOT DEFINED.", ses);
}
void do_one_sub(line, ses)
char *line;
struct session *ses;
{
struct listnode *ln;
ln=ses->subs;
while((ln=ln->next))
if(check_one_action(line,ln->left, ses))
prepare_actionalias(ln->right, line, ses);
}