Alias.c Replacement

From: Edward Almasy (almasy@axis.com)
Date: 12/14/95


Attached is a drop-in replacement for the alias.c available on the
Circle FTP site.  It does not have a limit on the upper size of an
alias, and there are no memory leaks.  The code also (partially)
conforms to our in-house coding standards, so it should be relatively
easy to modify and maintain.

I'll also upload this to the FTP site as newalias.c.


----- cut here ---------------------------------------------------------------
/***************************************************************************
*  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 "structs.h"
#include "utils.h"
#include "interpreter.h"


void write_aliases(struct char_data *ch)
{
    FILE         *ptFHndl;
    char          pcFileName[127];
    struct alias *pstAliasRec;
    char         *pcRepStart;
  
    /* get name of alias file */
    get_filename(GET_NAME(ch), pcFileName, ALIAS_FILE);
  
    /* remove old alias file */
    unlink(pcFileName);
  
    /* if no aliases */
    if (!GET_ALIASES(ch))
        /* abort */
        return;
  
    /* open new alias file */
    ptFHndl = fopen(pcFileName,"wt");
  
    /* while there are alias records left */
    pstAliasRec = GET_ALIASES(ch);
    while (pstAliasRec)
    {
        /* write out command */
        fprintf(ptFHndl, "%d\n", strlen(pstAliasRec->alias)); 
        fprintf(ptFHndl, "%s\n", pstAliasRec->alias);
       
        /* remove leading spaces on replacement */
        pcRepStart = pstAliasRec->replacement; 
        while (*pcRepStart == ' ') pcRepStart++;
        
        /* write out replacement */
        fprintf(ptFHndl, "%d\n", strlen(pcRepStart)); 
        fprintf(ptFHndl, "%s\n", pcRepStart);
        fprintf(ptFHndl, "%d\n", pstAliasRec->type);
       
        /* 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;
    int           iLen;
    
    /* get alias file name */
    get_filename(GET_NAME(ch), pcFileName, ALIAS_FILE);
    
    /* open alias file */
    ptFHndl = fopen(pcFileName, "r");
    
    /* if file open failed */
    if (ptFHndl == NULL)
        /* abort */
        return;
    
    /* create initial alias record */
    CREATE(pstAliasRec, struct alias, 1);
    GET_ALIASES(ch) = pstAliasRec;

    /* while not end of alias file */
    while (!feof(ptFHndl))
    {
        /* read in length of command */
        fscanf(ptFHndl, "%d\n", &iLen);

        /* allocate command string */
        CREATE(pstAliasRec->alias, char, (iLen + 2));

        /* read in command */
        fgets(pstAliasRec->alias, (iLen+1), ptFHndl);

        /* read in length of replacement */
        fscanf(ptFHndl, "%d\n", &iLen);

        /* allocate replacement string */
        CREATE(pstAliasRec->replacement, char, (iLen + 3));
        *pstAliasRec->replacement = ' ';;

        /* read in replacement */
        fgets((pstAliasRec->replacement + 1), (iLen+1), ptFHndl);

        /* read in type */
        fscanf(ptFHndl, "%d\n", &pstAliasRec->type);

        /* if there are aliases left to read */
        if (!feof(ptFHndl))
        {
            /* create new alias record and link into chain */
            CREATE(pstAliasRec->next, struct alias, 1);
            pstAliasRec = pstAliasRec->next;
            pstAliasRec->next = NULL;
        }
    }

    /* close alias file */
    fclose(ptFHndl);
} 

----- cut here ---------------------------------------------------------------


 \_\_\_     _/ \_\_\_  axis data: specializing in online system setup & design
 \_  \_     _/ \_  \_    Edward Almasy                       almasy@axis.com  
 \_\_\_     _/ \_\_\_    President: Axis Data       Proprietor: NineJackNine
     \_ _/  _/     \_    608-256-5732 (voice)            608-256-5697 (data)
 \_\_\_ _/_/_/ \_\_\_  9jack9: on the bleeding edges of culture and technology



This archive was generated by hypermail 2b30 : 12/07/00 PST