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

📄 wyterminal.cpp

📁 一个不错
💻 CPP
字号:
/* Copyright is licensed under GNU LGPL.                 by I.J.Wang 2003*/#define WYLIB_SOURCE#include "wyterminal.h"#include "wy__cfunc.h"#include "wy__cfunc_tty.h"  // for wyc_tcdrain(..)#include <cstring>     // for std::strlen#include <unistd.h>#include <new>   // for new#include <typeinfo>const char WyTerminal::class_name[]="WyTerminal";int wyc_ttyname(int fd,char* buf, size_t blen){ return( ::ttyname_r(fd,buf,blen) );};WyTerminal::WyTerminal()try : WyChrFile(){}catch(const WyChrFile::Reply& e) {  WY_THROW( Reply(e) );}catch(const WyRet& e) { WY_NDEBUG_MSG(e);  WY_THROW( WyRet(e) );};WyTerminal::WyTerminal(WyFileHandle fh)try : WyChrFile(fh){ if(fh.is_default()==false) {   if(wyc_isatty(this->wy_fd())!=1) {     WY_THROW( Reply(Wym_EBADF) );   } }}catch(const Reply&) {  throw;}catch(const WyChrFile::Reply& e) {  WY_THROW( Reply(e) );}catch(const WyRet& e) { WY_NDEBUG_MSG(e);  WY_THROW( WyRet(e) );};WyTerminal::WyTerminal(const WySysFile& termf)try : WyChrFile(termf){ if(termf.is_default()==false) {   if(wyc_isatty(this->wy_fd())!=1) {     WY_THROW( Reply(Wym_EBADF) );   } }}catch(const Reply&) {  throw;}catch(const WyChrFile::Reply& e) {  WY_THROW( Reply(e) );}catch(const WyRet& e) { WY_NDEBUG_MSG(e);  WY_THROW( WyRet(e) );};WyTerminal::WyTerminal(const char* pname,int f)try : WyChrFile(pname,f){ if(wyc_isatty(this->wy_fd())!=1) {   WY_THROW( Reply(Wym_EBADF) ); }}catch(const Reply&) {  throw;}catch(const WyChrFile::Reply& e) {  WY_THROW( Reply(e) );}catch(const WyRet& e) { WY_NDEBUG_MSG(e);  WY_THROW( WyRet(e) );};WyTerminal::WyTerminal(const WyStr& pname,int f)try : WyChrFile(pname,f){ if(wyc_isatty(this->wy_fd())!=1) {   WY_THROW( Reply(Wym_EBADF) ); }}catch(const Reply&) {  throw;}catch(const WyChrFile::Reply& e) {  WY_THROW( Reply(e) );}catch(const WyRet& e) { WY_NDEBUG_MSG(e);  WY_THROW( WyRet(e) );};WyTerminal::WyTerminal(const WyTerminal& termf)try : WyChrFile(termf){}catch(const WyChrFile::Reply& e) {  WY_THROW( Reply(e) );}catch(const WyRet& e) { WY_NDEBUG_MSG(e);  WY_THROW( WyRet(e) );};WyTerminal::WyTerminal(WyTerminal& termf, Wy::ByMove_t) WY__TSPC() : WyChrFile(termf,Wy::ByMove){};WyRet WyTerminal::reset(WyFileHandle fh){ if(fh.is_default()==false) {   if(wyc_isatty(fh.fd())!=1) {     WY_RETURN(Wym_EBADF);   } } const WyRet r( WyChrFile::reset(fh) ); if(r!=Ok) {   WY_RETURN(r); } return(Ok);};WyRet WyTerminal::reset(const WySysFile& termf) { if(termf.is_default()==false) {   if(wyc_isatty(termf.wy_fd())!=1) {     WY_RETURN(Wym_EBADF);   } } const WyRet r(WyChrFile::reset(termf)); if(r!=Ok) {   WY_RETURN(r); } return(Ok);};WyRet WyTerminal::reset(const WyStr& pname,int f) try { //  Note: There is no _alloc(const WyStr&,f)', but that's the same thing // WyTerminal tmp(pname,f); WyRet r( this->reset(tmp) ); if(r!=Ok) {   WY_RETURN(r); } return(Ok);}catch(const Reply& e) {  WY_RETURN(e);}catch(const WyRet& e) { WY_NDEBUG_MSG(e);  WY_THROW( WyRet(e) );};WyRet WyTerminal::reset(const char* pname,int f) try { //  Note: There is no _alloc(const WyStr&,f)', but that's the same thing // WyTerminal tmp(pname,f); WyRet r( this->reset(tmp) ); if(r!=Ok) {   WY_RETURN(r); } return(Ok);}catch(const Reply& e) {  WY_RETURN(e);}catch(const WyRet& e) { WY_NDEBUG_MSG(e);  WY_THROW( WyRet(e) );};WyTerminal* WyTerminal::_alloc(WyRet& r) consttry { if(WY__EQU_TYPEID(*this,WyTerminal)==false) {   r=Wym_ENOSYS; WY_HERE(r);        // _alloc not overridden   return(NULL); } WyTerminal* p=new(std::nothrow) WyTerminal(); if(p==NULL) {   r=Wym_ENOMEM; WY_HERE(r); } else {   r=Ok; } return(p);}catch(const Reply& e) { r=e; WY_HERE(r); return(NULL);}catch(const WyRet& e) { WY_NDEBUG_MSG(e); WY_THROW( WyRet(e) );};WyRet WyTerminal::drain(void) {  const WyRet r( WyChrFile::_tcdrain() ); if(r!=Ok) {   WY_RETURN(r); } return(Ok);};WyRet WyTerminal::sendbreak(int duration) { if(::tcsendbreak(WyChrFile::wy_fd(),duration)!=0) {   WY_RETURN(errno); } return(Ok);};WyRet WyTerminal::flush(int qsel) {  if(::tcflush(WyChrFile::wy_fd(), qsel)!=0) {   WY_RETURN(errno); } return(Ok);};WyRet WyTerminal::flow(int duration) { if(::tcflow(WyChrFile::wy_fd(),duration)!=0) {   WY_RETURN(errno); } return(Ok);};WyRet WyTerminal::getattr(WyTermios& tio) const { if(::tcgetattr(WyChrFile::wy_fd(),tio.wy_tio_ptr())!=0) {   WY_RETURN(errno); } return(Ok);};WyRet WyTerminal::setattr(const WyTermios& tio, int option) { if(::tcsetattr(WyChrFile::wy_fd(),option,tio.wy_tio_ptr())!=0) {   WY_RETURN(errno); } return(Ok);};WyRet WyTerminal::devname(WyStr& pathname) const { const size_t PathMax=PATH_MAX; // not sure this is right WyStr buf; WyRet r( buf._reserve(PathMax) ); if(r!=Ok) {   WY_RETURN(r); } const int v=wyc_ttyname(this->wy_fd(),&buf[0],PathMax); if(v!=0) {   WY_RETURN(WyReply(v)); } buf._setsize(std::strlen(buf.data())); buf.swap(pathname); return(Ok);};

⌨️ 快捷键说明

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