#include #include #include #include #include #include #include #include #include #define COLUMNS 80 #define GREETING " -------{========[OOOOOOOO BSD BSD BSD BSD OOOOOOO]========}-------" #define SPEED (5 * 10000) #define DEF_MESSAGE "OpenBSD 4.7, NetBSD 5.0.1, FreeBSD 8.0, DragonflyBSD 2.X, Darwin 10.9, to customize your own message here: echo \"message \" | nc -u 127.0.0.1 9999 from localhost!!!!! " int main(void) { WINDOW *win; int i, len; int line, col; int so; int on = 1; int scroll = 79; int slen = sizeof(struct sockaddr_in); int flags; char buf[512]; char *message = buf; char *pm = message; struct sockaddr_in sin; memset(buf, 0, sizeof(buf)); strlcpy(buf, DEF_MESSAGE, sizeof(buf)); so = socket(AF_INET, SOCK_DGRAM, 0); if (so < 0) { perror("socket"); exit(1); } memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_port = htons(9999); sin.sin_addr.s_addr = INADDR_ANY; if (bind(so, (struct sockaddr*)&sin, sizeof(sin)) < 0) { perror("bind"); exit(1); } flags = fcntl(so, F_GETFL); flags |= O_NONBLOCK; fcntl(so, F_SETFL, flags); win = initscr(); cbreak(); noecho(); box(win, '*', '*'); refresh(); col = 3; for (;;) { for (i = 1; i < (LINES - 1); i++) { if (i > 1) { wmove(win, i - 1, col); wprintw(win, " "); } wmove(win, i, col); wprintw(win, GREETING); wmove(win, LINES - 1, scroll--); if (scroll == 0) { scroll = 1; message++; if (message >= &pm[strlen(buf)]) { len = recvfrom(so, buf, sizeof(buf), 0, (struct sockaddr *)&sin, &slen); if (len > 0) buf[len - 1] = '\0'; #if 0 else buf[0] = '\0'; #endif message = pm = buf; scroll = 79; wmove(win, LINES - 1, scroll); } } wprintw(win, message); wmove(win, 0, 0); refresh(); usleep(SPEED); } for (i-- ;i > 1; i--) { wmove(win, i, col); wprintw(win, " "); wmove(win, i - 1, col); wprintw(win, GREETING); wmove(win, LINES - 1, scroll--); if (scroll == 0) { scroll = 1; message++; if (message >= &pm[strlen(buf)]) { len = recvfrom(so, buf, sizeof(buf), 0, (struct sockaddr *)&sin, &slen); if (len > 0) buf[len - 1] = '\0'; message = pm = buf; scroll = 79; wmove(win, LINES - 1, scroll); } } wprintw(win, message); wmove(win, 0, 0); refresh(); usleep(SPEED); } } endwin(); }