Nested Gosubs

Nancy Palmquist nlp at vss3.com
Tue Nov 2 06:45:14 PST 2004


John Esak wrote:

>>You have to look at the input processing as containing different tables
>>entirely.
>>
>>TYPES OF PROCESSING
>>1) INPUT FLOW PROCESSING.
>>You have the normal input processing or any @key processing logic -
>>This logic starts at line 1 or the @key label depending on what is
>>appropriate.  The logic continues forward until an END or EXIT.  During
>>the flow, the processing goes back and forth between the User having
>>control with a data entry opportunity or the processing having control.
>>
>>2) WHEN PROCESSING
>>These are little baby programs that are TRIGGERED by an event such as
>>When Entering or leaving a field.  When a key is hit in a data field,
>>and other field related events.  These processes are in the same table
>>as type 1 but they function independently and may or may not happen
>>depending on the triggering event.  These are closed with END, SCREEN,
>>RESTART, SKIP
>>
>>3) @once, @done, @menu  - these offer processing that is not record
>>related but happen as a prefix or post script to the session.  They are
>>processed until an END or EXIT statement.
>>
>>4) @entsel - processing that occurs before a record is displayed and is
>>usually used to display browses, lookup data, or change the user prompts.
>>
>>Now only in TYPE 1 does the END command really signal the end to a
>>records processing.
>>
>>EXIT used anywhere always means EXIT so that would throw your butt out
>>in any context.
>>
>>Now since the WHEN processing and the INPUT processing share the same
>>table, it sometimes happens that you try to share a subroutine.  Well
>>and good, but that is where you must be careful that the subroutine does
>>not contain any condition where it issues a command that the WHEN would
>>react to as a end command but was really intended to be treated
>>differently.
>>
>>@wlf1
>>	then: gosub calc
>>	if: 12 gt "1"
>>	then: msgbox "HERE I AM";end
>>
>>calc
>>	then: 12=1+2
>>	if:	12 gt "1"
>>	then: errorbox "YOU MADE A BOO BOO";screen,2;goto calc
>>	then:return
>>Now in this little sample.  WLF1 it will run the calc routine.  If 12 gt
>>"1", it will put the user in field 2.  The RETURN was not run.  So one
>>RETURN is now hanging.
>>
>>It will also never display the msgbox "HERE I AM" because it will never
>>return from the gosub.
>>
>>That is what you have to control.  You have to keep two streams of logic
>>seperate and know if you are running a routine from input, WHEN's or
>>both and structure it correctly.
>>
>>Nancy
>>
> 
>  --
> 
>>Nancy Palmquist
> 
> 
> Actually, I hope you are not advocating this kind of programming as shown
> above.. other than to illustrate _very_bad_programming_.  This is
> _precisely_ the kind of spaghetti code that we are all always fixing for
> people who are just starting out... or who have made and error in their
> coding and can't debug it becaus of things like this.  You should never
> allow a SCREEN command to come up in @when processing if you don't *WANT* it
> to specifically end that when-processing snippet.  There is no justification
> for this, since there are umpteen-dozen other ways of writing this to work
> exactly as the "intent" of this code is meant to work.  Especially, since
> this code is so "mixed_up" (which I'm sure you meant it to be) as to imply
> that the goto calc would always execute...which, obviously, you are pointing
> out, it won't.  Coming from the when-processing you show, the "goto calc"
> will not get executed... so it doesn't really show any kind of example... of
> anything good at all.  If CALC were only called as a subroutine from INPUT
> procesing, yes it would function, but the point is, don't do it from a
> when-leaving situation.  So, therefore, in my opinion, it is a very badly
> constructed subroutine... and shouldn't be used ever anyway.
> 
John and Mark,

Of course, I was giving an example of BAD code.  It clearly said so in 
the email.  I wanted to make the problem very clear and give an example 
so programmers could see what to look for and what not to do.

I appreciate your rants however.  It shows that you read the postings.

Nancy

-- 
Nancy Palmquist
Virtual Software Systems
PHONE: (412) 835-9417			Web site:  http://www.vss3.com



More information about the Filepro-list mailing list