======================================================================

There are a number of ways in which you may call a function. The 
following methods are the most common;

%^CYAN%^%^BOLD%^-----< The -> operator >-----

%^MAGENTA%^%^BOLD%^<object>%^RESET%^ -> %^ORANGE%^%^BOLD%^<function>%^RESET%^( %^BLUE%^%^BOLD%^<args list>%^RESET%^ );

The %^MAGENTA%^%^BOLD%^<object>%^RESET%^ is the object and/or file that holds the function you
wish to access. The %^ORANGE%^%^BOLD%^<function>%^RESET%^ is the name of the function your trying
to access. The %^BLUE%^%^BOLD%^<args list>%^RESET%^ is any and all variables that you wish to
pass into the function. You must have the same number of args being
passed into the function as it has declared in it's arg's list. The
exception to this rule is if the varargs qualifier was used with the
function. Please see %^CYAN%^%^BOLD%^coding varargs%^RESET%^ and %^CYAN%^%^BOLD%^coding functions%^RESET%^ for more
information on actually coding functions and using varargs.

%^RED%^%^BOLD%^SAMPLES ---

       my_race=this_object()->query_race();
       my_ma=this_object()->query_skills("magic attack");

      if(this_object()->query_race() == "elf") set_name("Bilbo");

As you can see, there are many ways you can use the -> operator
to call a function. The important thing to remember is a function
always returns a VALUE that you can then store into a variable
and/or test with logical tests, etc.

%^CYAN%^%^BOLD%^-----< Calling functions with efuns >-----

There are three efuns that can be used to call a function.
Please see the %^CYAN%^%^BOLD%^man call_other%^RESET%^, %^CYAN%^%^BOLD%^man evaluate%^RESET%^ and %^CYAN%^%^BOLD%^man call_out%^RESET%^
for information about these efuns and how to use them for
calling functions.

%^CYAN%^%^BOLD%^-----< Calling functions with function pointers >-----

First thing you must be familiar with before reading this section
is the function datatype. Please see %^CYAN%^%^BOLD%^coding function%^RESET%^ for that info.

Lets say we have done the following declaration;

function x=(: this_object(), "query_race" :);

We now have a variable that points at the function called query_race
inside of the object returned by the efun this_object. To use this
pointer, you would only have to put it in the code. It will return the
value from the function.

It gets a little messier when you wish to pass in arguements. The
(* function)() operator is used to call functions with args.

       if( (*x)("elf") ) set_name("bilbo");

Lets assume that the function variable x from above is being used
with the if test above. Let us further assume that the query_race()
function will take in a string and test it against the setting stored
for the object's race, returning a 1 or 0 for true or false.

What then happens in the if test is that the x function variable
is "dereferanced by the (*f)() operator and the arguement is
passed using the () next to it. The test then uses the returned
value to know if the set_name() is run or not.

%^CYAN%^%^BOLD%^-----< Calling via inheritance >-----

You are already familiar with this version of calling.
Any time you use inherit, you are loading your object with functions
and variables from another object. You then can call these functions
directly from your object. All of the mudlib inherits work in this
manner. EX: You inherit ROOM and then you can set_exits(),
set_items(), set_smell(), etc.

=================================================================

Ironman
