home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / forth / compiler / fpc / tutor / l6p150 < prev    next >
Text File  |  1990-07-15  |  4KB  |  104 lines

  1.        ╔════════════════════════════════════════════════════╗
  2.        ║ Lesson 6 Part 150  F-PC 3.5 Tutorial by Jack Brown ║
  3.        ╚════════════════════════════════════════════════════╝
  4.  
  5.         ┌───────────────────────────────────────────────┐
  6.         │  Multi-way branching using IF .. ELSE .. THEN │
  7.         └───────────────────────────────────────────────┘
  8.  
  9. : TIS  ( -- ) CR  ."  THIS  IS  DIGIT  NUMBER  "  ;
  10.  
  11. : TEST1  ( -- )
  12.     BEGIN  KEY  DUP 13 <> WHILE
  13.       ASCII 1  OVER = IF DROP  TIS  ." ONE "     ELSE
  14.       ASCII 2  OVER = IF DROP  TIS  ." TWO "     ELSE
  15.       ASCII 3  OVER = IF DROP  TIS  ." THREE "   ELSE
  16.       ASCII 4  OVER = IF DROP  TIS  ." FOUR "    ELSE
  17.       ASCII 5  OVER = IF DROP  TIS  ." FIVE "    ELSE
  18.       ASCII 6  OVER = IF DROP  TIS  ." SIX "     ELSE
  19.       ASCII 7  OVER = IF DROP  TIS  ." SEVEN "   ELSE
  20.       ASCII 8  OVER = IF DROP  TIS  ." EIGHT "   ELSE
  21.       ASCII 9  OVER = IF DROP  TIS  ." NINE "    ELSE
  22.       ASCII 0  OVER = IF DROP  TIS  ." ZERO "    ELSE
  23.      BEEP DROP  THEN  THEN  THEN  THEN  THEN
  24.                 THEN  THEN  THEN  THEN  THEN  REPEAT DROP ;
  25.  
  26.                  ┌──────────────────────┐
  27.                  │  The Case Statement  │
  28.                  └──────────────────────┘
  29.  
  30. CASE ... OF ... ENDOF ...  ENDCASE
  31.  
  32. CASE    causes an index value to be compared to a series of values.
  33.  
  34. OF      is equivalent to  OVER = IF DROP
  35. ENDOF   is equivalent to  ELSE
  36.         Any number of OF .. ENDOF  pairs may be used.
  37.  
  38. ENDCASE is equivalent of the appropriate number of THENs
  39.  
  40. When the index value equals one of the OF values, the sequence between
  41. that OF and the corresponding ENDOF is executed. Control then branches
  42. to the word following ENDCASE. If no match is found,  ENDCASE compiles
  43. the appropriate number of THENs. The "otherwise" case may be handled by
  44. a sequence placed between the last ENDOF  and ENDCASE.  If the index
  45. value is not consumed by the "otherwise" clause it must be DROPed before
  46. ENDCASE is coded.
  47.  
  48. Multi-way branching  using the CASE  Statement
  49.  
  50. : TEST2  ( --  -- )
  51.     BEGIN  KEY  DUP 13 <> WHILE
  52.     CASE
  53.       ASCII 1  OF         TIS  ." ONE "     ENDOF
  54.       ASCII 2  OF         TIS  ." TWO "     ENDOF
  55.       ASCII 3  OF         TIS  ." THREE "   ENDOF
  56.       ASCII 4  OF         TIS  ." FOUR "    ENDOF
  57.       ASCII 5  OF         TIS  ." FIVE "    ENDOF
  58.       ASCII 6  OF         TIS  ." SIX "     ENDOF
  59.       ASCII 7  OF         TIS  ." SEVEN "   ENDOF
  60.       ASCII 8  OF         TIS  ." EIGHT "   ENDOF
  61.       ASCII 9  OF         TIS  ." NINE "    ENDOF
  62.       ASCII 0  OF         TIS  ." ZERO "    ENDOF
  63.             BEEP   DROP
  64.     ENDCASE
  65.     REPEAT DROP ;
  66.  
  67. \ Sample code definitions for the curious.     12:51JWB02/21/86
  68.  
  69. CODE DOUBLE ( n -- n*2 )
  70.              POP   AX
  71.              ADD   AX, AX
  72.              PUSH  AX
  73.              NEXT  END-CODE
  74.  
  75. CODE SPLIT ( hilo -- lo hi )
  76.              POP   BX
  77.              SUB   AH, AH
  78.              MOV   AL, BL
  79.              PUSH  AX
  80.              MOV   AL, BH
  81.              PUSH  AX
  82.              NEXT  END-CODE
  83.  
  84. CODE JOIN ( lo hi -- hilo )
  85.             POP   AX
  86.             POP   BX
  87.             MOV   AH, AL
  88.             MOV   AL, BL
  89.             PUSH  AX
  90.             NEXT  END-CODE
  91.  
  92. CODE D2/  ( dn -- dn/2 )
  93.             POP   AX
  94.             POP   DX
  95.             SAR   AX, # 1
  96.             RCR   DX, # 1
  97.             PUSH  DX
  98.             PUSH  AX
  99.             NEXT  END-CODE
  100.  
  101. ┌──────────────────────────────────────┐
  102. │   Please Move to Lesson 6 Part 160   │
  103. └──────────────────────────────────────┘
  104.