| /* | |
| * R : A Computer Language for Statistical Data Analysis | |
| * Copyright (C) 2000-2016 The R Core Team. | |
| * | |
| * This header file is free software; you can redistribute it and/or modify | |
| * it under the terms of the GNU Lesser General Public License as published by | |
| * the Free Software Foundation; either version 2.1 of the License, or | |
| * (at your option) any later version. | |
| * | |
| * This file is part of R. R is distributed under the terms of the | |
| * GNU General Public License, either Version 2, June 1991 or Version 3, | |
| * June 2007. See doc/COPYRIGHTS for details of the copyright status of R. | |
| * | |
| * This program is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| * GNU Lesser General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU Lesser General Public License | |
| * along with this program; if not, a copy is available at | |
| * https://www.R-project.org/Licenses/ | |
| */ | |
| /* | |
| For use by alternative front-ends and packages which need to share | |
| the R event loop (on Unix-alikes). | |
| Not part of the API and subject to change without notice. | |
| NB: HAVE_SYS_SELECT_H should be checked and defined before this is | |
| included. | |
| */ | |
| #ifndef R_EXT_EVENTLOOP_H | |
| #define R_EXT_EVENTLOOP_H | |
| #ifdef HAVE_SYS_SELECT_H | |
| # include <sys/select.h> /* for fd_set, select according to POSIX 2004 */ | |
| #endif | |
| #ifdef HAVE_SYS_TIME_H | |
| # include <sys/time.h> /* ... according to earlier POSIX and perhaps HP-UX */ | |
| #endif | |
| /* NOTE: At one time needed on FreeBSD so that fd_set is defined. */ | |
| #include <sys/types.h> | |
| #ifdef __cplusplus | |
| extern "C" { | |
| #endif | |
| #define XActivity 1 | |
| #define StdinActivity 2 | |
| typedef void (*InputHandlerProc)(void *userData); | |
| typedef struct _InputHandler { | |
| int activity; | |
| int fileDescriptor; | |
| InputHandlerProc handler; | |
| struct _InputHandler *next; | |
| /* Whether we should be listening to this file descriptor or not. */ | |
| int active; | |
| /* Data that can be passed to the routine as its only argument. | |
| This might be a user-level function or closure when we implement | |
| a callback to R mechanism. | |
| */ | |
| void *userData; | |
| } InputHandler; | |
| extern InputHandler *initStdinHandler(void); | |
| extern void consoleInputHandler(unsigned char *buf, int len); | |
| extern InputHandler *addInputHandler(InputHandler *handlers, int fd, InputHandlerProc handler, int activity); | |
| extern InputHandler *getInputHandler(InputHandler *handlers, int fd); | |
| extern int removeInputHandler(InputHandler **handlers, InputHandler *it); | |
| extern InputHandler *getSelectedHandler(InputHandler *handlers, fd_set *mask); | |
| extern fd_set *R_checkActivity(int usec, int ignore_stdin); | |
| extern fd_set *R_checkActivityEx(int usec, int ignore_stdin, void (*intr)(void)); | |
| extern void R_runHandlers(InputHandler *handlers, fd_set *mask); | |
| extern int R_SelectEx(int n, fd_set *readfds, fd_set *writefds, | |
| fd_set *exceptfds, struct timeval *timeout, | |
| void (*intr)(void)); | |
| #ifdef __SYSTEM__ | |
| #ifndef __cplusplus /* Would get duplicate conflicting symbols*/ | |
| InputHandler *R_InputHandlers; | |
| #endif | |
| #else | |
| extern InputHandler *R_InputHandlers; | |
| #endif | |
| extern void (* R_PolledEvents)(void); | |
| extern int R_wait_usec; | |
| #ifdef __cplusplus | |
| } | |
| #endif | |
| #endif /* R_EXT_EVENTLOOP_H */ |