Finite state machine: Difference between revisions

m
→‎{{header|Phix}}: added syntax colouring the hard way
(Add Tcl version)
m (→‎{{header|Phix}}: added syntax colouring the hard way)
Line 1,529:
 
=={{header|Phix}}==
<!--<lang Phix>(notonline)-->
<lang Phix>enum READY, WAITING, DISPENSE, REFUND, QUIT -- (or just use strings if you prefer)
<span style="color: #008080;">enum</span> <span style="color: #000000;">READY</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">WAITING</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">DISPENSE</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">REFUND</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">QUIT</span> <span style="color: #000080;font-style:italic;">-- (or just use strings if you prefer)</span>
 
integer state = READY, ch = ' '
<span style="color: #004080;">integer</span> <span style="color: #000000;">state</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">READY</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">ch</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">' '</span>
while true do
<span style="color: #008080;">while</span> <span style="color: #004600;">true</span> <span style="color: #008080;">do</span>
printf(1,"%c\n",ch)
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%c\n"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">ch</span><span style="color: #0000FF;">)</span>
switch state do
<span style="color: #008080;">switch</span> <span style="color: #000000;">state</span> <span style="color: #008080;">do</span>
case READY: printf(1,"Machine is READY. (D)eposit or (Q)uit :")
<span style="color: #008080;">case</span> <span style="color: #000000;">READY</span><span style="color: #0000FF;">:</span> <span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Machine is READY. (D)eposit or (Q)uit :"</span><span style="color: #0000FF;">)</span>
while true do
<span style="color: #008080;">while</span> <span style="color: #004600;">true</span> ch<span style="color: upper(wait_key())#008080;">do</span>
<span style="color: #000000;">ch</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">upper</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">wait_key</span><span style="color: #0000FF;">())</span>
if ch='D' then state = WAITING exit end if
<span style="color: #008080;">if</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">=</span><span style="color: #008000;">'D'</span> <span style="color: #008080;">then</span> <span style="color: #000000;">state</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">WAITING</span> <span style="color: #008080;">exit</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
if ch='Q' then state = QUIT exit end if
<span style="color: #008080;">if</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">=</span><span style="color: #008000;">'Q'</span> <span style="color: #008080;">then</span> <span style="color: #000000;">state</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">QUIT</span> <span style="color: #008080;">exit</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end while
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span>
 
case WAITING: printf(1,"(S)elect product or choose to (R)efund :")
<span style="color: #008080;">case</span> <span style="color: #000000;">WAITING</span><span style="color: #0000FF;">:</span> <span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"(S)elect product or choose to (R)efund :"</span><span style="color: #0000FF;">)</span>
while true do
<span style="color: #008080;">while</span> <span style="color: #004600;">true</span> ch<span style="color: upper(wait_key())#008080;">do</span>
<span style="color: #000000;">ch</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">upper</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">wait_key</span><span style="color: #0000FF;">())</span>
if ch='S' then state = DISPENSE exit end if
<span style="color: #008080;">if</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">=</span><span style="color: #008000;">'S'</span> <span style="color: #008080;">then</span> <span style="color: #000000;">state</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">DISPENSE</span> <span style="color: #008080;">exit</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
if ch='R' then state = REFUND exit end if
<span style="color: #008080;">if</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">=</span><span style="color: #008000;">'R'</span> <span style="color: #008080;">then</span> <span style="color: #000000;">state</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">REFUND</span> <span style="color: #008080;">exit</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end while
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span>
 
case DISPENSE: printf(1,"Dispensing product...")
<span style="color: #008080;">case</span> <span style="color: #000000;">DISPENSE</span><span style="color: #0000FF;">:</span> <span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Dispensing product..."</span><span style="color: #0000FF;">)</span>
printf(1,"Please (C)ollect product. :")
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Please (C)ollect product. :"</span><span style="color: #0000FF;">)</span>
while true do
<span style="color: #008080;">while</span> <span style="color: #004600;">true</span> ch<span style="color: upper(wait_key())#008080;">do</span>
<span style="color: #000000;">ch</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">upper</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">wait_key</span><span style="color: #0000FF;">())</span>
if ch='C' then state = READY exit end if
<span style="color: #008080;">if</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">=</span><span style="color: #008000;">'C'</span> <span style="color: #008080;">then</span> <span style="color: #000000;">state</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">READY</span> <span style="color: #008080;">exit</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end while
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span>
 
case REFUND: printf(1,"Please collect refund.")
<span style="color: #008080;">case</span> <span style="color: #000000;">REFUND</span><span style="color: #0000FF;">:</span> <span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Please collect refund."</span><span style="color: #0000FF;">)</span>
state = READY
<span style="color: #000000;">state</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">READY</span>
ch = ' '
<span style="color: #000000;">ch</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">' '</span>
 
case QUIT: printf(1,"Thank you, shutting down now.\n")
<span style="color: #008080;">case</span> <span style="color: #000000;">QUIT</span><span style="color: #0000FF;">:</span> <span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Thank you, shutting down now.\n"</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">exit</span>
end switch
<span style="color: #008080;">end</span> <span style="color: #008080;">switch</span>
end while</lang>
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span>
<!--</lang>-->
{{out}}
<pre>
7,820

edits