summaryrefslogtreecommitdiff
path: root/reference/C/CONTRIB/SNIP/fsm.c
diff options
context:
space:
mode:
authorTobias Klauser <tklauser@distanz.ch>2008-01-27 11:37:44 +0100
committerTobias Klauser <tklauser@xenon.tklauser.home>2008-01-27 11:37:44 +0100
commit7e0f021a9aec35fd8e6725e87e3313b101d26f5e (patch)
treeb1cacc4b24393f517aeb4610e9e1021f954307a8 /reference/C/CONTRIB/SNIP/fsm.c
Initial import (2.0.2-6)2.0.2-6
Diffstat (limited to 'reference/C/CONTRIB/SNIP/fsm.c')
-rwxr-xr-xreference/C/CONTRIB/SNIP/fsm.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/reference/C/CONTRIB/SNIP/fsm.c b/reference/C/CONTRIB/SNIP/fsm.c
new file mode 100755
index 0000000..58c4220
--- /dev/null
+++ b/reference/C/CONTRIB/SNIP/fsm.c
@@ -0,0 +1,37 @@
+/*
+** code snippet demonstrating a finite state machine (FSM)
+*/
+
+typedef enum {s0,s1,s2,s3,s4,...,sn,sexit} state;
+
+state nextstate;
+int done = 0;
+
+nextstate = s0; /* set up to start with the first state */
+while(!done)
+ switch(nextstate)
+ {
+ case s0:
+ nextstate = do_state_0();
+ break;
+ case s1:
+ nextstate = do_state_1();
+ break;
+ case s2:
+ nextstate = do_state_2();
+ break;
+ case s3:
+ .
+ .
+ .
+ .
+ case sn:
+ nextstate = do_state_n();
+ break;
+ case sexit:
+ done = TRUE;
+ break;
+ default:
+ /* some sort of unknown state */
+ break;
+ }