RUN
From QB64 Wiki
RUN is a control flow statement that clears and restarts the program currently in memory or executes another specified program.
- RUN [{line_number | filespec$}] [command_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$ function later.
Usage:
- The starting line number MUST be one used in the main module code! Even with SUB or FUNCTION references.
- 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.
- RUN does not return to the calling procedure if the program called is not a Qbasic procedure!
- RUN closes all open files and closes the invoking program module before the called program starts. (Cannot use Basica's R)
- If you do NOT want opened files to be closed use CHAIN instead.
- In Qbasic /RUN can also be used to run a program module in a command line. Example: QB.EXE /L /RUN Module1.BAS
- RUN should reset the RANDOMIZE sequence to the starting RND function value.(Not yet in QB64)
- Note: Qbasic also allowed /RUN in a command line call to run a BAS file with the interpreter. QB64 cannot run BAS files!
- Note: RUN causes a stack leak in QB64 if it is called from within a SUB or FUNCTION. Avoid when possible!
- NOTE: Not currently available in Linux or Mac operating systems!
Example 1: Shows how RUN can reference multiple line numbers in the main module code. No line number executes first code line.
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
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)_
Example 2: Compile both programs below with QB64. ProgramA RUNs ProgramB with a parameter passed following the filename:
' ================ ProgramA.BAS =================== LOCATE 12, 36: PRINT "ProgramA" LOCATE 23, 25: PRINT "Press any key to run ProgramB" K$ = INPUT$(1) RUN "ProgramB FS" 'pass FS parameter to ProgramB in QB64 ONLY END
- ProgramB checks for fullscreen parameter pass in QB64 and goes full screen.
' ================ ProgramB.BAS =================== LOCATE 12, 36: PRINT "ProgramB" parameter$ = UCASE$(COMMAND$) LOCATE 20, 33: PRINT "Parameter = " + parameter$ IF LEFT$(parameter$, 2) = "FS" THEN _FULLSCREEN 'parameter changes to full screen END
Parameter = FS.EXE
- Note: The above RUN procedure will NOT work in Qbasic! Qbasic cannot pass COMMAND$ parameters with RUN!
See also: