{{htmlmetatags>metatag-robots=()
metatag-title=(OTHER CONTRIBUTIONS FOR...NEXT BEST PRACTICE | ugBASIC User Manual)
metatag-keywords=(ugBASIC,Commodore 64,Commodore PLUS/4,ZX Spectrum)
metatag-description=(An isomorphic language for retrocomputers)
metatag-media-og:image=(:ugbasic:logo-ugbasic-fb.png)
metatag-og:title=(OTHER CONTRIBUTIONS FOR...NEXT BEST PRACTICE | ugBASIC User Manual)
metatag-og:description=(An isomorphic language for retrocomputers)
}}
====== ugBASIC User Manual ======
===== OTHER CONTRIBUTIONS FOR...NEXT BEST PRACTICE =====
==== PURPOSE ====
This program will try to answer to the Gary Luckenbaugh's article about FOR...NEXT best practice under ugBASIC.
==== SOURCE CODE ====
CLS
''' RULE #1
' Always enter a FOR-NEXT loop at the FOR. Don’t even think about entering
' the middle of a loop. Not surprisingly, “there be dragons here” if you
' do.
'
' In ugBASIC you can enter into a FOR...NEXT without problems.
PRINT "RULE#1"
PRINT
DIM x1 AS BYTE
x1 = 1
GOTO inTheMiddle1
FOR x1 = 1 TO 10
inTheMiddle1:
PRINT x1;" ";
NEXT x1
PRINT
''' RULE #2
' Never leave a FOR-NEXT mid-flight. Use FOR-NEXT to count from the
' beginning to the TO value with steps of STEP. If you feel you must
' leave a FOR in mid-flight, then FOR is not the proper construct.
'
' In ugBASIC you can exit out from a FOR...NEXT without problems.
PRINT:PRINT "RULE #2"
PRINT
DIM x2 AS BYTE
FOR x2 = 1 TO 10
PRINT x2;" ";
IF x2 > 4 THEN GOTO outOfFor2
NEXT x2
outOfFor2:
PRINT
''' RULE #3
' If you absolutely must jump out of a FOR, then you must always
' come back to where you left off. The best way to do this is
' via GOSUB to jump out and then RETURN to where you were.
' At the location where you jump out, there should be no
' FORs with the same control variable, in this case i.
'
' In ugBASIC you can jump out using GOTO (see rules #1 and #2)
' and you can use the same variable if you jump inside a GOSUB.
''' RULE #4
' Never enter a FOR loop recursively, unless you are using a modern
' BASIC, and even then use recursive subs/functions and not GOTOs
' or GOSUBS
'
' ugBASIC does not support recursion
''' RULE #5
' Don’t try to change the final value or the step when a FOR-NEXT
' is in-flight. You may get away with this on some BASICs and
' not on others.
'
' In ugBASIC you can change initial, final and step value.
PRINT:PRINT "RULE #5"
PRINT
DIM x5 AS BYTE, f5 AS BYTE, t5 AS BYTE, s5 AS BYTE
f5 = 1: t5 = 10: s5 = 2
FOR x5 = f5 TO t5 STEP s5
PRINT x5; " ";
IF x5 > 4 THEN
t5 = 10
s5 = 4
ENDIF
NEXT
PRINT
''' RULE #6
' Don’t change the control variable in-flight:
'
' In ugBASIC you can change the contro variable, as you like.
PRINT:PRINT "RULE #6"
PRINT
DIM x6 AS BYTE
FOR x6 = 1 TO 10
PRINT x6;" ";
IF x6 > 3 THEN x6 = 10
NEXT
PRINT
''' RULE #7
' Draw a line from each FOR to the corresponding NEXT, and make
' sure no lines overlap, as depicted below:
'
' +-- for i = 1 to 10
' |
'+----|--------for j = 1 to 10
'+ |
'+ +---next i
'+
'+-------next j
'
' Also ugBASIC respects this rule.
==== SOURCE FILE ====
* ''[[https://github.com/spotlessmind1975/ugbasic/tree/main/examples/contrib_for_next_bp.bas|contrib_for_next_bp.bas]]''
==== HOW TO COMPILE AND RUN ====
The instructions here refer to compiling the example from the command line. For Microsoft Windows users we suggest using **[[https://spotlessmind1975.itch.io/ugbasic-ide|UGBASIC-IDE]]**, which allows you to compile the example with just one click.=== ATARI 400/800 family ===
In order to compile and run the example, you need to have the Altirra emulator, and in particular that the ''altirra'' executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.atari contrib_for_next_bp.bas -o example.xex
altirra example.xex
# Windows
ugbc.atari.exe contrib_for_next_bp.bas -o example.xex
altirra example.xex
=== ATARI 600XL/800XL/1200XL/XG(SE) family ===
In order to compile and run the example, you need to have the Altirra emulator, and in particular that the ''altirra'' executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.atarixl contrib_for_next_bp.bas -o example.xex
altirra example.xex
# Windows
ugbc.atarixl.exe contrib_for_next_bp.bas -o example.xex
altirra example.xex
=== Commodore 64 ===
In order to compile and run the example, you need to have the VICE emulator, and in particular that the ''x64sc'' executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.c64 contrib_for_next_bp.bas -o example.prg
x64sc example.prg
# Windows
ugbc.c64.exe contrib_for_next_bp.bas -o example.prg
x64sc example.prg
=== Commodore 64+REU ===
In order to compile and run the example, you need to have the VICE emulator, and in particular that the ''x64sc'' executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.c64reu contrib_for_next_bp.bas -o example.prg
x64sc -reu example.prg
# Windows
ugbc.c64reu.exe contrib_for_next_bp.bas -o example.prg
x64sc -reu example.prg
=== Commodore PLUS/4 ===
== Using YAPE ==
In order to run the example, you need to have the YAPE emulator. In particular that the ''yape'' executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.plus4 contrib_for_next_bp.bas -o example.prg
yape example.prg
# Windows
ugbc.plus4.exe contrib_for_next_bp.bas -o example.prg
yape example.prg
== Using VICE ==
In order to run the example, you need to have the VICE emulator. In particular that the ''xplus4'' executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.plus4 contrib_for_next_bp.bas -o example.prg
xplus4 example.prg
# Windows
ugbc.plus4.exe contrib_for_next_bp.bas -o example.prg
xplus4 example.prg
=== Dragon 32 ===
In order to compile and run the example, you need to have the XROAR emulator, and in particular that the ''xroar'' executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.d32 contrib_for_next_bp.bas -o example.bin
xroar -rompath (your rom path) example.bin
# Windows
ugbc.d32.exe contrib_for_next_bp.bas -o example.bin
xroar.exe -rompath (your rom path) example.bin
=== Dragon 64 ===
In order to compile and run the example, you need to have the XROAR emulator, and in particular that the ''xroar'' executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.d64 contrib_for_next_bp.bas -o example.bin
xroar -rompath (your rom path) example.bin
# Windows
ugbc.d64.exe contrib_for_next_bp.bas -o example.bin
xroar.exe -rompath (your rom path) example.bin
=== PC128 Olivetti Prodest ===
In order to compile and run the example, you need to have the DCMOTO emulator, and in particular that the ''dcmoto'' executable is accessible.
Then, type this command on the command line and on the emulator:
# Linux
ugbc.pc128op contrib_for_next_bp.bas -o example.k7
dcmoto
(choose BASIC 128)
CLEAR,&H2FFF: LOADM"CASS:",R: EXEC
# Windows
ugbc.pc128op.exe contrib_for_next_bp.bas -o example.k7
dcmoto
(choose example.k7)
(choose BASIC 128)
CLEAR,&H2FFF: LOADM"CASS:",R: EXEC
=== Thomson MO5 ===
In order to compile and run the example, you need to have the DCMOTO emulator, and in particular that the ''dcmoto'' executable is accessible.
Then, type this command on the command line and on the emulator:
# Linux
ugbc.pc128op contrib_for_next_bp.bas -o example.k7
dcmoto
(choose BASIC 128)
CLEAR,&H2FFF: LOADM"CASS:",R: EXEC
# Windows
ugbc.pc128op.exe contrib_for_next_bp.bas -o example.k7
dcmoto
(choose example.k7)
(choose BASIC 128)
CLEAR,&H2FFF: LOADM"CASS:",R: EXEC
=== Commodore VIC-20 ===
In order to compile and run the example, you need to have the VICE emulator, and in particular that the ''xvic'' executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.vic20 contrib_for_next_bp.bas -o example.prg
xvic --memory 24k example.prg
# Windows
ugbc.vic20.exe contrib_for_next_bp.bas -o example.prg
xvic --memory 24k example.prg
=== ZX Spectrum ===
In order to compile and run the example, you need to have the Speccy emulator, and in particular that the ''speccy'' executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.zx contrib_for_next_bp.bas -o example.tap
Speccy example.tap
# Windows
ugbc.zx.exe contrib_for_next_bp.bas -o example.tap
Speccy example.tap
=== MSX ===
In order to compile and run the example, you need to have the openMsx or the BlueMSX emulator, and in particular that its executable is accessible.
Then, type this command on the command line:
== openMSX ==
# Linux
ugbc.msx1 contrib_for_next_bp.bas -o example.rom
openmsx -cart example.rom
# Windows
ugbc.msx1.exe contrib_for_next_bp.bas -o example.rom
openmsx -cart example.rom
== blueMSX ==
# Linux
ugbc.msx1 contrib_for_next_bp.bas -o example.rom
bluemsx example.rom
# Windows
ugbc.msx1.exe contrib_for_next_bp.bas -o example.rom
bluemsx example.rom
=== ColecoVision ===
In order to compile and run the example, you need to have the openMsx or the BlueMSX emulator, and in particular that its executable is accessible.
Then, type this command on the command line:
== openMSX ==
# Linux
ugbc.coleco contrib_for_next_bp.bas -o example.rom
openmsx -machine \"COL - ColecoVision\" -cart example.rom
# Windows
ugbc.coleco.exe contrib_for_next_bp.bas -o example.rom
bluemsx -machine \"COL - ColecoVision\" example.rom
== blueMSX ==
# Linux
ugbc.coleco contrib_for_next_bp.bas -o example.rom
bluemsx /machine \"COL - ColecoVision\" /rom1 example.rom
# Windows
ugbc.coleco.exe contrib_for_next_bp.bas -o example.rom
bluemsx /machine \"COL - ColecoVision\" /rom1 example.rom
=== SEGA SC-3000 ===
In order to compile and run the example, you need to have the BlueMSX emulator, and in particular that its executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.sc3000 contrib_for_next_bp.bas -o example.rom
bluemsx /machine \"SEGA - SC-3000\" /rom1 example.rom
# Windows
ugbc.sc3000.exe contrib_for_next_bp.bas -o example.rom
bluemsx /machine \"SEGA - SC-3000\" /rom1 example.rom
=== SEGA SG-1000 ===
In order to compile and run the example, you need to have the BlueMSX emulator, and in particular that its executable is accessible.
Then, type this command on the command line:
# Linux
ugbc.sg1000 contrib_for_next_bp.bas -o example.rom
bluemsx /machine \"SEGA - SG-1000\" /rom1 example.rom
# Windows
ugbc.sg1000.exe contrib_for_next_bp.bas -o example.rom
bluemsx /machine \"SEGA - SG-1000\" /rom1 example.rom
==== ANY PROBLEM? ====
If you have found a problem trying to run this example, if you think there is a bug or, more simply, you would like it to be improved, [[https://github.com/spotlessmind1975/ugbasic/issues/new?title=IMPROVE OTHER CONTRIBUTIONS FOR...NEXT BEST PRACTICE|open an issue]] for this example on GitHub. Thank you!===== POWERED BY =====
[[:ugbasic:user:examples|{{ :ugbasic:user:logo-ugbasic.png?nolink&600 |}}]]