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 int bot;
extern char mess[ARR_SIZE+25];
extern char t_mess[ARR_SIZE+25];
extern char web_opts[11][64];
extern char *our_delimiters;
extern struct command_struct sys[];
extern struct botcommand_struct botsys[];


/*---------------------------------------*/
/* Get a temporary file for data storage */
/*---------------------------------------*/
char *get_temp_file()
{
static char tempname[FILE_NAME_LEN];

sprintf(tempname,"junk/temp_%d.%d",rand()%500,rand()%500);
return tempname;
}


/* Get the abbreviation number for the emote command */
int get_emote(int user)
{
int i=0;
 
for (i=0;i<NUM_ABBRS;++i) {
    if (!strcmp(ustr[user].custAbbrs[i].com,".emote")) {
      return i;
     }
    else continue;
   }

return -1;
}   


/* Get time in a certain way and return it as a string */
/* mode 0 is to get rid of the year string and the carriage return */
/* mode 1 is to get rid of just the carriage return */ 
char *get_time(time_t ref,int mode)
{
time_t tm;
static char mrtime[30];

if ((int)ref==0) {
   time(&tm);
   strcpy(mrtime,ctime(&tm));
  }
else {
   strcpy(mrtime,ctime(&ref));
  }

if (mode==0)
   mrtime[strlen(mrtime)-6]=0; /* get rid of newline and year */
else if (mode==1) 
   mrtime[strlen(mrtime)-1]=0; /* get rid of newline */
 
   return mrtime;
}
   

char *get_error(void)
{
static char errstr[256];

sprintf(errstr,"(%d:%s)",errno,strerror(errno));
return errstr;
}


/*** get user number using name ***/
int get_user_num(char *i_name, int user)
{
int u;
int found = 0, last = -1;

strtolower(i_name);
        
t_mess[0] = 0;
   
for (u=0; u<MAX_USERS; ++u)
        if ( !strcmp(ustr[u].name,i_name) && ustr[u].area != -1)
        return u;
  
for (u=0; u<MAX_USERS; ++u)
  {
   if (instr2(0, ustr[u].name, i_name, 0) != -1)
    {
      strcat(t_mess, ustr[u].say_name);
      strcat(t_mess, " ");
      found++;
      last= u;
    }
  }

if (found == 0) return -1;
   
if (found >1)
  {
   sprintf(mess, NOT_UNIQUE, t_mess);
   write_str(user,mess);
   return -1; 
  }  
 else
  return last;
}


/*** get user number using name ***/
int get_user_num_exact(char *i_name, int user)
{
int u;

strtolower(i_name);
t_mess[0] = 0;

for (u=0;u<MAX_USERS;++u)
        if (!strcmp(ustr[u].name,i_name) && ustr[u].area != -1)
        return u;

return -1;
}


/*---------------------------------------------------------------*/
/* this is a simple token parser. I, Cygnus, have made it more   */
/* complex (of course). No, really, it's cool. It takes abbrevia */
/* -tions or/and the first command on and checks to see if it is */
/* a valid command. And NOW since command structure abbreviation */
/* defaults are copied to a new user, it looks at them instead   */
/*---------------------------------------------------------------*/
int get_com_num(int user, char *inpstr)
{
char comstr[ARR_SIZE];  
char tstr[ARR_SIZE+25];
int f=0;
int i=0;
int found=0;
  
if (ustr[user].white_space)
 {
  while(inpstr[0] == ' ') inpstr++;
 }
                        
comstr[0]=inpstr[0];
comstr[1]=0;
                                 
/* Bot commands start with a _ */
if (!strcmp(ustr[user].name,BOT_ID) ||
    !strcmp(ustr[user].name,ROOT_ID)) {
  if (!strcmp(comstr,"_")) {
    sscanf(inpstr,"%s",comstr);
    for (f=0; botsys[f].jump_vector != -1; ++f)
      if (!instr2(0,botsys[f].command,comstr,0) && strlen(comstr)>1) return f;
    return -1;
   }
 } /* end of if bot */
      
if (!strcmp(comstr,"."))  
 {
   sscanf(inpstr,"%s",comstr);
 }   
 else
 {
   if (ustr[user].abbrs)
     {

     /* check user abbreviations first */
                        for (found=0, i=0;i<NUM_ABBRS && found == 0;++i)
                        {
                              if (comstr[0] == ustr[user].custAbbrs[i].abbr[0])
                                {
                                        strcpy(comstr, ustr[user].custAbbrs[i].com);
                                        found = 1;
                                }
                        }   
                        if (!found)
                        {
                                return -1;
                        }
    
      tstr[0] = 0;
      inpstr[0] = ' ';
      strcpy(tstr,comstr);
      strcat(tstr,inpstr);
      strcpy(inpstr,tstr);
    }
 }   
  
for (f=0; sys[f].su_com != -1; ++f)
        if (!instr2(0,sys[f].command,comstr,0) && strlen(comstr)>1) return f;
return -1;
}


int get_com_num_plain(char *inpstr)
{
int f=0;

for (f=0; sys[f].su_com != -1; ++f)
        if (!instr2(0,sys[f].command,inpstr,0) && strlen(inpstr)>1) return sys[f].jump_vector;
        
return -1;
}
 

int get_rank(char *inpstr)
{
int f=0;

for (f=0; sys[f].su_com != -1; ++f)
        if (!instr2(0,sys[f].command,inpstr,0) && strlen(inpstr)>1) return sys[f].su_com;
        
return 0;
}

/*---------------------------------------*/
/* Figure out full help filename from    */
/* inputed abbreviation..                */
/* something like get_user_num()         */
/*---------------------------------------*/
char *get_help_file(char *i_name, int user)
{
int found = 0;
static char last[64];
char name[ARR_SIZE];
char small_buff[64];
char z_mess[600];
char filerid[FILE_NAME_LEN];
struct dirent *dp;  
DIR  *dirp;
         
strcpy(z_mess,"");
strcpy(last,"");
strcpy(name,i_name);
          
 sprintf(t_mess,"%s",HELPDIR);
 strncpy(filerid,t_mess,FILE_NAME_LEN);
         
 dirp=opendir((char *)filerid);
    
 if (dirp == NULL)
   {
    write_str(user,"Directory information not found.");
    write_log(ERRLOG,YESTIME,"Directory information not found for directory \"%s\" in get_help_file %s\n",
    filerid,get_error());
    strcpy(last,"failed2");
    return last;
   }
    
 while ((dp = readdir(dirp)) != NULL)
   {
    sprintf(small_buff,"%s",dp->d_name);
    if (small_buff[0]!='.') {
       if (!strcmp(small_buff,name))
        {
         found = -1;
         break;
        }
       if ((instr2(0, small_buff, name, 1) != -1) && (found != -1))
        {
          strcat(z_mess, small_buff);
          strcat(z_mess, " ");
          found++;
          strcpy(last,small_buff);
        }
    }  
    small_buff[0]=0;
   }       /* End of while */
   
 if (found == -1) {
    small_buff[0]=0;
    strcpy(last,name);
    (void) closedir(dirp);
    return last;
    }
    
 if (found == 0) {
    (void) closedir(dirp);   
    strcpy(last,"failed");
    return last;
    }

if (found >1)
  {
   sprintf(mess, "String was not unique, matched: %s", z_mess);
   write_str(user,mess);
   (void) closedir(dirp);
   strcpy(last,"failed2");
   return last;
  }
 else {
  (void) closedir(dirp);
  return last;
  }
}


char *get_username_from_delims(char *str, int pos) {
int j=0;
static char a_mess[SAYNAME_LEN+2];

/* possible length plus 2 delimiters */
midcpy(str,a_mess,pos,SAYNAME_LEN+2);
for (j=0;j<strlen(a_mess);++j) {
        if (a_mess[j]==our_delimiters[0] && a_mess[j+1]==our_delimiters[1])
                break;
}
midcpy(a_mess,a_mess,0,j-1);
return a_mess;
}


char *get_reaction(char *inpstr) {

switch(PARSE_END_PUNC) {
case 0:
	return ""; break;
case 1:
	return (SAY_REACTION); break;
case 2:
	if (inpstr[strlen(inpstr)-1]=='?') return(QUESTION_REACTION);
	else if (inpstr[strlen(inpstr)-1]=='!') return(EXCLAMATION_REACTION);
	else return(SAY_REACTION);
	break;
default:
	return ""; break;
} /* end of switch */

return(SAY_REACTION);
}


/* Get length/size of output file */
int get_length(char *filen)
{
int size=0,n=0;
char line[257];
FILE *fp;

line[0]=0;
           
if (!(fp=fopen(filen,"rb"))) {
 write_log(ERRLOG,YESTIME,"Can't open binary file(rb) \"%s\" in get_length! %s\n",filen,     
 get_error());
 return -1;
}

while ((n = fread(line, 1, sizeof(line), fp)) != 0) {
        size+=n;
} /* end of while */
 
fclose(fp);

return size;
}


/* Get type of file requested by extension */
char *get_mime_type(char *filen)
{       
int i=0,found=0,count=1;
char ext[10];
char fileext[10];
char buf1[81];
char mime[80];  
char filename[256];
static char type[40];
FILE *tfp;
        
mime[0]=0;
buf1[0]=0;
ext[0]=0;
fileext[0]=0;
        
/* Find where extension ends to the left */
if (strstr(filen,".")) {
for (i=strlen(filen)-1;i!=0;--i) {
        if (filen[i]=='.') break;
   }
}
else {
        strcpy(type,"text/plain");
        return type;
}
 
/* Were not gonna take extra long extensions */
if ((strlen(filen)-i) > 9) {
        strcpy(type,"bad");
        return type;
        }
        
/* Copy the extension to memory */
midcpy(filen,ext,i+1,ARR_SIZE);   
i=0;
        
strtolower(ext);

sprintf(t_mess,"%s/%s",WEBFILES,web_opts[1]);
strncpy(filename,t_mess,FILE_NAME_LEN);
        
/* Open up the mime types file and read in each line, searching */
/* for a matching extension, and returning the associated type  */
if (!(tfp=fopen(filename,"r"))) {
        write_log(ERRLOG,YESTIME,"WWW: Couldn't open file \"%s\" in get_mime_type! %s\n",filename,get_error());
        strcpy(type,"text/plain");
        return type;
        }

while (fgets(buf1,80,tfp) != NULL) {
        buf1[strlen(buf1)-1]=0;
        if (!strlen(buf1)) continue;
        if (buf1[0]=='#') continue;
        sscanf(buf1,"%s",mime);
        remove_first(buf1);
        /* Count up spaces in extension part ot see how many we get */
        /* to check for a match */
        for (i=0;i<strlen(buf1);++i) {
        if (buf1[i]==' ') count++;
        } /* end of for */
        i=0;
        /* Now scan them in one by one and try to match */
        for (i=0;i<count;++i) {
        sscanf(buf1,"%s",fileext);
        remove_first(buf1);
        if (!strcmp(ext,fileext)) { strcpy(type,mime); found=1; break; }
        } /* end of for */
        i=0; count=1; mime[0]=0; fileext[0]=0;
        if (!found) {
          /* No match, bummer! well return a default */
          strcpy(type,"text/plain");
          }
        else {
          /* Ah ha! Jackpot! */
          break;
          }
        buf1[0]=0;
  } /* end of while */
fclose(tfp);
i=0;
found=0;
count=1;
        
return type;
}


/* get value of a particular key in a web request keypair */
char *get_value(char *keypair, char *ukey) {
int found1=0,a=0,b=0,done=0;   
static char keypair_temp[ARR_SIZE];
        
        while (!done) {
          for (;a<strlen(keypair);++a) {
             if (keypair[a]=='=') { found1=1; break; }
             }
          if (found1) {
          /* found = sign, check if key we're looking for */
          found1=0;
          midcpy(keypair,keypair_temp,b,a-1);
          if (!strcmp(keypair_temp,ukey)) done=1;
          else {
                /* no key here, go to ampersand and continue in loop */
                /* if no ampersand, end of keypair, return NULL  */
                a++;  
                for (;a<strlen(keypair);++a) {
                if (keypair[a]=='&') { found1=1; break; }
                }
                if (!found1) return NULL;
                else { found1=0; a++; b=a; continue; }
           } /* end of else */
          } /* end of found if */
          else {
                /* didn't find a = sign in the keypair! return NULL */
                return NULL;   
                }
        } /* end of while */
        
/* found key in keypair, get value for it up */
/* to ampersand or end of keypair            */
done=0;
a++;
b=a;
for (;a<strlen(keypair);++a) {
 if (keypair[a]=='&') { if (strcmp(ukey,"password")) break; }
}
          
midcpy(keypair,keypair_temp,b,a-1);
found1=0;
a=0;
b=0;
                
if (strlen(keypair_temp))
 return keypair_temp;
else if (!strlen(keypair_temp) && (!strcmp(ukey,"username") ||
!strcmp(ukey,"password") || !strcmp(ukey,"search") ||
!strcmp(ukey,"option") || !strcmp(ukey,"change") ) )
 return NULL;   
else
 return keypair_temp;
}


/*-----------------------------------*/
/* get a random number based on rank */ 
/*-----------------------------------*/
int get_odds_value(int user)
{
return( (rand() % ranks[ustr[user].super].odds) + 1 );
}


/*---------------------------------------------------------*/
/* get flags position                                      */
/*---------------------------------------------------------*/
int get_flag_num(char *inpstr)
{
char comstr[ARR_SIZE];
int f;

sscanf(inpstr,"%s",comstr);
if (strlen(comstr)<2) return(-1);

for (f=0; flag_names[f].text[0]; ++f)
  {
   if (!instr2(0,flag_names[f].text,comstr,0) )
     return f;
  }

return -1;
}


/*-----------------------------------------------------*/
/* Read an int with return from a file                 */
/*-----------------------------------------------------*/
int get_int(FILE *f)
{
int val1=0;
char temp[1000];

temp[0]=0;
if (fgets((char *)temp,1000,f) == NULL) {
        return 0;
        }

temp[strlen(temp)-1]=0;
sscanf(temp,"%d",&val1);
return val1;
}


/*-----------------------------------------------------*/
/* Read a char with return from a file                 */
/*-----------------------------------------------------*/
char get_onechar(FILE *f) {
char char1;
char temp[1000];

temp[0]=0;
if (fgets((char *)temp,1000,f) == NULL) {
        return 0;
        }
         
temp[strlen(temp)-1]=0;
sscanf(temp,"%c",&char1);
return char1;
}


/*-----------------------------------------------------*/
/* Read a long value with return from a file           */
/*-----------------------------------------------------*/
long get_long(FILE *f)
{
long val2=0;
char temp[1000];

temp[0]=0;
if (fgets((char *)temp,1000,f) == NULL) {
        return 0;
        }
         
temp[strlen(temp)-1]=0;
sscanf(temp,"%ld",&val2);
return val2;
}


/*-----------------------------------------------------*/
/* Read a string with return from a file               */
/*-----------------------------------------------------*/
void get_buf(FILE *f, char *buf2, int buflen)
{
char temp[ARR_SIZE];

temp[0]=0;
if (fgets((char *)temp,ARR_SIZE,f) == NULL) { 
        return;
        }
   
temp[strlen(temp)-1]=0;

if (temp[strlen(temp)-2]=='@' && temp[strlen(temp)-1]=='@')
	temp[strlen(temp)-2]=0;

if (buflen != -1) {
  if (strlen(temp) >= buflen)
    temp[buflen-1]=0;
 }

strcpy(buf2,temp);
}