OPTIONAL
SYNOPSIS
        string process_string(string str)

DESCRIPTION
        Searches string str for occurences of a "value by function
        call", which is an implicit function call surrounded by @@. See
        "value_by_function_call" in the principles section.

        The value should contain a string like this:
        @@function[:filename][|arg|arg]@@

        <function> must return a string or else the string which should be
        processed will be returned unchanged.

        process_string() does not recurse over returned
        replacement values. If a function returns another function
        description, that description will not be replaced.

        Both the filename and the args are optional.

        Consecutive function calls can be written adjacent:

          @@function1@@function2@@

EXAMPLE
        string foo(string str) {
           return "ab"+str+"ef";
        }
        void func() {
           write(process_string("@@foo|cd@@")+"\n");
        }

        The function func() will print out the string "abcdef".

BUGS
        Using process_string() can lead to severe security problems.

HISTORY
        Because of the security problems, process_string() is an
        optional efun since 3.2.1@34
        LDMud 3.3.160 removed the undocumented 'feature' that a function call
        declaration could be terminated by a space. In turn this now allows
        the use of arguments with spaces.

SEE ALSO
        notify_fail(E), closures(LPC), get_bb_uid(M)
