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"

#include "../hdrfiles/osdefs.h"
#include "../hdrfiles/constants.h"
#include "../hdrfiles/protos.h"

extern char mess[ARR_SIZE+25];
extern char t_mess[ARR_SIZE+25];
extern char datadir[255];
extern int PORT;
extern int NUM_AREAS;
extern int atmos_on;
extern int syslog_on;
extern int MESS_LIFE;
extern int allow_new;
extern int resolve_names;
extern int dobackups;
extern char area_nochange[MAX_AREAS];
extern int new_room;
extern char web_opts[11][64];
/* extern char conv[MAX_AREAS][NUM_LINES][MAX_LINE_LEN+1]; */

/** read in initialize data **/
void read_init_data(int mode)
{
char filename[FILE_NAME_LEN],line[512];
char hide1[MAX_AREAS+1];
char tog_atmos[MAX_AREAS+1];
char dummy;
int a,u;
FILE *fp;

sprintf(t_mess,"%s/%s",datadir,INIT_FILE);
strncpy(filename,t_mess,FILE_NAME_LEN);

if (!(fp=fopen(filename,"r"))) 
  {
/*   perror("SYSTEM: INIT: Cannot access area data files"); */
   write_log(ERRLOG,YESTIME,"INIT: Cannot access area data files %s\n",get_error());
   printf("SYSTEM: INIT: Cannot access area data files %s\n",get_error());
#if defined(WINDOWS)
WSACleanup();
#endif
   exit(0);
  }

fgets(line,80,fp);

/* read in important system data & do a check of some of it */
sscanf(line,"%d %d %d %d %d %d %d %d %s",&PORT,
                                   &NUM_AREAS,
                                   &atmos_on,
                                   &syslog_on,
                                   &MESS_LIFE,
                                   &allow_new,
				   &resolve_names,
				   &dobackups,
                                   area_nochange);
                                   
if (PORT<1024 || PORT>9999) 
  {
   write_log(ERRLOG,YESTIME,"INIT: Bad port number (%d)\n",PORT);
   sprintf(mess,"SYSTEM: INIT: Bad port number (%d)",PORT);
   perror(mess);
   FCLOSE(fp);
#if defined(WINDOWS)
WSACleanup();
#endif
   exit(0);
  }

/* If we're not booting with email verification set	*/
/* remove the verification DB if it exists		*/
if (allow_new!=1) {
if (check_for_file(VERIFILE)) remove(VERIFILE);
}
	
if (NUM_AREAS>MAX_AREAS) 
  {
   write_log(ERRLOG,YESTIME,"INIT: Number of rooms defined is greater than MAX_AREAS limit\n");
   perror("SYSTEM: INIT: Number of rooms defined is greater than MAX_AREAS limit");
   FCLOSE(fp);
#if defined(WINDOWS)
WSACleanup();
#endif
   exit(0);
  }

/* read in descriptions and joinings */
for (a=0; a<NUM_AREAS; ++a) 
  {
   fgets(line,80,fp);
   hide1[0] = 0;
   tog_atmos[0] = 0;
   sscanf(line,"%c %s %s %s %s", &dummy,astr[a].name,astr[a].move,hide1,tog_atmos);

   if (!strcmp(NEW_ROOM,astr[a].name))
    new_room=a;

   if (!strcmp(hide1,"1"))
    astr[a].hidden=1;
   else
    astr[a].hidden=0;
   if (!strcmp(tog_atmos,"1"))
    astr[a].atmos=1;
   else
    astr[a].atmos=0;

/* CYGNUS1 */
                if (astr[a].conv == NULL)
                { /* This better not fail */
                        astr[a].conv = (ConvPtr) malloc (sizeof(ConvBuffer));
                }
                if (astr[a].conv == NULL)       /* malloc failed... */
                {
                        NUM_AREAS = a;
                        write_log(ERRLOG,YESTIME,"MALLOC: Failed to allocate conv buffer in read_init_data() %s\n",get_error());
                        goto INIT_NEXT;
                }

		init_conv_buffer(astr[a].conv);
write_log(SYSTEMLOG,YESTIME,"INIT: Initialized room %s (%d)\n",astr[a].name,a);
  }
  
INIT_NEXT:

FCLOSE(fp);

/* clean up rooms no longer used if reinit was done */
for (a=NUM_AREAS;a<MAX_AREAS;++a) {
/* if any users in these rooms, kick them back out to the main room! */
for (u=0;u<MAX_USERS;++u) {
        if (ustr[u].area != -1 && ustr[u].area==a) {
	write_log(SYSTEMLOG,YESTIME,"INIT: Kicking user %s out of now non-existant room %s (%d)\n",ustr[u].say_name,astr[a].name,a);
	ustr[u].area=INIT_ROOM;
	/* alert main room */
	if (!ustr[u].vis)
	  strcpy(line,INVIS_ACTION_LABEL);
	else
	  strcpy(line,ustr[u].say_name);
	sprintf(mess,MOVE_TONEW,line,"s");
	writeall_str(mess, 1, u, 0, -1, NORM, MOVE, 0);
	look(u,"");
	write_str(u,"\07");
	write_str(u,"*** THE ROOM YOU WERE IN NO LONGER EXISTS AS A RESULT OF  ***");
	write_str(u,"*** RECONFIGURATION. HAD TO KICK YOU OUT TO THE MAIN ROOM ***");
	write_str(u,"\07");
	} /* end of user if */
}

astr[a].name[0]=0;
astr[a].move[0]=0;
astr[a].private=0;
astr[a].hidden=0;
astr[a].atmos=0;
if (astr[a].conv) free(astr[a].conv);
astr[a].conv=NULL;
} /* end of for */

sprintf(t_mess,"%s",WEBCONFIG);
strncpy(filename,t_mess,FILE_NAME_LEN);

if (!(fp=fopen(filename,"r"))) 
  {
   write_log(ERRLOG,YESTIME,"INIT: Cannot access web port config file\n");
   perror("SYSTEM: INIT: Cannot access web port config file");
#if defined(WINDOWS)
WSACleanup();
#endif
   exit(0);
  }

a=0;
while (fgets(line,256,fp) != NULL) {
 line[strlen(line)-1]=0;
 if (strlen(line)<=1) continue;
 if (line[0]=='/') continue;

 if (a < 11) {
 strcpy(web_opts[a],line);
 write_log(SYSTEMLOG,YESTIME,"INIT: web_opts[%d]: \"%s\"\n",a,web_opts[a]);
 a++;
 }
 else break;
 } /* end of while */
a=0;

FCLOSE(fp);

/* redo the staff list file */
if (mode) do_stafflist();

}

/** read in exempted users for expire **/
void read_exem_data()
{
int i=0;
int lines=0;
char filename[FILE_NAME_LEN];
FILE *fp;

sprintf(filename,"%s",EXEMFILE);

/* If file doesn't exist, create it */
if (!(fp=fopen(filename,"r"))) 
  {
   printf("SYSTEM: Cannot access user exempt files..will create a new file\n");
   if (!(fp=fopen(filename,"a"))) {
      write_log(ERRLOG,YESTIME,"SYSTEM: Cannot create new user exempt file.\n");
      printf("SYSTEM: Cannot create new user exempt file.\n");
#if defined(WINDOWS)
WSACleanup();
#endif
      exit(0);
      }
   for (i=0;i<NUM_EXPIRES;++i) {
        sprintf(mess,"%s\n",expired[i]);
        fputs(mess,fp);
        }
   i=0;
  }

FCLOSE(fp);

/*----------------------------------------------------------------*/
/* Count lines in file and compare to lines defined in global     */
/* If they differ, add the difference number of lines to the file */
/*----------------------------------------------------------------*/

lines = file_count_lines(filename);

if (lines < NUM_EXPIRES) {
    i = lines;
    fp=fopen(filename,"a");
    printf("Exempt global is higher than exempt space in file. Fixing..\n");
    for (i=lines;i<NUM_EXPIRES;++i) {
        sprintf(mess,"%s\n",expired[i]);
        fputs(mess,fp);
        }
     FCLOSE(fp);
    }
    
    fp=fopen(filename,"r");
    i=0;

 for (i=0;i<NUM_EXPIRES;++i) {
     fscanf(fp,"%s\n",expired[i]);
     }
 
 i=0;
    
FCLOSE(fp);
}

/** read in banned names for .banname **/
void read_nban_data()
{
int i=0;
int lines=0;
char filename[FILE_NAME_LEN];
FILE *fp;

sprintf(filename,"%s",NBANFILE);

/* If file doesn't exist, create it */
if (!(fp=fopen(filename,"r"))) 
  {
   printf("SYSTEM: Cannot access nameban files..will create a new file\n");
   if (!(fp=fopen(filename,"a"))) {
      write_log(ERRLOG,YESTIME,"SYSTEM: Cannot create new nameban file.\n");
      printf("SYSTEM: Cannot create new nameban file.\n");
#if defined(WINDOWS)
WSACleanup();
#endif
      exit(0);
      }
   for (i=0;i<NUM_NAMEBANS;++i) {
        sprintf(mess,"%s\n",nbanned[i]);
        fputs(mess,fp);
        }
   i=0;
  }

FCLOSE(fp);

/*----------------------------------------------------------------*/
/* Count lines in file and compare to lines defined in global     */
/* If they differ, add the difference number of lines to the file */
/*----------------------------------------------------------------*/

lines = file_count_lines(filename);

if (lines < NUM_NAMEBANS) {
    i = lines;
    fp=fopen(filename,"a");
    printf("Nameban global is higher than banned space in file. Fixing..\n");
    for (i=lines;i<NUM_NAMEBANS;++i) {
        sprintf(mess,"%s\n",nbanned[i]);
        fputs(mess,fp);
        }
     FCLOSE(fp);
    }
    
    fp=fopen(filename,"r");
    i=0;

 for (i=0;i<NUM_NAMEBANS;++i) {
     fscanf(fp,"%s\n",nbanned[i]);
     }
 
 i=0;
    
FCLOSE(fp);
}


/* change user1 to user2 in exempt file */
/* user 1 is passed all lowercase */
/* user 2 is passed correctly capitalized */
int change_exem_data(char *user1, char *user2)
{
int i;
char tempname[NAME_LEN+1];

     for (i=0;i<NUM_EXPIRES;++i) {
       strcpy(tempname,expired[i]);
       strtolower(tempname);
      if (!strcmp(tempname, user1)) {
        strcpy(expired[i],user2);
        if (!write_exem_data()) return 0;
        i=0;
        return 1;
        }
      } /* end of for */

return 0;
}


/* remove user from exempt file */
int remove_exem_data(char *user1)
{
int i;
char tempname[NAME_LEN+1];

     for (i=0;i<NUM_EXPIRES;++i) {
       strcpy(tempname,expired[i]);
       strtolower(tempname);
      if (!strcmp(tempname, user1)) {
        strcpy(expired[i],"name");
        if (!write_exem_data()) return 0;
        i=0;
        return 1;
        }
      } /* end of for */

return 0;
}


/*** write out exempted users for expire ***/
int write_exem_data()
{
int i;
char filename[FILE_NAME_LEN];
FILE *fp;

sprintf(filename,"%s",EXEMFILE);
if (!(fp=fopen(filename,"w")))
  {
   write_log(ERRLOG,YESTIME,"Couldn't open file(w) \"%s\" in write_exem_data! %s\n",filename,get_error());
   return 0;
  }

for (i=0;i<NUM_EXPIRES;++i) {
    sprintf(mess,"%s\n",expired[i]);
    fputs(mess,fp);
    }

FCLOSE(fp);
return 1;
}

/*** write out banned names for .banname ***/
int write_nban_data()
{
int i;
char filename[FILE_NAME_LEN];
FILE *fp;

sprintf(filename,"%s",NBANFILE);
if (!(fp=fopen(filename,"w")))
  {
   write_log(ERRLOG,YESTIME,"Couldn't open file(w) \"%s\" in write_nban_data! %s\n",filename,get_error());
   return 0;
  }

for (i=0;i<NUM_NAMEBANS;++i) {
    sprintf(mess,"%s\n",nbanned[i]);
    fputs(mess,fp);
    }

FCLOSE(fp);
return 1;
}


/*** init user structure ***/
void init_user_struct()
{
int u,v;

puts("Initialising user structure...");
for (u=0; u<MAX_USERS; ++u) 
  {
   ustr[u].login_name[0] = 0;
   ustr[u].say_name[0]   = 0;
   ustr[u].name[0]       = 0;
   ustr[u].login_pass[0] = 0;
   ustr[u].password[0]   = 0;
   ustr[u].email_addr[0] = 0;
   ustr[u].page_file[0]  = 0;
   ustr[u].desc[0]       = 0;
   ustr[u].sex[0]        = 0;
   ustr[u].fail[0]       = 0;
   ustr[u].succ[0]       = 0;
   ustr[u].security[0]   = 0;
   ustr[u].monitor       = 0;
   ustr[u].afk           = 0;
   ustr[u].lockafk       = 0;
   ustr[u].net_name[0]   = 0;
   ustr[u].last_name[0]  = 0;
   ustr[u].init_netname[0]  = 0;
   ustr[u].last_site[0]  = 0;
   ustr[u].init_site[0]  = 0;
   ustr[u].site[0]       = 0;

   ustr[u].sock          = -1;
   ustr[u].area          = -1; 
   ustr[u].invite        = -1;  
   ustr[u].clrmail       = -1;  
   ustr[u].super         = 0;
   ustr[u].vis           = 1;  
   ustr[u].warning_given = 0;
   ustr[u].time		 = time(0);
   ustr[u].last_input	 = time(0);
   ustr[u].logging_in    = 0;
   ustr[u].mutter[0]     = 0;
   ustr[u].phone_user[0] = 0;
   ustr[u].homepage[0]   = 0;
   ustr[u].creation[0]   = 0;
   ustr[u].numcoms       = 0;
   ustr[u].mail_num      = 0;
   ustr[u].numbering     = 0;
   ustr[u].cat_mode      = 0;
   ustr[u].rows          = 24;
   ustr[u].cols          = 256;
   ustr[u].car_return    = 1;
   ustr[u].abbrs         = 1;
   ustr[u].white_space   = 1;
   ustr[u].line_count    = 0;
   ustr[u].number_lines  = 0;
   ustr[u].times_on      = 0;
   ustr[u].aver          = 0;
   ustr[u].totl          = 0;
   ustr[u].autor         = 0;
   ustr[u].autof         = 0;
   ustr[u].automsgs      = 0;
   ustr[u].gagcomm       = 0;
   ustr[u].semail        = 0;
   ustr[u].quote         = 1;
   ustr[u].hilite        = 0;
   ustr[u].new_mail      = 0;
   ustr[u].color         = COLOR_DEFAULT;
   ustr[u].real_id[0]    = 0;
   ustr[u].friend_num    = 0;
   ustr[u].revokes_num   = 0;
   ustr[u].gag_num       = 0;
   ustr[u].nerf_shots    = 5;
   ustr[u].nerf_energy   = 10;
   ustr[u].nerf_kills    = 0;
   ustr[u].nerf_killed   = 0;
   ustr[u].rawtime       = 0;
   ustr[u].passhid       = 0;
   ustr[u].pbreak        = 0;
   ustr[u].beeps         = 0;
   ustr[u].mail_warn     = 0;
   ustr[u].muz_time      = 0;
   ustr[u].xco_time      = 0;
   ustr[u].gag_time      = 0;
   ustr[u].frog          = 0;
   ustr[u].frog_time     = 0;
   ustr[u].anchor        = 0;
   ustr[u].anchor_time   = 0;
   ustr[u].promote       = 0;
   ustr[u].home_room[0]  = 0;
   ustr[u].entermsg[0]   = 0;
   ustr[u].exitmsg[0]    = 0;
   ustr[u].afkmsg[0]     = 0;
   ustr[u].init_date[0]  = 0;
   ustr[u].last_date[0]  = 0;
   ustr[u].pro_enter     = 0;
   ustr[u].roomd_enter   = 0;
   ustr[u].vote_enter    = 0;
   ustr[u].t_ent         = 0;
   ustr[u].t_num         = 0;
   ustr[u].t_name[0]     = 0;
   ustr[u].t_host[0]     = 0;
   ustr[u].t_ip[0]       = 0;
   ustr[u].t_port[0]     = 0;
   ustr[u].help          = 0;
   ustr[u].who           = 0;
   ustr[u].webpic[0]     = 0;
   ustr[u].rwho          = 1;
   ustr[u].tempsuper     = 0;
   ustr[u].promptseq     = 0;
   ustr[u].needs_hostname = 0;
   ustr[u].ttt_board	 = 0;
   ustr[u].ttt_opponent	 = -3;
   ustr[u].ttt_playing	 = 0;
   ustr[u].ttt_kills	 = 0;
   ustr[u].ttt_killed	 = 0;
   ustr[u].hang_wins	 = 0;
   ustr[u].hang_losses   = 0;
   ustr[u].hang_stage    = -1;
   ustr[u].hang_word[0]  = '\0';
   ustr[u].hang_word_show[0] = '\0';
   ustr[u].hang_guess[0] = '\0';
   ustr[u].icq[0]	 = 0;
   ustr[u].miscstr1[0]	 = 0;
   ustr[u].miscstr2[0]	 = 0;
   ustr[u].miscstr3[0]	 = 0;
   ustr[u].miscstr4[0]	 = 0;
   ustr[u].pause_login   = 0;
   ustr[u].miscnum2	 = 0;
   ustr[u].miscnum3	 = 0;
   ustr[u].miscnum4	 = 0;
   ustr[u].miscnum5	 = 0;
   ustr[u].tempnum1	 = 0;
   ustr[u].output_data   = NULL;
   ustr[u].write_offset  = 0;
   ustr[u].alloced_size  = 0;
   ustr[u].log_stage	 = 0;
   ustr[u].temp_buffer[0]= 0;
   ustr[u].file_posn	 = 0;
   ustr[u].term_type     = -1;
   ustr[u].prev_term_type[0] = 0;

   initabbrs(u);
   listen_all(u);

   ustr[u].char_buffer[0]     = 0;
   ustr[u].char_buffer_size   = 0;

/*
   for (v=0; v<NUM_LINES; v++)
     {
      ustr[u].conv[v][0]=0;
     }
   v=0;
*/
   /* CYGNUS2 */
   ustr[u].conv = NULL;

   for (v=0; v<MAX_ALERT; v++)
     {
      ustr[u].friends[v][0]=0;
     }
   v=0;
   for (v=0; v<MAX_GAG; v++)
     {
      ustr[u].gagged[v][0]=0;
     }
   v=0;
   for (v=0; v<MAX_GRAVOKES; v++)
     {
      ustr[u].revokes[v][0]=0;
     }
	ustr[u].Macros = NULL;
/*
   v=0;
   for (v=0; v<NUM_MACROS; v++)
     {
      ustr[u].Macros[v].body[0]=0;
      ustr[u].Macros[v].name[0]=0;
     }
*/

  } /* end of for */

/* initialize the temp t_ustr structure */
        if (t_ustr.conv == NULL) {
                t_ustr.conv = (ConvPtr) malloc (sizeof (ConvBuffer));
                if (t_ustr.conv == NULL)       /* malloc failed */
                {
                write_log(ERRLOG,YESTIME,"MALLOC: Failed for conv buffer in init_user_structs %s\n",get_error());
                return;
                }
                init_conv_buffer(t_ustr.conv);
        } /* end of if conv null */
        /* CYGNUS3 */
        if (t_ustr.Macros == NULL) {
                t_ustr.Macros = (MacroPtr) malloc (sizeof (MacroBuffer));
                if (t_ustr.Macros == NULL)       /* malloc failed */
                {
                write_log(ERRLOG,YESTIME,"MALLOC: Failed for Macros in init_user_structs %s\n",get_error());
                return;
                }
                init_macro_buffer(t_ustr.Macros);
        } /* end of if Macros null */

}

/*** init user structure ***/
void reset_user_struct(int user, int mode)
{
int u=user;
int v;

   ustr[u].login_name[0] = 0;
   ustr[u].say_name[0]   = 0;
   ustr[u].name[0]       = 0;
   ustr[u].login_pass[0] = 0;
   ustr[u].password[0]   = 0;
   ustr[u].email_addr[0] = 0;
   ustr[u].page_file[0]  = 0;
   ustr[u].desc[0]       = 0;
   ustr[u].sex[0]        = 0;
   ustr[u].fail[0]       = 0;
   ustr[u].succ[0]       = 0;
   ustr[u].security[0]   = 0;
   ustr[u].monitor       = 0;
   ustr[u].afk           = 0;
   ustr[u].lockafk       = 0;
   ustr[u].last_name[0]  = 0;
   ustr[u].init_netname[0]  = 0;
   ustr[u].last_site[0]  = 0;
   ustr[u].init_site[0]  = 0;

   ustr[u].area          = -1;
   ustr[u].invite        = -1;
   ustr[u].clrmail       = -1;
   ustr[u].super         = 0;
   ustr[u].vis           = 1;  
   ustr[u].warning_given = 0;
   ustr[u].time		 = time(0);
   ustr[u].last_input	 = time(0);
   ustr[u].mutter[0]     = 0;
   ustr[u].phone_user[0] = 0;
   ustr[u].homepage[0]   = 0;
   ustr[u].creation[0]   = 0;
   ustr[u].numcoms       = 0;
   ustr[u].mail_num      = 0;
   ustr[u].numbering     = 0;
   ustr[u].cat_mode      = 0;
   ustr[u].rows          = 24;
   ustr[u].cols          = 256;
   ustr[u].car_return    = 1;
   ustr[u].abbrs         = 1;
   ustr[u].white_space   = 1;
   ustr[u].line_count    = 0;
   ustr[u].number_lines  = 0;
   ustr[u].times_on      = 0;
   ustr[u].aver          = 0;
   ustr[u].totl          = 0;
   ustr[u].autor         = 0;
   ustr[u].autof         = 0;
   ustr[u].automsgs      = 0;
   ustr[u].gagcomm       = 0;
   ustr[u].semail        = 0;
   ustr[u].quote         = 1;
   ustr[u].hilite        = 0;
   ustr[u].new_mail      = 0;
   ustr[u].color         = COLOR_DEFAULT;
   ustr[u].real_id[0]    = 0;
   ustr[u].friend_num    = 0;
   ustr[u].revokes_num   = 0;
   ustr[u].gag_num       = 0;
   ustr[u].nerf_shots    = 5;
   ustr[u].nerf_energy   = 10;
   ustr[u].nerf_kills    = 0;
   ustr[u].nerf_killed   = 0;
   ustr[u].rawtime       = 0;
   ustr[u].passhid       = 0;
   ustr[u].pbreak        = 0;
   ustr[u].beeps         = 0;
   ustr[u].mail_warn     = 0;
   ustr[u].muz_time      = 0;
   ustr[u].xco_time      = 0;
   ustr[u].gag_time      = 0;
   ustr[u].frog          = 0;
   ustr[u].frog_time     = 0;
   ustr[u].anchor        = 0;
   ustr[u].anchor_time   = 0;
   ustr[u].promote       = 0;
   ustr[u].home_room[0]  = 0;
   ustr[u].entermsg[0]   = 0;
   ustr[u].exitmsg[0]    = 0;
   ustr[u].afkmsg[0]     = 0;
   ustr[u].init_date[0]  = 0;
   ustr[u].last_date[0]  = 0;
   ustr[u].pro_enter     = 0;
   ustr[u].roomd_enter   = 0;
   ustr[u].vote_enter    = 0;
   ustr[u].t_ent         = 0;
   ustr[u].t_num         = 0;
   ustr[u].t_name[0]     = 0;
   ustr[u].t_host[0]     = 0;
   ustr[u].t_ip[0]       = 0;
   ustr[u].t_port[0]     = 0;
   ustr[u].help          = 0;
   ustr[u].who           = 0;
   ustr[u].webpic[0]     = 0;
   ustr[u].rwho          = 1;
   ustr[u].tempsuper     = 0;
   ustr[u].needs_hostname = 0;
   ustr[u].ttt_board	 = 0;
   ustr[u].ttt_opponent	 = -3;
   ustr[u].ttt_playing	 = 0;
   ustr[u].ttt_kills	 = 0;
   ustr[u].ttt_killed	 = 0;
   ustr[u].hang_wins	 = 0;
   ustr[u].hang_losses 	 = 0;
   ustr[u].hang_stage    = -1;
   ustr[u].hang_word[0]  = '\0';
   ustr[u].hang_word_show[0] = '\0';
   ustr[u].hang_guess[0] = '\0';
   ustr[u].icq[0]	 = 0;
   ustr[u].miscstr1[0]	 = 0;
   ustr[u].miscstr2[0]	 = 0;
   ustr[u].miscstr3[0]	 = 0;
   ustr[u].miscstr4[0]	 = 0;
   ustr[u].pause_login   = 0;
   ustr[u].miscnum2	 = 0;
   ustr[u].miscnum3	 = 0;
   ustr[u].miscnum4	 = 0;
   ustr[u].miscnum5	 = 0;
   ustr[u].tempnum1	 = 0;
   ustr[u].log_stage	 = 0;
   ustr[u].temp_buffer[0]= 0;
   ustr[u].file_posn	 = 0;

   initabbrs(u);
   listen_all(u);

   ustr[u].char_buffer[0]     = 0;
   ustr[u].char_buffer_size   = 0;

/*
   for (v=0; v<NUM_LINES; v++)
     {
      ustr[u].conv[v][0]=0;
     }
   v=0;
*/

   for (v=0; v<MAX_ALERT; v++)
     {
      ustr[u].friends[v][0]=0;
     }
   v=0;
   for (v=0; v<MAX_GAG; v++)
     {
      ustr[u].gagged[v][0]=0;
     }
   v=0;
   for (v=0; v<MAX_GRAVOKES; v++)
     {
      ustr[u].revokes[v][0]=0;
     }

/* This really shouldn't be needed, but just in case */
if (ustr[u].Macros) init_macro_buffer(ustr[u].Macros);
/*
   v=0;
   for (v=0; v<NUM_MACROS; v++)
     {
      ustr[u].Macros[v].body[0]=0;
      ustr[u].Macros[v].name[0]=0;
     }
   v=0;
*/

if (mode==1) {
ustr[u].site[0]		= 0;
ustr[u].net_name[0]	= 0;
ustr[u].sock		= -1;
ustr[u].logging_in	= 0;
ustr[u].promptseq	= 0;
if (ustr[u].output_data) free(ustr[u].output_data);
ustr[u].output_data	= NULL;
ustr[u].write_offset	= 0;
ustr[u].alloced_size	= 0;
/* CYGNUS2 */
if (ustr[u].conv) free(ustr[u].conv);
ustr[u].conv = NULL;
if (ustr[u].Macros) free(ustr[u].Macros);
ustr[u].Macros = NULL;
   ustr[u].term_type     = -1;
   ustr[u].prev_term_type[0] = 0;
}

}


/*** init area structure ***/
void init_area_struct()
{
int a;

puts("Initialising area structure & file pointers...");
for (a=0;a<NUM_AREAS;++a) 
  {
   astr[a].private=0; 
   if (astr[a].conv) init_conv_buffer(astr[a].conv);
  }
}

/*** init misc. port structures ***/
void init_misc_struct()
{
int a;

puts("Initialising who and web port structures...");
for (a=0;a<MAX_WHO_CONNECTS;++a) 
  {
   whoport[a].sock=-1; 
   whoport[a].site[0]=0;
   whoport[a].net_name[0]=0;
  }
a=0;
for (a=0;a<MAX_WWW_CONNECTS;++a) 
  {
   wwwport[a].sock=-1;
   wwwport[a].method=-1;
   wwwport[a].req_length=0;
   wwwport[a].keypair[0]=0;
   wwwport[a].file[0]=0;
   wwwport[a].site[0]=0;
   wwwport[a].net_name[0]=0;
   if (wwwport[a].output_data) free(wwwport[a].output_data);
   wwwport[a].output_data=NULL;
   wwwport[a].write_offset=0;
   wwwport[a].alloced_size=0;
  }
a=0;
for (a=0;a<MAX_MISC_CONNECTS;++a) 
  {
   miscconn[a].sock=-1;
   miscconn[a].user=-1;
   miscconn[a].type=-1;
   miscconn[a].port=-1;
   miscconn[a].stage=-1;
   miscconn[a].option=-1;
   miscconn[a].time=0;
   miscconn[a].fd=NULL;
   miscconn[a].ready=0;
   miscconn[a].queuename[0]=0;
   miscconn[a].last_return[0]=0;
   miscconn[a].site[0]=0;
  }

}