SUB...END SUB Statement Details Syntax SUB globalname[parameterlist][STATIC] [statements] [EXIT SUB] [statements] END SUB Argument Description globalname A variable name up to 40 characters long. This name cannot appear in any other FUNCTION or SUB statement in the same program or the user library. parameterlist Contains the names of simple variables and arrays passed to the subprogram when the SUB is invoked. Each name is separated from the preceding name by a comma. Note that these variables and arrays are passed by reference, so any change to an argument's value in the subprogram also changes its value in the calling program. See below for a complete description of the syntax. A SUB parameterlist has the following syntax: variable[()] [AS type][, variable[( )] [AS type]]... - A variable is a BASIC variable name. Previous versions of BASIC required the number of dimensions in parentheses after an array name. In QuickBASIC, the number of dimensions is not required. - The argument type is the type of the variable. The type argument can be INTEGER, LONG, SINGLE, DOUBLE, STRING, or a user-defined type. You may not use a fixed-length string, or an array of fixed-length strings, as a parameter. However, you may use a simple fixed-length string as an argument in a CALL statement-QuickBASIC converts a simple fixed-length string argument to a variable-length string argument before passing the string to a SUB. A subprogram is a separate procedure, like a FUNCTION. However, unlike a FUNCTION, a SUB cannot be used in an expression. SUB and END SUB mark the beginning and end of a subprogram. You may also use the optional EXIT SUB statement to exit a subprogram. Subprograms are called by a CALL statement or by using the subprogram name followed by the argument list. See the entry for the CALL statement. QuickBASIC subprograms can be recursive--they can call themselves to perform a given task. See the second example below. The STATIC attribute indicates that all variables local to the SUB are STATIC--their values are saved between calls. Using the STATIC keyword slightly increases execution speed. STATIC is not usually used with recursive subprograms. See the examples below. Any subprogram variables or arrays are considered local to that sub- program, unless they are explicitly declared as shared variables in a SHARED statement. You cannot define SUB procedures, DEF FN functions, or FUNCTION procedures inside a SUB procedure. Note: You cannot use GOSUB, GOTO, or RETURN to enter or exit a subprogram.