Nested Gosubs

GCC Consulting gcc at optonline.net
Mon Nov 1 18:59:39 PST 2004


 

> -----Original Message-----
> From: filepro-list-bounces at lists.celestial.com 
> [mailto:filepro-list-bounces at lists.celestial.com] On Behalf 
> Of Nancy Palmquist
> Sent: Monday, November 01, 2004 4:39 PM
> To: Fplist (E-mail)
> Subject: Re: Nested Gosubs
> 
> I have enjoyed this thread and all the references to me.  I 
> guess I should have hung around yesterday (SUNDAY) instead of 
> wasting my time watching the Steelers tromp on New England Or 
> go trick or treating.
> 
> But it looks like Mark understands the posting I did early in the day.
> 
> I would like to clarify some processing logic.
> 
> 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,

You left out one very important command ESCAPE/SAVE.  This is what will end the
processing on a record and force the save.

Type1 processing will run after the record is saved either by command or by
pressing the proper key for saving the record - <esc esc> for *nix or <esc> or
<F10> for native.

Richard Kreiss
GCC Consulting 






More information about the Filepro-list mailing list