ncohafmuta-1.4.2/bot/
ncohafmuta-1.4.2/helpfiles/
ncohafmuta-1.4.2/lib/emailver/
ncohafmuta-1.4.2/tzinfo/Atlantic/
ncohafmuta-1.4.2/tzinfo/Brazil/
ncohafmuta-1.4.2/tzinfo/Chile/
ncohafmuta-1.4.2/tzinfo/Indian/
ncohafmuta-1.4.2/tzinfo/Mexico/
ncohafmuta-1.4.2/tzinfo/Mideast/
ncohafmuta-1.4.2/tzinfo/SystemV/
ncohafmuta-1.4.2/utils/
ncohafmuta-1.4.2/utils/code_fragments/new_config/
#if defined(HAVE_CONFIG_H)
#include "../hdrfiles/config.h"
#endif

#include "../hdrfiles/includes.h"

/*--------------------------------------------------------*/
/* Talker-related include files                           */ 
/*--------------------------------------------------------*/
#include "../hdrfiles/osdefs.h"
/*
#include "../hdrfiles/authuser.h"
#include "../hdrfiles/text.h"
*/
#include "../hdrfiles/constants.h"
#include "../hdrfiles/protos.h"

extern char *our_delimiters;
extern char mess[ARR_SIZE+25];	/* functions use mess to send output	  */
extern int noprompt;		/* talker waiting for user input?	  */
extern int NUM_AREAS;		/* number of areas defined in config file */
extern int autopromote;		/* allowing users to promote themselves?  */
extern int new_room;		/* room new users log into		  */


/*------------------------------------------------*/
/* set user stuff                                 */
/*------------------------------------------------*/
void set(int user, char *inpstr)
{
  char onoff[3][4];
  char yesno[2][4];
  char whotype[4][7];
  char helptype[4][7];
  char command[ARR_SIZE];

command[0]=0;
  sscanf(inpstr,"%s ",command);
  remove_first(inpstr);  /* get rid of commmand word */
  strtolower(command);

  if (!strcmp("email",command))
    { set_email(user, inpstr); }
  else if (!strcmp("gender",command))
    { set_sex(user, inpstr); }
  else if (!strcmp("homepage",command))
    { set_homepage(user, inpstr); }
  else if (!strcmp("picurl",command))
    { set_webpic(user, inpstr); }
  else if (!strcmp("rows",command) || !strcmp("lines",command))
    { set_rows(user, inpstr); }
  else if (!strcmp("cols",command) || !strcmp("width",command))
    { set_cols(user, inpstr); }
  else if (!strcmp("car",command) || !strcmp("carriage",command) )
    { set_car_ret(user, inpstr); }
  else if (!strcmp("abbrs",command))
    { set_abbrs(user, inpstr); }
  else if (!strcmp("space",command))
    { set_white_space(user, inpstr); }
  else if (!strcmp("hi",command))
    { set_hilite(user, inpstr); }
  else if (!strcmp("hidden",command))
    { set_hidden(user, inpstr); }
  else if (!strcmp("pbreak",command))
    { set_pbreak(user, inpstr); }
  else if (!strcmp("recap",command))
    { set_recap(user, inpstr); }
  else if (!strcmp("home",command))
    { set_home(user, inpstr); }
  else if (!strcmp("atmos",command))
    { set_atmos(user, inpstr); }
  else if (!strcmp("beeps",command))
    { set_beep(user, inpstr); }
  else if (!strcmp("help",command))
    { set_help(user); }
  else if (!strcmp("who",command))
    { set_who(user); }
  else if (!strcmp("color",command))
    { set_color(user, inpstr); }
  else if (!strcmp("visemail",command))
    { set_visemail(user); }
  else if (!strcmp("icq",command))
    { set_icq(user, inpstr); }
  else if (!strcmp("pause",command))
    { set_pause(user); }
  else if (!strcmp("autoread",command))
    { set_autoread(user); }
  else if (!strcmp("autofwd",command))
    { set_autofwd(user); }
  else if (!strcmp("desc",command))
    { set_desc(user, inpstr); }
  else if (!strcmp("fail",command))
    { set_fail(user, inpstr); }
  else if (!strcmp("succ",command))
    { set_succ(user, inpstr); }
  else if (!strcmp("profile",command))
    { set_profile(user, inpstr); }
  else if (!strcmp("entermsg",command))
    { set_entermsg(user, inpstr); }
  else if (!strcmp("exitmsg",command))
    { set_exitmsg(user, inpstr); }
  else if (!strcmp("show",command)) {
   strcpy(onoff[0],"OFF");
   strcpy(onoff[1],"ON ");
   strcpy(onoff[2],"ON ");
   strcpy(yesno[0],"NO ");
   strcpy(yesno[1],"YES");
   strcpy(whotype[0],"OURS  ");
   strcpy(whotype[1],"NUTS  ");
   strcpy(whotype[2],"IFORMS");
   strcpy(whotype[3],"NEW   ");
   strcpy(helptype[0],"OURS  ");
   strcpy(helptype[1],"IFORMS");
   strcpy(helptype[2],"NUTS3 ");
   strcpy(helptype[3],"NUTS2 ");
   write_str(user,"----------------------------------------------------");
   write_str(user," Your .set settings:");
   write_str(user,"");
   sprintf(mess,"Name    : %s",ustr[user].say_name);
   write_str(user,mess);
   sprintf(mess,"Desc    : %s",ustr[user].desc);
   write_str(user,mess);
   sprintf(mess,"Email   : %s",ustr[user].email_addr);
   write_str(user,mess);
   sprintf(mess,"Homepage: %s",ustr[user].homepage);
   write_str(user,mess);
   sprintf(mess,"Pic URL : %s",ustr[user].webpic);
   write_str(user,mess);
   sprintf(mess,"Gender  : %s",ustr[user].sex);
   write_str(user,mess);
   sprintf(mess,"Home    : %s",ustr[user].home_room);
   write_str(user,mess);
   sprintf(mess,"ICQ #   : %s",ustr[user].icq);
   write_str(user,mess);
   sprintf(mess,"Terminal: %s (%d)",terms[ustr[user].term_type].name,ustr[user].term_type);
   write_str(user,mess);
   write_str(user,"");
   sprintf(mess,"Rows    : %-3d   Columns : %-3d   Who_Style   : %s",
    ustr[user].rows,ustr[user].cols,whotype[ustr[user].who]);
   write_str(user,mess);
   sprintf(mess,"Abbrs   : %s   Whtspace: %s   Help_Style  : %s",
    onoff[ustr[user].abbrs],onoff[ustr[user].white_space],helptype[ustr[user].help]);
   write_str(user,mess);
   sprintf(mess,"Cariages: %s   Hilites : %s   Email_Hidden: %s",
    onoff[ustr[user].car_return],onoff[ustr[user].hilite],yesno[ustr[user].semail]);
   write_str(user,mess);
   sprintf(mess,"Passhid : %s   Pbreak  : %s   Pause_Login : %s",onoff[ustr[user].passhid],onoff[ustr[user].pbreak],onoff[ustr[user].pause_login]);
   write_str(user,mess);
   sprintf(mess,"PrivBeep: %s   Color   : %s",
    onoff[ustr[user].beeps],onoff[ustr[user].color]);
   write_str(user,mess);
   write_str(user,"");
   sprintf(mess,"Enter msg: %s",ustr[user].entermsg);
   write_str(user,mess);
   sprintf(mess,"Exit msg : %s",ustr[user].exitmsg);
   write_str(user,mess);
   sprintf(mess,"Succ     : %s",ustr[user].succ);
   write_str(user,mess);
   sprintf(mess,"Fail     : %s",ustr[user].fail);
   write_str(user,mess);
   write_str(user,"----------------------------------------------------");
   return;
  }
 else {
 write_str(user,"Valid options are: (help on these under ^.h set^)");
 write_str(user,"  cols               abbrs    (toggle)");
 write_str(user,"  desc               autofwd  (toggle)");
 write_str(user,"  email              autoread (toggle)");
 write_str(user,"  entermsg           beeps    (toggle)");
 write_str(user,"  exitmsg            car      (toggle)");
 write_str(user,"  fail               color    (toggle)");
 write_str(user,"  gender             help     (toggle)");
 write_str(user,"  home               hi       (toggle)");
 write_str(user,"  homepage           hidden   (toggle)");
 write_str(user,"  icq                pause    (toggle)");
 write_str(user,"  picurl             pbreak   (toggle)");
 write_str(user,"  profile            space    (toggle)");
 write_str(user,"  recap              visemail (toggle)");
 write_str(user,"  rows               who      (toggle)");
 write_str(user,"  show");
 write_str(user,"  succ");
 }
}


/*** set user description ***/
void set_desc(int user, char *inpstr)
{
int i=0,number_of_carets=0;

if (!strlen(inpstr)) 
  {
   sprintf(mess,"Your description is : %s",ustr[user].desc);
   write_str(user,mess);  
   return;
  }

if (!strcmp(inpstr,DEF_DESC) && !strcmp(ustr[user].desc,DEF_DESC)) {
   write_str(user,"No, you need to set a different one.");
   return;
   }

/* count the carets */
for(i=0;i<strlen(inpstr);i++)
{
  if (inpstr[i]=='^') number_of_carets++;
}

if (number_of_carets%2)
	strcat(inpstr,"^");
  
if (strlen(inpstr) > DESC_LEN-1) 
  {
    write_str(user,"Description too long");  
    return;
  }

strcpy(ustr[user].desc,inpstr);

if (autopromote == 1)
 check_promote(user,6);

if ((ustr[user].tempsuper==0) && (ustr[user].area==new_room))
 strcpy(ustr[user].home_room,astr[INIT_ROOM].name);

copy_from_user(user);
write_user(ustr[user].name);
sprintf(mess,"New desc: %s",ustr[user].desc);
write_str(user,mess);

}


/** set your fail message for when you are not online **/
void set_fail(int user, char *inpstr)
{

if (!strlen(inpstr)) { 
   sprintf(mess,"^HYYour fail is:^ %s",ustr[user].fail);
   write_str(user,mess);
   return; 
   }
if (!strcmp(inpstr,"clear") || !strcmp(inpstr,"none") || 
    !strcmp(inpstr,"-c")) {
    ustr[user].fail[0]=0;
    copy_from_user(user);
    write_user(ustr[user].name);
    write_str(user,"Fail message cleared.");
    return; 
    } 

if (strlen(inpstr) > MAX_ENTERM) {
   write_str(user,"Message too long.");
   return;
   }

if (ustr[user].frog) strcpy(inpstr,FROG_TALK);

strcpy(ustr[user].fail,inpstr);
copy_from_user(user);
write_user(ustr[user].name);
sprintf(mess,"^HYNew fail:^ %s",ustr[user].fail);
write_str(user,mess);

}

/** set succ message for tells, remotes, beeps **/
void set_succ(int user, char *inpstr)
{

if (!strlen(inpstr)) { 
   sprintf(mess,"^HYYour success is:^ %s",ustr[user].succ);
   write_str(user,mess);
   return; 
   }
if (!strcmp(inpstr,"clear") || !strcmp(inpstr,"none") || 
    !strcmp(inpstr,"-c")) {
    ustr[user].succ[0]=0;
    copy_from_user(user);
    write_user(ustr[user].name);
    write_str(user,"Success message cleared.");
    return; 
    } 
if (strlen(inpstr) > MAX_ENTERM) {
   write_str(user,"Message too long.");
   return;
   }

if (ustr[user].frog) strcpy(inpstr,FROG_TALK);

strcpy(ustr[user].succ,inpstr);
copy_from_user(user);
write_user(ustr[user].name);
sprintf(mess,"^HYNew success:^ %s",ustr[user].succ);
write_str(user,mess);

}


/*------------------------------------------------*/
/* set autoread                                   */
/*------------------------------------------------*/
void set_autoread(int user)
{

  if (ustr[user].autor==3)
    {
      write_str(user, "Autoread now ^HYoff^.");
      ustr[user].autor = 0;
    }
   else if (ustr[user].autor==2)
    {
      write_str(user, "Autoread now on ^HYfor logins and online^.");
      ustr[user].autor = 3;
    }
   else if (ustr[user].autor==1)
    {
      write_str(user, "Autoread now on ^HYfor online only^.");
      ustr[user].autor = 2;
    }
   else if (ustr[user].autor==0)
    {
      write_str(user, "Autoread now on ^HYfor logins only^.");
      ustr[user].autor = 1;
    }
  write_str(user,"* .set autoread again for more options *");  

  copy_from_user(user);
  write_user(ustr[user].name);
}

/** auto forward mail to email_addr **/
void set_autofwd(int user)
{

  if (ustr[user].autof==2)
    {
      write_str(user, "Autofwd now ^HYoff^.");
      ustr[user].autof = 0;
    }
   else if (ustr[user].autof==0)
    {
      write_str(user, "Autofwd now on ^HYall the time^.");
      ustr[user].autof = 1;
    }
   else if (ustr[user].autof==1)
    {
      write_str(user, "Autofwd now on ^HYonly when you're not online^.");
      ustr[user].autof = 2;
    }
  write_str(user,"* .set autofwd again for more options *");  

  copy_from_user(user);
  write_user(ustr[user].name);
}

/*------------------------------------------------*/
/* set email address                              */
/*------------------------------------------------*/
void set_email(int user, char *inpstr)
{
char temp[EMAIL_LENGTH+1];

  if (!strlen(inpstr)) {
	sprintf(mess,"Your email is: %s",ustr[user].email_addr);
	write_str(user, mess);
	return;
	}

  /* Check for illegal characters in email addy */
  if (strpbrk(inpstr,";/[]\\") ) {
     write_str(user,"Illegal email address");
     return;
     }

  if (strstr(inpstr,"^")) {
     write_str(user,"Email cannot have color or hilite codes in it.");
     return;
     }

  if (strlen(inpstr)>EMAIL_LENGTH)
    {
      write_str(user,"Email address truncated");
      inpstr[EMAIL_LENGTH-1]=0;
    }

 strcpy(temp,inpstr);
 strtolower(temp);

 if ((!strcmp(inpstr,"-c")) || (!strcmp(inpstr,"clear"))) {
     strcpy(inpstr,DEF_EMAIL);
     write_str(user,"Email address cleared and reset.");
     goto SKIP;
     }
 else if (strstr(temp,"whitehouse.gov"))
      {
       write_str(user,"Email address not valid.");
       return;
      }
  else if (!strstr(inpstr,".") || !strstr(inpstr,"@")) {
       write_str(user,"Email address not valid.");
       return;
      }

  sprintf(mess,"Set user email address to: %s",inpstr);
  write_str(user,mess);

SKIP:
  strcpy(ustr[user].email_addr,inpstr);

  copy_from_user(user);
  write_user(ustr[user].login_name);
}

/*------------------------------------------------*/
/* set homepage                                   */
/*------------------------------------------------*/
void set_homepage(int user, char *inpstr)
{

  if (!strlen(inpstr)) {
	sprintf(mess,"Your homepage is: %s",ustr[user].homepage);
	write_str(user, mess);
	return;
	}

  if (strstr(inpstr,"^")) {
     write_str(user,"Homepage cannot have color or hilite codes in it.");
     return;
     }

  if (strlen(inpstr) > HOME_LEN) 
     {
      write_str(user,"Home page address truncated");
      inpstr[HOME_LEN-1]=0;
     }

  strcpy(ustr[user].homepage,inpstr);

  copy_from_user(user);
  write_user(ustr[user].login_name);
  sprintf(mess,"Set page to: %s",inpstr);
  write_str(user,mess);

}

/*------------------------------------------------*/
/* set URL where users picture can be found       */
/*------------------------------------------------*/
void set_webpic(int user, char *inpstr)
{

  if (!strlen(inpstr)) {
	sprintf(mess,"Your picture URL is: %s",ustr[user].webpic);
	write_str(user, mess);
	return;
	}

  if (strstr(inpstr,"^")) {
     write_str(user,"Picture URL address cannot have color or hilite codes in it.");
     return;
     }

  if (strlen(inpstr) > HOME_LEN) 
     {
      write_str(user,"Picture URL address truncated");
      inpstr[HOME_LEN-1]=0;
     }

  strcpy(ustr[user].webpic,inpstr);

  copy_from_user(user);
  write_user(ustr[user].login_name);
  sprintf(mess,"Set picture URL to: %s",inpstr);
  write_str(user,mess);

}

/*------------------------------------------------*/
/* set gender                                     */
/*------------------------------------------------*/
void set_sex(int user, char *inpstr)
{

if (!strlen(inpstr))
  {
   sprintf(mess,"Your gender is : %s",ustr[user].sex);
   write_str(user,mess);
   return;
  }

  if (strlen(inpstr)>29)
    {
      write_str(user,"Gender truncated");
      inpstr[29]=0;
    }

  strcpy(ustr[user].sex,inpstr);

  if (autopromote == 1)
   check_promote(user,7);

  copy_from_user(user);
  write_user(ustr[user].name);
  sprintf(mess,"Set user gender to: %s",inpstr);
  write_str(user,mess);
}

/*------------------------------------------------*/
/* set rows                                       */
/*------------------------------------------------*/
void set_rows(int user, char *inpstr)
{

  int value=5;
  
  sscanf(inpstr,"%d", &value);
  
  if (value < 5 || value > 256)
    {
      write_str(user,"Rows set to 25 (valid range is 5 to 256)");
      value = 25;
    }
    
  ustr[user].rows = value;

  copy_from_user(user);
  write_user(ustr[user].login_name);
  sprintf(mess,"Set terminal rows to: %d",value);
  write_str(user,mess);
}

/*------------------------------------------------*/
/* set cols                                       */
/*------------------------------------------------*/
void set_cols(int user, char *inpstr)
{

  int value=5;
  
  sscanf(inpstr,"%d", &value);
  
  if (value < 16 || value > 256)
    {
      write_str(user,"Columns set to 256 (valid range is 16 to 256)");
      value = 256;
    }
    
  ustr[user].cols = value;

  copy_from_user(user);
  write_user(ustr[user].login_name);
  sprintf(mess,"Set terminal cols to: %d",value);
  write_str(user,mess);
}

/*------------------------------------------------*/
/* set car_return                                 */
/*------------------------------------------------*/
void set_car_ret(int user, char *inpstr)
{

if (!strlen(inpstr)) {
  if (!ustr[user].car_return) {
   write_str(user,"Set carriage returns ON");
   ustr[user].car_return = 1;
   }
   else {
   write_str(user,"Set carriage returns OFF");
   ustr[user].car_return = 0;
   }
 }
else {
 if (!strcmp(inpstr,"1")) {
   write_str(user,"Set carriage returns ON");
   ustr[user].car_return = 1;
   }
 else if (!strcmp(inpstr,"0")) {
   write_str(user,"Set carriage returns OFF");
   ustr[user].car_return = 0;
  }
 else {
   write_str(user,"Set carriage returns ON");
   ustr[user].car_return = 1;
  }   
 } /* end of else */

  copy_from_user(user);
  write_user(ustr[user].login_name);
}

/*------------------------------------------------*/
/* set atmos                                      */
/*------------------------------------------------*/
void set_atmos(int user, char *inpstr)
{

  int    value  = -1;
  int    factor = -1;


if (ustr[user].tempsuper < WIZ_LEVEL) {
 write_str(user,NOT_WORTHY);
 return;
}  

  sscanf(inpstr,"%d %d", &value, &factor);
  
  if (value < 0 || value > 1000)
    {
      value = 50;
    }
    
 if (factor < 0 || factor >1000)
    {
      factor = 5;
    }

  sprintf(mess,"Atmos frequency chance set to: %d %d",value, factor);
  write_str(user,mess);

  ATMOS_RESET     = value;
  ATMOS_FACTOR    = factor;
  ATMOS_COUNTDOWN = value;
}

/*------------------------------------------------*/
/* set abbrs                                      */
/*------------------------------------------------*/
void set_abbrs(int user, char *inpstr)
{


  if (ustr[user].abbrs)
    {
      write_str(user, "Abbreviations are now off for you.");
      ustr[user].abbrs = 0;
    }
   else
    {
      write_str(user, "You can now use abbreviations");
      ustr[user].abbrs = 1;
    }
    
  copy_from_user(user);
  write_user(ustr[user].login_name);
}

/*------------------------------------------------*/
/* set white space                                */
/*------------------------------------------------*/
void set_white_space(int user, char *inpstr)
{


  if (ustr[user].white_space)
    {
      write_str(user, "White space removal is now off.");
      ustr[user].white_space = 0;
    }
   else
    {
      write_str(user, "White space removal is now on.");
      ustr[user].white_space = 1;
    }
    
  copy_from_user(user);
  write_user(ustr[user].login_name);
}

/*------------------------------------------------*/
/* set hilights                                   */
/*------------------------------------------------*/
void set_hilite(int user, char *inpstr)
{

  if (ustr[user].hilite==2)
    {
      write_str(user, "High_lighting now off.");
      ustr[user].hilite = 0;
    }
  else if (ustr[user].hilite==1)
    {
      write_str(user, "High_lighting now on for everything except private communication which will be normal with color.");
      ustr[user].hilite = 2;
    }
  else
    {
      write_str(user, "High_lighting now on for everything.");
      ustr[user].hilite = 1;
    }
    
  copy_from_user(user);
  write_user(ustr[user].login_name);
}

/*------------------------------------------------*/
/* set password echo                              */
/*------------------------------------------------*/
void set_hidden(int user, char *inpstr)
{


  if (ustr[user].passhid)
    {
      write_str(user, "Password WILL be echoed during logins");
      ustr[user].passhid = 0;
    }
   else
    {
      write_str(user, "Password will NOT be echoed during logins.");
      ustr[user].passhid = 1;
    }
    
  copy_from_user(user);
  write_user(ustr[user].login_name);
}

/*------------------------------------------------*/
/* set login pause                                */
/*------------------------------------------------*/
void set_pause(int user)
{

  if (ustr[user].pause_login)
    {
      write_str(user, "You will NOT get a pause when your login");
      ustr[user].pause_login = 0;
    }
   else
    {
      write_str(user, "You WILL get a pause when your login");
      ustr[user].pause_login = 1;
    }
    
  copy_from_user(user);
  write_user(ustr[user].login_name);
}

/*------------------------------------------------*/
/* set break in who or not                        */
/*------------------------------------------------*/
void set_pbreak(int user, char *inpstr)
{


  if (ustr[user].pbreak)
    {
      write_str(user, "Who listing will be continuous.");
      ustr[user].pbreak = 0;
    }
   else
    {
      write_str(user, "Who listing will be paged.");
      ustr[user].pbreak = 1;
    }
    
  copy_from_user(user);
  write_user(ustr[user].login_name);
}


/*------------------------------------------------*/
/* set beeps on private communication             */
/*------------------------------------------------*/
void set_beep(int user, char *inpstr)
{

  if (ustr[user].beeps)
    {
      write_str(user, "You now will ^NOT^ get beeps on private communications");
      ustr[user].beeps = 0;
    }
   else
    {
      write_str(user, "You now ^WILL^ get beeps on private communications");
      ustr[user].beeps = 1;
    }
    
  copy_from_user(user);
  write_user(ustr[user].login_name);
}


/*------------------------------------------------*/
/* set your name capitalization                   */
/*------------------------------------------------*/
void set_recap(int user, char *inpstr)
{
int i=0,len=0,number_of_carets=0;
char sayname[SAYNAME_LEN+1];
char lowername[SAYNAME_LEN+1];
char colorname[SAYNAME_LEN+3];

strncpy(colorname,inpstr,SAYNAME_LEN-4);
strcpy(sayname,strip_color(colorname));
len = strlen(sayname);

if (!len) {
  write_str(user,GIVE_CAPNAME);
  return;
 }

if (len > NAME_LEN) {
  write_str(user,SYS_NAME_LONG);
  return;
 }

strcpy(lowername,sayname);
strtolower(lowername);

/* name = sayname */
/* tempname = lowername */

/* if the name itself does not match the original, reject */
if (strcmp(lowername, ustr[user].login_name)) {
  sprintf(mess,"New name (%s) is not the same as original name (%s)",
          sayname, ustr[user].login_name);
  write_str(user,mess);
  return;
  }

/* count the carets */
for(i=0;i<strlen(colorname);i++)
{
  if (colorname[i]=='^') number_of_carets++;
}

/* do not allow 3 successive carets */
for(i=0;i<strlen(colorname);i++)
{
  if ((colorname[i]=='^') && (colorname[i+1]=='^') && (colorname[i+2]=='^'))
  {
    write_str(user,"You have too many carets together.  Please redo");
    return;
  }
}

/* do not allow 1st and 2nd chars OR 2nd and 3rd chars to both be carets */
if ((colorname[0]=='^' && colorname[1]=='^') || (colorname[1]=='^' && colorname[2]=='^'))
{
  write_str(user,"Incorrect format. Please try again.");
  return;
}

/* if odd number of carets, cat on an ending caret */
if (number_of_carets%2)
	strcat(colorname,"^");

if (strstr(colorname,"^")) {
	strcat(colorname,our_delimiters);
	strcpy(ustr[user].say_name, our_delimiters);
	strcat(ustr[user].say_name, colorname);
}
else strcpy(ustr[user].say_name, colorname);
sprintf(mess, "Your name is recapped to: %s", ustr[user].say_name);
write_str(user,mess);

/* change exempt file */
/* first arguement is to check against names in file for user */
/* second is the new name we're changing to */
change_exem_data(ustr[user].name,strip_color(ustr[user].say_name));

copy_from_user(user);
write_user(ustr[user].login_name);
}

/*------------------------------------------------*/
/* set your home room                             */
/*------------------------------------------------*/
void set_home(int user, char *inpstr)
{
int found = 0;
int new_area;

  if (!strlen(inpstr)) {
     sprintf(mess,"Your home room is the: %s",ustr[user].home_room);
     write_str(user,mess);
     return;
     }

  if (strstr(inpstr,"^")) {
     write_str(user,"Room cannot have color or hilite codes in it.");
     return;
     }

  if (strlen(inpstr) > NAME_LEN) 
     {
      write_str(user,"Room name length too long.");
      return;
     }
         /* Cygnus */
   if ( (!strcmp(inpstr,HEAD_ROOM)) || (!strcmp(inpstr,ARREST_ROOM)) ||
        (!strcmp(inpstr,"sky_palace")) ) {
      write_str(user,"You cannot make that room your home.");
      return;
      }

   /*--------------------*/
   /* see if area exists */
   /*--------------------*/

   found = FALSE;
   for (new_area=0; new_area < NUM_AREAS; ++new_area)
    { 
     if (!strcmp(astr[new_area].name, inpstr) )
       { 
         found = TRUE;
         break;
       }
    }
 
   if (!found)
     {
      write_str(user,NO_ROOM);
      return;
     }
  
/*----------------------------------------------*/
/* check for secure room                        */
/*----------------------------------------------*/

if (ustr[user].security[new_area] == 'X')
  {
   write_str(user,"Your security clearance does not let you enter there");
   return;
  }


/*-------------------------------------------------------------------*/
/* see if new room has exits, if not and not wizard, no set possible */
/*-------------------------------------------------------------------*/
found = TRUE;
if ( (!strlen(astr[new_area].move)) || (!strcmp(astr[new_area].move,"*")) ) 
    {
     found = FALSE;
    }

/*--------------------------------------------------------------*/
/* anyone above a 3 can teleport to non-connected rooms         */
/*--------------------------------------------------------------*/

if (!found)
  {
    if ((ustr[user].tempsuper < TELEP_LEVEL) && (ustr[user].security[new_area] == 'N')) 
      {
       write_str(user,"You cannot make a non-connected room your home.");
       return;
      }
  }

  strcpy(ustr[user].home_room,astr[new_area].name);

  copy_from_user(user);
  write_user(ustr[user].login_name);
  sprintf(mess,"Set home room to: %s",astr[new_area].name);
  write_str(user,mess);
}

/** command to test and turn on/off color attribs. **/
void set_color(int user, char *inpstr)
{
int a=0;

if (!strlen(inpstr)) {
  if (ustr[user].color==0) {
   write_str(user,"Color is now   On");
   ustr[user].color=1;
   }
  else {
   write_str(user,"Color is now   Off");
   ustr[user].color=0;
   }
 }
else if (!strcmp(inpstr,"on") || !strcmp(inpstr,"ON")) {
   write_str(user,"Color is now   On");
   ustr[user].color=1;
   }
else if (!strcmp(inpstr,"off") || !strcmp(inpstr,"OFF")) {
   write_str(user,"Color is now   Off");
   ustr[user].color=0;
   }
else if (!strcmp(inpstr,"test") || !strcmp(inpstr,"TEST")) {
a=ustr[user].color;
if (a==0) ustr[user].color=1;
 write_str(user,"This test is to see whether your terminal is capable of");
 write_str(user,"displaying ANSI color. During the test, you should see the color"); 
 write_str(user,"displayed next to its corresponding name, if your terminal IS compatible.");
 write_str(user,"To use a color code in something, read .h coloruse");
 write_str(user,"  COLOR                EFFECT                  CODE");
 write_str(user,"  Low Green      ^LG      XXXXXXXXXXXXXXXXX ^       LG");
 write_str(user,"  Low Yellow     ^LY      XXXXXXXXXXXXXXXXX ^       LY");
 write_str(user,"  Low Red        ^LR      XXXXXXXXXXXXXXXXX ^       LR");
 write_str(user,"  Low Blue       ^LB      XXXXXXXXXXXXXXXXX ^       LB");
 write_str(user,"  Low Magenta    ^LM      XXXXXXXXXXXXXXXXX ^       LM");
 write_str(user,"  Low White      ^LW      XXXXXXXXXXXXXXXXX ^       LW");
 write_str(user,"  Low Cyan       ^LC      XXXXXXXXXXXXXXXXX ^       LC");
 write_str(user,"  High Green     ^HG      XXXXXXXXXXXXXXXXX ^       HG");
 write_str(user,"  High Yellow    ^HY      XXXXXXXXXXXXXXXXX ^       HY");
 write_str(user,"  High Red       ^HR      XXXXXXXXXXXXXXXXX ^       HR");
 write_str(user,"  High Blue      ^HB      XXXXXXXXXXXXXXXXX ^       HB");
 write_str(user,"  High Magenta   ^HM      XXXXXXXXXXXXXXXXX ^       HM");
 write_str(user,"  High White     ^HW      XXXXXXXXXXXXXXXXX ^       HW");
 write_str(user,"  High Cyan      ^HC      XXXXXXXXXXXXXXXXX ^       HC");
 write_str(user,"  Bold       ^          XXXXXXXXXXXXXXXXX ^       None");
 write_str(user,"  Blinking             ^BLXXXXXXXXXXXXXXXXX ^       BL");
 write_str(user,"  Underlined           ^ULXXXXXXXXXXXXXXXXX ^       UL");
 write_str(user,"  Reverse Video        ^RVXXXXXXXXXXXXXXXXX ^       RV");
if (a==0) ustr[user].color=0;
 write_str(user,"<Ok>"); 
 }
else {
   write_str(user,"Usage: .set color        -  Toggle your color switch on/off");
   write_str(user,"       .set color on     -  Turns colored attributes on");
   write_str(user,"       .set color off    -  Turns colored attributes off");
   write_str(user,"       .set color test   -  Tests your terminal for ANSI color");
 }

   read_user(ustr[user].login_name);
   t_ustr.color = ustr[user].color;
   write_user(ustr[user].login_name);
}


/** show email address - yes or no **/
void set_visemail(int user)
{

  if (ustr[user].semail)
    {
      write_str(user, "Email address now visible.");
      ustr[user].semail = 0;
    }
   else
    {
      write_str(user,"Email address now hidden.");
      ustr[user].semail = 1;
    }
    
  read_user(ustr[user].login_name);
  t_ustr.semail = ustr[user].semail;
  write_user(ustr[user].login_name);
}

/* Set .help style */
void set_help(int user)
{
 char type[4][7];

   strcpy(type[0],"OURS  ");
   strcpy(type[1],"IFORMS");
   strcpy(type[2],"NUTS3 ");
   strcpy(type[3],"NUTS2 ");

 if (ustr[user].help==0)
    ustr[user].help=1;
 else if (ustr[user].help==1)
    ustr[user].help=2;
 else if (ustr[user].help==2)
    ustr[user].help=3;
 else if (ustr[user].help==3)
    ustr[user].help=0;

    sprintf(mess,".help type now set to: ^HY%s^",type[ustr[user].help]);
    write_str(user,mess);

  read_user(ustr[user].login_name);
  t_ustr.help = ustr[user].help;
  write_user(ustr[user].login_name);
}

/* Set .who style */
void set_who(int user)
{
 char type[4][7];

   strcpy(type[0],"OURS  ");
   strcpy(type[1],"NUTS  ");
   strcpy(type[2],"IFORMS");
   strcpy(type[3],"NEW   ");

 if (ustr[user].who==0)
    ustr[user].who=1;
 else if (ustr[user].who==1)
    ustr[user].who=2;
 else if (ustr[user].who==2)
    ustr[user].who=3;
 else if (ustr[user].who==3)
    ustr[user].who=0;

    sprintf(mess,".who type now set to: ^HY%s^",type[ustr[user].who]);
    write_str(user,mess);

  read_user(ustr[user].login_name);
  t_ustr.who = ustr[user].who;
  write_user(ustr[user].login_name);
}

/*------------------------------------------------*/
/* set icq number                                 */
/*------------------------------------------------*/
void set_icq(int user, char *inpstr)
{

  if (!strlen(inpstr)) {
	sprintf(mess,"Your ICQ # is: %s",ustr[user].icq);
	write_str(user, mess);
	return;
	}

  if (strstr(inpstr,"^")) {
     write_str(user,"ICQs cannot have color or hilite codes in them.");
     return;
     }

  if (strlen(inpstr) > 20) 
     {
      write_str(user,"ICQ number truncated");
      inpstr[20-1]=0;
     }

  strcpy(ustr[user].icq,inpstr);

  copy_from_user(user);
  write_user(ustr[user].login_name);
  sprintf(mess,"Set ICQ # to: %s",inpstr);
  write_str(user,mess);

}


/** Enter profile ***/
void set_profile(int user, char *inpstr)
{
char *c;
int ret_val;
int redo=0;
int quickdone=0;
int i=0; /*******/
int op_mode=0; /******/
char option[ARR_SIZE]; /******/
char filename[FILE_NAME_LEN];
char filename2[FILE_NAME_LEN];
FILE *fp;

/* get memory */
STARTPRO:

if (!ustr[user].pro_enter) {
       option[0]=0;
       sscanf(inpstr,"%s ",option);
       if (!strcmp(option,"-c") || !strcmp(option,"clear")) {
       sprintf(filename,"%s/%s",PRO_DIR,ustr[user].name);
       remove(filename);
       write_str(user,"Profile deleted."); redo=0;
       return;
       }
        if (!(ustr[user].pro_start=(char *)malloc(82*PRO_LINES))) {
        write_str(user,BAD_MALLOC);
	write_log(ERRLOG,YESTIME,"MALLOC: Can't malloc memory in set_profile! %s\n",get_error());
        redo=0;
        return;
        }

       if (strlen(inpstr) && (!redo)) {
         if (!strncmp(option,"-i",2)) {
          if (strlen(option)==2) op_mode=3;
          else {
           for (i=2;i<strlen(option);++i) {
              if (!isdigit((int)option[i])) {
                write_str(user,"Line number given was not a number!");
                return;
                }
             } /* end of for */
           i=0;
           midcpy(option,option,2,7);
           i=atoi(option);
           if (i == 0) {
             write_str(user,"Profile lines start at 1. Not 0. Try again.");
             return;
             }
           op_mode=5;
          } /* end of else */

          remove_first(inpstr);
          if (op_mode==3) {
            if (!strlen(inpstr)) {
              write_str(user,"You must have text or a -b after this option");
              return;
              }
            if (!strcmp(inpstr,"-b")) op_mode=4;
            inedit_file(user,inpstr,1,op_mode);
            return;
           }
          else if (op_mode==5) {
            if (!strlen(inpstr)) {
              write_str(user,"You must have text or a -b after this option");
              return;
              }
            if (!strcmp(inpstr,"-b")) op_mode=6;
            inedit_file(user,inpstr,i,op_mode);
            return;
           }
         } /* end of IF INSERT OPTION */

       for (i=0;i<strlen(option);++i) {
          if (!isdigit((int)option[i])) {
            write_str(user,"Line number given was not a number!");
            return;
            }
         }
       i=0;
       i=atoi(option);
       if (i == 0) {
         write_str(user,"Profile lines start at 1. Not 0. Try again.");
         return;
         }
       if (i > PRO_LINES) {
         sprintf(mess,"The line number can't be higher than the max profile lines allowed, which is currently %d",PRO_LINES);
         write_str(user,mess);
         return;
         }
       remove_first(inpstr);
       if (!strcmp(inpstr,"-c")) op_mode=1;
       else if (!strcmp(inpstr,"-b")) op_mode=2;
       else op_mode=0;
       inedit_file(user,inpstr,i,op_mode);
       return;
      } /* end of inedit */         
    ustr[user].pro_enter=1;
    ustr[user].pro_end=ustr[user].pro_start;
    if (!redo) {
    sprintf(mess,"%s is entering a profile..",ustr[user].say_name);
    writeall_str(mess, 1, user, 0, user, NORM, NONE, 0);
    }
    if (!redo) {
	/* save all user listen-ignore flags so we can give */
	/* them back when we're done */
     strcpy(ustr[user].mutter,ustr[user].flags);
     user_ignore(user,"all");
     }
    write_str(user,"");
    write_str(user,"** Entering a profile, finish with a '.' on a line by itself **");
    sprintf(mess,"** Max lines you can write is %d",PRO_LINES);
    write_str(user,mess);
    write_str(user,"");
    write_str_nr(user,"1: ");
	telnet_write_eor(user);
    noprompt=1;
    return;
    }
inpstr[80]=0;  c=inpstr;

/* check for dot terminator */
ret_val=0;

if (ustr[user].pro_enter > PRO_LINES) {
QUICKDONE:
   if (*c=='s' && *(c+1)==0) {
     ret_val=write_pro(user);
        if (ret_val) {
	write_str(user,"");
	write_str(user,"Profile stored");
	}
        else {
	write_str(user,"");
	write_str(user,"Profile not stored");
	}
        free(ustr[user].pro_start);  ustr[user].pro_enter=0;
        ustr[user].pro_end='\0';
        noprompt=0;
        sprintf(mess,"%s finishes entering a profile",ustr[user].say_name);
        writeall_str(mess, 1, user, 0, user, NORM, NONE, 0);
	/* give them back their saved flags */
        strcpy(ustr[user].flags,ustr[user].mutter);
        ustr[user].mutter[0]=0;

        if (autopromote == 1)
         check_promote(user,9);

        redo=0;
        return;
     }
   else if (*c=='v' && *(c+1)==0) {
write_str(user,"+-----------------------------------------------------------------------------+");
c='\0';
strcpy(filename2,get_temp_file());
fp=fopen(filename2,"w");
for (c=ustr[user].pro_start;c<ustr[user].pro_end;++c) {
    putc(*c,fp);
    }
    fclose(fp);
    cat(filename2,user,0);
    remove(filename2);
c='\0';
write_str(user,"+-----------------------------------------------------------------------------+");
	if (quickdone==1) {
		quickdone=0;
		write_str(user,"");
		sprintf(mess,"%d: ",ustr[user].pro_enter);
		write_str_nr(user,mess);
		telnet_write_eor(user);
	}
	else {
            write_str_nr(user,PROFILE_PROMPT);
		 telnet_write_eor(user);
	}
            noprompt=1;  return;
        }
   else if (*c=='r' && *(c+1)==0) {
        free(ustr[user].pro_start); ustr[user].pro_enter=0;
        ustr[user].pro_end='\0';
        redo=1;
        goto STARTPRO;
        }             
   else if (*c=='a' && *(c+1)==0) {
        free(ustr[user].pro_start); ustr[user].pro_enter=0;
        ustr[user].pro_end='\0';
	write_str(user,"");
        write_str(user,"Profile not stored");
        noprompt=0;
        sprintf(mess,"%s finishes entering a profile",ustr[user].say_name);
        writeall_str(mess, 1, user, 0, user, NORM, NONE, 0);
	/* give them back their saved flags */
        strcpy(ustr[user].flags,ustr[user].mutter);
        ustr[user].mutter[0]=0;
        redo=0;
        return;
        }             
   else {
    write_str_nr(user,PROFILE_PROMPT);
	 telnet_write_eor(user);
    return;
   } 
  }

if (*c=='.' && *(c+1)==0) {
        if (ustr[user].pro_enter!=1)   {
            ustr[user].pro_enter= PRO_LINES + 1;
            write_str_nr(user,PROFILE_PROMPT);
		 telnet_write_eor(user);
            noprompt=1;  return;
            }
        else {
	write_str(user,"");
	write_str(user,"Profile not stored");
	}
        free(ustr[user].pro_start);  ustr[user].pro_enter=0;
        noprompt=0;
        sprintf(mess,"%s finishes entering a profile",ustr[user].say_name);
        writeall_str(mess, 1, user, 0, user, NORM, NONE, 0);
	/* give them back their saved flags */
        strcpy(ustr[user].flags,ustr[user].mutter);
        ustr[user].mutter[0]=0;
        redo=0;
        return;
        }
else if (*c=='.') {
if ( (*(c+1)=='s') || (*(c+1)=='r') || (*(c+1)=='a') ||
     (*(c+1)=='v') ) {
  *c=*(c+1);
  *(c+1)=0;
  quickdone=1;
  goto QUICKDONE;
  }
} /* end of else if */

/* write string to memory */
while(*c) *ustr[user].pro_end++=*c++;
*ustr[user].pro_end++='\n';

/* end of lines */
if (ustr[user].pro_enter==PRO_LINES) {
            ustr[user].pro_enter= PRO_LINES + 1;
            write_str_nr(user,PROFILE_PROMPT);
		 telnet_write_eor(user);
            noprompt=1;  return;
        }
sprintf(mess,"%d: ",++ustr[user].pro_enter);
write_str_nr(user,mess);
telnet_write_eor(user);
}


/** entermessage so instead of "walks in" if one chooses **/
void set_entermsg(int user, char *inpstr)
{

if (!strlen(inpstr)) { 
   sprintf(mess,"^HYYour entermessage is:^ %s",ustr[user].entermsg);
   write_str(user,mess);
   return; 
   }
if (!strcmp(inpstr,"clear") || !strcmp(inpstr,"none") ||
    !strcmp(inpstr,"-c")) {
    strcpy(ustr[user].entermsg,DEF_ENTER);
    copy_from_user(user);
    write_user(ustr[user].name);
    write_str(user,"Entermsg set to default.");
    return;
    }
if (strlen(inpstr) > MAX_ENTERM) {
   write_str(user,"Message too long.");
   return;
   }

strcpy(ustr[user].entermsg,inpstr);
copy_from_user(user);
write_user(ustr[user].name);
sprintf(mess,"^HYNew entermsg:^ %s",ustr[user].entermsg);
write_str(user,mess);

}

/** exitmessage so instead of "goes to the" if one chooses **/
void set_exitmsg(int user, char *inpstr)
{

if (!strlen(inpstr)) { 
   sprintf(mess,"^HYYour exitmessage is:^ %s",ustr[user].exitmsg);
   write_str(user,mess);
   return; 
   }
if (!strcmp(inpstr,"clear") || !strcmp(inpstr,"none") ||
    !strcmp(inpstr,"-c")) {
    strcpy(ustr[user].exitmsg,DEF_EXIT);
    copy_from_user(user);
    write_user(ustr[user].name);
    write_str(user,"Exitmsg set to default.");
    return;
    }
if (strlen(inpstr) > MAX_EXITM) {
   write_str(user,"Message too long.");
   return;
   }

strcpy(ustr[user].exitmsg,inpstr);
copy_from_user(user);
write_user(ustr[user].name);
sprintf(mess,"^HYNew exitmsg:^ %s",ustr[user].exitmsg);
write_str(user,mess);

}