static void select_list_enqueue(termstate_t *term, struct term_select_info *t) { l4semaphore_down(&term->termsem); t->prev = NULL; t->next = term->select_list; term->select_list = t; l4semaphore_up(&term->termsem); }
static void select_list_dequeue(termstate_t *term, struct term_select_info *t) { if (t) { l4semaphore_down(&term->termsem); if (t == term->select_list) term->select_list = t->next; else t->prev->next = t->next; l4semaphore_up(&term->termsem); } }
/** * \brief Get the keycode from keylist * * \return keycode * * When a key is pressed or released the event handler stores the keycode * in a keylist. getkeycode() reads from this list and returns the keycode. * Skip all keycode > 127. */ static int _getkeycode(void) { int code; if (!__init) return 0; _cursor(SHOW); l4semaphore_down(&keysem); code = keylist[keylist_tail]; keylist_tail = (keylist_tail + 1) % CONTXT_KEYLIST_SIZE; __keyin = 1; _cursor(HIDE); if(code > 127) code = 0; return code; }
int sysinit (cfg_opts *options) { struct t_os2process *proc; // sysinit's PTDA/proc //l4events_ch_t event_ch = L4EVENTS_EXIT_CHANNEL; //l4events_nr_t event_nr = L4EVENTS_NO_NR; //l4events_event_t event; char *env; APIRET rc; // create global environment create_env(&env); // Create the sysinit process PTDA structure (pid == ppid == 0) proc = PrcCreate(0, // ppid "sysinit", // pPrg NULL, // pArg env); // pEnv /* set task number */ sysinit_id = l4_myself(); proc->task = sysinit_id; if (!names_register("os2srv.sysinit")) io_log("error registering on the name server\n"); /* Start servers */ exec_runserver(proc->pid); /* Start run=/call= */ exec_run_call(proc->pid); // Check PROTSHELL statement value if (!options->protshell || !*(options->protshell)) { io_log("No PROTSHELL statement in CONFIG.SYS\n"); rc = ERROR_INVALID_PARAMETER; /*ERROR_INVALID_PARAMETER 87; Not defined for Windows*/ } else { exec_protshell(options); rc = 0; /* NO_ERROR */ } io_log("sem wait\n"); if (!rc) // wait until child process (protshell) terminates (this will unblock us) l4semaphore_down(&proc->term_sem); io_log("done waiting\n"); /* if (use_events) // use events server { // terminate by sending an exit event event.len = sizeof(l4_threadid_t); *(l4_threadid_t*)event.str = l4_myself(); // send exit event l4events_send(event_ch, &event, &event_nr, L4EVENTS_SEND_ACK); // get acknowledge l4events_get_ack(&event_nr, L4_IPC_NEVER); } */ io_log("event notification sent\n"); // unregister at names if (!names_unregister_task(sysinit_id)) io_log("Cannot unregister at name server!\n"); // destroy proc/PTDA PrcDestroy(proc); // destroy global environment destroy_env(env); io_log("OS/2 Server ended\n"); // terminate OS/2 Server exit(rc); return rc; }