summaryrefslogtreecommitdiff
path: root/reference/C/CONTRIB/SNIP/fsm.c
diff options
context:
space:
mode:
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;
+ }