public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Sam James" <sam@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/gentoo-functions:master commit in: /
Date: Tue, 14 May 2024 00:12:56 +0000 (UTC)	[thread overview]
Message-ID: <1715645545.f1dd9a109f67ff77ce8a312cb737ab68a3f3a3fb.sam@gentoo> (raw)

commit:     f1dd9a109f67ff77ce8a312cb737ab68a3f3a3fb
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Tue May 14 00:11:53 2024 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Tue May 14 00:12:25 2024 +0000
URL:        https://gitweb.gentoo.org/proj/gentoo-functions.git/commit/?id=f1dd9a10

Drop ecma48-cpr

Obsolete as of bfd5710de9b14712c4a621259b951bd10489d0c0. A neat tool, but
it ended up not being a good fit for the reasons described in that commit.

Signed-off-by: Sam James <sam <AT> gentoo.org>

 ecma48-cpr.c | 239 -----------------------------------------------------------
 meson.build  |   7 --
 2 files changed, 246 deletions(-)

diff --git a/ecma48-cpr.c b/ecma48-cpr.c
deleted file mode 100644
index d910f6f..0000000
--- a/ecma48-cpr.c
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * ecma48-cpr.c
- * Treat STDIN as a tty and report the cursor position using the CPR sequence.
- *
- * Originally distributed as wsize.c by Stephen J. Friedl <steve@unixwiz.net>.
- * Repurposed for gentoo-functions by Kerin F. Millar <kfm@plushkava.net>.
- * This software is in the public domain.
- */
-
-#define _POSIX_C_SOURCE 200809L
-
-#define PROGRAM "ecma48-cpr"
-#define READ_TIMEOUT_NS 250000000
-#define BUFSIZE 100
-#define MAX_LOOPS 20
-
-#include <signal.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <termios.h>
-#include <time.h>
-#include <unistd.h>
-
-static struct termios save_tty;
-static bool is_timed_out = false;
-static bool is_tty_saved = false;
-
-static void cleanup(void);
-static void die(char const * const errmsg);
-static void on_signal(int const signo);
-
-#ifndef __APPLE__
-static timer_t init_timer(void);
-#endif
-
-int
-main(void) {
-	/*
-	 * Establish that STDIN is a terminal.
-	 */
-	if (! isatty(STDIN_FILENO)) {
-		die("cannot determine the cursor position because stdin is not a tty");
-	}
-
-	/*
-	 * Duplicate STDIN to a new file descriptor before reopening it as a
-	 * writeable stream.
-	 */
-	int fd = dup(STDIN_FILENO);
-	FILE *tty;
-	if (fd < 0) {
-		die("failed to dup stdin");
-	} else {
-		tty = fdopen(fd, "w");
-		if (tty == NULL) {
-			die("failed to re-open the tty for writing");
-		}
-	}
-
-	/*
-	 * Save the current terminal settings.
-	 */
-	if (tcgetattr(STDIN_FILENO, &save_tty) != 0) {
-		die("failed to obtain the current terminal settings");
-	} else {
-		is_tty_saved = true;
-	}
-
-	/*
-	 * Duplicate the current terminal settings for modification.
-	 */
-	struct termios new_tty = save_tty;
-
-	/*
-	 * Turn off ECHO, so that the response from the terminal isn't printed.
-	 * Also, the terminal must be operating in its noncanonical mode,
-	 * thereby ensuring that its input is always immediately available,
-	 * with no processing having been performed.
-	 */
-	new_tty.c_lflag &= ~(ECHO | ICANON | IXON);
-
-	/*
-	 * Set an interbyte timeout of 1 decisecond. The timer is started only
-	 * after the first byte is read, so read(2) will block until then.
-	 */
-	new_tty.c_cc[VMIN]  = 1;
-	new_tty.c_cc[VTIME] = 1;
-
-	/*
-	 * Prepare to catch our signals. We treat both an interrupt and a
-	 * depleted timer as essentially the same thing: fatal errors.
-	 */
-	struct sigaction act = {
-		.sa_handler = on_signal,
-		.sa_flags = 0
-	};
-	sigemptyset(&act.sa_mask);
-	sigaction(SIGALRM, &act, NULL);
-
-
-	/*
-	 * Ignore the signals most likely to interrupt the process from hereon.
-	 */
-	signal(SIGINT, SIG_IGN);
-	signal(SIGTERM, SIG_IGN);
-	signal(SIGTSTP, SIG_IGN);
-
-	/*
-	 * Try to apply the new terminal settings.
-	 */
-	if (tcsetattr(STDIN_FILENO, TCSAFLUSH, &new_tty) != 0) {
-		die("failed to modify the terminal settings");
-	} else if (fprintf(tty, "\033[6n") != 4) {
-		die("failed to write the CPR sequence to the terminal");
-	} else if (fclose(tty) != 0) {
-		die("failed to flush the stream after writing the CPR sequence");
-	}
-
-	/*
-	 * A timeout is required, just in case read(2) proves unable to read an
-	 * initial byte, otherwise causing the program to hang.
-	 */
-#ifdef __APPLE__
-	alarm(1);
-#else
-	timer_t timerid = init_timer();
-#endif
-
-	/*
-	 * Read up to (sizeof ibuf - 1) bytes of input in total. Upon each
-	 * successful read, scan the input buffer for a valid ECMA4-8 CPR
-	 * response. Abort if no such response is found within MAX_LOOPS
-	 * iterations.
-	 */
-	char ibuf[BUFSIZE];
-	char const * const imax = ibuf + sizeof ibuf - 1;
-	char *iptr = ibuf;
-	int maxloops = MAX_LOOPS;
-	int row = -1;
-	int col = -1;
-	ssize_t nr;
-	while (--maxloops > 0 && (nr = read(STDIN_FILENO, iptr, imax - iptr)) > 0) {
-		iptr += nr;
-		*iptr = '\0'; /* NUL-terminate for strchr(3) and sscanf(3) */
-		char const *p;
-		if ((p = strchr(ibuf, '\033')) != 0) {
-			if (sscanf(p, "\033[%d;%dR", &row, &col) == 2) {
-				break;
-			} else {
-				col = -1;
-				row = -1;
-			}
-		}
-	}
-
-	/*
-	 * Deactivate the timer.
-	 */
-#ifdef __APPLE__
-	alarm(0);
-#else
-	timer_delete(timerid);
-#endif
-
-	/*
-	 * Die in the case that the timer fired.
-	 */
-	if (is_timed_out) {
-		die("timed out waiting for the terminal to respond to CPR");
-	}
-
-	/*
-	 * Restore the original terminal settings.
-	 */
-	cleanup();
-
-	/*
-	 * Print the cursor position, provided both col and row are above zero.
-	 */
-	if (col < 1 || row < 1) {
-		die("failed to read the cursor position");
-	} else if (printf("%d %d\n", row, col) == -1 || fflush(stdout) == EOF) {
-		return EXIT_FAILURE;
-	} else {
-		return EXIT_SUCCESS;
-	}
-}
-
-#ifndef __APPLE__
-static timer_t
-init_timer(void) {
-	timer_t timerid;
-	struct sigevent event = {
-		.sigev_value.sival_ptr = &timerid,
-		.sigev_notify = SIGEV_SIGNAL,
-		.sigev_signo = SIGALRM
-	};
-	if (timer_create(CLOCK_REALTIME, &event, &timerid) == -1) {
-		die("failed to create a per-process timer");
-	} else {
-		struct itimerspec timer = {
-			.it_value.tv_nsec = READ_TIMEOUT_NS,
-			.it_interval.tv_nsec = 0,
-			.it_interval.tv_sec = 0,
-			.it_value.tv_sec = 0
-		};
-		if (timer_settime(timerid, 0, &timer, NULL) == -1) {
-			die("failed to configure the per-process timer");
-		}
-	}
-	return timerid;
-}
-#endif
-
-/*
- * Tries to restore the terminal settings. Only one attempt will ever be made.
- */
-static void
-cleanup(void) {
-	bool const is_saved = is_tty_saved;
-	if (is_saved) {
-		tcsetattr(STDIN_FILENO, TCSAFLUSH, &save_tty);
-		is_tty_saved = false;
-	}
-}
-
-static void
-die(char const * const errmsg) {
-	cleanup();
-	fprintf(stderr, "%s: %s\n", PROGRAM, errmsg);
-	exit(EXIT_FAILURE);
-}
-
-static void
-on_signal(int const signo) {
-	is_timed_out = true;
-}

diff --git a/meson.build b/meson.build
index f18c5f8..05dba85 100644
--- a/meson.build
+++ b/meson.build
@@ -25,13 +25,6 @@ install_man(
   'consoletype.1',
 )
 
-executable(
-  'ecma48-cpr',
-  'ecma48-cpr.c',
-  install: true,
-  install_dir: get_option('prefix') / 'lib' / 'gentoo'
-)
-
 do_tests = get_option('tests')
 if do_tests
   test(


             reply	other threads:[~2024-05-14  0:13 UTC|newest]

Thread overview: 281+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-14  0:12 Sam James [this message]
  -- strict thread matches above, loose matches on Subject: below --
2024-10-05  7:25 [gentoo-commits] proj/gentoo-functions:master commit in: / Sam James
2024-10-05  4:15 Sam James
2024-10-05  4:15 Sam James
2024-10-05  4:15 Sam James
2024-10-05  4:15 Sam James
2024-10-05  4:15 Sam James
2024-10-05  4:15 Sam James
2024-10-05  4:15 Sam James
2024-10-05  4:15 Sam James
2024-10-05  4:15 Sam James
2024-10-05  4:15 Sam James
2024-10-05  4:15 Sam James
2024-10-05  4:15 Sam James
2024-10-05  4:15 Sam James
2024-10-05  4:15 Sam James
2024-10-05  4:15 Sam James
2024-10-05  4:15 Sam James
2024-10-05  4:15 Sam James
2024-10-05  4:15 Sam James
2024-10-05  4:15 Sam James
2024-08-11 10:23 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-05 20:39 Sam James
2024-08-05 20:39 Sam James
2024-08-05  2:03 Sam James
2024-08-05  2:02 Sam James
2024-08-05  2:02 Sam James
2024-08-05  2:02 Sam James
2024-08-05  2:02 Sam James
2024-08-02 23:14 Sam James
2024-08-02 23:14 Sam James
2024-08-02 23:14 Sam James
2024-08-02 23:14 Sam James
2024-08-02 23:14 Sam James
2024-08-02 23:14 Sam James
2024-08-02 23:14 Sam James
2024-08-02 23:14 Sam James
2024-08-02 23:14 Sam James
2024-08-02 23:14 Sam James
2024-08-02 23:14 Sam James
2024-08-02 23:14 Sam James
2024-08-02 23:14 Sam James
2024-08-02 23:14 Sam James
2024-08-02 23:14 Sam James
2024-08-02 23:14 Sam James
2024-07-08  3:00 Sam James
2024-07-08  2:31 Sam James
2024-07-08  2:31 Sam James
2024-07-07  5:55 Sam James
2024-07-07  5:55 Sam James
2024-07-07  5:55 Sam James
2024-07-07  5:55 Sam James
2024-07-07  5:55 Sam James
2024-07-07  5:55 Sam James
2024-07-07  5:55 Sam James
2024-07-07  5:55 Sam James
2024-07-07  5:55 Sam James
2024-07-07  5:55 Sam James
2024-06-25  4:06 Sam James
2024-06-25  4:06 Sam James
2024-06-25  4:06 Sam James
2024-06-25  4:06 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-05-24  6:05 Sam James
2024-05-24  1:18 Sam James
2024-05-24  1:18 Sam James
2024-05-22  1:12 Sam James
2024-05-22  1:12 Sam James
2024-05-22  1:12 Sam James
2024-05-22  1:12 Sam James
2024-05-22  1:12 Sam James
2024-05-22  1:12 Sam James
2024-05-22  1:12 Sam James
2024-05-22  1:12 Sam James
2024-05-22  1:12 Sam James
2024-05-19 15:27 Sam James
2024-05-19 15:27 Sam James
2024-05-19 15:27 Sam James
2024-05-19 15:27 Sam James
2024-05-18 16:07 Sam James
2024-05-18 16:06 Sam James
2024-05-18 16:06 Sam James
2024-05-18 15:34 Sam James
2024-05-18 15:32 Sam James
2024-05-18 15:32 Sam James
2024-05-18 14:04 Sam James
2024-05-18 14:04 Sam James
2024-05-18 14:04 Sam James
2024-05-18 14:04 Sam James
2024-05-18 14:04 Sam James
2024-05-18 14:04 Sam James
2024-05-17  4:03 Sam James
2024-05-17  4:03 Sam James
2024-05-17  4:03 Sam James
2024-05-17  4:03 Sam James
2024-05-17  4:03 Sam James
2024-05-17  4:03 Sam James
2024-05-17  4:03 Sam James
2024-05-17  4:03 Sam James
2024-05-17  4:03 Sam James
2024-05-17  4:03 Sam James
2024-05-17  4:03 Sam James
2024-05-17  4:03 Sam James
2024-05-17  4:03 Sam James
2024-05-15 10:28 Sam James
2024-05-15 10:28 Sam James
2024-05-14  0:18 Sam James
2024-05-14  0:15 Sam James
2024-05-14  0:12 Sam James
2024-05-14  0:08 Sam James
2024-05-14  0:08 Sam James
2024-05-14  0:05 Sam James
2024-05-14  0:05 Sam James
2024-05-14  0:05 Sam James
2024-05-14  0:05 Sam James
2024-05-14  0:05 Sam James
2024-02-16 21:35 Sam James
2023-06-11 16:47 Sam James
2023-06-11 16:47 Sam James
2023-06-11 16:47 Sam James
2023-06-11 16:47 Sam James
2023-06-11 16:47 Sam James
2023-06-11 16:47 Sam James
2023-06-11 16:47 Sam James
2023-06-11 16:47 Sam James
2023-06-10  7:23 Sam James
2023-06-10  7:23 Sam James
2023-06-10  6:04 Sam James
2023-06-10  4:22 Sam James
2023-06-10  4:22 Sam James
2023-06-10  4:22 Sam James
2023-06-10  4:22 Sam James
2023-06-10  4:22 Sam James
2023-06-10  4:22 Sam James
2023-06-10  4:22 Sam James
2023-06-10  4:22 Sam James
2023-06-10  4:22 Sam James
2023-06-10  4:22 Sam James
2023-06-09 11:17 Sam James
2023-06-09 11:11 Sam James
2023-06-09 11:02 Sam James
2023-06-09 11:02 Sam James
2023-06-09 11:02 Sam James
2023-06-09 11:02 Sam James
2023-06-07 11:13 Sam James
2023-06-07 11:13 Sam James
2023-06-07 11:13 Sam James
2023-06-07 11:13 Sam James
2023-06-07 11:13 Sam James
2023-06-07 11:13 Sam James
2023-06-07 11:13 Sam James
2023-06-07 11:13 Sam James
2023-06-07 11:13 Sam James
2023-02-19 16:14 Sam James
2023-02-19 16:14 Sam James
2023-02-19 16:14 Sam James
2023-02-19 16:14 Sam James
2023-02-19 16:14 Sam James
2023-02-19 16:14 Sam James
2023-02-19 16:14 Sam James
2023-02-19 16:14 Sam James
2023-02-19 16:14 Sam James
2023-02-17  7:44 Sam James
2023-02-17  7:44 Sam James
2023-02-17  7:44 Sam James
2023-02-17  1:33 Sam James
2023-02-17  1:33 Sam James
2023-02-17  1:33 Sam James
2023-02-15  8:18 Sam James
2023-02-15  7:48 Sam James
2023-02-15  7:46 Sam James
2023-02-15  7:46 Sam James
2023-02-15  7:46 Sam James
2023-02-15  7:46 Sam James
2023-02-15  7:46 Sam James
2023-02-15  7:46 Sam James
2023-02-15  2:24 Sam James
2023-02-15  2:24 Sam James
2023-02-15  2:24 Sam James
2023-02-14  3:40 Sam James
2023-02-14  3:40 Sam James
2023-02-14  3:40 Sam James
2023-02-14  3:40 Sam James
2023-02-14  0:09 Sam James
2023-02-14  0:09 Sam James
2023-02-13 21:37 Sam James
2023-02-13 21:37 Sam James
2023-02-13 21:37 Sam James
2023-02-13 21:37 Sam James
2023-02-13 21:37 Sam James
2023-02-13 21:37 Sam James
2023-02-13 21:37 Sam James
2023-02-13 21:37 Sam James
2023-02-12 18:53 Sam James
2023-02-12 18:53 Sam James
2023-02-12  6:53 Sam James
2023-02-12  6:53 Sam James
2023-02-12  6:53 Sam James
2023-02-11  1:43 Sam James
2023-02-11  1:43 Sam James
2023-02-10  6:09 Sam James
2023-02-10  6:09 Sam James
2023-02-10  6:09 Sam James
2023-02-09  3:54 Sam James
2023-02-09  3:54 Sam James
2023-02-08  3:37 Sam James
2023-02-08  1:06 Sam James
2023-02-08  0:03 Sam James
2023-02-08  0:03 Sam James
2023-02-07 23:47 Sam James
2023-02-07 23:42 Sam James
2023-02-07 23:42 Sam James
2023-02-07 23:42 Sam James
2023-02-07 23:42 Sam James
2023-02-07  1:08 Sam James
2023-02-07  1:08 Sam James
2023-02-06 13:47 Sam James
2023-02-06  4:32 Sam James
2023-02-06  4:23 Sam James
2023-02-06  4:19 Sam James
2023-02-06  4:10 Sam James
2023-02-06  4:10 Sam James
2023-02-06  3:59 Sam James
2023-02-06  3:59 Sam James
2023-02-06  3:59 Sam James
2022-07-30  5:48 Sam James
2022-07-29  2:03 Sam James
2022-07-29  2:03 Sam James
2022-07-29  2:03 Sam James
2021-08-30 21:14 Mike Gilbert
2021-08-30 21:14 Mike Gilbert
2020-11-19 18:20 Mike Gilbert
2020-11-19 18:20 Mike Gilbert
2020-11-19 18:20 Mike Gilbert
2020-01-26 23:19 Mike Gilbert

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1715645545.f1dd9a109f67ff77ce8a312cb737ab68a3f3a3fb.sam@gentoo \
    --to=sam@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox