/***************************************************************************
* File: alias.c an addition to CircleMUD *
* Usage: saving player's aliases *
* *
* a drop-in replacement for alias.c *
* written by Edward Almasy (almasy@axis.com) *
* *
* (original alias.c by Jeremy Hess and Chad Thompson) *
* *
* Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University *
* CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991. *
***************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "conf.h"
#include "sysdep.h"
#include "structs.h"
#include "utils.h"
#include "interpreter.h"
void get_arg(char *string, int argnum, char *arg);
void write_extra_data(struct char_data *ch)
{
FILE *ptFHndl=NULL;
char pcFileName[127];
char buf2[MAX_STRING_LENGTH]="\0";
get_filename(GET_NAME(ch), pcFileName, EDATA_FILE);
unlink(pcFileName);
ptFHndl = fopen(pcFileName,"w");
if (!ptFHndl) return;
if (EMAIL(ch))
sprintf(buf2+strlen(buf2), "EMAIL %s\n", EMAIL(ch));
if (POOFIN(ch))
sprintf(buf2+strlen(buf2), "POOFIN %s\n", POOFIN(ch));
if (POOFOUT(ch))
sprintf(buf2+strlen(buf2), "POOFOUT %s\n", POOFOUT(ch));
fputs(buf2, ptFHndl);
fclose(ptFHndl);
}
void read_extra_data(struct char_data *ch)
{
FILE *ptFHndl=NULL;
char pcFileName[127];
char buf1[MAX_STRING_LENGTH]="\0";
char buf2[MAX_STRING_LENGTH]="\0";
get_filename(GET_NAME(ch), pcFileName, EDATA_FILE);
ptFHndl = fopen(pcFileName, "r");
if (!ptFHndl) return;
if (EMAIL(ch))
free(EMAIL(ch));
if (POOFIN(ch))
free(POOFIN(ch));
if (POOFOUT(ch))
free(POOFOUT(ch));
while (!feof(ptFHndl))
{
fgets(buf1, 512, ptFHndl);
get_arg(buf1, 1, buf2);
for (;buf1[strlen(buf1)-1]=='\r' || buf1[strlen(buf1)-1]=='\n';) buf1[strlen(buf1)-1]='\0';
if (!strcmp("EMAIL", buf2))
EMAIL(ch)=strdup(buf1+strlen(buf2)+1);
if (!strcmp("POOFIN", buf2))
POOFIN(ch)=strdup(buf1+strlen(buf2)+1);
if (!strcmp("POOFOUT", buf2))
POOFOUT(ch)=strdup(buf1+strlen(buf2)+1);
}
fclose(ptFHndl);
}
void write_aliases(struct char_data *ch)
{
FILE *ptFHndl;
char pcFileName[127];
struct alias *pstAliasRec;
char buf2[MAX_STRING_LENGTH];
write_extra_data(ch);
/* get name of alias file */
get_filename(GET_NAME(ch), pcFileName, ALIAS_FILE);
/* remove old alias file */
unlink(pcFileName);
if (!GET_ALIASES(ch))
return;
/* open new alias file */
ptFHndl = fopen(pcFileName,"w");
/* while there are alias records left */
pstAliasRec = GET_ALIASES(ch);
while (pstAliasRec)
{
sprintf(buf2, "%s\n%s\n%d\n", pstAliasRec->alias, pstAliasRec->replacement, pstAliasRec->type);
fputs(buf2, ptFHndl);
/* move to next alias record */
pstAliasRec = pstAliasRec->next;
}
/* close new alias file */
fclose(ptFHndl);
}
void read_aliases(struct char_data *ch)
{
char pcFileName[127];
FILE *ptFHndl;
struct alias *pstAliasRec, *pstLast=NULL;
extern void free_alias (struct alias *a);
char buf[MAX_STRING_LENGTH];
read_extra_data(ch);
/* get alias file name */
get_filename(GET_NAME(ch), pcFileName, ALIAS_FILE);
ptFHndl = fopen(pcFileName, "r");
if (ptFHndl == NULL)
return;
while ((pstAliasRec=GET_ALIASES(ch))!=NULL) {
GET_ALIASES(ch)=(GET_ALIASES(ch))->next;
free_alias(pstAliasRec);
}
CREATE(pstAliasRec, struct alias, 1);
GET_ALIASES(ch) = pstAliasRec;
/* while not end of alias file */
while (!feof(ptFHndl))
{
fgets(buf, 512, ptFHndl);
if (feof(ptFHndl)) break;
while(buf[strlen(buf)-1]=='\n' || buf[strlen(buf)-1]=='\r')
buf[strlen(buf)-1]='\0';
pstAliasRec->alias=str_dup(buf);
fgets(buf, 512, ptFHndl);
if (feof(ptFHndl)) break;
while(buf[strlen(buf)-1]=='\n' || buf[strlen(buf)-1]=='\r')
buf[strlen(buf)-1]='\0';
pstAliasRec->replacement=str_dup(buf);
fgets(buf, 512, ptFHndl);
while(buf[strlen(buf)-1]=='\n' || buf[strlen(buf)-1]=='\r')
buf[strlen(buf)-1]='\0';
pstAliasRec->type=atoi(buf);
CREATE(pstAliasRec->next, struct alias, 1);
pstLast=pstAliasRec;
pstAliasRec = pstAliasRec->next;
}
if (pstAliasRec)
free_alias(pstAliasRec);
if (pstLast)
pstLast->next=NULL;
/* close alias file */
fclose(ptFHndl);
}