int main(int argc, char *argv[]) { tty_mode(0); set_cr_noecho_mode(); initscr(); clear(); signal(SIGINT, sigint_handler); signal(SIGIO, on_input); /* install input handler */ setup_aio_buffer(); /* initialize aio ctrl buff */ aio_read(&kbcbuf); /* place a read request */ signal(SIGALRM, on_alarm); /* install alarm handler */ set_ticker(delay); /* start ticking */ move(row, col); addstr(MSG); while (!done) { pause(); } tty_mode(1); endwin(); return 0; }
static VALUE control_block_nbytes_set(VALUE cb, VALUE bytes) { rb_aiocb_t *cbs = GetCBStruct(cb); Check_Type(bytes, T_FIXNUM); cbs->cb.aio_nbytes = FIX2INT(bytes); setup_aio_buffer(cbs); return bytes; }
static VALUE control_block_buf_set(VALUE cb, VALUE buf) { rb_aiocb_t *cbs = GetCBStruct(cb); Check_Type(buf, T_STRING); cbs->cb.aio_nbytes = RSTRING_LEN(buf); setup_aio_buffer(cbs); cbs->cb.aio_buf = RSTRING_PTR(buf); return buf; }
static void rb_aio_lio_listio0(int mode, VALUE *cbs, aiocb_t **list, int ops) { int op; bzero((char *)list, sizeof(list)); for (op=0; op < ops; op++) { rb_aiocb_t *cb = GetCBStruct(RARRAY_PTR(cbs)[op]); setup_aio_buffer(cb); if (rb_block_given_p()){ cb->rcb = rb_block_proc(); } list[op] = &cb->cb; } }
static void control_block_reset0(rb_aiocb_t *cbs) { bzero((char *)cbs, sizeof(rb_aiocb_t)); bzero((char *)&cbs->cb, sizeof(aiocb_t)); /* cleanup with rb_io_close(cb->io) */ cbs->io = Qnil; cbs->rcb = Qnil; cbs->bufsize = 1; cbs->err = 0; cbs->cb.aio_fildes = 0; cbs->cb.aio_buf = NULL; cbs->cb.aio_nbytes = 0; cbs->cb.aio_offset = 0; cbs->cb.aio_reqprio = 0; cbs->cb.aio_lio_opcode = LIO_READ; cbs->cb.aio_sigevent.sigev_notify = SIGEV_SIGNAL; cbs->cb.aio_sigevent.sigev_signo = SIGIO; cbs->cb.aio_sigevent.sigev_value.sival_int = 12; setup_aio_buffer(cbs); }