Re: Question about find_skill_num()

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


On Tue, 22 Sep 1998, Angus Mezick wrote:

>Whoa, just getting back from vaca George? ;)

No, I had the post queued for further investigation because I didn't have
an answer at the time. :)

>Well, here is my find_skill_num()  function.  It will match cast 'm m' to
>magic missile.  Woo Woo!  Sorry about the indentation, C&P screwed it up a
>little.  I reverted my spell code to use:

>   {"armor",  30, 10, 2, POS_FIGHTING,
>    TAR_CHAR_ROOM, NON_VIOLENT, MAG_AFFECTS,
>    UU, 8,UU,10,UU,12,UU,UU,UU,15,15,UU,UU,UU,UU,UU,UU,UU,UU,
>    IS_SPELL,5},

>because we like this format better, so you might need to change some things.
>(the last int is casting_time and the IS_SPELL is for sorting)

What is UU? A #define for 0, -1, or something?

>int find_skill_num(char *name)
>{
[...]
>   char *first=get_buffer(256);
>   char *first2=get_buffer(256);
>
>   if(*name=='!')
>      return -1;

It's better to get the buffers when you need them, because the previous
line above would cause them to be forgotten.

>   for(skindex=1;skindex<MAX_SPELLS;skindex++)
>      {
>      if (is_abbrev(name, spells[spell_sort_info[skindex]].spell_name))
>       {
>       release_buffer(first2);
>       release_buffer(first);
>       return spell_sort_info[skindex];
>       }
>
>      ok = 1;
[...]
Which would also facilitate the removal of the two releases above.

>      temp = any_one_arg(spells[spell_sort_info[skindex]].spell_name, first);
>      temp2 = any_one_arg(name, first2);
>      while (*first && *first2 && ok)
>       {
>       if (!is_abbrev(first2, first))
>          ok = 0;
>       temp = any_one_arg(temp, first);
>       temp2 = any_one_arg(temp2, first2);
>       }
>
>      if (ok && !*first2)
>       {
>       release_buffer(first2);
>       release_buffer(first);
>       return spell_sort_info[skindex];
>       }
[...]
And if you used a temporary integer here for the return value, i.e.:
  if (ok && !*first) {
    ret = spell_sort_info[skindex];
    break;
  }

>      }
>   release_buffer(first2);
>   release_buffer(first);
>   return -1;
>}

Then you could change that line to 'return ret;', have 'ret' initialized to
-1 at the top of the function and just fall through to here.  That would
reduce you to only 2 release_buffer() calls for 2 get_buffer() calls.

This is largely nit-picking and looks fine otherwise.

--
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