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

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

unix.superglobalmegacorp.com

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