| 1 | /*
|
|---|
| 2 | * $Id: rain.c,v 1.20 2002/06/29 23:32:18 tom Exp $
|
|---|
| 3 | */
|
|---|
| 4 | #include <test.priv.h>
|
|---|
| 5 |
|
|---|
| 6 | /* rain 11/3/1980 EPS/CITHEP */
|
|---|
| 7 |
|
|---|
| 8 | static float ranf(void);
|
|---|
| 9 | static void onsig(int sig);
|
|---|
| 10 |
|
|---|
| 11 | static int
|
|---|
| 12 | next_j(int j)
|
|---|
| 13 | {
|
|---|
| 14 | if (j == 0)
|
|---|
| 15 | j = 4;
|
|---|
| 16 | else
|
|---|
| 17 | --j;
|
|---|
| 18 | if (has_colors()) {
|
|---|
| 19 | int z = (int) (3 * ranf());
|
|---|
| 20 | chtype color = COLOR_PAIR(z);
|
|---|
| 21 | if (z)
|
|---|
| 22 | color |= A_BOLD;
|
|---|
| 23 | attrset(color);
|
|---|
| 24 | }
|
|---|
| 25 | return j;
|
|---|
| 26 | }
|
|---|
| 27 |
|
|---|
| 28 | int
|
|---|
| 29 | main(
|
|---|
| 30 | int argc GCC_UNUSED,
|
|---|
| 31 | char *argv[]GCC_UNUSED)
|
|---|
| 32 | {
|
|---|
| 33 | int x, y, j;
|
|---|
| 34 | static int xpos[5], ypos[5];
|
|---|
| 35 | float r;
|
|---|
| 36 | float c;
|
|---|
| 37 |
|
|---|
| 38 | setlocale(LC_ALL, "");
|
|---|
| 39 |
|
|---|
| 40 | for (j = SIGHUP; j <= SIGTERM; j++)
|
|---|
| 41 | if (signal(j, SIG_IGN) != SIG_IGN)
|
|---|
| 42 | signal(j, onsig);
|
|---|
| 43 |
|
|---|
| 44 | initscr();
|
|---|
| 45 | if (has_colors()) {
|
|---|
| 46 | int bg = COLOR_BLACK;
|
|---|
| 47 | start_color();
|
|---|
| 48 | #if HAVE_USE_DEFAULT_COLORS
|
|---|
| 49 | if (use_default_colors() == OK)
|
|---|
| 50 | bg = -1;
|
|---|
| 51 | #endif
|
|---|
| 52 | init_pair(1, COLOR_BLUE, bg);
|
|---|
| 53 | init_pair(2, COLOR_CYAN, bg);
|
|---|
| 54 | }
|
|---|
| 55 | nl();
|
|---|
| 56 | noecho();
|
|---|
| 57 | curs_set(0);
|
|---|
| 58 | timeout(0);
|
|---|
| 59 |
|
|---|
| 60 | r = (float) (LINES - 4);
|
|---|
| 61 | c = (float) (COLS - 4);
|
|---|
| 62 | for (j = 5; --j >= 0;) {
|
|---|
| 63 | xpos[j] = (int) (c * ranf()) + 2;
|
|---|
| 64 | ypos[j] = (int) (r * ranf()) + 2;
|
|---|
| 65 | }
|
|---|
| 66 |
|
|---|
| 67 | for (j = 0;;) {
|
|---|
| 68 | x = (int) (c * ranf()) + 2;
|
|---|
| 69 | y = (int) (r * ranf()) + 2;
|
|---|
| 70 |
|
|---|
| 71 | mvaddch(y, x, '.');
|
|---|
| 72 |
|
|---|
| 73 | mvaddch(ypos[j], xpos[j], 'o');
|
|---|
| 74 |
|
|---|
| 75 | j = next_j(j);
|
|---|
| 76 | mvaddch(ypos[j], xpos[j], 'O');
|
|---|
| 77 |
|
|---|
| 78 | j = next_j(j);
|
|---|
| 79 | mvaddch(ypos[j] - 1, xpos[j], '-');
|
|---|
| 80 | mvaddstr(ypos[j], xpos[j] - 1, "|.|");
|
|---|
| 81 | mvaddch(ypos[j] + 1, xpos[j], '-');
|
|---|
| 82 |
|
|---|
| 83 | j = next_j(j);
|
|---|
| 84 | mvaddch(ypos[j] - 2, xpos[j], '-');
|
|---|
| 85 | mvaddstr(ypos[j] - 1, xpos[j] - 1, "/ \\");
|
|---|
| 86 | mvaddstr(ypos[j], xpos[j] - 2, "| O |");
|
|---|
| 87 | mvaddstr(ypos[j] + 1, xpos[j] - 1, "\\ /");
|
|---|
| 88 | mvaddch(ypos[j] + 2, xpos[j], '-');
|
|---|
| 89 |
|
|---|
| 90 | j = next_j(j);
|
|---|
| 91 | mvaddch(ypos[j] - 2, xpos[j], ' ');
|
|---|
| 92 | mvaddstr(ypos[j] - 1, xpos[j] - 1, " ");
|
|---|
| 93 | mvaddstr(ypos[j], xpos[j] - 2, " ");
|
|---|
| 94 | mvaddstr(ypos[j] + 1, xpos[j] - 1, " ");
|
|---|
| 95 | mvaddch(ypos[j] + 2, xpos[j], ' ');
|
|---|
| 96 |
|
|---|
| 97 | xpos[j] = x;
|
|---|
| 98 | ypos[j] = y;
|
|---|
| 99 |
|
|---|
| 100 | switch (getch()) {
|
|---|
| 101 | case ('q'):
|
|---|
| 102 | case ('Q'):
|
|---|
| 103 | curs_set(1);
|
|---|
| 104 | endwin();
|
|---|
| 105 | ExitProgram(EXIT_SUCCESS);
|
|---|
| 106 | case 's':
|
|---|
| 107 | nodelay(stdscr, FALSE);
|
|---|
| 108 | break;
|
|---|
| 109 | case ' ':
|
|---|
| 110 | nodelay(stdscr, TRUE);
|
|---|
| 111 | break;
|
|---|
| 112 | #ifdef KEY_RESIZE
|
|---|
| 113 | case (KEY_RESIZE):
|
|---|
| 114 | r = (float) (LINES - 4);
|
|---|
| 115 | c = (float) (COLS - 4);
|
|---|
| 116 | break;
|
|---|
| 117 | #endif
|
|---|
| 118 | }
|
|---|
| 119 | napms(50);
|
|---|
| 120 | }
|
|---|
| 121 | }
|
|---|
| 122 |
|
|---|
| 123 | static void
|
|---|
| 124 | onsig(int n GCC_UNUSED)
|
|---|
| 125 | {
|
|---|
| 126 | curs_set(1);
|
|---|
| 127 | endwin();
|
|---|
| 128 | ExitProgram(EXIT_FAILURE);
|
|---|
| 129 | }
|
|---|
| 130 |
|
|---|
| 131 | static float
|
|---|
| 132 | ranf(void)
|
|---|
| 133 | {
|
|---|
| 134 | long r = (rand() & 077777);
|
|---|
| 135 | return ((float) r / 32768.);
|
|---|
| 136 | }
|
|---|