BSD 4_2 development
[unix-history] / usr / src / games / rain.c
CommitLineData
9fdf2fe8
C
1
2static char sccsid[] = " rain.c 4.1 82/10/24 ";
3
4#include <stdio.h>
5#include <sgtty.h>
6#include <signal.h>
7/* rain 11/3/1980 EPS/CITHEP */
8/* cc rain.c -o rain -O -ltermlib */
9#define cursor(col,row) tputs(tgoto(CM,col,row),1,outc)
10outc(c)
11{
12 putchar(c);
13}
14extern char *UP;
15extern short ospeed;
16struct sgttyb old_tty;
17char *LL, *TE, *TI;
18main(argc,argv)
19int argc;
20char *argv[];
21{
22 extern fputchar();
23 char *malloc();
24 char *getenv();
25 char *tgetstr(), *tgoto();
26 float ranf();
27 int onsig();
28 register int x, y, j;
29 static int xpos[5], ypos[5];
30 register char *CM, *BC, *DN, *ND;
31 char *tcp;
32 register char *term;
33 char tcb[100];
34 struct sgttyb sg;
35 setbuf(stdout,malloc(BUFSIZ));
36 if (!(term=getenv("TERM"))) {
37 fprintf(stderr,"%s: TERM: parameter not set\n",*argv);
38 exit(1);
39 }
40 if (tgetent(malloc(1024),term)<=0) {
41 fprintf(stderr,"%s: %s: unknown terminal type\n",*argv,term);
42 exit(1);
43 }
44 tcp=tcb;
45 if (!(CM=tgetstr("cm",&tcp))) {
46 fprintf(stderr,"%s: terminal not capable of cursor motion\n",*argv);
47 exit(1);
48 }
49 if (!(BC=tgetstr("bc",&tcp))) BC="\b";
50 if (!(DN=tgetstr("dn",&tcp))) DN="\n";
51 if (!(ND=tgetstr("nd",&tcp))) ND=" ";
52 TE=tgetstr("te",&tcp);
53 TI=tgetstr("ti",&tcp);
54 UP=tgetstr("up",&tcp);
55 if (!(LL=tgetstr("ll",&tcp))) strcpy(LL=malloc(10),tgoto(CM,0,23));
56 gtty(1, &sg);
57 ospeed=sg.sg_ospeed;
58 for (j=SIGHUP;j<=SIGTERM;j++)
59 if (signal(j,SIG_IGN)!=SIG_IGN) signal(j,onsig);
60 gtty(1, &old_tty); /* save tty bits for exit */
61 gtty(1, &sg);
62 sg.sg_flags&=~(CRMOD|ECHO);
63 stty(1, &sg);
64 if (TI) fputs(TI,stdout);
65 tputs(tgetstr("cl",&tcp),1,fputchar);
66 fflush(stdout);
67 for (j=5;--j>=0;) {
68 xpos[j]=(int)(76.*ranf())+2;
69 ypos[j]=(int)(20.*ranf())+2;
70 }
71 for (j=0;;) {
72 x=(int)(76.*ranf())+2;
73 y=(int)(20.*ranf())+2;
74 cursor(x,y); fputchar('.');
75 cursor(xpos[j],ypos[j]); fputchar('o');
76 if (j==0) j=4; else --j;
77 cursor(xpos[j],ypos[j]); fputchar('O');
78 if (j==0) j=4; else --j;
79 cursor(xpos[j],ypos[j]-1);
80 fputchar('-');
81 fputs(DN,stdout); fputs(BC,stdout); fputs(BC,stdout);
82 fputs("|.|",stdout);
83 fputs(DN,stdout); fputs(BC,stdout); fputs(BC,stdout);
84 fputchar('-');
85 if (j==0) j=4; else --j;
86 cursor(xpos[j],ypos[j]-2); fputchar('-');
87 fputs(DN,stdout); fputs(BC,stdout); fputs(BC,stdout);
88 fputs("/ \\",stdout);
89 cursor(xpos[j]-2,ypos[j]);
90 fputs("| O |",stdout);
91 cursor(xpos[j]-1,ypos[j]+1);
92 fputs("\\ /",stdout);
93 fputs(DN,stdout); fputs(BC,stdout); fputs(BC,stdout);
94 fputchar('-');
95 if (j==0) j=4; else --j;
96 cursor(xpos[j],ypos[j]-2); fputchar(' ');
97 fputs(DN,stdout); fputs(BC,stdout); fputs(BC,stdout);
98 fputchar(' '); fputs(ND,stdout); fputchar(' ');
99 cursor(xpos[j]-2,ypos[j]);
100 fputchar(' '); fputs(ND,stdout); fputchar(' ');
101 fputs(ND,stdout); fputchar(' ');
102 cursor(xpos[j]-1,ypos[j]+1);
103 fputchar(' '); fputs(ND,stdout); fputchar(' ');
104 fputs(DN,stdout); fputs(BC,stdout); fputs(BC,stdout);
105 fputchar(' ');
106 xpos[j]=x; ypos[j]=y;
107 fflush(stdout);
108 }
109}
110onsig(n)
111int n;
112{
113 struct sgttyb sg;
114 fputs(LL, stdout);
115 if (TE) fputs(TE, stdout);
116 fflush(stdout);
117 stty(1, &old_tty);
118 kill(getpid(),n);
119 _exit(0);
120}
121fputchar(c)
122char c;
123{
124 putchar(c);
125}
126float ranf() {
127 return((float)rand()/2147483647.);
128}