diff options
author | Juan Manuel Tomás <jtomas1815@gmail.com> | 2020-07-07 17:43:50 -0300 |
---|---|---|
committer | Juan Manuel Tomás <jtomas1815@gmail.com> | 2020-07-07 17:43:50 -0300 |
commit | 2260209d3b09f728f0cbb891f5498a9f0f8e38eb (patch) | |
tree | e3f886518b49bc09eadbb7aa94cee1b37f6cc894 | |
parent | c801730eda827ea2662ef703f694a2abde33f4c0 (diff) | |
download | jet-2260209d3b09f728f0cbb891f5498a9f0f8e38eb.tar.gz jet-2260209d3b09f728f0cbb891f5498a9f0f8e38eb.zip |
Implement tui for client
-rw-r--r-- | Makefile | 7 | ||||
-rw-r--r-- | client.cpp | 8 | ||||
-rw-r--r-- | jet.cpp | 8 | ||||
-rwxr-xr-x | jet2 | bin | 0 -> 23768 bytes | |||
-rw-r--r-- | jet2.cpp | 139 | ||||
-rw-r--r-- | point.cpp | 18 |
6 files changed, 72 insertions, 108 deletions
@@ -1,4 +1,11 @@ FLAGS=-ggdb -O0 -lcurses $(shell ncursesw6-config --cflags --libs) +_PHONY:all + +all:jet jet2 + jet: Makefile *.cpp g++ $(FLAGS) jet.cpp -o jet + +jet2: Makefile *.cpp + g++ $(FLAGS) jet2.cpp -o jet2 @@ -76,4 +76,12 @@ struct Client { target++; } } + + void push() { + cursor.push(args.pop()); + } + + void pop() { + cursor.pop(); + } }; @@ -35,6 +35,10 @@ void parse_command(char *command, Client *client) { client->show(); } else if (strcmp(token, "move") == 0) { client->move(); + } else if (strcmp(token, "push") == 0) { + client->push(); + } else if (strcmp(token, "pop") == 0) { + client->pop(); } else { client->args.push(atoi(token)); } @@ -47,13 +51,15 @@ int main() { scratch.read("LICENSE"); int listener = create_listener(); + int epollfd = epoll_create1(0); - epoll_event events[MAX_EVENTS]; + epoll_event ev; ev.events = EPOLLIN; ev.data.fd = listener; epoll_ctl(epollfd, EPOLL_CTL_ADD, listener, &ev); + epoll_event events[MAX_EVENTS]; Client *clients[1024] = {}; for (;;) { Binary files differ@@ -1,14 +1,17 @@ -#include <stdlib.h> #include <stdio.h> -#include <assert.h> -#include <locale.h> +#include <stdlib.h> +#include <string.h> #include <curses.h> -#include "page.cpp" -#include "point.cpp" -#include "buffer.cpp" + +#include <sys/types.h> +#include <sys/socket.h> +#include <netinet/ip.h> +#include <arpa/inet.h> +#include <unistd.h> #define NORMAL_MODE 0 #define INSERT_MODE 1 +#define PORT 6969 #define pos(x, y) (x) + (y) * window_width int main(int argc, char *argv[]) { @@ -18,110 +21,68 @@ int main(int argc, char *argv[]) { intrflush(stdscr, FALSE); keypad(stdscr, TRUE); - if (argc > 1) { - buffer.read(argv[1]); - } - int window_height, window_width; getmaxyx(stdscr, window_height, window_width); - int *view = new int[window_width * window_height]; + char *view = new char[window_width * window_height]; for (int i = 0; i < window_width * window_height; view[i++] = 0); + + int s = socket(AF_INET, SOCK_STREAM, 0); + sockaddr_in addr = { AF_INET, htons(PORT), htonl(INADDR_LOOPBACK)}; + connect(s, (sockaddr *) &addr, sizeof(sockaddr_in)); + int mode = NORMAL_MODE; int quit = 0; while (!quit) { clear(); - Point window_end(window_start); - int x = -1, y = -1; - for (int i = 0; i < window_height; i++) { - for (int j = 0; j < window_width; j++) { - if (window_end == cursor) { - x = j; - y = i; - } - view[pos(j, i)] = window_end.element(); - if (window_end.element() == '\n') { - for (int k = j + 1; k < window_width; k++) { - view[pos(k, i)] = 0; - } - j = window_width; - } else if (window_end.element() == '\t') { - for (int k = j + 1; k < j + 8; k++) { - view[pos(k, i)] = 0; - } - j = j + 7; - } - window_end++; - } - } + char msg[32] = {}; + int len = sprintf(msg, " %d %d show ", window_width, window_height); + write(s, msg, len); + read(s, view, window_width * window_height); for (int i = 0; i < window_width * window_height; i++) { - printw("%lc", view[i]); - } - if (x != -1 && y != -1) { - move(y, x); + if (view[i]) { + printw("%c", view[i]); + } } + memset(msg, 0, 32); int input = getch(); - if (byte_type(input) == 1) { - if (mode == NORMAL_MODE) { - switch (input) { - case '': - quit = 1; - break; - case 'i': - mode = INSERT_MODE; - break; - case 'j': - for (int i = pos(x, y); i < pos(x + 1, y + 1); i++) { - if (view[i]) cursor++; - } - cursor--; - if (y + 1 >= window_height) { - window_start.seek('\n', window_width - 1); - window_start++; - } - break; - case 'k': - for (int i = pos(x, y); i > pos(x, y - 1); i--) { - if (view[i]) cursor--; - } - if (y - 1 <= 0) { - window_start--; - window_start.rseek('\n', window_width - 1); - } - break; - case 'h': - cursor--; - break; - case 'l': - cursor++; - break; - } - } else { - switch (input) { - case '': - mode = NORMAL_MODE; - break; - case KEY_BACKSPACE: - cursor.pop(); - break; - default: - cursor.push(input); - } + if (mode == NORMAL_MODE) { + switch (input) { + case '': + quit = 1; + break; + case 'i': + mode = INSERT_MODE; + break; + case 'h': + len = sprintf(msg, " -1 move "); + write(s, msg, len); + break; + case 'l': + len = sprintf(msg, " 1 move "); + write(s, msg, len); + break; } } else { - cursor.push(input); - for (int i = 0; i < byte_type(input) - 1; i++) { - cursor.push(getch()); + switch (input) { + case '': + mode = NORMAL_MODE; + break; + case KEY_BACKSPACE: + len = sprintf(msg, " pop "); + write(s, msg, len); + break; + default: + len = sprintf(msg, " %d push ", input); + write(s, msg, len); } } } - buffer.write(buffer.name); - endwin(); return 0; } @@ -93,24 +93,6 @@ struct Point { return next_byte(); } - uint64_t seek(uint8_t c, uint64_t limit) { - uint64_t travel_distance = 0; - while (!at_end() && next_byte() != c && travel_distance < limit) { - (*this)++; - travel_distance++; - } - return travel_distance; - } - - uint64_t rseek(uint8_t c, uint64_t limit) { - uint64_t travel_distance = 0; - while (!at_start() && prev_byte() != c && travel_distance < limit) { - (*this)--; - travel_distance++; - } - return travel_distance; - } - void align_gap() { while (page->gap_end < index_to_offset()) { page->move_gap_forward(); |