From 35c6354316b94448b6170c0b025bf63e7ace8816 Mon Sep 17 00:00:00 2001 From: y4my4my4m <8145020+y4my4my4m@users.noreply.github.com> Date: Fri, 12 May 2023 03:25:01 +0900 Subject: [PATCH] fix --- src/Home/Telnet/Telnet.ZC | 165 ++++++++++++++++---------------------- 1 file changed, 70 insertions(+), 95 deletions(-) diff --git a/src/Home/Telnet/Telnet.ZC b/src/Home/Telnet/Telnet.ZC index 3136e44d..8e373d63 100755 --- a/src/Home/Telnet/Telnet.ZC +++ b/src/Home/Telnet/Telnet.ZC @@ -29,7 +29,7 @@ I64 TelnetOpen(U8 *host, U16 port) { } sock = TCPConnectionCreate(host, port); - "$$RED$$Conecting to %s:%d.$$FG$$$$BG$$\n", host, port; + "$$GREEN$$Conecting to %s:%d.$$FG$$$$BG$$\n", host, port; if (sock <= 0) { PrintErr("Failed to connect to %s:%d\n", host, port); return sock; @@ -42,110 +42,84 @@ I64 TelnetOpen(U8 *host, U16 port) { U0 InputTask(U0 *args) { I64 sock = *args; + I64 sc; DocTermNew; DocPrint(, "$$WW,1$$"); // WinBorder(OFF); - - U8 input_buffer[INPUT_BUF_SIZE]; - U8 *temp, ch; - I64 sc; - U8 *line = input_buffer; - I64 input_len = 0; - DocBottom(input_task->put_doc); - "\n$$RED$$$BK,1$Input$BK,0$$$BLACK$$:"; + "\n$$GREEN$$$BK,1$Input$BK,0$$$BLACK$$:"; // https://theasciicode.com.ar/ascii-control-characters/escape-ascii-code-27.html - input_len = 0; - while (1) { - U8 key = KeyGet(&sc); - switch (key) - { - case 0: - switch (sc.u8[0]) - { - case SC_CURSOR_LEFT: - // SysLog("Pressed Cursor Left"); - TCPSocketSendString(sock, "\x1B[D"); - break; + try + { + while (!force_disconnect) { + U8 key = KeyGet(&sc); + switch (key) + { + case 0: + switch (sc.u8[0]) + { + case SC_CURSOR_LEFT: + TCPSocketSendString(sock, "\x1B[D"); + break; - case SC_CURSOR_RIGHT: - // SysLog("Pressed Cursor Right"); - TCPSocketSendString(sock, "\x1B[C"); - break; + case SC_CURSOR_RIGHT: + TCPSocketSendString(sock, "\x1B[C"); + break; - case SC_CURSOR_UP: - // SysLog("Pressed Cursor Up"); - TCPSocketSendString(sock, "\x1B[A"); - break; + case SC_CURSOR_UP: + TCPSocketSendString(sock, "\x1B[A"); + break; - case SC_CURSOR_DOWN: - // SysLog("Pressed Cursor Down"); - TCPSocketSendString(sock, "\x1B[B"); - break; - default: - break; - } - break; - case 9: - switch (sc.u8[0]) - { - case SC_TAB: - TCPSocketSendString(sock, "\x09"); - break; - default: - break; - } - case CH_BACKSPACE: - // TCPSocketSendString(sock, "\x7F\x1B[D"); - // TCPSocketSendString(sock, "\x7F"); - // TCPSocketSendString(sock, "\x08\x20\x08"); - TCPSocketSendString(sock, "\x08"); - break; - case CH_ESC: - TCPSocketSendString(sock, "\x1B"); - break; - case CH_SHIFT_ESC: - force_disconnect = TRUE; - break; - // send buffer on enter - case '\n': - // SysLog(input_buffer); - temp = MStrPrint("%s\r\n", input_buffer); - TCPSocketSendString(sock, temp); + case SC_CURSOR_DOWN: + TCPSocketSendString(sock, "\x1B[B"); + break; + default: + break; + } + break; + case 9: + switch (sc.u8[0]) + { + case SC_TAB: + TCPSocketSendString(sock, "\x09"); + break; + default: + break; + } + case CH_BACKSPACE: + TCPSocketSendString(sock, "\x08"); + break; + case CH_ESC: + TCPSocketSendString(sock, "\x1B"); + break; + case CH_SHIFT_ESC: + force_disconnect = TRUE; + break; + // send buffer on enter + case '\n': + TCPSocketSendString(sock, "\r\n"); - input_len = 0; - Free(temp); - MemSet(input_buffer, 0, INPUT_BUF_SIZE); - DocClear; - - DocBottom(input_task->put_doc); - "\n$$RED$$$BK,1$Input$BK,0$$$BLACK$$:"; - break; - default: - if (key >= ' ' && key <= '~') { - // Handle regular keys - input_buffer[input_len++] = key; - // DocPrint(input_task->put_doc, "%c", key); - temp = MStrPrint("%s", input_buffer); - TCPSocketSendString(sock, temp); - - input_len = 0; - Free(temp); - MemSet(input_buffer, 0, INPUT_BUF_SIZE); - DocClear; - - DocBottom(input_task->put_doc); - "\n$$RED$$$BK,1$Input$BK,0$$$BLACK$$:"; - } - break; + break; + default: + if (key >= ' ' && key <= '~') { + // Handle regular keys + U8 input_buf[2]; + input_buf[0] = key; + input_buf[1] = '\0'; + TCPSocketSend(sock, input_buf, 1); + } + break; + } } } + catch + PutExcept; } U0 Telnet(U8 *host, U16 port=TELNET_PORT) { - I64 sock, bytes_received, input_len, sc; + I64 sock, bytes_received; U8 buffer[BUF_SIZE], *ptr; I64 window_width = 80; @@ -174,7 +148,7 @@ U0 Telnet(U8 *host, U16 port=TELNET_PORT) { DocClear; // probably should use word wrap? - // DocPrint(, "$$WW,1$$"); + DocPrint(, "$$WW,1$$"); DocCursor(OFF); sock = TelnetOpen(host, port); @@ -188,12 +162,13 @@ U0 Telnet(U8 *host, U16 port=TELNET_PORT) { LBts(&input_task->display_flags, DISPLAYf_SHOW); WinFocus(input_task); + input_task->text_attr = TRANSPARENT << 4 + WHITE; input_task->win_top = Fs->win_top + window_height + 1; input_task->win_bottom = Fs->win_top + 30; input_task->win_left = Fs->win_left; input_task->win_right = Fs->win_left+window_width - 1; - "$$BG,RED$$$$WHITE$$Connected$$FG$$$$BG$$\n"; + "$$BG,GREEN$$$$WHITE$$Connected$$FG$$$$BG$$\n"; while (!force_disconnect) { bytes_received = TCPSocketReceive(sock, buffer, BUF_SIZE - 1); @@ -599,10 +574,10 @@ U0 Telnet(U8 *host, U16 port=TELNET_PORT) { } // sock(CTCPSocket *)->timeout = 0; - while (TaskValidate(input_task) && !force_disconnect) - { - Refresh; - } + // while (TaskValidate(input_task) && !force_disconnect) + // { + // Refresh; + // } Kill(input_task); // sock(CTCPSocket *)->timeout = TCP_TIMEOUT;