fork(2) download
  1. #include <stdio.h>
  2.  
  3. #define REGISTER_CALLBACK(e,p) register_callback(e, (callback_void_t)p)
  4. #define GET_CALLBACK(e,T) ((T)callback_func_ptrs[e])
  5.  
  6. typedef void (*callback_s_char_t)(signed char);
  7. typedef void (*callback_void_t)(void);
  8.  
  9. typedef enum {
  10. EVENT1,
  11. EVENT2,
  12. MAX_EVENTS
  13. } event_t;
  14.  
  15. callback_void_t callback_func_ptrs[MAX_EVENTS];
  16.  
  17. void event_func1(signed char direction) {
  18. printf("success rotated: %d\n", direction);
  19. }
  20. void event_func2(void) {
  21. printf("success button pressed\n");
  22. }
  23.  
  24. void register_callback(event_t event, callback_void_t ptr) {
  25. callback_func_ptrs[event] = ptr;
  26. }
  27.  
  28. int main(void) {
  29.  
  30. //register callback functions
  31. REGISTER_CALLBACK(EVENT1, event_func1);
  32. REGISTER_CALLBACK(EVENT2, event_func2);
  33.  
  34. //call callbacks
  35. if(callback_func_ptrs[EVENT1])
  36. GET_CALLBACK(EVENT1,callback_s_char_t)(1);
  37.  
  38. if(callback_func_ptrs[EVENT2])
  39. GET_CALLBACK(EVENT2,callback_void_t)();
  40.  
  41. return 0;
  42. }
  43.  
Success #stdin #stdout 0s 4508KB
stdin
Standard input is empty
stdout
success rotated: 1
success button pressed