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