--
if (GET_ROOM_SPEC(ch->in_room) != NULL)
if (GET_ROOM_SPEC(ch->in_room) (ch, world + ch->in_room, cmd, arg))
return 1;
--
If you break it apart, it looks like this:
GET_ROOM_SPEC(ch->in_room) = get the special for this room - this returns a pointer
to a function.
(ch, world + ch->in_room, cmd, arg) = the parameter list for the afore-mentioned
function.
So, for example, if the char is in room 1 and the special for that room is
do_die_a_nasty_death, then the it calls the function:
do_die_a_nasty_death(ch, world+1, cmd, arg)
If the spec_proc function do_die_a_nasty_death returns true, then the
if(GET_ROOM_SPEC(ch->in_room)... evaluates true and the whole procedures falls
through to the next line (return 1;)
Clearer pseudo-code for this procedure would like something like:
void *room_function;
int room_spec_proc_occurred = FALSE;
room_function = GET_ROOM_SPEC(ch->in_room);
if (room_function)
{
room_spec_proc_occurred = room_function(ch, world+ch->in_room, cmd, arg);
if (room_spec_proc_occurred)
return 1;
}
Hope that helps the understanding part, but it doesn't help the problem that it
doesn't work for WinNT4.0 using Symantec C++ 7.21; the code is fine and is the
standard stock Circle...
Derek Karnes
--
Charles Canning wrote:
>
> Hi everyone,
>
> I could be be totally wrong in this case but I don't see how this code
> would compile under any C compiler.
>
> >
> > -- SNIP --
> >
> > /* special in room? */
> > if (GET_ROOM_SPEC(ch->in_room) != NULL)
> > if (GET_ROOM_SPEC(ch->in_room) (ch, world + ch->in_room, cmd, arg))
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>
> What is this supposed to do? I do not understand?
>
> > return 1;
--
\ | /
\ /---------------------\ /
-- dkarnes@mystech.com --
/ \---------------------/ \
/ | \
+-----------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://cspo.queensu.ca/~fletcher/Circle/list_faq.html |
+-----------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/07/00 PST