install_t install_time() { MODULE_user = PL_new_module(PL_new_atom("user")); FUNCTOR_alarm1 = PL_new_functor(PL_new_atom("$alarm"), 1); FUNCTOR_alarm4 = PL_new_functor(PL_new_atom("alarm"), 4); FUNCTOR_module2 = PL_new_functor(PL_new_atom(":"), 2); ATOM_remove = PL_new_atom("remove"); ATOM_install = PL_new_atom("install"); ATOM_done = PL_new_atom("done"); ATOM_next = PL_new_atom("next"); ATOM_scheduled = PL_new_atom("scheduled"); PREDICATE_call1 = PL_predicate("call", 1, "user"); PL_register_foreign("alarm_at", 4, alarm4_abs, PL_FA_TRANSPARENT); PL_register_foreign("alarm", 4, alarm4_rel, PL_FA_TRANSPARENT); PL_register_foreign("alarm_at", 3, alarm3_abs, PL_FA_TRANSPARENT); PL_register_foreign("alarm", 3, alarm3_rel, PL_FA_TRANSPARENT); PL_register_foreign("remove_alarm", 1, remove_alarm, 0); PL_register_foreign("uninstall_alarm",1, uninstall_alarm,0); PL_register_foreign("install_alarm", 1, install_alarm, 0); PL_register_foreign("install_alarm", 2, install_alarm2, 0); PL_register_foreign("remove_alarm_notrace",1, remove_alarm, PL_FA_NOTRACE); PL_register_foreign("current_alarms", 5, current_alarms, 0); #ifdef O_DEBUG PL_register_foreign("time_debug", 1, pl_time_debug, 0); #endif installHandler(); PL_on_halt(cleanup, NULL); }
/** * Checks whether the internal handlers, if any, are installed. * @return JSR211_OK or JSR211_FAILED - if registry corrupted or OUT_OF_MEMORY. */ jsr211_result jsr211_check_internal_handlers() { int i; for (i = 0; i < nHandlers; i++) { JSR211_RESULT_CH handler = _JSR211_RESULT_INITIALIZER_; jsr211_get_handler(&PCSL_STRING_NULL, handlerIds[i], JSR211_SEARCH_EXACT, &handler); if (handler.buf == NULL) { if (JSR211_OK != installHandler(i)) { return JSR211_FAILED; } } else { pcsl_mem_free(handler.buf); } } return JSR211_OK; }
void parent(int pid, int pty) { unsigned char buf[BUFFER_SIZE]; int i; int val; int rc; if(verbose) { reportIso2022(outputState); } #ifdef SIGWINCH installHandler(SIGWINCH, sigwinchHandler); #endif installHandler(SIGCHLD, sigchldHandler); rc = copyTermios(0, pty); if(rc < 0) FatalError("Couldn't copy terminal settings\n"); rc = setRawTermios(); if(rc < 0) FatalError("Couldn't set terminal to raw\n"); val = fcntl(0, F_GETFL, 0); if(val >= 0) { fcntl(0, F_SETFL, val | O_NONBLOCK); } val = fcntl(pty, F_GETFL, 0); if(val >= 0) { fcntl(pty, F_SETFL, val | O_NONBLOCK); } setWindowSize(0, pty); for(;;) { rc = waitForInput(0, pty); if(sigwinch_queued) { sigwinch_queued = 0; setWindowSize(0, pty); } if(sigchld_queued && exitOnChild) break; if(rc > 0) { if(rc & 2) { i = read(pty, buf, BUFFER_SIZE); if((i == 0) || ((i < 0) && (errno != EAGAIN))) break; if(i > 0) copyOut(outputState, 0, buf, i); } if(rc & 1) { i = read(0, buf, BUFFER_SIZE); if((i == 0) || ((i < 0) && (errno != EAGAIN))) break; if(i > 0) copyIn(inputState, pty, buf, i); } } } restoreTermios(); }