Improved alternate character set for FreeBSD console
This commit is contained in:
parent
d7aa8f3a70
commit
d5b2c9dc99
|
@ -1,3 +1,7 @@
|
|||
2017-03-28 Markus Gans <guru.mail@muenster.de>
|
||||
* Improved graphic charset pairs (vt100)
|
||||
for FreeBSD console
|
||||
|
||||
2017-03-26 Markus Gans <guru.mail@muenster.de>
|
||||
* The Final Cut compiles now under FreeBSD
|
||||
* A new test program to show the termcap variables
|
||||
|
|
|
@ -13,11 +13,11 @@ typedef struct
|
|||
char* string;
|
||||
char tname[4];
|
||||
}
|
||||
keymap;
|
||||
fkeymap;
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
static keymap Fkey[] =
|
||||
static fkeymap Fkey[] =
|
||||
{
|
||||
{ fc::Fkey_backspace, 0, "kb" }, // backspace key
|
||||
{ fc::Fkey_catab , 0, "ka" }, // clear-all-tabs key
|
||||
|
@ -191,9 +191,9 @@ typedef struct
|
|||
int num;
|
||||
char string[8];
|
||||
}
|
||||
metakeymap;
|
||||
fmetakeymap;
|
||||
|
||||
static metakeymap Fmetakey[] =
|
||||
static fmetakeymap Fmetakey[] =
|
||||
{
|
||||
{ fc::Fmkey_ic , "\033[2;3~" }, // M-insert
|
||||
{ fc::Fmkey_ic , "\033\033[2~" }, // M-insert
|
||||
|
|
|
@ -553,7 +553,7 @@ bool FTerm::setVGAFont()
|
|||
{
|
||||
if ( openConsole() == 0 )
|
||||
{
|
||||
if ( isConsole() )
|
||||
if ( isLinuxConsole() )
|
||||
{
|
||||
// standard vga font 8x16
|
||||
int ret = setScreenFont(__8x16std, 256, 8, 16);
|
||||
|
@ -626,7 +626,7 @@ bool FTerm::setNewFont()
|
|||
|
||||
if ( openConsole() == 0 )
|
||||
{
|
||||
if ( isConsole() )
|
||||
if ( isLinuxConsole() )
|
||||
{
|
||||
struct unimapdesc unimap;
|
||||
int ret;
|
||||
|
@ -697,7 +697,7 @@ bool FTerm::setOldFont()
|
|||
{
|
||||
if ( openConsole() == 0 )
|
||||
{
|
||||
if ( isConsole() )
|
||||
if ( isLinuxConsole() )
|
||||
{
|
||||
if ( screen_font.data )
|
||||
{
|
||||
|
@ -1693,7 +1693,7 @@ bool FTerm::gpmMouse (bool on)
|
|||
|
||||
if ( openConsole() == 0 )
|
||||
{
|
||||
if ( ! isConsole() )
|
||||
if ( ! isLinuxConsole() )
|
||||
return false;
|
||||
|
||||
closeConsole();
|
||||
|
@ -1734,7 +1734,7 @@ bool FTerm::gpmMouse (bool on)
|
|||
// private methods of FTerm
|
||||
//----------------------------------------------------------------------
|
||||
#if defined(__linux__)
|
||||
int FTerm::isConsole()
|
||||
int FTerm::isLinuxConsole()
|
||||
{
|
||||
char arg = 0;
|
||||
// get keyboard type an compare
|
||||
|
@ -1742,7 +1742,27 @@ int FTerm::isConsole()
|
|||
&& ioctl(fd_tty, KDGKBTYPE, &arg) == 0
|
||||
&& ((arg == KB_101) || (arg == KB_84)) );
|
||||
}
|
||||
#endif
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
#if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__))
|
||||
#include <sys/param.h>
|
||||
#if defined(BSD)
|
||||
|
||||
bool FTerm::isBSDConsole()
|
||||
{
|
||||
keymap_t keymap;
|
||||
|
||||
if ( ioctl(0, GIO_KEYMAP, &keymap) == 0 )
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(__linux__)
|
||||
//----------------------------------------------------------------------
|
||||
inline uInt16 FTerm::getInputStatusRegisterOne()
|
||||
{
|
||||
|
@ -2186,7 +2206,7 @@ void FTerm::init_console()
|
|||
|
||||
if ( openConsole() == 0 )
|
||||
{
|
||||
if ( isConsole() )
|
||||
if ( isLinuxConsole() )
|
||||
{
|
||||
getUnicodeMap();
|
||||
getScreenFont();
|
||||
|
@ -3024,6 +3044,24 @@ void FTerm::init_termcaps()
|
|||
const_cast<char*>(CSI "29m");
|
||||
}
|
||||
|
||||
#if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__))
|
||||
#include <sys/param.h>
|
||||
#if defined(BSD)
|
||||
if ( isBSDConsole() )
|
||||
{
|
||||
tcap[fc::t_acs_chars].string = \
|
||||
const_cast<char*>("-\036.\0370\333"
|
||||
"a\260f\370g\361"
|
||||
"h\261j\331k\277"
|
||||
"l\332m\300n\305"
|
||||
"q\304t\303u\264"
|
||||
"v\301w\302x\263"
|
||||
"y\363z\362~\371");
|
||||
FTermcap::attr_without_color = 18;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// read termcap key strings
|
||||
for (int i=0; Fkey[i].tname[0] != 0; i++)
|
||||
{
|
||||
|
@ -3391,7 +3429,7 @@ void FTerm::init()
|
|||
#if defined(__linux__)
|
||||
if ( linux_terminal && openConsole() == 0 )
|
||||
{
|
||||
if ( isConsole() )
|
||||
if ( isLinuxConsole() )
|
||||
{
|
||||
if ( setBlinkAsIntensity(true) == 0 )
|
||||
FTermcap::max_color = 16;
|
||||
|
|
18
src/fterm.h
18
src/fterm.h
|
@ -40,9 +40,17 @@
|
|||
#include <sys/kd.h>
|
||||
#endif
|
||||
|
||||
#if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__))
|
||||
#include <sys/param.h>
|
||||
#if defined(BSD)
|
||||
#include <sys/kbio.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <langinfo.h>
|
||||
#include <term.h> // termcap
|
||||
|
@ -306,11 +314,14 @@ class FTerm
|
|||
// Disable assignment operator (=)
|
||||
FTerm& operator = (const FTerm&);
|
||||
|
||||
#if defined(__linux__)
|
||||
// Inquiries
|
||||
static int isConsole();
|
||||
#if defined(__linux__)
|
||||
static int isLinuxConsole();
|
||||
#endif
|
||||
static bool isBSDConsole();
|
||||
|
||||
// Methods
|
||||
#if defined(__linux__)
|
||||
static uInt16 getInputStatusRegisterOne();
|
||||
static uChar readAttributeController (uChar);
|
||||
static void writeAttributeController (uChar, uChar);
|
||||
|
@ -319,11 +330,13 @@ class FTerm
|
|||
static int setBlinkAsIntensity (bool);
|
||||
static int getFramebuffer_bpp();
|
||||
#endif
|
||||
|
||||
static int openConsole();
|
||||
static int closeConsole();
|
||||
static void identifyTermType();
|
||||
static void storeTTYsettings();
|
||||
static void restoreTTYsettings();
|
||||
|
||||
#if defined(__linux__)
|
||||
static int getScreenFont();
|
||||
static int setScreenFont (uChar*, uInt, uInt, uInt, bool = false);
|
||||
|
@ -331,6 +344,7 @@ class FTerm
|
|||
static int getUnicodeMap ();
|
||||
static void init_console();
|
||||
#endif
|
||||
|
||||
static uInt getBaudRate (const struct termios*);
|
||||
static char* init_256colorTerminal();
|
||||
static char* parseAnswerbackMsg (char*&);
|
||||
|
|
|
@ -93,10 +93,15 @@ int main (int argc, char* argv[])
|
|||
<< terminal->termtype_Answerback << "\r\n";
|
||||
std::cout << "| after parseSecDA(): "
|
||||
<< terminal->termtype_SecDA << "\r\n";
|
||||
tcapString ( "| The answerback String"
|
||||
, terminal->getAnswerbackString().c_str() );
|
||||
tcapString ( "| The SecDA String"
|
||||
, terminal->getSecDAString().c_str() );
|
||||
|
||||
if ( &terminal->getAnswerbackString() )
|
||||
tcapString ( "| The answerback String"
|
||||
, terminal->getAnswerbackString().c_str() );
|
||||
|
||||
if ( &terminal->getSecDAString() )
|
||||
tcapString ( "| The SecDA String"
|
||||
, terminal->getSecDAString().c_str() );
|
||||
|
||||
std::cout << "'------------------- debug -------------------\r\n";
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Reference in New Issue