/* StarForth — Steady-State Virtual Machine Runtime Copyright (c) 2023–2025 Robert A. James All rights reserved. This file is part of the StarForth project. Licensed under the StarForth License, Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at: https://github.com/star.4th@proton.me/StarForth/LICENSE.txt This software is provided "AS IS", WITHOUT WARRANTY OF ANY KIND, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose, and noninfringement. See the License for the specific language governing permissions and limitations under the License. */ /* * StarForth Platform IO - Linux/POSIX Backend * * Implements platform_io.h's terminal-readiness check using select() on * fd 0, the standard POSIX non-blocking-stdin-peek idiom. Zero timeout: * a single poll, never blocks. * * License: See LICENSE file */ #include "../../../include/platform_io.h" #include #include int sf_terminal_ready(void) { fd_set readfds; struct timeval tv; FD_ZERO(&readfds); FD_SET(STDIN_FILENO, &readfds); tv.tv_sec = 0; tv.tv_usec = 0; int r = select(STDIN_FILENO + 1, &readfds, NULL, NULL, &tv); return (r > 0 && FD_ISSET(STDIN_FILENO, &readfds)) ? 1 : 0; }