Jump to content

Finite state machine: Difference between revisions

→‎{{header|Phix}}: replaced with GUI version, added online link
(→‎{{header|Phix}}: replaced with GUI version, added online link)
Line 1,758:
 
=={{header|Phix}}==
{{libheader|Phix/pGUI}}
<!--<lang Phix>(notonline)-->
{{libheader|Phix/online}}
<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>
You can run this online [http://phix.x10.mx/p2js/fsm.htm here].
<!--<lang Phix>(notonlinephixonline)-->
<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>
<span style="color: #008080000080;">while</span> <span font-style="color: #004600italic;">true</span> <span style="color: #008080;">do</span>--
-- demo\rosetta\Finite_State_Machine.exw
<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>
-- =====================================
<span style="color: #008080;">switch</span> <span style="color: #000000;">state</span> <span style="color: #008080;">do</span>
--</span>
<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>
<span style="color: #008080;">while</span> <span style="color: #004600;">truewith</span> <span style="color: #008080;">dojavascript_semantics</span>
<span style="color: #000080;font-style:italic;">-- First, let's define our state machine textually, why not:</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>
<span style="color: #008080;">ifconstant</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;">statestate_string</span> <span style="color: #0000FF;">=</span> <span style="color: #000000008000;">WAITING</span> <span style="color: #008080;">exit</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
Ready,Deposit-&gt;Waiting,Quit
<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>
Waiting,Select-&gt;Dispense,Refund
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span>
Dispense,Remove-&gt;Ready:Remove product
Refund-&gt;Ready:Refunding money
<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>
Quit:Bye
<span style="color: #008080;">while</span> <span style="color: #004600;">true</span> <span style="color: #008080;">do</span>
"""</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>
<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>
<span style="color: #008080;">iffunction</span> <span style="color: #000000;">chdecode</span><span style="color: #0000FF;">=(</span><span style="color: #008000004080;">'R'</span> <span style="color: #008080;">thenstring</span> <span style="color: #000000;">statestate_string</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>
<span style="color: #004080;">sequence</span> <span style="color: #000000;">states</span> <span style="color: #0080800000FF;">end=</span> <span style="color: #0080800000FF;">while{},</span>
<span style="color: #008080000000;">whilemessages</span> <span style="color: #0046000000FF;">true=</span> <span style="color: #0080800000FF;">do{},</span>
<span style="color: #008080;">case</span> <span style="color: #000000;">DISPENSEvalid_keys</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>
<span style="color: #008080;">for</span> <span style="color: #000000;">line</span> <span style="color: #008080;">in</span> <span style="color: #7060A8;">printfsplit</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1state_string</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Please (C)ollect product. :\n"</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
<span style="color: #004080;">sequence</span> <span style="color: #008080000000;">whilestate</span> <span style="color: #0046000000FF;">true=</span> <span style="color: #0080800000FF;">do{}</span>
<span style="color: #000000004080;">chstring</span> <span style="color: #0000FF000000;">=keyable</span> <span style="color: #7060A80000FF;">upper=</span><span style="color: #0000FF;">(</span><span style="color: #7060A8008000;">wait_key</span><span style="color: #0000FF;">())</span>
<span style="color: #008080004080;">ifinteger</span> <span style="color: #000000;">chm</span> <span style="color: #0000FF;">=</span> <span style="color: #0080007060A8;">'C'find</span> <span style="color: #0080800000FF;">then(</span> <span style="color: #000000008000;">state':'</span> <span style="color: #0000FF;">=,</span> <span style="color: #000000;">READYline</span> <span style="color: #008080;">exit</span> <span style="color: #008080;">end</span> <span style="color: #0080800000FF;">if)</span>
<span style="color: #000000;">messages</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #000000;">messages</span><span style="color: #0000FF;">,</span><span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #000000;">m</span><span style="color: #0000FF;">?</span><span style="color: #000000;">line</span><span style="color: #0000FF;">[</span><span style="color: #000000;">m</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">..$]:</span><span style="color: #008000;">""</span><span style="color: #0000FF;">))</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">phrase</span> <span style="color: #008080;">in</span> <span style="color: #7060A8;">split</span><span style="color: #0000FF;">(</span><span style="color: #000000;">line</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">..</span><span style="color: #000000;">m</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">],</span><span style="color: #008000;">","</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
<span style="color: #008080000000;">casestate</span> <span style="color: #0000000000FF;">REFUND=</span> <span style="color: #0000FF7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #000000;">state</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">printfsplit</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1phrase</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Please collect refund.-&gt;"</span><span style="color: #0000FF;">))</span>
<span style="color: #000000;">keyable</span> <span style="color: #0000FF;">&=</span> <span style="color: #000000;">statephrase</span> <span style="color: #0000FF;">=[</span> <span style="color: #000000;">READY1</span><span style="color: #0000FF;">]</span>
<span style="color: #000000008080;">chend</span> <span style="color: #0000FF008080;">=</span> <span style="color: #008000;">' 'for</span>
<span style="color: #7060A8000000;">printfstates</span> <span style="color: #0000FF;">(=</span> <span style="color: #0000007060A8;">1append</span><span style="color: #0000FF;">,(</span><span style="color: #008000000000;">"%c\n"states</span><span style="color: #0000FF;">,</span><span style="color: #000000;">chstate</span><span style="color: #0000FF;">)</span>
<span style="color: #008080000000;">casevalid_keys</span> <span style="color: #0000000000FF;">QUIT=</span> <span style="color: #0000FF7060A8;">:append</span><span style="color: #0000FF;">(</span><span style="color: #7060A8000000;">printfvalid_keys</span><span style="color: #0000FF;">(,</span><span style="color: #000000;">1keyable</span><span style="color: #0000FF;">,[</span><span style="color: #008000000000;">"Thank you, shutting down now.\n"2</span><span style="color: #0000FF;">..$])</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">exitfor</span>
<span style="color: #008080;">endreturn</span> <span style="color: #0080800000FF;">switch{</span><span style="color: #000000;">states</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">messages</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">valid_keys</span><span style="color: #0000FF;">}</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">whilefunction</span>
<span style="color: #008080;">constant</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">states</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">messages</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">valid_keys</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">decode</span><span style="color: #0000FF;">(</span><span style="color: #000000;">state_string</span><span style="color: #0000FF;">),</span>
<span style="color: #000000;">valid_states</span> <span style="color: #0080800000FF;">if=</span> <span style="color: #0000007060A8;">chvslice</span><span style="color: #0000FF;">=(</span><span style="color: #0080007060A8;">'Q'vslice</span> <span style="color: #0080800000FF;">then(</span> <span style="color: #000000;">statestates</span> <span style="color: #0000FF;">=,</span> <span style="color: #000000;">QUIT1</span> <span style="color: #0080800000FF;">exit),</span> <span style="color: #008080000000;">end1</span> <span style="color: #0080800000FF;">if)</span>
<span style="color: #008080;">include</span> <span style="color: #000000;">pGUI</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span>
<span style="color: #004080;">Ihandle</span> <span style="color: #000000;">dlg</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">vbox</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">state</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">status</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">options</span>
<span style="color: #000000008080;">chprocedure</span> <span style="color: #0000FF000000;">=transition_to</span> <span style="color: #7060A80000FF;">upper(</span><span style="color: #0000FF004080;">(integer</span> <span style="color: #7060A8000000;">wait_keysdx</span><span style="color: #0000FF;">())</span>
<span style="color: #7060A8;">IupSetAttribute</span><span style="color: #0000FF;">(</span><span style="color: #000000;">status</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"TITLE"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">messages</span><span style="color: #0000FF;">[</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">])</span>
<span style="color: #008080;">enumif</span> <span style="color: #0000007060A8;">READYlength</span><span style="color: #0000FF;">,(</span> <span style="color: #000000;">WAITINGstates</span><span style="color: #0000FF;">,[</span> <span style="color: #000000;">DISPENSEsdx</span><span style="color: #0000FF;">,][</span> <span style="color: #000000;">REFUND1</span><span style="color: #0000FF;">,])=</span> <span style="color: #000000;">QUIT2</span> <span style="color: #008080;">then</span> <span style="color: #000080;font-style:italic;">-- (or just use strings if you preferimplicit)</span>
<span style="color: #000000;">sdx</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">find</span><span style="color: #0000FF;">(</span><span style="color: #000000;">states</span><span style="color: #0000FF;">[</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">][</span><span style="color: #000000;">1</span><span style="color: #0000FF;">][</span><span style="color: #000000;">2</span><span style="color: #0000FF;">],</span><span style="color: #000000;">valid_states</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">whileif</span>
<span style="color: #7060A8;">IupSetAttribute</span><span style="color: #0000FF;">(</span><span style="color: #000000;">state</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"TITLE"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">valid_states</span><span style="color: #0000FF;">[</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">])</span>
<span style="color: #7060A8;">IupSetStrAttribute</span><span style="color: #0000FF;">(</span><span style="color: #000000;">options</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"TITLE"</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">join</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">vslice</span><span style="color: #0000FF;">(</span><span style="color: #000000;">states</span><span style="color: #0000FF;">[</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">][</span><span style="color: #000000;">2</span><span style="color: #0000FF;">..$],</span><span style="color: #000000;">1</span><span style="color: #0000FF;">),</span><span style="color: #008000;">" or "</span><span style="color: #0000FF;">))</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">finite_state_machine</span><span style="color: #0000FF;">(</span><span style="color: #004080;">atom</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">sdx</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">find</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">IupGetAttribute</span><span style="color: #0000FF;">(</span><span style="color: #000000;">state</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"TITLE"</span><span style="color: #0000FF;">),</span><span style="color: #000000;">valid_states</span><span style="color: #0000FF;">),</span>
<span style="color: #008080000000;">ifcdx</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">=</span> <span style="color: #0080007060A8;">'S'find</span> <span style="color: #0080800000FF;">then(</span> <span style="color: #000000;">statec</span> <span style="color: #0000FF;">=,</span> <span style="color: #000000;">DISPENSEvalid_keys</span> <span style="color: #0080800000FF;">exit[</span> <span style="color: #008080000000;">endsdx</span> <span style="color: #0080800000FF;">if])</span>
<span style="color: #008080;">switchif</span> <span style="color: #000000;">statecdx</span> <span style="color: #008080;">dothen</span>
<span style="color: #008080004080;">casestring</span> <span style="color: #000000;">READYnewstate</span> <span style="color: #0000FF;">:=</span> <span style="color: #7060A8000000;">printfstates</span><span style="color: #0000FF;">([</span><span style="color: #000000;">1sdx</span><span style="color: #0000FF;">,][</span><span style="color: #008000000000;">cdx</span><span style="Machinecolor: is READY. (D)eposit or (Q)uit#0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)][$]</span>
<span style="color: #008080000000;">casesdx</span> <span style="color: #0000000000FF;">WAITING</span><span style="color: #0000FF;">:</span> <span style="color: #7060A8;">printffind</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1newstate</span><span style="color: #0000FF;">,</span><span style="color: #008000000000;">"(S)elect product or choose to (R)efund :"valid_states</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">transition_to</span><span style="color: #0000FF;">(</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">whileif</span>
<span style="color: #008080;">return</span> <span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #000000;">valid_states</span><span style="color: #0000FF;">[</span><span style="color: #000000;">sdx</span><span style="color: #0000FF;">]=</span><span style="color: #008000;">`Quit`</span><span style="color: #0000FF;">?</span><span style="color: #004600;">IUP_CLOSE</span><span style="color: #0000FF;">:</span><span style="color: #004600;">IUP_CONTINUE</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">key_cb</span><span style="color: #0000FF;">(</span><span style="color: #004080;">Ihandle</span> <span style="color: #000080;font-style:italic;">/*dlg*/</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">atom</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">=</span><span style="color: #004600;">K_ESC</span> <span style="color: #008080;">then</span> <span style="color: #008080;">return</span> <span style="color: #004600;">IUP_CLOSE</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span> <span style="color: #000080;font-style:italic;">-- (standard practice for me)</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">=</span><span style="color: #004600;">K_F5</span> <span style="color: #008080;">then</span> <span style="color: #008080;">return</span> <span style="color: #004600;">IUP_DEFAULT</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span> <span style="color: #000080;font-style:italic;">-- (let browser reload work)</span>
<span style="color: #008080;">return</span> <span style="color: #000000;">chfinite_state_machine</span> <span style="color: #0000FF;">=(</span> <span style="color: #7060A8;">upper</span><span style="color: #0000FF;">(</span><span style="color: #7060A8000000;">wait_keyc</span><span style="color: #0000FF;">())</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<span style="color: #7060A8;">IupOpen</span><span style="color: #0000FF;">()</span>
<span style="color: #004080000000;">integerstate</span> <span style="color: #0000000000FF;">state=</span> <span style="color: #0000FF7060A8;">=IupLabel</span> <span style="color: #0000000000FF;">READY(</span><span style="color: #0000FF008000;">,""</span> <span style="color: #0000000000FF;">ch,</span> <span style="color: #0000FF008000;">"EXPAND=YES"</span> <span style="color: #0080000000FF;">' ')</span>
<span style="color: #000000;">status</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">IupLabel</span><span style="color: #0000FF;">(</span><span style="color: #008000;">""</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"EXPAND=YES"</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">options</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">IupLabel</span><span style="color: #0000FF;">(</span><span style="color: #008000;">""</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"EXPAND=YES"</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">vbox</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">IupVbox</span><span style="color: #0000FF;">({</span><span style="color: #000000;">state</span><span style="color: #0000FF;">,</span><span style="color: #000000;">status</span><span style="color: #0000FF;">,</span><span style="color: #000000;">options</span><span style="color: #0000FF;">},</span><span style="color: #008000;">`MARGIN=40x40`</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">dlg</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">IupDialog</span><span style="color: #0000FF;">(</span><span style="color: #000000;">vbox</span><span style="color: #0000FF;">,</span><span style="color: #008000;">`TITLE="Finite State Machine",SIZE=200x100`</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">IupSetCallback</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dlg</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"KEY_CB"</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">Icallback</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"key_cb"</span><span style="color: #0000FF;">))</span>
<span style="color: #000000;">transition_to</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- Ready</span>
<span style="color: #7060A8;">IupShow</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dlg</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">if</span> <span style="color: #7060A8;">platform</span><span style="color: #0000FF;">()!=</span><span style="color: #004600;">JS</span> <span style="color: #008080;">then</span>
<span style="color: #7060A8;">IupMainLoop</span><span style="color: #0000FF;">()</span>
<span style="color: #7060A8;">IupHide</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dlg</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<!--</lang>-->
{{out}}
<pre>
Machine is READY. (D)eposit or (Q)uit :D
(S)elect product or choose to (R)efund :S
Dispensing product...Please (C)ollect product. :C
Machine is READY. (D)eposit or (Q)uit :D
(S)elect product or choose to (R)efund :R
Please collect refund.
Machine is READY. (D)eposit or (Q)uit :Q
Thank you, shutting down now.
</pre>
 
=={{header|PicoLisp}}==
7,818

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.