summaryrefslogtreecommitdiffstats
path: root/rain
diff options
context:
space:
mode:
authorcgd <cgd@NetBSD.org>1993-03-21 09:45:37 +0000
committercgd <cgd@NetBSD.org>1993-03-21 09:45:37 +0000
commit77e3814f0c0e3dea4d0032e25666f77e6f83bfff (patch)
tree7eddfcbf3dd12089e71dc3fafb0a106c5c5766c7 /rain
parente81d63576b2e46ab90da7d75fa155ea57ee4d32e (diff)
downloadbsdgames-darwin-77e3814f0c0e3dea4d0032e25666f77e6f83bfff.tar.gz
bsdgames-darwin-77e3814f0c0e3dea4d0032e25666f77e6f83bfff.tar.zst
bsdgames-darwin-77e3814f0c0e3dea4d0032e25666f77e6f83bfff.zip
initial import of 386bsd-0.1 sources
Diffstat (limited to 'rain')
-rw-r--r--rain/Makefile8
-rw-r--r--rain/rain.654
-rw-r--r--rain/rain.c245
3 files changed, 307 insertions, 0 deletions
diff --git a/rain/Makefile b/rain/Makefile
new file mode 100644
index 00000000..4e01dca9
--- /dev/null
+++ b/rain/Makefile
@@ -0,0 +1,8 @@
+# @(#)Makefile 5.3 (Berkeley) 5/11/90
+
+PROG= rain
+MAN6= rain.0
+DPADD= ${LIBTERM} ${LIBCOMPAT}
+LDADD= -ltermcap -lcompat
+
+.include <bsd.prog.mk>
diff --git a/rain/rain.6 b/rain/rain.6
new file mode 100644
index 00000000..3aecbdd7
--- /dev/null
+++ b/rain/rain.6
@@ -0,0 +1,54 @@
+.\" Copyright (c) 1989 The Regents of the University of California.
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 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
+.\" SUCH DAMAGE.
+.\"
+.\" @(#)rain.6 6.3 (Berkeley) 6/23/90
+.\"
+.TH RAIN 6 "June 23, 1990"
+.UC 4
+.SH NAME
+rain \- animated raindrops display
+.SH SYNOPSIS
+rain
+.SH DESCRIPTION
+.PP
+.ad b
+.IR Rain 's
+display is modeled after the VAX/VMS program of the same name.
+The terminal has to be set for 9600 baud to obtain the proper effect.
+.PP
+As with all programs that use
+.IR termcap ,
+the TERM environment
+variable must be set (and exported) to the type of the terminal being used.
+.SH FILES
+/etc/termcap
+.SH AUTHOR
+Eric P. Scott
diff --git a/rain/rain.c b/rain/rain.c
new file mode 100644
index 00000000..1b126975
--- /dev/null
+++ b/rain/rain.c
@@ -0,0 +1,245 @@
+/*
+ * Copyright (c) 1980 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 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
+ * SUCH DAMAGE.
+ */
+
+#ifndef lint
+char copyright[] =
+"@(#) Copyright (c) 1980 Regents of the University of California.\n\
+ All rights reserved.\n";
+#endif /* not lint */
+
+#ifndef lint
+static char sccsid[] = "@(#)rain.c 5.6 (Berkeley) 2/28/91";
+#endif /* not lint */
+
+/*
+ * rain 11/3/1980 EPS/CITHEP
+ * cc rain.c -o rain -O -ltermlib
+ */
+
+#include <sys/types.h>
+#include <stdio.h>
+#ifdef USG
+#include <termio.h>
+#else
+#include <sgtty.h>
+#endif
+#include <signal.h>
+
+#define cursor(c, r) tputs(tgoto(CM, c, r), 1, fputchar)
+
+#ifdef USG
+static struct termio sg, old_tty;
+#else
+static struct sgttyb sg, old_tty;
+#endif
+
+int fputchar();
+char *LL, *TE, *tgoto();
+
+main(argc, argv)
+ int argc;
+ char **argv;
+{
+ extern short ospeed;
+ extern char *UP;
+ register int x, y, j;
+ register char *CM, *BC, *DN, *ND, *term;
+ char *TI, *tcp, *mp, tcb[100],
+ *malloc(), *getenv(), *strcpy(), *tgetstr();
+ long cols, lines, random();
+ int xpos[5], ypos[5];
+ static void onsig();
+
+ if (!(term = getenv("TERM"))) {
+ fprintf(stderr, "%s: TERM: parameter not set\n", *argv);
+ exit(1);
+ }
+ if (!(mp = malloc((u_int)1024))) {
+ fprintf(stderr, "%s: out of space.\n", *argv);
+ exit(1);
+ }
+ if (tgetent(mp, term) <= 0) {
+ fprintf(stderr, "%s: %s: unknown terminal type\n", *argv, term);
+ exit(1);
+ }
+ tcp = tcb;
+ if (!(CM = tgetstr("cm", &tcp))) {
+ fprintf(stderr, "%s: terminal not capable of cursor motion\n", *argv);
+ exit(1);
+ }
+ if (!(BC = tgetstr("bc", &tcp)))
+ BC = "\b";
+ if (!(DN = tgetstr("dn", &tcp)))
+ DN = "\n";
+ if (!(ND = tgetstr("nd", &tcp)))
+ ND = " ";
+ if ((cols = tgetnum("co")) == -1)
+ cols = 80;
+ if ((lines = tgetnum("li")) == -1)
+ lines = 24;
+ cols -= 4;
+ lines -= 4;
+ 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);
+ exit(1);
+ }
+ (void)strcpy(LL, tgoto(CM, 0, 23));
+ }
+#ifdef USG
+ ioctl(1, TCGETA, &sg);
+ ospeed = sg.c_cflag&CBAUD;
+#else
+ gtty(1, &sg);
+ ospeed = sg.sg_ospeed;
+#endif
+ (void)signal(SIGHUP, onsig);
+ (void)signal(SIGINT, onsig);
+ (void)signal(SIGQUIT, onsig);
+ (void)signal(SIGSTOP, onsig);
+ (void)signal(SIGTSTP, onsig);
+ (void)signal(SIGTERM, onsig);
+#ifdef USG
+ ioctl(1, TCGETA, &old_tty); /* save tty bits for exit */
+ ioctl(1, TCGETA, &sg);
+ sg.c_iflag &= ~ICRNL;
+ sg.c_oflag &= ~ONLCR;
+ sg.c_lflag &= ~ECHO;
+ ioctl(1, TCSETAW, &sg);
+#else
+ gtty(1, &old_tty); /* save tty bits for exit */
+ gtty(1, &sg);
+ sg.sg_flags &= ~(CRMOD|ECHO);
+ stty(1, &sg);
+#endif
+ if (TI)
+ tputs(TI, 1, fputchar);
+ tputs(tgetstr("cl", &tcp), 1, fputchar);
+ (void)fflush(stdout);
+ for (j = 4; j >= 0; --j) {
+ xpos[j] = random() % cols + 2;
+ ypos[j] = random() % lines + 2;
+ }
+ for (j = 0;;) {
+ x = random() % cols + 2;
+ y = random() % lines + 2;
+ cursor(x, y);
+ fputchar('.');
+ cursor(xpos[j], ypos[j]);
+ fputchar('o');
+ if (!j--)
+ j = 4;
+ cursor(xpos[j], ypos[j]);
+ fputchar('O');
+ if (!j--)
+ j = 4;
+ cursor(xpos[j], ypos[j] - 1);
+ fputchar('-');
+ tputs(DN, 1, fputchar);
+ tputs(BC, 1, fputchar);
+ tputs(BC, 1, fputchar);
+ fputs("|.|", stdout);
+ tputs(DN, 1, fputchar);
+ tputs(BC, 1, fputchar);
+ tputs(BC, 1, fputchar);
+ fputchar('-');
+ if (!j--)
+ j = 4;
+ cursor(xpos[j], ypos[j] - 2);
+ fputchar('-');
+ tputs(DN, 1, fputchar);
+ tputs(BC, 1, fputchar);
+ tputs(BC, 1, fputchar);
+ fputs("/ \\", stdout);
+ cursor(xpos[j] - 2, ypos[j]);
+ fputs("| O |", stdout);
+ cursor(xpos[j] - 1, ypos[j] + 1);
+ fputs("\\ /", stdout);
+ tputs(DN, 1, fputchar);
+ tputs(BC, 1, fputchar);
+ tputs(BC, 1, fputchar);
+ fputchar('-');
+ if (!j--)
+ j = 4;
+ cursor(xpos[j], ypos[j] - 2);
+ fputchar(' ');
+ tputs(DN, 1, fputchar);
+ tputs(BC, 1, fputchar);
+ tputs(BC, 1, fputchar);
+ fputchar(' ');
+ tputs(ND, 1, fputchar);
+ fputchar(' ');
+ cursor(xpos[j] - 2, ypos[j]);
+ fputchar(' ');
+ tputs(ND, 1, fputchar);
+ fputchar(' ');
+ tputs(ND, 1, fputchar);
+ fputchar(' ');
+ cursor(xpos[j] - 1, ypos[j] + 1);
+ fputchar(' ');
+ tputs(ND, 1, fputchar);
+ fputchar(' ');
+ tputs(DN, 1, fputchar);
+ tputs(BC, 1, fputchar);
+ tputs(BC, 1, fputchar);
+ fputchar(' ');
+ xpos[j] = x;
+ ypos[j] = y;
+ (void)fflush(stdout);
+ }
+}
+
+static void
+onsig()
+{
+ tputs(LL, 1, fputchar);
+ if (TE)
+ tputs(TE, 1, fputchar);
+ (void)fflush(stdout);
+#ifdef USG
+ ioctl(1, TCSETAW, &old_tty);
+#else
+ stty(1, &old_tty);
+#endif
+ exit(0);
+}
+
+static
+fputchar(c)
+ char c;
+{
+ putchar(c);
+}