|
|
1.1 root 1: /*
2: * Copyright (c) 1980 Regents of the University of California.
3: * All rights reserved. The Berkeley software License Agreement
4: * specifies the terms and conditions for redistribution.
5: */
6:
7: #ifndef lint
8: char copyright[] =
9: "@(#) Copyright (c) 1980 Regents of the University of California.\n\
10: All rights reserved.\n";
11: #endif not lint
12:
13: #ifndef lint
14: static char sccsid[] = "@(#)rain.c 5.2 (Berkeley) 7/15/85";
15: #endif not lint
16:
17: #define BSD
18:
19: #include <stdio.h>
20: #ifdef USG
21: #include <termio.h>
22: #else
23: #include <sgtty.h>
24: #endif
25: #include <signal.h>
26: /* rain 11/3/1980 EPS/CITHEP */
27: /* cc rain.c -o rain -O -ltermlib */
28: #define cursor(col,row) tputs(tgoto(CM,col,row),1,fputchar)
29: extern char *UP;
30: extern short ospeed;
31: #ifdef USG
32: struct termio old_tty;
33: #else
34: struct sgttyb old_tty;
35: #endif
36: char *LL, *TE, *TI;
37: main(argc,argv)
38: int argc;
39: char *argv[];
40: {
41: extern fputchar();
42: char *malloc();
43: char *getenv();
44: char *tgetstr(), *tgoto();
45: float ranf();
46: int onsig();
47: register int x, y, j;
48: static int xpos[5], ypos[5];
49: register char *CM, *BC, *DN, *ND;
50: int CO, LI;
51: char *tcp;
52: register char *term;
53: char tcb[100];
54: #ifdef USG
55: struct termio sg;
56: #else
57: struct sgttyb sg;
58: #endif
59: float cols, lines;
60:
61: setbuf(stdout,malloc(BUFSIZ));
62: if (!(term=getenv("TERM"))) {
63: fprintf(stderr,"%s: TERM: parameter not set\n",*argv);
64: exit(1);
65: }
66: if (tgetent(malloc(1024),term)<=0) {
67: fprintf(stderr,"%s: %s: unknown terminal type\n",*argv,term);
68: exit(1);
69: }
70: tcp=tcb;
71: if (!(CM=tgetstr("cm",&tcp))) {
72: fprintf(stderr,"%s: terminal not capable of cursor motion\n",*argv);
73: exit(1);
74: }
75: if (!(BC=tgetstr("bc",&tcp))) BC="\b";
76: if (!(DN=tgetstr("dn",&tcp))) DN="\n";
77: if (!(ND=tgetstr("nd",&tcp))) ND=" ";
78: if ((CO = tgetnum("co")) == -1)
79: CO = 80;
80: if ((LI = tgetnum("li")) == -1)
81: LI = 24;
82: cols = CO - 4;
83: lines = LI - 4;
84: TE=tgetstr("te",&tcp);
85: TI=tgetstr("ti",&tcp);
86: UP=tgetstr("up",&tcp);
87: if (!(LL=tgetstr("ll",&tcp))) strcpy(LL=malloc(10),tgoto(CM,0,23));
88: #ifdef USG
89: ioctl(1, TCGETA, &sg);
90: ospeed=sg.c_cflag&CBAUD;
91: #else
92: gtty(1, &sg);
93: ospeed=sg.sg_ospeed;
94: #endif
95: for (j=SIGHUP;j<=SIGTERM;j++)
96: if (signal(j,SIG_IGN)!=SIG_IGN) signal(j,onsig);
97: #ifdef USG
98: ioctl(1, TCGETA, &old_tty); /* save tty bits for exit */
99: ioctl(1, TCGETA, &sg);
100: sg.c_iflag&=~ICRNL;
101: sg.c_oflag&=~ONLCR;
102: sg.c_lflag&=~ECHO;
103: ioctl(1, TCSETAW, &sg);
104: #else
105: gtty(1, &old_tty); /* save tty bits for exit */
106: gtty(1, &sg);
107: sg.sg_flags&=~(CRMOD|ECHO);
108: stty(1, &sg);
109: #endif
110: if (TI) tputs(TI,1,fputchar);
111: tputs(tgetstr("cl",&tcp),1,fputchar);
112: fflush(stdout);
113: for (j=5;--j>=0;) {
114: xpos[j]=(int)(cols*ranf())+2;
115: ypos[j]=(int)(lines*ranf())+2;
116: }
117: for (j=0;;) {
118: x=(int)(cols*ranf())+2;
119: y=(int)(lines*ranf())+2;
120: cursor(x,y); fputchar('.');
121: cursor(xpos[j],ypos[j]); fputchar('o');
122: if (j==0) j=4; else --j;
123: cursor(xpos[j],ypos[j]); fputchar('O');
124: if (j==0) j=4; else --j;
125: cursor(xpos[j],ypos[j]-1);
126: fputchar('-');
127: tputs(DN,1,fputchar); tputs(BC,1,fputchar); tputs(BC,1,fputchar);
128: fputs("|.|",stdout);
129: tputs(DN,1,fputchar); tputs(BC,1,fputchar); tputs(BC,1,fputchar);
130: fputchar('-');
131: if (j==0) j=4; else --j;
132: cursor(xpos[j],ypos[j]-2); fputchar('-');
133: tputs(DN,1,fputchar); tputs(BC,1,fputchar); tputs(BC,1,fputchar);
134: fputs("/ \\",stdout);
135: cursor(xpos[j]-2,ypos[j]);
136: fputs("| O |",stdout);
137: cursor(xpos[j]-1,ypos[j]+1);
138: fputs("\\ /",stdout);
139: tputs(DN,1,fputchar); tputs(BC,1,fputchar); tputs(BC,1,fputchar);
140: fputchar('-');
141: if (j==0) j=4; else --j;
142: cursor(xpos[j],ypos[j]-2); fputchar(' ');
143: tputs(DN,1,fputchar); tputs(BC,1,fputchar); tputs(BC,1,fputchar);
144: fputchar(' '); tputs(ND,1,fputchar); fputchar(' ');
145: cursor(xpos[j]-2,ypos[j]);
146: fputchar(' '); tputs(ND,1,fputchar); fputchar(' ');
147: tputs(ND,1,fputchar); fputchar(' ');
148: cursor(xpos[j]-1,ypos[j]+1);
149: fputchar(' '); tputs(ND,1,fputchar); fputchar(' ');
150: tputs(DN,1,fputchar); tputs(BC,1,fputchar); tputs(BC,1,fputchar);
151: fputchar(' ');
152: xpos[j]=x; ypos[j]=y;
153: fflush(stdout);
154: }
155: }
156: onsig(n)
157: int n;
158: {
159: #ifdef USG
160: struct termio sg;
161: #else
162: struct sgttyb sg;
163: #endif
164: tputs(LL, 1, fputchar);
165: if (TE) tputs(TE, 1, fputchar);
166: fflush(stdout);
167: #ifdef USG
168: ioctl(1, TCSETAW, &old_tty);
169: #else
170: stty(1, &old_tty);
171: #endif
172: kill(getpid(),n);
173: _exit(0);
174: }
175: fputchar(c)
176: char c;
177: {
178: putchar(c);
179: }
180: float ranf() {
181: #ifdef BSD
182: return((float)rand()/2147483647.);
183: #else
184: return((float)rand()/32767.);
185: #endif
186: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.