+ return E_SUCCESS;
+}
+
+int event_math(int fd,t_event *event,char rw,char ar) {
+
+ if(ar==ADD) {
+ if(rw==READ) FD_SET(fd,&(event->rfds_o));
+ else FD_SET(fd,&(event->wfds_o));
+ if(fd>event->maxfd) event->maxfd=fd;
+ } else {
+ if(rw==READ) FD_CLR(fd,&(event->rfds_o));
+ else FD_CLR(fd,&(event->wfds_o));
+ if(fd==event->maxfd) event->maxfd-=1;
+ }
+
+ printf("[event] %c fd %d to %c file descriptor set\n",ar==ADD?'+':'-',fd,
+ rw==READ?'r':'w');
+
+ return E_SUCCESS;
+}
+
+int event_start(t_event *event,void *ptr,
+ int (*callback0)(t_event *event,void *ptr),
+ int (*callback1)(t_event *event,void *ptr)) {
+
+ int s_ret;
+
+ /* switch on event system */
+ event->status=ENABLED;
+
+ while(event->status&ENABLED) {
+
+ event->rfds=event->rfds_o;
+ event->wfds=event->wfds_o;
+
+ if((s_ret=select(event->maxfd+1,&(event->rfds),&(event->wfds),NULL,
+ &(event->timeout)))==-1) {
+ perror("[event] select call");
+ return E_ERROR;
+ }
+
+ if(s_ret) {
+ /* 1+ fd(s) available for reading/writing */
+ if(callback0(event,ptr)==CALLBACK_ERROR) {
+ puts("[event] callback0 returned error");
+ return E_ERROR;
+ }
+ }
+
+ /* usual stuff to be executed */
+ if(callback1(event,ptr)==CALLBACK_ERROR) {
+ puts("[event] callback returned error");
+ return E_ERROR;
+ }
+
+ }
+
+ return E_SUCCESS;
+}
+
+int event_stop(t_event *event) {
+
+ puts("[event] shutdown");
+ event->status=DISABLED;
+
+ return E_SUCCESS;