Microsoft KB Archive/31885

= ON  GOSUB Suspended Until INPUT or INPUT$ Is Satisfied =

Article ID: 31885

Article Last Modified on 11/21/2006



This article was previously published under Q31885



SUMMARY
Execution of event trapping GOSUB routines is suspended in BASIC until an INPUT or LINE INPUT statement or INPUT$ function is satisfied. Events suspended during INPUT, INPUT$, or LINE INPUT include the following:


 * 1) ON TIMER(n) GOSUB (found in many Microsoft BASICs, including GW-BASIC, QuickBASIC for MS-DOS, and QuickBASIC for Macintosh)
 * 2) ON KEY(n) GOSUB (found in QuickBASIC and GW-BASIC for MS-DOS, but not in QuickBASIC for Macintosh)
 * 3) ON DIALOG GOSUB, ON MENU GOSUB, and ON MOUSE GOSUB (found in QuickBASIC for the Apple Macintosh, but not in QuickBASIC for MS-DOS)

The suspending of event GOSUBs during INPUT, INPUT$, or LINE INPUT is an intentional design requirement and occurs in all Microsoft BASIC products that support event trapping, including the following products:


 * 1) Microsoft QuickBASIC versions 1.00, 1.01, 1.02, 2.00, 2.01, 3.00, 4.00, 4.00b, and 4.50 for MS-DOS
 * 2) Microsoft BASIC Compiler versions 6.00 and 6.00b for MS OS/2 and MS-DOS
 * 3) Microsoft BASIC Professional Development System (PDS) versions 7.00 and 7.10 for MS-DOS and MS OS/2
 * 4) Microsoft GW-BASIC Interpreter versions 3.20, 3.22, and 3.23 for MS-DOS
 * 5) Microsoft QuickBASIC version 1.00 for the Apple Macintosh
 * 6) Microsoft BASIC Compiler version 1.00 for the Apple Macintosh
 * 7) Microsoft BASIC Interpreter versions 2.00, 2.10, and 3.00 for the Apple Macintosh (Event trapping is not supported in Microsoft BASIC Interpreter versions 1.00 and 1.01 for the Apple Macintosh.)



MORE INFORMATION
Suppose you write a program with ON TIMER(5) GOSUB so that every five seconds a message is displayed on the screen. If an INPUT$ function or INPUT or LINE INPUT statement is executed that expects a value from the keyboard, the ON TIMER(5) GOSUB will not execute until the ENTER key is pressed to terminate the input. Only one TIMER event is remembered on the stack, no matter how much time passed during the INPUT$, INPUT, or LINE INPUT. An example of this event suspension is demonstrated in Program 1 below.

If you want to trap events and also input from the keyboard, you can poll the INKEY$ function as shown in program 2 below instead of using INPUT$, INPUT, or LINE INPUT. The INKEY$ function returns one key press at a time, and allows event GOSUB traps to occur between invocations.

BASIC checks between statements to see if an event has occurred. When the INPUT$, INPUT, or LINE INPUT executes, execution of the ON event GOSUB statement is suspended until the INPUT$, INPUT, or LINE INPUT is satisfied. This behavior is intentional and occurs in all Microsoft BASIC products that support event trapping.

If you are using ON KEY(n) GOSUB to trap keys (in GW-BASIC or QuickBASIC for MS-DOS), only one key press during INPUT$, INPUT, or LINE INPUT will be remembered on the stack for a given defined KEY, no matter how many times that key is pressed. This behavior is by design (to prevent stack overflow).

The following are code examples:

Program 1
The following program shows that ON TIMER(n) GOSUB waits while the INPUT statement is pending: REM Program 1, using the INPUT statement. ON TIMER(5) GOSUB MESSAGE    ' TRAP EVERY 5 SECONDS TIMER ON  INPUT X$   ' NO GOSUB IS DONE UNTIL THIS INPUT IS SATISFIED. FOR I=1 TO 2000

PRINT X$  NEXT END MESSAGE: PRINT &quot; FIVE SECONDS &quot; RETURN

Program 2
The following program polls the INKEY$ function for INPUT and lets the ON TIMER(5) GOSUB statement successfully perform the TIMER event trap every five seconds: REM ********   Program 2, using the INKEY$ function. ON TIMER(5) GOSUB MESSAGE         ' TRAP EVERY 5 SECONDS TIMER ON  CLS MOREIN: A$ = INKEY$ IF A$ = &quot;&quot; GOTO MOREIN IF A$ = CHR$(13) GOTO DONE  'Input until ENTER key is pressed. X$ = X$ + A$: J = J + 1 PRINT A$; IF J > 79 THEN PRINT &quot;Exceeded 79 characters.&quot;: GOTO DONE GOTO MOREIN DONE: PRINT FOR I = 1 TO 2000 PRINT X$      NEXT END MESSAGE: PRINT &quot; FIVE SECONDS &quot;   ' DISPLAY MESSAGE AFTER 5 SECONDS. RETURN Note: The following Microsoft BASIC products do NOT support event trapping features, such as ON TIMER(n) GOSUB or ON KEY(n) GOSUB:


 * 1) Microsoft Business BASIC Compiler versions 1.00 and 1.10 for MS-DOS
 * 2) Microsoft BASIC Compiler versions 5.35 and 5.36 for MS-DOS

Additional query words: QuickBas BasicCom MQuickB

Keywords: KB31885

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.