* Copyright (c) 1980 Regents of the University of California.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
"@(#) Copyright (c) 1980 Regents of the University of California.\n\
static char sccsid
[] = "@(#)rain.c 5.6 (Berkeley) 2/28/91";
* rain 11/3/1980 EPS/CITHEP
* cc rain.c -o rain -O -ltermlib
#define cursor(c, r) tputs(tgoto(CM, c, r), 1, fputchar)
static struct termio sg
, old_tty
;
static struct sgttyb sg
, old_tty
;
register char *CM
, *BC
, *DN
, *ND
, *term
;
char *TI
, *tcp
, *mp
, tcb
[100],
*malloc(), *getenv(), *strcpy(), *tgetstr();
long cols
, lines
, random();
if (!(term
= getenv("TERM"))) {
fprintf(stderr
, "%s: TERM: parameter not set\n", *argv
);
if (!(mp
= malloc((u_int
)1024))) {
fprintf(stderr
, "%s: out of space.\n", *argv
);
if (tgetent(mp
, term
) <= 0) {
fprintf(stderr
, "%s: %s: unknown terminal type\n", *argv
, term
);
if (!(CM
= tgetstr("cm", &tcp
))) {
fprintf(stderr
, "%s: terminal not capable of cursor motion\n", *argv
);
if (!(BC
= tgetstr("bc", &tcp
)))
if (!(DN
= tgetstr("dn", &tcp
)))
if (!(ND
= tgetstr("nd", &tcp
)))
if ((cols
= tgetnum("co")) == -1)
if ((lines
= tgetnum("li")) == -1)
TE
= tgetstr("te", &tcp
);
TI
= tgetstr("ti", &tcp
);
UP
= tgetstr("up", &tcp
);
if (!(LL
= tgetstr("ll", &tcp
))) {
if (!(LL
= malloc((u_int
)10))) {
fprintf(stderr
, "%s: out of space.\n", *argv
);
(void)strcpy(LL
, tgoto(CM
, 0, 23));
ospeed
= sg
.c_cflag
&CBAUD
;
(void)signal(SIGHUP
, onsig
);
(void)signal(SIGINT
, onsig
);
(void)signal(SIGQUIT
, onsig
);
(void)signal(SIGSTOP
, onsig
);
(void)signal(SIGTSTP
, onsig
);
(void)signal(SIGTERM
, onsig
);
ioctl(1, TCGETA
, &old_tty
); /* save tty bits for exit */
gtty(1, &old_tty
); /* save tty bits for exit */
sg
.sg_flags
&= ~(CRMOD
|ECHO
);
tputs(tgetstr("cl", &tcp
), 1, fputchar
);
for (j
= 4; j
>= 0; --j
) {
xpos
[j
] = random() % cols
+ 2;
ypos
[j
] = random() % lines
+ 2;
y
= random() % lines
+ 2;
cursor(xpos
[j
], ypos
[j
]);
cursor(xpos
[j
], ypos
[j
]);
cursor(xpos
[j
], ypos
[j
] - 1);
cursor(xpos
[j
], ypos
[j
] - 2);
cursor(xpos
[j
] - 2, ypos
[j
]);
cursor(xpos
[j
] - 1, ypos
[j
] + 1);
cursor(xpos
[j
], ypos
[j
] - 2);
cursor(xpos
[j
] - 2, ypos
[j
]);
cursor(xpos
[j
] - 1, ypos
[j
] + 1);
ioctl(1, TCSETAW
, &old_tty
);