added static output handler (fixes #6)

added some extensive debug output — all the communication between pseudo
terminal's host and client
This commit is contained in:
Christian Burger 2022-04-08 21:35:49 +02:00
parent fd800dbca8
commit c7138f3df9
3 changed files with 22 additions and 9 deletions

View file

@ -51,7 +51,8 @@ namespace krikkel::NCursesPtyWindow
ptyWindow->wresize(Root_Window->lines(), Root_Window->cols()); ptyWindow->wresize(Root_Window->lines(), Root_Window->cols());
continue; continue;
} }
ptyWindow->writeToClient((unsigned char) input);
ptyWindow->writeToClient((char *) &input, 1);
} }
return 0; return 0;

View file

@ -37,9 +37,11 @@ namespace krikkel::NCursesPtyWindow
pseudoTerminalScreen = vterm_obtain_screen(pseudoTerminal); pseudoTerminalScreen = vterm_obtain_screen(pseudoTerminal);
vterm_screen_reset(pseudoTerminalScreen, true); vterm_screen_reset(pseudoTerminalScreen, true);
vterm_screen_set_callbacks(pseudoTerminalScreen, &screenCallbacks, this); vterm_screen_set_callbacks(pseudoTerminalScreen, &screenCallbacks, this);
vterm_output_set_callback(pseudoTerminal, &staticHandlerOutput, this);
//vterm_screen_enable_altscreen(pseudoTerminalScreen, true);
// the terminal is doing most of the work // the terminal is doing most of the work
//raw(); — cbreak might suffice //raw(); //— cbreak might suffice
//noecho(); — already set //noecho(); — already set
//nodelay(true); — @todo needs some reprogramming //nodelay(true); — @todo needs some reprogramming
keypad(false); keypad(false);
@ -62,10 +64,11 @@ namespace krikkel::NCursesPtyWindow
return fdPtyClient; return fdPtyClient;
} }
/// @todo maybe implement a function with a string buffer void NCursesPtyWindow::writeToClient(const char *output, size_t length) const
void NCursesPtyWindow::writeToClient(char character)
{ {
write(fdPtyHost, &character, sizeof(character)); write(fdPtyHost, output, length);
__debug_log("written to PTY client: ");
__debug_log(__debug_bytes_printable_table(output, length));
} }
void NCursesPtyWindow::readFromPtyClientThreadMethod() void NCursesPtyWindow::readFromPtyClientThreadMethod()
@ -90,6 +93,7 @@ namespace krikkel::NCursesPtyWindow
size_t bytesRead = read(fdPtyHost, ptyClientOutputBuffer, PTY_CLIENT_OUTPUT_BUFFER_SIZE); size_t bytesRead = read(fdPtyHost, ptyClientOutputBuffer, PTY_CLIENT_OUTPUT_BUFFER_SIZE);
if(bytesRead != -1 && bytesRead != 0) if(bytesRead != -1 && bytesRead != 0)
vterm_input_write(pseudoTerminal, ptyClientOutputBuffer, bytesRead); vterm_input_write(pseudoTerminal, ptyClientOutputBuffer, bytesRead);
__debug_log("read from PTY client: '" + __debug_bytes_printable(ptyClientOutputBuffer, bytesRead) + "'");
} }
VTermScreenCallbacks NCursesPtyWindow::screenCallbacks = VTermScreenCallbacks NCursesPtyWindow::screenCallbacks =
@ -210,13 +214,13 @@ namespace krikkel::NCursesPtyWindow
attr_t NCursesPtyWindow::extractAttributesFromVTermCell(VTermScreenCell vTermCell) attr_t NCursesPtyWindow::extractAttributesFromVTermCell(VTermScreenCell vTermCell)
{ {
attr_t result = A_NORMAL; attr_t result = A_NORMAL;
__debug_log("unimplemented method called"); //__debug_log("unimplemented method called");
return result; return result;
} }
short NCursesPtyWindow::extractColorFromVTermCell(VTermScreenCell vTermCell) short NCursesPtyWindow::extractColorFromVTermCell(VTermScreenCell vTermCell)
{ {
__debug_log("unimplemented method called"); //__debug_log("unimplemented method called");
return 0; return 0;
} }
@ -317,4 +321,11 @@ namespace krikkel::NCursesPtyWindow
NCursesPtyWindow *instance = static_cast<NCursesPtyWindow *>(user); NCursesPtyWindow *instance = static_cast<NCursesPtyWindow *>(user);
return instance->handlerPopLine(cols, cells); return instance->handlerPopLine(cols, cells);
} }
void NCursesPtyWindow::staticHandlerOutput(const char *s, size_t len, void *user)
{
NCursesPtyWindow *instance = static_cast<NCursesPtyWindow *>(user);
for(size_t index = 0; index < len; ++index)
instance->writeToClient(s, len);
}
} }

View file

@ -24,7 +24,7 @@ namespace krikkel::NCursesPtyWindow
~NCursesPtyWindow(); ~NCursesPtyWindow();
int getFdPtyClient() const; int getFdPtyClient() const;
void writeToClient(char character); void writeToClient(const char * string, size_t length) const;
int add_wch(cchar_t *character); int add_wch(cchar_t *character);
int refresh() override; int refresh() override;
@ -66,5 +66,6 @@ namespace krikkel::NCursesPtyWindow
static int staticHandlerResize(int rows, int cols, void *user); static int staticHandlerResize(int rows, int cols, void *user);
static int staticHandlerPushLine(int cols, const VTermScreenCell *cells, void *user); static int staticHandlerPushLine(int cols, const VTermScreenCell *cells, void *user);
static int staticHandlerPopLine(int cols, VTermScreenCell *cells, void *user); static int staticHandlerPopLine(int cols, VTermScreenCell *cells, void *user);
static void staticHandlerOutput(const char *s, size_t len, void *user);
}; };
} }