Drop -Werror
[pmc.git] / mudtest.c
blob184a0390e64bafc953daac75b6dd5cb291f2e04f
1 #include <stdio.h>
2 #include <sys/types.h>
3 #include <sys/time.h>
4 #include <sys/select.h>
5 #include <unistd.h>
6 #include <stdlib.h>
7 #include <errno.h>
8 #include <string.h>
9 #include <ncurses.h>
10 #include <signal.h>
12 #include <cbuf.h>
13 #include <mudio.h>
14 #include <screen.h>
15 #include <debug.h>
18 static int need_resize = 0;
20 static void
21 sig_resize(int sig)
23 need_resize = 1;
26 void
27 do_refresh(void *win, mud_conn_t *conn)
29 if (cb_length(conn->input_buffer)) {
30 pmc_buffer(win, conn->input_buffer, cb_length(conn->input_buffer));
31 cb_reset(conn->input_buffer);
33 pmc_update(win);
34 doupdate();
37 int
38 main(int argc, const char **argv)
40 void *win;
41 fd_set rfds;
42 mud_conn_t *conn;
43 char buf[80];
44 char rtt[20];
45 int ret;
47 //debug_open();
49 if (argc < 3) {
50 printf("usage: %s host port %d\n", argv[0], COLOR_PAIRS);
51 return 1;
54 if (argc == 3) {
55 conn = mud_create("name", argv[1], atoi(argv[2]), 4096, 4096);
56 if (!conn) {
57 printf("Failed to connect to %s:%s: %s\n",
58 argv[1], argv[2], strerror(errno));
59 return 1;
61 } else if (argc == 4) {
62 conn = mud_connect("name", argv[1], atoi(argv[2]), 4096, 4096, atoi(argv[3]));
63 if (!conn) {
64 printf("Failed to reconnect to %s:%s: %s\n",
65 argv[1], argv[2], strerror(errno));
66 return 1;
70 signal(SIGWINCH, sig_resize);
71 signal(SIGPIPE, SIG_IGN);
73 win = pmc_init();
75 snprintf(buf, sizeof(buf), " %s:%s - pmc", argv[1], argv[2]);
76 pmc_write_bar(win, BAR_TOP, buf);
78 while (1) {
79 FD_ZERO(&rfds);
80 FD_SET(0, &rfds);
81 FD_SET(conn->sockfd, &rfds);
83 do_refresh(win,conn);
85 ret = select(conn->sockfd+1, &rfds, 0, 0, NULL);
86 if (need_resize == 1) {
87 pmc_resize(win);
88 need_resize = 0;
89 continue;
91 if (FD_ISSET(0, &rfds)) {
93 ret = pmc_listen(win);
94 if (ret == 1) {
95 pmc_copyout(win, conn->output_buffer);
96 if (!strcmp(conn->output_buffer, "/log\n")) {
97 FILE *f;
98 f = fopen("foo.log", "w+");
99 fprintf(f, "%s\n", pmc_get_scrollback(win));
100 cb_reset(conn->output_buffer);
101 pmc_write_bar(win, BAR_BOTTOM, "Dumped Log");
102 fclose(f);
104 if (!strcmp(conn->output_buffer, "/restart\n")) {
105 char fdbuf[10];
106 pmc_write_bar(win, BAR_BOTTOM, " RESTARTING ");
107 do_refresh(win,conn);
108 sleep(1);
110 endwin();
111 snprintf(fdbuf, sizeof(fdbuf), "%d", conn->sockfd);
112 execlp(argv[0], argv[0], argv[1], argv[2],
113 fdbuf, NULL);
118 if (mud_io(conn) < 0)
119 break;
121 snprintf(rtt, sizeof(rtt), " RTT %5d", conn->rtt);
122 pmc_write_bar(win, BAR_BOTTOM, rtt);
126 pmc_write_bar(win, BAR_BOTTOM, "Press any key to exit");
127 do_refresh(win,conn);
129 getch();
131 endwin();
133 return 0;