strip on install
[unix-history] / usr / src / games / rain / rain.c
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.);
}