In GT.M, calls to C language routines may be made with the following syntax:
DO &[packagename.]name[^name][parameter-list]
or as an expression element,
$&[packagename.]name[^name][parameter-list]
Where packagename, like the name elements is a valid M name. Because of the parsing conventions of M, the identifier between the ampersand (&) and the optional parameter-list has precisely constrained punctuation - a later section describes how to transform this into a more richly punctuated name should that be appropriate for the called function. While the intent of the syntax is to permit the name^name to match an M labelref, there is no semantic implication to any use of the up-arrow (^). For more information on M names, labelrefs and parameter-lists, refer toChapter 5: “General Language Features of M”.
Example:
;Call external routine rtn1 DO &rtn1 ;Call int^exp in package "mathpak" with one parameter: the expression val/2 DO &mathpak.int^exp(val/2) ;Call the routine sqrt with the value "2" WRITE $&sqrt(2) ;Call the routine get parms, with the parameter "INPUT" and the variable "inval", passed by reference. DO &getparms("INPUT",.inval) ;Call program increment in package "mathpak" without specifying a value for the first argument and the variable "outval" passed by reference as the second argument. All arguments which do not specify a value translate to default values in the increment program. Do &mathpak.increment(,.outval)
The called routines follow the C calling conventions. They must be compiled as position independent code and linked as a shareable library.