A programming framework is provided for designing and implementing software state
machines. A state machine initializer may be created that defines the states, conditions,
actions, triggers, and state transitions for the software state machines. A set
of user interfaces, may also be provided for creating initializers. An abstract
state machine object may then be created that creates an instance of a particular
state machine initializer. The state machine initializer acts as a helper to the
state machine object, which uses the initializer to create an array of state transition
objects. A set of programming interfaces may also be provided to define the programming
framework. Events generated by one state machine may be used as triggers by another
state machine. Furthermore, state values of one state machine may be used as inputs
by other state machines. State machines may also share triggers and inputs.