/* blocking call for a character */ int conio_getch() { int key = -1; uint8 b; switch (conio_ttymode) { case CONIO_TTY_PVR: #ifdef GFX while ((key = kbd_get_key()) == -1) { thd_pass(); } #endif break; case CONIO_TTY_SERIAL: { while ((key = scif_read()) == -1) { thd_pass(); } if (key == 3) arch_exit(); break; } case CONIO_TTY_STDIO: { int i; i = fs_read(conio_serial_fd, &b, 1); if (i <= 0) return -1; key = b; if (key == '\n') return conio_getch(); break; } } return key; }
void do_client() { char obuffer[1024] = {0}, ibuffer[1024] = {0}; int obuffer_offset = 0, stop = 0; fflush (stdout); /* get anything out of the buffer */ conio_init(); show_buffer (obuffer, obuffer_offset); do { if (net_query (chan)) { int col = 10; int x = net_receive (chan, ibuffer, 1024, NULL); if (x<0) strcpy (ibuffer, "!!! (local) error reading packet"); else ibuffer[x] = 0; switch (ibuffer[0]) { case '*': col = 9; break; case '+': case '-': col = 11; break; case '!': col = 12; break; } write_to_window (ibuffer, col); show_buffer (obuffer, obuffer_offset); if (!strcmp (ibuffer, "*** go away")) stop = 1; if (!strcmp (ibuffer, "*** server shutting down")) stop = 1; } if (conio_kbhit()) { char ch = conio_getch(); switch (ch) { case 7: case 8: if (obuffer_offset) obuffer[--obuffer_offset] = 0; show_buffer (obuffer, obuffer_offset); break; case 13: net_send (chan, obuffer, strlen (obuffer)); obuffer[obuffer_offset = 0] = 0; show_buffer (obuffer, obuffer_offset); break; default: obuffer[obuffer_offset] = ch; obuffer[++obuffer_offset] = 0; show_buffer (obuffer, obuffer_offset); break; } } } while (!stop); erase_buffer(); conio_exit(); }
void init() { char temp[1024], nick[1024], addr[1024], newaddr[NET_MAX_ADDRESS_LENGTH]; NET_DRIVERLIST drv; drv = net_driverlist_create(); net_driverlist_clear (drv); net_driverlist_add (drv, netdriver); if (!net_initdrivers (drv)) { printf("Error initialising driver.\n"); exit (1); } printf ("Enter target address: "); fgets (addr, 1024, stdin); while (strchr(addr,'\n')) *strchr(addr,'\n')=0; printf ("Enter nickname: "); fgets (nick, 10, stdin); while (strchr(nick,'\n')) *strchr(nick,'\n')=0; if (!(chan = net_openchannel (netdriver, NULL))) { printf ("Unable to open channel.\n"); exit (2); } printf ("Connecting to %s...\n", addr); net_assigntarget (chan, addr); sprintf (temp, "%c%s", CHAT_MAGIC, nick); net_send (chan, temp, strlen (temp)); while ((!net_query (chan))/* && !conio_kbhit()*/); if (0/*conio_kbhit()*/) { conio_getch(); printf ("Aborted.\n"); exit (3); } { int x = net_receive (chan, temp, 1024, newaddr); if (x == -1) { printf ("Receive error.\n"); exit (5); } temp[x] = 0; } if (strcmp (temp, "OK")) { printf ("Connection refused.\n"); exit (4); } printf ("Connection accepted, redirecting... "); fflush (stdout); net_assigntarget (chan, newaddr); printf ("done.\n"); }