1 /* 2 * Copyright (c) 1980, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 3. All advertising materials mentioning features or use of this software 14 * must display the following acknowledgement: 15 * This product includes software developed by the University of 16 * California, Berkeley and its contributors. 17 * 4. Neither the name of the University nor the names of its contributors 18 * may be used to endorse or promote products derived from this software 19 * without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31 * SUCH DAMAGE. 32 * 33 * @(#) Copyright (c) 1980, 1993 The Regents of the University of California. All rights reserved. 34 * @(#)main.c 8.1 (Berkeley) 5/31/93 35 * $FreeBSD: src/games/robots/main.c,v 1.7 1999/11/30 03:49:18 billf Exp $ 36 * $DragonFly: src/games/robots/main.c,v 1.2 2003/06/17 04:25:24 dillon Exp $ 37 */ 38 39 # include "robots.h" 40 # include <signal.h> 41 # include <stdlib.h> 42 # include <ctype.h> 43 44 main(ac, av) 45 int ac; 46 char **av; 47 { 48 char *sp; 49 bool bad_arg; 50 bool show_only; 51 extern char *Scorefile; 52 extern int Max_per_uid; 53 void quit(); 54 55 show_only = FALSE; 56 if (ac > 1) { 57 bad_arg = FALSE; 58 for (++av; ac > 1 && *av[0]; av++, ac--) 59 if (av[0][0] != '-') 60 if (isdigit(av[0][0])) 61 Max_per_uid = atoi(av[0]); 62 else { 63 Scorefile = av[0]; 64 # ifdef FANCY 65 sp = rindex(Scorefile, '/'); 66 if (sp == NULL) 67 sp = Scorefile; 68 if (strcmp(sp, "pattern_roll") == 0) 69 Pattern_roll = TRUE; 70 else if (strcmp(sp, "stand_still") == 0) 71 Stand_still = TRUE; 72 if (Pattern_roll || Stand_still) 73 Teleport = TRUE; 74 # endif 75 } 76 else 77 for (sp = &av[0][1]; *sp; sp++) 78 switch (*sp) { 79 case 's': 80 show_only = TRUE; 81 break; 82 case 'r': 83 Real_time = TRUE; 84 break; 85 case 'a': 86 Start_level = 4; 87 break; 88 case 'j': 89 Jump = TRUE; 90 break; 91 case 't': 92 Teleport = TRUE; 93 break; 94 default: 95 fprintf(stderr, "robots: uknown option: %c\n", *sp); 96 bad_arg = TRUE; 97 break; 98 } 99 if (bad_arg) { 100 exit(1); 101 /* NOTREACHED */ 102 } 103 } 104 105 if (show_only) { 106 show_score(); 107 exit(0); 108 /* NOTREACHED */ 109 } 110 111 initscr(); 112 signal(SIGINT, quit); 113 crmode(); 114 noecho(); 115 nonl(); 116 if (LINES != Y_SIZE || COLS != X_SIZE) { 117 if (LINES < Y_SIZE || COLS < X_SIZE) { 118 endwin(); 119 printf("Need at least a %dx%d screen\n", 120 Y_SIZE, X_SIZE); 121 exit(1); 122 } 123 delwin(stdscr); 124 stdscr = newwin(Y_SIZE, X_SIZE, 0, 0); 125 } 126 127 srandomdev(); 128 if (Real_time) 129 signal(SIGALRM, move_robots); 130 do { 131 init_field(); 132 for (Level = Start_level; !Dead; Level++) { 133 make_level(); 134 play_level(); 135 } 136 move(My_pos.y, My_pos.x); 137 printw("AARRrrgghhhh...."); 138 refresh(); 139 score(); 140 } while (another()); 141 quit(); 142 } 143 144 void 145 __cputchar(ch) 146 int ch; 147 { 148 (void)putchar(ch); 149 } 150 151 /* 152 * quit: 153 * Leave the program elegantly. 154 */ 155 void 156 quit() 157 { 158 endwin(); 159 exit(0); 160 /* NOTREACHED */ 161 } 162 163 /* 164 * another: 165 * See if another game is desired 166 */ 167 another() 168 { 169 int y; 170 171 #ifdef FANCY 172 if ((Stand_still || Pattern_roll) && !Newscore) 173 return TRUE; 174 #endif 175 176 if (query("Another game?")) { 177 if (Full_clear) { 178 for (y = 1; y <= Num_scores; y++) { 179 move(y, 1); 180 clrtoeol(); 181 } 182 refresh(); 183 } 184 return TRUE; 185 } 186 return FALSE; 187 } 188