⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 conio.cc

📁 penMesh is a generic and efficient data structure for representing and manipulating polygonal meshes
💻 CC
字号:
// ============================================================================#include <OpenMesh/Core/System/config.hh>#include <OpenMesh/Tools/Utils/conio.hh>// ----------------------------------------------------------------- Win32 ----#ifdef WIN32#include <conio.h>namespace OpenMesh {namespace Utils {int kbhit()  { return ::kbhit();  }int getch()  { return ::getch();  }int getche() { return ::getche(); }} // Tools} // AS// ----------------------------------------------------------------- Other ----#else// Based on code published by Floyd Davidson in a newsgroup.#include <stdio.h>     /* stdout, fflush() */#if !defined(POSIX_1003_1_2001)#  include <fcntl.h>#  include <unistd.h>  #else#  include <select.h>  /* select()       */#endif#include <termios.h>   /* tcsetattr()    */#include <sys/ioctl.h> /* ioctl()        */#include <sys/time.h>  /* struct timeval */namespace OpenMesh {namespace Utils {#ifdef CTIME#  undef CTIME#endif#define CTIME 1#define CMIN  1int kbhit(void){  int cnt = 0;  int error;  static struct termios Otty, Ntty;  tcgetattr(0, &Otty);  Ntty = Otty;  Ntty.c_iflag      = 0; /* input mode */  Ntty.c_oflag      = 0; /* output mode */  Ntty.c_lflag     &= ~ICANON; /* raw mode */  Ntty.c_cc[VMIN]   = CMIN; /* minimum chars to wait for */  Ntty.c_cc[VTIME]  = CTIME; /* minimum wait time */  if (0 == (error = tcsetattr(0, TCSANOW, &Ntty)))   {    struct timeval tv;    error += ioctl(0, FIONREAD, &cnt);    error += tcsetattr(0, TCSANOW, &Otty);    tv.tv_sec = 0;    tv.tv_usec = 100; /* insert at least a minimal delay */    select(1, NULL, NULL, NULL, &tv);  }  return (error == 0 ? cnt : -1 );}int getch(void){  char ch;  int error;  static struct termios Otty, Ntty;    fflush(stdout);  tcgetattr(0, &Otty);  Ntty = Otty;    Ntty.c_iflag     = 0;        // input mode  Ntty.c_oflag     = 0;        // output mode  Ntty.c_lflag    &= ~ICANON;  // line settings    Ntty.c_lflag    &= ~ECHO;    // enable echo  Ntty.c_cc[VMIN]  = CMIN;     // minimum chars to wait for  Ntty.c_cc[VTIME] = CTIME;    // minimum wait time  // Conditionals allow compiling with or without flushing pre-existing  // existing buffered input before blocking.#if 1  // use this to flush the input buffer before blocking for new input#  define FLAG TCSAFLUSH#else  // use this to return a char from the current input buffer, or block if  // no input is waiting.#  define FLAG TCSANOW#endif  if (0 == (error = tcsetattr(0, FLAG, &Ntty)))   {    error = read(0, &ch, 1 );           // get char from stdin    error += tcsetattr(0, FLAG, &Otty); // restore old settings  }  return (error == 1 ? (int) ch : -1 );}int getche(void){  char ch;  int error;  static struct termios Otty, Ntty;    fflush(stdout);  tcgetattr(0, &Otty);  Ntty = Otty;    Ntty.c_iflag     = 0;        // input mode  Ntty.c_oflag     = 0;        // output mode  Ntty.c_lflag    &= ~ICANON;  // line settings    Ntty.c_lflag    |= ECHO;     // enable echo  Ntty.c_cc[VMIN]  = CMIN;     // minimum chars to wait for  Ntty.c_cc[VTIME] = CTIME;    // minimum wait time  // Conditionals allow compiling with or without flushing pre-existing  // existing buffered input before blocking.#if 1  // use this to flush the input buffer before blocking for new input#  define FLAG TCSAFLUSH#else  // use this to return a char from the current input buffer, or block if  // no input is waiting.#  define FLAG TCSANOW#endif  if (0 == (error = tcsetattr(0, FLAG, &Ntty))) {    error = read(0, &ch, 1 );           // get char from stdin    error += tcsetattr(0, FLAG, &Otty); // restore old settings  }  return (error == 1 ? (int) ch : -1 );}} // namespace Tools} // namespace AS// ----------------------------------------------------------------------------#endif // System dependent parts// ============================================================================//#define Test#if defined(Test)#include <ctype.h>int main (void) {    char  msg[] = "press key to continue...";   char *ptr   = msg, tmp;   while ( !OpenMesh::Utils::kbhit() )  {    tmp = *ptr;    *ptr = islower(tmp) ? toupper(tmp) : tolower(tmp);    printf("\r%s", msg); fflush(stdout);    *ptr = (char)tmp;    if (!*(++ptr))       ptr = msg;     usleep(20000);  }  printf("\r%s.", msg); fflush(stdout);  OpenMesh::Utils::getch();  printf("\r%s..", msg); fflush(stdout);  OpenMesh::Utils::getche();  return 0;}#endif // Test// ============================================================================

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -