Annotation of researchv10no/games/rain/rain.c, revision 1.1.1.1

1.1       root        1: #include <stdio.h>
                      2: #include <sgtty.h>
                      3: #include <signal.h>
                      4: /* rain 11/3/1980 EPS/CITHEP */
                      5: /* cc rain.c -o rain -O -ltermlib */
                      6: #define cursor(col,row) fputs(tgoto(CM,col,row),stdout)
                      7: extern char *UP;
                      8: extern short ospeed;
                      9: struct sgttyb old_tty;
                     10: char *LL, *TE, *TI;
                     11: main(argc,argv)
                     12: int argc;
                     13: char *argv[];
                     14: {
                     15:     extern fputchar();
                     16:     char *malloc();
                     17:     char *getenv();
                     18:     char *tgetstr(), *tgoto();
                     19:     float ranf();
                     20:     int onsig();
                     21:     register int x, y, j;
                     22:     static int xpos[5], ypos[5];
                     23:     register char *CM, *BC, *DN, *ND;
                     24:     char *tcp;
                     25:     register char *term;
                     26:     char tcb[100];
                     27:     struct sgttyb sg;
                     28:     setbuf(stdout,malloc(BUFSIZ));
                     29:     if (!(term=getenv("TERM"))) {
                     30:        fprintf(stderr,"%s: TERM: parameter not set\n",*argv);
                     31:        exit(1);
                     32:     }
                     33:     if (tgetent(malloc(1024),term)<=0) {
                     34:        fprintf(stderr,"%s: %s: unknown terminal type\n",*argv,term);
                     35:        exit(1);
                     36:     }
                     37:     tcp=tcb;
                     38:     if (!(CM=tgetstr("cm",&tcp))) {
                     39:        fprintf(stderr,"%s: terminal not capable of cursor motion\n",*argv);
                     40:        exit(1);
                     41:     }
                     42:     if (!(BC=tgetstr("bc",&tcp))) BC="\b";
                     43:     if (!(DN=tgetstr("dn",&tcp))) DN="\n";
                     44:     if (!(ND=tgetstr("nd",&tcp))) ND=" ";
                     45:     TE=tgetstr("te",&tcp);
                     46:     TI=tgetstr("ti",&tcp);
                     47:     UP=tgetstr("up",&tcp);
                     48:     if (!(LL=tgetstr("ll",&tcp))) strcpy(LL=malloc(10),tgoto(CM,0,23));
                     49:     gtty(1, &sg);
                     50:     ospeed=sg.sg_ospeed;
                     51:     for (j=SIGHUP;j<=SIGTERM;j++)
                     52:        if (signal(j,SIG_IGN)!=SIG_IGN) signal(j,onsig);
                     53:     gtty(1, &old_tty); /* save tty bits for exit */
                     54:     gtty(1, &sg);
                     55:     sg.sg_flags&=~(CRMOD|ECHO);
                     56:     stty(1, &sg);
                     57:     if (TI) fputs(TI,stdout);
                     58:     tputs(tgetstr("cl",&tcp),1,fputchar);
                     59:     fflush(stdout);
                     60:     for (j=5;--j>=0;) {
                     61:        xpos[j]=(int)(76.*ranf())+2;
                     62:        ypos[j]=(int)(20.*ranf())+2;
                     63:     }
                     64:     for (j=0;;) {
                     65:        x=(int)(76.*ranf())+2;
                     66:        y=(int)(20.*ranf())+2;
                     67:        cursor(x,y); fputchar('.');
                     68:        cursor(xpos[j],ypos[j]); fputchar('o');
                     69:        if (j==0) j=4; else --j;
                     70:        cursor(xpos[j],ypos[j]); fputchar('O');
                     71:        if (j==0) j=4; else --j;
                     72:        cursor(xpos[j],ypos[j]-1);
                     73:        fputchar('-');
                     74:        fputs(DN,stdout); fputs(BC,stdout); fputs(BC,stdout);
                     75:        fputs("|.|",stdout);
                     76:        fputs(DN,stdout); fputs(BC,stdout); fputs(BC,stdout);
                     77:        fputchar('-');
                     78:        if (j==0) j=4; else --j;
                     79:        cursor(xpos[j],ypos[j]-2); fputchar('-');
                     80:        fputs(DN,stdout); fputs(BC,stdout); fputs(BC,stdout);
                     81:        fputs("/ \\",stdout);
                     82:        cursor(xpos[j]-2,ypos[j]);
                     83:        fputs("| O |",stdout);
                     84:        cursor(xpos[j]-1,ypos[j]+1);
                     85:        fputs("\\ /",stdout);
                     86:        fputs(DN,stdout); fputs(BC,stdout); fputs(BC,stdout);
                     87:        fputchar('-');
                     88:        if (j==0) j=4; else --j;
                     89:        cursor(xpos[j],ypos[j]-2); fputchar(' ');
                     90:        fputs(DN,stdout); fputs(BC,stdout); fputs(BC,stdout);
                     91:        fputchar(' '); fputs(ND,stdout); fputchar(' ');
                     92:        cursor(xpos[j]-2,ypos[j]);
                     93:        fputchar(' '); fputs(ND,stdout); fputchar(' ');
                     94:        fputs(ND,stdout); fputchar(' ');
                     95:        cursor(xpos[j]-1,ypos[j]+1);
                     96:        fputchar(' '); fputs(ND,stdout); fputchar(' ');
                     97:        fputs(DN,stdout); fputs(BC,stdout); fputs(BC,stdout);
                     98:        fputchar(' ');
                     99:        xpos[j]=x; ypos[j]=y;
                    100:        fflush(stdout);
                    101:     }
                    102: }
                    103: onsig(n)
                    104: int n;
                    105: {
                    106:     struct sgttyb sg;
                    107:     fputs(LL, stdout);
                    108:     if (TE) fputs(TE, stdout);
                    109:     fflush(stdout);
                    110:     stty(1, &old_tty);
                    111:     kill(getpid(),n);
                    112:     _exit(0);
                    113: }
                    114: fputchar(c)
                    115: char c;
                    116: {
                    117:     putchar(c);
                    118: }
                    119: float ranf() {
                    120:     return((float)lrand()/2147483647.);
                    121: }

unix.superglobalmegacorp.com

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