#include "assert.h" #include "errors/errors.h" #include "errors/exceptions.h" #include "interpreter/events.h" #include "interpreter/interpret.h" #include "unix/signals.h" static void events(const boolean state) { static boolean events = false; if (events != state) installhandlers(); else assert(events != state); events = state; } void handleevents(void) { events(true); } void ignoreevents(void) { events(false); } error event(void) { const signals signals = block(); enum error error = 0; if (external.quit) { error = (enum error)quit; } else if (external.interrupt) { external.interrupt = 0; error = interrupt; } else if (external.timeout) { external.timeout = 0; error = timeout; } external.event = external.quit | external.timeout; unblock(signals); return error; }