/* * newdemo.c - A demo program using PDCurses. The program illustrate * the use of colours for text output. * * $Id: newdemo.c,v 1.40 2013/04/27 19:46:53 tom Exp $ */ #include <test.priv.h> #include <time.h> /* * The Australian map */ static CONST_MENUS char *AusMap[16] = { " A A ", " N.T. AAAAA AAAA ", " AAAAAAAAAAA AAAAAAAA ", " AAAAAAAAAAAAAAAAAAAAAAAAA Qld.", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAA ", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ", " AAAAAAAAAAAAAAAAAAAAAAAAAAAA ", " AAAAAAAAAAAAAAAAAAAAAAAAA N.S.W.", "W.A. AAAAAAAAA AAAAAA Vic.", " AAA S.A. AA", " A Tas.", "" }; /* * Funny messages */ #define NMESSAGES 6 static const char *messages[] = { "Hello from the Land Down Under", "The Land of crocs. and a big Red Rock", "Where the sunflower runs along the highways", "the dusty red roads lead one to loneliness", "Blue sky in the morning and", "freezing nights and twinkling stars", "" }; /* * Trap interrupt */ static void trap(int sig GCC_UNUSED) { endwin(); ExitProgram(EXIT_FAILURE); } /* * Wait for user */ static int WaitForUser(WINDOW *win) { time_t t; chtype key; nodelay(win, TRUE); t = time((time_t *) 0); while (1) { if ((int) (key = (chtype) wgetch(win)) != ERR) { if (key == 'q' || key == 'Q') return 1; else return 0; } if (time((time_t *) 0) - t > 5) return 0; } } static void set_colors(WINDOW *win, int pair, int foreground, int background) { if (has_colors()) { if (pair > COLOR_PAIRS) pair = COLOR_PAIRS; init_pair((short) pair, (short) foreground, (short) background); (void) wattrset(win, (int) COLOR_PAIR(pair)); } } static chtype use_colors(WINDOW *win, int pair, chtype attrs) { if (has_colors()) { if (pair > COLOR_PAIRS) pair = COLOR_PAIRS; attrs |= (chtype) COLOR_PAIR(pair); } (void) wattrset(win, (int) attrs); return attrs; } /* * Test sub windows */ static int SubWinTest(WINDOW *win) { int w, h, sw, sh, bx, by; WINDOW *swin1, *swin2, *swin3; getmaxyx(win, h, w); getbegyx(win, by, bx); sw = w / 3; sh = h / 3; if ((swin1 = subwin(win, sh, sw, by + 3, bx + 5)) == NULL) { return 1; } if ((swin2 = subwin(win, sh, sw, by + 4, bx + 8)) == NULL) { delwin(swin1); return 1; } if ((swin3 = subwin(win, sh, sw, by + 5, bx + 11)) == NULL) { delwin(swin1); delwin(swin2); return 1; } set_colors(swin1, 8, COLOR_RED, COLOR_BLUE); werase(swin1); MvWAddStr(swin1, 0, 3, "Sub-window 1"); wrefresh(swin1); set_colors(swin2, 9, COLOR_CYAN, COLOR_MAGENTA); werase(swin2); MvWAddStr(swin2, 0, 3, "Sub-window 2"); wrefresh(swin2); set_colors(swin3, 10, COLOR_YELLOW, COLOR_GREEN); werase(swin3); MvWAddStr(swin3, 0, 3, "Sub-window 3"); wrefresh(swin3); delwin(swin1); delwin(swin2); delwin(swin3); WaitForUser(win); return 0; } static int bounce(int n, int *dir, int len) { if (*dir > 0) ++n; else --n; if (n <= 1 || n >= len - 2) *dir = *dir ? 0 : 1; return n; } /* * Bouncing balls */ static int BouncingBalls(WINDOW *win) { int w, h; int x1, y1, xd1, yd1; int x2, y2, xd2, yd2; int x3, y3, xd3, yd3; getmaxyx(win, h, w); x1 = 2 + rand() % (w - 4); y1 = 2 + rand() % (h - 4); x2 = 2 + rand() % (w - 4); y2 = 2 + rand() % (h - 4); x3 = 2 + rand() % (w - 4); y3 = 2 + rand() % (h - 4); xd1 = 1; yd1 = 1; xd2 = 1; yd2 = 0; xd3 = 0; yd3 = 1; nodelay(win, TRUE); while (wgetch(win) == ERR) { x1 = bounce(x1, &xd1, w); y1 = bounce(y1, &yd1, h); x2 = bounce(x2, &xd2, w); y2 = bounce(y2, &yd2, h); x3 = bounce(x3, &xd3, w); y3 = bounce(y3, &yd3, h); set_colors(win, 11, COLOR_RED, COLOR_BLUE); MvWAddCh(win, y1, x1, 'O'); set_colors(win, 12, COLOR_BLUE, COLOR_RED); MvWAddCh(win, y2, x2, '*'); set_colors(win, 13, COLOR_YELLOW, COLOR_WHITE); MvWAddCh(win, y3, x3, '@'); wmove(win, 0, 0); wrefresh(win); delay_output(100); } return 0; } /* * Main driver */ int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { WINDOW *win; int w, x, y, i, j, k; char buffer[SIZEOF(messages) * 80]; const char *message; int width, height; chtype save[80]; chtype c; setlocale(LC_ALL, ""); CATCHALL(trap); initscr(); if (has_colors()) start_color(); cbreak(); curs_set(0); width = 48; height = 14; /* Create a drawing window */ win = newwin(height, width, (LINES - height) / 2, (COLS - width) / 2); if (win == NULL) { endwin(); ExitProgram(EXIT_FAILURE); } while (1) { set_colors(win, 1, COLOR_WHITE, COLOR_BLUE); werase(win); set_colors(win, 2, COLOR_RED, COLOR_RED); box(win, ACS_VLINE, ACS_HLINE); wrefresh(win); /* Do ramdom output of a character */ use_colors(win, 1, A_NORMAL); c = 'a'; for (i = 0; i < 5000; ++i) { x = rand() % (width - 2) + 1; y = rand() % (height - 2) + 1; MvWAddCh(win, y, x, c); wrefresh(win); nodelay(win, TRUE); if (wgetch(win) != ERR) break; if (i == 2000) { c = 'b'; set_colors(win, 3, COLOR_CYAN, COLOR_YELLOW); } } SubWinTest(win); /* Erase and draw green window */ set_colors(win, 4, COLOR_YELLOW, COLOR_GREEN); wbkgd(win, use_colors(win, 4, A_BOLD)); werase(win); wrefresh(win); /* Draw RED bounding box */ use_colors(win, 2, A_NORMAL); box(win, ' ', ' '); wrefresh(win); /* Display Australia map */ use_colors(win, 4, A_BOLD); i = 0; while (*AusMap[i]) { MvWAddStr(win, i + 1, 8, AusMap[i]); wrefresh(win); delay_output(50); ++i; } set_colors(win, 5, COLOR_BLUE, COLOR_WHITE); use_colors(win, 5, A_BLINK); MvWAddStr(win, height - 2, 6, " PDCurses 2.1 for DOS, OS/2 and Unix"); wrefresh(win); /* Draw running messages */ set_colors(win, 6, COLOR_YELLOW, COLOR_WHITE); message = messages[j = 0]; i = 1; w = width - 2; strcpy(buffer, message); while (j < NMESSAGES) { while ((int) strlen(buffer) < w) { strcat(buffer, " ... "); strcat(buffer, messages[++j % NMESSAGES]); } if (i < w) (void) mvwaddnstr(win, height / 2, w - i, buffer, i); else (void) mvwaddnstr(win, height / 2, 1, buffer, w); wrefresh(win); nodelay(win, TRUE); if (wgetch(win) != ERR) { flushinp(); break; } if (i++ >= w) { for (k = 0; (buffer[k] = buffer[k + 1]) != '\0'; k++) ; } delay_output(100); } j = 0; /* Draw running As across in RED */ set_colors(win, 7, COLOR_RED, COLOR_GREEN); memset(save, ' ', sizeof(save)); for (i = 2; i < width - 4; ++i) { k = (int) mvwinch(win, 4, i); if (k == ERR) break; save[j++] = c = (chtype) k; c &= A_CHARTEXT; MvWAddCh(win, 4, i, c); } wrefresh(win); /* Put a message up wait for a key */ i = height - 2; use_colors(win, 5, A_NORMAL); MvWAddStr(win, i, 5, " Type a key to continue or 'Q' to quit "); wrefresh(win); if (WaitForUser(win) == 1) break; j = 0; /* Restore the old line */ for (i = 2; i < width - 4; ++i) MvWAddCh(win, 4, i, save[j++]); wrefresh(win); BouncingBalls(win); /* Put a message up wait for a key */ i = height - 2; use_colors(win, 5, A_NORMAL); MvWAddStr(win, i, 5, " Type a key to continue or 'Q' to quit "); wrefresh(win); if (WaitForUser(win) == 1) break; } endwin(); ExitProgram(EXIT_SUCCESS); }
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
package | Folder | 0755 |
|
|
Makefile.in | File | 4.92 KB | 0644 |
|
README | File | 35.89 KB | 0644 |
|
aclocal.m4 | File | 108.83 KB | 0644 |
|
background.c | File | 6.84 KB | 0644 |
|
blue.c | File | 12.4 KB | 0644 |
|
bs.6 | File | 3.91 KB | 0644 |
|
bs.c | File | 29.95 KB | 0644 |
|
bulgarian-utf8.txt | File | 340 B | 0644 |
|
cardfile.c | File | 13.26 KB | 0644 |
|
cardfile.dat | File | 394 B | 0644 |
|
chgat.c | File | 9.03 KB | 0644 |
|
clip_printw.c | File | 9.1 KB | 0644 |
|
color_name.h | File | 3.32 KB | 0644 |
|
color_set.c | File | 3.25 KB | 0644 |
|
configure | File | 449.42 KB | 0644 |
|
configure.in | File | 9.57 KB | 0644 |
|
demo_altkeys.c | File | 4.77 KB | 0644 |
|
demo_defkey.c | File | 7.4 KB | 0644 |
|
demo_forms.c | File | 13.01 KB | 0644 |
|
demo_keyok.c | File | 3.24 KB | 0644 |
|
demo_menus.c | File | 18.74 KB | 0644 |
|
demo_panels.c | File | 16.89 KB | 0644 |
|
demo_termcap.c | File | 10.09 KB | 0644 |
|
demo_terminfo.c | File | 10.05 KB | 0644 |
|
ditto.c | File | 11.04 KB | 0644 |
|
dots.c | File | 4.52 KB | 0644 |
|
dots_mvcur.c | File | 4.66 KB | 0644 |
|
echochar.c | File | 4.35 KB | 0644 |
|
edit_field.c | File | 11.21 KB | 0644 |
|
edit_field.h | File | 2.57 KB | 0644 |
|
filter.c | File | 4.97 KB | 0644 |
|
firework.c | File | 5.53 KB | 0644 |
|
firstlast.c | File | 3.72 KB | 0644 |
|
foldkeys.c | File | 7.44 KB | 0644 |
|
gdc.6 | File | 3.03 KB | 0644 |
|
gdc.c | File | 8.74 KB | 0644 |
|
hanoi.c | File | 8.58 KB | 0644 |
|
hashtest.c | File | 6.58 KB | 0644 |
|
inch_wide.c | File | 7.21 KB | 0644 |
|
inchs.c | File | 7.15 KB | 0644 |
|
ins_wide.c | File | 12.25 KB | 0644 |
|
insdelln.c | File | 9.16 KB | 0644 |
|
inserts.c | File | 10.62 KB | 0644 |
|
install-sh | File | 6.96 KB | 0644 |
|
key_names.c | File | 3.22 KB | 0644 |
|
keynames.c | File | 3.07 KB | 0644 |
|
knight.c | File | 18.54 KB | 0644 |
|
linedata.h | File | 3.16 KB | 0644 |
|
linux-color.dat | File | 2.56 KB | 0644 |
|
listused.sh | File | 5.46 KB | 0644 |
|
lrtest.c | File | 5.24 KB | 0644 |
|
make-tar.sh | File | 4.8 KB | 0644 |
|
mk-test.awk | File | 4.42 KB | 0644 |
|
modules | File | 5.07 KB | 0644 |
|
movewindow.c | File | 16.44 KB | 0644 |
|
ncurses.c | File | 154.98 KB | 0644 |
|
ncurses_tst.hin | File | 2.88 KB | 0644 |
|
newdemo.c | File | 7.38 KB | 0644 |
|
programs | File | 5.28 KB | 0644 |
|
railroad.c | File | 5.66 KB | 0644 |
|
rain.c | File | 8.44 KB | 0644 |
|
redraw.c | File | 4.66 KB | 0644 |
|
savescreen.c | File | 7.49 KB | 0644 |
|
savescreen.sh | File | 2.66 KB | 0644 |
|
tclock.c | File | 5.26 KB | 0644 |
|
test.priv.h | File | 19.55 KB | 0644 |
|
test_add_wchstr.c | File | 14.08 KB | 0644 |
|
test_addchstr.c | File | 12.14 KB | 0644 |
|
test_addstr.c | File | 10.3 KB | 0644 |
|
test_addwstr.c | File | 12.37 KB | 0644 |
|
test_arrays.c | File | 3.83 KB | 0644 |
|
test_get_wstr.c | File | 8.94 KB | 0644 |
|
test_getstr.c | File | 8.88 KB | 0644 |
|
test_instr.c | File | 6.49 KB | 0644 |
|
test_inwstr.c | File | 6.69 KB | 0644 |
|
test_opaque.c | File | 10.42 KB | 0644 |
|
test_vid_puts.c | File | 3.97 KB | 0644 |
|
test_vidputs.c | File | 3.92 KB | 0644 |
|
testaddch.c | File | 3.46 KB | 0644 |
|
testcurs.c | File | 16.69 KB | 0644 |
|
testscanw.c | File | 2.88 KB | 0644 |
|
tracemunch | File | 5.01 KB | 0644 |
|
view.c | File | 13.84 KB | 0644 |
|
widechars-utf8.txt | File | 389 B | 0644 |
|
widechars.h | File | 3.19 KB | 0644 |
|
worm.c | File | 14.01 KB | 0644 |
|
xmas.c | File | 33.47 KB | 0644 |
|
xterm-16color.dat | File | 2.99 KB | 0644 |
|
xterm-256color.dat | File | 6.88 KB | 0644 |
|
xterm-88color.dat | File | 4.11 KB | 0644 |
|