Re: Function Pointers?

From: Jon Barrett (mixtli@SINFO.NET)
Date: 02/18/98


Thanks, Joachim.  I had to tweak it a little bit, but it really pointed
me in the right direction.  It works great now, so thanks a lot for the
help.

Joachim Pileborg wrote:
>
> At 17-Feb-98, Jon Barrett wrote:
>
> Add the following line somewhere near the top of spells.h:
> typedef void (*spell_function)(int, struct char_data *, struct char_data *,
> struct obj_data *, int);
>
> > struct spell_info_type {
> >    byte min_position;   /* Position for caster   */
> >    int mana_min;        /* Min amount of mana used by a spell (highest lev)
> */
> >    int mana_max;        /* Max amount of mana used by a spell (lowest lev)
> */
> >    int mana_change;     /* Change in mana used by spell from lev to lev */
> >    bool is_innate[NUM_RACES];
> >    int min_level[NUM_CLASSES];
> >    byte violent;
> >    int targets;         /* See below for use with TAR_XXX  */
> >    void (*spell_function)
> >         (int level, struct char_data *ch, struct char_data *victim, struct
> > obj_data *obj, int spellnum);
> > };
>
> Change the spell_function definition to the following:
>    spell_fun spell_function;
>
> > void spello(int spl, int max_mana, int min_mana, int mana_change, int
> > minpos,
> >                  int targets, int violent, void (*func))
>
> Change the "void (*func)" thing to: spell_fun func
>
> > {
> >   int i;
>
> >   for (i = 0; i < NUM_CLASSES; i++)
> >     spell_info[spl].min_level[i] = LVL_IMMORT;
> >   spell_info[spl].mana_max = max_mana;
> >   spell_info[spl].mana_min = min_mana;
> >   spell_info[spl].mana_change = mana_change;
> >   spell_info[spl].min_position = minpos;
> >   spell_info[spl].targets = targets;
> >   spell_info[spl].violent = violent;
> >   *spell_info[spl].spell_function = func;  //ERROR points here
> > }
>
> And finaly change the last assignment to:
>    spell_info[spl].spell_function = func;
>
> This should work (it is untested though).
>
> / Joachim


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