The DECL Region is where you define your own functions in NLP++. It is delimited by @DECL and optionally by @@DECL. When present, it must be the first region in a pass file.
With VisualText 1.2 and later, functions can take parameters with the L local variable, as well as return values and call themselves recursively. In addition, you may use the special NLP++ variable references to pass information to and from functions. Depending on where a function is called from, it can appropriately handle the S, N, and X variable references in addition to the global, or G, variable reference. The return type of functions can vary dynamically -- in fact, the same function could return different types at different times. Multi-valued variables (i.e., arrays) can be used to have a function return multiple values.
Recursive functions work as expected. Also, you may call a function in an earlier pass than the pass in which it is defined (i.e., forward reference is ok). NLP++ functions have syntax similar to C/C++ functions.
<function definition> ::= <id> \( <local vars>  \) 
   \{ 
 <statements> \}
<local vars> ::= <local vars> \, <local var>  | 
 <local var>  | 
  (empty)
<local var> ::= 'L' \( <string> \)
<statement> ::= <return statement>
<return statement> ::= 'return' <expr> \;   | 
   'return' 
 \;
 
An example follows.
@DECL
myfunction(L("var"))    # Define your 
 function.
{
"output.txt" << "Entering 
 myfunction." << "\n";
G("tmp") = L("var"); 
   # 
 Assign value to global variable.
L("tmp") = L("var"); 
   # 
 Assign value to local variable.
return L("tmp") * 2;   # Return a value.
}
@CODE
"output.txt" << 
 myfunction(3) << "\n"; 
   # 
 Call your function.
@@CODE
This function call returns and outputs the number "6" to the file "output.txt".