Additional Topics > External Development Guide > Adding System Routines > System Routine Interface

# System Routine Interface

All IDL system routines must supply the same calling interface to the system, differing only in that system functions must return an IDL_VPTR to the IDL_VARIABLE that contains the result, while system procedures do not return anything. Typical system routine definitions are:

IDL_VPTR my_function(int argc, IDL_VPTR argv[], char *argk)

void my_procedure(int argc, IDL_VPTR argv[], char *argk)

System routines that do not accept keywords are called with two arguments:

### argc

The number of elements in argv.

### argv

An array of IDL_VPTRs. These point to the IDL_VARIABLEs which comprise the arguments to the function.

System routines that accept keywords are called with an additional third argument:

### argk

The keywords which were present when the routine was called. argk is an opaque object—the called routine is not intended to understand its contents. argk is provided to the function IDL_KWProcessByOffset(), which processes the keywords in a standard way. For more information on keywords, see IDL Internals: Keyword Processing.