This commit is contained in:
y4my4my4m 2023-05-12 03:25:01 +09:00
parent b70946f3df
commit 35c6354316

View File

@ -29,7 +29,7 @@ I64 TelnetOpen(U8 *host, U16 port) {
} }
sock = TCPConnectionCreate(host, 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) { if (sock <= 0) {
PrintErr("Failed to connect to %s:%d\n", host, port); PrintErr("Failed to connect to %s:%d\n", host, port);
return sock; return sock;
@ -42,110 +42,84 @@ I64 TelnetOpen(U8 *host, U16 port) {
U0 InputTask(U0 *args) { U0 InputTask(U0 *args) {
I64 sock = *args; I64 sock = *args;
I64 sc;
DocTermNew; DocTermNew;
DocPrint(, "$$WW,1$$"); DocPrint(, "$$WW,1$$");
// WinBorder(OFF); // 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); 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 // https://theasciicode.com.ar/ascii-control-characters/escape-ascii-code-27.html
input_len = 0; try
while (1) { {
U8 key = KeyGet(&sc); while (!force_disconnect) {
switch (key) U8 key = KeyGet(&sc);
{ switch (key)
case 0: {
switch (sc.u8[0]) case 0:
{ switch (sc.u8[0])
case SC_CURSOR_LEFT: {
// SysLog("Pressed Cursor Left"); case SC_CURSOR_LEFT:
TCPSocketSendString(sock, "\x1B[D"); TCPSocketSendString(sock, "\x1B[D");
break; break;
case SC_CURSOR_RIGHT: case SC_CURSOR_RIGHT:
// SysLog("Pressed Cursor Right"); TCPSocketSendString(sock, "\x1B[C");
TCPSocketSendString(sock, "\x1B[C"); break;
break;
case SC_CURSOR_UP: case SC_CURSOR_UP:
// SysLog("Pressed Cursor Up"); TCPSocketSendString(sock, "\x1B[A");
TCPSocketSendString(sock, "\x1B[A"); break;
break;
case SC_CURSOR_DOWN: case SC_CURSOR_DOWN:
// SysLog("Pressed Cursor Down"); TCPSocketSendString(sock, "\x1B[B");
TCPSocketSendString(sock, "\x1B[B"); break;
break; default:
default: break;
break; }
} break;
break; case 9:
case 9: switch (sc.u8[0])
switch (sc.u8[0]) {
{ case SC_TAB:
case SC_TAB: TCPSocketSendString(sock, "\x09");
TCPSocketSendString(sock, "\x09"); break;
break; default:
default: break;
break; }
} case CH_BACKSPACE:
case CH_BACKSPACE: TCPSocketSendString(sock, "\x08");
// TCPSocketSendString(sock, "\x7F\x1B[D"); break;
// TCPSocketSendString(sock, "\x7F"); case CH_ESC:
// TCPSocketSendString(sock, "\x08\x20\x08"); TCPSocketSendString(sock, "\x1B");
TCPSocketSendString(sock, "\x08"); break;
break; case CH_SHIFT_ESC:
case CH_ESC: force_disconnect = TRUE;
TCPSocketSendString(sock, "\x1B"); break;
break; // send buffer on enter
case CH_SHIFT_ESC: case '\n':
force_disconnect = TRUE; TCPSocketSendString(sock, "\r\n");
break;
// send buffer on enter
case '\n':
// SysLog(input_buffer);
temp = MStrPrint("%s\r\n", input_buffer);
TCPSocketSendString(sock, temp);
input_len = 0; break;
Free(temp); default:
MemSet(input_buffer, 0, INPUT_BUF_SIZE); if (key >= ' ' && key <= '~') {
DocClear; // Handle regular keys
U8 input_buf[2];
DocBottom(input_task->put_doc); input_buf[0] = key;
"\n$$RED$$$BK,1$Input$BK,0$$$BLACK$$:"; input_buf[1] = '\0';
break; TCPSocketSend(sock, input_buf, 1);
default: }
if (key >= ' ' && key <= '~') { break;
// 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;
} }
} }
catch
PutExcept;
} }
U0 Telnet(U8 *host, U16 port=TELNET_PORT) { U0 Telnet(U8 *host, U16 port=TELNET_PORT) {
I64 sock, bytes_received, input_len, sc; I64 sock, bytes_received;
U8 buffer[BUF_SIZE], *ptr; U8 buffer[BUF_SIZE], *ptr;
I64 window_width = 80; I64 window_width = 80;
@ -174,7 +148,7 @@ U0 Telnet(U8 *host, U16 port=TELNET_PORT) {
DocClear; DocClear;
// probably should use word wrap? // probably should use word wrap?
// DocPrint(, "$$WW,1$$"); DocPrint(, "$$WW,1$$");
DocCursor(OFF); DocCursor(OFF);
sock = TelnetOpen(host, port); sock = TelnetOpen(host, port);
@ -188,12 +162,13 @@ U0 Telnet(U8 *host, U16 port=TELNET_PORT) {
LBts(&input_task->display_flags, DISPLAYf_SHOW); LBts(&input_task->display_flags, DISPLAYf_SHOW);
WinFocus(input_task); WinFocus(input_task);
input_task->text_attr = TRANSPARENT << 4 + WHITE;
input_task->win_top = Fs->win_top + window_height + 1; input_task->win_top = Fs->win_top + window_height + 1;
input_task->win_bottom = Fs->win_top + 30; input_task->win_bottom = Fs->win_top + 30;
input_task->win_left = Fs->win_left; input_task->win_left = Fs->win_left;
input_task->win_right = Fs->win_left+window_width - 1; 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) { while (!force_disconnect) {
bytes_received = TCPSocketReceive(sock, buffer, BUF_SIZE - 1); bytes_received = TCPSocketReceive(sock, buffer, BUF_SIZE - 1);
@ -599,10 +574,10 @@ U0 Telnet(U8 *host, U16 port=TELNET_PORT) {
} }
// sock(CTCPSocket *)->timeout = 0; // sock(CTCPSocket *)->timeout = 0;
while (TaskValidate(input_task) && !force_disconnect) // while (TaskValidate(input_task) && !force_disconnect)
{ // {
Refresh; // Refresh;
} // }
Kill(input_task); Kill(input_task);
// sock(CTCPSocket *)->timeout = TCP_TIMEOUT; // sock(CTCPSocket *)->timeout = TCP_TIMEOUT;