mirror of
https://github.com/QB64Official/qb64.git
synced 2024-09-28 11:17:47 +00:00
66 lines
2.6 KiB
Markdown
66 lines
2.6 KiB
Markdown
|
**RUN** is a control flow statement that clears and restarts the program currently in memory or executes another specified program.
|
||
|
|
||
|
The multi-modular technique goes back to when QBasic and QuickBASIC had module size constraints. In QB64 it has been implemented so that that older code can still be compiled, though **it is advisable to use single modules for a single project (not counting [$INCLUDE]($INCLUDE) libraries), for ease of sharing and also because the module size constraints no longer exist.**
|
||
|
|
||
|
## Syntax
|
||
|
|
||
|
> **RUN** [{*line_number* | *filespec$*}] [*command_parameter(s)*]
|
||
|
|
||
|
## Parameter(s)
|
||
|
|
||
|
* *line number* specifies a line number in the main module code.
|
||
|
* An optional *filespec* specifies a program to load into memory and run.
|
||
|
* BAS or EXE extensions are assumed to be the same as the calling module's extension, EXE or BAS (QBasic only).
|
||
|
* *file names specs* with other extensions must use the full filename. No extension requires a dot.
|
||
|
* In **QB64** *command line parameters* can follow the program file name and be read using the [COMMAND$](COMMAND$) function later.
|
||
|
|
||
|
## Usage
|
||
|
|
||
|
* The starting [line number](line-number) MUST be one used in the main module code, even if RUN is called from within a SUB or FUNCTION.
|
||
|
* If no line number is given the currently loaded program runs from the first executable line.
|
||
|
* In **QB64** RUN can open any kind of executable program and provide case sensitive program specific parameters.
|
||
|
* Recommended practice to run external programs is to use [SHELL](SHELL).
|
||
|
* RUN closes all open files and closes the invoking program module before the called program starts.
|
||
|
* RUN resets the [RANDOMIZE](RANDOMIZE) sequence to the starting [RND](RND) function value.
|
||
|
* **Note: Calling RUN repeatedly may cause a stack leak in QB64 if it is called from within a [SUB](SUB) or [FUNCTION](FUNCTION). Avoid when possible.**
|
||
|
|
||
|
## Example(s)
|
||
|
|
||
|
Shows how RUN can reference multiple line numbers in the main module code. No line number executes first code line.
|
||
|
|
||
|
```vb
|
||
|
|
||
|
PRINT " A", " B", " C", " D"
|
||
|
10 A = 1
|
||
|
20 B = 2
|
||
|
30 C = 3
|
||
|
40 D = 4
|
||
|
50 PRINT A, B, C, D
|
||
|
60 IF A = 0 THEN 70 ELSE RUN 20 'RUN clears all values
|
||
|
70 IF B = 0 THEN 80 ELSE RUN 30
|
||
|
80 IF C = 0 THEN 90 ELSE RUN 40
|
||
|
90 IF D = 0 THEN 100 ELSE RUN 50
|
||
|
100 PRINT
|
||
|
INPUT "Do you want to quit?(Y/N)", quit$
|
||
|
IF UCASE$(quit$) = "Y" THEN END ELSE RUN 'RUN without line number executes at first code line
|
||
|
|
||
|
```
|
||
|
|
||
|
```text
|
||
|
|
||
|
A B C D
|
||
|
1 2 3 4
|
||
|
0 2 3 4
|
||
|
0 0 3 4
|
||
|
0 0 0 4
|
||
|
0 0 0 0
|
||
|
|
||
|
Do you want to quit?(Y/N)_
|
||
|
|
||
|
```
|
||
|
|
||
|
## See Also
|
||
|
|
||
|
* [CHAIN](CHAIN), [SHELL](SHELL)
|
||
|
* [COMMAND$](COMMAND$)
|