PROCEDURE Command
Creates a user-defined procedure in a program file. There are two versions of the syntax.
PROCEDURE ProcedureName
[ LPARAMETERS parameter1 [ ,parameter2 ] ,... ]
Commands
[ RETURN [ eExpression ] ]
[ENDPROC]
PROCEDURE ProcedureName( [ parameter1 [ AS para1type ][ ,parameter2
[AS para2type ] ] ,...] ) [ AS returntype ]
Commands
[ RETURN [ eExpression ] ]
[ENDPROC]
Parameters
PROCEDURE ProcedureName
Designates the beginning of a user-defined procedure and specifies the name of the procedure. ProcedureName must begin with a letter or underscore and can contain up to 254 characters with any combination of letters, numbers, and underscores.[ LPARAMETERS parameter1 [ , parameter2] ,... ] ]
Assigns data from the calling program to local variables or arrays. You can also use the PARAMETERS keyword instead of LPARAMETERS to accept privately scoped parameters. You can pass a maximum of 26 parameters to a procedure.For more information, see LPARAMETERS Command and PARAMETERS Command.
( [ parameter1[ AS para1type][ , parameter2[ AS para2type] ],...] )
Assigns data from the calling program to local variables or arrays. You can use the AS para1type clause to specify the data type of the variable.Note
Including the parameters inside parentheses (()) immediately following the procedure name indicates that the parameters are locally scoped to the procedure.
[ AS returntype]
Specifies the data type of the return value.You can use the AS clause to implement strong typing. For more information, see How to: Implement Strong Typing for Class, Object, and Variable Code.
Commands
Specifies the Visual FoxPro commands to execute when executing the function.[ RETURN [ eExpression] ]
Returns control to the calling program or to another program. eExpression can specify a return value.Note
You can include the RETURN command anywhere in the procedure to return control to the calling program or to another program and to define a value returned by the procedure. If you do not include the RETURN command, Visual FoxPro executes an implicit RETURN automatically when the procedure quits. If the RETURN command does not include a return value or if an implicit RETURN is executed, Visual FoxPro assigns True (.T.) as the return value. For more information, see RETURN Command.
[ ENDPROC ]
Indicates the end of the PROCEDURE structure.Note
The ENDPROC keyword is optional because the function quits when it encounters another PROCEDURE command, a FUNCTION command, or the end of the program file.You cannot include normal executable program code following user-defined procedures in a program file. Only other user-defined procedures, functions, and class definitions can follow the first PROCEDURE or FUNCTION command in the file.
Remarks
By default, parameters are passed to procedures by value. For information about passing parameters to procedures by reference, see SET UDFPARMS Command.
When you issue the DO command with a procedure name, Visual FoxPro searches for the procedure in the following order:
The file containing the DO command.
The current database.
Procedure files opened with SET PROCEDURE.
For more information, see SET PROCEDURE Command.
Program files in the execution chain.
Visual FoxPro searches program files in order from the most recently executed program to the first program executed.
A standalone program file.
If a matching program file is found, Visual FoxPro executes the program. Otherwise, Visual FoxPro generates an error message.
To execute a procedure in a specific file, include the IN clause in the DO command.
For information about use of the PROCEDURE command when creating classes, see DEFINE CLASS Command.
Example
The following example illustrates how a procedure can be called to accomplish a discrete task such as making an entry in a log file. The procedure opens the log file (which is assumed to exist in the example), constructs an entry based in information passed in parameters, writes the entry out, and closes the file. The procedure is called with a DO command similar to the one at the top of the program.
DO MakeLogEntry WITH "Logged in", "jsmith"
PROCEDURE MakeLogEntry
PARAMETERS message, username
pnHandle = FOPEN("LOG2.TXT",2) && Assume the file exists
pnSize = FSEEK(pnHandle,0,2) && Move to end of file
logEntry = dtoc(date())+","+time()+","+username+","+message
=FPUTS(pnHandle, logEntry)
=FCLOSE(pnHandle) && Close file
ENDPROC
The following example shows how a procedure can be called to return a value.
SET CENTURY ON
? longdate(({^1998-02-16})) && Displays Monday, February 16, 1998
PROCEDURE longdate
PARAMETER mdate
RETURN CDOW(mdate) + ", " + MDY(mdate)
ENDPROC
See Also
Reference
SYS(16) - Executing Program File Name