X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=progs%2Fclear.c;h=97cb0f3651deb65c53365b78821cde7601173e1d;hp=b813f0e40635a4fbe10e28d454f7dc95945fbb7e;hb=81304798ee736c467839c779c9ca5dca48db7bea;hpb=661078ddbde3ce0f3b06e95642fbb9b5fef7dca1 diff --git a/progs/clear.c b/progs/clear.c index b813f0e4..97cb0f36 100644 --- a/progs/clear.c +++ b/progs/clear.c @@ -1,5 +1,6 @@ /**************************************************************************** - * Copyright (c) 1998 Free Software Foundation, Inc. * + * Copyright 2020,2021 Thomas E. Dickey * + * Copyright 1998-2016,2017 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * @@ -29,31 +30,79 @@ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * + * and: Thomas E. Dickey 1996-on * ****************************************************************************/ - /* * clear.c -- clears the terminal's screen */ -#include +#define USE_LIBTINFO +#include +#include -#include +MODULE_ID("$Id: clear.c,v 1.24 2021/03/20 18:23:14 tom Exp $") -MODULE_ID("$Id: clear.c,v 1.7 1998/02/11 12:14:02 tom Exp $") +const char *_nc_progname = "clear"; -static int putch(int c) +static GCC_NORETURN void +usage(void) { - return putchar(c); +#define KEEP(s) s "\n" + static const char msg[] = + { + KEEP("") + KEEP("Options:") + KEEP(" -T TERM use this instead of $TERM") + KEEP(" -V print curses-version") + KEEP(" -x do not try to clear scrollback") + }; +#undef KEEP + (void) fprintf(stderr, "Usage: %s [options]\n", _nc_progname); + fputs(msg, stderr); + ExitProgram(EXIT_FAILURE); } -int main( +int +main( int argc GCC_UNUSED, - char *argv[] GCC_UNUSED) + char *argv[]GCC_UNUSED) { - setupterm((char *) 0, STDOUT_FILENO, (int *) 0); - if (clear_screen == (char *) 0) - return EXIT_FAILURE; - tputs(clear_screen, lines > 0 ? lines : 1, putch); - return EXIT_SUCCESS; + TTY tty_settings; + int fd; + int c; + char *term; + bool opt_x = FALSE; /* clear scrollback if possible */ + + _nc_progname = _nc_rootname(argv[0]); + term = getenv("TERM"); + + while ((c = getopt(argc, argv, "T:Vx")) != -1) { + switch (c) { + case 'T': + use_env(FALSE); + use_tioctl(TRUE); + term = optarg; + break; + case 'V': + puts(curses_version()); + ExitProgram(EXIT_SUCCESS); + case 'x': /* do not try to clear scrollback */ + opt_x = TRUE; + break; + default: + usage(); + /* NOTREACHED */ + } + } + if (optind < argc) + usage(); + + fd = save_tty_settings(&tty_settings, FALSE); + + setupterm(term, fd, (int *) 0); + + ExitProgram((clear_cmd(opt_x) == ERR) + ? EXIT_FAILURE + : EXIT_SUCCESS); }