/* * Copyright 2001 Perforce Software. All rights reserved. * * This file is part of Perforce - the FAST SCM System. */ /* * NoEcho -- Turn terminal echoing off/on * * Declaring a NoEcho object turns off terminal echoing (if possible). * Deleting it turns it back on. */ # ifdef OS_NT # define NEED_FILE # define NEED_FCNTL # endif # include <stdhdrs.h> # include <signaler.h> # include "echoctl.h" /* * NoEcho - turn on/off echoing */ // These next few lines will get ported to hell # ifdef OS_NT # define WIN32_LEAN_AND_MEAN # include <windows.h> typedef DWORD TIO_T; # define hstdin (HANDLE)_get_osfhandle( fileno( stdin ) ) # define TIO_GET(tio) GetConsoleMode( hstdin, &tio ) # define TIO_SET(tio) SetConsoleMode( hstdin, tio ) # define TIO_NOECHO(tio) tio &= ~ENABLE_ECHO_INPUT # endif # if defined( OS_OS2 ) || defined( MAC_MWPEF ) || \ defined( OS_VMS ) || defined( OS_AS400 ) || \ defined( OS_MPEIX ) // no ops typedef int TIO_T; # define hstdin fileno( stdin ) # define TIO_GET(tio) {} # define TIO_SET(tio) {} # define TIO_NOECHO(tio) {} # endif // For now, default to termios # ifndef TIO_SET # define USE_TERMIOS # endif # ifdef USE_TERMIOS # include <termios.h> typedef struct termios TIO_T; # define TIO_GET(tio) tcgetattr( fileno( stdin ), &tio ) # define TIO_SET(tio) tcsetattr( fileno( stdin ), TCSANOW, &tio ) # define TIO_NOECHO(tio) tio.c_lflag &= ~(ECHO | ECHOE | ECHOK | ECHONL) # endif # ifdef USE_SGTTY # include <sgtty.h> typedef struct sgttyb TIO_T; # define TIO_GET(tio) ioctl( fileno( stdin ), TIOCGETP, &tio ) # define TIO_SET(tio) ioctl( fileno( stdin ), TIOCSETP, &tio ) # define TIO_NOECHO(tio) tio.sg_flags &= ~(ECHO) # endif struct EchoContext { TIO_T tio; TIO_T tio2; EchoContext() { memset( &tio, '\0', sizeof( tio ) ); memset( &tio2, '\0', sizeof( tio2 ) ); } } ; void EchoCleanup( NoEcho *noEcho ) { delete noEcho; } NoEcho::NoEcho() { context = new EchoContext; TIO_GET( context->tio ); context->tio2 = context->tio; TIO_NOECHO( context->tio ); TIO_SET( context->tio ); signaler.OnIntr( (SignalFunc)EchoCleanup, this ); } NoEcho::~NoEcho() { TIO_SET( context->tio2 ); fputc( '\n', stdout ); signaler.DeleteOnIntr( this ); delete context; }
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#1 | 18760 | rlranft |
Populate -o //guest/perforce_software/p4/... //guest/rlranft/p4/.... |
||
//guest/perforce_software/p4/2015-1/sys/echoctl.cc | |||||
#1 | 15903 | Matt Attaway | Everything should be happy now between the Workshop and the depot paths | ||
//guest/perforce_software/p4/2015_1/sys/echoctl.cc | |||||
#1 | 15901 | Matt Attaway | Clean up code to fit modern Workshop naming standards | ||
//guest/perforce_software/p4/2015.1/sys/echoctl.cc | |||||
#1 | 12190 | Matt Attaway | Initial drop of 2015.1 p4/p4api source |