Subroutines can be looped using the do/while or while/endwhile keyword constructs.


The do/while loop executes a block of code once and continues to execute the code block until the while argument evaluates to true.

Do/while loop example:

#1 = 0 (assign parameter #1 the value of 0)

o100 do

(debug, parameter 1 = #1)

o110 if [#1 EQ 2]

#1 = 3 (assign the value of 3 to parameter #1)

(msg, #1 has been assigned the value of 3)

o100 continue (skip to start of loop)

o110 endif

(some code here)

#1 = [#1 + 1] (increment the test counter)

o100 while [#1 LT 3]



The while/endwhile repeats a set of statements an indefinite number of times, as long as the while argument evaluates to true.

While/endwhile example:

(draw a sawtooth shape)

G00 X1 Y0 (move to start position)

#1 = 1 (assign parameter #1 the value of 0)

F25 (set a feed rate)

o101 while [#1 LT 10]

G01 X0

G01 Y[#1/10] X1

#1 = [#1+1] (increment the test counter)

o101 endwhile

M02 (end program)

The following statements cause an error message and abort the interpreter:

  • A return or endsub not within a sub definition
  • A label on repeat which is defined elsewhere
  • A label on while which is defined elsewhere and not referring to a do
  • A label on if defined elsewhere
  • A undefined label on else or elseif
  • A label on else, elseif or endif not pointing to a matching if
  • A label on break or continue which does not point to a matching while or do
  • A label on endrepeat or endwhile no referring to a corresponding while or repeat