vitali64.duckdns.org:
blog fases cgit pastebin laboratory-fe moinmoinwiki
aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config.mk1
-rw-r--r--core/tput.c40
2 files changed, 41 insertions, 0 deletions
diff --git a/config.mk b/config.mk
index 155d017..92655a5 100644
--- a/config.mk
+++ b/config.mk
@@ -38,6 +38,7 @@ CORE=\
tee\
test\
touch\
+ tput\
true\
tty\
uname\
diff --git a/core/tput.c b/core/tput.c
new file mode 100644
index 0000000..8816e49
--- /dev/null
+++ b/core/tput.c
@@ -0,0 +1,40 @@
+/* SPDX-License-Identifier: BSD-3-Clause */
+/*
+ * Copyright (C) 2023 Ferass El Hafidi <vitali64pmemail@protonmail.com>
+ */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>
+
+/* Requirements in common.h */
+#define REQ_PRINT_USAGE
+#define REQ_ERRPRINT
+#include "../common/common.h"
+
+#define DESCRIPTION "Change terminal characteristics."
+#define OPERANDS "init|clear|reset"
+
+int main(int argc, char *argv[]) {
+ int argument;
+ char *argv0 = strdup(argv[0]);
+ if (argc < 2)
+ return 1 + print_usage(argv0, DESCRIPTION, OPERANDS, VERSION);
+ while ((argument = getopt(argc, argv, "")) != -1 ) {
+ /* To be used when -T gets implemented */
+ if (argument == '?')
+ return 1 + print_usage(argv0,
+ DESCRIPTION, OPERANDS, VERSION);
+ } argc -= optind; argv += optind;
+ if (!strcmp(argv[0], "init") ||
+ !strcmp(argv[0], "reset")) /* init/reset */
+ /* According to POSIX.1-2017 tput(1):
+ * > The difference between resetting and initializing a
+ * > terminal is left unspecified
+ */
+ write(STDOUT_FILENO, "\033c", 3);
+ else if (!strcmp(argv[0], "clear")) /* clear */
+ write(STDOUT_FILENO, "\033[1;1H\033[2J", 11);
+ else return 3 + print_usage(argv0, DESCRIPTION, OPERANDS, VERSION);
+ return errprint(argv0, NULL, errno);
+}