Before and After

From: George (greerga@CIRCLEMUD.ORG)
Date: 09/22/98


Just a comparison of what can be accomplished when you try to simplify
code.

Before:

void write_aliases(struct char_data *ch)
{
  FILE *file;
  char fn[127],*buf;
  struct alias *temp;
  int length;

  get_filename(GET_NAME(ch),fn,ALIAS_FILE);
  unlink(fn);
  if( !GET_ALIASES(ch) )
    return;

  file = fopen(fn,"wt");

  temp = GET_ALIASES(ch);

  while( temp )
  {
    length = strlen(temp->alias);
    fprintf(file,"%d\n",length);
    fprintf(file,"%s\n",temp->alias);
    buf = strdup(temp->replacement);
    while( *++buf == ' ' );
    length = strlen(buf);
    fprintf(file,"%d\n",length);
    fprintf(file,"%s\n",buf);
    fprintf(file,"%d\n",temp->type);
    temp = temp->next;
  }

  fclose(file);
}

After:

void write_aliases(struct char_data *ch)
{
  FILE *file;
  char fn[MAX_STRING_LENGTH];
  struct alias_data *temp;

  get_filename(GET_NAME(ch), fn, ALIAS_FILE);
  remove(fn);

  if (GET_ALIASES(ch) == NULL)
    return;

  if ((file = fopen(fn, "w")) == NULL) {
    log("SYSERR: Couldn't save aliases for %s in '%s'.", GET_NAME(ch), fn);
    return;
  }

  for (temp = GET_ALIASES(ch); temp; temp = temp->next)
    fprintf(file, "%d\n%s\n"    /* Alias */
                  "%d\n%s\n"    /* Replacement */
                  "%d\n",       /* Type */
                strlen(temp->alias), temp->alias,
                strlen(temp->replacement) - 1, temp->replacement + 1,
                temp->type);

  fclose(file);
}

Before:

void read_aliases(struct char_data *ch)
{
  FILE *file;
  char fn[127];
  struct alias *t2;
  int length;
  char temp_buf[127],buf[127];

  get_filename(GET_NAME(ch),fn,ALIAS_FILE);

  file = fopen(fn,"r");

  if( !file )
    return;

  CREATE(GET_ALIASES(ch),struct alias,1);
  t2 = GET_ALIASES(ch);
  do
  {
    fscanf(file,"%d\n",&length);
    fgets(buf,length+1,file);
    t2->alias=strdup(buf);
    fscanf(file,"%d\n",&length);
    fgets(buf,length+1,file);
    strcpy(temp_buf," ");
    strcat(temp_buf,buf);
    t2->replacement=strdup(temp_buf);
    fscanf(file,"%d\n",&length);
    t2->type = length;
    if( !feof(file) ){
      CREATE(t2->next,struct alias,1);
      t2 = t2->next;
    }
  } while( !feof(file) );

  fclose(file);
}

After:

void read_aliases(struct char_data *ch)
{
  FILE *file;
  char xbuf[MAX_STRING_LENGTH];
  struct alias_data *t2;
  int length;

  get_filename(GET_NAME(ch), xbuf, ALIAS_FILE);

  if ((file = fopen(xbuf, "r")) == NULL) {
    if (errno != ENOENT) {
      log("SYSERR: Couldn't open alias file '%s' for %s.", xbuf, GET_NAME(ch));
      perror("SYSERR: read_aliases");
    }
    return;
  }

  CREATE(GET_ALIASES(ch), struct alias_data, 1);
  t2 = GET_ALIASES(ch);

  for (;;) {
    /* Read the aliased command. */
    fscanf(file, "%d\n", &length);
    fgets(xbuf, length + 1, file);
    t2->alias = str_dup(xbuf);

    /* Build the replacement. */
    fscanf(file, "%d\n", &length);
    *xbuf = ' ';                /* Doesn't need terminated, fgets() will. */
    fgets(xbuf + 1, length + 1, file);
    t2->replacement = str_dup(xbuf);

    /* Figure out the alias type. */
    fscanf(file, "%d\n", &length);
    t2->type = length;

    if (feof(file))
      break;

    CREATE(t2->next, struct alias_data, 1);
    t2 = t2->next;
  };

  fclose(file);
}

You'll note the writing is much easier as well as the replacement reading.

--
George Greer, greerga@circlemud.org | Genius may have its limitations, but
http://mouse.van.ml.org/   (mostly) | stupidity is not thus handicapped.
http://www.van.ml.org/CircleMUD/    |                  -- Elbert Hubbard


     +------------------------------------------------------------+
     | Ensure that you have read the CircleMUD Mailing List FAQ:  |
     | http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
     +------------------------------------------------------------+



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