static void switcher_led_timer(void *opaque) { static struct timer_t *t = NULL; struct timeval tv; static int onoff = 0; opaque = opaque; if (onoff == 1 && (!mouse_grab_domain || !keyboard_grab_domain || mouse_grab_domain == keyboard_grab_domain)) { if (t) { free_timer(t); t = NULL; } return; } input_leds(onoff); onoff = !onoff; if (t == NULL) t = set_new_timer(switcher_led_timer, NULL); gettimeofday(&tv, NULL); tv.tv_usec += 500 * 1000; if (tv.tv_usec > 1000000) { tv.tv_usec -= 1000000; tv.tv_sec++; } set_timer(t, &tv); }
/* * Extracts a specific timer from a player. */ void extract_timer(CHAR_DATA *ch, TIMER *timer) { if (!timer) { bug("extract_timer: NULL timer", 0); return; } UNLINK(timer, ch->first_timer, ch->last_timer, next, prev); free_timer(timer); return; } // end extract_timer
int main(int argc, char *argv[]) { int ret = 1, i, idx; dldev_t dev; tymer_t db; u8 *data; u16 len; /* for data security */ /* umask(S_IRWXG | S_IRWXO); */ i = strlen(argv[0]) - 1; for(; i >= 0 && argv[0][i] != '/'; i--); i++; if(strstr(argv[0] + i, "interval")){ set_timer(POR_INTERVAL); is_countdn = 0; } while((i = getopt(argc, argv, "hd:")) != -1){ switch(i){ case 'd': dev_file = optarg; break; case 'h': default: usage(); break; } } argc -= optind; argv += optind; #ifdef USB_USBHID dev.usb.file = dev_file; #endif if(open_dev(&dev)){ ERROR("open_dev"); goto exit; } if(start_session(&dev)){ ERROR("read_app_info"); goto exit; } /******************************************************************************/ #ifdef DEBUG for(i = 0; i < NUM_APPS; i++){ if(!dev.app[i].acd.app_idx) continue; printf("%2d: %d%d%d%d%d%d%d%d %02x %02x %04x %04x %04x %04x %04x %04x %s\n", i, dev.app[i].acd.app_idx, dev.app[i].acd.code_loc, dev.app[i].acd.db_loc, dev.app[i].acd.code_invalid, dev.app[i].acd.db_modified, dev.app[i].acd.db_invalid, dev.app[i].acd.passwd_req, dev.app[i].acd.mode_name, dev.app[i].acb.app_type, dev.app[i].acb.app_inst, dev.app[i].acb.asd_addr, dev.app[i].acb.add_addr, dev.app[i].acb.state_mgr_addr, dev.app[i].acb.refresh_addr, dev.app[i].acb.banner_addr, dev.app[i].acb.code_addr, dev.app[i].banner ); } #endif /******************************************************************************/ if((idx = find_app(&dev, uapp_name)) < 0){ ERROR("%s application not found", uapp_name); goto end; } if(dump_add(&dev, idx, &data, &len)){ ERROR("dump_add"); goto end; } read_timer(&db, data); free(data); print_timer(&db, stdout); free_timer(&db); /******************************************************************************/ end: if(end_session(&dev)){ ERROR("end_session"); goto exit; } ret = 0; exit: close_dev(&dev); exit(ret); }
int main(int argc, char *argv[]) { int ret = 1, istty, i, idx; char *msg = NULL, *timer = NULL, *at_end = NULL, *halfway = NULL; dldev_t dev; tymer_t db; u8 *data; u16 len; /* for data security */ /* umask(S_IRWXG | S_IRWXO); */ istty = isatty(0); i = strlen(argv[0]) - 1; for(; i >= 0 && argv[0][i] != '/'; i--); i++; if(strstr(argv[0] + i, "interval")){ set_timer(POR_INTERVAL); is_countdn = 0; } while((i = getopt(argc, argv, "hd:")) != -1){ switch(i){ case 'd': dev_file = optarg; break; case 'h': default: usage(); break; } } argc -= optind; argv += optind; #ifdef USB_USBHID dev.usb.file = dev_file; #endif BEGIN_OPT() OPT("msg", msg) OPT("timer", timer) OPT("at_end", at_end) OPT("halfway", halfway) END_OPT() /* allows the user to change only at_end in interval timer */ if(istty && ((!msg || !timer) && (is_countdn || !at_end))) usage(); if(open_dev(&dev)){ ERROR("open_dev"); goto exit; } if(start_session(&dev)){ ERROR("read_app_info"); goto exit; } /******************************************************************************/ #ifdef DEBUG for(i = 0; i < NUM_APPS; i++){ if(!dev.app[i].acd.app_idx) continue; printf("%2d: %d%d%d%d%d%d%d%d %02x %02x %04x %04x %04x %04x %04x %04x %s\n", i, dev.app[i].acd.app_idx, dev.app[i].acd.code_loc, dev.app[i].acd.db_loc, dev.app[i].acd.code_invalid, dev.app[i].acd.db_modified, dev.app[i].acd.db_invalid, dev.app[i].acd.passwd_req, dev.app[i].acd.mode_name, dev.app[i].acb.app_type, dev.app[i].acb.app_inst, dev.app[i].acb.asd_addr, dev.app[i].acb.add_addr, dev.app[i].acb.state_mgr_addr, dev.app[i].acb.refresh_addr, dev.app[i].acb.banner_addr, dev.app[i].acb.code_addr, dev.app[i].banner ); } #endif /******************************************************************************/ if((idx = find_app(&dev, uapp_name)) < 0){ ERROR("%s application not found", uapp_name); goto end; } if(dump_add(&dev, idx, &data, &len)){ ERROR("dump_add"); goto end; } read_timer(&db, data); free(data); if(!istty) add_timer_file(&db, stdin); if(msg && timer){ char buf[BUFSIZ]; timer_data_t rec; sprintf(buf, "%s\t%s\t%s%s", msg, timer, (at_end ? at_end : "stop"), (halfway && strcmp(halfway, "no") ? "\thalfway" : "")); if(read_timer_line(&rec, buf)) fprintf(stderr, "add_%s: format error!\n", lapp_name); else if(find_timer(&db, &rec) < 0) add_timer(&db, &rec); } if(!is_countdn && at_end){ int i; for(i = 0; i < 3 && strcmp(at_end, timer_at_end[i]); i++); if(i < 3){ set_timer_at_end(i); update_timer_at_end(&db); } } create_timer(&db, &data, &len); if(load_add(&dev, idx, data)){ ERROR("load_add"); goto end; } free(data); print_timer(&db, stdout); free_timer(&db); /******************************************************************************/ end: if(end_session(&dev)){ ERROR("end_session"); goto exit; } ret = 0; exit: close_dev(&dev); exit(ret); }
void protobuf_c_dispatch_dispatch (ProtobufCDispatch *dispatch, size_t n_notifies, ProtobufC_FDNotify *notifies) { RealDispatch *d = (RealDispatch *) dispatch; unsigned fd_max; unsigned i; struct timeval tv; /* Re-entrancy guard. If this is triggerred, then you are calling protobuf_c_dispatch_dispatch (or _run) from a callback function. That's not allowed. */ protobuf_c_assert (!d->is_dispatching); d->is_dispatching = 1; gettimeofday (&tv, NULL); dispatch->last_dispatch_secs = tv.tv_sec; dispatch->last_dispatch_usecs = tv.tv_usec; fd_max = 0; for (i = 0; i < n_notifies; i++) if (fd_max < (unsigned) notifies[i].fd) fd_max = notifies[i].fd; ensure_fd_map_big_enough (d, fd_max); for (i = 0; i < n_notifies; i++) d->fd_map[notifies[i].fd].closed_since_notify_started = 0; for (i = 0; i < n_notifies; i++) { unsigned fd = notifies[i].fd; if (!d->fd_map[fd].closed_since_notify_started && d->fd_map[fd].notify_desired_index != -1) { unsigned nd_ind = d->fd_map[fd].notify_desired_index; unsigned events = d->base.notifies_desired[nd_ind].events & notifies[i].events; if (events != 0) d->callbacks[nd_ind].func (fd, events, d->callbacks[nd_ind].data); } } /* clear changes */ for (i = 0; i < dispatch->n_changes; i++) d->fd_map[dispatch->changes[i].fd].change_index = -1; dispatch->n_changes = 0; /* handle idle functions */ while (d->first_idle != NULL) { ProtobufCDispatchIdle *idle = d->first_idle; ProtobufCDispatchIdleFunc func = idle->func; void *data = idle->func_data; GSK_LIST_REMOVE_FIRST (GET_IDLE_LIST (d)); idle->func = NULL; /* set to NULL to render remove_idle a no-op */ func (dispatch, data); idle->next = d->recycled_idles; d->recycled_idles = idle; } dispatch->has_idle = 0; /* handle timers */ while (d->timer_tree != NULL) { ProtobufCDispatchTimer *min_timer; GSK_RBTREE_FIRST (GET_TIMER_TREE (d), min_timer); if (min_timer->timeout_secs < (unsigned long) tv.tv_sec || (min_timer->timeout_secs == (unsigned long) tv.tv_sec && min_timer->timeout_usecs <= (unsigned) tv.tv_usec)) { ProtobufCDispatchTimerFunc func = min_timer->func; void *func_data = min_timer->func_data; GSK_RBTREE_REMOVE (GET_TIMER_TREE (d), min_timer); /* Set to NULL as a way to tell protobuf_c_dispatch_remove_timer() that we are in the middle of notifying */ min_timer->func = NULL; min_timer->func_data = NULL; func (&d->base, func_data); free_timer (min_timer); } else { d->base.has_timeout = 1; d->base.timeout_secs = min_timer->timeout_secs; d->base.timeout_usecs = min_timer->timeout_usecs; break; } } if (d->timer_tree == NULL) d->base.has_timeout = 0; /* Finish reentrance guard. */ d->is_dispatching = 0; }