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