home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 22 gnu / 22-gnu.zip / gwm18a.zip / wl_fsm.h < prev    next >
C/C++ Source or Header  |  1995-07-03  |  4KB  |  156 lines

  1. /* Copyright 1989 GROUPE BULL -- See license conditions in file COPYRIGHT
  2.  * Copyright 1989 Massachusetts Institute of Technology
  3.  */
  4. /********************\
  5. *              *
  6. *  WOOL_OBJECT  Fsm  *
  7. *  DEFINITIONS         *
  8. *              *
  9. \********************/
  10.  
  11. #ifndef INCLUDE_WL_FSM_H
  12. #define INCLUDE_WL_FSM_H
  13.  
  14. #ifndef INCLUDE_WL_EVENT_H
  15. #include "wl_event.h"
  16. #endif
  17.  
  18. #ifndef INCLUDE_WL_LIST_H
  19. #include "wl_list.h"
  20. #endif
  21.  
  22. #ifndef INCLUDE_WL_ATOM_H
  23. #include "wl_atom.h"
  24. #endif
  25.  
  26. /* type */
  27.  
  28. typedef struct _WOOL_StateArc {
  29.     WOOL_HEADER;
  30.     WOOL_Event        event;        /* on event, */
  31.     WOOL_List        action;        /* do action */
  32.     WOOL_Atom         state;        /* and goto state */
  33. }        *WOOL_StateArc;
  34.  
  35. typedef struct _WOOL_FsmState {
  36.     WOOL_HEADER;
  37.     unsigned int    mask;        /* for all these events */
  38.     unsigned int    user_mask;    /* do we expect user events? */
  39.     struct _WOOL_FsmState *copy_of;    /* is an copy of what state? */
  40.     int            arcs_size;    /* try each of these arcs */
  41.     WOOL_StateArc    arcs[1];
  42. }        *WOOL_FsmState;
  43.  
  44. typedef struct _WOOL_Fsm {
  45.     WOOL_HEADER;
  46.     unsigned int    mask;        /* what events are awaited */
  47.     unsigned int    user_mask;    /* do we expect user events? */
  48.     int            states_size;    /* list of the states */
  49.     WOOL_FsmState    states[1];
  50. }              *WOOL_Fsm;
  51.  
  52. /* exported functions */
  53.  
  54. EXT WOOL_Fsm wool_fsm_make();
  55. EXT WOOL_Fsm WLFsm_make();
  56. EXT WOOL_FsmState wool_fsm_state_make();
  57. EXT WOOL_StateArc wool_state_arc_make();
  58. EXT WOOL_OBJECT WLFsm_free();
  59. EXT WOOL_OBJECT WLFsmState_free();
  60. EXT WOOL_OBJECT WLStateArc_free();
  61. EXT WOOL_OBJECT WLFsm_open();
  62. EXT WOOL_OBJECT WLFsm_print();
  63. EXT WOOL_OBJECT WLFsm_action();
  64. EXT void    fix_fsm();
  65.  
  66. /* exported objects */
  67.  
  68. EXT WOOL_Fsm NIL_FSM;        /* the FSM doing nothing! */
  69.  
  70. /* methods */
  71.  
  72. EXT WOOL_METHOD WLFsm[]
  73. #ifdef DO_INIT
  74. = {
  75.    (WOOL_METHOD) 0,        /* METHODS_ARRAY */
  76.    WLNumber_eval,        /* WOOL_eval 1 */
  77.    WLFsm_print,            /* WOOL_print 2 */
  78.    WLFsm_free,            /* WOOL_free 3 */
  79.    wool_undefined_method_2,    /* WOOL_execute 4 */
  80.    wool_undefined_method_2,    /* WOOL_set 5 */
  81.    wool_undefined_method_1,    /* WOOL_get_C_value 6 */
  82.    WLFsm_open,            /* WOOL_open 7 */
  83.    wool_undefined_method_1,    /* WOOL_close 8 */
  84.    WLFsm_action,        /* WOOL_process_event 9 */
  85.    wool_undefined_method_1,    /* WOOL_copy 10 */
  86.    wool_undefined_method_2,    /* WOOL_get_dimensions 11 */
  87.    wool_undefined_method_2,    /* WOOL_draw 12 */
  88.    wool_undefined_method_2,    /* WOOL_equal 13 */
  89.    wool_undefined_method_2,
  90.    wool_undefined_method_2,
  91.    wool_undefined_method_1,
  92.    wool_undefined_method_1,
  93.    wool_undefined_method_1,
  94.    wool_undefined_method_1,
  95.    wool_undefined_method_1
  96. }
  97. #endif /* DO_INIT */
  98.                ;
  99.  
  100. EXT WOOL_METHOD WLFsmState[]
  101. #ifdef DO_INIT
  102. = {
  103.    (WOOL_METHOD) 0,        /* METHODS_ARRAY */
  104.    WLNumber_eval,
  105.    WLFsm_print,
  106.    WLFsmState_free,
  107.    wool_undefined_method_2,
  108.    wool_undefined_method_2,
  109.    wool_undefined_method_1,
  110.    wool_undefined_method_1,
  111.    wool_undefined_method_1,
  112.    wool_undefined_method_2,
  113.    wool_undefined_method_1,
  114.    wool_undefined_method_2,
  115.    wool_undefined_method_2,
  116.    wool_undefined_method_2,
  117.    wool_undefined_method_2,
  118.    wool_undefined_method_2,
  119.    wool_undefined_method_1,
  120.    wool_undefined_method_1,
  121.    wool_undefined_method_1,
  122.    wool_undefined_method_1,
  123.    wool_undefined_method_1
  124. }
  125. #endif /* DO_INIT */
  126.                ;
  127.  
  128. EXT WOOL_METHOD WLStateArc[]
  129. #ifdef DO_INIT
  130. = {
  131.    (WOOL_METHOD) 0,        /* METHODS_ARRAY */
  132.    WLNumber_eval,
  133.    WLFsm_print,
  134.    WLStateArc_free,
  135.    wool_undefined_method_2,
  136.    wool_undefined_method_2,
  137.    wool_undefined_method_1,
  138.    wool_undefined_method_1,
  139.    wool_undefined_method_1,
  140.    wool_undefined_method_2,
  141.    wool_undefined_method_1,
  142.    wool_undefined_method_2,
  143.    wool_undefined_method_2,
  144.    wool_undefined_method_2,
  145.    wool_undefined_method_2,
  146.    wool_undefined_method_2,
  147.    wool_undefined_method_1,
  148.    wool_undefined_method_1,
  149.    wool_undefined_method_1,
  150.    wool_undefined_method_1,
  151.    wool_undefined_method_1
  152. }
  153. #endif /* DO_INIT */
  154.                ;
  155. #endif /* INCLUDE_WL_FSM_H */
  156.