Annotation of 43BSD/games/rain.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.