'''RUN''' is a control flow statement that clears and restarts the program currently in memory or executes another specified program. {{PageSyntax}} :: '''RUN''' [{''line_number'' | ''filespec$''}] [''command_parameter(s)''] {{Parameters}} * ''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: [[Keywords_currently_not_supported_by_QB64#Keywords_Not_Supported_in_Linux_or_MAC_OSX_versions |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. {{CodeStart}} '' '' PRINT " A", " B", " C", " D" 10 A = 1 20 B = 2 30 C = 3 40 D = 4 50 {{Cl|PRINT}} A, B, C, D 60 {{Cl|IF...THEN|IF}} A = 0 {{Cl|THEN}} 70 {{Cl|ELSE}} {{Cl|RUN}} 20 'RUN clears all values 70 {{Cl|IF...THEN|IF}} B = 0 {{Cl|THEN}} 80 {{Cl|ELSE}} {{Cl|RUN}} 30 80 {{Cl|IF...THEN|IF}} C = 0 {{Cl|THEN}} 90 {{Cl|ELSE}} {{Cl|RUN}} 40 90 {{Cl|IF...THEN|IF}} D = 0 {{Cl|THEN}} 100 {{Cl|ELSE}} {{Cl|RUN}} 50 100 {{Cl|PRINT}} {{Cl|INPUT}} "Do you want to quit?(Y/N)", quit$ {{Cl|IF...THEN|IF}} {{Cl|UCASE$}}(quit$) = "Y" {{Cl|THEN}} {{Cl|END}} {{Cl|ELSE}} {{Cl|RUN}} 'RUN without line number executes at first code line '' '' {{CodeEnd}} {{OutputStart}}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)_ {{OutputEnd}} ''Example 2:'' Compile both programs below with QB64. ProgramA [[RUN]]s ProgramB with a parameter passed following the filename: {{CodeStart}} ' ================ ProgramA.BAS =================== {{Cl|LOCATE}} 12, 36: {{Cl|PRINT}} "ProgramA" {{Cl|LOCATE}} 23, 25: {{Cl|PRINT}} "Press any key to run ProgramB" K$ = {{Cl|INPUT$}}(1) {{Cl|RUN}} "ProgramB FS" 'pass FS parameter to ProgramB in QB64 ONLY {{Cl|END}} '' '' {{CodeEnd}} : ''ProgramB'' checks for fullscreen parameter pass in QB64 and goes full screen. {{CodeStart}} ' ================ ProgramB.BAS =================== {{Cl|LOCATE}} 12, 36: {{Cl|PRINT}} "ProgramB" parameter$ = {{Cl|UCASE$}}({{Cl|COMMAND$}}) {{Cl|LOCATE}} 20, 33: {{Cl|PRINT}} "Parameter = " + parameter$ {{Cl|IF...THEN|IF}} {{Cl|LEFT$}}(parameter$, 2) = "FS" {{Cl|THEN}} {{Cl|_FULLSCREEN}} 'parameter changes to full screen {{Cl|END}} '' '' {{CodeEnd}} {{OutputStart}} Parameter = FS.EXE {{OutputEnd}} : '''Note:''' The above RUN procedure will NOT work in Qbasic! Qbasic cannot pass [[COMMAND$]] parameters with RUN! ''See also:'' * [[CHAIN]], [[SHELL]] * [[COMMAND$]] {{PageNavigation}}