10e3d5408SPeter Wemm /**************************************************************************** 2*aae38d10SBaptiste Daroussin * Copyright (c) 1998-2016,2017 Free Software Foundation, Inc. * 30e3d5408SPeter Wemm * * 40e3d5408SPeter Wemm * Permission is hereby granted, free of charge, to any person obtaining a * 50e3d5408SPeter Wemm * copy of this software and associated documentation files (the * 60e3d5408SPeter Wemm * "Software"), to deal in the Software without restriction, including * 70e3d5408SPeter Wemm * without limitation the rights to use, copy, modify, merge, publish, * 80e3d5408SPeter Wemm * distribute, distribute with modifications, sublicense, and/or sell * 90e3d5408SPeter Wemm * copies of the Software, and to permit persons to whom the Software is * 100e3d5408SPeter Wemm * furnished to do so, subject to the following conditions: * 110e3d5408SPeter Wemm * * 120e3d5408SPeter Wemm * The above copyright notice and this permission notice shall be included * 130e3d5408SPeter Wemm * in all copies or substantial portions of the Software. * 140e3d5408SPeter Wemm * * 150e3d5408SPeter Wemm * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * 160e3d5408SPeter Wemm * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * 170e3d5408SPeter Wemm * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * 180e3d5408SPeter Wemm * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * 190e3d5408SPeter Wemm * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * 200e3d5408SPeter Wemm * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * 210e3d5408SPeter Wemm * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * 220e3d5408SPeter Wemm * * 230e3d5408SPeter Wemm * Except as contained in this notice, the name(s) of the above copyright * 240e3d5408SPeter Wemm * holders shall not be used in advertising or otherwise to promote the * 250e3d5408SPeter Wemm * sale, use or other dealings in this Software without prior written * 260e3d5408SPeter Wemm * authorization. * 270e3d5408SPeter Wemm ****************************************************************************/ 280e3d5408SPeter Wemm 290e3d5408SPeter Wemm /**************************************************************************** 300e3d5408SPeter Wemm * Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 * 310e3d5408SPeter Wemm * and: Eric S. Raymond <esr@snark.thyrsus.com> * 324a1a9510SRong-En Fan * and: Thomas E. Dickey 1996-on * 330e3d5408SPeter Wemm ****************************************************************************/ 340e3d5408SPeter Wemm 350e3d5408SPeter Wemm /* 360e3d5408SPeter Wemm * clear.c -- clears the terminal's screen 370e3d5408SPeter Wemm */ 380e3d5408SPeter Wemm 395ca44d1cSRong-En Fan #define USE_LIBTINFO 40*aae38d10SBaptiste Daroussin #include <clear_cmd.h> 41*aae38d10SBaptiste Daroussin #include <tty_settings.h> 420e3d5408SPeter Wemm 43*aae38d10SBaptiste Daroussin MODULE_ID("$Id: clear.c,v 1.22 2017/10/07 21:48:32 tom Exp $") 440e3d5408SPeter Wemm 45*aae38d10SBaptiste Daroussin const char *_nc_progname = "clear"; 46*aae38d10SBaptiste Daroussin 47*aae38d10SBaptiste Daroussin static void 48*aae38d10SBaptiste Daroussin usage(void) 490e3d5408SPeter Wemm { 50*aae38d10SBaptiste Daroussin #define KEEP(s) s "\n" 51*aae38d10SBaptiste Daroussin static const char msg[] = 52*aae38d10SBaptiste Daroussin { 53*aae38d10SBaptiste Daroussin KEEP("") 54*aae38d10SBaptiste Daroussin KEEP("Options:") 55*aae38d10SBaptiste Daroussin KEEP(" -T TERM use this instead of $TERM") 56*aae38d10SBaptiste Daroussin KEEP(" -V print curses-version") 57*aae38d10SBaptiste Daroussin KEEP(" -x do not try to clear scrollback") 58*aae38d10SBaptiste Daroussin }; 59*aae38d10SBaptiste Daroussin #undef KEEP 60*aae38d10SBaptiste Daroussin (void) fprintf(stderr, "Usage: %s [options]\n", _nc_progname); 61*aae38d10SBaptiste Daroussin fputs(msg, stderr); 62*aae38d10SBaptiste Daroussin ExitProgram(EXIT_FAILURE); 630e3d5408SPeter Wemm } 640e3d5408SPeter Wemm 654a1a9510SRong-En Fan int 664a1a9510SRong-En Fan main( 670e3d5408SPeter Wemm int argc GCC_UNUSED, 680e3d5408SPeter Wemm char *argv[]GCC_UNUSED) 690e3d5408SPeter Wemm { 70*aae38d10SBaptiste Daroussin TTY tty_settings; 71*aae38d10SBaptiste Daroussin int fd; 72*aae38d10SBaptiste Daroussin int c; 73*aae38d10SBaptiste Daroussin char *term; 74*aae38d10SBaptiste Daroussin bool opt_x = FALSE; /* clear scrollback if possible */ 7573f0a83dSXin LI 76*aae38d10SBaptiste Daroussin _nc_progname = _nc_rootname(argv[0]); 77*aae38d10SBaptiste Daroussin term = getenv("TERM"); 7873f0a83dSXin LI 79*aae38d10SBaptiste Daroussin while ((c = getopt(argc, argv, "T:Vx")) != -1) { 80*aae38d10SBaptiste Daroussin switch (c) { 81*aae38d10SBaptiste Daroussin case 'T': 82*aae38d10SBaptiste Daroussin use_env(FALSE); 83*aae38d10SBaptiste Daroussin use_tioctl(TRUE); 84*aae38d10SBaptiste Daroussin term = optarg; 85*aae38d10SBaptiste Daroussin break; 86*aae38d10SBaptiste Daroussin case 'V': 87*aae38d10SBaptiste Daroussin puts(curses_version()); 88*aae38d10SBaptiste Daroussin ExitProgram(EXIT_SUCCESS); 89*aae38d10SBaptiste Daroussin case 'x': /* do not try to clear scrollback */ 90*aae38d10SBaptiste Daroussin opt_x = TRUE; 91*aae38d10SBaptiste Daroussin break; 92*aae38d10SBaptiste Daroussin default: 93*aae38d10SBaptiste Daroussin usage(); 94*aae38d10SBaptiste Daroussin /* NOTREACHED */ 95*aae38d10SBaptiste Daroussin } 96*aae38d10SBaptiste Daroussin } 97*aae38d10SBaptiste Daroussin if (optind < argc) 98*aae38d10SBaptiste Daroussin usage(); 9973f0a83dSXin LI 100*aae38d10SBaptiste Daroussin fd = save_tty_settings(&tty_settings, FALSE); 101*aae38d10SBaptiste Daroussin 102*aae38d10SBaptiste Daroussin setupterm(term, fd, (int *) 0); 103*aae38d10SBaptiste Daroussin 104*aae38d10SBaptiste Daroussin ExitProgram((clear_cmd(opt_x) == ERR) 1050e3d5408SPeter Wemm ? EXIT_FAILURE 1064a1a9510SRong-En Fan : EXIT_SUCCESS); 1070e3d5408SPeter Wemm } 108