That's why the GOSUB was placed inside the while loop.

That gosub calls the SubSwitcher: which then redirects to the appropriate subroutine. Then the subroutine does the return.

The return in the SubSwitcher: is only there in case the variable is larger than the number of available subroutines. Otherwise, it would run subName0 which would be in error.

The subroutines don't return to the SubSwitcher, they return back to the while loop.

HTH,