After asking the question I figured a very simple way that is even more powerful and flexible than the C switch. Something like this:
while TRUE do
begin
case SelectorVariable of
1 :
begin
<statement>
<statement>
if somecondition then break; { exits the case early }
<statement>
SelectorVariable := 2; { to cause fall through as in C }
end;
2 :
begin
<bunch of statements here>
break; { exit case statement }
end;
<more cases if needed >
otherwise
begin
<statements>
break;
end;
end; { case }
end; { while }
Note that instead of using TRUE, the while loop could use the SelectorVariable too and exit when it becomes a specific value, this could make some executions simpler.
As shown above, any case can carry out any test it wants and execute "break" which will end the loop, therefore the "case" too since they are now tied together.
The first case shows how to accomplish the C fall through. Using the while loop enables full control of the execution of the each case, the sequence in which they are executed, fall through and, the number of time each case is executed.
Move over C switch, go to the corner and talk to Beethoven.