|
|
1.1 root 1:
2: static 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)
10: outc(c)
11: {
12: putchar(c);
13: }
14: extern char *UP;
15: extern short ospeed;
16: struct sgttyb old_tty;
17: char *LL, *TE, *TI;
18: main(argc,argv)
19: int argc;
20: char *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: }
110: onsig(n)
111: int 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: }
121: fputchar(c)
122: char c;
123: {
124: putchar(c);
125: }
126: float ranf() {
127: return((float)rand()/2147483647.);
128: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.