Annotation of 43BSDReno/games/atc/main.c, revision 1.1.1.1

1.1       root        1: /*-
                      2:  * Copyright (c) 1990 The Regents of the University of California.
                      3:  * All rights reserved.
                      4:  *
                      5:  * This code is derived from software contributed to Berkeley by
                      6:  * Ed James.
                      7:  *
                      8:  * Redistribution and use in source and binary forms are permitted
                      9:  * provided that: (1) source distributions retain this entire copyright
                     10:  * notice and comment, and (2) distributions including binaries display
                     11:  * the following acknowledgement:  ``This product includes software
                     12:  * developed by the University of California, Berkeley and its contributors''
                     13:  * in the documentation or other materials provided with the distribution
                     14:  * and in all advertising materials mentioning features or use of this
                     15:  * software. Neither the name of the University nor the names of its
                     16:  * contributors may be used to endorse or promote products derived
                     17:  * from this software without specific prior written permission.
                     18:  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
                     19:  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
                     20:  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
                     21:  */
                     22: 
                     23: /*
                     24:  * Copyright (c) 1987 by Ed James, UC Berkeley.  All rights reserved.
                     25:  *
                     26:  * Copy permission is hereby granted provided that this notice is
                     27:  * retained on all partial or complete copies.
                     28:  *
                     29:  * For more info on this and all of my stuff, mail [email protected].
                     30:  */
                     31: 
                     32: #ifndef lint
                     33: char copyright[] =
                     34: "@(#) Copyright (c) 1990 The Regents of the University of California.\n\
                     35:  All rights reserved.\n";
                     36: #endif /* not lint */
                     37: 
                     38: #ifndef lint
                     39: static char sccsid[] = "@(#)main.c     5.3 (Berkeley) 4/30/90";
                     40: #endif /* not lint */
                     41: 
                     42: #include "include.h"
                     43: #include "pathnames.h"
                     44: 
                     45: main(ac, av)
                     46:        char    *av[];
                     47: {
                     48:        int                     seed;
                     49:        int                     f_usage = 0, f_list = 0, f_showscore = 0;
                     50:        int                     f_printpath = 0;
                     51:        char                    *file = NULL;
                     52:        char                    *name, *ptr;
                     53: #ifdef BSD
                     54:        struct itimerval        itv;
                     55: #endif
                     56:        extern int              update(), quit(), log_score();
                     57:        extern char             *default_game(), *okay_game();
                     58: 
                     59:        start_time = seed = time(0);
                     60: 
                     61:        name = *av++;
                     62:        while (*av) {
                     63: #ifndef SAVEDASH
                     64:                if (**av == '-') 
                     65:                        *++*av;
                     66:                else
                     67:                        break;
                     68: #endif
                     69:                ptr = *av++;
                     70:                while (*ptr) {
                     71:                        switch (*ptr) {
                     72:                        case '?':
                     73:                        case 'u':
                     74:                                f_usage++;
                     75:                                break;
                     76:                        case 'l':
                     77:                                f_list++;
                     78:                                break;
                     79:                        case 's':
                     80:                        case 't':
                     81:                                f_showscore++;
                     82:                                break;
                     83:                        case 'p':
                     84:                                f_printpath++;
                     85:                                break;
                     86:                        case 'r':
                     87:                                seed = atoi(*av);
                     88:                                av++;
                     89:                                break;
                     90:                        case 'f':
                     91:                        case 'g':
                     92:                                file = *av;
                     93:                                av++;
                     94:                                break;
                     95:                        default: 
                     96:                                fprintf(stderr, "Unknown option '%c'\n", *ptr,
                     97:                                        name);
                     98:                                f_usage++;
                     99:                                break;
                    100:                        }
                    101:                        ptr++;
                    102:                }
                    103:        }
                    104:        srandom(seed);
                    105: 
                    106:        if (f_usage)
                    107:                fprintf(stderr, 
                    108:                    "Usage: %s -[u?lstp] [-[gf] game_name] [-r random seed]\n",
                    109:                        name);
                    110:        if (f_showscore)
                    111:                log_score(1);
                    112:        if (f_list)
                    113:                list_games();
                    114:        if (f_printpath) {
                    115:                char    buf[100];
                    116: 
                    117:                strcpy(buf, _PATH_GAMES);
                    118:                buf[strlen(buf) - 1] = '\0';
                    119:                puts(buf);
                    120:        }
                    121:                
                    122:        if (f_usage || f_showscore || f_list || f_printpath)
                    123:                exit(0);
                    124: 
                    125:        if (file == NULL)
                    126:                file = default_game();
                    127:        else
                    128:                file = okay_game(file);
                    129: 
                    130:        if (file == NULL || read_file(file) < 0)
                    131:                exit(1);
                    132: 
                    133:        init_gr();
                    134:        setup_screen(sp);
                    135: 
                    136:        addplane();
                    137: 
                    138:        signal(SIGINT, quit);
                    139:        signal(SIGQUIT, quit);
                    140: #ifdef BSD
                    141:        signal(SIGTSTP, SIG_IGN);
                    142:        signal(SIGSTOP, SIG_IGN);
                    143: #endif
                    144:        signal(SIGHUP, log_score);
                    145:        signal(SIGTERM, log_score);
                    146: 
                    147: #ifdef BSD
                    148:        ioctl(fileno(stdin), TIOCGETP, &tty_start);
                    149:        bcopy(&tty_start, &tty_new, sizeof(tty_new));
                    150:        tty_new.sg_flags |= CBREAK;
                    151:        tty_new.sg_flags &= ~ECHO;
                    152:        ioctl(fileno(stdin), TIOCSETP, &tty_new);
                    153: #endif
                    154: 
                    155: #ifdef SYSV
                    156:        ioctl(fileno(stdin), TCGETA, &tty_start);
                    157:        bcopy(&tty_start, &tty_new, sizeof(tty_new));
                    158:        tty_new.c_lflag &= ~ICANON;
                    159:        tty_new.c_lflag &= ~ECHO;
                    160:        tty_new.c_cc[VMIN] = 1;
                    161:        tty_new.c_cc[VTIME] = 0;
                    162:        ioctl(fileno(stdin), TCSETAW, &tty_new);
                    163: #endif
                    164: 
                    165:        signal(SIGALRM, update);
                    166: 
                    167: #ifdef BSD
                    168:        itv.it_value.tv_sec = 0;
                    169:        itv.it_value.tv_usec = 1;
                    170:        itv.it_interval.tv_sec = sp->update_secs;
                    171:        itv.it_interval.tv_usec = 0;
                    172:        setitimer(ITIMER_REAL, &itv, NULL);
                    173: #endif
                    174: #ifdef SYSV
                    175:        alarm(sp->update_secs);
                    176: #endif
                    177: 
                    178:        for (;;) {
                    179:                if (getcommand() != 1)
                    180:                        planewin();
                    181:                else {
                    182: #ifdef BSD
                    183:                        itv.it_value.tv_sec = 0;
                    184:                        itv.it_value.tv_usec = 0;
                    185:                        setitimer(ITIMER_REAL, &itv, NULL);
                    186: #endif
                    187: #ifdef SYSV
                    188:                        alarm(0);
                    189: #endif
                    190: 
                    191:                        update();
                    192: 
                    193: #ifdef BSD
                    194:                        itv.it_value.tv_sec = sp->update_secs;
                    195:                        itv.it_value.tv_usec = 0;
                    196:                        itv.it_interval.tv_sec = sp->update_secs;
                    197:                        itv.it_interval.tv_usec = 0;
                    198:                        setitimer(ITIMER_REAL, &itv, NULL);
                    199: #endif
                    200: #ifdef SYSV
                    201:                        alarm(sp->update_secs);
                    202: #endif
                    203:                }
                    204:        }
                    205: }
                    206: 
                    207: read_file(s)
                    208:        char    *s;
                    209: {
                    210:        extern FILE     *yyin;
                    211:        int             retval;
                    212: 
                    213:        file = s;
                    214:        yyin = fopen(s, "r");
                    215:        if (yyin == NULL) {
                    216:                perror(s);
                    217:                return (-1);
                    218:        }
                    219:        retval = yyparse();
                    220:        fclose(yyin);
                    221: 
                    222:        if (retval != 0)
                    223:                return (-1);
                    224:        else
                    225:                return (0);
                    226: }
                    227: 
                    228: char   *
                    229: default_game()
                    230: {
                    231:        FILE            *fp;
                    232:        static char     file[256];
                    233:        char            line[256], games[256];
                    234: 
                    235:        strcpy(games, _PATH_GAMES);
                    236:        strcat(games, GAMES);
                    237: 
                    238:        if ((fp = fopen(games, "r")) == NULL) {
                    239:                perror(games);
                    240:                return (NULL);
                    241:        }
                    242:        if (fgets(line, sizeof(line), fp) == NULL) {
                    243:                fprintf(stderr, "%s: no default game available\n", games);
                    244:                return (NULL);
                    245:        }
                    246:        fclose(fp);
                    247:        line[strlen(line) - 1] = '\0';
                    248:        strcpy(file, _PATH_GAMES);
                    249:        strcat(file, line);
                    250:        return (file);
                    251: }
                    252: 
                    253: char   *
                    254: okay_game(s)
                    255:        char    *s;
                    256: {
                    257:        FILE            *fp;
                    258:        static char     file[256];
                    259:        char            *ret = NULL, line[256], games[256];
                    260: 
                    261:        strcpy(games, _PATH_GAMES);
                    262:        strcat(games, GAMES);
                    263: 
                    264:        if ((fp = fopen(games, "r")) == NULL) {
                    265:                perror(games);
                    266:                return (NULL);
                    267:        }
                    268:        while (fgets(line, sizeof(line), fp) != NULL) {
                    269:                line[strlen(line) - 1] = '\0';
                    270:                if (strcmp(s, line) == 0) {
                    271:                        strcpy(file, _PATH_GAMES);
                    272:                        strcat(file, line);
                    273:                        ret = file;
                    274:                        break;
                    275:                }
                    276:        }
                    277:        fclose(fp);
                    278:        if (ret == NULL) {
                    279:                test_mode = 1;
                    280:                ret = s;
                    281:                fprintf(stderr, "%s: %s: game not found\n", games, s);
                    282:                fprintf(stderr, "Your score will not be logged.\n");
                    283:                sleep(2);       /* give the guy time to read it */
                    284:        }
                    285:        return (ret);
                    286: }
                    287: 
                    288: list_games()
                    289: {
                    290:        FILE            *fp;
                    291:        char            line[256], games[256];
                    292:        int             num_games = 0;
                    293: 
                    294:        strcpy(games, _PATH_GAMES);
                    295:        strcat(games, GAMES);
                    296: 
                    297:        if ((fp = fopen(games, "r")) == NULL) {
                    298:                perror(games);
                    299:                return (-1);
                    300:        }
                    301:        puts("available games:");
                    302:        while (fgets(line, sizeof(line), fp) != NULL) {
                    303:                printf("        %s", line);
                    304:                num_games++;
                    305:        }
                    306:        fclose(fp);
                    307:        if (num_games == 0) {
                    308:                fprintf(stderr, "%s: no games available\n", games);
                    309:                return (-1);
                    310:        }
                    311:        return (0);
                    312: }

unix.superglobalmegacorp.com

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