Annotation of 42BSD/games/rain.c, revision 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.