|
|
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.