       ͻ
        Lesson 6 Part 150  F-PC 3.5 Tutorial by Jack Brown 
       ͼ

        Ŀ
          Multi-way branching using IF .. ELSE .. THEN 
        

: TIS  ( -- ) CR  ."  THIS  IS  DIGIT  NUMBER  "  ;

: TEST1  ( -- )
    BEGIN  KEY  DUP 13 <> WHILE
      ASCII 1  OVER = IF DROP  TIS  ." ONE "     ELSE
      ASCII 2  OVER = IF DROP  TIS  ." TWO "     ELSE
      ASCII 3  OVER = IF DROP  TIS  ." THREE "   ELSE
      ASCII 4  OVER = IF DROP  TIS  ." FOUR "    ELSE
      ASCII 5  OVER = IF DROP  TIS  ." FIVE "    ELSE
      ASCII 6  OVER = IF DROP  TIS  ." SIX "     ELSE
      ASCII 7  OVER = IF DROP  TIS  ." SEVEN "   ELSE
      ASCII 8  OVER = IF DROP  TIS  ." EIGHT "   ELSE
      ASCII 9  OVER = IF DROP  TIS  ." NINE "    ELSE
      ASCII 0  OVER = IF DROP  TIS  ." ZERO "    ELSE
     BEEP DROP  THEN  THEN  THEN  THEN  THEN
                THEN  THEN  THEN  THEN  THEN  REPEAT DROP ;

                 Ŀ
                   The Case Statement  
                 

CASE ... OF ... ENDOF ...  ENDCASE

CASE    causes an index value to be compared to a series of values.

OF      is equivalent to  OVER = IF DROP
ENDOF   is equivalent to  ELSE
        Any number of OF .. ENDOF  pairs may be used.

ENDCASE is equivalent of the appropriate number of THENs

When the index value equals one of the OF values, the sequence between
that OF and the corresponding ENDOF is executed. Control then branches
to the word following ENDCASE. If no match is found,  ENDCASE compiles
the appropriate number of THENs. The "otherwise" case may be handled by
a sequence placed between the last ENDOF  and ENDCASE.  If the index
value is not consumed by the "otherwise" clause it must be DROPed before
ENDCASE is coded.

Multi-way branching  using the CASE  Statement

: TEST2  ( --  -- )
    BEGIN  KEY  DUP 13 <> WHILE
    CASE
      ASCII 1  OF         TIS  ." ONE "     ENDOF
      ASCII 2  OF         TIS  ." TWO "     ENDOF
      ASCII 3  OF         TIS  ." THREE "   ENDOF
      ASCII 4  OF         TIS  ." FOUR "    ENDOF
      ASCII 5  OF         TIS  ." FIVE "    ENDOF
      ASCII 6  OF         TIS  ." SIX "     ENDOF
      ASCII 7  OF         TIS  ." SEVEN "   ENDOF
      ASCII 8  OF         TIS  ." EIGHT "   ENDOF
      ASCII 9  OF         TIS  ." NINE "    ENDOF
      ASCII 0  OF         TIS  ." ZERO "    ENDOF
            BEEP   DROP
    ENDCASE
    REPEAT DROP ;

\ Sample code definitions for the curious.     12:51JWB02/21/86

CODE DOUBLE ( n -- n*2 )
             POP   AX
             ADD   AX, AX
             PUSH  AX
             NEXT  END-CODE

CODE SPLIT ( hilo -- lo hi )
             POP   BX
             SUB   AH, AH
             MOV   AL, BL
             PUSH  AX
             MOV   AL, BH
             PUSH  AX
             NEXT  END-CODE

CODE JOIN ( lo hi -- hilo )
            POP   AX
            POP   BX
            MOV   AH, AL
            MOV   AL, BL
            PUSH  AX
            NEXT  END-CODE

CODE D2/  ( dn -- dn/2 )
            POP   AX
            POP   DX
            SAR   AX, # 1
            RCR   DX, # 1
            PUSH  DX
            PUSH  AX
            NEXT  END-CODE

Ŀ
   Please Move to Lesson 6 Part 160   

