mirror of
https://github.com/Zeal-Operating-System/ZealOS.git
synced 2025-06-07 08:14:48 +00:00
interactivity
This commit is contained in:
parent
447bbcd16d
commit
81bf25c5ba
@ -1,4 +1,4 @@
|
|||||||
// Telnet client for ZealOS by y4my4m 2023
|
// Telnet client for ZealOS by y4my4m
|
||||||
// Public Domain
|
// Public Domain
|
||||||
|
|
||||||
#define TELNET_PORT 23
|
#define TELNET_PORT 23
|
||||||
@ -20,9 +20,35 @@ I64 TelnetOpen(U8 *host, U16 port) {
|
|||||||
return sock;
|
return sock;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// U0 GetColorString(I64 color_code, U8 *buf) {
|
||||||
|
// static U8 *color_strings[] = {
|
||||||
|
// "$$BLACK$$", "$$RED$$", "$$GREEN$$", "$$YELLOW$$",
|
||||||
|
// "$$BLUE$$", "$$MAGENTA$$", "$$CYAN$$", "$$WHITE$$"
|
||||||
|
// };
|
||||||
|
|
||||||
|
// if (color_code >= 0 && color_code < 8) {
|
||||||
|
// StrCopy(buf, color_strings[color_code]);
|
||||||
|
// } else {
|
||||||
|
// StrCopy(buf, ""); // Default to empty string if an invalid color code is given
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
U0 GetColorString(I64 color_code, U8 *buf) {
|
||||||
|
switch (color_code) {
|
||||||
|
case 0: StrCopy(buf, "$$BLACK$$"); break;
|
||||||
|
case 1: StrCopy(buf, "$$RED$$"); break;
|
||||||
|
case 2: StrCopy(buf, "$$GREEN$$"); break;
|
||||||
|
case 3: StrCopy(buf, "$$YELLOW$$"); break;
|
||||||
|
case 4: StrCopy(buf, "$$BLUE$$"); break;
|
||||||
|
case 5: StrCopy(buf, "$$MAGENTA$$"); break;
|
||||||
|
case 6: StrCopy(buf, "$$CYAN$$"); break;
|
||||||
|
case 7: StrCopy(buf, "$$WHITE$$"); break;
|
||||||
|
default: StrCopy(buf, ""); break; // Default to empty string if an invalid color code is given
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
U0 TelnetClient(U8 *host, U16 port) {
|
U0 TelnetClient(U8 *host, U16 port) {
|
||||||
I64 sock, bytes_received;
|
I64 sock, bytes_received, input_len;
|
||||||
U8 buffer[BUF_SIZE], input_buffer[BUF_SIZE];
|
U8 buffer[BUF_SIZE], input_buffer[BUF_SIZE], *ptr, ch;
|
||||||
|
|
||||||
sock = TelnetOpen(host, port);
|
sock = TelnetOpen(host, port);
|
||||||
if (sock <= 0) {
|
if (sock <= 0) {
|
||||||
@ -35,14 +61,55 @@ U0 TelnetClient(U8 *host, U16 port) {
|
|||||||
bytes_received = TCPSocketReceive(sock, buffer, BUF_SIZE - 1);
|
bytes_received = TCPSocketReceive(sock, buffer, BUF_SIZE - 1);
|
||||||
if (bytes_received > 0) {
|
if (bytes_received > 0) {
|
||||||
buffer[bytes_received] = '\0';
|
buffer[bytes_received] = '\0';
|
||||||
"Received: %s\n", buffer;
|
|
||||||
|
// Basic Telnet protocol parser: Ignore negotiation sequences
|
||||||
|
ptr = buffer;
|
||||||
|
while (*ptr) {
|
||||||
|
if (*ptr == 0xFF) {
|
||||||
|
// Skip Telnet negotiation sequence (3 bytes)
|
||||||
|
ptr += 3;
|
||||||
|
} else if (*ptr == 0x1B) {
|
||||||
|
// ANSI escape sequence
|
||||||
|
ptr++;
|
||||||
|
if (*ptr == '[') {
|
||||||
|
ptr++;
|
||||||
|
I64 ansi_code = 0;
|
||||||
|
while (*ptr >= '0' && *ptr <= '9') {
|
||||||
|
ansi_code = ansi_code * 10 + (*ptr - '0');
|
||||||
|
ptr++;
|
||||||
|
}
|
||||||
|
// Convert ANSI color code to ZealOS color
|
||||||
|
I64 templeos_color = 7; // Default color
|
||||||
|
if (ansi_code >= 30 && ansi_code <= 37) {
|
||||||
|
templeos_color = ansi_code - 30;
|
||||||
|
}
|
||||||
|
// GrColor(templeos_color);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Print the received character
|
||||||
|
"%c", *ptr;
|
||||||
|
ptr++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"\n";
|
||||||
|
|
||||||
// Prompt user for input and send it to the remote host
|
// Prompt user for input and send it to the remote host
|
||||||
"Enter your choice: ";
|
"Enter your choice: ";
|
||||||
StrGet(input_buffer, BUF_SIZE - 1);
|
|
||||||
input_buffer[StrLen(input_buffer)] = '\r';
|
input_len = 0;
|
||||||
input_buffer[StrLen(input_buffer) + 1] = '\n';
|
while (1) {
|
||||||
TCPSocketSend(sock, input_buffer, StrLen(input_buffer) + 2);
|
ch = CharGet;
|
||||||
|
if (ch == '\r' || ch == '\n') {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
input_buffer[input_len++] = ch;
|
||||||
|
}
|
||||||
|
input_buffer[input_len] = '\0';
|
||||||
|
|
||||||
|
"Sending: %s\n", input_buffer; // Debugging line
|
||||||
|
input_buffer[input_len++] = '\r';
|
||||||
|
input_buffer[input_len++] = '\n';
|
||||||
|
TCPSocketSend(sock, input_buffer, input_len);
|
||||||
} else {
|
} else {
|
||||||
"Error: Connection closed by the remote host.\n";
|
"Error: Connection closed by the remote host.\n";
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user