working on ssh fork
This commit is contained in:
@@ -25,5 +25,5 @@ add_subdirectory(externals)
|
||||
# PROJECT
|
||||
add_subdirectory(source)
|
||||
#
|
||||
add_subdirectory(test)
|
||||
#add_subdirectory(test)
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@ typedef unsigned int TART_FLAGS;
|
||||
typedef unsigned char tart_byte;
|
||||
typedef unsigned short tart_id;
|
||||
|
||||
#include <libssh/libssh.h>
|
||||
|
||||
#ifdef TART_UTF8
|
||||
#include <wchar.h>
|
||||
@@ -90,6 +91,8 @@ typedef struct {
|
||||
tart_vec2 terminalSize;
|
||||
tart_buffer buffer;
|
||||
const char* name;
|
||||
|
||||
ssh_channel ch;
|
||||
}tart_window ;
|
||||
|
||||
|
||||
@@ -189,12 +192,14 @@ typedef struct {
|
||||
#define t_strncpy wcncpy
|
||||
#endif
|
||||
|
||||
int tart_create_window(tart_window* w, tart_vec2 ws, const char* title);
|
||||
int tart_create_window(tart_window* w, tart_vec2 ws, const char* title, ssh_channel ch);
|
||||
int tart_init(tart_window* w);
|
||||
int tart_close(tart_window* w);
|
||||
void tart_disable_cusor();
|
||||
void tart_enable_cusor();
|
||||
tart_vec2 tart_window_resize(tart_window* w, tart_vec2 size);
|
||||
void tart_disable_cusor(tart_window* w);
|
||||
void tart_enable_cusor(tart_window* w);
|
||||
int tart_draw(tart_window* w);
|
||||
int tart_draw_to_buffer(tart_window* w);
|
||||
|
||||
int tart_jump(tart_window* w, tart_vec2 pos);
|
||||
int tart_move_cursor(tart_window* w, tart_vec2 pos);
|
||||
|
||||
@@ -12,6 +12,11 @@ add_library(${PROJECT_NAME} STATIC ${LIB_SOURCES})
|
||||
|
||||
target_include_directories(${PROJECT_NAME} BEFORE PUBLIC "../includes/")
|
||||
|
||||
target_link_libraries(
|
||||
${PROJECT_NAME}
|
||||
ssh
|
||||
)
|
||||
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
target_compile_definitions(${PROJECT_NAME} PUBLIC "_LINUX")
|
||||
endif()
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include <sys/ioctl.h>
|
||||
#include <unistd.h>
|
||||
#include <wchar.h>
|
||||
#include <libssh/libssh.h>
|
||||
|
||||
|
||||
#define BUFFER_AT_POS(W) (W->windowSize.x * W->buffer.curser.y) + W->buffer.curser.x
|
||||
@@ -14,12 +15,21 @@
|
||||
#define BUFFER_SIZE (w->windowSize.x * w->windowSize.y)
|
||||
#define BUFFER_BUFFER_SIZE BUFFER_LINE_SIZE * w->windowSize.y
|
||||
|
||||
void tart_free_buffer(tart_window* w) {
|
||||
for (int i = 0; i < w->windowSize.y; i++) {
|
||||
free(w->buffer.buffer[i]);
|
||||
|
||||
}
|
||||
free(w->buffer.buffer);
|
||||
}
|
||||
|
||||
tart_vec2 GetTerminalSize(tart_window* w) {
|
||||
struct winsize win;
|
||||
ioctl(STDOUT_FILENO, TIOCGWINSZ, &win);
|
||||
return (tart_vec2){win.ws_col,win.ws_row};
|
||||
};
|
||||
|
||||
|
||||
int tart_create_buffer(tart_window* w) {
|
||||
w->buffer.buffer = (tart_cell**)malloc(w->windowSize.y * sizeof(tart_cell*));
|
||||
if(w->buffer.buffer == NULL) {
|
||||
@@ -70,19 +80,26 @@ int tart_create_buffer(tart_window* w) {
|
||||
return TART_OK;
|
||||
}
|
||||
|
||||
void tart_free_buffer(tart_window* w) {
|
||||
free(w->buffer.buffer);
|
||||
tart_vec2 tart_window_resize(tart_window* w, tart_vec2 size) {
|
||||
printf("size.x %d, size.y %d\n", size.x, size.y);
|
||||
tart_free_buffer(w);
|
||||
w->windowSize = size;
|
||||
w->terminalSize = size;
|
||||
tart_create_buffer(w);
|
||||
return size;
|
||||
}
|
||||
|
||||
int tart_create_window(tart_window* w, tart_vec2 ws, const char* title) {
|
||||
w->windowSize.x = GetTerminalSize(w).x - 1;
|
||||
w->windowSize.y = GetTerminalSize(w).y;
|
||||
w->terminalSize = GetTerminalSize(w);
|
||||
int tart_create_window(tart_window* w, tart_vec2 ws, const char* title, ssh_channel ch) {
|
||||
w->windowSize.x = ws.x - 1;
|
||||
w->windowSize.y = ws.y;
|
||||
w->terminalSize = ws;
|
||||
w->homePosition = (tart_vec2){
|
||||
(w->terminalSize.x / 2) - (w->windowSize.x / 2),
|
||||
(w->terminalSize.x / 2) - (w->windowSize.x / 2)
|
||||
};
|
||||
|
||||
w->ch = ch;
|
||||
|
||||
tart_create_buffer(w);
|
||||
|
||||
return TART_OK;
|
||||
@@ -110,8 +127,8 @@ int flush_buffer(tart_window* w) {
|
||||
#endif
|
||||
);
|
||||
for(int i = 0; i < w->windowSize.y; i++) {
|
||||
for(int j = 0; j < w->windowSize.x ; j++) {
|
||||
bzero(w->buffer.buffer[i][j], sizeof(tart_cell));
|
||||
for(int j = 0; j < w->windowSize.x + 1 ; j++) {
|
||||
bzero(w->buffer.buffer[i][j], TART_CELL_SIZE);
|
||||
memcpy(w->buffer.buffer[i][j], ce, sizeof(tart_cell));
|
||||
}
|
||||
|
||||
@@ -143,22 +160,24 @@ int tart_init(tart_window* w) {
|
||||
|
||||
//write(STDOUT_FILENO, ce, TART_CELL_SIZE);
|
||||
|
||||
write(STDOUT_FILENO, "\e[?1049h", 8);
|
||||
write(STDOUT_FILENO, "\e[H", 3);
|
||||
write(STDOUT_FILENO, "\e[s", 3);
|
||||
ssh_channel_write(w->ch, "\e[?1049h", 8);
|
||||
ssh_channel_write(w->ch, "\e[H", 3);
|
||||
ssh_channel_write(w->ch, "\e[s", 3);
|
||||
|
||||
return TART_OK;
|
||||
}
|
||||
|
||||
void tart_disable_cusor() {
|
||||
write(STDOUT_FILENO, "\e[?25l", 6);
|
||||
void tart_disable_cusor(tart_window* w) {
|
||||
//write(STDOUT_FILENO, "\e[?25l", 6);
|
||||
ssh_channel_write(w->ch, "\e[?25l", strlen("\e[?25l"));
|
||||
}
|
||||
void tart_enable_cusor() {
|
||||
write(STDOUT_FILENO, "\e[?25h", 6);
|
||||
void tart_enable_cusor(tart_window* w) {
|
||||
//write(STDOUT_FILENO, "\e[?25h", 6);
|
||||
ssh_channel_write(w->ch, "\e[?25h", strlen("\e[?25h"));
|
||||
}
|
||||
|
||||
int tart_close(tart_window* w) {
|
||||
write(STDOUT_FILENO, "\e[?1049l", 8);
|
||||
ssh_channel_write(w->ch, "\e[?1049l", 8);
|
||||
//for(int i = 0; i < w->windowSize.y; i++) {
|
||||
// free(w->buffer.buffer[i]);
|
||||
//}
|
||||
@@ -179,6 +198,21 @@ int tart_draw(tart_window* w) {
|
||||
return TART_OK;
|
||||
}
|
||||
|
||||
int tart_draw_to_buffer(tart_window* w) {
|
||||
int bufferSize = TART_OK;
|
||||
int windowBufferSize = (w->windowSize.x + 1) * w->windowSize.y * TART_CELL_SIZE;
|
||||
char cusureMoveBuff[30] = "";
|
||||
int index = 0;
|
||||
for(int i = 0; i < w->windowSize.y; i++) {
|
||||
ssh_channel_write(w->ch,w->buffer.buffer[i], TART_CELL_SIZE * (w->windowSize.x + 1));
|
||||
int wrote = sprintf(cusureMoveBuff,"\e[1B\e[%dD", w->windowSize.x + 1);
|
||||
ssh_channel_write(w->ch,cusureMoveBuff, wrote);
|
||||
}
|
||||
ssh_channel_write(w->ch,"\e[H",strlen("\e[H"));
|
||||
flush_buffer(w);
|
||||
return bufferSize;
|
||||
}
|
||||
|
||||
int tart_jump(tart_window* w, tart_vec2 pos) {
|
||||
w->buffer.jump = pos;
|
||||
w->buffer.curser = pos;
|
||||
|
||||
Reference in New Issue
Block a user