1/*	$OpenBSD: win.c,v 1.7 2016/01/07 14:37:51 mestre Exp $	*/
2/*	$NetBSD: win.c,v 1.3 1995/04/22 10:59:41 cgd Exp $	*/
3
4/*
5 * Copyright (c) 1980, 1993
6 *	The Regents of the University of California.  All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 *    notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 *    notice, this list of conditions and the following disclaimer in the
15 *    documentation and/or other materials provided with the distribution.
16 * 3. Neither the name of the University nor the names of its contributors
17 *    may be used to endorse or promote products derived from this software
18 *    without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 * SUCH DAMAGE.
31 */
32
33#include <setjmp.h>
34#include <stdio.h>
35#include <unistd.h>
36
37#include "getpar.h"
38#include "trek.h"
39
40/*
41**  Signal game won
42**
43**	This routine prints out the win message, arranges to print out
44**	your score, tells you if you have a promotion coming to you,
45**	cleans up the current input line, and arranges to have you
46**	asked whether or not you want another game (via the longjmp()
47**	call).
48**
49**	Pretty straightforward, although the promotion algorithm is
50**	pretty off the wall.
51*/
52
53void
54win(void)
55{
56	long			s;
57	const struct cvntab	*p = NULL;
58	extern jmp_buf	env;
59
60	sleep(1);
61	printf("\nCongratulations, you have saved the Federation\n");
62	Move.endgame = 1;
63
64	/* print and return the score */
65	s = score();
66
67	/* decide if she gets a promotion */
68	if (Game.helps == 0 && Game.killb == 0 && Game.killinhab == 0 && 5 * Game.kills + Game.deaths < 100 &&
69			s >= 1000 && Ship.ship == ENTERPRISE)
70	{
71		printf("In fact, you are promoted one step in rank,\n");
72		if (Game.skill >= 6)
73			printf("to the exalted rank of Commodore Emeritus\n");
74		else
75		{
76			p = &Skitab[Game.skill - 1];
77			printf("from %s%s ", p->abrev, p->full);
78			p++;
79			printf("to %s%s\n", p->abrev, p->full);
80		}
81	}
82
83	/* clean out input, and request new game */
84	skiptonl(0);
85	longjmp(env, 1);
86}
87