diff --git a/src/ftermcap.cpp b/src/ftermcap.cpp index 8b84c58d..251a42ec 100644 --- a/src/ftermcap.cpp +++ b/src/ftermcap.cpp @@ -67,39 +67,6 @@ char FTermcap::string_buf[2048] {}; */ // public methods of FTermcap -//---------------------------------------------------------------------- -bool FTermcap::getFlag (const std::string& cap) -{ - return tgetflag(C_STR(cap.c_str())); -} - -//---------------------------------------------------------------------- -int FTermcap::getNumber (const std::string& cap) -{ - return tgetnum(C_STR(cap.c_str())); -} - -//---------------------------------------------------------------------- -char* FTermcap::getString (const std::string& cap) -{ - return tgetstr( C_STR(cap.c_str()) - , reinterpret_cast(&string_buf) ); -} - -//---------------------------------------------------------------------- -int FTermcap::paddingPrint ( const std::string& str - , int affcnt, fn_putc putc ) -{ - return fsystem->tputs (str.c_str(), affcnt, putc); -} - -//---------------------------------------------------------------------- -char* FTermcap::encodeMotionParameter ( const std::string& str - , int col, int row ) -{ - return tgoto(str.c_str(), col, row); -} - //---------------------------------------------------------------------- void FTermcap::init() { @@ -271,6 +238,15 @@ void FTermcap::termcapKeys() fc::fkey[i].string = getString(fc::fkey[i].tname); } +//---------------------------------------------------------------------- +int FTermcap::_tputs (const char* str, int affcnt, fn_putc putc) +{ + if ( ! fsystem ) + fsystem = FTerm::getFSystem(); + + return fsystem->tputs (str, affcnt, putc); +} + // private Data Member of FTermcap - termcap capabilities //---------------------------------------------------------------------- diff --git a/src/include/final/ftermcap.h b/src/include/final/ftermcap.h index 09c4aa50..2f986065 100644 --- a/src/include/final/ftermcap.h +++ b/src/include/final/ftermcap.h @@ -95,13 +95,18 @@ class FTermcap final // Accessors const FString getClassName() const; - static bool getFlag (const std::string&); - static int getNumber (const std::string&); - static char* getString (const std::string&); - static int paddingPrint (const std::string&, int, fn_putc); - static char* encodeMotionParameter (const std::string&, int, int); + template + static bool getFlag (const CharT&); + template + static int getNumber (const CharT&); + template + static char* getString (const CharT&); + template + static char* encodeMotionParameter (const CharT&, int, int); template - static char* encodeParameter (const std::string&, Args&&...); + static char* encodeParameter (Args&&...); + template + static int paddingPrint (const CharT&, int, fn_putc); // Methods static void init(); @@ -129,6 +134,7 @@ class FTermcap final static void termcapNumerics(); static void termcapStrings(); static void termcapKeys(); + static int _tputs (const char*, int, fn_putc); // Data member static FSystem* fsystem; @@ -144,10 +150,45 @@ inline const FString FTermcap::getClassName() const { return "FTermcap"; } //---------------------------------------------------------------------- -template -inline char* FTermcap::encodeParameter (const std::string& str, Args&&... args) +template +bool FTermcap::getFlag (const CharT& cap) { - return tparm (str.c_str(), std::forward(args)...); + return tgetflag(cap); +} + +//---------------------------------------------------------------------- +template +int FTermcap::getNumber (const CharT& cap) +{ + return tgetnum(cap); +} + +//---------------------------------------------------------------------- +template +char* FTermcap::getString (const CharT& cap) +{ + return tgetstr(cap, reinterpret_cast(&string_buf)); +} + +//---------------------------------------------------------------------- +template +char* FTermcap::encodeMotionParameter (const CharT& cap, int col, int row) +{ + return tgoto(cap, col, row); +} + +//---------------------------------------------------------------------- +template +inline char* FTermcap::encodeParameter (Args&&... args) +{ + return tparm (std::forward(args)...); +} + +//---------------------------------------------------------------------- +template +int FTermcap::paddingPrint (const CharT& str, int affcnt, fn_putc putc) +{ + return _tputs (str, affcnt, putc); } } // namespace finalcut