7 Subprograms
In order to delete the first line of a subprogram, the SUB or DEF FN statement, the entire subprogram must be deleted. To delete an entire subprogram, use the DEL SUB or DEL FN statements:
DEL SUB subprogram name [TO END]
or
DEL FN function name [$] [TO END]
Each statement deletes the named subprogram or function from memory. If TO END is specified, all successive subprograms and functions are also deleted.
The SUB statement can be edited as long as it remains a SUB statement or is changed to a DEF FN.
Here are some valid examples:
20 COM A(4,4),B,INTEGER C,D(3,3),E$[28],F$(2,4)[56] . . . 150 END 160 SUB Payroll 170 OPTION BASE 1 180 COM X(*),Y,INTEGER Z,Q(1:3,1:3) . . . 220 SUBEND 230 DEF FNAccounts(X,Y,Z) 240 COM I(1:4,1:4)Here is an invalid example using the same main program COM statement:
300 SUB Total 310 COM M(4,4),N . . . . 350 SUB Price 360 OPTION BASE 1 There is no item corresponding 370 COM L(4,4),M,Q(3,3) to array Q, causing error 47.Arrays can be specified in a subprogram COM statement using an array identifier (see line 180 above). A variable cannot be an item in a subprogram COM statement, however, if it is also a formal parameter. For example, if the following is executed, Error 12 occurs:
400 SUB Sub(X,Y,Z$) 410 COM A(2,2),XSubprograms may also consist of any of the other variable-declarative statements--DIM, REAL, SHORT, INTEGER and DINTEGER. The variables declared, however, may not be in the subprogram COM statement or the formal parameter list.
Here is a valid example:
450 SUB X(X,Y(*),Z$,A) 460 COM B(3,3),C$[20],D,SHORT E 470 DIM F(5,2),G$(2,2)[50] 480 SHORT H,I(3,7,2)Here is an invalid example:
520 DEF FNTaxes(A,B(*),C$,D) 530 COM E(3,4),INTEGER F 540 DIM C$[20],E(2,2)C$ and E were already defined, so ERROR 12 IN LINE 540 WITH C$ will occur.
All variables in a subprogram that are not part of the formal parameter list or the COM statement are known as local variables and cannot be accessed from any other program segment. Storage of local variables is temporary; the memory space is returned to user read/write memory upon return to the calling program. All variable names in a subprogram are independent of variables with the same name in other program segments or other subprograms.
File numbers can be passed to a subprogram in the parameter list. For example, the following statements assign DATA to file number 3:
10 ASSIGN #1 TO "DATA" 20 CALL Routine(#1) . . . 60 SUB Routine(#3)Any operations, such as PRINT#, which involve file #3 in the above subprogram will affect file #1 (DATA) in the calling program. The data pointers in file #1 are maintained in file #3; then the status of file #3 is passed to file #1, and vice versa, when the subroutine is exited.
100 CALL X(#4) . . . 140 SUB X(#2) 150 ASSIGN #2 TO "Payroll"When control returns to the calling program, file #4 is still assigned to the file Payroll.
A file can also be implicitly buffered in this manner:
200 CALL Data(#4) . . . . 240 SUB Data(#2) 250 ASSIGN #2 TO "Payroll"When control returns to the calling program, file #4 is still assigned to Payroll and still buffered.
If a file is opened in a subprogram, but not passed as a parameter or in COM, it is automatically closed upon return to the calling program. See page 195 for an explanation of ASSIGN.
Note that if a variable in a COM declaration is wrong, any variables which follow will also be disregarded.