date and time created 82/10/24 18:26:54 by mckusick
authorKirk McKusick <mckusick@ucbvax.Berkeley.EDU>
Mon, 25 Oct 1982 10:26:54 +0000 (02:26 -0800)
committerKirk McKusick <mckusick@ucbvax.Berkeley.EDU>
Mon, 25 Oct 1982 10:26:54 +0000 (02:26 -0800)
SCCS-vsn: games/rain/rain.c 4.1

usr/src/games/rain/rain.c [new file with mode: 0644]

diff --git a/usr/src/games/rain/rain.c b/usr/src/games/rain/rain.c
new file mode 100644 (file)
index 0000000..9abdc4a
--- /dev/null
@@ -0,0 +1,128 @@
+
+static char sccsid[] = "       rain.c  4.1     82/10/24        ";
+
+#include <stdio.h>
+#include <sgtty.h>
+#include <signal.h>
+/* rain 11/3/1980 EPS/CITHEP */
+/* cc rain.c -o rain -O -ltermlib */
+#define cursor(col,row) tputs(tgoto(CM,col,row),1,outc)
+outc(c)
+{
+       putchar(c);
+}
+extern char *UP;
+extern short ospeed;
+struct sgttyb old_tty;
+char *LL, *TE, *TI;
+main(argc,argv)
+int argc;
+char *argv[];
+{
+    extern fputchar();
+    char *malloc();
+    char *getenv();
+    char *tgetstr(), *tgoto();
+    float ranf();
+    int onsig();
+    register int x, y, j;
+    static int xpos[5], ypos[5];
+    register char *CM, *BC, *DN, *ND;
+    char *tcp;
+    register char *term;
+    char tcb[100];
+    struct sgttyb sg;
+    setbuf(stdout,malloc(BUFSIZ));
+    if (!(term=getenv("TERM"))) {
+       fprintf(stderr,"%s: TERM: parameter not set\n",*argv);
+       exit(1);
+    }
+    if (tgetent(malloc(1024),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=" ";
+    TE=tgetstr("te",&tcp);
+    TI=tgetstr("ti",&tcp);
+    UP=tgetstr("up",&tcp);
+    if (!(LL=tgetstr("ll",&tcp))) strcpy(LL=malloc(10),tgoto(CM,0,23));
+    gtty(1, &sg);
+    ospeed=sg.sg_ospeed;
+    for (j=SIGHUP;j<=SIGTERM;j++)
+       if (signal(j,SIG_IGN)!=SIG_IGN) signal(j,onsig);
+    gtty(1, &old_tty); /* save tty bits for exit */
+    gtty(1, &sg);
+    sg.sg_flags&=~(CRMOD|ECHO);
+    stty(1, &sg);
+    if (TI) fputs(TI,stdout);
+    tputs(tgetstr("cl",&tcp),1,fputchar);
+    fflush(stdout);
+    for (j=5;--j>=0;) {
+       xpos[j]=(int)(76.*ranf())+2;
+       ypos[j]=(int)(20.*ranf())+2;
+    }
+    for (j=0;;) {
+       x=(int)(76.*ranf())+2;
+       y=(int)(20.*ranf())+2;
+       cursor(x,y); fputchar('.');
+       cursor(xpos[j],ypos[j]); fputchar('o');
+       if (j==0) j=4; else --j;
+       cursor(xpos[j],ypos[j]); fputchar('O');
+       if (j==0) j=4; else --j;
+       cursor(xpos[j],ypos[j]-1);
+       fputchar('-');
+       fputs(DN,stdout); fputs(BC,stdout); fputs(BC,stdout);
+       fputs("|.|",stdout);
+       fputs(DN,stdout); fputs(BC,stdout); fputs(BC,stdout);
+       fputchar('-');
+       if (j==0) j=4; else --j;
+       cursor(xpos[j],ypos[j]-2); fputchar('-');
+       fputs(DN,stdout); fputs(BC,stdout); fputs(BC,stdout);
+       fputs("/ \\",stdout);
+       cursor(xpos[j]-2,ypos[j]);
+       fputs("| O |",stdout);
+       cursor(xpos[j]-1,ypos[j]+1);
+       fputs("\\ /",stdout);
+       fputs(DN,stdout); fputs(BC,stdout); fputs(BC,stdout);
+       fputchar('-');
+       if (j==0) j=4; else --j;
+       cursor(xpos[j],ypos[j]-2); fputchar(' ');
+       fputs(DN,stdout); fputs(BC,stdout); fputs(BC,stdout);
+       fputchar(' '); fputs(ND,stdout); fputchar(' ');
+       cursor(xpos[j]-2,ypos[j]);
+       fputchar(' '); fputs(ND,stdout); fputchar(' ');
+       fputs(ND,stdout); fputchar(' ');
+       cursor(xpos[j]-1,ypos[j]+1);
+       fputchar(' '); fputs(ND,stdout); fputchar(' ');
+       fputs(DN,stdout); fputs(BC,stdout); fputs(BC,stdout);
+       fputchar(' ');
+       xpos[j]=x; ypos[j]=y;
+       fflush(stdout);
+    }
+}
+onsig(n)
+int n;
+{
+    struct sgttyb sg;
+    fputs(LL, stdout);
+    if (TE) fputs(TE, stdout);
+    fflush(stdout);
+    stty(1, &old_tty);
+    kill(getpid(),n);
+    _exit(0);
+}
+fputchar(c)
+char c;
+{
+    putchar(c);
+}
+float ranf() {
+    return((float)rand()/2147483647.);
+}