|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1980 Regents of the University of California. ! 3: * All rights reserved. ! 4: * ! 5: * Redistribution and use in source and binary forms are permitted ! 6: * provided that: (1) source distributions retain this entire copyright ! 7: * notice and comment, and (2) distributions including binaries display ! 8: * the following acknowledgement: ``This product includes software ! 9: * developed by the University of California, Berkeley and its contributors'' ! 10: * in the documentation or other materials provided with the distribution ! 11: * and in all advertising materials mentioning features or use of this ! 12: * software. Neither the name of the University nor the names of its ! 13: * contributors may be used to endorse or promote products derived ! 14: * from this software without specific prior written permission. ! 15: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR ! 16: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED ! 17: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 18: */ ! 19: ! 20: #ifndef lint ! 21: char copyright[] = ! 22: "@(#) Copyright (c) 1980 Regents of the University of California.\n\ ! 23: All rights reserved.\n"; ! 24: #endif /* not lint */ ! 25: ! 26: #ifndef lint ! 27: static char sccsid[] = "@(#)main.c 5.4 (Berkeley) 6/1/90"; ! 28: #endif /* not lint */ ! 29: ! 30: # include "robots.h" ! 31: # include <signal.h> ! 32: # include <ctype.h> ! 33: ! 34: main(ac, av) ! 35: int ac; ! 36: char **av; ! 37: { ! 38: register char *sp; ! 39: register bool bad_arg; ! 40: register bool show_only; ! 41: extern char *Scorefile; ! 42: extern int Max_per_uid; ! 43: extern char *rindex(); ! 44: ! 45: show_only = FALSE; ! 46: if (ac > 1) { ! 47: bad_arg = FALSE; ! 48: for (++av; ac > 1 && *av[0]; av++, ac--) ! 49: if (av[0][0] != '-') ! 50: if (isdigit(av[0][0])) ! 51: Max_per_uid = atoi(av[0]); ! 52: else { ! 53: setuid(getuid()); ! 54: setgid(getgid()); ! 55: Scorefile = av[0]; ! 56: # ifdef FANCY ! 57: sp = rindex(Scorefile, '/'); ! 58: if (sp == NULL) ! 59: sp = Scorefile; ! 60: if (strcmp(sp, "pattern_roll") == 0) ! 61: Pattern_roll = TRUE; ! 62: else if (strcmp(sp, "stand_still") == 0) ! 63: Stand_still = TRUE; ! 64: if (Pattern_roll || Stand_still) ! 65: Teleport = TRUE; ! 66: # endif ! 67: } ! 68: else ! 69: for (sp = &av[0][1]; *sp; sp++) ! 70: switch (*sp) { ! 71: case 's': ! 72: show_only = TRUE; ! 73: break; ! 74: case 'r': ! 75: Real_time = TRUE; ! 76: break; ! 77: case 'a': ! 78: Start_level = 4; ! 79: break; ! 80: case 'j': ! 81: Jump = TRUE; ! 82: break; ! 83: case 't': ! 84: Teleport = TRUE; ! 85: break; ! 86: default: ! 87: fprintf(stderr, "robots: uknown option: %c\n", *sp); ! 88: bad_arg = TRUE; ! 89: break; ! 90: } ! 91: if (bad_arg) { ! 92: exit(1); ! 93: /* NOTREACHED */ ! 94: } ! 95: } ! 96: ! 97: if (show_only) { ! 98: show_score(); ! 99: exit(0); ! 100: /* NOTREACHED */ ! 101: } ! 102: ! 103: initscr(); ! 104: signal(SIGINT, quit); ! 105: crmode(); ! 106: noecho(); ! 107: nonl(); ! 108: if (LINES != Y_SIZE || COLS != X_SIZE) { ! 109: if (LINES < Y_SIZE || COLS < X_SIZE) { ! 110: endwin(); ! 111: printf("Need at least a %dx%d screen\n", Y_SIZE, X_SIZE); ! 112: exit(1); ! 113: } ! 114: delwin(stdscr); ! 115: stdscr = newwin(Y_SIZE, X_SIZE, 0, 0); ! 116: } ! 117: ! 118: srand(getpid()); ! 119: if (Real_time) ! 120: signal(SIGALRM, move_robots); ! 121: do { ! 122: init_field(); ! 123: for (Level = Start_level; !Dead; Level++) { ! 124: make_level(); ! 125: play_level(); ! 126: } ! 127: move(My_pos.y, My_pos.x); ! 128: printw("AARRrrgghhhh...."); ! 129: refresh(); ! 130: score(); ! 131: } while (another()); ! 132: quit(); ! 133: } ! 134: ! 135: /* ! 136: * quit: ! 137: * Leave the program elegantly. ! 138: */ ! 139: quit() ! 140: { ! 141: extern int _putchar(); ! 142: ! 143: mvcur(0, COLS - 1, LINES - 1, 0); ! 144: if (CE) { ! 145: tputs(CE, 1, _putchar); ! 146: endwin(); ! 147: } ! 148: else { ! 149: endwin(); ! 150: putchar('\n'); ! 151: } ! 152: exit(0); ! 153: /* NOTREACHED */ ! 154: } ! 155: ! 156: /* ! 157: * another: ! 158: * See if another game is desired ! 159: */ ! 160: another() ! 161: { ! 162: register int y; ! 163: ! 164: #ifdef FANCY ! 165: if ((Stand_still || Pattern_roll) && !Newscore) ! 166: return TRUE; ! 167: #endif ! 168: ! 169: if (query("Another game?")) { ! 170: if (Full_clear) { ! 171: for (y = 1; y <= Num_scores; y++) { ! 172: move(y, 1); ! 173: clrtoeol(); ! 174: } ! 175: refresh(); ! 176: } ! 177: return TRUE; ! 178: } ! 179: return FALSE; ! 180: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.