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: }

Defined functions

fputchar defined in line 175; used 44 times
main defined in line 37; never used
onsig defined in line 156; used 2 times
ranf defined in line 180; used 5 times

Defined variables

LL defined in line 36; used 3 times
TE defined in line 36; used 3 times
TI defined in line 36; used 3 times
copyright defined in line 8; never used
old_tty defined in line 34; used 4 times
sccsid defined in line 14; never used

Defined macros

BSD defined in line 17; used 1 times
cursor defined in line 28; used 10 times
Last modified: 1985-07-16
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1431
Valid CSS Valid XHTML 1.0 Strict