mirror of
https://github.com/Zeal-Operating-System/ZealOS.git
synced 2025-06-07 00:04:48 +00:00
fix
This commit is contained in:
parent
b70946f3df
commit
35c6354316
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user