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

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

unix.superglobalmegacorp.com

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