APPX is the Premier Development and Runtime Environment for Business Application Software
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) ILF (Integrated Language Facility) :
GOSUB/COPY/SUBR usage considerations?
COPY and GOSUB are almost identical in that they both bring the code inline 
to your process.  In fact, when you code something like:


 GOSUB    XXX SUBROUTINE


where SUBROUTINE is *not* a label in the current event point, then APPX will 
create


 LABEL    SUBROUTINE
 COPY     XXX SUBROUTINE
 RETURN


The major difference between COPY and GOSUB is that GOSUB has its own set of 
T/F flags, whereas COPY just copies the requested code into the event point 
at that location, and if there are any T/F flags involved, the copied routine 
better know about them.  Example:


   READ   <some file>
F  COPY   <routine a>


The code in routine <routine a> will have the F flag set in the first position 
when it starts running, and any T/F flags it changes will be visible to the 
code following the COPY.  If the copy was a GOSUB instead, then in <routine 
a>, the first T/F flag would not be set, and any T/F  flags it changes would 
*not* be visible to the statements following the GOSUB. 


A SUBR is another process invocation, so:


 - the code exists as a separate process, which is sometimes required.
   For example, you can call SUBR within a BEG READ/END READ loop, and
   the routine can also do a BEG READ/END READ on the same file without
   any problems.


 - you can control sharing via the SUBPROCESS/RELATED/DETACHED invocation


 - the code is *not* compiled into the calling program, thus reducing EM
   size (but who cares, really).


 - you cannot exit the routine with a RETURN, you must have an END or
   EXIT, or just run out of statements.


 - takes longer to invoke, as a separate process needs to be brought
   into memory and control passed to it, and then returned to the caller.
   Not a problem for data entry programs but can add run time if it's
   in a update & gets invoked hundreds of times.


Because of the difference in exiting a SUBR (with END/EXIT) vs. a GOSUB (with 
RETURN), you can't really call the routine one way or the other.  You must 
decide if it's going to be invoked as SUBR or GOSUB, and code accordingly.  
If a SUBR attempts to exit with RETURN, you will get a run time error, however,
if a GOSUB encounters an END/EXIT, then you have just ended the execution of 
the entire Event Point, not just that subroutine.  This is a subtle programming 
error that can lead to difficult to track down bugs, ie, sometimes a post just 
skips part of the updating for a record because someone put an END instead of 
RETURN in a GOSUB'd routine.


As to which one to use:


 - COPY if you just want to bring in some straightforward code, i.e., for
   this current ORDER2 record, read the ORDER1, CUSTOMER and PRODUCT files.


 - GOSUB if you need to preserve the T/F flags


 - SUBR if you *need* the special advantages it offers.
[Append to This Answer]
2003-Dec-31 1:02pm
Previous: (Answer) GOSUB/SUBR/COPY exit considerations.
Next: (Answer) Variable Scoping considerations with GOSUB/COPY and SUBR.
This document is: http://board.appx.com/cgi-bin/fom.cgi?file=234
[Search] [Appearance]
This is a Faq-O-Matic 2.719.
Copyright 2003 by APPX Software, Inc. All rights reserved.