e3c #include #include #include #include #include #include #include #include #include "io.h" #include "connect.h" #include "command.h" #include "message.h" #include "chat.h" static int cur_y; static char lbuf[500][160]; static int lcnt = 0; void init_scr(void) { _wscroll = 0; textbackground(BLUE); textcolor(WHITE); clrscr(); textbackground(LIGHTCYAN); gotoxy(1, 1); clreol(); gotoxy(1, 24); clreol(); textbackground(BLUE); cur_y = 1; gotoxy(1, 25); } void err_msg(char *s) { int old_x = wherex(), old_y = wherey(); MessageBeep(MB_ICONEXCLAMATION); textbackground(LIGHTCYAN); textcolor(BLACK); gotoxy(2, 24); clreol(); cprintf("ERROR: %s", s); _sleep(2); gotoxy(2, 24); clreol(); textbackground(BLUE); textcolor(WHITE); gotoxy(old_x, old_y); } void show_info(char *s) { int old_x = wherex(), old_y = wherey(); textbackground(LIGHTCYAN); textcolor(BLACK); gotoxy(2, 1); clreol(); cprintf(s); textbackground(BLUE); textcolor(WHITE); gotoxy(old_x, old_y); } static void put_line(char *s) { if (++cur_y > 23) { movetext(1, 3, 80, 23, 1, 2); gotoxy(1, 23); clreol(); cur_y--; } gotoxy(1, cur_y); cprintf("%s", s); /* gettext(1, cur_y, 80, cur_y, lbuf[lcnt++]); if (lcnt == 500) { memcpy(buf[100], buf[0], 400 * 160); lcnt = 400; } */ } void put_rcvd(char *text, int color) { int i, old_x = wherex(), old_y = wherey(); char *wtext, *tmp, *p1, *p2; wtext = new_string(text); textcolor(color); if (strchr(wtext, '\n') || (strlen(wtext) > 80)) { tmp = (char*)malloc(81); for (p1 = p2 = wtext; *p2; p2++) { if ((*p2 == '\n') || ((p2 - p1) == 80)) { if (*p2 == '\n') { *p2 = '\0'; strcpy(tmp, p1); } else { memset(tmp, 0, 81); strncpy(tmp, p1, p2 - p1); } put_line(tmp); p1 = (*p2 == '\0') ? p2 + 1 : p2; } } strcpy(tmp, p1); put_line(tmp); free(tmp); } else put_line(wtext); textcolor(WHITE); gotoxy(old_x, old_y); free(wtext); } static void get_input(void) { char c; static int count = 0; static char tmp[256]; c = getch(); switch (c) { case 8 : if (count) { count--; gotoxy(count + 1, 25); putch(' '); gotoxy(count + 1, 25); } break; case 9: if (! count) { if (priv_nick) { sprintf(tmp, "/msg %s ", priv_nick); gotoxy(count + 1, 25); cprintf(tmp); count += strlen(tmp); } } break; case 13: tmp[count] = 0; if (strlen(tmp)) { gotoxy(1, 25); clreol(); count = 0; cmd_parse(tmp); } break; default: gotoxy(count + 1, 25); if (count < 80) { putch(c); tmp[count++] = c; } } } void chk_keyboard(void) { char *s; if (kbhit()) get_input(); } void chk_sockets(void) { /* DOWNLOAD *dl; */ fd_set fds; struct timeval tv; int r, empty = 1; tv.tv_sec = 0; tv.tv_usec = 0; FD_ZERO(&fds); if (srv_sock != INVALID_SOCKET) { FD_SET(srv_sock, &fds); empty = 0; } /* for (dl = downloads; dl; dl = dl->next) { FD_SET(dl->socket, &fds); empty = 0; } */ if (empty) return; r = select(0, &fds, NULL, NULL, &tv); if (r == -1) err_msg(ws_strerror()); else if (r > 0) { if (FD_ISSET(srv_sock, &fds)) get_msg(); /* for (dl = downloads; dl; dl = dl->next) { if (FD_ISSET(dl->socket)) rcv_data(dl->socket); } */ } } . 0