00001
00028
00029
00030
00031
00032
00033 #ifndef CALLBACK_H_INCLUDED
00034 #define CALLBACK_H_INCLUDED
00035
00036
00037
00038
00039 typedef enum {
00040 NO_CALLBACK,
00041 SYSTEM_STARTUP_CALLBACK,
00042 SYSTEM_TERMINATION_CALLBACK,
00043 BEFORE_INIT_SOAR_CALLBACK,
00044 AFTER_INIT_SOAR_CALLBACK,
00045 AFTER_HALT_SOAR_CALLBACK,
00046 BEFORE_SCHEDULE_CYCLE_CALLBACK,
00047 AFTER_SCHEDULE_CYCLE_CALLBACK,
00048 BEFORE_DECISION_CYCLE_CALLBACK,
00049 AFTER_DECISION_CYCLE_CALLBACK,
00050 BEFORE_INPUT_PHASE_CALLBACK,
00051 INPUT_PHASE_CALLBACK,
00052 AFTER_INPUT_PHASE_CALLBACK,
00053 BEFORE_PREFERENCE_PHASE_CALLBACK,
00054 AFTER_PREFERENCE_PHASE_CALLBACK,
00055 BEFORE_WM_PHASE_CALLBACK,
00056 AFTER_WM_PHASE_CALLBACK,
00057 BEFORE_OUTPUT_PHASE_CALLBACK,
00058 OUTPUT_PHASE_CALLBACK,
00059 AFTER_OUTPUT_PHASE_CALLBACK,
00060 BEFORE_DECISION_PHASE_CALLBACK,
00061 AFTER_DECISION_PHASE_CALLBACK,
00062 WM_CHANGES_CALLBACK,
00063 CREATE_NEW_CONTEXT_CALLBACK,
00064 POP_CONTEXT_STACK_CALLBACK,
00065 CREATE_NEW_ATTRIBUTE_IMPASSE_CALLBACK,
00066 REMOVE_ATTRIBUTE_IMPASSE_CALLBACK,
00067 PRODUCTION_JUST_ADDED_CALLBACK,
00068 PRODUCTION_JUST_ABOUT_TO_BE_EXCISED_CALLBACK,
00069 FIRING_CALLBACK,
00070 RETRACTION_CALLBACK,
00071 SYSTEM_PARAMETER_CHANGED_CALLBACK,
00072 PRINT_CALLBACK,
00073 LOG_CALLBACK,
00074 ASK_CALLBACK,
00075 WAIT_CALLBACK,
00076 #ifdef ATTENTION_LAPSE
00077 INIT_LAPSE_DURATION_CALLBACK,
00078 #endif
00079
00080
00081 NUMBER_OF_CALLBACKS
00082
00083
00084
00085 } SOAR_CALLBACK_TYPE;
00086
00087 #define NUMBER_OF_MONITORABLE_CALLBACKS (NUMBER_OF_CALLBACKS - 2)
00088
00089
00090 typedef enum {
00091 NO_GLOBAL_CALLBACK,
00092 GLB_CREATE_AGENT,
00093 GLB_AGENT_CREATED,
00094 GLB_DESTROY_AGENT,
00095 NUMBER_OF_GLOBAL_CALLBACKS
00096
00097 } SOAR_GLOBAL_CALLBACK_TYPE;
00098
00099 typedef list * soar_global_callback_array[NUMBER_OF_GLOBAL_CALLBACKS];
00100
00101
00377 typedef list * soar_callback_array[NUMBER_OF_CALLBACKS];
00378
00383 typedef void * soar_callback_agent;
00384
00388 typedef char * soar_callback_id;
00389
00396 typedef void * soar_callback_data;
00397
00403 typedef void * soar_call_data;
00404
00409 typedef void (*soar_callback_fn)(soar_callback_agent,
00410 soar_callback_data,
00411 soar_call_data);
00412
00413
00414 typedef void (*soar_callback_free_fn)(soar_callback_data);
00415
00416 typedef struct callback_struct
00417 {
00418 soar_callback_id id;
00419 soar_callback_fn function;
00420 soar_callback_data data;
00421 soar_callback_free_fn free_function;
00422 } soar_callback;
00423
00424
00425 extern void soar_callback_data_free_string (soar_callback_data);
00426 extern char * soar_callback_enum_to_name (SOAR_CALLBACK_TYPE, bool);
00427 extern void soar_destroy_callback(soar_callback *);
00428 extern bool soar_exists_callback (soar_callback_agent, SOAR_CALLBACK_TYPE);
00429 extern soar_callback * soar_exists_callback_id (soar_callback_agent the_agent,
00430 SOAR_CALLBACK_TYPE callback_type,
00431 soar_callback_id id);
00432 extern void soar_init_callbacks (soar_callback_agent);
00433 extern void soar_init_global_callbacks( void );
00434
00435 extern void soar_invoke_callbacks (soar_callback_agent, SOAR_CALLBACK_TYPE,
00436 soar_call_data);
00437 extern void soar_invoke_global_callbacks ( soar_callback_agent,
00438 SOAR_CALLBACK_TYPE,
00439 soar_call_data);
00440 extern void soar_invoke_first_callback (soar_callback_agent,
00441 SOAR_CALLBACK_TYPE,
00442 soar_call_data);
00443 extern bool soar_exists_global_callback( SOAR_GLOBAL_CALLBACK_TYPE );
00444
00445
00446 #endif