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