home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_progs / prog_oth / comal.lzh / COMAL / INFOTEXT / STRUCTURES < prev    next >
Encoding:
Text File  |  1991-08-16  |  3.2 KB  |  207 lines

  1. COMAL LOOPS (syntax)
  2.  
  3. REPEAT
  4.   <statement block>
  5. UNTIL <condition>
  6.  
  7. WHILE <condition> DO
  8.   <statement block>
  9. ENDWHILE
  10.  
  11. LOOP
  12.   <statement block>
  13.   EXIT [WHEN <condition>]
  14.   <statement block>
  15. ENDLOOP
  16.  
  17. FOR <var>:=<start> TO <end> DO
  18.   <statement block>
  19. ENDFOR <var>
  20.  
  21. Note: STEP <amount> is an option
  22.  
  23. COMAL LOOPS (examples)
  24.  
  25. REPEAT
  26.   INPUT "Are you done?":reply$
  27. UNTIL reply$ IN "YyNn"
  28.  
  29. WHILE NOT EOF(2) DO
  30.   READ FILE 2: text$
  31.   PRINT text$
  32. ENDWHILE
  33.  
  34. LOOP
  35.   INPUT "Score (0=done)?":score
  36.   EXIT WHEN score=0
  37.   WRITE FILE 2: score
  38. ENDLOOP
  39.  
  40. FOR month:=1 TO 12 DO
  41.   PRINT month'name$(month);
  42. ENDFOR month
  43.  
  44. REPEAT
  45.   solve'problem
  46. UNTIL errors>3
  47.  
  48. WHILE KEY$="" DO
  49.   flash(prompt$)
  50. ENDWHILE
  51.  
  52. LOOP
  53.   TRAP
  54.     INPUT "Age: ": age
  55.     EXIT // numeric entry OK
  56.   HANDLER
  57.     PRINT "Numbers only"
  58.   ENDTRAP
  59. ENDLOOP
  60.  
  61. FOR x:=-1 TO 1 DO
  62.   READ sign$(x)
  63. ENDFOR x
  64. DATA "neg","zero","pos"
  65.  
  66. COMAL DECISIONS (syntax)
  67.  
  68. CASE <selector> OF
  69. WHEN <choice list>
  70.   <statement block>
  71. {WHEN <choice list>
  72.   <statement block>}
  73. [OTHERWISE
  74.   <statement block>]
  75. ENDCASE
  76.  
  77. IF <condition> THEN
  78.   <statement block>
  79. {ELIF <condition> THEN
  80.   <statement block>}
  81. [ELSE
  82.   <statement block>]
  83. ENDIF
  84.  
  85. COMAL DECISIONS (examples)
  86.  
  87. CASE reply$ OF
  88. WHEN "a","A" // add
  89.   add'member
  90. WHEN "d","D" // delete
  91.   delete'member
  92. WHEN "l","L" // list
  93.   list'member
  94. OTHERWISE // invalid choice
  95.   PRINT "I can't do that."
  96. ENDCASE
  97.  
  98. IF letter$ IN vowel$
  99.   PRINT "It is a vowel"
  100. ELIF letter$ IN consonant$
  101.   PRINT "It is a consonant"
  102. ELSE
  103.   PRINT "It is not a letter"
  104. ENDIF
  105.  
  106. CASE eaten OF
  107. WHEN 0
  108.   PRINT "You might starve"
  109. WHEN 1,2
  110.   PRINT "Not bad"
  111. WHEN 3
  112.   PRINT "Great, I ate 3 too"
  113. OTHERWISE
  114.   PRINT "I won't pay the bill"
  115. ENDCASE
  116.  
  117. IF subscriber THEN
  118.   PRINT "Subscriber discount";
  119.   price:-2 // subtract 2 dollars
  120. ELSE
  121.   PRINT "Normal order";
  122. ENDIF
  123. PRINT USING "$##.##": price
  124.  
  125. COMAL ERROR HANDLER (syntax)
  126.  
  127. TRAP
  128.   <statement block>
  129.   {REPORT}
  130. HANDLER
  131.   <statement block>
  132.   {REPORT, ERR, ERRTEXT$}
  133.   {RETRY, ERRFILE}
  134. ENDTRAP
  135.  
  136. ERROR HANDLER (examples)
  137.  
  138. TRAP
  139.   average:=score DIV number
  140. HANDLER
  141.   PRINT err;errtext$
  142.   PRINT "Error in calculations"
  143.   PRINT "We'll assume 0 as AVG"
  144.   average=0
  145. ENDTRAP
  146.  
  147. TRAP
  148.   INPUT "Enter age: ":age
  149.   IF age<0 OR age>110 REPORT 888
  150. HANDLER
  151.   IF err=888 THEN
  152.     PRINT "Be reasonable."
  153.   ELSE
  154.     PRINT "Input error. Try again."
  155.   ENDIF
  156. ENDTRAP
  157.  
  158. PROCEDURES and FUNCTIONS (syntax)
  159.  
  160. PROC <name>(<parameters>) CLOSED
  161.   {IMPORT <var list>}
  162.   <block>
  163.   {note option: RETURN}
  164. ENDPROC <name>
  165.  
  166. FUNC <name> (<parameters>) CLOSED
  167.   {IMPORT <var list>}
  168.   <block>
  169.   {RETURN <value>}
  170. ENDFUNC <name>
  171.  
  172. PROCEDURES and FUNCTIONS (examples)
  173.  
  174. PROC continue
  175.   PRINT "Press C to continue"
  176.   REPEAT // empty repeat loop
  177.   UNTIL INKEY$ IN "Cc"
  178. ENDPROC continue
  179.  
  180. FUNC even(num) CLOSED
  181.   IF num MOD 2 THEN
  182.     RETURN FALSE
  183.   ELSE
  184.     RETURN TRUE
  185.   ENDIF
  186. ENDFUNC even
  187.  
  188. PROC slow'print(text$)
  189.   FOR x:=1 TO LEN(text$) DO
  190.     PRINT text$(x:x), //one char
  191.     FOR slow:=1 to 99 DO NULL
  192.   ENDFOR x
  193. ENDPROC slow'print
  194.  
  195. FUNC just'last$(text$) CLOSED
  196.   IF text$="" THEN RETURN ""
  197.   max=LEN(text$)
  198.   RETURN text$(max:max) //one char
  199. ENDFUNC just'last$
  200.  
  201. For a FREE 24 page COMAL INFO booklet send a Self
  202. Addressed Stamped (45 cents) Envelope to:
  203.  
  204.     COMAL Users Group USA Ltd
  205.     5501 Groveland Terrace
  206.     Madison, WI 53716
  207.