[BACK]Return to rain.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / games / rain

Annotation of src/games/rain/rain.c, Revision 1.18

1.18    ! rpaulo      1: /*     $NetBSD: rain.c,v 1.17 2004/05/02 21:31:23 christos Exp $       */
1.5       cgd         2:
1.1       cgd         3: /*
1.5       cgd         4:  * Copyright (c) 1980, 1993
                      5:  *     The Regents of the University of California.  All rights reserved.
1.1       cgd         6:  *
                      7:  * Redistribution and use in source and binary forms, with or without
                      8:  * modification, are permitted provided that the following conditions
                      9:  * are met:
                     10:  * 1. Redistributions of source code must retain the above copyright
                     11:  *    notice, this list of conditions and the following disclaimer.
                     12:  * 2. Redistributions in binary form must reproduce the above copyright
                     13:  *    notice, this list of conditions and the following disclaimer in the
                     14:  *    documentation and/or other materials provided with the distribution.
1.14      agc        15:  * 3. Neither the name of the University nor the names of its contributors
1.1       cgd        16:  *    may be used to endorse or promote products derived from this software
                     17:  *    without specific prior written permission.
                     18:  *
                     19:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
                     20:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     21:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     22:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     23:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     24:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     25:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     26:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     27:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     28:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     29:  * SUCH DAMAGE.
                     30:  */
                     31:
1.8       lukem      32: #include <sys/cdefs.h>
1.1       cgd        33: #ifndef lint
1.8       lukem      34: __COPYRIGHT("@(#) Copyright (c) 1980, 1993\n\
                     35:        The Regents of the University of California.  All rights reserved.\n");
1.1       cgd        36: #endif /* not lint */
                     37:
                     38: #ifndef lint
1.5       cgd        39: #if 0
                     40: static char sccsid[] = "@(#)rain.c     8.1 (Berkeley) 5/31/93";
                     41: #else
1.18    ! rpaulo     42: __RCSID("$NetBSD: rain.c,v 1.17 2004/05/02 21:31:23 christos Exp $");
1.5       cgd        43: #endif
1.1       cgd        44: #endif /* not lint */
                     45:
                     46: /*
                     47:  * rain 11/3/1980 EPS/CITHEP
                     48:  * cc rain.c -o rain -O -ltermlib
                     49:  */
                     50:
                     51: #include <sys/types.h>
1.11      hubertf    52: #include <curses.h>
1.8       lukem      53: #include <err.h>
                     54: #include <signal.h>
1.1       cgd        55: #include <stdio.h>
1.8       lukem      56: #include <stdlib.h>
1.11      hubertf    57: #include <unistd.h>
1.17      christos   58: #include <errno.h>
                     59: #include <limits.h>
1.1       cgd        60:
1.17      christos   61: static volatile sig_atomic_t sig_caught = 0;
1.1       cgd        62:
1.17      christos   63: int main(int, char **);
                     64: static void onsig(int);
1.8       lukem      65:
                     66:
                     67: int
1.17      christos   68: main(int argc, char **argv)
1.1       cgd        69: {
1.8       lukem      70:        int x, y, j;
                     71:        long cols, lines;
1.11      hubertf    72:        unsigned int delay = 0;
1.17      christos   73:        unsigned long val = 0;
1.11      hubertf    74:        int ch;
1.17      christos   75:        char *ep;
1.1       cgd        76:        int xpos[5], ypos[5];
                     77:
1.17      christos   78:        while ((ch = getopt(argc, argv, "d:")) != -1)
1.11      hubertf    79:                switch (ch) {
                     80:                case 'd':
1.17      christos   81:                        val = strtoul(optarg, &ep, 0);
                     82:                        if (ep == optarg || *ep)
                     83:                                errx(1, "Invalid delay `%s'", optarg);
                     84:                        if (errno == ERANGE && val == ULONG_MAX)
                     85:                                err(1, "Invalid delay `%s'", optarg);
                     86:                        if (val >= 1000)
                     87:                                errx(1, "Invalid delay `%s' (1-999)", optarg);
                     88:                        delay = (unsigned int)val * 1000;  /* ms -> us */
1.11      hubertf    89:                        break;
                     90:                default:
1.17      christos   91:                        (void)fprintf(stderr, "Usage: %s [-d delay]\n",
                     92:                            getprogname());
                     93:                        return 1;
1.1       cgd        94:                }
1.11      hubertf    95:
1.18    ! rpaulo     96:        (void)initscr();
1.11      hubertf    97:        cols = COLS - 4;
                     98:        lines = LINES - 4;
                     99:
1.1       cgd       100:        (void)signal(SIGHUP, onsig);
                    101:        (void)signal(SIGINT, onsig);
                    102:        (void)signal(SIGTERM, onsig);
1.11      hubertf   103:
1.18    ! rpaulo    104:        (void)curs_set(0);
1.1       cgd       105:        for (j = 4; j >= 0; --j) {
                    106:                xpos[j] = random() % cols + 2;
                    107:                ypos[j] = random() % lines + 2;
                    108:        }
                    109:        for (j = 0;;) {
1.11      hubertf   110:                if (sig_caught) {
1.18    ! rpaulo    111:                        (void)endwin();
1.11      hubertf   112:                        exit(0);
                    113:                }
1.1       cgd       114:                x = random() % cols + 2;
                    115:                y = random() % lines + 2;
1.18    ! rpaulo    116:                (void)mvaddch(y, x, '.');
        !           117:                (void)mvaddch(ypos[j], xpos[j], 'o');
1.1       cgd       118:                if (!j--)
                    119:                        j = 4;
1.18    ! rpaulo    120:                (void)mvaddch(ypos[j], xpos[j], 'O');
1.1       cgd       121:                if (!j--)
                    122:                        j = 4;
1.18    ! rpaulo    123:                (void)mvaddch(ypos[j] - 1, xpos[j], '-');
        !           124:                (void)mvaddstr(ypos[j], xpos[j] - 1, "|.|");
        !           125:                (void)mvaddch(ypos[j] + 1, xpos[j], '-');
1.1       cgd       126:                if (!j--)
                    127:                        j = 4;
1.18    ! rpaulo    128:                (void)mvaddch(ypos[j] - 2, xpos[j], '-');
        !           129:                (void)mvaddstr(ypos[j] - 1, xpos[j] - 1, "/ \\");
        !           130:                (void)mvaddstr(ypos[j], xpos[j] - 2, "| O |");
        !           131:                (void)mvaddstr(ypos[j] + 1, xpos[j] - 1, "\\ /");
        !           132:                (void)mvaddch(ypos[j] + 2, xpos[j], '-');
1.1       cgd       133:                if (!j--)
                    134:                        j = 4;
1.18    ! rpaulo    135:                (void)mvaddch(ypos[j] - 2, xpos[j], ' ');
        !           136:                (void)mvaddstr(ypos[j] - 1, xpos[j] - 1, "   ");
        !           137:                (void)mvaddstr(ypos[j], xpos[j] - 2, "     ");
        !           138:                (void)mvaddstr(ypos[j] + 1, xpos[j] - 1, "   ");
        !           139:                (void)mvaddch(ypos[j] + 2, xpos[j], ' ');
1.1       cgd       140:                xpos[j] = x;
                    141:                ypos[j] = y;
1.18    ! rpaulo    142:                (void)refresh();
        !           143:                if (delay) (void)usleep(delay);
1.1       cgd       144:        }
                    145: }
                    146:
1.18    ! rpaulo    147: /* ARGSUSED */
1.17      christos  148: static void
                    149: onsig(int dummy __attribute__((__unused__)))
1.1       cgd       150: {
1.11      hubertf   151:        sig_caught = 1;
1.1       cgd       152: }

CVSweb <webmaster@jp.NetBSD.org>