( EAKER'S CASE STATEMENT

HEX

: (>RESOLVE)
  BEGIN
    ?DUP
  WHILE
    DUP @ SWAP HERE OVER - SWAP !
  REPEAT
;

: (>MARK) HERE SWAP , ;

: (ELSE)
  2 ?PAIRS COMPILE BRANCH SWAP HERE SWAP , SWAP (>RESOLVE) 0 -2
; IMMEDIATE

: (CS) OVER = IF DROP R> 2+ ELSE R> DUP 2+ @ + THEN >R ;

: CASES 0 0 4 ; IMMEDIATE

: CASE 4 ?PAIRS COMPILE (CS) (>MARK) 5 ; IMMEDIATE

: ENDCASE 5 ?PAIRS 2 [COMPILE] (ELSE) DROP 4 ; IMMEDIATE

: ENDCASES
  4 ?PAIRS
  (>RESOLVE) (>RESOLVE)
; IMMEDIATE


