git-svn-id: svn://db.shs.com.ru/pip@606 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5

This commit is contained in:
2018-04-08 20:32:53 +00:00
parent 1ff414d51c
commit ef4030ebb9
4 changed files with 37 additions and 8 deletions

View File

@@ -18,7 +18,7 @@
*/
#include "piincludes_p.h"
#include "piterminal.h"
# include "pisharedmemory.h"
#include "pisharedmemory.h"
#ifdef WINDOWS
# include <windows.h>
# include <wincon.h>
@@ -37,6 +37,13 @@
# include <pty.h>
# endif
# endif
# ifdef ANDROID
# if __ANDROID_API__ >= 23
# define HAS_FORKPTY
# endif
# else
# define HAS_FORKPTY
# endif
#endif
@@ -133,11 +140,13 @@ void PITerminal::write(const PIByteArray & d) {
msg << int(mtKey) << ke;
writePipe(PRIVATE->pipe, msg);
#else
# ifdef HAS_FORKPTY
if (PRIVATE->fd == 0) return;
//ssize_t wrote = 0;
//wrote =
::write(PRIVATE->fd, d.data(), d.size_s());
//piCout << "wrote" << wrote << d;
# endif
#endif
cursor_tm.reset();
cursor_blink = true;
@@ -360,6 +369,7 @@ void PITerminal::run() {
cursor_blink = !cursor_blink;
}
#ifndef WINDOWS
# ifdef HAS_FORKPTY
if (PRIVATE->fd == 0) return;
PRIVATE->tmp_buf.resize(BUFFER_SIZE);
int readed = ::read(PRIVATE->fd, PRIVATE->tmp_buf.data(), BUFFER_SIZE - PRIVATE->read_buf.size_s());
@@ -396,6 +406,7 @@ void PITerminal::run() {
PRIVATE->read_buf.clear();
}
PRIVATE->last_read = false;
# endif
#endif
}
@@ -779,6 +790,7 @@ bool PITerminal::initialize() {
CloseHandle(PRIVATE->pi.hThread);
resize(dsize_x, dsize_y);
#else
# ifdef HAS_FORKPTY
char pty[256]; memset(pty, 0, 256);
winsize ws;
ws.ws_col = dsize_x;
@@ -833,6 +845,7 @@ bool PITerminal::initialize() {
size_y = dsize_y;
resize(size_x, size_y);
}
# endif
#endif
cursor_blink = false;
cursor_tm.reset();
@@ -856,10 +869,12 @@ void PITerminal::destroy() {
if (PRIVATE->hConBuf != INVALID_HANDLE_VALUE) CloseHandle(PRIVATE->hConBuf);
//piCout << "destroy" << size_y;
#else
# ifdef HAS_FORKPTY
if (PRIVATE->pid != 0)
kill(PRIVATE->pid, SIGKILL);
if (PRIVATE->fd != 0)
::close(PRIVATE->fd);
# endif
#endif
initPrivate();
}
@@ -875,6 +890,7 @@ bool PITerminal::resize(int cols, int rows) {
msg << int(mtResize) << dsize_x << dsize_y;
writePipe(PRIVATE->pipe, msg);
#else
# ifdef HAS_FORKPTY
if (PRIVATE->fd == 0) return false;
size_x = dsize_x;
size_y = dsize_y;
@@ -888,6 +904,7 @@ bool PITerminal::resize(int cols, int rows) {
PRIVATE->cells_save.resize(size_y);
for (int i = 0; i < size_y; ++i)
PRIVATE->cells_save[i].resize(size_x);
# endif
#endif
cells.resize(size_y);
for (int i = 0; i < size_y; ++i)